summaryrefslogtreecommitdiff
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
parent917846ad0036df0e48bb937ba6206a2905b4a831 (diff)
Fix last bugs in HeatVisitor.java
-rw-r--r--heat/HeatVisitor.java1
-rw-r--r--st/ClassInstance.java10
-rw-r--r--st/SymbolTable.java1
3 files changed, 10 insertions, 2 deletions
diff --git a/heat/HeatVisitor.java b/heat/HeatVisitor.java
index ae3d150..41fd3fe 100644
--- a/heat/HeatVisitor.java
+++ b/heat/HeatVisitor.java
@@ -967,6 +967,7 @@ public class HeatVisitor extends GJDepthFirst<TypeBundle,ArrayList<TypeBundle>>
MinimalLogger.info(String.format("-> %s",
n.getClass().getSimpleName()));
///////////////////////////////////////////////////////////////
+ this.recentClass = (ClassInstance) this.symt.getActive(TypeEnum.classname);
_ret = new TypeBundle(TypeEnum.classname, (ClassInstance) this.symt.getActive(TypeEnum.classname));
///////////////////////////////////////////////////////////////
MinimalLogger.info(String.format("<- %s with %s",
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,