From c2d31347ea06c768045e7c503ef0188e0e5356de Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Thu, 28 May 2020 14:01:51 -0400 Subject: 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. --- source/slang/slang-check-type.cpp | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) (limited to 'source/slang/slang-check-type.cpp') diff --git a/source/slang/slang-check-type.cpp b/source/slang/slang-check-type.cpp index e6c924be8..db5d555cd 100644 --- a/source/slang/slang-check-type.cpp +++ b/source/slang/slang-check-type.cpp @@ -37,7 +37,7 @@ namespace Slang { return typeType->type; } - return getSession()->getErrorType(); + return m_astBuilder->getErrorType(); } RefPtr SemanticsVisitor::TranslateTypeNode(const RefPtr & node) @@ -97,7 +97,7 @@ namespace Slang { return typeType->type; } - return getSession()->getErrorType(); + return m_astBuilder->getErrorType(); } RefPtr SemanticsVisitor::ExtractGenericArgType(RefPtr exp) @@ -114,7 +114,7 @@ namespace Slang // constant expression in context, then we will instead construct // a dummy "error" value to represent the result. // - val = new ErrorIntVal(); + val = m_astBuilder->create(); return val; } @@ -149,7 +149,7 @@ namespace Slang DeclRef genericDeclRef, List> const& args) { - RefPtr subst = new GenericSubstitution(); + RefPtr subst = m_astBuilder->create(); subst->genericDecl = genericDeclRef.getDecl(); subst->outer = genericDeclRef.substitutions.substitutions; @@ -162,9 +162,7 @@ namespace Slang innerDeclRef.decl = GetInner(genericDeclRef); innerDeclRef.substitutions = SubstitutionSet(subst); - return DeclRefType::Create( - getSession(), - innerDeclRef); + return DeclRefType::create(m_astBuilder, innerDeclRef); } bool SemanticsVisitor::CoerceToProperTypeImpl( @@ -216,7 +214,7 @@ namespace Slang if (diagSink) { diagSink->diagnose(typeExp.exp.Ptr(), Diagnostics::genericTypeNeedsArgs, typeExp); - *outProperType = getSession()->getErrorType(); + *outProperType = m_astBuilder->getErrorType(); } return false; } @@ -232,7 +230,7 @@ namespace Slang if (diagSink) { diagSink->diagnose(typeExp.exp.Ptr(), Diagnostics::unimplemented, "can't fill in default for generic type parameter"); - *outProperType = getSession()->getErrorType(); + *outProperType = m_astBuilder->getErrorType(); } return false; } @@ -293,7 +291,7 @@ namespace Slang { // TODO(tfoley): pick the right diagnostic message getSink()->diagnose(result.exp.Ptr(), Diagnostics::invalidTypeVoid); - result.type = getSession()->getErrorType(); + result.type = m_astBuilder->getErrorType(); return result; } } @@ -334,21 +332,18 @@ namespace Slang RefPtr elementType, RefPtr elementCount) { - auto session = getSession(); - auto vectorGenericDecl = findMagicDecl( - session, "Vector").as(); + auto vectorGenericDecl = m_astBuilder->getSharedASTBuilder()->findMagicDecl("Vector").as(); + auto vectorTypeDecl = vectorGenericDecl->inner; - auto substitutions = new GenericSubstitution(); + auto substitutions = m_astBuilder->create(); substitutions->genericDecl = vectorGenericDecl.Ptr(); substitutions->args.add(elementType); substitutions->args.add(elementCount); auto declRef = DeclRef(vectorTypeDecl.Ptr(), substitutions); - return DeclRefType::Create( - session, - declRef).as(); + return DeclRefType::create(m_astBuilder, declRef).as(); } RefPtr SemanticsExprVisitor::visitSharedTypeExpr(SharedTypeExpr* expr) @@ -366,8 +361,8 @@ namespace Slang // We have an expression of the form `__TaggedUnion(A, B, ...)` // which will evaluate to a tagged-union type over `A`, `B`, etc. // - RefPtr type = new TaggedUnionType(); - expr->type = QualType(getTypeType(type)); + RefPtr type = m_astBuilder->create(); + expr->type = QualType(m_astBuilder->getTypeType(type)); for( auto& caseTypeExpr : expr->caseTypes ) { -- cgit v1.2.3