aboutsummaryrefslogtreecommitdiff
path: root/src/runner
diff options
context:
space:
mode:
Diffstat (limited to 'src/runner')
-rw-r--r--src/runner/runner.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/runner/runner.c b/src/runner/runner.c
index b909506..3ddeb85 100644
--- a/src/runner/runner.c
+++ b/src/runner/runner.c
@@ -1557,6 +1557,27 @@ AstTree *runExpression(AstTree *expr, AstTreeScope *scope, bool *shouldRet,
return copyAstTree(var->value);
}
}
+ case AST_TREE_TOKEN_VALUE_SHAPE_SHIFTER: {
+ UNREACHABLE;
+ }
+ case AST_TREE_TOKEN_SHAPE_SHIFTER_ELEMENT: {
+ AstTreeShapeShifterElement *metadata = expr->metadata;
+
+ if (metadata->shapeShifter->token != AST_TREE_TOKEN_VARIABLE) {
+ UNREACHABLE;
+ }
+ AstTreeVariable *variable = metadata->shapeShifter->metadata;
+ if (variable->value->token != AST_TREE_TOKEN_VALUE_SHAPE_SHIFTER) {
+ UNREACHABLE;
+ }
+
+ AstTreeShapeShifter *shapeShifter = variable->value->metadata;
+ AstTreeFunction *function =
+ shapeShifter->generateds.functions[metadata->index];
+
+ return newAstTree(AST_TREE_TOKEN_FUNCTION, function,
+ copyAstTree(expr->type), expr->str_begin, expr->str_end);
+ }
case AST_TREE_TOKEN_NONE:
}
UNREACHABLE;