diff options
Diffstat (limited to 'source/slang/slang-parser.cpp')
| -rw-r--r-- | source/slang/slang-parser.cpp | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp index f5a217354..3d9f1c199 100644 --- a/source/slang/slang-parser.cpp +++ b/source/slang/slang-parser.cpp @@ -4907,14 +4907,38 @@ namespace Slang // TODO: diagnose this with a warning some day, and move // toward deprecating it. // - AdvanceIf(parser, "class"); + bool isEnumClass = AdvanceIf(parser, "class"); + bool isUnscoped = false; + + if (!isEnumClass) + { + if (parser->options.optionSet.getBoolOption(CompilerOptionName::UnscopedEnum)) + { + isUnscoped = true; + } + } AdvanceIf(parser, TokenType::CompletionRequest); parser->FillPosition(decl); - decl->nameAndLoc = expectIdentifier(parser); + if (parser->tokenReader.peekTokenType() != TokenType::Identifier) + { + decl->nameAndLoc.name = generateName(parser); + decl->nameAndLoc.loc = decl->loc; + isUnscoped = true; + } + else + { + decl->nameAndLoc = expectIdentifier(parser); + } + // If the type needs to be unscoped, insert modifiers to make it so. + if (isUnscoped) + { + addModifier(decl, parser->astBuilder->create<UnscopedEnumAttribute>()); + addModifier(decl, parser->astBuilder->create<TransparentModifier>()); + } return parseOptGenericDecl(parser, [&](GenericDecl*) { |
