From 86e39ea661fd113cd45ed982b142401dfa16022b Mon Sep 17 00:00:00 2001
From: Nicholas Robinson <nwrobins@edu.uwaterloo.ca>
Date: Tue, 3 Mar 2020 12:54:38 -0500
Subject: [PATCH] set self.contains in super checkHierarchy

---
 TypeNodes.py | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/TypeNodes.py b/TypeNodes.py
index dd70d57..17fc44a 100644
--- a/TypeNodes.py
+++ b/TypeNodes.py
@@ -40,7 +40,7 @@ class ClassInterNode(ASTNode):
         # 9. A class or interface must not contain (declare or inherit) two methods with the same signature but different return types
         # 11. A nonstatic method must not replace a static method
         # 13. A protected method must not replace a public method
-        return self.getContains([])
+        self.contains = self.getContains([])
 
     def getContains(self, hierarchy):
         # check if not acyclic
@@ -176,17 +176,15 @@ class ClassNode(ClassInterNode):
                 raise Exception("ERROR: Class '{}' declares 2 constructors with the same parameter types".format(self.name))
             unique.append(key)
 
-        # centralized point for overlapping class & interface logic
-        contains = super().checkHierarchy()
+        # centralized point for overlapping class & interface logic. Also sets self.contains
+        super().checkHierarchy()
 
         # 10. A class that contains (declares or inherits) any abstract methods must be abstract.
-        for con in contains:
+        for con in self.contains:
             if 'abstract' in con.mods and (not('abstract' in self.mods)):
                 raise Exception("ERROR: Non-abstract Class '{}' contains an abstract method".format(self.name))
             if (not con.body) and (not ('native' in con.mods)) and (not ('abstract' in self.mods)) and (not (con in self.constructors)):
                 raise Exception("ERROR: Non-abstract Class '{}' contains an abstract method {}".format(self.name, con.name))
-        
-        self.contains = contains
 
     # hierarchy: string[]
     def getContains(self, hierarchy):
@@ -290,8 +288,8 @@ class InterNode(ClassInterNode):
                     raise Exception("ERROR: Interface '{}' extends duplicate interfaces '{}'".format(self.name, inter.name))
                 unique.append(inter.name)
 
-        # centralized point for overlapping class & interface logic
-        self.contains = super().checkHierarchy()
+        # centralized point for overlapping class & interface logic. Also sets self.contains
+        super().checkHierarchy()
 
     # hierarchy: string[]
     def getContains(self, hierarchy):
-- 
GitLab