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.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index f6d85ade9..ee34eac6f 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -2056,6 +2056,25 @@ namespace Slang
{
return parseTaggedUnionType(parser);
}
+ /// Parse an expression of the form __jvp(fn) where fn is an
+ /// identifier pointing to a function.
+ static Expr* parseJVPDerivativeOf(Parser* parser)
+ {
+ JVPDerivativeOfExpr* jvpExpr = parser->astBuilder->create<JVPDerivativeOfExpr>();
+
+ parser->ReadToken(TokenType::LParent);
+
+ jvpExpr->baseFn = parser->ParseExpression();
+
+ parser->ReadToken(TokenType::RParent);
+
+ return jvpExpr;
+ }
+
+ static NodeBase* parseJVPDerivativeOf(Parser* parser, void* /* unused */)
+ {
+ return parseJVPDerivativeOf(parser);
+ }
/// Parse a `This` type expression
static Expr* parseThisTypeExpr(Parser* parser)
@@ -6473,6 +6492,7 @@ namespace Slang
_makeParseExpr("nullptr", parseNullPtrExpr),
_makeParseExpr("try", parseTryExpr),
_makeParseExpr("__TaggedUnion", parseTaggedUnionType),
+ _makeParseExpr("__jvp", parseJVPDerivativeOf)
};
ConstArrayView<SyntaxParseInfo> getSyntaxParseInfos()