diff options
| author | Yong He <yonghe@outlook.com> | 2024-08-19 15:03:56 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-19 15:03:56 -0700 |
| commit | 453683bf44f2112719802eaac2b332d49eebd640 (patch) | |
| tree | d399db4c9cba90c11980186d3df1ffcc4d423b5a /source/slang/slang-parser.cpp | |
| parent | ecf85df6eee3da76ef54b14e4ab083f22da89e46 (diff) | |
Tuple swizzling, concat, comparison and `countof`. (#4856)
* Tuple swizzling and element access.
* Update proposal status.
* Cleanup.
* Fix merrge error.
* Address review.
Diffstat (limited to 'source/slang/slang-parser.cpp')
| -rw-r--r-- | source/slang/slang-parser.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp index c1f0f91c2..5881e5796 100644 --- a/source/slang/slang-parser.cpp +++ b/source/slang/slang-parser.cpp @@ -6281,6 +6281,23 @@ namespace Slang return alignOfExpr; } + static NodeBase* parseCountOfExpr(Parser* parser, void* /*userData*/) + { + // We could have a type or a variable or an expression + CountOfExpr* countOfExpr = parser->astBuilder->create<CountOfExpr>(); + + parser->ReadMatchingToken(TokenType::LParent); + + // The return type is always an Int + countOfExpr->type = parser->astBuilder->getIntType(); + + countOfExpr->value = parser->ParseExpression(); + + parser->ReadMatchingToken(TokenType::RParent); + + return countOfExpr; + } + static NodeBase* parseTryExpr(Parser* parser, void* /*userData*/) { auto tryExpr = parser->astBuilder->create<TryExpr>(); @@ -7549,7 +7566,7 @@ namespace Slang { ExpandExpr* expandExpr = parser->astBuilder->create<ExpandExpr>(); expandExpr->loc = loc; - expandExpr->baseExpr = parser->ParseExpression(); + expandExpr->baseExpr = parser->ParseArgExpr(); return expandExpr; } @@ -7557,7 +7574,7 @@ namespace Slang { EachExpr* eachExpr = parser->astBuilder->create<EachExpr>(); eachExpr->loc = loc; - eachExpr->baseExpr = parser->ParseExpression(); + eachExpr->baseExpr = parser->ParseLeafExpression(); return eachExpr; } @@ -8515,6 +8532,7 @@ namespace Slang _makeParseExpr("__dispatch_kernel", parseDispatchKernel), _makeParseExpr("sizeof", parseSizeOfExpr), _makeParseExpr("alignof", parseAlignOfExpr), + _makeParseExpr("countof", parseCountOfExpr), }; ConstArrayView<SyntaxParseInfo> getSyntaxParseInfos() |
