diff options
| author | Tim Foley <tfoleyNV@users.noreply.github.com> | 2017-09-05 13:16:21 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-09-05 13:16:21 -0700 |
| commit | e59a1b39317c10815baaed3b70c4a6580dbe1e63 (patch) | |
| tree | dc908e481eb5d73ceb7dc9d1f5da1e40d5b0e7e8 /source/slang/lower.cpp | |
| parent | 620734080f825cb205b887fa1d6203e35dd60663 (diff) | |
| parent | 8b91fb8e2db782c73541c83042209b4263402902 (diff) | |
Merge pull request #175 from tfoleyNV/implicit-conversion
Move implicit conversion operations to stdlib
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; } |
