v2 / vlib / v / gen / js / comptime.v
32 lines · 27 sloc · 881 bytes · d2174e47a5aaf0a61645ef1413f6191f0fc3dcf6
Raw
1module js
2
3import v.ast
4
5fn (mut g JsGen) gen_branch_context_string() string {
6 mut arr := []string{}
7
8 // gen `T=int,X=string`
9 if g.fn_decl != unsafe { nil } && g.fn_decl.generic_names.len > 0
10 && g.fn_decl.generic_names.len == g.cur_concrete_types.len {
11 for i in 0 .. g.fn_decl.generic_names.len {
12 arr << g.fn_decl.generic_names[i] + '=' +
13 g.table.type_to_str(g.cur_concrete_types[i]).replace('main.', '')
14 }
15 }
16
17 // TODO: support comptime `$for`
18 return arr.join(',')
19}
20
21fn (mut g JsGen) comptime_if_result(branch ast.IfBranch) bool {
22 idx_str := g.gen_branch_context_string() + '|id=${branch.id}|'
23 $if debug_comptime_branch_context ? {
24 g.write('/* ${idx_str} */')
25 }
26 if comptime_is_true := g.table.comptime_is_true[idx_str] {
27 return comptime_is_true.val
28 } else {
29 panic('checker error: cond result idx string not found => [${idx_str}]')
30 return false
31 }
32}
33