diff options
| author | Yong He <yonghe@outlook.com> | 2025-04-30 14:17:45 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-30 14:17:45 -0700 |
| commit | 7f1df9d0b31413e59846cc955d2a955d3f361e2a (patch) | |
| tree | 8cfcb7b6dde96f90e9581f9a904a25158a7358cb /source/slang/slang-ast-synthesis.cpp | |
| parent | 678de6547bc8cac15e31de30b400e9a3b45c216f (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.cpp | 27 |
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>(); |
