From 7b75fe2185495de0f3668f356c7ba07e2818bc7c Mon Sep 17 00:00:00 2001 From: Xun Yang <x299yang@uwaterloo.ca> Date: Fri, 10 Apr 2020 10:08:43 -0400 Subject: [PATCH] minor fixes to constructor and iffalse --- CodeGenUtils.py | 14 ++++++++++---- MemberNodes.py | 5 +++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/CodeGenUtils.py b/CodeGenUtils.py index 1897f6a..cc8eeaf 100644 --- a/CodeGenUtils.py +++ b/CodeGenUtils.py @@ -86,9 +86,15 @@ def genMethodInvoke(method): return (pro, epi) # generates shorter code for constant value conditionals and comparison conditionals -# cond is either literalNode or ExprNode +# cond is either literalNode or ExprNode or NameNode def iffalse(cond, label): result = "" + if cond.__class__.__name__ == "NameNode": + cond.codeGen() + result += cond.code + result += p("jz", label) + return result + val = cond.getConstant() if val != None: if val == True: @@ -102,7 +108,7 @@ def iffalse(cond, label): return result -# Generates generic (not specific to class) helper functions +# Generates generic (not specific to class) helper functions def genericHelperFunctions(): code = "" @@ -137,9 +143,9 @@ def globalImport(genGlobalFunction=False): if not genGlobalFunction: code += p(instruction="extern", arg1="G__Zero") + \ p(instruction="extern", arg1="H__Throw_Exception") + \ - p(instruction="extern", arg1="H__Null_Check") + p(instruction="extern", arg1="H__Null_Check") - code += "; End of importing helper functions and constants\n" + code += "; End of importing helper functions and constants\n" return code # Helper function for importation of label (only import if it's not already inside the same .s file) diff --git a/MemberNodes.py b/MemberNodes.py index 0c9cb88..0756041 100644 --- a/MemberNodes.py +++ b/MemberNodes.py @@ -105,6 +105,7 @@ class MethodNode(ASTNode): self.typeName = typeName self.order = order self.myType = None + # self.SIToffset for methods that implements interface method # get method name nameNodes = getParseTreeNodes(['ID'], parseTree, ['params', 'type', 'methodBody']) @@ -241,7 +242,7 @@ class MethodNode(ASTNode): self.code += genProcedure(bodyCode, "method definition for " + self.name) else: - self.code += ("mov", "eax", "0") + self.code += p("mov", "eax", "0") self.code += p("ret", "") # This method is called instead of codeGen if this is a constructor @@ -292,7 +293,7 @@ class MethodNode(ASTNode): for i in range(len(vars)): bodyCode += p("pop", "edx") else: - bodyCode += ("mov", "eax", "0") + bodyCode += p("mov", "eax", "0") self.code += genProcedure(bodyCode, "Constructor definition for " + self.name + " " + self.paramTypes) -- GitLab