summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-parser.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-08-04 15:47:39 -0700
committerGitHub <noreply@github.com>2023-08-04 15:47:39 -0700
commita2d90fb275962da84611160f8ddd74d934a68dbd (patch)
tree066084537b9f4fe1f367de100ed6638a88a028c1 /source/slang/slang-parser.cpp
parent17da4f0dec2b86ba3a4bdaf8a2ae112047d23623 (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.cpp69
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),