aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.h
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-29 22:00:40 +0200
committerBad Diode <bd@badd10de.dev>2021-10-29 22:00:40 +0200
commitfbddf5e0c46778c1e403389ba557ef036b7b0fb5 (patch)
tree01aa089934d1b49fe515fe86fffca01c471c69e9 /src/parser.h
parent95709acb7f166b21f562ef3fcf8ba7cb5890d28a (diff)
downloadbdl-fbddf5e0c46778c1e403389ba557ef036b7b0fb5.tar.gz
bdl-fbddf5e0c46778c1e403389ba557ef036b7b0fb5.zip
Revert "Deduplicate string/symbols text for fast equality checks"
This reverts commit 95709acb7f166b21f562ef3fcf8ba7cb5890d28a.
Diffstat (limited to 'src/parser.h')
-rwxr-xr-xsrc/parser.h24
1 files changed, 4 insertions, 20 deletions
diff --git a/src/parser.h b/src/parser.h
index f438863..ee5febe 100755
--- a/src/parser.h
+++ b/src/parser.h
@@ -37,25 +37,10 @@ typedef struct Object {
37typedef struct Parser { 37typedef struct Parser {
38 Token *tokens; 38 Token *tokens;
39 size_t current; 39 size_t current;
40
41 // Unique symbols and strings.
42 Object **symbols;
43 Object **strings;
44} Parser; 40} Parser;
45 41
46typedef Object* Root; 42typedef Object* Root;
47 43
48typedef struct ParserResults {
49 // All root statements.
50 Root *roots;
51
52 // Unique symbols (tracking only first occurence).
53 Object **symbols;
54
55 // Unique strings (tracking only first occurence).
56 Object **strings;
57} ParserResults;
58
59// Mimics the functionality in the Scanner functions, but for tokens. 44// Mimics the functionality in the Scanner functions, but for tokens.
60Token next_token(Parser *parser); 45Token next_token(Parser *parser);
61Token previous_token(Parser *parser); 46Token previous_token(Parser *parser);
@@ -65,21 +50,20 @@ bool has_next_token(const Parser *parser);
65 50
66// Parsing operations. 51// Parsing operations.
67Object * parse_tree(Parser *parser, Errors *errors); 52Object * parse_tree(Parser *parser, Errors *errors);
68Object * parse_symbol(Parser *parser, Token tok); 53Object * parse_symbol(Token tok);
69Object * parse_string(Parser *parser, Token tok); 54Object * parse_string(Token tok);
70Object * parse_bool(Token tok); 55Object * parse_bool(Token tok);
71Object * parse_fixnum(Token tok); 56Object * parse_fixnum(Token tok);
72Object * parse_list(Parser *parser, Errors *errors); 57Object * parse_list(Parser *parser, Errors *errors);
73ParserResults parse(Token *tokens, Errors *errors); 58Root * parse(Token *tokens, Errors *errors);
74 59
75// Object operations. 60// Object operations.
76void object_display(Object *obj); 61void object_display(Object *obj);
77bool object_equal(Object *a, Object *b);
78 62
79// Manage resources. 63// Manage resources.
80Object * object_alloc(Token tok, ObjectType type); 64Object * object_alloc(Token tok, ObjectType type);
81void object_free(Object *node); 65void object_free(Object *node);
82void free_parser_results(ParserResults *pr); 66void free_roots(Root *roots);
83 67
84// 68//
85// Helper macros. 69// Helper macros.