diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-02-13 18:39:08 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-02-13 18:40:23 +0330 |
commit | cb6eaf13c3b3b58779a18255177589d8d5fbf85b (patch) | |
tree | 40e648d02dc450bdda7bd4e31503b76ab4bf0a69 /src/compiler/parser.c | |
parent | 0ff9508bb0ea7193b0101c3cd9b4ae594e44fd02 (diff) |
add i8 u8 i16 u16 i32 u32
add overflow warning
Diffstat (limited to 'src/compiler/parser.c')
-rw-r--r-- | src/compiler/parser.c | 72 |
1 files changed, 65 insertions, 7 deletions
diff --git a/src/compiler/parser.c b/src/compiler/parser.c index 26d53fb..367c490 100644 --- a/src/compiler/parser.c +++ b/src/compiler/parser.c @@ -20,6 +20,13 @@ const char *PARSER_TOKEN_STRINGS[] = { "PARSER_TOKEN_TYPE_TYPE", "PARSER_TOKEN_TYPE_FUNCTION", "PARSER_TOKEN_TYPE_VOID", + "PARSER_TOKEN_TYPE_I8", + "PARSER_TOKEN_TYPE_U8", + "PARSER_TOKEN_TYPE_I16", + "PARSER_TOKEN_TYPE_U16", + "PARSER_TOKEN_TYPE_I32", + "PARSER_TOKEN_TYPE_U32", + "PARSER_TOKEN_TYPE_I64", "PARSER_TOKEN_TYPE_U64", "PARSER_TOKEN_TYPE_BOOL", @@ -64,7 +71,10 @@ static constexpr ParserOrder PARSER_ORDER[] = { .ltr = true, ORDER_ARRAY(LEXER_TOKEN_SYMBOL_CLOSE_PARENTHESIS, LEXER_TOKEN_IDENTIFIER, LEXER_TOKEN_KEYWORD_TYPE, - LEXER_TOKEN_KEYWORD_VOID, LEXER_TOKEN_KEYWORD_I64, + LEXER_TOKEN_KEYWORD_VOID, LEXER_TOKEN_KEYWORD_I8, + LEXER_TOKEN_KEYWORD_U8, LEXER_TOKEN_KEYWORD_I16, + LEXER_TOKEN_KEYWORD_U16, LEXER_TOKEN_KEYWORD_I32, + LEXER_TOKEN_KEYWORD_U32, LEXER_TOKEN_KEYWORD_I64, LEXER_TOKEN_KEYWORD_U64, LEXER_TOKEN_KEYWORD_BOOL, LEXER_TOKEN_KEYWORD_TRUE, LEXER_TOKEN_KEYWORD_FALSE, LEXER_TOKEN_NUMBER, ), @@ -148,6 +158,12 @@ void parserNodePrint(const ParserNode *node, int indent) { case PARSER_TOKEN_IDENTIFIER: case PARSER_TOKEN_TYPE_TYPE: case PARSER_TOKEN_TYPE_VOID: + case PARSER_TOKEN_TYPE_I8: + case PARSER_TOKEN_TYPE_U8: + case PARSER_TOKEN_TYPE_I16: + case PARSER_TOKEN_TYPE_U16: + case PARSER_TOKEN_TYPE_I32: + case PARSER_TOKEN_TYPE_U32: case PARSER_TOKEN_TYPE_I64: case PARSER_TOKEN_TYPE_U64: case PARSER_TOKEN_TYPE_BOOL: @@ -352,6 +368,12 @@ void parserNodeDelete(ParserNode *node) { case PARSER_TOKEN_IDENTIFIER: case PARSER_TOKEN_TYPE_TYPE: case PARSER_TOKEN_TYPE_VOID: + case PARSER_TOKEN_TYPE_I8: + case PARSER_TOKEN_TYPE_U8: + case PARSER_TOKEN_TYPE_I16: + case PARSER_TOKEN_TYPE_U16: + case PARSER_TOKEN_TYPE_I32: + case PARSER_TOKEN_TYPE_U32: case PARSER_TOKEN_TYPE_I64: case PARSER_TOKEN_TYPE_U64: case PARSER_TOKEN_TYPE_BOOL: @@ -546,6 +568,18 @@ ParserNode *parseNode(LexerNode *node, LexerNode *begin, LexerNode *end, return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_TYPE); case LEXER_TOKEN_KEYWORD_VOID: return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_VOID); + case LEXER_TOKEN_KEYWORD_I8: + return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_I8); + case LEXER_TOKEN_KEYWORD_U8: + return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_U8); + case LEXER_TOKEN_KEYWORD_I16: + return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_I16); + case LEXER_TOKEN_KEYWORD_U16: + return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_U16); + case LEXER_TOKEN_KEYWORD_I32: + return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_I32); + case LEXER_TOKEN_KEYWORD_U32: + return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_U32); case LEXER_TOKEN_KEYWORD_I64: return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_I64); case LEXER_TOKEN_KEYWORD_U64: @@ -990,6 +1024,12 @@ ParserNode *parserFunction(LexerNode *node, LexerNode *begin, LexerNode *end, case PARSER_TOKEN_TYPE_TYPE: case PARSER_TOKEN_TYPE_FUNCTION: case PARSER_TOKEN_TYPE_VOID: + case PARSER_TOKEN_TYPE_I8: + case PARSER_TOKEN_TYPE_U8: + case PARSER_TOKEN_TYPE_I16: + case PARSER_TOKEN_TYPE_U16: + case PARSER_TOKEN_TYPE_I32: + case PARSER_TOKEN_TYPE_U32: case PARSER_TOKEN_TYPE_I64: case PARSER_TOKEN_TYPE_U64: case PARSER_TOKEN_TYPE_BOOL: @@ -1008,12 +1048,12 @@ ParserNode *parserFunction(LexerNode *node, LexerNode *begin, LexerNode *end, case PARSER_TOKEN_OPERATOR_MULTIPLY: case PARSER_TOKEN_OPERATOR_DIVIDE: case PARSER_TOKEN_OPERATOR_MODULO: - case PARSER_TOKEN_OPERATOR_EQUAL: - case PARSER_TOKEN_OPERATOR_NOT_EQUAL: - case PARSER_TOKEN_OPERATOR_GREATER: - case PARSER_TOKEN_OPERATOR_SMALLER: - case PARSER_TOKEN_OPERATOR_GREATER_OR_EQUAL: - case PARSER_TOKEN_OPERATOR_SMALLER_OR_EQUAL: + case PARSER_TOKEN_OPERATOR_EQUAL: + case PARSER_TOKEN_OPERATOR_NOT_EQUAL: + case PARSER_TOKEN_OPERATOR_GREATER: + case PARSER_TOKEN_OPERATOR_SMALLER: + case PARSER_TOKEN_OPERATOR_GREATER_OR_EQUAL: + case PARSER_TOKEN_OPERATOR_SMALLER_OR_EQUAL: case PARSER_TOKEN_FUNCTION_DEFINITION: case PARSER_TOKEN_FUNCTION_CALL: printError(bodyArray->data[i]->str_begin, bodyArray->data[i]->str_end, @@ -1319,6 +1359,12 @@ bool isExpression(ParserNode *node) { case PARSER_TOKEN_TYPE_TYPE: case PARSER_TOKEN_TYPE_FUNCTION: case PARSER_TOKEN_TYPE_VOID: + case PARSER_TOKEN_TYPE_I8: + case PARSER_TOKEN_TYPE_U8: + case PARSER_TOKEN_TYPE_I16: + case PARSER_TOKEN_TYPE_U16: + case PARSER_TOKEN_TYPE_I32: + case PARSER_TOKEN_TYPE_U32: case PARSER_TOKEN_TYPE_I64: case PARSER_TOKEN_TYPE_U64: case PARSER_TOKEN_TYPE_BOOL: @@ -1336,6 +1382,12 @@ bool isType(ParserNode *node) { case PARSER_TOKEN_TYPE_TYPE: case PARSER_TOKEN_TYPE_FUNCTION: case PARSER_TOKEN_TYPE_VOID: + case PARSER_TOKEN_TYPE_I8: + case PARSER_TOKEN_TYPE_U8: + case PARSER_TOKEN_TYPE_I16: + case PARSER_TOKEN_TYPE_U16: + case PARSER_TOKEN_TYPE_I32: + case PARSER_TOKEN_TYPE_U32: case PARSER_TOKEN_TYPE_I64: case PARSER_TOKEN_TYPE_U64: case PARSER_TOKEN_TYPE_BOOL: @@ -1398,6 +1450,12 @@ bool isValue(ParserNode *node) { case PARSER_TOKEN_OPERATOR_SMALLER_OR_EQUAL: case PARSER_TOKEN_TYPE_TYPE: case PARSER_TOKEN_TYPE_VOID: + case PARSER_TOKEN_TYPE_I8: + case PARSER_TOKEN_TYPE_U8: + case PARSER_TOKEN_TYPE_I16: + case PARSER_TOKEN_TYPE_U16: + case PARSER_TOKEN_TYPE_I32: + case PARSER_TOKEN_TYPE_U32: case PARSER_TOKEN_TYPE_I64: case PARSER_TOKEN_TYPE_U64: case PARSER_TOKEN_TYPE_BOOL: |