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