v2 / vlib / v / parser / check_cross_variables_regression_test.v
64 lines · 57 sloc · 1.45 KB · 08287f1783e1b5ac709402fcdeabdd56a9820eaa
Raw
1module parser
2
3import v.ast
4import v.checker
5import v.pref
6
7fn 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
27fn test_script_mode_allows_method_declarations_after_statements() {
28 source := '
29struct Msg {}
30
31ms := &Msg{}
32
33fn (m &Msg) one() {
34 m.two()
35}
36
37fn (m &Msg) two() {}
38
39ms.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