summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.c2
-rw-r--r--src/runner/runner.c25
-rw-r--r--src/utils/string.c8
-rw-r--r--test/main.felan10
4 files changed, 31 insertions, 14 deletions
diff --git a/src/main.c b/src/main.c
index 71f6384..3513ff3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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;
};
-*/