diff options
author | bd-912 <bdunahu@colostate.edu> | 2024-05-11 15:14:07 -0600 |
---|---|---|
committer | bd-912 <bdunahu@colostate.edu> | 2024-05-11 15:14:07 -0600 |
commit | 2a40b613252eb3d7a95624957dca61fdfa30dc2a (patch) | |
tree | 94f553dfd35d445af1447834eb9735521ac24397 | |
parent | b8c16f5ff7dffd1ceb51d2115aa2f86a59f090fe (diff) |
Fix three more bugs related to st
-rw-r--r-- | output/ex20.java | 22 | ||||
-rw-r--r-- | output/ex21.java | 24 | ||||
-rw-r--r-- | output/negative/ExtendMissing.java | 12 | ||||
-rw-r--r-- | st/ClassInstance.java | 4 | ||||
-rw-r--r-- | st/SymbolTable.java | 4 |
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())); |