diff options
author | Bad Diode <bd@badd10de.dev> | 2021-11-10 16:40:29 +0100 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-11-10 16:40:29 +0100 |
commit | 69f6b03296f96a60dd7fc103ff89d187f1a29aec (patch) | |
tree | b942b1afb25f6c6db2fa6be861406c1446026f8c /src/parser.h | |
parent | e32231ffa4dfc4b5c3c65437f03190e57ccc9678 (diff) | |
download | bdl-69f6b03296f96a60dd7fc103ff89d187f1a29aec.tar.gz bdl-69f6b03296f96a60dd7fc103ff89d187f1a29aec.zip |
Change Environment to store locals in array
This will help directly translate the locals to assembly.
Diffstat (limited to 'src/parser.h')
-rw-r--r-- | src/parser.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/parser.h b/src/parser.h index 9414a24..c117c61 100644 --- a/src/parser.h +++ b/src/parser.h | |||
@@ -2,10 +2,9 @@ | |||
2 | #define BDL_PARSER_H | 2 | #define BDL_PARSER_H |
3 | 3 | ||
4 | #include "lexer.h" | 4 | #include "lexer.h" |
5 | #include "hashtable.h" | ||
6 | 5 | ||
7 | typedef struct Environment { | 6 | typedef struct Environment { |
8 | HashTable *table; | 7 | struct Object **locals; |
9 | struct Environment *parent; | 8 | struct Environment *parent; |
10 | } Environment; | 9 | } Environment; |
11 | 10 | ||
@@ -74,6 +73,11 @@ typedef struct Parser { | |||
74 | 73 | ||
75 | typedef Object* Root; | 74 | typedef Object* Root; |
76 | 75 | ||
76 | typedef struct Program { | ||
77 | Root *roots; | ||
78 | Environment *env; | ||
79 | } Program; | ||
80 | |||
77 | // Token scanner. | 81 | // Token scanner. |
78 | Token next_token(Parser *parser); | 82 | Token next_token(Parser *parser); |
79 | Token previous_token(Parser *parser); | 83 | Token previous_token(Parser *parser); |
@@ -91,7 +95,7 @@ Object * parse_list(Parser *parser, Errors *errors); | |||
91 | Object * parse_lambda(Parser *parser, Errors *errors); | 95 | Object * parse_lambda(Parser *parser, Errors *errors); |
92 | Object * parse_if(Parser *parser, Errors *errors); | 96 | Object * parse_if(Parser *parser, Errors *errors); |
93 | Object * parse_var(Parser *parser, Errors *errors); | 97 | Object * parse_var(Parser *parser, Errors *errors); |
94 | Root * parse(Token *tokens, Errors *errors); | 98 | Program parse(Token *tokens, Errors *errors); |
95 | 99 | ||
96 | // Object operations. | 100 | // Object operations. |
97 | void object_display(Object *obj); | 101 | void object_display(Object *obj); |