summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo Tenenbaum <pommicket@gmail.com>2020-01-27 13:01:36 -0500
committerLeo Tenenbaum <pommicket@gmail.com>2020-01-27 13:01:36 -0500
commit3467f27c4c0d44f5bb2a09d93a96c71a4c0eeccc (patch)
treeb83c7e7829069603d9c2e282eed70e50f9e006c0
parent730469c7a96a26ecba362db39c67e97bd07bf157 (diff)
fixed #include scoping problems
-rw-r--r--main.c1
-rw-r--r--scope.c2
-rw-r--r--test.toc3
-rw-r--r--types.h2
4 files changed, 6 insertions, 2 deletions
diff --git a/main.c b/main.c
index 6d0ae5c..0f12fbb 100644
--- a/main.c
+++ b/main.c
@@ -18,7 +18,6 @@
/*
TODO:
-#include
nested packages
constants in structs
#if
diff --git a/scope.c b/scope.c
index 0a05bae..1b116b7 100644
--- a/scope.c
+++ b/scope.c
@@ -75,6 +75,8 @@ static void block_exit(Block *b, Statement *stmts) {
if (stmt->kind == STMT_DECL) {
Declaration *decl = &stmt->decl;
remove_ident_decls(b, decl);
+ } else if (stmt->kind == STMT_INCLUDE) {
+ block_exit(b, stmt->inc.stmts);
}
}
}
diff --git a/test.toc b/test.toc
index 9e82451..4274d97 100644
--- a/test.toc
+++ b/test.toc
@@ -2,7 +2,10 @@ arr ::= pkg "std/arr";
io ::= pkg "std/io";
main ::= fn() {
#include "incstuff.toc";
+ {
+ #include "incstuff.toc";
+ }
s : [1]char;
s[0] = (arr.arr_len(x) as char) + '0';
io.puts(s[:]);
diff --git a/types.h b/types.h
index 25ddad6..17184ea 100644
--- a/types.h
+++ b/types.h
@@ -754,7 +754,7 @@ typedef struct Expression {
} del;
struct {
struct Expression *name_expr;
- } pkg; /* only can exist before typing */
+ } pkg; /* can only exist before typing */
IfExpr if_;
WhileExpr while_;
ForExpr *for_;