v / vlib / v2 / ast / flat_lock_expr_test.v
49 lines · 46 sloc · 1.15 KB · b384d9b10920270ef9a04eca8044157ae01aa4c1
Raw
1// Copyright (c) 2026 Alexander Medvednikov. All rights reserved.
2// Use of this source code is governed by an MIT license
3// that can be found in the LICENSE file.
4module ast
5
6fn lock_expr_ident(name string) Expr {
7 return Expr(Ident{
8 name: name
9 })
10}
11
12fn lock_expr_stmt(value string) Stmt {
13 return Stmt(ExprStmt{
14 expr: Expr(BasicLiteral{
15 kind: .number
16 value: value
17 })
18 })
19}
20
21fn test_lock_expr_counts_survive_flat_roundtrip() {
22 mut b := new_flat_builder()
23 b.append_file(File{
24 name: 'lock_expr.v'
25 mod: 'lock_expr'
26 stmts: [
27 Stmt(ModuleStmt{
28 name: 'lock_expr'
29 }),
30 Stmt(ExprStmt{
31 expr: Expr(LockExpr{
32 lock_exprs: [lock_expr_ident('a'), lock_expr_ident('b')]
33 rlock_exprs: [lock_expr_ident('c')]
34 stmts: [lock_expr_stmt('1'), lock_expr_stmt('2')]
35 })
36 }),
37 ]
38 })
39 files := b.flat.to_files()
40 assert files.len == 1
41 assert files[0].stmts.len == 2
42 assert files[0].stmts[1] is ExprStmt
43 expr_stmt := files[0].stmts[1] as ExprStmt
44 assert expr_stmt.expr is LockExpr
45 lock_expr := expr_stmt.expr as LockExpr
46 assert lock_expr.lock_exprs.len == 2
47 assert lock_expr.rlock_exprs.len == 1
48 assert lock_expr.stmts.len == 2
49}
50