js: add draft support for -skip-unused (hello_world.v works)
parent
1d2b56d71d
commit
6c728cf389
|
@ -67,10 +67,20 @@ fn get_all_commands() []Command {
|
||||||
line: '$vexe -o - examples/hello_world.v | grep "#define V_COMMIT_HASH" > /dev/null'
|
line: '$vexe -o - examples/hello_world.v | grep "#define V_COMMIT_HASH" > /dev/null'
|
||||||
okmsg: 'V prints the generated source code to stdout with `-o -` .'
|
okmsg: 'V prints the generated source code to stdout with `-o -` .'
|
||||||
}
|
}
|
||||||
}
|
res << Command{
|
||||||
res << Command{
|
line: '$vexe run examples/v_script.vsh > /dev/null'
|
||||||
line: '$vexe run examples/v_script.vsh'
|
okmsg: 'V can run the .VSH script file examples/v_script.vsh'
|
||||||
okmsg: 'V can run the .VSH script file examples/v_script.vsh'
|
}
|
||||||
|
res << Command{
|
||||||
|
line: '$vexe -b js -o hw.js examples/hello_world.v'
|
||||||
|
okmsg: 'V compiles hello_world.v on the JS backend'
|
||||||
|
rmfile: 'hw.js'
|
||||||
|
}
|
||||||
|
res << Command{
|
||||||
|
line: '$vexe -skip-unused -b js -o hw_skip_unused.js examples/hello_world.v'
|
||||||
|
okmsg: 'V compiles hello_world.v on the JS backend, with -skip-unused'
|
||||||
|
rmfile: 'hw_skip_unused.js'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
res << Command{
|
res << Command{
|
||||||
line: '$vexe -o vtmp cmd/v'
|
line: '$vexe -o vtmp cmd/v'
|
||||||
|
|
|
@ -381,6 +381,27 @@ fn (g &JsGen) fn_gen_type(it &ast.FnDecl) FnGenType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn (mut g JsGen) is_used_by_main(node ast.FnDecl) bool {
|
||||||
|
mut is_used_by_main := true
|
||||||
|
if g.pref.skip_unused {
|
||||||
|
fkey := node.fkey()
|
||||||
|
is_used_by_main = g.table.used_fns[fkey]
|
||||||
|
$if trace_skip_unused_fns ? {
|
||||||
|
println('> is_used_by_main: $is_used_by_main | node.name: $node.name | fkey: $fkey | node.is_method: $node.is_method')
|
||||||
|
}
|
||||||
|
if !is_used_by_main {
|
||||||
|
$if trace_skip_unused_fns_in_js_code ? {
|
||||||
|
g.writeln('// trace_skip_unused_fns_in_js_code, $node.name, fkey: $fkey')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$if trace_skip_unused_fns_in_js_code ? {
|
||||||
|
g.writeln('// trace_skip_unused_fns_in_js_code, $node.name, fkey: $node.fkey()')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return is_used_by_main
|
||||||
|
}
|
||||||
|
|
||||||
fn (mut g JsGen) gen_fn_decl(it ast.FnDecl) {
|
fn (mut g JsGen) gen_fn_decl(it ast.FnDecl) {
|
||||||
res := g.fn_gen_type(it)
|
res := g.fn_gen_type(it)
|
||||||
if it.language == .js {
|
if it.language == .js {
|
||||||
|
@ -389,6 +410,12 @@ fn (mut g JsGen) gen_fn_decl(it ast.FnDecl) {
|
||||||
if g.inside_builtin {
|
if g.inside_builtin {
|
||||||
g.builtin_fns << it.name
|
g.builtin_fns << it.name
|
||||||
}
|
}
|
||||||
|
if !g.is_used_by_main(it) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if it.should_be_skipped {
|
||||||
|
return
|
||||||
|
}
|
||||||
cur_fn_decl := g.fn_decl
|
cur_fn_decl := g.fn_decl
|
||||||
g.gen_method_decl(it, res)
|
g.gen_method_decl(it, res)
|
||||||
g.fn_decl = cur_fn_decl
|
g.fn_decl = cur_fn_decl
|
||||||
|
|
Loading…
Reference in New Issue