diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-03-29 05:54:41 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-03-29 05:54:41 +0330 |
commit | e73184852285ffbb110a96ca7d7e1906029ba825 (patch) | |
tree | c8fdd1cde14db35d679c9c2e012cb8536e9111fb /src/compiler | |
parent | 1b47d4f35969326773ac7bc7654cac1f98d16a3c (diff) |
fix segfaults
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/ast-tree.c | 80 | ||||
-rw-r--r-- | src/compiler/parser.c | 1 |
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); |