From 0230e4ab3fec665df0d802d8b408c94cc7e83792 Mon Sep 17 00:00:00 2001 From: Xun Yang <x299yang@uwaterloo.ca> Date: Mon, 13 Apr 2020 13:46:43 -0400 Subject: [PATCH] divide by 0 check --- ExprPrimaryNodes.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ExprPrimaryNodes.py b/ExprPrimaryNodes.py index 033c66c..71674cb 100644 --- a/ExprPrimaryNodes.py +++ b/ExprPrimaryNodes.py @@ -619,7 +619,7 @@ class ExprNode(ASTNode): leftArg = ArgsNode(self.parseTree, self.typeName, [self.left]) # 3. Put it all together concatLeft = MethodInvNode(self.parseTree, self.typeName, valueOfNameNode, leftArg) - + if self.right.myType.name != 'java.lang.String': # 2. Make ArgsNode rightArg = ArgsNode(self.parseTree, self.typeName, [self.right]) @@ -773,7 +773,7 @@ class ExprNode(ASTNode): return # Binary operations: - + # Number Add, Subtract, Multiply if self.op in ['+', '-', '*']: # operation -> generated code @@ -791,6 +791,11 @@ class ExprNode(ASTNode): # switch eax and ebx, because "idiv ebx" -> eax = edx:eax / ebx self.code += p('xchg', 'eax', 'ebx') + # divide by 0 check + if self.op == '/': + self.code += p("cmp", "ebx", "0") + self.code += p("je", "H__Throw_Exception") + self.code += p('push', 'edx') # save edx in case someone else was using it self.code += p('cdq', '', None, " set edx to the sign of eax") self.code += p("idiv", "ebx", "", " left:eax " + self.op + " right:ebx") -- GitLab