diff options
Diffstat (limited to 'source/slang/slang-parser.cpp')
| -rw-r--r-- | source/slang/slang-parser.cpp | 19 |
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); |
