aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2021-03-30 16:27:18 +0200
committerDanielGavin <danielgavin5@hotmail.com>2021-03-30 16:27:18 +0200
commitdab985f991e5276bd83d7d8b4ab4a80cddcfe6b8 (patch)
treeb87f371ec3ffc321ff37f5453fca251ef9b3d555 /src
parent228bda2c98624c9ae60f40b9be00c6c77f0a58c0 (diff)
index when declarations that don't use ODIN_OS
Diffstat (limited to 'src')
-rw-r--r--src/common/ast.odin48
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 {