From e73184852285ffbb110a96ca7d7e1906029ba825 Mon Sep 17 00:00:00 2001 From: A404M Date: Sat, 29 Mar 2025 05:54:41 +0330 Subject: fix segfaults --- src/compiler/ast-tree.c | 80 ++++++++++++++++++++++++------------------------- 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); -- cgit v1.2.3