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.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index e5a1ad576..288962cd8 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -1794,6 +1794,19 @@ namespace Slang
return parseTaggedUnionType(parser);
}
+ /// Parse a `This` type expression
+ static RefPtr<Expr> parseThisTypeExpr(Parser* parser)
+ {
+ RefPtr<ThisTypeExpr> expr = new ThisTypeExpr();
+ expr->scope = parser->currentScope;
+ return expr;
+ }
+
+ static RefPtr<RefObject> parseThisTypeExpr(Parser* parser, void* /*userData*/)
+ {
+ return parseThisTypeExpr(parser);
+ }
+
static TypeSpec parseTypeSpec(Parser* parser)
{
TypeSpec typeSpec;
@@ -1848,6 +1861,11 @@ namespace Slang
typeSpec.expr = parseTaggedUnionType(parser);
return typeSpec;
}
+ else if(AdvanceIf(parser, "This"))
+ {
+ typeSpec.expr = parseThisTypeExpr(parser);
+ return typeSpec;
+ }
Token typeName = parser->ReadToken(TokenType::Identifier);
@@ -4995,6 +5013,7 @@ namespace Slang
addBuiltinSyntax<Expr>(session, scope, #KEYWORD, &CALLBACK)
EXPR(this, parseThisExpr);
+ EXPR(This, parseThisTypeExpr);
EXPR(true, parseTrueExpr);
EXPR(false, parseFalseExpr);
EXPR(__TaggedUnion, parseTaggedUnionType);