From 2a40b613252eb3d7a95624957dca61fdfa30dc2a Mon Sep 17 00:00:00 2001 From: bd-912 Date: Sat, 11 May 2024 15:14:07 -0600 Subject: Fix three more bugs related to st --- output/ex20.java | 22 ++++++++++++++++++++++ output/ex21.java | 24 ++++++++++++++++++++++++ output/negative/ExtendMissing.java | 12 ++++++++++++ st/ClassInstance.java | 4 ++-- st/SymbolTable.java | 4 ++++ 5 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 output/ex20.java create mode 100644 output/ex21.java create mode 100644 output/negative/ExtendMissing.java 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())); -- cgit v1.2.3