summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-parser.cpp')
-rw-r--r--source/slang/slang-parser.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index 1302975df..e71b6162c 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -7026,7 +7026,6 @@ static NodeBase* parseSizeOfExpr(Parser* parser, void* /*userData*/)
static NodeBase* parseAlignOfExpr(Parser* parser, void* /*userData*/)
{
- // We could have a type or a variable or an expression
AlignOfExpr* alignOfExpr = parser->astBuilder->create<AlignOfExpr>();
parser->ReadMatchingToken(TokenType::LParent);
@@ -7058,6 +7057,17 @@ static NodeBase* parseCountOfExpr(Parser* parser, void* /*userData*/)
return countOfExpr;
}
+static NodeBase* parseAddressOfExpr(Parser* parser, void* /*userData*/)
+{
+ // We could have a type or a variable or an expression
+ AddressOfExpr* addressOfExpr = parser->astBuilder->create<AddressOfExpr>();
+
+ parser->ReadMatchingToken(TokenType::LParent);
+ addressOfExpr->arg = parser->ParseExpression();
+ parser->ReadMatchingToken(TokenType::RParent);
+ return addressOfExpr;
+}
+
static NodeBase* parseTryExpr(Parser* parser, void* /*userData*/)
{
auto tryExpr = parser->astBuilder->create<TryExpr>();
@@ -9648,6 +9658,7 @@ static const SyntaxParseInfo g_parseSyntaxEntries[] = {
_makeParseExpr("sizeof", parseSizeOfExpr),
_makeParseExpr("alignof", parseAlignOfExpr),
_makeParseExpr("countof", parseCountOfExpr),
+ _makeParseExpr("__getAddress", parseAddressOfExpr),
};
ConstArrayView<SyntaxParseInfo> getSyntaxParseInfos()