diff options
-rw-r--r-- | src/main.c | 2 | ||||
-rw-r--r-- | src/runner/runner.c | 25 | ||||
-rw-r--r-- | src/utils/string.c | 8 | ||||
-rw-r--r-- | test/main.felan | 10 |
4 files changed, 31 insertions, 14 deletions
@@ -61,7 +61,7 @@ int main(int argc, char *argv[]) { return 1; } - const int ret = run(argv[1], true); + const int ret = run(argv[1], false); fileDelete(); return ret; } diff --git a/src/runner/runner.c b/src/runner/runner.c index 5362729..cb2dc8f 100644 --- a/src/runner/runner.c +++ b/src/runner/runner.c @@ -364,6 +364,7 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages) { doLeftOperationFloat(operand, +, AstTreeFloat, f16); } else { printError(expr->str_begin, expr->str_end, "Not supported"); + UNREACHABLE; } return operand; } @@ -395,6 +396,7 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages) { doLeftOperationFloat(operand, -, AstTreeFloat, f16); } else { printError(expr->str_begin, expr->str_end, "Not supported"); + UNREACHABLE; } return operand; } @@ -440,6 +442,7 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages) { doOperationFloat(left, right, +, AstTreeFloat, f16); } else { printError(expr->str_begin, expr->str_end, "Not supported"); + UNREACHABLE; } astTreeDelete(right); return left; @@ -486,6 +489,7 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages) { doOperationFloat(left, right, -, AstTreeFloat, f16); } else { printError(expr->str_begin, expr->str_end, "Not supported"); + UNREACHABLE; } astTreeDelete(right); return left; @@ -532,6 +536,7 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages) { doOperationFloat(left, right, *, AstTreeFloat, f16); } else { printError(expr->str_begin, expr->str_end, "Not supported"); + UNREACHABLE; } astTreeDelete(right); return left; @@ -578,6 +583,7 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages) { doOperationFloat(left, right, /, AstTreeFloat, f16); } else { printError(expr->str_begin, expr->str_end, "Not supported"); + UNREACHABLE; } astTreeDelete(right); return left; @@ -612,6 +618,7 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages) { doOperation(left, right, %, AstTreeInt, i8); } else { printError(expr->str_begin, expr->str_end, "Not supported"); + UNREACHABLE; } astTreeDelete(right); return left; @@ -656,8 +663,15 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages) { } else if (left->type == &AST_TREE_F16_TYPE && right->type == &AST_TREE_F16_TYPE) { doOperationFloat(left, right, ==, AstTreeFloat, f16); + } else if (left->type == &AST_TREE_TYPE_TYPE) { + bool res = typeIsEqual(left, right); + astTreeDelete(left); + left = newAstTree(AST_TREE_TOKEN_VALUE_BOOL, (void *)(AstTreeBool)res, + &AST_TREE_BOOL_TYPE, NULL, NULL); + left->token = AST_TREE_TOKEN_VALUE_BOOL; } else { printError(expr->str_begin, expr->str_end, "Not supported"); + UNREACHABLE; } astTreeDelete(right); return left; @@ -702,8 +716,15 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages) { } else if (left->type == &AST_TREE_F16_TYPE && right->type == &AST_TREE_F16_TYPE) { doOperationFloat(left, right, !=, AstTreeFloat, f16); + } else if (left->type == &AST_TREE_TYPE_TYPE) { + bool res = !typeIsEqual(left, right); + astTreeDelete(left); + left = newAstTree(AST_TREE_TOKEN_VALUE_BOOL, (void *)(AstTreeBool)res, + &AST_TREE_BOOL_TYPE, NULL, NULL); + left->token = AST_TREE_TOKEN_VALUE_BOOL; } else { printError(expr->str_begin, expr->str_end, "Not supported"); + UNREACHABLE; } astTreeDelete(right); return left; @@ -750,6 +771,7 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages) { doOperationFloat(left, right, >, AstTreeFloat, f16); } else { printError(expr->str_begin, expr->str_end, "Not supported"); + UNREACHABLE; } astTreeDelete(right); return left; @@ -796,6 +818,7 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages) { doOperationFloat(left, right, <, AstTreeFloat, f16); } else { printError(expr->str_begin, expr->str_end, "Not supported"); + UNREACHABLE; } astTreeDelete(right); return left; @@ -842,6 +865,7 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages) { doOperationFloat(left, right, >=, AstTreeFloat, f16); } else { printError(expr->str_begin, expr->str_end, "Not supported"); + UNREACHABLE; } astTreeDelete(right); return left; @@ -888,6 +912,7 @@ AstTree *runExpression(AstTree *expr, RunnerVariablePages *pages) { doOperationFloat(left, right, <=, AstTreeFloat, f16); } else { printError(expr->str_begin, expr->str_end, "Not supported"); + UNREACHABLE; } astTreeDelete(right); return left; diff --git a/src/utils/string.c b/src/utils/string.c index 17e27cd..16e9f9b 100644 --- a/src/utils/string.c +++ b/src/utils/string.c @@ -47,12 +47,12 @@ f128 numberToFloat(char *str_begin, char *str_end, bool *success) { c = *str_begin++; } if (c >= '0' && c <= '9') { - if (!isPastPoint) { - left *= 10; - left += c - '0'; - } else { + if (isPastPoint) { right += c - '0'; right /= 10; + } else { + left *= 10; + left += c - '0'; } } else if (c == '.' && !isPastPoint) { isPastPoint = true; diff --git a/test/main.felan b/test/main.felan index fa275e4..b453f6b 100644 --- a/test/main.felan +++ b/test/main.felan @@ -1,18 +1,10 @@ main :: () -> void { - a := 2.3; - a /= 2.5; - print_u64 (if a == 1.15 - 1 - else - 2); - // test(u64,i64); + test(u64,i64); }; -/* test :: (from:type, to:type) -> void { if from == to print_u64 1234; else print_u64 4321; }; -*/ |