Skip to content

Commit 0b0f380

Browse files
authored
v: cleanup CallKind (#26182)
1 parent 19c86f5 commit 0b0f380

5 files changed

Lines changed: 81 additions & 31 deletions

File tree

‎cmd/tools/vast/vast.v‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,7 @@ fn (t Tree) fn_decl(node ast.FnDecl) &Node {
589589
obj.add_terse('name', t.string_node(node.name))
590590
obj.add_terse('short_name', t.string_node(node.short_name))
591591
obj.add_terse('mod', t.string_node(node.mod))
592+
obj.add_terse('kind', t.enum_node(node.kind))
592593
obj.add_terse('is_deprecated', t.bool_node(node.is_deprecated))
593594
obj.add_terse('is_pub', t.bool_node(node.is_pub))
594595
obj.add_terse('is_c_variadic', t.bool_node(node.is_c_variadic))
@@ -1603,6 +1604,7 @@ fn (t Tree) call_expr(node ast.CallExpr) &Node {
16031604
obj.add_terse('name', t.string_node(node.name))
16041605
obj.add_terse('const_name', t.string_node(node.const_name))
16051606
obj.add_terse('language', t.enum_node(node.language))
1607+
obj.add_terse('kind', t.enum_node(node.kind))
16061608
obj.add_terse('left_type', t.type_node(node.left_type))
16071609
obj.add_terse('receiver_type', t.type_node(node.receiver_type))
16081610
obj.add_terse('return_type', t.type_node(node.return_type))

‎vlib/v/ast/ast.v‎

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -836,6 +836,8 @@ pub enum CallKind {
836836
all
837837
count
838838
clone
839+
clone_to_depth
840+
trim
839841
contains
840842
index
841843
first
@@ -849,8 +851,9 @@ pub enum CallKind {
849851
reverse
850852
reverse_in_place
851853
panic
852-
jsondecode
853-
jsonencode
854+
json_decode
855+
json_encode
856+
json_encode_pretty
854857
repeat
855858
type_name
856859
type_idx
@@ -865,6 +868,15 @@ pub enum CallKind {
865868
error
866869
grow_cap
867870
grow_len
871+
eprint
872+
eprintln
873+
print
874+
println
875+
close
876+
pointers
877+
push_many
878+
malloc
879+
writeln
868880
}
869881

870882
// function or method call expr

‎vlib/v/checker/fn.v‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -954,8 +954,8 @@ fn (mut c Checker) needs_unwrap_generic_type(typ ast.Type) bool {
954954

955955
fn (mut c Checker) fn_call(mut node ast.CallExpr, mut continue_check &bool) ast.Type {
956956
is_va_arg := node.kind == .va_arg
957-
is_json_decode := node.kind == .jsondecode
958-
is_json_encode := node.kind == .jsonencode
957+
is_json_decode := node.kind == .json_decode
958+
is_json_encode := node.kind == .json_encode
959959
mut fn_name := node.name
960960
if node.is_static_method {
961961
// resolve static call T.name()
@@ -1033,7 +1033,7 @@ fn (mut c Checker) fn_call(mut node ast.CallExpr, mut continue_check &bool) ast.
10331033
}
10341034
}
10351035
panic('unreachable')
1036-
} else if args_len > 0 && node.args[0].typ.has_flag(.shared_f) && node.kind == .jsonencode {
1036+
} else if args_len > 0 && node.args[0].typ.has_flag(.shared_f) && node.kind == .json_encode {
10371037
c.error('json.encode cannot handle shared data', node.pos)
10381038
return ast.void_type
10391039
} else if args_len > 0 && (is_va_arg || is_json_decode) {

‎vlib/v/gen/c/fn.v‎

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ fn (mut g Gen) fn_decl(node ast.FnDecl) {
6868
if !g.is_used_by_main(node) {
6969
return
7070
}
71-
if g.is_builtin_mod && g.pref.gc_mode == .boehm_leak && node.name == 'malloc' {
71+
if g.is_builtin_mod && g.pref.gc_mode == .boehm_leak && node.kind == .malloc {
7272
g.definitions.write_string('#define builtin___v_malloc GC_MALLOC\n')
7373
return
7474
}
@@ -1043,7 +1043,7 @@ fn (mut g Gen) call_expr(node ast.CallExpr) {
10431043
}
10441044
}
10451045
if node.is_method && !node.is_field {
1046-
if g.pref.experimental && node.args.len > 0 && node.name == 'writeln'
1046+
if g.pref.experimental && node.args.len > 0 && node.kind == .writeln
10471047
&& node.args[0].expr is ast.StringInterLiteral
10481048
&& g.table.sym(node.receiver_type).name == 'strings.Builder' {
10491049
g.string_inter_literal_sb_optimized(node)
@@ -1220,7 +1220,7 @@ fn (mut g Gen) gen_array_method_call(node ast.CallExpr, left_type ast.Type, left
12201220
.delete, .drop, .delete_last, .delete_many {
12211221
g.write('builtin__array_${node.name}(')
12221222
g.gen_arg_from_type(left_type, node.left)
1223-
if node.name != 'delete_last' {
1223+
if node.kind != .delete_last {
12241224
g.write(', ')
12251225
g.expr(node.args[0].expr)
12261226
if node.kind == .delete_many {
@@ -1240,12 +1240,12 @@ fn (mut g Gen) gen_array_method_call(node ast.CallExpr, left_type ast.Type, left
12401240
.first, .last, .pop_left, .pop {
12411241
mut noscan := ''
12421242
array_info := left_sym.info as ast.Array
1243-
if node.name in ['pop_left', 'pop'] {
1243+
if node.kind in [.pop_left, .pop] {
12441244
noscan = g.check_noscan(array_info.elem_type)
12451245
}
12461246
return_type_str := g.styp(node.return_type)
12471247
g.write('(*(${return_type_str}*)builtin__array_${node.name}${noscan}(')
1248-
if node.name in ['pop_left', 'pop'] {
1248+
if node.kind in [.pop_left, .pop] {
12491249
g.gen_arg_from_type(left_type, node.left)
12501250
} else {
12511251
if node.left_type.is_ptr() {
@@ -1271,7 +1271,7 @@ fn (mut g Gen) gen_array_method_call(node ast.CallExpr, left_type ast.Type, left
12711271
}
12721272
to_static := if is_range_slice { '_static' } else { '' }
12731273
g.write('builtin__array_${node.name}${to_static}${to_depth}(')
1274-
if node.name == 'clone' {
1274+
if node.kind == .clone {
12751275
if is_range_slice {
12761276
if node.left_type.is_ptr() {
12771277
g.write('*'.repeat(node.left_type.nr_muls()))
@@ -1503,11 +1503,11 @@ fn (mut g Gen) resolve_return_type(node ast.CallExpr) ast.Type {
15031503
fn (mut g Gen) resolve_receiver_name(node ast.CallExpr, unwrapped_rec_type ast.Type, final_left_sym ast.TypeSymbol,
15041504
left_sym ast.TypeSymbol, typ_sym ast.TypeSymbol) string {
15051505
mut receiver_type_name := util.no_dots(g.cc_type(unwrapped_rec_type, false))
1506-
if final_left_sym.kind == .map && node.name in ['clone', 'move'] {
1506+
if final_left_sym.kind == .map && node.kind in [.clone, .move] {
15071507
receiver_type_name = 'map'
15081508
}
15091509
if final_left_sym.kind == .array && !(left_sym.kind == .alias && left_sym.has_method(node.name))
1510-
&& node.name in ['clear', 'repeat', 'sort_with_compare', 'sorted_with_compare', 'push_many', 'trim', 'first', 'last', 'pop_left', 'pop', 'clone', 'clone_to_depth', 'reverse', 'slice', 'pointers'] {
1510+
&& node.kind in [.clear, .repeat, .sort_with_compare, .sorted_with_compare, .push_many, .trim, .first, .last, .pop_left, .pop, .clone, .clone_to_depth, .reverse, .slice, .pointers] {
15111511
if !(left_sym.info is ast.Alias && typ_sym.has_method(node.name)) {
15121512
// `array_Xyz_clone` => `builtin__array_clone`
15131513
receiver_type_name = 'array'
@@ -1555,11 +1555,11 @@ fn (mut g Gen) unwrap_receiver_type(node ast.CallExpr) (ast.Type, &ast.TypeSymbo
15551555
}
15561556
mut typ_sym := g.table.sym(unwrapped_rec_type)
15571557
// non-option alias type that undefined this method (not include `str`) need to use parent type
1558-
if !left_type.has_flag(.option) && mut typ_sym.info is ast.Alias && node.name != 'str'
1558+
if !left_type.has_flag(.option) && mut typ_sym.info is ast.Alias && node.kind != .str
15591559
&& !typ_sym.has_method(node.name) {
15601560
unwrapped_rec_type = typ_sym.info.parent_type
15611561
typ_sym = g.table.sym(unwrapped_rec_type)
1562-
} else if mut typ_sym.info is ast.Array && !typ_sym.has_method(node.name) && node.name != 'str' {
1562+
} else if mut typ_sym.info is ast.Array && !typ_sym.has_method(node.name) && node.kind != .str {
15631563
typ := g.table.unaliased_type(typ_sym.info.elem_type)
15641564
typ_idx := g.table.find_type_idx(g.table.array_name(typ))
15651565
if typ_idx > 0 {
@@ -1649,7 +1649,7 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
16491649
return
16501650
}
16511651
}
1652-
if left_sym.kind == .array_fixed && node.name == 'wait' {
1652+
if left_sym.kind == .array_fixed && node.kind == .wait {
16531653
g.gen_fixed_array_wait(node)
16541654
return
16551655
}
@@ -1702,7 +1702,7 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
17021702
} else if receiver_type_name in ['int_literal', 'float_literal', 'vint_t'] {
17031703
name = 'builtin__${name}'
17041704
}
1705-
if left_sym.kind == .chan && node.name in ['close', 'try_pop', 'try_push'] {
1705+
if left_sym.kind == .chan && node.kind in [.close, .try_pop, .try_push] {
17061706
name = 'sync__Channel_${node.name}'
17071707
}
17081708
mut is_range_slice := false
@@ -1742,14 +1742,14 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
17421742
}
17431743
}
17441744
// g.generate_tmp_autofree_arg_vars(node, name)
1745-
if !node.receiver_type.is_ptr() && left_type.is_ptr() && node.name == 'str' {
1745+
if !node.receiver_type.is_ptr() && left_type.is_ptr() && node.kind == .str {
17461746
if left_type.is_int_valptr() {
17471747
g.write('builtin__ptr_str(')
17481748
} else {
17491749
g.gen_expr_to_string(node.left, left_type)
17501750
return
17511751
}
1752-
} else if node.receiver_type.is_ptr() && left_type.is_ptr() && node.name == 'str'
1752+
} else if node.receiver_type.is_ptr() && left_type.is_ptr() && node.kind == .str
17531753
&& !left_sym.has_method('str') {
17541754
g.gen_expr_to_string(node.left, left_type)
17551755
return
@@ -1764,7 +1764,7 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
17641764
is_interface := left_sym.kind == .interface
17651765
&& g.table.sym(node.receiver_type).kind == .interface
17661766
if node.receiver_type.is_ptr() && (!left_type.is_ptr()
1767-
|| node.from_embed_types.len != 0 || (left_type.has_flag(.shared_f) && node.name != 'str')) {
1767+
|| node.from_embed_types.len != 0 || (left_type.has_flag(.shared_f) && node.kind != .str)) {
17681768
// The receiver is a reference, but the caller provided a value
17691769
// Add `&` automatically.
17701770
// TODO: same logic in call_args()
@@ -1792,12 +1792,12 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
17921792
cast_n++
17931793
}
17941794
}
1795-
} else if !node.receiver_type.is_ptr() && left_type.is_ptr() && node.name != 'str'
1795+
} else if !node.receiver_type.is_ptr() && left_type.is_ptr() && node.kind != .str
17961796
&& node.from_embed_types.len == 0 {
17971797
if !left_type.has_flag(.shared_f) {
17981798
g.write('*'.repeat(left_type.nr_muls()))
17991799
}
1800-
} else if !is_range_slice && node.from_embed_types.len == 0 && node.name != 'str' {
1800+
} else if !is_range_slice && node.from_embed_types.len == 0 && node.kind != .str {
18011801
diff := left_type.nr_muls() - node.receiver_type.nr_muls()
18021802
if diff > 0 {
18031803
g.write('*'.repeat(diff))
@@ -1963,13 +1963,13 @@ fn (mut g Gen) fn_call(node ast.CallExpr) {
19631963
}
19641964
}
19651965
}
1966-
is_print := name in ['print', 'println', 'eprint', 'eprintln', 'panic']
1966+
is_print := node.kind in [.print, .println, .eprint, .eprintln, .panic]
19671967
print_method := name
1968-
is_json_encode := name == 'json.encode'
1969-
is_json_encode_pretty := name == 'json.encode_pretty'
1970-
is_json_decode := name == 'json.decode'
1968+
is_json_encode := node.kind == .json_encode
1969+
is_json_encode_pretty := node.kind == .json_encode_pretty
1970+
is_json_decode := node.kind == .json_decode
19711971
is_json_fn := is_json_encode || is_json_encode_pretty || is_json_decode
1972-
is_va_arg := name == 'C.va_arg'
1972+
is_va_arg := node.kind == .va_arg
19731973
mut json_type_str := ''
19741974
mut json_obj := ''
19751975
if is_json_fn {
@@ -2028,7 +2028,7 @@ fn (mut g Gen) fn_call(node ast.CallExpr) {
20282028
g.write(', ${typ})')
20292029
return
20302030
}
2031-
if name == '__addr' {
2031+
if node.kind == .addr {
20322032
name = '&'
20332033
}
20342034
if node.language == .c {
@@ -2582,7 +2582,7 @@ fn (mut g Gen) call_args(node ast.CallExpr) {
25822582
}
25832583
} else {
25842584
if use_tmp_var_autofree {
2585-
n := if node.kind == .jsondecode { i + 2 } else { i + 1 }
2585+
n := if node.kind == .json_decode { i + 2 } else { i + 1 }
25862586
// TODO: copypasta, move to an inline fn
25872587
fn_name := node.name.replace('.', '_')
25882588
name := '_arg_expr_${fn_name}_${n}_${node.pos.pos}'

‎vlib/v/parser/fn.v‎

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,12 @@ fn (mut p Parser) call_kind(fn_name string) ast.CallKind {
187187
'clone' {
188188
.clone
189189
}
190+
'trim' {
191+
.trim
192+
}
193+
'clone_to_depth' {
194+
.clone_to_depth
195+
}
190196
'contains' {
191197
.contains
192198
}
@@ -227,10 +233,31 @@ fn (mut p Parser) call_kind(fn_name string) ast.CallKind {
227233
.panic
228234
}
229235
'json.decode' {
230-
.jsondecode
236+
.json_decode
231237
}
232238
'json.encode' {
233-
.jsonencode
239+
.json_encode
240+
}
241+
'json.encode_pretty' {
242+
.json_encode_pretty
243+
}
244+
'print' {
245+
.print
246+
}
247+
'println' {
248+
.println
249+
}
250+
'eprint' {
251+
.eprint
252+
}
253+
'eprintln' {
254+
.eprintln
255+
}
256+
'close' {
257+
.close
258+
}
259+
'pointers' {
260+
.pointers
234261
}
235262
'repeat' {
236263
.repeat
@@ -274,6 +301,15 @@ fn (mut p Parser) call_kind(fn_name string) ast.CallKind {
274301
'grow_cap' {
275302
.grow_cap
276303
}
304+
'push_many' {
305+
.push_many
306+
}
307+
'malloc' {
308+
.malloc
309+
}
310+
'writeln' {
311+
.writeln
312+
}
277313
else {
278314
.unknown
279315
}

0 commit comments

Comments
 (0)