summaryrefslogtreecommitdiff
path: root/src/compiler/ast-tree.c
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-03-29 05:44:05 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-03-29 05:44:05 +0330
commit1b47d4f35969326773ac7bc7654cac1f98d16a3c (patch)
tree9824408fab0a53f95739649425bc9db86a1b2e64 /src/compiler/ast-tree.c
parent8a1016425aba995a391271666b3ae8a29c2dd3f3 (diff)
convert int value metadata to pointer for unified style
Diffstat (limited to 'src/compiler/ast-tree.c')
-rw-r--r--src/compiler/ast-tree.c65
1 files changed, 36 insertions, 29 deletions
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c
index 71429f1..bd0ba20 100644
--- a/src/compiler/ast-tree.c
+++ b/src/compiler/ast-tree.c
@@ -250,8 +250,8 @@ void astTreePrint(const AstTree *tree, int indent) {
}
goto RETURN_SUCCESS;
case AST_TREE_TOKEN_VALUE_INT: {
- AstTreeInt metadata = (AstTreeInt)tree->metadata;
- printf(",value=%lu", metadata);
+ AstTreeInt *metadata = tree->metadata;
+ printf(",value=%lu", *metadata);
}
goto RETURN_SUCCESS;
case AST_TREE_TOKEN_VALUE_FLOAT: {
@@ -457,10 +457,14 @@ void astTreeDestroy(AstTree tree) {
case AST_TREE_TOKEN_TYPE_BOOL:
case AST_TREE_TOKEN_VALUE_NULL:
case AST_TREE_TOKEN_VALUE_VOID:
- case AST_TREE_TOKEN_VALUE_INT:
case AST_TREE_TOKEN_VALUE_BOOL:
case AST_TREE_TOKEN_VARIABLE_DEFINE:
return;
+ case AST_TREE_TOKEN_VALUE_INT: {
+ AstTreeInt *metadata = tree.metadata;
+ free(metadata);
+ return;
+ }
case AST_TREE_TOKEN_VALUE_FLOAT: {
AstTreeFloat *metadata = tree.metadata;
free(metadata);
@@ -638,10 +642,16 @@ AstTree *copyAstTreeBack(AstTree *tree, AstTreeVariables oldVariables[],
tree->token, NULL,
copyAstTreeBack(tree->type, oldVariables, newVariables, variables_size),
tree->str_begin, tree->str_end);
- case AST_TREE_TOKEN_VALUE_INT:
case AST_TREE_TOKEN_VALUE_BOOL:
return newAstTree(tree->token, tree->metadata, tree->type, tree->str_begin,
tree->str_end);
+ case AST_TREE_TOKEN_VALUE_INT: {
+ AstTreeInt *metadata = tree->metadata;
+ AstTreeInt *newMetadata = a404m_malloc(sizeof(*newMetadata));
+ *newMetadata = *metadata;
+ return newAstTree(tree->token, newMetadata, tree->type, tree->str_begin,
+ tree->str_end);
+ }
case AST_TREE_TOKEN_VALUE_FLOAT: {
AstTreeFloat *metadata = tree->metadata;
AstTreeFloat *newMetadata = a404m_malloc(sizeof(*newMetadata));
@@ -1203,12 +1213,11 @@ AstTree *astTreeParse(ParserNode *parserNode, AstTreeHelper *helper) {
case PARSER_TOKEN_IDENTIFIER:
return astTreeParseIdentifier(parserNode, helper);
case PARSER_TOKEN_VALUE_INT:
- return newAstTree(
- AST_TREE_TOKEN_VALUE_INT,
- (void *)(AstTreeInt)(ParserNodeIntMetadata)parserNode->metadata, NULL,
- parserNode->str_begin, parserNode->str_end);
+ return astTreeParseValue(parserNode, AST_TREE_TOKEN_VALUE_INT,
+ sizeof(AstTreeInt));
case PARSER_TOKEN_VALUE_FLOAT:
- return astTreeParseFloat(parserNode);
+ return astTreeParseValue(parserNode, AST_TREE_TOKEN_VALUE_FLOAT,
+ sizeof(AstTreeFloat));
case PARSER_TOKEN_VALUE_BOOL:
return newAstTree(
AST_TREE_TOKEN_VALUE_BOOL,
@@ -1607,15 +1616,13 @@ AstTree *astTreeParseIdentifier(ParserNode *parserNode, AstTreeHelper *helper) {
parserNode->str_end);
}
-AstTree *astTreeParseFloat(ParserNode *parserNode) {
- AstTreeFloat *metadata = a404m_malloc(sizeof(*metadata));
-
- ParserNodeFloatMetadata *node_metadata = parserNode->metadata;
-
- *metadata = *node_metadata;
+AstTree *astTreeParseValue(ParserNode *parserNode, AstTreeToken token,
+ size_t metadata_size) {
+ void *metadata = a404m_malloc(sizeof(metadata));
+ memcpy(metadata, parserNode->metadata, metadata_size);
- return newAstTree(AST_TREE_TOKEN_VALUE_FLOAT, metadata, NULL,
- parserNode->str_begin, parserNode->str_end);
+ return newAstTree(token, metadata, NULL, parserNode->str_begin,
+ parserNode->str_end);
}
AstTree *astTreeParseKeyword(ParserNode *parserNode, AstTreeToken token) {
@@ -2059,8 +2066,10 @@ AstTreeFunction *getFunction(AstTree *value) {
case AST_TREE_TOKEN_TYPE_F64:
case AST_TREE_TOKEN_TYPE_F128:
case AST_TREE_TOKEN_TYPE_BOOL:
+ case AST_TREE_TOKEN_VALUE_NULL:
case AST_TREE_TOKEN_VALUE_VOID:
case AST_TREE_TOKEN_VALUE_INT:
+ case AST_TREE_TOKEN_VALUE_FLOAT:
case AST_TREE_TOKEN_VALUE_BOOL:
case AST_TREE_TOKEN_VARIABLE_DEFINE:
case AST_TREE_TOKEN_OPERATOR_ASSIGN:
@@ -2082,8 +2091,6 @@ AstTreeFunction *getFunction(AstTree *value) {
case AST_TREE_TOKEN_OPERATOR_SMALLER_OR_EQUAL:
case AST_TREE_TOKEN_SCOPE:
case AST_TREE_TOKEN_KEYWORD_WHILE:
- case AST_TREE_TOKEN_VALUE_FLOAT:
- case AST_TREE_TOKEN_VALUE_NULL:
return NULL;
case AST_TREE_TOKEN_NONE:
}
@@ -2687,7 +2694,7 @@ bool setTypesValueInt(AstTree *tree, AstTreeSetTypesHelper helper) {
} else if (typeIsEqual(helper.lookingType, &AST_TREE_U64_TYPE)) {
tree->type = &AST_TREE_U64_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_I32_TYPE)) {
- AstTreeInt value = (AstTreeInt)tree->metadata;
+ AstTreeInt value = *(AstTreeInt *)tree->metadata;
i32 newValue = value;
tree->metadata = (void *)(u64)newValue;
if (value - newValue != 0) {
@@ -2695,7 +2702,7 @@ bool setTypesValueInt(AstTree *tree, AstTreeSetTypesHelper helper) {
}
tree->type = &AST_TREE_I32_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_U32_TYPE)) {
- AstTreeInt value = (AstTreeInt)tree->metadata;
+ AstTreeInt value = *(AstTreeInt *)tree->metadata;
u32 newValue = value;
tree->metadata = (void *)(u64)newValue;
if (value - newValue != 0) {
@@ -2703,7 +2710,7 @@ bool setTypesValueInt(AstTree *tree, AstTreeSetTypesHelper helper) {
}
tree->type = &AST_TREE_U32_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_I16_TYPE)) {
- AstTreeInt value = (AstTreeInt)tree->metadata;
+ AstTreeInt value = *(AstTreeInt *)tree->metadata;
i16 newValue = value;
tree->metadata = (void *)(u64)newValue;
if (value - newValue != 0) {
@@ -2711,7 +2718,7 @@ bool setTypesValueInt(AstTree *tree, AstTreeSetTypesHelper helper) {
}
tree->type = &AST_TREE_I16_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_U16_TYPE)) {
- AstTreeInt value = (AstTreeInt)tree->metadata;
+ AstTreeInt value = *(AstTreeInt *)tree->metadata;
u16 newValue = value;
tree->metadata = (void *)(u64)newValue;
if (value - newValue != 0) {
@@ -2719,7 +2726,7 @@ bool setTypesValueInt(AstTree *tree, AstTreeSetTypesHelper helper) {
}
tree->type = &AST_TREE_U16_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_I8_TYPE)) {
- AstTreeInt value = (AstTreeInt)tree->metadata;
+ AstTreeInt value = *(AstTreeInt *)tree->metadata;
i8 newValue = value;
tree->metadata = (void *)(u64)newValue;
if (value - newValue != 0) {
@@ -2727,7 +2734,7 @@ bool setTypesValueInt(AstTree *tree, AstTreeSetTypesHelper helper) {
}
tree->type = &AST_TREE_I8_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_U8_TYPE)) {
- AstTreeInt value = (AstTreeInt)tree->metadata;
+ AstTreeInt value = *(AstTreeInt *)tree->metadata;
u8 newValue = value;
tree->metadata = (void *)(u64)newValue;
if (value - newValue != 0) {
@@ -2736,7 +2743,7 @@ bool setTypesValueInt(AstTree *tree, AstTreeSetTypesHelper helper) {
tree->type = &AST_TREE_U8_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_F16_TYPE)) {
tree->token = AST_TREE_TOKEN_VALUE_FLOAT;
- AstTreeInt value = (AstTreeInt)tree->metadata;
+ AstTreeInt value = *(AstTreeInt *)tree->metadata;
f16 newValue = value;
tree->metadata = a404m_malloc(sizeof(f128));
*(AstTreeFloat *)tree->metadata = value;
@@ -2746,7 +2753,7 @@ bool setTypesValueInt(AstTree *tree, AstTreeSetTypesHelper helper) {
tree->type = &AST_TREE_F16_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_F32_TYPE)) {
tree->token = AST_TREE_TOKEN_VALUE_FLOAT;
- AstTreeInt value = (AstTreeInt)tree->metadata;
+ AstTreeInt value = *(AstTreeInt *)tree->metadata;
f32 newValue = value;
tree->metadata = a404m_malloc(sizeof(f128));
*(AstTreeFloat *)tree->metadata = value;
@@ -2756,7 +2763,7 @@ bool setTypesValueInt(AstTree *tree, AstTreeSetTypesHelper helper) {
tree->type = &AST_TREE_F32_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_F64_TYPE)) {
tree->token = AST_TREE_TOKEN_VALUE_FLOAT;
- AstTreeInt value = (AstTreeInt)tree->metadata;
+ AstTreeInt value = *(AstTreeInt *)tree->metadata;
f64 newValue = value;
tree->metadata = a404m_malloc(sizeof(f128));
*(AstTreeFloat *)tree->metadata = value;
@@ -2766,7 +2773,7 @@ bool setTypesValueInt(AstTree *tree, AstTreeSetTypesHelper helper) {
tree->type = &AST_TREE_F64_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_F128_TYPE)) {
tree->token = AST_TREE_TOKEN_VALUE_FLOAT;
- AstTreeInt value = (AstTreeInt)tree->metadata;
+ AstTreeInt value = *(AstTreeInt *)tree->metadata;
f128 newValue = value;
tree->metadata = a404m_malloc(sizeof(f128));
*(AstTreeFloat *)tree->metadata = value;