diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-05-31 00:57:45 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-05-31 00:57:45 +0330 |
commit | b89fc3da7d9f1badde2f4879924b5df5522da203 (patch) | |
tree | 1d081ff63564fd2b7c42a374ef62d432761c4124 /src/compiler/ast-tree.c | |
parent | c91d3a8893b9c53c5c8e4c5cff72d7caf44cfee4 (diff) |
add ability to specify int type as extension
Diffstat (limited to 'src/compiler/ast-tree.c')
-rw-r--r-- | src/compiler/ast-tree.c | 64 |
1 files changed, 62 insertions, 2 deletions
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c index c778571..1018bfd 100644 --- a/src/compiler/ast-tree.c +++ b/src/compiler/ast-tree.c @@ -2452,8 +2452,7 @@ AstTree *astTreeParse(const ParserNode *parserNode) { case PARSER_TOKEN_IDENTIFIER: return astTreeParseIdentifier(parserNode); case PARSER_TOKEN_VALUE_INT: - return astTreeParseValue(parserNode, AST_TREE_TOKEN_VALUE_INT, - sizeof(AstTreeInt), NULL); + return astTreeParseIntValue(parserNode); case PARSER_TOKEN_VALUE_FLOAT: return astTreeParseValue(parserNode, AST_TREE_TOKEN_VALUE_FLOAT, sizeof(AstTreeFloat), NULL); @@ -2956,6 +2955,67 @@ AstTree *astTreeParseValue(const ParserNode *parserNode, AstTreeToken token, parserNode->str_end); } +AstTree *astTreeParseIntValue(const ParserNode *parserNode) { + ParserNodeIntMetadata *node_metadata = parserNode->metadata; + switch (node_metadata->type) { + case PARSER_NODE_INT_TYPE_UNKNOWN: { + AstTreeInt *metadata = a404m_malloc(sizeof(*metadata)); + *metadata = node_metadata->value; + return newAstTree(AST_TREE_TOKEN_VALUE_INT, metadata, NULL, + parserNode->str_begin, parserNode->str_end); + } + case PARSER_NODE_INT_TYPE_I8: { + i8 *metadata = a404m_malloc(sizeof(*metadata)); + *metadata = node_metadata->value; + return newAstTree(AST_TREE_TOKEN_RAW_VALUE, metadata, &AST_TREE_I8_TYPE, + parserNode->str_begin, parserNode->str_end); + } + case PARSER_NODE_INT_TYPE_U8: { + u8 *metadata = a404m_malloc(sizeof(*metadata)); + *metadata = node_metadata->value; + return newAstTree(AST_TREE_TOKEN_RAW_VALUE, metadata, &AST_TREE_I8_TYPE, + parserNode->str_begin, parserNode->str_end); + } + case PARSER_NODE_INT_TYPE_I16: { + i16 *metadata = a404m_malloc(sizeof(*metadata)); + *metadata = node_metadata->value; + return newAstTree(AST_TREE_TOKEN_RAW_VALUE, metadata, &AST_TREE_I16_TYPE, + parserNode->str_begin, parserNode->str_end); + } + case PARSER_NODE_INT_TYPE_U16: { + u16 *metadata = a404m_malloc(sizeof(*metadata)); + *metadata = node_metadata->value; + return newAstTree(AST_TREE_TOKEN_RAW_VALUE, metadata, &AST_TREE_I16_TYPE, + parserNode->str_begin, parserNode->str_end); + } + case PARSER_NODE_INT_TYPE_I32: { + i32 *metadata = a404m_malloc(sizeof(*metadata)); + *metadata = node_metadata->value; + return newAstTree(AST_TREE_TOKEN_RAW_VALUE, metadata, &AST_TREE_I32_TYPE, + parserNode->str_begin, parserNode->str_end); + } + case PARSER_NODE_INT_TYPE_U32: { + u32 *metadata = a404m_malloc(sizeof(*metadata)); + *metadata = node_metadata->value; + return newAstTree(AST_TREE_TOKEN_RAW_VALUE, metadata, &AST_TREE_I32_TYPE, + parserNode->str_begin, parserNode->str_end); + } + case PARSER_NODE_INT_TYPE_I64: { + i64 *metadata = a404m_malloc(sizeof(*metadata)); + *metadata = node_metadata->value; + return newAstTree(AST_TREE_TOKEN_RAW_VALUE, metadata, &AST_TREE_I64_TYPE, + parserNode->str_begin, parserNode->str_end); + } + case PARSER_NODE_INT_TYPE_U64: { + u64 *metadata = a404m_malloc(sizeof(*metadata)); + *metadata = node_metadata->value; + return newAstTree(AST_TREE_TOKEN_RAW_VALUE, metadata, &AST_TREE_I64_TYPE, + parserNode->str_begin, parserNode->str_end); + } + } + UNREACHABLE; +} + AstTree *astTreeParseString(const ParserNode *parserNode) { ParserNodeStringMetadata *node_metadata = parserNode->metadata; |