diff options
| author | DanielGavin <danielgavin5@hotmail.com> | 2021-03-30 16:27:18 +0200 |
|---|---|---|
| committer | DanielGavin <danielgavin5@hotmail.com> | 2021-03-30 16:27:18 +0200 |
| commit | dab985f991e5276bd83d7d8b4ab4a80cddcfe6b8 (patch) | |
| tree | b87f371ec3ffc321ff37f5453fca251ef9b3d555 /src | |
| parent | 228bda2c98624c9ae60f40b9be00c6c77f0a58c0 (diff) | |
index when declarations that don't use ODIN_OS
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/ast.odin | 48 |
1 files changed, 31 insertions, 17 deletions
diff --git a/src/common/ast.odin b/src/common/ast.odin index 4e4e707..f85a1ce 100644 --- a/src/common/ast.odin +++ b/src/common/ast.odin @@ -33,6 +33,22 @@ GlobalExpr :: struct { docs: ^ast.Comment_Group, } +collect_value_decl :: proc(exprs: ^[dynamic]GlobalExpr, file: ast.File, stmt: ^ast.Node) { + if value_decl, ok := stmt.derived.(ast.Value_Decl); ok { + for name, i in value_decl.names { + str := get_ast_node_string(name, file.src); + + if value_decl.type != nil { + append(exprs, GlobalExpr {name = str, expr = value_decl.type, mutable = value_decl.is_mutable, docs = value_decl.docs}); + } else { + if len(value_decl.values) > i { + append(exprs, GlobalExpr {name = str, expr = value_decl.values[i], docs = value_decl.docs}); + } + } + } + } +} + //TODO(add a sub procedure to avoid repeating the value decl work) collect_globals :: proc(file: ast.File) -> []GlobalExpr { @@ -91,29 +107,27 @@ collect_globals :: proc(file: ast.File) -> []GlobalExpr { if ident.name == "ODIN_OS" && basic_lit.tok.text == "\"windows\"" { if block, ok := when_decl.body.derived.(ast.Block_Stmt); ok { - for stmt in block.stmts { - - if value_decl, ok := stmt.derived.(ast.Value_Decl); ok { - - for name, i in value_decl.names { - - str := get_ast_node_string(name, file.src); - - if value_decl.type != nil { - append(&exprs, GlobalExpr {name = str, expr = value_decl.type, mutable = value_decl.is_mutable, docs = value_decl.docs}); - } else { - if len(value_decl.values) > i { - append(&exprs, GlobalExpr {name = str, expr = value_decl.values[i], docs = value_decl.docs}); - } - } - } - } + collect_value_decl(&exprs, file, stmt); + } + } + } else if ident.name != "ODIN_OS" { + if block, ok := when_decl.body.derived.(ast.Block_Stmt); ok { + for stmt in block.stmts { + collect_value_decl(&exprs, file, stmt); } } } } } + + else { + if block, ok := when_decl.body.derived.(ast.Block_Stmt); ok { + for stmt in block.stmts { + collect_value_decl(&exprs, file, stmt); + } + } + } //YUPPI - what a fun slide } else if foreign_decl, ok := decl.derived.(ast.Foreign_Block_Decl); ok { |