aboutsummaryrefslogtreecommitdiff
path: root/src/runner
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-05-30 14:56:47 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-05-30 14:56:47 +0330
commitc8e1a4ed4885c25ffa3893afe967867852769452 (patch)
treeefde4f6d329c30fb58dd59e02e247e565c4fe75b /src/runner
parent31637af96ec7555b81e742114ff41d80f37e3e6b (diff)
better operator overload
Diffstat (limited to 'src/runner')
-rw-r--r--src/runner/runner.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/runner/runner.c b/src/runner/runner.c
index 04f26b6..b238da2 100644
--- a/src/runner/runner.c
+++ b/src/runner/runner.c
@@ -334,6 +334,23 @@ AstTree *runAstTreeBuiltin(AstTree *tree, AstTreeScope *scope,
case AST_TREE_TOKEN_TYPE_F128:
*(f128 *)ret = *(f128 *)left->metadata + *(f128 *)right->metadata;
break;
+ case AST_TREE_TOKEN_OPERATOR_POINTER:
+ if (typeIsEqual(right->type, &AST_TREE_I64_TYPE)) {
+ *(u8 **)ret =
+ *(u8 **)left->metadata +
+ *(i64 *)right->metadata *
+ getSizeOfType((AstTreeSingleChild *)left->type->metadata);
+ break;
+ } else if (typeIsEqual(right->type, &AST_TREE_U64_TYPE)) {
+ *(u8 **)ret =
+ *(u8 **)left->metadata +
+ *(u64 *)right->metadata *
+ getSizeOfType((AstTreeSingleChild *)left->type->metadata);
+ break;
+ } else {
+ printLog("%s", AST_TREE_TOKEN_STRINGS[right->type->token]);
+ UNREACHABLE;
+ }
default:
UNREACHABLE;
}
@@ -384,6 +401,23 @@ AstTree *runAstTreeBuiltin(AstTree *tree, AstTreeScope *scope,
case AST_TREE_TOKEN_TYPE_F128:
*(f128 *)ret = *(f128 *)left->metadata - *(f128 *)right->metadata;
break;
+ case AST_TREE_TOKEN_OPERATOR_POINTER:
+ if (typeIsEqual(right->type, &AST_TREE_I64_TYPE)) {
+ *(u8 **)ret =
+ *(u8 **)left->metadata -
+ *(i64 *)right->metadata *
+ getSizeOfType((AstTreeSingleChild *)left->type->metadata);
+ break;
+ } else if (typeIsEqual(right->type, &AST_TREE_U64_TYPE)) {
+ *(u8 **)ret =
+ *(u8 **)left->metadata -
+ *(u64 *)right->metadata *
+ getSizeOfType((AstTreeSingleChild *)left->type->metadata);
+ break;
+ } else {
+ printLog("%s", AST_TREE_TOKEN_STRINGS[right->type->token]);
+ UNREACHABLE;
+ }
default:
UNREACHABLE;
}
@@ -1535,7 +1569,7 @@ AstTree *runExpression(AstTree *expr, AstTreeScope *scope, bool *shouldRet,
case AST_TREE_TOKEN_OPERATOR_SHIFT_RIGHT: {
AstTreeInfix *metadata = expr->metadata;
AstTree *function =
- runExpression(metadata->function->value, scope, shouldRet, false,
+ runExpression(metadata->functionCall->function, scope, shouldRet, false,
isComptime, breakCount, shouldContinue, false);
if (discontinue(*shouldRet, *breakCount)) {
return function;