aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.h
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-11-10 16:40:29 +0100
committerBad Diode <bd@badd10de.dev>2021-11-10 16:40:29 +0100
commit69f6b03296f96a60dd7fc103ff89d187f1a29aec (patch)
treeb942b1afb25f6c6db2fa6be861406c1446026f8c /src/parser.h
parente32231ffa4dfc4b5c3c65437f03190e57ccc9678 (diff)
downloadbdl-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.h10
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
7typedef struct Environment { 6typedef 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
75typedef Object* Root; 74typedef Object* Root;
76 75
76typedef struct Program {
77 Root *roots;
78 Environment *env;
79} Program;
80
77// Token scanner. 81// Token scanner.
78Token next_token(Parser *parser); 82Token next_token(Parser *parser);
79Token previous_token(Parser *parser); 83Token previous_token(Parser *parser);
@@ -91,7 +95,7 @@ Object * parse_list(Parser *parser, Errors *errors);
91Object * parse_lambda(Parser *parser, Errors *errors); 95Object * parse_lambda(Parser *parser, Errors *errors);
92Object * parse_if(Parser *parser, Errors *errors); 96Object * parse_if(Parser *parser, Errors *errors);
93Object * parse_var(Parser *parser, Errors *errors); 97Object * parse_var(Parser *parser, Errors *errors);
94Root * parse(Token *tokens, Errors *errors); 98Program parse(Token *tokens, Errors *errors);
95 99
96// Object operations. 100// Object operations.
97void object_display(Object *obj); 101void object_display(Object *obj);