| 1 | module parser |
| 2 | |
| 3 | import v.ast |
| 4 | import v.checker |
| 5 | import v.pref |
| 6 | |
| 7 | fn test_check_cross_variables_skips_unresolved_call_arg_stringification() { |
| 8 | mut p := Parser{} |
| 9 | left := [ast.Expr(ast.Ident{ |
| 10 | name: 'size' |
| 11 | }), ast.Expr(ast.Ident{ |
| 12 | name: 'align' |
| 13 | })] |
| 14 | right := ast.Expr(ast.CallExpr{ |
| 15 | name: 'type_size' |
| 16 | args: [ |
| 17 | ast.CallArg{ |
| 18 | expr: ast.ArrayInit{ |
| 19 | elem_type: ast.Type(45) |
| 20 | } |
| 21 | }, |
| 22 | ] |
| 23 | }) |
| 24 | assert !p.check_cross_variables(left, right) |
| 25 | } |
| 26 | |
| 27 | fn test_script_mode_allows_method_declarations_after_statements() { |
| 28 | source := ' |
| 29 | struct Msg {} |
| 30 | |
| 31 | ms := &Msg{} |
| 32 | |
| 33 | fn (m &Msg) one() { |
| 34 | m.two() |
| 35 | } |
| 36 | |
| 37 | fn (m &Msg) two() {} |
| 38 | |
| 39 | ms.one() |
| 40 | ' |
| 41 | mut table := ast.new_table() |
| 42 | mut vpref := pref.new_preferences() |
| 43 | vpref.is_script = true |
| 44 | mut prog := parse_text(source, 'issue_7280.vsh', mut table, .skip_comments, vpref) |
| 45 | assert prog.errors.len == 0 |
| 46 | assert prog.stmts.len == 5 |
| 47 | assert prog.stmts[0] is ast.Module |
| 48 | assert prog.stmts[1] is ast.StructDecl |
| 49 | assert prog.stmts[2] is ast.FnDecl |
| 50 | assert prog.stmts[3] is ast.FnDecl |
| 51 | assert prog.stmts[4] is ast.FnDecl |
| 52 | first_method := prog.stmts[2] as ast.FnDecl |
| 53 | second_method := prog.stmts[3] as ast.FnDecl |
| 54 | main_fn := prog.stmts[4] as ast.FnDecl |
| 55 | assert first_method.is_method |
| 56 | assert first_method.short_name == 'one' |
| 57 | assert second_method.is_method |
| 58 | assert second_method.short_name == 'two' |
| 59 | assert main_fn.is_main |
| 60 | assert main_fn.stmts.len == 2 |
| 61 | mut checker_ := checker.new_checker(table, vpref) |
| 62 | checker_.check(mut prog) |
| 63 | assert checker_.errors.len == 0 |
| 64 | } |
| 65 | |