diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-05-30 14:56:47 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-05-30 14:56:47 +0330 |
commit | c8e1a4ed4885c25ffa3893afe967867852769452 (patch) | |
tree | efde4f6d329c30fb58dd59e02e247e565c4fe75b /src/runner | |
parent | 31637af96ec7555b81e742114ff41d80f37e3e6b (diff) |
better operator overload
Diffstat (limited to 'src/runner')
-rw-r--r-- | src/runner/runner.c | 36 |
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; |