From 2b6fa1488e2b16187fe32e713e65b8f59f647575 Mon Sep 17 00:00:00 2001
From: pycsham <shampuiyanchloe@gmail.com>
Date: Sat, 29 Feb 2020 00:03:26 -0500
Subject: [PATCH] fixed some protected keyword and abtract keyword issues

---
 MemberNodes.py | 2 +-
 TypeNodes.py   | 5 ++++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/MemberNodes.py b/MemberNodes.py
index 591263b..b805141 100644
--- a/MemberNodes.py
+++ b/MemberNodes.py
@@ -70,7 +70,7 @@ class MethodNode(ASTNode):
                 self.methodType = TypeNode(n)
 
         for node in parseTree.children:
-            if node.name == 'methodMod':
+            if node.name == 'methodMod' or node.name == "interfaceMod":
                 for m in node.children:
                     self.mods.append(m.lex)
 
diff --git a/TypeNodes.py b/TypeNodes.py
index 39d0f5d..18bf449 100644
--- a/TypeNodes.py
+++ b/TypeNodes.py
@@ -177,7 +177,7 @@ class ClassNode(ClassInterNode):
             superContains = self.superClass.getContains(hierarchy + [canonName])
             for con in superContains:
                 conOverwritten = False
-                for method in contains:
+                for index, method in enumerate(contains):
                     if (method == con):
                         # cannot have same signiture but different return types
                         if (method.methodType != con.methodType):
@@ -192,6 +192,9 @@ class ClassNode(ClassInterNode):
                         if 'protected' in method.mods and 'public' in con.mods:
                             raise Exception("ERROR: Protected method '{}' in class '{}' replaces public method '{}' in class {}".format(method.name, self.name, con.name, self.superClass.name))
                         conOverwritten = True
+                        if not method.body:
+                            contains[index] = con
+                            conOverwritten = False
                         break
                 if not conOverwritten:
                     addToContains.append(con)
-- 
GitLab