From a2d90fb275962da84611160f8ddd74d934a68dbd Mon Sep 17 00:00:00 2001 From: Yong He Date: Fri, 4 Aug 2023 15:47:39 -0700 Subject: Redesign `DeclRef` and systematic `Val` deduplication (#3049) * Redesign DeclRef + Deduplicate Val. * Update project files * Fix warning. * Fix. * Fix. * Remove `Val::_equalsImplOverride`. * Rmove `Val::_getHashCodeOverride`. * Remove `semanticVisitor` param from `resolve`. * Cleanups. --------- Co-authored-by: Yong He --- source/slang/slang-parser.cpp | 69 +++++-------------------------------------- 1 file changed, 8 insertions(+), 61 deletions(-) (limited to 'source/slang/slang-parser.cpp') diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp index cab01d585..4448a96e1 100644 --- a/source/slang/slang-parser.cpp +++ b/source/slang/slang-parser.cpp @@ -1323,10 +1323,9 @@ namespace Slang // parent link is set up correctly. static void AddMember(ContainerDecl* container, Decl* member) { - if (container && member) + if (container) { - member->parentDecl = container; - container->members.add(member); + container->addMember(member); } } @@ -1334,7 +1333,7 @@ namespace Slang { if (scope) { - AddMember(scope->containerDecl, member); + scope->containerDecl->addMember(member); } } @@ -2149,30 +2148,6 @@ namespace Slang } return typeExpr; } - - static Expr* parseTaggedUnionType(Parser* parser) - { - TaggedUnionTypeExpr* taggedUnionType = parser->astBuilder->create(); - - parser->ReadToken(TokenType::LParent); - while(!AdvanceIfMatch(parser, MatchedTokenType::Parentheses)) - { - auto caseType = parser->ParseTypeExp(); - taggedUnionType->caseTypes.add(caseType); - - if(AdvanceIf(parser, TokenType::RParent)) - break; - - parser->ReadToken(TokenType::Comma); - } - - return taggedUnionType; - } - - static NodeBase* parseTaggedUnionType(Parser* parser, void* /*unused*/) - { - return parseTaggedUnionType(parser); - } /// Parse an expression of the form __fwd_diff(fn) where fn is an /// identifier pointing to a function. static Expr* parseForwardDifferentiate(Parser* parser) @@ -2234,19 +2209,6 @@ namespace Slang return parseDispatchKernel(parser); } - /// Parse a `This` type expression - static Expr* parseThisTypeExpr(Parser* parser) - { - ThisTypeExpr* expr = parser->astBuilder->create(); - expr->scope = parser->currentScope; - return expr; - } - - static NodeBase* parseThisTypeExpr(Parser* parser, void* /*userData*/) - { - return parseThisTypeExpr(parser); - } - // (a,b,c) style tuples, curently unused #if 0 static Expr* parseTupleTypeExpr(Parser* parser) @@ -2459,22 +2421,6 @@ namespace Slang typeSpec.expr = createDeclRefType(parser, decl); return typeSpec; } - // TODO: This case would not be needed if we had the - // code below dispatch into `parseAtomicExpr`, which - // already includes logic for keyword lookup. - // - // Leaving this case here for now to avoid breaking anything. - // - else if(AdvanceIf(parser, "__TaggedUnion")) - { - typeSpec.expr = parseTaggedUnionType(parser); - return typeSpec; - } - else if(AdvanceIf(parser, "This")) - { - typeSpec.expr = parseThisTypeExpr(parser); - return typeSpec; - } // Uncomment should we decide to enable (a,b,c) tuple types // else if(parser->LookAheadToken(TokenType::LParent)) // { @@ -3170,7 +3116,7 @@ namespace Slang static NodeBase* parseInterfaceDecl(Parser* parser, void* /*userData*/) { - InterfaceDecl* decl = parser->astBuilder->create(); + InterfaceDecl* decl = parser->astBuilder->createInterfaceDecl(parser->tokenReader.peekLoc()); parser->FillPosition(decl); AdvanceIf(parser, TokenType::CompletionRequest); @@ -4082,6 +4028,8 @@ namespace Slang void Parser::parseSourceFile(ModuleDecl* program) { + SLANG_AST_BUILDER_RAII(astBuilder); + if (outerScope) { currentScope = outerScope; @@ -4328,6 +4276,7 @@ namespace Slang parser->astBuilder, nullptr, // no semantics visitor available yet staticMemberExpr->name, + aggTypeDecl, declRef); if (!lookupResult.isValid() || lookupResult.isOverloaded()) @@ -6252,7 +6201,7 @@ namespace Slang // Need to get the basic type, so we can fit to underlying type if (auto basicExprType = as(intLit->type.type)) { - value = _fixIntegerLiteral(basicExprType->baseType, value, nullptr, nullptr); + value = _fixIntegerLiteral(basicExprType->getBaseType(), value, nullptr, nullptr); } newLiteral->value = value; @@ -6910,14 +6859,12 @@ namespace Slang // !!!!!!!!!!!!!!!!!!!!!!! Expr !!!!!!!!!!!!!!!!!!!!!!!!!!! _makeParseExpr("this", parseThisExpr), - _makeParseExpr("This", parseThisTypeExpr), _makeParseExpr("true", parseTrueExpr), _makeParseExpr("false", parseFalseExpr), _makeParseExpr("nullptr", parseNullPtrExpr), _makeParseExpr("none", parseNoneExpr), _makeParseExpr("try", parseTryExpr), _makeParseExpr("no_diff", parseTreatAsDifferentiableExpr), - _makeParseExpr("__TaggedUnion", parseTaggedUnionType), _makeParseExpr("__fwd_diff", parseForwardDifferentiate), _makeParseExpr("__bwd_diff", parseBackwardDifferentiate), _makeParseExpr("fwd_diff", parseForwardDifferentiate), -- cgit v1.2.3