From 31c6f300fa5e7feb713cbd9cdcb78d8c04d6b091 Mon Sep 17 00:00:00 2001 From: Nocturn9x Date: Fri, 15 Oct 2021 15:33:12 +0200 Subject: [PATCH] Added constant folding for default arguments in function declarations --- src/backend/meta/ast.nim | 2 +- src/backend/optimizer.nim | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/backend/meta/ast.nim b/src/backend/meta/ast.nim index 7191c41..e1725aa 100644 --- a/src/backend/meta/ast.nim +++ b/src/backend/meta/ast.nim @@ -519,7 +519,7 @@ proc `$`*(self: ASTNode): string = result &= &"Var(name={self.name}, value={self.value}, const={self.isConst}, let={self.isLet}, static={self.isStatic}, private={self.isPrivate})" of funDecl: var self = FunDecl(self) - result &= &"FunDecl(name={self.name}, body={self.body}, arguments=[{self.arguments.join(\", \")}], async={self.isAsync}, generator={self.isGenerator}, static={self.isStatic}, private={self.isPrivate})" + result &= &"FunDecl(name={self.name}, body={self.body}, arguments=[{self.arguments.join(\", \")}], defaults=[{self.defaults.join(\", \")}], async={self.isAsync}, generator={self.isGenerator}, static={self.isStatic}, private={self.isPrivate})" of classDecl: var self = ClassDecl(self) result &= &"Class(name={self.name}, body={self.body}, parents=[{self.parents.join(\", \")}], static={self.isStatic}, private={self.isPrivate})" diff --git a/src/backend/optimizer.nim b/src/backend/optimizer.nim index f09c756..bcdbaa5 100644 --- a/src/backend/optimizer.nim +++ b/src/backend/optimizer.nim @@ -290,6 +290,11 @@ proc optimizeNode(self: Optimizer, node: ASTNode): ASTNode = for keyword in node.arguments.keyword: newArgs.keyword.add((name: keyword.name, value: self.optimizeNode(keyword.value))) result = CallExpr(kind: callExpr, callee: node.callee, arguments: newArgs) + of funDecl: + var decl = FunDecl(node) + for i, node in decl.defaults: + decl.defaults[i] = self.optimizeNode(node) + result = decl of blockStmt: var newBlock = newBlockStmt(@[]) for node in BlockStmt(node).code: