summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbd-912 <bdunahu@colostate.edu>2024-05-11 15:14:07 -0600
committerbd-912 <bdunahu@colostate.edu>2024-05-11 15:14:07 -0600
commit2a40b613252eb3d7a95624957dca61fdfa30dc2a (patch)
tree94f553dfd35d445af1447834eb9735521ac24397
parentb8c16f5ff7dffd1ceb51d2115aa2f86a59f090fe (diff)
Fix three more bugs related to st
-rw-r--r--output/ex20.java22
-rw-r--r--output/ex21.java24
-rw-r--r--output/negative/ExtendMissing.java12
-rw-r--r--st/ClassInstance.java4
-rw-r--r--st/SymbolTable.java4
5 files changed, 64 insertions, 2 deletions
diff --git a/output/ex20.java b/output/ex20.java
new file mode 100644
index 0000000..87dca29
--- /dev/null
+++ b/output/ex20.java
@@ -0,0 +1,22 @@
+class ex20 {
+ public static void main(String[] a){
+ System.out.println(new A().start());
+ }
+}
+
+class C extends B{
+}
+
+class B extends A{
+}
+
+class A{
+
+ A a;
+ C c;
+
+ public int start(){
+ a = c;
+ return 0;
+ }
+}
diff --git a/output/ex21.java b/output/ex21.java
new file mode 100644
index 0000000..2bb11a3
--- /dev/null
+++ b/output/ex21.java
@@ -0,0 +1,24 @@
+class test66{
+ public static void main(String[] a){
+ System.out.println(new Test().start());
+ }
+}
+
+class Test2 extends Test{
+}
+
+class Test{
+
+ Test test;
+
+ public int start(){
+ test = test.next();
+ return 0;
+ }
+
+ public Test next() {
+ Test2 test2;
+ test2 = new Test2();
+ return test2;
+ }
+}
diff --git a/output/negative/ExtendMissing.java b/output/negative/ExtendMissing.java
new file mode 100644
index 0000000..72a487a
--- /dev/null
+++ b/output/negative/ExtendMissing.java
@@ -0,0 +1,12 @@
+class ExtendMissing {
+ public static void main(String[] a){
+ System.out.println(new Test().start());
+ }
+}
+
+class Test extends NotPresent { //TE
+
+ public int start(){
+ return 0;
+ }
+}
diff --git a/st/ClassInstance.java b/st/ClassInstance.java
index a7a4500..3de852f 100644
--- a/st/ClassInstance.java
+++ b/st/ClassInstance.java
@@ -39,8 +39,8 @@ public class ClassInstance extends AbstractInstance {
}
ClassInstance te = this.getExtend();
- if (te.equals(o)) {
- MinimalLogger.info(String.format("I (%s) extends %s!", this.getName(), o.getName()));
+ if (te.equalsOnExtend(o)) {
+ MinimalLogger.info(String.format("I (%s) extend %s!", this.getName(), o.getName()));
return true;
}
MinimalLogger.info(String.format("I (%s) do not extend %s! I extend %s instead.", this.getName(), o.getName(), te.getName()));
diff --git a/st/SymbolTable.java b/st/SymbolTable.java
index 0fca239..fa196e3 100644
--- a/st/SymbolTable.java
+++ b/st/SymbolTable.java
@@ -52,6 +52,10 @@ public class SymbolTable {
ClassInstance cls = (ClassInstance) this.active.get(TypeEnum.classname);
ClassInstance ext = this.getClass(arg);
+ if (ext == null)
+ throw new TypecheckException(String.format("There is no %s to extend!",
+ arg));
+
MinimalLogger.info(String.format("%s found to extend %s",
cls.getName(),
ext.getName()));