summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-03-29 05:54:41 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-03-29 05:54:41 +0330
commite73184852285ffbb110a96ca7d7e1906029ba825 (patch)
treec8fdd1cde14db35d679c9c2e012cb8536e9111fb /src/compiler
parent1b47d4f35969326773ac7bc7654cac1f98d16a3c (diff)
fix segfaults
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/ast-tree.c80
-rw-r--r--src/compiler/parser.c1
2 files changed, 41 insertions, 40 deletions
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c
index bd0ba20..3963e77 100644
--- a/src/compiler/ast-tree.c
+++ b/src/compiler/ast-tree.c
@@ -2694,90 +2694,90 @@ 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;
- i32 newValue = value;
- tree->metadata = (void *)(u64)newValue;
- if (value - newValue != 0) {
+ AstTreeInt *value = tree->metadata;
+ i32 newValue = *value;
+ *value = newValue;
+ if (*value - newValue != 0) {
printWarning(tree->str_begin, tree->str_end, "Value is overflowing");
}
tree->type = &AST_TREE_I32_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_U32_TYPE)) {
- AstTreeInt value = *(AstTreeInt *)tree->metadata;
- u32 newValue = value;
- tree->metadata = (void *)(u64)newValue;
- if (value - newValue != 0) {
+ AstTreeInt *value = tree->metadata;
+ u32 newValue = *value;
+ *value = newValue;
+ if (*value - newValue != 0) {
printWarning(tree->str_begin, tree->str_end, "Value is overflowing");
}
tree->type = &AST_TREE_U32_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_I16_TYPE)) {
- AstTreeInt value = *(AstTreeInt *)tree->metadata;
- i16 newValue = value;
- tree->metadata = (void *)(u64)newValue;
- if (value - newValue != 0) {
+ AstTreeInt *value = tree->metadata;
+ i16 newValue = *value;
+ *value = newValue;
+ if (*value - newValue != 0) {
printWarning(tree->str_begin, tree->str_end, "Value is overflowing");
}
tree->type = &AST_TREE_I16_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_U16_TYPE)) {
- AstTreeInt value = *(AstTreeInt *)tree->metadata;
- u16 newValue = value;
- tree->metadata = (void *)(u64)newValue;
- if (value - newValue != 0) {
+ AstTreeInt *value = tree->metadata;
+ u16 newValue = *value;
+ *value = newValue;
+ if (*value - newValue != 0) {
printWarning(tree->str_begin, tree->str_end, "Value is overflowing");
}
tree->type = &AST_TREE_U16_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_I8_TYPE)) {
- AstTreeInt value = *(AstTreeInt *)tree->metadata;
- i8 newValue = value;
- tree->metadata = (void *)(u64)newValue;
- if (value - newValue != 0) {
+ AstTreeInt *value = tree->metadata;
+ i8 newValue = *value;
+ *value = newValue;
+ if (*value - newValue != 0) {
printWarning(tree->str_begin, tree->str_end, "Value is overflowing");
}
tree->type = &AST_TREE_I8_TYPE;
} else if (typeIsEqual(helper.lookingType, &AST_TREE_U8_TYPE)) {
- AstTreeInt value = *(AstTreeInt *)tree->metadata;
- u8 newValue = value;
- tree->metadata = (void *)(u64)newValue;
- if (value - newValue != 0) {
+ AstTreeInt *value = tree->metadata;
+ u8 newValue = *value;
+ *value = newValue;
+ if (*value - newValue != 0) {
printWarning(tree->str_begin, tree->str_end, "Value is overflowing");
}
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;
- f16 newValue = value;
+ AstTreeInt *value = tree->metadata;
+ f16 newValue = *value;
tree->metadata = a404m_malloc(sizeof(f128));
- *(AstTreeFloat *)tree->metadata = value;
- if (value - newValue != 0) {
+ *(AstTreeFloat *)tree->metadata = *value;
+ if (*value - newValue != 0) {
printWarning(tree->str_begin, tree->str_end, "Value is overflowing");
}
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;
- f32 newValue = value;
+ AstTreeInt *value = tree->metadata;
+ f32 newValue = *value;
tree->metadata = a404m_malloc(sizeof(f128));
- *(AstTreeFloat *)tree->metadata = value;
- if (value - newValue != 0) {
+ *(AstTreeFloat *)tree->metadata = *value;
+ if (*value - newValue != 0) {
printWarning(tree->str_begin, tree->str_end, "Value is overflowing");
}
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;
- f64 newValue = value;
+ AstTreeInt *value = tree->metadata;
+ f64 newValue = *value;
tree->metadata = a404m_malloc(sizeof(f128));
- *(AstTreeFloat *)tree->metadata = value;
- if (value - newValue != 0) {
+ *(AstTreeFloat *)tree->metadata = *value;
+ if (*value - newValue != 0) {
printWarning(tree->str_begin, tree->str_end, "Value is overflowing");
}
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;
- f128 newValue = value;
+ AstTreeInt *value = tree->metadata;
+ f128 newValue = *value;
tree->metadata = a404m_malloc(sizeof(f128));
- *(AstTreeFloat *)tree->metadata = value;
- if (value - newValue != 0) {
+ *(AstTreeFloat *)tree->metadata = *value;
+ if (*value - newValue != 0) {
printWarning(tree->str_begin, tree->str_end, "Value is overflowing");
}
tree->type = &AST_TREE_F128_TYPE;
diff --git a/src/compiler/parser.c b/src/compiler/parser.c
index ec84c8c..db189ed 100644
--- a/src/compiler/parser.c
+++ b/src/compiler/parser.c
@@ -462,6 +462,7 @@ void parserNodeDelete(ParserNode *node) {
ParserNodeIntMetadata *metadata = node->metadata;
free(metadata);
}
+ goto RETURN_SUCCESS;
case PARSER_TOKEN_VALUE_FLOAT: {
ParserNodeFloatMetadata *metadata = node->metadata;
free(metadata);