diff options
Diffstat (limited to 'source/slang/parser.cpp')
| -rw-r--r-- | source/slang/parser.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/source/slang/parser.cpp b/source/slang/parser.cpp index d0e965970..1afc8ebcf 100644 --- a/source/slang/parser.cpp +++ b/source/slang/parser.cpp @@ -1769,6 +1769,25 @@ namespace Slang return typeExpr; } + static RefPtr<Expr> parseTaggedUnionType(Parser* parser) + { + RefPtr<TaggedUnionTypeExpr> taggedUnionType = new TaggedUnionTypeExpr(); + + parser->ReadToken(TokenType::LParent); + while(!AdvanceIfMatch(parser, TokenType::RParent)) + { + auto caseType = parser->ParseTypeExp(); + taggedUnionType->caseTypes.Add(caseType); + + if(AdvanceIf(parser, TokenType::RParent)) + break; + + parser->ReadToken(TokenType::Comma); + } + + return taggedUnionType; + } + static TypeSpec parseTypeSpec(Parser* parser) { TypeSpec typeSpec; @@ -1812,6 +1831,11 @@ namespace Slang typeSpec.expr = createDeclRefType(parser, decl); return typeSpec; } + else if(AdvanceIf(parser, "__TaggedUnion")) + { + typeSpec.expr = parseTaggedUnionType(parser); + return typeSpec; + } Token typeName = parser->ReadToken(TokenType::Identifier); |
