Skip to content

Commit 0c9a61e

Browse files
authored
parser: avoid closure auto import for field names (#26808)
1 parent 6b3842b commit 0c9a61e

2 files changed

Lines changed: 29 additions & 9 deletions

File tree

‎vlib/v/parser/parser.v‎

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2240,15 +2240,7 @@ fn (mut p Parser) dot_expr(left ast.Expr) ast.Expr {
22402240
} else {
22412241
p.name_error = true
22422242
}
2243-
if ast.builtin_array_generic_methods_matcher.matches(field_name) {
2244-
if p.file_backend_mode == .v || p.file_backend_mode == .c {
2245-
p.register_auto_import('builtin.closure')
2246-
}
2247-
p.open_scope()
2248-
defer(fn) {
2249-
p.close_scope()
2250-
}
2251-
}
2243+
is_builtin_array_generic_method := ast.builtin_array_generic_methods_matcher.matches(field_name)
22522244
// ! in mutable methods
22532245
if p.tok.kind == .not && p.peek_tok.kind == .lpar {
22542246
p.next()
@@ -2270,6 +2262,15 @@ fn (mut p Parser) dot_expr(left ast.Expr) ast.Expr {
22702262
}
22712263
}
22722264
if p.tok.kind == .lpar {
2265+
if is_builtin_array_generic_method {
2266+
if p.file_backend_mode == .v || p.file_backend_mode == .c {
2267+
p.register_auto_import('builtin.closure')
2268+
}
2269+
p.open_scope()
2270+
defer(fn) {
2271+
p.close_scope()
2272+
}
2273+
}
22732274
p.next()
22742275
args := p.call_args()
22752276
p.check(.rpar)

‎vlib/v/parser/v_parser_test.v‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,3 +477,22 @@ x end_comment'
477477
y comment line2
478478
y end_comment'
479479
}
480+
481+
fn test_no_closure_auto_import_for_field_names() {
482+
vpref := &pref.Preferences{}
483+
for field_name in ast.builtin_array_generic_methods {
484+
source := 'struct Sample {
485+
mut:
486+
${field_name} u32
487+
}
488+
489+
fn use_field(mut sample Sample) {
490+
_ = sample.${field_name}
491+
sample.${field_name}++
492+
}
493+
'
494+
mut table := ast.new_table()
495+
prog := parse_text(source, '', mut table, .skip_comments, vpref)
496+
assert 'builtin.closure' !in prog.auto_imports
497+
}
498+
}

0 commit comments

Comments
 (0)