diff options
| author | Yong He <yonghe@outlook.com> | 2023-08-04 15:47:39 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-04 15:47:39 -0700 |
| commit | a2d90fb275962da84611160f8ddd74d934a68dbd (patch) | |
| tree | 066084537b9f4fe1f367de100ed6638a88a028c1 /source/slang/slang-parser.cpp | |
| parent | 17da4f0dec2b86ba3a4bdaf8a2ae112047d23623 (diff) | |
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 <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-parser.cpp')
| -rw-r--r-- | source/slang/slang-parser.cpp | 69 |
1 files changed, 8 insertions, 61 deletions
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<TaggedUnionTypeExpr>(); - - 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<ThisTypeExpr>(); - 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>(); + 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<BasicExpressionType>(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), |
