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