From 40d176b0e5a6e3bc964f97bc68fa22cf23a2efa2 Mon Sep 17 00:00:00 2001 From: bd-912 Date: Sun, 12 May 2024 01:07:41 -0600 Subject: Fix last bugs in HeatVisitor.java --- heat/HeatVisitor.java | 1 + st/ClassInstance.java | 10 ++++++++-- st/SymbolTable.java | 1 + 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> 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, -- cgit v1.2.3