diff options
Diffstat (limited to 'st')
-rw-r--r-- | st/ClassInstance.java | 10 | ||||
-rw-r--r-- | st/SymbolTable.java | 1 |
2 files changed, 9 insertions, 2 deletions
diff --git a/st/ClassInstance.java b/st/ClassInstance.java index 3de852f..d51446f 100644 --- a/st/ClassInstance.java +++ b/st/ClassInstance.java @@ -1,6 +1,8 @@ package st; import java.util.ArrayList; + +import heat.TypecheckException; import misc.*; public class ClassInstance extends AbstractInstance { @@ -27,9 +29,13 @@ public class ClassInstance extends AbstractInstance { else return false; - if (o.getName().equals(this.getName())) + if (o.getName().equals(this.getName())) { + MinimalLogger.info(String.format("Found extension end.")); + if (o.getExtend() != null && o.getExtend().equals(this.getExtend())) + throw new TypecheckException(String.format("Recursive extension on %s detected", + this.toString())); return true; - else + } else MinimalLogger.info(String.format("I (%s) do not have the same name as %s... Checking if I extend...", this.getName(), o.getName())); diff --git a/st/SymbolTable.java b/st/SymbolTable.java index 1ec8d29..7b509b2 100644 --- a/st/SymbolTable.java +++ b/st/SymbolTable.java @@ -56,6 +56,7 @@ public class SymbolTable { cls.getName(), ext.getName())); cls.setExtend(ext); + ext.equalsOnExtend(cls); // finds recursive extensions TokenKey k; for (TypeInstance t : ext.getLocals()) { k = new TokenKey(t.getName(), TypeEnum.integer, |