diff options
Diffstat (limited to 'source/slang/slang-parser.cpp')
| -rw-r--r-- | source/slang/slang-parser.cpp | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp index 5b6f30477..196b2efa8 100644 --- a/source/slang/slang-parser.cpp +++ b/source/slang/slang-parser.cpp @@ -9388,7 +9388,16 @@ static NodeBase* parseBuiltinRequirementModifier(Parser* parser, void* /*userDat return modifier; } -static NodeBase* parseMagicTypeModifier(Parser* parser, void* /*userData*/) +enum class MagicTypeModifierKind +{ + Type, + Enum, +}; + +static NodeBase* parseMagicTypeModifierImpl( + Parser* parser, + void* /*userData*/, + MagicTypeModifierKind kind) { MagicTypeModifier* modifier = parser->astBuilder->create<MagicTypeModifier>(); parser->ReadToken(TokenType::LParent); @@ -9398,8 +9407,14 @@ static NodeBase* parseMagicTypeModifier(Parser* parser, void* /*userData*/) modifier->tag = uint32_t(stringToInt(parser->ReadToken(TokenType::IntegerLiteral).getContent())); } - auto syntaxClass = parser->astBuilder->findSyntaxClass(getName(parser, modifier->magicName)); - if (syntaxClass) + + if (kind == MagicTypeModifierKind::Enum) + { + modifier->magicNodeType = getSyntaxClass<EnumTypeType>(); + } + else if ( + auto syntaxClass = + parser->astBuilder->findSyntaxClass(getName(parser, modifier->magicName))) { modifier->magicNodeType = syntaxClass; } @@ -9410,6 +9425,16 @@ static NodeBase* parseMagicTypeModifier(Parser* parser, void* /*userData*/) return modifier; } +static NodeBase* parseMagicTypeModifier(Parser* parser, void* userData) +{ + return parseMagicTypeModifierImpl(parser, userData, MagicTypeModifierKind::Type); +} + +static NodeBase* parseMagicEnumModifier(Parser* parser, void* userData) +{ + return parseMagicTypeModifierImpl(parser, userData, MagicTypeModifierKind::Enum); +} + static NodeBase* parseIntrinsicTypeModifier(Parser* parser, void* /*userData*/) { IntrinsicTypeModifier* modifier = parser->astBuilder->create<IntrinsicTypeModifier>(); @@ -9634,6 +9659,7 @@ static const SyntaxParseInfo g_parseSyntaxEntries[] = { _makeParseModifier("__builtin_requirement", parseBuiltinRequirementModifier), _makeParseModifier("__magic_type", parseMagicTypeModifier), + _makeParseModifier("__magic_enum", parseMagicEnumModifier), _makeParseModifier("__intrinsic_type", parseIntrinsicTypeModifier), _makeParseModifier("__implicit_conversion", parseImplicitConversionModifier), |
