summaryrefslogtreecommitdiff
path: root/source/slang/slang-ast-synthesis.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-04-30 14:17:45 -0700
committerGitHub <noreply@github.com>2025-04-30 14:17:45 -0700
commit7f1df9d0b31413e59846cc955d2a955d3f361e2a (patch)
tree8cfcb7b6dde96f90e9581f9a904a25158a7358cb /source/slang/slang-ast-synthesis.cpp
parent678de6547bc8cac15e31de30b400e9a3b45c216f (diff)
Initial support for immutable lambda expressions. (#6914)
* Initial support for immutable lambda expressions. * More diagnostics, and langauge server fix. * Language server fix. * Fix bug identified in review. * Add expected result. * Update expected result.
Diffstat (limited to 'source/slang/slang-ast-synthesis.cpp')
-rw-r--r--source/slang/slang-ast-synthesis.cpp27
1 files changed, 25 insertions, 2 deletions
diff --git a/source/slang/slang-ast-synthesis.cpp b/source/slang/slang-ast-synthesis.cpp
index 58c68c369..c7291f526 100644
--- a/source/slang/slang-ast-synthesis.cpp
+++ b/source/slang/slang-ast-synthesis.cpp
@@ -50,6 +50,13 @@ ForStmt* ASTSynthesizer::emitFor(Expr* initVal, Expr* finalVal, VarDecl*& outInd
return stmt;
}
+Expr* ASTSynthesizer::emitThisExpr()
+{
+ auto varExpr = m_builder->create<ThisExpr>();
+ varExpr->scope = getCurrentScope().m_scope;
+ return varExpr;
+}
+
Expr* ASTSynthesizer::emitVarExpr(Name* name)
{
auto scope = getCurrentScope();
@@ -60,7 +67,7 @@ Expr* ASTSynthesizer::emitVarExpr(Name* name)
return varExpr;
}
-Expr* ASTSynthesizer::emitVarExpr(VarDecl* varDecl)
+Expr* ASTSynthesizer::emitVarExpr(VarDeclBase* varDecl)
{
auto varExpr = m_builder->create<VarExpr>();
varExpr->declRef = makeDeclRef<Decl>(varDecl);
@@ -68,7 +75,7 @@ Expr* ASTSynthesizer::emitVarExpr(VarDecl* varDecl)
return varExpr;
}
-Expr* ASTSynthesizer::emitVarExpr(VarDecl* var, Type* type)
+Expr* ASTSynthesizer::emitVarExpr(VarDeclBase* var, Type* type)
{
auto expr = m_builder->create<VarExpr>();
expr->declRef = makeDeclRef<Decl>(var);
@@ -86,6 +93,14 @@ Expr* ASTSynthesizer::emitVarExpr(DeclStmt* varStmt, Type* type)
return expr;
}
+Expr* ASTSynthesizer::emitStaticTypeExpr(Type* type)
+{
+ auto expr = m_builder->create<SharedTypeExpr>();
+ expr->type.type = m_builder->getTypeType(type);
+ expr->checked = true;
+ return expr;
+}
+
Expr* ASTSynthesizer::emitIntConst(int value)
{
auto expr = m_builder->create<IntegerLiteralExpr>();
@@ -126,6 +141,14 @@ Expr* ASTSynthesizer::emitInvokeExpr(Expr* callee, List<Expr*>&& args)
return rs;
}
+Expr* ASTSynthesizer::emitCtorInvokeExpr(Expr* callee, List<Expr*>&& args)
+{
+ auto rs = m_builder->create<ExplicitCtorInvokeExpr>();
+ rs->functionExpr = callee;
+ rs->arguments = _Move(args);
+ return rs;
+}
+
Expr* ASTSynthesizer::emitGenericAppExpr(Expr* genericExpr, List<Expr*>&& args)
{
auto rs = m_builder->create<GenericAppExpr>();