diff options
Diffstat (limited to 'source/slang/lower.cpp')
| -rw-r--r-- | source/slang/lower.cpp | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/source/slang/lower.cpp b/source/slang/lower.cpp index 7a487d29f..f0d756a02 100644 --- a/source/slang/lower.cpp +++ b/source/slang/lower.cpp @@ -1781,19 +1781,9 @@ struct LoweringVisitor LoweredExpr visitInvokeExpr( InvokeExpr* expr) { - return LoweredExpr(lowerCallExpr(new InvokeExpr(), expr)); - } - - LoweredExpr visitInfixExpr( - InfixExpr* expr) - { - return LoweredExpr(lowerCallExpr(new InfixExpr(), expr)); - } - - LoweredExpr visitPrefixExpr( - PrefixExpr* expr) - { - return LoweredExpr(lowerCallExpr(new PrefixExpr(), expr)); + // Create a clone with the same class + InvokeExpr* loweredExpr = (InvokeExpr*) expr->getClass().createInstance(); + return LoweredExpr(lowerCallExpr(loweredExpr, expr)); } LoweredExpr visitSelectExpr( @@ -1804,12 +1794,6 @@ struct LoweringVisitor return LoweredExpr(lowerCallExpr(new SelectExpr(), expr)); } - LoweredExpr visitPostfixExpr( - PostfixExpr* expr) - { - return LoweredExpr(lowerCallExpr(new PostfixExpr(), expr)); - } - LoweredExpr visitDerefExpr( DerefExpr* expr) { @@ -2412,15 +2396,29 @@ struct LoweringVisitor assign(expr, LoweredExpr(createVarRef(getPosition(expr), varDecl))); } + RefPtr<Expr> createTypeExpr( + RefPtr<Type> type) + { + auto typeType = new TypeType(); + typeType->type = type; + + auto result = new SharedTypeExpr(); + result->base.type = type; + result->type.type = typeType; + + return result; + } + RefPtr<Expr> createCastExpr( - RefPtr<Type> type, + RefPtr<Type> type, RefPtr<Expr> expr) { RefPtr<ExplicitCastExpr> castExpr = new ExplicitCastExpr(); castExpr->loc = expr->loc; castExpr->type.type = type; - castExpr->TargetType.type = type; - castExpr->Expression = expr; + + castExpr->FunctionExpr = createTypeExpr(type); + castExpr->Arguments.Add(expr); return castExpr; } |
