diff --git a/MemberNodes.py b/MemberNodes.py index 591263bc6f220e2389079b86ee8e37e76220b72d..b80514189e450cccb109ed5bce496a9d4e7b1f09 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 39d0f5dd346cafd5970da7858de5fc0cb5555134..18bf449e7477cadfa78e6298df59820676fb1635 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)