summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-conversion.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2020-05-28 14:01:51 -0400
committerGitHub <noreply@github.com>2020-05-28 14:01:51 -0400
commitc2d31347ea06c768045e7c503ef0188e0e5356de (patch)
tree1a4ee67aafca0a709ae691104023431bb6829825 /source/slang/slang-check-conversion.cpp
parente5d0f3360f44a4cdd2390e7817db17bb3cc0dd04 (diff)
WIP: ASTBuilder (#1358)
* Compiles. * Small tidy up around session/ASTBuilder. * Tests are now passing. * Fix Visual Studio project. * Fix using new X to use builder when protectedness of Ctor is not enough. Substitute->substitute * Add some missing ast nodes created outside of ASTBuilder. * Compile time check that ASTBuilder is making an AST type. * Moced findClasInfo and findSyntaxClass (essentially the same thing) to SharedASTBuilder from Session.
Diffstat (limited to 'source/slang/slang-check-conversion.cpp')
-rw-r--r--source/slang/slang-check-conversion.cpp21
1 files changed, 10 insertions, 11 deletions
diff --git a/source/slang/slang-check-conversion.cpp b/source/slang/slang-check-conversion.cpp
index e514caebf..dfcf7ece2 100644
--- a/source/slang/slang-check-conversion.cpp
+++ b/source/slang/slang-check-conversion.cpp
@@ -310,9 +310,8 @@ namespace Slang
// We have a new type for the conversion, based on what
// we learned.
- toType = getSession()->getArrayType(
- toElementType,
- new ConstantIntVal(elementCount));
+ toType = m_astBuilder->getArrayType(toElementType,
+ m_astBuilder->create<ConstantIntVal>(elementCount));
}
}
else if(auto toMatrixType = as<MatrixExpressionType>(toType))
@@ -383,7 +382,7 @@ namespace Slang
{
RefPtr<Expr> coercedArg;
bool argResult = _readValueFromInitializerList(
- GetType(fieldDeclRef),
+ GetType(m_astBuilder, fieldDeclRef),
outToExpr ? &coercedArg : nullptr,
fromInitializerListExpr,
ioArgIndex);
@@ -418,7 +417,7 @@ namespace Slang
//
if(outToExpr)
{
- auto toInitializerListExpr = new InitializerListExpr();
+ auto toInitializerListExpr = m_astBuilder->create<InitializerListExpr>();
toInitializerListExpr->loc = fromInitializerListExpr->loc;
toInitializerListExpr->type = QualType(toType);
toInitializerListExpr->args = coercedArgs;
@@ -575,7 +574,7 @@ namespace Slang
RefPtr<DerefExpr> derefExpr;
if(outToExpr)
{
- derefExpr = new DerefExpr();
+ derefExpr = m_astBuilder->create<DerefExpr>();
derefExpr->base = fromExpr;
derefExpr->type = QualType(fromElementType);
}
@@ -814,7 +813,7 @@ namespace Slang
RefPtr<TypeCastExpr> SemanticsVisitor::createImplicitCastExpr()
{
- return new ImplicitCastExpr();
+ return m_astBuilder->create<ImplicitCastExpr>();
}
RefPtr<Expr> SemanticsVisitor::CreateImplicitCastExpr(
@@ -823,9 +822,9 @@ namespace Slang
{
RefPtr<TypeCastExpr> castExpr = createImplicitCastExpr();
- auto typeType = getTypeType(toType);
+ auto typeType = m_astBuilder->getTypeType(toType);
- auto typeExpr = new SharedTypeExpr();
+ auto typeExpr = m_astBuilder->create<SharedTypeExpr>();
typeExpr->type.type = typeType;
typeExpr->base.type = toType;
@@ -841,7 +840,7 @@ namespace Slang
RefPtr<Expr> fromExpr,
RefPtr<Val> witness)
{
- RefPtr<CastToInterfaceExpr> expr = new CastToInterfaceExpr();
+ RefPtr<CastToInterfaceExpr> expr = m_astBuilder->create<CastToInterfaceExpr>();
expr->loc = fromExpr->loc;
expr->type = QualType(toType);
expr->valueArg = fromExpr;
@@ -866,7 +865,7 @@ namespace Slang
// really shouldn't *change* the expression that is passed in, but should
// introduce new AST nodes to coerce its value to a different type...
return CreateImplicitCastExpr(
- getSession()->getErrorType(),
+ m_astBuilder->getErrorType(),
fromExpr);
}
return expr;