summaryrefslogtreecommitdiffstats
path: root/source/slang/parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/parser.cpp')
-rw-r--r--source/slang/parser.cpp55
1 files changed, 33 insertions, 22 deletions
diff --git a/source/slang/parser.cpp b/source/slang/parser.cpp
index 62fed75cc..e3982aee4 100644
--- a/source/slang/parser.cpp
+++ b/source/slang/parser.cpp
@@ -4511,35 +4511,46 @@ namespace Slang
}
else
{
- RefPtr<GLSLLayoutModifier> modifier;
-
- // TODO: better handling of this choice (e.g., lookup in scope)
- if(0) {}
- #define CASE(KEYWORD, CLASS) \
- else if(getText(nameAndLoc.name) == #KEYWORD) modifier = new CLASS()
+ if (nameText == "push_constant")
+ {
+ RefPtr<PushConstantAttribute> modifier(new PushConstantAttribute);
- CASE(constant_id, GLSLConstantIDLayoutModifier);
- CASE(location, GLSLLocationLayoutModifier);
- CASE(push_constant, GLSLPushConstantLayoutModifier);
- CASE(local_size_x, GLSLLocalSizeXLayoutModifier);
- CASE(local_size_y, GLSLLocalSizeYLayoutModifier);
- CASE(local_size_z, GLSLLocalSizeZLayoutModifier);
+ modifier->name = nameAndLoc.name;
+ modifier->loc = nameAndLoc.loc;
- #undef CASE
+ listBuilder.add(modifier);
+ }
else
{
- modifier = new GLSLUnparsedLayoutModifier();
- }
+ RefPtr<GLSLLayoutModifier> modifier;
- modifier->name = nameAndLoc.name;
- modifier->loc = nameAndLoc.loc;
+ // TODO: better handling of this choice (e.g., lookup in scope)
+ if(0) {}
+ #define CASE(KEYWORD, CLASS) \
+ else if(nameText == #KEYWORD) modifier = new CLASS()
- if(AdvanceIf(parser, TokenType::OpAssign))
- {
- modifier->valToken = parser->ReadToken(TokenType::IntegerLiteral);
- }
+ CASE(constant_id, GLSLConstantIDLayoutModifier);
+ CASE(location, GLSLLocationLayoutModifier);
+ CASE(local_size_x, GLSLLocalSizeXLayoutModifier);
+ CASE(local_size_y, GLSLLocalSizeYLayoutModifier);
+ CASE(local_size_z, GLSLLocalSizeZLayoutModifier);
- listBuilder.add(modifier);
+ #undef CASE
+ else
+ {
+ modifier = new GLSLUnparsedLayoutModifier();
+ }
+
+ modifier->name = nameAndLoc.name;
+ modifier->loc = nameAndLoc.loc;
+
+ if(AdvanceIf(parser, TokenType::OpAssign))
+ {
+ modifier->valToken = parser->ReadToken(TokenType::IntegerLiteral);
+ }
+
+ listBuilder.add(modifier);
+ }
}
if (AdvanceIf(parser, TokenType::RParent))