summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-parser.cpp')
-rw-r--r--source/slang/slang-parser.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index 9727140f3..a019f97c4 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -1443,8 +1443,7 @@ static NameLoc ParseDeclName(Parser* parser)
}
else
{
- nameToken = parser->ReadToken(TokenType::Identifier);
- return NameLoc(nameToken);
+ return expectIdentifier(parser);
}
}
@@ -2037,6 +2036,7 @@ static RefPtr<Declarator> parseDirectAbstractDeclarator(
switch (parser->tokenReader.peekTokenType())
{
case TokenType::Identifier:
+ case TokenType::CompletionRequest:
{
auto nameDeclarator = new NameDeclarator();
nameDeclarator->flavor = Declarator::Flavor::name;
@@ -5048,6 +5048,20 @@ static DeclBase* ParseDeclWithModifiers(
decl->loc = loc;
}
break;
+ case TokenType::CompletionRequest:
+ {
+ if (modifiers.hasModifier<OverrideModifier>())
+ {
+ auto resultDecl = parser->astBuilder->create<EmptyDecl>();
+ resultDecl->nameAndLoc = expectIdentifier(parser);
+ decl = resultDecl;
+ }
+ else
+ {
+ decl = ParseDeclaratorDecl(parser, containerDecl, modifiers);
+ }
+ }
+ break;
// If nothing else matched, we try to parse an "ordinary" declarator-based declaration
default:
decl = ParseDeclaratorDecl(parser, containerDecl, modifiers);