summaryrefslogtreecommitdiff
path: root/st
diff options
context:
space:
mode:
authorbd-912 <bdunahu@colostate.edu>2024-05-12 01:07:41 -0600
committerbd-912 <bdunahu@colostate.edu>2024-05-12 01:07:41 -0600
commit40d176b0e5a6e3bc964f97bc68fa22cf23a2efa2 (patch)
tree8319d70c8faa4057bc590719261b3564d6b721b3 /st
parent917846ad0036df0e48bb937ba6206a2905b4a831 (diff)
Fix last bugs in HeatVisitor.java
Diffstat (limited to 'st')
-rw-r--r--st/ClassInstance.java10
-rw-r--r--st/SymbolTable.java1
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,