summaryrefslogtreecommitdiff
path: root/src/compiler/parser.c
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-04-29 22:03:17 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-04-29 22:03:17 +0330
commit3a4fa4b89280046885dc044ce4f9761f5eeaa9e1 (patch)
tree4fe36236a33349c034e44f455c1dca90703c5842 /src/compiler/parser.c
parente6e44774556bf6172c1577268cf9f013a4157ae2 (diff)
add a lot of builtins
Diffstat (limited to 'src/compiler/parser.c')
-rw-r--r--src/compiler/parser.c102
1 files changed, 100 insertions, 2 deletions
diff --git a/src/compiler/parser.c b/src/compiler/parser.c
index 8ca259f..b7a6226 100644
--- a/src/compiler/parser.c
+++ b/src/compiler/parser.c
@@ -18,6 +18,18 @@ const char *PARSER_TOKEN_STRINGS[] = {
"PARSER_TOKEN_BUILTIN_IS_COMPTIME",
"PARSER_TOKEN_BUILTIN_STACK_ALLOC",
"PARSER_TOKEN_BUILTIN_HEAP_ALLOC",
+ "PARSER_TOKEN_BUILTIN_NEG",
+ "PARSER_TOKEN_BUILTIN_ADD",
+ "PARSER_TOKEN_BUILTIN_SUB",
+ "PARSER_TOKEN_BUILTIN_MUL",
+ "PARSER_TOKEN_BUILTIN_DIV",
+ "PARSER_TOKEN_BUILTIN_MOD",
+ "PARSER_TOKEN_BUILTIN_EQUAL",
+ "PARSER_TOKEN_BUILTIN_NOT_EQUAL",
+ "PARSER_TOKEN_BUILTIN_GREATER",
+ "PARSER_TOKEN_BUILTIN_SMALLER",
+ "PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL",
+ "PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL",
"PARSER_TOKEN_VALUE_INT",
"PARSER_TOKEN_VALUE_FLOAT",
@@ -521,6 +533,18 @@ void parserNodeDelete(ParserNode *node) {
case PARSER_TOKEN_BUILTIN_IS_COMPTIME:
case PARSER_TOKEN_BUILTIN_STACK_ALLOC:
case PARSER_TOKEN_BUILTIN_HEAP_ALLOC:
+ case PARSER_TOKEN_BUILTIN_NEG:
+ case PARSER_TOKEN_BUILTIN_ADD:
+ case PARSER_TOKEN_BUILTIN_SUB:
+ case PARSER_TOKEN_BUILTIN_MUL:
+ case PARSER_TOKEN_BUILTIN_DIV:
+ case PARSER_TOKEN_BUILTIN_MOD:
+ case PARSER_TOKEN_BUILTIN_EQUAL:
+ case PARSER_TOKEN_BUILTIN_NOT_EQUAL:
+ case PARSER_TOKEN_BUILTIN_GREATER:
+ case PARSER_TOKEN_BUILTIN_SMALLER:
+ case PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL:
+ case PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL:
case PARSER_TOKEN_TYPE_TYPE:
case PARSER_TOKEN_TYPE_VOID:
case PARSER_TOKEN_TYPE_BOOL:
@@ -811,6 +835,32 @@ ParserNode *parseNode(LexerNode *node, LexerNode *begin, LexerNode *end,
return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_STACK_ALLOC);
case LEXER_TOKEN_BUILTIN_HEAP_ALLOC:
return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_HEAP_ALLOC);
+ case LEXER_TOKEN_BUILTIN_NEG:
+ return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_NEG);
+ case LEXER_TOKEN_BUILTIN_ADD:
+ return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_ADD);
+ case LEXER_TOKEN_BUILTIN_SUB:
+ return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_SUB);
+ case LEXER_TOKEN_BUILTIN_MUL:
+ return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_MUL);
+ case LEXER_TOKEN_BUILTIN_DIV:
+ return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_DIV);
+ case LEXER_TOKEN_BUILTIN_MOD:
+ return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_MOD);
+ case LEXER_TOKEN_BUILTIN_EQUAL:
+ return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_EQUAL);
+ case LEXER_TOKEN_BUILTIN_NOT_EQUAL:
+ return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_NOT_EQUAL);
+ case LEXER_TOKEN_BUILTIN_GREATER:
+ return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_GREATER);
+ case LEXER_TOKEN_BUILTIN_SMALLER:
+ return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_SMALLER);
+ case LEXER_TOKEN_BUILTIN_GREATER_OR_EQUAL:
+ return parserNoMetadata(node, parent,
+ PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL);
+ case LEXER_TOKEN_BUILTIN_SMALLER_OR_EQUAL:
+ return parserNoMetadata(node, parent,
+ PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL);
case LEXER_TOKEN_KEYWORD_TYPE:
return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_TYPE);
case LEXER_TOKEN_KEYWORD_VOID:
@@ -1547,8 +1597,20 @@ ParserNode *parserFunction(LexerNode *node, LexerNode *begin, LexerNode *end,
case PARSER_TOKEN_BUILTIN_TYPE_OF:
case PARSER_TOKEN_BUILTIN_IMPORT:
case PARSER_TOKEN_BUILTIN_IS_COMPTIME:
- case PARSER_TOKEN_BUILTIN_STACK_ALLOC:
- case PARSER_TOKEN_BUILTIN_HEAP_ALLOC:
+ case PARSER_TOKEN_BUILTIN_STACK_ALLOC:
+ case PARSER_TOKEN_BUILTIN_HEAP_ALLOC:
+ case PARSER_TOKEN_BUILTIN_NEG:
+ case PARSER_TOKEN_BUILTIN_ADD:
+ case PARSER_TOKEN_BUILTIN_SUB:
+ case PARSER_TOKEN_BUILTIN_MUL:
+ case PARSER_TOKEN_BUILTIN_DIV:
+ case PARSER_TOKEN_BUILTIN_MOD:
+ case PARSER_TOKEN_BUILTIN_EQUAL:
+ case PARSER_TOKEN_BUILTIN_NOT_EQUAL:
+ case PARSER_TOKEN_BUILTIN_GREATER:
+ case PARSER_TOKEN_BUILTIN_SMALLER:
+ case PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL:
+ case PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL:
case PARSER_TOKEN_VALUE_INT:
case PARSER_TOKEN_VALUE_FLOAT:
case PARSER_TOKEN_VALUE_BOOL:
@@ -2015,6 +2077,18 @@ bool isExpression(ParserNode *node) {
case PARSER_TOKEN_BUILTIN_IS_COMPTIME:
case PARSER_TOKEN_BUILTIN_STACK_ALLOC:
case PARSER_TOKEN_BUILTIN_HEAP_ALLOC:
+ case PARSER_TOKEN_BUILTIN_NEG:
+ case PARSER_TOKEN_BUILTIN_ADD:
+ case PARSER_TOKEN_BUILTIN_SUB:
+ case PARSER_TOKEN_BUILTIN_MUL:
+ case PARSER_TOKEN_BUILTIN_DIV:
+ case PARSER_TOKEN_BUILTIN_MOD:
+ case PARSER_TOKEN_BUILTIN_EQUAL:
+ case PARSER_TOKEN_BUILTIN_NOT_EQUAL:
+ case PARSER_TOKEN_BUILTIN_GREATER:
+ case PARSER_TOKEN_BUILTIN_SMALLER:
+ case PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL:
+ case PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL:
case PARSER_TOKEN_CONSTANT:
case PARSER_TOKEN_VARIABLE:
case PARSER_TOKEN_SYMBOL_PARENTHESIS:
@@ -2130,6 +2204,18 @@ bool isType(ParserNode *node) {
case PARSER_TOKEN_BUILTIN_IS_COMPTIME:
case PARSER_TOKEN_BUILTIN_STACK_ALLOC:
case PARSER_TOKEN_BUILTIN_HEAP_ALLOC:
+ case PARSER_TOKEN_BUILTIN_NEG:
+ case PARSER_TOKEN_BUILTIN_ADD:
+ case PARSER_TOKEN_BUILTIN_SUB:
+ case PARSER_TOKEN_BUILTIN_MUL:
+ case PARSER_TOKEN_BUILTIN_DIV:
+ case PARSER_TOKEN_BUILTIN_MOD:
+ case PARSER_TOKEN_BUILTIN_EQUAL:
+ case PARSER_TOKEN_BUILTIN_NOT_EQUAL:
+ case PARSER_TOKEN_BUILTIN_GREATER:
+ case PARSER_TOKEN_BUILTIN_SMALLER:
+ case PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL:
+ case PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL:
case PARSER_TOKEN_OPERATOR_ADDRESS:
case PARSER_TOKEN_KEYWORD_NULL:
case PARSER_TOKEN_KEYWORD_UNDEFINED:
@@ -2192,6 +2278,18 @@ bool isValue(ParserNode *node) {
case PARSER_TOKEN_BUILTIN_IS_COMPTIME:
case PARSER_TOKEN_BUILTIN_STACK_ALLOC:
case PARSER_TOKEN_BUILTIN_HEAP_ALLOC:
+ case PARSER_TOKEN_BUILTIN_NEG:
+ case PARSER_TOKEN_BUILTIN_ADD:
+ case PARSER_TOKEN_BUILTIN_SUB:
+ case PARSER_TOKEN_BUILTIN_MUL:
+ case PARSER_TOKEN_BUILTIN_DIV:
+ case PARSER_TOKEN_BUILTIN_MOD:
+ case PARSER_TOKEN_BUILTIN_EQUAL:
+ case PARSER_TOKEN_BUILTIN_NOT_EQUAL:
+ case PARSER_TOKEN_BUILTIN_GREATER:
+ case PARSER_TOKEN_BUILTIN_SMALLER:
+ case PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL:
+ case PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL:
case PARSER_TOKEN_OPERATOR_ACCESS:
case PARSER_TOKEN_OPERATOR_ASSIGN:
case PARSER_TOKEN_OPERATOR_SUM_ASSIGN: