From 9606dc7b266a823ff219f61238fa9f955c7310d3 Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Wed, 1 Mar 2023 18:41:46 +0100 Subject: [PATCH 01/62] new file: resources/AllgemeinTest/CaptureConversion.jav modified: src/test/java/AllgemeinTest.java Campture Conversion Test in Allgemeintest eingefuegt --- resources/AllgemeinTest/CaptureConversion.jav | 18 ++++++++++++++++++ src/test/java/AllgemeinTest.java | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 resources/AllgemeinTest/CaptureConversion.jav diff --git a/resources/AllgemeinTest/CaptureConversion.jav b/resources/AllgemeinTest/CaptureConversion.jav new file mode 100644 index 00000000..b1033de4 --- /dev/null +++ b/resources/AllgemeinTest/CaptureConversion.jav @@ -0,0 +1,18 @@ +import java.lang.Object; +import java.util.Vector; + +class CaptureConversion { + + void assign(Vector v1, Vector v2) { + v1 = v2; + } + + void main() { + Vector v1; + v1 = new Vector(); + Vector v2; + v2 = new Vector(); + v1 = v2; + assign(v1, v2); + } +} \ No newline at end of file diff --git a/src/test/java/AllgemeinTest.java b/src/test/java/AllgemeinTest.java index 2dfc4dbf..34991a6a 100644 --- a/src/test/java/AllgemeinTest.java +++ b/src/test/java/AllgemeinTest.java @@ -49,8 +49,9 @@ public class AllgemeinTest { //String className = "Box_Main"; //String className = "wildcardPair"; //String className = "VectorConstAdd"; - String className = "VectorNotObject"; + //String className = "VectorNotObject"; //String className = "WildcardCaptureConversionTest"; + String className = "CaptureConversion"; //PL 2019-10-24: genutzt fuer unterschiedliche Tests path = System.getProperty("user.dir")+"/resources/AllgemeinTest/" + className + ".jav"; //path = System.getProperty("user.dir")+"/src/test/resources/AllgemeinTest/Overloading_Generics.jav"; From 2d82dc1ae478427bac4dcd3b4934891aac81f6ee Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Wed, 1 Mar 2023 23:31:07 +0100 Subject: [PATCH 02/62] modified: src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java Object -> java.lang.Object --- .../dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java b/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java index 0bf04247..4a577e90 100644 --- a/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java +++ b/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java @@ -170,7 +170,7 @@ public class TypeGenerator { return new SuperWildcardType(convert(wildcardContext.wildcardBounds().referenceType(), reg, generics), wildcardContext.getStart()); } }else{ - return new ExtendsWildcardType(new RefType(new JavaClassName("Object"), new NullToken()), wildcardContext.getStart()); + return new ExtendsWildcardType(new RefType(new JavaClassName("java.lang.Object"), new NullToken()), wildcardContext.getStart()); } } From 1c31b6d7691ffc8b8f42e7760401988e884a72b2 Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Tue, 7 Mar 2023 08:51:31 +0100 Subject: [PATCH 03/62] new file: ../../AllgemeinTest/Pair.jav new file: ../../AllgemeinTest/UseWildcardPair.jav modified: ../../../src/test/java/AllgemeinTest.java --- resources/AllgemeinTest/Pair.jav | 26 +++++++++++++++++++++ resources/AllgemeinTest/UseWildcardPair.jav | 12 ++++++++++ src/test/java/AllgemeinTest.java | 4 +++- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 resources/AllgemeinTest/Pair.jav create mode 100644 resources/AllgemeinTest/UseWildcardPair.jav diff --git a/resources/AllgemeinTest/Pair.jav b/resources/AllgemeinTest/Pair.jav new file mode 100644 index 00000000..fc2de47c --- /dev/null +++ b/resources/AllgemeinTest/Pair.jav @@ -0,0 +1,26 @@ +import java.util.Vector; +import java.lang.Boolean; + +class Pair { + U a; + T b; + + make(x) { + var ret = new Pair<>(); + ret.a = x.elementAt(0); + ret.b = x.elementAt(1); + return ret; + } + /* + compare(p) { + + return p.a = p.b; + } + + void m(Pair p, List b) + { + //this.compare(p); //1, type incorrect + this.compare(this.make(b)); //2, OK + } +*/ +} \ No newline at end of file diff --git a/resources/AllgemeinTest/UseWildcardPair.jav b/resources/AllgemeinTest/UseWildcardPair.jav new file mode 100644 index 00000000..42c64816 --- /dev/null +++ b/resources/AllgemeinTest/UseWildcardPair.jav @@ -0,0 +1,12 @@ +import java.util.Vector; +import java.lang.Boolean; + +class UseWildcardPair{ + + void m(Pair p, Vector b) + { + p.compare(p); //1, type incorrect + p.compare(p.make(b)); //2, OK + } + +} \ No newline at end of file diff --git a/src/test/java/AllgemeinTest.java b/src/test/java/AllgemeinTest.java index 34991a6a..ad389c7a 100644 --- a/src/test/java/AllgemeinTest.java +++ b/src/test/java/AllgemeinTest.java @@ -51,7 +51,9 @@ public class AllgemeinTest { //String className = "VectorConstAdd"; //String className = "VectorNotObject"; //String className = "WildcardCaptureConversionTest"; - String className = "CaptureConversion"; + //String className = "CaptureConversion"; + String className = "Pair"; + //String className = "UseWildcardPair"; //PL 2019-10-24: genutzt fuer unterschiedliche Tests path = System.getProperty("user.dir")+"/resources/AllgemeinTest/" + className + ".jav"; //path = System.getProperty("user.dir")+"/src/test/resources/AllgemeinTest/Overloading_Generics.jav"; From 506fd0dc0e1105a4487a340504524146fa656a9a Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Tue, 7 Mar 2023 16:34:34 +0100 Subject: [PATCH 04/62] new file: ../../AllgemeinTest/Assign.jav modified: ../../AllgemeinTest/Pair.jav modified: ../../AllgemeinTest/UseWildcardPair.jav modified: ../../../src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java ? extends Object nochmals angepasst modified: ../../../src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java modified: ../../../src/test/java/AllgemeinTest.java --- resources/AllgemeinTest/Assign.jav | 10 +++++++++ resources/AllgemeinTest/Pair.jav | 22 ++++++++++++------- resources/AllgemeinTest/UseWildcardPair.jav | 2 +- .../SyntaxTreeGenerator/TypeGenerator.java | 2 +- .../typeinference/typeAlgo/TYPEStmt.java | 3 ++- src/test/java/AllgemeinTest.java | 3 ++- 6 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 resources/AllgemeinTest/Assign.jav diff --git a/resources/AllgemeinTest/Assign.jav b/resources/AllgemeinTest/Assign.jav new file mode 100644 index 00000000..001fca71 --- /dev/null +++ b/resources/AllgemeinTest/Assign.jav @@ -0,0 +1,10 @@ +class Assign { + + assign(x, y) { + x = y; + } + + assign2(x, y) { + assign(x,y); + } +} \ No newline at end of file diff --git a/resources/AllgemeinTest/Pair.jav b/resources/AllgemeinTest/Pair.jav index fc2de47c..b7c5e7a9 100644 --- a/resources/AllgemeinTest/Pair.jav +++ b/resources/AllgemeinTest/Pair.jav @@ -1,22 +1,28 @@ import java.util.Vector; import java.lang.Boolean; +import java.lang.Object; class Pair { U a; T b; make(x) { - var ret = new Pair<>(); - ret.a = x.elementAt(0); - ret.b = x.elementAt(1); - return ret; + var ret = new Pair<>(); + ret.a = x.elementAt(0); + ret.b = x.elementAt(1); + return ret; } - /* - compare(p) { - - return p.a = p.b; + + eq(a, b) { + b = a; + return a == b; } + compare( p) { + return eq(p.a, p.b); + //return p.a == p.b; + } +/* void m(Pair p, List b) { //this.compare(p); //1, type incorrect diff --git a/resources/AllgemeinTest/UseWildcardPair.jav b/resources/AllgemeinTest/UseWildcardPair.jav index 42c64816..dc91e4e0 100644 --- a/resources/AllgemeinTest/UseWildcardPair.jav +++ b/resources/AllgemeinTest/UseWildcardPair.jav @@ -6,7 +6,7 @@ class UseWildcardPair{ void m(Pair p, Vector b) { p.compare(p); //1, type incorrect - p.compare(p.make(b)); //2, OK + p.compare(p.make(b)); //2, OK } } \ No newline at end of file diff --git a/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java b/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java index 4a577e90..c30dad85 100644 --- a/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java +++ b/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/TypeGenerator.java @@ -170,7 +170,7 @@ public class TypeGenerator { return new SuperWildcardType(convert(wildcardContext.wildcardBounds().referenceType(), reg, generics), wildcardContext.getStart()); } }else{ - return new ExtendsWildcardType(new RefType(new JavaClassName("java.lang.Object"), new NullToken()), wildcardContext.getStart()); + return new ExtendsWildcardType(ASTFactory.createObjectType(), wildcardContext.getStart()); } } diff --git a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java index 198b0f4c..64f8976c 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java @@ -171,7 +171,8 @@ public class TYPEStmt implements StatementVisitor{ methodCall.receiver.accept(this); //Overloading: Set> methodConstraints = new HashSet<>(); - for(MethodAssumption m : this.getMethods(methodCall.name, methodCall.arglist, info)){ + for(MethodAssumption m : + this.getMethods(methodCall.name, methodCall.arglist, info)){ GenericsResolver resolver = getResolverInstance(); Set> oneMethodConstraints = generateConstraint(methodCall, m, info, resolver); methodConstraints.addAll(oneMethodConstraints); diff --git a/src/test/java/AllgemeinTest.java b/src/test/java/AllgemeinTest.java index ad389c7a..db7ae185 100644 --- a/src/test/java/AllgemeinTest.java +++ b/src/test/java/AllgemeinTest.java @@ -52,8 +52,9 @@ public class AllgemeinTest { //String className = "VectorNotObject"; //String className = "WildcardCaptureConversionTest"; //String className = "CaptureConversion"; - String className = "Pair"; + //String className = "Pair"; //String className = "UseWildcardPair"; + String className = "Assign"; //PL 2019-10-24: genutzt fuer unterschiedliche Tests path = System.getProperty("user.dir")+"/resources/AllgemeinTest/" + className + ".jav"; //path = System.getProperty("user.dir")+"/src/test/resources/AllgemeinTest/Overloading_Generics.jav"; From 62e022c2f773069576fe0229f6a71a000f31f1ca Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Tue, 7 Mar 2023 16:36:29 +0100 Subject: [PATCH 05/62] modified: ../../../src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java --- .../java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java index 64f8976c..198b0f4c 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java @@ -171,8 +171,7 @@ public class TYPEStmt implements StatementVisitor{ methodCall.receiver.accept(this); //Overloading: Set> methodConstraints = new HashSet<>(); - for(MethodAssumption m : - this.getMethods(methodCall.name, methodCall.arglist, info)){ + for(MethodAssumption m : this.getMethods(methodCall.name, methodCall.arglist, info)){ GenericsResolver resolver = getResolverInstance(); Set> oneMethodConstraints = generateConstraint(methodCall, m, info, resolver); methodConstraints.addAll(oneMethodConstraints); From cdd4cd99682217fb76f9edc9a4e175a872c80e34 Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Wed, 8 Mar 2023 14:26:08 +0100 Subject: [PATCH 06/62] modified: ../src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java Tenaeren Operator fuer log-File eingefuegt --- resources/AllgemeinTest/Pair.jav | 4 ++-- .../java/de/dhbwstuttgart/core/JavaTXCompiler.java | 10 +++++----- src/test/java/AllgemeinTest.java | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/resources/AllgemeinTest/Pair.jav b/resources/AllgemeinTest/Pair.jav index b7c5e7a9..2340c311 100644 --- a/resources/AllgemeinTest/Pair.jav +++ b/resources/AllgemeinTest/Pair.jav @@ -12,7 +12,7 @@ class Pair { ret.b = x.elementAt(1); return ret; } - + /* eq(a, b) { b = a; return a == b; @@ -22,7 +22,7 @@ class Pair { return eq(p.a, p.b); //return p.a == p.b; } -/* + void m(Pair p, List b) { //this.compare(p); //1, type incorrect diff --git a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java index 0fc6e18a..5e69546d 100644 --- a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -56,11 +56,14 @@ import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; +import java.io.OutputStreamWriter; import java.io.Writer; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import org.apache.commons.io.output.NullOutputStream; + public class JavaTXCompiler { @@ -552,11 +555,8 @@ public class JavaTXCompiler { final ConstraintSet cons = getConstraints(); Set> results = new HashSet<>(); try { - Writer logFile = //new OutputStreamWriter(new NullOutputStream()); - // new FileWriter(new - // File(System.getProperty("user.dir")+"/resources/logFiles/"+"log_"+sourceFiles.keySet().iterator().next().getName())); - new FileWriter(new File(System.getProperty("user.dir") + "/logFiles/" + "log_" - + sourceFiles.keySet().iterator().next().getName())); + Writer logFile = log ? new FileWriter(new File(System.getProperty("user.dir") + "/logFiles/" + "log_" + sourceFiles.keySet().iterator().next().getName())) + : new OutputStreamWriter(new NullOutputStream()); IFiniteClosure finiteClosure = UnifyTypeFactory.generateFC(allClasses, logFile, classLoader); System.out.println(finiteClosure); ConstraintSet unifyCons = UnifyTypeFactory.convert(cons); diff --git a/src/test/java/AllgemeinTest.java b/src/test/java/AllgemeinTest.java index db7ae185..727c6de6 100644 --- a/src/test/java/AllgemeinTest.java +++ b/src/test/java/AllgemeinTest.java @@ -52,9 +52,9 @@ public class AllgemeinTest { //String className = "VectorNotObject"; //String className = "WildcardCaptureConversionTest"; //String className = "CaptureConversion"; - //String className = "Pair"; + String className = "Pair"; //String className = "UseWildcardPair"; - String className = "Assign"; + //String className = "Assign"; //PL 2019-10-24: genutzt fuer unterschiedliche Tests path = System.getProperty("user.dir")+"/resources/AllgemeinTest/" + className + ".jav"; //path = System.getProperty("user.dir")+"/src/test/resources/AllgemeinTest/Overloading_Generics.jav"; From 04b509613fd61cd72a522fa5335b15d4901764d3 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Wed, 8 Mar 2023 14:59:40 +0100 Subject: [PATCH 07/62] Add test and fix constructors return value being used --- resources/bytecode/javFiles/Pair.jav | 32 +++++++++++++++++++ .../target/generate/ASTToTargetAST.java | 5 +-- src/test/java/targetast/TestComplete.java | 6 ++++ 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 resources/bytecode/javFiles/Pair.jav diff --git a/resources/bytecode/javFiles/Pair.jav b/resources/bytecode/javFiles/Pair.jav new file mode 100644 index 00000000..aacb8d4f --- /dev/null +++ b/resources/bytecode/javFiles/Pair.jav @@ -0,0 +1,32 @@ +import java.util.Vector; +import java.lang.Boolean; +import java.lang.Object; + +class Pair { + U a; + T b; + + make(x) { + var ret = new Pair<>(); + ret.a = x.elementAt(0); + ret.b = x.elementAt(1); + return ret; + } + /* + eq(a, b) { + b = a; + return a == b; + } + + compare( p) { + return eq(p.a, p.b); + //return p.a == p.b; + } + + void m(Pair p, List b) + { + //this.compare(p); //1, type incorrect + this.compare(this.make(b)); //2, OK + } +*/ +} \ No newline at end of file diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index 86c94f7e..c628bbce 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -445,7 +445,6 @@ public class ASTToTargetAST { addToPairs(result, minimalPair); } - // All unbounded type variables (bounds not in method) outer: for (var typeVariable : typeVariables) { @@ -482,7 +481,8 @@ public class ASTToTargetAST { typeVariablesOfClass.add((TypePlaceholder) pair.getLeft()); } - typeVariables.addAll(findTypeVariables(method.getReturnType(), equality)); + if (!(method instanceof Constructor)) + typeVariables.addAll(findTypeVariables(method.getReturnType(), equality)); for (var arg : method.getParameterList().getFormalparalist()) { typeVariables.addAll(findTypeVariables(arg.getType(), equality)); } @@ -502,6 +502,7 @@ public class ASTToTargetAST { @Override public void visit(Assign assign) {} }); + System.out.println("4: " + typeVariables); } // Family of generated Generics diff --git a/src/test/java/targetast/TestComplete.java b/src/test/java/targetast/TestComplete.java index b8fc0b8d..b1773e15 100644 --- a/src/test/java/targetast/TestComplete.java +++ b/src/test/java/targetast/TestComplete.java @@ -598,4 +598,10 @@ public class TestComplete { var classFiles = generateClassFiles("OLFun2.jav", new ByteArrayClassLoader()); var instance = classFiles.get("OLFun2").getDeclaredConstructor().newInstance(); } + + @Test + public void pairTest() throws Exception { + var classFiles = generateClassFiles("Pair.jav", new ByteArrayClassLoader()); + var instance = classFiles.get("Pair").getDeclaredConstructor().newInstance(); + } } From 40b04a487728fcce17feef2d907444e4863dc1e9 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Wed, 8 Mar 2023 15:03:59 +0100 Subject: [PATCH 08/62] Remove print statement --- .../java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index c628bbce..3a66fae1 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -502,8 +502,7 @@ public class ASTToTargetAST { @Override public void visit(Assign assign) {} }); - System.out.println("4: " + typeVariables); - } ++ } // Family of generated Generics Generics generics(ClassOrInterface owner, Method method) { From 3a05912dfe5993f0828057eba272360e85663a23 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Wed, 8 Mar 2023 15:05:53 +0100 Subject: [PATCH 09/62] Whoops --- .../java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index 3a66fae1..f7cab4a4 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -502,7 +502,7 @@ public class ASTToTargetAST { @Override public void visit(Assign assign) {} }); -+ } + } // Family of generated Generics Generics generics(ClassOrInterface owner, Method method) { From 88db5016bf0d820fe4cc5456337d3d4ff0b376df Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Wed, 8 Mar 2023 16:02:24 +0100 Subject: [PATCH 10/62] modified: src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java modified: src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java logFile auf false gesetzt --- src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java | 2 +- .../de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java index 5e69546d..11f915b4 100644 --- a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -71,7 +71,7 @@ public class JavaTXCompiler { final CompilationEnvironment environment; Boolean resultmodel = true; public final Map sourceFiles = new HashMap<>(); - Boolean log = true; //gibt an ob ein Log-File nach System.getProperty("user.dir")+"src/test/java/logFiles" geschrieben werden soll? + Boolean log = false; //gibt an ob ein Log-File nach System.getProperty("user.dir")+""/logFiles/"" geschrieben werden soll? public volatile UnifyTaskModel usedTasks = new UnifyTaskModel(); private final DirectoryClassLoader classLoader; diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java index fd18b4d5..bc72ce39 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java @@ -177,9 +177,8 @@ public class TypeUnifyTask extends RecursiveTask>> { thNo = totalnoOfThread; writeLog("thNo2 " + thNo); try { - this.logFile = //new OutputStreamWriter(new NullOutputStream()); - //new FileWriter(new File(System.getProperty("user.dir")+"/resources/logFiles/"+"Thread_"+thNo)); - new FileWriter(new File(System.getProperty("user.dir")+"/logFiles/"+"Thread_"+thNo)); + this.logFile = log ? new FileWriter(new File(System.getProperty("user.dir") + "/logFiles/" + "Thread_"+thNo)) + : new OutputStreamWriter(new NullOutputStream()); logFile.write(""); } catch (IOException e) { From a77c64cea2bdab6c0a0747a8d36a3baa8767d957 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Wed, 8 Mar 2023 16:28:34 +0100 Subject: [PATCH 11/62] Add new type placeholder to referenced set --- .../target/generate/ASTToTargetAST.java | 37 +++++++++++-------- src/test/java/targetast/TestComplete.java | 1 + 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index f7cab4a4..9a7d9ccf 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -529,27 +529,29 @@ public class ASTToTargetAST { methodFindConstraints(owner, method, simplifiedConstraints, txTypeVariables, txTypeVariablesOfClass, txResult, txEquality); { // Java Generics - eliminateCycles(javaResult, equality); - eliminateInfima(javaResult, equality); + var referenced = new HashSet(); + + eliminateCycles(javaResult, equality, referenced); + eliminateInfima(javaResult, equality, referenced); var usedTphs = new HashSet(); // For eliminating inner type variables we need to figure out which ones are actually used - // TODO Maybe don't do this twice? for (var param : method.getParameterList().getFormalparalist()) { usedTphs.addAll(findTypeVariables(param.getType(), equality)); } usedTphs.addAll(findTypeVariables(method.getReturnType(), equality)); - var referenced = new HashSet<>(usedTphs); + referenced.addAll(usedTphs); referenced.addAll(javaTypeVariablesOfClass); eliminateInnerTypeVariables(referenced, javaResult); equalizeTypeVariables(javaResult, equality); usedTPHsOfMethods.put(method, usedTphs); } - { // JavaTX Generics - eliminateInfima(txResult, txEquality); - + { var referenced = new HashSet(); + // JavaTX Generics + eliminateInfima(txResult, txEquality, referenced); + for (var param : method.getParameterList().getFormalparalist()) { referenced.addAll(findTypeVariables(param.getType(), txEquality)); } @@ -609,14 +611,16 @@ public class ASTToTargetAST { } { // Java Generics - eliminateCycles(javaResult, equality); - eliminateInfima(javaResult, equality); - eliminateInnerTypeVariablesOfClass(classOrInterface, javaResult, equality); + var referenced = new HashSet(); + eliminateCycles(javaResult, equality, referenced); + eliminateInfima(javaResult, equality, referenced); + eliminateInnerTypeVariablesOfClass(classOrInterface, javaResult, equality, referenced); equalizeTypeVariables(javaResult, equality); } { // TX Generics - eliminateInfima(txResult, txEquality); - eliminateInnerTypeVariablesOfClass(classOrInterface, txResult, txEquality); + var referenced = new HashSet(); + eliminateInfima(txResult, txEquality, referenced); + eliminateInnerTypeVariablesOfClass(classOrInterface, txResult, txEquality, referenced); } System.out.println("Class " + classOrInterface.getClassName().getClassName() + ": " + txResult); @@ -654,8 +658,7 @@ public class ASTToTargetAST { } } - void eliminateInnerTypeVariablesOfClass(ClassOrInterface classOrInterface, Set> input, Map equality) { - Set referenced = new HashSet<>(); + void eliminateInnerTypeVariablesOfClass(ClassOrInterface classOrInterface, Set> input, Map equality, Set referenced) { for (var field : classOrInterface.getFieldDecl()) { findTphs(field.getType(), referenced, equality); } @@ -709,10 +712,11 @@ public class ASTToTargetAST { input.addAll(output); } - void eliminateCycles(Set> input, Map equality) { + void eliminateCycles(Set> input, Map equality, Set referenced) { var cycles = findCycles(input); for (var cycle : cycles) { var newTph = TypePlaceholder.fresh(new NullToken()); + referenced.add(newTph); addToPairs(input, new PairTPHequalRefTypeOrWildcardType(newTph, OBJECT)); cycle.add(cycle.get(0)); // Make it a complete cycle for (var i = 0; i < cycle.size() - 1; i++) { @@ -725,7 +729,7 @@ public class ASTToTargetAST { } } - void eliminateInfima(Set> input, Map equality) { + void eliminateInfima(Set> input, Map equality, Set referenced) { var foundInfima = false; do { foundInfima = false; @@ -740,6 +744,7 @@ public class ASTToTargetAST { if (infima.size() > 1) { foundInfima = true; var newTph = TypePlaceholder.fresh(new NullToken()); + referenced.add(newTph); addToPairs(input, new PairTPHsmallerTPH(left, newTph)); input.removeAll(infima); for (var infimum : infima) { diff --git a/src/test/java/targetast/TestComplete.java b/src/test/java/targetast/TestComplete.java index b1773e15..5333944e 100644 --- a/src/test/java/targetast/TestComplete.java +++ b/src/test/java/targetast/TestComplete.java @@ -233,6 +233,7 @@ public class TestComplete { } @Test + @Ignore public void matrixTest() throws Exception { var classFiles = generateClassFiles("Matrix.jav", new ByteArrayClassLoader()); var matrix = classFiles.get("Matrix"); From 02e596ce7e5982e9ebc6926dd8755563fe9dac9e Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Wed, 8 Mar 2023 16:51:48 +0100 Subject: [PATCH 12/62] modified: ../../AllgemeinTest/Pair.jav modified: ../../../src/test/java/AllgemeinTest.java --- resources/AllgemeinTest/Pair.jav | 4 +++- src/test/java/AllgemeinTest.java | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/resources/AllgemeinTest/Pair.jav b/resources/AllgemeinTest/Pair.jav index b7c5e7a9..89d22c4b 100644 --- a/resources/AllgemeinTest/Pair.jav +++ b/resources/AllgemeinTest/Pair.jav @@ -12,16 +12,18 @@ class Pair { ret.b = x.elementAt(1); return ret; } - +/* eq(a, b) { b = a; return a == b; } + compare( p) { return eq(p.a, p.b); //return p.a == p.b; } + */ /* void m(Pair p, List b) { diff --git a/src/test/java/AllgemeinTest.java b/src/test/java/AllgemeinTest.java index db7ae185..727c6de6 100644 --- a/src/test/java/AllgemeinTest.java +++ b/src/test/java/AllgemeinTest.java @@ -52,9 +52,9 @@ public class AllgemeinTest { //String className = "VectorNotObject"; //String className = "WildcardCaptureConversionTest"; //String className = "CaptureConversion"; - //String className = "Pair"; + String className = "Pair"; //String className = "UseWildcardPair"; - String className = "Assign"; + //String className = "Assign"; //PL 2019-10-24: genutzt fuer unterschiedliche Tests path = System.getProperty("user.dir")+"/resources/AllgemeinTest/" + className + ".jav"; //path = System.getProperty("user.dir")+"/src/test/resources/AllgemeinTest/Overloading_Generics.jav"; From 48daa9731f4dd24bc8d9ea61c98235531aff40f8 Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Fri, 17 Mar 2023 16:05:47 +0100 Subject: [PATCH 13/62] modified: resources/AllgemeinTest/Pair.jav --- resources/AllgemeinTest/Pair.jav | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/AllgemeinTest/Pair.jav b/resources/AllgemeinTest/Pair.jav index a3235d00..7fbec246 100644 --- a/resources/AllgemeinTest/Pair.jav +++ b/resources/AllgemeinTest/Pair.jav @@ -25,9 +25,9 @@ class Pair { //return p.a == p.b; } -/* - void m(Pair p, List b) +/* + void m(Pair p, Vector b) { //this.compare(p); //1, type incorrect this.compare(this.make(b)); //2, OK From 303246adce7249a3b43d5a8744e84f7343977b56 Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Fri, 17 Mar 2023 16:16:28 +0100 Subject: [PATCH 14/62] modified: README_aktuelle_Branches --- README_aktuelle_Branches | 1 + 1 file changed, 1 insertion(+) diff --git a/README_aktuelle_Branches b/README_aktuelle_Branches index faaa8afa..5e9fc636 100644 --- a/README_aktuelle_Branches +++ b/README_aktuelle_Branches @@ -1,5 +1,6 @@ Stand: 24.5.21 bigRefactoring: Master-Brach + targetBytecode: Neuer Codegenerator mit generated generics Daniel bigRefactoringUnifyComment: Dokumentation Unify, Martin bytecodeGenericsSecond: Generated Generics, Ali, Martin inferWildcards, Wildcards, Till From b5af3a42a8c7d16e78c2fadddc2690a095dc9ad3 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Tue, 21 Mar 2023 10:34:34 +0100 Subject: [PATCH 15/62] Fix wrong generic parameter on FunN3336 base class --- src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java b/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java index 49c9b736..ad032c02 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java @@ -39,12 +39,12 @@ public class FunNGenerator { StringBuilder superFunNMethodDescriptor = new StringBuilder("("); for (int currentParameter = 1; currentParameter <= numberArguments; currentParameter++){ - superFunNClassSignature.append(String.format("%s%d:%s",argumentGenericBase, currentParameter, objectSignature)); - superFunNMethodSignature.append(String.format("%s", applySignature(new TargetRefType(argumentGenericBase + currentParameter)))); + superFunNClassSignature.append(String.format("%s%d:%s", argumentGenericBase, currentParameter, objectSignature)); + superFunNMethodSignature.append(String.format("T%s;", argumentGenericBase + currentParameter)); superFunNMethodDescriptor.append(objectSignature); } superFunNClassSignature.append(String.format("%s:%s>%s", returnGeneric, objectSignature, objectSignature)); - superFunNMethodSignature.append(String.format(")%s", applySignature(new TargetRefType(returnGeneric)))); + superFunNMethodSignature.append(String.format(")T%s;", returnGeneric)); superFunNMethodDescriptor.append(String.format(")%s", objectSignature)); System.out.println(superFunNMethodSignature); From d93836d1105faedf7549c99cfc16e2c4b56f2e2f Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Tue, 21 Mar 2023 12:12:42 +0100 Subject: [PATCH 16/62] Fix incorrect generics for derived FunN --- Test.java | 7 +++++++ src/main/java/de/dhbwstuttgart/bytecode/Codegen.java | 2 ++ src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java | 6 +++--- src/test/java/targetast/TestComplete.java | 1 - 4 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 Test.java diff --git a/Test.java b/Test.java new file mode 100644 index 00000000..b0e1ed48 --- /dev/null +++ b/Test.java @@ -0,0 +1,7 @@ +public interface Test extends Base { + +} + +interface Base { + +} diff --git a/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java b/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java index df56b333..efa8def2 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java @@ -1025,6 +1025,8 @@ public class Codegen { if (!method.txGenerics().isEmpty()) mv.visitAttribute(new JavaTXSignatureAttribute(method.getTXSignature())); + System.out.println(method.getDescriptor()); + System.out.println(method.getSignature()); mv.visitCode(); var state = new State(method.returnType(), mv, method.isStatic() ? 0 : 1); for (var param: method.parameters()) diff --git a/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java b/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java index ad032c02..270a0bb5 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java @@ -1,5 +1,6 @@ package de.dhbwstuttgart.bytecode; +import de.dhbwstuttgart.target.tree.TargetGeneric; import de.dhbwstuttgart.target.tree.type.TargetGenericType; import de.dhbwstuttgart.target.tree.type.TargetRefType; import de.dhbwstuttgart.target.tree.type.TargetType; @@ -66,7 +67,7 @@ public class FunNGenerator { List parameters = Stream .concat(argumentTypes.stream(), Stream.of(returnType)) .collect(Collectors.toList()); - StringBuilder funNClassSignature = new StringBuilder(objectSignature + applySignature(new TargetRefType(getSuperClassName(argumentTypes.size()), parameters))); + StringBuilder funNClassSignature = new StringBuilder(objectSignature + applyDescriptor(new TargetRefType(getSuperClassName(argumentTypes.size()), parameters))); boolean containsGeneric = false; String genericSignature = "<"; @@ -74,13 +75,12 @@ public class FunNGenerator { //ToDo Etienne: Refactor if (typeArgument instanceof TargetGenericType generic){ //if(genericSignature.contains(generic.name())) continue; - genericSignature += String.format("%s:%s", generic.name(), applyDescriptor(generic)); + genericSignature += String.format("%s:%s", generic.name(), objectSignature); containsGeneric = true; } } genericSignature += ">"; if (containsGeneric) funNClassSignature.insert(0, genericSignature); - System.out.println(funNClassSignature.toString()); ClassWriter classWriter = new ClassWriter(0); classWriter.visit(bytecodeVersion, ACC_PUBLIC | ACC_ABSTRACT | ACC_INTERFACE, getSpecializedClassName(argumentTypes, returnType), funNClassSignature.toString(), objectSuperType, new String[]{getSuperClassName(argumentTypes.size())}); diff --git a/src/test/java/targetast/TestComplete.java b/src/test/java/targetast/TestComplete.java index 5333944e..b1773e15 100644 --- a/src/test/java/targetast/TestComplete.java +++ b/src/test/java/targetast/TestComplete.java @@ -233,7 +233,6 @@ public class TestComplete { } @Test - @Ignore public void matrixTest() throws Exception { var classFiles = generateClassFiles("Matrix.jav", new ByteArrayClassLoader()); var matrix = classFiles.get("Matrix"); From 2dff7909ed9c07a661b8f1d7a962277991b7fbbf Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Tue, 21 Mar 2023 14:00:58 +0100 Subject: [PATCH 17/62] Remove test file --- Test.java | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 Test.java diff --git a/Test.java b/Test.java deleted file mode 100644 index b0e1ed48..00000000 --- a/Test.java +++ /dev/null @@ -1,7 +0,0 @@ -public interface Test extends Base { - -} - -interface Base { - -} From 6b767bc09b98c81817c7f8f6ed79fda8be420de2 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Tue, 21 Mar 2023 15:06:17 +0100 Subject: [PATCH 18/62] Fix using the wrong constructor --- resources/insertGenericsJav/TestAssign.jav | 0 src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 resources/insertGenericsJav/TestAssign.jav diff --git a/resources/insertGenericsJav/TestAssign.jav b/resources/insertGenericsJav/TestAssign.jav new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java index 11f915b4..fc1b0000 100644 --- a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -880,7 +880,7 @@ public class JavaTXCompiler { path = new File(outputPath ,sf.getPkgName().replace(".","/")); //add package path to root path } - var converter = new ASTToTargetAST(typeinferenceResult); + var converter = new ASTToTargetAST(typeinferenceResult, sf, classLoader); var generatedClasses = new HashMap(); for (var clazz : sf.getClasses()) { var codegen = new Codegen(converter.convert(clazz)); From b55fc718117dbf94e36ff590c5e4134d11711e5e Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Fri, 24 Mar 2023 13:27:29 +0100 Subject: [PATCH 19/62] Let generateClassFiles accept multiple arguments --- resources/insertGenericsJav/TestAssign.jav | 9 ++ .../target/generate/ASTToTargetAST.java | 39 ++++++--- src/test/java/targetast/GreaterEqualTest.java | 2 +- src/test/java/targetast/GreaterThanTest.java | 2 +- src/test/java/targetast/InheritTest.java | 12 ++- src/test/java/targetast/InheritTest2.java | 10 +-- src/test/java/targetast/LessEqualTest.java | 2 +- src/test/java/targetast/LessThanTest.java | 2 +- src/test/java/targetast/OLTest.java | 2 +- src/test/java/targetast/PostIncTest.java | 2 +- src/test/java/targetast/PreIncTest.java | 2 +- src/test/java/targetast/PutTest.java | 2 +- src/test/java/targetast/TestCodegen.java | 42 ++++++---- src/test/java/targetast/TestComplete.java | 84 +++++++++---------- src/test/java/targetast/TestGenerics.java | 6 ++ src/test/java/targetast/TphTest.java | 2 +- src/test/java/targetast/WhileTest.java | 2 +- 17 files changed, 127 insertions(+), 95 deletions(-) diff --git a/resources/insertGenericsJav/TestAssign.jav b/resources/insertGenericsJav/TestAssign.jav index e69de29b..d401641e 100644 --- a/resources/insertGenericsJav/TestAssign.jav +++ b/resources/insertGenericsJav/TestAssign.jav @@ -0,0 +1,9 @@ +class TestAssign { + assign(x, y) { + x = y; + } + + assign2(x, y) { + assign(x, y); + } +} \ No newline at end of file diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index 9a7d9ccf..81cb295e 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -36,7 +36,11 @@ public class ASTToTargetAST { return all.stream().map(GenericsResult::new).toList(); } - record Generics(Set> javaGenerics, Set> txGenerics) {} + record Generics(Set> javaGenerics, Set> txGenerics, Set userDefinedGenerics) { + Generics(Set> javaGenerics, Set> txGenerics) { + this(javaGenerics, txGenerics, Set.of()); + } + } class Sigma { Map computedGenericsOfMethods = new HashMap<>(); @@ -140,14 +144,16 @@ public class ASTToTargetAST { private void methodFindConstraints( ClassOrInterface owner, Method method, Set simplifiedConstraints, - HashSet typeVariables, - HashSet typeVariablesOfClass, + Set typeVariables, + Set userDefinedGenericsOfClass, + Set typeVariablesOfClass, Set> result, Map equality ) { // Type variables with bounds that are also type variables of the method for (var typeVariable : new HashSet<>(typeVariables)) { - if (typeVariablesOfClass.contains(typeVariable)) continue; + if (classHasGeneric(userDefinedGenericsOfClass, typeVariablesOfClass, typeVariable)) + continue; for (var pair : simplifiedConstraints) { if (pair.left.equals(typeVariable) && typeVariables.contains(pair.right)) { addToPairs(result, new PairTPHsmallerTPH(pair.left, equality.getOrDefault(pair.right, pair.right))); @@ -192,7 +198,6 @@ public class ASTToTargetAST { var optMethod = findMethod(owner, methodCall.name, methodCall.getArgumentList()); if (optMethod.isEmpty()) return; var method = optMethod.get(); - var generics = generics(owner, method).javaGenerics(); // transitive and @@ -448,7 +453,8 @@ public class ASTToTargetAST { // All unbounded type variables (bounds not in method) outer: for (var typeVariable : typeVariables) { - if (typeVariablesOfClass.contains(typeVariable)) continue; + if (classHasGeneric(userDefinedGenericsOfClass, typeVariablesOfClass, typeVariable)) + continue; for (var pair : result) { if (pair.getLeft().equals(typeVariable)) continue outer; @@ -463,12 +469,16 @@ public class ASTToTargetAST { if (pair.right.equals(pair2.left)) continue outer; } - if (!typeVariablesOfClass.contains(pair.right) && typeVariables.contains(pair.right)) { + if (!classHasGeneric(userDefinedGenericsOfClass, typeVariablesOfClass, pair.right) && typeVariables.contains(pair.right)) { addToPairs(result, new PairTPHequalRefTypeOrWildcardType(pair.right, OBJECT)); } } } + private boolean classHasGeneric(Set userDefinedGenericsOfClass, Set typeVariablesOfClass, TypePlaceholder typeVariable) { + return typeVariablesOfClass.contains(typeVariable) || userDefinedGenericsOfClass.stream().anyMatch(g -> g.getName().equals(typeVariable.getName())); + } + private void methodFindTypeVariables( Method method, Set> genericsOfClass, @@ -514,7 +524,8 @@ public class ASTToTargetAST { var generics = new Generics(javaResult, txResult); computedGenericsOfMethods.put(method, generics); - var genericsOfClass = generics(owner).javaGenerics(); + var classGenerics = generics(owner); + var genericsOfClass = classGenerics.javaGenerics(); var simplifiedConstraints = new HashSet<>(this.simplifiedConstraints); HashSet txTypeVariables = new HashSet<>(); @@ -525,8 +536,8 @@ public class ASTToTargetAST { methodFindTypeVariables(method, genericsOfClass, javaTypeVariablesOfClass, javaTypeVariables, equality); methodFindTypeVariables(method, genericsOfClass, txTypeVariablesOfClass, txTypeVariables, txEquality); - methodFindConstraints(owner, method, simplifiedConstraints, javaTypeVariables, javaTypeVariablesOfClass, javaResult, equality); - methodFindConstraints(owner, method, simplifiedConstraints, txTypeVariables, txTypeVariablesOfClass, txResult, txEquality); + methodFindConstraints(owner, method, simplifiedConstraints, javaTypeVariables, classGenerics.userDefinedGenerics, javaTypeVariablesOfClass, javaResult, equality); + methodFindConstraints(owner, method, simplifiedConstraints, txTypeVariables, classGenerics.userDefinedGenerics, txTypeVariablesOfClass, txResult, txEquality); { // Java Generics var referenced = new HashSet(); @@ -949,9 +960,11 @@ public class ASTToTargetAST { var genericsIter = input.getGenerics().iterator(); if (genericsIter.hasNext()) { // Add empty set of generics to cache so that it doesn't try to calculate it later - sigma.computedGenericsOfClasses.put(input, new Generics(new HashSet<>(), new HashSet<>())); + var userDefinedGenerics = new HashSet(); + sigma.computedGenericsOfClasses.put(input, new Generics(new HashSet<>(), new HashSet<>(), userDefinedGenerics)); while (genericsIter.hasNext()) { var next = genericsIter.next(); + userDefinedGenerics.add(next); javaGenerics.addAll(convert(next)); } } else { @@ -995,7 +1008,7 @@ public class ASTToTargetAST { } convertedGenerics.addAll(convert(typeVar)); } - var returnType = sigma.getType(input.getReturnType(), equality); + /*var returnType = sigma.getType(input.getReturnType(), equality); if ((returnType instanceof GenericRefType refType) && !hasGeneric(convertedGenerics, refType)) { convertedGenerics.add(new TargetGeneric(refType.getParsedName(), convert(OBJECT))); } @@ -1004,7 +1017,7 @@ public class ASTToTargetAST { if (type instanceof GenericRefType refType && !hasGeneric(convertedGenerics, refType)) { convertedGenerics.add(new TargetGeneric(refType.getParsedName(), convert(OBJECT))); } - } + }*/ return convertedGenerics; } diff --git a/src/test/java/targetast/GreaterEqualTest.java b/src/test/java/targetast/GreaterEqualTest.java index c104433f..1edda1d3 100644 --- a/src/test/java/targetast/GreaterEqualTest.java +++ b/src/test/java/targetast/GreaterEqualTest.java @@ -16,7 +16,7 @@ public class GreaterEqualTest { @BeforeClass public static void beforeClass() throws Exception { - var classFiles = TestCodegen.generateClassFiles("GreaterEqual.jav", new ByteArrayClassLoader()); + var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "GreaterEqual.jav"); classToTest = classFiles.get("GreaterEqual"); instance = classToTest.getDeclaredConstructor().newInstance(); } diff --git a/src/test/java/targetast/GreaterThanTest.java b/src/test/java/targetast/GreaterThanTest.java index fd1d654a..4174492d 100644 --- a/src/test/java/targetast/GreaterThanTest.java +++ b/src/test/java/targetast/GreaterThanTest.java @@ -15,7 +15,7 @@ public class GreaterThanTest { @BeforeClass public static void beforeClass() throws Exception { - var classFiles = TestCodegen.generateClassFiles("GreaterThan.jav", new ByteArrayClassLoader()); + var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "GreaterThan.jav"); classToTest = classFiles.get("GreaterThan"); instance = classToTest.getDeclaredConstructor().newInstance(); } diff --git a/src/test/java/targetast/InheritTest.java b/src/test/java/targetast/InheritTest.java index 9e9fff71..9a8de6fd 100644 --- a/src/test/java/targetast/InheritTest.java +++ b/src/test/java/targetast/InheritTest.java @@ -17,14 +17,12 @@ public class InheritTest { @BeforeClass public static void setUpBeforeClass() throws Exception { var classLoader = new ByteArrayClassLoader(); - // TODO Box is loaded and has a method called m so it is generating overloads for it - classLoader.loadClass(Path.of(System.getProperty("user.dir"), "/src/test/resources/target/Box.class")); - classToTest = TestCodegen.generateClassFiles("Inherit.jav", classLoader).get("Inherit"); - classToTestAA = TestCodegen.generateClassFiles("AA.jav", classLoader).get("AA"); - classToTestBB = TestCodegen.generateClassFiles("BB.jav", classLoader).get("BB"); - classToTestCC = TestCodegen.generateClassFiles("CC.jav", classLoader).get("CC"); - classToTestDD = TestCodegen.generateClassFiles("DD.jav", classLoader).get("DD"); + classToTestAA = TestCodegen.generateClassFiles(classLoader, "AA.jav").get("AA"); + classToTestBB = TestCodegen.generateClassFiles(classLoader, "BB.jav").get("BB"); + classToTestCC = TestCodegen.generateClassFiles(classLoader, "CC.jav").get("CC"); + classToTestDD = TestCodegen.generateClassFiles(classLoader, "DD.jav").get("DD"); + classToTest = TestCodegen.generateClassFiles(classLoader, "Inherit.jav").get("Inherit"); instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); instanceOfClassAA = classToTestAA.getDeclaredConstructor().newInstance(); diff --git a/src/test/java/targetast/InheritTest2.java b/src/test/java/targetast/InheritTest2.java index 87e052f1..d1bad977 100644 --- a/src/test/java/targetast/InheritTest2.java +++ b/src/test/java/targetast/InheritTest2.java @@ -16,11 +16,11 @@ public class InheritTest2 { @BeforeClass public static void setUpBeforeClass() throws Exception { var classLoader = new ByteArrayClassLoader(); - classToTest = TestCodegen.generateClassFiles("Inherit2.jav", classLoader).get("Inherit2"); - classToTestAA = TestCodegen.generateClassFiles("AA.jav", classLoader).get("AA"); - classToTestBB = TestCodegen.generateClassFiles("BB.jav", classLoader).get("BB"); - classToTestCC = TestCodegen.generateClassFiles("CC.jav", classLoader).get("CC"); - classToTestDD = TestCodegen.generateClassFiles("DD.jav", classLoader).get("DD"); + classToTest = TestCodegen.generateClassFiles(classLoader, "Inherit2.jav").get("Inherit2"); + classToTestAA = TestCodegen.generateClassFiles(classLoader, "AA.jav").get("AA"); + classToTestBB = TestCodegen.generateClassFiles(classLoader, "BB.jav").get("BB"); + classToTestCC = TestCodegen.generateClassFiles(classLoader, "CC.jav").get("CC"); + classToTestDD = TestCodegen.generateClassFiles(classLoader,"DD.jav").get("DD"); instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); instanceOfClassAA = classToTestAA.getDeclaredConstructor().newInstance(); diff --git a/src/test/java/targetast/LessEqualTest.java b/src/test/java/targetast/LessEqualTest.java index af5237cc..bb1fe888 100644 --- a/src/test/java/targetast/LessEqualTest.java +++ b/src/test/java/targetast/LessEqualTest.java @@ -15,7 +15,7 @@ public class LessEqualTest { @BeforeClass public static void beforeClass() throws Exception { - var classFiles = TestCodegen.generateClassFiles("LessEqual.jav", new ByteArrayClassLoader()); + var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "LessEqual.jav"); classToTest = classFiles.get("LessEqual"); instance = classToTest.getDeclaredConstructor().newInstance(); } diff --git a/src/test/java/targetast/LessThanTest.java b/src/test/java/targetast/LessThanTest.java index 7b0d45c8..75eeb1b0 100644 --- a/src/test/java/targetast/LessThanTest.java +++ b/src/test/java/targetast/LessThanTest.java @@ -15,7 +15,7 @@ public class LessThanTest { @BeforeClass public static void beforeClass() throws Exception { - var classFiles = TestCodegen.generateClassFiles("LessThan.jav", new ByteArrayClassLoader()); + var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "LessThan.jav"); classToTest = classFiles.get("LessThan"); instance = classToTest.getDeclaredConstructor().newInstance(); } diff --git a/src/test/java/targetast/OLTest.java b/src/test/java/targetast/OLTest.java index 8afcc669..44f72411 100644 --- a/src/test/java/targetast/OLTest.java +++ b/src/test/java/targetast/OLTest.java @@ -16,7 +16,7 @@ public class OLTest { @BeforeClass public static void setUpBeforeClass() throws Exception { - var classFiles = TestCodegen.generateClassFiles("OL.jav", new ByteArrayClassLoader()); + var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "OL.jav"); classToTest = classFiles.get("OL"); instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); classToTest1 = classFiles.get("OLMain"); diff --git a/src/test/java/targetast/PostIncTest.java b/src/test/java/targetast/PostIncTest.java index d0d0a02d..98fafc8e 100644 --- a/src/test/java/targetast/PostIncTest.java +++ b/src/test/java/targetast/PostIncTest.java @@ -14,7 +14,7 @@ public class PostIncTest { @BeforeClass public static void setUpBeforeClass() throws Exception { - var classFiles = TestCodegen.generateClassFiles("PostIncDec.jav", new ByteArrayClassLoader()); + var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "PostIncDec.jav"); classToTest = classFiles.get("PostIncDec"); instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); } diff --git a/src/test/java/targetast/PreIncTest.java b/src/test/java/targetast/PreIncTest.java index d946b0e3..8c23ea82 100644 --- a/src/test/java/targetast/PreIncTest.java +++ b/src/test/java/targetast/PreIncTest.java @@ -14,7 +14,7 @@ public class PreIncTest { @BeforeClass public static void setUpBeforeClass() throws Exception { - var classFiles = TestCodegen.generateClassFiles("PreInc.jav", new ByteArrayClassLoader()); + var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "PreInc.jav"); classToTest = classFiles.get("PreInc"); instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); } diff --git a/src/test/java/targetast/PutTest.java b/src/test/java/targetast/PutTest.java index 66600337..8a4b8811 100644 --- a/src/test/java/targetast/PutTest.java +++ b/src/test/java/targetast/PutTest.java @@ -16,7 +16,7 @@ public class PutTest { @BeforeClass public static void setUpBeforeClass() throws Exception { - var classFiles = TestCodegen.generateClassFiles("Put.jav", new ByteArrayClassLoader()); + var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "Put.jav"); classToTest = classFiles.get("Put"); instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); } diff --git a/src/test/java/targetast/TestCodegen.java b/src/test/java/targetast/TestCodegen.java index 73d3dfdf..3d949f5d 100644 --- a/src/test/java/targetast/TestCodegen.java +++ b/src/test/java/targetast/TestCodegen.java @@ -20,6 +20,8 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; +import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -27,11 +29,11 @@ import java.util.stream.Collectors; public class TestCodegen { + static final Path outputPath = Path.of(System.getProperty("user.dir"), "src/test/resources/target/"); private static void writeClassFile(String name, byte[] code) throws IOException { - var path = Path.of(System.getProperty("user.dir"), "src/test/resources/target/"); - Files.createDirectories(path); - Files.write(path.resolve(name + ".class"), code); + Files.createDirectories(outputPath); + Files.write(outputPath.resolve(name + ".class"), code); } public static Class generateClass(TargetClass clazz, IByteArrayClassLoader classLoader) throws IOException { @@ -41,25 +43,29 @@ public class TestCodegen { return classLoader.loadClass(code); } - public static Map> generateClassFiles(String filename, IByteArrayClassLoader classLoader) throws IOException, ClassNotFoundException { - var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/", filename).toFile(); - var compiler = new JavaTXCompiler(List.of(file), List.of(file.getParentFile())); + public static Map> generateClassFiles(IByteArrayClassLoader classLoader, String... files) throws IOException, ClassNotFoundException { + var path = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/"); + var filenames = Arrays.stream(files).map(filename -> Path.of(path.toString(), filename).toFile()).toList(); + var compiler = new JavaTXCompiler(filenames, List.of(path.toFile(), outputPath.toFile())); var resultSet = compiler.typeInference(); - var sourceFile = compiler.sourceFiles.get(file); - var converter = new ASTToTargetAST(resultSet, sourceFile, classLoader); - var classes = compiler.sourceFiles.get(file).getClasses(); + var result = new HashMap>(); + for (var file : filenames) { + var sourceFile = compiler.sourceFiles.get(file); + var converter = new ASTToTargetAST(resultSet, sourceFile, classLoader); + var classes = compiler.sourceFiles.get(file).getClasses(); - var result = classes.stream().map(cli -> { - try { - return generateClass(converter.convert(cli), classLoader); - } catch (IOException exception) { - throw new RuntimeException(exception); + result.putAll(classes.stream().map(cli -> { + try { + return generateClass(converter.convert(cli), classLoader); + } catch (IOException exception) { + throw new RuntimeException(exception); + } + }).collect(Collectors.toMap(Class::getName, Function.identity()))); + + for (var entry : converter.auxiliaries.entrySet()) { + writeClassFile(entry.getKey(), entry.getValue()); } - }).collect(Collectors.toMap(Class::getName, Function.identity())); - - for (var entry : converter.auxiliaries.entrySet()) { - writeClassFile(entry.getKey(), entry.getValue()); } return result; diff --git a/src/test/java/targetast/TestComplete.java b/src/test/java/targetast/TestComplete.java index b1773e15..1b39618d 100644 --- a/src/test/java/targetast/TestComplete.java +++ b/src/test/java/targetast/TestComplete.java @@ -16,7 +16,7 @@ import static targetast.TestCodegen.generateClassFiles; public class TestComplete { @Test public void applyLambdaTest() throws Exception { - var classFiles = generateClassFiles("applyLambda.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "applyLambda.jav"); var applyLambda = classFiles.get("applyLambda"); var instance = applyLambda.getDeclaredConstructor().newInstance(); var m = applyLambda.getDeclaredMethod("m"); @@ -27,7 +27,7 @@ public class TestComplete { @Test public void binaryTest() throws Exception { - var classFiles = generateClassFiles("BinaryInMeth.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "BinaryInMeth.jav"); var binaryInMeth = classFiles.get("BinaryInMeth"); var instance = binaryInMeth.getDeclaredConstructor().newInstance(); @@ -40,13 +40,13 @@ public class TestComplete { @Test public void classGenLamTest() throws Exception { - var classFiles = generateClassFiles("ClassGenLam.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "ClassGenLam.jav"); classFiles.get("ClassGenLam").getDeclaredConstructor().newInstance(); } @Test public void facTest() throws Exception { - var classFiles = generateClassFiles("Fac.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Fac.jav"); var fac = classFiles.get("Fac"); var instance = fac.getDeclaredConstructor().newInstance(); @@ -56,7 +56,7 @@ public class TestComplete { @Test public void facultyTest() throws Exception { - var classFiles = generateClassFiles("Faculty.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Faculty.jav"); var fac = classFiles.get("Faculty"); var constructor = fac.getDeclaredConstructor(); @@ -69,7 +69,7 @@ public class TestComplete { @Test public void fieldTest() throws Exception { - var classFiles = generateClassFiles("Field.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Field.jav"); var field = classFiles.get("Field"); var instance = field.getDeclaredConstructor().newInstance(); assertEquals(1, field.getFields().length); @@ -77,7 +77,7 @@ public class TestComplete { @Test public void fieldTph2Test() throws Exception { - var classFiles = generateClassFiles("FieldTph2.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "FieldTph2.jav"); var fieldtph2 = classFiles.get("FieldTph2"); var instance = fieldtph2.getDeclaredConstructor().newInstance(); @@ -91,7 +91,7 @@ public class TestComplete { @Test public void fieldTphConsMethTest() throws Exception { - var classFiles = generateClassFiles("FieldTphConsMeth.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "FieldTphConsMeth.jav"); var fieldTphConsMeth = classFiles.get("FieldTphConsMeth"); var ctor = fieldTphConsMeth.getDeclaredConstructor(Object.class); @@ -105,7 +105,7 @@ public class TestComplete { @Test public void fieldTphMMethTest() throws Exception { - var classFiles = generateClassFiles("FieldTphMMeth.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "FieldTphMMeth.jav"); var fieldTphMMeth = classFiles.get("FieldTphMMeth"); var ctor = fieldTphMMeth.getDeclaredConstructor(Object.class, Object.class, Boolean.class); @@ -122,37 +122,37 @@ public class TestComplete { @Test public void genTest() throws Exception { - var classFiles = generateClassFiles("Gen.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Gen.jav"); } @Test public void idTest() throws Exception { - var classFiles = generateClassFiles("Id.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Id.jav"); var instance = classFiles.get("Id").getDeclaredConstructor().newInstance(); } @Test public void infTest() throws Exception { - var classFiles = generateClassFiles("Inf.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Inf.jav"); var instance = classFiles.get("Inf").getDeclaredConstructor().newInstance(); // TODO check generics } @Test public void kompTphTest() throws Exception { - var classFiles = generateClassFiles("KompTph.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "KompTph.jav"); var instance = classFiles.get("KompTph").getDeclaredConstructor().newInstance(); } @Test public void lambdaCaptureTest() throws Exception { - var classFiles = generateClassFiles("LambdaCapture.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "LambdaCapture.jav"); var instance = classFiles.get("LambdaCapture").getDeclaredConstructor().newInstance(); } @Test public void lambdaTest() throws Exception { - var classFiles = generateClassFiles("Lambda.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Lambda.jav"); var classToTest = classFiles.get("Lambda"); var instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); @@ -167,21 +167,21 @@ public class TestComplete { @Test public void mathStrucInteger() throws Exception { - var classFiles = generateClassFiles("mathStrucInteger.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "mathStrucInteger.jav"); var mathStrucInteger = classFiles.get("mathStrucInteger"); mathStrucInteger.getDeclaredConstructor(Integer.class).newInstance(10); } @Test public void mathStruc() throws Exception { - var classFiles = generateClassFiles("mathStruc.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "mathStruc.jav"); var mathStruc = classFiles.get("mathStruc"); mathStruc.getDeclaredConstructor(Object.class).newInstance("A"); } @Test public void matrixOpTest() throws Exception { - var classFiles = generateClassFiles("MatrixOP.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "MatrixOP.jav"); var matrixOP = classFiles.get("MatrixOP"); Vector> vv = new Vector<>(); @@ -234,7 +234,7 @@ public class TestComplete { @Test public void matrixTest() throws Exception { - var classFiles = generateClassFiles("Matrix.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Matrix.jav"); var matrix = classFiles.get("Matrix"); Vector> vv = new Vector<>(); @@ -281,19 +281,19 @@ public class TestComplete { @Test public void mergeTest() throws Exception { - var classFiles = generateClassFiles("Merge.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Merge.jav"); var instance = classFiles.get("Merge").getDeclaredConstructor().newInstance(); } @Test public void overloadingSortingTest() throws Exception { - var classFiles = generateClassFiles("Sorting.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Sorting.jav"); var instance = classFiles.get("Sorting").getDeclaredConstructor().newInstance(); } @Test public void overloadingTest() throws Exception { - var classFiles = generateClassFiles("Overloading.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Overloading.jav"); var overloading = classFiles.get("Overloading"); var overloading2 = classFiles.get("Overloading2"); var instance1 = overloading.getDeclaredConstructor().newInstance(); @@ -307,7 +307,7 @@ public class TestComplete { @Test public void plusTest() throws Exception { - var classFiles = generateClassFiles("Plus.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Plus.jav"); var plus = classFiles.get("Plus"); var instance = plus.getDeclaredConstructor().newInstance(); @@ -320,7 +320,7 @@ public class TestComplete { @Test public void relOpsTest() throws Exception { - var classFiles = generateClassFiles("RelOps.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "RelOps.jav"); var relOps = classFiles.get("RelOps"); var instance = relOps.getDeclaredConstructor().newInstance(); @@ -330,26 +330,26 @@ public class TestComplete { @Test public void simpleCyclesTest() throws Exception { - var classFiles = generateClassFiles("SimpleCycle.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "SimpleCycle.jav"); var instance = classFiles.get("SimpleCycle").getDeclaredConstructor().newInstance(); } @Test public void subMatTest() throws Exception { - var classFiles = generateClassFiles("SubMatrix.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "SubMatrix.jav"); var instance = classFiles.get("SubMatrix").getDeclaredConstructor().newInstance(); } @Test public void tphTest() throws Exception { - var classFiles = generateClassFiles("Tph.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Tph.jav"); var tph = classFiles.get("Tph"); var instance = tph.getDeclaredConstructor().newInstance(); } @Test public void tph2Test() throws Exception { - var classFiles = generateClassFiles("Tph2.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Tph2.jav"); var tph2 = classFiles.get("Tph2"); var instance = tph2.getDeclaredConstructor().newInstance(); @@ -376,7 +376,7 @@ public class TestComplete { @Test public void tph3Test() throws Exception { - var classFiles = generateClassFiles("Tph3.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Tph3.jav"); var tph3 = classFiles.get("Tph3"); var instance = tph3.getDeclaredConstructor().newInstance(); var m1 = tph3.getDeclaredMethod("m1", Object.class, Object.class); @@ -402,7 +402,7 @@ public class TestComplete { @Test public void tph4Test() throws Exception { - var classFiles = generateClassFiles("Tph4.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Tph4.jav"); var tph4 = classFiles.get("Tph4"); var instance = tph4.getDeclaredConstructor().newInstance(); var m = tph4.getDeclaredMethod("m", Object.class, Object.class); @@ -433,7 +433,7 @@ public class TestComplete { @Test public void tph5Test() throws Exception { - var classFiles = generateClassFiles("Tph5.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Tph5.jav"); var tph5 = classFiles.get("Tph5"); var instance = tph5.getDeclaredConstructor().newInstance(); var m = tph5.getDeclaredMethod("m", Object.class, Object.class); @@ -461,7 +461,7 @@ public class TestComplete { @Test public void tph6Test() throws Exception { - var classFiles = generateClassFiles("Tph6.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Tph6.jav"); var tph5 = classFiles.get("Tph6"); var instance = tph5.getDeclaredConstructor().newInstance(); var m = tph5.getDeclaredMethod("m", Object.class, Object.class); @@ -490,7 +490,7 @@ public class TestComplete { @Test public void Tph7Test() throws Exception { - var classFiles = TestCodegen.generateClassFiles("Tph7.jav", new ByteArrayClassLoader()); + var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "Tph7.jav"); var classToTest = classFiles.get("Tph7"); var instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); @@ -552,56 +552,56 @@ public class TestComplete { @Test public void typedIdTest() throws Exception { - var classFiles = generateClassFiles("TypedID.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "TypedID.jav"); var instance = classFiles.get("TypedID").getDeclaredConstructor().newInstance(); } @Test public void vectorAddTest() throws Exception { - var classFiles = generateClassFiles("VectorAdd.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "VectorAdd.jav"); var instance = classFiles.get("VectorAdd").getDeclaredConstructor().newInstance(); } @Test public void vectorSuperTest() throws Exception { - var classFiles = generateClassFiles("VectorSuper.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "VectorSuper.jav"); var instance = classFiles.get("VectorSuper").getDeclaredConstructor().newInstance(); } @Test public void yTest() throws Exception { - var classFiles = generateClassFiles("Y.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Y.jav"); var instance = classFiles.get("Y").getDeclaredConstructor().newInstance(); } @Test @Ignore("This one isn't working") public void boxTest() throws Exception { - var classFiles = generateClassFiles("Box.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Box.jav"); var instance = classFiles.get("Box_Main").getDeclaredConstructor().newInstance(); } @Test public void cycleTest() throws Exception { - var classFiles = generateClassFiles("Cycle.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Cycle.jav"); var instance = classFiles.get("Cycle").getDeclaredConstructor().newInstance(); } @Test public void olFunTest() throws Exception { - var classFiles = generateClassFiles("OLFun.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "OLFun.jav"); var instance = classFiles.get("OLFun").getDeclaredConstructor().newInstance(); } @Test public void olFun2Test() throws Exception { - var classFiles = generateClassFiles("OLFun2.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "OLFun2.jav"); var instance = classFiles.get("OLFun2").getDeclaredConstructor().newInstance(); } @Test public void pairTest() throws Exception { - var classFiles = generateClassFiles("Pair.jav", new ByteArrayClassLoader()); + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Pair.jav"); var instance = classFiles.get("Pair").getDeclaredConstructor().newInstance(); } } diff --git a/src/test/java/targetast/TestGenerics.java b/src/test/java/targetast/TestGenerics.java index 1131e076..2679f6d4 100644 --- a/src/test/java/targetast/TestGenerics.java +++ b/src/test/java/targetast/TestGenerics.java @@ -361,4 +361,10 @@ public class TestGenerics { public void testVoidMeth() throws Exception { var result = computeGenerics("TestVoidMeth.jav"); } + + @Test + public void testAssign() throws Exception { + // TODO Check generics + var result = computeGenerics("TestAssign.jav"); + } } diff --git a/src/test/java/targetast/TphTest.java b/src/test/java/targetast/TphTest.java index b902b155..3fd6fa2c 100644 --- a/src/test/java/targetast/TphTest.java +++ b/src/test/java/targetast/TphTest.java @@ -15,7 +15,7 @@ public class TphTest { @BeforeClass public static void setUpBeforeClass() throws Exception { - var classFiles = TestCodegen.generateClassFiles("Tph.jav", new ByteArrayClassLoader()); + var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "Tph.jav"); classToTest = classFiles.get("Tph"); instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); } diff --git a/src/test/java/targetast/WhileTest.java b/src/test/java/targetast/WhileTest.java index 7b496f15..50371d19 100644 --- a/src/test/java/targetast/WhileTest.java +++ b/src/test/java/targetast/WhileTest.java @@ -14,7 +14,7 @@ public class WhileTest { @BeforeClass public static void setUpBeforeClass() throws Exception { - var classFiles = TestCodegen.generateClassFiles("While.jav", new ByteArrayClassLoader()); + var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "While.jav"); classToTest = classFiles.get("While"); instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); } From cf2d612870eed3e284e022fc8dfa20501cf8da45 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Fri, 24 Mar 2023 14:51:57 +0100 Subject: [PATCH 20/62] Fix TX Signature by adding additional prameters to every method and constructor --- .../de/dhbwstuttgart/bytecode/Codegen.java | 22 +++++---- .../target/generate/ASTToTargetAST.java | 47 +++++++++++-------- .../target/tree/TargetClass.java | 4 +- .../target/tree/TargetConstructor.java | 5 +- .../target/tree/TargetMethod.java | 10 ++-- 5 files changed, 51 insertions(+), 37 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java b/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java index efa8def2..3d94be1c 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java @@ -717,10 +717,14 @@ public class Codegen { .toList()); impl = new TargetMethod( - 0, name, Set.of(), Set.of(), - parameters, - lambda.returnType() instanceof TargetGenericType ? TargetType.Object : lambda.returnType(), - lambda.block() + 0, name, + lambda.block(), + new TargetMethod.Signature( + Set.of(), + parameters, + lambda.returnType() instanceof TargetGenericType ? TargetType.Object : lambda.returnType() + ), + null ); generateMethod(impl); lambdas.put(lambda, impl); @@ -758,7 +762,7 @@ public class Codegen { mv.visitInvokeDynamicInsn("apply", descriptor, bootstrap, Type.getType(desugared), handle, - Type.getType(TargetMethod.getDescriptor(impl.returnType(), lambda.params().stream().map(MethodParameter::type).toArray(TargetType[]::new))) + Type.getType(TargetMethod.getDescriptor(impl.signature().returnType(), lambda.params().stream().map(MethodParameter::type).toArray(TargetType[]::new))) ); } @@ -1022,17 +1026,17 @@ public class Codegen { private void generateMethod(TargetMethod method) { // TODO The older codegen has set ACC_PUBLIC for all methods, good for testing but bad for everything else MethodVisitor mv = cw.visitMethod(method.access() | ACC_PUBLIC, method.name(), method.getDescriptor(), method.getSignature(), null); - if (!method.txGenerics().isEmpty()) + if (method.txSignature() != null) mv.visitAttribute(new JavaTXSignatureAttribute(method.getTXSignature())); System.out.println(method.getDescriptor()); System.out.println(method.getSignature()); mv.visitCode(); - var state = new State(method.returnType(), mv, method.isStatic() ? 0 : 1); - for (var param: method.parameters()) + var state = new State(method.signature().returnType(), mv, method.isStatic() ? 0 : 1); + for (var param: method.signature().parameters()) state.createVariable(param.name(), param.type()); generate(state, method.block()); - if (method.returnType() == null) + if (method.signature().returnType() == null) mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index 81cb295e..b4f6978b 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -933,22 +933,22 @@ public class ASTToTargetAST { return true; } - Set convert(Set> result) { + Set convert(Set> result, Map equality) { return result.stream().map(p -> { if (p instanceof PairTPHsmallerTPH pair) { - return new TargetGeneric(pair.left.getName(), convert(pair.right)); + return new TargetGeneric(pair.left.getName(), convert(pair.right, equality)); } else if (p instanceof PairTPHequalRefTypeOrWildcardType pair) { - return new TargetGeneric(pair.left.getName(), convert(pair.right)); + return new TargetGeneric(pair.left.getName(), convert(pair.right, equality)); } else { throw new IllegalArgumentException(); } }).collect(Collectors.toSet()); } - public List convert(GenericTypeVar typeVar) { + public List convert(GenericTypeVar typeVar, Map equality) { var ret = new ArrayList(); for (var bound : typeVar.getBounds()) { - ret.add(new TargetGeneric(typeVar.getName(), convert(bound))); + ret.add(new TargetGeneric(typeVar.getName(), convert(bound, equality))); } return ret; } @@ -965,13 +965,13 @@ public class ASTToTargetAST { while (genericsIter.hasNext()) { var next = genericsIter.next(); userDefinedGenerics.add(next); - javaGenerics.addAll(convert(next)); + javaGenerics.addAll(convert(next, sigma.equality)); } } else { // Generate generics only if there are no user defined ones var generics = sigma.generics(input); - javaGenerics = convert(generics.javaGenerics()); - txGenerics = convert(generics.txGenerics()); + javaGenerics = convert(generics.javaGenerics(), sigma.equality); + txGenerics = convert(generics.txGenerics(), sigma.txEquality); } TargetBlock fieldInitializer = null; @@ -988,9 +988,9 @@ public class ASTToTargetAST { ); } - private List convert(ParameterList input) { + private List convert(ParameterList input, Map equality) { return input.getFormalparalist().stream() - .map(param -> new MethodParameter(convert(param.getType()), param.getName())).toList(); + .map(param -> new MethodParameter(convert(param.getType(), equality), param.getName())).toList(); } private boolean hasGeneric(Set generics, GenericRefType type) { @@ -998,7 +998,7 @@ public class ASTToTargetAST { } private Set collectMethodGenerics(Set> generics, Map equality, Method input) { - var convertedGenerics = new HashSet<>(convert(generics)); + var convertedGenerics = new HashSet<>(convert(generics, equality)); outer: for (GenericTypeVar typeVar : input.getGenerics()) { for (var classGeneric : currentClass.getGenerics()) { @@ -1006,7 +1006,7 @@ public class ASTToTargetAST { continue outer; } } - convertedGenerics.addAll(convert(typeVar)); + convertedGenerics.addAll(convert(typeVar, equality)); } /*var returnType = sigma.getType(input.getReturnType(), equality); if ((returnType instanceof GenericRefType refType) && !hasGeneric(convertedGenerics, refType)) { @@ -1030,12 +1030,13 @@ public class ASTToTargetAST { for (var s : all) { sigma = s; var generics = sigma.generics(currentClass, input); - List params = convert(input.getParameterList()); + List params = convert(input.getParameterList(), sigma.equality); if (parameterSet.stream().noneMatch(p -> p.equals(params))) { + List txParams = convert(input.getParameterList(), sigma.txEquality); var javaGenerics = collectMethodGenerics(generics.javaGenerics(), sigma.equality, input); var txGenerics = collectMethodGenerics(generics.txGenerics(), sigma.txEquality, input); - result.add(new TargetConstructor(input.modifier, javaGenerics, txGenerics, params, convert(input.block), fieldInitializer)); + result.add(new TargetConstructor(input.modifier, javaGenerics, txGenerics, params, txParams, convert(input.block), fieldInitializer)); parameterSet.add(params); } } @@ -1051,16 +1052,18 @@ public class ASTToTargetAST { for (var s : all) { sigma = s; var generics = sigma.generics(currentClass, input); - List params = convert(input.getParameterList()); + List params = convert(input.getParameterList(), sigma.equality); if (parameterSet.stream().noneMatch(p -> p.equals(params))) { + List txParams = convert(input.getParameterList(), sigma.txEquality); + var javaGenerics = collectMethodGenerics(generics.javaGenerics(), sigma.equality, input); var txGenerics = collectMethodGenerics(generics.txGenerics(), sigma.txEquality, input); result.add(new TargetMethod( input.modifier, - input.name, javaGenerics, txGenerics, params, - convert(input.getReturnType()), - convert(input.block) + input.name, convert(input.block), + new TargetMethod.Signature(javaGenerics, params, convert(input.getReturnType(), sigma.equality)), + new TargetMethod.Signature(txGenerics, txParams, convert(input.getReturnType(), sigma.txEquality)) )); parameterSet.add(params); } @@ -1092,7 +1095,11 @@ public class ASTToTargetAST { public Map auxiliaries = new HashMap<>(); - protected TargetType convert(RefTypeOrTPHOrWildcardOrGeneric input) { + protected TargetType convert(RefTypeOrTPHOrWildcardOrGeneric input) { + return convert(input, sigma.equality); + } + + protected TargetType convert(RefTypeOrTPHOrWildcardOrGeneric input, Map equality) { return input.acceptTV(new TypeVisitor<>() { @Override public TargetType visit(RefType refType) { @@ -1126,7 +1133,7 @@ public class ASTToTargetAST { @Override public TargetType visit(TypePlaceholder typePlaceholder) { - return sigma.getTargetType(typePlaceholder, sigma.equality); + return sigma.getTargetType(typePlaceholder, equality); } @Override diff --git a/src/main/java/de/dhbwstuttgart/target/tree/TargetClass.java b/src/main/java/de/dhbwstuttgart/target/tree/TargetClass.java index 781df996..3118a1d8 100644 --- a/src/main/java/de/dhbwstuttgart/target/tree/TargetClass.java +++ b/src/main/java/de/dhbwstuttgart/target/tree/TargetClass.java @@ -25,7 +25,7 @@ public record TargetClass(int modifiers, String qualifiedName, TargetType superT } public void addMethod(int access, String name, Set generics, List parameterTypes, TargetType returnType, TargetBlock block) { - this.methods.add(new TargetMethod(access, name, generics, Set.of(), parameterTypes, returnType, block)); + this.methods.add(new TargetMethod(access, name, block, new TargetMethod.Signature(generics, parameterTypes, returnType), null)); } public void addMethod(int access, String name, List parameterTypes, TargetType returnType, TargetBlock block) { @@ -33,7 +33,7 @@ public record TargetClass(int modifiers, String qualifiedName, TargetType superT } public void addConstructor(int access, Set generics, List paramterTypes, TargetBlock block) { - this.constructors.add(new TargetConstructor(access, generics, Set.of(), paramterTypes, block, null)); + this.constructors.add(new TargetConstructor(access, generics, Set.of(), paramterTypes, List.of(), block, null)); } public void addConstructor(int access, List paramterTypes, TargetBlock block) { diff --git a/src/main/java/de/dhbwstuttgart/target/tree/TargetConstructor.java b/src/main/java/de/dhbwstuttgart/target/tree/TargetConstructor.java index 7d3aa389..1da5dc93 100644 --- a/src/main/java/de/dhbwstuttgart/target/tree/TargetConstructor.java +++ b/src/main/java/de/dhbwstuttgart/target/tree/TargetConstructor.java @@ -1,12 +1,13 @@ package de.dhbwstuttgart.target.tree; +import de.dhbwstuttgart.syntaxtree.Method; import de.dhbwstuttgart.target.tree.expression.TargetBlock; import de.dhbwstuttgart.target.tree.type.TargetType; import java.util.List; import java.util.Set; -public record TargetConstructor(int access, Set generics, Set txGenerics, List parameters, TargetBlock block, TargetBlock fieldInitializer) { +public record TargetConstructor(int access, Set generics, Set txGenerics, List parameters, List txParameters, TargetBlock block, TargetBlock fieldInitializer) { public String getDescriptor() { return TargetMethod.getDescriptor(null, parameters.stream().map(MethodParameter::type).toArray(TargetType[]::new)); @@ -17,7 +18,7 @@ public record TargetConstructor(int access, Set generics, Set generics, Set txGenerics, List parameters, TargetType returnType, TargetBlock block) { +public record TargetMethod(int access, String name, TargetBlock block, Signature signature, Signature txSignature) { + public record Signature(Set generics, List parameters, TargetType returnType) { } + public static String getDescriptor(TargetType returnType, TargetType... parameters) { String ret = "("; for (var parameterType : parameters) { @@ -35,15 +37,15 @@ public record TargetMethod(int access, String name, Set generics, } public String getDescriptor() { - return getDescriptor(returnType, parameters.stream().map(MethodParameter::type).toArray(TargetType[]::new)); + return getDescriptor(signature.returnType, signature.parameters.stream().map(MethodParameter::type).toArray(TargetType[]::new)); } public String getSignature() { - return getSignature(generics, parameters, returnType); + return getSignature(signature.generics, signature.parameters, signature.returnType); } public String getTXSignature() { - return getSignature(txGenerics, parameters, returnType); + return getSignature(txSignature.generics, txSignature.parameters, txSignature.returnType); } public boolean isStatic() { From b9f19cc10597cf8f6f4fe31caccb8f5594d33449 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Fri, 24 Mar 2023 15:14:17 +0100 Subject: [PATCH 21/62] Write tx signature to constant pool --- .../java/de/dhbwstuttgart/bytecode/Codegen.java | 13 +++++++------ .../bytecode/JavaTXSignatureAttribute.java | 11 ++++------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java b/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java index 3d94be1c..8c60ac42 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java @@ -999,8 +999,8 @@ public class Codegen { private void generateConstructor(TargetConstructor constructor) { MethodVisitor mv = cw.visitMethod(constructor.access() | ACC_PUBLIC, "", constructor.getDescriptor(), constructor.getSignature(), null); - if (!constructor.txGenerics().isEmpty()) - mv.visitAttribute(new JavaTXSignatureAttribute(constructor.getTXSignature())); + if (constructor.txGenerics() != null) + mv.visitAttribute(new JavaTXSignatureAttribute(cw.newConst(constructor.getTXSignature()))); mv.visitCode(); var state = new State(null, mv, 1); @@ -1026,8 +1026,9 @@ public class Codegen { private void generateMethod(TargetMethod method) { // TODO The older codegen has set ACC_PUBLIC for all methods, good for testing but bad for everything else MethodVisitor mv = cw.visitMethod(method.access() | ACC_PUBLIC, method.name(), method.getDescriptor(), method.getSignature(), null); - if (method.txSignature() != null) - mv.visitAttribute(new JavaTXSignatureAttribute(method.getTXSignature())); + if (method.txSignature() != null) { + mv.visitAttribute(new JavaTXSignatureAttribute(cw.newConst(method.getTXSignature()))); + } System.out.println(method.getDescriptor()); System.out.println(method.getSignature()); @@ -1058,8 +1059,8 @@ public class Codegen { generateSignature(clazz, clazz.generics()), clazz.superType() != null ? clazz.superType().getInternalName(): "java/lang/Object", clazz.implementingInterfaces().stream().map(TargetType::toSignature).toArray(String[]::new) ); - if (!clazz.txGenerics().isEmpty()) - cw.visitAttribute(new JavaTXSignatureAttribute(generateSignature(clazz, clazz.txGenerics()))); + if (clazz.txGenerics() != null) + cw.visitAttribute(new JavaTXSignatureAttribute(cw.newConst(generateSignature(clazz, clazz.txGenerics())))); clazz.fields().forEach(this::generateField); clazz.constructors().forEach(this::generateConstructor); diff --git a/src/main/java/de/dhbwstuttgart/bytecode/JavaTXSignatureAttribute.java b/src/main/java/de/dhbwstuttgart/bytecode/JavaTXSignatureAttribute.java index cc9d1487..bd5f6028 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/JavaTXSignatureAttribute.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/JavaTXSignatureAttribute.java @@ -2,13 +2,10 @@ package de.dhbwstuttgart.bytecode; import org.objectweb.asm.*; -import java.io.UnsupportedEncodingException; -import java.nio.charset.StandardCharsets; - public class JavaTXSignatureAttribute extends Attribute { - final String signature; + final int signature; - protected JavaTXSignatureAttribute(String signature) { + protected JavaTXSignatureAttribute(int signature) { super("JavaTXSignature"); this.signature = signature; } @@ -17,13 +14,13 @@ public class JavaTXSignatureAttribute extends Attribute { protected Attribute read(ClassReader classReader, int offset, int length, char[] charBuffer, int codeAttributeOffset, Label[] labels) { var data = new byte[length]; System.arraycopy(classReader.b, offset, data, 0, length); - return new JavaTXSignatureAttribute(new String(data, StandardCharsets.UTF_8)); + return new JavaTXSignatureAttribute(data[0] << 8 | data[1]); } @Override protected ByteVector write(ClassWriter classWriter, byte[] code, int codeLength, int maxStack, int maxLocals) { var data = new ByteVector(); - data.putUTF8(this.signature); + data.putShort(this.signature); return data; } } From 3963baa9ced4803100d49ddfd709f631a083d8b2 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Tue, 28 Mar 2023 11:46:30 +0200 Subject: [PATCH 22/62] Fix equality --- .../target/generate/ASTToTargetAST.java | 41 +++++++++++-------- src/test/java/targetast/TestGenerics.java | 3 +- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index b4f6978b..14dd4afe 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -121,6 +121,16 @@ public class ASTToTargetAST { input.add(pair); } + static void addToEquality(Map equality, TypePlaceholder from, TypePlaceholder to) { + for (var entry : new HashSet<>(equality.entrySet())) { + if (entry.getValue().equals(from)) { + equality.remove(entry.getKey()); + equality.put(entry.getKey(), to); + } + } + equality.put(from, to); + } + static Set> transitiveClosure(Set> generics) { Set> all = new HashSet<>(generics); HashSet> toAdd = new HashSet<>(); @@ -152,6 +162,7 @@ public class ASTToTargetAST { ) { // Type variables with bounds that are also type variables of the method for (var typeVariable : new HashSet<>(typeVariables)) { + typeVariable = equality.getOrDefault(typeVariable, typeVariable); if (classHasGeneric(userDefinedGenericsOfClass, typeVariablesOfClass, typeVariable)) continue; for (var pair : simplifiedConstraints) { @@ -573,7 +584,6 @@ public class ASTToTargetAST { } System.out.println(method.name + ": " + txResult + " & " + javaResult); - return generics; } @@ -621,20 +631,17 @@ public class ASTToTargetAST { findAllBounds(field.getType(), txResult, txEquality); } - { // Java Generics - var referenced = new HashSet(); - eliminateCycles(javaResult, equality, referenced); - eliminateInfima(javaResult, equality, referenced); - eliminateInnerTypeVariablesOfClass(classOrInterface, javaResult, equality, referenced); - equalizeTypeVariables(javaResult, equality); - } - { // TX Generics - var referenced = new HashSet(); - eliminateInfima(txResult, txEquality, referenced); - eliminateInnerTypeVariablesOfClass(classOrInterface, txResult, txEquality, referenced); - } + var referenced = new HashSet(); + eliminateCycles(javaResult, equality, referenced); + eliminateInfima(javaResult, equality, referenced); + var txReferenced = new HashSet(); + eliminateInfima(txResult, txEquality, txReferenced); - System.out.println("Class " + classOrInterface.getClassName().getClassName() + ": " + txResult); + eliminateInnerTypeVariablesOfClass(classOrInterface, javaResult, equality, referenced); + equalizeTypeVariables(javaResult, equality); + eliminateInnerTypeVariablesOfClass(classOrInterface, txResult, txEquality, txReferenced); + + System.out.println("Class " + classOrInterface.getClassName().getClassName() + ": " + txResult + ", " + javaResult); return generics; } @@ -642,7 +649,7 @@ public class ASTToTargetAST { for (var pair : new HashSet<>(input)) { if (pair instanceof PairTPHsmallerTPH ptph) { if (ptph.left.getVariance() == 1 && ptph.right.getVariance() == -1) { - equality.put(ptph.left, ptph.right); + addToEquality(equality, ptph.left, ptph.right); input.remove(ptph); for (var pair2 : new HashSet<>(input)) { if (pair2 instanceof PairTPHsmallerTPH ptph2 && ptph2.right.equals(ptph.left)) { @@ -735,7 +742,7 @@ public class ASTToTargetAST { var right = cycle.get(i + 1); var pair = new PairTPHsmallerTPH(left, right); input.remove(pair); - equality.put(left, newTph); + addToEquality(equality, left, newTph); } } } @@ -759,7 +766,7 @@ public class ASTToTargetAST { addToPairs(input, new PairTPHsmallerTPH(left, newTph)); input.removeAll(infima); for (var infimum : infima) { - equality.put(infimum.right, newTph); + addToEquality(equality, infimum.right, newTph); new HashSet<>(input).forEach(pair -> { if (pair.getLeft().equals(infimum.right)) { input.remove(pair); diff --git a/src/test/java/targetast/TestGenerics.java b/src/test/java/targetast/TestGenerics.java index 2679f6d4..fdeaab9b 100644 --- a/src/test/java/targetast/TestGenerics.java +++ b/src/test/java/targetast/TestGenerics.java @@ -51,6 +51,7 @@ public class TestGenerics { var anyMethod = result.findMethod("anyMethod"); var otherMethod = result.findMethod("otherMethod"); var a = result.findField("a"); + var b = result.findField("b"); var generics = result.genericsResults.get(0); assertEquals(1, generics.get(anyMethod).size()); @@ -60,7 +61,7 @@ public class TestGenerics { var ECK2 = generics.getBounds(otherMethod.getReturnType(), result.clazz, anyMethod); var ECKChain = new BoundsList(new Bound(false, ASTToTargetAST.OBJECT)); assertEquals(ECK1, ECK2); - assertEquals(ECK2, ECKChain); + assertEquals(ECK2, generics.getBounds(b.getType(), result.clazz)); var M = generics.getBounds(a.getType(), result.clazz); var MChain = new BoundsList(new Bound(false, TypePlaceholder.of("ECK")), new Bound(false, ASTToTargetAST.OBJECT)); From 1ad5540500b7f40d2c90829e9257c2f86dcfd0d3 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Tue, 28 Mar 2023 13:28:05 +0200 Subject: [PATCH 23/62] Fix wrong class generics being used --- .../java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index 14dd4afe..3fb42ee1 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -537,6 +537,7 @@ public class ASTToTargetAST { var classGenerics = generics(owner); var genericsOfClass = classGenerics.javaGenerics(); + var txGenericsOfClass = classGenerics.txGenerics(); var simplifiedConstraints = new HashSet<>(this.simplifiedConstraints); HashSet txTypeVariables = new HashSet<>(); @@ -545,7 +546,7 @@ public class ASTToTargetAST { HashSet javaTypeVariablesOfClass = new HashSet<>(); methodFindTypeVariables(method, genericsOfClass, javaTypeVariablesOfClass, javaTypeVariables, equality); - methodFindTypeVariables(method, genericsOfClass, txTypeVariablesOfClass, txTypeVariables, txEquality); + methodFindTypeVariables(method, txGenericsOfClass, txTypeVariablesOfClass, txTypeVariables, txEquality); methodFindConstraints(owner, method, simplifiedConstraints, javaTypeVariables, classGenerics.userDefinedGenerics, javaTypeVariablesOfClass, javaResult, equality); methodFindConstraints(owner, method, simplifiedConstraints, txTypeVariables, classGenerics.userDefinedGenerics, txTypeVariablesOfClass, txResult, txEquality); From f7b60214fa8831647f363dbcc25b776e175cb5e0 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Tue, 28 Mar 2023 16:40:06 +0200 Subject: [PATCH 24/62] Change tests --- .../target/generate/ASTToTargetAST.java | 11 +++++---- .../target/generate/GenericsResult.java | 4 ++-- src/test/java/targetast/TestGenerics.java | 24 ++++++++++--------- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index 3fb42ee1..b28bfb41 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -647,20 +647,23 @@ public class ASTToTargetAST { } void equalizeTypeVariables(Set> input, Map equality) { + System.out.println(input); for (var pair : new HashSet<>(input)) { if (pair instanceof PairTPHsmallerTPH ptph) { + System.out.println(pair + " " + ptph.left.getVariance() + " " + ptph.right.getVariance()); if (ptph.left.getVariance() == 1 && ptph.right.getVariance() == -1) { addToEquality(equality, ptph.left, ptph.right); input.remove(ptph); - for (var pair2 : new HashSet<>(input)) { - if (pair2 instanceof PairTPHsmallerTPH ptph2 && ptph2.right.equals(ptph.left)) { - input.remove(pair2); - addToPairs(input, new PairTPHsmallerTPH(ptph2.left, ptph.right)); + for (var pair2 : new HashSet<>(simplifiedConstraints)) { + if (pair2.right.equals(ptph.left)) { + simplifiedConstraints.remove(pair2); + simplifiedConstraints.add(new PairTPHsmallerTPH(pair2.left, ptph.right)); } } } } } + System.out.println(input); } void findTphs(RefTypeOrTPHOrWildcardOrGeneric type, Set tphs, Map equality) { diff --git a/src/main/java/de/dhbwstuttgart/target/generate/GenericsResult.java b/src/main/java/de/dhbwstuttgart/target/generate/GenericsResult.java index e350707e..5f0008c0 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/GenericsResult.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/GenericsResult.java @@ -18,14 +18,14 @@ public class GenericsResult { public Set> get(ClassOrInterface clazz) { var generics = this.sigma.computedGenericsOfClasses.get(clazz); if (generics == null) return Set.of(); - return generics.txGenerics(); + return generics.javaGenerics(); } // TODO Compute generics if not present? public Set> get(Method method) { var generics = this.sigma.computedGenericsOfMethods.get(method); if (generics == null) return Set.of(); - return generics.txGenerics(); + return generics.javaGenerics(); } public BoundsList getBounds(RefTypeOrTPHOrWildcardOrGeneric type, ClassOrInterface clazz) { diff --git a/src/test/java/targetast/TestGenerics.java b/src/test/java/targetast/TestGenerics.java index fdeaab9b..23c8b152 100644 --- a/src/test/java/targetast/TestGenerics.java +++ b/src/test/java/targetast/TestGenerics.java @@ -127,26 +127,22 @@ public class TestGenerics { assertEquals(R, RChain); var O = generics.getBounds(id.getParameterList().getParameterAt(0).getType(), result.clazz, id); - var OChain = new BoundsList(new Bound(true, TypePlaceholder.of("AB")), new Bound(true, ASTToTargetAST.OBJECT)); - assertEquals(O, OChain); var AB = generics.getBounds(id.getReturnType(), result.clazz, id); + assertEquals(O, AB); assertEquals(AB, new BoundsList(new Bound(true, ASTToTargetAST.OBJECT))); var S = generics.getBounds(setA.getParameterList().getParameterAt(0).getType(), result.clazz, setA); - var SChain = new BoundsList(new Bound(true, TypePlaceholder.of("R")), new Bound(false, ASTToTargetAST.OBJECT)); - assertEquals(S, SChain); + assertEquals(S, RChain); assertEquals(generics.getBounds(setA.getReturnType(), result.clazz, setA), RChain); var X = generics.getBounds(m.getParameterList().getParameterAt(0).getType(), result.clazz, m); var Y = generics.getBounds(m.getParameterList().getParameterAt(1).getType(), result.clazz, m); var XChain = new BoundsList(new Bound(true, ASTToTargetAST.OBJECT)); - var YChain = new BoundsList(new Bound(true, TypePlaceholder.of("Y")), new Bound(true, ASTToTargetAST.OBJECT)); assertEquals(X, XChain); - assertEquals(Y, YChain); + assertEquals(Y, X); } @Test - @Ignore("Not implemented") public void testLocalVarLambda() throws Exception { var result = computeGenerics("TestLocalVarLambda.jav"); // TODO Generics of lambdas @@ -221,9 +217,10 @@ public class TestGenerics { var Q = generics.getBounds(anyMethod.getReturnType(), result.clazz, anyMethod); assertEquals(Q, new BoundsList(new Bound(true, ASTToTargetAST.OBJECT))); + System.out.println(otherMethod.getReturnType()); var DYX2 = generics.getBounds(otherMethod.getReturnType(), result.clazz, otherMethod); assertEquals(DYX, DYX2); - assertEquals(DYX2, DYXChain); + assertEquals(DYX, generics.getBounds(otherMethod.getReturnType(), result.clazz, otherMethod)); } @Test @@ -247,7 +244,7 @@ public class TestGenerics { var AA = generics.getBounds(m.getReturnType(), result.clazz, m); var AC = generics.getBounds(m.getParameterList().getParameterAt(1).getType(), result.clazz, m); assertEquals(AA, new BoundsList(new Bound(true, ASTToTargetAST.OBJECT))); - assertEquals(AC, new BoundsList(new Bound(true, TypePlaceholder.of("AD")), new Bound(true, ASTToTargetAST.OBJECT))); + assertEquals(AC, new BoundsList(new Bound(true, ASTToTargetAST.OBJECT))); var AH = generics.getBounds(m2.getReturnType(), result.clazz, m2); var AL = generics.getBounds(m2.getParameterList().getParameterAt(0).getType(), result.clazz, m2); @@ -298,9 +295,9 @@ public class TestGenerics { } @Test - @Ignore("main changes in between runs") public void testTwoArgs2() throws Exception { var result = computeGenerics("TestTwoArgs2.jav"); + // TODO Test generics } @Test @@ -327,6 +324,7 @@ public class TestGenerics { public void testVector() throws Exception { var result = computeGenerics("TestVector.jav"); var m = result.findMethod("m"); + var id = result.findMethod("id"); var generics = result.genericsResults.get(0); var par1 = generics.resolve(m.getParameterList().getParameterAt(0).getType()); @@ -334,8 +332,12 @@ public class TestGenerics { var S = generics.getBounds(((RefType) par1).getParaList().get(0), result.clazz, m); var ACM = generics.getBounds(((RefType) par2).getParaList().get(0), result.clazz, m); - assertEquals(S, new BoundsList(new Bound(true, TypePlaceholder.of("V")), new Bound(true, TypePlaceholder.of("ACM")), new Bound(true, ASTToTargetAST.OBJECT))); + assertEquals(S, new BoundsList(new Bound(true, TypePlaceholder.of("V")), new Bound(true, ASTToTargetAST.OBJECT))); assertEquals(ACM, new BoundsList(new Bound(true, ASTToTargetAST.OBJECT))); + + var Y = generics.getBounds(id.getParameterList().getParameterAt(0).getType(), result.clazz, id); + assertEquals(Y, new BoundsList(new Bound(true, ASTToTargetAST.OBJECT))); + assertEquals(Y, generics.getBounds(id.getReturnType(), result.clazz, id)); } @Test From e55b9938dce7a6f352b7bbcaece91f4d339f0e12 Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Tue, 4 Apr 2023 10:30:38 +0200 Subject: [PATCH 25/62] modified: src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java Returntyp: Equaldot durch SMALLERDOT ersetzt --- .../de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java index 198b0f4c..7108975b 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java @@ -610,8 +610,8 @@ public class TYPEStmt implements StatementVisitor{ //Fuer Bytecodegenerierung PL 2020-03-09 wird derzeit nicht benutzt ENDE - methodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.EQUALSDOT)); - extendsMethodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.EQUALSDOT)); + methodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.SMALLERDOT)); + extendsMethodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.SMALLERDOT)); Set parameterContraints = generateParameterConstraints(forMethod, assumption, info, resolver); From aa9782edd7a3f2b431a44f815d1a3e7f9174fc1f Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Tue, 4 Apr 2023 13:09:05 +0200 Subject: [PATCH 26/62] Fix test case --- src/test/java/targetast/TestGenerics.java | 39 +++++++++++------------ 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/test/java/targetast/TestGenerics.java b/src/test/java/targetast/TestGenerics.java index 23c8b152..f6308861 100644 --- a/src/test/java/targetast/TestGenerics.java +++ b/src/test/java/targetast/TestGenerics.java @@ -158,33 +158,30 @@ public class TestGenerics { var generics = result.genericsResults.get(0); assertEquals(1, generics.get(result.clazz).size()); - assertEquals(3, generics.get(id).size()); + assertEquals(2, generics.get(id).size()); assertEquals(2, generics.get(m).size()); assertEquals(3, generics.get(main).size()); - var M = generics.getBounds(a.getType(), result.clazz); - assertEquals(M, new BoundsList(new Bound(false, ASTToTargetAST.OBJECT))); + var N = generics.getBounds(a.getType(), result.clazz); + assertEquals(N, new BoundsList(new Bound(false, ASTToTargetAST.OBJECT))); - var O = generics.getBounds(id.getParameterList().getParameterAt(0).getType(), result.clazz, id); - var OChain = new BoundsList(new Bound(true, TypePlaceholder.of("P")), new Bound(true, ASTToTargetAST.OBJECT)); - assertEquals(O, OChain); - var AK = generics.getBounds(id.getReturnType(), result.clazz, id); - var AKChain = new BoundsList(new Bound(true, ASTToTargetAST.OBJECT)); - assertEquals(AK, AKChain); + var P = generics.getBounds(id.getParameterList().getParameterAt(0).getType(), result.clazz, id); + var O = generics.getBounds(id.getReturnType(), result.clazz, id); + assertEquals(P, O); + assertEquals(O, new BoundsList(new Bound(true, ASTToTargetAST.OBJECT))); - // TODO Shouldn't AK and AK2 be the same and on the class? - var AK2 = generics.getBounds(m.getParameterList().getParameterAt(0).getType(), result.clazz, m); - var Y = generics.getBounds(m.getParameterList().getParameterAt(0).getType(), result.clazz, m); - assertEquals(AK2, AKChain); - assertEquals(Y, AKChain); + assertEquals(generics.resolve(m.getParameterList().getParameterAt(0).getType()), generics.resolve(m.getReturnType())); + var Y = generics.getBounds(m.getParameterList().getParameterAt(0).getType(), result.clazz, m); + var AA = generics.getBounds(m.getParameterList().getParameterAt(1).getType(), result.clazz, m); + assertEquals(Y, AA); + assertEquals(AA, new BoundsList(new Bound(true, ASTToTargetAST.OBJECT))); - var AF = generics.getBounds(main.getParameterList().getParameterAt(0).getType(), result.clazz, main); - var AG= generics.getBounds(main.getParameterList().getParameterAt(1).getType(), result.clazz, main); - var AK3 = generics.getBounds(main.getReturnType(), result.clazz, main); - var AFChain = new BoundsList(new Bound(true, TypePlaceholder.of("AG")), new Bound(true, ASTToTargetAST.OBJECT)); - assertEquals(AF, AFChain); - assertEquals(AG, AKChain); - assertEquals(AK3, AKChain); + var AI = generics.getBounds(m.getParameterList().getParameterAt(0).getType(), result.clazz, m); + var AJ = generics.getBounds(m.getParameterList().getParameterAt(1).getType(), result.clazz, m); + var AH = generics.getBounds(m.getReturnType(), result.clazz, m); + assertEquals(AI, AJ); + assertEquals(AJ, AH); + assertEquals(AH, new BoundsList(new Bound(true, ASTToTargetAST.OBJECT))); } @Test From e231cf722bce8add5740e8335433f6b22ada753f Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Tue, 4 Apr 2023 13:09:28 +0200 Subject: [PATCH 27/62] Fix type variable being declared twice --- .../de/dhbwstuttgart/target/generate/ASTToTargetAST.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index b28bfb41..3ebd5430 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -116,6 +116,8 @@ public class ASTToTargetAST { } return false; }); + } else if (input.stream().anyMatch(p -> p.getLeft().equals(pair.getLeft()))) { + return; } input.add(pair); @@ -605,14 +607,14 @@ public class ASTToTargetAST { if (left.equals(tph)) { var pair = new PairTPHsmallerTPH(tph, right); if (!generics.contains(pair)) { - generics.add(pair); + addToPairs(generics, pair); findAllBounds(right, generics, equality); found = true; } } } if (!found) - generics.add(new PairTPHequalRefTypeOrWildcardType(tph, OBJECT)); + addToPairs(generics, new PairTPHequalRefTypeOrWildcardType(tph, OBJECT)); } else if (type instanceof RefType refType) { refType.getParaList().forEach(t -> findAllBounds(t, generics, equality)); } @@ -663,7 +665,6 @@ public class ASTToTargetAST { } } } - System.out.println(input); } void findTphs(RefTypeOrTPHOrWildcardOrGeneric type, Set tphs, Map equality) { From 0908d512d9f2e2451878d3736903b6a939948fa6 Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Tue, 4 Apr 2023 13:16:25 +0200 Subject: [PATCH 28/62] modified: src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java --- .../de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java index 7108975b..2857d015 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java @@ -495,7 +495,7 @@ public class TYPEStmt implements StatementVisitor{ @Override public void visit(Return returnExpr) { returnExpr.retexpr.accept(this); - constraintsSet.addUndConstraint(new Pair(returnExpr.getType(),info.getCurrentTypeScope().getReturnType(), PairOperator.EQUALSDOT)); + constraintsSet.addUndConstraint(new Pair(returnExpr.getType(),info.getCurrentTypeScope().getReturnType(), PairOperator.SMALLERDOT)); } @Override @@ -610,8 +610,8 @@ public class TYPEStmt implements StatementVisitor{ //Fuer Bytecodegenerierung PL 2020-03-09 wird derzeit nicht benutzt ENDE - methodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.SMALLERDOT)); - extendsMethodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.SMALLERDOT)); + methodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.EQUALSDOT)); + extendsMethodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.EQUALSDOT)); Set parameterContraints = generateParameterConstraints(forMethod, assumption, info, resolver); From 86d229cac94ec5af493cbb377a20c208d3f5e632 Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Tue, 4 Apr 2023 15:54:03 +0200 Subject: [PATCH 29/62] modified: resources/bytecode/javFiles/Matrix.jav modified: src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java modified: src/test/java/targetast/TestComplete.java --- resources/bytecode/javFiles/Matrix.jav | 2 +- .../typeinference/typeAlgo/TYPEStmt.java | 4 +-- src/test/java/targetast/TestComplete.java | 26 +++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/resources/bytecode/javFiles/Matrix.jav b/resources/bytecode/javFiles/Matrix.jav index f8c426b4..b94c0783 100644 --- a/resources/bytecode/javFiles/Matrix.jav +++ b/resources/bytecode/javFiles/Matrix.jav @@ -1,6 +1,6 @@ import java.util.Vector; import java.lang.Integer; -import java.lang.Float; +//import java.lang.Float; //import java.lang.Byte; //import java.lang.Boolean; diff --git a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java index 2857d015..ecd7600f 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java @@ -610,8 +610,8 @@ public class TYPEStmt implements StatementVisitor{ //Fuer Bytecodegenerierung PL 2020-03-09 wird derzeit nicht benutzt ENDE - methodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.EQUALSDOT)); - extendsMethodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.EQUALSDOT)); + methodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.SMALLERDOT)); + extendsMethodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.SMALLERDOT)); Set parameterContraints = generateParameterConstraints(forMethod, assumption, info, resolver); diff --git a/src/test/java/targetast/TestComplete.java b/src/test/java/targetast/TestComplete.java index 1b39618d..34d1370f 100644 --- a/src/test/java/targetast/TestComplete.java +++ b/src/test/java/targetast/TestComplete.java @@ -279,6 +279,32 @@ public class TestComplete { assertEquals(result, instanceOfClass_m3); } + @Test + public void scalarTest() throws Exception { + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Scalar.jav"); + var scalar = classFiles.get("Scalar"); + + Vector> vv = new Vector<>(); + Vector v1 = new Vector<> (); + v1.addElement(2); + v1.addElement(2); + + var instanceOfClass_s1 = scalar.getDeclaredConstructor(Vector.class).newInstance(v1); + + Vector v2 = new Vector<> (); + v2.addElement(2); + v2.addElement(2); + + var instanceOfClass_s2 = scalar.getDeclaredConstructor(Vector.class).newInstance(v2); + + var mul = scalar.getDeclaredMethod("mul", Vector.class); + var result = mul.invoke(instanceOfClass_s1, instanceOfClass_s2); + System.out.println(instanceOfClass_s1.toString() + " * " + instanceOfClass_s2.toString() + " = " + result.toString()); + + assertEquals(result, 8); + } + + @Test public void mergeTest() throws Exception { var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Merge.jav"); From f6fe3a68aaf95ab8bdfee269a36fcd2f9cca741e Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Tue, 4 Apr 2023 15:54:41 +0200 Subject: [PATCH 30/62] new file: resources/bytecode/javFiles/Scalar.jav --- resources/bytecode/javFiles/Scalar.jav | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 resources/bytecode/javFiles/Scalar.jav diff --git a/resources/bytecode/javFiles/Scalar.jav b/resources/bytecode/javFiles/Scalar.jav new file mode 100644 index 00000000..0ef1b580 --- /dev/null +++ b/resources/bytecode/javFiles/Scalar.jav @@ -0,0 +1,26 @@ +import java.util.Vector; +import java.lang.Integer; +import java.lang.Float; +//import java.lang.Byte; +//import java.lang.Boolean; + +public class Scalar extends Vector { + + Scalar(v) { + Integer i; + i = 0; + while(i < v.size()) { + this.add(v.elementAt(i)); + i=i+1; + } + } + + mul(v) { + var ret = 0; + var i = 0; + while(i < size()) { + ret = ret + this.elementAt(i) * v.elementAt(i); + } + return ret; + } +} From f6a4fe81423eb4cbf2ddcae990b840b5bbe39d12 Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Tue, 4 Apr 2023 16:00:54 +0200 Subject: [PATCH 31/62] modified: resources/bytecode/javFiles/Scalar.jav --- resources/bytecode/javFiles/Scalar.jav | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/bytecode/javFiles/Scalar.jav b/resources/bytecode/javFiles/Scalar.jav index 0ef1b580..381869af 100644 --- a/resources/bytecode/javFiles/Scalar.jav +++ b/resources/bytecode/javFiles/Scalar.jav @@ -20,6 +20,7 @@ public class Scalar extends Vector { var i = 0; while(i < size()) { ret = ret + this.elementAt(i) * v.elementAt(i); + i = i+1; } return ret; } From ed671aeb97892be88648368b5fe4938842528cf4 Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Wed, 5 Apr 2023 17:48:15 +0200 Subject: [PATCH 32/62] modified: src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java modified: src/main/java/de/dhbwstuttgart/syntaxtree/factory/UnifyTypeFactory.java modified: src/main/java/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java modified: src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java modified: src/main/java/de/dhbwstuttgart/typeinference/unify/model/OrderingUnifyPair.java modified: src/main/java/de/dhbwstuttgart/typeinference/unify/model/PlaceholderType.java <. weider eingefuegt bei Return typen von Methodcalls und Return-Statements Vergleich dementsprechend angepasst. --- .../de/dhbwstuttgart/core/JavaTXCompiler.java | 2 +- .../syntaxtree/factory/UnifyTypeFactory.java | 1 + .../syntaxtree/type/TypePlaceholder.java | 16 ++++++++++++++++ .../typeinference/typeAlgo/TYPEStmt.java | 5 +++++ .../unify/model/OrderingUnifyPair.java | 14 +++++++++++--- .../unify/model/PlaceholderType.java | 16 ++++++++++++++++ 6 files changed, 50 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java index fc1b0000..c582fa96 100644 --- a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -69,7 +69,7 @@ public class JavaTXCompiler { //public static JavaTXCompiler INSTANCE; final CompilationEnvironment environment; - Boolean resultmodel = true; + Boolean resultmodel = false; public final Map sourceFiles = new HashMap<>(); Boolean log = false; //gibt an ob ein Log-File nach System.getProperty("user.dir")+""/logFiles/"" geschrieben werden soll? public volatile UnifyTaskModel usedTasks = new UnifyTaskModel(); diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/UnifyTypeFactory.java b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/UnifyTypeFactory.java index 0f1017ed..92b72ec4 100644 --- a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/UnifyTypeFactory.java +++ b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/UnifyTypeFactory.java @@ -121,6 +121,7 @@ public class UnifyTypeFactory { } PlaceholderType ntph = new PlaceholderType(tph.getName()); ntph.setVariance(tph.getVariance()); + ntph.setOrCons(tph.getOrCons()); int in = PLACEHOLDERS.indexOf(ntph); if (in == -1) { PLACEHOLDERS.add(ntph); diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java b/src/main/java/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java index 2aaa8068..8452b2c8 100644 --- a/src/main/java/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java +++ b/src/main/java/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java @@ -24,6 +24,14 @@ public class TypePlaceholder extends RefTypeOrTPHOrWildcardOrGeneric * wird im Generate Generics Teil nach der Rueckumwandlung nach dem Unify genutzt */ private int variance = 0; + + /* + * Fuer Oder-Constraints: + * orCons = 1: Receiver + * orCons = 0: Argument oder kein Oder-Constraint + * orCons = -1: RetType + */ + private byte orCons = 0; /** @@ -104,4 +112,12 @@ public class TypePlaceholder extends RefTypeOrTPHOrWildcardOrGeneric public void accept(ResultSetVisitor visitor) { visitor.visit(this); } + + public void setOrCons(byte i) { + orCons = i; + } + + public byte getOrCons() { + return orCons; + } } diff --git a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java index ecd7600f..acdce189 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java @@ -613,6 +613,11 @@ public class TYPEStmt implements StatementVisitor{ methodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.SMALLERDOT)); extendsMethodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.SMALLERDOT)); + //methodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.EQUALSDOT)); + //extendsMethodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(), PairOperator.EQUALSDOT)); + + ((TypePlaceholder)forMethod.getType()).setOrCons((byte)-1);//fuer Maximums-Bestimmung + Set parameterContraints = generateParameterConstraints(forMethod, assumption, info, resolver); methodConstraint.addAll(parameterContraints); diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/model/OrderingUnifyPair.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/model/OrderingUnifyPair.java index 35eee0eb..7e319a42 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/unify/model/OrderingUnifyPair.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/model/OrderingUnifyPair.java @@ -131,7 +131,11 @@ public class OrderingUnifyPair extends OrderingExtend> { * fuehrt zu Fehlern bei Arrays.sort (contract nicht erfuellt) * @see com.google.common.collect.Ordering#compare(java.lang.Object, java.lang.Object) */ - public int compare (Set left, Set right) { + public int compare (Set leftpara, Set rightpara) { + + Set left = new HashSet<>(leftpara); + Set right = new HashSet<>(rightpara); + /* //pairop = PairOperator.SMALLERDOTWC; List al = new ArrayList<>(); @@ -220,22 +224,26 @@ public class OrderingUnifyPair extends OrderingExtend> { !(y.getRhsType() instanceof PlaceholderType) && x.getPairOp() == PairOperator.EQUALSDOT);}) .collect(Collectors.toCollection(HashSet::new)); + left.removeAll(lefteqOder); Set righteqOder = right.stream() .filter(x -> { UnifyPair y = x.getGroundBasePair(); return (y.getLhsType() instanceof PlaceholderType && !(y.getRhsType() instanceof PlaceholderType) && x.getPairOp() == PairOperator.EQUALSDOT);}) .collect(Collectors.toCollection(HashSet::new)); + right.removeAll(righteqOder); Set lefteqRet = left.stream() .filter(x -> { UnifyPair y = x.getGroundBasePair(); return (y.getRhsType() instanceof PlaceholderType && - x.getPairOp() == PairOperator.EQUALSDOT);}) + ((PlaceholderType)y.getRhsType()).getOrCons() == (byte)-1);}) .collect(Collectors.toCollection(HashSet::new)); + left.removeAll(lefteqRet); Set righteqRet = right.stream() .filter(x -> { UnifyPair y = x.getGroundBasePair(); return (y.getRhsType() instanceof PlaceholderType && - x.getPairOp() == PairOperator.EQUALSDOT);}) + ((PlaceholderType)y.getRhsType()).getOrCons() == (byte)-1);}) .collect(Collectors.toCollection(HashSet::new)); + right.removeAll(righteqRet); Set leftleOder = left.stream() .filter(x -> (x.getPairOp() == PairOperator.SMALLERDOT)) .collect(Collectors.toCollection(HashSet::new)); diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/model/PlaceholderType.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/model/PlaceholderType.java index 63f3d448..07d85727 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/unify/model/PlaceholderType.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/model/PlaceholderType.java @@ -59,6 +59,14 @@ public final class PlaceholderType extends UnifyType{ * PL 2018-03-21 */ private int variance = 0; + + /* + * Fuer Oder-Constraints: + * orCons = 1: Receiver + * orCons = 0: Argument oder kein Oder-Constraint + * orCons = -1: RetType + */ + private byte orCons = 0; /** * Creates a new placeholder type with the specified name. @@ -122,6 +130,14 @@ public final class PlaceholderType extends UnifyType{ }} } + public void setOrCons(byte i) { + orCons = i; + } + + public byte getOrCons() { + return orCons; + } + public Boolean isWildcardable() { return wildcardable; } From 39bde24df707c139d0a1cd73ff7936eff29109da Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Fri, 14 Apr 2023 11:38:41 +0200 Subject: [PATCH 33/62] Start working on signature parsing --- .../de/dhbwstuttgart/bytecode/Codegen.java | 6 +- .../bytecode/JavaTXSignatureAttribute.java | 12 +- .../syntaxtree/factory/ASTFactory.java | 136 ++++++++++++++---- .../target/generate/ASTToTargetAST.java | 1 + 4 files changed, 124 insertions(+), 31 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java b/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java index 8c60ac42..8a22fd92 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java @@ -1000,7 +1000,7 @@ public class Codegen { private void generateConstructor(TargetConstructor constructor) { MethodVisitor mv = cw.visitMethod(constructor.access() | ACC_PUBLIC, "", constructor.getDescriptor(), constructor.getSignature(), null); if (constructor.txGenerics() != null) - mv.visitAttribute(new JavaTXSignatureAttribute(cw.newConst(constructor.getTXSignature()))); + mv.visitAttribute(new JavaTXSignatureAttribute(constructor.getTXSignature())); mv.visitCode(); var state = new State(null, mv, 1); @@ -1027,7 +1027,7 @@ public class Codegen { // TODO The older codegen has set ACC_PUBLIC for all methods, good for testing but bad for everything else MethodVisitor mv = cw.visitMethod(method.access() | ACC_PUBLIC, method.name(), method.getDescriptor(), method.getSignature(), null); if (method.txSignature() != null) { - mv.visitAttribute(new JavaTXSignatureAttribute(cw.newConst(method.getTXSignature()))); + mv.visitAttribute(new JavaTXSignatureAttribute(method.getTXSignature())); } System.out.println(method.getDescriptor()); @@ -1060,7 +1060,7 @@ public class Codegen { clazz.implementingInterfaces().stream().map(TargetType::toSignature).toArray(String[]::new) ); if (clazz.txGenerics() != null) - cw.visitAttribute(new JavaTXSignatureAttribute(cw.newConst(generateSignature(clazz, clazz.txGenerics())))); + cw.visitAttribute(new JavaTXSignatureAttribute(generateSignature(clazz, clazz.txGenerics()))); clazz.fields().forEach(this::generateField); clazz.constructors().forEach(this::generateConstructor); diff --git a/src/main/java/de/dhbwstuttgart/bytecode/JavaTXSignatureAttribute.java b/src/main/java/de/dhbwstuttgart/bytecode/JavaTXSignatureAttribute.java index bd5f6028..ee7b2e57 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/JavaTXSignatureAttribute.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/JavaTXSignatureAttribute.java @@ -3,10 +3,13 @@ package de.dhbwstuttgart.bytecode; import org.objectweb.asm.*; public class JavaTXSignatureAttribute extends Attribute { - final int signature; + public String signature; - protected JavaTXSignatureAttribute(int signature) { + public JavaTXSignatureAttribute() { super("JavaTXSignature"); + } + protected JavaTXSignatureAttribute(String signature) { + this(); this.signature = signature; } @@ -14,13 +17,14 @@ public class JavaTXSignatureAttribute extends Attribute { protected Attribute read(ClassReader classReader, int offset, int length, char[] charBuffer, int codeAttributeOffset, Label[] labels) { var data = new byte[length]; System.arraycopy(classReader.b, offset, data, 0, length); - return new JavaTXSignatureAttribute(data[0] << 8 | data[1]); + var constantPoolOffset = data[0] << 8 | data[1]; + return new JavaTXSignatureAttribute((String) classReader.readConst(constantPoolOffset, charBuffer)); } @Override protected ByteVector write(ClassWriter classWriter, byte[] code, int codeLength, int maxStack, int maxLocals) { var data = new ByteVector(); - data.putShort(this.signature); + data.putShort(classWriter.newConst(this.signature)); return data; } } diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java index 79b6d281..a7272806 100644 --- a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java +++ b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java @@ -1,19 +1,16 @@ package de.dhbwstuttgart.syntaxtree.factory; +import java.io.IOException; import java.lang.reflect.*; import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; +import java.lang.reflect.Type; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.*; -import de.dhbwstuttgart.exceptions.NotImplementedException; +import de.dhbwstuttgart.bytecode.JavaTXSignatureAttribute; import de.dhbwstuttgart.parser.NullToken; -import de.dhbwstuttgart.parser.SyntaxTreeGenerator.GenericContext; import de.dhbwstuttgart.parser.scope.JavaClassName; -import de.dhbwstuttgart.parser.scope.JavaClassRegistry; import de.dhbwstuttgart.syntaxtree.Field; import de.dhbwstuttgart.syntaxtree.Method; import de.dhbwstuttgart.syntaxtree.type.*; @@ -21,8 +18,11 @@ import de.dhbwstuttgart.syntaxtree.type.Void; import de.dhbwstuttgart.syntaxtree.*; import de.dhbwstuttgart.syntaxtree.statement.Block; import de.dhbwstuttgart.syntaxtree.statement.Statement; -import de.dhbwstuttgart.syntaxtree.type.WildcardType; +import de.dhbwstuttgart.util.Pair; import org.antlr.v4.runtime.Token; +import org.objectweb.asm.*; +import org.objectweb.asm.signature.SignatureReader; +import org.objectweb.asm.signature.SignatureVisitor; /** * Anmerkung: @@ -32,21 +32,73 @@ import org.antlr.v4.runtime.Token; public class ASTFactory { public static ClassOrInterface createClass(java.lang.Class jreClass){ + + // TODO Inner classes + + var methodSignatures = new HashMap, String>(); + String classSignature = null; + + // Load class with asm to figure out if there's a JavaTX signature + try { + var bytes = Files.readAllBytes(Path.of(jreClass.getProtectionDomain().getCodeSource().getLocation().getPath())); + var classReader = new ClassReader(bytes); + + var classVisitor = new ClassVisitor(Opcodes.ASM7) { + String classSignature; + @Override + public void visitAttribute(Attribute attribute) { + if (attribute.type.equals("JavaTXSignature")) { + classSignature = ((JavaTXSignatureAttribute) attribute).signature; + } + super.visitAttribute(attribute); + } + + @Override + public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { + classSignature = signature; + super.visit(version, access, name, signature, superName, interfaces); + } + + @Override + public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { + + methodSignatures.put(new Pair<>(name, descriptor), signature); + return new MethodVisitor(Opcodes.ASM7) { + @Override + public void visitAttribute(Attribute attribute) { + if (attribute.type.equals("JavaTXSignature")) { + methodSignatures.put(new Pair<>(name, descriptor), ((JavaTXSignatureAttribute) attribute).signature); + } + super.visitAttribute(attribute); + } + }; + } + }; + + classReader.accept(classVisitor, new Attribute[]{new JavaTXSignatureAttribute()}, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES); + classSignature = classVisitor.classSignature; + } catch (IOException e) { + // Skip + } + JavaClassName name = new JavaClassName(jreClass.getName()); List methoden = new ArrayList<>(); List konstruktoren = new ArrayList<>(); for(java.lang.reflect.Constructor constructor : jreClass.getConstructors()){ - createConstructor(constructor, jreClass).map(c -> konstruktoren.add(c)); + var signature = methodSignatures.get(new Pair<>(constructor.getName(), org.objectweb.asm.Type.getConstructorDescriptor(constructor))); + createConstructor(constructor, signature, jreClass).map(c -> konstruktoren.add(c)); } Set allMethods = new HashSet<>(Arrays.asList(jreClass.getMethods())); Set allDeclaredMethods = new HashSet<>(Arrays.asList(jreClass.getDeclaredMethods())); Set allInheritedMethods = new HashSet<>(allMethods); allInheritedMethods.removeAll(allDeclaredMethods); for(java.lang.reflect.Method method : allDeclaredMethods){ - methoden.add(createMethod(method, jreClass, false)); + var signature = methodSignatures.get(new Pair<>(method.getName(), org.objectweb.asm.Type.getMethodDescriptor(method))); + methoden.add(createMethod(method, signature, jreClass, false)); } for(java.lang.reflect.Method method : allInheritedMethods){ - methoden.add(createMethod(method, jreClass, true)); + var signature = methodSignatures.get(new Pair<>(method.getName(), org.objectweb.asm.Type.getMethodDescriptor(method))); + methoden.add(createMethod(method, signature, jreClass, true)); } List felder = new ArrayList<>(); for(java.lang.reflect.Field field : jreClass.getDeclaredFields()){ @@ -72,7 +124,8 @@ public class ASTFactory { for(Type jreInterface : jreClass.getGenericInterfaces()){ implementedInterfaces.add((RefType) createType(jreInterface)); } - GenericDeclarationList genericDeclarationList = createGenerics(jreClass.getTypeParameters(), jreClass, null); + + GenericDeclarationList genericDeclarationList = createGenerics(classSignature, jreClass, null); Token offset = new NullToken(); //Braucht keinen Offset, da diese Klasse nicht aus einem Quellcode geparst wurde @@ -87,7 +140,7 @@ public class ASTFactory { // return createClass(classType).getType(); //} - private static Optional createConstructor(Constructor constructor, Class inClass) { + private static Optional createConstructor(Constructor constructor, String signature, Class inClass) { String name = constructor.getName(); RefTypeOrTPHOrWildcardOrGeneric returnType = createType(inClass); Parameter[] jreParams = constructor.getParameters(); @@ -101,7 +154,7 @@ public class ASTFactory { } ParameterList parameterList = new ParameterList(params, new NullToken()); Block block = new Block(new ArrayList(), new NullToken()); - GenericDeclarationList gtvDeclarations = createGenerics(constructor.getTypeParameters(), inClass, constructor.getName()); + GenericDeclarationList gtvDeclarations = createGenerics(signature, inClass, constructor.getName()); Token offset = new NullToken(); int modifier = constructor.getModifiers(); @@ -112,7 +165,7 @@ public class ASTFactory { return Optional.of(new de.dhbwstuttgart.syntaxtree.Constructor(modifier, name,returnType, parameterList, block, gtvDeclarations, offset /*, new ArrayList<>() geloescht PL 2018-11-24 */)); } - public static Method createMethod(java.lang.reflect.Method jreMethod, java.lang.Class inClass, Boolean isInherited){ + public static Method createMethod(java.lang.reflect.Method jreMethod, String signature, java.lang.Class inClass, Boolean isInherited){ String name = jreMethod.getName(); RefTypeOrTPHOrWildcardOrGeneric returnType; Type jreRetType; @@ -133,18 +186,53 @@ public class ASTFactory { } ParameterList parameterList = new ParameterList(params, new NullToken()); Block block = new Block(new ArrayList(), new NullToken()); - GenericDeclarationList gtvDeclarations = createGenerics(jreMethod.getTypeParameters(), inClass, jreMethod.getName()); + GenericDeclarationList gtvDeclarations = createGenerics(signature, inClass, jreMethod.getName()); Token offset = new NullToken(); return new Method(jreMethod.getModifiers(), name,returnType, parameterList, block, gtvDeclarations, offset, isInherited); } - public static GenericDeclarationList createGenerics(TypeVariable[] typeParameters, Class context, String methodName){ - List gtvs = new ArrayList<>(); - for(TypeVariable jreTV : typeParameters){ - de.dhbwstuttgart.syntaxtree.GenericTypeVar gtv = createGeneric(jreTV, jreTV.getName(), context, methodName); - gtvs.add(gtv); - } + public static GenericDeclarationList createGenerics(String signature, Class context, String methodName){ + var gtvs = new ArrayList(); + var signatureVisitor = new SignatureVisitor(Opcodes.ASM7) { + List bounds = new ArrayList<>(); + Stack bound = new Stack<>(); + + @Override + public void visitFormalTypeParameter(String name) { + bounds = new ArrayList<>(); + gtvs.add(new GenericTypeVar(name, bounds, new NullToken(), new NullToken())); + } + + @Override + public void visitTypeVariable(String name) { + ((RefType) bound.peek()).getParaList().add(new GenericRefType(name, new NullToken())); + } + + @Override + public void visitClassType(String name) { + var currentBound = new RefType(new JavaClassName(name), new ArrayList<>(), new NullToken()); + bound.push(currentBound); + } + + @Override + public SignatureVisitor visitTypeArgument(char wildcard) { + return this; + } + + @Override + public void visitEnd() { + var last = bound.pop(); + if (bound.empty()) bounds.add(last); + else { + ((RefType) bound.peek()).getParaList().add(last); + } + } + }; + + var sr = new SignatureReader(signature); + sr.accept(signatureVisitor); + return new GenericDeclarationList(gtvs,new NullToken()); } diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index 3ebd5430..ede06693 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -16,6 +16,7 @@ import de.dhbwstuttgart.target.tree.expression.TargetExpression; import de.dhbwstuttgart.target.tree.type.*; import de.dhbwstuttgart.typeinference.constraints.Pair; import de.dhbwstuttgart.typeinference.result.*; +import org.objectweb.asm.Attribute; import java.util.*; import java.util.stream.Collectors; From 40782398157028ee99d31db879b52c17b670d9e9 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Fri, 14 Apr 2023 15:04:26 +0200 Subject: [PATCH 34/62] - Calculate veriance for new type variables in Infima & Cycles - Remove referenced check from Infima - Correctly identify contra & covariance for chains for tphs --- .../target/generate/ASTToTargetAST.java | 108 +++++++++++++----- 1 file changed, 78 insertions(+), 30 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index 3ebd5430..841858dd 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -18,6 +18,7 @@ import de.dhbwstuttgart.typeinference.constraints.Pair; import de.dhbwstuttgart.typeinference.result.*; import java.util.*; +import java.util.concurrent.CyclicBarrier; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -170,7 +171,6 @@ public class ASTToTargetAST { for (var pair : simplifiedConstraints) { if (pair.left.equals(typeVariable) && typeVariables.contains(pair.right)) { addToPairs(result, new PairTPHsmallerTPH(pair.left, equality.getOrDefault(pair.right, pair.right))); - typeVariables.add(pair.right); } } } @@ -196,7 +196,7 @@ public class ASTToTargetAST { RefTypeOrTPHOrWildcardOrGeneric T2 = superType; if (T2 instanceof TypePlaceholder tph) T2 = equality.getOrDefault(tph, tph); - System.out.println("T1s: " + T1s + "\nT2: " + T2); + System.out.println("T1s: " + T1s + " T2: " + T2); //Ende superType = methodCall.receiverType; @@ -211,7 +211,7 @@ public class ASTToTargetAST { var optMethod = findMethod(owner, methodCall.name, methodCall.getArgumentList()); if (optMethod.isEmpty()) return; var method = optMethod.get(); - var generics = generics(owner, method).javaGenerics(); + var generics = generics(owner, method).txGenerics(); // transitive and var all = transitiveClosure(generics); @@ -226,24 +226,24 @@ public class ASTToTargetAST { // Loop from hell outer: - for (var tph : typeVariables) { - if (typeVariablesOfClass.contains(tph)) continue; + for (var R1 : typeVariables) { + if (typeVariablesOfClass.contains(R1)) continue; for (var generic : all) { if (!(generic.getRight() instanceof TypePlaceholder type)) continue; for (var pair : simplifiedConstraints) { - if (!(pair.left.equals(tph) && pair.right.equals(generic.getLeft()))) + if (!(pair.left.equals(R1) && pair.right.equals(generic.getLeft()))) continue; - for (var tph2 : typeVariables) { + for (var R2 : typeVariables) { for (var pair2 : simplifiedConstraints) { - if (!(pair2.right.equals(tph2) && pair2.left.equals(type))) + if (!(pair2.right.equals(R2) && pair2.left.equals(type))) continue; - if (tph.equals(tph2)) continue; - if (!T1s.contains(tph) || !tph2.equals(T2)) continue; + if (R1.equals(R2)) continue; + if (!T1s.contains(R1) || !R2.equals(T2)) continue; - var newPair = new PairTPHsmallerTPH(tph, tph2); + var newPair = new PairTPHsmallerTPH(R1, R2); newPairs.add(newPair); if (!containsRelation(result, newPair)) @@ -268,7 +268,7 @@ public class ASTToTargetAST { @Override public void visit(Assign assign) { - superType = assign.lefSide.getType(); + superType = assign.rightSide.getType(); assign.rightSide.accept(this); } @@ -521,9 +521,6 @@ public class ASTToTargetAST { super.visit(methodCall); typeVariables.addAll(findTypeVariables(methodCall.getType(), equality)); } - - @Override - public void visit(Assign assign) {} }); } @@ -557,7 +554,7 @@ public class ASTToTargetAST { var referenced = new HashSet(); eliminateCycles(javaResult, equality, referenced); - eliminateInfima(javaResult, equality, referenced); + eliminateInfima(javaResult, equality); var usedTphs = new HashSet(); // For eliminating inner type variables we need to figure out which ones are actually used @@ -575,7 +572,7 @@ public class ASTToTargetAST { { var referenced = new HashSet(); // JavaTX Generics - eliminateInfima(txResult, txEquality, referenced); + eliminateInfima(txResult, txEquality); for (var param : method.getParameterList().getFormalparalist()) { referenced.addAll(findTypeVariables(param.getType(), txEquality)); @@ -636,9 +633,9 @@ public class ASTToTargetAST { var referenced = new HashSet(); eliminateCycles(javaResult, equality, referenced); - eliminateInfima(javaResult, equality, referenced); + eliminateInfima(javaResult, equality); var txReferenced = new HashSet(); - eliminateInfima(txResult, txEquality, txReferenced); + eliminateInfima(txResult, txEquality); eliminateInnerTypeVariablesOfClass(classOrInterface, javaResult, equality, referenced); equalizeTypeVariables(javaResult, equality); @@ -649,19 +646,52 @@ public class ASTToTargetAST { } void equalizeTypeVariables(Set> input, Map equality) { - System.out.println(input); for (var pair : new HashSet<>(input)) { if (pair instanceof PairTPHsmallerTPH ptph) { - System.out.println(pair + " " + ptph.left.getVariance() + " " + ptph.right.getVariance()); - if (ptph.left.getVariance() == 1 && ptph.right.getVariance() == -1) { - addToEquality(equality, ptph.left, ptph.right); - input.remove(ptph); - for (var pair2 : new HashSet<>(simplifiedConstraints)) { - if (pair2.right.equals(ptph.left)) { - simplifiedConstraints.remove(pair2); - simplifiedConstraints.add(new PairTPHsmallerTPH(pair2.left, ptph.right)); + var chain = new ArrayList(); + chain.add(ptph.left); + chain.add(ptph.right); + + outer: while (true) { + var added = false; + for (var pair2 : input) { + if (pair2 instanceof PairTPHsmallerTPH ptph2 && ptph2.left.equals(chain.get(chain.size() - 1))) { + if (chain.contains(ptph2.right)) break outer; + chain.add(ptph2.right); + added = true; } } + if (!added) break; + } + + var variance = chain.get(0).getVariance(); + if (variance != 1) continue; + var index = 0; + for (var tph : chain) { + if (variance == 1 && tph.getVariance() == -1) { + variance = -1; + } + if (variance == -1 && tph.getVariance() == 1) { + break; + } + index++; + } + if (variance == 1) continue; + + var start = chain.get(0); + var prev = start; + for (var i = 1; i < index; i++) { + var cur = chain.get(i); + addToEquality(equality, cur, start); + input.remove(new PairTPHsmallerTPH(prev, chain.get(i))); + for (var pair2 : new HashSet<>(input)) { + // TODO Maybe this would be unnecessary if we were to add the = constraints later on + if (pair2 instanceof PairTPHequalRefTypeOrWildcardType && pair2.getLeft().equals(cur)) { + input.remove(pair2); + input.add(new PairTPHequalRefTypeOrWildcardType(start, pair2.getRight())); + } + } + prev = chain.get(i); } } } @@ -739,6 +769,15 @@ public class ASTToTargetAST { var cycles = findCycles(input); for (var cycle : cycles) { var newTph = TypePlaceholder.fresh(new NullToken()); + var variance = cycle.get(0).getVariance(); + for (var tph : cycle) { + if (tph.getVariance() != variance) { + variance = 0; + break; + } + } + newTph.setVariance(variance); + referenced.add(newTph); addToPairs(input, new PairTPHequalRefTypeOrWildcardType(newTph, OBJECT)); cycle.add(cycle.get(0)); // Make it a complete cycle @@ -752,7 +791,7 @@ public class ASTToTargetAST { } } - void eliminateInfima(Set> input, Map equality, Set referenced) { + void eliminateInfima(Set> input, Map equality) { var foundInfima = false; do { foundInfima = false; @@ -767,7 +806,16 @@ public class ASTToTargetAST { if (infima.size() > 1) { foundInfima = true; var newTph = TypePlaceholder.fresh(new NullToken()); - referenced.add(newTph); + var variance = infima.stream().findFirst().get().right.getVariance(); + for (var pair : infima) { + if (pair.right.getVariance() != variance) { + variance = 0; + break; + } + } + newTph.setVariance(variance); + + //referenced.add(newTph); addToPairs(input, new PairTPHsmallerTPH(left, newTph)); input.removeAll(infima); for (var infimum : infima) { From e5ff08e0dfc81e17841d1b5f58366014468176de Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Fri, 14 Apr 2023 15:12:43 +0200 Subject: [PATCH 35/62] modified: resources/bytecode/javFiles/Scalar.jav modified: src/main/java/de/dhbwstuttgart/typeinference/unify/RuleSet.java ? extends ty { i=i+1; } } - + mul(v) { var ret = 0; var i = 0; diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/RuleSet.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/RuleSet.java index d120e483..5d60428b 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/unify/RuleSet.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/RuleSet.java @@ -13,6 +13,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import de.dhbwstuttgart.exceptions.DebugException; +import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType; import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; import de.dhbwstuttgart.typeinference.unify.interfaces.IRuleSet; import de.dhbwstuttgart.typeinference.unify.model.ExtendsType; @@ -390,26 +391,51 @@ public class RuleSet implements IRuleSet{ if((pair.getPairOp() != PairOperator.SMALLERDOT) && (pair.getPairOp() != PairOperator.SMALLERNEQDOT)) return false; - if (pair.getPairOp() == PairOperator.SMALLERNEQDOT) { - UnifyType lhs = pair.getLhsType(); - UnifyType rhs = pair.getRhsType(); - if (lhs instanceof WildcardType) { - lhs = ((WildcardType)lhs).getWildcardedType(); - } - if (rhs instanceof WildcardType) { - rhs = ((WildcardType)rhs).getWildcardedType(); - } - - if (lhs.equals(rhs)){ - return false; - } + UnifyType lhsType = pair.getLhsType(); + UnifyType rhsType = pair.getRhsType(); + + /* + * ty <. ? extends ty' is wrong + */ + if (rhsType instanceof ExtendsType) { + return false; + } + + /* + * ? super ty <. ty' is wrong + * except Ty' = Object or ty' = ? super Object + */ + if ((lhsType instanceof SuperType) && + (!(rhsType.equals(new ReferenceType("java.lang.Object", false)))) && + !(rhsType.equals(new SuperType (new ReferenceType("java.lang.Object", false))))) { + return false; + } + + /* + * ? extends ty <. ty' is equivalent to ty < ty' + */ + if (lhsType instanceof ExtendsType) { + lhsType = ((WildcardType)lhsType).getWildcardedType(); + } + + /* + * ty <. ? super ty' ist equivalent to ty <. ty' + */ + if (rhsType instanceof SuperType) { + rhsType = ((WildcardType)rhsType).getWildcardedType(); + } + + /* + * SMALLERNEQDOT => type must not be equal + */ + if (pair.getPairOp() == PairOperator.SMALLERNEQDOT && lhsType.equals(rhsType)){ + return false; } - UnifyType lhsType = pair.getLhsType(); if(!(lhsType instanceof ReferenceType) && !(lhsType instanceof PlaceholderType)) return false; - UnifyType rhsType = pair.getRhsType(); + if(!(rhsType instanceof ReferenceType) && !(rhsType instanceof PlaceholderType)) return false; From c35577f948ade691744e2649b74dfae2693bdea2 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Wed, 19 Apr 2023 14:56:59 +0200 Subject: [PATCH 36/62] Add missing functions and test the signature parser --- .../syntaxtree/GenericDeclarationList.java | 13 ++ .../syntaxtree/GenericTypeVar.java | 16 +- .../syntaxtree/factory/ASTFactory.java | 151 ++++++++++++------ .../syntaxtree/type/ExtendsWildcardType.java | 13 +- .../syntaxtree/type/GenericRefType.java | 24 ++- .../syntaxtree/type/SuperWildcardType.java | 14 +- src/test/java/GenericsParserTest.java | 86 ++++++++++ 7 files changed, 256 insertions(+), 61 deletions(-) create mode 100644 src/test/java/GenericsParserTest.java diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/GenericDeclarationList.java b/src/main/java/de/dhbwstuttgart/syntaxtree/GenericDeclarationList.java index 426b57f3..c579c464 100644 --- a/src/main/java/de/dhbwstuttgart/syntaxtree/GenericDeclarationList.java +++ b/src/main/java/de/dhbwstuttgart/syntaxtree/GenericDeclarationList.java @@ -49,4 +49,17 @@ public class GenericDeclarationList extends SyntaxTreeNode implements Iterable(name, descriptor), signature); - return new MethodVisitor(Opcodes.ASM7) { - @Override - public void visitAttribute(Attribute attribute) { - if (attribute.type.equals("JavaTXSignature")) { - methodSignatures.put(new Pair<>(name, descriptor), ((JavaTXSignatureAttribute) attribute).signature); - } - super.visitAttribute(attribute); + var classVisitor = new ClassVisitor(Opcodes.ASM7) { + String classSignature; + @Override + public void visitAttribute(Attribute attribute) { + if (attribute.type.equals("JavaTXSignature")) { + classSignature = ((JavaTXSignatureAttribute) attribute).signature; } - }; - } - }; + super.visitAttribute(attribute); + } + + @Override + public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { + classSignature = signature; + super.visit(version, access, name, signature, superName, interfaces); + } + + @Override + public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { + + methodSignatures.put(new Pair<>(name, descriptor), signature); + return new MethodVisitor(Opcodes.ASM7) { + @Override + public void visitAttribute(Attribute attribute) { + if (attribute.type.equals("JavaTXSignature")) { + methodSignatures.put(new Pair<>(name, descriptor), ((JavaTXSignatureAttribute) attribute).signature); + } + super.visitAttribute(attribute); + } + }; + } + }; + + classReader.accept(classVisitor, new Attribute[]{new JavaTXSignatureAttribute()}, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES); + classSignature = classVisitor.classSignature; + } - classReader.accept(classVisitor, new Attribute[]{new JavaTXSignatureAttribute()}, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES); - classSignature = classVisitor.classSignature; } catch (IOException e) { // Skip } @@ -125,7 +133,7 @@ public class ASTFactory { implementedInterfaces.add((RefType) createType(jreInterface)); } - GenericDeclarationList genericDeclarationList = createGenerics(classSignature, jreClass, null); + GenericDeclarationList genericDeclarationList = createGenerics(classSignature); Token offset = new NullToken(); //Braucht keinen Offset, da diese Klasse nicht aus einem Quellcode geparst wurde @@ -154,7 +162,7 @@ public class ASTFactory { } ParameterList parameterList = new ParameterList(params, new NullToken()); Block block = new Block(new ArrayList(), new NullToken()); - GenericDeclarationList gtvDeclarations = createGenerics(signature, inClass, constructor.getName()); + GenericDeclarationList gtvDeclarations = createGenerics(signature); Token offset = new NullToken(); int modifier = constructor.getModifiers(); @@ -186,17 +194,22 @@ public class ASTFactory { } ParameterList parameterList = new ParameterList(params, new NullToken()); Block block = new Block(new ArrayList(), new NullToken()); - GenericDeclarationList gtvDeclarations = createGenerics(signature, inClass, jreMethod.getName()); + GenericDeclarationList gtvDeclarations = createGenerics(signature); Token offset = new NullToken(); return new Method(jreMethod.getModifiers(), name,returnType, parameterList, block, gtvDeclarations, offset, isInherited); } - public static GenericDeclarationList createGenerics(String signature, Class context, String methodName){ + public static GenericDeclarationList createGenerics(String signature) { + if (signature == null) return new GenericDeclarationList(new ArrayList<>(), new NullToken()); + var gtvs = new ArrayList(); var signatureVisitor = new SignatureVisitor(Opcodes.ASM7) { List bounds = new ArrayList<>(); - Stack bound = new Stack<>(); + final Stack bound = new Stack<>(); + final Stack classTypes = new Stack<>(); + + char wildcard = '='; @Override public void visitFormalTypeParameter(String name) { @@ -206,26 +219,68 @@ public class ASTFactory { @Override public void visitTypeVariable(String name) { - ((RefType) bound.peek()).getParaList().add(new GenericRefType(name, new NullToken())); + var refType = new GenericRefType(name, new NullToken()); + pushType(refType); } @Override public void visitClassType(String name) { - var currentBound = new RefType(new JavaClassName(name), new ArrayList<>(), new NullToken()); - bound.push(currentBound); + var refType = new RefType(new JavaClassName(name.replaceAll("/", ".")), new ArrayList<>(), new NullToken()); + classTypes.push(refType); + pushType(refType); + } + + void pushType(RefTypeOrTPHOrWildcardOrGeneric refType) { + if (wildcard == SignatureVisitor.SUPER) { + bound.push(new SuperWildcardType(refType, new NullToken())); + } else if (wildcard == SignatureVisitor.EXTENDS) { + bound.push(new ExtendsWildcardType(refType, new NullToken())); + } else { + bound.push(refType); + } } @Override public SignatureVisitor visitTypeArgument(char wildcard) { + this.wildcard = wildcard; return this; - } + } + + boolean equals(RefTypeOrTPHOrWildcardOrGeneric a, RefTypeOrTPHOrWildcardOrGeneric b) { + if (b instanceof SuperWildcardType wc) + return equals(a, wc.getInnerType()); + else if (b instanceof ExtendsWildcardType wc) + return equals(a, wc.getInnerType()); + return a == b; + } @Override public void visitEnd() { - var last = bound.pop(); - if (bound.empty()) bounds.add(last); - else { - ((RefType) bound.peek()).getParaList().add(last); + wildcard = '='; + var classType = (RefType) classTypes.pop(); + if (!classTypes.isEmpty()) { + var next = classTypes.peek(); + var par = bound.pop(); + var toAdd = new ArrayList(); + while (!equals(next, par)) { + toAdd.add(par); + par = bound.pop(); + } + var element = par; + if (par instanceof WildcardType wc) { + element = wc.getInnerType(); + } + Collections.reverse(toAdd); + ((RefType) element).getParaList().addAll(toAdd); + + bound.push(par); + } else { + if (bound.peek() != classType) { + classType.getParaList().add(bound.pop()); + bounds.add(classType); + } else { + bounds.add(bound.pop()); + } } } }; @@ -233,7 +288,7 @@ public class ASTFactory { var sr = new SignatureReader(signature); sr.accept(signatureVisitor); - return new GenericDeclarationList(gtvs,new NullToken()); + return new GenericDeclarationList(gtvs, new NullToken()); } private static RefTypeOrTPHOrWildcardOrGeneric createType(java.lang.reflect.Type type){ diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java b/src/main/java/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java index 663bc9dc..2c8cffd3 100644 --- a/src/main/java/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java +++ b/src/main/java/de/dhbwstuttgart/syntaxtree/type/ExtendsWildcardType.java @@ -5,6 +5,8 @@ import de.dhbwstuttgart.syntaxtree.ASTVisitor; import de.dhbwstuttgart.typeinference.result.ResultSetVisitor; import org.antlr.v4.runtime.Token; +import java.util.Objects; + /** * Stellt eine Wildcard mit oberer Grenze dar. * z.B. void test(? extends Number var){..} @@ -54,9 +56,16 @@ public class ExtendsWildcardType extends WildcardType{ visitor.visit(this); } + @Override + public int hashCode() { + return Objects.hashCode(this.innerType); + } + @Override public boolean equals(Object o) { - // TODO Auto-generated method stub - return false; + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ExtendsWildcardType that = (ExtendsWildcardType) o; + return that.innerType.equals(this.innerType); } } diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/type/GenericRefType.java b/src/main/java/de/dhbwstuttgart/syntaxtree/type/GenericRefType.java index 644dbaee..9267dbd1 100644 --- a/src/main/java/de/dhbwstuttgart/syntaxtree/type/GenericRefType.java +++ b/src/main/java/de/dhbwstuttgart/syntaxtree/type/GenericRefType.java @@ -4,6 +4,8 @@ import de.dhbwstuttgart.syntaxtree.ASTVisitor; import de.dhbwstuttgart.typeinference.result.ResultSetVisitor; import org.antlr.v4.runtime.Token; +import java.util.Objects; + public class GenericRefType extends RefTypeOrTPHOrWildcardOrGeneric { private String name; @@ -33,14 +35,20 @@ public class GenericRefType extends RefTypeOrTPHOrWildcardOrGeneric visitor.visit(this); } - @Override - public boolean equals(Object o) { - // TODO Auto-generated method stub - return false; - } - - - @Override + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + GenericRefType that = (GenericRefType) o; + return name.equals(that.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + + @Override public String toString() { return "GTV " + this.name; diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java b/src/main/java/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java index 6a61b9cb..8ac1820b 100644 --- a/src/main/java/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java +++ b/src/main/java/de/dhbwstuttgart/syntaxtree/type/SuperWildcardType.java @@ -2,9 +2,12 @@ package de.dhbwstuttgart.syntaxtree.type; import de.dhbwstuttgart.syntaxtree.ASTVisitor; +import de.dhbwstuttgart.syntaxtree.GenericTypeVar; import de.dhbwstuttgart.typeinference.result.ResultSetVisitor; import org.antlr.v4.runtime.Token; +import java.util.Objects; + /** * Stellt eine Wildcard mit unterer Grenze dar. * z.B. void test(? super Integer var){..} @@ -65,9 +68,16 @@ public class SuperWildcardType extends WildcardType{ visitor.visit(this); } + @Override + public int hashCode() { + return Objects.hashCode(this.innerType); + } + @Override public boolean equals(Object o) { - // TODO Auto-generated method stub - return false; + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + SuperWildcardType that = (SuperWildcardType) o; + return that.innerType.equals(this.innerType); } } diff --git a/src/test/java/GenericsParserTest.java b/src/test/java/GenericsParserTest.java new file mode 100644 index 00000000..6e711415 --- /dev/null +++ b/src/test/java/GenericsParserTest.java @@ -0,0 +1,86 @@ +import de.dhbwstuttgart.parser.NullToken; +import de.dhbwstuttgart.parser.scope.JavaClassName; +import de.dhbwstuttgart.syntaxtree.GenericDeclarationList; +import de.dhbwstuttgart.syntaxtree.GenericTypeVar; +import de.dhbwstuttgart.syntaxtree.factory.ASTFactory; +import de.dhbwstuttgart.syntaxtree.type.*; +import de.dhbwstuttgart.target.generate.ASTToTargetAST; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.*; + +public class GenericsParserTest { + + @Test + public void testMethodNoGenerics() { + var signature = "()V"; + var generics = ASTFactory.createGenerics(signature); + assertEquals(generics, new GenericDeclarationList(List.of(), new NullToken())); + } + + @Test + public void testMethodSimpleGenerics() { + var signature = "()V"; + var generics = ASTFactory.createGenerics(signature); + assertEquals(generics, new GenericDeclarationList( + List.of(new GenericTypeVar("T", List.of(ASTToTargetAST.OBJECT), new NullToken(), new NullToken())), new NullToken()) + ); + } + + @Test + public void testMethodExtends() { + var signature = ";>()V"; + var generics = ASTFactory.createGenerics(signature); + assertEquals(generics, new GenericDeclarationList( + List.of(new GenericTypeVar("T", List.of( + new RefType(new JavaClassName("java.lang.Class"), List.of(new GenericRefType("T", new NullToken())), new NullToken())), + new NullToken(), new NullToken())), new NullToken() + ) + ); + } + + @Test + public void testMethodVariance() { + var signature = ";>()V"; + var generics = ASTFactory.createGenerics(signature); + + assertEquals(generics, new GenericDeclarationList( + List.of(new GenericTypeVar("T", List.of( + new RefType(new JavaClassName("java.lang.Class"), List.of( + new ExtendsWildcardType(new GenericRefType("T", new NullToken()), new NullToken()) + ), new NullToken())), + new NullToken(), new NullToken())), + new NullToken()) + ); + } + + @Test + public void testMethodComplex() { + var signature = ";>;>;U:LClassC;>()V"; + var generics = ASTFactory.createGenerics(signature); + + assertEquals(generics, new GenericDeclarationList( + List.of(new GenericTypeVar("T", List.of( + new RefType(new JavaClassName("ClassA"), List.of( + new ExtendsWildcardType(new GenericRefType("T", new NullToken()), new NullToken()), + new RefType(new JavaClassName("ClassB"), List.of( + new ExtendsWildcardType(new RefType(new JavaClassName("ClassA"), new NullToken()), new NullToken()), + new SuperWildcardType( + new RefType(new JavaClassName("ClassC"), List.of( + new RefType(new JavaClassName("ClassA"), new NullToken()) + ), new NullToken()), new NullToken()) + ), new NullToken()) + ), new NullToken()) + ), new NullToken(), new NullToken()), + new GenericTypeVar("U", List.of( + new RefType(new JavaClassName("ClassC"), List.of( + new RefType(new JavaClassName("ClassC"), new NullToken()) + ), new NullToken()) + ), new NullToken(), new NullToken())), + new NullToken() + )); + } +} From a0c25a517d5c522c8a8973bae0f26cef98257439 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Wed, 19 Apr 2023 15:33:53 +0200 Subject: [PATCH 37/62] Use old method of creating signatures in case the classloader is null --- .../syntaxtree/factory/ASTFactory.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java index 65e4c087..82d76983 100644 --- a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java +++ b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java @@ -84,7 +84,6 @@ public class ASTFactory { classReader.accept(classVisitor, new Attribute[]{new JavaTXSignatureAttribute()}, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES); classSignature = classVisitor.classSignature; } - } catch (IOException e) { // Skip } @@ -133,7 +132,7 @@ public class ASTFactory { implementedInterfaces.add((RefType) createType(jreInterface)); } - GenericDeclarationList genericDeclarationList = createGenerics(classSignature); + GenericDeclarationList genericDeclarationList = createGenerics(jreClass.getTypeParameters(), jreClass, null, classSignature); Token offset = new NullToken(); //Braucht keinen Offset, da diese Klasse nicht aus einem Quellcode geparst wurde @@ -162,7 +161,7 @@ public class ASTFactory { } ParameterList parameterList = new ParameterList(params, new NullToken()); Block block = new Block(new ArrayList(), new NullToken()); - GenericDeclarationList gtvDeclarations = createGenerics(signature); + GenericDeclarationList gtvDeclarations = createGenerics(constructor.getTypeParameters(), inClass, constructor.getName(), signature); Token offset = new NullToken(); int modifier = constructor.getModifiers(); @@ -194,12 +193,25 @@ public class ASTFactory { } ParameterList parameterList = new ParameterList(params, new NullToken()); Block block = new Block(new ArrayList(), new NullToken()); - GenericDeclarationList gtvDeclarations = createGenerics(signature); + GenericDeclarationList gtvDeclarations = createGenerics(jreMethod.getTypeParameters(), inClass, jreMethod.getName(), signature); Token offset = new NullToken(); return new Method(jreMethod.getModifiers(), name,returnType, parameterList, block, gtvDeclarations, offset, isInherited); } + public static GenericDeclarationList createGenerics(TypeVariable[] typeParameters, Class context, String methodName, String signature) { + if (signature == null) { + List gtvs = new ArrayList<>(); + for(TypeVariable jreTV : typeParameters){ + de.dhbwstuttgart.syntaxtree.GenericTypeVar gtv = createGeneric(jreTV, jreTV.getName(), context, methodName); + gtvs.add(gtv); + } + return new GenericDeclarationList(gtvs, new NullToken()); + } else { + return createGenerics(signature); + } + } + public static GenericDeclarationList createGenerics(String signature) { if (signature == null) return new GenericDeclarationList(new ArrayList<>(), new NullToken()); @@ -288,6 +300,7 @@ public class ASTFactory { var sr = new SignatureReader(signature); sr.accept(signatureVisitor); + System.out.println(signature); return new GenericDeclarationList(gtvs, new NullToken()); } From d9459473625ec98ef16847587343a18c1d941117 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Wed, 19 Apr 2023 16:12:24 +0200 Subject: [PATCH 38/62] ASM doesn't like empty generics for some reason, don't know if valid? --- src/main/java/de/dhbwstuttgart/bytecode/Codegen.java | 11 +++++++---- .../dhbwstuttgart/syntaxtree/factory/ASTFactory.java | 2 -- .../de/dhbwstuttgart/target/tree/TargetMethod.java | 12 ++++++++---- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java b/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java index 8a22fd92..34dcd929 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java @@ -1044,11 +1044,14 @@ public class Codegen { } private static String generateSignature(TargetClass clazz, Set generics) { - String ret = "<"; - for (var generic : generics) { - ret += generic.name() + ":" + generic.bound().toDescriptor(); + String ret = ""; + if (generics.size() > 0) { + ret += "<"; + for (var generic : generics) { + ret += generic.name() + ":" + generic.bound().toDescriptor(); + } + ret += ">"; } - ret += ">"; ret += clazz.superType().toDescriptor(); return ret; diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java index 82d76983..7582865d 100644 --- a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java +++ b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java @@ -48,7 +48,6 @@ public class ASTFactory { if (classLoader != null) { var bytes = IOUtils.toByteArray(Objects.requireNonNull(classLoader.getResourceAsStream(path))); var classReader = new ClassReader(bytes); - var classVisitor = new ClassVisitor(Opcodes.ASM7) { String classSignature; @Override @@ -300,7 +299,6 @@ public class ASTFactory { var sr = new SignatureReader(signature); sr.accept(signatureVisitor); - System.out.println(signature); return new GenericDeclarationList(gtvs, new NullToken()); } diff --git a/src/main/java/de/dhbwstuttgart/target/tree/TargetMethod.java b/src/main/java/de/dhbwstuttgart/target/tree/TargetMethod.java index b81547f6..7439675a 100644 --- a/src/main/java/de/dhbwstuttgart/target/tree/TargetMethod.java +++ b/src/main/java/de/dhbwstuttgart/target/tree/TargetMethod.java @@ -22,11 +22,15 @@ public record TargetMethod(int access, String name, TargetBlock block, Signature } public static String getSignature(Set generics, List parameters, TargetType returnType) { - String ret = "<"; - for (var generic : generics) { - ret += generic.name() + ":" + generic.bound().toDescriptor(); + String ret = ""; + if (generics.size() > 0) { + ret += "<"; + for (var generic : generics) { + ret += generic.name() + ":" + generic.bound().toDescriptor(); + } + ret += ">"; } - ret += ">("; + ret += "("; for (var param : parameters) { ret += param.type().toDescriptor(); } From af4db1817a7880744e973138e2eff95317a93442 Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Wed, 19 Apr 2023 19:08:52 +0200 Subject: [PATCH 39/62] Add test and fix up the generics a bit --- resources/bytecode/javFiles/TXGenerics.jav | 11 ++++++ .../syntaxtree/factory/ASTFactory.java | 37 +++++++++++++++++-- src/main/java/de/dhbwstuttgart/util/Pair.java | 14 +++++++ src/test/java/GenericsParserTest.java | 19 ++++++++++ src/test/java/targetast/TestComplete.java | 5 +++ 5 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 resources/bytecode/javFiles/TXGenerics.jav diff --git a/resources/bytecode/javFiles/TXGenerics.jav b/resources/bytecode/javFiles/TXGenerics.jav new file mode 100644 index 00000000..8dd7ab76 --- /dev/null +++ b/resources/bytecode/javFiles/TXGenerics.jav @@ -0,0 +1,11 @@ +import java.lang.String; + +class TXGenerics { + a; + b; + + test() { + var c = new Cycle(); + c.m(a, b); + } +} diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java index 7582865d..5b631250 100644 --- a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java +++ b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java @@ -19,6 +19,7 @@ import de.dhbwstuttgart.syntaxtree.*; import de.dhbwstuttgart.syntaxtree.statement.Block; import de.dhbwstuttgart.syntaxtree.statement.Statement; import de.dhbwstuttgart.syntaxtree.type.WildcardType; +import de.dhbwstuttgart.target.tree.type.TargetRefType; import de.dhbwstuttgart.util.Pair; import javassist.bytecode.SignatureAttribute; import org.antlr.v4.runtime.Token; @@ -207,7 +208,8 @@ public class ASTFactory { } return new GenericDeclarationList(gtvs, new NullToken()); } else { - return createGenerics(signature); + var res = createGenerics(signature); + return res; } } @@ -220,8 +222,31 @@ public class ASTFactory { final Stack bound = new Stack<>(); final Stack classTypes = new Stack<>(); + // All hail the mighty visitor pattern + final SignatureVisitor doNothing = new SignatureVisitor(Opcodes.ASM7) {}; + char wildcard = '='; + @Override + public SignatureVisitor visitSuperclass() { + return doNothing; + } + + @Override + public SignatureVisitor visitParameterType() { + return doNothing; + } + + @Override + public SignatureVisitor visitReturnType() { + return doNothing; + } + + @Override + public SignatureVisitor visitExceptionType() { + return doNothing; + } + @Override public void visitFormalTypeParameter(String name) { bounds = new ArrayList<>(); @@ -231,7 +256,11 @@ public class ASTFactory { @Override public void visitTypeVariable(String name) { var refType = new GenericRefType(name, new NullToken()); - pushType(refType); + if (classTypes.isEmpty()) { + ((List) gtvs.get(gtvs.size() - 1).getBounds()).add(refType); + } else { + pushType(refType); + } } @Override @@ -257,13 +286,13 @@ public class ASTFactory { return this; } - boolean equals(RefTypeOrTPHOrWildcardOrGeneric a, RefTypeOrTPHOrWildcardOrGeneric b) { + boolean equals(RefTypeOrTPHOrWildcardOrGeneric a, RefTypeOrTPHOrWildcardOrGeneric b) { if (b instanceof SuperWildcardType wc) return equals(a, wc.getInnerType()); else if (b instanceof ExtendsWildcardType wc) return equals(a, wc.getInnerType()); return a == b; - } + } @Override public void visitEnd() { diff --git a/src/main/java/de/dhbwstuttgart/util/Pair.java b/src/main/java/de/dhbwstuttgart/util/Pair.java index 3046afda..8bd5bf94 100644 --- a/src/main/java/de/dhbwstuttgart/util/Pair.java +++ b/src/main/java/de/dhbwstuttgart/util/Pair.java @@ -1,5 +1,6 @@ package de.dhbwstuttgart.util; +import java.util.Objects; import java.util.Optional; public class Pair { @@ -22,4 +23,17 @@ public class Pair { public String toString() { return "(" + key.toString() + "," + value.toString() + ")\n"; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Pair pair = (Pair) o; + return Objects.equals(key, pair.key) && Objects.equals(value, pair.value); + } + + @Override + public int hashCode() { + return Objects.hash(key, value); + } } diff --git a/src/test/java/GenericsParserTest.java b/src/test/java/GenericsParserTest.java index 6e711415..f35e51ed 100644 --- a/src/test/java/GenericsParserTest.java +++ b/src/test/java/GenericsParserTest.java @@ -1,4 +1,5 @@ import de.dhbwstuttgart.parser.NullToken; +import de.dhbwstuttgart.parser.SyntaxTreeGenerator.GenericContext; import de.dhbwstuttgart.parser.scope.JavaClassName; import de.dhbwstuttgart.syntaxtree.GenericDeclarationList; import de.dhbwstuttgart.syntaxtree.GenericTypeVar; @@ -57,6 +58,24 @@ public class GenericsParserTest { ); } + @Test + public void testMethodTypeVars() { + var signature = ";D:TB;>()V"; + var generics = ASTFactory.createGenerics(signature); + assertEquals(generics, new GenericDeclarationList( + List.of( + new GenericTypeVar("A", List.of(new GenericRefType("B", new NullToken())), new NullToken(), new NullToken()), + new GenericTypeVar("B", List.of(new RefType(new JavaClassName("ClassA"), new NullToken())), new NullToken(), new NullToken()), + new GenericTypeVar("C", List.of(new RefType(new JavaClassName("ClassB"), + List.of(new GenericRefType("A", new NullToken())), + new NullToken())), new NullToken(), new NullToken() + ), + new GenericTypeVar("D", List.of(new GenericRefType("B", new NullToken())), new NullToken(), new NullToken()) + ), + new NullToken() + )); + } + @Test public void testMethodComplex() { var signature = ";>;>;U:LClassC;>()V"; diff --git a/src/test/java/targetast/TestComplete.java b/src/test/java/targetast/TestComplete.java index 34d1370f..a5c56828 100644 --- a/src/test/java/targetast/TestComplete.java +++ b/src/test/java/targetast/TestComplete.java @@ -575,6 +575,11 @@ public class TestComplete { assertEquals(fstArgm2, m2.getGenericReturnType()); } + @Test + public void testTXGenerics() throws Exception { + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "TXGenerics.jav"); + var instance = classFiles.get("TXGenerics").getDeclaredConstructor().newInstance(); + } @Test public void typedIdTest() throws Exception { From 904bdca2f4946ff9633c39cc3700f885afc4ac5a Mon Sep 17 00:00:00 2001 From: Victorious3 Date: Tue, 25 Apr 2023 15:06:56 +0200 Subject: [PATCH 40/62] Eliminate transitive children, add missing object bounds --- .../insertGenericsJav/TestContraVariant.jav | 2 +- resources/insertGenericsJav/TestTwoCalls.jav | 4 +- .../target/generate/ASTToTargetAST.java | 46 +++++++++++++++++++ src/test/java/targetast/TestGenerics.java | 32 ++++++------- 4 files changed, 66 insertions(+), 18 deletions(-) diff --git a/resources/insertGenericsJav/TestContraVariant.jav b/resources/insertGenericsJav/TestContraVariant.jav index 9349e620..99c83de4 100644 --- a/resources/insertGenericsJav/TestContraVariant.jav +++ b/resources/insertGenericsJav/TestContraVariant.jav @@ -5,7 +5,7 @@ public class TestContraVariant { x = y; return y; } - + main(x) { return m(x); } diff --git a/resources/insertGenericsJav/TestTwoCalls.jav b/resources/insertGenericsJav/TestTwoCalls.jav index be3137f0..e3f0cfc4 100644 --- a/resources/insertGenericsJav/TestTwoCalls.jav +++ b/resources/insertGenericsJav/TestTwoCalls.jav @@ -1,10 +1,12 @@ public class TestTwoCalls { + // O -> O id(b) { var c = b; return c; } - + + // (S, T) -> T main(x,y) { id(x); return id(y); diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index 195cd785..acba2a13 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -552,6 +552,7 @@ public class ASTToTargetAST { methodFindConstraints(owner, method, simplifiedConstraints, txTypeVariables, classGenerics.userDefinedGenerics, txTypeVariablesOfClass, txResult, txEquality); { // Java Generics + eliminateTransitives(javaResult); var referenced = new HashSet(); eliminateCycles(javaResult, equality, referenced); @@ -569,10 +570,12 @@ public class ASTToTargetAST { eliminateInnerTypeVariables(referenced, javaResult); equalizeTypeVariables(javaResult, equality); usedTPHsOfMethods.put(method, usedTphs); + addMissingObjectBounds(javaResult, genericsOfClass); } { var referenced = new HashSet(); // JavaTX Generics + eliminateTransitives(txResult); eliminateInfima(txResult, txEquality); for (var param : method.getParameterList().getFormalparalist()) { @@ -582,12 +585,36 @@ public class ASTToTargetAST { referenced.addAll(txTypeVariablesOfClass); eliminateInnerTypeVariables(referenced, txResult); + addMissingObjectBounds(txResult, txGenericsOfClass); } System.out.println(method.name + ": " + txResult + " & " + javaResult); return generics; } + private void eliminateChain(Set> result, List chain) { + for (var pair : new HashSet<>(result)) { + if (pair instanceof PairTPHsmallerTPH ptph && chain.get(chain.size() - 1).equals(ptph.left)) { + if (chain.contains(ptph.right)) return; + var copy = new ArrayList<>(chain); + copy.add(ptph.right); + if (copy.size() > 2) + result.remove(new PairTPHsmallerTPH(chain.get(0), ptph.right)); + eliminateChain(result, copy); + } + } + } + + void eliminateTransitives(Set> result) { + for (var pair : new HashSet<>(result)) if (pair instanceof PairTPHsmallerTPH ptph) { + var first = ptph.left; + var chain = new ArrayList(); + chain.add(ptph.left); + chain.add(ptph.right); + eliminateChain(result, chain); + } + } + void findAllBounds(RefTypeOrTPHOrWildcardOrGeneric type, Set> generics, Map equality) { if (type instanceof TypePlaceholder tph) { tph = equality.getOrDefault(tph, tph); @@ -632,6 +659,9 @@ public class ASTToTargetAST { findAllBounds(field.getType(), txResult, txEquality); } + eliminateTransitives(javaResult); + eliminateTransitives(txResult); + System.out.println(javaResult); var referenced = new HashSet(); eliminateCycles(javaResult, equality, referenced); eliminateInfima(javaResult, equality); @@ -642,10 +672,26 @@ public class ASTToTargetAST { equalizeTypeVariables(javaResult, equality); eliminateInnerTypeVariablesOfClass(classOrInterface, txResult, txEquality, txReferenced); + addMissingObjectBounds(javaResult, null); + addMissingObjectBounds(txResult, null); + System.out.println("Class " + classOrInterface.getClassName().getClassName() + ": " + txResult + ", " + javaResult); return generics; } + void addMissingObjectBounds(Set> result, Set> filter) { + outer: for (var p1 : new HashSet<>(result)) { + if (p1 instanceof PairTPHsmallerTPH ptph) { + for (var p2 : new HashSet<>(result)) { + if (ptph.right.equals(p2.getLeft())) + continue outer; + } + if (filter == null || filter.stream().noneMatch((pair) -> pair.getLeft().equals(ptph.right))) + result.add(new PairTPHequalRefTypeOrWildcardType(ptph.right, OBJECT)); + } + } + } + void equalizeTypeVariables(Set> input, Map equality) { for (var pair : new HashSet<>(input)) { if (pair instanceof PairTPHsmallerTPH ptph) { diff --git a/src/test/java/targetast/TestGenerics.java b/src/test/java/targetast/TestGenerics.java index f6308861..a9058361 100644 --- a/src/test/java/targetast/TestGenerics.java +++ b/src/test/java/targetast/TestGenerics.java @@ -90,16 +90,15 @@ public class TestGenerics { var generics = result.genericsResults.get(0); assertEquals(0, generics.get(result.clazz).size()); - assertEquals(2, generics.get(m).size()); + assertEquals(1, generics.get(m).size()); assertEquals(2, generics.get(main).size()); var N = generics.getBounds(m.getParameterList().getParameterAt(0).getType(), result.clazz, m); - var NChain = new BoundsList(new Bound(true, ASTToTargetAST.OBJECT)); - assertEquals(N, NChain); + var N2 = generics.getBounds(m.getReturnType(), result.clazz, m); - var Q = generics.getBounds(m.getReturnType(), result.clazz, m); - var QChain = new BoundsList(new Bound(true, TypePlaceholder.of("N")), new Bound(true, ASTToTargetAST.OBJECT)); - assertEquals(Q, QChain); + var NChain = new BoundsList(new Bound(true, ASTToTargetAST.OBJECT)); + assertEquals(N, N2); + assertEquals(N2, NChain); var R = generics.getBounds(main.getParameterList().getParameterAt(0).getType(), result.clazz, main); assertEquals(R, NChain); @@ -304,17 +303,18 @@ public class TestGenerics { var main = result.findMethod("main"); var generics = result.genericsResults.get(0); - var Q = generics.getBounds(id.getReturnType(), result.clazz, id); - var N = generics.getBounds(id.getParameterList().getParameterAt(0).getType(), result.clazz, id); - assertEquals(Q, new BoundsList(new Bound(true, ASTToTargetAST.OBJECT))); - assertEquals(N, new BoundsList(new Bound(true, TypePlaceholder.of("Q")), new Bound(true, ASTToTargetAST.OBJECT))); + var O = generics.getBounds(id.getReturnType(), result.clazz, id); + var O2 = generics.getBounds(id.getParameterList().getParameterAt(0).getType(), result.clazz, id); + assertEquals(O, O2); + assertEquals(O2, new BoundsList(new Bound(true, ASTToTargetAST.OBJECT))); - var Q2 = generics.getBounds(main.getReturnType(), result.clazz, main); - var R = generics.getBounds(main.getParameterList().getParameterAt(0).getType(), result.clazz, main); - var S = generics.getBounds(main.getParameterList().getParameterAt(1).getType(), result.clazz, main); - assertEquals(Q2, new BoundsList(new Bound(true, ASTToTargetAST.OBJECT))); - assertEquals(R, new BoundsList(new Bound(true, TypePlaceholder.of("Q")), new Bound(true, ASTToTargetAST.OBJECT))); - assertEquals(S, new BoundsList(new Bound(true, TypePlaceholder.of("Q")), new Bound(true, ASTToTargetAST.OBJECT))); + // TODO Maybe test in other ways if the parameter generics equals the return generics + var S = generics.getBounds(main.getReturnType(), result.clazz, main); + var S2 = generics.getBounds(main.getParameterList().getParameterAt(0).getType(), result.clazz, main); + var T = generics.getBounds(main.getParameterList().getParameterAt(1).getType(), result.clazz, main); + assertEquals(S, S2); + assertEquals(S2, new BoundsList(new Bound(true, ASTToTargetAST.OBJECT))); + assertEquals(T, new BoundsList(new Bound(true, ASTToTargetAST.OBJECT))); } @Test From 60a42f1be130dce7949c87e27c436b256e84eee6 Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Fri, 28 Apr 2023 15:44:26 +0200 Subject: [PATCH 41/62] Update to Java 20 and refactor Generics --- doc/Javadoc/allclasses-frame.html | 362 -- doc/Javadoc/allclasses-noframe.html | 362 -- doc/Javadoc/constant-values.html | 662 --- doc/Javadoc/deprecated-list.html | 142 - doc/Javadoc/help-doc.html | 219 - doc/Javadoc/index-files/index-1.html | 354 -- doc/Javadoc/index-files/index-10.html | 168 - doc/Javadoc/index-files/index-11.html | 159 - doc/Javadoc/index-files/index-12.html | 279 - doc/Javadoc/index-files/index-13.html | 239 - doc/Javadoc/index-files/index-14.html | 271 - doc/Javadoc/index-files/index-15.html | 153 - doc/Javadoc/index-files/index-16.html | 262 - doc/Javadoc/index-files/index-17.html | 229 - doc/Javadoc/index-files/index-18.html | 935 ---- doc/Javadoc/index-files/index-19.html | 497 -- doc/Javadoc/index-files/index-2.html | 214 - doc/Javadoc/index-files/index-20.html | 189 - doc/Javadoc/index-files/index-21.html | 162 - doc/Javadoc/index-files/index-22.html | 159 - doc/Javadoc/index-files/index-23.html | 141 - doc/Javadoc/index-files/index-24.html | 198 - doc/Javadoc/index-files/index-3.html | 737 --- doc/Javadoc/index-files/index-4.html | 288 - doc/Javadoc/index-files/index-5.html | 278 - doc/Javadoc/index-files/index-6.html | 258 - doc/Javadoc/index-files/index-7.html | 919 ---- doc/Javadoc/index-files/index-8.html | 165 - doc/Javadoc/index-files/index-9.html | 460 -- doc/Javadoc/index.html | 37 - doc/Javadoc/mycompiler/MyCompiler.html | 726 --- doc/Javadoc/mycompiler/MyCompilerAPI.html | 417 -- doc/Javadoc/mycompiler/SourceFile.html | 393 -- .../mycompiler/class-use/MyCompiler.html | 140 - .../mycompiler/class-use/MyCompilerAPI.html | 193 - .../mycompiler/class-use/SourceFile.html | 186 - .../mycompiler/mybytecode/Attribute.html | 314 -- .../mycompiler/mybytecode/AttributeInfo.html | 365 -- .../mybytecode/CONSTANT_Class_info.html | 302 -- .../mybytecode/CONSTANT_Double_info.html | 340 -- .../mybytecode/CONSTANT_Fieldref_info.html | 340 -- .../mybytecode/CONSTANT_Float_info.html | 302 -- .../mybytecode/CONSTANT_Integer_info.html | 302 -- .../CONSTANT_InterfaceMethodref_info.html | 340 -- .../mybytecode/CONSTANT_Long_info.html | 340 -- .../mybytecode/CONSTANT_Methodref_info.html | 340 -- .../mybytecode/CONSTANT_NameAndType_info.html | 340 -- .../mybytecode/CONSTANT_String_info.html | 302 -- .../mybytecode/CONSTANT_Utf8_info.html | 302 -- doc/Javadoc/mycompiler/mybytecode/CPInfo.html | 292 - .../mycompiler/mybytecode/ClassFile.html | 1036 ---- .../mycompiler/mybytecode/CodeAttribute.html | 623 --- .../mycompiler/mybytecode/ExceptionTable.html | 251 - .../mycompiler/mybytecode/FieldInfo.html | 520 -- .../mycompiler/mybytecode/JVMCode.html | 4812 ----------------- doc/Javadoc/mycompiler/mybytecode/Key.html | 351 -- .../mycompiler/mybytecode/MethodInfo.html | 406 -- .../mybytecode/class-use/Attribute.html | 184 - .../mybytecode/class-use/AttributeInfo.html | 140 - .../class-use/CONSTANT_Class_info.html | 140 - .../class-use/CONSTANT_Double_info.html | 140 - .../class-use/CONSTANT_Fieldref_info.html | 140 - .../class-use/CONSTANT_Float_info.html | 140 - .../class-use/CONSTANT_Integer_info.html | 140 - .../CONSTANT_InterfaceMethodref_info.html | 140 - .../class-use/CONSTANT_Long_info.html | 140 - .../class-use/CONSTANT_Methodref_info.html | 140 - .../class-use/CONSTANT_NameAndType_info.html | 140 - .../class-use/CONSTANT_String_info.html | 140 - .../class-use/CONSTANT_Utf8_info.html | 140 - .../mybytecode/class-use/CPInfo.html | 256 - .../mybytecode/class-use/ClassFile.html | 1177 ---- .../mybytecode/class-use/CodeAttribute.html | 949 ---- .../mybytecode/class-use/ExceptionTable.html | 140 - .../mybytecode/class-use/FieldInfo.html | 140 - .../mybytecode/class-use/JVMCode.html | 140 - .../mycompiler/mybytecode/class-use/Key.html | 140 - .../mybytecode/class-use/MethodInfo.html | 140 - .../mycompiler/mybytecode/package-frame.html | 72 - .../mybytecode/package-summary.html | 234 - .../mycompiler/mybytecode/package-tree.html | 153 - .../mycompiler/mybytecode/package-use.html | 253 - doc/Javadoc/mycompiler/myclass/Class.html | 729 --- doc/Javadoc/mycompiler/myclass/ClassBody.html | 524 -- .../mycompiler/myclass/ClassDeclId.html | 325 -- .../mycompiler/myclass/Constructor.html | 329 -- doc/Javadoc/mycompiler/myclass/DeclId.html | 616 --- .../mycompiler/myclass/ExceptionList.html | 249 - doc/Javadoc/mycompiler/myclass/FieldDecl.html | 388 -- .../mycompiler/myclass/FormalParameter.html | 443 -- .../mycompiler/myclass/InstVarDecl.html | 427 -- doc/Javadoc/mycompiler/myclass/Method.html | 777 --- .../mycompiler/myclass/ParameterList.html | 384 -- doc/Javadoc/mycompiler/myclass/Status.html | 271 - doc/Javadoc/mycompiler/myclass/UsedId.html | 455 -- doc/Javadoc/mycompiler/myclass/UserDef.html | 231 - .../mycompiler/myclass/class-use/Class.html | 192 - .../myclass/class-use/ClassBody.html | 192 - .../myclass/class-use/ClassDeclId.html | 176 - .../myclass/class-use/Constructor.html | 140 - .../mycompiler/myclass/class-use/DeclId.html | 213 - .../myclass/class-use/ExceptionList.html | 192 - .../myclass/class-use/FieldDecl.html | 208 - .../myclass/class-use/FormalParameter.html | 176 - .../myclass/class-use/InstVarDecl.html | 140 - .../mycompiler/myclass/class-use/Method.html | 176 - .../myclass/class-use/ParameterList.html | 243 - .../mycompiler/myclass/class-use/Status.html | 221 - .../mycompiler/myclass/class-use/UsedId.html | 357 -- .../mycompiler/myclass/class-use/UserDef.html | 176 - .../mycompiler/myclass/package-frame.html | 58 - .../mycompiler/myclass/package-summary.html | 206 - .../mycompiler/myclass/package-tree.html | 158 - .../mycompiler/myclass/package-use.html | 327 -- .../CTypeReconstructionException.html | 270 - .../myexception/JVMCodeException.html | 265 - .../myexception/MatchException.html | 237 - .../myexception/SCClassBodyException.html | 284 - .../myexception/SCClassException.html | 303 -- .../mycompiler/myexception/SCExcept.html | 382 -- .../mycompiler/myexception/SCException.html | 284 - .../myexception/SCMethodException.html | 284 - .../myexception/SCStatementException.html | 284 - .../CTypeReconstructionException.html | 417 -- .../class-use/JVMCodeException.html | 1296 ----- .../myexception/class-use/MatchException.html | 178 - .../class-use/SCClassBodyException.html | 208 - .../class-use/SCClassException.html | 215 - .../myexception/class-use/SCExcept.html | 184 - .../myexception/class-use/SCException.html | 256 - .../class-use/SCMethodException.html | 179 - .../class-use/SCStatementException.html | 446 -- .../mycompiler/myexception/package-frame.html | 57 - .../myexception/package-summary.html | 196 - .../mycompiler/myexception/package-tree.html | 156 - .../mycompiler/myexception/package-use.html | 397 -- .../mycompiler/mymodifier/Abstract.html | 222 - .../mycompiler/mymodifier/Modifier.html | 224 - .../mycompiler/mymodifier/Modifiers.html | 304 -- .../mycompiler/mymodifier/Private.html | 222 - .../mycompiler/mymodifier/Protected.html | 222 - doc/Javadoc/mycompiler/mymodifier/Public.html | 222 - doc/Javadoc/mycompiler/mymodifier/Static.html | 222 - .../mymodifier/class-use/Abstract.html | 140 - .../mymodifier/class-use/Modifier.html | 208 - .../mymodifier/class-use/Modifiers.html | 232 - .../mymodifier/class-use/Private.html | 140 - .../mymodifier/class-use/Protected.html | 140 - .../mymodifier/class-use/Public.html | 140 - .../mymodifier/class-use/Static.html | 140 - .../mycompiler/mymodifier/package-frame.html | 44 - .../mymodifier/package-summary.html | 178 - .../mycompiler/mymodifier/package-tree.html | 151 - .../mycompiler/mymodifier/package-use.html | 185 - doc/Javadoc/mycompiler/myoperator/AddOp.html | 303 -- doc/Javadoc/mycompiler/myoperator/AndOp.html | 232 - .../mycompiler/myoperator/DivideOp.html | 274 - .../mycompiler/myoperator/EqualOp.html | 332 -- .../mycompiler/myoperator/GreaterEquOp.html | 305 -- .../mycompiler/myoperator/GreaterOp.html | 305 -- .../mycompiler/myoperator/LessEquOp.html | 305 -- doc/Javadoc/mycompiler/myoperator/LessOp.html | 305 -- doc/Javadoc/mycompiler/myoperator/LogOp.html | 431 -- .../mycompiler/myoperator/MinusOp.html | 274 - .../mycompiler/myoperator/ModuloOp.html | 274 - doc/Javadoc/mycompiler/myoperator/MulOp.html | 279 - .../mycompiler/myoperator/NotEqualOp.html | 332 -- .../mycompiler/myoperator/Operator.html | 288 - doc/Javadoc/mycompiler/myoperator/OrOp.html | 232 - doc/Javadoc/mycompiler/myoperator/PlusOp.html | 274 - doc/Javadoc/mycompiler/myoperator/RelOp.html | 307 -- .../mycompiler/myoperator/TimesOp.html | 274 - .../myoperator/class-use/AddOp.html | 184 - .../myoperator/class-use/AndOp.html | 140 - .../myoperator/class-use/DivideOp.html | 140 - .../myoperator/class-use/EqualOp.html | 140 - .../myoperator/class-use/GreaterEquOp.html | 140 - .../myoperator/class-use/GreaterOp.html | 140 - .../myoperator/class-use/LessEquOp.html | 140 - .../myoperator/class-use/LessOp.html | 140 - .../myoperator/class-use/LogOp.html | 184 - .../myoperator/class-use/MinusOp.html | 140 - .../myoperator/class-use/ModuloOp.html | 140 - .../myoperator/class-use/MulOp.html | 192 - .../myoperator/class-use/NotEqualOp.html | 140 - .../myoperator/class-use/Operator.html | 365 -- .../mycompiler/myoperator/class-use/OrOp.html | 140 - .../myoperator/class-use/PlusOp.html | 140 - .../myoperator/class-use/RelOp.html | 216 - .../myoperator/class-use/TimesOp.html | 140 - .../mycompiler/myoperator/package-frame.html | 66 - .../myoperator/package-summary.html | 222 - .../mycompiler/myoperator/package-tree.html | 159 - .../mycompiler/myoperator/package-use.html | 209 - .../mycompiler/myparser/JavaLexer.html | 269 - .../mycompiler/myparser/JavaParser.html | 1836 ------- .../myparser/JavaParser.yyException.html | 244 - .../myparser/JavaParser.yyInput.html | 265 - doc/Javadoc/mycompiler/myparser/Scanner.html | 326 -- doc/Javadoc/mycompiler/myparser/Token.html | 347 -- .../myparser/class-use/JavaLexer.html | 176 - .../myparser/class-use/JavaParser.html | 176 - .../class-use/JavaParser.yyException.html | 242 - .../class-use/JavaParser.yyInput.html | 201 - .../myparser/class-use/Scanner.html | 140 - .../mycompiler/myparser/class-use/Token.html | 140 - .../mycompiler/myparser/package-frame.html | 60 - .../mycompiler/myparser/package-summary.html | 194 - .../mycompiler/myparser/package-tree.html | 162 - .../mycompiler/myparser/package-use.html | 216 - .../mycompiler/mystatement/ArgumentList.html | 330 -- .../mycompiler/mystatement/Assign.html | 495 -- .../mycompiler/mystatement/Binary.html | 671 --- .../mycompiler/mystatement/BinaryExpr.html | 284 - doc/Javadoc/mycompiler/mystatement/Block.html | 459 -- .../mycompiler/mystatement/BoolLiteral.html | 446 -- .../mycompiler/mystatement/CastExpr.html | 457 -- .../mycompiler/mystatement/CharLiteral.html | 446 -- .../mycompiler/mystatement/EmptyStmt.html | 318 -- doc/Javadoc/mycompiler/mystatement/Expr.html | 532 -- .../mycompiler/mystatement/ExprStmt.html | 401 -- .../mycompiler/mystatement/IfStmt.html | 467 -- .../mycompiler/mystatement/InstVar.html | 441 -- .../mycompiler/mystatement/InstanceOf.html | 458 -- .../mycompiler/mystatement/IntLiteral.html | 446 -- .../mycompiler/mystatement/Literal.html | 324 -- .../mystatement/LocalOrFieldVar.html | 460 -- .../mycompiler/mystatement/LocalVarDecl.html | 613 --- .../mycompiler/mystatement/MethodCall.html | 673 --- .../mycompiler/mystatement/NegativeExpr.html | 492 -- .../mycompiler/mystatement/NewArray.html | 483 -- .../mycompiler/mystatement/NewClass.html | 470 -- .../mycompiler/mystatement/NotExpr.html | 511 -- doc/Javadoc/mycompiler/mystatement/Null.html | 422 -- .../mycompiler/mystatement/PositivExpr.html | 455 -- .../mycompiler/mystatement/PostDecExpr.html | 445 -- .../mycompiler/mystatement/PostIncExpr.html | 445 -- .../mycompiler/mystatement/PreDecExpr.html | 445 -- .../mycompiler/mystatement/PreIncExpr.html | 445 -- .../mycompiler/mystatement/Receiver.html | 323 -- .../mycompiler/mystatement/Return.html | 332 -- .../mycompiler/mystatement/Statement.html | 285 - .../mycompiler/mystatement/StringLiteral.html | 419 -- doc/Javadoc/mycompiler/mystatement/This.html | 465 -- .../mycompiler/mystatement/UnaryExpr.html | 322 -- .../mycompiler/mystatement/UnaryMinus.html | 258 - .../mycompiler/mystatement/UnaryNot.html | 282 - .../mycompiler/mystatement/UnaryPlus.html | 221 - .../mycompiler/mystatement/WhileStmt.html | 362 -- .../mystatement/class-use/ArgumentList.html | 192 - .../mystatement/class-use/Assign.html | 176 - .../mystatement/class-use/Binary.html | 256 - .../mystatement/class-use/BinaryExpr.html | 184 - .../mystatement/class-use/Block.html | 243 - .../mystatement/class-use/BoolLiteral.html | 140 - .../mystatement/class-use/CastExpr.html | 140 - .../mystatement/class-use/CharLiteral.html | 140 - .../mystatement/class-use/EmptyStmt.html | 140 - .../mystatement/class-use/Expr.html | 876 --- .../mystatement/class-use/ExprStmt.html | 421 -- .../mystatement/class-use/IfStmt.html | 140 - .../mystatement/class-use/InstVar.html | 140 - .../mystatement/class-use/InstanceOf.html | 140 - .../mystatement/class-use/IntLiteral.html | 140 - .../mystatement/class-use/Literal.html | 208 - .../class-use/LocalOrFieldVar.html | 140 - .../mystatement/class-use/LocalVarDecl.html | 140 - .../mystatement/class-use/MethodCall.html | 140 - .../mystatement/class-use/NegativeExpr.html | 140 - .../mystatement/class-use/NewArray.html | 140 - .../mystatement/class-use/NewClass.html | 140 - .../mystatement/class-use/NotExpr.html | 140 - .../mystatement/class-use/Null.html | 140 - .../mystatement/class-use/PositivExpr.html | 140 - .../mystatement/class-use/PostDecExpr.html | 140 - .../mystatement/class-use/PostIncExpr.html | 140 - .../mystatement/class-use/PreDecExpr.html | 140 - .../mystatement/class-use/PreIncExpr.html | 140 - .../mystatement/class-use/Receiver.html | 176 - .../mystatement/class-use/Return.html | 140 - .../mystatement/class-use/Statement.html | 553 -- .../mystatement/class-use/StringLiteral.html | 140 - .../mystatement/class-use/This.html | 140 - .../mystatement/class-use/UnaryExpr.html | 232 - .../mystatement/class-use/UnaryMinus.html | 176 - .../mystatement/class-use/UnaryNot.html | 176 - .../mystatement/class-use/UnaryPlus.html | 176 - .../mystatement/class-use/WhileStmt.html | 140 - .../mycompiler/mystatement/package-frame.html | 108 - .../mystatement/package-summary.html | 306 -- .../mycompiler/mystatement/package-tree.html | 163 - .../mycompiler/mystatement/package-use.html | 307 -- .../mycompiler/mytest/CSimpleTest.html | 259 - .../mytest/class-use/CSimpleTest.html | 140 - .../mycompiler/mytest/package-frame.html | 32 - .../mycompiler/mytest/package-summary.html | 154 - .../mycompiler/mytest/package-tree.html | 149 - .../mycompiler/mytest/package-use.html | 140 - doc/Javadoc/mycompiler/mytype/BaseType.html | 325 -- .../mycompiler/mytype/BooleanType.html | 309 -- .../mycompiler/mytype/CharacterType.html | 309 -- .../mycompiler/mytype/GenericTypeVar.html | 314 -- .../mycompiler/mytype/IntegerType.html | 309 -- doc/Javadoc/mycompiler/mytype/Pair.html | 540 -- doc/Javadoc/mycompiler/mytype/ParaList.html | 361 -- doc/Javadoc/mycompiler/mytype/RefType.html | 599 -- doc/Javadoc/mycompiler/mytype/ReturnType.html | 308 -- doc/Javadoc/mycompiler/mytype/Type.html | 527 -- .../mycompiler/mytype/TyploseVariable.html | 661 --- doc/Javadoc/mycompiler/mytype/Void.html | 359 -- .../mycompiler/mytype/class-use/BaseType.html | 208 - .../mytype/class-use/BooleanType.html | 176 - .../mytype/class-use/CharacterType.html | 176 - .../mytype/class-use/GenericTypeVar.html | 222 - .../mytype/class-use/IntegerType.html | 176 - .../mycompiler/mytype/class-use/Pair.html | 427 -- .../mycompiler/mytype/class-use/ParaList.html | 140 - .../mycompiler/mytype/class-use/RefType.html | 421 -- .../mytype/class-use/ReturnType.html | 176 - .../mycompiler/mytype/class-use/Type.html | 1029 ---- .../mytype/class-use/TyploseVariable.html | 314 -- .../mycompiler/mytype/class-use/Void.html | 176 - .../mycompiler/mytype/package-frame.html | 54 - .../mycompiler/mytype/package-summary.html | 198 - .../mycompiler/mytype/package-tree.html | 156 - .../mycompiler/mytype/package-use.html | 426 -- .../mytypereconstruction/CHelper.html | 283 - .../CIntersectionType.html | 404 -- .../mytypereconstruction/CMultiplyTuple.html | 475 -- .../CReconstructionTuple.html | 399 -- .../mytypereconstruction/CSubstitution.html | 481 -- .../mytypereconstruction/CSupportData.html | 695 --- .../mytypereconstruction/CTriple.html | 481 -- .../CTypeReconstructionResult.html | 512 -- .../class-use/CHelper.html | 140 - .../class-use/CIntersectionType.html | 208 - .../class-use/CMultiplyTuple.html | 232 - .../class-use/CReconstructionTuple.html | 192 - .../class-use/CSubstitution.html | 213 - .../class-use/CSupportData.html | 943 ---- .../class-use/CTriple.html | 216 - .../class-use/CTypeReconstructionResult.html | 312 -- .../mytypereconstruction/package-frame.html | 46 - .../mytypereconstruction/package-summary.html | 186 - .../mytypereconstruction/package-tree.html | 149 - .../mytypereconstruction/package-use.html | 327 -- .../CReplaceTypeEvent.html | 276 - .../IReplaceTypeEventProvider.html | 312 -- .../ITypeReplacementListener.html | 245 - .../class-use/CReplaceTypeEvent.html | 295 - .../class-use/IReplaceTypeEventProvider.html | 176 - .../class-use/ITypeReplacementListener.html | 567 -- .../replacementlistener/package-frame.html | 45 - .../replacementlistener/package-summary.html | 174 - .../replacementlistener/package-tree.html | 154 - .../replacementlistener/package-use.html | 258 - .../set/CHashtableSet.html | 524 -- .../set/CMultiplyTupleSet.html | 300 - .../set/CReconstructionTupleSet.html | 303 -- .../mytypereconstruction/set/CSet.html | 454 -- .../set/CSubstitutionSet.html | 366 -- .../mytypereconstruction/set/CTripleSet.html | 300 - .../set/CTypeAssumptionSet.html | 319 -- .../mytypereconstruction/set/CVectorSet.html | 463 -- .../set/IHashSetElement.html | 212 - .../mytypereconstruction/set/IHashSetKey.html | 174 - .../set/class-use/CHashtableSet.html | 176 - .../set/class-use/CMultiplyTupleSet.html | 227 - .../class-use/CReconstructionTupleSet.html | 184 - .../set/class-use/CSet.html | 304 -- .../set/class-use/CSubstitutionSet.html | 1071 ---- .../set/class-use/CTripleSet.html | 900 --- .../set/class-use/CTypeAssumptionSet.html | 985 ---- .../set/class-use/CVectorSet.html | 200 - .../set/class-use/IHashSetElement.html | 239 - .../set/class-use/IHashSetKey.html | 303 -- .../set/package-frame.html | 59 - .../set/package-summary.html | 200 - .../set/package-tree.html | 160 - .../mytypereconstruction/set/package-use.html | 357 -- .../CInstVarTypeAssumption.html | 345 -- .../CLocalVarTypeAssumption.html | 528 -- .../typeassumption/CMethodTypeAssumption.html | 501 -- .../typeassumption/CParaTypeAssumption.html | 473 -- .../typeassumption/CTypeAssumption.html | 721 --- .../class-use/CInstVarTypeAssumption.html | 176 - .../class-use/CLocalVarTypeAssumption.html | 176 - .../class-use/CMethodTypeAssumption.html | 259 - .../class-use/CParaTypeAssumption.html | 232 - .../class-use/CTypeAssumption.html | 325 -- .../typeassumption/package-frame.html | 40 - .../typeassumption/package-summary.html | 172 - .../typeassumption/package-tree.html | 152 - .../typeassumption/package-use.html | 219 - .../typeassumptionkey/CInstVarKey.html | 287 - .../typeassumptionkey/CLocalVarKey.html | 293 - .../typeassumptionkey/CMethodKey.html | 289 - .../typeassumptionkey/CMethodParaKey.html | 291 - .../typeassumptionkey/CTypeAssumptionKey.html | 383 -- .../class-use/CInstVarKey.html | 176 - .../class-use/CLocalVarKey.html | 176 - .../class-use/CMethodKey.html | 245 - .../class-use/CMethodParaKey.html | 176 - .../class-use/CTypeAssumptionKey.html | 274 - .../typeassumptionkey/package-frame.html | 40 - .../typeassumptionkey/package-summary.html | 171 - .../typeassumptionkey/package-tree.html | 152 - .../typeassumptionkey/package-use.html | 237 - .../mytypereconstruction/unify/FC_TTO.html | 280 - .../mytypereconstruction/unify/Unify.html | 768 --- .../unify/class-use/FC_TTO.html | 327 -- .../unify/class-use/Unify.html | 140 - .../unify/package-frame.html | 34 - .../unify/package-summary.html | 158 - .../unify/package-tree.html | 149 - .../unify/package-use.html | 204 - doc/Javadoc/mycompiler/package-frame.html | 45 - doc/Javadoc/mycompiler/package-summary.html | 172 - doc/Javadoc/mycompiler/package-tree.html | 155 - doc/Javadoc/mycompiler/package-use.html | 172 - .../unused/ConstantValueAttribute.html | 221 - doc/Javadoc/mycompiler/unused/Import.html | 231 - .../mycompiler/unused/JavaCompiler.html | 296 - doc/Javadoc/mycompiler/unused/TestClass.html | 255 - .../class-use/ConstantValueAttribute.html | 140 - .../mycompiler/unused/class-use/Import.html | 176 - .../unused/class-use/JavaCompiler.html | 140 - .../unused/class-use/TestClass.html | 140 - .../mycompiler/unused/package-frame.html | 38 - .../mycompiler/unused/package-summary.html | 166 - .../mycompiler/unused/package-tree.html | 153 - .../mycompiler/unused/package-use.html | 166 - doc/Javadoc/overview-frame.html | 74 - doc/Javadoc/overview-summary.html | 212 - doc/Javadoc/overview-tree.html | 224 - doc/Javadoc/package-list | 17 - doc/Javadoc/resources/inherit.gif | Bin 57 -> 0 bytes doc/Javadoc/serialized-form.html | 351 -- doc/Javadoc/stylesheet.css | 29 - .../typeinference/class-use/Menge.html | 2 +- .../typeinference/class-use/Pair.html | 2 +- .../typeinference/unify/MUB.html | 8 +- doc/LambdaJavadoc/index-files/index-18.html | 2 +- pom.xml | 8 +- .../de/dhbwstuttgart/core/JavaTXCompiler.java | 2 +- .../target/generate/ASTToTargetAST.java | 468 +- .../target/generate/GenericsResult.java | 22 +- 447 files changed, 202 insertions(+), 130413 deletions(-) delete mode 100755 doc/Javadoc/allclasses-frame.html delete mode 100755 doc/Javadoc/allclasses-noframe.html delete mode 100755 doc/Javadoc/constant-values.html delete mode 100755 doc/Javadoc/deprecated-list.html delete mode 100755 doc/Javadoc/help-doc.html delete mode 100755 doc/Javadoc/index-files/index-1.html delete mode 100755 doc/Javadoc/index-files/index-10.html delete mode 100755 doc/Javadoc/index-files/index-11.html delete mode 100755 doc/Javadoc/index-files/index-12.html delete mode 100755 doc/Javadoc/index-files/index-13.html delete mode 100755 doc/Javadoc/index-files/index-14.html delete mode 100755 doc/Javadoc/index-files/index-15.html delete mode 100755 doc/Javadoc/index-files/index-16.html delete mode 100755 doc/Javadoc/index-files/index-17.html delete mode 100755 doc/Javadoc/index-files/index-18.html delete mode 100755 doc/Javadoc/index-files/index-19.html delete mode 100755 doc/Javadoc/index-files/index-2.html delete mode 100755 doc/Javadoc/index-files/index-20.html delete mode 100755 doc/Javadoc/index-files/index-21.html delete mode 100755 doc/Javadoc/index-files/index-22.html delete mode 100755 doc/Javadoc/index-files/index-23.html delete mode 100755 doc/Javadoc/index-files/index-24.html delete mode 100755 doc/Javadoc/index-files/index-3.html delete mode 100755 doc/Javadoc/index-files/index-4.html delete mode 100755 doc/Javadoc/index-files/index-5.html delete mode 100755 doc/Javadoc/index-files/index-6.html delete mode 100755 doc/Javadoc/index-files/index-7.html delete mode 100755 doc/Javadoc/index-files/index-8.html delete mode 100755 doc/Javadoc/index-files/index-9.html delete mode 100755 doc/Javadoc/index.html delete mode 100755 doc/Javadoc/mycompiler/MyCompiler.html delete mode 100755 doc/Javadoc/mycompiler/MyCompilerAPI.html delete mode 100755 doc/Javadoc/mycompiler/SourceFile.html delete mode 100755 doc/Javadoc/mycompiler/class-use/MyCompiler.html delete mode 100755 doc/Javadoc/mycompiler/class-use/MyCompilerAPI.html delete mode 100755 doc/Javadoc/mycompiler/class-use/SourceFile.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/Attribute.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/AttributeInfo.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/CONSTANT_Class_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/CONSTANT_Double_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/CONSTANT_Fieldref_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/CONSTANT_Float_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/CONSTANT_Integer_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/CONSTANT_InterfaceMethodref_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/CONSTANT_Long_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/CONSTANT_Methodref_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/CONSTANT_NameAndType_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/CONSTANT_String_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/CONSTANT_Utf8_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/CPInfo.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/ClassFile.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/CodeAttribute.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/ExceptionTable.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/FieldInfo.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/JVMCode.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/Key.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/MethodInfo.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/Attribute.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/AttributeInfo.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Class_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Double_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Fieldref_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Float_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Integer_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_InterfaceMethodref_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Long_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Methodref_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_NameAndType_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_String_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Utf8_info.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/CPInfo.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/ClassFile.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/CodeAttribute.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/ExceptionTable.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/FieldInfo.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/JVMCode.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/Key.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/class-use/MethodInfo.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/mybytecode/package-use.html delete mode 100755 doc/Javadoc/mycompiler/myclass/Class.html delete mode 100755 doc/Javadoc/mycompiler/myclass/ClassBody.html delete mode 100755 doc/Javadoc/mycompiler/myclass/ClassDeclId.html delete mode 100755 doc/Javadoc/mycompiler/myclass/Constructor.html delete mode 100755 doc/Javadoc/mycompiler/myclass/DeclId.html delete mode 100755 doc/Javadoc/mycompiler/myclass/ExceptionList.html delete mode 100755 doc/Javadoc/mycompiler/myclass/FieldDecl.html delete mode 100755 doc/Javadoc/mycompiler/myclass/FormalParameter.html delete mode 100755 doc/Javadoc/mycompiler/myclass/InstVarDecl.html delete mode 100755 doc/Javadoc/mycompiler/myclass/Method.html delete mode 100755 doc/Javadoc/mycompiler/myclass/ParameterList.html delete mode 100755 doc/Javadoc/mycompiler/myclass/Status.html delete mode 100755 doc/Javadoc/mycompiler/myclass/UsedId.html delete mode 100755 doc/Javadoc/mycompiler/myclass/UserDef.html delete mode 100755 doc/Javadoc/mycompiler/myclass/class-use/Class.html delete mode 100755 doc/Javadoc/mycompiler/myclass/class-use/ClassBody.html delete mode 100755 doc/Javadoc/mycompiler/myclass/class-use/ClassDeclId.html delete mode 100755 doc/Javadoc/mycompiler/myclass/class-use/Constructor.html delete mode 100755 doc/Javadoc/mycompiler/myclass/class-use/DeclId.html delete mode 100755 doc/Javadoc/mycompiler/myclass/class-use/ExceptionList.html delete mode 100755 doc/Javadoc/mycompiler/myclass/class-use/FieldDecl.html delete mode 100755 doc/Javadoc/mycompiler/myclass/class-use/FormalParameter.html delete mode 100755 doc/Javadoc/mycompiler/myclass/class-use/InstVarDecl.html delete mode 100755 doc/Javadoc/mycompiler/myclass/class-use/Method.html delete mode 100755 doc/Javadoc/mycompiler/myclass/class-use/ParameterList.html delete mode 100755 doc/Javadoc/mycompiler/myclass/class-use/Status.html delete mode 100755 doc/Javadoc/mycompiler/myclass/class-use/UsedId.html delete mode 100755 doc/Javadoc/mycompiler/myclass/class-use/UserDef.html delete mode 100755 doc/Javadoc/mycompiler/myclass/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/myclass/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/myclass/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/myclass/package-use.html delete mode 100755 doc/Javadoc/mycompiler/myexception/CTypeReconstructionException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/JVMCodeException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/MatchException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/SCClassBodyException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/SCClassException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/SCExcept.html delete mode 100755 doc/Javadoc/mycompiler/myexception/SCException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/SCMethodException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/SCStatementException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/class-use/CTypeReconstructionException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/class-use/JVMCodeException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/class-use/MatchException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/class-use/SCClassBodyException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/class-use/SCClassException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/class-use/SCExcept.html delete mode 100755 doc/Javadoc/mycompiler/myexception/class-use/SCException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/class-use/SCMethodException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/class-use/SCStatementException.html delete mode 100755 doc/Javadoc/mycompiler/myexception/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/myexception/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/myexception/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/myexception/package-use.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/Abstract.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/Modifier.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/Modifiers.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/Private.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/Protected.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/Public.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/Static.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/class-use/Abstract.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/class-use/Modifier.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/class-use/Modifiers.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/class-use/Private.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/class-use/Protected.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/class-use/Public.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/class-use/Static.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/mymodifier/package-use.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/AddOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/AndOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/DivideOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/EqualOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/GreaterEquOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/GreaterOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/LessEquOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/LessOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/LogOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/MinusOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/ModuloOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/MulOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/NotEqualOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/Operator.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/OrOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/PlusOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/RelOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/TimesOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/AddOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/AndOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/DivideOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/EqualOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/GreaterEquOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/GreaterOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/LessEquOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/LessOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/LogOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/MinusOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/ModuloOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/MulOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/NotEqualOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/Operator.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/OrOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/PlusOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/RelOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/class-use/TimesOp.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/myoperator/package-use.html delete mode 100755 doc/Javadoc/mycompiler/myparser/JavaLexer.html delete mode 100755 doc/Javadoc/mycompiler/myparser/JavaParser.html delete mode 100755 doc/Javadoc/mycompiler/myparser/JavaParser.yyException.html delete mode 100755 doc/Javadoc/mycompiler/myparser/JavaParser.yyInput.html delete mode 100755 doc/Javadoc/mycompiler/myparser/Scanner.html delete mode 100755 doc/Javadoc/mycompiler/myparser/Token.html delete mode 100755 doc/Javadoc/mycompiler/myparser/class-use/JavaLexer.html delete mode 100755 doc/Javadoc/mycompiler/myparser/class-use/JavaParser.html delete mode 100755 doc/Javadoc/mycompiler/myparser/class-use/JavaParser.yyException.html delete mode 100755 doc/Javadoc/mycompiler/myparser/class-use/JavaParser.yyInput.html delete mode 100755 doc/Javadoc/mycompiler/myparser/class-use/Scanner.html delete mode 100755 doc/Javadoc/mycompiler/myparser/class-use/Token.html delete mode 100755 doc/Javadoc/mycompiler/myparser/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/myparser/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/myparser/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/myparser/package-use.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/ArgumentList.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/Assign.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/Binary.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/BinaryExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/Block.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/BoolLiteral.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/CastExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/CharLiteral.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/EmptyStmt.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/Expr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/ExprStmt.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/IfStmt.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/InstVar.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/InstanceOf.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/IntLiteral.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/Literal.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/LocalOrFieldVar.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/LocalVarDecl.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/MethodCall.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/NegativeExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/NewArray.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/NewClass.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/NotExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/Null.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/PositivExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/PostDecExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/PostIncExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/PreDecExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/PreIncExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/Receiver.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/Return.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/Statement.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/StringLiteral.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/This.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/UnaryExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/UnaryMinus.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/UnaryNot.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/UnaryPlus.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/WhileStmt.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/ArgumentList.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/Assign.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/Binary.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/BinaryExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/Block.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/BoolLiteral.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/CastExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/CharLiteral.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/EmptyStmt.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/Expr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/ExprStmt.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/IfStmt.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/InstVar.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/InstanceOf.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/IntLiteral.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/Literal.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/LocalOrFieldVar.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/LocalVarDecl.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/MethodCall.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/NegativeExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/NewArray.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/NewClass.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/NotExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/Null.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/PositivExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/PostDecExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/PostIncExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/PreDecExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/PreIncExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/Receiver.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/Return.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/Statement.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/StringLiteral.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/This.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/UnaryExpr.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/UnaryMinus.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/UnaryNot.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/UnaryPlus.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/class-use/WhileStmt.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/mystatement/package-use.html delete mode 100755 doc/Javadoc/mycompiler/mytest/CSimpleTest.html delete mode 100755 doc/Javadoc/mycompiler/mytest/class-use/CSimpleTest.html delete mode 100755 doc/Javadoc/mycompiler/mytest/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/mytest/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/mytest/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/mytest/package-use.html delete mode 100755 doc/Javadoc/mycompiler/mytype/BaseType.html delete mode 100755 doc/Javadoc/mycompiler/mytype/BooleanType.html delete mode 100755 doc/Javadoc/mycompiler/mytype/CharacterType.html delete mode 100755 doc/Javadoc/mycompiler/mytype/GenericTypeVar.html delete mode 100755 doc/Javadoc/mycompiler/mytype/IntegerType.html delete mode 100755 doc/Javadoc/mycompiler/mytype/Pair.html delete mode 100755 doc/Javadoc/mycompiler/mytype/ParaList.html delete mode 100755 doc/Javadoc/mycompiler/mytype/RefType.html delete mode 100755 doc/Javadoc/mycompiler/mytype/ReturnType.html delete mode 100755 doc/Javadoc/mycompiler/mytype/Type.html delete mode 100755 doc/Javadoc/mycompiler/mytype/TyploseVariable.html delete mode 100755 doc/Javadoc/mycompiler/mytype/Void.html delete mode 100755 doc/Javadoc/mycompiler/mytype/class-use/BaseType.html delete mode 100755 doc/Javadoc/mycompiler/mytype/class-use/BooleanType.html delete mode 100755 doc/Javadoc/mycompiler/mytype/class-use/CharacterType.html delete mode 100755 doc/Javadoc/mycompiler/mytype/class-use/GenericTypeVar.html delete mode 100755 doc/Javadoc/mycompiler/mytype/class-use/IntegerType.html delete mode 100755 doc/Javadoc/mycompiler/mytype/class-use/Pair.html delete mode 100755 doc/Javadoc/mycompiler/mytype/class-use/ParaList.html delete mode 100755 doc/Javadoc/mycompiler/mytype/class-use/RefType.html delete mode 100755 doc/Javadoc/mycompiler/mytype/class-use/ReturnType.html delete mode 100755 doc/Javadoc/mycompiler/mytype/class-use/Type.html delete mode 100755 doc/Javadoc/mycompiler/mytype/class-use/TyploseVariable.html delete mode 100755 doc/Javadoc/mycompiler/mytype/class-use/Void.html delete mode 100755 doc/Javadoc/mycompiler/mytype/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/mytype/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/mytype/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/mytype/package-use.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/CHelper.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/CIntersectionType.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/CMultiplyTuple.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/CReconstructionTuple.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/CSubstitution.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/CSupportData.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/CTriple.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/CTypeReconstructionResult.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/class-use/CHelper.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/class-use/CIntersectionType.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/class-use/CMultiplyTuple.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/class-use/CReconstructionTuple.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/class-use/CSubstitution.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/class-use/CSupportData.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/class-use/CTriple.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/class-use/CTypeReconstructionResult.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/package-use.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/CReplaceTypeEvent.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/IReplaceTypeEventProvider.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/ITypeReplacementListener.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/CReplaceTypeEvent.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/IReplaceTypeEventProvider.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/ITypeReplacementListener.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-use.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/CHashtableSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/CMultiplyTupleSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/CReconstructionTupleSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/CSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/CSubstitutionSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/CTripleSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/CTypeAssumptionSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/CVectorSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/IHashSetElement.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/IHashSetKey.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CHashtableSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CMultiplyTupleSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CReconstructionTupleSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CSubstitutionSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CTripleSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CTypeAssumptionSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CVectorSet.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetElement.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetKey.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/set/package-use.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CInstVarTypeAssumption.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CLocalVarTypeAssumption.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CMethodTypeAssumption.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CParaTypeAssumption.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CTypeAssumption.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CInstVarTypeAssumption.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CLocalVarTypeAssumption.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CMethodTypeAssumption.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CParaTypeAssumption.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CTypeAssumption.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-use.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CInstVarKey.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CLocalVarKey.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodKey.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodParaKey.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CTypeAssumptionKey.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CInstVarKey.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CLocalVarKey.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodKey.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodParaKey.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CTypeAssumptionKey.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-use.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/unify/FC_TTO.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/unify/Unify.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/unify/class-use/FC_TTO.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/unify/class-use/Unify.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/unify/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/unify/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/unify/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/mytypereconstruction/unify/package-use.html delete mode 100755 doc/Javadoc/mycompiler/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/package-use.html delete mode 100755 doc/Javadoc/mycompiler/unused/ConstantValueAttribute.html delete mode 100755 doc/Javadoc/mycompiler/unused/Import.html delete mode 100755 doc/Javadoc/mycompiler/unused/JavaCompiler.html delete mode 100755 doc/Javadoc/mycompiler/unused/TestClass.html delete mode 100755 doc/Javadoc/mycompiler/unused/class-use/ConstantValueAttribute.html delete mode 100755 doc/Javadoc/mycompiler/unused/class-use/Import.html delete mode 100755 doc/Javadoc/mycompiler/unused/class-use/JavaCompiler.html delete mode 100755 doc/Javadoc/mycompiler/unused/class-use/TestClass.html delete mode 100755 doc/Javadoc/mycompiler/unused/package-frame.html delete mode 100755 doc/Javadoc/mycompiler/unused/package-summary.html delete mode 100755 doc/Javadoc/mycompiler/unused/package-tree.html delete mode 100755 doc/Javadoc/mycompiler/unused/package-use.html delete mode 100755 doc/Javadoc/overview-frame.html delete mode 100755 doc/Javadoc/overview-summary.html delete mode 100755 doc/Javadoc/overview-tree.html delete mode 100755 doc/Javadoc/package-list delete mode 100755 doc/Javadoc/resources/inherit.gif delete mode 100755 doc/Javadoc/serialized-form.html delete mode 100755 doc/Javadoc/stylesheet.css diff --git a/doc/Javadoc/allclasses-frame.html b/doc/Javadoc/allclasses-frame.html deleted file mode 100755 index aa6869e2..00000000 --- a/doc/Javadoc/allclasses-frame.html +++ /dev/null @@ -1,362 +0,0 @@ - - - - - - -All Classes - - - - - - - - - - -All Classes -
- - - - - -
Abstract -
-AddOp -
-AndOp -
-ArgumentList -
-Assign -
-Attribute -
-AttributeInfo -
-BaseType -
-Binary -
-BinaryExpr -
-Block -
-BooleanType -
-BoolLiteral -
-CastExpr -
-CharacterType -
-CharLiteral -
-CHashtableSet -
-CHelper -
-CInstVarKey -
-CInstVarTypeAssumption -
-CIntersectionType -
-Class -
-ClassBody -
-ClassDeclId -
-ClassFile -
-CLocalVarKey -
-CLocalVarTypeAssumption -
-CMethodKey -
-CMethodParaKey -
-CMethodTypeAssumption -
-CMultiplyTuple -
-CMultiplyTupleSet -
-CodeAttribute -
-CONSTANT_Class_info -
-CONSTANT_Double_info -
-CONSTANT_Fieldref_info -
-CONSTANT_Float_info -
-CONSTANT_Integer_info -
-CONSTANT_InterfaceMethodref_info -
-CONSTANT_Long_info -
-CONSTANT_Methodref_info -
-CONSTANT_NameAndType_info -
-CONSTANT_String_info -
-CONSTANT_Utf8_info -
-ConstantValueAttribute -
-Constructor -
-CParaTypeAssumption -
-CPInfo -
-CReconstructionTuple -
-CReconstructionTupleSet -
-CReplaceTypeEvent -
-CSet -
-CSimpleTest -
-CSubstitution -
-CSubstitutionSet -
-CSupportData -
-CTriple -
-CTripleSet -
-CTypeAssumption -
-CTypeAssumptionKey -
-CTypeAssumptionSet -
-CTypeReconstructionException -
-CTypeReconstructionResult -
-CMengeSet -
-DeclId -
-DivideOp -
-EmptyStmt -
-EqualOp -
-ExceptionList -
-ExceptionTable -
-Expr -
-ExprStmt -
-FC_TTO -
-FieldDecl -
-FieldInfo -
-FormalParameter -
-GenericTypeVar -
-GreaterEquOp -
-GreaterOp -
-IfStmt -
-IHashSetElement -
-IHashSetKey -
-Import -
-InstanceOf -
-InstVar -
-InstVarDecl -
-IntegerType -
-IntLiteral -
-IReplaceTypeEventProvider -
-ITypeReplacementListener -
-JavaCompiler -
-JavaLexer -
-JavaParser -
-JavaParser.yyException -
-JavaParser.yyInput -
-JVMCode -
-JVMCodeException -
-Key -
-LessEquOp -
-LessOp -
-Literal -
-LocalOrFieldVar -
-LocalVarDecl -
-LogOp -
-MatchException -
-Method -
-MethodCall -
-MethodInfo -
-MinusOp -
-Modifier -
-Modifiers -
-ModuloOp -
-MulOp -
-MyCompiler -
-MyCompilerAPI -
-NegativeExpr -
-NewArray -
-NewClass -
-NotEqualOp -
-NotExpr -
-Null -
-Operator -
-OrOp -
-Pair -
-ParaList -
-ParameterList -
-PlusOp -
-PositivExpr -
-PostDecExpr -
-PostIncExpr -
-PreDecExpr -
-PreIncExpr -
-Private -
-Protected -
-Public -
-Receiver -
-RefType -
-RelOp -
-Return -
-ReturnType -
-Scanner -
-SCClassBodyException -
-SCClassException -
-SCExcept -
-SCException -
-SCMethodException -
-SCStatementException -
-SourceFile -
-Statement -
-Static -
-Status -
-StringLiteral -
-TestClass -
-This -
-TimesOp -
-Token -
-Type -
-TyploseVariable -
-UnaryExpr -
-UnaryMinus -
-UnaryNot -
-UnaryPlus -
-Unify -
-UsedId -
-UserDef -
-Void -
-WhileStmt -
-
- - - diff --git a/doc/Javadoc/allclasses-noframe.html b/doc/Javadoc/allclasses-noframe.html deleted file mode 100755 index 9d64fed6..00000000 --- a/doc/Javadoc/allclasses-noframe.html +++ /dev/null @@ -1,362 +0,0 @@ - - - - - - -All Classes - - - - - - - - - - -All Classes -
- - - - - -
Abstract -
-AddOp -
-AndOp -
-ArgumentList -
-Assign -
-Attribute -
-AttributeInfo -
-BaseType -
-Binary -
-BinaryExpr -
-Block -
-BooleanType -
-BoolLiteral -
-CastExpr -
-CharacterType -
-CharLiteral -
-CHashtableSet -
-CHelper -
-CInstVarKey -
-CInstVarTypeAssumption -
-CIntersectionType -
-Class -
-ClassBody -
-ClassDeclId -
-ClassFile -
-CLocalVarKey -
-CLocalVarTypeAssumption -
-CMethodKey -
-CMethodParaKey -
-CMethodTypeAssumption -
-CMultiplyTuple -
-CMultiplyTupleSet -
-CodeAttribute -
-CONSTANT_Class_info -
-CONSTANT_Double_info -
-CONSTANT_Fieldref_info -
-CONSTANT_Float_info -
-CONSTANT_Integer_info -
-CONSTANT_InterfaceMethodref_info -
-CONSTANT_Long_info -
-CONSTANT_Methodref_info -
-CONSTANT_NameAndType_info -
-CONSTANT_String_info -
-CONSTANT_Utf8_info -
-ConstantValueAttribute -
-Constructor -
-CParaTypeAssumption -
-CPInfo -
-CReconstructionTuple -
-CReconstructionTupleSet -
-CReplaceTypeEvent -
-CSet -
-CSimpleTest -
-CSubstitution -
-CSubstitutionSet -
-CSupportData -
-CTriple -
-CTripleSet -
-CTypeAssumption -
-CTypeAssumptionKey -
-CTypeAssumptionSet -
-CTypeReconstructionException -
-CTypeReconstructionResult -
-CMengeSet -
-DeclId -
-DivideOp -
-EmptyStmt -
-EqualOp -
-ExceptionList -
-ExceptionTable -
-Expr -
-ExprStmt -
-FC_TTO -
-FieldDecl -
-FieldInfo -
-FormalParameter -
-GenericTypeVar -
-GreaterEquOp -
-GreaterOp -
-IfStmt -
-IHashSetElement -
-IHashSetKey -
-Import -
-InstanceOf -
-InstVar -
-InstVarDecl -
-IntegerType -
-IntLiteral -
-IReplaceTypeEventProvider -
-ITypeReplacementListener -
-JavaCompiler -
-JavaLexer -
-JavaParser -
-JavaParser.yyException -
-JavaParser.yyInput -
-JVMCode -
-JVMCodeException -
-Key -
-LessEquOp -
-LessOp -
-Literal -
-LocalOrFieldVar -
-LocalVarDecl -
-LogOp -
-MatchException -
-Method -
-MethodCall -
-MethodInfo -
-MinusOp -
-Modifier -
-Modifiers -
-ModuloOp -
-MulOp -
-MyCompiler -
-MyCompilerAPI -
-NegativeExpr -
-NewArray -
-NewClass -
-NotEqualOp -
-NotExpr -
-Null -
-Operator -
-OrOp -
-Pair -
-ParaList -
-ParameterList -
-PlusOp -
-PositivExpr -
-PostDecExpr -
-PostIncExpr -
-PreDecExpr -
-PreIncExpr -
-Private -
-Protected -
-Public -
-Receiver -
-RefType -
-RelOp -
-Return -
-ReturnType -
-Scanner -
-SCClassBodyException -
-SCClassException -
-SCExcept -
-SCException -
-SCMethodException -
-SCStatementException -
-SourceFile -
-Statement -
-Static -
-Status -
-StringLiteral -
-TestClass -
-This -
-TimesOp -
-Token -
-Type -
-TyploseVariable -
-UnaryExpr -
-UnaryMinus -
-UnaryNot -
-UnaryPlus -
-Unify -
-UsedId -
-UserDef -
-Void -
-WhileStmt -
-
- - - diff --git a/doc/Javadoc/constant-values.html b/doc/Javadoc/constant-values.html deleted file mode 100755 index 8686452c..00000000 --- a/doc/Javadoc/constant-values.html +++ /dev/null @@ -1,662 +0,0 @@ - - - - - - -Constant Field Values - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Constant Field Values

-
-
-Contents - - - - - - -
-mycompiler.*
- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
mycompiler.MyCompiler
-public static final intALL_INFO0
-public static final intGENERAL_INFO1
-public static final intNO_INFO-1
-public static final intNO_LINENUMBER-1
-public static final intPARSER_INFO3
-public static final intSCANNER_INFO2
-public static final intSEMANTIC_INFO4
-public static final intTYPE_ANALYSIS_INFO5
-public static final intUNIFICATION_INFO6
- -

- -

- - - - - -
-mycompiler.myparser.*
- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
mycompiler.myparser.JavaParser
-public static final intABSTRACT257
-public static final intANDEQUAL310
-public static final intBOOLEAN258
-public static final intBOOLLITERAL289
-public static final intBRACE317
-public static final intBREAK259
-public static final intCASE260
-public static final intCATCH261
-public static final intCHAR262
-public static final intCHARLITERAL291
-public static final intCLASS263
-public static final intCONTINUE264
-public static final intDECREMENT301
-public static final intDEFAULT265
-public static final intDIVIDEEQUAL309
-public static final intDO266
-public static final intELSE267
-public static final intEOF320
-public static final intEQUAL294
-public static final intEXTENDS268
-public static final intFINALLY269
-public static final intFOR270
-public static final intGREATEREQUAL296
-public static final intIDENTIFIER293
-public static final intIF271
-public static final intINCREMENT300
-public static final intINSTANCEOF272
-public static final intINT273
-public static final intINTLITERAL288
-public static final intJNULL290
-public static final intLESSEQUAL295
-public static final intLOGICALAND299
-public static final intLOGICALOR298
-public static final intMINUSEQUAL307
-public static final intMODULOEQUAL313
-public static final intNEW274
-public static final intNOTEQUAL297
-public static final intOP319
-public static final intOREQUAL311
-public static final intPLUSEQUAL306
-public static final intPRIVATE275
-public static final intPROTECTED276
-public static final intPUBLIC277
-public static final intRELOP318
-public static final intRETURN278
-public static final intSHIFTLEFT302
-public static final intSHIFTLEFTEQUAL314
-public static final intSHIFTRIGHT303
-public static final intSIGNEDSHIFTRIGHT305
-public static final intSIGNEDSHIFTRIGHTEQUAL315
-public static final intSTATIC279
-public static final intSTRINGLITERAL292
-public static final intSUPER280
-public static final intSWITCH281
-public static final intTHIS282
-public static final intTHROW283
-public static final intTHROWS284
-public static final intTIMESEQUAL308
-public static final intTRY285
-public static final intUNSIGNEDSHIFTRIGHT304
-public static final intUNSIGNEDSHIFTRIGHTEQUAL316
-public static final intVOID286
-public static final intWHILE287
-public static final intXOREQUAL312
-public static final intyyErrorCode256
-protected static final intyyFinal7
- -

- -

- - - - - -
-mycompiler.mytypereconstruction.*
- -

- - - - - - - - - - - - -
mycompiler.mytypereconstruction.CSupportData
-public static final java.lang.StringNO_METHOD"#nomethod#"
- -

- -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/deprecated-list.html b/doc/Javadoc/deprecated-list.html deleted file mode 100755 index 9d72d116..00000000 --- a/doc/Javadoc/deprecated-list.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -Deprecated List - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Deprecated API

-
-
-Contents
    -
- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/help-doc.html b/doc/Javadoc/help-doc.html deleted file mode 100755 index 82b297c4..00000000 --- a/doc/Javadoc/help-doc.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - -API Help - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-How This API Document Is Organized

-
-This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

-Overview

-
- -

-The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

-

-Package

-
- -

-Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

    -
  • Interfaces (italic)
  • Classes
  • Enums
  • Exceptions
  • Errors
  • Annotation Types
-
-

-Class/Interface

-
- -

-Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    -
  • Class inheritance diagram
  • Direct Subclasses
  • All Known Subinterfaces
  • All Known Implementing Classes
  • Class/interface declaration
  • Class/interface description -

    -

  • Nested Class Summary
  • Field Summary
  • Constructor Summary
  • Method Summary -

    -

  • Field Detail
  • Constructor Detail
  • Method Detail
-Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
- -

-Annotation Type

-
- -

-Each annotation type has its own separate page with the following sections:

    -
  • Annotation Type declaration
  • Annotation Type description
  • Required Element Summary
  • Optional Element Summary
  • Element Detail
-
- -

-Enum

-
- -

-Each enum has its own separate page with the following sections:

    -
  • Enum declaration
  • Enum description
  • Enum Constant Summary
  • Enum Constant Detail
-
-

-Use

-
-Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
-

-Tree (Class Hierarchy)

-
-There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
    -
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
-
-

-Deprecated API

-
-The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
-

-Index

-
-The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
-

-Prev/Next

-These links take you to the next or previous class, interface, package, or related page.

-Frames/No Frames

-These links show and hide the HTML frames. All pages are available with or without frames. -

-

-Serialized Form

-Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. -

-

-Constant Field Values

-The Constant Field Values page lists the static final fields and their values. -

- - -This help file applies to API documentation generated using the standard doclet. - -
-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/index-files/index-1.html b/doc/Javadoc/index-files/index-1.html deleted file mode 100755 index 0b4199f7..00000000 --- a/doc/Javadoc/index-files/index-1.html +++ /dev/null @@ -1,354 +0,0 @@ - - - - - - -A-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-A

-
-
aaload - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
aastore - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
Abstract - Class in mycompiler.mymodifier
 
Abstract() - -Constructor for class mycompiler.mymodifier.Abstract -
  -
ABSTRACT - -Static variable in class mycompiler.myparser.JavaParser -
  -
aconst_null - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
adapt(String, Type, Menge, Menge) - -Method in class mycompiler.mytypereconstruction.unify.Unify -
  -
add_class(String, String, short) - -Method in class mycompiler.mybytecode.ClassFile -
  -
add_classblock_Element(Assign) - -Method in class mycompiler.mybytecode.ClassFile -
  -
add_classexceptions(SCClassException) - -Method in exception mycompiler.myexception.SCException -
  -
add_code(Byte) - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
add_code_byte(int) - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
add_code_byte_array(byte[]) - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
add_code_int(int) - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
add_code_short(int) - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
add_CONSTANT_Class_info(String) - -Method in class mycompiler.mybytecode.ClassFile -
  -
add_CONSTANT_Integer_info(int) - -Method in class mycompiler.mybytecode.ClassFile -
  -
add_CONSTANT_NameAndType_info(String, String) - -Method in class mycompiler.mybytecode.ClassFile -
  -
add_CONSTANT_String_info(String) - -Method in class mycompiler.mybytecode.ClassFile -
  -
add_CONSTANT_Utf8_info(String) - -Method in class mycompiler.mybytecode.ClassFile -
  -
add_Expr(Expr) - -Method in class mycompiler.mystatement.MethodCall -
  -
add_field(String, String, short) - -Method in class mycompiler.mybytecode.ClassFile -
  -
add_field_ref(String, String, String) - -Method in class mycompiler.mybytecode.ClassFile -
  -
add_local(String, Type) - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
add_method(String, String, ParameterList, Type, Block, short, Menge) - -Method in class mycompiler.mybytecode.ClassFile -
  -
add_method_ref(String, String, String) - -Method in class mycompiler.mybytecode.ClassFile -
  -
add_ParaList(Object) - -Method in class mycompiler.mytype.ParaList -
  -
add_Parameter(Object) - -Method in class mycompiler.mytype.RefType -
  -
addClassname(String) - -Method in exception mycompiler.myexception.SCClassException -
  -
addClassName(String) - -Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
addDataFromTupel(CReconstructionTuple) - -Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
addElement(E) - -Method in class mycompiler.mytypereconstruction.set.CHashtableSet -
  -
addElement(IHashSetKey, E) - -Method in class mycompiler.mytypereconstruction.set.CHashtableSet -
  -
addElement(E) - -Method in class mycompiler.mytypereconstruction.set.CSet -
  -
addElement(E) - -Method in class mycompiler.mytypereconstruction.set.CMengeSet -
  -
addException(SCExcept) - -Method in exception mycompiler.myexception.SCClassBodyException -
  -
addException(Menge) - -Method in exception mycompiler.myexception.SCClassException -
  -
addException(SCExcept) - -Method in exception mycompiler.myexception.SCStatementException -
  -
addFieldOrLocalVarAssumption(CTypeAssumption) - -Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
addGenericTypeVars(String, Menge<GenericTypeVar>) - -Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
addMethodIntersectionType(CIntersectionType) - -Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
addMethodTypeAssumption(CMethodTypeAssumption) - -Method in class mycompiler.mytypereconstruction.CIntersectionType -
  -
AddOp - Class in mycompiler.myoperator
 
AddOp() - -Constructor for class mycompiler.myoperator.AddOp -
  -
addParaAssumption(CParaTypeAssumption) - -Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -
  -
addReplacementListener(ITypeReplacementListener) - -Method in class mycompiler.mytype.TyploseVariable -

Author: J�rg B�uerle -
addReplacementListener(ITypeReplacementListener) - -Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider -
  -
advance() - -Method in interface mycompiler.myparser.JavaParser.yyInput -
move on to next token. -
advance() - -Method in class mycompiler.myparser.Scanner -
  -
ALL_INFO - -Static variable in class mycompiler.MyCompiler -
  -
allGreater(RefType, Menge) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
allSmaller(RefType, Menge) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
aload - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
aload_0 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
aload_1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
aload_2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
aload_3 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ANDEQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
AndOp - Class in mycompiler.myoperator
 
AndOp() - -Constructor for class mycompiler.myoperator.AndOp -
  -
anewarray - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
applyUnifier(CSubstitutionSet) - -Method in class mycompiler.mytypereconstruction.CSubstitution -
Wendet den Unifier auf die rechte Seite dieser Substitution an. -
applyUnifier(CSubstitutionSet) - -Method in class mycompiler.mytypereconstruction.set.CSubstitutionSet -
Wendet den Unifier auf die rechten Seiten alle Substitutionen an. -
areturn - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ArgumentList - Class in mycompiler.mystatement
 
ArgumentList() - -Constructor for class mycompiler.mystatement.ArgumentList -
  -
arraylength - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
Assign - Class in mycompiler.mystatement
 
Assign() - -Constructor for class mycompiler.mystatement.Assign -
  -
astore - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
astore_0 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
astore_1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
astore_2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
astore_3 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
athrow - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
Attribute - Class in mycompiler.mybytecode
 
Attribute() - -Constructor for class mycompiler.mybytecode.Attribute -
  -
AttributeInfo - Class in mycompiler.mybytecode
 
AttributeInfo() - -Constructor for class mycompiler.mybytecode.AttributeInfo -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-10.html b/doc/Javadoc/index-files/index-10.html deleted file mode 100755 index a27f3f96..00000000 --- a/doc/Javadoc/index-files/index-10.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - -J-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-J

-
-
JavaCompiler - Class in mycompiler.unused
 
JavaCompiler() - -Constructor for class mycompiler.unused.JavaCompiler -
  -
JavaLexer - Class in mycompiler.myparser
 
JavaLexer(Reader) - -Constructor for class mycompiler.myparser.JavaLexer -
  -
JavaLexer(InputStream) - -Constructor for class mycompiler.myparser.JavaLexer -
  -
JavaParser - Class in mycompiler.myparser
 
JavaParser() - -Constructor for class mycompiler.myparser.JavaParser -
  -
JavaParser.yyException - Exception in mycompiler.myparser
thrown for irrecoverable syntax errors and stack overflow.
JavaParser.yyException(String) - -Constructor for exception mycompiler.myparser.JavaParser.yyException -
  -
JavaParser.yyInput - Interface in mycompiler.myparser
must be implemented by a scanner object to supply input to the parser.
JNULL - -Static variable in class mycompiler.myparser.JavaParser -
  -
jsr - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
jsr_w - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
JVMCode - Class in mycompiler.mybytecode
 
JVMCode() - -Constructor for class mycompiler.mybytecode.JVMCode -
  -
JVMCodeException - Exception in mycompiler.myexception
 
JVMCodeException(String) - -Constructor for exception mycompiler.myexception.JVMCodeException -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-11.html b/doc/Javadoc/index-files/index-11.html deleted file mode 100755 index 292a93fc..00000000 --- a/doc/Javadoc/index-files/index-11.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -K-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-K

-
-
Key - Class in mycompiler.mybytecode
 
Key(byte, String) - -Constructor for class mycompiler.mybytecode.Key -
  -
KEYPREFIX - -Static variable in class mycompiler.mytypereconstruction.typeassumptionkey.CInstVarKey -
  -
KEYPREFIX - -Static variable in class mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey -
  -
KEYPREFIX - -Static variable in class mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey -
  -
KEYPREFIX - -Static variable in class mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey -
  -
kill - -Variable in class mycompiler.myclass.ClassBody -
  -
KlassenVektor - -Variable in class mycompiler.SourceFile -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-12.html b/doc/Javadoc/index-files/index-12.html deleted file mode 100755 index 76886554..00000000 --- a/doc/Javadoc/index-files/index-12.html +++ /dev/null @@ -1,279 +0,0 @@ - - - - - - -L-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-L

-
-
l2d - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
l2f - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
l2i - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ladd - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
laload - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
land - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lastore - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lcmp - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lconst_0 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lconst_1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ldc - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ldc2_w - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ldc_w - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ldiv - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
LESSEQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
LessEquOp - Class in mycompiler.myoperator
 
LessEquOp() - -Constructor for class mycompiler.myoperator.LessEquOp -
  -
LessOp - Class in mycompiler.myoperator
 
LessOp() - -Constructor for class mycompiler.myoperator.LessOp -
  -
Literal - Class in mycompiler.mystatement
 
Literal() - -Constructor for class mycompiler.mystatement.Literal -
  -
lload - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lload_0 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lload_1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lload_2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lload_3 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lmul - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lneg - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
LocalOrFieldVar - Class in mycompiler.mystatement
 
LocalOrFieldVar() - -Constructor for class mycompiler.mystatement.LocalOrFieldVar -
  -
LocalOrFieldVar(String) - -Constructor for class mycompiler.mystatement.LocalOrFieldVar -
  -
LocalVarDecl - Class in mycompiler.mystatement
 
LocalVarDecl() - -Constructor for class mycompiler.mystatement.LocalVarDecl -
  -
LOGICALAND - -Static variable in class mycompiler.myparser.JavaParser -
  -
LOGICALOR - -Static variable in class mycompiler.myparser.JavaParser -
  -
LogOp - Class in mycompiler.myoperator
 
LogOp() - -Constructor for class mycompiler.myoperator.LogOp -
  -
lookupswitch - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
loop_codegen(ClassFile, CodeAttribute, Expr, int, boolean, Menge) - -Method in class mycompiler.myoperator.LogOp -
  -
loop_codegen(ClassFile, CodeAttribute, int, boolean, Menge) - -Method in class mycompiler.mystatement.WhileStmt -
  -
lor - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lrem - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lreturn - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lshl - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lshr - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lstore - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lstore_0 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lstore_1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lstore_2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lstore_3 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lsub - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lushr - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
lxor - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-13.html b/doc/Javadoc/index-files/index-13.html deleted file mode 100755 index bfa702b1..00000000 --- a/doc/Javadoc/index-files/index-13.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - -M-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-M

-
-
m_AssumedType - -Variable in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
m_BlockId - -Variable in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -
  -
m_ClassName - -Variable in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
m_Identifier - -Variable in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
m_KeyString - -Variable in class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey -
  -
m_LineNumber - -Variable in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
m_MethodName - -Variable in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -
  -
m_MethodName - -Variable in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption -
  -
m_MethodParaCount - -Variable in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -
  -
m_MethodParaCount - -Variable in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption -
  -
m_ParaAssumptions - -Variable in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -
  -
main(String[]) - -Static method in class mycompiler.MyCompiler -
Author: Jörg Bäuerle
- Die Main-Funktion, über die der Compiler auch per Konsole gestartet - werden kann. -
main(String[]) - -Static method in class mycompiler.mytest.CSimpleTest -
  -
main(String[]) - -Static method in class mycompiler.unused.JavaCompiler -
  -
main(String[]) - -Static method in class mycompiler.unused.TestClass -
  -
makeFC() - -Method in class mycompiler.SourceFile -
  -
match(RefType, RefType, Hashtable) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
MatchException - Exception in mycompiler.myexception
 
MatchException(String) - -Constructor for exception mycompiler.myexception.MatchException -
  -
Method - Class in mycompiler.myclass
 
Method() - -Constructor for class mycompiler.myclass.Method -
  -
MethodCall - Class in mycompiler.mystatement
 
MethodCall() - -Constructor for class mycompiler.mystatement.MethodCall -
  -
MethodInfo - Class in mycompiler.mybytecode
 
MethodInfo() - -Constructor for class mycompiler.mybytecode.MethodInfo -
  -
MINUSEQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
MinusOp - Class in mycompiler.myoperator
 
MinusOp() - -Constructor for class mycompiler.myoperator.MinusOp -
  -
Modifier - Class in mycompiler.mymodifier
 
Modifier() - -Constructor for class mycompiler.mymodifier.Modifier -
  -
modifier - -Variable in class mycompiler.mymodifier.Modifiers -
  -
modifiers - -Variable in class mycompiler.myclass.DeclId -
  -
Modifiers - Class in mycompiler.mymodifier
 
Modifiers() - -Constructor for class mycompiler.mymodifier.Modifiers -
  -
MODULOEQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
ModuloOp - Class in mycompiler.myoperator
 
ModuloOp() - -Constructor for class mycompiler.myoperator.ModuloOp -
  -
monitorenter - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
monitorexit - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
MulOp - Class in mycompiler.myoperator
 
MulOp() - -Constructor for class mycompiler.myoperator.MulOp -
  -
multianewarray - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
mycompiler - package mycompiler
 
MyCompiler - Class in mycompiler
 
mycompiler.mybytecode - package mycompiler.mybytecode
 
mycompiler.myclass - package mycompiler.myclass
 
mycompiler.myexception - package mycompiler.myexception
 
mycompiler.mymodifier - package mycompiler.mymodifier
 
mycompiler.myoperator - package mycompiler.myoperator
 
mycompiler.myparser - package mycompiler.myparser
 
mycompiler.mystatement - package mycompiler.mystatement
 
mycompiler.mytest - package mycompiler.mytest
 
mycompiler.mytype - package mycompiler.mytype
 
mycompiler.mytypereconstruction - package mycompiler.mytypereconstruction
 
mycompiler.mytypereconstruction.replacementlistener - package mycompiler.mytypereconstruction.replacementlistener
 
mycompiler.mytypereconstruction.set - package mycompiler.mytypereconstruction.set
 
mycompiler.mytypereconstruction.typeassumption - package mycompiler.mytypereconstruction.typeassumption
 
mycompiler.mytypereconstruction.typeassumptionkey - package mycompiler.mytypereconstruction.typeassumptionkey
 
mycompiler.mytypereconstruction.unify - package mycompiler.mytypereconstruction.unify
 
mycompiler.unused - package mycompiler.unused
 
MyCompilerAPI - Interface in mycompiler
Schnittstellen-Klasse zum Compiler.
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-14.html b/doc/Javadoc/index-files/index-14.html deleted file mode 100755 index 7377d4a0..00000000 --- a/doc/Javadoc/index-files/index-14.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - -N-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-N

-
-
n2n(String, String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
nadd(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
naload(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
name - -Variable in class mycompiler.myclass.DeclId -
  -
name - -Variable in class mycompiler.myclass.UsedId -
  -
name - -Variable in class mycompiler.mytype.Type -
  -
nand(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
nastore(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
ncmpg(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
ncmpl(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
nconst_n(String, int) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
ndiv(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
neg_codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.Binary -
  -
neg_codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.NegativeExpr -
  -
NegativeExpr - Class in mycompiler.mystatement
 
NegativeExpr() - -Constructor for class mycompiler.mystatement.NegativeExpr -
  -
NEW - -Static variable in class mycompiler.myparser.JavaParser -
  -
new_ - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
newarray - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
NewArray - Class in mycompiler.mystatement
 
NewArray() - -Constructor for class mycompiler.mystatement.NewArray -
  -
NewClass - Class in mycompiler.mystatement
 
NewClass() - -Constructor for class mycompiler.mystatement.NewClass -
  -
nload(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
nload_n(String, int) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
nmul(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
nneg(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
NO_INFO - -Static variable in class mycompiler.MyCompiler -
  -
NO_LINENUMBER - -Static variable in class mycompiler.MyCompiler -
  -
NO_METHOD - -Static variable in class mycompiler.mytypereconstruction.CSupportData -
Gibt Namensstring f�r den Classbody au�erhalb einer Methode - f�r m_CurrentMethod. -
nop - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
nor(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
not_codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.Binary -
  -
not_codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.NotExpr -
  -
NOTEQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
NotEqualOp - Class in mycompiler.myoperator
 
NotEqualOp() - -Constructor for class mycompiler.myoperator.NotEqualOp -
  -
NotExpr - Class in mycompiler.mystatement
 
NotExpr() - -Constructor for class mycompiler.mystatement.NotExpr -
  -
nrem(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
nreturn(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
nshl(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
nshr(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
nstore(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
nstore_n(String, int) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
nsub(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
Null - Class in mycompiler.mystatement
 
Null() - -Constructor for class mycompiler.mystatement.Null -
  -
nushr(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
nxor(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-15.html b/doc/Javadoc/index-files/index-15.html deleted file mode 100755 index b2c70df5..00000000 --- a/doc/Javadoc/index-files/index-15.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -O-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-O

-
-
OP - -Static variable in class mycompiler.myparser.JavaParser -
  -
op - -Variable in class mycompiler.mystatement.Binary -
  -
Operator - Class in mycompiler.myoperator
 
Operator() - -Constructor for class mycompiler.myoperator.Operator -
  -
OREQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
OrOp - Class in mycompiler.myoperator
 
OrOp() - -Constructor for class mycompiler.myoperator.OrOp -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-16.html b/doc/Javadoc/index-files/index-16.html deleted file mode 100755 index 2b1317bb..00000000 --- a/doc/Javadoc/index-files/index-16.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - -P-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-P

-
-
Pair - Class in mycompiler.mytype
 
Pair(Type, Type) - -Constructor for class mycompiler.mytype.Pair -
  -
Pair(Type, Type, boolean) - -Constructor for class mycompiler.mytype.Pair -
  -
Pair(Type, Type, boolean, boolean) - -Constructor for class mycompiler.mytype.Pair -
  -
Pair_isEquiv(Pair) - -Method in class mycompiler.mytype.Pair -
  -
para_check(Menge, boolean) - -Method in class mycompiler.myclass.Class -
  -
ParaList - Class in mycompiler.mytype
 
ParaList() - -Constructor for class mycompiler.mytype.ParaList -
  -
paralist - -Variable in class mycompiler.mytype.ParaList -
  -
parameterlist - -Variable in class mycompiler.myclass.Method -
  -
ParameterList - Class in mycompiler.myclass
 
ParameterList() - -Constructor for class mycompiler.myclass.ParameterList -
  -
paratyp - -Variable in class mycompiler.myclass.DeclId -
  -
parse(File) - -Method in class mycompiler.MyCompiler -
Author: J�rg B�uerle
- Ruft die Parse-Methode. -
parse(String) - -Method in class mycompiler.MyCompiler -
Author: J�rg B�uerle
- Ruft die Parse-Methode. -
parse(File) - -Method in interface mycompiler.MyCompilerAPI -
Author: J�rg B�uerle
- Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf. -
parse(String) - -Method in interface mycompiler.MyCompilerAPI -
Author: J�rg B�uerle
- Parst einen String und baut den abstrakten Syntaxbaum auf. -
PARSER_INFO - -Static variable in class mycompiler.MyCompiler -
  -
path - -Variable in class mycompiler.myparser.JavaParser -
  -
pi(int, String, String, Menge) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
PLUSEQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
PlusOp - Class in mycompiler.myoperator
 
PlusOp() - -Constructor for class mycompiler.myoperator.PlusOp -
  -
pop - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
pop2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
PositivExpr - Class in mycompiler.mystatement
 
PositivExpr() - -Constructor for class mycompiler.mystatement.PositivExpr -
  -
PostDecExpr - Class in mycompiler.mystatement
 
PostDecExpr() - -Constructor for class mycompiler.mystatement.PostDecExpr -
  -
PostIncExpr - Class in mycompiler.mystatement
 
PostIncExpr() - -Constructor for class mycompiler.mystatement.PostIncExpr -
  -
PreDecExpr - Class in mycompiler.mystatement
 
PreDecExpr() - -Constructor for class mycompiler.mystatement.PreDecExpr -
  -
PreIncExpr - Class in mycompiler.mystatement
 
PreIncExpr() - -Constructor for class mycompiler.mystatement.PreIncExpr -
  -
print(String) - -Static method in class mycompiler.mytypereconstruction.CHelper -
Author: J�rg B�uerle
- Gibt einen String aus. -
print() - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
printDebugInfo(String, int) - -Static method in class mycompiler.MyCompiler -
Author: J�rg B�uerle
- Von meinen Vorg�ngern eingesetzte Methode zur Ausgabe von - diferenzierten Debug-Ausgaben. -
printMenge(String, Menge, int) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
printMengeUnifier(String, Menge<Menge<Pair>>, int) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
Private - Class in mycompiler.mymodifier
 
Private() - -Constructor for class mycompiler.mymodifier.Private -
  -
PRIVATE - -Static variable in class mycompiler.myparser.JavaParser -
  -
Protected - Class in mycompiler.mymodifier
 
Protected() - -Constructor for class mycompiler.mymodifier.Protected -
  -
PROTECTED - -Static variable in class mycompiler.myparser.JavaParser -
  -
Public - Class in mycompiler.mymodifier
 
Public() - -Constructor for class mycompiler.mymodifier.Public -
  -
PUBLIC - -Static variable in class mycompiler.myparser.JavaParser -
  -
putfield - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
putstatic - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-17.html b/doc/Javadoc/index-files/index-17.html deleted file mode 100755 index c0a2b299..00000000 --- a/doc/Javadoc/index-files/index-17.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - -R-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-R

-
-
Receiver - Class in mycompiler.mystatement
 
Receiver(Expr) - -Constructor for class mycompiler.mystatement.Receiver -
Autor: J�rg B�uerle -
RefType - Class in mycompiler.mytype
 
RefType() - -Constructor for class mycompiler.mytype.RefType -
  -
RefType(String) - -Constructor for class mycompiler.mytype.RefType -
  -
RefType(String, Menge) - -Constructor for class mycompiler.mytype.RefType -
  -
RefType(RefType) - -Constructor for class mycompiler.mytype.RefType -
  -
RelOp - Class in mycompiler.myoperator
 
RelOp() - -Constructor for class mycompiler.myoperator.RelOp -
  -
RELOP - -Static variable in class mycompiler.myparser.JavaParser -
  -
removeAllReplacementListeners() - -Method in class mycompiler.mytype.TyploseVariable -

Author: J�rg B�uerle -
removeAllReplacementListeners() - -Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider -
  -
removeElement(E) - -Method in class mycompiler.mytypereconstruction.set.CHashtableSet -
  -
removeElement(IHashSetKey) - -Method in class mycompiler.mytypereconstruction.set.CHashtableSet -
  -
removeElement(E) - -Method in class mycompiler.mytypereconstruction.set.CSet -
  -
removeElement(E) - -Method in class mycompiler.mytypereconstruction.set.CMengeSet -
  -
removeMethodTypeAssumption(CMethodTypeAssumption) - -Method in class mycompiler.mytypereconstruction.CIntersectionType -
  -
removeReplacementListener(ITypeReplacementListener) - -Method in class mycompiler.mytype.TyploseVariable -

Author: J�rg B�uerle -
removeReplacementListener(ITypeReplacementListener) - -Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider -
  -
replace_index(CodeAttribute, Menge, int, int) - -Static method in class mycompiler.myoperator.LogOp -
  -
replaceType(CReplaceTypeEvent) - -Method in class mycompiler.myclass.FormalParameter -

Author: J�rg B�uerle -
replaceType(CReplaceTypeEvent) - -Method in class mycompiler.myclass.InstVarDecl -

Author: J�rg B�uerle -
replaceType(CReplaceTypeEvent) - -Method in class mycompiler.myclass.Method -

Author: J�rg B�uerle -
replaceType(CReplaceTypeEvent) - -Method in class mycompiler.mystatement.ExprStmt -
  -
replaceType(CReplaceTypeEvent) - -Method in class mycompiler.mystatement.LocalVarDecl -

Author: J�rg B�uerle -
replaceType(CReplaceTypeEvent) - -Method in interface mycompiler.mytypereconstruction.replacementlistener.ITypeReplacementListener -
Tauscht einen Typ gegen einen anderen aus. -
replaceWithType(Type) - -Method in class mycompiler.mytype.TyploseVariable -
Diese Methode geht alle TypeReplacmentListener durch und tauscht �ber deren - Callback-Methode diesen Typ gegen den neuen aus. -
resetBlockId() - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
ret - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
RETURN - -Static variable in class mycompiler.myparser.JavaParser -
  -
Return - Class in mycompiler.mystatement
 
Return() - -Constructor for class mycompiler.mystatement.Return -
  -
return_ - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ReturnType - Class in mycompiler.mytype
 
ReturnType() - -Constructor for class mycompiler.mytype.ReturnType -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-18.html b/doc/Javadoc/index-files/index-18.html deleted file mode 100755 index d5700c16..00000000 --- a/doc/Javadoc/index-files/index-18.html +++ /dev/null @@ -1,935 +0,0 @@ - - - - - - -S-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-S

-
-
saload - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
sastore - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
sc_check(Menge, boolean) - -Method in class mycompiler.myclass.Class -
  -
sc_check(Menge, boolean) - -Method in class mycompiler.myclass.ClassBody -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.Assign -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.Binary -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.Block -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.BoolLiteral -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.CastExpr -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.CharLiteral -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.EmptyStmt -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.Expr -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.InstanceOf -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.InstVar -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.IntLiteral -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.LocalOrFieldVar -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.LocalVarDecl -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.MethodCall -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.NegativeExpr -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.NewArray -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.NewClass -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.NotExpr -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.Null -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.PositivExpr -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.PostDecExpr -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.PostIncExpr -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.PreDecExpr -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.PreIncExpr -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.Receiver -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.StringLiteral -
  -
sc_check(Menge, Hashtable, Hashtable, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.This -
  -
sc_check(boolean) - -Method in class mycompiler.SourceFile -
  -
sc_check_for_extended_classes(Menge, Hashtable, boolean) - -Method in class mycompiler.myclass.Class -
  -
sc_check_get_Method(Menge, String, boolean, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.MethodCall -
  -
sc_check_method_kleiner(Menge, String, String, boolean) - -Method in class mycompiler.mystatement.MethodCall -
  -
sc_check_uebergabe(Menge, Menge, boolean, int, Hashtable, Hashtable) - -Method in class mycompiler.mystatement.MethodCall -
  -
sc_get_Formalparalist() - -Method in class mycompiler.myclass.ParameterList -
  -
sc_init_extended_fcts(Menge, Menge, String, String, boolean) - -Method in class mycompiler.mystatement.MethodCall -
  -
sc_init_hashtable(Menge, String, String, boolean) - -Method in class mycompiler.myclass.ClassBody -
  -
sc_init_hashtable_for_extended_classes(Menge, String, Hashtable, Menge, Hashtable, Hashtable, boolean) - -Method in class mycompiler.myclass.ClassBody -
  -
sc_init_parameterlist(boolean) - -Method in class mycompiler.myclass.Method -
  -
Scanner - Class in mycompiler.myparser
 
Scanner(Reader) - -Constructor for class mycompiler.myparser.Scanner -
  -
SCANNER_INFO - -Static variable in class mycompiler.MyCompiler -
  -
SCClassBodyException - Exception in mycompiler.myexception
 
SCClassBodyException() - -Constructor for exception mycompiler.myexception.SCClassBodyException -
  -
SCClassException - Exception in mycompiler.myexception
 
SCClassException() - -Constructor for exception mycompiler.myexception.SCClassException -
  -
SCExcept - Class in mycompiler.myexception
 
SCExcept() - -Constructor for class mycompiler.myexception.SCExcept -
  -
SCException - Exception in mycompiler.myexception
 
SCException() - -Constructor for exception mycompiler.myexception.SCException -
  -
SCMethodException - Exception in mycompiler.myexception
 
SCMethodException() - -Constructor for exception mycompiler.myexception.SCMethodException -
  -
SCStatementException - Exception in mycompiler.myexception
 
SCStatementException() - -Constructor for exception mycompiler.myexception.SCStatementException -
  -
SEMANTIC_INFO - -Static variable in class mycompiler.MyCompiler -
  -
semanticCheck() - -Method in class mycompiler.MyCompiler -
Author: J�rg B�uerle
- Ruft �ber SourceFile.sc_check(false) - den alten Semantik-Check ohne Typrekonstruktion auf. -
semanticCheck() - -Method in interface mycompiler.MyCompilerAPI -
Author: J�rg B�uerle
- Ruft den Semantik-Check ohne Typrekonstruktion auf. -
set_a(String) - -Method in class mycompiler.mybytecode.Key -
  -
set_access_flags(short) - -Method in class mycompiler.mybytecode.ClassFile -
  -
set_access_flags(short) - -Method in class mycompiler.mybytecode.FieldInfo -
  -
set_access_flags(short) - -Method in class mycompiler.mybytecode.MethodInfo -
  -
set_addElem(RefType) - -Method in class mycompiler.myclass.ExceptionList -
  -
set_AddParameter(FormalParameter) - -Method in class mycompiler.myclass.ParameterList -
  -
set_ArgumentList(ArgumentList) - -Method in class mycompiler.mystatement.MethodCall -
  -
set_ArgumentList(ArgumentList) - -Method in class mycompiler.mystatement.NewClass -
  -
set_ArgumentList(ArgumentList) - -Method in class mycompiler.mystatement.This -
  -
set_attribute_name_index(short) - -Method in class mycompiler.mybytecode.Attribute -
  -
set_attributes(Menge) - -Method in class mycompiler.mybytecode.ClassFile -
  -
set_attributes(Menge) - -Method in class mycompiler.mybytecode.FieldInfo -
  -
set_attributes(Menge) - -Method in class mycompiler.mybytecode.MethodInfo -
  -
set_attributes_Menge(Menge) - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
set_Block(Block) - -Method in class mycompiler.myclass.Method -
  -
set_Bool(boolean) - -Method in class mycompiler.mystatement.BoolLiteral -
  -
set_bytes(int) - -Method in class mycompiler.mybytecode.CONSTANT_Float_info -
  -
set_bytes(int) - -Method in class mycompiler.mybytecode.CONSTANT_Integer_info -
  -
set_bytes(byte[]) - -Method in class mycompiler.mybytecode.CONSTANT_Utf8_info -
  -
set_Char(char) - -Method in class mycompiler.mystatement.CharLiteral -
  -
set_Class(Class) - -Method in class mycompiler.SourceFile -
  -
set_class_block(Block) - -Method in class mycompiler.myclass.Class -
  -
set_class_index(short) - -Method in class mycompiler.mybytecode.CONSTANT_Fieldref_info -
  -
set_class_index(short) - -Method in class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info -
  -
set_class_index(short) - -Method in class mycompiler.mybytecode.CONSTANT_Methodref_info -
  -
set_Class_Name(String) - -Method in class mycompiler.mybytecode.FieldInfo -
  -
set_ClassBody(ClassBody) - -Method in class mycompiler.myclass.Class -
  -
set_ClassDeclId(ClassDeclId) - -Method in class mycompiler.myclass.Class -
  -
set_classname(String) - -Method in class mycompiler.myclass.ClassDeclId -
  -
set_classname(String) - -Method in class mycompiler.myexception.SCExcept -
  -
set_code(Byte, int) - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
set_code_short(int, int) - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
set_constant_pool(Menge) - -Method in class mycompiler.mybytecode.ClassFile -
  -
set_constructor_founded(boolean) - -Method in class mycompiler.mybytecode.ClassFile -
  -
set_DeclId(DeclId) - -Method in class mycompiler.myclass.FieldDecl -
  -
set_DeclId(DeclId) - -Method in class mycompiler.myclass.FormalParameter -
  -
set_DeclId(DeclId) - -Method in class mycompiler.mystatement.LocalVarDecl -
  -
set_descriptor_index(short) - -Method in class mycompiler.mybytecode.CONSTANT_NameAndType_info -
  -
set_descriptor_index(short) - -Method in class mycompiler.mybytecode.FieldInfo -
  -
set_descriptor_index(short) - -Method in class mycompiler.mybytecode.MethodInfo -
  -
set_Else_block(Statement) - -Method in class mycompiler.mystatement.IfStmt -
  -
set_error(String) - -Method in class mycompiler.myexception.SCExcept -
  -
set_exception_table_Menge(Menge) - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
set_ExceptionList(ExceptionList) - -Method in class mycompiler.myclass.Method -
  -
set_exlist(Menge) - -Method in exception mycompiler.myexception.SCMethodException -
  -
set_Expr(Expr, Expr) - -Method in class mycompiler.mystatement.Assign -
  -
set_Expr(Expr) - -Method in class mycompiler.mystatement.CastExpr -
  -
set_Expr(Expr) - -Method in class mycompiler.mystatement.IfStmt -
  -
set_Expr(Expr) - -Method in class mycompiler.mystatement.InstanceOf -
  -
set_Expr(Expr) - -Method in class mycompiler.mystatement.NegativeExpr -
  -
set_Expr(Expr) - -Method in class mycompiler.mystatement.NotExpr -
  -
set_Expr(Expr) - -Method in class mycompiler.mystatement.PositivExpr -
  -
set_Expr(Expr) - -Method in class mycompiler.mystatement.PostDecExpr -
  -
set_Expr(Expr) - -Method in class mycompiler.mystatement.PostIncExpr -
  -
set_Expr(Expr) - -Method in class mycompiler.mystatement.PreDecExpr -
  -
set_Expr(Expr) - -Method in class mycompiler.mystatement.PreIncExpr -
  -
set_Expr(Expr) - -Method in class mycompiler.mystatement.Receiver -
  -
set_Expr(Expr) - -Method in class mycompiler.mystatement.WhileStmt -
  -
set_Expr1(Expr) - -Method in class mycompiler.mystatement.Binary -
  -
set_Expr2(Expr) - -Method in class mycompiler.mystatement.Binary -
  -
set_Expr_Menge(Menge) - -Method in class mycompiler.mystatement.MethodCall -
  -
set_FieldDecl(FieldDecl) - -Method in class mycompiler.myclass.ClassBody -
  -
set_fields(Menge) - -Method in class mycompiler.mybytecode.ClassFile -
  -
set_function(String) - -Method in class mycompiler.myexception.SCExcept -
  -
set_high_bytes(int) - -Method in class mycompiler.mybytecode.CONSTANT_Double_info -
  -
set_high_bytes(int) - -Method in class mycompiler.mybytecode.CONSTANT_Long_info -
  -
set_Import(Import) - -Method in class mycompiler.myclass.Status -
  -
set_info(byte[]) - -Method in class mycompiler.mybytecode.AttributeInfo -
  -
set_info(Menge) - -Method in class mycompiler.mybytecode.AttributeInfo -
  -
set_Int(int) - -Method in class mycompiler.mystatement.IntLiteral -
  -
set_ListType(Type) - -Method in class mycompiler.myclass.DeclId -
  -
set_Loop_block(Statement) - -Method in class mycompiler.mystatement.WhileStmt -
  -
set_low_bytes(int) - -Method in class mycompiler.mybytecode.CONSTANT_Double_info -
  -
set_low_bytes(int) - -Method in class mycompiler.mybytecode.CONSTANT_Long_info -
  -
set_methods(Menge) - -Method in class mycompiler.mybytecode.ClassFile -
  -
set_Modifiers(Modifiers) - -Method in class mycompiler.myclass.ClassDeclId -
  -
set_Modifiers(Modifiers) - -Method in class mycompiler.myclass.DeclId -
  -
set_Modifiers(Modifiers) - -Method in class mycompiler.myclass.Method -
  -
set_Name(String) - -Method in class mycompiler.mybytecode.FieldInfo -
  -
set_Name(String) - -Method in class mycompiler.myclass.DeclId -
  -
set_Name(String) - -Method in class mycompiler.myclass.UsedId -
  -
set_Name(String) - -Method in class mycompiler.mytype.Void -
  -
set_name_and_type_index(short) - -Method in class mycompiler.mybytecode.CONSTANT_Fieldref_info -
  -
set_name_and_type_index(short) - -Method in class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info -
  -
set_name_and_type_index(short) - -Method in class mycompiler.mybytecode.CONSTANT_Methodref_info -
  -
set_name_index(short) - -Method in class mycompiler.mybytecode.CONSTANT_Class_info -
  -
set_name_index(short) - -Method in class mycompiler.mybytecode.CONSTANT_NameAndType_info -
  -
set_name_index(short) - -Method in class mycompiler.mybytecode.FieldInfo -
  -
set_name_index(short) - -Method in class mycompiler.mybytecode.MethodInfo -
  -
set_Operator(Operator) - -Method in class mycompiler.mystatement.Binary -
  -
set_ParaHash(Hashtable) - -Method in class mycompiler.myclass.Class -
  -
set_ParaList(Menge) - -Method in class mycompiler.myclass.Class -
  -
set_ParaList(Menge) - -Method in class mycompiler.myclass.UsedId -
  -
set_ParaList(Menge) - -Method in class mycompiler.mystatement.LocalVarDecl -
  -
set_ParaList(Menge) - -Method in class mycompiler.mytype.RefType -
  -
set_Paratyp(Menge) - -Method in class mycompiler.myclass.DeclId -
  -
set_Receiver(Receiver) - -Method in class mycompiler.mystatement.MethodCall -
  -
set_ReturnExpr(Expr) - -Method in class mycompiler.mystatement.Return -
  -
set_statement(String) - -Method in class mycompiler.myexception.SCExcept -
  -
set_Statement(Statement) - -Method in class mycompiler.mystatement.Block -
  -
set_Statement_Menge(Menge) - -Method in class mycompiler.mystatement.Block -
  -
set_Status(Status) - -Method in class mycompiler.myclass.Class -
  -
set_String(String) - -Method in class mycompiler.mystatement.StringLiteral -
  -
set_string_index(short) - -Method in class mycompiler.mybytecode.CONSTANT_String_info -
  -
set_super_class(short) - -Method in class mycompiler.mybytecode.ClassFile -
  -
set_system_out(boolean) - -Method in class mycompiler.mybytecode.ClassFile -
  -
set_tag(byte) - -Method in class mycompiler.mybytecode.CPInfo -
  -
set_tag(byte) - -Method in class mycompiler.mybytecode.Key -
  -
set_Then_block(Statement) - -Method in class mycompiler.mystatement.IfStmt -
  -
set_this_class(short) - -Method in class mycompiler.mybytecode.ClassFile -
  -
set_Type(String) - -Method in class mycompiler.mybytecode.FieldInfo -
  -
set_Type(Type) - -Method in class mycompiler.mystatement.CastExpr -
  -
set_Type(Type) - -Method in class mycompiler.mystatement.Expr -
  -
set_Type(RefType) - -Method in class mycompiler.mystatement.InstanceOf -
  -
set_Typen(Menge) - -Method in class mycompiler.myclass.UsedId -
  -
set_UnaryMinus(UnaryMinus) - -Method in class mycompiler.mystatement.NegativeExpr -
  -
set_UnaryNot(UnaryNot) - -Method in class mycompiler.mystatement.NotExpr -
  -
set_UnaryPlus(UnaryPlus) - -Method in class mycompiler.mystatement.PositivExpr -
  -
set_UsedId(UsedId) - -Method in class mycompiler.myclass.Class -
  -
set_UsedId(UsedId) - -Method in class mycompiler.mystatement.Expr -
  -
set_UsedId(UsedId) - -Method in class mycompiler.mystatement.LocalOrFieldVar -
  -
set_UsedId(UsedId) - -Method in class mycompiler.mystatement.MethodCall -
  -
set_UsedId(UsedId) - -Method in class mycompiler.mystatement.NewClass -
  -
set_UsedId(UsedId) - -Method in class mycompiler.mystatement.This -
  -
set_UsedId(UsedId) - -Method in class mycompiler.mytype.Type -
  -
set_UserDef(UserDef) - -Method in class mycompiler.myclass.Status -
  -
set_Wert(ExprStmt) - -Method in class mycompiler.myclass.DeclId -
  -
setA(Menge<CTypeReconstructionResult>) - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
setAssumedType(Type) - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
setAssumptionSet(CTypeAssumptionSet) - -Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
Author: J�rg B�uerle
-
setAssumptionSet(CTypeAssumptionSet) - -Method in class mycompiler.mytypereconstruction.CTriple -
Author: J�rg B�uerle
-
setAssumSet(CTypeAssumptionSet) - -Method in class mycompiler.mytypereconstruction.CReconstructionTuple -
  -
setBlockId(String) - -Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -
  -
setBlockIdList(Menge<Integer>) - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
setClassName(String) - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
setCurrentBlockDepth(int) - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
setCurrentClass(String) - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
setCurrentMethod(String) - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
setCurrentMethodParaCount(int) - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
setDebugLevel(int) - -Method in class mycompiler.MyCompiler -
Author: J�rg B�uerle
- Setzt den Debug-Level -
setDebugLevel(int) - -Method in interface mycompiler.MyCompilerAPI -
Author: J�rg B�uerle
- Setzt den Debug-Level -
setDeclIdMenge(Menge) - -Method in class mycompiler.myclass.FieldDecl -
  -
setDeclidMenge(Menge) - -Method in class mycompiler.mystatement.LocalVarDecl -
  -
setFieldAndLocalVarAssumptions(Hashtable<CTypeAssumptionKey, CTypeAssumption>) - -Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
setFiniteClosure(FC_TTO) - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
setHashtable(Hashtable<IHashSetKey, E>) - -Method in class mycompiler.mytypereconstruction.set.CHashtableSet -
  -
setIdentifier(String) - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
setIntersectionTypeKey(CMethodKey) - -Method in class mycompiler.mytypereconstruction.CIntersectionType -
  -
setLineNumber(int) - -Method in class mycompiler.myclass.DeclId -
  -
setLineNumber(int) - -Method in class mycompiler.myclass.Method -
  -
setLineNumber(int) - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
setMethodName(String) - -Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -
  -
setMethodName(String) - -Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption -
  -
setMethodParaCount(int) - -Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -
  -
setMethodParaCount(int) - -Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption -
  -
setMethodTypeAssumptions(Menge<CMethodTypeAssumption>) - -Method in class mycompiler.mytypereconstruction.CIntersectionType -
  -
setName(String) - -Method in class mycompiler.mytype.RefType -
  -
setParalist(Menge) - -Method in class mycompiler.mytype.ParaList -
  -
setParameterList(ParameterList) - -Method in class mycompiler.myclass.Method -
  -
setResultType(Type) - -Method in class mycompiler.mytypereconstruction.CTriple -
Author: J�rg B�uerle
-
setResultTypes(Menge<Type>) - -Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
Author: J�rg B�uerle
-
setReturnType(Type) - -Method in class mycompiler.myclass.Method -

Author: J�rg B�uerle -
setSubSet(CSubstitutionSet) - -Method in class mycompiler.mytypereconstruction.CReconstructionTuple -
  -
setSubstitutions(CSubstitutionSet) - -Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
Author: J�rg B�uerle
-
setSubstitutions(CSubstitutionSet) - -Method in class mycompiler.mytypereconstruction.CTriple -
Author: J�rg B�uerle
-
setSubstitutions(CSubstitutionSet) - -Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
setType(Type) - -Method in class mycompiler.myclass.FormalParameter -

Author: J�rg B�uerle -
setType(Type) - -Method in class mycompiler.myclass.InstVarDecl -

Author: J�rg B�uerle -
setType(Type) - -Method in class mycompiler.mystatement.ExprStmt -

Author: J�rg B�uerle -
setType(Type) - -Method in class mycompiler.mystatement.LocalVarDecl -
  -
setType(Type) - -Method in class mycompiler.mystatement.NewArray -
Author: J�rg B�uerle
-
setType(Type) - -Method in class mycompiler.mytypereconstruction.CSubstitution -
Author: J�rg B�uerle
-
setTypeVar(TyploseVariable) - -Method in class mycompiler.mytypereconstruction.CSubstitution -
Author: J�rg B�uerle
-
setMenge(Menge<E>) - -Method in class mycompiler.mytypereconstruction.set.CMengeSet -
  -
shallowCopy() - -Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
shallowCopy() - -Method in class mycompiler.mytypereconstruction.set.CMultiplyTupleSet -
  -
shallowCopy() - -Method in class mycompiler.mytypereconstruction.set.CReconstructionTupleSet -
  -
shallowCopy() - -Method in class mycompiler.mytypereconstruction.set.CSet -
  -
shallowCopy() - -Method in class mycompiler.mytypereconstruction.set.CSubstitutionSet -
  -
shallowCopy() - -Method in class mycompiler.mytypereconstruction.set.CTripleSet -
  -
shallowCopy() - -Method in class mycompiler.mytypereconstruction.set.CTypeAssumptionSet -
  -
SHIFTLEFT - -Static variable in class mycompiler.myparser.JavaParser -
  -
SHIFTLEFTEQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
SHIFTRIGHT - -Static variable in class mycompiler.myparser.JavaParser -
  -
SIGNEDSHIFTRIGHT - -Static variable in class mycompiler.myparser.JavaParser -
  -
SIGNEDSHIFTRIGHTEQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
sipush - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
SourceFile - Class in mycompiler
 
SourceFile() - -Constructor for class mycompiler.SourceFile -
  -
Statement - Class in mycompiler.mystatement
 
Statement() - -Constructor for class mycompiler.mystatement.Statement -
  -
statements - -Variable in class mycompiler.mystatement.Block -
  -
Static - Class in mycompiler.mymodifier
 
Static() - -Constructor for class mycompiler.mymodifier.Static -
  -
STATIC - -Static variable in class mycompiler.myparser.JavaParser -
  -
Status - Class in mycompiler.myclass
 
Status() - -Constructor for class mycompiler.myclass.Status -
  -
String2Bool() - -Method in class mycompiler.myparser.Token -
  -
String2Int() - -Method in class mycompiler.myparser.Token -
  -
STRINGLITERAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
StringLiteral - Class in mycompiler.mystatement
 
StringLiteral() - -Constructor for class mycompiler.mystatement.StringLiteral -
  -
sub(CSubstitutionSet) - -Method in class mycompiler.mytypereconstruction.set.CTypeAssumptionSet -
  -
sub(CSubstitution) - -Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -
  -
sub(CSubstitutionSet) - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
sub(CSubstitution) - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
sub_unify(Menge, FC_TTO) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
Subst(Pair, int, TyploseVariable, Type, boolean) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
SubstHashtable(RefType, Hashtable) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
SubstHashtable2MengePair(Hashtable) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
subtract(CSet<E>) - -Method in class mycompiler.mytypereconstruction.set.CHashtableSet -
  -
subtract(CSet<E>) - -Method in class mycompiler.mytypereconstruction.set.CSet -
  -
subtract(CSet<E>) - -Method in class mycompiler.mytypereconstruction.set.CMengeSet -
  -
SUPER - -Static variable in class mycompiler.myparser.JavaParser -
  -
superclassid - -Variable in class mycompiler.myclass.Class -
  -
swap - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
SWITCH - -Static variable in class mycompiler.myparser.JavaParser -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-19.html b/doc/Javadoc/index-files/index-19.html deleted file mode 100755 index c109e409..00000000 --- a/doc/Javadoc/index-files/index-19.html +++ /dev/null @@ -1,497 +0,0 @@ - - - - - - -T-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-T

-
-
TA1 - -Variable in class mycompiler.mytype.Pair -
  -
TA2 - -Variable in class mycompiler.mytype.Pair -
  -
tableswitch - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
TestClass - Class in mycompiler.unused
 
TestClass() - -Constructor for class mycompiler.unused.TestClass -
  -
then_block - -Variable in class mycompiler.mystatement.IfStmt -
  -
THIS - -Static variable in class mycompiler.myparser.JavaParser -
  -
This - Class in mycompiler.mystatement
 
This() - -Constructor for class mycompiler.mystatement.This -
  -
THROW - -Static variable in class mycompiler.myparser.JavaParser -
  -
THROWS - -Static variable in class mycompiler.myparser.JavaParser -
  -
time() - -Static method in class mycompiler.mytypereconstruction.CHelper -
Author: J�rg B�uerle
- Liefert die aktuelle Zeit in Langformat zur�ck. -
TIMESEQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
TimesOp - Class in mycompiler.myoperator
 
TimesOp() - -Constructor for class mycompiler.myoperator.TimesOp -
  -
token() - -Method in interface mycompiler.myparser.JavaParser.yyInput -
classifies current token. -
token() - -Method in class mycompiler.myparser.Scanner -
  -
Token - Class in mycompiler.myparser
 
token - -Variable in class mycompiler.myparser.Token -
  -
toString() - -Method in class mycompiler.mytype.Pair -
  -
toString() - -Method in class mycompiler.mytype.Type -

Author: J�rg B�uerle -
toString() - -Method in class mycompiler.mytypereconstruction.CIntersectionType -

Author: J�rg B�uerle -
toString() - -Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
  -
toString() - -Method in class mycompiler.mytypereconstruction.CReconstructionTuple -
  -
toString() - -Method in class mycompiler.mytypereconstruction.CSubstitution -
  -
toString() - -Method in class mycompiler.mytypereconstruction.CTriple -
  -
toString() - -Method in class mycompiler.mytypereconstruction.set.CSet -
  -
toString() - -Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -
  -
toString() - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
toString() - -Method in class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey -

Author: J�rg B�uerle -
TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.myoperator.AddOp -
Implementierung der Algorithmen 5.44 und 5.45 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! -
TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.myoperator.EqualOp -
Implementierung des Algorithmus 5.53 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! -
TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.myoperator.LogOp -

Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! -
TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.myoperator.MulOp -
Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! -
TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.myoperator.NotEqualOp -
Implementierung des Algorithmus 5.54 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! -
TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.myoperator.Operator -
  -
TRExp(Binary, CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.myoperator.RelOp -
Implementierung der Algorithmen 5.49 bis 5.52 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.Assign -
Implementierung des Algorithmus 5.30 von Martin Pl�micke -
Author: J�rg B�uerle -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.Binary -
  -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.BoolLiteral -
Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann. -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.CastExpr -
Implementierung des Algorithmus 5.43 von Martin Pl�micke -
Author: J�rg B�uerle -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.CharLiteral -
Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann. -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.Expr -
  -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.InstanceOf -
  -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.InstVar -
Implementierung des Algorithmus 5.38 von Martin Pl�micke -
Author: J�rg B�uerle -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.IntLiteral -
Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann. -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.Literal -
Implementierung des Algorithmus 5.40 von Martin Pl�micke -
Author: J�rg B�uerle -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.LocalOrFieldVar -
Implementierung des Algorithmus 5.37 von Martin Pl�micke -
Author: J�rg B�uerle -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.MethodCall -
Implementierung des Algorithmus 5.33 von Martin Pl�micke -
Author: J�rg B�uerle -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.NegativeExpr -
Implementierung des Algorithmus 5.41 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.NewArray -
Implementierung des Algorithmus 5.32 von Martin Pl�micke -
Author: J�rg B�uerle -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.NewClass -
Implementierung des Algorithmus 5.31 von Martin Pl�micke -
Author: J�rg B�uerle -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.NotExpr -
Implementierung des Algorithmus 5.42 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.Null -
  -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.PositivExpr -
  -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.PostDecExpr -
Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden. -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.PostIncExpr -
Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden. -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.PreDecExpr -
Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden. -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.PreIncExpr -
Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden. -
TRExp(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.This -
Implementierung des Algorithmus 5.35 von Martin Pl�micke -
Author: J�rg B�uerle -
TRInstVar(CTriple, CSupportData) - -Method in class mycompiler.mystatement.InstVar -
Implementierung des Algorithmus 5.38-1 von Martin Pl�micke -
Author: J�rg B�uerle -
TRMCallApp(CMultiplyTuple, String, String, int, boolean, CSupportData) - -Static method in class mycompiler.mystatement.MethodCall -
Implementierung des Algorithmus 5.34 von Martin Pl�micke -
TRMultiply(CMultiplyTuple, Expr, CSupportData) - -Method in class mycompiler.mystatement.Expr -
(siehe Algorithmus 5.29 TRMultiply, Martin Pl�micke) -
Author: J�rg B�uerle -
TRProg(CSupportData) - -Method in class mycompiler.myclass.Class -
Ausgangspunkt f�r den Typrekonstruktionsalgorithmus. -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.Assign -
Implementierung des Algorithmus 5.25 von Martin Pl�micke -
Author: J�rg B�uerle -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.Binary -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.Block -
Implementierung des Algorithmus 5.20 von Martin Pl�micke -
Author: J�rg B�uerle -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.BoolLiteral -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.CastExpr -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.CharLiteral -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.EmptyStmt -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.IfStmt -
Implementierung des Algorithmus 5.21 von Martin Pl�micke -
Achtung Workaround: RefType "Boolean" durch BaseType \code{BooleanType} ersetzen. -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.InstanceOf -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.InstVar -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.IntLiteral -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.LocalOrFieldVar -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.LocalVarDecl -
Implementierung des Algorithmus 5.24 von Martin Pl�micke -
Author: J�rg B�uerle -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.MethodCall -
Implementierung des Algorithmus 5.27 von Martin Pl�micke -
Author: J�rg B�uerle -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.NegativeExpr -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.NewArray -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.NewClass -
Implementierung des Algorithmus 5.26 von Martin Pl�micke -
Author: J�rg B�uerle -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.NotExpr -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.Null -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.PositivExpr -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.PostDecExpr -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.PostIncExpr -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.PreDecExpr -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.PreIncExpr -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.Return -
Implementierung des Algorithmus 5.22 von Martin Pl�micke -
Author: J�rg B�uerle -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.Statement -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.StringLiteral -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.This -
  -
TRStatement(CSubstitutionSet, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.WhileStmt -
Implementierung des Algorithmus 5.23 von Martin Pl�micke -
Achtung Workaround: RefType "Boolean" muss noch durch BaseType "BooleanType" - ersetzt werden. -
TRStatements(CSubstitutionSet, CTypeAssumptionSet, Menge<Statement>, int, CTypeAssumptionSet, CSupportData) - -Method in class mycompiler.mystatement.Block -
Implementierung des Algorithmus 5.19 von Martin Pl�micke -
Author: J�rg B�uerle -
TRTuple(CMultiplyTuple, Menge<Expr>, CSupportData) - -Method in class mycompiler.mystatement.Expr -
(siehe Algorithmus 5.28 TRTuple, Martin Pl�micke) -
Author: J�rg B�uerle -
TRY - -Static variable in class mycompiler.myparser.JavaParser -
  -
type - -Variable in class mycompiler.mystatement.ExprStmt -
  -
Type - Class in mycompiler.mytype
 
Type(String) - -Constructor for class mycompiler.mytype.Type -
  -
Type() - -Constructor for class mycompiler.mytype.Type -
  -
Type2Key() - -Method in class mycompiler.mytype.RefType -
  -
Type2Key() - -Method in class mycompiler.mytype.Type -
  -
Type2String() - -Method in class mycompiler.mytype.RefType -
  -
Type2String() - -Method in class mycompiler.mytype.Type -
  -
TYPE_ANALYSIS_INFO - -Static variable in class mycompiler.MyCompiler -
  -
type_check(CodeAttribute) - -Method in class mycompiler.mystatement.Binary -
  -
typeReconstruction() - -Method in class mycompiler.MyCompiler -
Author: J�rg B�uerle
- Ruft den Typrekonstruktionsalgorithmus auf. -
typeReconstruction() - -Method in interface mycompiler.MyCompilerAPI -
Author: J�rg B�uerle
- Ruft den Typrekonstruktionsalgorithmus auf. -
typeReconstruction() - -Method in class mycompiler.SourceFile -
Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf. -
TyploseVariable - Class in mycompiler.mytype
Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben Typ.
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-2.html b/doc/Javadoc/index-files/index-2.html deleted file mode 100755 index 2b69234d..00000000 --- a/doc/Javadoc/index-files/index-2.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - -B-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-B

-
-
backdoorCreate(String) - -Static method in class mycompiler.mytype.TyploseVariable -
Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, - zum Erzeugen einer TyplosenVariable, die nicht in der zentralen Registry eingetragen - wird. -
backdoorFresh() - -Static method in class mycompiler.mytype.TyploseVariable -
Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, - um neue typlose Variablen zu erzeugen. -
backdoorSetName(String) - -Method in class mycompiler.mytype.TyploseVariable -
Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, - um den Namen einer typlosen Variablen zu ver�ndern. -
baload - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
BaseType - Class in mycompiler.mytype
 
BaseType() - -Constructor for class mycompiler.mytype.BaseType -
  -
BaseType(String) - -Constructor for class mycompiler.mytype.BaseType -
  -
bastore - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
bEqual - -Variable in class mycompiler.mytype.Pair -
  -
Binary - Class in mycompiler.mystatement
 
Binary() - -Constructor for class mycompiler.mystatement.Binary -
  -
BinaryExpr - Class in mycompiler.mystatement
 
BinaryExpr() - -Constructor for class mycompiler.mystatement.BinaryExpr -
  -
bipush - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
Block - Class in mycompiler.mystatement
 
Block() - -Constructor for class mycompiler.mystatement.Block -
  -
BOOLEAN - -Static variable in class mycompiler.myparser.JavaParser -
  -
BooleanType - Class in mycompiler.mytype
 
BooleanType() - -Constructor for class mycompiler.mytype.BooleanType -
  -
BOOLLITERAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
BoolLiteral - Class in mycompiler.mystatement
 
BoolLiteral() - -Constructor for class mycompiler.mystatement.BoolLiteral -
  -
BRACE - -Static variable in class mycompiler.myparser.JavaParser -
  -
BREAK - -Static variable in class mycompiler.myparser.JavaParser -
  -
breakpoint - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
bSubst - -Variable in class mycompiler.mytype.Pair -
  -
build(ClassFile, CodeAttribute, Expr, Menge, boolean, boolean, boolean, Menge) - -Static method in class mycompiler.myoperator.LogOp -
  -
bytes_to_int(Byte, Byte, Byte, Byte) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
bytes_to_int(Byte, Byte) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
bytes_to_int(Byte) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-20.html b/doc/Javadoc/index-files/index-20.html deleted file mode 100755 index de61bf7b..00000000 --- a/doc/Javadoc/index-files/index-20.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - -U-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-U

-
-
UnaryExpr - Class in mycompiler.mystatement
 
UnaryExpr() - -Constructor for class mycompiler.mystatement.UnaryExpr -
  -
UnaryMinus - Class in mycompiler.mystatement
 
UnaryMinus() - -Constructor for class mycompiler.mystatement.UnaryMinus -
  -
UnaryNot - Class in mycompiler.mystatement
 
UnaryNot() - -Constructor for class mycompiler.mystatement.UnaryNot -
  -
UnaryPlus - Class in mycompiler.mystatement
 
UnaryPlus() - -Constructor for class mycompiler.mystatement.UnaryPlus -
  -
UNIFICATION_INFO - -Static variable in class mycompiler.MyCompiler -
  -
Unify - Class in mycompiler.mytypereconstruction.unify
Implementierung des Unifizierungsalgorithmus
Unify() - -Constructor for class mycompiler.mytypereconstruction.unify.Unify -
  -
unify(Type, Type, FC_TTO) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
unify(Menge<Pair>, FC_TTO) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
unite(CSet<E>) - -Method in class mycompiler.mytypereconstruction.set.CHashtableSet -
  -
unite(CSet<E>) - -Method in class mycompiler.mytypereconstruction.set.CSet -
  -
unite(CSet<E>) - -Method in class mycompiler.mytypereconstruction.set.CMengeSet -
  -
UNSIGNEDSHIFTRIGHT - -Static variable in class mycompiler.myparser.JavaParser -
  -
UNSIGNEDSHIFTRIGHTEQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
used - -Variable in class mycompiler.mytype.Type -
  -
UsedId - Class in mycompiler.myclass
 
UsedId() - -Constructor for class mycompiler.myclass.UsedId -
  -
usedid - -Variable in class mycompiler.mystatement.Expr -
  -
UserDef - Class in mycompiler.myclass
 
UserDef() - -Constructor for class mycompiler.myclass.UserDef -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-21.html b/doc/Javadoc/index-files/index-21.html deleted file mode 100755 index 734cea23..00000000 --- a/doc/Javadoc/index-files/index-21.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - -V-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-V

-
-
value() - -Method in interface mycompiler.myparser.JavaParser.yyInput -
associated with current token. -
value() - -Method in class mycompiler.myparser.Scanner -
  -
varSubst(RefType, Hashtable) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
MengePair2SubstHashtableMengePair(Menge<Pair>) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
VOID - -Static variable in class mycompiler.myparser.JavaParser -
  -
Void - Class in mycompiler.mytype
 
Void() - -Constructor for class mycompiler.mytype.Void -
  -
vParaOrg - -Variable in class mycompiler.myclass.Class -
  -
vParaOrg - -Variable in class mycompiler.myclass.UsedId -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-22.html b/doc/Javadoc/index-files/index-22.html deleted file mode 100755 index 2cf982cf..00000000 --- a/doc/Javadoc/index-files/index-22.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -W-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-W

-
-
WHILE - -Static variable in class mycompiler.myparser.JavaParser -
  -
WhileStmt - Class in mycompiler.mystatement
 
WhileStmt() - -Constructor for class mycompiler.mystatement.WhileStmt -
  -
wide - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
writeByte(FileOutputStream, byte) - -Method in class mycompiler.mybytecode.ClassFile -
  -
writeByteArray(FileOutputStream, byte[]) - -Method in class mycompiler.mybytecode.ClassFile -
  -
writeInt(FileOutputStream, int) - -Method in class mycompiler.mybytecode.ClassFile -
  -
writeShort(FileOutputStream, short) - -Method in class mycompiler.mybytecode.ClassFile -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-23.html b/doc/Javadoc/index-files/index-23.html deleted file mode 100755 index 6b0ccf0f..00000000 --- a/doc/Javadoc/index-files/index-23.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - -X-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-X

-
-
XOREQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-24.html b/doc/Javadoc/index-files/index-24.html deleted file mode 100755 index 7b9910d8..00000000 --- a/doc/Javadoc/index-files/index-24.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -Y-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-Y

-
-
yyCheck - -Variable in class mycompiler.myparser.JavaParser -
  -
yyDefault(Object) - -Method in class mycompiler.myparser.JavaParser -
executed at the beginning of a reduce action. -
yyDefRed - -Static variable in class mycompiler.myparser.JavaParser -
  -
yyDgoto - -Static variable in class mycompiler.myparser.JavaParser -
  -
yyerror(String) - -Method in class mycompiler.myparser.JavaParser -
simplified error message. -
yyerror(String, String[]) - -Method in class mycompiler.myparser.JavaParser -
(syntax) error message. -
yyErrorCode - -Static variable in class mycompiler.myparser.JavaParser -
  -
yyExpecting(int) - -Method in class mycompiler.myparser.JavaParser -
computes list of expected tokens on error by tracing the tables. -
yyFinal - -Static variable in class mycompiler.myparser.JavaParser -
debugging support, requires the package jay.yydebug. -
yyGindex - -Static variable in class mycompiler.myparser.JavaParser -
  -
yyLen - -Static variable in class mycompiler.myparser.JavaParser -
  -
yylex() - -Method in class mycompiler.myparser.JavaLexer -
  -
yyLhs - -Static variable in class mycompiler.myparser.JavaParser -
  -
yyMax - -Variable in class mycompiler.myparser.JavaParser -
initial size and increment of the state/value stack [default 256]. -
yyName - -Static variable in class mycompiler.myparser.JavaParser -
  -
yyparse(JavaParser.yyInput, Object) - -Method in class mycompiler.myparser.JavaParser -
the generated parser, with debugging messages. -
yyparse(JavaParser.yyInput) - -Method in class mycompiler.myparser.JavaParser -
the generated parser. -
yyRindex - -Static variable in class mycompiler.myparser.JavaParser -
  -
yySindex - -Static variable in class mycompiler.myparser.JavaParser -
  -
yyTable - -Static variable in class mycompiler.myparser.JavaParser -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-3.html b/doc/Javadoc/index-files/index-3.html deleted file mode 100755 index 3e116698..00000000 --- a/doc/Javadoc/index-files/index-3.html +++ /dev/null @@ -1,737 +0,0 @@ - - - - - - -C-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-C

-
-
calculate_access_flags() - -Method in class mycompiler.mymodifier.Modifiers -
  -
call_sc_check(Menge, Hashtable, boolean, Hashtable) - -Method in class mycompiler.myclass.Method -
  -
caload - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
CASE - -Static variable in class mycompiler.myparser.JavaParser -
  -
CastExpr - Class in mycompiler.mystatement
 
CastExpr() - -Constructor for class mycompiler.mystatement.CastExpr -
  -
castore - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
CATCH - -Static variable in class mycompiler.myparser.JavaParser -
  -
CHAR - -Static variable in class mycompiler.myparser.JavaParser -
  -
CharacterType - Class in mycompiler.mytype
 
CharacterType() - -Constructor for class mycompiler.mytype.CharacterType -
  -
CharInString() - -Method in class mycompiler.myparser.Token -
  -
CHARLITERAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
CharLiteral - Class in mycompiler.mystatement
 
CharLiteral() - -Constructor for class mycompiler.mystatement.CharLiteral -
  -
CHashtableSet<E extends IHashSetElement> - Class in mycompiler.mytypereconstruction.set
 
CHashtableSet() - -Constructor for class mycompiler.mytypereconstruction.set.CHashtableSet -
Author: J�rg B�uerle
-
check_anz(Type, Menge, Menge) - -Method in class mycompiler.mystatement.LocalVarDecl -
  -
checkcast - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
CHelper - Class in mycompiler.mytypereconstruction
 
CHelper() - -Constructor for class mycompiler.mytypereconstruction.CHelper -
  -
CInstVarKey - Class in mycompiler.mytypereconstruction.typeassumptionkey
 
CInstVarKey(String, String) - -Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CInstVarKey -
  -
CInstVarTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
 
CInstVarTypeAssumption(String, String, Type, int) - -Constructor for class mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption -
  -
CIntersectionType - Class in mycompiler.mytypereconstruction
Ein CIntersectionType gruppiert alle Typm�glichkeiten einer - bestimmten Methode, die �ber den CMethodKey eindeutig definiert ist.
CIntersectionType(String, String, int) - -Constructor for class mycompiler.mytypereconstruction.CIntersectionType -
  -
CIntersectionType(CMethodTypeAssumption) - -Constructor for class mycompiler.mytypereconstruction.CIntersectionType -
  -
Class - Class in mycompiler.myclass
 
Class() - -Constructor for class mycompiler.myclass.Class -
  -
CLASS - -Static variable in class mycompiler.myparser.JavaParser -
  -
ClassBody - Class in mycompiler.myclass
 
ClassBody() - -Constructor for class mycompiler.myclass.ClassBody -
  -
ClassDeclId - Class in mycompiler.myclass
 
ClassDeclId() - -Constructor for class mycompiler.myclass.ClassDeclId -
  -
ClassFile - Class in mycompiler.mybytecode
 
ClassFile(boolean) - -Constructor for class mycompiler.mybytecode.ClassFile -
  -
CLocalVarKey - Class in mycompiler.mytypereconstruction.typeassumptionkey
 
CLocalVarKey(String, String, int, String, String) - -Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey -
  -
CLocalVarTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
 
CLocalVarTypeAssumption(String, String, int, String, String, Type, int) - -Constructor for class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -
  -
clone() - -Method in class mycompiler.mytype.BaseType -
  -
clone() - -Method in class mycompiler.mytype.BooleanType -

Author: J�rg B�uerle -
clone() - -Method in class mycompiler.mytype.CharacterType -

Author: J�rg B�uerle -
clone() - -Method in class mycompiler.mytype.GenericTypeVar -

Author: J�rg B�uerle -
clone() - -Method in class mycompiler.mytype.IntegerType -

Author: J�rg B�uerle -
clone() - -Method in class mycompiler.mytype.RefType -
  -
clone() - -Method in class mycompiler.mytype.ReturnType -

Author: J�rg B�uerle -
clone() - -Method in class mycompiler.mytype.Type -

Author: J�rg B�uerle -
clone() - -Method in class mycompiler.mytype.TyploseVariable -
Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die Registrierung neuer - Listener �ber die zentrale Instanz in der Registry laufen muss. -
clone() - -Method in class mycompiler.mytype.Void -

Author: J�rg B�uerle -
clone() - -Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
  -
clone() - -Method in class mycompiler.mytypereconstruction.CReconstructionTuple -
  -
clone() - -Method in class mycompiler.mytypereconstruction.CSubstitution -
  -
clone() - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
clone() - -Method in class mycompiler.mytypereconstruction.CTriple -
  -
clone() - -Method in class mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption -
  -
clone() - -Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -
  -
clone() - -Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -

Author: J�rg B�uerle -
clone() - -Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption -

Author: J�rg B�uerle -
clone() - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
cloneAndApplyUnify(CSubstitutionSet) - -Method in class mycompiler.mytypereconstruction.CTriple -
Kopiert dieses Triple und wendet alle Substitutionen eines Unifiers auf - die Kopie an. -
CMethodKey - Class in mycompiler.mytypereconstruction.typeassumptionkey
 
CMethodKey(String, String, int) - -Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey -
  -
CMethodParaKey - Class in mycompiler.mytypereconstruction.typeassumptionkey
 
CMethodParaKey(String, String, int, String) - -Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey -
  -
CMethodTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
 
CMethodTypeAssumption(String, String, Type, int) - -Constructor for class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -
  -
CMultiplyTuple - Class in mycompiler.mytypereconstruction
Container-Klasse f�r Ergebniswerte der Algorithmen TRTuple und TRMultiply.
CMultiplyTuple() - -Constructor for class mycompiler.mytypereconstruction.CMultiplyTuple -
Author: J�rg B�uerle
-
CMultiplyTuple(CSubstitutionSet, Menge<Type>, CTypeAssumptionSet) - -Constructor for class mycompiler.mytypereconstruction.CMultiplyTuple -
  -
CMultiplyTupleSet - Class in mycompiler.mytypereconstruction.set
 
CMultiplyTupleSet() - -Constructor for class mycompiler.mytypereconstruction.set.CMultiplyTupleSet -
  -
CodeAttribute - Class in mycompiler.mybytecode
 
CodeAttribute(String, short) - -Constructor for class mycompiler.mybytecode.CodeAttribute -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.Attribute -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.AttributeInfo -
  -
codegen() - -Method in class mycompiler.mybytecode.ClassFile -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.CONSTANT_Class_info -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.CONSTANT_Double_info -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.CONSTANT_Fieldref_info -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.CONSTANT_Float_info -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.CONSTANT_Integer_info -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.CONSTANT_Long_info -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.CONSTANT_Methodref_info -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.CONSTANT_NameAndType_info -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.CONSTANT_String_info -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.CONSTANT_Utf8_info -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.CPInfo -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.ExceptionTable -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.FieldInfo -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.Key -
  -
codegen(ClassFile, FileOutputStream) - -Method in class mycompiler.mybytecode.MethodInfo -
  -
codegen(boolean) - -Method in class mycompiler.myclass.Class -
  -
codegen(ClassFile, Menge) - -Method in class mycompiler.myclass.ClassBody -
  -
codegen(ClassFile, Menge) - -Method in class mycompiler.myclass.Constructor -
  -
codegen(ClassFile, Menge) - -Method in class mycompiler.myclass.FieldDecl -
  -
codegen(ClassFile, CodeAttribute) - -Method in class mycompiler.myclass.FormalParameter -
  -
codegen(ClassFile, Menge) - -Method in class mycompiler.myclass.InstVarDecl -
  -
codegen(ClassFile, Menge) - -Method in class mycompiler.myclass.Method -
  -
codegen(ClassFile, CodeAttribute) - -Method in class mycompiler.myclass.ParameterList -
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - -Method in class mycompiler.myoperator.AddOp -
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - -Method in class mycompiler.myoperator.DivideOp -
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - -Method in class mycompiler.myoperator.EqualOp -
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - -Method in class mycompiler.myoperator.GreaterEquOp -
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - -Method in class mycompiler.myoperator.GreaterOp -
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - -Method in class mycompiler.myoperator.LessEquOp -
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - -Method in class mycompiler.myoperator.LessOp -
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - -Method in class mycompiler.myoperator.LogOp -
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - -Method in class mycompiler.myoperator.MinusOp -
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - -Method in class mycompiler.myoperator.ModuloOp -
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - -Method in class mycompiler.myoperator.NotEqualOp -
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - -Method in class mycompiler.myoperator.Operator -
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - -Method in class mycompiler.myoperator.PlusOp -
  -
codegen(ClassFile, CodeAttribute, Expr, boolean, Menge) - -Method in class mycompiler.myoperator.TimesOp -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.ArgumentList -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.Assign -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.Binary -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.Block -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.BoolLiteral -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.CastExpr -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.CharLiteral -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.EmptyStmt -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.IfStmt -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.InstanceOf -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.InstVar -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.IntLiteral -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.LocalOrFieldVar -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.LocalVarDecl -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.MethodCall -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.NegativeExpr -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.NewArray -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.NewClass -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.NotExpr -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.Null -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.PositivExpr -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.PostDecExpr -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.PostIncExpr -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.PreDecExpr -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.PreIncExpr -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.Return -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.Statement -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.StringLiteral -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.This -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.UnaryExpr -
  -
codegen(ClassFile, CodeAttribute, String, boolean) - -Method in class mycompiler.mystatement.UnaryMinus -
  -
codegen(ClassFile, CodeAttribute, boolean) - -Method in class mycompiler.mystatement.UnaryNot -
  -
codegen(ClassFile, CodeAttribute, Menge) - -Method in class mycompiler.mystatement.WhileStmt -
  -
codegen(boolean) - -Method in class mycompiler.SourceFile -
  -
codegen_InstVarDecl(ClassFile, Type, Menge) - -Method in class mycompiler.myclass.DeclId -
  -
codegen_LocalVarDecl(ClassFile, CodeAttribute, Type, Menge) - -Method in class mycompiler.myclass.DeclId -
  -
codeGeneration() - -Method in class mycompiler.MyCompiler -
Author: J�rg B�uerle
- Generiert den Bytecode und das Class-File f�r den Syntaxbaum. -
codeGeneration() - -Method in interface mycompiler.MyCompilerAPI -
Author: J�rg B�uerle
- Generiert den Bytecode und das Class-File f�r den Syntaxbaum. -
complete_parahashtable(Menge, UsedId, Hashtable, boolean) - -Method in class mycompiler.myclass.ClassBody -
  -
complete_paralist(boolean) - -Method in class mycompiler.myclass.Class -
  -
CONSTANT_Class - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
CONSTANT_Class_info - Class in mycompiler.mybytecode
 
CONSTANT_Class_info() - -Constructor for class mycompiler.mybytecode.CONSTANT_Class_info -
  -
CONSTANT_Double - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
CONSTANT_Double_info - Class in mycompiler.mybytecode
 
CONSTANT_Double_info() - -Constructor for class mycompiler.mybytecode.CONSTANT_Double_info -
  -
CONSTANT_Fieldref - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
CONSTANT_Fieldref_info - Class in mycompiler.mybytecode
 
CONSTANT_Fieldref_info() - -Constructor for class mycompiler.mybytecode.CONSTANT_Fieldref_info -
  -
CONSTANT_Float - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
CONSTANT_Float_info - Class in mycompiler.mybytecode
 
CONSTANT_Float_info() - -Constructor for class mycompiler.mybytecode.CONSTANT_Float_info -
  -
CONSTANT_Integer - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
CONSTANT_Integer_info - Class in mycompiler.mybytecode
 
CONSTANT_Integer_info() - -Constructor for class mycompiler.mybytecode.CONSTANT_Integer_info -
  -
CONSTANT_InterfaceMethodref - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
CONSTANT_InterfaceMethodref_info - Class in mycompiler.mybytecode
 
CONSTANT_InterfaceMethodref_info() - -Constructor for class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info -
  -
CONSTANT_Long - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
CONSTANT_Long_info - Class in mycompiler.mybytecode
 
CONSTANT_Long_info() - -Constructor for class mycompiler.mybytecode.CONSTANT_Long_info -
  -
CONSTANT_Methodref - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
CONSTANT_Methodref_info - Class in mycompiler.mybytecode
 
CONSTANT_Methodref_info() - -Constructor for class mycompiler.mybytecode.CONSTANT_Methodref_info -
  -
CONSTANT_NameAndType - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
CONSTANT_NameAndType_info - Class in mycompiler.mybytecode
 
CONSTANT_NameAndType_info() - -Constructor for class mycompiler.mybytecode.CONSTANT_NameAndType_info -
  -
CONSTANT_String - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
CONSTANT_String_info - Class in mycompiler.mybytecode
 
CONSTANT_String_info() - -Constructor for class mycompiler.mybytecode.CONSTANT_String_info -
  -
CONSTANT_Utf8 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
CONSTANT_Utf8_info - Class in mycompiler.mybytecode
 
CONSTANT_Utf8_info() - -Constructor for class mycompiler.mybytecode.CONSTANT_Utf8_info -
  -
ConstantValueAttribute - Class in mycompiler.unused
 
ConstantValueAttribute() - -Constructor for class mycompiler.unused.ConstantValueAttribute -
  -
Constructor - Class in mycompiler.myclass
 
Constructor() - -Constructor for class mycompiler.myclass.Constructor -
  -
contains(E) - -Method in class mycompiler.mytypereconstruction.set.CHashtableSet -
  -
contains(E) - -Method in class mycompiler.mytypereconstruction.set.CSet -
  -
contains(E) - -Method in class mycompiler.mytypereconstruction.set.CMengeSet -
  -
containsListener(ITypeReplacementListener) - -Method in class mycompiler.mytype.TyploseVariable -

Author: J�rg B�uerle -
containsListener(ITypeReplacementListener) - -Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider -
  -
CONTINUE - -Static variable in class mycompiler.myparser.JavaParser -
  -
copyPair() - -Method in class mycompiler.mytype.Pair -
  -
copyType(Type) - -Static method in class mycompiler.mytype.Pair -
  -
copyMengePair(Menge<Pair>) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
copyMengeMengePair(Menge<Menge<Pair>>) - -Method in class mycompiler.mytypereconstruction.unify.Unify -
  -
CParaTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
 
CParaTypeAssumption(String, String, int, String, Type, int) - -Constructor for class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption -
  -
CPInfo - Class in mycompiler.mybytecode
 
CPInfo() - -Constructor for class mycompiler.mybytecode.CPInfo -
  -
createNotImplementedException() - -Static method in exception mycompiler.myexception.CTypeReconstructionException -
  -
CReconstructionTuple - Class in mycompiler.mytypereconstruction
Container-Klasse f�r Ergebniswerte des Algorithmus TRStart.
CReconstructionTuple() - -Constructor for class mycompiler.mytypereconstruction.CReconstructionTuple -
  -
CReconstructionTuple(CSubstitutionSet, CTypeAssumptionSet) - -Constructor for class mycompiler.mytypereconstruction.CReconstructionTuple -
  -
CReconstructionTupleSet - Class in mycompiler.mytypereconstruction.set
 
CReconstructionTupleSet() - -Constructor for class mycompiler.mytypereconstruction.set.CReconstructionTupleSet -
  -
CReplaceTypeEvent - Class in mycompiler.mytypereconstruction.replacementlistener
 
CReplaceTypeEvent(Type, Type) - -Constructor for class mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent -
  -
CSet<E> - Class in mycompiler.mytypereconstruction.set
 
CSet() - -Constructor for class mycompiler.mytypereconstruction.set.CSet -
  -
CSimpleTest - Class in mycompiler.mytest
Testklasse f�r die Compiler-API
CSimpleTest() - -Constructor for class mycompiler.mytest.CSimpleTest -
  -
CSubstitution - Class in mycompiler.mytypereconstruction
Implementierung einer Typsubstitution.
CSubstitution() - -Constructor for class mycompiler.mytypereconstruction.CSubstitution -
  -
CSubstitution(TyploseVariable, Type) - -Constructor for class mycompiler.mytypereconstruction.CSubstitution -
  -
CSubstitution(Pair) - -Constructor for class mycompiler.mytypereconstruction.CSubstitution -
  -
CSubstitutionSet - Class in mycompiler.mytypereconstruction.set
 
CSubstitutionSet() - -Constructor for class mycompiler.mytypereconstruction.set.CSubstitutionSet -
  -
CSubstitutionSet(Menge<Pair>) - -Constructor for class mycompiler.mytypereconstruction.set.CSubstitutionSet -
  -
CSupportData - Class in mycompiler.mytypereconstruction
Container-Klasse f�r bestimmte Hilfsdaten, die beim - Typrekonstruktionsalgorithmus ben�tigt und deshalb - rekursiv weiter gereicht werden.
CSupportData(FC_TTO, Menge<CTypeReconstructionResult>, String) - -Constructor for class mycompiler.mytypereconstruction.CSupportData -
  -
CSupportData(FC_TTO, Menge<CTypeReconstructionResult>, String, String, int, Menge<Integer>, int) - -Constructor for class mycompiler.mytypereconstruction.CSupportData -
  -
CTriple - Class in mycompiler.mytypereconstruction
Container-Klasse f�r Ergebniswerte der Algorithmen TRStmt und TRExp.
CTriple() - -Constructor for class mycompiler.mytypereconstruction.CTriple -
Author: J�rg B�uerle
-
CTriple(CSubstitutionSet, Type, CTypeAssumptionSet) - -Constructor for class mycompiler.mytypereconstruction.CTriple -
  -
CTripleSet - Class in mycompiler.mytypereconstruction.set
 
CTripleSet() - -Constructor for class mycompiler.mytypereconstruction.set.CTripleSet -
  -
CTypeAssumption - Class in mycompiler.mytypereconstruction.typeassumption
Diese Klasse repr�sentiert eine Typannahme und bildet einen - Bezeichner innerhalb einer bestimmten Klasse auf einen angenommenen - Typ ab.
CTypeAssumption(String, String, Type, int) - -Constructor for class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
CTypeAssumptionKey - Class in mycompiler.mytypereconstruction.typeassumptionkey
Diese Klasse modelliert einen eindeutigen Schl�ssel f�r eine Typannahme, - die in einem CTypeAssumptionSet abgelegt wird.
CTypeAssumptionKey() - -Constructor for class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey -
  -
CTypeAssumptionSet - Class in mycompiler.mytypereconstruction.set
 
CTypeAssumptionSet() - -Constructor for class mycompiler.mytypereconstruction.set.CTypeAssumptionSet -
  -
CTypeReconstructionException - Exception in mycompiler.myexception
 
CTypeReconstructionException(String) - -Constructor for exception mycompiler.myexception.CTypeReconstructionException -
  -
CTypeReconstructionResult - Class in mycompiler.mytypereconstruction
Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche Typkombination - aller Klassen und deren Methoden sowie lokalen Variablen.
CTypeReconstructionResult() - -Constructor for class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
CMengeSet<E> - Class in mycompiler.mytypereconstruction.set
 
CMengeSet() - -Constructor for class mycompiler.mytypereconstruction.set.CMengeSet -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-4.html b/doc/Javadoc/index-files/index-4.html deleted file mode 100755 index f85a9a9c..00000000 --- a/doc/Javadoc/index-files/index-4.html +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - -D-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-D

-
-
d2f - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
d2i - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
d2l - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dadd - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
daload - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dastore - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dcmpg - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dcmpl - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dconst_0 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dconst_1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ddiv - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
DebugLevel - -Static variable in class mycompiler.MyCompiler -
  -
decBlockDepth() - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
DeclId - Class in mycompiler.myclass
 
DeclId() - -Constructor for class mycompiler.myclass.DeclId -
  -
DeclId(String) - -Constructor for class mycompiler.myclass.DeclId -
  -
declid - -Variable in class mycompiler.myclass.FieldDecl -
  -
DECREMENT - -Static variable in class mycompiler.myparser.JavaParser -
  -
deepCopy() - -Method in class mycompiler.mytypereconstruction.set.CMultiplyTupleSet -
  -
deepCopy() - -Method in class mycompiler.mytypereconstruction.set.CReconstructionTupleSet -

Author: Jörg Bäuerle -
deepCopy() - -Method in class mycompiler.mytypereconstruction.set.CSet -
  -
deepCopy() - -Method in class mycompiler.mytypereconstruction.set.CSubstitutionSet -
  -
deepCopy() - -Method in class mycompiler.mytypereconstruction.set.CTripleSet -
  -
deepCopy() - -Method in class mycompiler.mytypereconstruction.set.CTypeAssumptionSet -
  -
DEFAULT - -Static variable in class mycompiler.myparser.JavaParser -
  -
deleteRegistry() - -Static method in class mycompiler.mytype.TyploseVariable -
Löscht die komplette Registry von TyplosenVariablen. -
DIVIDEEQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
DivideOp - Class in mycompiler.myoperator
 
DivideOp() - -Constructor for class mycompiler.myoperator.DivideOp -
  -
dload - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dload_0 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dload_1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dload_2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dload_3 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dmul - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dneg - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
DO - -Static variable in class mycompiler.myparser.JavaParser -
  -
does_Class_extend() - -Method in class mycompiler.myclass.Class -
  -
drem - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dreturn - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dstore - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dstore_0 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dstore_1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dstore_2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dstore_3 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dsub - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dup - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dup2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dup2_x1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dup2_x2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dup_x1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
dup_x2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-5.html b/doc/Javadoc/index-files/index-5.html deleted file mode 100755 index a0a853e8..00000000 --- a/doc/Javadoc/index-files/index-5.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - -E-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-E

-
-
ELSE - -Static variable in class mycompiler.myparser.JavaParser -
  -
else_block - -Variable in class mycompiler.mystatement.IfStmt -
  -
EmptyStmt - Class in mycompiler.mystatement
 
EmptyStmt() - -Constructor for class mycompiler.mystatement.EmptyStmt -
  -
EOF - -Static variable in class mycompiler.myparser.JavaParser -
  -
EQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
EqualOp - Class in mycompiler.myoperator
 
EqualOp() - -Constructor for class mycompiler.myoperator.EqualOp -
  -
equals(Object) - -Method in class mycompiler.mybytecode.Key -
  -
equals(Object) - -Method in class mycompiler.mytype.BaseType -
Author: J�rg B�uerle
-
equals(Object) - -Method in class mycompiler.mytype.BooleanType -
Author: J�rg B�uerle
-
equals(Object) - -Method in class mycompiler.mytype.CharacterType -
Author: J�rg B�uerle
-
equals(Object) - -Method in class mycompiler.mytype.GenericTypeVar -

Author: J�rg B�uerle -
equals(Object) - -Method in class mycompiler.mytype.IntegerType -
Author: J�rg B�uerle
-
equals(Object) - -Method in class mycompiler.mytype.Pair -

Author: J�rg B�uerle -
equals(Object) - -Method in class mycompiler.mytype.RefType -
Author: J�rg B�uerle
-
equals(Object) - -Method in class mycompiler.mytype.ReturnType -
Author: J�rg B�uerle
-
equals(Object) - -Method in class mycompiler.mytype.Type -
Author: J�rg B�uerle
-
equals(Object) - -Method in class mycompiler.mytype.TyploseVariable -
Author: J�rg B�uerle
-
equals(Object) - -Method in class mycompiler.mytype.Void -
Author: J�rg B�uerle
-
equals(Object) - -Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
  -
equals(Object) - -Method in class mycompiler.mytypereconstruction.CReconstructionTuple -
  -
equals(Object) - -Method in class mycompiler.mytypereconstruction.CSubstitution -
  -
equals(Object) - -Method in class mycompiler.mytypereconstruction.CTriple -
  -
equals(Object) - -Method in class mycompiler.mytypereconstruction.set.CHashtableSet -
  -
equals(Object) - -Method in class mycompiler.mytypereconstruction.set.CSet -
  -
equals(Object) - -Method in class mycompiler.mytypereconstruction.set.CMengeSet -
  -
equals(Object) - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
equals(Object) - -Method in class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey -
Author: J�rg B�uerle
-
equalsAssumption(CTypeAssumption) - -Method in class mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption -

Author: J�rg B�uerle -
equalsAssumption(CTypeAssumption) - -Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -

Author: J�rg B�uerle -
equalsAssumption(CTypeAssumption) - -Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -

Author: J�rg B�uerle -
equalsAssumption(CTypeAssumption) - -Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption -

Author: J�rg B�uerle -
equalsAssumption(CTypeAssumption) - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
Equiv2Equal(RefType, Hashtable) - -Method in class mycompiler.mytype.RefType -
  -
ExceptionList - Class in mycompiler.myclass
 
ExceptionList() - -Constructor for class mycompiler.myclass.ExceptionList -
  -
ExceptionTable - Class in mycompiler.mybytecode
 
ExceptionTable() - -Constructor for class mycompiler.mybytecode.ExceptionTable -
  -
execute() - -Method in class mycompiler.mytypereconstruction.CSubstitution -
Sucht die eindeutige Instanz der TyplosenVariable in der Registry der - TyplosenVariablen des Syntaxbaumes und f�hrt die Typsubstitution im - Syntaxbaum durch. -
execute() - -Method in class mycompiler.mytypereconstruction.set.CSubstitutionSet -
F�hrt jede einzelne CSubstitution aus. -
expr - -Variable in class mycompiler.mystatement.ArgumentList -
  -
Expr - Class in mycompiler.mystatement
 
Expr() - -Constructor for class mycompiler.mystatement.Expr -
  -
expr - -Variable in class mycompiler.mystatement.IfStmt -
  -
expr1 - -Variable in class mycompiler.mystatement.Assign -
  -
expr1 - -Variable in class mycompiler.mystatement.Binary -
  -
expr2 - -Variable in class mycompiler.mystatement.Assign -
  -
expr2 - -Variable in class mycompiler.mystatement.Binary -
  -
ExprStmt - Class in mycompiler.mystatement
 
ExprStmt() - -Constructor for class mycompiler.mystatement.ExprStmt -
  -
EXTENDS - -Static variable in class mycompiler.myparser.JavaParser -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-6.html b/doc/Javadoc/index-files/index-6.html deleted file mode 100755 index 5a79ebb9..00000000 --- a/doc/Javadoc/index-files/index-6.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - -F-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-F

-
-
f2d - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
f2i - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
f2l - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fadd - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
faload - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fastore - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
FC_TTO - Class in mycompiler.mytypereconstruction.unify
Hilfsklasse f�r den Unifizierungsalgorithmus
FC_TTO(Menge, Menge) - -Constructor for class mycompiler.mytypereconstruction.unify.FC_TTO -
  -
fcmpg - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fcmpl - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fconst_0 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fconst_1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fconst_2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fdiv - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fehlerausgabe() - -Method in exception mycompiler.myexception.SCClassException -
  -
fehlerausgabe() - -Method in class mycompiler.myexception.SCExcept -
  -
fehlerausgabe() - -Method in exception mycompiler.myexception.SCException -
  -
FieldDecl - Class in mycompiler.myclass
 
FieldDecl() - -Constructor for class mycompiler.myclass.FieldDecl -
  -
FieldInfo - Class in mycompiler.mybytecode
 
FieldInfo() - -Constructor for class mycompiler.mybytecode.FieldInfo -
  -
FINALLY - -Static variable in class mycompiler.myparser.JavaParser -
  -
fireReplaceTypeEvent(CReplaceTypeEvent) - -Method in class mycompiler.mytype.TyploseVariable -

Author: J�rg B�uerle -
fireReplaceTypeEvent(CReplaceTypeEvent) - -Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider -
  -
fload - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fload_0 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fload_1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fload_2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fload_3 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fmul - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fneg - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
FOR - -Static variable in class mycompiler.myparser.JavaParser -
  -
FormalParameter - Class in mycompiler.myclass
 
FormalParameter() - -Constructor for class mycompiler.myclass.FormalParameter -
  -
formalparameter - -Variable in class mycompiler.myclass.ParameterList -
  -
frem - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fresh() - -Static method in class mycompiler.mytype.TyploseVariable -
Erzeugt eine neue TyploseVariable mit einem eindeutigen Namen. -
freturn - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fstore - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fstore_0 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fstore_1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fstore_2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fstore_3 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
fsub - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-7.html b/doc/Javadoc/index-files/index-7.html deleted file mode 100755 index a66d77be..00000000 --- a/doc/Javadoc/index-files/index-7.html +++ /dev/null @@ -1,919 +0,0 @@ - - - - - - -G-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-G

-
-
GENERAL_INFO - -Static variable in class mycompiler.MyCompiler -
  -
GenericTypeVar - Class in mycompiler.mytype
 
GenericTypeVar(String) - -Constructor for class mycompiler.mytype.GenericTypeVar -
  -
get_a() - -Method in class mycompiler.mybytecode.Key -
  -
get_access_flags() - -Method in class mycompiler.mybytecode.ClassFile -
  -
get_access_flags() - -Method in class mycompiler.mybytecode.FieldInfo -
  -
get_access_flags() - -Method in class mycompiler.mybytecode.MethodInfo -
  -
get_access_flags() - -Method in class mycompiler.myclass.ClassDeclId -
  -
get_access_flags() - -Method in class mycompiler.myclass.DeclId -
  -
get_attribute_name_index() - -Method in class mycompiler.mybytecode.Attribute -
  -
get_attributes() - -Method in class mycompiler.mybytecode.ClassFile -
  -
get_attributes() - -Method in class mycompiler.mybytecode.FieldInfo -
  -
get_attributes() - -Method in class mycompiler.mybytecode.MethodInfo -
  -
get_attributes_length() - -Method in class mycompiler.mybytecode.Attribute -
  -
get_attributes_length() - -Method in class mycompiler.mybytecode.AttributeInfo -
  -
get_attributes_length() - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
get_attributes_Menge() - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
get_Block() - -Method in class mycompiler.myclass.Method -
  -
get_bytes() - -Method in class mycompiler.mybytecode.CONSTANT_Float_info -
  -
get_bytes() - -Method in class mycompiler.mybytecode.CONSTANT_Integer_info -
  -
get_bytes() - -Method in class mycompiler.mybytecode.CONSTANT_Utf8_info -
  -
get_class_block() - -Method in class mycompiler.mybytecode.ClassFile -
  -
get_class_block() - -Method in class mycompiler.myclass.Class -
  -
get_class_index() - -Method in class mycompiler.mybytecode.CONSTANT_Fieldref_info -
  -
get_class_index() - -Method in class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info -
  -
get_class_index() - -Method in class mycompiler.mybytecode.CONSTANT_Methodref_info -
  -
get_Class_Name() - -Method in class mycompiler.mybytecode.FieldInfo -
  -
get_ClassBody() - -Method in class mycompiler.myclass.Class -
  -
get_classname() - -Method in class mycompiler.myclass.Class -
  -
get_classname() - -Method in class mycompiler.myclass.ClassDeclId -
  -
get_classname() - -Method in class mycompiler.myexception.SCExcept -
  -
get_code_length() - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
get_code_Menge() - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
get_codegen_ArgumentList(Menge) - -Method in class mycompiler.mystatement.ArgumentList -
  -
get_codegen_Array_Type() - -Method in class mycompiler.mystatement.NewArray -
  -
get_codegen_Param_Type(Menge) - -Method in class mycompiler.myclass.Constructor -
  -
get_codegen_Param_Type(Menge) - -Method in class mycompiler.myclass.Method -
  -
get_codegen_ParameterList(Menge) - -Method in class mycompiler.myclass.ParameterList -
  -
get_codegen_Type(String, Menge) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
get_codegen_Type(Menge) - -Method in class mycompiler.mytype.Type -
  -
get_codegen_UsedId() - -Method in class mycompiler.myclass.UsedId -
  -
get_codegen_UsedId() - -Method in class mycompiler.mystatement.InstVar -
  -
get_Command(Menge) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
get_constant_pool() - -Method in class mycompiler.mybytecode.ClassFile -
  -
get_constant_pool_element(byte, String) - -Method in class mycompiler.mybytecode.ClassFile -
  -
get_constructor_founded() - -Method in class mycompiler.mybytecode.ClassFile -
  -
get_descriptor_index() - -Method in class mycompiler.mybytecode.CONSTANT_NameAndType_info -
  -
get_descriptor_index() - -Method in class mycompiler.mybytecode.FieldInfo -
  -
get_descriptor_index() - -Method in class mycompiler.mybytecode.MethodInfo -
  -
get_exception_table_Menge() - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
get_ExceptionList() - -Method in class mycompiler.myclass.Method -
  -
get_exlist() - -Method in exception mycompiler.myexception.SCClassBodyException -
  -
get_exlist() - -Method in exception mycompiler.myexception.SCMethodException -
  -
get_exlist() - -Method in exception mycompiler.myexception.SCStatementException -
  -
get_Expr() - -Method in class mycompiler.mystatement.NotExpr -
  -
get_Expr() - -Method in class mycompiler.mystatement.Receiver -
  -
get_Expr1() - -Method in class mycompiler.mystatement.Binary -
  -
get_Expr2() - -Method in class mycompiler.mystatement.Binary -
  -
get_FieldDeclMenge() - -Method in class mycompiler.myclass.ClassBody -
  -
get_fields() - -Method in class mycompiler.mybytecode.ClassFile -
  -
get_firstElement() - -Method in class mycompiler.mystatement.ArgumentList -
  -
get_firstElement() - -Method in class mycompiler.mytype.ParaList -
  -
get_function() - -Method in class mycompiler.myexception.SCExcept -
  -
get_hash() - -Method in class mycompiler.myclass.ClassBody -
  -
get_high_bytes() - -Method in class mycompiler.mybytecode.CONSTANT_Double_info -
  -
get_high_bytes() - -Method in class mycompiler.mybytecode.CONSTANT_Long_info -
  -
get_indexOf_Var(String) - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
get_info() - -Method in class mycompiler.mybytecode.AttributeInfo -
  -
get_info_Menge() - -Method in class mycompiler.mybytecode.AttributeInfo -
  -
get_key_Menge() - -Method in class mycompiler.mybytecode.ClassFile -
  -
get_local_Menge() - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
get_low_bytes() - -Method in class mycompiler.mybytecode.CONSTANT_Double_info -
  -
get_low_bytes() - -Method in class mycompiler.mybytecode.CONSTANT_Long_info -
  -
get_Message() - -Method in exception mycompiler.myexception.JVMCodeException -
  -
get_Method_Name() - -Method in class mycompiler.myclass.Method -
  -
get_methods() - -Method in class mycompiler.mybytecode.ClassFile -
  -
get_Modifiers() - -Method in class mycompiler.myclass.ClassDeclId -
  -
get_Modifiers() - -Method in class mycompiler.myclass.DeclId -
  -
get_modifiers() - -Method in class mycompiler.mymodifier.Modifiers -
  -
get_Name() - -Method in class mycompiler.mybytecode.FieldInfo -
  -
get_Name() - -Method in class mycompiler.myclass.DeclId -
  -
get_Name() - -Method in class mycompiler.myclass.FieldDecl -
  -
get_Name() - -Method in class mycompiler.myclass.FormalParameter -
  -
get_Name() - -Method in class mycompiler.myclass.UsedId -
  -
get_Name() - -Method in class mycompiler.mystatement.Assign -
  -
get_Name() - -Method in class mycompiler.mystatement.Binary -
  -
get_Name() - -Method in class mycompiler.mystatement.BoolLiteral -
  -
get_Name() - -Method in class mycompiler.mystatement.CastExpr -
  -
get_Name() - -Method in class mycompiler.mystatement.CharLiteral -
  -
get_Name() - -Method in class mycompiler.mystatement.Expr -
  -
get_Name() - -Method in class mycompiler.mystatement.InstanceOf -
  -
get_Name() - -Method in class mycompiler.mystatement.InstVar -
  -
get_Name() - -Method in class mycompiler.mystatement.IntLiteral -
  -
get_Name() - -Method in class mycompiler.mystatement.LocalOrFieldVar -
  -
get_Name() - -Method in class mycompiler.mystatement.LocalVarDecl -
  -
get_Name() - -Method in class mycompiler.mystatement.MethodCall -
  -
get_Name() - -Method in class mycompiler.mystatement.NegativeExpr -
  -
get_Name() - -Method in class mycompiler.mystatement.NewArray -
  -
get_Name() - -Method in class mycompiler.mystatement.NewClass -
  -
get_Name() - -Method in class mycompiler.mystatement.NotExpr -
  -
get_Name() - -Method in class mycompiler.mystatement.Null -
  -
get_Name() - -Method in class mycompiler.mystatement.PositivExpr -
  -
get_Name() - -Method in class mycompiler.mystatement.PostDecExpr -
  -
get_Name() - -Method in class mycompiler.mystatement.PostIncExpr -
  -
get_Name() - -Method in class mycompiler.mystatement.PreDecExpr -
  -
get_Name() - -Method in class mycompiler.mystatement.PreIncExpr -
  -
get_Name() - -Method in class mycompiler.mystatement.StringLiteral -
  -
get_Name() - -Method in class mycompiler.mystatement.This -
  -
get_Name() - -Method in class mycompiler.mytype.Type -
  -
get_Name() - -Method in class mycompiler.mytype.Void -
  -
get_Name_1Element() - -Method in class mycompiler.myclass.UsedId -
  -
get_name_and_type_index() - -Method in class mycompiler.mybytecode.CONSTANT_Fieldref_info -
  -
get_name_and_type_index() - -Method in class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info -
  -
get_name_and_type_index() - -Method in class mycompiler.mybytecode.CONSTANT_Methodref_info -
  -
get_name_index() - -Method in class mycompiler.mybytecode.CONSTANT_Class_info -
  -
get_name_index() - -Method in class mycompiler.mybytecode.CONSTANT_NameAndType_info -
  -
get_name_index() - -Method in class mycompiler.mybytecode.FieldInfo -
  -
get_name_index() - -Method in class mycompiler.mybytecode.MethodInfo -
  -
get_Name_Menge() - -Method in class mycompiler.mystatement.Expr -
  -
get_nType(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
get_Operator() - -Method in class mycompiler.mystatement.Binary -
  -
get_ParaHash() - -Method in class mycompiler.myclass.Class -
  -
get_ParaList() - -Method in class mycompiler.myclass.Class -
  -
get_ParaList() - -Method in class mycompiler.myclass.UsedId -
  -
get_ParaList() - -Method in class mycompiler.mytype.ParaList -
  -
get_ParaList() - -Method in class mycompiler.mytype.RefType -
  -
get_Paratyp() - -Method in class mycompiler.myclass.DeclId -
  -
get_statement() - -Method in class mycompiler.myexception.SCExcept -
  -
get_Statement() - -Method in class mycompiler.mystatement.Block -
  -
get_String() - -Method in class mycompiler.myparser.Token -
  -
get_string_index() - -Method in class mycompiler.mybytecode.CONSTANT_String_info -
  -
get_super_class() - -Method in class mycompiler.mybytecode.ClassFile -
  -
get_Superclass_Name() - -Method in class mycompiler.myclass.Class -
  -
get_system_out() - -Method in class mycompiler.mybytecode.ClassFile -
  -
get_tag() - -Method in class mycompiler.mybytecode.CPInfo -
  -
get_tag() - -Method in class mycompiler.mybytecode.Key -
  -
get_this_class() - -Method in class mycompiler.mybytecode.ClassFile -
  -
get_Type() - -Method in class mycompiler.mybytecode.FieldInfo -
  -
get_Type() - -Method in class mycompiler.mystatement.Receiver -
  -
get_Type() - -Method in class mycompiler.mystatement.Return -
  -
get_Type_Paralist() - -Method in class mycompiler.myclass.Method -
  -
get_Type_Menge() - -Method in class mycompiler.mystatement.Expr -
  -
get_Typen() - -Method in class mycompiler.myclass.UsedId -
  -
get_TypeOf_Var(String) - -Method in class mycompiler.mybytecode.CodeAttribute -
  -
get_UsedId() - -Method in class mycompiler.mystatement.Expr -
  -
get_UsedId() - -Method in class mycompiler.mytype.Type -
  -
get_vParaOrg() - -Method in class mycompiler.myclass.Class -
  -
get_vParaOrg() - -Method in class mycompiler.myclass.UsedId -
  -
get_Wert() - -Method in class mycompiler.myclass.DeclId -
  -
getA() - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
getAPI() - -Static method in class mycompiler.MyCompiler -
Author: J�rg B�uerle
- Stellt eine neue Instanz der CompilerAPI zur Verf�gung. -
getAssumedType() - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
getAssumptionSet() - -Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
Author: J�rg B�uerle
-
getAssumptionSet() - -Method in class mycompiler.mytypereconstruction.CTriple -
Author: J�rg B�uerle
-
getAssumSet() - -Method in class mycompiler.mytypereconstruction.CReconstructionTuple -
  -
getBlockId(int) - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
getBlockId() - -Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -
  -
getBlockIdList() - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
getCardinality() - -Method in class mycompiler.mytypereconstruction.set.CHashtableSet -
  -
getCardinality() - -Method in class mycompiler.mytypereconstruction.set.CSet -
  -
getCardinality() - -Method in class mycompiler.mytypereconstruction.set.CMengeSet -
  -
getClassIterator() - -Method in class mycompiler.SourceFile -
  -
getClassName() - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
getClassNameList() - -Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
getCurrentBlockDepth() - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
getCurrentBlockId() - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
getCurrentClass() - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
getCurrentMethod() - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
getCurrentMethodParaCount() - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
getDeclIdMenge() - -Method in class mycompiler.myclass.FieldDecl -
  -
getDeclidMenge() - -Method in class mycompiler.mystatement.LocalVarDecl -
  -
getElement(IHashSetKey) - -Method in class mycompiler.mytypereconstruction.set.CHashtableSet -
  -
getFC() - -Method in class mycompiler.mytypereconstruction.unify.FC_TTO -
  -
getfield - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
getFieldAndLocalVarAssumptions() - -Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
getFiniteClosure() - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
getGenericsTable() - -Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
getHashSetKey() - -Method in interface mycompiler.mytypereconstruction.set.IHashSetElement -
  -
getHashSetKey() - -Method in class mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption -
Author: J�rg B�uerle
-
getHashSetKey() - -Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -
Author: J�rg B�uerle
-
getHashSetKey() - -Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -
Author: J�rg B�uerle
-
getHashSetKey() - -Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption -
Author: J�rg B�uerle
-
getHashSetKey() - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
getHashtable() - -Method in class mycompiler.mytypereconstruction.set.CHashtableSet -
  -
getIdentifier() - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
getInstance(String) - -Static method in class mycompiler.mytype.TyploseVariable -
Statische Methode, um einen typlose Variable aus der Registry zu holen. -
getIntersectionTypeKey() - -Method in class mycompiler.mytypereconstruction.CIntersectionType -
  -
getIterator() - -Method in class mycompiler.mytypereconstruction.set.CHashtableSet -
  -
getIterator() - -Method in class mycompiler.mytypereconstruction.set.CSet -
  -
getIterator() - -Method in class mycompiler.mytypereconstruction.set.CMengeSet -
  -
getKeyString() - -Method in class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey -
Author: J�rg B�uerle
-
getLexem() - -Method in class mycompiler.myparser.Token -
  -
getLineNumber() - -Method in class mycompiler.myclass.DeclId -
  -
getLineNumber() - -Method in class mycompiler.myclass.FormalParameter -

Author: J�rg B�uerle -
getLineNumber() - -Method in class mycompiler.myclass.InstVarDecl -
  -
getLineNumber() - -Method in class mycompiler.myclass.Method -
  -
getLineNumber() - -Method in class mycompiler.myparser.Token -
  -
getLineNumber() - -Method in class mycompiler.mystatement.LocalVarDecl -

Author: J�rg B�uerle -
getLineNumber() - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
getLineNumbers() - -Method in class mycompiler.mytype.TyploseVariable -
  -
getMethodIntersectionType(CMethodKey) - -Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
getMethodIntersectionTypes() - -Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
getMethodName() - -Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -
  -
getMethodName() - -Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption -
  -
getMethodParaCount() - -Method in class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption -
  -
getMethodParaCount() - -Method in class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption -
  -
getMethodTypeAssumptions() - -Method in class mycompiler.mytypereconstruction.CIntersectionType -
  -
getName() - -Method in class mycompiler.mytype.RefType -
  -
getName() - -Method in class mycompiler.mytype.Type -
  -
getNewType() - -Method in class mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent -
  -
getOldType() - -Method in class mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent -
  -
getParaAssumption(int) - -Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -
  -
getParaAssumptions() - -Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -
Author: J�rg B�uerle
-
getParaCount() - -Method in class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption -
Author: J�rg B�uerle
-
getParalist() - -Method in class mycompiler.mytype.ParaList -
  -
getParameterCount() - -Method in class mycompiler.myclass.Method -
Author: J�rg B�uerle
-
getParameterCount() - -Method in class mycompiler.myclass.ParameterList -
Author: J�rg B�uerle
-
getParameterList() - -Method in class mycompiler.myclass.Method -
  -
getParaN(int) - -Method in class mycompiler.mytype.RefType -
  -
getReplacementListeners() - -Method in class mycompiler.mytype.TyploseVariable -

Author: J�rg B�uerle -
getReplacementListeners() - -Method in interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider -
  -
getResultType() - -Method in class mycompiler.mytypereconstruction.CTriple -
Author: J�rg B�uerle
-
getResultTypeIterator() - -Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
  -
getResultTypes() - -Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
Author: J�rg B�uerle
-
getReturnType() - -Method in class mycompiler.myclass.Method -
  -
getstatic - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
getSubSet() - -Method in class mycompiler.mytypereconstruction.CReconstructionTuple -
  -
getSubstitutions() - -Method in class mycompiler.mytypereconstruction.CMultiplyTuple -
Author: J�rg B�uerle
-
getSubstitutions() - -Method in class mycompiler.mytypereconstruction.CTriple -
Author: J�rg B�uerle
-
getSubstitutions() - -Method in class mycompiler.mytypereconstruction.CTypeReconstructionResult -
  -
getSyntaxTree() - -Method in class mycompiler.MyCompiler -
Author: J�rg B�uerle
- Liefert den geparsten Syntaxbaume zur�ck. -
getSyntaxTree() - -Method in interface mycompiler.MyCompilerAPI -
Author: J�rg B�uerle
- Liefert den geparsten Syntaxbaum zur�ck. -
getTA1Copy() - -Method in class mycompiler.mytype.Pair -
  -
getTA2Copy() - -Method in class mycompiler.mytype.Pair -
  -
getTTO() - -Method in class mycompiler.mytypereconstruction.unify.FC_TTO -
  -
getType() - -Method in class mycompiler.myclass.FormalParameter -
  -
getType() - -Method in class mycompiler.myclass.InstVarDecl -
  -
getType() - -Method in class mycompiler.mystatement.ExprStmt -
  -
getType() - -Method in class mycompiler.mystatement.LocalVarDecl -
  -
getType() - -Method in class mycompiler.mystatement.NewArray -
Author: J�rg B�uerle
-
getType() - -Method in class mycompiler.mytypereconstruction.CSubstitution -
Author: J�rg B�uerle
-
getTypeLineNumber() - -Method in class mycompiler.myclass.FormalParameter -

Author: J�rg B�uerle -
getTypeLineNumber() - -Method in class mycompiler.myclass.InstVarDecl -

Author: J�rg B�uerle -
getTypeLineNumber() - -Method in class mycompiler.myclass.Method -

Author: J�rg B�uerle -
getTypeLineNumber() - -Method in class mycompiler.mystatement.ExprStmt -

Author: J�rg B�uerle -
getTypeLineNumber() - -Method in class mycompiler.mystatement.LocalVarDecl -

Author: J�rg B�uerle -
getTypeLineNumber() - -Method in interface mycompiler.mytypereconstruction.replacementlistener.ITypeReplacementListener -
Gibt die Zeilennummer zur�ck, in der eine TyploseVariable - angelegt worden ist. -
getTypeName() - -Method in class mycompiler.myclass.FieldDecl -
  -
getTypeName() - -Method in class mycompiler.myclass.FormalParameter -
  -
getTypeName() - -Method in class mycompiler.myclass.InstVarDecl -
  -
getTypeName() - -Method in class mycompiler.myclass.Method -
  -
getTypeName() - -Method in class mycompiler.mystatement.ExprStmt -
  -
getTypeName() - -Method in class mycompiler.mytype.RefType -
  -
getTypeVar() - -Method in class mycompiler.mytypereconstruction.CSubstitution -
Author: J�rg B�uerle
-
getMenge() - -Method in class mycompiler.mytypereconstruction.set.CMengeSet -
  -
goto_ - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
goto_w - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
GREATEREQUAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
GreaterEquOp - Class in mycompiler.myoperator
 
GreaterEquOp() - -Constructor for class mycompiler.myoperator.GreaterEquOp -
  -
GreaterOp - Class in mycompiler.myoperator
 
GreaterOp() - -Constructor for class mycompiler.myoperator.GreaterOp -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-8.html b/doc/Javadoc/index-files/index-8.html deleted file mode 100755 index b0808f7f..00000000 --- a/doc/Javadoc/index-files/index-8.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -H-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-H

-
-
hamaAload0 - -Variable in class mycompiler.mybytecode.ClassFile -
  -
hamaDebug - -Variable in class mycompiler.mybytecode.ClassFile -
  -
hamaDebug - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
hamaDebug - -Variable in class mycompiler.myclass.DeclId -
  -
hamaDebug - -Variable in class mycompiler.myclass.ParameterList -
  -
hamaDebug - -Variable in class mycompiler.mystatement.IfStmt -
  -
hamaDebug - -Variable in class mycompiler.mytype.Type -
  -
hashCode() - -Method in class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey -
Author: J�rg B�uerle
-
hasSolvedForm(Menge) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index-files/index-9.html b/doc/Javadoc/index-files/index-9.html deleted file mode 100755 index 0e56710c..00000000 --- a/doc/Javadoc/index-files/index-9.html +++ /dev/null @@ -1,460 +0,0 @@ - - - - - - -I-Index - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
-

-I

-
-
i2b - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
i2c - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
i2d - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
i2f - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
i2l - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
i2s - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iadd - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iaload - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iand - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iastore - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iconst_0 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iconst_1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iconst_2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iconst_3 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iconst_4 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iconst_5 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iconst_m1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
IDENTIFIER - -Static variable in class mycompiler.myparser.JavaParser -
  -
idiv - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
IF - -Static variable in class mycompiler.myparser.JavaParser -
  -
if_acmpeq - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
if_acmpne - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
if_codegen(ClassFile, CodeAttribute, String, boolean) - -Method in class mycompiler.myoperator.EqualOp -
  -
if_codegen(ClassFile, CodeAttribute, String, boolean) - -Method in class mycompiler.myoperator.GreaterEquOp -
  -
if_codegen(ClassFile, CodeAttribute, String, boolean) - -Method in class mycompiler.myoperator.GreaterOp -
  -
if_codegen(ClassFile, CodeAttribute, String, boolean) - -Method in class mycompiler.myoperator.LessEquOp -
  -
if_codegen(ClassFile, CodeAttribute, String, boolean) - -Method in class mycompiler.myoperator.LessOp -
  -
if_codegen(ClassFile, CodeAttribute, boolean, Expr, Statement, Statement, Menge) - -Method in class mycompiler.myoperator.LogOp -
  -
if_codegen(ClassFile, CodeAttribute, String, boolean) - -Method in class mycompiler.myoperator.NotEqualOp -
  -
if_codegen(ClassFile, CodeAttribute, String, boolean) - -Method in class mycompiler.myoperator.RelOp -
  -
if_codegen(ClassFile, CodeAttribute, boolean, Menge) - -Method in class mycompiler.mystatement.IfStmt -
  -
if_codegen(ClassFile, CodeAttribute, boolean) - -Method in class mycompiler.mystatement.UnaryNot -
  -
if_icmpeq - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
if_icmpge - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
if_icmpgt - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
if_icmple - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
if_icmplt - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
if_icmpne - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
if_ncmpeq(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
if_ncmpne(String) - -Static method in class mycompiler.mybytecode.JVMCode -
  -
ifeq - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ifge - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ifgt - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ifle - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iflt - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ifne - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ifnonnull - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ifnull - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
IfStmt - Class in mycompiler.mystatement
 
IfStmt() - -Constructor for class mycompiler.mystatement.IfStmt -
  -
IHashSetElement - Interface in mycompiler.mytypereconstruction.set
 
IHashSetKey - Interface in mycompiler.mytypereconstruction.set
 
iinc - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iload - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iload_0 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iload_1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iload_2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
iload_3 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
impdep1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
impdep2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
Import - Class in mycompiler.unused
 
Import() - -Constructor for class mycompiler.unused.Import -
  -
imul - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
incBlockDepth() - -Method in class mycompiler.mytypereconstruction.CSupportData -
  -
INCREMENT - -Static variable in class mycompiler.myparser.JavaParser -
  -
ineg - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
init() - -Method in class mycompiler.MyCompiler -
Author: J�rg B�uerle
- Initialisiert den Compiler -
init() - -Method in interface mycompiler.MyCompilerAPI -
Author: J�rg B�uerle
- Initialisiert den Compiler -
init_parahashtable(Menge, boolean) - -Method in class mycompiler.myclass.ClassBody -
  -
INSTANCEOF - -Static variable in class mycompiler.myparser.JavaParser -
  -
InstanceOf - Class in mycompiler.mystatement
 
InstanceOf() - -Constructor for class mycompiler.mystatement.InstanceOf -
  -
instanceof_ - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
instanceSmaller(Pair, FC_TTO) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
InstVar - Class in mycompiler.mystatement
 
InstVar(String, String) - -Constructor for class mycompiler.mystatement.InstVar -
  -
InstVarDecl - Class in mycompiler.myclass
 
InstVarDecl() - -Constructor for class mycompiler.myclass.InstVarDecl -
  -
INT - -Static variable in class mycompiler.myparser.JavaParser -
  -
IntegerType - Class in mycompiler.mytype
 
IntegerType() - -Constructor for class mycompiler.mytype.IntegerType -
  -
INTLITERAL - -Static variable in class mycompiler.myparser.JavaParser -
  -
IntLiteral - Class in mycompiler.mystatement
 
IntLiteral() - -Constructor for class mycompiler.mystatement.IntLiteral -
  -
invokeinterface - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
invokespecial - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
invokestatic - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
invokevirtual - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ior - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
irem - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
IReplaceTypeEventProvider - Interface in mycompiler.mytypereconstruction.replacementlistener
Interface f�r ein Objekt, das ReplaceTypeEvents zur Verf�gung stellt und - es TypeReplacementListenern erlaubt, sich zu registrieren.
ireturn - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
is_declared(Type, Menge) - -Method in class mycompiler.myclass.ClassBody -
  -
is_declared(Type, Menge) - -Method in class mycompiler.mystatement.LocalVarDecl -
  -
is_Equiv(RefType, Hashtable) - -Method in class mycompiler.mytype.RefType -
  -
is_member(String) - -Method in class mycompiler.myclass.Class -
  -
isEqual() - -Method in class mycompiler.mytype.Pair -
  -
ishl - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ishr - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
isInFC(RefType, RefType, Menge) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
isInFCrechtsUnify(RefType, RefType, FC_TTO) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
isInMenge(Menge) - -Method in class mycompiler.mytype.Pair -
  -
isRealSubClass(String, String, FC_TTO) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
isRXSimilarRY(RefType, RefType) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
istore - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
istore_0 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
istore_1 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
istore_2 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
istore_3 - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
istParameterOK(Menge, Menge) - -Method in class mycompiler.myclass.ClassBody -
  -
isTV(int) - -Method in class mycompiler.mytype.RefType -
  -
isTVinRefType(TyploseVariable, RefType) - -Static method in class mycompiler.mytypereconstruction.unify.Unify -
  -
isTyploseVariable() - -Method in class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption -
  -
isub - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ITypeReplacementListener - Interface in mycompiler.mytypereconstruction.replacementlistener
Interface f�r einen TypeReplacementListener, der es erm�glicht, - einen Typ gegen einen anderen auszutauschen.
iushr - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
ixor - -Static variable in class mycompiler.mybytecode.JVMCode -
  -
-
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I J K L M N O P R S T U V W X Y
- - - diff --git a/doc/Javadoc/index.html b/doc/Javadoc/index.html deleted file mode 100755 index e319db1e..00000000 --- a/doc/Javadoc/index.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - -Generated Documentation (Untitled) - - - - - - - - - - - -<H2> -Frame Alert</H2> - -<P> -This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. -<BR> -Link to<A HREF="overview-summary.html">Non-frame version.</A> - - - diff --git a/doc/Javadoc/mycompiler/MyCompiler.html b/doc/Javadoc/mycompiler/MyCompiler.html deleted file mode 100755 index 922cea6f..00000000 --- a/doc/Javadoc/mycompiler/MyCompiler.html +++ /dev/null @@ -1,726 +0,0 @@ - - - - - - -MyCompiler - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler -
-Class MyCompiler

-
-java.lang.Object
-  extended by mycompiler.MyCompiler
-
-
-
All Implemented Interfaces:
MyCompilerAPI
-
-
-
-
public class MyCompiler
extends java.lang.Object
implements MyCompilerAPI
- - -

-


- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Field Summary
-static intALL_INFO - -
-           
-static intDebugLevel - -
-           
-static intGENERAL_INFO - -
-           
-static intNO_INFO - -
-           
-static intNO_LINENUMBER - -
-           
-static intPARSER_INFO - -
-           
-static intSCANNER_INFO - -
-           
-static intSEMANTIC_INFO - -
-           
-static intTYPE_ANALYSIS_INFO - -
-           
-static intUNIFICATION_INFO - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodeGeneration() - -
-          Author: J�rg B�uerle
- Generiert den Bytecode und das Class-File f�r den Syntaxbaum.
-static MyCompilerAPIgetAPI() - -
-          Author: J�rg B�uerle
- Stellt eine neue Instanz der CompilerAPI zur Verf�gung.
- SourceFilegetSyntaxTree() - -
-          Author: J�rg B�uerle
- Liefert den geparsten Syntaxbaume zur�ck.
- voidinit() - -
-          Author: J�rg B�uerle
- Initialisiert den Compiler
-static voidmain(java.lang.String[] args) - -
-          Author: J�rg B�uerle
- Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet - werden kann.
- voidparse(java.io.File file) - -
-          Author: J�rg B�uerle
- Ruft die Parse-Methode.
- voidparse(java.lang.String srcCode) - -
-          Author: J�rg B�uerle
- Ruft die Parse-Methode.
-static voidprintDebugInfo(java.lang.String str1, - int nLevel) - -
-          Author: J�rg B�uerle
- Von meinen Vorg�ngern eingesetzte Methode zur Ausgabe von - diferenzierten Debug-Ausgaben.
- voidsemanticCheck() - -
-          Author: J�rg B�uerle
- Ruft �ber SourceFile.sc_check(false) - den alten Semantik-Check ohne Typrekonstruktion auf.
- booleansetDebugLevel(int debugLevel) - -
-          Author: J�rg B�uerle
- Setzt den Debug-Level
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>typeReconstruction() - -
-          Author: J�rg B�uerle
- Ruft den Typrekonstruktionsalgorithmus auf.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-NO_INFO

-
-public static final int NO_INFO
-
-
-
See Also:
Constant Field Values
-
-
- -

-ALL_INFO

-
-public static final int ALL_INFO
-
-
-
See Also:
Constant Field Values
-
-
- -

-GENERAL_INFO

-
-public static final int GENERAL_INFO
-
-
-
See Also:
Constant Field Values
-
-
- -

-SCANNER_INFO

-
-public static final int SCANNER_INFO
-
-
-
See Also:
Constant Field Values
-
-
- -

-PARSER_INFO

-
-public static final int PARSER_INFO
-
-
-
See Also:
Constant Field Values
-
-
- -

-SEMANTIC_INFO

-
-public static final int SEMANTIC_INFO
-
-
-
See Also:
Constant Field Values
-
-
- -

-TYPE_ANALYSIS_INFO

-
-public static final int TYPE_ANALYSIS_INFO
-
-
-
See Also:
Constant Field Values
-
-
- -

-UNIFICATION_INFO

-
-public static final int UNIFICATION_INFO
-
-
-
See Also:
Constant Field Values
-
-
- -

-NO_LINENUMBER

-
-public static final int NO_LINENUMBER
-
-
-
See Also:
Constant Field Values
-
-
- -

-DebugLevel

-
-public static int DebugLevel
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-getAPI

-
-public static MyCompilerAPI getAPI()
-
-
Author: J�rg B�uerle
- Stellt eine neue Instanz der CompilerAPI zur Verf�gung. - Diese Methode sollte von der IDE aus aufgerufen werden, - um eine Quellcode-Datei zu kompilieren. -

-

-
-
-
- -
Returns:
Die Compiler-API
-
-
-
- -

-printDebugInfo

-
-public static void printDebugInfo(java.lang.String str1,
-                                  int nLevel)
-
-
Author: J�rg B�uerle
- Von meinen Vorg�ngern eingesetzte Methode zur Ausgabe von - diferenzierten Debug-Ausgaben. -

-

-
-
-
-
Parameters:
str1 - Die Debug-Ausgabe
nLevel - Der DebugLevel
-
-
-
- -

-init

-
-public void init()
-
-
Author: J�rg B�uerle
- Initialisiert den Compiler -

-

-
Specified by:
init in interface MyCompilerAPI
-
-
-
-
-
-
- -

-setDebugLevel

-
-public boolean setDebugLevel(int debugLevel)
-
-
Author: J�rg B�uerle
- Setzt den Debug-Level -

-

-
Specified by:
setDebugLevel in interface MyCompilerAPI
-
-
-
Parameters:
debugLevel - Debug-Level -
Returns:
true wenn ein korrekter Wert �bergeben worden ist, false sonst.
-
-
-
- -

-parse

-
-public void parse(java.io.File file)
-           throws java.io.FileNotFoundException,
-                  java.io.IOException,
-                  JavaParser.yyException
-
-
Author: J�rg B�uerle
- Ruft die Parse-Methode. -

-

-
Specified by:
parse in interface MyCompilerAPI
-
-
-
Parameters:
file - Die Quellcode-Datei -
Throws: -
java.io.FileNotFoundException - Wenn die Quellcode-Datei nicht existiert. -
java.io.IOException - Wenn was schief l�uft. -
JavaParser.yyException - Wenn ein Fehler beim Parsen auftritt.
-
-
-
- -

-parse

-
-public void parse(java.lang.String srcCode)
-           throws java.io.IOException,
-                  JavaParser.yyException
-
-
Author: J�rg B�uerle
- Ruft die Parse-Methode. -

-

-
Specified by:
parse in interface MyCompilerAPI
-
-
-
Parameters:
srcCode - Der zu parsende Quellcode -
Throws: -
java.io.IOException - Wenn was schief l�uft. -
JavaParser.yyException - Wenn ein Fehler beim Parsen auftritt.
-
-
-
- -

-semanticCheck

-
-public void semanticCheck()
-                   throws java.lang.NullPointerException,
-                          SCException
-
-
Author: J�rg B�uerle
- Ruft �ber SourceFile.sc_check(false) - den alten Semantik-Check ohne Typrekonstruktion auf. -

-

-
Specified by:
semanticCheck in interface MyCompilerAPI
-
-
- -
Throws: -
java.lang.NullPointerException - Wenn noch kein abstrakter Syntaxbaum vorhanden ist. -
SCException - Wenn ein Fehler beim Semantik-Check auftritt.
-
-
-
- -

-typeReconstruction

-
-public de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> typeReconstruction()
-                                                               throws java.lang.NullPointerException,
-                                                                      CTypeReconstructionException
-
-
Author: J�rg B�uerle
- Ruft den Typrekonstruktionsalgorithmus auf. -

-

-
Specified by:
typeReconstruction in interface MyCompilerAPI
-
-
- -
Returns:
Die Menge aller m�glichen Typkombinationen -
Throws: -
java.lang.NullPointerException - Wenn noch kein abstrakter Syntaxbaum vorhanden ist. -
CTypeReconstructionException - Wenn ein Fehler bei der Typrekonstruktion auftritt.
-
-
-
- -

-getSyntaxTree

-
-public SourceFile getSyntaxTree()
-                         throws java.lang.NullPointerException
-
-
Author: J�rg B�uerle
- Liefert den geparsten Syntaxbaume zur�ck. -

-

-
Specified by:
getSyntaxTree in interface MyCompilerAPI
-
-
- -
Returns:
Die Syntaxb�ume -
Throws: -
java.lang.NullPointerException - Wenn noch keine Syntaxb�ume berechnet worden sind.
-
-
-
- -

-codeGeneration

-
-public void codeGeneration()
-                    throws java.lang.NullPointerException
-
-
Author: J�rg B�uerle
- Generiert den Bytecode und das Class-File f�r den Syntaxbaum. -

-

-
Specified by:
codeGeneration in interface MyCompilerAPI
-
-
- -
Throws: -
java.lang.NullPointerException - Wenn noch kein abstrakter Syntaxbaum vorhanden ist.
-
-
-
- -

-main

-
-public static void main(java.lang.String[] args)
-
-
Author: J�rg B�uerle
- Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet - werden kann. -

-

-
-
-
-
Parameters:
args - Die Konsolen-Parameter
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/MyCompilerAPI.html b/doc/Javadoc/mycompiler/MyCompilerAPI.html deleted file mode 100755 index 1d8b6a33..00000000 --- a/doc/Javadoc/mycompiler/MyCompilerAPI.html +++ /dev/null @@ -1,417 +0,0 @@ - - - - - - -MyCompilerAPI - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler -
-Interface MyCompilerAPI

-
-
All Known Implementing Classes:
MyCompiler
-
-
-
-
public interface MyCompilerAPI
- - -

-Schnittstellen-Klasse zum Compiler. Diese Klasse soll der - IDE als Compiler-API zum Kompilieren einer Quellcode-Datei - dienen und stellt somit die Schnittstelle zur Studienarbeit - von Markus Melzer (Eclipse-Plugin) dar. -

- -

-

-
Version:
-
$Date: 2005/06/28 19:19:09 $
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodeGeneration() - -
-          Author: J�rg B�uerle
- Generiert den Bytecode und das Class-File f�r den Syntaxbaum.
- SourceFilegetSyntaxTree() - -
-          Author: J�rg B�uerle
- Liefert den geparsten Syntaxbaum zur�ck.
- voidinit() - -
-          Author: J�rg B�uerle
- Initialisiert den Compiler
- voidparse(java.io.File file) - -
-          Author: J�rg B�uerle
- Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf.
- voidparse(java.lang.String srcCode) - -
-          Author: J�rg B�uerle
- Parst einen String und baut den abstrakten Syntaxbaum auf.
- voidsemanticCheck() - -
-          Author: J�rg B�uerle
- Ruft den Semantik-Check ohne Typrekonstruktion auf.
- booleansetDebugLevel(int debugLevel) - -
-          Author: J�rg B�uerle
- Setzt den Debug-Level
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>typeReconstruction() - -
-          Author: J�rg B�uerle
- Ruft den Typrekonstruktionsalgorithmus auf.
-  -

- - - - - - - - -
-Method Detail
- -

-init

-
-void init()
-
-
Author: J�rg B�uerle
- Initialisiert den Compiler -

-

-
-
-
-
- -

-setDebugLevel

-
-boolean setDebugLevel(int debugLevel)
-
-
Author: J�rg B�uerle
- Setzt den Debug-Level -

-

-
Parameters:
debugLevel - Debug-Level -
Returns:
true wenn ein korrekter Wert �bergeben worden ist, false sonst.
-
-
-
- -

-parse

-
-void parse(java.io.File file)
-           throws java.io.FileNotFoundException,
-                  java.io.IOException,
-                  JavaParser.yyException
-
-
Author: J�rg B�uerle
- Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf. -

-

-
Parameters:
file - Die Quellcode-Datei -
Throws: -
java.io.FileNotFoundException - Wenn die Quellcode-Datei nicht existiert. -
java.io.IOException - Wenn was schief l�uft. -
JavaParser.yyException - Wenn ein Fehler beim Parsen auftritt.
-
-
-
- -

-parse

-
-void parse(java.lang.String srcCode)
-           throws java.io.IOException,
-                  JavaParser.yyException
-
-
Author: J�rg B�uerle
- Parst einen String und baut den abstrakten Syntaxbaum auf. -

-

-
Parameters:
srcCode - Der zu parsende Quellcode -
Throws: -
java.io.IOException - Wenn was schief l�uft. -
JavaParser.yyException - Wenn ein Fehler beim Parsen auftritt.
-
-
-
- -

-semanticCheck

-
-void semanticCheck()
-                   throws java.lang.NullPointerException,
-                          SCException
-
-
Author: J�rg B�uerle
- Ruft den Semantik-Check ohne Typrekonstruktion auf. Diese Methode sollte nicht mehr verwendet werden. - Es wird nicht gew�hrleistet, dass sie korrekt arbeitet.
- Stattdessen sollte besser die Methode \code{typeReconstruction()} verwendet werden. -

-

- -
Throws: -
java.lang.NullPointerException - Wenn noch kein abstrakter Syntaxbaum vorhanden ist. -
SCException - Wenn ein Fehler beim Semantik-Check auftritt.
-
-
-
- -

-typeReconstruction

-
-de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> typeReconstruction()
-                                                               throws java.lang.NullPointerException,
-                                                                      CTypeReconstructionException
-
-
Author: J�rg B�uerle
- Ruft den Typrekonstruktionsalgorithmus auf. -

-

- -
Returns:
Die Menge aller m�glichen Typkombinationen -
Throws: -
java.lang.NullPointerException - Wenn noch kein abstrakter Syntaxbaum vorhanden ist. -
CTypeReconstructionException - Wenn ein Fehler bei der Typrekonstruktion auftritt.
-
-
-
- -

-getSyntaxTree

-
-SourceFile getSyntaxTree()
-                         throws java.lang.NullPointerException
-
-
Author: J�rg B�uerle
- Liefert den geparsten Syntaxbaum zur�ck. -

-

- -
Returns:
Die Syntaxb�ume -
Throws: -
java.lang.NullPointerException - Wenn noch kein Syntaxbaum berechnet worden ist.
-
-
-
- -

-codeGeneration

-
-void codeGeneration()
-                    throws java.lang.NullPointerException
-
-
Author: J�rg B�uerle
- Generiert den Bytecode und das Class-File f�r den Syntaxbaum. -

-

-
Parameters:
syntaxTree - Der Syntaxbaum -
Throws: -
java.lang.NullPointerException - Wenn noch kein abstrakter Syntaxbaum vorhanden ist.
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/SourceFile.html b/doc/Javadoc/mycompiler/SourceFile.html deleted file mode 100755 index d64b478c..00000000 --- a/doc/Javadoc/mycompiler/SourceFile.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - - - -SourceFile - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler -
-Class SourceFile

-
-java.lang.Object
-  extended by mycompiler.SourceFile
-
-
-
-
public class SourceFile
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
- de.dhbwstuttgart.typeinference.MengeKlassenVektor - -
-           
-  - - - - - - - - - - -
-Constructor Summary
SourceFile() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(boolean system_out) - -
-           
- java.util.Iterator<Class>getClassIterator() - -
-           
- FC_TTOmakeFC() - -
-           
- voidsc_check(boolean ext) - -
-           
- voidset_Class(Class c) - -
-           
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>typeReconstruction() - -
-          Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-KlassenVektor

-
-public de.dhbwstuttgart.typeinference.Menge KlassenVektor
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-SourceFile

-
-public SourceFile()
-
-
- - - - - - - - -
-Method Detail
- -

-sc_check

-
-public void sc_check(boolean ext)
-              throws SCException
-
-
- -
Throws: -
SCException
-
-
-
- -

-set_Class

-
-public void set_Class(Class c)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(boolean system_out)
-
-
-
-
-
-
- -

-makeFC

-
-public FC_TTO makeFC()
-
-
-
-
-
-
- -

-typeReconstruction

-
-public de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> typeReconstruction()
-                                                               throws CTypeReconstructionException
-
-
Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf. - Dessen Ergebnismenge A, die Menge aller Typannahmen, f�r eine Klasse dient als - Eingabe f�r TRProg der n�chsten Klasse. Am Ende enth�lt A alle m�glichen - Typkombinationen f�r alle Klassen zusammen. -
Author: J�rg B�uerle -

-

- -
Returns:
Liste aller m�glichen Typkombinationen -
Throws: -
CTypeReconstructionException - Wenn was schief l�uft
-
-
-
- -

-getClassIterator

-
-public java.util.Iterator<Class> getClassIterator()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/class-use/MyCompiler.html b/doc/Javadoc/mycompiler/class-use/MyCompiler.html deleted file mode 100755 index dfed2332..00000000 --- a/doc/Javadoc/mycompiler/class-use/MyCompiler.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.MyCompiler - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.MyCompiler

-
-No usage of mycompiler.MyCompiler -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/class-use/MyCompilerAPI.html b/doc/Javadoc/mycompiler/class-use/MyCompilerAPI.html deleted file mode 100755 index 412e5ffa..00000000 --- a/doc/Javadoc/mycompiler/class-use/MyCompilerAPI.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - -Uses of Interface mycompiler.MyCompilerAPI - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
mycompiler.MyCompilerAPI

-
- - - - - - - - - -
-Packages that use MyCompilerAPI
mycompiler  
-  -

- - - - - -
-Uses of MyCompilerAPI in mycompiler
-  -

- - - - - - - - - -
Classes in mycompiler that implement MyCompilerAPI
- classMyCompiler - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler that return MyCompilerAPI
-static MyCompilerAPIMyCompiler.getAPI() - -
-          Author: Jörg Bäuerle
- Stellt eine neue Instanz der CompilerAPI zur Verfügung.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/class-use/SourceFile.html b/doc/Javadoc/mycompiler/class-use/SourceFile.html deleted file mode 100755 index 151b1eb1..00000000 --- a/doc/Javadoc/mycompiler/class-use/SourceFile.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - -Uses of Class mycompiler.SourceFile - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.SourceFile

-
- - - - - - - - - -
-Packages that use SourceFile
mycompiler  
-  -

- - - - - -
-Uses of SourceFile in mycompiler
-  -

- - - - - - - - - - - - - -
Methods in mycompiler that return SourceFile
- SourceFileMyCompilerAPI.getSyntaxTree() - -
-          Author: Jörg Bäuerle
- Liefert den geparsten Syntaxbaum zurück.
- SourceFileMyCompiler.getSyntaxTree() - -
-          Author: Jörg Bäuerle
- Liefert den geparsten Syntaxbaume zurück.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/Attribute.html b/doc/Javadoc/mycompiler/mybytecode/Attribute.html deleted file mode 100755 index 9ef57d66..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/Attribute.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - - -Attribute - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class Attribute

-
-java.lang.Object
-  extended by mycompiler.mybytecode.Attribute
-
-
-
Direct Known Subclasses:
AttributeInfo, CodeAttribute
-
-
-
-
public abstract class Attribute
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Attribute() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
-abstract  voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- shortget_attribute_name_index() - -
-           
-abstract  intget_attributes_length() - -
-           
- voidset_attribute_name_index(short t) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Attribute

-
-public Attribute()
-
-
- - - - - - - - -
-Method Detail
- -

-get_attribute_name_index

-
-public short get_attribute_name_index()
-
-
-
-
-
-
- -

-set_attribute_name_index

-
-public void set_attribute_name_index(short t)
-
-
-
-
-
-
- -

-codegen

-
-public abstract void codegen(ClassFile classfile,
-                             java.io.FileOutputStream f)
-                      throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-get_attributes_length

-
-public abstract int get_attributes_length()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/AttributeInfo.html b/doc/Javadoc/mycompiler/mybytecode/AttributeInfo.html deleted file mode 100755 index f2b8aec8..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/AttributeInfo.html +++ /dev/null @@ -1,365 +0,0 @@ - - - - - - -AttributeInfo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class AttributeInfo

-
-java.lang.Object
-  extended by mycompiler.mybytecode.Attribute
-      extended by mycompiler.mybytecode.AttributeInfo
-
-
-
-
public class AttributeInfo
extends Attribute
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
AttributeInfo() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- intget_attributes_length() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_info_Menge() - -
-           
- byte[]get_info() - -
-           
- voidset_info(byte[] t) - -
-           
- voidset_info(de.dhbwstuttgart.typeinference.Menge t) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mybytecode.Attribute
get_attribute_name_index, set_attribute_name_index
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-AttributeInfo

-
-public AttributeInfo()
-
-
- - - - - - - - -
-Method Detail
- -

-get_info

-
-public byte[] get_info()
-
-
-
-
-
-
- -

-get_info_Menge

-
-public de.dhbwstuttgart.typeinference.Menge get_info_Menge()
-
-
-
-
-
-
- -

-get_attributes_length

-
-public int get_attributes_length()
-
-
-
Specified by:
get_attributes_length in class Attribute
-
-
-
-
-
-
- -

-set_info

-
-public void set_info(byte[] t)
-
-
-
-
-
-
- -

-set_info

-
-public void set_info(de.dhbwstuttgart.typeinference.Menge t)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Attribute
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Class_info.html b/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Class_info.html deleted file mode 100755 index 5dd12923..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Class_info.html +++ /dev/null @@ -1,302 +0,0 @@ - - - - - - -CONSTANT_Class_info - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class CONSTANT_Class_info

-
-java.lang.Object
-  extended by mycompiler.mybytecode.CPInfo
-      extended by mycompiler.mybytecode.CONSTANT_Class_info
-
-
-
-
public class CONSTANT_Class_info
extends CPInfo
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CONSTANT_Class_info() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- shortget_name_index() - -
-           
- voidset_name_index(short i) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mybytecode.CPInfo
get_tag, set_tag
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CONSTANT_Class_info

-
-public CONSTANT_Class_info()
-
-
- - - - - - - - -
-Method Detail
- -

-get_name_index

-
-public short get_name_index()
-
-
-
-
-
-
- -

-set_name_index

-
-public void set_name_index(short i)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-
-
-
Specified by:
codegen in class CPInfo
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Double_info.html b/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Double_info.html deleted file mode 100755 index 2cb485d5..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Double_info.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - -CONSTANT_Double_info - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class CONSTANT_Double_info

-
-java.lang.Object
-  extended by mycompiler.mybytecode.CPInfo
-      extended by mycompiler.mybytecode.CONSTANT_Double_info
-
-
-
-
public class CONSTANT_Double_info
extends CPInfo
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CONSTANT_Double_info() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- intget_high_bytes() - -
-           
- intget_low_bytes() - -
-           
- voidset_high_bytes(int t) - -
-           
- voidset_low_bytes(int t) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mybytecode.CPInfo
get_tag, set_tag
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CONSTANT_Double_info

-
-public CONSTANT_Double_info()
-
-
- - - - - - - - -
-Method Detail
- -

-get_high_bytes

-
-public int get_high_bytes()
-
-
-
-
-
-
- -

-get_low_bytes

-
-public int get_low_bytes()
-
-
-
-
-
-
- -

-set_high_bytes

-
-public void set_high_bytes(int t)
-
-
-
-
-
-
- -

-set_low_bytes

-
-public void set_low_bytes(int t)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-
-
-
Specified by:
codegen in class CPInfo
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Fieldref_info.html b/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Fieldref_info.html deleted file mode 100755 index 0ed9b89a..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Fieldref_info.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - -CONSTANT_Fieldref_info - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class CONSTANT_Fieldref_info

-
-java.lang.Object
-  extended by mycompiler.mybytecode.CPInfo
-      extended by mycompiler.mybytecode.CONSTANT_Fieldref_info
-
-
-
-
public class CONSTANT_Fieldref_info
extends CPInfo
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CONSTANT_Fieldref_info() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- shortget_class_index() - -
-           
- shortget_name_and_type_index() - -
-           
- voidset_class_index(short i) - -
-           
- voidset_name_and_type_index(short i) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mybytecode.CPInfo
get_tag, set_tag
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CONSTANT_Fieldref_info

-
-public CONSTANT_Fieldref_info()
-
-
- - - - - - - - -
-Method Detail
- -

-get_class_index

-
-public short get_class_index()
-
-
-
-
-
-
- -

-get_name_and_type_index

-
-public short get_name_and_type_index()
-
-
-
-
-
-
- -

-set_class_index

-
-public void set_class_index(short i)
-
-
-
-
-
-
- -

-set_name_and_type_index

-
-public void set_name_and_type_index(short i)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-
-
-
Specified by:
codegen in class CPInfo
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Float_info.html b/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Float_info.html deleted file mode 100755 index d0bbeb11..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Float_info.html +++ /dev/null @@ -1,302 +0,0 @@ - - - - - - -CONSTANT_Float_info - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class CONSTANT_Float_info

-
-java.lang.Object
-  extended by mycompiler.mybytecode.CPInfo
-      extended by mycompiler.mybytecode.CONSTANT_Float_info
-
-
-
-
public class CONSTANT_Float_info
extends CPInfo
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CONSTANT_Float_info() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- intget_bytes() - -
-           
- voidset_bytes(int t) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mybytecode.CPInfo
get_tag, set_tag
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CONSTANT_Float_info

-
-public CONSTANT_Float_info()
-
-
- - - - - - - - -
-Method Detail
- -

-get_bytes

-
-public int get_bytes()
-
-
-
-
-
-
- -

-set_bytes

-
-public void set_bytes(int t)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-
-
-
Specified by:
codegen in class CPInfo
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Integer_info.html b/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Integer_info.html deleted file mode 100755 index 70a38719..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Integer_info.html +++ /dev/null @@ -1,302 +0,0 @@ - - - - - - -CONSTANT_Integer_info - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class CONSTANT_Integer_info

-
-java.lang.Object
-  extended by mycompiler.mybytecode.CPInfo
-      extended by mycompiler.mybytecode.CONSTANT_Integer_info
-
-
-
-
public class CONSTANT_Integer_info
extends CPInfo
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CONSTANT_Integer_info() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- intget_bytes() - -
-           
- voidset_bytes(int t) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mybytecode.CPInfo
get_tag, set_tag
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CONSTANT_Integer_info

-
-public CONSTANT_Integer_info()
-
-
- - - - - - - - -
-Method Detail
- -

-get_bytes

-
-public int get_bytes()
-
-
-
-
-
-
- -

-set_bytes

-
-public void set_bytes(int t)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-
-
-
Specified by:
codegen in class CPInfo
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_InterfaceMethodref_info.html b/doc/Javadoc/mycompiler/mybytecode/CONSTANT_InterfaceMethodref_info.html deleted file mode 100755 index 9eff6289..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_InterfaceMethodref_info.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - -CONSTANT_InterfaceMethodref_info - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class CONSTANT_InterfaceMethodref_info

-
-java.lang.Object
-  extended by mycompiler.mybytecode.CPInfo
-      extended by mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info
-
-
-
-
public class CONSTANT_InterfaceMethodref_info
extends CPInfo
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CONSTANT_InterfaceMethodref_info() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- shortget_class_index() - -
-           
- shortget_name_and_type_index() - -
-           
- voidset_class_index(short t) - -
-           
- voidset_name_and_type_index(short t) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mybytecode.CPInfo
get_tag, set_tag
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CONSTANT_InterfaceMethodref_info

-
-public CONSTANT_InterfaceMethodref_info()
-
-
- - - - - - - - -
-Method Detail
- -

-get_class_index

-
-public short get_class_index()
-
-
-
-
-
-
- -

-get_name_and_type_index

-
-public short get_name_and_type_index()
-
-
-
-
-
-
- -

-set_class_index

-
-public void set_class_index(short t)
-
-
-
-
-
-
- -

-set_name_and_type_index

-
-public void set_name_and_type_index(short t)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-
-
-
Specified by:
codegen in class CPInfo
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Long_info.html b/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Long_info.html deleted file mode 100755 index b11b2712..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Long_info.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - -CONSTANT_Long_info - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class CONSTANT_Long_info

-
-java.lang.Object
-  extended by mycompiler.mybytecode.CPInfo
-      extended by mycompiler.mybytecode.CONSTANT_Long_info
-
-
-
-
public class CONSTANT_Long_info
extends CPInfo
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CONSTANT_Long_info() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- intget_high_bytes() - -
-           
- intget_low_bytes() - -
-           
- voidset_high_bytes(int t) - -
-           
- voidset_low_bytes(int t) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mybytecode.CPInfo
get_tag, set_tag
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CONSTANT_Long_info

-
-public CONSTANT_Long_info()
-
-
- - - - - - - - -
-Method Detail
- -

-get_high_bytes

-
-public int get_high_bytes()
-
-
-
-
-
-
- -

-get_low_bytes

-
-public int get_low_bytes()
-
-
-
-
-
-
- -

-set_high_bytes

-
-public void set_high_bytes(int t)
-
-
-
-
-
-
- -

-set_low_bytes

-
-public void set_low_bytes(int t)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-
-
-
Specified by:
codegen in class CPInfo
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Methodref_info.html b/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Methodref_info.html deleted file mode 100755 index 28d4021f..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Methodref_info.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - -CONSTANT_Methodref_info - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class CONSTANT_Methodref_info

-
-java.lang.Object
-  extended by mycompiler.mybytecode.CPInfo
-      extended by mycompiler.mybytecode.CONSTANT_Methodref_info
-
-
-
-
public class CONSTANT_Methodref_info
extends CPInfo
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CONSTANT_Methodref_info() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- shortget_class_index() - -
-           
- shortget_name_and_type_index() - -
-           
- voidset_class_index(short t) - -
-           
- voidset_name_and_type_index(short t) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mybytecode.CPInfo
get_tag, set_tag
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CONSTANT_Methodref_info

-
-public CONSTANT_Methodref_info()
-
-
- - - - - - - - -
-Method Detail
- -

-get_class_index

-
-public short get_class_index()
-
-
-
-
-
-
- -

-get_name_and_type_index

-
-public short get_name_and_type_index()
-
-
-
-
-
-
- -

-set_class_index

-
-public void set_class_index(short t)
-
-
-
-
-
-
- -

-set_name_and_type_index

-
-public void set_name_and_type_index(short t)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-
-
-
Specified by:
codegen in class CPInfo
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_NameAndType_info.html b/doc/Javadoc/mycompiler/mybytecode/CONSTANT_NameAndType_info.html deleted file mode 100755 index 602d32f3..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_NameAndType_info.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - -CONSTANT_NameAndType_info - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class CONSTANT_NameAndType_info

-
-java.lang.Object
-  extended by mycompiler.mybytecode.CPInfo
-      extended by mycompiler.mybytecode.CONSTANT_NameAndType_info
-
-
-
-
public class CONSTANT_NameAndType_info
extends CPInfo
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CONSTANT_NameAndType_info() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- shortget_descriptor_index() - -
-           
- shortget_name_index() - -
-           
- voidset_descriptor_index(short t) - -
-           
- voidset_name_index(short t) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mybytecode.CPInfo
get_tag, set_tag
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CONSTANT_NameAndType_info

-
-public CONSTANT_NameAndType_info()
-
-
- - - - - - - - -
-Method Detail
- -

-get_name_index

-
-public short get_name_index()
-
-
-
-
-
-
- -

-get_descriptor_index

-
-public short get_descriptor_index()
-
-
-
-
-
-
- -

-set_name_index

-
-public void set_name_index(short t)
-
-
-
-
-
-
- -

-set_descriptor_index

-
-public void set_descriptor_index(short t)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-
-
-
Specified by:
codegen in class CPInfo
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_String_info.html b/doc/Javadoc/mycompiler/mybytecode/CONSTANT_String_info.html deleted file mode 100755 index 22d9e180..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_String_info.html +++ /dev/null @@ -1,302 +0,0 @@ - - - - - - -CONSTANT_String_info - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class CONSTANT_String_info

-
-java.lang.Object
-  extended by mycompiler.mybytecode.CPInfo
-      extended by mycompiler.mybytecode.CONSTANT_String_info
-
-
-
-
public class CONSTANT_String_info
extends CPInfo
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CONSTANT_String_info() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- shortget_string_index() - -
-           
- voidset_string_index(short t) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mybytecode.CPInfo
get_tag, set_tag
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CONSTANT_String_info

-
-public CONSTANT_String_info()
-
-
- - - - - - - - -
-Method Detail
- -

-get_string_index

-
-public short get_string_index()
-
-
-
-
-
-
- -

-set_string_index

-
-public void set_string_index(short t)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-
-
-
Specified by:
codegen in class CPInfo
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Utf8_info.html b/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Utf8_info.html deleted file mode 100755 index 3b36074b..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/CONSTANT_Utf8_info.html +++ /dev/null @@ -1,302 +0,0 @@ - - - - - - -CONSTANT_Utf8_info - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class CONSTANT_Utf8_info

-
-java.lang.Object
-  extended by mycompiler.mybytecode.CPInfo
-      extended by mycompiler.mybytecode.CONSTANT_Utf8_info
-
-
-
-
public class CONSTANT_Utf8_info
extends CPInfo
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CONSTANT_Utf8_info() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- byte[]get_bytes() - -
-           
- voidset_bytes(byte[] t) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mybytecode.CPInfo
get_tag, set_tag
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CONSTANT_Utf8_info

-
-public CONSTANT_Utf8_info()
-
-
- - - - - - - - -
-Method Detail
- -

-get_bytes

-
-public byte[] get_bytes()
-
-
-
-
-
-
- -

-set_bytes

-
-public void set_bytes(byte[] t)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-
-
-
Specified by:
codegen in class CPInfo
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/CPInfo.html b/doc/Javadoc/mycompiler/mybytecode/CPInfo.html deleted file mode 100755 index 82880a23..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/CPInfo.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - -CPInfo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class CPInfo

-
-java.lang.Object
-  extended by mycompiler.mybytecode.CPInfo
-
-
-
Direct Known Subclasses:
CONSTANT_Class_info, CONSTANT_Double_info, CONSTANT_Fieldref_info, CONSTANT_Float_info, CONSTANT_Integer_info, CONSTANT_InterfaceMethodref_info, CONSTANT_Long_info, CONSTANT_Methodref_info, CONSTANT_NameAndType_info, CONSTANT_String_info, CONSTANT_Utf8_info
-
-
-
-
public abstract class CPInfo
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CPInfo() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
-abstract  voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- byteget_tag() - -
-           
- voidset_tag(byte t) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CPInfo

-
-public CPInfo()
-
-
- - - - - - - - -
-Method Detail
- -

-get_tag

-
-public byte get_tag()
-
-
-
-
-
-
- -

-set_tag

-
-public void set_tag(byte t)
-
-
-
-
-
-
- -

-codegen

-
-public abstract void codegen(ClassFile classfile,
-                             java.io.FileOutputStream f)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/ClassFile.html b/doc/Javadoc/mycompiler/mybytecode/ClassFile.html deleted file mode 100755 index 9915c070..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/ClassFile.html +++ /dev/null @@ -1,1036 +0,0 @@ - - - - - - -ClassFile - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class ClassFile

-
-java.lang.Object
-  extended by mycompiler.mybytecode.ClassFile
-
-
-
-
public class ClassFile
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - - - - - -
-Field Summary
- booleanhamaAload0 - -
-           
- booleanhamaDebug - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ClassFile(boolean b) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidadd_class(java.lang.String name, - java.lang.String super_name, - short acc_flag) - -
-           
- voidadd_classblock_Element(Assign a) - -
-           
- intadd_CONSTANT_Class_info(java.lang.String name) - -
-           
- intadd_CONSTANT_Integer_info(int i) - -
-           
- intadd_CONSTANT_NameAndType_info(java.lang.String name, - java.lang.String param_type) - -
-           
- intadd_CONSTANT_String_info(java.lang.String s) - -
-           
- intadd_CONSTANT_Utf8_info(java.lang.String name) - -
-           
- intadd_field_ref(java.lang.String name, - java.lang.String cl_name, - java.lang.String type) - -
-           
- voidadd_field(java.lang.String name, - java.lang.String type, - short acc_flag) - -
-           
- intadd_method_ref(java.lang.String cl_name, - java.lang.String name, - java.lang.String param_type) - -
-           
- voidadd_method(java.lang.String name, - java.lang.String param_type, - ParameterList param, - Type type, - Block block, - short acc_flag, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidcodegen() - -
-           
- shortget_access_flags() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_attributes() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_class_block() - -
-           
- shortget_constant_pool_element(byte b, - java.lang.String id) - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_constant_pool() - -
-           
- booleanget_constructor_founded() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_fields() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_key_Menge() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_methods() - -
-           
- shortget_super_class() - -
-           
- booleanget_system_out() - -
-           
- shortget_this_class() - -
-           
- voidset_access_flags(short t) - -
-           
- voidset_attributes(de.dhbwstuttgart.typeinference.Menge t) - -
-           
- voidset_constant_pool(de.dhbwstuttgart.typeinference.Menge t) - -
-           
- voidset_constructor_founded(boolean t) - -
-           
- voidset_fields(de.dhbwstuttgart.typeinference.Menge t) - -
-           
- voidset_methods(de.dhbwstuttgart.typeinference.Menge t) - -
-           
- voidset_super_class(short t) - -
-           
- voidset_system_out(boolean t) - -
-           
- voidset_this_class(short t) - -
-           
- voidwriteByte(java.io.FileOutputStream f, - byte i) - -
-           
- voidwriteByteArray(java.io.FileOutputStream f, - byte[] b) - -
-           
- voidwriteInt(java.io.FileOutputStream f, - int i) - -
-           
- voidwriteShort(java.io.FileOutputStream f, - short i) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-hamaDebug

-
-public boolean hamaDebug
-
-
-
-
-
- -

-hamaAload0

-
-public boolean hamaAload0
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ClassFile

-
-public ClassFile(boolean b)
-
-
- - - - - - - - -
-Method Detail
- -

-add_CONSTANT_Utf8_info

-
-public int add_CONSTANT_Utf8_info(java.lang.String name)
-
-
-
-
-
-
- -

-add_CONSTANT_Class_info

-
-public int add_CONSTANT_Class_info(java.lang.String name)
-
-
-
-
-
-
- -

-add_CONSTANT_NameAndType_info

-
-public int add_CONSTANT_NameAndType_info(java.lang.String name,
-                                         java.lang.String param_type)
-
-
-
-
-
-
- -

-add_CONSTANT_Integer_info

-
-public int add_CONSTANT_Integer_info(int i)
-
-
-
-
-
-
- -

-add_CONSTANT_String_info

-
-public int add_CONSTANT_String_info(java.lang.String s)
-
-
-
-
-
-
- -

-add_class

-
-public void add_class(java.lang.String name,
-                      java.lang.String super_name,
-                      short acc_flag)
-
-
-
-
-
-
- -

-add_method

-
-public void add_method(java.lang.String name,
-                       java.lang.String param_type,
-                       ParameterList param,
-                       Type type,
-                       Block block,
-                       short acc_flag,
-                       de.dhbwstuttgart.typeinference.Menge paralist)
-                throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-add_method_ref

-
-public int add_method_ref(java.lang.String cl_name,
-                          java.lang.String name,
-                          java.lang.String param_type)
-
-
-
-
-
-
- -

-add_field

-
-public void add_field(java.lang.String name,
-                      java.lang.String type,
-                      short acc_flag)
-
-
-
-
-
-
- -

-add_field_ref

-
-public int add_field_ref(java.lang.String name,
-                         java.lang.String cl_name,
-                         java.lang.String type)
-                  throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-set_constant_pool

-
-public void set_constant_pool(de.dhbwstuttgart.typeinference.Menge t)
-
-
-
-
-
-
- -

-set_access_flags

-
-public void set_access_flags(short t)
-
-
-
-
-
-
- -

-set_this_class

-
-public void set_this_class(short t)
-
-
-
-
-
-
- -

-set_super_class

-
-public void set_super_class(short t)
-
-
-
-
-
-
- -

-set_fields

-
-public void set_fields(de.dhbwstuttgart.typeinference.Menge t)
-
-
-
-
-
-
- -

-set_methods

-
-public void set_methods(de.dhbwstuttgart.typeinference.Menge t)
-
-
-
-
-
-
- -

-set_attributes

-
-public void set_attributes(de.dhbwstuttgart.typeinference.Menge t)
-
-
-
-
-
-
- -

-set_constructor_founded

-
-public void set_constructor_founded(boolean t)
-
-
-
-
-
-
- -

-set_system_out

-
-public void set_system_out(boolean t)
-
-
-
-
-
-
- -

-add_classblock_Element

-
-public void add_classblock_Element(Assign a)
-
-
-
-
-
-
- -

-get_constant_pool

-
-public de.dhbwstuttgart.typeinference.Menge get_constant_pool()
-
-
-
-
-
-
- -

-get_access_flags

-
-public short get_access_flags()
-
-
-
-
-
-
- -

-get_this_class

-
-public short get_this_class()
-
-
-
-
-
-
- -

-get_super_class

-
-public short get_super_class()
-
-
-
-
-
-
- -

-get_fields

-
-public de.dhbwstuttgart.typeinference.Menge get_fields()
-
-
-
-
-
-
- -

-get_methods

-
-public de.dhbwstuttgart.typeinference.Menge get_methods()
-
-
-
-
-
-
- -

-get_attributes

-
-public de.dhbwstuttgart.typeinference.Menge get_attributes()
-
-
-
-
-
-
- -

-get_key_Menge

-
-public de.dhbwstuttgart.typeinference.Menge get_key_Menge()
-
-
-
-
-
-
- -

-get_constructor_founded

-
-public boolean get_constructor_founded()
-
-
-
-
-
-
- -

-get_system_out

-
-public boolean get_system_out()
-
-
-
-
-
-
- -

-get_constant_pool_element

-
-public short get_constant_pool_element(byte b,
-                                       java.lang.String id)
-
-
-
-
-
-
- -

-get_class_block

-
-public de.dhbwstuttgart.typeinference.Menge get_class_block()
-
-
-
-
-
-
- -

-codegen

-
-public void codegen()
-             throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-writeInt

-
-public void writeInt(java.io.FileOutputStream f,
-                     int i)
-
-
-
-
-
-
- -

-writeShort

-
-public void writeShort(java.io.FileOutputStream f,
-                       short i)
-
-
-
-
-
-
- -

-writeByte

-
-public void writeByte(java.io.FileOutputStream f,
-                      byte i)
-
-
-
-
-
-
- -

-writeByteArray

-
-public void writeByteArray(java.io.FileOutputStream f,
-                           byte[] b)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/CodeAttribute.html b/doc/Javadoc/mycompiler/mybytecode/CodeAttribute.html deleted file mode 100755 index 31d11a27..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/CodeAttribute.html +++ /dev/null @@ -1,623 +0,0 @@ - - - - - - -CodeAttribute - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class CodeAttribute

-
-java.lang.Object
-  extended by mycompiler.mybytecode.Attribute
-      extended by mycompiler.mybytecode.CodeAttribute
-
-
-
-
public class CodeAttribute
extends Attribute
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CodeAttribute(java.lang.String class_name, - short acc_flags) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidadd_code_byte_array(byte[] b) - -
-           
- voidadd_code_byte(int b) - -
-           
- voidadd_code_int(int i) - -
-           
- voidadd_code_short(int s) - -
-           
- voidadd_code(java.lang.Byte b) - -
-           
- voidadd_local(java.lang.String s, - Type t) - -
-           
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- intget_attributes_length() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_attributes_Menge() - -
-           
- intget_code_length() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_code_Menge() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_exception_table_Menge() - -
-           
- intget_indexOf_Var(java.lang.String name) - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_local_Menge() - -
-           
- Typeget_TypeOf_Var(java.lang.String name) - -
-           
- voidset_attributes_Menge(de.dhbwstuttgart.typeinference.Menge t) - -
-           
- voidset_code_short(int s, - int i) - -
-           
- voidset_code(java.lang.Byte b, - int i) - -
-           
- voidset_exception_table_Menge(de.dhbwstuttgart.typeinference.Menge t) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mybytecode.Attribute
get_attribute_name_index, set_attribute_name_index
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CodeAttribute

-
-public CodeAttribute(java.lang.String class_name,
-                     short acc_flags)
-
-
- - - - - - - - -
-Method Detail
- -

-get_code_Menge

-
-public de.dhbwstuttgart.typeinference.Menge get_code_Menge()
-
-
-
-
-
-
- -

-get_exception_table_Menge

-
-public de.dhbwstuttgart.typeinference.Menge get_exception_table_Menge()
-
-
-
-
-
-
- -

-get_attributes_Menge

-
-public de.dhbwstuttgart.typeinference.Menge get_attributes_Menge()
-
-
-
-
-
-
- -

-get_local_Menge

-
-public de.dhbwstuttgart.typeinference.Menge get_local_Menge()
-
-
-
-
-
-
- -

-get_code_length

-
-public int get_code_length()
-
-
-
-
-
-
- -

-add_local

-
-public void add_local(java.lang.String s,
-                      Type t)
-
-
-
-
-
-
- -

-add_code

-
-public void add_code(java.lang.Byte b)
-
-
-
-
-
-
- -

-set_code

-
-public void set_code(java.lang.Byte b,
-                     int i)
-
-
-
-
-
-
- -

-add_code_int

-
-public void add_code_int(int i)
-
-
-
-
-
-
- -

-add_code_short

-
-public void add_code_short(int s)
-
-
-
-
-
-
- -

-set_code_short

-
-public void set_code_short(int s,
-                           int i)
-
-
-
-
-
-
- -

-add_code_byte

-
-public void add_code_byte(int b)
-
-
-
-
-
-
- -

-add_code_byte_array

-
-public void add_code_byte_array(byte[] b)
-
-
-
-
-
-
- -

-get_indexOf_Var

-
-public int get_indexOf_Var(java.lang.String name)
-
-
-
-
-
-
- -

-get_TypeOf_Var

-
-public Type get_TypeOf_Var(java.lang.String name)
-                    throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-get_attributes_length

-
-public int get_attributes_length()
-
-
-
Specified by:
get_attributes_length in class Attribute
-
-
-
-
-
-
- -

-set_exception_table_Menge

-
-public void set_exception_table_Menge(de.dhbwstuttgart.typeinference.Menge t)
-
-
-
-
-
-
- -

-set_attributes_Menge

-
-public void set_attributes_Menge(de.dhbwstuttgart.typeinference.Menge t)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Attribute
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/ExceptionTable.html b/doc/Javadoc/mycompiler/mybytecode/ExceptionTable.html deleted file mode 100755 index 15eb3bb1..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/ExceptionTable.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - -ExceptionTable - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class ExceptionTable

-
-java.lang.Object
-  extended by mycompiler.mybytecode.ExceptionTable
-
-
-
-
public class ExceptionTable
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
ExceptionTable() - -
-           
-  - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-ExceptionTable

-
-public ExceptionTable()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/FieldInfo.html b/doc/Javadoc/mycompiler/mybytecode/FieldInfo.html deleted file mode 100755 index 474df3c3..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/FieldInfo.html +++ /dev/null @@ -1,520 +0,0 @@ - - - - - - -FieldInfo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class FieldInfo

-
-java.lang.Object
-  extended by mycompiler.mybytecode.FieldInfo
-
-
-
-
public class FieldInfo
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
FieldInfo() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- shortget_access_flags() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_attributes() - -
-           
- java.lang.Stringget_Class_Name() - -
-           
- shortget_descriptor_index() - -
-           
- shortget_name_index() - -
-           
- java.lang.Stringget_Name() - -
-           
- java.lang.Stringget_Type() - -
-           
- voidset_access_flags(short t) - -
-           
- voidset_attributes(de.dhbwstuttgart.typeinference.Menge t) - -
-           
- voidset_Class_Name(java.lang.String t) - -
-           
- voidset_descriptor_index(short t) - -
-           
- voidset_name_index(short t) - -
-           
- voidset_Name(java.lang.String t) - -
-           
- voidset_Type(java.lang.String t) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-FieldInfo

-
-public FieldInfo()
-
-
- - - - - - - - -
-Method Detail
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
-
-
-
- -

-get_Type

-
-public java.lang.String get_Type()
-
-
-
-
-
-
- -

-get_Class_Name

-
-public java.lang.String get_Class_Name()
-
-
-
-
-
-
- -

-get_access_flags

-
-public short get_access_flags()
-
-
-
-
-
-
- -

-get_name_index

-
-public short get_name_index()
-
-
-
-
-
-
- -

-get_descriptor_index

-
-public short get_descriptor_index()
-
-
-
-
-
-
- -

-get_attributes

-
-public de.dhbwstuttgart.typeinference.Menge get_attributes()
-
-
-
-
-
-
- -

-set_Name

-
-public void set_Name(java.lang.String t)
-
-
-
-
-
-
- -

-set_Type

-
-public void set_Type(java.lang.String t)
-
-
-
-
-
-
- -

-set_Class_Name

-
-public void set_Class_Name(java.lang.String t)
-
-
-
-
-
-
- -

-set_access_flags

-
-public void set_access_flags(short t)
-
-
-
-
-
-
- -

-set_name_index

-
-public void set_name_index(short t)
-
-
-
-
-
-
- -

-set_descriptor_index

-
-public void set_descriptor_index(short t)
-
-
-
-
-
-
- -

-set_attributes

-
-public void set_attributes(de.dhbwstuttgart.typeinference.Menge t)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-             throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/JVMCode.html b/doc/Javadoc/mycompiler/mybytecode/JVMCode.html deleted file mode 100755 index 2b94eb7d..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/JVMCode.html +++ /dev/null @@ -1,4812 +0,0 @@ - - - - - - -JVMCode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class JVMCode

-
-java.lang.Object
-  extended by mycompiler.mybytecode.JVMCode
-
-
-
-
public class JVMCode
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Field Summary
-static java.lang.Byteaaload - -
-           
-static java.lang.Byteaastore - -
-           
-static java.lang.Byteaconst_null - -
-           
-static java.lang.Byteaload - -
-           
-static java.lang.Byteaload_0 - -
-           
-static java.lang.Byteaload_1 - -
-           
-static java.lang.Byteaload_2 - -
-           
-static java.lang.Byteaload_3 - -
-           
-static java.lang.Byteanewarray - -
-           
-static java.lang.Byteareturn - -
-           
-static java.lang.Bytearraylength - -
-           
-static java.lang.Byteastore - -
-           
-static java.lang.Byteastore_0 - -
-           
-static java.lang.Byteastore_1 - -
-           
-static java.lang.Byteastore_2 - -
-           
-static java.lang.Byteastore_3 - -
-           
-static java.lang.Byteathrow - -
-           
-static java.lang.Bytebaload - -
-           
-static java.lang.Bytebastore - -
-           
-static java.lang.Bytebipush - -
-           
-static java.lang.Bytebreakpoint - -
-           
-static java.lang.Bytecaload - -
-           
-static java.lang.Bytecastore - -
-           
-static java.lang.Bytecheckcast - -
-           
-static byteCONSTANT_Class - -
-           
-static byteCONSTANT_Double - -
-           
-static byteCONSTANT_Fieldref - -
-           
-static byteCONSTANT_Float - -
-           
-static byteCONSTANT_Integer - -
-           
-static byteCONSTANT_InterfaceMethodref - -
-           
-static byteCONSTANT_Long - -
-           
-static byteCONSTANT_Methodref - -
-           
-static byteCONSTANT_NameAndType - -
-           
-static byteCONSTANT_String - -
-           
-static byteCONSTANT_Utf8 - -
-           
-static java.lang.Byted2f - -
-           
-static java.lang.Byted2i - -
-           
-static java.lang.Byted2l - -
-           
-static java.lang.Bytedadd - -
-           
-static java.lang.Bytedaload - -
-           
-static java.lang.Bytedastore - -
-           
-static java.lang.Bytedcmpg - -
-           
-static java.lang.Bytedcmpl - -
-           
-static java.lang.Bytedconst_0 - -
-           
-static java.lang.Bytedconst_1 - -
-           
-static java.lang.Byteddiv - -
-           
-static java.lang.Bytedload - -
-           
-static java.lang.Bytedload_0 - -
-           
-static java.lang.Bytedload_1 - -
-           
-static java.lang.Bytedload_2 - -
-           
-static java.lang.Bytedload_3 - -
-           
-static java.lang.Bytedmul - -
-           
-static java.lang.Bytedneg - -
-           
-static java.lang.Bytedrem - -
-           
-static java.lang.Bytedreturn - -
-           
-static java.lang.Bytedstore - -
-           
-static java.lang.Bytedstore_0 - -
-           
-static java.lang.Bytedstore_1 - -
-           
-static java.lang.Bytedstore_2 - -
-           
-static java.lang.Bytedstore_3 - -
-           
-static java.lang.Bytedsub - -
-           
-static java.lang.Bytedup - -
-           
-static java.lang.Bytedup_x1 - -
-           
-static java.lang.Bytedup_x2 - -
-           
-static java.lang.Bytedup2 - -
-           
-static java.lang.Bytedup2_x1 - -
-           
-static java.lang.Bytedup2_x2 - -
-           
-static java.lang.Bytef2d - -
-           
-static java.lang.Bytef2i - -
-           
-static java.lang.Bytef2l - -
-           
-static java.lang.Bytefadd - -
-           
-static java.lang.Bytefaload - -
-           
-static java.lang.Bytefastore - -
-           
-static java.lang.Bytefcmpg - -
-           
-static java.lang.Bytefcmpl - -
-           
-static java.lang.Bytefconst_0 - -
-           
-static java.lang.Bytefconst_1 - -
-           
-static java.lang.Bytefconst_2 - -
-           
-static java.lang.Bytefdiv - -
-           
-static java.lang.Bytefload - -
-           
-static java.lang.Bytefload_0 - -
-           
-static java.lang.Bytefload_1 - -
-           
-static java.lang.Bytefload_2 - -
-           
-static java.lang.Bytefload_3 - -
-           
-static java.lang.Bytefmul - -
-           
-static java.lang.Bytefneg - -
-           
-static java.lang.Bytefrem - -
-           
-static java.lang.Bytefreturn - -
-           
-static java.lang.Bytefstore - -
-           
-static java.lang.Bytefstore_0 - -
-           
-static java.lang.Bytefstore_1 - -
-           
-static java.lang.Bytefstore_2 - -
-           
-static java.lang.Bytefstore_3 - -
-           
-static java.lang.Bytefsub - -
-           
-static java.lang.Bytegetfield - -
-           
-static java.lang.Bytegetstatic - -
-           
-static java.lang.Bytegoto_ - -
-           
-static java.lang.Bytegoto_w - -
-           
-static booleanhamaDebug - -
-           
-static java.lang.Bytei2b - -
-           
-static java.lang.Bytei2c - -
-           
-static java.lang.Bytei2d - -
-           
-static java.lang.Bytei2f - -
-           
-static java.lang.Bytei2l - -
-           
-static java.lang.Bytei2s - -
-           
-static java.lang.Byteiadd - -
-           
-static java.lang.Byteiaload - -
-           
-static java.lang.Byteiand - -
-           
-static java.lang.Byteiastore - -
-           
-static java.lang.Byteiconst_0 - -
-           
-static java.lang.Byteiconst_1 - -
-           
-static java.lang.Byteiconst_2 - -
-           
-static java.lang.Byteiconst_3 - -
-           
-static java.lang.Byteiconst_4 - -
-           
-static java.lang.Byteiconst_5 - -
-           
-static java.lang.Byteiconst_m1 - -
-           
-static java.lang.Byteidiv - -
-           
-static java.lang.Byteif_acmpeq - -
-           
-static java.lang.Byteif_acmpne - -
-           
-static java.lang.Byteif_icmpeq - -
-           
-static java.lang.Byteif_icmpge - -
-           
-static java.lang.Byteif_icmpgt - -
-           
-static java.lang.Byteif_icmple - -
-           
-static java.lang.Byteif_icmplt - -
-           
-static java.lang.Byteif_icmpne - -
-           
-static java.lang.Byteifeq - -
-           
-static java.lang.Byteifge - -
-           
-static java.lang.Byteifgt - -
-           
-static java.lang.Byteifle - -
-           
-static java.lang.Byteiflt - -
-           
-static java.lang.Byteifne - -
-           
-static java.lang.Byteifnonnull - -
-           
-static java.lang.Byteifnull - -
-           
-static java.lang.Byteiinc - -
-           
-static java.lang.Byteiload - -
-           
-static java.lang.Byteiload_0 - -
-           
-static java.lang.Byteiload_1 - -
-           
-static java.lang.Byteiload_2 - -
-           
-static java.lang.Byteiload_3 - -
-           
-static java.lang.Byteimpdep1 - -
-           
-static java.lang.Byteimpdep2 - -
-           
-static java.lang.Byteimul - -
-           
-static java.lang.Byteineg - -
-           
-static java.lang.Byteinstanceof_ - -
-           
-static java.lang.Byteinvokeinterface - -
-           
-static java.lang.Byteinvokespecial - -
-           
-static java.lang.Byteinvokestatic - -
-           
-static java.lang.Byteinvokevirtual - -
-           
-static java.lang.Byteior - -
-           
-static java.lang.Byteirem - -
-           
-static java.lang.Byteireturn - -
-           
-static java.lang.Byteishl - -
-           
-static java.lang.Byteishr - -
-           
-static java.lang.Byteistore - -
-           
-static java.lang.Byteistore_0 - -
-           
-static java.lang.Byteistore_1 - -
-           
-static java.lang.Byteistore_2 - -
-           
-static java.lang.Byteistore_3 - -
-           
-static java.lang.Byteisub - -
-           
-static java.lang.Byteiushr - -
-           
-static java.lang.Byteixor - -
-           
-static java.lang.Bytejsr - -
-           
-static java.lang.Bytejsr_w - -
-           
-static java.lang.Bytel2d - -
-           
-static java.lang.Bytel2f - -
-           
-static java.lang.Bytel2i - -
-           
-static java.lang.Byteladd - -
-           
-static java.lang.Bytelaload - -
-           
-static java.lang.Byteland - -
-           
-static java.lang.Bytelastore - -
-           
-static java.lang.Bytelcmp - -
-           
-static java.lang.Bytelconst_0 - -
-           
-static java.lang.Bytelconst_1 - -
-           
-static java.lang.Byteldc - -
-           
-static java.lang.Byteldc_w - -
-           
-static java.lang.Byteldc2_w - -
-           
-static java.lang.Byteldiv - -
-           
-static java.lang.Bytelload - -
-           
-static java.lang.Bytelload_0 - -
-           
-static java.lang.Bytelload_1 - -
-           
-static java.lang.Bytelload_2 - -
-           
-static java.lang.Bytelload_3 - -
-           
-static java.lang.Bytelmul - -
-           
-static java.lang.Bytelneg - -
-           
-static java.lang.Bytelookupswitch - -
-           
-static java.lang.Bytelor - -
-           
-static java.lang.Bytelrem - -
-           
-static java.lang.Bytelreturn - -
-           
-static java.lang.Bytelshl - -
-           
-static java.lang.Bytelshr - -
-           
-static java.lang.Bytelstore - -
-           
-static java.lang.Bytelstore_0 - -
-           
-static java.lang.Bytelstore_1 - -
-           
-static java.lang.Bytelstore_2 - -
-           
-static java.lang.Bytelstore_3 - -
-           
-static java.lang.Bytelsub - -
-           
-static java.lang.Bytelushr - -
-           
-static java.lang.Bytelxor - -
-           
-static java.lang.Bytemonitorenter - -
-           
-static java.lang.Bytemonitorexit - -
-           
-static java.lang.Bytemultianewarray - -
-           
-static java.lang.Bytenew_ - -
-           
-static java.lang.Bytenewarray - -
-           
-static java.lang.Bytenop - -
-           
-static java.lang.Bytepop - -
-           
-static java.lang.Bytepop2 - -
-           
-static java.lang.Byteputfield - -
-           
-static java.lang.Byteputstatic - -
-           
-static java.lang.Byteret - -
-           
-static java.lang.Bytereturn_ - -
-           
-static java.lang.Bytesaload - -
-           
-static java.lang.Bytesastore - -
-           
-static java.lang.Bytesipush - -
-           
-static java.lang.Byteswap - -
-           
-static java.lang.Bytetableswitch - -
-           
-static java.lang.Bytewide - -
-           
-  - - - - - - - - - - -
-Constructor Summary
JVMCode() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
-static intbytes_to_int(java.lang.Byte b) - -
-           
-static intbytes_to_int(java.lang.Byte b1, - java.lang.Byte b0) - -
-           
-static intbytes_to_int(java.lang.Byte b3, - java.lang.Byte b2, - java.lang.Byte b1, - java.lang.Byte b0) - -
-           
-static java.lang.Stringget_codegen_Type(java.lang.String type, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-static voidget_Command(de.dhbwstuttgart.typeinference.Menge b) - -
-           
-static intget_nType(java.lang.String type) - -
-           
-static java.lang.Byteif_ncmpeq(java.lang.String s) - -
-           
-static java.lang.Byteif_ncmpne(java.lang.String s) - -
-           
-static java.lang.Byten2n(java.lang.String s1, - java.lang.String s2) - -
-           
-static java.lang.Bytenadd(java.lang.String s) - -
-           
-static java.lang.Bytenaload(java.lang.String s) - -
-           
-static java.lang.Bytenand(java.lang.String s) - -
-           
-static java.lang.Bytenastore(java.lang.String s) - -
-           
-static java.lang.Bytencmpg(java.lang.String s) - -
-           
-static java.lang.Bytencmpl(java.lang.String s) - -
-           
-static java.lang.Bytenconst_n(java.lang.String s1, - int n2) - -
-           
-static java.lang.Bytendiv(java.lang.String s) - -
-           
-static java.lang.Bytenload_n(java.lang.String s1, - int n2) - -
-           
-static java.lang.Bytenload(java.lang.String s) - -
-           
-static java.lang.Bytenmul(java.lang.String s) - -
-           
-static java.lang.Bytenneg(java.lang.String s) - -
-           
-static java.lang.Bytenor(java.lang.String s) - -
-           
-static java.lang.Bytenrem(java.lang.String s) - -
-           
-static java.lang.Bytenreturn(java.lang.String s) - -
-           
-static java.lang.Bytenshl(java.lang.String s) - -
-           
-static java.lang.Bytenshr(java.lang.String s) - -
-           
-static java.lang.Bytenstore_n(java.lang.String s1, - int n2) - -
-           
-static java.lang.Bytenstore(java.lang.String s) - -
-           
-static java.lang.Bytensub(java.lang.String s) - -
-           
-static java.lang.Bytenushr(java.lang.String s) - -
-           
-static java.lang.Bytenxor(java.lang.String s) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-hamaDebug

-
-public static boolean hamaDebug
-
-
-
-
-
- -

-CONSTANT_Utf8

-
-public static byte CONSTANT_Utf8
-
-
-
-
-
- -

-CONSTANT_Integer

-
-public static byte CONSTANT_Integer
-
-
-
-
-
- -

-CONSTANT_Float

-
-public static byte CONSTANT_Float
-
-
-
-
-
- -

-CONSTANT_Long

-
-public static byte CONSTANT_Long
-
-
-
-
-
- -

-CONSTANT_Double

-
-public static byte CONSTANT_Double
-
-
-
-
-
- -

-CONSTANT_Class

-
-public static byte CONSTANT_Class
-
-
-
-
-
- -

-CONSTANT_String

-
-public static byte CONSTANT_String
-
-
-
-
-
- -

-CONSTANT_Fieldref

-
-public static byte CONSTANT_Fieldref
-
-
-
-
-
- -

-CONSTANT_Methodref

-
-public static byte CONSTANT_Methodref
-
-
-
-
-
- -

-CONSTANT_InterfaceMethodref

-
-public static byte CONSTANT_InterfaceMethodref
-
-
-
-
-
- -

-CONSTANT_NameAndType

-
-public static byte CONSTANT_NameAndType
-
-
-
-
-
- -

-nop

-
-public static java.lang.Byte nop
-
-
-
-
-
- -

-aconst_null

-
-public static java.lang.Byte aconst_null
-
-
-
-
-
- -

-iconst_m1

-
-public static java.lang.Byte iconst_m1
-
-
-
-
-
- -

-iconst_0

-
-public static java.lang.Byte iconst_0
-
-
-
-
-
- -

-iconst_1

-
-public static java.lang.Byte iconst_1
-
-
-
-
-
- -

-iconst_2

-
-public static java.lang.Byte iconst_2
-
-
-
-
-
- -

-iconst_3

-
-public static java.lang.Byte iconst_3
-
-
-
-
-
- -

-iconst_4

-
-public static java.lang.Byte iconst_4
-
-
-
-
-
- -

-iconst_5

-
-public static java.lang.Byte iconst_5
-
-
-
-
-
- -

-lconst_0

-
-public static java.lang.Byte lconst_0
-
-
-
-
-
- -

-lconst_1

-
-public static java.lang.Byte lconst_1
-
-
-
-
-
- -

-fconst_0

-
-public static java.lang.Byte fconst_0
-
-
-
-
-
- -

-fconst_1

-
-public static java.lang.Byte fconst_1
-
-
-
-
-
- -

-fconst_2

-
-public static java.lang.Byte fconst_2
-
-
-
-
-
- -

-dconst_0

-
-public static java.lang.Byte dconst_0
-
-
-
-
-
- -

-dconst_1

-
-public static java.lang.Byte dconst_1
-
-
-
-
-
- -

-bipush

-
-public static java.lang.Byte bipush
-
-
-
-
-
- -

-sipush

-
-public static java.lang.Byte sipush
-
-
-
-
-
- -

-ldc

-
-public static java.lang.Byte ldc
-
-
-
-
-
- -

-ldc_w

-
-public static java.lang.Byte ldc_w
-
-
-
-
-
- -

-ldc2_w

-
-public static java.lang.Byte ldc2_w
-
-
-
-
-
- -

-iload

-
-public static java.lang.Byte iload
-
-
-
-
-
- -

-lload

-
-public static java.lang.Byte lload
-
-
-
-
-
- -

-fload

-
-public static java.lang.Byte fload
-
-
-
-
-
- -

-dload

-
-public static java.lang.Byte dload
-
-
-
-
-
- -

-aload

-
-public static java.lang.Byte aload
-
-
-
-
-
- -

-iload_0

-
-public static java.lang.Byte iload_0
-
-
-
-
-
- -

-iload_1

-
-public static java.lang.Byte iload_1
-
-
-
-
-
- -

-iload_2

-
-public static java.lang.Byte iload_2
-
-
-
-
-
- -

-iload_3

-
-public static java.lang.Byte iload_3
-
-
-
-
-
- -

-lload_0

-
-public static java.lang.Byte lload_0
-
-
-
-
-
- -

-lload_1

-
-public static java.lang.Byte lload_1
-
-
-
-
-
- -

-lload_2

-
-public static java.lang.Byte lload_2
-
-
-
-
-
- -

-lload_3

-
-public static java.lang.Byte lload_3
-
-
-
-
-
- -

-fload_0

-
-public static java.lang.Byte fload_0
-
-
-
-
-
- -

-fload_1

-
-public static java.lang.Byte fload_1
-
-
-
-
-
- -

-fload_2

-
-public static java.lang.Byte fload_2
-
-
-
-
-
- -

-fload_3

-
-public static java.lang.Byte fload_3
-
-
-
-
-
- -

-dload_0

-
-public static java.lang.Byte dload_0
-
-
-
-
-
- -

-dload_1

-
-public static java.lang.Byte dload_1
-
-
-
-
-
- -

-dload_2

-
-public static java.lang.Byte dload_2
-
-
-
-
-
- -

-dload_3

-
-public static java.lang.Byte dload_3
-
-
-
-
-
- -

-aload_0

-
-public static java.lang.Byte aload_0
-
-
-
-
-
- -

-aload_1

-
-public static java.lang.Byte aload_1
-
-
-
-
-
- -

-aload_2

-
-public static java.lang.Byte aload_2
-
-
-
-
-
- -

-aload_3

-
-public static java.lang.Byte aload_3
-
-
-
-
-
- -

-iaload

-
-public static java.lang.Byte iaload
-
-
-
-
-
- -

-laload

-
-public static java.lang.Byte laload
-
-
-
-
-
- -

-faload

-
-public static java.lang.Byte faload
-
-
-
-
-
- -

-daload

-
-public static java.lang.Byte daload
-
-
-
-
-
- -

-aaload

-
-public static java.lang.Byte aaload
-
-
-
-
-
- -

-baload

-
-public static java.lang.Byte baload
-
-
-
-
-
- -

-caload

-
-public static java.lang.Byte caload
-
-
-
-
-
- -

-saload

-
-public static java.lang.Byte saload
-
-
-
-
-
- -

-istore

-
-public static java.lang.Byte istore
-
-
-
-
-
- -

-lstore

-
-public static java.lang.Byte lstore
-
-
-
-
-
- -

-fstore

-
-public static java.lang.Byte fstore
-
-
-
-
-
- -

-dstore

-
-public static java.lang.Byte dstore
-
-
-
-
-
- -

-astore

-
-public static java.lang.Byte astore
-
-
-
-
-
- -

-istore_0

-
-public static java.lang.Byte istore_0
-
-
-
-
-
- -

-istore_1

-
-public static java.lang.Byte istore_1
-
-
-
-
-
- -

-istore_2

-
-public static java.lang.Byte istore_2
-
-
-
-
-
- -

-istore_3

-
-public static java.lang.Byte istore_3
-
-
-
-
-
- -

-lstore_0

-
-public static java.lang.Byte lstore_0
-
-
-
-
-
- -

-lstore_1

-
-public static java.lang.Byte lstore_1
-
-
-
-
-
- -

-lstore_2

-
-public static java.lang.Byte lstore_2
-
-
-
-
-
- -

-lstore_3

-
-public static java.lang.Byte lstore_3
-
-
-
-
-
- -

-fstore_0

-
-public static java.lang.Byte fstore_0
-
-
-
-
-
- -

-fstore_1

-
-public static java.lang.Byte fstore_1
-
-
-
-
-
- -

-fstore_2

-
-public static java.lang.Byte fstore_2
-
-
-
-
-
- -

-fstore_3

-
-public static java.lang.Byte fstore_3
-
-
-
-
-
- -

-dstore_0

-
-public static java.lang.Byte dstore_0
-
-
-
-
-
- -

-dstore_1

-
-public static java.lang.Byte dstore_1
-
-
-
-
-
- -

-dstore_2

-
-public static java.lang.Byte dstore_2
-
-
-
-
-
- -

-dstore_3

-
-public static java.lang.Byte dstore_3
-
-
-
-
-
- -

-astore_0

-
-public static java.lang.Byte astore_0
-
-
-
-
-
- -

-astore_1

-
-public static java.lang.Byte astore_1
-
-
-
-
-
- -

-astore_2

-
-public static java.lang.Byte astore_2
-
-
-
-
-
- -

-astore_3

-
-public static java.lang.Byte astore_3
-
-
-
-
-
- -

-iastore

-
-public static java.lang.Byte iastore
-
-
-
-
-
- -

-lastore

-
-public static java.lang.Byte lastore
-
-
-
-
-
- -

-fastore

-
-public static java.lang.Byte fastore
-
-
-
-
-
- -

-dastore

-
-public static java.lang.Byte dastore
-
-
-
-
-
- -

-aastore

-
-public static java.lang.Byte aastore
-
-
-
-
-
- -

-bastore

-
-public static java.lang.Byte bastore
-
-
-
-
-
- -

-castore

-
-public static java.lang.Byte castore
-
-
-
-
-
- -

-sastore

-
-public static java.lang.Byte sastore
-
-
-
-
-
- -

-pop

-
-public static java.lang.Byte pop
-
-
-
-
-
- -

-pop2

-
-public static java.lang.Byte pop2
-
-
-
-
-
- -

-dup

-
-public static java.lang.Byte dup
-
-
-
-
-
- -

-dup_x1

-
-public static java.lang.Byte dup_x1
-
-
-
-
-
- -

-dup_x2

-
-public static java.lang.Byte dup_x2
-
-
-
-
-
- -

-dup2

-
-public static java.lang.Byte dup2
-
-
-
-
-
- -

-dup2_x1

-
-public static java.lang.Byte dup2_x1
-
-
-
-
-
- -

-dup2_x2

-
-public static java.lang.Byte dup2_x2
-
-
-
-
-
- -

-swap

-
-public static java.lang.Byte swap
-
-
-
-
-
- -

-iadd

-
-public static java.lang.Byte iadd
-
-
-
-
-
- -

-ladd

-
-public static java.lang.Byte ladd
-
-
-
-
-
- -

-fadd

-
-public static java.lang.Byte fadd
-
-
-
-
-
- -

-dadd

-
-public static java.lang.Byte dadd
-
-
-
-
-
- -

-isub

-
-public static java.lang.Byte isub
-
-
-
-
-
- -

-lsub

-
-public static java.lang.Byte lsub
-
-
-
-
-
- -

-fsub

-
-public static java.lang.Byte fsub
-
-
-
-
-
- -

-dsub

-
-public static java.lang.Byte dsub
-
-
-
-
-
- -

-imul

-
-public static java.lang.Byte imul
-
-
-
-
-
- -

-lmul

-
-public static java.lang.Byte lmul
-
-
-
-
-
- -

-fmul

-
-public static java.lang.Byte fmul
-
-
-
-
-
- -

-dmul

-
-public static java.lang.Byte dmul
-
-
-
-
-
- -

-idiv

-
-public static java.lang.Byte idiv
-
-
-
-
-
- -

-ldiv

-
-public static java.lang.Byte ldiv
-
-
-
-
-
- -

-fdiv

-
-public static java.lang.Byte fdiv
-
-
-
-
-
- -

-ddiv

-
-public static java.lang.Byte ddiv
-
-
-
-
-
- -

-irem

-
-public static java.lang.Byte irem
-
-
-
-
-
- -

-lrem

-
-public static java.lang.Byte lrem
-
-
-
-
-
- -

-frem

-
-public static java.lang.Byte frem
-
-
-
-
-
- -

-drem

-
-public static java.lang.Byte drem
-
-
-
-
-
- -

-ineg

-
-public static java.lang.Byte ineg
-
-
-
-
-
- -

-lneg

-
-public static java.lang.Byte lneg
-
-
-
-
-
- -

-fneg

-
-public static java.lang.Byte fneg
-
-
-
-
-
- -

-dneg

-
-public static java.lang.Byte dneg
-
-
-
-
-
- -

-ishl

-
-public static java.lang.Byte ishl
-
-
-
-
-
- -

-lshl

-
-public static java.lang.Byte lshl
-
-
-
-
-
- -

-ishr

-
-public static java.lang.Byte ishr
-
-
-
-
-
- -

-lshr

-
-public static java.lang.Byte lshr
-
-
-
-
-
- -

-iushr

-
-public static java.lang.Byte iushr
-
-
-
-
-
- -

-lushr

-
-public static java.lang.Byte lushr
-
-
-
-
-
- -

-iand

-
-public static java.lang.Byte iand
-
-
-
-
-
- -

-land

-
-public static java.lang.Byte land
-
-
-
-
-
- -

-ior

-
-public static java.lang.Byte ior
-
-
-
-
-
- -

-lor

-
-public static java.lang.Byte lor
-
-
-
-
-
- -

-ixor

-
-public static java.lang.Byte ixor
-
-
-
-
-
- -

-lxor

-
-public static java.lang.Byte lxor
-
-
-
-
-
- -

-iinc

-
-public static java.lang.Byte iinc
-
-
-
-
-
- -

-i2l

-
-public static java.lang.Byte i2l
-
-
-
-
-
- -

-i2f

-
-public static java.lang.Byte i2f
-
-
-
-
-
- -

-i2d

-
-public static java.lang.Byte i2d
-
-
-
-
-
- -

-l2i

-
-public static java.lang.Byte l2i
-
-
-
-
-
- -

-l2f

-
-public static java.lang.Byte l2f
-
-
-
-
-
- -

-l2d

-
-public static java.lang.Byte l2d
-
-
-
-
-
- -

-f2i

-
-public static java.lang.Byte f2i
-
-
-
-
-
- -

-f2l

-
-public static java.lang.Byte f2l
-
-
-
-
-
- -

-f2d

-
-public static java.lang.Byte f2d
-
-
-
-
-
- -

-d2i

-
-public static java.lang.Byte d2i
-
-
-
-
-
- -

-d2l

-
-public static java.lang.Byte d2l
-
-
-
-
-
- -

-d2f

-
-public static java.lang.Byte d2f
-
-
-
-
-
- -

-i2b

-
-public static java.lang.Byte i2b
-
-
-
-
-
- -

-i2c

-
-public static java.lang.Byte i2c
-
-
-
-
-
- -

-i2s

-
-public static java.lang.Byte i2s
-
-
-
-
-
- -

-lcmp

-
-public static java.lang.Byte lcmp
-
-
-
-
-
- -

-fcmpl

-
-public static java.lang.Byte fcmpl
-
-
-
-
-
- -

-fcmpg

-
-public static java.lang.Byte fcmpg
-
-
-
-
-
- -

-dcmpl

-
-public static java.lang.Byte dcmpl
-
-
-
-
-
- -

-dcmpg

-
-public static java.lang.Byte dcmpg
-
-
-
-
-
- -

-ifeq

-
-public static java.lang.Byte ifeq
-
-
-
-
-
- -

-ifne

-
-public static java.lang.Byte ifne
-
-
-
-
-
- -

-iflt

-
-public static java.lang.Byte iflt
-
-
-
-
-
- -

-ifge

-
-public static java.lang.Byte ifge
-
-
-
-
-
- -

-ifgt

-
-public static java.lang.Byte ifgt
-
-
-
-
-
- -

-ifle

-
-public static java.lang.Byte ifle
-
-
-
-
-
- -

-if_icmpeq

-
-public static java.lang.Byte if_icmpeq
-
-
-
-
-
- -

-if_icmpne

-
-public static java.lang.Byte if_icmpne
-
-
-
-
-
- -

-if_icmplt

-
-public static java.lang.Byte if_icmplt
-
-
-
-
-
- -

-if_icmpge

-
-public static java.lang.Byte if_icmpge
-
-
-
-
-
- -

-if_icmpgt

-
-public static java.lang.Byte if_icmpgt
-
-
-
-
-
- -

-if_icmple

-
-public static java.lang.Byte if_icmple
-
-
-
-
-
- -

-if_acmpeq

-
-public static java.lang.Byte if_acmpeq
-
-
-
-
-
- -

-if_acmpne

-
-public static java.lang.Byte if_acmpne
-
-
-
-
-
- -

-goto_

-
-public static java.lang.Byte goto_
-
-
-
-
-
- -

-jsr

-
-public static java.lang.Byte jsr
-
-
-
-
-
- -

-ret

-
-public static java.lang.Byte ret
-
-
-
-
-
- -

-tableswitch

-
-public static java.lang.Byte tableswitch
-
-
-
-
-
- -

-lookupswitch

-
-public static java.lang.Byte lookupswitch
-
-
-
-
-
- -

-ireturn

-
-public static java.lang.Byte ireturn
-
-
-
-
-
- -

-lreturn

-
-public static java.lang.Byte lreturn
-
-
-
-
-
- -

-freturn

-
-public static java.lang.Byte freturn
-
-
-
-
-
- -

-dreturn

-
-public static java.lang.Byte dreturn
-
-
-
-
-
- -

-areturn

-
-public static java.lang.Byte areturn
-
-
-
-
-
- -

-return_

-
-public static java.lang.Byte return_
-
-
-
-
-
- -

-getstatic

-
-public static java.lang.Byte getstatic
-
-
-
-
-
- -

-putstatic

-
-public static java.lang.Byte putstatic
-
-
-
-
-
- -

-getfield

-
-public static java.lang.Byte getfield
-
-
-
-
-
- -

-putfield

-
-public static java.lang.Byte putfield
-
-
-
-
-
- -

-invokevirtual

-
-public static java.lang.Byte invokevirtual
-
-
-
-
-
- -

-invokespecial

-
-public static java.lang.Byte invokespecial
-
-
-
-
-
- -

-invokestatic

-
-public static java.lang.Byte invokestatic
-
-
-
-
-
- -

-invokeinterface

-
-public static java.lang.Byte invokeinterface
-
-
-
-
-
- -

-new_

-
-public static java.lang.Byte new_
-
-
-
-
-
- -

-newarray

-
-public static java.lang.Byte newarray
-
-
-
-
-
- -

-anewarray

-
-public static java.lang.Byte anewarray
-
-
-
-
-
- -

-arraylength

-
-public static java.lang.Byte arraylength
-
-
-
-
-
- -

-athrow

-
-public static java.lang.Byte athrow
-
-
-
-
-
- -

-checkcast

-
-public static java.lang.Byte checkcast
-
-
-
-
-
- -

-instanceof_

-
-public static java.lang.Byte instanceof_
-
-
-
-
-
- -

-monitorenter

-
-public static java.lang.Byte monitorenter
-
-
-
-
-
- -

-monitorexit

-
-public static java.lang.Byte monitorexit
-
-
-
-
-
- -

-wide

-
-public static java.lang.Byte wide
-
-
-
-
-
- -

-multianewarray

-
-public static java.lang.Byte multianewarray
-
-
-
-
-
- -

-ifnull

-
-public static java.lang.Byte ifnull
-
-
-
-
-
- -

-ifnonnull

-
-public static java.lang.Byte ifnonnull
-
-
-
-
-
- -

-goto_w

-
-public static java.lang.Byte goto_w
-
-
-
-
-
- -

-jsr_w

-
-public static java.lang.Byte jsr_w
-
-
-
-
-
- -

-breakpoint

-
-public static java.lang.Byte breakpoint
-
-
-
-
-
- -

-impdep1

-
-public static java.lang.Byte impdep1
-
-
-
-
-
- -

-impdep2

-
-public static java.lang.Byte impdep2
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-JVMCode

-
-public JVMCode()
-
-
- - - - - - - - -
-Method Detail
- -

-nconst_n

-
-public static java.lang.Byte nconst_n(java.lang.String s1,
-                                      int n2)
-                               throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nload

-
-public static java.lang.Byte nload(java.lang.String s)
-
-
-
-
-
-
- -

-nload_n

-
-public static java.lang.Byte nload_n(java.lang.String s1,
-                                     int n2)
-                              throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-naload

-
-public static java.lang.Byte naload(java.lang.String s)
-                             throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nstore

-
-public static java.lang.Byte nstore(java.lang.String s)
-
-
-
-
-
-
- -

-nstore_n

-
-public static java.lang.Byte nstore_n(java.lang.String s1,
-                                      int n2)
-                               throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nastore

-
-public static java.lang.Byte nastore(java.lang.String s)
-                              throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nadd

-
-public static java.lang.Byte nadd(java.lang.String s)
-                           throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nsub

-
-public static java.lang.Byte nsub(java.lang.String s)
-                           throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nmul

-
-public static java.lang.Byte nmul(java.lang.String s)
-                           throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-ndiv

-
-public static java.lang.Byte ndiv(java.lang.String s)
-                           throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nrem

-
-public static java.lang.Byte nrem(java.lang.String s)
-                           throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nneg

-
-public static java.lang.Byte nneg(java.lang.String s)
-                           throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nshl

-
-public static java.lang.Byte nshl(java.lang.String s)
-                           throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nshr

-
-public static java.lang.Byte nshr(java.lang.String s)
-                           throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nushr

-
-public static java.lang.Byte nushr(java.lang.String s)
-                            throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nand

-
-public static java.lang.Byte nand(java.lang.String s)
-                           throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nor

-
-public static java.lang.Byte nor(java.lang.String s)
-                          throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nxor

-
-public static java.lang.Byte nxor(java.lang.String s)
-                           throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-n2n

-
-public static java.lang.Byte n2n(java.lang.String s1,
-                                 java.lang.String s2)
-                          throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-ncmpl

-
-public static java.lang.Byte ncmpl(java.lang.String s)
-                            throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-ncmpg

-
-public static java.lang.Byte ncmpg(java.lang.String s)
-                            throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-if_ncmpeq

-
-public static java.lang.Byte if_ncmpeq(java.lang.String s)
-                                throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-if_ncmpne

-
-public static java.lang.Byte if_ncmpne(java.lang.String s)
-                                throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-nreturn

-
-public static java.lang.Byte nreturn(java.lang.String s)
-
-
-
-
-
-
- -

-get_nType

-
-public static int get_nType(java.lang.String type)
-
-
-
-
-
-
- -

-get_codegen_Type

-
-public static java.lang.String get_codegen_Type(java.lang.String type,
-                                                de.dhbwstuttgart.typeinference.Menge paralist)
-
-
-
-
-
-
- -

-get_Command

-
-public static void get_Command(de.dhbwstuttgart.typeinference.Menge b)
-                        throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-bytes_to_int

-
-public static int bytes_to_int(java.lang.Byte b3,
-                               java.lang.Byte b2,
-                               java.lang.Byte b1,
-                               java.lang.Byte b0)
-
-
-
-
-
-
- -

-bytes_to_int

-
-public static int bytes_to_int(java.lang.Byte b1,
-                               java.lang.Byte b0)
-
-
-
-
-
-
- -

-bytes_to_int

-
-public static int bytes_to_int(java.lang.Byte b)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/Key.html b/doc/Javadoc/mycompiler/mybytecode/Key.html deleted file mode 100755 index 0d19fae0..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/Key.html +++ /dev/null @@ -1,351 +0,0 @@ - - - - - - -Key - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class Key

-
-java.lang.Object
-  extended by mycompiler.mybytecode.Key
-
-
-
-
public class Key
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Key(byte t, - java.lang.String a) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- booleanequals(java.lang.Object obj) - -
-           
- java.lang.Stringget_a() - -
-           
- byteget_tag() - -
-           
- voidset_a(java.lang.String s) - -
-           
- voidset_tag(byte t) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Key

-
-public Key(byte t,
-           java.lang.String a)
-
-
- - - - - - - - -
-Method Detail
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
-
Overrides:
equals in class java.lang.Object
-
-
-
-
-
-
- -

-get_tag

-
-public byte get_tag()
-
-
-
-
-
-
- -

-get_a

-
-public java.lang.String get_a()
-
-
-
-
-
-
- -

-set_tag

-
-public void set_tag(byte t)
-
-
-
-
-
-
- -

-set_a

-
-public void set_a(java.lang.String s)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/MethodInfo.html b/doc/Javadoc/mycompiler/mybytecode/MethodInfo.html deleted file mode 100755 index 06128bc9..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/MethodInfo.html +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - -MethodInfo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mybytecode -
-Class MethodInfo

-
-java.lang.Object
-  extended by mycompiler.mybytecode.MethodInfo
-
-
-
-
public class MethodInfo
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
MethodInfo() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- shortget_access_flags() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_attributes() - -
-           
- shortget_descriptor_index() - -
-           
- shortget_name_index() - -
-           
- voidset_access_flags(short t) - -
-           
- voidset_attributes(de.dhbwstuttgart.typeinference.Menge t) - -
-           
- voidset_descriptor_index(short t) - -
-           
- voidset_name_index(short t) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-MethodInfo

-
-public MethodInfo()
-
-
- - - - - - - - -
-Method Detail
- -

-get_access_flags

-
-public short get_access_flags()
-
-
-
-
-
-
- -

-get_name_index

-
-public short get_name_index()
-
-
-
-
-
-
- -

-get_descriptor_index

-
-public short get_descriptor_index()
-
-
-
-
-
-
- -

-get_attributes

-
-public de.dhbwstuttgart.typeinference.Menge get_attributes()
-
-
-
-
-
-
- -

-set_access_flags

-
-public void set_access_flags(short t)
-
-
-
-
-
-
- -

-set_name_index

-
-public void set_name_index(short t)
-
-
-
-
-
-
- -

-set_descriptor_index

-
-public void set_descriptor_index(short t)
-
-
-
-
-
-
- -

-set_attributes

-
-public void set_attributes(de.dhbwstuttgart.typeinference.Menge t)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    java.io.FileOutputStream f)
-             throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/Attribute.html b/doc/Javadoc/mycompiler/mybytecode/class-use/Attribute.html deleted file mode 100755 index 1a34291c..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/Attribute.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.Attribute - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.Attribute

-
- - - - - - - - - -
-Packages that use Attribute
mycompiler.mybytecode  
-  -

- - - - - -
-Uses of Attribute in mycompiler.mybytecode
-  -

- - - - - - - - - - - - - -
Subclasses of Attribute in mycompiler.mybytecode
- classAttributeInfo - -
-           
- classCodeAttribute - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/AttributeInfo.html b/doc/Javadoc/mycompiler/mybytecode/class-use/AttributeInfo.html deleted file mode 100755 index 32e014f9..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/AttributeInfo.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.AttributeInfo - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.AttributeInfo

-
-No usage of mycompiler.mybytecode.AttributeInfo -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Class_info.html b/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Class_info.html deleted file mode 100755 index 95ae323e..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Class_info.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Class_info - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.CONSTANT_Class_info

-
-No usage of mycompiler.mybytecode.CONSTANT_Class_info -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Double_info.html b/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Double_info.html deleted file mode 100755 index 9cf9f131..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Double_info.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Double_info - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.CONSTANT_Double_info

-
-No usage of mycompiler.mybytecode.CONSTANT_Double_info -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Fieldref_info.html b/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Fieldref_info.html deleted file mode 100755 index 4519b1a9..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Fieldref_info.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Fieldref_info - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.CONSTANT_Fieldref_info

-
-No usage of mycompiler.mybytecode.CONSTANT_Fieldref_info -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Float_info.html b/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Float_info.html deleted file mode 100755 index f7df4a63..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Float_info.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Float_info - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.CONSTANT_Float_info

-
-No usage of mycompiler.mybytecode.CONSTANT_Float_info -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Integer_info.html b/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Integer_info.html deleted file mode 100755 index c1953011..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Integer_info.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Integer_info - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.CONSTANT_Integer_info

-
-No usage of mycompiler.mybytecode.CONSTANT_Integer_info -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_InterfaceMethodref_info.html b/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_InterfaceMethodref_info.html deleted file mode 100755 index 5f9f6adb..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_InterfaceMethodref_info.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info

-
-No usage of mycompiler.mybytecode.CONSTANT_InterfaceMethodref_info -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Long_info.html b/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Long_info.html deleted file mode 100755 index 3893ff3c..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Long_info.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Long_info - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.CONSTANT_Long_info

-
-No usage of mycompiler.mybytecode.CONSTANT_Long_info -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Methodref_info.html b/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Methodref_info.html deleted file mode 100755 index 3000f825..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Methodref_info.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Methodref_info - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.CONSTANT_Methodref_info

-
-No usage of mycompiler.mybytecode.CONSTANT_Methodref_info -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_NameAndType_info.html b/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_NameAndType_info.html deleted file mode 100755 index 8ee9f12b..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_NameAndType_info.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_NameAndType_info - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.CONSTANT_NameAndType_info

-
-No usage of mycompiler.mybytecode.CONSTANT_NameAndType_info -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_String_info.html b/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_String_info.html deleted file mode 100755 index 7671bd5a..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_String_info.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_String_info - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.CONSTANT_String_info

-
-No usage of mycompiler.mybytecode.CONSTANT_String_info -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Utf8_info.html b/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Utf8_info.html deleted file mode 100755 index b300b99e..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/CONSTANT_Utf8_info.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.CONSTANT_Utf8_info - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.CONSTANT_Utf8_info

-
-No usage of mycompiler.mybytecode.CONSTANT_Utf8_info -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/CPInfo.html b/doc/Javadoc/mycompiler/mybytecode/class-use/CPInfo.html deleted file mode 100755 index 450c749b..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/CPInfo.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.CPInfo - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.CPInfo

-
- - - - - - - - - -
-Packages that use CPInfo
mycompiler.mybytecode  
-  -

- - - - - -
-Uses of CPInfo in mycompiler.mybytecode
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subclasses of CPInfo in mycompiler.mybytecode
- classCONSTANT_Class_info - -
-           
- classCONSTANT_Double_info - -
-           
- classCONSTANT_Fieldref_info - -
-           
- classCONSTANT_Float_info - -
-           
- classCONSTANT_Integer_info - -
-           
- classCONSTANT_InterfaceMethodref_info - -
-           
- classCONSTANT_Long_info - -
-           
- classCONSTANT_Methodref_info - -
-           
- classCONSTANT_NameAndType_info - -
-           
- classCONSTANT_String_info - -
-           
- classCONSTANT_Utf8_info - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/ClassFile.html b/doc/Javadoc/mycompiler/mybytecode/class-use/ClassFile.html deleted file mode 100755 index baad597a..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/ClassFile.html +++ /dev/null @@ -1,1177 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.ClassFile - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.ClassFile

-
- - - - - - - - - - - - - - - - - - - - - -
-Packages that use ClassFile
mycompiler.mybytecode  
mycompiler.myclass  
mycompiler.myoperator  
mycompiler.mystatement  
-  -

- - - - - -
-Uses of ClassFile in mycompiler.mybytecode
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mybytecode with parameters of type ClassFile
- voidMethodInfo.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidKey.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidFieldInfo.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidExceptionTable.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
-abstract  voidCPInfo.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidCONSTANT_Utf8_info.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidCONSTANT_String_info.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidCONSTANT_NameAndType_info.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidCONSTANT_Methodref_info.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidCONSTANT_Long_info.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidCONSTANT_InterfaceMethodref_info.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidCONSTANT_Integer_info.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidCONSTANT_Float_info.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidCONSTANT_Fieldref_info.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidCONSTANT_Double_info.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidCONSTANT_Class_info.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidCodeAttribute.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidAttributeInfo.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
-abstract  voidAttribute.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
-  -

- - - - - -
-Uses of ClassFile in mycompiler.myclass
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.myclass with parameters of type ClassFile
- voidDeclId.codegen_InstVarDecl(ClassFile classfile, - Type type, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidDeclId.codegen_LocalVarDecl(ClassFile classfile, - CodeAttribute code, - Type type, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidParameterList.codegen(ClassFile classfile, - CodeAttribute code) - -
-           
- voidFormalParameter.codegen(ClassFile classfile, - CodeAttribute code) - -
-           
- voidMethod.codegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidInstVarDecl.codegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidFieldDecl.codegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidConstructor.codegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidClassBody.codegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-  -

- - - - - -
-Uses of ClassFile in mycompiler.myoperator
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.myoperator with parameters of type ClassFile
-static voidLogOp.build(ClassFile classfile, - CodeAttribute code, - Expr expr, - de.dhbwstuttgart.typeinference.Menge indices, - boolean not, - boolean ex2, - boolean and, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidTimesOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPlusOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidOperator.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg_not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNotEqualOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidModuloOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidMinusOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLogOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLessOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLessEquOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidGreaterOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidGreaterEquOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidEqualOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidDivideOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidAddOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLogOp.if_codegen(ClassFile classfile, - CodeAttribute code, - boolean not, - Expr expr, - Statement then_block, - Statement else_block, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidRelOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidNotEqualOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidLessOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidLessEquOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidGreaterOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidGreaterEquOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidEqualOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidLogOp.loop_codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - int breakpoint, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-  -

- - - - - -
-Uses of ClassFile in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type ClassFile
- voidUnaryNot.codegen(ClassFile classfile, - CodeAttribute code, - boolean sw) - -
-           
- voidUnaryMinus.codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean neg) - -
-           
- voidWhileStmt.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidUnaryExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidThis.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidStringLiteral.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidStatement.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidReturn.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPreIncExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPreDecExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPostIncExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPostDecExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPositivExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNull.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNotExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNewClass.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNewArray.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNegativeExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidMethodCall.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLocalVarDecl.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLocalOrFieldVar.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidIntLiteral.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidInstVar.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidInstanceOf.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidIfStmt.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidEmptyStmt.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidCharLiteral.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidCastExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBoolLiteral.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBlock.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBinary.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidAssign.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidArgumentList.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidUnaryNot.if_codegen(ClassFile classfile, - CodeAttribute code, - boolean sw) - -
-           
- voidIfStmt.if_codegen(ClassFile classfile, - CodeAttribute code, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidWhileStmt.loop_codegen(ClassFile classfile, - CodeAttribute code, - int breakpoint, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNegativeExpr.neg_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBinary.neg_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNotExpr.not_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBinary.not_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/CodeAttribute.html b/doc/Javadoc/mycompiler/mybytecode/class-use/CodeAttribute.html deleted file mode 100755 index 1d4935ec..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/CodeAttribute.html +++ /dev/null @@ -1,949 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.CodeAttribute - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.CodeAttribute

-
- - - - - - - - - - - - - - - - - -
-Packages that use CodeAttribute
mycompiler.myclass  
mycompiler.myoperator  
mycompiler.mystatement  
-  -

- - - - - -
-Uses of CodeAttribute in mycompiler.myclass
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler.myclass with parameters of type CodeAttribute
- voidDeclId.codegen_LocalVarDecl(ClassFile classfile, - CodeAttribute code, - Type type, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidParameterList.codegen(ClassFile classfile, - CodeAttribute code) - -
-           
- voidFormalParameter.codegen(ClassFile classfile, - CodeAttribute code) - -
-           
-  -

- - - - - -
-Uses of CodeAttribute in mycompiler.myoperator
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.myoperator with parameters of type CodeAttribute
-static voidLogOp.build(ClassFile classfile, - CodeAttribute code, - Expr expr, - de.dhbwstuttgart.typeinference.Menge indices, - boolean not, - boolean ex2, - boolean and, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidTimesOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPlusOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidOperator.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg_not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNotEqualOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidModuloOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidMinusOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLogOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLessOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLessEquOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidGreaterOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidGreaterEquOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidEqualOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidDivideOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidAddOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLogOp.if_codegen(ClassFile classfile, - CodeAttribute code, - boolean not, - Expr expr, - Statement then_block, - Statement else_block, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidRelOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidNotEqualOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidLessOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidLessEquOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidGreaterOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidGreaterEquOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidEqualOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidLogOp.loop_codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - int breakpoint, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-static voidLogOp.replace_index(CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge indices, - int else_index, - int then_index) - -
-           
-  -

- - - - - -
-Uses of CodeAttribute in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type CodeAttribute
- voidUnaryNot.codegen(ClassFile classfile, - CodeAttribute code, - boolean sw) - -
-           
- voidUnaryMinus.codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean neg) - -
-           
- voidWhileStmt.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidUnaryExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidThis.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidStringLiteral.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidStatement.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidReturn.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPreIncExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPreDecExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPostIncExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPostDecExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPositivExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNull.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNotExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNewClass.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNewArray.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNegativeExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidMethodCall.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLocalVarDecl.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLocalOrFieldVar.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidIntLiteral.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidInstVar.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidInstanceOf.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidIfStmt.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidEmptyStmt.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidCharLiteral.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidCastExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBoolLiteral.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBlock.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBinary.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidAssign.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidArgumentList.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidUnaryNot.if_codegen(ClassFile classfile, - CodeAttribute code, - boolean sw) - -
-           
- voidIfStmt.if_codegen(ClassFile classfile, - CodeAttribute code, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidWhileStmt.loop_codegen(ClassFile classfile, - CodeAttribute code, - int breakpoint, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNegativeExpr.neg_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBinary.neg_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNotExpr.not_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBinary.not_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- booleanBinary.type_check(CodeAttribute code) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/ExceptionTable.html b/doc/Javadoc/mycompiler/mybytecode/class-use/ExceptionTable.html deleted file mode 100755 index 29224578..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/ExceptionTable.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.ExceptionTable - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.ExceptionTable

-
-No usage of mycompiler.mybytecode.ExceptionTable -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/FieldInfo.html b/doc/Javadoc/mycompiler/mybytecode/class-use/FieldInfo.html deleted file mode 100755 index e9c39707..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/FieldInfo.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.FieldInfo - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.FieldInfo

-
-No usage of mycompiler.mybytecode.FieldInfo -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/JVMCode.html b/doc/Javadoc/mycompiler/mybytecode/class-use/JVMCode.html deleted file mode 100755 index 0400538c..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/JVMCode.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.JVMCode - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.JVMCode

-
-No usage of mycompiler.mybytecode.JVMCode -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/Key.html b/doc/Javadoc/mycompiler/mybytecode/class-use/Key.html deleted file mode 100755 index 948f7873..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/Key.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.Key - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.Key

-
-No usage of mycompiler.mybytecode.Key -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/class-use/MethodInfo.html b/doc/Javadoc/mycompiler/mybytecode/class-use/MethodInfo.html deleted file mode 100755 index 1fa3bea7..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/class-use/MethodInfo.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mybytecode.MethodInfo - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mybytecode.MethodInfo

-
-No usage of mycompiler.mybytecode.MethodInfo -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/package-frame.html b/doc/Javadoc/mycompiler/mybytecode/package-frame.html deleted file mode 100755 index 35364ccc..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/package-frame.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - -mycompiler.mybytecode - - - - - - - - - - - -mycompiler.mybytecode - - - - -
-Classes  - -
-Attribute -
-AttributeInfo -
-ClassFile -
-CodeAttribute -
-CONSTANT_Class_info -
-CONSTANT_Double_info -
-CONSTANT_Fieldref_info -
-CONSTANT_Float_info -
-CONSTANT_Integer_info -
-CONSTANT_InterfaceMethodref_info -
-CONSTANT_Long_info -
-CONSTANT_Methodref_info -
-CONSTANT_NameAndType_info -
-CONSTANT_String_info -
-CONSTANT_Utf8_info -
-CPInfo -
-ExceptionTable -
-FieldInfo -
-JVMCode -
-Key -
-MethodInfo
- - - - diff --git a/doc/Javadoc/mycompiler/mybytecode/package-summary.html b/doc/Javadoc/mycompiler/mybytecode/package-summary.html deleted file mode 100755 index 0ffd97d9..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/package-summary.html +++ /dev/null @@ -1,234 +0,0 @@ - - - - - - -mycompiler.mybytecode - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.mybytecode -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
Attribute 
AttributeInfo 
ClassFile 
CodeAttribute 
CONSTANT_Class_info 
CONSTANT_Double_info 
CONSTANT_Fieldref_info 
CONSTANT_Float_info 
CONSTANT_Integer_info 
CONSTANT_InterfaceMethodref_info 
CONSTANT_Long_info 
CONSTANT_Methodref_info 
CONSTANT_NameAndType_info 
CONSTANT_String_info 
CONSTANT_Utf8_info 
CPInfo 
ExceptionTable 
FieldInfo 
JVMCode 
Key 
MethodInfo 
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/package-tree.html b/doc/Javadoc/mycompiler/mybytecode/package-tree.html deleted file mode 100755 index 3ef33208..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/package-tree.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -mycompiler.mybytecode Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.mybytecode -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mybytecode/package-use.html b/doc/Javadoc/mycompiler/mybytecode/package-use.html deleted file mode 100755 index 16402e96..00000000 --- a/doc/Javadoc/mycompiler/mybytecode/package-use.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - -Uses of Package mycompiler.mybytecode - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.mybytecode

-
- - - - - - - - - - - - - - - - - - - - - -
-Packages that use mycompiler.mybytecode
mycompiler.mybytecode  
mycompiler.myclass  
mycompiler.myoperator  
mycompiler.mystatement  
-  -

- - - - - - - - - - - - - - -
-Classes in mycompiler.mybytecode used by mycompiler.mybytecode
Attribute - -
-           
ClassFile - -
-           
CPInfo - -
-           
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mybytecode used by mycompiler.myclass
ClassFile - -
-           
CodeAttribute - -
-           
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mybytecode used by mycompiler.myoperator
ClassFile - -
-           
CodeAttribute - -
-           
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mybytecode used by mycompiler.mystatement
ClassFile - -
-           
CodeAttribute - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/Class.html b/doc/Javadoc/mycompiler/myclass/Class.html deleted file mode 100755 index 6893f34e..00000000 --- a/doc/Javadoc/mycompiler/myclass/Class.html +++ /dev/null @@ -1,729 +0,0 @@ - - - - - - -Class - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myclass -
-Class Class

-
-java.lang.Object
-  extended by mycompiler.myclass.Class
-
-
-
-
public class Class
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - - - - - -
-Field Summary
- UsedIdsuperclassid - -
-           
- de.dhbwstuttgart.typeinference.MengevParaOrg - -
-           
-  - - - - - - - - - - -
-Constructor Summary
Class() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(boolean system_out) - -
-           
- de.dhbwstuttgart.typeinference.Mengecomplete_paralist(boolean ext) - -
-           
- booleandoes_Class_extend() - -
-           
- Blockget_class_block() - -
-           
- ClassBodyget_ClassBody() - -
-           
- java.lang.Stringget_classname() - -
-           
- java.util.Hashtableget_ParaHash() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_ParaList() - -
-           
- java.lang.Stringget_Superclass_Name() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_vParaOrg() - -
-           
- java.lang.Stringis_member(java.lang.String var) - -
-           
- voidpara_check(de.dhbwstuttgart.typeinference.Menge classlist, - boolean ext) - -
-           
- voidsc_check_for_extended_classes(de.dhbwstuttgart.typeinference.Menge classlist, - java.util.Hashtable childhash, - boolean ext) - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classlist, - boolean ext) - -
-           
- voidset_class_block(Block block) - -
-           
- voidset_ClassBody(ClassBody body) - -
-           
- voidset_ClassDeclId(ClassDeclId cdid) - -
-           
- voidset_ParaHash(java.util.Hashtable hash) - -
-           
- voidset_ParaList(de.dhbwstuttgart.typeinference.Menge para) - -
-           
- voidset_Status(Status status) - -
-           
- voidset_UsedId(UsedId uid) - -
-           
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>TRProg(CSupportData supportData) - -
-          Ausgangspunkt f�r den Typrekonstruktionsalgorithmus.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-superclassid

-
-public UsedId superclassid
-
-
-
-
-
- -

-vParaOrg

-
-public de.dhbwstuttgart.typeinference.Menge vParaOrg
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-Class

-
-public Class()
-
-
- - - - - - - - -
-Method Detail
- -

-para_check

-
-public void para_check(de.dhbwstuttgart.typeinference.Menge classlist,
-                       boolean ext)
-                throws SCClassException
-
-
- -
Throws: -
SCClassException
-
-
-
- -

-complete_paralist

-
-public de.dhbwstuttgart.typeinference.Menge complete_paralist(boolean ext)
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classlist,
-                     boolean ext)
-              throws SCClassException
-
-
- -
Throws: -
SCClassException
-
-
-
- -

-sc_check_for_extended_classes

-
-public void sc_check_for_extended_classes(de.dhbwstuttgart.typeinference.Menge classlist,
-                                          java.util.Hashtable childhash,
-                                          boolean ext)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(boolean system_out)
-             throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-get_classname

-
-public java.lang.String get_classname()
-
-
-
-
-
-
- -

-set_Status

-
-public void set_Status(Status status)
-
-
-
-
-
-
- -

-set_UsedId

-
-public void set_UsedId(UsedId uid)
-
-
-
-
-
-
- -

-set_ClassBody

-
-public void set_ClassBody(ClassBody body)
-
-
-
-
-
-
- -

-set_class_block

-
-public void set_class_block(Block block)
-
-
-
-
-
-
- -

-set_ClassDeclId

-
-public void set_ClassDeclId(ClassDeclId cdid)
-
-
-
-
-
-
- -

-is_member

-
-public java.lang.String is_member(java.lang.String var)
-
-
-
-
-
-
- -

-get_Superclass_Name

-
-public java.lang.String get_Superclass_Name()
-
-
-
-
-
-
- -

-get_ClassBody

-
-public ClassBody get_ClassBody()
-
-
-
-
-
-
- -

-get_class_block

-
-public Block get_class_block()
-
-
-
-
-
-
- -

-does_Class_extend

-
-public boolean does_Class_extend()
-
-
-
-
-
-
- -

-set_ParaList

-
-public void set_ParaList(de.dhbwstuttgart.typeinference.Menge para)
-
-
-
-
-
-
- -

-get_ParaList

-
-public de.dhbwstuttgart.typeinference.Menge get_ParaList()
-
-
-
-
-
-
- -

-get_vParaOrg

-
-public de.dhbwstuttgart.typeinference.Menge get_vParaOrg()
-
-
-
-
-
-
- -

-set_ParaHash

-
-public void set_ParaHash(java.util.Hashtable hash)
-
-
-
-
-
-
- -

-get_ParaHash

-
-public java.util.Hashtable get_ParaHash()
-
-
-
-
-
-
- -

-TRProg

-
-public de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> TRProg(CSupportData supportData)
-                                                   throws CTypeReconstructionException
-
-
Ausgangspunkt f�r den Typrekonstruktionsalgorithmus. Hier werden zun�chst - die Mengen von Typannahmen V_fields_methods und V_i erstellt, die als Eingabe - f�r den Algorithmus dienen.
- (siehe Algorithmus 5.17 TRProg, Martin Pl�micke) -
Author: J�rg B�uerle -

-

-
Parameters:
supportData - -
Returns:
Liste aller bisher berechneten, m�glichen Typkombinationen -
Throws: -
CTypeReconstructionException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/ClassBody.html b/doc/Javadoc/mycompiler/myclass/ClassBody.html deleted file mode 100755 index 93b9422e..00000000 --- a/doc/Javadoc/mycompiler/myclass/ClassBody.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - - - -ClassBody - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myclass -
-Class ClassBody

-
-java.lang.Object
-  extended by mycompiler.myclass.ClassBody
-
-
-
-
public class ClassBody
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
- java.util.Hashtablekill - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ClassBody() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.util.Hashtablecomplete_parahashtable(de.dhbwstuttgart.typeinference.Menge classlist, - UsedId superclassid, - java.util.Hashtable childhash, - boolean ext) - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_FieldDeclMenge() - -
-           
- java.util.Hashtableget_hash() - -
-           
- java.util.Hashtableinit_parahashtable(de.dhbwstuttgart.typeinference.Menge paralist, - boolean ext) - -
-           
- booleanis_declared(Type t, - de.dhbwstuttgart.typeinference.Menge classlist) - -
-           
- voidistParameterOK(de.dhbwstuttgart.typeinference.Menge Parameter, - de.dhbwstuttgart.typeinference.Menge KlassenVektor) - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classlist, - boolean ext) - -
-           
- voidsc_init_hashtable_for_extended_classes(de.dhbwstuttgart.typeinference.Menge classlist, - java.lang.String strSuperKlassenName, - java.util.Hashtable childhash, - de.dhbwstuttgart.typeinference.Menge paralist, - java.util.Hashtable parahash, - java.util.Hashtable kill, - boolean ext) - -
-           
- voidsc_init_hashtable(de.dhbwstuttgart.typeinference.Menge KlassenVektor, - java.lang.String strSuperKlassenName, - java.lang.String classname, - boolean ext) - -
-           
- voidset_FieldDecl(FieldDecl i) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-kill

-
-public java.util.Hashtable kill
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ClassBody

-
-public ClassBody()
-
-
- - - - - - - - -
-Method Detail
- -

-sc_init_hashtable

-
-public void sc_init_hashtable(de.dhbwstuttgart.typeinference.Menge KlassenVektor,
-                              java.lang.String strSuperKlassenName,
-                              java.lang.String classname,
-                              boolean ext)
-                       throws SCClassBodyException
-
-
- -
Throws: -
SCClassBodyException
-
-
-
- -

-sc_init_hashtable_for_extended_classes

-
-public void sc_init_hashtable_for_extended_classes(de.dhbwstuttgart.typeinference.Menge classlist,
-                                                   java.lang.String strSuperKlassenName,
-                                                   java.util.Hashtable childhash,
-                                                   de.dhbwstuttgart.typeinference.Menge paralist,
-                                                   java.util.Hashtable parahash,
-                                                   java.util.Hashtable kill,
-                                                   boolean ext)
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classlist,
-                     boolean ext)
-              throws SCClassBodyException
-
-
- -
Throws: -
SCClassBodyException
-
-
-
- -

-init_parahashtable

-
-public java.util.Hashtable init_parahashtable(de.dhbwstuttgart.typeinference.Menge paralist,
-                                              boolean ext)
-
-
-
-
-
-
- -

-complete_parahashtable

-
-public java.util.Hashtable complete_parahashtable(de.dhbwstuttgart.typeinference.Menge classlist,
-                                                  UsedId superclassid,
-                                                  java.util.Hashtable childhash,
-                                                  boolean ext)
-                                           throws SCClassBodyException
-
-
- -
Throws: -
SCClassBodyException
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-get_hash

-
-public java.util.Hashtable get_hash()
-
-
-
-
-
-
- -

-get_FieldDeclMenge

-
-public de.dhbwstuttgart.typeinference.Menge get_FieldDeclMenge()
-
-
-
-
-
-
- -

-set_FieldDecl

-
-public void set_FieldDecl(FieldDecl i)
-
-
-
-
-
-
- -

-is_declared

-
-public boolean is_declared(Type t,
-                           de.dhbwstuttgart.typeinference.Menge classlist)
-                    throws SCClassBodyException
-
-
- -
Throws: -
SCClassBodyException
-
-
-
- -

-istParameterOK

-
-public void istParameterOK(de.dhbwstuttgart.typeinference.Menge Parameter,
-                           de.dhbwstuttgart.typeinference.Menge KlassenVektor)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/ClassDeclId.html b/doc/Javadoc/mycompiler/myclass/ClassDeclId.html deleted file mode 100755 index 21ea3987..00000000 --- a/doc/Javadoc/mycompiler/myclass/ClassDeclId.html +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - -ClassDeclId - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myclass -
-Class ClassDeclId

-
-java.lang.Object
-  extended by mycompiler.myclass.ClassDeclId
-
-
-
-
public class ClassDeclId
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
ClassDeclId() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- shortget_access_flags() - -
-           
- java.lang.Stringget_classname() - -
-           
- Modifiersget_Modifiers() - -
-           
- voidset_classname(java.lang.String classname) - -
-           
- voidset_Modifiers(Modifiers mod) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-ClassDeclId

-
-public ClassDeclId()
-
-
- - - - - - - - -
-Method Detail
- -

-set_classname

-
-public void set_classname(java.lang.String classname)
-
-
-
-
-
-
- -

-get_classname

-
-public java.lang.String get_classname()
-
-
-
-
-
-
- -

-set_Modifiers

-
-public void set_Modifiers(Modifiers mod)
-
-
-
-
-
-
- -

-get_Modifiers

-
-public Modifiers get_Modifiers()
-
-
-
-
-
-
- -

-get_access_flags

-
-public short get_access_flags()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/Constructor.html b/doc/Javadoc/mycompiler/myclass/Constructor.html deleted file mode 100755 index 94305535..00000000 --- a/doc/Javadoc/mycompiler/myclass/Constructor.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - -Constructor - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myclass -
-Class Constructor

-
-java.lang.Object
-  extended by mycompiler.myclass.FieldDecl
-      extended by mycompiler.myclass.Method
-          extended by mycompiler.myclass.Constructor
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class Constructor
extends Method
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.myclass.Method
parameterlist
- - - - - - - -
Fields inherited from class mycompiler.myclass.FieldDecl
declid
-  - - - - - - - - - - -
-Constructor Summary
Constructor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_codegen_Param_Type(de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.myclass.Method
call_sc_check, get_Block, get_ExceptionList, get_Method_Name, get_Type_Paralist, getLineNumber, getParameterCount, getParameterList, getReturnType, getTypeLineNumber, getTypeName, replaceType, sc_init_parameterlist, set_Block, set_ExceptionList, set_Modifiers, setLineNumber, setParameterList, setReturnType
- - - - - - - -
Methods inherited from class mycompiler.myclass.FieldDecl
get_Name, getDeclIdMenge, set_DeclId, setDeclIdMenge
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Constructor

-
-public Constructor()
-
-
- - - - - - - - -
-Method Detail
- -

-get_codegen_Param_Type

-
-public java.lang.String get_codegen_Param_Type(de.dhbwstuttgart.typeinference.Menge paralist)
-
-
-
Overrides:
get_codegen_Param_Type in class Method
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Overrides:
codegen in class Method
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/DeclId.html b/doc/Javadoc/mycompiler/myclass/DeclId.html deleted file mode 100755 index e2eb1418..00000000 --- a/doc/Javadoc/mycompiler/myclass/DeclId.html +++ /dev/null @@ -1,616 +0,0 @@ - - - - - - -DeclId - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myclass -
-Class DeclId

-
-java.lang.Object
-  extended by mycompiler.myclass.DeclId
-
-
-
-
public class DeclId
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - - - - - - - - - - - - - -
-Field Summary
- booleanhamaDebug - -
-           
- Modifiersmodifiers - -
-           
- java.lang.Stringname - -
-           
- de.dhbwstuttgart.typeinference.Mengeparatyp - -
-           
-  - - - - - - - - - - - - - -
-Constructor Summary
DeclId() - -
-           
DeclId(java.lang.String name) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen_InstVarDecl(ClassFile classfile, - Type type, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidcodegen_LocalVarDecl(ClassFile classfile, - CodeAttribute code, - Type type, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- shortget_access_flags() - -
-           
- Modifiersget_Modifiers() - -
-           
- java.lang.Stringget_Name() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_Paratyp() - -
-           
- ExprStmtget_Wert() - -
-           
- intgetLineNumber() - -
-           
- voidset_ListType(Type t) - -
-           
- voidset_Modifiers(Modifiers mod) - -
-           
- voidset_Name(java.lang.String name) - -
-           
- voidset_Paratyp(de.dhbwstuttgart.typeinference.Menge p) - -
-           
- voidset_Wert(ExprStmt w) - -
-           
- voidsetLineNumber(int lineNumber) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-hamaDebug

-
-public boolean hamaDebug
-
-
-
-
-
- -

-modifiers

-
-public Modifiers modifiers
-
-
-
-
-
- -

-name

-
-public java.lang.String name
-
-
-
-
-
- -

-paratyp

-
-public de.dhbwstuttgart.typeinference.Menge paratyp
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-DeclId

-
-public DeclId()
-
-
-
- -

-DeclId

-
-public DeclId(java.lang.String name)
-
-
- - - - - - - - -
-Method Detail
- -

-set_Paratyp

-
-public void set_Paratyp(de.dhbwstuttgart.typeinference.Menge p)
-
-
-
-
-
-
- -

-get_Paratyp

-
-public de.dhbwstuttgart.typeinference.Menge get_Paratyp()
-
-
-
-
-
-
- -

-set_Name

-
-public void set_Name(java.lang.String name)
-
-
-
-
-
-
- -

-set_Wert

-
-public void set_Wert(ExprStmt w)
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
-
-
-
- -

-get_Wert

-
-public ExprStmt get_Wert()
-
-
-
-
-
-
- -

-set_Modifiers

-
-public void set_Modifiers(Modifiers mod)
-
-
-
-
-
-
- -

-get_Modifiers

-
-public Modifiers get_Modifiers()
-
-
-
-
-
-
- -

-get_access_flags

-
-public short get_access_flags()
-
-
-
-
-
-
- -

-set_ListType

-
-public void set_ListType(Type t)
-
-
-
-
-
-
- -

-codegen_InstVarDecl

-
-public void codegen_InstVarDecl(ClassFile classfile,
-                                Type type,
-                                de.dhbwstuttgart.typeinference.Menge paralist)
-                         throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-codegen_LocalVarDecl

-
-public void codegen_LocalVarDecl(ClassFile classfile,
-                                 CodeAttribute code,
-                                 Type type,
-                                 de.dhbwstuttgart.typeinference.Menge paralist)
-                          throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-getLineNumber

-
-public int getLineNumber()
-
-
-
-
-
-
- -

-setLineNumber

-
-public void setLineNumber(int lineNumber)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/ExceptionList.html b/doc/Javadoc/mycompiler/myclass/ExceptionList.html deleted file mode 100755 index 93193fe7..00000000 --- a/doc/Javadoc/mycompiler/myclass/ExceptionList.html +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - -ExceptionList - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myclass -
-Class ExceptionList

-
-java.lang.Object
-  extended by mycompiler.myclass.ExceptionList
-
-
-
-
public class ExceptionList
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
ExceptionList() - -
-           
-  - - - - - - - - - - - -
-Method Summary
- voidset_addElem(RefType rety) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-ExceptionList

-
-public ExceptionList()
-
-
- - - - - - - - -
-Method Detail
- -

-set_addElem

-
-public void set_addElem(RefType rety)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/FieldDecl.html b/doc/Javadoc/mycompiler/myclass/FieldDecl.html deleted file mode 100755 index 360a9692..00000000 --- a/doc/Javadoc/mycompiler/myclass/FieldDecl.html +++ /dev/null @@ -1,388 +0,0 @@ - - - - - - -FieldDecl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myclass -
-Class FieldDecl

-
-java.lang.Object
-  extended by mycompiler.myclass.FieldDecl
-
-
-
Direct Known Subclasses:
InstVarDecl, Method
-
-
-
-
public abstract class FieldDecl
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
-protected  de.dhbwstuttgart.typeinference.Mengedeclid - -
-           
-  - - - - - - - - - - -
-Constructor Summary
FieldDecl() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
-abstract  voidcodegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_Name() - -
-           
- de.dhbwstuttgart.typeinference.MengegetDeclIdMenge() - -
-           
-abstract  java.lang.StringgetTypeName() - -
-           
- voidset_DeclId(DeclId did) - -
-           
- voidsetDeclIdMenge(de.dhbwstuttgart.typeinference.Menge vDeclId) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-declid

-
-protected de.dhbwstuttgart.typeinference.Menge declid
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-FieldDecl

-
-public FieldDecl()
-
-
- - - - - - - - -
-Method Detail
- -

-getTypeName

-
-public abstract java.lang.String getTypeName()
-
-
-
-
-
-
- -

-codegen

-
-public abstract void codegen(ClassFile classfile,
-                             de.dhbwstuttgart.typeinference.Menge paralist)
-                      throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-set_DeclId

-
-public void set_DeclId(DeclId did)
-
-
-
-
-
-
- -

-get_Name

-
-public de.dhbwstuttgart.typeinference.Menge get_Name()
-
-
-
-
-
-
- -

-getDeclIdMenge

-
-public de.dhbwstuttgart.typeinference.Menge getDeclIdMenge()
-
-
-
-
-
-
- -

-setDeclIdMenge

-
-public void setDeclIdMenge(de.dhbwstuttgart.typeinference.Menge vDeclId)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/FormalParameter.html b/doc/Javadoc/mycompiler/myclass/FormalParameter.html deleted file mode 100755 index c82d89ee..00000000 --- a/doc/Javadoc/mycompiler/myclass/FormalParameter.html +++ /dev/null @@ -1,443 +0,0 @@ - - - - - - -FormalParameter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myclass -
-Class FormalParameter

-
-java.lang.Object
-  extended by mycompiler.myclass.FormalParameter
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class FormalParameter
extends java.lang.Object
implements ITypeReplacementListener
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
FormalParameter() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code) - -
-           
- java.lang.Stringget_Name() - -
-           
- intgetLineNumber() - -
-          
Author: Jörg Bäuerle
- TypegetType() - -
-           
- intgetTypeLineNumber() - -
-          
Author: Jörg Bäuerle
- java.lang.StringgetTypeName() - -
-           
- voidreplaceType(CReplaceTypeEvent e) - -
-          
Author: Jörg Bäuerle
- voidset_DeclId(DeclId did) - -
-           
- voidsetType(Type t) - -
-          
Author: Jörg Bäuerle
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-FormalParameter

-
-public FormalParameter()
-
-
- - - - - - - - -
-Method Detail
- -

-setType

-
-public void setType(Type t)
-
-

Author: Jörg Bäuerle -

-

-
-
-
-
Parameters:
t -
-
-
-
- -

-set_DeclId

-
-public void set_DeclId(DeclId did)
-
-
-
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
-
-
-
-
-
-
- -

-getType

-
-public Type getType()
-
-
-
-
-
-
-
-
-
- -

-getTypeName

-
-public java.lang.String getTypeName()
-
-
-
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code)
-
-
-
-
-
-
-
-
-
- -

-getLineNumber

-
-public int getLineNumber()
-
-

Author: Jörg Bäuerle -

-

-
-
-
- -
Returns:
-
-
-
- -

-replaceType

-
-public void replaceType(CReplaceTypeEvent e)
-
-

Author: Jörg Bäuerle -

-

-
Specified by:
replaceType in interface ITypeReplacementListener
-
-
-
Parameters:
e -
-
-
-
- -

-getTypeLineNumber

-
-public int getTypeLineNumber()
-
-

Author: Jörg Bäuerle -

-

-
Specified by:
getTypeLineNumber in interface ITypeReplacementListener
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/InstVarDecl.html b/doc/Javadoc/mycompiler/myclass/InstVarDecl.html deleted file mode 100755 index 864507a9..00000000 --- a/doc/Javadoc/mycompiler/myclass/InstVarDecl.html +++ /dev/null @@ -1,427 +0,0 @@ - - - - - - -InstVarDecl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myclass -
-Class InstVarDecl

-
-java.lang.Object
-  extended by mycompiler.myclass.FieldDecl
-      extended by mycompiler.myclass.InstVarDecl
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class InstVarDecl
extends FieldDecl
implements ITypeReplacementListener
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.myclass.FieldDecl
declid
-  - - - - - - - - - - -
-Constructor Summary
InstVarDecl() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- intgetLineNumber() - -
-           
- TypegetType() - -
-           
- intgetTypeLineNumber() - -
-          
Author: J�rg B�uerle
- java.lang.StringgetTypeName() - -
-           
- voidreplaceType(CReplaceTypeEvent e) - -
-          
Author: J�rg B�uerle
- voidsetType(Type t) - -
-          
Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class mycompiler.myclass.FieldDecl
get_Name, getDeclIdMenge, set_DeclId, setDeclIdMenge
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-InstVarDecl

-
-public InstVarDecl()
-
-
- - - - - - - - -
-Method Detail
- -

-setType

-
-public void setType(Type t)
-
-

Author: J�rg B�uerle -

-

-
-
-
-
Parameters:
t -
-
-
-
- -

-getType

-
-public Type getType()
-
-
-
-
-
-
-
-
-
- -

-getTypeName

-
-public java.lang.String getTypeName()
-
-
-
Specified by:
getTypeName in class FieldDecl
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class FieldDecl
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-getLineNumber

-
-public int getLineNumber()
-
-
-
-
-
-
-
-
-
- -

-replaceType

-
-public void replaceType(CReplaceTypeEvent e)
-
-

Author: J�rg B�uerle -

-

-
Specified by:
replaceType in interface ITypeReplacementListener
-
-
-
Parameters:
e -
-
-
-
- -

-getTypeLineNumber

-
-public int getTypeLineNumber()
-
-

Author: J�rg B�uerle -

-

-
Specified by:
getTypeLineNumber in interface ITypeReplacementListener
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/Method.html b/doc/Javadoc/mycompiler/myclass/Method.html deleted file mode 100755 index 3b44ca92..00000000 --- a/doc/Javadoc/mycompiler/myclass/Method.html +++ /dev/null @@ -1,777 +0,0 @@ - - - - - - -Method - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myclass -
-Class Method

-
-java.lang.Object
-  extended by mycompiler.myclass.FieldDecl
-      extended by mycompiler.myclass.Method
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
Direct Known Subclasses:
Constructor
-
-
-
-
public class Method
extends FieldDecl
implements ITypeReplacementListener
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
-protected  ParameterListparameterlist - -
-           
- - - - - - - -
Fields inherited from class mycompiler.myclass.FieldDecl
declid
-  - - - - - - - - - - -
-Constructor Summary
Method() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcall_sc_check(de.dhbwstuttgart.typeinference.Menge classlist, - java.util.Hashtable classhash, - boolean ext, - java.util.Hashtable parach) - -
-           
- voidcodegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- Blockget_Block() - -
-           
- java.lang.Stringget_codegen_Param_Type(de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- ExceptionListget_ExceptionList() - -
-           
- java.lang.Stringget_Method_Name() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_Type_Paralist() - -
-           
- intgetLineNumber() - -
-           
- intgetParameterCount() - -
-          Author: J�rg B�uerle
- ParameterListgetParameterList() - -
-           
- TypegetReturnType() - -
-           
- intgetTypeLineNumber() - -
-          
Author: J�rg B�uerle
- java.lang.StringgetTypeName() - -
-           
- voidreplaceType(CReplaceTypeEvent e) - -
-          
Author: J�rg B�uerle
- voidsc_init_parameterlist(boolean ext) - -
-           
- voidset_Block(Block blo) - -
-           
- voidset_ExceptionList(ExceptionList exlist) - -
-           
- voidset_Modifiers(Modifiers modif) - -
-           
- voidsetLineNumber(int lineNumber) - -
-           
- voidsetParameterList(ParameterList paralist) - -
-           
- voidsetReturnType(Type type) - -
-          
Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class mycompiler.myclass.FieldDecl
get_Name, getDeclIdMenge, set_DeclId, setDeclIdMenge
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-parameterlist

-
-protected ParameterList parameterlist
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-Method

-
-public Method()
-
-
- - - - - - - - -
-Method Detail
- -

-call_sc_check

-
-public void call_sc_check(de.dhbwstuttgart.typeinference.Menge classlist,
-                          java.util.Hashtable classhash,
-                          boolean ext,
-                          java.util.Hashtable parach)
-                   throws SCMethodException
-
-
-
-
-
- -
Throws: -
SCMethodException
-
-
-
- -

-sc_init_parameterlist

-
-public void sc_init_parameterlist(boolean ext)
-
-
-
-
-
-
-
-
-
- -

-getTypeName

-
-public java.lang.String getTypeName()
-
-
-
Specified by:
getTypeName in class FieldDecl
-
-
-
-
-
-
- -

-get_Block

-
-public Block get_Block()
-
-
-
-
-
-
-
-
-
- -

-setReturnType

-
-public void setReturnType(Type type)
-
-

Author: J�rg B�uerle -

-

-
-
-
-
Parameters:
type -
-
-
-
- -

-set_Block

-
-public void set_Block(Block blo)
-
-
-
-
-
-
-
-
-
- -

-set_Modifiers

-
-public void set_Modifiers(Modifiers modif)
-
-
-
-
-
-
-
-
-
- -

-set_ExceptionList

-
-public void set_ExceptionList(ExceptionList exlist)
-
-
-
-
-
-
-
-
-
- -

-setParameterList

-
-public void setParameterList(ParameterList paralist)
-
-
-
-
-
-
-
-
-
- -

-getParameterList

-
-public ParameterList getParameterList()
-
-
-
-
-
-
-
-
-
- -

-getParameterCount

-
-public int getParameterCount()
-
-
Author: J�rg B�uerle
-

-

-
-
-
- -
Returns:
Die Anzahl der Methoden-Paramater
-
-
-
- -

-get_ExceptionList

-
-public ExceptionList get_ExceptionList()
-
-
-
-
-
-
-
-
-
- -

-getReturnType

-
-public Type getReturnType()
-
-
-
-
-
-
-
-
-
- -

-get_codegen_Param_Type

-
-public java.lang.String get_codegen_Param_Type(de.dhbwstuttgart.typeinference.Menge paralist)
-
-
-
-
-
-
-
-
-
- -

-get_Method_Name

-
-public java.lang.String get_Method_Name()
-
-
-
-
-
-
-
-
-
- -

-get_Type_Paralist

-
-public de.dhbwstuttgart.typeinference.Menge get_Type_Paralist()
-
-
-
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class FieldDecl
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-getLineNumber

-
-public int getLineNumber()
-
-
-
-
-
-
-
-
-
- -

-setLineNumber

-
-public void setLineNumber(int lineNumber)
-
-
-
-
-
-
-
-
-
- -

-replaceType

-
-public void replaceType(CReplaceTypeEvent e)
-
-

Author: J�rg B�uerle -

-

-
Specified by:
replaceType in interface ITypeReplacementListener
-
-
-
Parameters:
e -
-
-
-
- -

-getTypeLineNumber

-
-public int getTypeLineNumber()
-
-

Author: J�rg B�uerle -

-

-
Specified by:
getTypeLineNumber in interface ITypeReplacementListener
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/ParameterList.html b/doc/Javadoc/mycompiler/myclass/ParameterList.html deleted file mode 100755 index 77f5e4f4..00000000 --- a/doc/Javadoc/mycompiler/myclass/ParameterList.html +++ /dev/null @@ -1,384 +0,0 @@ - - - - - - -ParameterList - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myclass -
-Class ParameterList

-
-java.lang.Object
-  extended by mycompiler.myclass.ParameterList
-
-
-
-
public class ParameterList
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - - - - - -
-Field Summary
- de.dhbwstuttgart.typeinference.Mengeformalparameter - -
-           
- booleanhamaDebug - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ParameterList() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code) - -
-           
- java.lang.Stringget_codegen_ParameterList(de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- intgetParameterCount() - -
-          Author: J�rg B�uerle
- de.dhbwstuttgart.typeinference.Mengesc_get_Formalparalist() - -
-           
- voidset_AddParameter(FormalParameter fp) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-hamaDebug

-
-public boolean hamaDebug
-
-
-
-
-
- -

-formalparameter

-
-public de.dhbwstuttgart.typeinference.Menge formalparameter
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ParameterList

-
-public ParameterList()
-
-
- - - - - - - - -
-Method Detail
- -

-set_AddParameter

-
-public void set_AddParameter(FormalParameter fp)
-
-
-
-
-
-
- -

-get_codegen_ParameterList

-
-public java.lang.String get_codegen_ParameterList(de.dhbwstuttgart.typeinference.Menge paralist)
-
-
-
-
-
-
- -

-sc_get_Formalparalist

-
-public de.dhbwstuttgart.typeinference.Menge sc_get_Formalparalist()
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code)
-
-
-
-
-
-
- -

-getParameterCount

-
-public int getParameterCount()
-
-
Author: J�rg B�uerle
-

-

- -
Returns:
Die Anzahl der Parameter
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/Status.html b/doc/Javadoc/mycompiler/myclass/Status.html deleted file mode 100755 index a09e2389..00000000 --- a/doc/Javadoc/mycompiler/myclass/Status.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - -Status - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myclass -
-Class Status

-
-java.lang.Object
-  extended by mycompiler.myclass.Status
-
-
-
Direct Known Subclasses:
Import, UserDef
-
-
-
-
public abstract class Status
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Status() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- voidset_Import(Import imp) - -
-           
- voidset_UserDef(UserDef userdef) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Status

-
-public Status()
-
-
- - - - - - - - -
-Method Detail
- -

-set_UserDef

-
-public void set_UserDef(UserDef userdef)
-
-
-
-
-
-
- -

-set_Import

-
-public void set_Import(Import imp)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/UsedId.html b/doc/Javadoc/mycompiler/myclass/UsedId.html deleted file mode 100755 index b38f0253..00000000 --- a/doc/Javadoc/mycompiler/myclass/UsedId.html +++ /dev/null @@ -1,455 +0,0 @@ - - - - - - -UsedId - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myclass -
-Class UsedId

-
-java.lang.Object
-  extended by mycompiler.myclass.UsedId
-
-
-
-
public class UsedId
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - - - - - -
-Field Summary
- de.dhbwstuttgart.typeinference.Mengename - -
-           
- de.dhbwstuttgart.typeinference.MengevParaOrg - -
-           
-  - - - - - - - - - - -
-Constructor Summary
UsedId() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- java.lang.Stringget_codegen_UsedId() - -
-           
- java.lang.Stringget_Name_1Element() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_Name() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_ParaList() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_Typen() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_vParaOrg() - -
-           
- voidset_Name(java.lang.String name) - -
-           
- voidset_ParaList(de.dhbwstuttgart.typeinference.Menge pl) - -
-           
- voidset_Typen(de.dhbwstuttgart.typeinference.Menge t) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-name

-
-public de.dhbwstuttgart.typeinference.Menge name
-
-
-
-
-
- -

-vParaOrg

-
-public de.dhbwstuttgart.typeinference.Menge vParaOrg
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-UsedId

-
-public UsedId()
-
-
- - - - - - - - -
-Method Detail
- -

-set_Name

-
-public void set_Name(java.lang.String name)
-
-
-
-
-
-
- -

-get_Name

-
-public de.dhbwstuttgart.typeinference.Menge get_Name()
-
-
-
-
-
-
- -

-get_Name_1Element

-
-public java.lang.String get_Name_1Element()
-
-
-
-
-
-
- -

-set_Typen

-
-public void set_Typen(de.dhbwstuttgart.typeinference.Menge t)
-
-
-
-
-
-
- -

-set_ParaList

-
-public void set_ParaList(de.dhbwstuttgart.typeinference.Menge pl)
-
-
-
-
-
-
- -

-get_ParaList

-
-public de.dhbwstuttgart.typeinference.Menge get_ParaList()
-
-
-
-
-
-
- -

-get_vParaOrg

-
-public de.dhbwstuttgart.typeinference.Menge get_vParaOrg()
-
-
-
-
-
-
- -

-get_Typen

-
-public de.dhbwstuttgart.typeinference.Menge get_Typen()
-
-
-
-
-
-
- -

-get_codegen_UsedId

-
-public java.lang.String get_codegen_UsedId()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/UserDef.html b/doc/Javadoc/mycompiler/myclass/UserDef.html deleted file mode 100755 index 23e6c613..00000000 --- a/doc/Javadoc/mycompiler/myclass/UserDef.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - -UserDef - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myclass -
-Class UserDef

-
-java.lang.Object
-  extended by mycompiler.myclass.Status
-      extended by mycompiler.myclass.UserDef
-
-
-
-
public class UserDef
extends Status
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
UserDef() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class mycompiler.myclass.Status
set_Import, set_UserDef
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-UserDef

-
-public UserDef()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/class-use/Class.html b/doc/Javadoc/mycompiler/myclass/class-use/Class.html deleted file mode 100755 index 6640c030..00000000 --- a/doc/Javadoc/mycompiler/myclass/class-use/Class.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - -Uses of Class mycompiler.myclass.Class - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myclass.Class

-
- - - - - - - - - -
-Packages that use Class
mycompiler  
-  -

- - - - - -
-Uses of Class in mycompiler
-  -

- - - - - - - - - -
Methods in mycompiler that return types with arguments of type Class
- java.util.Iterator<Class>SourceFile.getClassIterator() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler with parameters of type Class
- voidSourceFile.set_Class(Class c) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/class-use/ClassBody.html b/doc/Javadoc/mycompiler/myclass/class-use/ClassBody.html deleted file mode 100755 index 277d4a3a..00000000 --- a/doc/Javadoc/mycompiler/myclass/class-use/ClassBody.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - -Uses of Class mycompiler.myclass.ClassBody - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myclass.ClassBody

-
- - - - - - - - - -
-Packages that use ClassBody
mycompiler.myclass  
-  -

- - - - - -
-Uses of ClassBody in mycompiler.myclass
-  -

- - - - - - - - - -
Methods in mycompiler.myclass that return ClassBody
- ClassBodyClass.get_ClassBody() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.myclass with parameters of type ClassBody
- voidClass.set_ClassBody(ClassBody body) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/class-use/ClassDeclId.html b/doc/Javadoc/mycompiler/myclass/class-use/ClassDeclId.html deleted file mode 100755 index 627b4601..00000000 --- a/doc/Javadoc/mycompiler/myclass/class-use/ClassDeclId.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.myclass.ClassDeclId - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myclass.ClassDeclId

-
- - - - - - - - - -
-Packages that use ClassDeclId
mycompiler.myclass  
-  -

- - - - - -
-Uses of ClassDeclId in mycompiler.myclass
-  -

- - - - - - - - - -
Methods in mycompiler.myclass with parameters of type ClassDeclId
- voidClass.set_ClassDeclId(ClassDeclId cdid) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/class-use/Constructor.html b/doc/Javadoc/mycompiler/myclass/class-use/Constructor.html deleted file mode 100755 index 97ac7057..00000000 --- a/doc/Javadoc/mycompiler/myclass/class-use/Constructor.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myclass.Constructor - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myclass.Constructor

-
-No usage of mycompiler.myclass.Constructor -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/class-use/DeclId.html b/doc/Javadoc/mycompiler/myclass/class-use/DeclId.html deleted file mode 100755 index 4f917dd5..00000000 --- a/doc/Javadoc/mycompiler/myclass/class-use/DeclId.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - -Uses of Class mycompiler.myclass.DeclId - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myclass.DeclId

-
- - - - - - - - - - - - - -
-Packages that use DeclId
mycompiler.myclass  
mycompiler.mystatement  
-  -

- - - - - -
-Uses of DeclId in mycompiler.myclass
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.myclass with parameters of type DeclId
- voidFormalParameter.set_DeclId(DeclId did) - -
-           
- voidFieldDecl.set_DeclId(DeclId did) - -
-           
-  -

- - - - - -
-Uses of DeclId in mycompiler.mystatement
-  -

- - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type DeclId
- voidLocalVarDecl.set_DeclId(DeclId did) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/class-use/ExceptionList.html b/doc/Javadoc/mycompiler/myclass/class-use/ExceptionList.html deleted file mode 100755 index 7d6804bd..00000000 --- a/doc/Javadoc/mycompiler/myclass/class-use/ExceptionList.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - -Uses of Class mycompiler.myclass.ExceptionList - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myclass.ExceptionList

-
- - - - - - - - - -
-Packages that use ExceptionList
mycompiler.myclass  
-  -

- - - - - -
-Uses of ExceptionList in mycompiler.myclass
-  -

- - - - - - - - - -
Methods in mycompiler.myclass that return ExceptionList
- ExceptionListMethod.get_ExceptionList() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.myclass with parameters of type ExceptionList
- voidMethod.set_ExceptionList(ExceptionList exlist) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/class-use/FieldDecl.html b/doc/Javadoc/mycompiler/myclass/class-use/FieldDecl.html deleted file mode 100755 index f024a6a6..00000000 --- a/doc/Javadoc/mycompiler/myclass/class-use/FieldDecl.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - -Uses of Class mycompiler.myclass.FieldDecl - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myclass.FieldDecl

-
- - - - - - - - - -
-Packages that use FieldDecl
mycompiler.myclass  
-  -

- - - - - -
-Uses of FieldDecl in mycompiler.myclass
-  -

- - - - - - - - - - - - - - - - - -
Subclasses of FieldDecl in mycompiler.myclass
- classConstructor - -
-           
- classInstVarDecl - -
-           
- classMethod - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.myclass with parameters of type FieldDecl
- voidClassBody.set_FieldDecl(FieldDecl i) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/class-use/FormalParameter.html b/doc/Javadoc/mycompiler/myclass/class-use/FormalParameter.html deleted file mode 100755 index 00a3d84f..00000000 --- a/doc/Javadoc/mycompiler/myclass/class-use/FormalParameter.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.myclass.FormalParameter - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myclass.FormalParameter

-
- - - - - - - - - -
-Packages that use FormalParameter
mycompiler.myclass  
-  -

- - - - - -
-Uses of FormalParameter in mycompiler.myclass
-  -

- - - - - - - - - -
Methods in mycompiler.myclass with parameters of type FormalParameter
- voidParameterList.set_AddParameter(FormalParameter fp) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/class-use/InstVarDecl.html b/doc/Javadoc/mycompiler/myclass/class-use/InstVarDecl.html deleted file mode 100755 index ca798e5a..00000000 --- a/doc/Javadoc/mycompiler/myclass/class-use/InstVarDecl.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myclass.InstVarDecl - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myclass.InstVarDecl

-
-No usage of mycompiler.myclass.InstVarDecl -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/class-use/Method.html b/doc/Javadoc/mycompiler/myclass/class-use/Method.html deleted file mode 100755 index e67aa7d0..00000000 --- a/doc/Javadoc/mycompiler/myclass/class-use/Method.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.myclass.Method - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myclass.Method

-
- - - - - - - - - -
-Packages that use Method
mycompiler.myclass  
-  -

- - - - - -
-Uses of Method in mycompiler.myclass
-  -

- - - - - - - - - -
Subclasses of Method in mycompiler.myclass
- classConstructor - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/class-use/ParameterList.html b/doc/Javadoc/mycompiler/myclass/class-use/ParameterList.html deleted file mode 100755 index 28695fd0..00000000 --- a/doc/Javadoc/mycompiler/myclass/class-use/ParameterList.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - -Uses of Class mycompiler.myclass.ParameterList - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myclass.ParameterList

-
- - - - - - - - - - - - - -
-Packages that use ParameterList
mycompiler.mybytecode  
mycompiler.myclass  
-  -

- - - - - -
-Uses of ParameterList in mycompiler.mybytecode
-  -

- - - - - - - - - -
Methods in mycompiler.mybytecode with parameters of type ParameterList
- voidClassFile.add_method(java.lang.String name, - java.lang.String param_type, - ParameterList param, - Type type, - Block block, - short acc_flag, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-  -

- - - - - -
-Uses of ParameterList in mycompiler.myclass
-  -

- - - - - - - - - -
Fields in mycompiler.myclass declared as ParameterList
-protected  ParameterListMethod.parameterlist - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.myclass that return ParameterList
- ParameterListMethod.getParameterList() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.myclass with parameters of type ParameterList
- voidMethod.setParameterList(ParameterList paralist) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/class-use/Status.html b/doc/Javadoc/mycompiler/myclass/class-use/Status.html deleted file mode 100755 index 40d97412..00000000 --- a/doc/Javadoc/mycompiler/myclass/class-use/Status.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - -Uses of Class mycompiler.myclass.Status - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myclass.Status

-
- - - - - - - - - - - - - -
-Packages that use Status
mycompiler.myclass  
mycompiler.unused  
-  -

- - - - - -
-Uses of Status in mycompiler.myclass
-  -

- - - - - - - - - -
Subclasses of Status in mycompiler.myclass
- classUserDef - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.myclass with parameters of type Status
- voidClass.set_Status(Status status) - -
-           
-  -

- - - - - -
-Uses of Status in mycompiler.unused
-  -

- - - - - - - - - -
Subclasses of Status in mycompiler.unused
- classImport - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/class-use/UsedId.html b/doc/Javadoc/mycompiler/myclass/class-use/UsedId.html deleted file mode 100755 index d35cb926..00000000 --- a/doc/Javadoc/mycompiler/myclass/class-use/UsedId.html +++ /dev/null @@ -1,357 +0,0 @@ - - - - - - -Uses of Class mycompiler.myclass.UsedId - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myclass.UsedId

-
- - - - - - - - - - - - - - - - - -
-Packages that use UsedId
mycompiler.myclass  
mycompiler.mystatement  
mycompiler.mytype  
-  -

- - - - - -
-Uses of UsedId in mycompiler.myclass
-  -

- - - - - - - - - -
Fields in mycompiler.myclass declared as UsedId
- UsedIdClass.superclassid - -
-           
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.myclass with parameters of type UsedId
- java.util.HashtableClassBody.complete_parahashtable(de.dhbwstuttgart.typeinference.Menge classlist, - UsedId superclassid, - java.util.Hashtable childhash, - boolean ext) - -
-           
- voidClass.set_UsedId(UsedId uid) - -
-           
-  -

- - - - - -
-Uses of UsedId in mycompiler.mystatement
-  -

- - - - - - - - - -
Fields in mycompiler.mystatement declared as UsedId
- UsedIdExpr.usedid - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mystatement that return UsedId
- UsedIdExpr.get_UsedId() - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type UsedId
- voidThis.set_UsedId(UsedId ui) - -
-           
- voidNewClass.set_UsedId(UsedId t) - -
-           
- voidMethodCall.set_UsedId(UsedId u) - -
-           
- voidLocalOrFieldVar.set_UsedId(UsedId u) - -
-           
- voidExpr.set_UsedId(UsedId ui) - -
-           
-  -

- - - - - -
-Uses of UsedId in mycompiler.mytype
-  -

- - - - - - - - - -
Fields in mycompiler.mytype declared as UsedId
-protected  UsedIdType.used - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytype that return UsedId
- UsedIdType.get_UsedId() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytype with parameters of type UsedId
- voidType.set_UsedId(UsedId uid) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/class-use/UserDef.html b/doc/Javadoc/mycompiler/myclass/class-use/UserDef.html deleted file mode 100755 index 90342cf1..00000000 --- a/doc/Javadoc/mycompiler/myclass/class-use/UserDef.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.myclass.UserDef - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myclass.UserDef

-
- - - - - - - - - -
-Packages that use UserDef
mycompiler.myclass  
-  -

- - - - - -
-Uses of UserDef in mycompiler.myclass
-  -

- - - - - - - - - -
Methods in mycompiler.myclass with parameters of type UserDef
- voidStatus.set_UserDef(UserDef userdef) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/package-frame.html b/doc/Javadoc/mycompiler/myclass/package-frame.html deleted file mode 100755 index 8bff27af..00000000 --- a/doc/Javadoc/mycompiler/myclass/package-frame.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - -mycompiler.myclass - - - - - - - - - - - -mycompiler.myclass - - - - -
-Classes  - -
-Class -
-ClassBody -
-ClassDeclId -
-Constructor -
-DeclId -
-ExceptionList -
-FieldDecl -
-FormalParameter -
-InstVarDecl -
-Method -
-ParameterList -
-Status -
-UsedId -
-UserDef
- - - - diff --git a/doc/Javadoc/mycompiler/myclass/package-summary.html b/doc/Javadoc/mycompiler/myclass/package-summary.html deleted file mode 100755 index 31ad38c7..00000000 --- a/doc/Javadoc/mycompiler/myclass/package-summary.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - -mycompiler.myclass - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.myclass -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
Class 
ClassBody 
ClassDeclId 
Constructor 
DeclId 
ExceptionList 
FieldDecl 
FormalParameter 
InstVarDecl 
Method 
ParameterList 
Status 
UsedId 
UserDef 
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/package-tree.html b/doc/Javadoc/mycompiler/myclass/package-tree.html deleted file mode 100755 index 4ce96209..00000000 --- a/doc/Javadoc/mycompiler/myclass/package-tree.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -mycompiler.myclass Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.myclass -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myclass/package-use.html b/doc/Javadoc/mycompiler/myclass/package-use.html deleted file mode 100755 index 719c8e19..00000000 --- a/doc/Javadoc/mycompiler/myclass/package-use.html +++ /dev/null @@ -1,327 +0,0 @@ - - - - - - -Uses of Package mycompiler.myclass - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.myclass

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use mycompiler.myclass
mycompiler  
mycompiler.mybytecode  
mycompiler.myclass  
mycompiler.mystatement  
mycompiler.mytype  
mycompiler.unused  
-  -

- - - - - - - - -
-Classes in mycompiler.myclass used by mycompiler
Class - -
-           
-  -

- - - - - - - - -
-Classes in mycompiler.myclass used by mycompiler.mybytecode
ParameterList - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Classes in mycompiler.myclass used by mycompiler.myclass
ClassBody - -
-           
ClassDeclId - -
-           
DeclId - -
-           
ExceptionList - -
-           
FieldDecl - -
-           
FormalParameter - -
-           
Method - -
-           
ParameterList - -
-           
Status - -
-           
UsedId - -
-           
UserDef - -
-           
-  -

- - - - - - - - - - - -
-Classes in mycompiler.myclass used by mycompiler.mystatement
DeclId - -
-           
UsedId - -
-           
-  -

- - - - - - - - -
-Classes in mycompiler.myclass used by mycompiler.mytype
UsedId - -
-           
-  -

- - - - - - - - -
-Classes in mycompiler.myclass used by mycompiler.unused
Status - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/CTypeReconstructionException.html b/doc/Javadoc/mycompiler/myexception/CTypeReconstructionException.html deleted file mode 100755 index af5dfca2..00000000 --- a/doc/Javadoc/mycompiler/myexception/CTypeReconstructionException.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - -CTypeReconstructionException - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myexception -
-Class CTypeReconstructionException

-
-java.lang.Object
-  extended by java.lang.Throwable
-      extended by java.lang.Exception
-          extended by java.lang.RuntimeException
-              extended by mycompiler.myexception.CTypeReconstructionException
-
-
-
All Implemented Interfaces:
java.io.Serializable
-
-
-
-
public class CTypeReconstructionException
extends java.lang.RuntimeException
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:07 $
-
Author:
-
Jörg Bäuerle
-
See Also:
Serialized Form
-
- -

- - - - - - - - - - - -
-Constructor Summary
CTypeReconstructionException(java.lang.String message) - -
-           
-  - - - - - - - - - - - -
-Method Summary
-static CTypeReconstructionExceptioncreateNotImplementedException() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CTypeReconstructionException

-
-public CTypeReconstructionException(java.lang.String message)
-
-
- - - - - - - - -
-Method Detail
- -

-createNotImplementedException

-
-public static CTypeReconstructionException createNotImplementedException()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/JVMCodeException.html b/doc/Javadoc/mycompiler/myexception/JVMCodeException.html deleted file mode 100755 index 2bdcff0c..00000000 --- a/doc/Javadoc/mycompiler/myexception/JVMCodeException.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - - - -JVMCodeException - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myexception -
-Class JVMCodeException

-
-java.lang.Object
-  extended by java.lang.Throwable
-      extended by java.lang.Exception
-          extended by mycompiler.myexception.JVMCodeException
-
-
-
All Implemented Interfaces:
java.io.Serializable
-
-
-
-
public class JVMCodeException
extends java.lang.Exception
- - -

-

-
See Also:
Serialized Form
-
- -

- - - - - - - - - - - -
-Constructor Summary
JVMCodeException(java.lang.String s) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- java.lang.Stringget_Message() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-JVMCodeException

-
-public JVMCodeException(java.lang.String s)
-
-
- - - - - - - - -
-Method Detail
- -

-get_Message

-
-public java.lang.String get_Message()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/MatchException.html b/doc/Javadoc/mycompiler/myexception/MatchException.html deleted file mode 100755 index 17e0970e..00000000 --- a/doc/Javadoc/mycompiler/myexception/MatchException.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - -MatchException - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myexception -
-Class MatchException

-
-java.lang.Object
-  extended by java.lang.Throwable
-      extended by java.lang.Exception
-          extended by mycompiler.myexception.MatchException
-
-
-
All Implemented Interfaces:
java.io.Serializable
-
-
-
-
public class MatchException
extends java.lang.Exception
- - -

-

-
See Also:
Serialized Form
-
- -

- - - - - - - - - - - -
-Constructor Summary
MatchException(java.lang.String m) - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-MatchException

-
-public MatchException(java.lang.String m)
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/SCClassBodyException.html b/doc/Javadoc/mycompiler/myexception/SCClassBodyException.html deleted file mode 100755 index 62630d08..00000000 --- a/doc/Javadoc/mycompiler/myexception/SCClassBodyException.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -SCClassBodyException - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myexception -
-Class SCClassBodyException

-
-java.lang.Object
-  extended by java.lang.Throwable
-      extended by java.lang.Exception
-          extended by mycompiler.myexception.SCClassBodyException
-
-
-
All Implemented Interfaces:
java.io.Serializable
-
-
-
-
public class SCClassBodyException
extends java.lang.Exception
- - -

-

-
See Also:
Serialized Form
-
- -

- - - - - - - - - - - -
-Constructor Summary
SCClassBodyException() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- voidaddException(SCExcept ex) - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_exlist() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-SCClassBodyException

-
-public SCClassBodyException()
-
-
- - - - - - - - -
-Method Detail
- -

-addException

-
-public void addException(SCExcept ex)
-
-
-
-
-
-
- -

-get_exlist

-
-public de.dhbwstuttgart.typeinference.Menge get_exlist()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/SCClassException.html b/doc/Javadoc/mycompiler/myexception/SCClassException.html deleted file mode 100755 index 13f331dd..00000000 --- a/doc/Javadoc/mycompiler/myexception/SCClassException.html +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - -SCClassException - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myexception -
-Class SCClassException

-
-java.lang.Object
-  extended by java.lang.Throwable
-      extended by java.lang.Exception
-          extended by mycompiler.myexception.SCClassException
-
-
-
All Implemented Interfaces:
java.io.Serializable
-
-
-
-
public class SCClassException
extends java.lang.Exception
- - -

-

-
See Also:
Serialized Form
-
- -

- - - - - - - - - - - -
-Constructor Summary
SCClassException() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidaddClassname(java.lang.String cn) - -
-           
- voidaddException(de.dhbwstuttgart.typeinference.Menge v) - -
-           
- voidfehlerausgabe() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-SCClassException

-
-public SCClassException()
-
-
- - - - - - - - -
-Method Detail
- -

-addException

-
-public void addException(de.dhbwstuttgart.typeinference.Menge v)
-
-
-
-
-
-
- -

-addClassname

-
-public void addClassname(java.lang.String cn)
-
-
-
-
-
-
- -

-fehlerausgabe

-
-public void fehlerausgabe()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/SCExcept.html b/doc/Javadoc/mycompiler/myexception/SCExcept.html deleted file mode 100755 index 0a743f3a..00000000 --- a/doc/Javadoc/mycompiler/myexception/SCExcept.html +++ /dev/null @@ -1,382 +0,0 @@ - - - - - - -SCExcept - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myexception -
-Class SCExcept

-
-java.lang.Object
-  extended by mycompiler.myexception.SCExcept
-
-
-
-
public class SCExcept
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
SCExcept() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidfehlerausgabe() - -
-           
- java.lang.Stringget_classname() - -
-           
- java.lang.Stringget_function() - -
-           
- java.lang.Stringget_statement() - -
-           
- voidset_classname(java.lang.String cn) - -
-           
- voidset_error(java.lang.String e) - -
-           
- voidset_function(java.lang.String fct) - -
-           
- voidset_statement(java.lang.String s) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-SCExcept

-
-public SCExcept()
-
-
- - - - - - - - -
-Method Detail
- -

-set_classname

-
-public void set_classname(java.lang.String cn)
-
-
-
-
-
-
- -

-set_error

-
-public void set_error(java.lang.String e)
-
-
-
-
-
-
- -

-set_function

-
-public void set_function(java.lang.String fct)
-
-
-
-
-
-
- -

-set_statement

-
-public void set_statement(java.lang.String s)
-
-
-
-
-
-
- -

-fehlerausgabe

-
-public void fehlerausgabe()
-
-
-
-
-
-
- -

-get_classname

-
-public java.lang.String get_classname()
-
-
-
-
-
-
- -

-get_statement

-
-public java.lang.String get_statement()
-
-
-
-
-
-
- -

-get_function

-
-public java.lang.String get_function()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/SCException.html b/doc/Javadoc/mycompiler/myexception/SCException.html deleted file mode 100755 index 7729b95f..00000000 --- a/doc/Javadoc/mycompiler/myexception/SCException.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -SCException - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myexception -
-Class SCException

-
-java.lang.Object
-  extended by java.lang.Throwable
-      extended by java.lang.Exception
-          extended by mycompiler.myexception.SCException
-
-
-
All Implemented Interfaces:
java.io.Serializable
-
-
-
-
public class SCException
extends java.lang.Exception
- - -

-

-
See Also:
Serialized Form
-
- -

- - - - - - - - - - - -
-Constructor Summary
SCException() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- voidadd_classexceptions(SCClassException ex) - -
-           
- voidfehlerausgabe() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-SCException

-
-public SCException()
-
-
- - - - - - - - -
-Method Detail
- -

-add_classexceptions

-
-public void add_classexceptions(SCClassException ex)
-
-
-
-
-
-
- -

-fehlerausgabe

-
-public void fehlerausgabe()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/SCMethodException.html b/doc/Javadoc/mycompiler/myexception/SCMethodException.html deleted file mode 100755 index 4665db93..00000000 --- a/doc/Javadoc/mycompiler/myexception/SCMethodException.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -SCMethodException - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myexception -
-Class SCMethodException

-
-java.lang.Object
-  extended by java.lang.Throwable
-      extended by java.lang.Exception
-          extended by mycompiler.myexception.SCMethodException
-
-
-
All Implemented Interfaces:
java.io.Serializable
-
-
-
-
public class SCMethodException
extends java.lang.Exception
- - -

-

-
See Also:
Serialized Form
-
- -

- - - - - - - - - - - -
-Constructor Summary
SCMethodException() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- de.dhbwstuttgart.typeinference.Mengeget_exlist() - -
-           
- voidset_exlist(de.dhbwstuttgart.typeinference.Menge list) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-SCMethodException

-
-public SCMethodException()
-
-
- - - - - - - - -
-Method Detail
- -

-get_exlist

-
-public de.dhbwstuttgart.typeinference.Menge get_exlist()
-
-
-
-
-
-
- -

-set_exlist

-
-public void set_exlist(de.dhbwstuttgart.typeinference.Menge list)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/SCStatementException.html b/doc/Javadoc/mycompiler/myexception/SCStatementException.html deleted file mode 100755 index 167fa6cf..00000000 --- a/doc/Javadoc/mycompiler/myexception/SCStatementException.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -SCStatementException - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myexception -
-Class SCStatementException

-
-java.lang.Object
-  extended by java.lang.Throwable
-      extended by java.lang.Exception
-          extended by mycompiler.myexception.SCStatementException
-
-
-
All Implemented Interfaces:
java.io.Serializable
-
-
-
-
public class SCStatementException
extends java.lang.Exception
- - -

-

-
See Also:
Serialized Form
-
- -

- - - - - - - - - - - -
-Constructor Summary
SCStatementException() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- voidaddException(SCExcept ex) - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_exlist() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-SCStatementException

-
-public SCStatementException()
-
-
- - - - - - - - -
-Method Detail
- -

-get_exlist

-
-public de.dhbwstuttgart.typeinference.Menge get_exlist()
-
-
-
-
-
-
- -

-addException

-
-public void addException(SCExcept ex)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/class-use/CTypeReconstructionException.html b/doc/Javadoc/mycompiler/myexception/class-use/CTypeReconstructionException.html deleted file mode 100755 index 80e61f35..00000000 --- a/doc/Javadoc/mycompiler/myexception/class-use/CTypeReconstructionException.html +++ /dev/null @@ -1,417 +0,0 @@ - - - - - - -Uses of Class mycompiler.myexception.CTypeReconstructionException - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myexception.CTypeReconstructionException

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use CTypeReconstructionException
mycompiler  
mycompiler.myclass  
mycompiler.myexception  
mycompiler.mystatement  
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.set  
-  -

- - - - - -
-Uses of CTypeReconstructionException in mycompiler
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler that throw CTypeReconstructionException
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>SourceFile.typeReconstruction() - -
-          Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf.
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>MyCompilerAPI.typeReconstruction() - -
-          Author: J�rg B�uerle
- Ruft den Typrekonstruktionsalgorithmus auf.
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>MyCompiler.typeReconstruction() - -
-          Author: J�rg B�uerle
- Ruft den Typrekonstruktionsalgorithmus auf.
-  -

- - - - - -
-Uses of CTypeReconstructionException in mycompiler.myclass
-  -

- - - - - - - - - -
Methods in mycompiler.myclass that throw CTypeReconstructionException
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>Class.TRProg(CSupportData supportData) - -
-          Ausgangspunkt f�r den Typrekonstruktionsalgorithmus.
-  -

- - - - - -
-Uses of CTypeReconstructionException in mycompiler.myexception
-  -

- - - - - - - - - -
Methods in mycompiler.myexception that return CTypeReconstructionException
-static CTypeReconstructionExceptionCTypeReconstructionException.createNotImplementedException() - -
-           
-  -

- - - - - -
-Uses of CTypeReconstructionException in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement that throw CTypeReconstructionException
-abstract  CTripleSetExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
-abstract  CTripleSetStatement.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetReturn.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.22 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetBlock.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.20 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetBlock.TRStatements(CSubstitutionSet sigma, - CTypeAssumptionSet V, - de.dhbwstuttgart.typeinference.Menge<Statement> statementList, - int index, - CTypeAssumptionSet V_start, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.19 von Martin Pl�micke -
Author: J�rg B�uerle
-  -

- - - - - -
-Uses of CTypeReconstructionException in mycompiler.mytypereconstruction
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that throw CTypeReconstructionException
- voidCSubstitution.execute() - -
-          Sucht die eindeutige Instanz der TyplosenVariable in der Registry der - TyplosenVariablen des Syntaxbaumes und f�hrt die Typsubstitution im - Syntaxbaum durch.
-  -

- - - - - - - - -
Constructors in mycompiler.mytypereconstruction that throw CTypeReconstructionException
CSubstitution(Pair unifier) - -
-           
-  -

- - - - - -
-Uses of CTypeReconstructionException in mycompiler.mytypereconstruction.set
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.set that throw CTypeReconstructionException
- voidCSubstitutionSet.execute() - -
-          F�hrt jede einzelne CSubstitution aus.
-  -

- - - - - - - - -
Constructors in mycompiler.mytypereconstruction.set that throw CTypeReconstructionException
CSubstitutionSet(de.dhbwstuttgart.typeinference.Menge<Pair> unifiers) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/class-use/JVMCodeException.html b/doc/Javadoc/mycompiler/myexception/class-use/JVMCodeException.html deleted file mode 100755 index 785525b3..00000000 --- a/doc/Javadoc/mycompiler/myexception/class-use/JVMCodeException.html +++ /dev/null @@ -1,1296 +0,0 @@ - - - - - - -Uses of Class mycompiler.myexception.JVMCodeException - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myexception.JVMCodeException

-
- - - - - - - - - - - - - - - - - - - - - -
-Packages that use JVMCodeException
mycompiler.mybytecode  
mycompiler.myclass  
mycompiler.myoperator  
mycompiler.mystatement  
-  -

- - - - - -
-Uses of JVMCodeException in mycompiler.mybytecode
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mybytecode that throw JVMCodeException
- intClassFile.add_field_ref(java.lang.String name, - java.lang.String cl_name, - java.lang.String type) - -
-           
- voidClassFile.add_method(java.lang.String name, - java.lang.String param_type, - ParameterList param, - Type type, - Block block, - short acc_flag, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidClassFile.codegen() - -
-           
- voidMethodInfo.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidFieldInfo.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidCodeAttribute.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
- voidAttributeInfo.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
-abstract  voidAttribute.codegen(ClassFile classfile, - java.io.FileOutputStream f) - -
-           
-static voidJVMCode.get_Command(de.dhbwstuttgart.typeinference.Menge b) - -
-           
- TypeCodeAttribute.get_TypeOf_Var(java.lang.String name) - -
-           
-static java.lang.ByteJVMCode.if_ncmpeq(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.if_ncmpne(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.n2n(java.lang.String s1, - java.lang.String s2) - -
-           
-static java.lang.ByteJVMCode.nadd(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.naload(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.nand(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.nastore(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.ncmpg(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.ncmpl(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.nconst_n(java.lang.String s1, - int n2) - -
-           
-static java.lang.ByteJVMCode.ndiv(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.nload_n(java.lang.String s1, - int n2) - -
-           
-static java.lang.ByteJVMCode.nmul(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.nneg(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.nor(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.nrem(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.nshl(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.nshr(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.nstore_n(java.lang.String s1, - int n2) - -
-           
-static java.lang.ByteJVMCode.nsub(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.nushr(java.lang.String s) - -
-           
-static java.lang.ByteJVMCode.nxor(java.lang.String s) - -
-           
-  -

- - - - - -
-Uses of JVMCodeException in mycompiler.myclass
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.myclass that throw JVMCodeException
- voidDeclId.codegen_InstVarDecl(ClassFile classfile, - Type type, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidDeclId.codegen_LocalVarDecl(ClassFile classfile, - CodeAttribute code, - Type type, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidClass.codegen(boolean system_out) - -
-           
- voidMethod.codegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidInstVarDecl.codegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidFieldDecl.codegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidConstructor.codegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidClassBody.codegen(ClassFile classfile, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-  -

- - - - - -
-Uses of JVMCodeException in mycompiler.myoperator
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.myoperator that throw JVMCodeException
-static voidLogOp.build(ClassFile classfile, - CodeAttribute code, - Expr expr, - de.dhbwstuttgart.typeinference.Menge indices, - boolean not, - boolean ex2, - boolean and, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidTimesOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPlusOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidOperator.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg_not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNotEqualOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidModuloOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidMinusOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLogOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLessOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLessEquOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidGreaterOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidGreaterEquOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidEqualOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidDivideOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidAddOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLogOp.if_codegen(ClassFile classfile, - CodeAttribute code, - boolean not, - Expr expr, - Statement then_block, - Statement else_block, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidRelOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidNotEqualOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidLessOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidLessEquOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidGreaterOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidGreaterEquOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidEqualOp.if_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- voidLogOp.loop_codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - int breakpoint, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-static voidLogOp.replace_index(CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge indices, - int else_index, - int then_index) - -
-           
-  -

- - - - - -
-Uses of JVMCodeException in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement that throw JVMCodeException
- voidUnaryNot.codegen(ClassFile classfile, - CodeAttribute code, - boolean sw) - -
-           
- voidUnaryMinus.codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean neg) - -
-           
- voidWhileStmt.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidUnaryExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidThis.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidStringLiteral.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidStatement.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidReturn.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPreIncExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPreDecExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPostIncExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPostDecExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPositivExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNull.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNotExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNewClass.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNewArray.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNegativeExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidMethodCall.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLocalVarDecl.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLocalOrFieldVar.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidIntLiteral.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidInstVar.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidInstanceOf.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidIfStmt.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidEmptyStmt.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidCharLiteral.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidCastExpr.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBoolLiteral.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBlock.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBinary.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidAssign.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidArgumentList.codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- intNewArray.get_codegen_Array_Type() - -
-           
- voidUnaryNot.if_codegen(ClassFile classfile, - CodeAttribute code, - boolean sw) - -
-           
- voidIfStmt.if_codegen(ClassFile classfile, - CodeAttribute code, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidWhileStmt.loop_codegen(ClassFile classfile, - CodeAttribute code, - int breakpoint, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNegativeExpr.neg_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBinary.neg_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNotExpr.not_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidBinary.not_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- booleanBinary.type_check(CodeAttribute code) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/class-use/MatchException.html b/doc/Javadoc/mycompiler/myexception/class-use/MatchException.html deleted file mode 100755 index 57a61f01..00000000 --- a/doc/Javadoc/mycompiler/myexception/class-use/MatchException.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - -Uses of Class mycompiler.myexception.MatchException - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myexception.MatchException

-
- - - - - - - - - -
-Packages that use MatchException
mycompiler.mytypereconstruction.unify  
-  -

- - - - - -
-Uses of MatchException in mycompiler.mytypereconstruction.unify
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.unify that throw MatchException
-static java.util.HashtableUnify.match(RefType FCtype, - RefType tomatch, - java.util.Hashtable ht) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/class-use/SCClassBodyException.html b/doc/Javadoc/mycompiler/myexception/class-use/SCClassBodyException.html deleted file mode 100755 index 741e40e9..00000000 --- a/doc/Javadoc/mycompiler/myexception/class-use/SCClassBodyException.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - -Uses of Class mycompiler.myexception.SCClassBodyException - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myexception.SCClassBodyException

-
- - - - - - - - - -
-Packages that use SCClassBodyException
mycompiler.myclass  
-  -

- - - - - -
-Uses of SCClassBodyException in mycompiler.myclass
-  -

- - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.myclass that throw SCClassBodyException
- java.util.HashtableClassBody.complete_parahashtable(de.dhbwstuttgart.typeinference.Menge classlist, - UsedId superclassid, - java.util.Hashtable childhash, - boolean ext) - -
-           
- booleanClassBody.is_declared(Type t, - de.dhbwstuttgart.typeinference.Menge classlist) - -
-           
- voidClassBody.sc_check(de.dhbwstuttgart.typeinference.Menge classlist, - boolean ext) - -
-           
- voidClassBody.sc_init_hashtable(de.dhbwstuttgart.typeinference.Menge KlassenVektor, - java.lang.String strSuperKlassenName, - java.lang.String classname, - boolean ext) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/class-use/SCClassException.html b/doc/Javadoc/mycompiler/myexception/class-use/SCClassException.html deleted file mode 100755 index 04290529..00000000 --- a/doc/Javadoc/mycompiler/myexception/class-use/SCClassException.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - -Uses of Class mycompiler.myexception.SCClassException - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myexception.SCClassException

-
- - - - - - - - - - - - - -
-Packages that use SCClassException
mycompiler.myclass  
mycompiler.myexception  
-  -

- - - - - -
-Uses of SCClassException in mycompiler.myclass
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.myclass that throw SCClassException
- voidClass.para_check(de.dhbwstuttgart.typeinference.Menge classlist, - boolean ext) - -
-           
- voidClass.sc_check(de.dhbwstuttgart.typeinference.Menge classlist, - boolean ext) - -
-           
-  -

- - - - - -
-Uses of SCClassException in mycompiler.myexception
-  -

- - - - - - - - - -
Methods in mycompiler.myexception with parameters of type SCClassException
- voidSCException.add_classexceptions(SCClassException ex) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/class-use/SCExcept.html b/doc/Javadoc/mycompiler/myexception/class-use/SCExcept.html deleted file mode 100755 index fd8e114c..00000000 --- a/doc/Javadoc/mycompiler/myexception/class-use/SCExcept.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - -Uses of Class mycompiler.myexception.SCExcept - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myexception.SCExcept

-
- - - - - - - - - -
-Packages that use SCExcept
mycompiler.myexception  
-  -

- - - - - -
-Uses of SCExcept in mycompiler.myexception
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.myexception with parameters of type SCExcept
- voidSCStatementException.addException(SCExcept ex) - -
-           
- voidSCClassBodyException.addException(SCExcept ex) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/class-use/SCException.html b/doc/Javadoc/mycompiler/myexception/class-use/SCException.html deleted file mode 100755 index 8bc83536..00000000 --- a/doc/Javadoc/mycompiler/myexception/class-use/SCException.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - -Uses of Class mycompiler.myexception.SCException - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myexception.SCException

-
- - - - - - - - - - - - - - - - - -
-Packages that use SCException
mycompiler  
mycompiler.mytype  
mycompiler.mytypereconstruction.unify  
-  -

- - - - - -
-Uses of SCException in mycompiler
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler that throw SCException
- voidSourceFile.sc_check(boolean ext) - -
-           
- voidMyCompilerAPI.semanticCheck() - -
-          Author: J�rg B�uerle
- Ruft den Semantik-Check ohne Typrekonstruktion auf.
- voidMyCompiler.semanticCheck() - -
-          Author: J�rg B�uerle
- Ruft �ber SourceFile.sc_check(false) - den alten Semantik-Check ohne Typrekonstruktion auf.
-  -

- - - - - -
-Uses of SCException in mycompiler.mytype
-  -

- - - - - - - - - -
Methods in mycompiler.mytype that throw SCException
- java.lang.StringRefType.getParaN(int n) - -
-           
-  -

- - - - - -
-Uses of SCException in mycompiler.mytypereconstruction.unify
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.unify that throw SCException
-static intUnify.pi(int n, - java.lang.String C, - java.lang.String D, - de.dhbwstuttgart.typeinference.Menge tto) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/class-use/SCMethodException.html b/doc/Javadoc/mycompiler/myexception/class-use/SCMethodException.html deleted file mode 100755 index 94e540a0..00000000 --- a/doc/Javadoc/mycompiler/myexception/class-use/SCMethodException.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - -Uses of Class mycompiler.myexception.SCMethodException - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myexception.SCMethodException

-
- - - - - - - - - -
-Packages that use SCMethodException
mycompiler.myclass  
-  -

- - - - - -
-Uses of SCMethodException in mycompiler.myclass
-  -

- - - - - - - - - -
Methods in mycompiler.myclass that throw SCMethodException
- voidMethod.call_sc_check(de.dhbwstuttgart.typeinference.Menge classlist, - java.util.Hashtable classhash, - boolean ext, - java.util.Hashtable parach) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/class-use/SCStatementException.html b/doc/Javadoc/mycompiler/myexception/class-use/SCStatementException.html deleted file mode 100755 index 34a4526c..00000000 --- a/doc/Javadoc/mycompiler/myexception/class-use/SCStatementException.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - -Uses of Class mycompiler.myexception.SCStatementException - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myexception.SCStatementException

-
- - - - - - - - - -
-Packages that use SCStatementException
mycompiler.mystatement  
-  -

- - - - - -
-Uses of SCStatementException in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement that throw SCStatementException
- voidLocalVarDecl.check_anz(Type type, - de.dhbwstuttgart.typeinference.Menge paralist, - de.dhbwstuttgart.typeinference.Menge classlist) - -
-           
- voidLocalVarDecl.is_declared(Type t, - de.dhbwstuttgart.typeinference.Menge classlist) - -
-           
- voidMethodCall.sc_check_get_Method(de.dhbwstuttgart.typeinference.Menge classlist, - java.lang.String methodname, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidMethodCall.sc_check_uebergabe(de.dhbwstuttgart.typeinference.Menge classlist, - de.dhbwstuttgart.typeinference.Menge method, - boolean ext, - int paranum, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidThis.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidReceiver.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidPreIncExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidPreDecExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidPostIncExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidPostDecExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidNotExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidNewClass.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable bh, - java.util.Hashtable ch, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidNegativeExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidMethodCall.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidLocalVarDecl.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidLocalOrFieldVar.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidInstanceOf.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
-abstract  voidExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidCastExpr.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidBlock.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidBinary.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidAssign.sc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/package-frame.html b/doc/Javadoc/mycompiler/myexception/package-frame.html deleted file mode 100755 index 103f99bb..00000000 --- a/doc/Javadoc/mycompiler/myexception/package-frame.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -mycompiler.myexception - - - - - - - - - - - -mycompiler.myexception - - - - -
-Classes  - -
-SCExcept
- - - - - - -
-Exceptions  - -
-CTypeReconstructionException -
-JVMCodeException -
-MatchException -
-SCClassBodyException -
-SCClassException -
-SCException -
-SCMethodException -
-SCStatementException
- - - - diff --git a/doc/Javadoc/mycompiler/myexception/package-summary.html b/doc/Javadoc/mycompiler/myexception/package-summary.html deleted file mode 100755 index a4ffdc93..00000000 --- a/doc/Javadoc/mycompiler/myexception/package-summary.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - -mycompiler.myexception - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.myexception -

- - - - - - - - - -
-Class Summary
SCExcept 
-  - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Exception Summary
CTypeReconstructionException 
JVMCodeException 
MatchException 
SCClassBodyException 
SCClassException 
SCException 
SCMethodException 
SCStatementException 
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/package-tree.html b/doc/Javadoc/mycompiler/myexception/package-tree.html deleted file mode 100755 index 778af4c1..00000000 --- a/doc/Javadoc/mycompiler/myexception/package-tree.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - -mycompiler.myexception Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.myexception -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myexception/package-use.html b/doc/Javadoc/mycompiler/myexception/package-use.html deleted file mode 100755 index a14a5739..00000000 --- a/doc/Javadoc/mycompiler/myexception/package-use.html +++ /dev/null @@ -1,397 +0,0 @@ - - - - - - -Uses of Package mycompiler.myexception - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.myexception

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use mycompiler.myexception
mycompiler  
mycompiler.mybytecode  
mycompiler.myclass  
mycompiler.myexception  
mycompiler.myoperator  
mycompiler.mystatement  
mycompiler.mytype  
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.set  
mycompiler.mytypereconstruction.unify  
-  -

- - - - - - - - - - - -
-Classes in mycompiler.myexception used by mycompiler
CTypeReconstructionException - -
-           
SCException - -
-           
-  -

- - - - - - - - -
-Classes in mycompiler.myexception used by mycompiler.mybytecode
JVMCodeException - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - -
-Classes in mycompiler.myexception used by mycompiler.myclass
CTypeReconstructionException - -
-           
JVMCodeException - -
-           
SCClassBodyException - -
-           
SCClassException - -
-           
SCMethodException - -
-           
-  -

- - - - - - - - - - - - - - -
-Classes in mycompiler.myexception used by mycompiler.myexception
CTypeReconstructionException - -
-           
SCClassException - -
-           
SCExcept - -
-           
-  -

- - - - - - - - -
-Classes in mycompiler.myexception used by mycompiler.myoperator
JVMCodeException - -
-           
-  -

- - - - - - - - - - - - - - -
-Classes in mycompiler.myexception used by mycompiler.mystatement
CTypeReconstructionException - -
-           
JVMCodeException - -
-           
SCStatementException - -
-           
-  -

- - - - - - - - -
-Classes in mycompiler.myexception used by mycompiler.mytype
SCException - -
-           
-  -

- - - - - - - - -
-Classes in mycompiler.myexception used by mycompiler.mytypereconstruction
CTypeReconstructionException - -
-           
-  -

- - - - - - - - -
-Classes in mycompiler.myexception used by mycompiler.mytypereconstruction.set
CTypeReconstructionException - -
-           
-  -

- - - - - - - - - - - -
-Classes in mycompiler.myexception used by mycompiler.mytypereconstruction.unify
MatchException - -
-           
SCException - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/Abstract.html b/doc/Javadoc/mycompiler/mymodifier/Abstract.html deleted file mode 100755 index cd807254..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/Abstract.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - -Abstract - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mymodifier -
-Class Abstract

-
-java.lang.Object
-  extended by mycompiler.mymodifier.Modifier
-      extended by mycompiler.mymodifier.Abstract
-
-
-
-
public class Abstract
extends Modifier
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Abstract() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Abstract

-
-public Abstract()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/Modifier.html b/doc/Javadoc/mycompiler/mymodifier/Modifier.html deleted file mode 100755 index 0c56a1fa..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/Modifier.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - -Modifier - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mymodifier -
-Class Modifier

-
-java.lang.Object
-  extended by mycompiler.mymodifier.Modifier
-
-
-
Direct Known Subclasses:
Abstract, Private, Protected, Public, Static
-
-
-
-
public abstract class Modifier
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Modifier() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Modifier

-
-public Modifier()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/Modifiers.html b/doc/Javadoc/mycompiler/mymodifier/Modifiers.html deleted file mode 100755 index 2ee0088e..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/Modifiers.html +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - -Modifiers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mymodifier -
-Class Modifiers

-
-java.lang.Object
-  extended by mycompiler.mymodifier.Modifiers
-
-
-
-
public class Modifiers
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
- de.dhbwstuttgart.typeinference.Mengemodifier - -
-           
-  - - - - - - - - - - -
-Constructor Summary
Modifiers() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- shortcalculate_access_flags() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_modifiers() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-modifier

-
-public de.dhbwstuttgart.typeinference.Menge modifier
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-Modifiers

-
-public Modifiers()
-
-
- - - - - - - - -
-Method Detail
- -

-get_modifiers

-
-public de.dhbwstuttgart.typeinference.Menge get_modifiers()
-
-
-
-
-
-
- -

-calculate_access_flags

-
-public short calculate_access_flags()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/Private.html b/doc/Javadoc/mycompiler/mymodifier/Private.html deleted file mode 100755 index 4a2c24c1..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/Private.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - -Private - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mymodifier -
-Class Private

-
-java.lang.Object
-  extended by mycompiler.mymodifier.Modifier
-      extended by mycompiler.mymodifier.Private
-
-
-
-
public class Private
extends Modifier
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Private() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Private

-
-public Private()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/Protected.html b/doc/Javadoc/mycompiler/mymodifier/Protected.html deleted file mode 100755 index e61dd07e..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/Protected.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - -Protected - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mymodifier -
-Class Protected

-
-java.lang.Object
-  extended by mycompiler.mymodifier.Modifier
-      extended by mycompiler.mymodifier.Protected
-
-
-
-
public class Protected
extends Modifier
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Protected() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Protected

-
-public Protected()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/Public.html b/doc/Javadoc/mycompiler/mymodifier/Public.html deleted file mode 100755 index a43fd7bf..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/Public.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - -Public - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mymodifier -
-Class Public

-
-java.lang.Object
-  extended by mycompiler.mymodifier.Modifier
-      extended by mycompiler.mymodifier.Public
-
-
-
-
public class Public
extends Modifier
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Public() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Public

-
-public Public()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/Static.html b/doc/Javadoc/mycompiler/mymodifier/Static.html deleted file mode 100755 index db63cef1..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/Static.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - -Static - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mymodifier -
-Class Static

-
-java.lang.Object
-  extended by mycompiler.mymodifier.Modifier
-      extended by mycompiler.mymodifier.Static
-
-
-
-
public class Static
extends Modifier
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Static() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Static

-
-public Static()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/class-use/Abstract.html b/doc/Javadoc/mycompiler/mymodifier/class-use/Abstract.html deleted file mode 100755 index 1a13cb64..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/class-use/Abstract.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mymodifier.Abstract - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mymodifier.Abstract

-
-No usage of mycompiler.mymodifier.Abstract -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/class-use/Modifier.html b/doc/Javadoc/mycompiler/mymodifier/class-use/Modifier.html deleted file mode 100755 index 114e1be6..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/class-use/Modifier.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - -Uses of Class mycompiler.mymodifier.Modifier - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mymodifier.Modifier

-
- - - - - - - - - -
-Packages that use Modifier
mycompiler.mymodifier  
-  -

- - - - - -
-Uses of Modifier in mycompiler.mymodifier
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Subclasses of Modifier in mycompiler.mymodifier
- classAbstract - -
-           
- classPrivate - -
-           
- classProtected - -
-           
- classPublic - -
-           
- classStatic - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/class-use/Modifiers.html b/doc/Javadoc/mycompiler/mymodifier/class-use/Modifiers.html deleted file mode 100755 index fdbd5fc9..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/class-use/Modifiers.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - -Uses of Class mycompiler.mymodifier.Modifiers - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mymodifier.Modifiers

-
- - - - - - - - - -
-Packages that use Modifiers
mycompiler.myclass  
-  -

- - - - - -
-Uses of Modifiers in mycompiler.myclass
-  -

- - - - - - - - - -
Fields in mycompiler.myclass declared as Modifiers
- ModifiersDeclId.modifiers - -
-           
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.myclass that return Modifiers
- ModifiersDeclId.get_Modifiers() - -
-           
- ModifiersClassDeclId.get_Modifiers() - -
-           
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler.myclass with parameters of type Modifiers
- voidMethod.set_Modifiers(Modifiers modif) - -
-           
- voidDeclId.set_Modifiers(Modifiers mod) - -
-           
- voidClassDeclId.set_Modifiers(Modifiers mod) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/class-use/Private.html b/doc/Javadoc/mycompiler/mymodifier/class-use/Private.html deleted file mode 100755 index c6677224..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/class-use/Private.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mymodifier.Private - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mymodifier.Private

-
-No usage of mycompiler.mymodifier.Private -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/class-use/Protected.html b/doc/Javadoc/mycompiler/mymodifier/class-use/Protected.html deleted file mode 100755 index b7c8516c..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/class-use/Protected.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mymodifier.Protected - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mymodifier.Protected

-
-No usage of mycompiler.mymodifier.Protected -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/class-use/Public.html b/doc/Javadoc/mycompiler/mymodifier/class-use/Public.html deleted file mode 100755 index e7e2f336..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/class-use/Public.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mymodifier.Public - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mymodifier.Public

-
-No usage of mycompiler.mymodifier.Public -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/class-use/Static.html b/doc/Javadoc/mycompiler/mymodifier/class-use/Static.html deleted file mode 100755 index 5c8fa2c9..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/class-use/Static.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mymodifier.Static - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mymodifier.Static

-
-No usage of mycompiler.mymodifier.Static -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/package-frame.html b/doc/Javadoc/mycompiler/mymodifier/package-frame.html deleted file mode 100755 index 522f7423..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/package-frame.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - -mycompiler.mymodifier - - - - - - - - - - - -mycompiler.mymodifier - - - - -
-Classes  - -
-Abstract -
-Modifier -
-Modifiers -
-Private -
-Protected -
-Public -
-Static
- - - - diff --git a/doc/Javadoc/mycompiler/mymodifier/package-summary.html b/doc/Javadoc/mycompiler/mymodifier/package-summary.html deleted file mode 100755 index cd8eb153..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/package-summary.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - -mycompiler.mymodifier - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.mymodifier -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
Abstract 
Modifier 
Modifiers 
Private 
Protected 
Public 
Static 
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/package-tree.html b/doc/Javadoc/mycompiler/mymodifier/package-tree.html deleted file mode 100755 index 2408ef6a..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/package-tree.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - -mycompiler.mymodifier Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.mymodifier -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mymodifier/package-use.html b/doc/Javadoc/mycompiler/mymodifier/package-use.html deleted file mode 100755 index 09231d9d..00000000 --- a/doc/Javadoc/mycompiler/mymodifier/package-use.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - -Uses of Package mycompiler.mymodifier - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.mymodifier

-
- - - - - - - - - - - - - -
-Packages that use mycompiler.mymodifier
mycompiler.myclass  
mycompiler.mymodifier  
-  -

- - - - - - - - -
-Classes in mycompiler.mymodifier used by mycompiler.myclass
Modifiers - -
-           
-  -

- - - - - - - - -
-Classes in mycompiler.mymodifier used by mycompiler.mymodifier
Modifier - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/AddOp.html b/doc/Javadoc/mycompiler/myoperator/AddOp.html deleted file mode 100755 index 2225e776..00000000 --- a/doc/Javadoc/mycompiler/myoperator/AddOp.html +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - -AddOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class AddOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.AddOp
-
-
-
Direct Known Subclasses:
MinusOp, PlusOp
-
-
-
-
public abstract class AddOp
extends Operator
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
AddOp() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-abstract  voidcodegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- CTripleSetTRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.44 und 5.45 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-AddOp

-
-public AddOp()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public abstract void codegen(ClassFile classfile,
-                             CodeAttribute code,
-                             Expr expr,
-                             boolean neg,
-                             de.dhbwstuttgart.typeinference.Menge paralist)
-                      throws JVMCodeException
-
-
-
Specified by:
codegen in class Operator
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(Binary binary,
-                        CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung der Algorithmen 5.44 und 5.45 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Operator
-
-
-
Parameters:
binary -
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/AndOp.html b/doc/Javadoc/mycompiler/myoperator/AndOp.html deleted file mode 100755 index 80f5f63b..00000000 --- a/doc/Javadoc/mycompiler/myoperator/AndOp.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - -AndOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class AndOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.LogOp
-          extended by mycompiler.myoperator.AndOp
-
-
-
-
public class AndOp
extends LogOp
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
AndOp() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class mycompiler.myoperator.LogOp
build, codegen, if_codegen, loop_codegen, replace_index, TRExp
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-AndOp

-
-public AndOp()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/DivideOp.html b/doc/Javadoc/mycompiler/myoperator/DivideOp.html deleted file mode 100755 index cbd691eb..00000000 --- a/doc/Javadoc/mycompiler/myoperator/DivideOp.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -DivideOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class DivideOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.MulOp
-          extended by mycompiler.myoperator.DivideOp
-
-
-
-
public class DivideOp
extends MulOp
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
DivideOp() - -
-           
-  - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.myoperator.MulOp
TRExp
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-DivideOp

-
-public DivideOp()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    Expr expr,
-                    boolean neg,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Operator
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/EqualOp.html b/doc/Javadoc/mycompiler/myoperator/EqualOp.html deleted file mode 100755 index 2520c19c..00000000 --- a/doc/Javadoc/mycompiler/myoperator/EqualOp.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - -EqualOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class EqualOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.RelOp
-          extended by mycompiler.myoperator.EqualOp
-
-
-
-
public class EqualOp
extends RelOp
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
EqualOp() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidif_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- CTripleSetTRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.53 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-EqualOp

-
-public EqualOp()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    Expr expr,
-                    boolean not,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Operator
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-if_codegen

-
-public void if_codegen(ClassFile classfile,
-                       CodeAttribute code,
-                       java.lang.String type,
-                       boolean not)
-                throws JVMCodeException
-
-
-
Specified by:
if_codegen in class RelOp
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(Binary binary,
-                        CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung des Algorithmus 5.53 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! -
Author: J�rg B�uerle -

-

-
Overrides:
TRExp in class RelOp
-
-
-
Parameters:
binary -
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/GreaterEquOp.html b/doc/Javadoc/mycompiler/myoperator/GreaterEquOp.html deleted file mode 100755 index e0d55bed..00000000 --- a/doc/Javadoc/mycompiler/myoperator/GreaterEquOp.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - -GreaterEquOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class GreaterEquOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.RelOp
-          extended by mycompiler.myoperator.GreaterEquOp
-
-
-
-
public class GreaterEquOp
extends RelOp
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
GreaterEquOp() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidif_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.myoperator.RelOp
TRExp
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-GreaterEquOp

-
-public GreaterEquOp()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    Expr expr,
-                    boolean not,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Operator
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-if_codegen

-
-public void if_codegen(ClassFile classfile,
-                       CodeAttribute code,
-                       java.lang.String type,
-                       boolean not)
-                throws JVMCodeException
-
-
-
Specified by:
if_codegen in class RelOp
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/GreaterOp.html b/doc/Javadoc/mycompiler/myoperator/GreaterOp.html deleted file mode 100755 index b3a77108..00000000 --- a/doc/Javadoc/mycompiler/myoperator/GreaterOp.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - -GreaterOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class GreaterOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.RelOp
-          extended by mycompiler.myoperator.GreaterOp
-
-
-
-
public class GreaterOp
extends RelOp
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
GreaterOp() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidif_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.myoperator.RelOp
TRExp
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-GreaterOp

-
-public GreaterOp()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    Expr expr,
-                    boolean not,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Operator
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-if_codegen

-
-public void if_codegen(ClassFile classfile,
-                       CodeAttribute code,
-                       java.lang.String type,
-                       boolean not)
-                throws JVMCodeException
-
-
-
Specified by:
if_codegen in class RelOp
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/LessEquOp.html b/doc/Javadoc/mycompiler/myoperator/LessEquOp.html deleted file mode 100755 index f3b2dac9..00000000 --- a/doc/Javadoc/mycompiler/myoperator/LessEquOp.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - -LessEquOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class LessEquOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.RelOp
-          extended by mycompiler.myoperator.LessEquOp
-
-
-
-
public class LessEquOp
extends RelOp
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
LessEquOp() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidif_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.myoperator.RelOp
TRExp
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-LessEquOp

-
-public LessEquOp()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    Expr expr,
-                    boolean not,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Operator
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-if_codegen

-
-public void if_codegen(ClassFile classfile,
-                       CodeAttribute code,
-                       java.lang.String type,
-                       boolean not)
-                throws JVMCodeException
-
-
-
Specified by:
if_codegen in class RelOp
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/LessOp.html b/doc/Javadoc/mycompiler/myoperator/LessOp.html deleted file mode 100755 index 1eba811b..00000000 --- a/doc/Javadoc/mycompiler/myoperator/LessOp.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - -LessOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class LessOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.RelOp
-          extended by mycompiler.myoperator.LessOp
-
-
-
-
public class LessOp
extends RelOp
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
LessOp() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidif_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.myoperator.RelOp
TRExp
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-LessOp

-
-public LessOp()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    Expr expr,
-                    boolean not,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Operator
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-if_codegen

-
-public void if_codegen(ClassFile classfile,
-                       CodeAttribute code,
-                       java.lang.String type,
-                       boolean not)
-                throws JVMCodeException
-
-
-
Specified by:
if_codegen in class RelOp
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/LogOp.html b/doc/Javadoc/mycompiler/myoperator/LogOp.html deleted file mode 100755 index c6fab74d..00000000 --- a/doc/Javadoc/mycompiler/myoperator/LogOp.html +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - -LogOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class LogOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.LogOp
-
-
-
Direct Known Subclasses:
AndOp, OrOp
-
-
-
-
public abstract class LogOp
extends Operator
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
LogOp() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
-static voidbuild(ClassFile classfile, - CodeAttribute code, - Expr expr, - de.dhbwstuttgart.typeinference.Menge indices, - boolean not, - boolean ex2, - boolean and, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidcodegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidif_codegen(ClassFile classfile, - CodeAttribute code, - boolean not, - Expr expr, - Statement then_block, - Statement else_block, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidloop_codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - int breakpoint, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-static voidreplace_index(CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge indices, - int else_index, - int then_index) - -
-           
- CTripleSetTRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-LogOp

-
-public LogOp()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    Expr expr,
-                    boolean not,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Operator
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-if_codegen

-
-public void if_codegen(ClassFile classfile,
-                       CodeAttribute code,
-                       boolean not,
-                       Expr expr,
-                       Statement then_block,
-                       Statement else_block,
-                       de.dhbwstuttgart.typeinference.Menge paralist)
-                throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-loop_codegen

-
-public void loop_codegen(ClassFile classfile,
-                         CodeAttribute code,
-                         Expr expr,
-                         int breakpoint,
-                         boolean not,
-                         de.dhbwstuttgart.typeinference.Menge paralist)
-                  throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-build

-
-public static void build(ClassFile classfile,
-                         CodeAttribute code,
-                         Expr expr,
-                         de.dhbwstuttgart.typeinference.Menge indices,
-                         boolean not,
-                         boolean ex2,
-                         boolean and,
-                         de.dhbwstuttgart.typeinference.Menge paralist)
-                  throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-replace_index

-
-public static void replace_index(CodeAttribute code,
-                                 de.dhbwstuttgart.typeinference.Menge indices,
-                                 int else_index,
-                                 int then_index)
-                          throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(Binary binary,
-                        CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-

Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Operator
-
-
-
Parameters:
binary -
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/MinusOp.html b/doc/Javadoc/mycompiler/myoperator/MinusOp.html deleted file mode 100755 index 51c0f86e..00000000 --- a/doc/Javadoc/mycompiler/myoperator/MinusOp.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -MinusOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class MinusOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.AddOp
-          extended by mycompiler.myoperator.MinusOp
-
-
-
-
public class MinusOp
extends AddOp
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
MinusOp() - -
-           
-  - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.myoperator.AddOp
TRExp
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-MinusOp

-
-public MinusOp()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    Expr expr,
-                    boolean neg,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class AddOp
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/ModuloOp.html b/doc/Javadoc/mycompiler/myoperator/ModuloOp.html deleted file mode 100755 index 17d425d2..00000000 --- a/doc/Javadoc/mycompiler/myoperator/ModuloOp.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -ModuloOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class ModuloOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.MulOp
-          extended by mycompiler.myoperator.ModuloOp
-
-
-
-
public class ModuloOp
extends MulOp
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
ModuloOp() - -
-           
-  - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.myoperator.MulOp
TRExp
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-ModuloOp

-
-public ModuloOp()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    Expr expr,
-                    boolean neg,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Operator
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/MulOp.html b/doc/Javadoc/mycompiler/myoperator/MulOp.html deleted file mode 100755 index 95f8a9e9..00000000 --- a/doc/Javadoc/mycompiler/myoperator/MulOp.html +++ /dev/null @@ -1,279 +0,0 @@ - - - - - - -MulOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class MulOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.MulOp
-
-
-
Direct Known Subclasses:
DivideOp, ModuloOp, TimesOp
-
-
-
-
public abstract class MulOp
extends Operator
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
MulOp() - -
-           
-  - - - - - - - - - - - -
-Method Summary
- CTripleSetTRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
- - - - - - - -
Methods inherited from class mycompiler.myoperator.Operator
codegen
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-MulOp

-
-public MulOp()
-
-
- - - - - - - - -
-Method Detail
- -

-TRExp

-
-public CTripleSet TRExp(Binary binary,
-                        CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Operator
-
-
-
Parameters:
binary -
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/NotEqualOp.html b/doc/Javadoc/mycompiler/myoperator/NotEqualOp.html deleted file mode 100755 index 99b23df1..00000000 --- a/doc/Javadoc/mycompiler/myoperator/NotEqualOp.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - -NotEqualOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class NotEqualOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.RelOp
-          extended by mycompiler.myoperator.NotEqualOp
-
-
-
-
public class NotEqualOp
extends RelOp
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
NotEqualOp() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidif_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- CTripleSetTRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.54 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-NotEqualOp

-
-public NotEqualOp()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    Expr expr,
-                    boolean not,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Operator
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-if_codegen

-
-public void if_codegen(ClassFile classfile,
-                       CodeAttribute code,
-                       java.lang.String type,
-                       boolean not)
-                throws JVMCodeException
-
-
-
Specified by:
if_codegen in class RelOp
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(Binary binary,
-                        CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung des Algorithmus 5.54 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! -
Author: J�rg B�uerle -

-

-
Overrides:
TRExp in class RelOp
-
-
-
Parameters:
binary -
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/Operator.html b/doc/Javadoc/mycompiler/myoperator/Operator.html deleted file mode 100755 index 8f7e0655..00000000 --- a/doc/Javadoc/mycompiler/myoperator/Operator.html +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - -Operator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class Operator

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-
-
-
Direct Known Subclasses:
AddOp, LogOp, MulOp, RelOp
-
-
-
-
public abstract class Operator
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Operator() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-abstract  voidcodegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg_not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  CTripleSetTRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Operator

-
-public Operator()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public abstract void codegen(ClassFile classfile,
-                             CodeAttribute code,
-                             Expr expr,
-                             boolean neg_not,
-                             de.dhbwstuttgart.typeinference.Menge paralist)
-                      throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public abstract CTripleSet TRExp(Binary binary,
-                                 CSubstitutionSet sigma,
-                                 CTypeAssumptionSet V,
-                                 CSupportData supportData)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/OrOp.html b/doc/Javadoc/mycompiler/myoperator/OrOp.html deleted file mode 100755 index 7c0516a2..00000000 --- a/doc/Javadoc/mycompiler/myoperator/OrOp.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - -OrOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class OrOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.LogOp
-          extended by mycompiler.myoperator.OrOp
-
-
-
-
public class OrOp
extends LogOp
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
OrOp() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class mycompiler.myoperator.LogOp
build, codegen, if_codegen, loop_codegen, replace_index, TRExp
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-OrOp

-
-public OrOp()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/PlusOp.html b/doc/Javadoc/mycompiler/myoperator/PlusOp.html deleted file mode 100755 index 4eb4f0b1..00000000 --- a/doc/Javadoc/mycompiler/myoperator/PlusOp.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -PlusOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class PlusOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.AddOp
-          extended by mycompiler.myoperator.PlusOp
-
-
-
-
public class PlusOp
extends AddOp
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
PlusOp() - -
-           
-  - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.myoperator.AddOp
TRExp
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-PlusOp

-
-public PlusOp()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    Expr expr,
-                    boolean neg,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class AddOp
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/RelOp.html b/doc/Javadoc/mycompiler/myoperator/RelOp.html deleted file mode 100755 index b5ea1ec3..00000000 --- a/doc/Javadoc/mycompiler/myoperator/RelOp.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - -RelOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class RelOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.RelOp
-
-
-
Direct Known Subclasses:
EqualOp, GreaterEquOp, GreaterOp, LessEquOp, LessOp, NotEqualOp
-
-
-
-
public abstract class RelOp
extends Operator
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
RelOp() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-abstract  voidif_codegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean not) - -
-           
- CTripleSetTRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.49 bis 5.52 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
- - - - - - - -
Methods inherited from class mycompiler.myoperator.Operator
codegen
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-RelOp

-
-public RelOp()
-
-
- - - - - - - - -
-Method Detail
- -

-if_codegen

-
-public abstract void if_codegen(ClassFile classfile,
-                                CodeAttribute code,
-                                java.lang.String type,
-                                boolean not)
-                         throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(Binary binary,
-                        CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung der Algorithmen 5.49 bis 5.52 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Operator
-
-
-
Parameters:
binary -
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/TimesOp.html b/doc/Javadoc/mycompiler/myoperator/TimesOp.html deleted file mode 100755 index 6f2a0996..00000000 --- a/doc/Javadoc/mycompiler/myoperator/TimesOp.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -TimesOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myoperator -
-Class TimesOp

-
-java.lang.Object
-  extended by mycompiler.myoperator.Operator
-      extended by mycompiler.myoperator.MulOp
-          extended by mycompiler.myoperator.TimesOp
-
-
-
-
public class TimesOp
extends MulOp
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
TimesOp() - -
-           
-  - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.myoperator.MulOp
TRExp
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-TimesOp

-
-public TimesOp()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    Expr expr,
-                    boolean neg,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Operator
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/AddOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/AddOp.html deleted file mode 100755 index a79df567..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/AddOp.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.AddOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.AddOp

-
- - - - - - - - - -
-Packages that use AddOp
mycompiler.myoperator  
-  -

- - - - - -
-Uses of AddOp in mycompiler.myoperator
-  -

- - - - - - - - - - - - - -
Subclasses of AddOp in mycompiler.myoperator
- classMinusOp - -
-           
- classPlusOp - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/AndOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/AndOp.html deleted file mode 100755 index dc1218eb..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/AndOp.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.AndOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.AndOp

-
-No usage of mycompiler.myoperator.AndOp -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/DivideOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/DivideOp.html deleted file mode 100755 index 08efb418..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/DivideOp.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.DivideOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.DivideOp

-
-No usage of mycompiler.myoperator.DivideOp -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/EqualOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/EqualOp.html deleted file mode 100755 index f145a804..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/EqualOp.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.EqualOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.EqualOp

-
-No usage of mycompiler.myoperator.EqualOp -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/GreaterEquOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/GreaterEquOp.html deleted file mode 100755 index 03d32c52..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/GreaterEquOp.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.GreaterEquOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.GreaterEquOp

-
-No usage of mycompiler.myoperator.GreaterEquOp -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/GreaterOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/GreaterOp.html deleted file mode 100755 index 3dd53bf9..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/GreaterOp.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.GreaterOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.GreaterOp

-
-No usage of mycompiler.myoperator.GreaterOp -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/LessEquOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/LessEquOp.html deleted file mode 100755 index 817aa1dc..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/LessEquOp.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.LessEquOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.LessEquOp

-
-No usage of mycompiler.myoperator.LessEquOp -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/LessOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/LessOp.html deleted file mode 100755 index 630f88f9..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/LessOp.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.LessOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.LessOp

-
-No usage of mycompiler.myoperator.LessOp -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/LogOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/LogOp.html deleted file mode 100755 index ab5c8ff8..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/LogOp.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.LogOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.LogOp

-
- - - - - - - - - -
-Packages that use LogOp
mycompiler.myoperator  
-  -

- - - - - -
-Uses of LogOp in mycompiler.myoperator
-  -

- - - - - - - - - - - - - -
Subclasses of LogOp in mycompiler.myoperator
- classAndOp - -
-           
- classOrOp - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/MinusOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/MinusOp.html deleted file mode 100755 index 3de6b4dc..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/MinusOp.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.MinusOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.MinusOp

-
-No usage of mycompiler.myoperator.MinusOp -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/ModuloOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/ModuloOp.html deleted file mode 100755 index 769e22dd..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/ModuloOp.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.ModuloOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.ModuloOp

-
-No usage of mycompiler.myoperator.ModuloOp -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/MulOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/MulOp.html deleted file mode 100755 index 793b4453..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/MulOp.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.MulOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.MulOp

-
- - - - - - - - - -
-Packages that use MulOp
mycompiler.myoperator  
-  -

- - - - - -
-Uses of MulOp in mycompiler.myoperator
-  -

- - - - - - - - - - - - - - - - - -
Subclasses of MulOp in mycompiler.myoperator
- classDivideOp - -
-           
- classModuloOp - -
-           
- classTimesOp - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/NotEqualOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/NotEqualOp.html deleted file mode 100755 index b99bd09a..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/NotEqualOp.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.NotEqualOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.NotEqualOp

-
-No usage of mycompiler.myoperator.NotEqualOp -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/Operator.html b/doc/Javadoc/mycompiler/myoperator/class-use/Operator.html deleted file mode 100755 index 61f6e42c..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/Operator.html +++ /dev/null @@ -1,365 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.Operator - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.Operator

-
- - - - - - - - - - - - - -
-Packages that use Operator
mycompiler.myoperator  
mycompiler.mystatement  
-  -

- - - - - -
-Uses of Operator in mycompiler.myoperator
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subclasses of Operator in mycompiler.myoperator
- classAddOp - -
-           
- classAndOp - -
-           
- classDivideOp - -
-           
- classEqualOp - -
-           
- classGreaterEquOp - -
-           
- classGreaterOp - -
-           
- classLessEquOp - -
-           
- classLessOp - -
-           
- classLogOp - -
-           
- classMinusOp - -
-           
- classModuloOp - -
-           
- classMulOp - -
-           
- classNotEqualOp - -
-           
- classOrOp - -
-           
- classPlusOp - -
-           
- classRelOp - -
-           
- classTimesOp - -
-           
-  -

- - - - - -
-Uses of Operator in mycompiler.mystatement
-  -

- - - - - - - - - -
Fields in mycompiler.mystatement declared as Operator
- OperatorBinary.op - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mystatement that return Operator
- OperatorBinary.get_Operator() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type Operator
- voidBinary.set_Operator(Operator Op) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/OrOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/OrOp.html deleted file mode 100755 index 4eb38322..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/OrOp.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.OrOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.OrOp

-
-No usage of mycompiler.myoperator.OrOp -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/PlusOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/PlusOp.html deleted file mode 100755 index e43a3927..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/PlusOp.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.PlusOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.PlusOp

-
-No usage of mycompiler.myoperator.PlusOp -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/RelOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/RelOp.html deleted file mode 100755 index 6ec65d79..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/RelOp.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.RelOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.RelOp

-
- - - - - - - - - -
-Packages that use RelOp
mycompiler.myoperator  
-  -

- - - - - -
-Uses of RelOp in mycompiler.myoperator
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subclasses of RelOp in mycompiler.myoperator
- classEqualOp - -
-           
- classGreaterEquOp - -
-           
- classGreaterOp - -
-           
- classLessEquOp - -
-           
- classLessOp - -
-           
- classNotEqualOp - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/class-use/TimesOp.html b/doc/Javadoc/mycompiler/myoperator/class-use/TimesOp.html deleted file mode 100755 index f917555a..00000000 --- a/doc/Javadoc/mycompiler/myoperator/class-use/TimesOp.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myoperator.TimesOp - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myoperator.TimesOp

-
-No usage of mycompiler.myoperator.TimesOp -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/package-frame.html b/doc/Javadoc/mycompiler/myoperator/package-frame.html deleted file mode 100755 index 322a4b95..00000000 --- a/doc/Javadoc/mycompiler/myoperator/package-frame.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - -mycompiler.myoperator - - - - - - - - - - - -mycompiler.myoperator - - - - -
-Classes  - -
-AddOp -
-AndOp -
-DivideOp -
-EqualOp -
-GreaterEquOp -
-GreaterOp -
-LessEquOp -
-LessOp -
-LogOp -
-MinusOp -
-ModuloOp -
-MulOp -
-NotEqualOp -
-Operator -
-OrOp -
-PlusOp -
-RelOp -
-TimesOp
- - - - diff --git a/doc/Javadoc/mycompiler/myoperator/package-summary.html b/doc/Javadoc/mycompiler/myoperator/package-summary.html deleted file mode 100755 index 4a73aaa2..00000000 --- a/doc/Javadoc/mycompiler/myoperator/package-summary.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - -mycompiler.myoperator - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.myoperator -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
AddOp 
AndOp 
DivideOp 
EqualOp 
GreaterEquOp 
GreaterOp 
LessEquOp 
LessOp 
LogOp 
MinusOp 
ModuloOp 
MulOp 
NotEqualOp 
Operator 
OrOp 
PlusOp 
RelOp 
TimesOp 
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/package-tree.html b/doc/Javadoc/mycompiler/myoperator/package-tree.html deleted file mode 100755 index 2ed05219..00000000 --- a/doc/Javadoc/mycompiler/myoperator/package-tree.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -mycompiler.myoperator Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.myoperator -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myoperator/package-use.html b/doc/Javadoc/mycompiler/myoperator/package-use.html deleted file mode 100755 index d8508029..00000000 --- a/doc/Javadoc/mycompiler/myoperator/package-use.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - -Uses of Package mycompiler.myoperator - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.myoperator

-
- - - - - - - - - - - - - -
-Packages that use mycompiler.myoperator
mycompiler.myoperator  
mycompiler.mystatement  
-  -

- - - - - - - - - - - - - - - - - - - - -
-Classes in mycompiler.myoperator used by mycompiler.myoperator
AddOp - -
-           
LogOp - -
-           
MulOp - -
-           
Operator - -
-           
RelOp - -
-           
-  -

- - - - - - - - -
-Classes in mycompiler.myoperator used by mycompiler.mystatement
Operator - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/JavaLexer.html b/doc/Javadoc/mycompiler/myparser/JavaLexer.html deleted file mode 100755 index 9ba818d0..00000000 --- a/doc/Javadoc/mycompiler/myparser/JavaLexer.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - -JavaLexer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myparser -
-Class JavaLexer

-
-java.lang.Object
-  extended by mycompiler.myparser.JavaLexer
-
-
-
Direct Known Subclasses:
Scanner
-
-
-
-
public class JavaLexer
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - - - - -
-Constructor Summary
JavaLexer(java.io.InputStream instream) - -
-           
JavaLexer(java.io.Reader reader) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanyylex() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-JavaLexer

-
-public JavaLexer(java.io.Reader reader)
-
-
-
- -

-JavaLexer

-
-public JavaLexer(java.io.InputStream instream)
-
-
- - - - - - - - -
-Method Detail
- -

-yylex

-
-public boolean yylex()
-              throws java.io.IOException
-
-
- -
Throws: -
java.io.IOException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/JavaParser.html b/doc/Javadoc/mycompiler/myparser/JavaParser.html deleted file mode 100755 index a5c61812..00000000 --- a/doc/Javadoc/mycompiler/myparser/JavaParser.html +++ /dev/null @@ -1,1836 +0,0 @@ - - - - - - -JavaParser - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myparser -
-Class JavaParser

-
-java.lang.Object
-  extended by mycompiler.myparser.JavaParser
-
-
-
Direct Known Subclasses:
JavaCompiler
-
-
-
-
public class JavaParser
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - - - - - -
-Nested Class Summary
-static classJavaParser.yyException - -
-          thrown for irrecoverable syntax errors and stack overflow.
-static interfaceJavaParser.yyInput - -
-          must be implemented by a scanner object to supply input to the parser.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Field Summary
-static intABSTRACT - -
-           
-static intANDEQUAL - -
-           
-static intBOOLEAN - -
-           
-static intBOOLLITERAL - -
-           
-static intBRACE - -
-           
-static intBREAK - -
-           
-static intCASE - -
-           
-static intCATCH - -
-           
-static intCHAR - -
-           
-static intCHARLITERAL - -
-           
-static intCLASS - -
-           
-static intCONTINUE - -
-           
-static intDECREMENT - -
-           
-static intDEFAULT - -
-           
-static intDIVIDEEQUAL - -
-           
-static intDO - -
-           
-static intELSE - -
-           
-static intEOF - -
-           
-static intEQUAL - -
-           
-static intEXTENDS - -
-           
-static intFINALLY - -
-           
-static intFOR - -
-           
-static intGREATEREQUAL - -
-           
-static intIDENTIFIER - -
-           
-static intIF - -
-           
-static intINCREMENT - -
-           
-static intINSTANCEOF - -
-           
-static intINT - -
-           
-static intINTLITERAL - -
-           
-static intJNULL - -
-           
-static intLESSEQUAL - -
-           
-static intLOGICALAND - -
-           
-static intLOGICALOR - -
-           
-static intMINUSEQUAL - -
-           
-static intMODULOEQUAL - -
-           
-static intNEW - -
-           
-static intNOTEQUAL - -
-           
-static intOP - -
-           
-static intOREQUAL - -
-           
- de.dhbwstuttgart.typeinference.Mengepath - -
-           
-static intPLUSEQUAL - -
-           
-static intPRIVATE - -
-           
-static intPROTECTED - -
-           
-static intPUBLIC - -
-           
-static intRELOP - -
-           
-static intRETURN - -
-           
-static intSHIFTLEFT - -
-           
-static intSHIFTLEFTEQUAL - -
-           
-static intSHIFTRIGHT - -
-           
-static intSIGNEDSHIFTRIGHT - -
-           
-static intSIGNEDSHIFTRIGHTEQUAL - -
-           
-static intSTATIC - -
-           
-static intSTRINGLITERAL - -
-           
-static intSUPER - -
-           
-static intSWITCH - -
-           
-static intTHIS - -
-           
-static intTHROW - -
-           
-static intTHROWS - -
-           
-static intTIMESEQUAL - -
-           
-static intTRY - -
-           
-static intUNSIGNEDSHIFTRIGHT - -
-           
-static intUNSIGNEDSHIFTRIGHTEQUAL - -
-           
-static intVOID - -
-           
-static intWHILE - -
-           
-static intXOREQUAL - -
-           
-protected  short[]yyCheck - -
-           
-protected static short[]yyDefRed - -
-           
-protected static short[]yyDgoto - -
-           
-static intyyErrorCode - -
-           
-protected static intyyFinal - -
-          debugging support, requires the package jay.yydebug.
-protected static short[]yyGindex - -
-           
-protected static short[]yyLen - -
-           
-protected static short[]yyLhs - -
-           
-protected  intyyMax - -
-          initial size and increment of the state/value stack [default 256].
-protected static java.lang.String[]yyName - -
-           
-protected static short[]yyRindex - -
-           
-protected static short[]yySindex - -
-           
-protected static short[]yyTable - -
-           
-  - - - - - - - - - - -
-Constructor Summary
JavaParser() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
-protected  java.lang.ObjectyyDefault(java.lang.Object first) - -
-          executed at the beginning of a reduce action.
- voidyyerror(java.lang.String message) - -
-          simplified error message.
- voidyyerror(java.lang.String message, - java.lang.String[] expected) - -
-          (syntax) error message.
-protected  java.lang.String[]yyExpecting(int state) - -
-          computes list of expected tokens on error by tracing the tables.
- java.lang.Objectyyparse(JavaParser.yyInput yyLex) - -
-          the generated parser.
- java.lang.Objectyyparse(JavaParser.yyInput yyLex, - java.lang.Object yydebug) - -
-          the generated parser, with debugging messages.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-path

-
-public de.dhbwstuttgart.typeinference.Menge path
-
-
-
-
-
- -

-ABSTRACT

-
-public static final int ABSTRACT
-
-
-
See Also:
Constant Field Values
-
-
- -

-BOOLEAN

-
-public static final int BOOLEAN
-
-
-
See Also:
Constant Field Values
-
-
- -

-BREAK

-
-public static final int BREAK
-
-
-
See Also:
Constant Field Values
-
-
- -

-CASE

-
-public static final int CASE
-
-
-
See Also:
Constant Field Values
-
-
- -

-CATCH

-
-public static final int CATCH
-
-
-
See Also:
Constant Field Values
-
-
- -

-CHAR

-
-public static final int CHAR
-
-
-
See Also:
Constant Field Values
-
-
- -

-CLASS

-
-public static final int CLASS
-
-
-
See Also:
Constant Field Values
-
-
- -

-CONTINUE

-
-public static final int CONTINUE
-
-
-
See Also:
Constant Field Values
-
-
- -

-DEFAULT

-
-public static final int DEFAULT
-
-
-
See Also:
Constant Field Values
-
-
- -

-DO

-
-public static final int DO
-
-
-
See Also:
Constant Field Values
-
-
- -

-ELSE

-
-public static final int ELSE
-
-
-
See Also:
Constant Field Values
-
-
- -

-EXTENDS

-
-public static final int EXTENDS
-
-
-
See Also:
Constant Field Values
-
-
- -

-FINALLY

-
-public static final int FINALLY
-
-
-
See Also:
Constant Field Values
-
-
- -

-FOR

-
-public static final int FOR
-
-
-
See Also:
Constant Field Values
-
-
- -

-IF

-
-public static final int IF
-
-
-
See Also:
Constant Field Values
-
-
- -

-INSTANCEOF

-
-public static final int INSTANCEOF
-
-
-
See Also:
Constant Field Values
-
-
- -

-INT

-
-public static final int INT
-
-
-
See Also:
Constant Field Values
-
-
- -

-NEW

-
-public static final int NEW
-
-
-
See Also:
Constant Field Values
-
-
- -

-PRIVATE

-
-public static final int PRIVATE
-
-
-
See Also:
Constant Field Values
-
-
- -

-PROTECTED

-
-public static final int PROTECTED
-
-
-
See Also:
Constant Field Values
-
-
- -

-PUBLIC

-
-public static final int PUBLIC
-
-
-
See Also:
Constant Field Values
-
-
- -

-RETURN

-
-public static final int RETURN
-
-
-
See Also:
Constant Field Values
-
-
- -

-STATIC

-
-public static final int STATIC
-
-
-
See Also:
Constant Field Values
-
-
- -

-SUPER

-
-public static final int SUPER
-
-
-
See Also:
Constant Field Values
-
-
- -

-SWITCH

-
-public static final int SWITCH
-
-
-
See Also:
Constant Field Values
-
-
- -

-THIS

-
-public static final int THIS
-
-
-
See Also:
Constant Field Values
-
-
- -

-THROW

-
-public static final int THROW
-
-
-
See Also:
Constant Field Values
-
-
- -

-THROWS

-
-public static final int THROWS
-
-
-
See Also:
Constant Field Values
-
-
- -

-TRY

-
-public static final int TRY
-
-
-
See Also:
Constant Field Values
-
-
- -

-VOID

-
-public static final int VOID
-
-
-
See Also:
Constant Field Values
-
-
- -

-WHILE

-
-public static final int WHILE
-
-
-
See Also:
Constant Field Values
-
-
- -

-INTLITERAL

-
-public static final int INTLITERAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-BOOLLITERAL

-
-public static final int BOOLLITERAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-JNULL

-
-public static final int JNULL
-
-
-
See Also:
Constant Field Values
-
-
- -

-CHARLITERAL

-
-public static final int CHARLITERAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-STRINGLITERAL

-
-public static final int STRINGLITERAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-IDENTIFIER

-
-public static final int IDENTIFIER
-
-
-
See Also:
Constant Field Values
-
-
- -

-EQUAL

-
-public static final int EQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-LESSEQUAL

-
-public static final int LESSEQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-GREATEREQUAL

-
-public static final int GREATEREQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-NOTEQUAL

-
-public static final int NOTEQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-LOGICALOR

-
-public static final int LOGICALOR
-
-
-
See Also:
Constant Field Values
-
-
- -

-LOGICALAND

-
-public static final int LOGICALAND
-
-
-
See Also:
Constant Field Values
-
-
- -

-INCREMENT

-
-public static final int INCREMENT
-
-
-
See Also:
Constant Field Values
-
-
- -

-DECREMENT

-
-public static final int DECREMENT
-
-
-
See Also:
Constant Field Values
-
-
- -

-SHIFTLEFT

-
-public static final int SHIFTLEFT
-
-
-
See Also:
Constant Field Values
-
-
- -

-SHIFTRIGHT

-
-public static final int SHIFTRIGHT
-
-
-
See Also:
Constant Field Values
-
-
- -

-UNSIGNEDSHIFTRIGHT

-
-public static final int UNSIGNEDSHIFTRIGHT
-
-
-
See Also:
Constant Field Values
-
-
- -

-SIGNEDSHIFTRIGHT

-
-public static final int SIGNEDSHIFTRIGHT
-
-
-
See Also:
Constant Field Values
-
-
- -

-PLUSEQUAL

-
-public static final int PLUSEQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-MINUSEQUAL

-
-public static final int MINUSEQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-TIMESEQUAL

-
-public static final int TIMESEQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-DIVIDEEQUAL

-
-public static final int DIVIDEEQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-ANDEQUAL

-
-public static final int ANDEQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-OREQUAL

-
-public static final int OREQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-XOREQUAL

-
-public static final int XOREQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-MODULOEQUAL

-
-public static final int MODULOEQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-SHIFTLEFTEQUAL

-
-public static final int SHIFTLEFTEQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-SIGNEDSHIFTRIGHTEQUAL

-
-public static final int SIGNEDSHIFTRIGHTEQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-UNSIGNEDSHIFTRIGHTEQUAL

-
-public static final int UNSIGNEDSHIFTRIGHTEQUAL
-
-
-
See Also:
Constant Field Values
-
-
- -

-BRACE

-
-public static final int BRACE
-
-
-
See Also:
Constant Field Values
-
-
- -

-RELOP

-
-public static final int RELOP
-
-
-
See Also:
Constant Field Values
-
-
- -

-OP

-
-public static final int OP
-
-
-
See Also:
Constant Field Values
-
-
- -

-EOF

-
-public static final int EOF
-
-
-
See Also:
Constant Field Values
-
-
- -

-yyErrorCode

-
-public static final int yyErrorCode
-
-
-
See Also:
Constant Field Values
-
-
- -

-yyFinal

-
-protected static final int yyFinal
-
-
debugging support, requires the package jay.yydebug. - Set to null to suppress debugging messages. -

-

-
See Also:
Constant Field Values
-
-
- -

-yyName

-
-protected static final java.lang.String[] yyName
-
-
-
-
-
- -

-yyMax

-
-protected int yyMax
-
-
initial size and increment of the state/value stack [default 256]. - This is not final so that it can be overwritten outside of invocations - of yyparse(). -

-

-
-
-
- -

-yyLhs

-
-protected static final short[] yyLhs
-
-
-
-
-
- -

-yyLen

-
-protected static final short[] yyLen
-
-
-
-
-
- -

-yyDefRed

-
-protected static final short[] yyDefRed
-
-
-
-
-
- -

-yyDgoto

-
-protected static final short[] yyDgoto
-
-
-
-
-
- -

-yySindex

-
-protected static final short[] yySindex
-
-
-
-
-
- -

-yyRindex

-
-protected static final short[] yyRindex
-
-
-
-
-
- -

-yyGindex

-
-protected static final short[] yyGindex
-
-
-
-
-
- -

-yyTable

-
-protected static final short[] yyTable
-
-
-
-
-
- -

-yyCheck

-
-protected short[] yyCheck
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-JavaParser

-
-public JavaParser()
-
-
- - - - - - - - -
-Method Detail
- -

-yyerror

-
-public void yyerror(java.lang.String message)
-
-
simplified error message. -

-

-
See Also:
yyerror
-
-
-
- -

-yyerror

-
-public void yyerror(java.lang.String message,
-                    java.lang.String[] expected)
-
-
(syntax) error message. - Can be overwritten to control message format. -

-

-
Parameters:
message - text to be displayed.
expected - Menge of acceptable tokens, if available.
-
-
-
- -

-yyExpecting

-
-protected java.lang.String[] yyExpecting(int state)
-
-
computes list of expected tokens on error by tracing the tables. -

-

-
Parameters:
state - for which to compute the list. -
Returns:
list of token names.
-
-
-
- -

-yyparse

-
-public java.lang.Object yyparse(JavaParser.yyInput yyLex,
-                                java.lang.Object yydebug)
-                         throws java.io.IOException,
-                                JavaParser.yyException
-
-
the generated parser, with debugging messages. - Maintains a state and a value stack, currently with fixed maximum size. -

-

-
Parameters:
yyLex - scanner.
yydebug - debug message writer implementing yyDebug, or null. -
Returns:
result of the last reduction, if any. -
Throws: -
JavaParser.yyException - on irrecoverable parse error. -
java.io.IOException
-
-
-
- -

-yyDefault

-
-protected java.lang.Object yyDefault(java.lang.Object first)
-
-
executed at the beginning of a reduce action. - Used as $$ = yyDefault($1), prior to the user-specified action, if any. - Can be overwritten to provide deep copy, etc. -

-

-
Parameters:
first - value for $1, or null. -
Returns:
first.
-
-
-
- -

-yyparse

-
-public java.lang.Object yyparse(JavaParser.yyInput yyLex)
-                         throws java.io.IOException,
-                                JavaParser.yyException
-
-
the generated parser. - Maintains a state and a value stack, currently with fixed maximum size. -

-

-
Parameters:
yyLex - scanner. -
Returns:
result of the last reduction, if any. -
Throws: -
JavaParser.yyException - on irrecoverable parse error. -
java.io.IOException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/JavaParser.yyException.html b/doc/Javadoc/mycompiler/myparser/JavaParser.yyException.html deleted file mode 100755 index 163b8c82..00000000 --- a/doc/Javadoc/mycompiler/myparser/JavaParser.yyException.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - -JavaParser.yyException - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myparser -
-Class JavaParser.yyException

-
-java.lang.Object
-  extended by java.lang.Throwable
-      extended by java.lang.Exception
-          extended by mycompiler.myparser.JavaParser.yyException
-
-
-
All Implemented Interfaces:
java.io.Serializable
-
-
-
Enclosing class:
JavaParser
-
-
-
-
public static class JavaParser.yyException
extends java.lang.Exception
- - -

-thrown for irrecoverable syntax errors and stack overflow. -

- -

-

-
See Also:
Serialized Form
-
- -

- - - - - - - - - - - -
-Constructor Summary
JavaParser.yyException(java.lang.String message) - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-JavaParser.yyException

-
-public JavaParser.yyException(java.lang.String message)
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/JavaParser.yyInput.html b/doc/Javadoc/mycompiler/myparser/JavaParser.yyInput.html deleted file mode 100755 index c2739a8c..00000000 --- a/doc/Javadoc/mycompiler/myparser/JavaParser.yyInput.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - - - -JavaParser.yyInput - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myparser -
-Interface JavaParser.yyInput

-
-
All Known Implementing Classes:
Scanner
-
-
-
Enclosing class:
JavaParser
-
-
-
-
public static interface JavaParser.yyInput
- - -

-must be implemented by a scanner object to supply input to the parser. -

- -

-


- -

- - - - - - - - - - - - - - - - - - - - -
-Method Summary
- booleanadvance() - -
-          move on to next token.
- inttoken() - -
-          classifies current token.
- java.lang.Objectvalue() - -
-          associated with current token.
-  -

- - - - - - - - -
-Method Detail
- -

-advance

-
-boolean advance()
-                throws java.io.IOException
-
-
move on to next token. -

-

- -
Returns:
false if positioned beyond tokens. -
Throws: -
IOException - on input error.
-
-
-
- -

-token

-
-int token()
-
-
classifies current token. - Should not be called if advance() returned false. -

-

- -
Returns:
current %token or single character.
-
-
-
- -

-value

-
-java.lang.Object value()
-
-
associated with current token. - Should not be called if advance() returned false. -

-

- -
Returns:
value for token().
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/Scanner.html b/doc/Javadoc/mycompiler/myparser/Scanner.html deleted file mode 100755 index ed18717b..00000000 --- a/doc/Javadoc/mycompiler/myparser/Scanner.html +++ /dev/null @@ -1,326 +0,0 @@ - - - - - - -Scanner - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myparser -
-Class Scanner

-
-java.lang.Object
-  extended by mycompiler.myparser.JavaLexer
-      extended by mycompiler.myparser.Scanner
-
-
-
All Implemented Interfaces:
JavaParser.yyInput
-
-
-
-
public class Scanner
extends JavaLexer
implements JavaParser.yyInput
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Scanner(java.io.Reader reader) - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- booleanadvance() - -
-          move on to next token.
- inttoken() - -
-          classifies current token.
- java.lang.Objectvalue() - -
-          associated with current token.
- - - - - - - -
Methods inherited from class mycompiler.myparser.JavaLexer
yylex
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Scanner

-
-public Scanner(java.io.Reader reader)
-
-
- - - - - - - - -
-Method Detail
- -

-token

-
-public int token()
-
-
Description copied from interface: JavaParser.yyInput
-
classifies current token. - Should not be called if advance() returned false. -

-

-
Specified by:
token in interface JavaParser.yyInput
-
-
- -
Returns:
current %token or single character.
-
-
-
- -

-advance

-
-public boolean advance()
-                throws java.io.IOException
-
-
Description copied from interface: JavaParser.yyInput
-
move on to next token. -

-

-
Specified by:
advance in interface JavaParser.yyInput
-
-
- -
Returns:
false if positioned beyond tokens. -
Throws: -
IOException - on input error.
-
-
-
- -

-value

-
-public java.lang.Object value()
-
-
Description copied from interface: JavaParser.yyInput
-
associated with current token. - Should not be called if advance() returned false. -

-

-
Specified by:
value in interface JavaParser.yyInput
-
-
- -
Returns:
value for token().
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/Token.html b/doc/Javadoc/mycompiler/myparser/Token.html deleted file mode 100755 index f24e9013..00000000 --- a/doc/Javadoc/mycompiler/myparser/Token.html +++ /dev/null @@ -1,347 +0,0 @@ - - - - - - -Token - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.myparser -
-Class Token

-
-java.lang.Object
-  extended by mycompiler.myparser.Token
-
-
-
-
public class Token
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
- java.lang.Objecttoken - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- charCharInString() - -
-           
- java.lang.Stringget_String() - -
-           
- java.lang.StringgetLexem() - -
-           
- intgetLineNumber() - -
-           
- booleanString2Bool() - -
-           
- intString2Int() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-token

-
-public java.lang.Object token
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-getLineNumber

-
-public int getLineNumber()
-
-
-
-
-
-
- -

-getLexem

-
-public java.lang.String getLexem()
-
-
-
-
-
-
- -

-String2Int

-
-public int String2Int()
-
-
-
-
-
-
- -

-CharInString

-
-public char CharInString()
-
-
-
-
-
-
- -

-String2Bool

-
-public boolean String2Bool()
-
-
-
-
-
-
- -

-get_String

-
-public java.lang.String get_String()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/class-use/JavaLexer.html b/doc/Javadoc/mycompiler/myparser/class-use/JavaLexer.html deleted file mode 100755 index d2c504de..00000000 --- a/doc/Javadoc/mycompiler/myparser/class-use/JavaLexer.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.myparser.JavaLexer - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myparser.JavaLexer

-
- - - - - - - - - -
-Packages that use JavaLexer
mycompiler.myparser  
-  -

- - - - - -
-Uses of JavaLexer in mycompiler.myparser
-  -

- - - - - - - - - -
Subclasses of JavaLexer in mycompiler.myparser
- classScanner - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/class-use/JavaParser.html b/doc/Javadoc/mycompiler/myparser/class-use/JavaParser.html deleted file mode 100755 index f7389f73..00000000 --- a/doc/Javadoc/mycompiler/myparser/class-use/JavaParser.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.myparser.JavaParser - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myparser.JavaParser

-
- - - - - - - - - -
-Packages that use JavaParser
mycompiler.unused  
-  -

- - - - - -
-Uses of JavaParser in mycompiler.unused
-  -

- - - - - - - - - -
Subclasses of JavaParser in mycompiler.unused
- classJavaCompiler - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/class-use/JavaParser.yyException.html b/doc/Javadoc/mycompiler/myparser/class-use/JavaParser.yyException.html deleted file mode 100755 index d4415a41..00000000 --- a/doc/Javadoc/mycompiler/myparser/class-use/JavaParser.yyException.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - -Uses of Class mycompiler.myparser.JavaParser.yyException - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myparser.JavaParser.yyException

-
- - - - - - - - - - - - - -
-Packages that use JavaParser.yyException
mycompiler  
mycompiler.myparser  
-  -

- - - - - -
-Uses of JavaParser.yyException in mycompiler
-  -

- - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler that throw JavaParser.yyException
- voidMyCompilerAPI.parse(java.io.File file) - -
-          Author: Jörg Bäuerle
- Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf.
- voidMyCompiler.parse(java.io.File file) - -
-          Author: Jörg Bäuerle
- Ruft die Parse-Methode.
- voidMyCompilerAPI.parse(java.lang.String srcCode) - -
-          Author: Jörg Bäuerle
- Parst einen String und baut den abstrakten Syntaxbaum auf.
- voidMyCompiler.parse(java.lang.String srcCode) - -
-          Author: Jörg Bäuerle
- Ruft die Parse-Methode.
-  -

- - - - - -
-Uses of JavaParser.yyException in mycompiler.myparser
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.myparser that throw JavaParser.yyException
- java.lang.ObjectJavaParser.yyparse(JavaParser.yyInput yyLex) - -
-          the generated parser.
- java.lang.ObjectJavaParser.yyparse(JavaParser.yyInput yyLex, - java.lang.Object yydebug) - -
-          the generated parser, with debugging messages.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/class-use/JavaParser.yyInput.html b/doc/Javadoc/mycompiler/myparser/class-use/JavaParser.yyInput.html deleted file mode 100755 index 04c22ca2..00000000 --- a/doc/Javadoc/mycompiler/myparser/class-use/JavaParser.yyInput.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - -Uses of Interface mycompiler.myparser.JavaParser.yyInput - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
mycompiler.myparser.JavaParser.yyInput

-
- - - - - - - - - -
-Packages that use JavaParser.yyInput
mycompiler.myparser  
-  -

- - - - - -
-Uses of JavaParser.yyInput in mycompiler.myparser
-  -

- - - - - - - - - -
Classes in mycompiler.myparser that implement JavaParser.yyInput
- classScanner - -
-           
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.myparser with parameters of type JavaParser.yyInput
- java.lang.ObjectJavaParser.yyparse(JavaParser.yyInput yyLex) - -
-          the generated parser.
- java.lang.ObjectJavaParser.yyparse(JavaParser.yyInput yyLex, - java.lang.Object yydebug) - -
-          the generated parser, with debugging messages.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/class-use/Scanner.html b/doc/Javadoc/mycompiler/myparser/class-use/Scanner.html deleted file mode 100755 index 0ffc9995..00000000 --- a/doc/Javadoc/mycompiler/myparser/class-use/Scanner.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myparser.Scanner - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myparser.Scanner

-
-No usage of mycompiler.myparser.Scanner -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/class-use/Token.html b/doc/Javadoc/mycompiler/myparser/class-use/Token.html deleted file mode 100755 index aa50e194..00000000 --- a/doc/Javadoc/mycompiler/myparser/class-use/Token.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.myparser.Token - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.myparser.Token

-
-No usage of mycompiler.myparser.Token -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/package-frame.html b/doc/Javadoc/mycompiler/myparser/package-frame.html deleted file mode 100755 index 2828f156..00000000 --- a/doc/Javadoc/mycompiler/myparser/package-frame.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - -mycompiler.myparser - - - - - - - - - - - -mycompiler.myparser - - - - -
-Interfaces  - -
-JavaParser.yyInput
- - - - - - -
-Classes  - -
-JavaLexer -
-JavaParser -
-Scanner -
-Token
- - - - - - -
-Exceptions  - -
-JavaParser.yyException
- - - - diff --git a/doc/Javadoc/mycompiler/myparser/package-summary.html b/doc/Javadoc/mycompiler/myparser/package-summary.html deleted file mode 100755 index 7843d5cf..00000000 --- a/doc/Javadoc/mycompiler/myparser/package-summary.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - -mycompiler.myparser - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.myparser -

- - - - - - - - - -
-Interface Summary
JavaParser.yyInputmust be implemented by a scanner object to supply input to the parser.
-  - -

- - - - - - - - - - - - - - - - - - - - - -
-Class Summary
JavaLexer 
JavaParser 
Scanner 
Token 
-  - -

- - - - - - - - - -
-Exception Summary
JavaParser.yyExceptionthrown for irrecoverable syntax errors and stack overflow.
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/package-tree.html b/doc/Javadoc/mycompiler/myparser/package-tree.html deleted file mode 100755 index 1b74d631..00000000 --- a/doc/Javadoc/mycompiler/myparser/package-tree.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - -mycompiler.myparser Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.myparser -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/myparser/package-use.html b/doc/Javadoc/mycompiler/myparser/package-use.html deleted file mode 100755 index 171f2102..00000000 --- a/doc/Javadoc/mycompiler/myparser/package-use.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - -Uses of Package mycompiler.myparser - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.myparser

-
- - - - - - - - - - - - - - - - - -
-Packages that use mycompiler.myparser
mycompiler  
mycompiler.myparser  
mycompiler.unused  
-  -

- - - - - - - - -
-Classes in mycompiler.myparser used by mycompiler
JavaParser.yyException - -
-          thrown for irrecoverable syntax errors and stack overflow.
-  -

- - - - - - - - - - - - - - -
-Classes in mycompiler.myparser used by mycompiler.myparser
JavaLexer - -
-           
JavaParser.yyException - -
-          thrown for irrecoverable syntax errors and stack overflow.
JavaParser.yyInput - -
-          must be implemented by a scanner object to supply input to the parser.
-  -

- - - - - - - - -
-Classes in mycompiler.myparser used by mycompiler.unused
JavaParser - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/ArgumentList.html b/doc/Javadoc/mycompiler/mystatement/ArgumentList.html deleted file mode 100755 index c948ca2e..00000000 --- a/doc/Javadoc/mycompiler/mystatement/ArgumentList.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - -ArgumentList - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class ArgumentList

-
-java.lang.Object
-  extended by mycompiler.mystatement.ArgumentList
-
-
-
-
public class ArgumentList
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
- de.dhbwstuttgart.typeinference.Mengeexpr - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ArgumentList() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_codegen_ArgumentList(de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Objectget_firstElement() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-expr

-
-public de.dhbwstuttgart.typeinference.Menge expr
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ArgumentList

-
-public ArgumentList()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-get_codegen_ArgumentList

-
-public java.lang.String get_codegen_ArgumentList(de.dhbwstuttgart.typeinference.Menge paralist)
-
-
-
-
-
-
- -

-get_firstElement

-
-public java.lang.Object get_firstElement()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/Assign.html b/doc/Javadoc/mycompiler/mystatement/Assign.html deleted file mode 100755 index e33a32fc..00000000 --- a/doc/Javadoc/mycompiler/mystatement/Assign.html +++ /dev/null @@ -1,495 +0,0 @@ - - - - - - -Assign - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class Assign

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.Assign
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class Assign
extends Expr
- - -

-


- -

- - - - - - - - - - - - - - - -
-Field Summary
- Exprexpr1 - -
-           
- Exprexpr2 - -
-           
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
Assign() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Expr(Expr expr1, - Expr expr2) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.30 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.25 von Martin Pl�micke -
Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-expr1

-
-public Expr expr1
-
-
-
-
-
- -

-expr2

-
-public Expr expr2
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-Assign

-
-public Assign()
-
-
- - - - - - - - -
-Method Detail
- -

-set_Expr

-
-public void set_Expr(Expr expr1,
-                     Expr expr2)
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
Specified by:
sc_check in class Expr
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung des Algorithmus 5.30 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
Implementierung des Algorithmus 5.25 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRStatement in class Statement
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/Binary.html b/doc/Javadoc/mycompiler/mystatement/Binary.html deleted file mode 100755 index cdb5c196..00000000 --- a/doc/Javadoc/mycompiler/mystatement/Binary.html +++ /dev/null @@ -1,671 +0,0 @@ - - - - - - -Binary - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class Binary

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.BinaryExpr
-                  extended by mycompiler.mystatement.Binary
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class Binary
extends BinaryExpr
- - -

-


- -

- - - - - - - - - - - - - - - - - - - -
-Field Summary
- Exprexpr1 - -
-           
- Exprexpr2 - -
-           
- Operatorop - -
-           
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
Binary() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- Exprget_Expr1() - -
-           
- Exprget_Expr2() - -
-           
- java.lang.Stringget_Name() - -
-           
- Operatorget_Operator() - -
-           
- voidneg_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidnot_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Expr1(Expr exp) - -
-           
- voidset_Expr2(Expr exp) - -
-           
- voidset_Operator(Operator Op) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- booleantype_check(CodeAttribute code) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-expr1

-
-public Expr expr1
-
-
-
-
-
- -

-op

-
-public Operator op
-
-
-
-
-
- -

-expr2

-
-public Expr expr2
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-Binary

-
-public Binary()
-
-
- - - - - - - - -
-Method Detail
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
Specified by:
sc_check in class Expr
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-set_Expr1

-
-public void set_Expr1(Expr exp)
-
-
-
-
-
-
- -

-set_Expr2

-
-public void set_Expr2(Expr exp)
-
-
-
-
-
-
- -

-set_Operator

-
-public void set_Operator(Operator Op)
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-get_Operator

-
-public Operator get_Operator()
-
-
-
-
-
-
- -

-get_Expr1

-
-public Expr get_Expr1()
-
-
-
-
-
-
- -

-get_Expr2

-
-public Expr get_Expr2()
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-not_codegen

-
-public void not_codegen(ClassFile classfile,
-                        CodeAttribute code,
-                        de.dhbwstuttgart.typeinference.Menge paralist)
-                 throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-neg_codegen

-
-public void neg_codegen(ClassFile classfile,
-                        CodeAttribute code,
-                        de.dhbwstuttgart.typeinference.Menge paralist)
-                 throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-type_check

-
-public boolean type_check(CodeAttribute code)
-                   throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
-
Specified by:
TRExp in class Expr
-
-
-
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/BinaryExpr.html b/doc/Javadoc/mycompiler/mystatement/BinaryExpr.html deleted file mode 100755 index 01c790b0..00000000 --- a/doc/Javadoc/mycompiler/mystatement/BinaryExpr.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -BinaryExpr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class BinaryExpr

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.BinaryExpr
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
Direct Known Subclasses:
Binary, InstanceOf
-
-
-
-
public abstract class BinaryExpr
extends Expr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
BinaryExpr() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Name, get_Type_Menge, get_UsedId, sc_check, set_Type, set_UsedId, TRExp, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Statement
codegen, TRStatement
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BinaryExpr

-
-public BinaryExpr()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/Block.html b/doc/Javadoc/mycompiler/mystatement/Block.html deleted file mode 100755 index 29fde11c..00000000 --- a/doc/Javadoc/mycompiler/mystatement/Block.html +++ /dev/null @@ -1,459 +0,0 @@ - - - - - - -Block - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class Block

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.Block
-
-
-
-
public class Block
extends Statement
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
- de.dhbwstuttgart.typeinference.Mengestatements - -
-           
-  - - - - - - - - - - -
-Constructor Summary
Block() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_Statement() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Statement_Menge(de.dhbwstuttgart.typeinference.Menge v) - -
-           
- voidset_Statement(Statement s) - -
-           
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.20 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetTRStatements(CSubstitutionSet sigma, - CTypeAssumptionSet V, - de.dhbwstuttgart.typeinference.Menge<Statement> statementList, - int index, - CTypeAssumptionSet V_start, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.19 von Martin Pl�micke -
Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-statements

-
-public de.dhbwstuttgart.typeinference.Menge statements
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-Block

-
-public Block()
-
-
- - - - - - - - -
-Method Detail
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-get_Statement

-
-public de.dhbwstuttgart.typeinference.Menge get_Statement()
-
-
-
-
-
-
- -

-set_Statement

-
-public void set_Statement(Statement s)
-
-
-
-
-
-
- -

-set_Statement_Menge

-
-public void set_Statement_Menge(de.dhbwstuttgart.typeinference.Menge v)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-                       throws CTypeReconstructionException
-
-
Implementierung des Algorithmus 5.20 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRStatement in class Statement
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
Throws: -
CTypeReconstructionException
-
-
-
- -

-TRStatements

-
-public CTripleSet TRStatements(CSubstitutionSet sigma,
-                               CTypeAssumptionSet V,
-                               de.dhbwstuttgart.typeinference.Menge<Statement> statementList,
-                               int index,
-                               CTypeAssumptionSet V_start,
-                               CSupportData supportData)
-                        throws CTypeReconstructionException
-
-
Implementierung des Algorithmus 5.19 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Parameters:
sigma -
V -
statementList -
index -
V_start -
supportData - -
Returns:
-
Throws: -
CTypeReconstructionException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/BoolLiteral.html b/doc/Javadoc/mycompiler/mystatement/BoolLiteral.html deleted file mode 100755 index 5e7fac44..00000000 --- a/doc/Javadoc/mycompiler/mystatement/BoolLiteral.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - -BoolLiteral - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class BoolLiteral

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.Literal
-                  extended by mycompiler.mystatement.BoolLiteral
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class BoolLiteral
extends Literal
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
BoolLiteral() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Bool(boolean b) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BoolLiteral

-
-public BoolLiteral()
-
-
- - - - - - - - -
-Method Detail
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-
-
-
Specified by:
sc_check in class Expr
-
-
-
-
-
-
- -

-set_Bool

-
-public void set_Bool(boolean b)
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- Anstatt den Basetype BooleanType zur�ckzugeben, wird ein RefType - zur�ckgegeben.
- Diese Methode kann sp�ter entfernt werden, sodass automatisch die Methode der Super-Klasse - verwendet wird. -
Author: J�rg B�uerle -

-

-
Overrides:
TRExp in class Literal
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/CastExpr.html b/doc/Javadoc/mycompiler/mystatement/CastExpr.html deleted file mode 100755 index f0068f85..00000000 --- a/doc/Javadoc/mycompiler/mystatement/CastExpr.html +++ /dev/null @@ -1,457 +0,0 @@ - - - - - - -CastExpr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class CastExpr

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.UnaryExpr
-                  extended by mycompiler.mystatement.CastExpr
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class CastExpr
extends UnaryExpr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
-  - - - - - - - - - - -
-Constructor Summary
CastExpr() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Expr(Expr ex) - -
-           
- voidset_Type(Type ty) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.43 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CastExpr

-
-public CastExpr()
-
-
- - - - - - - - -
-Method Detail
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
Specified by:
sc_check in class Expr
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-set_Type

-
-public void set_Type(Type ty)
-
-
-
Overrides:
set_Type in class Expr
-
-
-
-
-
-
- -

-set_Expr

-
-public void set_Expr(Expr ex)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class UnaryExpr
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung des Algorithmus 5.43 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/CharLiteral.html b/doc/Javadoc/mycompiler/mystatement/CharLiteral.html deleted file mode 100755 index d86147c1..00000000 --- a/doc/Javadoc/mycompiler/mystatement/CharLiteral.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - -CharLiteral - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class CharLiteral

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.Literal
-                  extended by mycompiler.mystatement.CharLiteral
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class CharLiteral
extends Literal
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
CharLiteral() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Char(char c) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CharLiteral

-
-public CharLiteral()
-
-
- - - - - - - - -
-Method Detail
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-
-
-
Specified by:
sc_check in class Expr
-
-
-
-
-
-
- -

-set_Char

-
-public void set_Char(char c)
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- Anstatt den Basetype CharacterType zur�ckzugeben, wird ein RefType - zur�ckgegeben.
- Diese Methode kann sp�ter entfernt werden, sodass automatisch die Methode der Super-Klasse - verwendet wird. -
Author: J�rg B�uerle -

-

-
Overrides:
TRExp in class Literal
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/EmptyStmt.html b/doc/Javadoc/mycompiler/mystatement/EmptyStmt.html deleted file mode 100755 index 208b7098..00000000 --- a/doc/Javadoc/mycompiler/mystatement/EmptyStmt.html +++ /dev/null @@ -1,318 +0,0 @@ - - - - - - -EmptyStmt - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class EmptyStmt

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.EmptyStmt
-
-
-
-
public class EmptyStmt
extends Statement
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
EmptyStmt() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classlist, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-EmptyStmt

-
-public EmptyStmt()
-
-
- - - - - - - - -
-Method Detail
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classlist,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-
-
-
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/Expr.html b/doc/Javadoc/mycompiler/mystatement/Expr.html deleted file mode 100755 index 48215bd9..00000000 --- a/doc/Javadoc/mycompiler/mystatement/Expr.html +++ /dev/null @@ -1,532 +0,0 @@ - - - - - - -Expr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class Expr

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
Direct Known Subclasses:
Assign, BinaryExpr, InstVar, Literal, LocalOrFieldVar, MethodCall, NewArray, NewClass, This, UnaryExpr
-
-
-
-
public abstract class Expr
extends ExprStmt
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
- UsedIdusedid - -
-           
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
Expr() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- de.dhbwstuttgart.typeinference.Mengeget_Name_Menge() - -
-           
-abstract  java.lang.Stringget_Name() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_Type_Menge() - -
-           
- UsedIdget_UsedId() - -
-           
-abstract  voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Type(Type type) - -
-           
- voidset_UsedId(UsedId ui) - -
-           
-abstract  CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CMultiplyTupleSetTRMultiply(CMultiplyTuple tuple, - Expr t, - CSupportData supportData) - -
-          (siehe Algorithmus 5.29 TRMultiply, Martin Pl�micke) -
Author: J�rg B�uerle
- CMultiplyTupleSetTRTuple(CMultiplyTuple result, - de.dhbwstuttgart.typeinference.Menge<Expr> terms, - CSupportData supportData) - -
-          (siehe Algorithmus 5.28 TRTuple, Martin Pl�micke) -
Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Statement
codegen, TRStatement
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-usedid

-
-public UsedId usedid
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-Expr

-
-public Expr()
-
-
- - - - - - - - -
-Method Detail
- -

-set_Type

-
-public void set_Type(Type type)
-
-
-
-
-
-
- -

-set_UsedId

-
-public void set_UsedId(UsedId ui)
-
-
-
-
-
-
- -

-get_UsedId

-
-public UsedId get_UsedId()
-
-
-
-
-
-
- -

-get_Name_Menge

-
-public de.dhbwstuttgart.typeinference.Menge get_Name_Menge()
-
-
-
-
-
-
- -

-get_Type_Menge

-
-public de.dhbwstuttgart.typeinference.Menge get_Type_Menge()
-
-
-
-
-
-
- -

-sc_check

-
-public abstract void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                              java.util.Hashtable ch,
-                              java.util.Hashtable bh,
-                              boolean ext,
-                              java.util.Hashtable parach,
-                              java.util.Hashtable parabh)
-                       throws SCStatementException
-
-
-
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-get_Name

-
-public abstract java.lang.String get_Name()
-
-
-
-
-
-
- -

-TRExp

-
-public abstract CTripleSet TRExp(CSubstitutionSet sigma,
-                                 CTypeAssumptionSet V,
-                                 CSupportData supportData)
-                          throws CTypeReconstructionException
-
-
- -
Throws: -
CTypeReconstructionException
-
-
-
- -

-TRTuple

-
-public CMultiplyTupleSet TRTuple(CMultiplyTuple result,
-                                 de.dhbwstuttgart.typeinference.Menge<Expr> terms,
-                                 CSupportData supportData)
-
-
(siehe Algorithmus 5.28 TRTuple, Martin Pl�micke) -
Author: J�rg B�uerle -

-

-
Parameters:
result -
terms -
supportData - -
Returns:
-
-
-
- -

-TRMultiply

-
-public CMultiplyTupleSet TRMultiply(CMultiplyTuple tuple,
-                                    Expr t,
-                                    CSupportData supportData)
-
-
(siehe Algorithmus 5.29 TRMultiply, Martin Pl�micke) -
Author: J�rg B�uerle -

-

-
Parameters:
tuple -
t -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/ExprStmt.html b/doc/Javadoc/mycompiler/mystatement/ExprStmt.html deleted file mode 100755 index 14f2d049..00000000 --- a/doc/Javadoc/mycompiler/mystatement/ExprStmt.html +++ /dev/null @@ -1,401 +0,0 @@ - - - - - - -ExprStmt - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class ExprStmt

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
Direct Known Subclasses:
Expr
-
-
-
-
public abstract class ExprStmt
extends Statement
implements ITypeReplacementListener
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
-protected  Typetype - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ExprStmt() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- TypegetType() - -
-           
- intgetTypeLineNumber() - -
-          
Author: J�rg B�uerle
- java.lang.StringgetTypeName() - -
-           
- voidreplaceType(CReplaceTypeEvent e) - -
-          Tauscht einen Typ gegen einen anderen aus.
- voidsetType(Type t) - -
-          
Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Statement
codegen, TRStatement
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-type

-
-protected Type type
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ExprStmt

-
-public ExprStmt()
-
-
- - - - - - - - -
-Method Detail
- -

-getTypeName

-
-public java.lang.String getTypeName()
-
-
-
-
-
-
-
-
-
- -

-getType

-
-public Type getType()
-
-
-
-
-
-
-
-
-
- -

-setType

-
-public void setType(Type t)
-
-

Author: J�rg B�uerle -

-

-
-
-
-
Parameters:
t -
-
-
-
- -

-replaceType

-
-public void replaceType(CReplaceTypeEvent e)
-
-
Description copied from interface: ITypeReplacementListener
-
Tauscht einen Typ gegen einen anderen aus. -
Author: J�rg B�uerle -

-

-
Specified by:
replaceType in interface ITypeReplacementListener
-
-
-
Parameters:
e - Das Event mit dem neuen Typ
-
-
-
- -

-getTypeLineNumber

-
-public int getTypeLineNumber()
-
-

Author: J�rg B�uerle -

-

-
Specified by:
getTypeLineNumber in interface ITypeReplacementListener
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/IfStmt.html b/doc/Javadoc/mycompiler/mystatement/IfStmt.html deleted file mode 100755 index 3e630499..00000000 --- a/doc/Javadoc/mycompiler/mystatement/IfStmt.html +++ /dev/null @@ -1,467 +0,0 @@ - - - - - - -IfStmt - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class IfStmt

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.IfStmt
-
-
-
-
public class IfStmt
extends Statement
- - -

-


- -

- - - - - - - - - - - - - - - - - - - - - - - -
-Field Summary
- Statementelse_block - -
-           
- Exprexpr - -
-           
- booleanhamaDebug - -
-           
- Statementthen_block - -
-           
-  - - - - - - - - - - -
-Constructor Summary
IfStmt() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidif_codegen(ClassFile classfile, - CodeAttribute code, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidset_Else_block(Statement blk) - -
-           
- voidset_Expr(Expr exp) - -
-           
- voidset_Then_block(Statement blk) - -
-           
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.21 von Martin Pl�micke -
Achtung Workaround: RefType "Boolean" durch BaseType \code{BooleanType} ersetzen.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-hamaDebug

-
-public boolean hamaDebug
-
-
-
-
-
- -

-expr

-
-public Expr expr
-
-
-
-
-
- -

-then_block

-
-public Statement then_block
-
-
-
-
-
- -

-else_block

-
-public Statement else_block
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-IfStmt

-
-public IfStmt()
-
-
- - - - - - - - -
-Method Detail
- -

-set_Expr

-
-public void set_Expr(Expr exp)
-
-
-
-
-
-
- -

-set_Then_block

-
-public void set_Then_block(Statement blk)
-
-
-
-
-
-
- -

-set_Else_block

-
-public void set_Else_block(Statement blk)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-if_codegen

-
-public void if_codegen(ClassFile classfile,
-                       CodeAttribute code,
-                       boolean not,
-                       de.dhbwstuttgart.typeinference.Menge paralist)
-                throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
Implementierung des Algorithmus 5.21 von Martin Pl�micke -
Achtung Workaround: RefType "Boolean" durch BaseType \code{BooleanType} ersetzen. -
Author: J�rg B�uerle -

-

-
Specified by:
TRStatement in class Statement
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/InstVar.html b/doc/Javadoc/mycompiler/mystatement/InstVar.html deleted file mode 100755 index 335a7f5b..00000000 --- a/doc/Javadoc/mycompiler/mystatement/InstVar.html +++ /dev/null @@ -1,441 +0,0 @@ - - - - - - -InstVar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class InstVar

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.InstVar
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class InstVar
extends Expr
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
InstVar(java.lang.String n, - java.lang.String t) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_codegen_UsedId() - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.38 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetTRInstVar(CTriple triple, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.38-1 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-InstVar

-
-public InstVar(java.lang.String n,
-               java.lang.String t)
-
-
- - - - - - - - -
-Method Detail
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-
-
-
Specified by:
sc_check in class Expr
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-get_codegen_UsedId

-
-public java.lang.String get_codegen_UsedId()
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung des Algorithmus 5.38 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRInstVar

-
-public CTripleSet TRInstVar(CTriple triple,
-                            CSupportData supportData)
-
-
Implementierung des Algorithmus 5.38-1 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Parameters:
triple -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/InstanceOf.html b/doc/Javadoc/mycompiler/mystatement/InstanceOf.html deleted file mode 100755 index 504719db..00000000 --- a/doc/Javadoc/mycompiler/mystatement/InstanceOf.html +++ /dev/null @@ -1,458 +0,0 @@ - - - - - - -InstanceOf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class InstanceOf

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.BinaryExpr
-                  extended by mycompiler.mystatement.InstanceOf
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class InstanceOf
extends BinaryExpr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
InstanceOf() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Expr(Expr exp) - -
-           
- voidset_Type(RefType typ) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-InstanceOf

-
-public InstanceOf()
-
-
- - - - - - - - -
-Method Detail
- -

-set_Expr

-
-public void set_Expr(Expr exp)
-
-
-
-
-
-
- -

-set_Type

-
-public void set_Type(RefType typ)
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
Specified by:
sc_check in class Expr
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
-
Specified by:
TRExp in class Expr
-
-
-
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/IntLiteral.html b/doc/Javadoc/mycompiler/mystatement/IntLiteral.html deleted file mode 100755 index e83c773d..00000000 --- a/doc/Javadoc/mycompiler/mystatement/IntLiteral.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - -IntLiteral - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class IntLiteral

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.Literal
-                  extended by mycompiler.mystatement.IntLiteral
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class IntLiteral
extends Literal
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
IntLiteral() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Int(int i) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-IntLiteral

-
-public IntLiteral()
-
-
- - - - - - - - -
-Method Detail
- -

-set_Int

-
-public void set_Int(int i)
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-
-
-
Specified by:
sc_check in class Expr
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- Anstatt den Basetype IntegerType zur�ckzugeben, wird ein RefType - zur�ckgegeben.
- Diese Methode kann sp�ter entfernt werden, sodass automatisch die Methode der Super-Klasse - verwendet wird. -
Author: J�rg B�uerle -

-

-
Overrides:
TRExp in class Literal
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/Literal.html b/doc/Javadoc/mycompiler/mystatement/Literal.html deleted file mode 100755 index acdd432c..00000000 --- a/doc/Javadoc/mycompiler/mystatement/Literal.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - - - -Literal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class Literal

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.Literal
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
Direct Known Subclasses:
BoolLiteral, CharLiteral, IntLiteral, Null, StringLiteral
-
-
-
-
public abstract class Literal
extends Expr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
Literal() - -
-           
-  - - - - - - - - - - - -
-Method Summary
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.40 von Martin Pl�micke -
Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Name, get_Type_Menge, get_UsedId, sc_check, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Statement
codegen, TRStatement
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Literal

-
-public Literal()
-
-
- - - - - - - - -
-Method Detail
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung des Algorithmus 5.40 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/LocalOrFieldVar.html b/doc/Javadoc/mycompiler/mystatement/LocalOrFieldVar.html deleted file mode 100755 index a3c54ada..00000000 --- a/doc/Javadoc/mycompiler/mystatement/LocalOrFieldVar.html +++ /dev/null @@ -1,460 +0,0 @@ - - - - - - -LocalOrFieldVar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class LocalOrFieldVar

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.LocalOrFieldVar
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class LocalOrFieldVar
extends Expr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - - - - -
-Constructor Summary
LocalOrFieldVar() - -
-           
LocalOrFieldVar(java.lang.String n) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_UsedId(UsedId u) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.37 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-LocalOrFieldVar

-
-public LocalOrFieldVar()
-
-
-
- -

-LocalOrFieldVar

-
-public LocalOrFieldVar(java.lang.String n)
-
-
- - - - - - - - -
-Method Detail
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
Specified by:
sc_check in class Expr
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-set_UsedId

-
-public void set_UsedId(UsedId u)
-
-
-
Overrides:
set_UsedId in class Expr
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung des Algorithmus 5.37 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/LocalVarDecl.html b/doc/Javadoc/mycompiler/mystatement/LocalVarDecl.html deleted file mode 100755 index 8a96a099..00000000 --- a/doc/Javadoc/mycompiler/mystatement/LocalVarDecl.html +++ /dev/null @@ -1,613 +0,0 @@ - - - - - - -LocalVarDecl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class LocalVarDecl

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.LocalVarDecl
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class LocalVarDecl
extends Statement
implements ITypeReplacementListener
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
LocalVarDecl() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcheck_anz(Type type, - de.dhbwstuttgart.typeinference.Menge paralist, - de.dhbwstuttgart.typeinference.Menge classlist) - -
-           
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- de.dhbwstuttgart.typeinference.MengegetDeclidMenge() - -
-           
- intgetLineNumber() - -
-          
Author: J�rg B�uerle
- TypegetType() - -
-           
- intgetTypeLineNumber() - -
-          
Author: J�rg B�uerle
- voidis_declared(Type t, - de.dhbwstuttgart.typeinference.Menge classlist) - -
-           
- voidreplaceType(CReplaceTypeEvent e) - -
-          
Author: J�rg B�uerle
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_DeclId(DeclId did) - -
-           
- voidset_ParaList(de.dhbwstuttgart.typeinference.Menge pl) - -
-           
- voidsetDeclidMenge(de.dhbwstuttgart.typeinference.Menge declid) - -
-           
- voidsetType(Type t) - -
-           
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.24 von Martin Pl�micke -
Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-LocalVarDecl

-
-public LocalVarDecl()
-
-
- - - - - - - - -
-Method Detail
- -

-setType

-
-public void setType(Type t)
-
-
-
-
-
-
-
-
-
- -

-getType

-
-public Type getType()
-
-
-
-
-
-
-
-
-
- -

-set_DeclId

-
-public void set_DeclId(DeclId did)
-
-
-
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
-
-
-
-
-
-
- -

-set_ParaList

-
-public void set_ParaList(de.dhbwstuttgart.typeinference.Menge pl)
-
-
-
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-is_declared

-
-public void is_declared(Type t,
-                        de.dhbwstuttgart.typeinference.Menge classlist)
-                 throws SCStatementException
-
-
-
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-check_anz

-
-public void check_anz(Type type,
-                      de.dhbwstuttgart.typeinference.Menge paralist,
-                      de.dhbwstuttgart.typeinference.Menge classlist)
-               throws SCStatementException
-
-
-
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-getDeclidMenge

-
-public de.dhbwstuttgart.typeinference.Menge getDeclidMenge()
-
-
-
-
-
-
-
-
-
- -

-setDeclidMenge

-
-public void setDeclidMenge(de.dhbwstuttgart.typeinference.Menge declid)
-
-
-
-
-
-
-
-
-
- -

-getLineNumber

-
-public int getLineNumber()
-
-

Author: J�rg B�uerle -

-

-
-
-
- -
Returns:
-
-
-
- -

-replaceType

-
-public void replaceType(CReplaceTypeEvent e)
-
-

Author: J�rg B�uerle -

-

-
Specified by:
replaceType in interface ITypeReplacementListener
-
-
-
Parameters:
e -
-
-
-
- -

-getTypeLineNumber

-
-public int getTypeLineNumber()
-
-

Author: J�rg B�uerle -

-

-
Specified by:
getTypeLineNumber in interface ITypeReplacementListener
-
-
- -
Returns:
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
Implementierung des Algorithmus 5.24 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRStatement in class Statement
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/MethodCall.html b/doc/Javadoc/mycompiler/mystatement/MethodCall.html deleted file mode 100755 index bdafeb9c..00000000 --- a/doc/Javadoc/mycompiler/mystatement/MethodCall.html +++ /dev/null @@ -1,673 +0,0 @@ - - - - - - -MethodCall - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class MethodCall

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.MethodCall
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class MethodCall
extends Expr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
MethodCall() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidadd_Expr(Expr e) - -
-           
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check_get_Method(de.dhbwstuttgart.typeinference.Menge classlist, - java.lang.String methodname, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- booleansc_check_method_kleiner(de.dhbwstuttgart.typeinference.Menge classlist, - java.lang.String ist, - java.lang.String soll, - boolean ext) - -
-           
- voidsc_check_uebergabe(de.dhbwstuttgart.typeinference.Menge classlist, - de.dhbwstuttgart.typeinference.Menge method, - boolean ext, - int paranum, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidsc_init_extended_fcts(de.dhbwstuttgart.typeinference.Menge method, - de.dhbwstuttgart.typeinference.Menge classlist, - java.lang.String methodname, - java.lang.String classname, - boolean ext) - -
-           
- voidset_ArgumentList(ArgumentList al) - -
-           
- voidset_Expr_Menge(de.dhbwstuttgart.typeinference.Menge v) - -
-           
- voidset_Receiver(Receiver rec) - -
-           
- voidset_UsedId(UsedId u) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.33 von Martin Pl�micke -
Author: J�rg B�uerle
-static CTripleSetTRMCallApp(CMultiplyTuple multiTuple, - java.lang.String classOrIdentifierName, - java.lang.String methodName, - int paraCount, - boolean isConstructorCall, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.34 von Martin Pl�micke
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.27 von Martin Pl�micke -
Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-MethodCall

-
-public MethodCall()
-
-
- - - - - - - - -
-Method Detail
- -

-set_ArgumentList

-
-public void set_ArgumentList(ArgumentList al)
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
Specified by:
sc_check in class Expr
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-sc_check_get_Method

-
-public void sc_check_get_Method(de.dhbwstuttgart.typeinference.Menge classlist,
-                                java.lang.String methodname,
-                                boolean ext,
-                                java.util.Hashtable parach,
-                                java.util.Hashtable parabh)
-                         throws SCStatementException
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-sc_check_uebergabe

-
-public void sc_check_uebergabe(de.dhbwstuttgart.typeinference.Menge classlist,
-                               de.dhbwstuttgart.typeinference.Menge method,
-                               boolean ext,
-                               int paranum,
-                               java.util.Hashtable parach,
-                               java.util.Hashtable parabh)
-                        throws SCStatementException
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-sc_check_method_kleiner

-
-public boolean sc_check_method_kleiner(de.dhbwstuttgart.typeinference.Menge classlist,
-                                       java.lang.String ist,
-                                       java.lang.String soll,
-                                       boolean ext)
-
-
-
-
-
-
- -

-sc_init_extended_fcts

-
-public void sc_init_extended_fcts(de.dhbwstuttgart.typeinference.Menge method,
-                                  de.dhbwstuttgart.typeinference.Menge classlist,
-                                  java.lang.String methodname,
-                                  java.lang.String classname,
-                                  boolean ext)
-
-
-
-
-
-
- -

-set_Receiver

-
-public void set_Receiver(Receiver rec)
-
-
-
-
-
-
- -

-set_UsedId

-
-public void set_UsedId(UsedId u)
-
-
-
Overrides:
set_UsedId in class Expr
-
-
-
-
-
-
- -

-set_Expr_Menge

-
-public void set_Expr_Menge(de.dhbwstuttgart.typeinference.Menge v)
-
-
-
-
-
-
- -

-add_Expr

-
-public void add_Expr(Expr e)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
Implementierung des Algorithmus 5.27 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRStatement in class Statement
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung des Algorithmus 5.33 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRMCallApp

-
-public static CTripleSet TRMCallApp(CMultiplyTuple multiTuple,
-                                    java.lang.String classOrIdentifierName,
-                                    java.lang.String methodName,
-                                    int paraCount,
-                                    boolean isConstructorCall,
-                                    CSupportData supportData)
-
-
Implementierung des Algorithmus 5.34 von Martin Pl�micke -

-

-
Parameters:
multiTuple -
classOrIdentifierName -
methodName -
paraCount -
isConstructorCall -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/NegativeExpr.html b/doc/Javadoc/mycompiler/mystatement/NegativeExpr.html deleted file mode 100755 index bc303cb8..00000000 --- a/doc/Javadoc/mycompiler/mystatement/NegativeExpr.html +++ /dev/null @@ -1,492 +0,0 @@ - - - - - - -NegativeExpr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class NegativeExpr

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.UnaryExpr
-                  extended by mycompiler.mystatement.NegativeExpr
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class NegativeExpr
extends UnaryExpr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
NegativeExpr() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidneg_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Expr(Expr ex) - -
-           
- voidset_UnaryMinus(UnaryMinus umin) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.41 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-NegativeExpr

-
-public NegativeExpr()
-
-
- - - - - - - - -
-Method Detail
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
Specified by:
sc_check in class Expr
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-set_UnaryMinus

-
-public void set_UnaryMinus(UnaryMinus umin)
-
-
-
-
-
-
- -

-set_Expr

-
-public void set_Expr(Expr ex)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class UnaryExpr
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-neg_codegen

-
-public void neg_codegen(ClassFile classfile,
-                        CodeAttribute code,
-                        de.dhbwstuttgart.typeinference.Menge paralist)
-                 throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung des Algorithmus 5.41 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!! -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/NewArray.html b/doc/Javadoc/mycompiler/mystatement/NewArray.html deleted file mode 100755 index 34905ab3..00000000 --- a/doc/Javadoc/mycompiler/mystatement/NewArray.html +++ /dev/null @@ -1,483 +0,0 @@ - - - - - - -NewArray - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class NewArray

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.NewArray
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class NewArray
extends Expr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
-  - - - - - - - - - - -
-Constructor Summary
NewArray() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- intget_codegen_Array_Type() - -
-           
- java.lang.Stringget_Name() - -
-           
- TypegetType() - -
-          Author: J�rg B�uerle
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable bh, - java.util.Hashtable ch, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidsetType(Type type) - -
-          Author: J�rg B�uerle
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.32 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getTypeLineNumber, getTypeName, replaceType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-NewArray

-
-public NewArray()
-
-
- - - - - - - - -
-Method Detail
- -

-getType

-
-public Type getType()
-
-
Author: J�rg B�uerle
-

-

-
Overrides:
getType in class ExprStmt
-
-
- -
Returns:
Returns the type.
-
-
-
- -

-setType

-
-public void setType(Type type)
-
-
Author: J�rg B�uerle
-

-

-
Overrides:
setType in class ExprStmt
-
-
-
Parameters:
type - The type to set.
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable bh,
-                     java.util.Hashtable ch,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-
-
-
Specified by:
sc_check in class Expr
-
-
-
-
-
-
- -

-get_codegen_Array_Type

-
-public int get_codegen_Array_Type()
-                           throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung des Algorithmus 5.32 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/NewClass.html b/doc/Javadoc/mycompiler/mystatement/NewClass.html deleted file mode 100755 index f69e5072..00000000 --- a/doc/Javadoc/mycompiler/mystatement/NewClass.html +++ /dev/null @@ -1,470 +0,0 @@ - - - - - - -NewClass - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class NewClass

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.NewClass
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class NewClass
extends Expr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
NewClass() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable bh, - java.util.Hashtable ch, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_ArgumentList(ArgumentList al) - -
-           
- voidset_UsedId(UsedId t) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.31 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.26 von Martin Pl�micke -
Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-NewClass

-
-public NewClass()
-
-
- - - - - - - - -
-Method Detail
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-set_UsedId

-
-public void set_UsedId(UsedId t)
-
-
-
Overrides:
set_UsedId in class Expr
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable bh,
-                     java.util.Hashtable ch,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
Specified by:
sc_check in class Expr
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-set_ArgumentList

-
-public void set_ArgumentList(ArgumentList al)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
Implementierung des Algorithmus 5.26 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRStatement in class Statement
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung des Algorithmus 5.31 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/NotExpr.html b/doc/Javadoc/mycompiler/mystatement/NotExpr.html deleted file mode 100755 index 4f29b0d0..00000000 --- a/doc/Javadoc/mycompiler/mystatement/NotExpr.html +++ /dev/null @@ -1,511 +0,0 @@ - - - - - - -NotExpr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class NotExpr

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.UnaryExpr
-                  extended by mycompiler.mystatement.NotExpr
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class NotExpr
extends UnaryExpr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
NotExpr() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- Exprget_Expr() - -
-           
- java.lang.Stringget_Name() - -
-           
- voidnot_codegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Expr(Expr ex) - -
-           
- voidset_UnaryNot(UnaryNot unot) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.42 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-NotExpr

-
-public NotExpr()
-
-
- - - - - - - - -
-Method Detail
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
Specified by:
sc_check in class Expr
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-get_Expr

-
-public Expr get_Expr()
-
-
-
-
-
-
- -

-set_UnaryNot

-
-public void set_UnaryNot(UnaryNot unot)
-
-
-
-
-
-
- -

-set_Expr

-
-public void set_Expr(Expr ex)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class UnaryExpr
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-not_codegen

-
-public void not_codegen(ClassFile classfile,
-                        CodeAttribute code,
-                        de.dhbwstuttgart.typeinference.Menge paralist)
-                 throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung des Algorithmus 5.42 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!! -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/Null.html b/doc/Javadoc/mycompiler/mystatement/Null.html deleted file mode 100755 index c6bacb9d..00000000 --- a/doc/Javadoc/mycompiler/mystatement/Null.html +++ /dev/null @@ -1,422 +0,0 @@ - - - - - - -Null - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class Null

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.Literal
-                  extended by mycompiler.mystatement.Null
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class Null
extends Literal
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
Null() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.40 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Null

-
-public Null()
-
-
- - - - - - - - -
-Method Detail
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-
-
-
Specified by:
sc_check in class Expr
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Description copied from class: Literal
-
Implementierung des Algorithmus 5.40 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Overrides:
TRExp in class Literal
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/PositivExpr.html b/doc/Javadoc/mycompiler/mystatement/PositivExpr.html deleted file mode 100755 index 551d8d0a..00000000 --- a/doc/Javadoc/mycompiler/mystatement/PositivExpr.html +++ /dev/null @@ -1,455 +0,0 @@ - - - - - - -PositivExpr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class PositivExpr

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.UnaryExpr
-                  extended by mycompiler.mystatement.PositivExpr
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class PositivExpr
extends UnaryExpr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
PositivExpr() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Expr(Expr ex) - -
-           
- voidset_UnaryPlus(UnaryPlus up) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-PositivExpr

-
-public PositivExpr()
-
-
- - - - - - - - -
-Method Detail
- -

-set_UnaryPlus

-
-public void set_UnaryPlus(UnaryPlus up)
-
-
-
-
-
-
- -

-set_Expr

-
-public void set_Expr(Expr ex)
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-
-
-
Specified by:
sc_check in class Expr
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class UnaryExpr
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
-
Specified by:
TRExp in class Expr
-
-
-
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/PostDecExpr.html b/doc/Javadoc/mycompiler/mystatement/PostDecExpr.html deleted file mode 100755 index 9a5def62..00000000 --- a/doc/Javadoc/mycompiler/mystatement/PostDecExpr.html +++ /dev/null @@ -1,445 +0,0 @@ - - - - - - -PostDecExpr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class PostDecExpr

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.UnaryExpr
-                  extended by mycompiler.mystatement.PostDecExpr
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class PostDecExpr
extends UnaryExpr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
PostDecExpr() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Expr(Expr ex) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-PostDecExpr

-
-public PostDecExpr()
-
-
- - - - - - - - -
-Method Detail
- -

-set_Expr

-
-public void set_Expr(Expr ex)
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
Specified by:
sc_check in class Expr
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class UnaryExpr
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden. -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/PostIncExpr.html b/doc/Javadoc/mycompiler/mystatement/PostIncExpr.html deleted file mode 100755 index 4a3e0d13..00000000 --- a/doc/Javadoc/mycompiler/mystatement/PostIncExpr.html +++ /dev/null @@ -1,445 +0,0 @@ - - - - - - -PostIncExpr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class PostIncExpr

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.UnaryExpr
-                  extended by mycompiler.mystatement.PostIncExpr
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class PostIncExpr
extends UnaryExpr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
PostIncExpr() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Expr(Expr ex) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-PostIncExpr

-
-public PostIncExpr()
-
-
- - - - - - - - -
-Method Detail
- -

-set_Expr

-
-public void set_Expr(Expr ex)
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
Specified by:
sc_check in class Expr
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class UnaryExpr
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden. -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/PreDecExpr.html b/doc/Javadoc/mycompiler/mystatement/PreDecExpr.html deleted file mode 100755 index 6633b6bc..00000000 --- a/doc/Javadoc/mycompiler/mystatement/PreDecExpr.html +++ /dev/null @@ -1,445 +0,0 @@ - - - - - - -PreDecExpr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class PreDecExpr

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.UnaryExpr
-                  extended by mycompiler.mystatement.PreDecExpr
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class PreDecExpr
extends UnaryExpr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
PreDecExpr() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Expr(Expr ex) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-PreDecExpr

-
-public PreDecExpr()
-
-
- - - - - - - - -
-Method Detail
- -

-set_Expr

-
-public void set_Expr(Expr ex)
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
Specified by:
sc_check in class Expr
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class UnaryExpr
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden. -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/PreIncExpr.html b/doc/Javadoc/mycompiler/mystatement/PreIncExpr.html deleted file mode 100755 index f20ea58e..00000000 --- a/doc/Javadoc/mycompiler/mystatement/PreIncExpr.html +++ /dev/null @@ -1,445 +0,0 @@ - - - - - - -PreIncExpr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class PreIncExpr

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.UnaryExpr
-                  extended by mycompiler.mystatement.PreIncExpr
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class PreIncExpr
extends UnaryExpr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
PreIncExpr() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Expr(Expr ex) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-PreIncExpr

-
-public PreIncExpr()
-
-
- - - - - - - - -
-Method Detail
- -

-set_Expr

-
-public void set_Expr(Expr ex)
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
Specified by:
sc_check in class Expr
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class UnaryExpr
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden. -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/Receiver.html b/doc/Javadoc/mycompiler/mystatement/Receiver.html deleted file mode 100755 index 167b6ceb..00000000 --- a/doc/Javadoc/mycompiler/mystatement/Receiver.html +++ /dev/null @@ -1,323 +0,0 @@ - - - - - - -Receiver - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class Receiver

-
-java.lang.Object
-  extended by mycompiler.mystatement.Receiver
-
-
-
-
public class Receiver
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Receiver(Expr expr) - -
-          Autor: J�rg B�uerle
-  - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- Exprget_Expr() - -
-           
- java.lang.Stringget_Type() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_Expr(Expr express) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Receiver

-
-public Receiver(Expr expr)
-
-
Autor: J�rg B�uerle -

-

-
Parameters:
expr -
-
- - - - - - - - -
-Method Detail
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-get_Type

-
-public java.lang.String get_Type()
-
-
-
-
-
-
- -

-set_Expr

-
-public void set_Expr(Expr express)
-
-
-
-
-
-
- -

-get_Expr

-
-public Expr get_Expr()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/Return.html b/doc/Javadoc/mycompiler/mystatement/Return.html deleted file mode 100755 index 8e90667b..00000000 --- a/doc/Javadoc/mycompiler/mystatement/Return.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - -Return - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class Return

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.Return
-
-
-
-
public class Return
extends Statement
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Return() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Type() - -
-           
- voidset_ReturnExpr(Expr ret) - -
-           
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.22 von Martin Pl�micke -
Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Return

-
-public Return()
-
-
- - - - - - - - -
-Method Detail
- -

-set_ReturnExpr

-
-public void set_ReturnExpr(Expr ret)
-
-
-
-
-
-
- -

-get_Type

-
-public java.lang.String get_Type()
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-                       throws CTypeReconstructionException
-
-
Implementierung des Algorithmus 5.22 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRStatement in class Statement
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
Throws: -
CTypeReconstructionException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/Statement.html b/doc/Javadoc/mycompiler/mystatement/Statement.html deleted file mode 100755 index aaf843a9..00000000 --- a/doc/Javadoc/mycompiler/mystatement/Statement.html +++ /dev/null @@ -1,285 +0,0 @@ - - - - - - -Statement - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class Statement

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-
-
-
Direct Known Subclasses:
Block, EmptyStmt, ExprStmt, IfStmt, LocalVarDecl, Return, WhileStmt
-
-
-
-
public abstract class Statement
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Statement() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-abstract  voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Statement

-
-public Statement()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public abstract void codegen(ClassFile classfile,
-                             CodeAttribute code,
-                             de.dhbwstuttgart.typeinference.Menge paralist)
-                      throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRStatement

-
-public abstract CTripleSet TRStatement(CSubstitutionSet sigma,
-                                       CTypeAssumptionSet V,
-                                       CSupportData supportData)
-                                throws CTypeReconstructionException
-
-
- -
Throws: -
CTypeReconstructionException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/StringLiteral.html b/doc/Javadoc/mycompiler/mystatement/StringLiteral.html deleted file mode 100755 index b82f9eb4..00000000 --- a/doc/Javadoc/mycompiler/mystatement/StringLiteral.html +++ /dev/null @@ -1,419 +0,0 @@ - - - - - - -StringLiteral - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class StringLiteral

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.Literal
-                  extended by mycompiler.mystatement.StringLiteral
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class StringLiteral
extends Literal
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
StringLiteral() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_String(java.lang.String s) - -
-           
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Literal
TRExp
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, set_UsedId, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-StringLiteral

-
-public StringLiteral()
-
-
- - - - - - - - -
-Method Detail
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-
-
-
Specified by:
sc_check in class Expr
-
-
-
-
-
-
- -

-set_String

-
-public void set_String(java.lang.String s)
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/This.html b/doc/Javadoc/mycompiler/mystatement/This.html deleted file mode 100755 index ae64deb7..00000000 --- a/doc/Javadoc/mycompiler/mystatement/This.html +++ /dev/null @@ -1,465 +0,0 @@ - - - - - - -This - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class This

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.This
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
-
public class This
extends Expr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
This() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- voidsc_check(de.dhbwstuttgart.typeinference.Menge classname, - java.util.Hashtable ch, - java.util.Hashtable bh, - boolean ext, - java.util.Hashtable parach, - java.util.Hashtable parabh) - -
-           
- voidset_ArgumentList(ArgumentList al) - -
-           
- voidset_UsedId(UsedId ui) - -
-           
- CTripleSetTRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.35 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Type_Menge, get_UsedId, set_Type, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-This

-
-public This()
-
-
- - - - - - - - -
-Method Detail
- -

-set_ArgumentList

-
-public void set_ArgumentList(ArgumentList al)
-
-
-
-
-
-
- -

-set_UsedId

-
-public void set_UsedId(UsedId ui)
-
-
-
Overrides:
set_UsedId in class Expr
-
-
-
-
-
-
- -

-sc_check

-
-public void sc_check(de.dhbwstuttgart.typeinference.Menge classname,
-                     java.util.Hashtable ch,
-                     java.util.Hashtable bh,
-                     boolean ext,
-                     java.util.Hashtable parach,
-                     java.util.Hashtable parabh)
-              throws SCStatementException
-
-
-
Specified by:
sc_check in class Expr
-
-
- -
Throws: -
SCStatementException
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Specified by:
get_Name in class Expr
-
-
-
-
-
-
- -

-TRExp

-
-public CTripleSet TRExp(CSubstitutionSet sigma,
-                        CTypeAssumptionSet V,
-                        CSupportData supportData)
-
-
Implementierung des Algorithmus 5.35 von Martin Pl�micke -
Author: J�rg B�uerle -

-

-
Specified by:
TRExp in class Expr
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
-
Specified by:
TRStatement in class Statement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/UnaryExpr.html b/doc/Javadoc/mycompiler/mystatement/UnaryExpr.html deleted file mode 100755 index 29980f5b..00000000 --- a/doc/Javadoc/mycompiler/mystatement/UnaryExpr.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - - -UnaryExpr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class UnaryExpr

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.ExprStmt
-          extended by mycompiler.mystatement.Expr
-              extended by mycompiler.mystatement.UnaryExpr
-
-
-
All Implemented Interfaces:
ITypeReplacementListener
-
-
-
Direct Known Subclasses:
CastExpr, NegativeExpr, NotExpr, PositivExpr, PostDecExpr, PostIncExpr, PreDecExpr, PreIncExpr
-
-
-
-
public abstract class UnaryExpr
extends Expr
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mystatement.Expr
usedid
- - - - - - - -
Fields inherited from class mycompiler.mystatement.ExprStmt
type
-  - - - - - - - - - - -
-Constructor Summary
UnaryExpr() - -
-           
-  - - - - - - - - - - - -
-Method Summary
-abstract  voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Expr
get_Name_Menge, get_Name, get_Type_Menge, get_UsedId, sc_check, set_Type, set_UsedId, TRExp, TRMultiply, TRTuple
- - - - - - - -
Methods inherited from class mycompiler.mystatement.ExprStmt
getType, getTypeLineNumber, getTypeName, replaceType, setType
- - - - - - - -
Methods inherited from class mycompiler.mystatement.Statement
TRStatement
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-UnaryExpr

-
-public UnaryExpr()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public abstract void codegen(ClassFile classfile,
-                             CodeAttribute code,
-                             de.dhbwstuttgart.typeinference.Menge paralist)
-                      throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/UnaryMinus.html b/doc/Javadoc/mycompiler/mystatement/UnaryMinus.html deleted file mode 100755 index f101079e..00000000 --- a/doc/Javadoc/mycompiler/mystatement/UnaryMinus.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - -UnaryMinus - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class UnaryMinus

-
-java.lang.Object
-  extended by mycompiler.mystatement.UnaryMinus
-
-
-
-
public class UnaryMinus
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
UnaryMinus() - -
-           
-  - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - java.lang.String type, - boolean neg) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-UnaryMinus

-
-public UnaryMinus()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    java.lang.String type,
-                    boolean neg)
-             throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/UnaryNot.html b/doc/Javadoc/mycompiler/mystatement/UnaryNot.html deleted file mode 100755 index 33bbce23..00000000 --- a/doc/Javadoc/mycompiler/mystatement/UnaryNot.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - -UnaryNot - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class UnaryNot

-
-java.lang.Object
-  extended by mycompiler.mystatement.UnaryNot
-
-
-
-
public class UnaryNot
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
UnaryNot() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - boolean sw) - -
-           
- voidif_codegen(ClassFile classfile, - CodeAttribute code, - boolean sw) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-UnaryNot

-
-public UnaryNot()
-
-
- - - - - - - - -
-Method Detail
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    boolean sw)
-             throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-if_codegen

-
-public void if_codegen(ClassFile classfile,
-                       CodeAttribute code,
-                       boolean sw)
-                throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/UnaryPlus.html b/doc/Javadoc/mycompiler/mystatement/UnaryPlus.html deleted file mode 100755 index 8beda66e..00000000 --- a/doc/Javadoc/mycompiler/mystatement/UnaryPlus.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - -UnaryPlus - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class UnaryPlus

-
-java.lang.Object
-  extended by mycompiler.mystatement.UnaryPlus
-
-
-
-
public class UnaryPlus
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
UnaryPlus() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-UnaryPlus

-
-public UnaryPlus()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/WhileStmt.html b/doc/Javadoc/mycompiler/mystatement/WhileStmt.html deleted file mode 100755 index 2f89bd4b..00000000 --- a/doc/Javadoc/mycompiler/mystatement/WhileStmt.html +++ /dev/null @@ -1,362 +0,0 @@ - - - - - - -WhileStmt - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mystatement -
-Class WhileStmt

-
-java.lang.Object
-  extended by mycompiler.mystatement.Statement
-      extended by mycompiler.mystatement.WhileStmt
-
-
-
-
public class WhileStmt
extends Statement
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
WhileStmt() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcodegen(ClassFile classfile, - CodeAttribute code, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidloop_codegen(ClassFile classfile, - CodeAttribute code, - int breakpoint, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidset_Expr(Expr exp) - -
-           
- voidset_Loop_block(Statement blk) - -
-           
- CTripleSetTRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.23 von Martin Pl�micke -
Achtung Workaround: RefType "Boolean" muss noch durch BaseType "BooleanType" - ersetzt werden.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-WhileStmt

-
-public WhileStmt()
-
-
- - - - - - - - -
-Method Detail
- -

-set_Expr

-
-public void set_Expr(Expr exp)
-
-
-
-
-
-
- -

-set_Loop_block

-
-public void set_Loop_block(Statement blk)
-
-
-
-
-
-
- -

-codegen

-
-public void codegen(ClassFile classfile,
-                    CodeAttribute code,
-                    de.dhbwstuttgart.typeinference.Menge paralist)
-             throws JVMCodeException
-
-
-
Specified by:
codegen in class Statement
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-loop_codegen

-
-public void loop_codegen(ClassFile classfile,
-                         CodeAttribute code,
-                         int breakpoint,
-                         boolean not,
-                         de.dhbwstuttgart.typeinference.Menge paralist)
-                  throws JVMCodeException
-
-
- -
Throws: -
JVMCodeException
-
-
-
- -

-TRStatement

-
-public CTripleSet TRStatement(CSubstitutionSet sigma,
-                              CTypeAssumptionSet V,
-                              CSupportData supportData)
-
-
Implementierung des Algorithmus 5.23 von Martin Pl�micke -
Achtung Workaround: RefType "Boolean" muss noch durch BaseType "BooleanType" - ersetzt werden. -
Author: J�rg B�uerle -

-

-
Specified by:
TRStatement in class Statement
-
-
-
Parameters:
sigma -
V -
supportData - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/ArgumentList.html b/doc/Javadoc/mycompiler/mystatement/class-use/ArgumentList.html deleted file mode 100755 index 5d68268c..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/ArgumentList.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.ArgumentList - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.ArgumentList

-
- - - - - - - - - -
-Packages that use ArgumentList
mycompiler.mystatement  
-  -

- - - - - -
-Uses of ArgumentList in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type ArgumentList
- voidThis.set_ArgumentList(ArgumentList al) - -
-           
- voidNewClass.set_ArgumentList(ArgumentList al) - -
-           
- voidMethodCall.set_ArgumentList(ArgumentList al) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/Assign.html b/doc/Javadoc/mycompiler/mystatement/class-use/Assign.html deleted file mode 100755 index 48e1caef..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/Assign.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.Assign - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.Assign

-
- - - - - - - - - -
-Packages that use Assign
mycompiler.mybytecode  
-  -

- - - - - -
-Uses of Assign in mycompiler.mybytecode
-  -

- - - - - - - - - -
Methods in mycompiler.mybytecode with parameters of type Assign
- voidClassFile.add_classblock_Element(Assign a) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/Binary.html b/doc/Javadoc/mycompiler/mystatement/class-use/Binary.html deleted file mode 100755 index 26e76944..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/Binary.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.Binary - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.Binary

-
- - - - - - - - - -
-Packages that use Binary
mycompiler.myoperator  
-  -

- - - - - -
-Uses of Binary in mycompiler.myoperator
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.myoperator with parameters of type Binary
- CTripleSetRelOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.49 bis 5.52 von Martin Plümicke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!!
-abstract  CTripleSetOperator.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNotEqualOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.54 von Martin Plümicke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetMulOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Plümicke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!!
- CTripleSetLogOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetEqualOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.53 von Martin Plümicke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" überall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetAddOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.44 und 5.45 von Martin Plümicke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" überall durch den BaseType "IntegerType" ersetzt werden!!!
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/BinaryExpr.html b/doc/Javadoc/mycompiler/mystatement/class-use/BinaryExpr.html deleted file mode 100755 index 7328806a..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/BinaryExpr.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.BinaryExpr - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.BinaryExpr

-
- - - - - - - - - -
-Packages that use BinaryExpr
mycompiler.mystatement  
-  -

- - - - - -
-Uses of BinaryExpr in mycompiler.mystatement
-  -

- - - - - - - - - - - - - -
Subclasses of BinaryExpr in mycompiler.mystatement
- classBinary - -
-           
- classInstanceOf - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/Block.html b/doc/Javadoc/mycompiler/mystatement/class-use/Block.html deleted file mode 100755 index 5dfcd7ce..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/Block.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.Block - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.Block

-
- - - - - - - - - - - - - -
-Packages that use Block
mycompiler.mybytecode  
mycompiler.myclass  
-  -

- - - - - -
-Uses of Block in mycompiler.mybytecode
-  -

- - - - - - - - - -
Methods in mycompiler.mybytecode with parameters of type Block
- voidClassFile.add_method(java.lang.String name, - java.lang.String param_type, - ParameterList param, - Type type, - Block block, - short acc_flag, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-  -

- - - - - -
-Uses of Block in mycompiler.myclass
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.myclass that return Block
- BlockMethod.get_Block() - -
-           
- BlockClass.get_class_block() - -
-           
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.myclass with parameters of type Block
- voidMethod.set_Block(Block blo) - -
-           
- voidClass.set_class_block(Block block) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/BoolLiteral.html b/doc/Javadoc/mycompiler/mystatement/class-use/BoolLiteral.html deleted file mode 100755 index 411b0452..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/BoolLiteral.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.BoolLiteral - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.BoolLiteral

-
-No usage of mycompiler.mystatement.BoolLiteral -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/CastExpr.html b/doc/Javadoc/mycompiler/mystatement/class-use/CastExpr.html deleted file mode 100755 index be0bf50b..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/CastExpr.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.CastExpr - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.CastExpr

-
-No usage of mycompiler.mystatement.CastExpr -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/CharLiteral.html b/doc/Javadoc/mycompiler/mystatement/class-use/CharLiteral.html deleted file mode 100755 index 5956ddcf..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/CharLiteral.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.CharLiteral - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.CharLiteral

-
-No usage of mycompiler.mystatement.CharLiteral -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/EmptyStmt.html b/doc/Javadoc/mycompiler/mystatement/class-use/EmptyStmt.html deleted file mode 100755 index 6eb36847..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/EmptyStmt.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.EmptyStmt - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.EmptyStmt

-
-No usage of mycompiler.mystatement.EmptyStmt -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/Expr.html b/doc/Javadoc/mycompiler/mystatement/class-use/Expr.html deleted file mode 100755 index 782d2f60..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/Expr.html +++ /dev/null @@ -1,876 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.Expr - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.Expr

-
- - - - - - - - - - - - - -
-Packages that use Expr
mycompiler.myoperator  
mycompiler.mystatement  
-  -

- - - - - -
-Uses of Expr in mycompiler.myoperator
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.myoperator with parameters of type Expr
-static voidLogOp.build(ClassFile classfile, - CodeAttribute code, - Expr expr, - de.dhbwstuttgart.typeinference.Menge indices, - boolean not, - boolean ex2, - boolean and, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidTimesOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidPlusOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidOperator.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg_not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidNotEqualOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidModuloOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidMinusOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLogOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLessOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLessEquOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidGreaterOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidGreaterEquOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidEqualOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidDivideOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-abstract  voidAddOp.codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - boolean neg, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLogOp.if_codegen(ClassFile classfile, - CodeAttribute code, - boolean not, - Expr expr, - Statement then_block, - Statement else_block, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidLogOp.loop_codegen(ClassFile classfile, - CodeAttribute code, - Expr expr, - int breakpoint, - boolean not, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-  -

- - - - - -
-Uses of Expr in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subclasses of Expr in mycompiler.mystatement
- classAssign - -
-           
- classBinary - -
-           
- classBinaryExpr - -
-           
- classBoolLiteral - -
-           
- classCastExpr - -
-           
- classCharLiteral - -
-           
- classInstanceOf - -
-           
- classInstVar - -
-           
- classIntLiteral - -
-           
- classLiteral - -
-           
- classLocalOrFieldVar - -
-           
- classMethodCall - -
-           
- classNegativeExpr - -
-           
- classNewArray - -
-           
- classNewClass - -
-           
- classNotExpr - -
-           
- classNull - -
-           
- classPositivExpr - -
-           
- classPostDecExpr - -
-           
- classPostIncExpr - -
-           
- classPreDecExpr - -
-           
- classPreIncExpr - -
-           
- classStringLiteral - -
-           
- classThis - -
-           
- classUnaryExpr - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Fields in mycompiler.mystatement declared as Expr
- ExprIfStmt.expr - -
-           
- ExprBinary.expr1 - -
-           
- ExprAssign.expr1 - -
-           
- ExprBinary.expr2 - -
-           
- ExprAssign.expr2 - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement that return Expr
- ExprReceiver.get_Expr() - -
-           
- ExprNotExpr.get_Expr() - -
-           
- ExprBinary.get_Expr1() - -
-           
- ExprBinary.get_Expr2() - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type Expr
- voidMethodCall.add_Expr(Expr e) - -
-           
- voidWhileStmt.set_Expr(Expr exp) - -
-           
- voidReceiver.set_Expr(Expr express) - -
-           
- voidPreIncExpr.set_Expr(Expr ex) - -
-           
- voidPreDecExpr.set_Expr(Expr ex) - -
-           
- voidPostIncExpr.set_Expr(Expr ex) - -
-           
- voidPostDecExpr.set_Expr(Expr ex) - -
-           
- voidPositivExpr.set_Expr(Expr ex) - -
-           
- voidNotExpr.set_Expr(Expr ex) - -
-           
- voidNegativeExpr.set_Expr(Expr ex) - -
-           
- voidInstanceOf.set_Expr(Expr exp) - -
-           
- voidIfStmt.set_Expr(Expr exp) - -
-           
- voidCastExpr.set_Expr(Expr ex) - -
-           
- voidAssign.set_Expr(Expr expr1, - Expr expr2) - -
-           
- voidBinary.set_Expr1(Expr exp) - -
-           
- voidBinary.set_Expr2(Expr exp) - -
-           
- voidReturn.set_ReturnExpr(Expr ret) - -
-           
- CMultiplyTupleSetExpr.TRMultiply(CMultiplyTuple tuple, - Expr t, - CSupportData supportData) - -
-          (siehe Algorithmus 5.29 TRMultiply, Martin Pl�micke) -
Author: J�rg B�uerle
-  -

- - - - - - - - - -
Method parameters in mycompiler.mystatement with type arguments of type Expr
- CMultiplyTupleSetExpr.TRTuple(CMultiplyTuple result, - de.dhbwstuttgart.typeinference.Menge<Expr> terms, - CSupportData supportData) - -
-          (siehe Algorithmus 5.28 TRTuple, Martin Pl�micke) -
Author: J�rg B�uerle
-  -

- - - - - - - - -
Constructors in mycompiler.mystatement with parameters of type Expr
Receiver(Expr expr) - -
-          Autor: J�rg B�uerle
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/ExprStmt.html b/doc/Javadoc/mycompiler/mystatement/class-use/ExprStmt.html deleted file mode 100755 index 848015f9..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/ExprStmt.html +++ /dev/null @@ -1,421 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.ExprStmt - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.ExprStmt

-
- - - - - - - - - - - - - -
-Packages that use ExprStmt
mycompiler.myclass  
mycompiler.mystatement  
-  -

- - - - - -
-Uses of ExprStmt in mycompiler.myclass
-  -

- - - - - - - - - -
Methods in mycompiler.myclass that return ExprStmt
- ExprStmtDeclId.get_Wert() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.myclass with parameters of type ExprStmt
- voidDeclId.set_Wert(ExprStmt w) - -
-           
-  -

- - - - - -
-Uses of ExprStmt in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subclasses of ExprStmt in mycompiler.mystatement
- classAssign - -
-           
- classBinary - -
-           
- classBinaryExpr - -
-           
- classBoolLiteral - -
-           
- classCastExpr - -
-           
- classCharLiteral - -
-           
- classExpr - -
-           
- classInstanceOf - -
-           
- classInstVar - -
-           
- classIntLiteral - -
-           
- classLiteral - -
-           
- classLocalOrFieldVar - -
-           
- classMethodCall - -
-           
- classNegativeExpr - -
-           
- classNewArray - -
-           
- classNewClass - -
-           
- classNotExpr - -
-           
- classNull - -
-           
- classPositivExpr - -
-           
- classPostDecExpr - -
-           
- classPostIncExpr - -
-           
- classPreDecExpr - -
-           
- classPreIncExpr - -
-           
- classStringLiteral - -
-           
- classThis - -
-           
- classUnaryExpr - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/IfStmt.html b/doc/Javadoc/mycompiler/mystatement/class-use/IfStmt.html deleted file mode 100755 index cb871623..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/IfStmt.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.IfStmt - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.IfStmt

-
-No usage of mycompiler.mystatement.IfStmt -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/InstVar.html b/doc/Javadoc/mycompiler/mystatement/class-use/InstVar.html deleted file mode 100755 index 803e3ed1..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/InstVar.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.InstVar - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.InstVar

-
-No usage of mycompiler.mystatement.InstVar -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/InstanceOf.html b/doc/Javadoc/mycompiler/mystatement/class-use/InstanceOf.html deleted file mode 100755 index 08821e28..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/InstanceOf.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.InstanceOf - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.InstanceOf

-
-No usage of mycompiler.mystatement.InstanceOf -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/IntLiteral.html b/doc/Javadoc/mycompiler/mystatement/class-use/IntLiteral.html deleted file mode 100755 index 481f2b22..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/IntLiteral.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.IntLiteral - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.IntLiteral

-
-No usage of mycompiler.mystatement.IntLiteral -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/Literal.html b/doc/Javadoc/mycompiler/mystatement/class-use/Literal.html deleted file mode 100755 index dc2f9302..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/Literal.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.Literal - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.Literal

-
- - - - - - - - - -
-Packages that use Literal
mycompiler.mystatement  
-  -

- - - - - -
-Uses of Literal in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Subclasses of Literal in mycompiler.mystatement
- classBoolLiteral - -
-           
- classCharLiteral - -
-           
- classIntLiteral - -
-           
- classNull - -
-           
- classStringLiteral - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/LocalOrFieldVar.html b/doc/Javadoc/mycompiler/mystatement/class-use/LocalOrFieldVar.html deleted file mode 100755 index 3fd1d209..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/LocalOrFieldVar.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.LocalOrFieldVar - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.LocalOrFieldVar

-
-No usage of mycompiler.mystatement.LocalOrFieldVar -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/LocalVarDecl.html b/doc/Javadoc/mycompiler/mystatement/class-use/LocalVarDecl.html deleted file mode 100755 index b2698afa..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/LocalVarDecl.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.LocalVarDecl - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.LocalVarDecl

-
-No usage of mycompiler.mystatement.LocalVarDecl -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/MethodCall.html b/doc/Javadoc/mycompiler/mystatement/class-use/MethodCall.html deleted file mode 100755 index 0b6b48a5..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/MethodCall.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.MethodCall - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.MethodCall

-
-No usage of mycompiler.mystatement.MethodCall -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/NegativeExpr.html b/doc/Javadoc/mycompiler/mystatement/class-use/NegativeExpr.html deleted file mode 100755 index b5426e60..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/NegativeExpr.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.NegativeExpr - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.NegativeExpr

-
-No usage of mycompiler.mystatement.NegativeExpr -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/NewArray.html b/doc/Javadoc/mycompiler/mystatement/class-use/NewArray.html deleted file mode 100755 index f4c036f1..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/NewArray.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.NewArray - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.NewArray

-
-No usage of mycompiler.mystatement.NewArray -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/NewClass.html b/doc/Javadoc/mycompiler/mystatement/class-use/NewClass.html deleted file mode 100755 index 45b18777..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/NewClass.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.NewClass - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.NewClass

-
-No usage of mycompiler.mystatement.NewClass -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/NotExpr.html b/doc/Javadoc/mycompiler/mystatement/class-use/NotExpr.html deleted file mode 100755 index 90618835..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/NotExpr.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.NotExpr - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.NotExpr

-
-No usage of mycompiler.mystatement.NotExpr -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/Null.html b/doc/Javadoc/mycompiler/mystatement/class-use/Null.html deleted file mode 100755 index 81a2b14e..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/Null.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.Null - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.Null

-
-No usage of mycompiler.mystatement.Null -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/PositivExpr.html b/doc/Javadoc/mycompiler/mystatement/class-use/PositivExpr.html deleted file mode 100755 index 93462ef3..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/PositivExpr.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.PositivExpr - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.PositivExpr

-
-No usage of mycompiler.mystatement.PositivExpr -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/PostDecExpr.html b/doc/Javadoc/mycompiler/mystatement/class-use/PostDecExpr.html deleted file mode 100755 index bc026e83..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/PostDecExpr.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.PostDecExpr - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.PostDecExpr

-
-No usage of mycompiler.mystatement.PostDecExpr -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/PostIncExpr.html b/doc/Javadoc/mycompiler/mystatement/class-use/PostIncExpr.html deleted file mode 100755 index 51ab72bf..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/PostIncExpr.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.PostIncExpr - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.PostIncExpr

-
-No usage of mycompiler.mystatement.PostIncExpr -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/PreDecExpr.html b/doc/Javadoc/mycompiler/mystatement/class-use/PreDecExpr.html deleted file mode 100755 index d1c1ab7f..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/PreDecExpr.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.PreDecExpr - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.PreDecExpr

-
-No usage of mycompiler.mystatement.PreDecExpr -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/PreIncExpr.html b/doc/Javadoc/mycompiler/mystatement/class-use/PreIncExpr.html deleted file mode 100755 index 2f0233ee..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/PreIncExpr.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.PreIncExpr - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.PreIncExpr

-
-No usage of mycompiler.mystatement.PreIncExpr -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/Receiver.html b/doc/Javadoc/mycompiler/mystatement/class-use/Receiver.html deleted file mode 100755 index e129c73f..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/Receiver.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.Receiver - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.Receiver

-
- - - - - - - - - -
-Packages that use Receiver
mycompiler.mystatement  
-  -

- - - - - -
-Uses of Receiver in mycompiler.mystatement
-  -

- - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type Receiver
- voidMethodCall.set_Receiver(Receiver rec) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/Return.html b/doc/Javadoc/mycompiler/mystatement/class-use/Return.html deleted file mode 100755 index 96768f6e..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/Return.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.Return - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.Return

-
-No usage of mycompiler.mystatement.Return -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/Statement.html b/doc/Javadoc/mycompiler/mystatement/class-use/Statement.html deleted file mode 100755 index 72a37b10..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/Statement.html +++ /dev/null @@ -1,553 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.Statement - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.Statement

-
- - - - - - - - - - - - - -
-Packages that use Statement
mycompiler.myoperator  
mycompiler.mystatement  
-  -

- - - - - -
-Uses of Statement in mycompiler.myoperator
-  -

- - - - - - - - - -
Methods in mycompiler.myoperator with parameters of type Statement
- voidLogOp.if_codegen(ClassFile classfile, - CodeAttribute code, - boolean not, - Expr expr, - Statement then_block, - Statement else_block, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-  -

- - - - - -
-Uses of Statement in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subclasses of Statement in mycompiler.mystatement
- classAssign - -
-           
- classBinary - -
-           
- classBinaryExpr - -
-           
- classBlock - -
-           
- classBoolLiteral - -
-           
- classCastExpr - -
-           
- classCharLiteral - -
-           
- classEmptyStmt - -
-           
- classExpr - -
-           
- classExprStmt - -
-           
- classIfStmt - -
-           
- classInstanceOf - -
-           
- classInstVar - -
-           
- classIntLiteral - -
-           
- classLiteral - -
-           
- classLocalOrFieldVar - -
-           
- classLocalVarDecl - -
-           
- classMethodCall - -
-           
- classNegativeExpr - -
-           
- classNewArray - -
-           
- classNewClass - -
-           
- classNotExpr - -
-           
- classNull - -
-           
- classPositivExpr - -
-           
- classPostDecExpr - -
-           
- classPostIncExpr - -
-           
- classPreDecExpr - -
-           
- classPreIncExpr - -
-           
- classReturn - -
-           
- classStringLiteral - -
-           
- classThis - -
-           
- classUnaryExpr - -
-           
- classWhileStmt - -
-           
-  -

- - - - - - - - - - - - - -
Fields in mycompiler.mystatement declared as Statement
- StatementIfStmt.else_block - -
-           
- StatementIfStmt.then_block - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type Statement
- voidIfStmt.set_Else_block(Statement blk) - -
-           
- voidWhileStmt.set_Loop_block(Statement blk) - -
-           
- voidBlock.set_Statement(Statement s) - -
-           
- voidIfStmt.set_Then_block(Statement blk) - -
-           
-  -

- - - - - - - - - -
Method parameters in mycompiler.mystatement with type arguments of type Statement
- CTripleSetBlock.TRStatements(CSubstitutionSet sigma, - CTypeAssumptionSet V, - de.dhbwstuttgart.typeinference.Menge<Statement> statementList, - int index, - CTypeAssumptionSet V_start, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.19 von Martin Pl�micke -
Author: J�rg B�uerle
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/StringLiteral.html b/doc/Javadoc/mycompiler/mystatement/class-use/StringLiteral.html deleted file mode 100755 index 16e4eb55..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/StringLiteral.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.StringLiteral - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.StringLiteral

-
-No usage of mycompiler.mystatement.StringLiteral -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/This.html b/doc/Javadoc/mycompiler/mystatement/class-use/This.html deleted file mode 100755 index 3a415e4e..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/This.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.This - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.This

-
-No usage of mycompiler.mystatement.This -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/UnaryExpr.html b/doc/Javadoc/mycompiler/mystatement/class-use/UnaryExpr.html deleted file mode 100755 index ceb6572d..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/UnaryExpr.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.UnaryExpr - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.UnaryExpr

-
- - - - - - - - - -
-Packages that use UnaryExpr
mycompiler.mystatement  
-  -

- - - - - -
-Uses of UnaryExpr in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subclasses of UnaryExpr in mycompiler.mystatement
- classCastExpr - -
-           
- classNegativeExpr - -
-           
- classNotExpr - -
-           
- classPositivExpr - -
-           
- classPostDecExpr - -
-           
- classPostIncExpr - -
-           
- classPreDecExpr - -
-           
- classPreIncExpr - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/UnaryMinus.html b/doc/Javadoc/mycompiler/mystatement/class-use/UnaryMinus.html deleted file mode 100755 index 12456e9d..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/UnaryMinus.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.UnaryMinus - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.UnaryMinus

-
- - - - - - - - - -
-Packages that use UnaryMinus
mycompiler.mystatement  
-  -

- - - - - -
-Uses of UnaryMinus in mycompiler.mystatement
-  -

- - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type UnaryMinus
- voidNegativeExpr.set_UnaryMinus(UnaryMinus umin) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/UnaryNot.html b/doc/Javadoc/mycompiler/mystatement/class-use/UnaryNot.html deleted file mode 100755 index ca85c9d3..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/UnaryNot.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.UnaryNot - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.UnaryNot

-
- - - - - - - - - -
-Packages that use UnaryNot
mycompiler.mystatement  
-  -

- - - - - -
-Uses of UnaryNot in mycompiler.mystatement
-  -

- - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type UnaryNot
- voidNotExpr.set_UnaryNot(UnaryNot unot) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/UnaryPlus.html b/doc/Javadoc/mycompiler/mystatement/class-use/UnaryPlus.html deleted file mode 100755 index a0eea870..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/UnaryPlus.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.UnaryPlus - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.UnaryPlus

-
- - - - - - - - - -
-Packages that use UnaryPlus
mycompiler.mystatement  
-  -

- - - - - -
-Uses of UnaryPlus in mycompiler.mystatement
-  -

- - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type UnaryPlus
- voidPositivExpr.set_UnaryPlus(UnaryPlus up) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/class-use/WhileStmt.html b/doc/Javadoc/mycompiler/mystatement/class-use/WhileStmt.html deleted file mode 100755 index 018d0af1..00000000 --- a/doc/Javadoc/mycompiler/mystatement/class-use/WhileStmt.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mystatement.WhileStmt - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mystatement.WhileStmt

-
-No usage of mycompiler.mystatement.WhileStmt -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/package-frame.html b/doc/Javadoc/mycompiler/mystatement/package-frame.html deleted file mode 100755 index bd5d185e..00000000 --- a/doc/Javadoc/mycompiler/mystatement/package-frame.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -mycompiler.mystatement - - - - - - - - - - - -mycompiler.mystatement - - - - -
-Classes  - -
-ArgumentList -
-Assign -
-Binary -
-BinaryExpr -
-Block -
-BoolLiteral -
-CastExpr -
-CharLiteral -
-EmptyStmt -
-Expr -
-ExprStmt -
-IfStmt -
-InstanceOf -
-InstVar -
-IntLiteral -
-Literal -
-LocalOrFieldVar -
-LocalVarDecl -
-MethodCall -
-NegativeExpr -
-NewArray -
-NewClass -
-NotExpr -
-Null -
-PositivExpr -
-PostDecExpr -
-PostIncExpr -
-PreDecExpr -
-PreIncExpr -
-Receiver -
-Return -
-Statement -
-StringLiteral -
-This -
-UnaryExpr -
-UnaryMinus -
-UnaryNot -
-UnaryPlus -
-WhileStmt
- - - - diff --git a/doc/Javadoc/mycompiler/mystatement/package-summary.html b/doc/Javadoc/mycompiler/mystatement/package-summary.html deleted file mode 100755 index 9aa53f38..00000000 --- a/doc/Javadoc/mycompiler/mystatement/package-summary.html +++ /dev/null @@ -1,306 +0,0 @@ - - - - - - -mycompiler.mystatement - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.mystatement -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
ArgumentList 
Assign 
Binary 
BinaryExpr 
Block 
BoolLiteral 
CastExpr 
CharLiteral 
EmptyStmt 
Expr 
ExprStmt 
IfStmt 
InstanceOf 
InstVar 
IntLiteral 
Literal 
LocalOrFieldVar 
LocalVarDecl 
MethodCall 
NegativeExpr 
NewArray 
NewClass 
NotExpr 
Null 
PositivExpr 
PostDecExpr 
PostIncExpr 
PreDecExpr 
PreIncExpr 
Receiver 
Return 
Statement 
StringLiteral 
This 
UnaryExpr 
UnaryMinus 
UnaryNot 
UnaryPlus 
WhileStmt 
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/package-tree.html b/doc/Javadoc/mycompiler/mystatement/package-tree.html deleted file mode 100755 index 8a4821d4..00000000 --- a/doc/Javadoc/mycompiler/mystatement/package-tree.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - -mycompiler.mystatement Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.mystatement -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mystatement/package-use.html b/doc/Javadoc/mycompiler/mystatement/package-use.html deleted file mode 100755 index 989d25e1..00000000 --- a/doc/Javadoc/mycompiler/mystatement/package-use.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - -Uses of Package mycompiler.mystatement - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.mystatement

-
- - - - - - - - - - - - - - - - - - - - - -
-Packages that use mycompiler.mystatement
mycompiler.mybytecode  
mycompiler.myclass  
mycompiler.myoperator  
mycompiler.mystatement  
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mystatement used by mycompiler.mybytecode
Assign - -
-           
Block - -
-           
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mystatement used by mycompiler.myclass
Block - -
-           
ExprStmt - -
-           
-  -

- - - - - - - - - - - - - - -
-Classes in mycompiler.mystatement used by mycompiler.myoperator
Binary - -
-           
Expr - -
-           
Statement - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Classes in mycompiler.mystatement used by mycompiler.mystatement
ArgumentList - -
-           
BinaryExpr - -
-           
Expr - -
-           
ExprStmt - -
-           
Literal - -
-           
Receiver - -
-           
Statement - -
-           
UnaryExpr - -
-           
UnaryMinus - -
-           
UnaryNot - -
-           
UnaryPlus - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytest/CSimpleTest.html b/doc/Javadoc/mycompiler/mytest/CSimpleTest.html deleted file mode 100755 index 2113a07a..00000000 --- a/doc/Javadoc/mycompiler/mytest/CSimpleTest.html +++ /dev/null @@ -1,259 +0,0 @@ - - - - - - -CSimpleTest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytest -
-Class CSimpleTest

-
-java.lang.Object
-  extended by mycompiler.mytest.CSimpleTest
-
-
-
-
public class CSimpleTest
extends java.lang.Object
- - -

-Testklasse für die Compiler-API -

- -

-

-
Version:
-
$Date: 2005/06/28 19:19:10 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
CSimpleTest() - -
-           
-  - - - - - - - - - - - -
-Method Summary
-static voidmain(java.lang.String[] args) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CSimpleTest

-
-public CSimpleTest()
-
-
- - - - - - - - -
-Method Detail
- -

-main

-
-public static void main(java.lang.String[] args)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytest/class-use/CSimpleTest.html b/doc/Javadoc/mycompiler/mytest/class-use/CSimpleTest.html deleted file mode 100755 index 1e02f06a..00000000 --- a/doc/Javadoc/mycompiler/mytest/class-use/CSimpleTest.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytest.CSimpleTest - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytest.CSimpleTest

-
-No usage of mycompiler.mytest.CSimpleTest -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytest/package-frame.html b/doc/Javadoc/mycompiler/mytest/package-frame.html deleted file mode 100755 index f5238ee7..00000000 --- a/doc/Javadoc/mycompiler/mytest/package-frame.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - -mycompiler.mytest - - - - - - - - - - - -mycompiler.mytest - - - - -
-Classes  - -
-CSimpleTest
- - - - diff --git a/doc/Javadoc/mycompiler/mytest/package-summary.html b/doc/Javadoc/mycompiler/mytest/package-summary.html deleted file mode 100755 index ed8560d8..00000000 --- a/doc/Javadoc/mycompiler/mytest/package-summary.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - -mycompiler.mytest - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.mytest -

- - - - - - - - - -
-Class Summary
CSimpleTestTestklasse für die Compiler-API
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytest/package-tree.html b/doc/Javadoc/mycompiler/mytest/package-tree.html deleted file mode 100755 index 10dae096..00000000 --- a/doc/Javadoc/mycompiler/mytest/package-tree.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -mycompiler.mytest Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.mytest -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytest/package-use.html b/doc/Javadoc/mycompiler/mytest/package-use.html deleted file mode 100755 index 0641c7c5..00000000 --- a/doc/Javadoc/mycompiler/mytest/package-use.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Package mycompiler.mytest - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.mytest

-
-No usage of mycompiler.mytest -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/BaseType.html b/doc/Javadoc/mycompiler/mytype/BaseType.html deleted file mode 100755 index 5c4c8c2d..00000000 --- a/doc/Javadoc/mycompiler/mytype/BaseType.html +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - -BaseType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytype -
-Class BaseType

-
-java.lang.Object
-  extended by mycompiler.mytype.Type
-      extended by mycompiler.mytype.BaseType
-
-
-
Direct Known Subclasses:
BooleanType, CharacterType, IntegerType
-
-
-
-
public abstract class BaseType
extends Type
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mytype.Type
hamaDebug, name, used
-  - - - - - - - - - - - - - -
-Constructor Summary
BaseType() - -
-           
BaseType(java.lang.String name) - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-abstract  BaseTypeclone() - -
-          
Author: J�rg B�uerle
- booleanequals(java.lang.Object obj) - -
-          Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class mycompiler.mytype.Type
get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BaseType

-
-public BaseType()
-
-
-
- -

-BaseType

-
-public BaseType(java.lang.String name)
-
-
- - - - - - - - -
-Method Detail
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
Author: J�rg B�uerle
-

-

-
Overrides:
equals in class Type
-
-
-
Parameters:
Object - -
Returns:
-
-
-
- -

-clone

-
-public abstract BaseType clone()
-
-
Description copied from class: Type
-

Author: J�rg B�uerle -

-

-
Overrides:
clone in class Type
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/BooleanType.html b/doc/Javadoc/mycompiler/mytype/BooleanType.html deleted file mode 100755 index 611f6e92..00000000 --- a/doc/Javadoc/mycompiler/mytype/BooleanType.html +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - -BooleanType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytype -
-Class BooleanType

-
-java.lang.Object
-  extended by mycompiler.mytype.Type
-      extended by mycompiler.mytype.BaseType
-          extended by mycompiler.mytype.BooleanType
-
-
-
-
public class BooleanType
extends BaseType
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mytype.Type
hamaDebug, name, used
-  - - - - - - - - - - -
-Constructor Summary
BooleanType() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- BooleanTypeclone() - -
-          
Author: J�rg B�uerle
- booleanequals(java.lang.Object obj) - -
-          Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class mycompiler.mytype.Type
get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BooleanType

-
-public BooleanType()
-
-
- - - - - - - - -
-Method Detail
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
Author: J�rg B�uerle
-

-

-
Overrides:
equals in class BaseType
-
-
-
Parameters:
Object - -
Returns:
-
-
-
- -

-clone

-
-public BooleanType clone()
-
-

Author: J�rg B�uerle -

-

-
Specified by:
clone in class BaseType
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/CharacterType.html b/doc/Javadoc/mycompiler/mytype/CharacterType.html deleted file mode 100755 index 08b29928..00000000 --- a/doc/Javadoc/mycompiler/mytype/CharacterType.html +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - -CharacterType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytype -
-Class CharacterType

-
-java.lang.Object
-  extended by mycompiler.mytype.Type
-      extended by mycompiler.mytype.BaseType
-          extended by mycompiler.mytype.CharacterType
-
-
-
-
public class CharacterType
extends BaseType
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mytype.Type
hamaDebug, name, used
-  - - - - - - - - - - -
-Constructor Summary
CharacterType() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- CharacterTypeclone() - -
-          
Author: J�rg B�uerle
- booleanequals(java.lang.Object obj) - -
-          Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class mycompiler.mytype.Type
get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CharacterType

-
-public CharacterType()
-
-
- - - - - - - - -
-Method Detail
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
Author: J�rg B�uerle
-

-

-
Overrides:
equals in class BaseType
-
-
-
Parameters:
Object - -
Returns:
-
-
-
- -

-clone

-
-public CharacterType clone()
-
-

Author: J�rg B�uerle -

-

-
Specified by:
clone in class BaseType
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/GenericTypeVar.html b/doc/Javadoc/mycompiler/mytype/GenericTypeVar.html deleted file mode 100755 index d4c45402..00000000 --- a/doc/Javadoc/mycompiler/mytype/GenericTypeVar.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - - -GenericTypeVar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytype -
-Class GenericTypeVar

-
-java.lang.Object
-  extended by mycompiler.mytype.Type
-      extended by mycompiler.mytype.GenericTypeVar
-
-
-
-
public class GenericTypeVar
extends Type
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:06 $
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mytype.Type
hamaDebug, name, used
-  - - - - - - - - - - -
-Constructor Summary
GenericTypeVar(java.lang.String s) - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- GenericTypeVarclone() - -
-          
Author: J�rg B�uerle
- booleanequals(java.lang.Object obj) - -
-          
Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class mycompiler.mytype.Type
get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-GenericTypeVar

-
-public GenericTypeVar(java.lang.String s)
-
-
- - - - - - - - -
-Method Detail
- -

-clone

-
-public GenericTypeVar clone()
-
-

Author: J�rg B�uerle -

-

-
Overrides:
clone in class Type
-
-
- -
Returns:
-
-
-
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-

Author: J�rg B�uerle -

-

-
Overrides:
equals in class Type
-
-
-
Parameters:
obj - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/IntegerType.html b/doc/Javadoc/mycompiler/mytype/IntegerType.html deleted file mode 100755 index 0f6b13de..00000000 --- a/doc/Javadoc/mycompiler/mytype/IntegerType.html +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - -IntegerType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytype -
-Class IntegerType

-
-java.lang.Object
-  extended by mycompiler.mytype.Type
-      extended by mycompiler.mytype.BaseType
-          extended by mycompiler.mytype.IntegerType
-
-
-
-
public class IntegerType
extends BaseType
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mytype.Type
hamaDebug, name, used
-  - - - - - - - - - - -
-Constructor Summary
IntegerType() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- IntegerTypeclone() - -
-          
Author: J�rg B�uerle
- booleanequals(java.lang.Object obj) - -
-          Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class mycompiler.mytype.Type
get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-IntegerType

-
-public IntegerType()
-
-
- - - - - - - - -
-Method Detail
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
Author: J�rg B�uerle
-

-

-
Overrides:
equals in class BaseType
-
-
-
Parameters:
Object - -
Returns:
-
-
-
- -

-clone

-
-public IntegerType clone()
-
-

Author: J�rg B�uerle -

-

-
Specified by:
clone in class BaseType
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/Pair.html b/doc/Javadoc/mycompiler/mytype/Pair.html deleted file mode 100755 index afd2c0ea..00000000 --- a/doc/Javadoc/mycompiler/mytype/Pair.html +++ /dev/null @@ -1,540 +0,0 @@ - - - - - - -Pair - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytype -
-Class Pair

-
-java.lang.Object
-  extended by mycompiler.mytype.Pair
-
-
-
-
public class Pair
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - - - - - - - - - - - - - -
-Field Summary
- booleanbEqual - -
-           
- booleanbSubst - -
-           
- TypeTA1 - -
-           
- TypeTA2 - -
-           
-  - - - - - - - - - - - - - - - - -
-Constructor Summary
Pair(Type TA1, - Type TA2) - -
-           
Pair(Type TA1, - Type TA2, - boolean bEqual) - -
-           
Pair(Type TA1, - Type TA2, - boolean bEqual, - boolean bSubst) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- PaircopyPair() - -
-           
-static TypecopyType(Type T) - -
-           
- booleanequals(java.lang.Object obj) - -
-          
Author: J�rg B�uerle
- TypegetTA1Copy() - -
-           
- TypegetTA2Copy() - -
-           
- booleanisEqual() - -
-           
- booleanisInMenge(de.dhbwstuttgart.typeinference.Menge V) - -
-           
- booleanPair_isEquiv(Pair p) - -
-           
- java.lang.StringtoString() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-TA1

-
-public Type TA1
-
-
-
-
-
- -

-TA2

-
-public Type TA2
-
-
-
-
-
- -

-bEqual

-
-public boolean bEqual
-
-
-
-
-
- -

-bSubst

-
-public boolean bSubst
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-Pair

-
-public Pair(Type TA1,
-            Type TA2)
-
-
-
- -

-Pair

-
-public Pair(Type TA1,
-            Type TA2,
-            boolean bEqual)
-
-
-
- -

-Pair

-
-public Pair(Type TA1,
-            Type TA2,
-            boolean bEqual,
-            boolean bSubst)
-
-
- - - - - - - - -
-Method Detail
- -

-toString

-
-public java.lang.String toString()
-
-
-
Overrides:
toString in class java.lang.Object
-
-
-
-
-
-
- -

-isEqual

-
-public boolean isEqual()
-
-
-
-
-
-
- -

-copyType

-
-public static Type copyType(Type T)
-
-
-
-
-
-
- -

-getTA1Copy

-
-public Type getTA1Copy()
-
-
-
-
-
-
- -

-getTA2Copy

-
-public Type getTA2Copy()
-
-
-
-
-
-
- -

-copyPair

-
-public Pair copyPair()
-
-
-
-
-
-
- -

-Pair_isEquiv

-
-public boolean Pair_isEquiv(Pair p)
-
-
-
-
-
-
- -

-isInMenge

-
-public boolean isInMenge(de.dhbwstuttgart.typeinference.Menge V)
-
-
-
-
-
-
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-

Author: J�rg B�uerle -

-

-
Overrides:
equals in class java.lang.Object
-
-
-
Parameters:
obj - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/ParaList.html b/doc/Javadoc/mycompiler/mytype/ParaList.html deleted file mode 100755 index 16bcee90..00000000 --- a/doc/Javadoc/mycompiler/mytype/ParaList.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - -ParaList - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytype -
-Class ParaList

-
-java.lang.Object
-  extended by mycompiler.mytype.ParaList
-
-
-
-
public class ParaList
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
-protected  de.dhbwstuttgart.typeinference.Mengeparalist - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ParaList() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidadd_ParaList(java.lang.Object obj) - -
-           
- java.lang.Objectget_firstElement() - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_ParaList() - -
-           
- de.dhbwstuttgart.typeinference.MengegetParalist() - -
-           
- voidsetParalist(de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-paralist

-
-protected de.dhbwstuttgart.typeinference.Menge paralist
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ParaList

-
-public ParaList()
-
-
- - - - - - - - -
-Method Detail
- -

-get_ParaList

-
-public de.dhbwstuttgart.typeinference.Menge get_ParaList()
-
-
-
-
-
-
- -

-add_ParaList

-
-public void add_ParaList(java.lang.Object obj)
-
-
-
-
-
-
- -

-get_firstElement

-
-public java.lang.Object get_firstElement()
-
-
-
-
-
-
- -

-getParalist

-
-public de.dhbwstuttgart.typeinference.Menge getParalist()
-
-
-
-
-
-
- -

-setParalist

-
-public void setParalist(de.dhbwstuttgart.typeinference.Menge paralist)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/RefType.html b/doc/Javadoc/mycompiler/mytype/RefType.html deleted file mode 100755 index e08137d7..00000000 --- a/doc/Javadoc/mycompiler/mytype/RefType.html +++ /dev/null @@ -1,599 +0,0 @@ - - - - - - -RefType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytype -
-Class RefType

-
-java.lang.Object
-  extended by mycompiler.mytype.Type
-      extended by mycompiler.mytype.RefType
-
-
-
Direct Known Subclasses:
Void
-
-
-
-
public class RefType
extends Type
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mytype.Type
hamaDebug, name, used
-  - - - - - - - - - - - - - - - - - - - -
-Constructor Summary
RefType() - -
-           
RefType(RefType R) - -
-           
RefType(java.lang.String s) - -
-           
RefType(java.lang.String s, - de.dhbwstuttgart.typeinference.Menge parameter) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidadd_Parameter(java.lang.Object o) - -
-           
- RefTypeclone() - -
-          
Author: J�rg B�uerle
- booleanequals(java.lang.Object obj) - -
-          Author: J�rg B�uerle
- booleanEquiv2Equal(RefType ty2, - java.util.Hashtable ht) - -
-           
- de.dhbwstuttgart.typeinference.Mengeget_ParaList() - -
-           
- java.lang.StringgetName() - -
-           
- java.lang.StringgetParaN(int n) - -
-           
- java.lang.StringgetTypeName() - -
-           
- booleanis_Equiv(RefType ty2, - java.util.Hashtable ht) - -
-           
- booleanisTV(int n) - -
-           
- voidset_ParaList(de.dhbwstuttgart.typeinference.Menge v) - -
-           
- voidsetName(java.lang.String name) - -
-           
- java.lang.StringType2Key() - -
-           
- java.lang.StringType2String() - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mytype.Type
get_codegen_Type, get_Name, get_UsedId, set_UsedId, toString
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-RefType

-
-public RefType()
-
-
-
- -

-RefType

-
-public RefType(java.lang.String s)
-
-
-
- -

-RefType

-
-public RefType(java.lang.String s,
-               de.dhbwstuttgart.typeinference.Menge parameter)
-
-
-
- -

-RefType

-
-public RefType(RefType R)
-
-
- - - - - - - - -
-Method Detail
- -

-Type2Key

-
-public java.lang.String Type2Key()
-
-
-
Overrides:
Type2Key in class Type
-
-
-
-
-
-
- -

-Type2String

-
-public java.lang.String Type2String()
-
-
-
Overrides:
Type2String in class Type
-
-
-
-
-
-
- -

-setName

-
-public void setName(java.lang.String name)
-
-
-
-
-
-
- -

-getName

-
-public java.lang.String getName()
-
-
-
Overrides:
getName in class Type
-
-
-
-
-
-
- -

-set_ParaList

-
-public void set_ParaList(de.dhbwstuttgart.typeinference.Menge v)
-
-
-
-
-
-
- -

-get_ParaList

-
-public de.dhbwstuttgart.typeinference.Menge get_ParaList()
-
-
-
-
-
-
- -

-add_Parameter

-
-public void add_Parameter(java.lang.Object o)
-
-
-
-
-
-
- -

-getTypeName

-
-public java.lang.String getTypeName()
-
-
-
-
-
-
- -

-getParaN

-
-public java.lang.String getParaN(int n)
-                          throws SCException
-
-
- -
Throws: -
SCException
-
-
-
- -

-isTV

-
-public boolean isTV(int n)
-
-
-
-
-
-
- -

-is_Equiv

-
-public boolean is_Equiv(RefType ty2,
-                        java.util.Hashtable ht)
-
-
-
-
-
-
- -

-Equiv2Equal

-
-public boolean Equiv2Equal(RefType ty2,
-                           java.util.Hashtable ht)
-
-
-
-
-
-
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
Author: J�rg B�uerle
-

-

-
Overrides:
equals in class Type
-
-
-
Parameters:
Object - -
Returns:
-
-
-
- -

-clone

-
-public RefType clone()
-
-
Description copied from class: Type
-

Author: J�rg B�uerle -

-

-
Overrides:
clone in class Type
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/ReturnType.html b/doc/Javadoc/mycompiler/mytype/ReturnType.html deleted file mode 100755 index 6ae00aa0..00000000 --- a/doc/Javadoc/mycompiler/mytype/ReturnType.html +++ /dev/null @@ -1,308 +0,0 @@ - - - - - - -ReturnType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytype -
-Class ReturnType

-
-java.lang.Object
-  extended by mycompiler.mytype.Type
-      extended by mycompiler.mytype.ReturnType
-
-
-
-
public class ReturnType
extends Type
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mytype.Type
hamaDebug, name, used
-  - - - - - - - - - - -
-Constructor Summary
ReturnType() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- ReturnTypeclone() - -
-          
Author: J�rg B�uerle
- booleanequals(java.lang.Object obj) - -
-          Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class mycompiler.mytype.Type
get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-ReturnType

-
-public ReturnType()
-
-
- - - - - - - - -
-Method Detail
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
Author: J�rg B�uerle
-

-

-
Overrides:
equals in class Type
-
-
-
Parameters:
Object - -
Returns:
-
-
-
- -

-clone

-
-public ReturnType clone()
-
-

Author: J�rg B�uerle -

-

-
Overrides:
clone in class Type
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/Type.html b/doc/Javadoc/mycompiler/mytype/Type.html deleted file mode 100755 index 97f79e21..00000000 --- a/doc/Javadoc/mycompiler/mytype/Type.html +++ /dev/null @@ -1,527 +0,0 @@ - - - - - - -Type - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytype -
-Class Type

-
-java.lang.Object
-  extended by mycompiler.mytype.Type
-
-
-
Direct Known Subclasses:
BaseType, GenericTypeVar, RefType, ReturnType, TyploseVariable
-
-
-
-
public class Type
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - - - - - - - - - -
-Field Summary
- booleanhamaDebug - -
-           
-protected  java.lang.Stringname - -
-           
-protected  UsedIdused - -
-           
-  - - - - - - - - - - - - - -
-Constructor Summary
Type() - -
-           
Type(java.lang.String s) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- Typeclone() - -
-          
Author: J�rg B�uerle
- booleanequals(java.lang.Object obj) - -
-          Author: J�rg B�uerle
- java.lang.Stringget_codegen_Type(de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- java.lang.Stringget_Name() - -
-           
- UsedIdget_UsedId() - -
-           
- java.lang.StringgetName() - -
-           
- voidset_UsedId(UsedId uid) - -
-           
- java.lang.StringtoString() - -
-          
Author: J�rg B�uerle
- java.lang.StringType2Key() - -
-           
- java.lang.StringType2String() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-hamaDebug

-
-public boolean hamaDebug
-
-
-
-
-
- -

-name

-
-protected java.lang.String name
-
-
-
-
-
- -

-used

-
-protected UsedId used
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-Type

-
-public Type(java.lang.String s)
-
-
-
- -

-Type

-
-public Type()
-
-
- - - - - - - - -
-Method Detail
- -

-set_UsedId

-
-public void set_UsedId(UsedId uid)
-
-
-
-
-
-
- -

-get_UsedId

-
-public UsedId get_UsedId()
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
-
-
-
- -

-get_codegen_Type

-
-public java.lang.String get_codegen_Type(de.dhbwstuttgart.typeinference.Menge paralist)
-
-
-
-
-
-
- -

-Type2String

-
-public java.lang.String Type2String()
-
-
-
-
-
-
- -

-Type2Key

-
-public java.lang.String Type2Key()
-
-
-
-
-
-
- -

-getName

-
-public java.lang.String getName()
-
-
-
-
-
-
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
Author: J�rg B�uerle
-

-

-
Overrides:
equals in class java.lang.Object
-
-
-
Parameters:
Object - -
Returns:
-
-
-
- -

-clone

-
-public Type clone()
-
-

Author: J�rg B�uerle -

-

-
Overrides:
clone in class java.lang.Object
-
-
- -
Returns:
-
-
-
- -

-toString

-
-public java.lang.String toString()
-
-

Author: J�rg B�uerle -

-

-
Overrides:
toString in class java.lang.Object
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/TyploseVariable.html b/doc/Javadoc/mycompiler/mytype/TyploseVariable.html deleted file mode 100755 index 32acf65a..00000000 --- a/doc/Javadoc/mycompiler/mytype/TyploseVariable.html +++ /dev/null @@ -1,661 +0,0 @@ - - - - - - -TyploseVariable - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytype -
-Class TyploseVariable

-
-java.lang.Object
-  extended by mycompiler.mytype.Type
-      extended by mycompiler.mytype.TyploseVariable
-
-
-
All Implemented Interfaces:
IReplaceTypeEventProvider
-
-
-
-
public class TyploseVariable
extends Type
implements IReplaceTypeEventProvider
- - -

-Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben Typ. - Jede TyploseVariable besitzt einen eindeutigen Namen aus einem Namenspool und - ist in einer zentralen Registry, d.h. einer Hashtable abgelegt. -

- -

-

-
Version:
-
$Date: 2005/06/28 19:19:06 $
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mytype.Type
hamaDebug, name, used
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidaddReplacementListener(ITypeReplacementListener listener) - -
-          
Author: J�rg B�uerle
-static TyploseVariablebackdoorCreate(java.lang.String name) - -
-          Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, - zum Erzeugen einer TyplosenVariable, die nicht in der zentralen Registry eingetragen - wird.
-static TyploseVariablebackdoorFresh() - -
-          Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, - um neue typlose Variablen zu erzeugen.
- voidbackdoorSetName(java.lang.String varName) - -
-          Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, - um den Namen einer typlosen Variablen zu ver�ndern.
- TyploseVariableclone() - -
-          Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die Registrierung neuer - Listener �ber die zentrale Instanz in der Registry laufen muss.
- booleancontainsListener(ITypeReplacementListener listener) - -
-          
Author: J�rg B�uerle
-static voiddeleteRegistry() - -
-          L�scht die komplette Registry von TyplosenVariablen.
- booleanequals(java.lang.Object obj) - -
-          Author: J�rg B�uerle
- voidfireReplaceTypeEvent(CReplaceTypeEvent e) - -
-          
Author: J�rg B�uerle
-static TyploseVariablefresh() - -
-          Erzeugt eine neue TyploseVariable mit einem eindeutigen Namen.
-static TyploseVariablegetInstance(java.lang.String name) - -
-          Statische Methode, um einen typlose Variable aus der Registry zu holen.
- de.dhbwstuttgart.typeinference.Menge<java.lang.Integer>getLineNumbers() - -
-           
- java.util.Iterator<ITypeReplacementListener>getReplacementListeners() - -
-          
Author: J�rg B�uerle
- voidremoveAllReplacementListeners() - -
-          
Author: J�rg B�uerle
- voidremoveReplacementListener(ITypeReplacementListener listener) - -
-          
Author: J�rg B�uerle
- voidreplaceWithType(Type newType) - -
-          Diese Methode geht alle TypeReplacmentListener durch und tauscht �ber deren - Callback-Methode diesen Typ gegen den neuen aus.
- - - - - - - -
Methods inherited from class mycompiler.mytype.Type
get_codegen_Type, get_Name, get_UsedId, getName, set_UsedId, toString, Type2Key, Type2String
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static TyploseVariable getInstance(java.lang.String name)
-
-
Statische Methode, um einen typlose Variable aus der Registry zu holen. -
Author: J�rg B�uerle -

-

-
-
-
-
Parameters:
name - Der Name der typlosen Variablen -
Returns:
Die typlose Variable oder null, falls sie nicht in der Registry - existiert
-
-
-
- -

-fresh

-
-public static TyploseVariable fresh()
-
-
Erzeugt eine neue TyploseVariable mit einem eindeutigen Namen. Die - erzeugte Instanz ist die einzig im Syntaxbaum existierende Instanz dieser Variablen. -
Author: J�rg B�uerle -

-

-
-
-
- -
Returns:
Die TyploseVariable
-
-
-
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
Author: J�rg B�uerle
-

-

-
Overrides:
equals in class Type
-
-
-
Parameters:
Object - -
Returns:
-
-
-
- -

-addReplacementListener

-
-public void addReplacementListener(ITypeReplacementListener listener)
-
-

Author: J�rg B�uerle -

-

-
Specified by:
addReplacementListener in interface IReplaceTypeEventProvider
-
-
-
Parameters:
listener -
-
-
-
- -

-containsListener

-
-public boolean containsListener(ITypeReplacementListener listener)
-
-

Author: J�rg B�uerle -

-

-
Specified by:
containsListener in interface IReplaceTypeEventProvider
-
-
-
Parameters:
listener - -
Returns:
-
-
-
- -

-removeReplacementListener

-
-public void removeReplacementListener(ITypeReplacementListener listener)
-
-

Author: J�rg B�uerle -

-

-
Specified by:
removeReplacementListener in interface IReplaceTypeEventProvider
-
-
-
Parameters:
listener -
-
-
-
- -

-removeAllReplacementListeners

-
-public void removeAllReplacementListeners()
-
-

Author: J�rg B�uerle -

-

-
Specified by:
removeAllReplacementListeners in interface IReplaceTypeEventProvider
-
-
-
-
-
-
- -

-fireReplaceTypeEvent

-
-public void fireReplaceTypeEvent(CReplaceTypeEvent e)
-
-

Author: J�rg B�uerle -

-

-
Specified by:
fireReplaceTypeEvent in interface IReplaceTypeEventProvider
-
-
-
Parameters:
e -
-
-
-
- -

-getReplacementListeners

-
-public java.util.Iterator<ITypeReplacementListener> getReplacementListeners()
-
-

Author: J�rg B�uerle -

-

-
Specified by:
getReplacementListeners in interface IReplaceTypeEventProvider
-
-
- -
Returns:
-
-
-
- -

-replaceWithType

-
-public void replaceWithType(Type newType)
-
-
Diese Methode geht alle TypeReplacmentListener durch und tauscht �ber deren - Callback-Methode diesen Typ gegen den neuen aus. -
Author: J�rg B�uerle -

-

-
-
-
-
Parameters:
newType -
-
-
-
- -

-getLineNumbers

-
-public de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> getLineNumbers()
-
-
-
-
-
-
-
-
-
- -

-deleteRegistry

-
-public static void deleteRegistry()
-
-
L�scht die komplette Registry von TyplosenVariablen. Sollte nur und ausschlie�lich von - MyCompiler.init() aufgerufen werden!!! -
Author: J�rg B�uerle -

-

-
-
-
-
-
-
-
- -

-clone

-
-public TyploseVariable clone()
-
-
Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die Registrierung neuer - Listener �ber die zentrale Instanz in der Registry laufen muss.
- Diese Methode erzeugt eine Kopie dieser zentralen Instanz. Listener, die sich �ber diese Kopie - registrieren, werden sp�ter nicht �ber Status�nderungen benachrichtigt, d.h. ihre TyplosenVariablen - werden nicht substituiert. -
Author: J�rg B�uerle -

-

-
Overrides:
clone in class Type
-
-
- -
Returns:
-
-
-
- -

-backdoorFresh

-
-public static TyploseVariable backdoorFresh()
-
-
Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, - um neue typlose Variablen zu erzeugen. Die erzeugten Variablen werden nicht registriert und - sind v�llig losgel�st vom abstrakten Syntaxbaum. -
Author: J�rg B�uerle -

-

-
-
-
- -
Returns:
Eine neue TyploseVariable
-
-
-
- -

-backdoorSetName

-
-public void backdoorSetName(java.lang.String varName)
-
-
Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, - um den Namen einer typlosen Variablen zu ver�ndern.
- ACHTUNG: Diese TyploseVariable darf nicht Teil des abstrakten Syntaxbaumes sein!!! - Es muss sicher gestellt werden, dass die betreffende TyploseVariable nicht �ber die Methode - fresh(), sondern �ber backdoorCreate() oder backdoorClone() - erzeugt worden ist. -
Author: J�rg B�uerle -

-

-
-
-
-
Parameters:
varName - Der Name der zu erzeugenden TyplosenVariable
-
-
-
- -

-backdoorCreate

-
-public static TyploseVariable backdoorCreate(java.lang.String name)
-
-
Backdoor-Hilfsfunktion, die f�r makeFC() und unify() ben�tigt wird, - zum Erzeugen einer TyplosenVariable, die nicht in der zentralen Registry eingetragen - wird. Die erzeugte Variablen ist somit v�llig losgel�st vom abstrakten Syntaxbaum. -
Author: J�rg B�uerle -

-

-
-
-
-
Parameters:
name - -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/Void.html b/doc/Javadoc/mycompiler/mytype/Void.html deleted file mode 100755 index 6e790507..00000000 --- a/doc/Javadoc/mycompiler/mytype/Void.html +++ /dev/null @@ -1,359 +0,0 @@ - - - - - - -Void - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytype -
-Class Void

-
-java.lang.Object
-  extended by mycompiler.mytype.Type
-      extended by mycompiler.mytype.RefType
-          extended by mycompiler.mytype.Void
-
-
-
-
public class Void
extends RefType
- - -

-


- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mytype.Type
hamaDebug, used
-  - - - - - - - - - - -
-Constructor Summary
Void() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- Voidclone() - -
-          
Author: J�rg B�uerle
- booleanequals(java.lang.Object obj) - -
-          Author: J�rg B�uerle
- java.lang.Stringget_Name() - -
-           
- voidset_Name(java.lang.String nam) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mytype.RefType
add_Parameter, Equiv2Equal, get_ParaList, getName, getParaN, getTypeName, is_Equiv, isTV, set_ParaList, setName, Type2Key, Type2String
- - - - - - - -
Methods inherited from class mycompiler.mytype.Type
get_codegen_Type, get_UsedId, set_UsedId, toString
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Void

-
-public Void()
-
-
- - - - - - - - -
-Method Detail
- -

-set_Name

-
-public void set_Name(java.lang.String nam)
-
-
-
-
-
-
- -

-get_Name

-
-public java.lang.String get_Name()
-
-
-
Overrides:
get_Name in class Type
-
-
-
-
-
-
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
Author: J�rg B�uerle
-

-

-
Overrides:
equals in class RefType
-
-
-
Parameters:
Object - -
Returns:
-
-
-
- -

-clone

-
-public Void clone()
-
-

Author: J�rg B�uerle -

-

-
Overrides:
clone in class RefType
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/class-use/BaseType.html b/doc/Javadoc/mycompiler/mytype/class-use/BaseType.html deleted file mode 100755 index 0180235d..00000000 --- a/doc/Javadoc/mycompiler/mytype/class-use/BaseType.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytype.BaseType - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytype.BaseType

-
- - - - - - - - - -
-Packages that use BaseType
mycompiler.mytype  
-  -

- - - - - -
-Uses of BaseType in mycompiler.mytype
-  -

- - - - - - - - - - - - - - - - - -
Subclasses of BaseType in mycompiler.mytype
- classBooleanType - -
-           
- classCharacterType - -
-           
- classIntegerType - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytype that return BaseType
-abstract  BaseTypeBaseType.clone() - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/class-use/BooleanType.html b/doc/Javadoc/mycompiler/mytype/class-use/BooleanType.html deleted file mode 100755 index 71f8b217..00000000 --- a/doc/Javadoc/mycompiler/mytype/class-use/BooleanType.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytype.BooleanType - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytype.BooleanType

-
- - - - - - - - - -
-Packages that use BooleanType
mycompiler.mytype  
-  -

- - - - - -
-Uses of BooleanType in mycompiler.mytype
-  -

- - - - - - - - - -
Methods in mycompiler.mytype that return BooleanType
- BooleanTypeBooleanType.clone() - -
-          
Author: Jörg Bäuerle
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/class-use/CharacterType.html b/doc/Javadoc/mycompiler/mytype/class-use/CharacterType.html deleted file mode 100755 index fb90da2f..00000000 --- a/doc/Javadoc/mycompiler/mytype/class-use/CharacterType.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytype.CharacterType - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytype.CharacterType

-
- - - - - - - - - -
-Packages that use CharacterType
mycompiler.mytype  
-  -

- - - - - -
-Uses of CharacterType in mycompiler.mytype
-  -

- - - - - - - - - -
Methods in mycompiler.mytype that return CharacterType
- CharacterTypeCharacterType.clone() - -
-          
Author: Jörg Bäuerle
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/class-use/GenericTypeVar.html b/doc/Javadoc/mycompiler/mytype/class-use/GenericTypeVar.html deleted file mode 100755 index d53a5086..00000000 --- a/doc/Javadoc/mycompiler/mytype/class-use/GenericTypeVar.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytype.GenericTypeVar - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytype.GenericTypeVar

-
- - - - - - - - - - - - - -
-Packages that use GenericTypeVar
mycompiler.mytype  
mycompiler.mytypereconstruction  
-  -

- - - - - -
-Uses of GenericTypeVar in mycompiler.mytype
-  -

- - - - - - - - - -
Methods in mycompiler.mytype that return GenericTypeVar
- GenericTypeVarGenericTypeVar.clone() - -
-          
Author: J�rg B�uerle
-  -

- - - - - -
-Uses of GenericTypeVar in mycompiler.mytypereconstruction
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return types with arguments of type GenericTypeVar
- java.util.Hashtable<java.lang.String,de.dhbwstuttgart.typeinference.Menge<GenericTypeVar>>CTypeReconstructionResult.getGenericsTable() - -
-           
-  -

- - - - - - - - - -
Method parameters in mycompiler.mytypereconstruction with type arguments of type GenericTypeVar
- voidCTypeReconstructionResult.addGenericTypeVars(java.lang.String className, - de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> typeVarList) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/class-use/IntegerType.html b/doc/Javadoc/mycompiler/mytype/class-use/IntegerType.html deleted file mode 100755 index dac19201..00000000 --- a/doc/Javadoc/mycompiler/mytype/class-use/IntegerType.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytype.IntegerType - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytype.IntegerType

-
- - - - - - - - - -
-Packages that use IntegerType
mycompiler.mytype  
-  -

- - - - - -
-Uses of IntegerType in mycompiler.mytype
-  -

- - - - - - - - - -
Methods in mycompiler.mytype that return IntegerType
- IntegerTypeIntegerType.clone() - -
-          
Author: Jörg Bäuerle
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/class-use/Pair.html b/doc/Javadoc/mycompiler/mytype/class-use/Pair.html deleted file mode 100755 index 4bba3729..00000000 --- a/doc/Javadoc/mycompiler/mytype/class-use/Pair.html +++ /dev/null @@ -1,427 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytype.Pair - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytype.Pair

-
- - - - - - - - - - - - - - - - - - - - - -
-Packages that use Pair
mycompiler.mytype  
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.set  
mycompiler.mytypereconstruction.unify  
-  -

- - - - - -
-Uses of Pair in mycompiler.mytype
-  -

- - - - - - - - - -
Methods in mycompiler.mytype that return Pair
- PairPair.copyPair() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytype with parameters of type Pair
- booleanPair.Pair_isEquiv(Pair p) - -
-           
-  -

- - - - - -
-Uses of Pair in mycompiler.mytypereconstruction
-  -

- - - - - - - - -
Constructors in mycompiler.mytypereconstruction with parameters of type Pair
CSubstitution(Pair unifier) - -
-           
-  -

- - - - - -
-Uses of Pair in mycompiler.mytypereconstruction.set
-  -

- - - - - - - - -
Constructor parameters in mycompiler.mytypereconstruction.set with type arguments of type Pair
CSubstitutionSet(de.dhbwstuttgart.typeinference.Menge<Pair> unifiers) - -
-           
-  -

- - - - - -
-Uses of Pair in mycompiler.mytypereconstruction.unify
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.unify that return Pair
-static PairUnify.isInFC(RefType R1, - RefType R2, - de.dhbwstuttgart.typeinference.Menge FC) - -
-           
-static PairUnify.isInFCrechtsUnify(RefType RT1, - RefType RT2, - FC_TTO fc_tto) - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.unify that return types with arguments of type Pair
-static de.dhbwstuttgart.typeinference.Menge<Pair>Unify.copyMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> vp) - -
-           
- de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>Unify.copyMengeMengePair(de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> vp) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>Unify.instanceSmaller(Pair P, - FC_TTO fc_tto) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<Pair>Unify.SubstHashtable2MengePair(java.util.Hashtable ht) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>Unify.unify(Type ty1, - Type ty2, - FC_TTO fc_tto) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>Unify.unify(de.dhbwstuttgart.typeinference.Menge<Pair> E, - FC_TTO fc_tto) - -
-           
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.unify with parameters of type Pair
-static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>Unify.instanceSmaller(Pair P, - FC_TTO fc_tto) - -
-           
-static voidUnify.Subst(Pair P, - int nTypnrInPair, - TyploseVariable a, - Type o, - boolean bMitVorbedingung) - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Method parameters in mycompiler.mytypereconstruction.unify with type arguments of type Pair
-static de.dhbwstuttgart.typeinference.Menge<Pair>Unify.copyMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> vp) - -
-           
- de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>Unify.copyMengeMengePair(de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> vp) - -
-           
-static voidUnify.printMengeUnifier(java.lang.String strMenge, - de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Uni, - int nDebug) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>Unify.unify(de.dhbwstuttgart.typeinference.Menge<Pair> E, - FC_TTO fc_tto) - -
-           
-static java.util.HashtableUnify.MengePair2SubstHashtableMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> v) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/class-use/ParaList.html b/doc/Javadoc/mycompiler/mytype/class-use/ParaList.html deleted file mode 100755 index 66c706d5..00000000 --- a/doc/Javadoc/mycompiler/mytype/class-use/ParaList.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytype.ParaList - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytype.ParaList

-
-No usage of mycompiler.mytype.ParaList -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/class-use/RefType.html b/doc/Javadoc/mycompiler/mytype/class-use/RefType.html deleted file mode 100755 index 291d70e1..00000000 --- a/doc/Javadoc/mycompiler/mytype/class-use/RefType.html +++ /dev/null @@ -1,421 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytype.RefType - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytype.RefType

-
- - - - - - - - - - - - - - - - - - - - - -
-Packages that use RefType
mycompiler.myclass  
mycompiler.mystatement  
mycompiler.mytype  
mycompiler.mytypereconstruction.unify  
-  -

- - - - - -
-Uses of RefType in mycompiler.myclass
-  -

- - - - - - - - - -
Methods in mycompiler.myclass with parameters of type RefType
- voidExceptionList.set_addElem(RefType rety) - -
-           
-  -

- - - - - -
-Uses of RefType in mycompiler.mystatement
-  -

- - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type RefType
- voidInstanceOf.set_Type(RefType typ) - -
-           
-  -

- - - - - -
-Uses of RefType in mycompiler.mytype
-  -

- - - - - - - - - -
Subclasses of RefType in mycompiler.mytype
- classVoid - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytype that return RefType
- RefTypeRefType.clone() - -
-           
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytype with parameters of type RefType
- booleanRefType.Equiv2Equal(RefType ty2, - java.util.Hashtable ht) - -
-           
- booleanRefType.is_Equiv(RefType ty2, - java.util.Hashtable ht) - -
-           
-  -

- - - - - - - - -
Constructors in mycompiler.mytype with parameters of type RefType
RefType(RefType R) - -
-           
-  -

- - - - - -
-Uses of RefType in mycompiler.mytypereconstruction.unify
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.unify that return types with arguments of type RefType
-static de.dhbwstuttgart.typeinference.Menge<RefType>Unify.allGreater(RefType ty, - de.dhbwstuttgart.typeinference.Menge FC) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<RefType>Unify.allSmaller(RefType ty, - de.dhbwstuttgart.typeinference.Menge FC) - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.unify with parameters of type RefType
-static de.dhbwstuttgart.typeinference.Menge<RefType>Unify.allGreater(RefType ty, - de.dhbwstuttgart.typeinference.Menge FC) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<RefType>Unify.allSmaller(RefType ty, - de.dhbwstuttgart.typeinference.Menge FC) - -
-           
-static PairUnify.isInFC(RefType R1, - RefType R2, - de.dhbwstuttgart.typeinference.Menge FC) - -
-           
-static PairUnify.isInFCrechtsUnify(RefType RT1, - RefType RT2, - FC_TTO fc_tto) - -
-           
-static booleanUnify.isRXSimilarRY(RefType RFC, - RefType RY) - -
-           
-static booleanUnify.isTVinRefType(TyploseVariable TV, - RefType RT) - -
-           
-static java.util.HashtableUnify.match(RefType FCtype, - RefType tomatch, - java.util.Hashtable ht) - -
-           
-static voidUnify.SubstHashtable(RefType typterm, - java.util.Hashtable ht) - -
-           
-static voidUnify.varSubst(RefType typterm, - java.util.Hashtable ht) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/class-use/ReturnType.html b/doc/Javadoc/mycompiler/mytype/class-use/ReturnType.html deleted file mode 100755 index b7eff0c5..00000000 --- a/doc/Javadoc/mycompiler/mytype/class-use/ReturnType.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytype.ReturnType - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytype.ReturnType

-
- - - - - - - - - -
-Packages that use ReturnType
mycompiler.mytype  
-  -

- - - - - -
-Uses of ReturnType in mycompiler.mytype
-  -

- - - - - - - - - -
Methods in mycompiler.mytype that return ReturnType
- ReturnTypeReturnType.clone() - -
-          
Author: Jörg Bäuerle
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/class-use/Type.html b/doc/Javadoc/mycompiler/mytype/class-use/Type.html deleted file mode 100755 index 044ff29c..00000000 --- a/doc/Javadoc/mycompiler/mytype/class-use/Type.html +++ /dev/null @@ -1,1029 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytype.Type - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytype.Type

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use Type
mycompiler.mybytecode  
mycompiler.myclass  
mycompiler.mystatement  
mycompiler.mytype  
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.replacementlistener  
mycompiler.mytypereconstruction.typeassumption  
mycompiler.mytypereconstruction.unify  
-  -

- - - - - -
-Uses of Type in mycompiler.mybytecode
-  -

- - - - - - - - - -
Methods in mycompiler.mybytecode that return Type
- TypeCodeAttribute.get_TypeOf_Var(java.lang.String name) - -
-           
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mybytecode with parameters of type Type
- voidCodeAttribute.add_local(java.lang.String s, - Type t) - -
-           
- voidClassFile.add_method(java.lang.String name, - java.lang.String param_type, - ParameterList param, - Type type, - Block block, - short acc_flag, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
-  -

- - - - - -
-Uses of Type in mycompiler.myclass
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler.myclass that return Type
- TypeMethod.getReturnType() - -
-           
- TypeInstVarDecl.getType() - -
-           
- TypeFormalParameter.getType() - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.myclass with parameters of type Type
- voidDeclId.codegen_InstVarDecl(ClassFile classfile, - Type type, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- voidDeclId.codegen_LocalVarDecl(ClassFile classfile, - CodeAttribute code, - Type type, - de.dhbwstuttgart.typeinference.Menge paralist) - -
-           
- booleanClassBody.is_declared(Type t, - de.dhbwstuttgart.typeinference.Menge classlist) - -
-           
- voidDeclId.set_ListType(Type t) - -
-           
- voidMethod.setReturnType(Type type) - -
-          
Author: J�rg B�uerle
- voidInstVarDecl.setType(Type t) - -
-          
Author: J�rg B�uerle
- voidFormalParameter.setType(Type t) - -
-          
Author: J�rg B�uerle
-  -

- - - - - -
-Uses of Type in mycompiler.mystatement
-  -

- - - - - - - - - -
Fields in mycompiler.mystatement declared as Type
-protected  TypeExprStmt.type - -
-           
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement that return Type
- TypeNewArray.getType() - -
-          Author: J�rg B�uerle
- TypeLocalVarDecl.getType() - -
-           
- TypeExprStmt.getType() - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type Type
- voidLocalVarDecl.check_anz(Type type, - de.dhbwstuttgart.typeinference.Menge paralist, - de.dhbwstuttgart.typeinference.Menge classlist) - -
-           
- voidLocalVarDecl.is_declared(Type t, - de.dhbwstuttgart.typeinference.Menge classlist) - -
-           
- voidExpr.set_Type(Type type) - -
-           
- voidCastExpr.set_Type(Type ty) - -
-           
- voidNewArray.setType(Type type) - -
-          Author: J�rg B�uerle
- voidLocalVarDecl.setType(Type t) - -
-           
- voidExprStmt.setType(Type t) - -
-          
Author: J�rg B�uerle
-  -

- - - - - -
-Uses of Type in mycompiler.mytype
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subclasses of Type in mycompiler.mytype
- classBaseType - -
-           
- classBooleanType - -
-           
- classCharacterType - -
-           
- classGenericTypeVar - -
-           
- classIntegerType - -
-           
- classRefType - -
-           
- classReturnType - -
-           
- classTyploseVariable - -
-          Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben Typ.
- classVoid - -
-           
-  -

- - - - - - - - - - - - - -
Fields in mycompiler.mytype declared as Type
- TypePair.TA1 - -
-           
- TypePair.TA2 - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytype that return Type
- TypeType.clone() - -
-          
Author: J�rg B�uerle
-static TypePair.copyType(Type T) - -
-           
- TypePair.getTA1Copy() - -
-           
- TypePair.getTA2Copy() - -
-           
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytype with parameters of type Type
-static TypePair.copyType(Type T) - -
-           
- voidTyploseVariable.replaceWithType(Type newType) - -
-          Diese Methode geht alle TypeReplacmentListener durch und tauscht �ber deren - Callback-Methode diesen Typ gegen den neuen aus.
-  -

- - - - - - - - - - - - - - -
Constructors in mycompiler.mytype with parameters of type Type
Pair(Type TA1, - Type TA2) - -
-           
Pair(Type TA1, - Type TA2, - boolean bEqual) - -
-           
Pair(Type TA1, - Type TA2, - boolean bEqual, - boolean bSubst) - -
-           
-  -

- - - - - -
-Uses of Type in mycompiler.mytypereconstruction
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return Type
- TypeCTriple.getResultType() - -
-          Author: J�rg B�uerle
- TypeCSubstitution.getType() - -
-          Author: J�rg B�uerle
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return types with arguments of type Type
- java.util.Iterator<Type>CMultiplyTuple.getResultTypeIterator() - -
-           
- de.dhbwstuttgart.typeinference.Menge<Type>CMultiplyTuple.getResultTypes() - -
-          Author: J�rg B�uerle
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction with parameters of type Type
- voidCTriple.setResultType(Type resultType) - -
-          Author: J�rg B�uerle
- voidCSubstitution.setType(Type type) - -
-          Author: J�rg B�uerle
-  -

- - - - - - - - - -
Method parameters in mycompiler.mytypereconstruction with type arguments of type Type
- voidCMultiplyTuple.setResultTypes(de.dhbwstuttgart.typeinference.Menge<Type> resultTypes) - -
-          Author: J�rg B�uerle
-  -

- - - - - - - - - - - -
Constructors in mycompiler.mytypereconstruction with parameters of type Type
CSubstitution(TyploseVariable typeVar, - Type type) - -
-           
CTriple(CSubstitutionSet substitutions, - Type resultType, - CTypeAssumptionSet assumptionSet) - -
-           
-  -

- - - - - - - - -
Constructor parameters in mycompiler.mytypereconstruction with type arguments of type Type
CMultiplyTuple(CSubstitutionSet substitutions, - de.dhbwstuttgart.typeinference.Menge<Type> resultTypes, - CTypeAssumptionSet assumptionSet) - -
-           
-  -

- - - - - -
-Uses of Type in mycompiler.mytypereconstruction.replacementlistener
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.replacementlistener that return Type
- TypeCReplaceTypeEvent.getNewType() - -
-           
- TypeCReplaceTypeEvent.getOldType() - -
-           
-  -

- - - - - - - - -
Constructors in mycompiler.mytypereconstruction.replacementlistener with parameters of type Type
CReplaceTypeEvent(Type oldType, - Type newType) - -
-           
-  -

- - - - - -
-Uses of Type in mycompiler.mytypereconstruction.typeassumption
-  -

- - - - - - - - - -
Fields in mycompiler.mytypereconstruction.typeassumption declared as Type
-protected  TypeCTypeAssumption.m_AssumedType - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption that return Type
- TypeCTypeAssumption.getAssumedType() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption with parameters of type Type
- voidCTypeAssumption.setAssumedType(Type assumedType) - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - -
Constructors in mycompiler.mytypereconstruction.typeassumption with parameters of type Type
CInstVarTypeAssumption(java.lang.String className, - java.lang.String identifier, - Type type, - int lineNumber) - -
-           
CLocalVarTypeAssumption(java.lang.String className, - java.lang.String methodName, - int methodParaCount, - java.lang.String blockId, - java.lang.String identifier, - Type assumedType, - int lineNumber) - -
-           
CMethodTypeAssumption(java.lang.String className, - java.lang.String identifier, - Type assumedType, - int lineNumber) - -
-           
CParaTypeAssumption(java.lang.String className, - java.lang.String methodName, - int methodParaCount, - java.lang.String identifier, - Type assumedType, - int lineNumber) - -
-           
CTypeAssumption(java.lang.String className, - java.lang.String identifier, - Type assumedType, - int lineNumber) - -
-           
-  -

- - - - - -
-Uses of Type in mycompiler.mytypereconstruction.unify
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.unify with parameters of type Type
- de.dhbwstuttgart.typeinference.MengeUnify.adapt(java.lang.String strTV, - Type T, - de.dhbwstuttgart.typeinference.Menge vRFC, - de.dhbwstuttgart.typeinference.Menge vRE) - -
-           
-static voidUnify.Subst(Pair P, - int nTypnrInPair, - TyploseVariable a, - Type o, - boolean bMitVorbedingung) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>Unify.unify(Type ty1, - Type ty2, - FC_TTO fc_tto) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/class-use/TyploseVariable.html b/doc/Javadoc/mycompiler/mytype/class-use/TyploseVariable.html deleted file mode 100755 index d1705e16..00000000 --- a/doc/Javadoc/mycompiler/mytype/class-use/TyploseVariable.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytype.TyploseVariable - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytype.TyploseVariable

-
- - - - - - - - - - - - - - - - - -
-Packages that use TyploseVariable
mycompiler.mytype  
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.unify  
-  -

- - - - - -
-Uses of TyploseVariable in mycompiler.mytype
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytype that return TyploseVariable
-static TyploseVariableTyploseVariable.backdoorCreate(java.lang.String name) - -
-          Backdoor-Hilfsfunktion, die für makeFC() und unify() benötigt wird, - zum Erzeugen einer TyplosenVariable, die nicht in der zentralen Registry eingetragen - wird.
-static TyploseVariableTyploseVariable.backdoorFresh() - -
-          Backdoor-Hilfsfunktion, die für makeFC() und unify() benötigt wird, - um neue typlose Variablen zu erzeugen.
- TyploseVariableTyploseVariable.clone() - -
-          Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die Registrierung neuer - Listener über die zentrale Instanz in der Registry laufen muss.
-static TyploseVariableTyploseVariable.fresh() - -
-          Erzeugt eine neue TyploseVariable mit einem eindeutigen Namen.
-static TyploseVariableTyploseVariable.getInstance(java.lang.String name) - -
-          Statische Methode, um einen typlose Variable aus der Registry zu holen.
-  -

- - - - - -
-Uses of TyploseVariable in mycompiler.mytypereconstruction
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return TyploseVariable
- TyploseVariableCSubstitution.getTypeVar() - -
-          Author: Jörg Bäuerle
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction with parameters of type TyploseVariable
- voidCSubstitution.setTypeVar(TyploseVariable typeVar) - -
-          Author: Jörg Bäuerle
-  -

- - - - - - - - -
Constructors in mycompiler.mytypereconstruction with parameters of type TyploseVariable
CSubstitution(TyploseVariable typeVar, - Type type) - -
-           
-  -

- - - - - -
-Uses of TyploseVariable in mycompiler.mytypereconstruction.unify
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.unify with parameters of type TyploseVariable
-static booleanUnify.isTVinRefType(TyploseVariable TV, - RefType RT) - -
-           
-static voidUnify.Subst(Pair P, - int nTypnrInPair, - TyploseVariable a, - Type o, - boolean bMitVorbedingung) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/class-use/Void.html b/doc/Javadoc/mycompiler/mytype/class-use/Void.html deleted file mode 100755 index 4976f21d..00000000 --- a/doc/Javadoc/mycompiler/mytype/class-use/Void.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytype.Void - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytype.Void

-
- - - - - - - - - -
-Packages that use Void
mycompiler.mytype  
-  -

- - - - - -
-Uses of Void in mycompiler.mytype
-  -

- - - - - - - - - -
Methods in mycompiler.mytype that return Void
- VoidVoid.clone() - -
-          
Author: Jörg Bäuerle
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/package-frame.html b/doc/Javadoc/mycompiler/mytype/package-frame.html deleted file mode 100755 index 04fd06f5..00000000 --- a/doc/Javadoc/mycompiler/mytype/package-frame.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - -mycompiler.mytype - - - - - - - - - - - -mycompiler.mytype - - - - -
-Classes  - -
-BaseType -
-BooleanType -
-CharacterType -
-GenericTypeVar -
-IntegerType -
-Pair -
-ParaList -
-RefType -
-ReturnType -
-Type -
-TyploseVariable -
-Void
- - - - diff --git a/doc/Javadoc/mycompiler/mytype/package-summary.html b/doc/Javadoc/mycompiler/mytype/package-summary.html deleted file mode 100755 index 9288c1e9..00000000 --- a/doc/Javadoc/mycompiler/mytype/package-summary.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -mycompiler.mytype - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.mytype -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
BaseType 
BooleanType 
CharacterType 
GenericTypeVar 
IntegerType 
Pair 
ParaList 
RefType 
ReturnType 
Type 
TyploseVariableRepräsentiert einen Typparameter für einen vom Programmierer nicht angegeben Typ.
Void 
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/package-tree.html b/doc/Javadoc/mycompiler/mytype/package-tree.html deleted file mode 100755 index 93e5db21..00000000 --- a/doc/Javadoc/mycompiler/mytype/package-tree.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - -mycompiler.mytype Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.mytype -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytype/package-use.html b/doc/Javadoc/mycompiler/mytype/package-use.html deleted file mode 100755 index 94118768..00000000 --- a/doc/Javadoc/mycompiler/mytype/package-use.html +++ /dev/null @@ -1,426 +0,0 @@ - - - - - - -Uses of Package mycompiler.mytype - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.mytype

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use mycompiler.mytype
mycompiler.mybytecode  
mycompiler.myclass  
mycompiler.mystatement  
mycompiler.mytype  
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.replacementlistener  
mycompiler.mytypereconstruction.set  
mycompiler.mytypereconstruction.typeassumption  
mycompiler.mytypereconstruction.unify  
-  -

- - - - - - - - -
-Classes in mycompiler.mytype used by mycompiler.mybytecode
Type - -
-           
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mytype used by mycompiler.myclass
RefType - -
-           
Type - -
-           
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mytype used by mycompiler.mystatement
RefType - -
-           
Type - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Classes in mycompiler.mytype used by mycompiler.mytype
BaseType - -
-           
BooleanType - -
-           
CharacterType - -
-           
GenericTypeVar - -
-           
IntegerType - -
-           
Pair - -
-           
RefType - -
-           
ReturnType - -
-           
Type - -
-           
TyploseVariable - -
-          Repräsentiert einen Typparameter für einen vom Programmierer nicht angegeben Typ.
Void - -
-           
-  -

- - - - - - - - - - - - - - - - - -
-Classes in mycompiler.mytype used by mycompiler.mytypereconstruction
GenericTypeVar - -
-           
Pair - -
-           
Type - -
-           
TyploseVariable - -
-          Repräsentiert einen Typparameter für einen vom Programmierer nicht angegeben Typ.
-  -

- - - - - - - - -
-Classes in mycompiler.mytype used by mycompiler.mytypereconstruction.replacementlistener
Type - -
-           
-  -

- - - - - - - - -
-Classes in mycompiler.mytype used by mycompiler.mytypereconstruction.set
Pair - -
-           
-  -

- - - - - - - - -
-Classes in mycompiler.mytype used by mycompiler.mytypereconstruction.typeassumption
Type - -
-           
-  -

- - - - - - - - - - - - - - - - - -
-Classes in mycompiler.mytype used by mycompiler.mytypereconstruction.unify
Pair - -
-           
RefType - -
-           
Type - -
-           
TyploseVariable - -
-          Repräsentiert einen Typparameter für einen vom Programmierer nicht angegeben Typ.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/CHelper.html b/doc/Javadoc/mycompiler/mytypereconstruction/CHelper.html deleted file mode 100755 index 38fdb3de..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/CHelper.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - -CHelper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction -
-Class CHelper

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.CHelper
-
-
-
-
public class CHelper
extends java.lang.Object
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:10 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
CHelper() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static voidprint(java.lang.String s) - -
-          Author: Jörg Bäuerle
- Gibt einen String aus.
-static java.lang.Stringtime() - -
-          Author: Jörg Bäuerle
- Liefert die aktuelle Zeit in Langformat zurück.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CHelper

-
-public CHelper()
-
-
- - - - - - - - -
-Method Detail
- -

-time

-
-public static java.lang.String time()
-
-
Author: Jörg Bäuerle
- Liefert die aktuelle Zeit in Langformat zurück. -

-

- -
Returns:
Zeit in Langformat als String
-
-
-
- -

-print

-
-public static void print(java.lang.String s)
-
-
Author: Jörg Bäuerle
- Gibt einen String aus. -

-

-
Parameters:
s - Der auszugebende String
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/CIntersectionType.html b/doc/Javadoc/mycompiler/mytypereconstruction/CIntersectionType.html deleted file mode 100755 index d0a02497..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/CIntersectionType.html +++ /dev/null @@ -1,404 +0,0 @@ - - - - - - -CIntersectionType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction -
-Class CIntersectionType

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.CIntersectionType
-
-
-
-
public class CIntersectionType
extends java.lang.Object
- - -

-Ein CIntersectionType gruppiert alle Typm�glichkeiten einer - bestimmten Methode, die �ber den CMethodKey eindeutig definiert ist.

- Bei der bisherigen Implementierung enth�lt IntersectionType jedoch nur eine - einzige Typm�glichkeit, d.h. der Menge m_MethodTypeAssumptions - enth�lt stets nur ein einziges Element.
- Der Grund hierf�r ist in der Kopplung der Typannahmen f�r die einzelnen Methoden, d.h. der - Typkombinationen, begr�ndet. Diese Kopplung von Methoden wird bisher �ber die getrennten Mengen - von CTypeReconstructionResults realisiert. -

- -

-

-
Version:
-
$Date: 2005/06/28 19:19:10 $
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - - - - - - - - -
-Constructor Summary
CIntersectionType(CMethodTypeAssumption assum) - -
-           
CIntersectionType(java.lang.String className, - java.lang.String methodIdentifier, - int methodParaCount) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidaddMethodTypeAssumption(CMethodTypeAssumption assum) - -
-           
- CMethodKeygetIntersectionTypeKey() - -
-           
- de.dhbwstuttgart.typeinference.Menge<CMethodTypeAssumption>getMethodTypeAssumptions() - -
-           
- voidremoveMethodTypeAssumption(CMethodTypeAssumption assum) - -
-           
- voidsetIntersectionTypeKey(CMethodKey intersectionTypeKey) - -
-           
- voidsetMethodTypeAssumptions(de.dhbwstuttgart.typeinference.Menge<CMethodTypeAssumption> methodTypeAssumptions) - -
-           
- java.lang.StringtoString() - -
-          
Author: J�rg B�uerle
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CIntersectionType

-
-public CIntersectionType(java.lang.String className,
-                         java.lang.String methodIdentifier,
-                         int methodParaCount)
-
-
-
- -

-CIntersectionType

-
-public CIntersectionType(CMethodTypeAssumption assum)
-
-
- - - - - - - - -
-Method Detail
- -

-getIntersectionTypeKey

-
-public CMethodKey getIntersectionTypeKey()
-
-
-
-
-
-
- -

-setIntersectionTypeKey

-
-public void setIntersectionTypeKey(CMethodKey intersectionTypeKey)
-
-
-
-
-
-
- -

-getMethodTypeAssumptions

-
-public de.dhbwstuttgart.typeinference.Menge<CMethodTypeAssumption> getMethodTypeAssumptions()
-
-
-
-
-
-
- -

-setMethodTypeAssumptions

-
-public void setMethodTypeAssumptions(de.dhbwstuttgart.typeinference.Menge<CMethodTypeAssumption> methodTypeAssumptions)
-
-
-
-
-
-
- -

-addMethodTypeAssumption

-
-public void addMethodTypeAssumption(CMethodTypeAssumption assum)
-
-
-
-
-
-
- -

-removeMethodTypeAssumption

-
-public void removeMethodTypeAssumption(CMethodTypeAssumption assum)
-
-
-
-
-
-
- -

-toString

-
-public java.lang.String toString()
-
-

Author: J�rg B�uerle -

-

-
Overrides:
toString in class java.lang.Object
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/CMultiplyTuple.html b/doc/Javadoc/mycompiler/mytypereconstruction/CMultiplyTuple.html deleted file mode 100755 index 19851c53..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/CMultiplyTuple.html +++ /dev/null @@ -1,475 +0,0 @@ - - - - - - -CMultiplyTuple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction -
-Class CMultiplyTuple

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.CMultiplyTuple
-
-
-
-
public class CMultiplyTuple
extends java.lang.Object
- - -

-Container-Klasse f�r Ergebniswerte der Algorithmen TRTuple und TRMultiply. - (siehe Algorithmen 5.28 ff, Martin Pl�micke) -

- -

-

-
Version:
-
$Date: 2005/06/28 19:19:10 $
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - - - - - - - - -
-Constructor Summary
CMultiplyTuple() - -
-          Author: J�rg B�uerle
CMultiplyTuple(CSubstitutionSet substitutions, - de.dhbwstuttgart.typeinference.Menge<Type> resultTypes, - CTypeAssumptionSet assumptionSet) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- CMultiplyTupleclone() - -
-           
- booleanequals(java.lang.Object obj) - -
-           
- CTypeAssumptionSetgetAssumptionSet() - -
-          Author: J�rg B�uerle
- java.util.Iterator<Type>getResultTypeIterator() - -
-           
- de.dhbwstuttgart.typeinference.Menge<Type>getResultTypes() - -
-          Author: J�rg B�uerle
- CSubstitutionSetgetSubstitutions() - -
-          Author: J�rg B�uerle
- voidsetAssumptionSet(CTypeAssumptionSet assumptionSet) - -
-          Author: J�rg B�uerle
- voidsetResultTypes(de.dhbwstuttgart.typeinference.Menge<Type> resultTypes) - -
-          Author: J�rg B�uerle
- voidsetSubstitutions(CSubstitutionSet substitutions) - -
-          Author: J�rg B�uerle
- java.lang.StringtoString() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CMultiplyTuple

-
-public CMultiplyTuple()
-
-
Author: J�rg B�uerle
-

-

-
- -

-CMultiplyTuple

-
-public CMultiplyTuple(CSubstitutionSet substitutions,
-                      de.dhbwstuttgart.typeinference.Menge<Type> resultTypes,
-                      CTypeAssumptionSet assumptionSet)
-
-
- - - - - - - - -
-Method Detail
- -

-getAssumptionSet

-
-public CTypeAssumptionSet getAssumptionSet()
-
-
Author: J�rg B�uerle
-

-

- -
Returns:
Returns the AssumptionSet.
-
-
-
- -

-setAssumptionSet

-
-public void setAssumptionSet(CTypeAssumptionSet assumptionSet)
-
-
Author: J�rg B�uerle
-

-

-
Parameters:
assumptionSet - The AssumptionSet to set.
-
-
-
- -

-getResultTypes

-
-public de.dhbwstuttgart.typeinference.Menge<Type> getResultTypes()
-
-
Author: J�rg B�uerle
-

-

- -
Returns:
Returns the ResultTypes.
-
-
-
- -

-getResultTypeIterator

-
-public java.util.Iterator<Type> getResultTypeIterator()
-
-
-
-
-
-
- -

-setResultTypes

-
-public void setResultTypes(de.dhbwstuttgart.typeinference.Menge<Type> resultTypes)
-
-
Author: J�rg B�uerle
-

-

-
Parameters:
resultType - The ResultType to set.
-
-
-
- -

-getSubstitutions

-
-public CSubstitutionSet getSubstitutions()
-
-
Author: J�rg B�uerle
-

-

- -
Returns:
Returns the Substitutions.
-
-
-
- -

-setSubstitutions

-
-public void setSubstitutions(CSubstitutionSet substitutions)
-
-
Author: J�rg B�uerle
-

-

-
Parameters:
substitution - The Substitutions to set.
-
-
-
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
-
Overrides:
equals in class java.lang.Object
-
-
-
-
-
-
- -

-toString

-
-public java.lang.String toString()
-
-
-
Overrides:
toString in class java.lang.Object
-
-
-
-
-
-
- -

-clone

-
-public CMultiplyTuple clone()
-
-
-
Overrides:
clone in class java.lang.Object
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/CReconstructionTuple.html b/doc/Javadoc/mycompiler/mytypereconstruction/CReconstructionTuple.html deleted file mode 100755 index 3b334cc8..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/CReconstructionTuple.html +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - -CReconstructionTuple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction -
-Class CReconstructionTuple

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.CReconstructionTuple
-
-
-
-
public class CReconstructionTuple
extends java.lang.Object
- - -

-Container-Klasse für Ergebniswerte des Algorithmus TRStart. - (siehe Algorithmus 5.18 TRStart, Martin Plümicke) -

- -

-

-
Version:
-
$date
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - - - - -
-Constructor Summary
CReconstructionTuple() - -
-           
CReconstructionTuple(CSubstitutionSet subSet, - CTypeAssumptionSet assumSet) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- CReconstructionTupleclone() - -
-           
- booleanequals(java.lang.Object obj) - -
-           
- CTypeAssumptionSetgetAssumSet() - -
-           
- CSubstitutionSetgetSubSet() - -
-           
- voidsetAssumSet(CTypeAssumptionSet assumSet) - -
-           
- voidsetSubSet(CSubstitutionSet subSet) - -
-           
- java.lang.StringtoString() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CReconstructionTuple

-
-public CReconstructionTuple()
-
-
-
- -

-CReconstructionTuple

-
-public CReconstructionTuple(CSubstitutionSet subSet,
-                            CTypeAssumptionSet assumSet)
-
-
- - - - - - - - -
-Method Detail
- -

-getAssumSet

-
-public CTypeAssumptionSet getAssumSet()
-
-
-
-
-
-
- -

-setAssumSet

-
-public void setAssumSet(CTypeAssumptionSet assumSet)
-
-
-
-
-
-
- -

-getSubSet

-
-public CSubstitutionSet getSubSet()
-
-
-
-
-
-
- -

-setSubSet

-
-public void setSubSet(CSubstitutionSet subSet)
-
-
-
-
-
-
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
-
Overrides:
equals in class java.lang.Object
-
-
-
-
-
-
- -

-toString

-
-public java.lang.String toString()
-
-
-
Overrides:
toString in class java.lang.Object
-
-
-
-
-
-
- -

-clone

-
-public CReconstructionTuple clone()
-
-
-
Overrides:
clone in class java.lang.Object
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/CSubstitution.html b/doc/Javadoc/mycompiler/mytypereconstruction/CSubstitution.html deleted file mode 100755 index 2d228db5..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/CSubstitution.html +++ /dev/null @@ -1,481 +0,0 @@ - - - - - - -CSubstitution - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction -
-Class CSubstitution

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.CSubstitution
-
-
-
-
public class CSubstitution
extends java.lang.Object
- - -

-Implementierung einer Typsubstitution. Bildet eine zu ersetzende TyploseVariable - auf einen Substitutions-Typ ab. Instanzen dieser Klasse werden in der Regel aus - Pair-Objekten erzeugt. -

- -

-

-
Version:
-
$Date: 2005/06/28 19:19:10 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - - - - - - - -
-Constructor Summary
CSubstitution() - -
-           
CSubstitution(Pair unifier) - -
-           
CSubstitution(TyploseVariable typeVar, - Type type) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidapplyUnifier(CSubstitutionSet unifier) - -
-          Wendet den Unifier auf die rechte Seite dieser Substitution an.
- CSubstitutionclone() - -
-           
- booleanequals(java.lang.Object obj) - -
-           
- voidexecute() - -
-          Sucht die eindeutige Instanz der TyplosenVariable in der Registry der - TyplosenVariablen des Syntaxbaumes und führt die Typsubstitution im - Syntaxbaum durch.
- TypegetType() - -
-          Author: Jörg Bäuerle
- TyploseVariablegetTypeVar() - -
-          Author: Jörg Bäuerle
- voidsetType(Type type) - -
-          Author: Jörg Bäuerle
- voidsetTypeVar(TyploseVariable typeVar) - -
-          Author: Jörg Bäuerle
- java.lang.StringtoString() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CSubstitution

-
-public CSubstitution()
-
-
-
- -

-CSubstitution

-
-public CSubstitution(TyploseVariable typeVar,
-                     Type type)
-
-
-
- -

-CSubstitution

-
-public CSubstitution(Pair unifier)
-              throws CTypeReconstructionException
-
-
- -
Throws: -
CTypeReconstructionException
-
- - - - - - - - -
-Method Detail
- -

-getType

-
-public Type getType()
-
-
Author: Jörg Bäuerle
-

-

- -
Returns:
Returns the Type.
-
-
-
- -

-setType

-
-public void setType(Type type)
-
-
Author: Jörg Bäuerle
-

-

-
Parameters:
type - The Type to set.
-
-
-
- -

-getTypeVar

-
-public TyploseVariable getTypeVar()
-
-
Author: Jörg Bäuerle
-

-

- -
Returns:
Returns the TypeVar.
-
-
-
- -

-setTypeVar

-
-public void setTypeVar(TyploseVariable typeVar)
-
-
Author: Jörg Bäuerle
-

-

-
Parameters:
typeVar - The TypeVar to set.
-
-
-
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
-
Overrides:
equals in class java.lang.Object
-
-
-
-
-
-
- -

-toString

-
-public java.lang.String toString()
-
-
-
Overrides:
toString in class java.lang.Object
-
-
-
-
-
-
- -

-clone

-
-public CSubstitution clone()
-
-
-
Overrides:
clone in class java.lang.Object
-
-
-
-
-
-
- -

-execute

-
-public void execute()
-             throws CTypeReconstructionException
-
-
Sucht die eindeutige Instanz der TyplosenVariable in der Registry der - TyplosenVariablen des Syntaxbaumes und führt die Typsubstitution im - Syntaxbaum durch. -
Author: Jörg Bäuerle - wenn die TyploseVariable nicht in der Registry gefunden wurde. -

-

- -
Throws: -
CTypeReconstructionException - Falls TyploseVariable nicht in Registry gefunden wird.
-
-
-
- -

-applyUnifier

-
-public void applyUnifier(CSubstitutionSet unifier)
-
-
Wendet den Unifier auf die rechte Seite dieser Substitution an. -
Author: Jörg Bäuerle -

-

-
Parameters:
unifier -
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/CSupportData.html b/doc/Javadoc/mycompiler/mytypereconstruction/CSupportData.html deleted file mode 100755 index af8fdb24..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/CSupportData.html +++ /dev/null @@ -1,695 +0,0 @@ - - - - - - -CSupportData - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction -
-Class CSupportData

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.CSupportData
-
-
-
-
public class CSupportData
extends java.lang.Object
- - -

-Container-Klasse f�r bestimmte Hilfsdaten, die beim - Typrekonstruktionsalgorithmus ben�tigt und deshalb - rekursiv weiter gereicht werden. -

- -

-

-
Version:
-
$Date: 2005/06/28 19:19:10 $
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static java.lang.StringNO_METHOD - -
-          Gibt Namensstring f�r den Classbody au�erhalb einer Methode - f�r m_CurrentMethod.
-  - - - - - - - - - - - - - -
-Constructor Summary
CSupportData(FC_TTO finiteClosure, - de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A, - java.lang.String currentClass) - -
-           
CSupportData(FC_TTO finiteClosure, - de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A, - java.lang.String currentClass, - java.lang.String currentMethod, - int currentMethodParaCount, - de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> blockIdList, - int blockDepth) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- CSupportDataclone() - -
-           
- intdecBlockDepth() - -
-           
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>getA() - -
-           
- java.lang.StringgetBlockId(int blockDepth) - -
-           
- de.dhbwstuttgart.typeinference.Menge<java.lang.Integer>getBlockIdList() - -
-           
- intgetCurrentBlockDepth() - -
-           
- java.lang.StringgetCurrentBlockId() - -
-           
- java.lang.StringgetCurrentClass() - -
-           
- java.lang.StringgetCurrentMethod() - -
-           
- intgetCurrentMethodParaCount() - -
-           
- FC_TTOgetFiniteClosure() - -
-           
- intincBlockDepth() - -
-           
- voidresetBlockId() - -
-           
- voidsetA(de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A) - -
-           
- voidsetBlockIdList(de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> blockId) - -
-           
- voidsetCurrentBlockDepth(int currentBlockDepth) - -
-           
- voidsetCurrentClass(java.lang.String currentClass) - -
-           
- voidsetCurrentMethod(java.lang.String currentMethod) - -
-           
- voidsetCurrentMethodParaCount(int currentMethodParaCount) - -
-           
- voidsetFiniteClosure(FC_TTO finiteClosure) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-NO_METHOD

-
-public static final java.lang.String NO_METHOD
-
-
Gibt Namensstring f�r den Classbody au�erhalb einer Methode - f�r m_CurrentMethod. -

-

-
See Also:
Constant Field Values
-
- - - - - - - - -
-Constructor Detail
- -

-CSupportData

-
-public CSupportData(FC_TTO finiteClosure,
-                    de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A,
-                    java.lang.String currentClass)
-
-
-
- -

-CSupportData

-
-public CSupportData(FC_TTO finiteClosure,
-                    de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A,
-                    java.lang.String currentClass,
-                    java.lang.String currentMethod,
-                    int currentMethodParaCount,
-                    de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> blockIdList,
-                    int blockDepth)
-
-
- - - - - - - - -
-Method Detail
- -

-getFiniteClosure

-
-public FC_TTO getFiniteClosure()
-
-
-
-
-
-
- -

-setFiniteClosure

-
-public void setFiniteClosure(FC_TTO finiteClosure)
-
-
-
-
-
-
- -

-getA

-
-public de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> getA()
-
-
-
-
-
-
- -

-setA

-
-public void setA(de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A)
-
-
-
-
-
-
- -

-getCurrentClass

-
-public java.lang.String getCurrentClass()
-
-
-
-
-
-
- -

-setCurrentClass

-
-public void setCurrentClass(java.lang.String currentClass)
-
-
-
-
-
-
- -

-getCurrentMethod

-
-public java.lang.String getCurrentMethod()
-
-
-
-
-
-
- -

-setCurrentMethod

-
-public void setCurrentMethod(java.lang.String currentMethod)
-
-
-
-
-
-
- -

-getCurrentMethodParaCount

-
-public int getCurrentMethodParaCount()
-
-
-
-
-
-
- -

-setCurrentMethodParaCount

-
-public void setCurrentMethodParaCount(int currentMethodParaCount)
-
-
-
-
-
-
- -

-getBlockIdList

-
-public de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> getBlockIdList()
-
-
-
-
-
-
- -

-setBlockIdList

-
-public void setBlockIdList(de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> blockId)
-
-
-
-
-
-
- -

-resetBlockId

-
-public void resetBlockId()
-
-
-
-
-
-
- -

-getCurrentBlockDepth

-
-public int getCurrentBlockDepth()
-
-
-
-
-
-
- -

-setCurrentBlockDepth

-
-public void setCurrentBlockDepth(int currentBlockDepth)
-
-
-
-
-
-
- -

-incBlockDepth

-
-public int incBlockDepth()
-
-
-
-
-
-
- -

-decBlockDepth

-
-public int decBlockDepth()
-
-
-
-
-
-
- -

-getCurrentBlockId

-
-public java.lang.String getCurrentBlockId()
-
-
-
-
-
-
- -

-getBlockId

-
-public java.lang.String getBlockId(int blockDepth)
-
-
-
-
-
-
- -

-clone

-
-public CSupportData clone()
-
-
-
Overrides:
clone in class java.lang.Object
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/CTriple.html b/doc/Javadoc/mycompiler/mytypereconstruction/CTriple.html deleted file mode 100755 index 3e35022e..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/CTriple.html +++ /dev/null @@ -1,481 +0,0 @@ - - - - - - -CTriple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction -
-Class CTriple

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.CTriple
-
-
-
-
public class CTriple
extends java.lang.Object
- - -

-Container-Klasse für Ergebniswerte der Algorithmen TRStmt und TRExp. - (siehe Algorithmus 5.20 ff TRStmt und 5.30 ff TRExp, Martin Plümicke) -

- -

-

-
Version:
-
$Date: 2005/06/28 19:19:10 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - - - - -
-Constructor Summary
CTriple() - -
-          Author: Jörg Bäuerle
CTriple(CSubstitutionSet substitutions, - Type resultType, - CTypeAssumptionSet assumptionSet) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- CTripleclone() - -
-           
- CTriplecloneAndApplyUnify(CSubstitutionSet unifier) - -
-          Kopiert dieses Triple und wendet alle Substitutionen eines Unifiers auf - die Kopie an.
- booleanequals(java.lang.Object obj) - -
-           
- CTypeAssumptionSetgetAssumptionSet() - -
-          Author: Jörg Bäuerle
- TypegetResultType() - -
-          Author: Jörg Bäuerle
- CSubstitutionSetgetSubstitutions() - -
-          Author: Jörg Bäuerle
- voidsetAssumptionSet(CTypeAssumptionSet assumptionSet) - -
-          Author: Jörg Bäuerle
- voidsetResultType(Type resultType) - -
-          Author: Jörg Bäuerle
- voidsetSubstitutions(CSubstitutionSet substitutions) - -
-          Author: Jörg Bäuerle
- java.lang.StringtoString() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CTriple

-
-public CTriple()
-
-
Author: Jörg Bäuerle
-

-

-
- -

-CTriple

-
-public CTriple(CSubstitutionSet substitutions,
-               Type resultType,
-               CTypeAssumptionSet assumptionSet)
-
-
- - - - - - - - -
-Method Detail
- -

-getAssumptionSet

-
-public CTypeAssumptionSet getAssumptionSet()
-
-
Author: Jörg Bäuerle
-

-

- -
Returns:
Returns the AssumptionSet.
-
-
-
- -

-setAssumptionSet

-
-public void setAssumptionSet(CTypeAssumptionSet assumptionSet)
-
-
Author: Jörg Bäuerle
-

-

-
Parameters:
assumptionSet - The AssumptionSet to set.
-
-
-
- -

-getResultType

-
-public Type getResultType()
-
-
Author: Jörg Bäuerle
-

-

- -
Returns:
Returns the ResultType.
-
-
-
- -

-setResultType

-
-public void setResultType(Type resultType)
-
-
Author: Jörg Bäuerle
-

-

-
Parameters:
resultType - The ResultType to set.
-
-
-
- -

-getSubstitutions

-
-public CSubstitutionSet getSubstitutions()
-
-
Author: Jörg Bäuerle
-

-

- -
Returns:
Returns the Substitutions.
-
-
-
- -

-setSubstitutions

-
-public void setSubstitutions(CSubstitutionSet substitutions)
-
-
Author: Jörg Bäuerle
-

-

-
Parameters:
substitution - The Substitutions to set.
-
-
-
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
-
Overrides:
equals in class java.lang.Object
-
-
-
-
-
-
- -

-toString

-
-public java.lang.String toString()
-
-
-
Overrides:
toString in class java.lang.Object
-
-
-
-
-
-
- -

-clone

-
-public CTriple clone()
-
-
-
Overrides:
clone in class java.lang.Object
-
-
-
-
-
-
- -

-cloneAndApplyUnify

-
-public CTriple cloneAndApplyUnify(CSubstitutionSet unifier)
-
-
Kopiert dieses Triple und wendet alle Substitutionen eines Unifiers auf - die Kopie an. -
Author: Jörg Bäuerle -

-

-
Parameters:
unifier - -
Returns:
Die Kopie nach Anwendung des Unifiers
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/CTypeReconstructionResult.html b/doc/Javadoc/mycompiler/mytypereconstruction/CTypeReconstructionResult.html deleted file mode 100755 index 1658819d..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/CTypeReconstructionResult.html +++ /dev/null @@ -1,512 +0,0 @@ - - - - - - -CTypeReconstructionResult - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction -
-Class CTypeReconstructionResult

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.CTypeReconstructionResult
-
-
-
-
public class CTypeReconstructionResult
extends java.lang.Object
- - -

-Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche Typkombination - aller Klassen und deren Methoden sowie lokalen Variablen. Eine Instanz dieser Klasse - steht f�r genau eine m�gliche Typkombination.
- Objekte dieser Klasse werden vom Typrekonstruktionsalgorithmus �ber die Compiler-API - zur�ckgegeben. -

- -

-

-
Version:
-
$Date: 2005/06/28 19:19:10 $
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
CTypeReconstructionResult() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidaddClassName(java.lang.String className) - -
-           
- voidaddDataFromTupel(CReconstructionTuple tuple) - -
-           
- voidaddFieldOrLocalVarAssumption(CTypeAssumption assum) - -
-           
- voidaddGenericTypeVars(java.lang.String className, - de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> typeVarList) - -
-           
- voidaddMethodIntersectionType(CIntersectionType intersect) - -
-           
- de.dhbwstuttgart.typeinference.Menge<java.lang.String>getClassNameList() - -
-           
- java.util.Hashtable<CTypeAssumptionKey,CTypeAssumption>getFieldAndLocalVarAssumptions() - -
-           
- java.util.Hashtable<java.lang.String,de.dhbwstuttgart.typeinference.Menge<GenericTypeVar>>getGenericsTable() - -
-           
- CIntersectionTypegetMethodIntersectionType(CMethodKey key) - -
-           
- java.util.Hashtable<CMethodKey,CIntersectionType>getMethodIntersectionTypes() - -
-           
- CSubstitutionSetgetSubstitutions() - -
-           
- voidsetFieldAndLocalVarAssumptions(java.util.Hashtable<CTypeAssumptionKey,CTypeAssumption> fieldAndLocalVarAssumptions) - -
-           
- voidsetSubstitutions(CSubstitutionSet substitutions) - -
-           
- CTypeReconstructionResultshallowCopy() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CTypeReconstructionResult

-
-public CTypeReconstructionResult()
-
-
- - - - - - - - -
-Method Detail
- -

-getFieldAndLocalVarAssumptions

-
-public java.util.Hashtable<CTypeAssumptionKey,CTypeAssumption> getFieldAndLocalVarAssumptions()
-
-
-
-
-
-
- -

-setFieldAndLocalVarAssumptions

-
-public void setFieldAndLocalVarAssumptions(java.util.Hashtable<CTypeAssumptionKey,CTypeAssumption> fieldAndLocalVarAssumptions)
-
-
-
-
-
-
- -

-addFieldOrLocalVarAssumption

-
-public void addFieldOrLocalVarAssumption(CTypeAssumption assum)
-
-
-
-
-
-
- -

-getMethodIntersectionTypes

-
-public java.util.Hashtable<CMethodKey,CIntersectionType> getMethodIntersectionTypes()
-
-
-
-
-
-
- -

-addMethodIntersectionType

-
-public void addMethodIntersectionType(CIntersectionType intersect)
-
-
-
-
-
-
- -

-getMethodIntersectionType

-
-public CIntersectionType getMethodIntersectionType(CMethodKey key)
-
-
-
-
-
-
- -

-getSubstitutions

-
-public CSubstitutionSet getSubstitutions()
-
-
-
-
-
-
- -

-setSubstitutions

-
-public void setSubstitutions(CSubstitutionSet substitutions)
-
-
-
-
-
-
- -

-addDataFromTupel

-
-public void addDataFromTupel(CReconstructionTuple tuple)
-
-
-
-
-
-
- -

-addClassName

-
-public void addClassName(java.lang.String className)
-
-
-
-
-
-
- -

-getClassNameList

-
-public de.dhbwstuttgart.typeinference.Menge<java.lang.String> getClassNameList()
-
-
-
-
-
-
- -

-addGenericTypeVars

-
-public void addGenericTypeVars(java.lang.String className,
-                               de.dhbwstuttgart.typeinference.Menge<GenericTypeVar> typeVarList)
-
-
-
-
-
-
- -

-getGenericsTable

-
-public java.util.Hashtable<java.lang.String,de.dhbwstuttgart.typeinference.Menge<GenericTypeVar>> getGenericsTable()
-
-
-
-
-
-
- -

-shallowCopy

-
-public CTypeReconstructionResult shallowCopy()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CHelper.html b/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CHelper.html deleted file mode 100755 index d5615d9a..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CHelper.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.CHelper - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.CHelper

-
-No usage of mycompiler.mytypereconstruction.CHelper -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CIntersectionType.html b/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CIntersectionType.html deleted file mode 100755 index ee365ae1..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CIntersectionType.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.CIntersectionType - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.CIntersectionType

-
- - - - - - - - - -
-Packages that use CIntersectionType
mycompiler.mytypereconstruction  
-  -

- - - - - -
-Uses of CIntersectionType in mycompiler.mytypereconstruction
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return CIntersectionType
- CIntersectionTypeCTypeReconstructionResult.getMethodIntersectionType(CMethodKey key) - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return types with arguments of type CIntersectionType
- java.util.Hashtable<CMethodKey,CIntersectionType>CTypeReconstructionResult.getMethodIntersectionTypes() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction with parameters of type CIntersectionType
- voidCTypeReconstructionResult.addMethodIntersectionType(CIntersectionType intersect) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CMultiplyTuple.html b/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CMultiplyTuple.html deleted file mode 100755 index 86b15e2b..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CMultiplyTuple.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.CMultiplyTuple - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.CMultiplyTuple

-
- - - - - - - - - - - - - -
-Packages that use CMultiplyTuple
mycompiler.mystatement  
mycompiler.mytypereconstruction  
-  -

- - - - - -
-Uses of CMultiplyTuple in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type CMultiplyTuple
-static CTripleSetMethodCall.TRMCallApp(CMultiplyTuple multiTuple, - java.lang.String classOrIdentifierName, - java.lang.String methodName, - int paraCount, - boolean isConstructorCall, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.34 von Martin Pl�micke
- CMultiplyTupleSetExpr.TRMultiply(CMultiplyTuple tuple, - Expr t, - CSupportData supportData) - -
-          (siehe Algorithmus 5.29 TRMultiply, Martin Pl�micke) -
Author: J�rg B�uerle
- CMultiplyTupleSetExpr.TRTuple(CMultiplyTuple result, - de.dhbwstuttgart.typeinference.Menge<Expr> terms, - CSupportData supportData) - -
-          (siehe Algorithmus 5.28 TRTuple, Martin Pl�micke) -
Author: J�rg B�uerle
-  -

- - - - - -
-Uses of CMultiplyTuple in mycompiler.mytypereconstruction
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return CMultiplyTuple
- CMultiplyTupleCMultiplyTuple.clone() - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CReconstructionTuple.html b/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CReconstructionTuple.html deleted file mode 100755 index 2b9cd4a8..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CReconstructionTuple.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.CReconstructionTuple - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.CReconstructionTuple

-
- - - - - - - - - -
-Packages that use CReconstructionTuple
mycompiler.mytypereconstruction  
-  -

- - - - - -
-Uses of CReconstructionTuple in mycompiler.mytypereconstruction
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return CReconstructionTuple
- CReconstructionTupleCReconstructionTuple.clone() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction with parameters of type CReconstructionTuple
- voidCTypeReconstructionResult.addDataFromTupel(CReconstructionTuple tuple) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CSubstitution.html b/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CSubstitution.html deleted file mode 100755 index b92154a4..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CSubstitution.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.CSubstitution - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.CSubstitution

-
- - - - - - - - - - - - - -
-Packages that use CSubstitution
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.typeassumption  
-  -

- - - - - -
-Uses of CSubstitution in mycompiler.mytypereconstruction
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return CSubstitution
- CSubstitutionCSubstitution.clone() - -
-           
-  -

- - - - - -
-Uses of CSubstitution in mycompiler.mytypereconstruction.typeassumption
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption with parameters of type CSubstitution
- voidCTypeAssumption.sub(CSubstitution substitution) - -
-           
- voidCMethodTypeAssumption.sub(CSubstitution substitution) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CSupportData.html b/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CSupportData.html deleted file mode 100755 index 31b958b6..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CSupportData.html +++ /dev/null @@ -1,943 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.CSupportData - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.CSupportData

-
- - - - - - - - - - - - - - - - - - - - - -
-Packages that use CSupportData
mycompiler.myclass  
mycompiler.myoperator  
mycompiler.mystatement  
mycompiler.mytypereconstruction  
-  -

- - - - - -
-Uses of CSupportData in mycompiler.myclass
-  -

- - - - - - - - - -
Methods in mycompiler.myclass with parameters of type CSupportData
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>Class.TRProg(CSupportData supportData) - -
-          Ausgangspunkt f�r den Typrekonstruktionsalgorithmus.
-  -

- - - - - -
-Uses of CSupportData in mycompiler.myoperator
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.myoperator with parameters of type CSupportData
- CTripleSetRelOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.49 bis 5.52 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
-abstract  CTripleSetOperator.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNotEqualOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.54 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetMulOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
- CTripleSetLogOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetEqualOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.53 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetAddOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.44 und 5.45 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
-  -

- - - - - -
-Uses of CSupportData in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type CSupportData
- CTripleSetThis.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.35 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetPreIncExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPreDecExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPostIncExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPostDecExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPositivExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNull.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNotExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.42 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetNewClass.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.31 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetNewArray.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.32 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetNegativeExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.41 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
- CTripleSetMethodCall.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.33 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLocalOrFieldVar.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.37 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.40 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetIntLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetInstVar.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.38 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetInstanceOf.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
-abstract  CTripleSetExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetCharLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetCastExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.43 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetBoolLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetBinary.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetAssign.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.30 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetInstVar.TRInstVar(CTriple triple, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.38-1 von Martin Pl�micke -
Author: J�rg B�uerle
-static CTripleSetMethodCall.TRMCallApp(CMultiplyTuple multiTuple, - java.lang.String classOrIdentifierName, - java.lang.String methodName, - int paraCount, - boolean isConstructorCall, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.34 von Martin Pl�micke
- CMultiplyTupleSetExpr.TRMultiply(CMultiplyTuple tuple, - Expr t, - CSupportData supportData) - -
-          (siehe Algorithmus 5.29 TRMultiply, Martin Pl�micke) -
Author: J�rg B�uerle
- CTripleSetWhileStmt.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.23 von Martin Pl�micke -
Achtung Workaround: RefType "Boolean" muss noch durch BaseType "BooleanType" - ersetzt werden.
- CTripleSetThis.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetStringLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
-abstract  CTripleSetStatement.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetReturn.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.22 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetPreIncExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPreDecExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPostIncExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPostDecExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPositivExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNull.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNotExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNewClass.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.26 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetNewArray.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNegativeExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetMethodCall.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.27 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLocalVarDecl.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.24 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLocalOrFieldVar.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetIntLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetInstVar.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetInstanceOf.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetIfStmt.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.21 von Martin Pl�micke -
Achtung Workaround: RefType "Boolean" durch BaseType \code{BooleanType} ersetzen.
- CTripleSetEmptyStmt.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetCharLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetCastExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetBoolLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetBlock.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.20 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetBinary.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetAssign.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.25 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetBlock.TRStatements(CSubstitutionSet sigma, - CTypeAssumptionSet V, - de.dhbwstuttgart.typeinference.Menge<Statement> statementList, - int index, - CTypeAssumptionSet V_start, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.19 von Martin Pl�micke -
Author: J�rg B�uerle
- CMultiplyTupleSetExpr.TRTuple(CMultiplyTuple result, - de.dhbwstuttgart.typeinference.Menge<Expr> terms, - CSupportData supportData) - -
-          (siehe Algorithmus 5.28 TRTuple, Martin Pl�micke) -
Author: J�rg B�uerle
-  -

- - - - - -
-Uses of CSupportData in mycompiler.mytypereconstruction
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return CSupportData
- CSupportDataCSupportData.clone() - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CTriple.html b/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CTriple.html deleted file mode 100755 index af021efe..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CTriple.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.CTriple - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.CTriple

-
- - - - - - - - - - - - - -
-Packages that use CTriple
mycompiler.mystatement  
mycompiler.mytypereconstruction  
-  -

- - - - - -
-Uses of CTriple in mycompiler.mystatement
-  -

- - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type CTriple
- CTripleSetInstVar.TRInstVar(CTriple triple, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.38-1 von Martin Plümicke -
Author: Jörg Bäuerle
-  -

- - - - - -
-Uses of CTriple in mycompiler.mytypereconstruction
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return CTriple
- CTripleCTriple.clone() - -
-           
- CTripleCTriple.cloneAndApplyUnify(CSubstitutionSet unifier) - -
-          Kopiert dieses Triple und wendet alle Substitutionen eines Unifiers auf - die Kopie an.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CTypeReconstructionResult.html b/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CTypeReconstructionResult.html deleted file mode 100755 index 9a795cee..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/class-use/CTypeReconstructionResult.html +++ /dev/null @@ -1,312 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.CTypeReconstructionResult - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.CTypeReconstructionResult

-
- - - - - - - - - - - - - - - - - -
-Packages that use CTypeReconstructionResult
mycompiler  
mycompiler.myclass  
mycompiler.mytypereconstruction  
-  -

- - - - - -
-Uses of CTypeReconstructionResult in mycompiler
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler that return types with arguments of type CTypeReconstructionResult
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>SourceFile.typeReconstruction() - -
-          Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf.
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>MyCompilerAPI.typeReconstruction() - -
-          Author: J�rg B�uerle
- Ruft den Typrekonstruktionsalgorithmus auf.
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>MyCompiler.typeReconstruction() - -
-          Author: J�rg B�uerle
- Ruft den Typrekonstruktionsalgorithmus auf.
-  -

- - - - - -
-Uses of CTypeReconstructionResult in mycompiler.myclass
-  -

- - - - - - - - - -
Methods in mycompiler.myclass that return types with arguments of type CTypeReconstructionResult
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>Class.TRProg(CSupportData supportData) - -
-          Ausgangspunkt f�r den Typrekonstruktionsalgorithmus.
-  -

- - - - - -
-Uses of CTypeReconstructionResult in mycompiler.mytypereconstruction
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return CTypeReconstructionResult
- CTypeReconstructionResultCTypeReconstructionResult.shallowCopy() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return types with arguments of type CTypeReconstructionResult
- de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult>CSupportData.getA() - -
-           
-  -

- - - - - - - - - -
Method parameters in mycompiler.mytypereconstruction with type arguments of type CTypeReconstructionResult
- voidCSupportData.setA(de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A) - -
-           
-  -

- - - - - - - - - - - -
Constructor parameters in mycompiler.mytypereconstruction with type arguments of type CTypeReconstructionResult
CSupportData(FC_TTO finiteClosure, - de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A, - java.lang.String currentClass) - -
-           
CSupportData(FC_TTO finiteClosure, - de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A, - java.lang.String currentClass, - java.lang.String currentMethod, - int currentMethodParaCount, - de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> blockIdList, - int blockDepth) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/package-frame.html b/doc/Javadoc/mycompiler/mytypereconstruction/package-frame.html deleted file mode 100755 index 28593eb6..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/package-frame.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction - - - - - - - - - - - -mycompiler.mytypereconstruction - - - - -
-Classes  - -
-CHelper -
-CIntersectionType -
-CMultiplyTuple -
-CReconstructionTuple -
-CSubstitution -
-CSupportData -
-CTriple -
-CTypeReconstructionResult
- - - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/package-summary.html b/doc/Javadoc/mycompiler/mytypereconstruction/package-summary.html deleted file mode 100755 index ee6cbf0d..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/package-summary.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.mytypereconstruction -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
CHelper 
CIntersectionTypeEin CIntersectionType gruppiert alle Typmöglichkeiten einer - bestimmten Methode, die über den CMethodKey eindeutig definiert ist.
CMultiplyTupleContainer-Klasse für Ergebniswerte der Algorithmen TRTuple und TRMultiply.
CReconstructionTupleContainer-Klasse für Ergebniswerte des Algorithmus TRStart.
CSubstitutionImplementierung einer Typsubstitution.
CSupportDataContainer-Klasse für bestimmte Hilfsdaten, die beim - Typrekonstruktionsalgorithmus benötigt und deshalb - rekursiv weiter gereicht werden.
CTripleContainer-Klasse für Ergebniswerte der Algorithmen TRStmt und TRExp.
CTypeReconstructionResultDiese Container-Klasse kapselt alle Ergebniswerte für eine mögliche Typkombination - aller Klassen und deren Methoden sowie lokalen Variablen.
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/package-tree.html b/doc/Javadoc/mycompiler/mytypereconstruction/package-tree.html deleted file mode 100755 index f3d3a6f4..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/package-tree.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.mytypereconstruction -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/package-use.html b/doc/Javadoc/mycompiler/mytypereconstruction/package-use.html deleted file mode 100755 index 9490fa60..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/package-use.html +++ /dev/null @@ -1,327 +0,0 @@ - - - - - - -Uses of Package mycompiler.mytypereconstruction - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.mytypereconstruction

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use mycompiler.mytypereconstruction
mycompiler  
mycompiler.myclass  
mycompiler.myoperator  
mycompiler.mystatement  
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.typeassumption  
-  -

- - - - - - - - -
-Classes in mycompiler.mytypereconstruction used by mycompiler
CTypeReconstructionResult - -
-          Diese Container-Klasse kapselt alle Ergebniswerte für eine mögliche Typkombination - aller Klassen und deren Methoden sowie lokalen Variablen.
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction used by mycompiler.myclass
CSupportData - -
-          Container-Klasse für bestimmte Hilfsdaten, die beim - Typrekonstruktionsalgorithmus benötigt und deshalb - rekursiv weiter gereicht werden.
CTypeReconstructionResult - -
-          Diese Container-Klasse kapselt alle Ergebniswerte für eine mögliche Typkombination - aller Klassen und deren Methoden sowie lokalen Variablen.
-  -

- - - - - - - - -
-Classes in mycompiler.mytypereconstruction used by mycompiler.myoperator
CSupportData - -
-          Container-Klasse für bestimmte Hilfsdaten, die beim - Typrekonstruktionsalgorithmus benötigt und deshalb - rekursiv weiter gereicht werden.
-  -

- - - - - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction used by mycompiler.mystatement
CMultiplyTuple - -
-          Container-Klasse für Ergebniswerte der Algorithmen TRTuple und TRMultiply.
CSupportData - -
-          Container-Klasse für bestimmte Hilfsdaten, die beim - Typrekonstruktionsalgorithmus benötigt und deshalb - rekursiv weiter gereicht werden.
CTriple - -
-          Container-Klasse für Ergebniswerte der Algorithmen TRStmt und TRExp.
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction used by mycompiler.mytypereconstruction
CIntersectionType - -
-          Ein CIntersectionType gruppiert alle Typmöglichkeiten einer - bestimmten Methode, die über den CMethodKey eindeutig definiert ist.
CMultiplyTuple - -
-          Container-Klasse für Ergebniswerte der Algorithmen TRTuple und TRMultiply.
CReconstructionTuple - -
-          Container-Klasse für Ergebniswerte des Algorithmus TRStart.
CSubstitution - -
-          Implementierung einer Typsubstitution.
CSupportData - -
-          Container-Klasse für bestimmte Hilfsdaten, die beim - Typrekonstruktionsalgorithmus benötigt und deshalb - rekursiv weiter gereicht werden.
CTriple - -
-          Container-Klasse für Ergebniswerte der Algorithmen TRStmt und TRExp.
CTypeReconstructionResult - -
-          Diese Container-Klasse kapselt alle Ergebniswerte für eine mögliche Typkombination - aller Klassen und deren Methoden sowie lokalen Variablen.
-  -

- - - - - - - - -
-Classes in mycompiler.mytypereconstruction used by mycompiler.mytypereconstruction.typeassumption
CSubstitution - -
-          Implementierung einer Typsubstitution.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/CReplaceTypeEvent.html b/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/CReplaceTypeEvent.html deleted file mode 100755 index 7b623abf..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/CReplaceTypeEvent.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - -CReplaceTypeEvent - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.replacementlistener -
-Class CReplaceTypeEvent

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent
-
-
-
-
public class CReplaceTypeEvent
extends java.lang.Object
- - -

-

-
Version:
-
$date
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
CReplaceTypeEvent(Type oldType, - Type newType) - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- TypegetNewType() - -
-           
- TypegetOldType() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CReplaceTypeEvent

-
-public CReplaceTypeEvent(Type oldType,
-                         Type newType)
-
-
- - - - - - - - -
-Method Detail
- -

-getNewType

-
-public Type getNewType()
-
-
-
-
-
-
- -

-getOldType

-
-public Type getOldType()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/IReplaceTypeEventProvider.html b/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/IReplaceTypeEventProvider.html deleted file mode 100755 index 73c91f93..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/IReplaceTypeEventProvider.html +++ /dev/null @@ -1,312 +0,0 @@ - - - - - - -IReplaceTypeEventProvider - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.replacementlistener -
-Interface IReplaceTypeEventProvider

-
-
All Known Implementing Classes:
TyploseVariable
-
-
-
-
public interface IReplaceTypeEventProvider
- - -

-Interface für ein Objekt, das ReplaceTypeEvents zur Verfügung stellt und - es TypeReplacementListenern erlaubt, sich zu registrieren. -

- -

-

-
Version:
-
$date
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidaddReplacementListener(ITypeReplacementListener listener) - -
-           
- booleancontainsListener(ITypeReplacementListener listener) - -
-           
- voidfireReplaceTypeEvent(CReplaceTypeEvent e) - -
-           
- java.util.Iterator<ITypeReplacementListener>getReplacementListeners() - -
-           
- voidremoveAllReplacementListeners() - -
-           
- voidremoveReplacementListener(ITypeReplacementListener listener) - -
-           
-  -

- - - - - - - - -
-Method Detail
- -

-addReplacementListener

-
-void addReplacementListener(ITypeReplacementListener listener)
-
-
-
-
-
-
- -

-removeReplacementListener

-
-void removeReplacementListener(ITypeReplacementListener listener)
-
-
-
-
-
-
- -

-removeAllReplacementListeners

-
-void removeAllReplacementListeners()
-
-
-
-
-
-
- -

-getReplacementListeners

-
-java.util.Iterator<ITypeReplacementListener> getReplacementListeners()
-
-
-
-
-
-
- -

-containsListener

-
-boolean containsListener(ITypeReplacementListener listener)
-
-
-
-
-
-
- -

-fireReplaceTypeEvent

-
-void fireReplaceTypeEvent(CReplaceTypeEvent e)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/ITypeReplacementListener.html b/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/ITypeReplacementListener.html deleted file mode 100755 index 573d9e20..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/ITypeReplacementListener.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - -ITypeReplacementListener - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.replacementlistener -
-Interface ITypeReplacementListener

-
-
All Known Implementing Classes:
Assign, Binary, BinaryExpr, BoolLiteral, CastExpr, CharLiteral, Constructor, Expr, ExprStmt, FormalParameter, InstanceOf, InstVar, InstVarDecl, IntLiteral, Literal, LocalOrFieldVar, LocalVarDecl, Method, MethodCall, NegativeExpr, NewArray, NewClass, NotExpr, Null, PositivExpr, PostDecExpr, PostIncExpr, PreDecExpr, PreIncExpr, StringLiteral, This, UnaryExpr
-
-
-
-
public interface ITypeReplacementListener
- - -

-Interface für einen TypeReplacementListener, der es ermöglicht, - einen Typ gegen einen anderen auszutauschen. -

- -

-

-
Version:
-
$date
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - - - - - - -
-Method Summary
- intgetTypeLineNumber() - -
-          Gibt die Zeilennummer zurück, in der eine TyploseVariable - angelegt worden ist.
- voidreplaceType(CReplaceTypeEvent e) - -
-          Tauscht einen Typ gegen einen anderen aus.
-  -

- - - - - - - - -
-Method Detail
- -

-replaceType

-
-void replaceType(CReplaceTypeEvent e)
-
-
Tauscht einen Typ gegen einen anderen aus. -
Author: Jörg Bäuerle -

-

-
Parameters:
e - Das Event mit dem neuen Typ
-
-
-
- -

-getTypeLineNumber

-
-int getTypeLineNumber()
-
-
Gibt die Zeilennummer zurück, in der eine TyploseVariable - angelegt worden ist. -
Author: Jörg Bäuerle -

-

- -
Returns:
Die Zeilennummer
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/CReplaceTypeEvent.html b/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/CReplaceTypeEvent.html deleted file mode 100755 index 6dae4b1e..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/CReplaceTypeEvent.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent

-
- - - - - - - - - - - - - - - - - - - - - -
-Packages that use CReplaceTypeEvent
mycompiler.myclass  
mycompiler.mystatement  
mycompiler.mytype  
mycompiler.mytypereconstruction.replacementlistener  
-  -

- - - - - -
-Uses of CReplaceTypeEvent in mycompiler.myclass
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler.myclass with parameters of type CReplaceTypeEvent
- voidMethod.replaceType(CReplaceTypeEvent e) - -
-          
Author: Jörg Bäuerle
- voidInstVarDecl.replaceType(CReplaceTypeEvent e) - -
-          
Author: Jörg Bäuerle
- voidFormalParameter.replaceType(CReplaceTypeEvent e) - -
-          
Author: Jörg Bäuerle
-  -

- - - - - -
-Uses of CReplaceTypeEvent in mycompiler.mystatement
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type CReplaceTypeEvent
- voidLocalVarDecl.replaceType(CReplaceTypeEvent e) - -
-          
Author: Jörg Bäuerle
- voidExprStmt.replaceType(CReplaceTypeEvent e) - -
-           
-  -

- - - - - -
-Uses of CReplaceTypeEvent in mycompiler.mytype
-  -

- - - - - - - - - -
Methods in mycompiler.mytype with parameters of type CReplaceTypeEvent
- voidTyploseVariable.fireReplaceTypeEvent(CReplaceTypeEvent e) - -
-          
Author: Jörg Bäuerle
-  -

- - - - - -
-Uses of CReplaceTypeEvent in mycompiler.mytypereconstruction.replacementlistener
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.replacementlistener with parameters of type CReplaceTypeEvent
- voidIReplaceTypeEventProvider.fireReplaceTypeEvent(CReplaceTypeEvent e) - -
-           
- voidITypeReplacementListener.replaceType(CReplaceTypeEvent e) - -
-          Tauscht einen Typ gegen einen anderen aus.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/IReplaceTypeEventProvider.html b/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/IReplaceTypeEventProvider.html deleted file mode 100755 index aaa4249e..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/IReplaceTypeEventProvider.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Interface mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
mycompiler.mytypereconstruction.replacementlistener.IReplaceTypeEventProvider

-
- - - - - - - - - -
-Packages that use IReplaceTypeEventProvider
mycompiler.mytype  
-  -

- - - - - -
-Uses of IReplaceTypeEventProvider in mycompiler.mytype
-  -

- - - - - - - - - -
Classes in mycompiler.mytype that implement IReplaceTypeEventProvider
- classTyploseVariable - -
-          Repräsentiert einen Typparameter für einen vom Programmierer nicht angegeben Typ.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/ITypeReplacementListener.html b/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/ITypeReplacementListener.html deleted file mode 100755 index 2e4329cc..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/class-use/ITypeReplacementListener.html +++ /dev/null @@ -1,567 +0,0 @@ - - - - - - -Uses of Interface mycompiler.mytypereconstruction.replacementlistener.ITypeReplacementListener - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
mycompiler.mytypereconstruction.replacementlistener.ITypeReplacementListener

-
- - - - - - - - - - - - - - - - - - - - - -
-Packages that use ITypeReplacementListener
mycompiler.myclass  
mycompiler.mystatement  
mycompiler.mytype  
mycompiler.mytypereconstruction.replacementlistener  
-  -

- - - - - -
-Uses of ITypeReplacementListener in mycompiler.myclass
-  -

- - - - - - - - - - - - - - - - - - - - - -
Classes in mycompiler.myclass that implement ITypeReplacementListener
- classConstructor - -
-           
- classFormalParameter - -
-           
- classInstVarDecl - -
-           
- classMethod - -
-           
-  -

- - - - - -
-Uses of ITypeReplacementListener in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in mycompiler.mystatement that implement ITypeReplacementListener
- classAssign - -
-           
- classBinary - -
-           
- classBinaryExpr - -
-           
- classBoolLiteral - -
-           
- classCastExpr - -
-           
- classCharLiteral - -
-           
- classExpr - -
-           
- classExprStmt - -
-           
- classInstanceOf - -
-           
- classInstVar - -
-           
- classIntLiteral - -
-           
- classLiteral - -
-           
- classLocalOrFieldVar - -
-           
- classLocalVarDecl - -
-           
- classMethodCall - -
-           
- classNegativeExpr - -
-           
- classNewArray - -
-           
- classNewClass - -
-           
- classNotExpr - -
-           
- classNull - -
-           
- classPositivExpr - -
-           
- classPostDecExpr - -
-           
- classPostIncExpr - -
-           
- classPreDecExpr - -
-           
- classPreIncExpr - -
-           
- classStringLiteral - -
-           
- classThis - -
-           
- classUnaryExpr - -
-           
-  -

- - - - - -
-Uses of ITypeReplacementListener in mycompiler.mytype
-  -

- - - - - - - - - -
Methods in mycompiler.mytype that return types with arguments of type ITypeReplacementListener
- java.util.Iterator<ITypeReplacementListener>TyploseVariable.getReplacementListeners() - -
-          
Author: Jörg Bäuerle
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytype with parameters of type ITypeReplacementListener
- voidTyploseVariable.addReplacementListener(ITypeReplacementListener listener) - -
-          
Author: Jörg Bäuerle
- booleanTyploseVariable.containsListener(ITypeReplacementListener listener) - -
-          
Author: Jörg Bäuerle
- voidTyploseVariable.removeReplacementListener(ITypeReplacementListener listener) - -
-          
Author: Jörg Bäuerle
-  -

- - - - - -
-Uses of ITypeReplacementListener in mycompiler.mytypereconstruction.replacementlistener
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.replacementlistener that return types with arguments of type ITypeReplacementListener
- java.util.Iterator<ITypeReplacementListener>IReplaceTypeEventProvider.getReplacementListeners() - -
-           
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.replacementlistener with parameters of type ITypeReplacementListener
- voidIReplaceTypeEventProvider.addReplacementListener(ITypeReplacementListener listener) - -
-           
- booleanIReplaceTypeEventProvider.containsListener(ITypeReplacementListener listener) - -
-           
- voidIReplaceTypeEventProvider.removeReplacementListener(ITypeReplacementListener listener) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-frame.html b/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-frame.html deleted file mode 100755 index a739b04d..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-frame.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.replacementlistener - - - - - - - - - - - -mycompiler.mytypereconstruction.replacementlistener - - - - -
-Interfaces  - -
-IReplaceTypeEventProvider -
-ITypeReplacementListener
- - - - - - -
-Classes  - -
-CReplaceTypeEvent
- - - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-summary.html b/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-summary.html deleted file mode 100755 index 66c06c81..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-summary.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.replacementlistener - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.mytypereconstruction.replacementlistener -

- - - - - - - - - - - - - -
-Interface Summary
IReplaceTypeEventProviderInterface für ein Objekt, das ReplaceTypeEvents zur Verfügung stellt und - es TypeReplacementListenern erlaubt, sich zu registrieren.
ITypeReplacementListenerInterface für einen TypeReplacementListener, der es ermöglicht, - einen Typ gegen einen anderen auszutauschen.
-  - -

- - - - - - - - - -
-Class Summary
CReplaceTypeEvent 
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-tree.html b/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-tree.html deleted file mode 100755 index 3dd3e640..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-tree.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.replacementlistener Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.mytypereconstruction.replacementlistener -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

-
    -
  • java.lang.Object -
-

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-use.html b/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-use.html deleted file mode 100755 index e74de964..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/replacementlistener/package-use.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - -Uses of Package mycompiler.mytypereconstruction.replacementlistener - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.mytypereconstruction.replacementlistener

-
- - - - - - - - - - - - - - - - - - - - - -
-Packages that use mycompiler.mytypereconstruction.replacementlistener
mycompiler.myclass  
mycompiler.mystatement  
mycompiler.mytype  
mycompiler.mytypereconstruction.replacementlistener  
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction.replacementlistener used by mycompiler.myclass
CReplaceTypeEvent - -
-           
ITypeReplacementListener - -
-          Interface für einen TypeReplacementListener, der es ermöglicht, - einen Typ gegen einen anderen auszutauschen.
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction.replacementlistener used by mycompiler.mystatement
CReplaceTypeEvent - -
-           
ITypeReplacementListener - -
-          Interface für einen TypeReplacementListener, der es ermöglicht, - einen Typ gegen einen anderen auszutauschen.
-  -

- - - - - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction.replacementlistener used by mycompiler.mytype
CReplaceTypeEvent - -
-           
IReplaceTypeEventProvider - -
-          Interface für ein Objekt, das ReplaceTypeEvents zur Verfügung stellt und - es TypeReplacementListenern erlaubt, sich zu registrieren.
ITypeReplacementListener - -
-          Interface für einen TypeReplacementListener, der es ermöglicht, - einen Typ gegen einen anderen auszutauschen.
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction.replacementlistener used by mycompiler.mytypereconstruction.replacementlistener
CReplaceTypeEvent - -
-           
ITypeReplacementListener - -
-          Interface für einen TypeReplacementListener, der es ermöglicht, - einen Typ gegen einen anderen auszutauschen.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CHashtableSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CHashtableSet.html deleted file mode 100755 index 8c64d378..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CHashtableSet.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - - - -CHashtableSet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.set -
-Class CHashtableSet<E extends IHashSetElement>

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.set.CSet<E>
-      extended by mycompiler.mytypereconstruction.set.CHashtableSet<E>
-
-
-
Direct Known Subclasses:
CTypeAssumptionSet
-
-
-
-
public abstract class CHashtableSet<E extends IHashSetElement>
extends CSet<E>
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:08 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
CHashtableSet() - -
-          Author: Jörg Bäuerle
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidaddElement(E element) - -
-           
- voidaddElement(IHashSetKey elementKey, - E element) - -
-           
- booleancontains(E element) - -
-           
- booleanequals(java.lang.Object obj) - -
-           
- intgetCardinality() - -
-           
- EgetElement(IHashSetKey key) - -
-           
- java.util.Hashtable<IHashSetKey,E>getHashtable() - -
-           
- java.util.Iterator<E>getIterator() - -
-           
- voidremoveElement(E element) - -
-           
- voidremoveElement(IHashSetKey key) - -
-           
- voidsetHashtable(java.util.Hashtable<IHashSetKey,E> hash) - -
-           
- voidsubtract(CSet<E> anotherSet) - -
-           
- voidunite(CSet<E> anotherSet) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.set.CSet
deepCopy, shallowCopy, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CHashtableSet

-
-public CHashtableSet()
-
-
Author: Jörg Bäuerle
-

-

- - - - - - - - -
-Method Detail
- -

-addElement

-
-public void addElement(E element)
-
-
-
Specified by:
addElement in class CSet<E extends IHashSetElement>
-
-
-
-
-
-
- -

-addElement

-
-public void addElement(IHashSetKey elementKey,
-                       E element)
-
-
-
-
-
-
- -

-getElement

-
-public E getElement(IHashSetKey key)
-
-
-
-
-
-
- -

-removeElement

-
-public void removeElement(E element)
-
-
-
Specified by:
removeElement in class CSet<E extends IHashSetElement>
-
-
-
-
-
-
- -

-removeElement

-
-public void removeElement(IHashSetKey key)
-
-
-
-
-
-
- -

-getCardinality

-
-public int getCardinality()
-
-
-
Specified by:
getCardinality in class CSet<E extends IHashSetElement>
-
-
-
-
-
-
- -

-getHashtable

-
-public java.util.Hashtable<IHashSetKey,E> getHashtable()
-
-
-
-
-
-
- -

-setHashtable

-
-public void setHashtable(java.util.Hashtable<IHashSetKey,E> hash)
-
-
-
-
-
-
- -

-getIterator

-
-public java.util.Iterator<E> getIterator()
-
-
-
Specified by:
getIterator in class CSet<E extends IHashSetElement>
-
-
-
-
-
-
- -

-unite

-
-public void unite(CSet<E> anotherSet)
-
-
-
Specified by:
unite in class CSet<E extends IHashSetElement>
-
-
-
-
-
-
- -

-subtract

-
-public void subtract(CSet<E> anotherSet)
-
-
-
Specified by:
subtract in class CSet<E extends IHashSetElement>
-
-
-
-
-
-
- -

-contains

-
-public boolean contains(E element)
-
-
-
Specified by:
contains in class CSet<E extends IHashSetElement>
-
-
-
-
-
-
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
-
Specified by:
equals in class CSet<E extends IHashSetElement>
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CMultiplyTupleSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CMultiplyTupleSet.html deleted file mode 100755 index 2331c954..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CMultiplyTupleSet.html +++ /dev/null @@ -1,300 +0,0 @@ - - - - - - -CMultiplyTupleSet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.set -
-Class CMultiplyTupleSet

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.set.CSet<E>
-      extended by mycompiler.mytypereconstruction.set.CMengeSet<CMultiplyTuple>
-          extended by mycompiler.mytypereconstruction.set.CMultiplyTupleSet
-
-
-
-
public class CMultiplyTupleSet
extends CMengeSet<CMultiplyTuple>
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:08 $
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
CMultiplyTupleSet() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- CMultiplyTupleSetdeepCopy() - -
-           
- CMultiplyTupleSetshallowCopy() - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.set.CMengeSet
addElement, contains, equals, getCardinality, getIterator, getMenge, removeElement, setMenge, subtract, unite
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.set.CSet
toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CMultiplyTupleSet

-
-public CMultiplyTupleSet()
-
-
- - - - - - - - -
-Method Detail
- -

-shallowCopy

-
-public CMultiplyTupleSet shallowCopy()
-
-
-
Specified by:
shallowCopy in class CSet<CMultiplyTuple>
-
-
-
-
-
-
- -

-deepCopy

-
-public CMultiplyTupleSet deepCopy()
-
-
-
Specified by:
deepCopy in class CSet<CMultiplyTuple>
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CReconstructionTupleSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CReconstructionTupleSet.html deleted file mode 100755 index 49802c57..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CReconstructionTupleSet.html +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - -CReconstructionTupleSet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.set -
-Class CReconstructionTupleSet

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.set.CSet<E>
-      extended by mycompiler.mytypereconstruction.set.CMengeSet<CReconstructionTuple>
-          extended by mycompiler.mytypereconstruction.set.CReconstructionTupleSet
-
-
-
-
public class CReconstructionTupleSet
extends CMengeSet<CReconstructionTuple>
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:08 $
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
CReconstructionTupleSet() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- CReconstructionTupleSetdeepCopy() - -
-          
Author: J�rg B�uerle
- CReconstructionTupleSetshallowCopy() - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.set.CMengeSet
addElement, contains, equals, getCardinality, getIterator, getMenge, removeElement, setMenge, subtract, unite
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.set.CSet
toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CReconstructionTupleSet

-
-public CReconstructionTupleSet()
-
-
- - - - - - - - -
-Method Detail
- -

-shallowCopy

-
-public CReconstructionTupleSet shallowCopy()
-
-
-
Specified by:
shallowCopy in class CSet<CReconstructionTuple>
-
-
-
-
-
-
- -

-deepCopy

-
-public CReconstructionTupleSet deepCopy()
-
-

Author: J�rg B�uerle -

-

-
Specified by:
deepCopy in class CSet<CReconstructionTuple>
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CSet.html deleted file mode 100755 index b6bd68c4..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CSet.html +++ /dev/null @@ -1,454 +0,0 @@ - - - - - - -CSet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.set -
-Class CSet<E>

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.set.CSet<E>
-
-
-
Direct Known Subclasses:
CHashtableSet, CMengeSet
-
-
-
-
public abstract class CSet<E>
extends java.lang.Object
- - -

-

-
Version:
-
$date
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
CSet() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
-abstract  voidaddElement(E element) - -
-           
-abstract  booleancontains(E element) - -
-           
-abstract  CSet<E>deepCopy() - -
-           
-abstract  booleanequals(java.lang.Object obj) - -
-           
-abstract  intgetCardinality() - -
-           
-abstract  java.util.Iterator<E>getIterator() - -
-           
-abstract  voidremoveElement(E element) - -
-           
-abstract  CSet<E>shallowCopy() - -
-           
-abstract  voidsubtract(CSet<E> anotherSet) - -
-           
- java.lang.StringtoString() - -
-           
-abstract  voidunite(CSet<E> anotherSet) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CSet

-
-public CSet()
-
-
- - - - - - - - -
-Method Detail
- -

-addElement

-
-public abstract void addElement(E element)
-
-
-
-
-
-
- -

-removeElement

-
-public abstract void removeElement(E element)
-
-
-
-
-
-
- -

-unite

-
-public abstract void unite(CSet<E> anotherSet)
-
-
-
-
-
-
- -

-subtract

-
-public abstract void subtract(CSet<E> anotherSet)
-
-
-
-
-
-
- -

-shallowCopy

-
-public abstract CSet<E> shallowCopy()
-
-
-
-
-
-
- -

-deepCopy

-
-public abstract CSet<E> deepCopy()
-
-
-
-
-
-
- -

-contains

-
-public abstract boolean contains(E element)
-
-
-
-
-
-
- -

-getCardinality

-
-public abstract int getCardinality()
-
-
-
-
-
-
- -

-getIterator

-
-public abstract java.util.Iterator<E> getIterator()
-
-
-
-
-
-
- -

-equals

-
-public abstract boolean equals(java.lang.Object obj)
-
-
-
Overrides:
equals in class java.lang.Object
-
-
-
-
-
-
- -

-toString

-
-public java.lang.String toString()
-
-
-
Overrides:
toString in class java.lang.Object
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CSubstitutionSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CSubstitutionSet.html deleted file mode 100755 index ccb68b2a..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CSubstitutionSet.html +++ /dev/null @@ -1,366 +0,0 @@ - - - - - - -CSubstitutionSet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.set -
-Class CSubstitutionSet

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.set.CSet<E>
-      extended by mycompiler.mytypereconstruction.set.CMengeSet<CSubstitution>
-          extended by mycompiler.mytypereconstruction.set.CSubstitutionSet
-
-
-
-
public class CSubstitutionSet
extends CMengeSet<CSubstitution>
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:08 $
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - - - - - - - - -
-Constructor Summary
CSubstitutionSet() - -
-           
CSubstitutionSet(de.dhbwstuttgart.typeinference.Menge<Pair> unifiers) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidapplyUnifier(CSubstitutionSet unifier) - -
-          Wendet den Unifier auf die rechten Seiten alle Substitutionen an.
- CSubstitutionSetdeepCopy() - -
-           
- voidexecute() - -
-          F�hrt jede einzelne CSubstitution aus.
- CSubstitutionSetshallowCopy() - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.set.CMengeSet
addElement, contains, equals, getCardinality, getIterator, getMenge, removeElement, setMenge, subtract, unite
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.set.CSet
toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CSubstitutionSet

-
-public CSubstitutionSet()
-
-
-
- -

-CSubstitutionSet

-
-public CSubstitutionSet(de.dhbwstuttgart.typeinference.Menge<Pair> unifiers)
-                 throws CTypeReconstructionException
-
-
- -
Throws: -
CTypeReconstructionException
-
- - - - - - - - -
-Method Detail
- -

-shallowCopy

-
-public CSubstitutionSet shallowCopy()
-
-
-
Specified by:
shallowCopy in class CSet<CSubstitution>
-
-
-
-
-
-
- -

-deepCopy

-
-public CSubstitutionSet deepCopy()
-
-
-
Specified by:
deepCopy in class CSet<CSubstitution>
-
-
-
-
-
-
- -

-applyUnifier

-
-public void applyUnifier(CSubstitutionSet unifier)
-
-
Wendet den Unifier auf die rechten Seiten alle Substitutionen an. -
Author: J�rg B�uerle -

-

-
Parameters:
unifier -
-
-
-
- -

-execute

-
-public void execute()
-             throws CTypeReconstructionException
-
-
F�hrt jede einzelne CSubstitution aus. -
Author: J�rg B�uerle -

-

- -
Throws: -
CTypeReconstructionException - Falls TyploseVariable nicht in Registry gefunden wird.
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CTripleSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CTripleSet.html deleted file mode 100755 index 2bad0309..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CTripleSet.html +++ /dev/null @@ -1,300 +0,0 @@ - - - - - - -CTripleSet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.set -
-Class CTripleSet

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.set.CSet<E>
-      extended by mycompiler.mytypereconstruction.set.CMengeSet<CTriple>
-          extended by mycompiler.mytypereconstruction.set.CTripleSet
-
-
-
-
public class CTripleSet
extends CMengeSet<CTriple>
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:08 $
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
CTripleSet() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- CTripleSetdeepCopy() - -
-           
- CTripleSetshallowCopy() - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.set.CMengeSet
addElement, contains, equals, getCardinality, getIterator, getMenge, removeElement, setMenge, subtract, unite
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.set.CSet
toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CTripleSet

-
-public CTripleSet()
-
-
- - - - - - - - -
-Method Detail
- -

-shallowCopy

-
-public CTripleSet shallowCopy()
-
-
-
Specified by:
shallowCopy in class CSet<CTriple>
-
-
-
-
-
-
- -

-deepCopy

-
-public CTripleSet deepCopy()
-
-
-
Specified by:
deepCopy in class CSet<CTriple>
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CTypeAssumptionSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CTypeAssumptionSet.html deleted file mode 100755 index 6e4c6cbe..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CTypeAssumptionSet.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - -CTypeAssumptionSet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.set -
-Class CTypeAssumptionSet

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.set.CSet<E>
-      extended by mycompiler.mytypereconstruction.set.CHashtableSet<CTypeAssumption>
-          extended by mycompiler.mytypereconstruction.set.CTypeAssumptionSet
-
-
-
-
public class CTypeAssumptionSet
extends CHashtableSet<CTypeAssumption>
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:08 $
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
CTypeAssumptionSet() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- CTypeAssumptionSetdeepCopy() - -
-           
- CTypeAssumptionSetshallowCopy() - -
-           
- voidsub(CSubstitutionSet subtitutions) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.set.CHashtableSet
addElement, addElement, contains, equals, getCardinality, getElement, getHashtable, getIterator, removeElement, removeElement, setHashtable, subtract, unite
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.set.CSet
toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CTypeAssumptionSet

-
-public CTypeAssumptionSet()
-
-
- - - - - - - - -
-Method Detail
- -

-sub

-
-public void sub(CSubstitutionSet subtitutions)
-
-
-
-
-
-
- -

-shallowCopy

-
-public CTypeAssumptionSet shallowCopy()
-
-
-
Specified by:
shallowCopy in class CSet<CTypeAssumption>
-
-
-
-
-
-
- -

-deepCopy

-
-public CTypeAssumptionSet deepCopy()
-
-
-
Specified by:
deepCopy in class CSet<CTypeAssumption>
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/CVectorSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/CVectorSet.html deleted file mode 100755 index e56a1bf7..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/CVectorSet.html +++ /dev/null @@ -1,463 +0,0 @@ - - - - - - -CMengeSet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.set -
-Class CMengeSet<E>

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.set.CSet<E>
-      extended by mycompiler.mytypereconstruction.set.CMengeSet<E>
-
-
-
Direct Known Subclasses:
CMultiplyTupleSet, CReconstructionTupleSet, CSubstitutionSet, CTripleSet
-
-
-
-
public abstract class CMengeSet<E>
extends CSet<E>
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:08 $
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
CMengeSet() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidaddElement(E element) - -
-           
- booleancontains(E element) - -
-           
- booleanequals(java.lang.Object obj) - -
-           
- intgetCardinality() - -
-           
- java.util.Iterator<E>getIterator() - -
-           
- de.dhbwstuttgart.typeinference.Menge<E>getMenge() - -
-           
- voidremoveElement(E element) - -
-           
- voidsetMenge(de.dhbwstuttgart.typeinference.Menge<E> elements) - -
-           
- voidsubtract(CSet<E> anotherSet) - -
-           
- voidunite(CSet<E> anotherSet) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.set.CSet
deepCopy, shallowCopy, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CMengeSet

-
-public CMengeSet()
-
-
- - - - - - - - -
-Method Detail
- -

-addElement

-
-public void addElement(E element)
-
-
-
Specified by:
addElement in class CSet<E>
-
-
-
-
-
-
- -

-removeElement

-
-public void removeElement(E element)
-
-
-
Specified by:
removeElement in class CSet<E>
-
-
-
-
-
-
- -

-getIterator

-
-public java.util.Iterator<E> getIterator()
-
-
-
Specified by:
getIterator in class CSet<E>
-
-
-
-
-
-
- -

-getMenge

-
-public de.dhbwstuttgart.typeinference.Menge<E> getMenge()
-
-
-
-
-
-
- -

-setMenge

-
-public void setMenge(de.dhbwstuttgart.typeinference.Menge<E> elements)
-
-
-
-
-
-
- -

-unite

-
-public void unite(CSet<E> anotherSet)
-
-
-
Specified by:
unite in class CSet<E>
-
-
-
-
-
-
- -

-subtract

-
-public void subtract(CSet<E> anotherSet)
-
-
-
Specified by:
subtract in class CSet<E>
-
-
-
-
-
-
- -

-contains

-
-public boolean contains(E element)
-
-
-
Specified by:
contains in class CSet<E>
-
-
-
-
-
-
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
-
Specified by:
equals in class CSet<E>
-
-
-
-
-
-
- -

-getCardinality

-
-public int getCardinality()
-
-
-
Specified by:
getCardinality in class CSet<E>
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/IHashSetElement.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/IHashSetElement.html deleted file mode 100755 index 0244ad01..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/IHashSetElement.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - -IHashSetElement - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.set -
-Interface IHashSetElement

-
-
All Known Implementing Classes:
CInstVarTypeAssumption, CLocalVarTypeAssumption, CMethodTypeAssumption, CParaTypeAssumption, CTypeAssumption
-
-
-
-
public interface IHashSetElement
- - -

-

-
Version:
-
$date
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - - - - - - -
-Method Summary
- IHashSetKeygetHashSetKey() - -
-           
-  -

- - - - - - - - -
-Method Detail
- -

-getHashSetKey

-
-IHashSetKey getHashSetKey()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/IHashSetKey.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/IHashSetKey.html deleted file mode 100755 index 6b10d89b..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/IHashSetKey.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - -IHashSetKey - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.set -
-Interface IHashSetKey

-
-
All Known Implementing Classes:
CInstVarKey, CLocalVarKey, CMethodKey, CMethodParaKey, CTypeAssumptionKey
-
-
-
-
public interface IHashSetKey
- - -

-

-
Version:
-
$date
-
Author:
-
Jörg Bäuerle
-
-
- -

- -

- -


- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CHashtableSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CHashtableSet.html deleted file mode 100755 index 68cae01e..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CHashtableSet.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CHashtableSet - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.set.CHashtableSet

-
- - - - - - - - - -
-Packages that use CHashtableSet
mycompiler.mytypereconstruction.set  
-  -

- - - - - -
-Uses of CHashtableSet in mycompiler.mytypereconstruction.set
-  -

- - - - - - - - - -
Subclasses of CHashtableSet in mycompiler.mytypereconstruction.set
- classCTypeAssumptionSet - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CMultiplyTupleSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CMultiplyTupleSet.html deleted file mode 100755 index da10a80f..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CMultiplyTupleSet.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CMultiplyTupleSet - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.set.CMultiplyTupleSet

-
- - - - - - - - - - - - - -
-Packages that use CMultiplyTupleSet
mycompiler.mystatement  
mycompiler.mytypereconstruction.set  
-  -

- - - - - -
-Uses of CMultiplyTupleSet in mycompiler.mystatement
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mystatement that return CMultiplyTupleSet
- CMultiplyTupleSetExpr.TRMultiply(CMultiplyTuple tuple, - Expr t, - CSupportData supportData) - -
-          (siehe Algorithmus 5.29 TRMultiply, Martin Pl�micke) -
Author: J�rg B�uerle
- CMultiplyTupleSetExpr.TRTuple(CMultiplyTuple result, - de.dhbwstuttgart.typeinference.Menge<Expr> terms, - CSupportData supportData) - -
-          (siehe Algorithmus 5.28 TRTuple, Martin Pl�micke) -
Author: J�rg B�uerle
-  -

- - - - - -
-Uses of CMultiplyTupleSet in mycompiler.mytypereconstruction.set
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.set that return CMultiplyTupleSet
- CMultiplyTupleSetCMultiplyTupleSet.deepCopy() - -
-           
- CMultiplyTupleSetCMultiplyTupleSet.shallowCopy() - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CReconstructionTupleSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CReconstructionTupleSet.html deleted file mode 100755 index ca1c18ec..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CReconstructionTupleSet.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CReconstructionTupleSet - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.set.CReconstructionTupleSet

-
- - - - - - - - - -
-Packages that use CReconstructionTupleSet
mycompiler.mytypereconstruction.set  
-  -

- - - - - -
-Uses of CReconstructionTupleSet in mycompiler.mytypereconstruction.set
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.set that return CReconstructionTupleSet
- CReconstructionTupleSetCReconstructionTupleSet.deepCopy() - -
-          
Author: Jörg Bäuerle
- CReconstructionTupleSetCReconstructionTupleSet.shallowCopy() - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CSet.html deleted file mode 100755 index 824dfbb6..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CSet.html +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CSet - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.set.CSet

-
- - - - - - - - - -
-Packages that use CSet
mycompiler.mytypereconstruction.set  
-  -

- - - - - -
-Uses of CSet in mycompiler.mytypereconstruction.set
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subclasses of CSet in mycompiler.mytypereconstruction.set
- classCHashtableSet<E extends IHashSetElement> - -
-           
- classCMultiplyTupleSet - -
-           
- classCReconstructionTupleSet - -
-           
- classCSubstitutionSet - -
-           
- classCTripleSet - -
-           
- classCTypeAssumptionSet - -
-           
- classCMengeSet<E> - -
-           
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.set that return CSet
-abstract  CSet<E>CSet.deepCopy() - -
-           
-abstract  CSet<E>CSet.shallowCopy() - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.set with parameters of type CSet
- voidCMengeSet.subtract(CSet<E> anotherSet) - -
-           
-abstract  voidCSet.subtract(CSet<E> anotherSet) - -
-           
- voidCHashtableSet.subtract(CSet<E> anotherSet) - -
-           
- voidCMengeSet.unite(CSet<E> anotherSet) - -
-           
-abstract  voidCSet.unite(CSet<E> anotherSet) - -
-           
- voidCHashtableSet.unite(CSet<E> anotherSet) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CSubstitutionSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CSubstitutionSet.html deleted file mode 100755 index b7cb9326..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CSubstitutionSet.html +++ /dev/null @@ -1,1071 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CSubstitutionSet - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.set.CSubstitutionSet

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use CSubstitutionSet
mycompiler.myoperator  
mycompiler.mystatement  
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.set  
mycompiler.mytypereconstruction.typeassumption  
-  -

- - - - - -
-Uses of CSubstitutionSet in mycompiler.myoperator
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.myoperator with parameters of type CSubstitutionSet
- CTripleSetRelOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.49 bis 5.52 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
-abstract  CTripleSetOperator.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNotEqualOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.54 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetMulOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
- CTripleSetLogOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetEqualOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.53 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetAddOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.44 und 5.45 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
-  -

- - - - - -
-Uses of CSubstitutionSet in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type CSubstitutionSet
- CTripleSetThis.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.35 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetPreIncExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPreDecExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPostIncExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPostDecExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPositivExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNull.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNotExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.42 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetNewClass.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.31 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetNewArray.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.32 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetNegativeExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.41 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
- CTripleSetMethodCall.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.33 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLocalOrFieldVar.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.37 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.40 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetIntLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetInstVar.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.38 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetInstanceOf.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
-abstract  CTripleSetExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetCharLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetCastExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.43 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetBoolLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetBinary.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetAssign.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.30 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetWhileStmt.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.23 von Martin Pl�micke -
Achtung Workaround: RefType "Boolean" muss noch durch BaseType "BooleanType" - ersetzt werden.
- CTripleSetThis.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetStringLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
-abstract  CTripleSetStatement.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetReturn.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.22 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetPreIncExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPreDecExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPostIncExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPostDecExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPositivExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNull.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNotExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNewClass.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.26 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetNewArray.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNegativeExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetMethodCall.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.27 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLocalVarDecl.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.24 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLocalOrFieldVar.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetIntLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetInstVar.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetInstanceOf.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetIfStmt.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.21 von Martin Pl�micke -
Achtung Workaround: RefType "Boolean" durch BaseType \code{BooleanType} ersetzen.
- CTripleSetEmptyStmt.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetCharLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetCastExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetBoolLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetBlock.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.20 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetBinary.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetAssign.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.25 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetBlock.TRStatements(CSubstitutionSet sigma, - CTypeAssumptionSet V, - de.dhbwstuttgart.typeinference.Menge<Statement> statementList, - int index, - CTypeAssumptionSet V_start, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.19 von Martin Pl�micke -
Author: J�rg B�uerle
-  -

- - - - - -
-Uses of CSubstitutionSet in mycompiler.mytypereconstruction
-  -

- - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return CSubstitutionSet
- CSubstitutionSetCReconstructionTuple.getSubSet() - -
-           
- CSubstitutionSetCTypeReconstructionResult.getSubstitutions() - -
-           
- CSubstitutionSetCTriple.getSubstitutions() - -
-          Author: J�rg B�uerle
- CSubstitutionSetCMultiplyTuple.getSubstitutions() - -
-          Author: J�rg B�uerle
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction with parameters of type CSubstitutionSet
- voidCSubstitution.applyUnifier(CSubstitutionSet unifier) - -
-          Wendet den Unifier auf die rechte Seite dieser Substitution an.
- CTripleCTriple.cloneAndApplyUnify(CSubstitutionSet unifier) - -
-          Kopiert dieses Triple und wendet alle Substitutionen eines Unifiers auf - die Kopie an.
- voidCReconstructionTuple.setSubSet(CSubstitutionSet subSet) - -
-           
- voidCTypeReconstructionResult.setSubstitutions(CSubstitutionSet substitutions) - -
-           
- voidCTriple.setSubstitutions(CSubstitutionSet substitutions) - -
-          Author: J�rg B�uerle
- voidCMultiplyTuple.setSubstitutions(CSubstitutionSet substitutions) - -
-          Author: J�rg B�uerle
-  -

- - - - - - - - - - - - - - -
Constructors in mycompiler.mytypereconstruction with parameters of type CSubstitutionSet
CMultiplyTuple(CSubstitutionSet substitutions, - de.dhbwstuttgart.typeinference.Menge<Type> resultTypes, - CTypeAssumptionSet assumptionSet) - -
-           
CReconstructionTuple(CSubstitutionSet subSet, - CTypeAssumptionSet assumSet) - -
-           
CTriple(CSubstitutionSet substitutions, - Type resultType, - CTypeAssumptionSet assumptionSet) - -
-           
-  -

- - - - - -
-Uses of CSubstitutionSet in mycompiler.mytypereconstruction.set
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.set that return CSubstitutionSet
- CSubstitutionSetCSubstitutionSet.deepCopy() - -
-           
- CSubstitutionSetCSubstitutionSet.shallowCopy() - -
-           
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.set with parameters of type CSubstitutionSet
- voidCSubstitutionSet.applyUnifier(CSubstitutionSet unifier) - -
-          Wendet den Unifier auf die rechten Seiten alle Substitutionen an.
- voidCTypeAssumptionSet.sub(CSubstitutionSet subtitutions) - -
-           
-  -

- - - - - -
-Uses of CSubstitutionSet in mycompiler.mytypereconstruction.typeassumption
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption with parameters of type CSubstitutionSet
- voidCTypeAssumption.sub(CSubstitutionSet substitutionSet) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CTripleSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CTripleSet.html deleted file mode 100755 index fbdcbc00..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CTripleSet.html +++ /dev/null @@ -1,900 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CTripleSet - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.set.CTripleSet

-
- - - - - - - - - - - - - - - - - -
-Packages that use CTripleSet
mycompiler.myoperator  
mycompiler.mystatement  
mycompiler.mytypereconstruction.set  
-  -

- - - - - -
-Uses of CTripleSet in mycompiler.myoperator
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.myoperator that return CTripleSet
- CTripleSetRelOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.49 bis 5.52 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
-abstract  CTripleSetOperator.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNotEqualOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.54 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetMulOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
- CTripleSetLogOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetEqualOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.53 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetAddOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.44 und 5.45 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
-  -

- - - - - -
-Uses of CTripleSet in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement that return CTripleSet
- CTripleSetThis.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.35 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetPreIncExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPreDecExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPostIncExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPostDecExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPositivExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNull.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNotExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.42 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetNewClass.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.31 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetNewArray.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.32 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetNegativeExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.41 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
- CTripleSetMethodCall.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.33 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLocalOrFieldVar.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.37 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.40 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetIntLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetInstVar.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.38 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetInstanceOf.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
-abstract  CTripleSetExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetCharLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetCastExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.43 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetBoolLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetBinary.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetAssign.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.30 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetInstVar.TRInstVar(CTriple triple, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.38-1 von Martin Pl�micke -
Author: J�rg B�uerle
-static CTripleSetMethodCall.TRMCallApp(CMultiplyTuple multiTuple, - java.lang.String classOrIdentifierName, - java.lang.String methodName, - int paraCount, - boolean isConstructorCall, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.34 von Martin Pl�micke
- CTripleSetWhileStmt.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.23 von Martin Pl�micke -
Achtung Workaround: RefType "Boolean" muss noch durch BaseType "BooleanType" - ersetzt werden.
- CTripleSetThis.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetStringLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
-abstract  CTripleSetStatement.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetReturn.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.22 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetPreIncExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPreDecExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPostIncExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPostDecExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPositivExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNull.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNotExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNewClass.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.26 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetNewArray.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNegativeExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetMethodCall.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.27 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLocalVarDecl.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.24 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLocalOrFieldVar.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetIntLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetInstVar.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetInstanceOf.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetIfStmt.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.21 von Martin Pl�micke -
Achtung Workaround: RefType "Boolean" durch BaseType \code{BooleanType} ersetzen.
- CTripleSetEmptyStmt.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetCharLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetCastExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetBoolLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetBlock.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.20 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetBinary.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetAssign.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.25 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetBlock.TRStatements(CSubstitutionSet sigma, - CTypeAssumptionSet V, - de.dhbwstuttgart.typeinference.Menge<Statement> statementList, - int index, - CTypeAssumptionSet V_start, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.19 von Martin Pl�micke -
Author: J�rg B�uerle
-  -

- - - - - -
-Uses of CTripleSet in mycompiler.mytypereconstruction.set
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.set that return CTripleSet
- CTripleSetCTripleSet.deepCopy() - -
-           
- CTripleSetCTripleSet.shallowCopy() - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CTypeAssumptionSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CTypeAssumptionSet.html deleted file mode 100755 index d2f65e21..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CTypeAssumptionSet.html +++ /dev/null @@ -1,985 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CTypeAssumptionSet - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.set.CTypeAssumptionSet

-
- - - - - - - - - - - - - - - - - - - - - -
-Packages that use CTypeAssumptionSet
mycompiler.myoperator  
mycompiler.mystatement  
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.set  
-  -

- - - - - -
-Uses of CTypeAssumptionSet in mycompiler.myoperator
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.myoperator with parameters of type CTypeAssumptionSet
- CTripleSetRelOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.49 bis 5.52 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
-abstract  CTripleSetOperator.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNotEqualOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.54 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetMulOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.46, 5.47 und 5.48 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
- CTripleSetLogOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetEqualOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.53 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetAddOp.TRExp(Binary binary, - CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung der Algorithmen 5.44 und 5.45 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
-  -

- - - - - -
-Uses of CTypeAssumptionSet in mycompiler.mystatement
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mystatement with parameters of type CTypeAssumptionSet
- CTripleSetThis.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.35 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetPreIncExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPreDecExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPostIncExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPostDecExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Achtung Workaround: RefType "Integer" sollte irgendwann gegen BaseType IntegerType - ausgetauscht werden.
- CTripleSetPositivExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNull.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNotExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.42 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Boolean" �berall durch den BaseType "BooleanType" ersetzt werden!!!
- CTripleSetNewClass.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.31 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetNewArray.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.32 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetNegativeExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.41 von Martin Pl�micke -
Achtung Workaround: Wenn die BaseTypes endlich korrekt implementiert sind, dann sollte - der RefType "Integer" �berall durch den BaseType "IntegerType" ersetzt werden!!!
- CTripleSetMethodCall.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.33 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLocalOrFieldVar.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.37 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.40 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetIntLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetInstVar.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.38 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetInstanceOf.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
-abstract  CTripleSetExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetCharLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetCastExpr.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.43 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetBoolLiteral.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Workaround: �berschreibt Methode TRExp aus der Super-Klasse Literal, weil - die Implementierung von Unify (noch) nicht mit Basetypes umgehen kann.
- CTripleSetBinary.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetAssign.TRExp(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.30 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetWhileStmt.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.23 von Martin Pl�micke -
Achtung Workaround: RefType "Boolean" muss noch durch BaseType "BooleanType" - ersetzt werden.
- CTripleSetThis.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetStringLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
-abstract  CTripleSetStatement.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetReturn.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.22 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetPreIncExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPreDecExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPostIncExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPostDecExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetPositivExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNull.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNotExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNewClass.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.26 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetNewArray.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetNegativeExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetMethodCall.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.27 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLocalVarDecl.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.24 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetLocalOrFieldVar.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetIntLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetInstVar.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetInstanceOf.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetIfStmt.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.21 von Martin Pl�micke -
Achtung Workaround: RefType "Boolean" durch BaseType \code{BooleanType} ersetzen.
- CTripleSetEmptyStmt.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetCharLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetCastExpr.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetBoolLiteral.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetBlock.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.20 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetBinary.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-           
- CTripleSetAssign.TRStatement(CSubstitutionSet sigma, - CTypeAssumptionSet V, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.25 von Martin Pl�micke -
Author: J�rg B�uerle
- CTripleSetBlock.TRStatements(CSubstitutionSet sigma, - CTypeAssumptionSet V, - de.dhbwstuttgart.typeinference.Menge<Statement> statementList, - int index, - CTypeAssumptionSet V_start, - CSupportData supportData) - -
-          Implementierung des Algorithmus 5.19 von Martin Pl�micke -
Author: J�rg B�uerle
-  -

- - - - - -
-Uses of CTypeAssumptionSet in mycompiler.mytypereconstruction
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return CTypeAssumptionSet
- CTypeAssumptionSetCTriple.getAssumptionSet() - -
-          Author: J�rg B�uerle
- CTypeAssumptionSetCMultiplyTuple.getAssumptionSet() - -
-          Author: J�rg B�uerle
- CTypeAssumptionSetCReconstructionTuple.getAssumSet() - -
-           
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction with parameters of type CTypeAssumptionSet
- voidCTriple.setAssumptionSet(CTypeAssumptionSet assumptionSet) - -
-          Author: J�rg B�uerle
- voidCMultiplyTuple.setAssumptionSet(CTypeAssumptionSet assumptionSet) - -
-          Author: J�rg B�uerle
- voidCReconstructionTuple.setAssumSet(CTypeAssumptionSet assumSet) - -
-           
-  -

- - - - - - - - - - - - - - -
Constructors in mycompiler.mytypereconstruction with parameters of type CTypeAssumptionSet
CMultiplyTuple(CSubstitutionSet substitutions, - de.dhbwstuttgart.typeinference.Menge<Type> resultTypes, - CTypeAssumptionSet assumptionSet) - -
-           
CReconstructionTuple(CSubstitutionSet subSet, - CTypeAssumptionSet assumSet) - -
-           
CTriple(CSubstitutionSet substitutions, - Type resultType, - CTypeAssumptionSet assumptionSet) - -
-           
-  -

- - - - - -
-Uses of CTypeAssumptionSet in mycompiler.mytypereconstruction.set
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.set that return CTypeAssumptionSet
- CTypeAssumptionSetCTypeAssumptionSet.deepCopy() - -
-           
- CTypeAssumptionSetCTypeAssumptionSet.shallowCopy() - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CVectorSet.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CVectorSet.html deleted file mode 100755 index 4f50b322..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/CVectorSet.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.set.CMengeSet - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.set.CMengeSet

-
- - - - - - - - - -
-Packages that use CMengeSet
mycompiler.mytypereconstruction.set  
-  -

- - - - - -
-Uses of CMengeSet in mycompiler.mytypereconstruction.set
-  -

- - - - - - - - - - - - - - - - - - - - - -
Subclasses of CMengeSet in mycompiler.mytypereconstruction.set
- classCMultiplyTupleSet - -
-           
- classCReconstructionTupleSet - -
-           
- classCSubstitutionSet - -
-           
- classCTripleSet - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetElement.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetElement.html deleted file mode 100755 index 983acbc3..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetElement.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - -Uses of Interface mycompiler.mytypereconstruction.set.IHashSetElement - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
mycompiler.mytypereconstruction.set.IHashSetElement

-
- - - - - - - - - - - - - -
-Packages that use IHashSetElement
mycompiler.mytypereconstruction.set  
mycompiler.mytypereconstruction.typeassumption  
-  -

- - - - - -
-Uses of IHashSetElement in mycompiler.mytypereconstruction.set
-  -

- - - - - - - - - -
Classes in mycompiler.mytypereconstruction.set with type parameters of type IHashSetElement
- classCHashtableSet<E extends IHashSetElement> - -
-           
-  -

- - - - - -
-Uses of IHashSetElement in mycompiler.mytypereconstruction.typeassumption
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in mycompiler.mytypereconstruction.typeassumption that implement IHashSetElement
- classCInstVarTypeAssumption - -
-           
- classCLocalVarTypeAssumption - -
-           
- classCMethodTypeAssumption - -
-           
- classCParaTypeAssumption - -
-           
- classCTypeAssumption - -
-          Diese Klasse repräsentiert eine Typannahme und bildet einen - Bezeichner innerhalb einer bestimmten Klasse auf einen angenommenen - Typ ab.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetKey.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetKey.html deleted file mode 100755 index 0f0dfae7..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/class-use/IHashSetKey.html +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - -Uses of Interface mycompiler.mytypereconstruction.set.IHashSetKey - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
mycompiler.mytypereconstruction.set.IHashSetKey

-
- - - - - - - - - - - - - -
-Packages that use IHashSetKey
mycompiler.mytypereconstruction.set  
mycompiler.mytypereconstruction.typeassumptionkey  
-  -

- - - - - -
-Uses of IHashSetKey in mycompiler.mytypereconstruction.set
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.set that return IHashSetKey
- IHashSetKeyIHashSetElement.getHashSetKey() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.set that return types with arguments of type IHashSetKey
- java.util.Hashtable<IHashSetKey,E>CHashtableSet.getHashtable() - -
-           
-  -

- - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.set with parameters of type IHashSetKey
- voidCHashtableSet.addElement(IHashSetKey elementKey, - E element) - -
-           
- ECHashtableSet.getElement(IHashSetKey key) - -
-           
- voidCHashtableSet.removeElement(IHashSetKey key) - -
-           
-  -

- - - - - - - - - -
Method parameters in mycompiler.mytypereconstruction.set with type arguments of type IHashSetKey
- voidCHashtableSet.setHashtable(java.util.Hashtable<IHashSetKey,E> hash) - -
-           
-  -

- - - - - -
-Uses of IHashSetKey in mycompiler.mytypereconstruction.typeassumptionkey
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in mycompiler.mytypereconstruction.typeassumptionkey that implement IHashSetKey
- classCInstVarKey - -
-           
- classCLocalVarKey - -
-           
- classCMethodKey - -
-           
- classCMethodParaKey - -
-           
- classCTypeAssumptionKey - -
-          Diese Klasse modelliert einen eindeutigen Schlüssel für eine Typannahme, - die in einem CTypeAssumptionSet abgelegt wird.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/package-frame.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/package-frame.html deleted file mode 100755 index c4d92d95..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/package-frame.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.set - - - - - - - - - - - -mycompiler.mytypereconstruction.set - - - - -
-Interfaces  - -
-IHashSetElement -
-IHashSetKey
- - - - - - -
-Classes  - -
-CHashtableSet -
-CMultiplyTupleSet -
-CReconstructionTupleSet -
-CSet -
-CSubstitutionSet -
-CTripleSet -
-CTypeAssumptionSet -
-CMengeSet
- - - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/package-summary.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/package-summary.html deleted file mode 100755 index baffea16..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/package-summary.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.set - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.mytypereconstruction.set -

- - - - - - - - - - - - - -
-Interface Summary
IHashSetElement 
IHashSetKey 
-  - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
CHashtableSet<E extends IHashSetElement> 
CMultiplyTupleSet 
CReconstructionTupleSet 
CSet<E> 
CSubstitutionSet 
CTripleSet 
CTypeAssumptionSet 
CMengeSet<E> 
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/package-tree.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/package-tree.html deleted file mode 100755 index 0ec4e5be..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/package-tree.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.set Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.mytypereconstruction.set -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/set/package-use.html b/doc/Javadoc/mycompiler/mytypereconstruction/set/package-use.html deleted file mode 100755 index 171fe956..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/set/package-use.html +++ /dev/null @@ -1,357 +0,0 @@ - - - - - - -Uses of Package mycompiler.mytypereconstruction.set - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.mytypereconstruction.set

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use mycompiler.mytypereconstruction.set
mycompiler.myoperator  
mycompiler.mystatement  
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.set  
mycompiler.mytypereconstruction.typeassumption  
mycompiler.mytypereconstruction.typeassumptionkey  
-  -

- - - - - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction.set used by mycompiler.myoperator
CSubstitutionSet - -
-           
CTripleSet - -
-           
CTypeAssumptionSet - -
-           
-  -

- - - - - - - - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction.set used by mycompiler.mystatement
CMultiplyTupleSet - -
-           
CSubstitutionSet - -
-           
CTripleSet - -
-           
CTypeAssumptionSet - -
-           
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction.set used by mycompiler.mytypereconstruction
CSubstitutionSet - -
-           
CTypeAssumptionSet - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction.set used by mycompiler.mytypereconstruction.set
CHashtableSet - -
-           
CMultiplyTupleSet - -
-           
CReconstructionTupleSet - -
-           
CSet - -
-           
CSubstitutionSet - -
-           
CTripleSet - -
-           
CTypeAssumptionSet - -
-           
CMengeSet - -
-           
IHashSetElement - -
-           
IHashSetKey - -
-           
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction.set used by mycompiler.mytypereconstruction.typeassumption
CSubstitutionSet - -
-           
IHashSetElement - -
-           
-  -

- - - - - - - - -
-Classes in mycompiler.mytypereconstruction.set used by mycompiler.mytypereconstruction.typeassumptionkey
IHashSetKey - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CInstVarTypeAssumption.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CInstVarTypeAssumption.html deleted file mode 100755 index 891effb6..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CInstVarTypeAssumption.html +++ /dev/null @@ -1,345 +0,0 @@ - - - - - - -CInstVarTypeAssumption - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.typeassumption -
-Class CInstVarTypeAssumption

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
-      extended by mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption
-
-
-
All Implemented Interfaces:
IHashSetElement
-
-
-
-
public class CInstVarTypeAssumption
extends CTypeAssumption
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:09 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
m_AssumedType, m_ClassName, m_Identifier, m_LineNumber
-  - - - - - - - - - - -
-Constructor Summary
CInstVarTypeAssumption(java.lang.String className, - java.lang.String identifier, - Type type, - int lineNumber) - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- CInstVarTypeAssumptionclone() - -
-           
- booleanequalsAssumption(CTypeAssumption assumption) - -
-          
Author: Jörg Bäuerle
- CInstVarKeygetHashSetKey() - -
-          Author: Jörg Bäuerle
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
equals, getAssumedType, getClassName, getIdentifier, getLineNumber, isTyploseVariable, print, setAssumedType, setClassName, setIdentifier, setLineNumber, sub, sub, toString
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CInstVarTypeAssumption

-
-public CInstVarTypeAssumption(java.lang.String className,
-                              java.lang.String identifier,
-                              Type type,
-                              int lineNumber)
-
-
- - - - - - - - -
-Method Detail
- -

-getHashSetKey

-
-public CInstVarKey getHashSetKey()
-
-
Author: Jörg Bäuerle
-

-

-
Specified by:
getHashSetKey in interface IHashSetElement
Specified by:
getHashSetKey in class CTypeAssumption
-
-
- -
Returns:
-
-
-
- -

-equalsAssumption

-
-public boolean equalsAssumption(CTypeAssumption assumption)
-
-

Author: Jörg Bäuerle -

-

-
Specified by:
equalsAssumption in class CTypeAssumption
-
-
-
Parameters:
assumption - -
Returns:
-
-
-
- -

-clone

-
-public CInstVarTypeAssumption clone()
-
-
-
Specified by:
clone in class CTypeAssumption
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CLocalVarTypeAssumption.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CLocalVarTypeAssumption.html deleted file mode 100755 index a1019c53..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CLocalVarTypeAssumption.html +++ /dev/null @@ -1,528 +0,0 @@ - - - - - - -CLocalVarTypeAssumption - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.typeassumption -
-Class CLocalVarTypeAssumption

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
-      extended by mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption
-
-
-
All Implemented Interfaces:
IHashSetElement
-
-
-
-
public class CLocalVarTypeAssumption
extends CTypeAssumption
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:09 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - - - - - - - - - -
-Field Summary
-protected  java.lang.Stringm_BlockId - -
-           
-protected  java.lang.Stringm_MethodName - -
-           
-protected  intm_MethodParaCount - -
-           
- - - - - - - -
Fields inherited from class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
m_AssumedType, m_ClassName, m_Identifier, m_LineNumber
-  - - - - - - - - - - -
-Constructor Summary
CLocalVarTypeAssumption(java.lang.String className, - java.lang.String methodName, - int methodParaCount, - java.lang.String blockId, - java.lang.String identifier, - Type assumedType, - int lineNumber) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- CLocalVarTypeAssumptionclone() - -
-           
- booleanequalsAssumption(CTypeAssumption assumption) - -
-          
Author: Jörg Bäuerle
- java.lang.StringgetBlockId() - -
-           
- CLocalVarKeygetHashSetKey() - -
-          Author: Jörg Bäuerle
- java.lang.StringgetMethodName() - -
-           
- intgetMethodParaCount() - -
-           
- voidsetBlockId(java.lang.String blockId) - -
-           
- voidsetMethodName(java.lang.String methodName) - -
-           
- voidsetMethodParaCount(int methodParaCount) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
equals, getAssumedType, getClassName, getIdentifier, getLineNumber, isTyploseVariable, print, setAssumedType, setClassName, setIdentifier, setLineNumber, sub, sub, toString
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-m_MethodName

-
-protected java.lang.String m_MethodName
-
-
-
-
-
- -

-m_MethodParaCount

-
-protected int m_MethodParaCount
-
-
-
-
-
- -

-m_BlockId

-
-protected java.lang.String m_BlockId
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-CLocalVarTypeAssumption

-
-public CLocalVarTypeAssumption(java.lang.String className,
-                               java.lang.String methodName,
-                               int methodParaCount,
-                               java.lang.String blockId,
-                               java.lang.String identifier,
-                               Type assumedType,
-                               int lineNumber)
-
-
- - - - - - - - -
-Method Detail
- -

-getMethodName

-
-public java.lang.String getMethodName()
-
-
-
-
-
-
- -

-setMethodName

-
-public void setMethodName(java.lang.String methodName)
-
-
-
-
-
-
- -

-getMethodParaCount

-
-public int getMethodParaCount()
-
-
-
-
-
-
- -

-setMethodParaCount

-
-public void setMethodParaCount(int methodParaCount)
-
-
-
-
-
-
- -

-getBlockId

-
-public java.lang.String getBlockId()
-
-
-
-
-
-
- -

-setBlockId

-
-public void setBlockId(java.lang.String blockId)
-
-
-
-
-
-
- -

-getHashSetKey

-
-public CLocalVarKey getHashSetKey()
-
-
Author: Jörg Bäuerle
-

-

-
Specified by:
getHashSetKey in interface IHashSetElement
Specified by:
getHashSetKey in class CTypeAssumption
-
-
- -
Returns:
-
-
-
- -

-equalsAssumption

-
-public boolean equalsAssumption(CTypeAssumption assumption)
-
-

Author: Jörg Bäuerle -

-

-
Specified by:
equalsAssumption in class CTypeAssumption
-
-
-
Parameters:
assumption - -
Returns:
-
-
-
- -

-clone

-
-public CLocalVarTypeAssumption clone()
-
-
-
Specified by:
clone in class CTypeAssumption
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CMethodTypeAssumption.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CMethodTypeAssumption.html deleted file mode 100755 index 89410a84..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CMethodTypeAssumption.html +++ /dev/null @@ -1,501 +0,0 @@ - - - - - - -CMethodTypeAssumption - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.typeassumption -
-Class CMethodTypeAssumption

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
-      extended by mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption
-
-
-
All Implemented Interfaces:
IHashSetElement
-
-
-
-
public class CMethodTypeAssumption
extends CTypeAssumption
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:09 $
-
Author:
-
J�rg B�uerle
-
-
- -

- - - - - - - - - - - -
-Field Summary
-protected  de.dhbwstuttgart.typeinference.Menge<CParaTypeAssumption>m_ParaAssumptions - -
-           
- - - - - - - -
Fields inherited from class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
m_AssumedType, m_ClassName, m_Identifier, m_LineNumber
-  - - - - - - - - - - -
-Constructor Summary
CMethodTypeAssumption(java.lang.String className, - java.lang.String identifier, - Type assumedType, - int lineNumber) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidaddParaAssumption(CParaTypeAssumption paraAssumption) - -
-           
- CMethodTypeAssumptionclone() - -
-          
Author: J�rg B�uerle
- booleanequalsAssumption(CTypeAssumption assumption) - -
-          
Author: J�rg B�uerle
- CMethodKeygetHashSetKey() - -
-          Author: J�rg B�uerle
- CParaTypeAssumptiongetParaAssumption(int index) - -
-           
- de.dhbwstuttgart.typeinference.Menge<CParaTypeAssumption>getParaAssumptions() - -
-          Author: J�rg B�uerle
- intgetParaCount() - -
-          Author: J�rg B�uerle
- voidsub(CSubstitution substitution) - -
-           
- java.lang.StringtoString() - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
equals, getAssumedType, getClassName, getIdentifier, getLineNumber, isTyploseVariable, print, setAssumedType, setClassName, setIdentifier, setLineNumber, sub
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-m_ParaAssumptions

-
-protected de.dhbwstuttgart.typeinference.Menge<CParaTypeAssumption> m_ParaAssumptions
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-CMethodTypeAssumption

-
-public CMethodTypeAssumption(java.lang.String className,
-                             java.lang.String identifier,
-                             Type assumedType,
-                             int lineNumber)
-
-
- - - - - - - - -
-Method Detail
- -

-getParaCount

-
-public int getParaCount()
-
-
Author: J�rg B�uerle
-

-

- -
Returns:
Returns the ParaCount.
-
-
-
- -

-addParaAssumption

-
-public void addParaAssumption(CParaTypeAssumption paraAssumption)
-
-
-
-
-
-
- -

-getParaAssumption

-
-public CParaTypeAssumption getParaAssumption(int index)
-
-
-
-
-
-
- -

-getParaAssumptions

-
-public de.dhbwstuttgart.typeinference.Menge<CParaTypeAssumption> getParaAssumptions()
-
-
Author: J�rg B�uerle
-

-

- -
Returns:
Returns the m_ParaAssumptions.
-
-
-
- -

-sub

-
-public void sub(CSubstitution substitution)
-
-
-
Overrides:
sub in class CTypeAssumption
-
-
-
-
-
-
- -

-equalsAssumption

-
-public boolean equalsAssumption(CTypeAssumption assumption)
-
-

Author: J�rg B�uerle -

-

-
Specified by:
equalsAssumption in class CTypeAssumption
-
-
-
Parameters:
assumption - -
Returns:
-
-
-
- -

-toString

-
-public java.lang.String toString()
-
-
-
Overrides:
toString in class CTypeAssumption
-
-
-
-
-
-
- -

-getHashSetKey

-
-public CMethodKey getHashSetKey()
-
-
Author: J�rg B�uerle
-

-

-
Specified by:
getHashSetKey in interface IHashSetElement
Specified by:
getHashSetKey in class CTypeAssumption
-
-
- -
Returns:
-
-
-
- -

-clone

-
-public CMethodTypeAssumption clone()
-
-

Author: J�rg B�uerle -

-

-
Specified by:
clone in class CTypeAssumption
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CParaTypeAssumption.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CParaTypeAssumption.html deleted file mode 100755 index d70f590e..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CParaTypeAssumption.html +++ /dev/null @@ -1,473 +0,0 @@ - - - - - - -CParaTypeAssumption - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.typeassumption -
-Class CParaTypeAssumption

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
-      extended by mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption
-
-
-
All Implemented Interfaces:
IHashSetElement
-
-
-
-
public class CParaTypeAssumption
extends CTypeAssumption
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:09 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - - - - - -
-Field Summary
-protected  java.lang.Stringm_MethodName - -
-           
-protected  intm_MethodParaCount - -
-           
- - - - - - - -
Fields inherited from class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
m_AssumedType, m_ClassName, m_Identifier, m_LineNumber
-  - - - - - - - - - - -
-Constructor Summary
CParaTypeAssumption(java.lang.String className, - java.lang.String methodName, - int methodParaCount, - java.lang.String identifier, - Type assumedType, - int lineNumber) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- CParaTypeAssumptionclone() - -
-          
Author: Jörg Bäuerle
- booleanequalsAssumption(CTypeAssumption assumption) - -
-          
Author: Jörg Bäuerle
- CMethodParaKeygetHashSetKey() - -
-          Author: Jörg Bäuerle
- java.lang.StringgetMethodName() - -
-           
- intgetMethodParaCount() - -
-           
- voidsetMethodName(java.lang.String methodName) - -
-           
- voidsetMethodParaCount(int methodParaCount) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
equals, getAssumedType, getClassName, getIdentifier, getLineNumber, isTyploseVariable, print, setAssumedType, setClassName, setIdentifier, setLineNumber, sub, sub, toString
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-m_MethodName

-
-protected java.lang.String m_MethodName
-
-
-
-
-
- -

-m_MethodParaCount

-
-protected int m_MethodParaCount
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-CParaTypeAssumption

-
-public CParaTypeAssumption(java.lang.String className,
-                           java.lang.String methodName,
-                           int methodParaCount,
-                           java.lang.String identifier,
-                           Type assumedType,
-                           int lineNumber)
-
-
- - - - - - - - -
-Method Detail
- -

-getMethodName

-
-public java.lang.String getMethodName()
-
-
-
-
-
-
- -

-setMethodName

-
-public void setMethodName(java.lang.String methodName)
-
-
-
-
-
-
- -

-getMethodParaCount

-
-public int getMethodParaCount()
-
-
-
-
-
-
- -

-setMethodParaCount

-
-public void setMethodParaCount(int methodParaCount)
-
-
-
-
-
-
- -

-getHashSetKey

-
-public CMethodParaKey getHashSetKey()
-
-
Author: Jörg Bäuerle
-

-

-
Specified by:
getHashSetKey in interface IHashSetElement
Specified by:
getHashSetKey in class CTypeAssumption
-
-
- -
Returns:
-
-
-
- -

-equalsAssumption

-
-public boolean equalsAssumption(CTypeAssumption assumption)
-
-

Author: Jörg Bäuerle -

-

-
Specified by:
equalsAssumption in class CTypeAssumption
-
-
-
Parameters:
assumption - -
Returns:
-
-
-
- -

-clone

-
-public CParaTypeAssumption clone()
-
-

Author: Jörg Bäuerle -

-

-
Specified by:
clone in class CTypeAssumption
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CTypeAssumption.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CTypeAssumption.html deleted file mode 100755 index acb3bb33..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/CTypeAssumption.html +++ /dev/null @@ -1,721 +0,0 @@ - - - - - - -CTypeAssumption - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.typeassumption -
-Class CTypeAssumption

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.typeassumption.CTypeAssumption
-
-
-
All Implemented Interfaces:
IHashSetElement
-
-
-
Direct Known Subclasses:
CInstVarTypeAssumption, CLocalVarTypeAssumption, CMethodTypeAssumption, CParaTypeAssumption
-
-
-
-
public abstract class CTypeAssumption
extends java.lang.Object
implements IHashSetElement
- - -

-Diese Klasse repräsentiert eine Typannahme und bildet einen - Bezeichner innerhalb einer bestimmten Klasse auf einen angenommenen - Typ ab.
- Die von dieser Klasse abgeleiteten Subklassen stehen für bestimmte - Typannahmen des abstrakten Syntaxbaumes, wie z.B. für Felder, Methoden, - lokale Variablen, etc. -

- -

-

-
Version:
-
$Date: 2005/06/28 19:19:09 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - - - - - - - - - - - - - -
-Field Summary
-protected  Typem_AssumedType - -
-           
-protected  java.lang.Stringm_ClassName - -
-           
-protected  java.lang.Stringm_Identifier - -
-           
-protected  intm_LineNumber - -
-           
-  - - - - - - - - - - -
-Constructor Summary
CTypeAssumption(java.lang.String className, - java.lang.String identifier, - Type assumedType, - int lineNumber) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
-abstract  CTypeAssumptionclone() - -
-           
- booleanequals(java.lang.Object obj) - -
-           
-abstract  booleanequalsAssumption(CTypeAssumption assumption) - -
-           
- TypegetAssumedType() - -
-           
- java.lang.StringgetClassName() - -
-           
-abstract  CTypeAssumptionKeygetHashSetKey() - -
-           
- java.lang.StringgetIdentifier() - -
-           
- intgetLineNumber() - -
-           
- booleanisTyploseVariable() - -
-           
- voidprint() - -
-           
- voidsetAssumedType(Type assumedType) - -
-           
- voidsetClassName(java.lang.String className) - -
-           
- voidsetIdentifier(java.lang.String identifier) - -
-           
- voidsetLineNumber(int lineNumber) - -
-           
- voidsub(CSubstitution substitution) - -
-           
- voidsub(CSubstitutionSet substitutionSet) - -
-           
- java.lang.StringtoString() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-m_ClassName

-
-protected java.lang.String m_ClassName
-
-
-
-
-
- -

-m_Identifier

-
-protected java.lang.String m_Identifier
-
-
-
-
-
- -

-m_AssumedType

-
-protected Type m_AssumedType
-
-
-
-
-
- -

-m_LineNumber

-
-protected int m_LineNumber
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-CTypeAssumption

-
-public CTypeAssumption(java.lang.String className,
-                       java.lang.String identifier,
-                       Type assumedType,
-                       int lineNumber)
-
-
- - - - - - - - -
-Method Detail
- -

-getClassName

-
-public java.lang.String getClassName()
-
-
-
-
-
-
-
-
-
- -

-setClassName

-
-public void setClassName(java.lang.String className)
-
-
-
-
-
-
-
-
-
- -

-getIdentifier

-
-public java.lang.String getIdentifier()
-
-
-
-
-
-
-
-
-
- -

-setIdentifier

-
-public void setIdentifier(java.lang.String identifier)
-
-
-
-
-
-
-
-
-
- -

-getAssumedType

-
-public Type getAssumedType()
-
-
-
-
-
-
-
-
-
- -

-setAssumedType

-
-public void setAssumedType(Type assumedType)
-
-
-
-
-
-
-
-
-
- -

-getLineNumber

-
-public int getLineNumber()
-
-
-
-
-
-
-
-
-
- -

-setLineNumber

-
-public void setLineNumber(int lineNumber)
-
-
-
-
-
-
-
-
-
- -

-print

-
-public void print()
-
-
-
-
-
-
-
-
-
- -

-sub

-
-public void sub(CSubstitutionSet substitutionSet)
-
-
-
-
-
-
-
-
-
- -

-sub

-
-public void sub(CSubstitution substitution)
-
-
-
-
-
-
-
-
-
- -

-toString

-
-public java.lang.String toString()
-
-
-
Overrides:
toString in class java.lang.Object
-
-
-
-
-
-
- -

-equals

-
-public final boolean equals(java.lang.Object obj)
-
-
-
Overrides:
equals in class java.lang.Object
-
-
-
-
-
-
- -

-isTyploseVariable

-
-public boolean isTyploseVariable()
-
-
-
-
-
-
-
-
-
- -

-equalsAssumption

-
-public abstract boolean equalsAssumption(CTypeAssumption assumption)
-
-
-
-
-
-
-
-
-
- -

-clone

-
-public abstract CTypeAssumption clone()
-
-
-
Overrides:
clone in class java.lang.Object
-
-
-
-
-
-
- -

-getHashSetKey

-
-public abstract CTypeAssumptionKey getHashSetKey()
-
-
-
Specified by:
getHashSetKey in interface IHashSetElement
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CInstVarTypeAssumption.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CInstVarTypeAssumption.html deleted file mode 100755 index e07b3575..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CInstVarTypeAssumption.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption

-
- - - - - - - - - -
-Packages that use CInstVarTypeAssumption
mycompiler.mytypereconstruction.typeassumption  
-  -

- - - - - -
-Uses of CInstVarTypeAssumption in mycompiler.mytypereconstruction.typeassumption
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption that return CInstVarTypeAssumption
- CInstVarTypeAssumptionCInstVarTypeAssumption.clone() - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CLocalVarTypeAssumption.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CLocalVarTypeAssumption.html deleted file mode 100755 index 0d57ad50..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CLocalVarTypeAssumption.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption

-
- - - - - - - - - -
-Packages that use CLocalVarTypeAssumption
mycompiler.mytypereconstruction.typeassumption  
-  -

- - - - - -
-Uses of CLocalVarTypeAssumption in mycompiler.mytypereconstruction.typeassumption
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption that return CLocalVarTypeAssumption
- CLocalVarTypeAssumptionCLocalVarTypeAssumption.clone() - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CMethodTypeAssumption.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CMethodTypeAssumption.html deleted file mode 100755 index 190298ec..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CMethodTypeAssumption.html +++ /dev/null @@ -1,259 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption

-
- - - - - - - - - - - - - -
-Packages that use CMethodTypeAssumption
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.typeassumption  
-  -

- - - - - -
-Uses of CMethodTypeAssumption in mycompiler.mytypereconstruction
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return types with arguments of type CMethodTypeAssumption
- de.dhbwstuttgart.typeinference.Menge<CMethodTypeAssumption>CIntersectionType.getMethodTypeAssumptions() - -
-           
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction with parameters of type CMethodTypeAssumption
- voidCIntersectionType.addMethodTypeAssumption(CMethodTypeAssumption assum) - -
-           
- voidCIntersectionType.removeMethodTypeAssumption(CMethodTypeAssumption assum) - -
-           
-  -

- - - - - - - - - -
Method parameters in mycompiler.mytypereconstruction with type arguments of type CMethodTypeAssumption
- voidCIntersectionType.setMethodTypeAssumptions(de.dhbwstuttgart.typeinference.Menge<CMethodTypeAssumption> methodTypeAssumptions) - -
-           
-  -

- - - - - - - - -
Constructors in mycompiler.mytypereconstruction with parameters of type CMethodTypeAssumption
CIntersectionType(CMethodTypeAssumption assum) - -
-           
-  -

- - - - - -
-Uses of CMethodTypeAssumption in mycompiler.mytypereconstruction.typeassumption
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption that return CMethodTypeAssumption
- CMethodTypeAssumptionCMethodTypeAssumption.clone() - -
-          
Author: J�rg B�uerle
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CParaTypeAssumption.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CParaTypeAssumption.html deleted file mode 100755 index 263b77a8..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CParaTypeAssumption.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption

-
- - - - - - - - - -
-Packages that use CParaTypeAssumption
mycompiler.mytypereconstruction.typeassumption  
-  -

- - - - - -
-Uses of CParaTypeAssumption in mycompiler.mytypereconstruction.typeassumption
-  -

- - - - - - - - - -
Fields in mycompiler.mytypereconstruction.typeassumption with type parameters of type CParaTypeAssumption
-protected  de.dhbwstuttgart.typeinference.Menge<CParaTypeAssumption>CMethodTypeAssumption.m_ParaAssumptions - -
-           
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption that return CParaTypeAssumption
- CParaTypeAssumptionCParaTypeAssumption.clone() - -
-          
Author: J�rg B�uerle
- CParaTypeAssumptionCMethodTypeAssumption.getParaAssumption(int index) - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption that return types with arguments of type CParaTypeAssumption
- de.dhbwstuttgart.typeinference.Menge<CParaTypeAssumption>CMethodTypeAssumption.getParaAssumptions() - -
-          Author: J�rg B�uerle
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption with parameters of type CParaTypeAssumption
- voidCMethodTypeAssumption.addParaAssumption(CParaTypeAssumption paraAssumption) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CTypeAssumption.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CTypeAssumption.html deleted file mode 100755 index 8bbdcac6..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/class-use/CTypeAssumption.html +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumption.CTypeAssumption - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.typeassumption.CTypeAssumption

-
- - - - - - - - - - - - - -
-Packages that use CTypeAssumption
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.typeassumption  
-  -

- - - - - -
-Uses of CTypeAssumption in mycompiler.mytypereconstruction
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return types with arguments of type CTypeAssumption
- java.util.Hashtable<CTypeAssumptionKey,CTypeAssumption>CTypeReconstructionResult.getFieldAndLocalVarAssumptions() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction with parameters of type CTypeAssumption
- voidCTypeReconstructionResult.addFieldOrLocalVarAssumption(CTypeAssumption assum) - -
-           
-  -

- - - - - - - - - -
Method parameters in mycompiler.mytypereconstruction with type arguments of type CTypeAssumption
- voidCTypeReconstructionResult.setFieldAndLocalVarAssumptions(java.util.Hashtable<CTypeAssumptionKey,CTypeAssumption> fieldAndLocalVarAssumptions) - -
-           
-  -

- - - - - -
-Uses of CTypeAssumption in mycompiler.mytypereconstruction.typeassumption
-  -

- - - - - - - - - - - - - - - - - - - - - -
Subclasses of CTypeAssumption in mycompiler.mytypereconstruction.typeassumption
- classCInstVarTypeAssumption - -
-           
- classCLocalVarTypeAssumption - -
-           
- classCMethodTypeAssumption - -
-           
- classCParaTypeAssumption - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption that return CTypeAssumption
-abstract  CTypeAssumptionCTypeAssumption.clone() - -
-           
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption with parameters of type CTypeAssumption
-abstract  booleanCTypeAssumption.equalsAssumption(CTypeAssumption assumption) - -
-           
- booleanCParaTypeAssumption.equalsAssumption(CTypeAssumption assumption) - -
-          
Author: Jörg Bäuerle
- booleanCMethodTypeAssumption.equalsAssumption(CTypeAssumption assumption) - -
-          
Author: Jörg Bäuerle
- booleanCLocalVarTypeAssumption.equalsAssumption(CTypeAssumption assumption) - -
-          
Author: Jörg Bäuerle
- booleanCInstVarTypeAssumption.equalsAssumption(CTypeAssumption assumption) - -
-          
Author: Jörg Bäuerle
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-frame.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-frame.html deleted file mode 100755 index fd43f0b1..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-frame.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.typeassumption - - - - - - - - - - - -mycompiler.mytypereconstruction.typeassumption - - - - -
-Classes  - -
-CInstVarTypeAssumption -
-CLocalVarTypeAssumption -
-CMethodTypeAssumption -
-CParaTypeAssumption -
-CTypeAssumption
- - - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-summary.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-summary.html deleted file mode 100755 index 3c91c6c2..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-summary.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.typeassumption - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.mytypereconstruction.typeassumption -

- - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
CInstVarTypeAssumption 
CLocalVarTypeAssumption 
CMethodTypeAssumption 
CParaTypeAssumption 
CTypeAssumptionDiese Klasse repräsentiert eine Typannahme und bildet einen - Bezeichner innerhalb einer bestimmten Klasse auf einen angenommenen - Typ ab.
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-tree.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-tree.html deleted file mode 100755 index c6d67d13..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-tree.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.typeassumption Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.mytypereconstruction.typeassumption -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-use.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-use.html deleted file mode 100755 index 063b03e2..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumption/package-use.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - -Uses of Package mycompiler.mytypereconstruction.typeassumption - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.mytypereconstruction.typeassumption

-
- - - - - - - - - - - - - -
-Packages that use mycompiler.mytypereconstruction.typeassumption
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.typeassumption  
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction.typeassumption used by mycompiler.mytypereconstruction
CMethodTypeAssumption - -
-           
CTypeAssumption - -
-          Diese Klasse repräsentiert eine Typannahme und bildet einen - Bezeichner innerhalb einer bestimmten Klasse auf einen angenommenen - Typ ab.
-  -

- - - - - - - - - - - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction.typeassumption used by mycompiler.mytypereconstruction.typeassumption
CInstVarTypeAssumption - -
-           
CLocalVarTypeAssumption - -
-           
CMethodTypeAssumption - -
-           
CParaTypeAssumption - -
-           
CTypeAssumption - -
-          Diese Klasse repräsentiert eine Typannahme und bildet einen - Bezeichner innerhalb einer bestimmten Klasse auf einen angenommenen - Typ ab.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CInstVarKey.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CInstVarKey.html deleted file mode 100755 index 19c6ba53..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CInstVarKey.html +++ /dev/null @@ -1,287 +0,0 @@ - - - - - - -CInstVarKey - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.typeassumptionkey -
-Class CInstVarKey

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
-      extended by mycompiler.mytypereconstruction.typeassumptionkey.CInstVarKey
-
-
-
All Implemented Interfaces:
IHashSetKey
-
-
-
-
public class CInstVarKey
extends CTypeAssumptionKey
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:05 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static java.lang.StringKEYPREFIX - -
-           
- - - - - - - -
Fields inherited from class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
m_KeyString
-  - - - - - - - - - - -
-Constructor Summary
CInstVarKey(java.lang.String className, - java.lang.String identifier) - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
equals, getKeyString, hashCode, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-KEYPREFIX

-
-public static java.lang.String KEYPREFIX
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-CInstVarKey

-
-public CInstVarKey(java.lang.String className,
-                   java.lang.String identifier)
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CLocalVarKey.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CLocalVarKey.html deleted file mode 100755 index bbc497a2..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CLocalVarKey.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - -CLocalVarKey - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.typeassumptionkey -
-Class CLocalVarKey

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
-      extended by mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey
-
-
-
All Implemented Interfaces:
IHashSetKey
-
-
-
-
public class CLocalVarKey
extends CTypeAssumptionKey
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:06 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static java.lang.StringKEYPREFIX - -
-           
- - - - - - - -
Fields inherited from class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
m_KeyString
-  - - - - - - - - - - -
-Constructor Summary
CLocalVarKey(java.lang.String className, - java.lang.String methodName, - int methodParaCount, - java.lang.String blockId, - java.lang.String identifier) - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
equals, getKeyString, hashCode, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-KEYPREFIX

-
-public static java.lang.String KEYPREFIX
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-CLocalVarKey

-
-public CLocalVarKey(java.lang.String className,
-                    java.lang.String methodName,
-                    int methodParaCount,
-                    java.lang.String blockId,
-                    java.lang.String identifier)
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodKey.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodKey.html deleted file mode 100755 index e2b2503a..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodKey.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - -CMethodKey - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.typeassumptionkey -
-Class CMethodKey

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
-      extended by mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey
-
-
-
All Implemented Interfaces:
IHashSetKey
-
-
-
-
public class CMethodKey
extends CTypeAssumptionKey
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:05 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static java.lang.StringKEYPREFIX - -
-           
- - - - - - - -
Fields inherited from class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
m_KeyString
-  - - - - - - - - - - -
-Constructor Summary
CMethodKey(java.lang.String className, - java.lang.String identifier, - int paraCount) - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
equals, getKeyString, hashCode, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-KEYPREFIX

-
-public static java.lang.String KEYPREFIX
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-CMethodKey

-
-public CMethodKey(java.lang.String className,
-                  java.lang.String identifier,
-                  int paraCount)
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodParaKey.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodParaKey.html deleted file mode 100755 index 298e827c..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CMethodParaKey.html +++ /dev/null @@ -1,291 +0,0 @@ - - - - - - -CMethodParaKey - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.typeassumptionkey -
-Class CMethodParaKey

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
-      extended by mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey
-
-
-
All Implemented Interfaces:
IHashSetKey
-
-
-
-
public class CMethodParaKey
extends CTypeAssumptionKey
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:05 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static java.lang.StringKEYPREFIX - -
-           
- - - - - - - -
Fields inherited from class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
m_KeyString
-  - - - - - - - - - - -
-Constructor Summary
CMethodParaKey(java.lang.String className, - java.lang.String methodName, - int methodParaCount, - java.lang.String identifier) - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
equals, getKeyString, hashCode, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-KEYPREFIX

-
-public static java.lang.String KEYPREFIX
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-CMethodParaKey

-
-public CMethodParaKey(java.lang.String className,
-                      java.lang.String methodName,
-                      int methodParaCount,
-                      java.lang.String identifier)
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CTypeAssumptionKey.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CTypeAssumptionKey.html deleted file mode 100755 index dcee1df6..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/CTypeAssumptionKey.html +++ /dev/null @@ -1,383 +0,0 @@ - - - - - - -CTypeAssumptionKey - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.typeassumptionkey -
-Class CTypeAssumptionKey

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey
-
-
-
All Implemented Interfaces:
IHashSetKey
-
-
-
Direct Known Subclasses:
CInstVarKey, CLocalVarKey, CMethodKey, CMethodParaKey
-
-
-
-
public abstract class CTypeAssumptionKey
extends java.lang.Object
implements IHashSetKey
- - -

-Diese Klasse modelliert einen eindeutigen Schlüssel für eine Typannahme, - die in einem CTypeAssumptionSet abgelegt wird. -

- -

-

-
Version:
-
$Date: 2005/06/28 19:19:05 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - -
-Field Summary
-protected  java.lang.Stringm_KeyString - -
-           
-  - - - - - - - - - - -
-Constructor Summary
CTypeAssumptionKey() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- booleanequals(java.lang.Object obj) - -
-          Author: Jörg Bäuerle
- java.lang.StringgetKeyString() - -
-          Author: Jörg Bäuerle
- inthashCode() - -
-          Author: Jörg Bäuerle
- java.lang.StringtoString() - -
-          
Author: Jörg Bäuerle
- - - - - - - -
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-m_KeyString

-
-protected java.lang.String m_KeyString
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-CTypeAssumptionKey

-
-public CTypeAssumptionKey()
-
-
- - - - - - - - -
-Method Detail
- -

-getKeyString

-
-public java.lang.String getKeyString()
-
-
Author: Jörg Bäuerle
-

-

-
-
-
- -
Returns:
Returns the KeyString.
-
-
-
- -

-equals

-
-public boolean equals(java.lang.Object obj)
-
-
Author: Jörg Bäuerle
-

-

-
Overrides:
equals in class java.lang.Object
-
-
-
Parameters:
obj - -
Returns:
-
-
-
- -

-hashCode

-
-public int hashCode()
-
-
Author: Jörg Bäuerle
-

-

-
Overrides:
hashCode in class java.lang.Object
-
-
- -
Returns:
-
-
-
- -

-toString

-
-public java.lang.String toString()
-
-

Author: Jörg Bäuerle -

-

-
Overrides:
toString in class java.lang.Object
-
-
- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CInstVarKey.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CInstVarKey.html deleted file mode 100755 index 5bd6404c..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CInstVarKey.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumptionkey.CInstVarKey - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.typeassumptionkey.CInstVarKey

-
- - - - - - - - - -
-Packages that use CInstVarKey
mycompiler.mytypereconstruction.typeassumption  
-  -

- - - - - -
-Uses of CInstVarKey in mycompiler.mytypereconstruction.typeassumption
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption that return CInstVarKey
- CInstVarKeyCInstVarTypeAssumption.getHashSetKey() - -
-          Author: Jörg Bäuerle
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CLocalVarKey.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CLocalVarKey.html deleted file mode 100755 index d37087a8..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CLocalVarKey.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey

-
- - - - - - - - - -
-Packages that use CLocalVarKey
mycompiler.mytypereconstruction.typeassumption  
-  -

- - - - - -
-Uses of CLocalVarKey in mycompiler.mytypereconstruction.typeassumption
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption that return CLocalVarKey
- CLocalVarKeyCLocalVarTypeAssumption.getHashSetKey() - -
-          Author: Jörg Bäuerle
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodKey.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodKey.html deleted file mode 100755 index 0574ba9c..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodKey.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey

-
- - - - - - - - - - - - - -
-Packages that use CMethodKey
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.typeassumption  
-  -

- - - - - -
-Uses of CMethodKey in mycompiler.mytypereconstruction
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return CMethodKey
- CMethodKeyCIntersectionType.getIntersectionTypeKey() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return types with arguments of type CMethodKey
- java.util.Hashtable<CMethodKey,CIntersectionType>CTypeReconstructionResult.getMethodIntersectionTypes() - -
-           
-  -

- - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction with parameters of type CMethodKey
- CIntersectionTypeCTypeReconstructionResult.getMethodIntersectionType(CMethodKey key) - -
-           
- voidCIntersectionType.setIntersectionTypeKey(CMethodKey intersectionTypeKey) - -
-           
-  -

- - - - - -
-Uses of CMethodKey in mycompiler.mytypereconstruction.typeassumption
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption that return CMethodKey
- CMethodKeyCMethodTypeAssumption.getHashSetKey() - -
-          Author: Jörg Bäuerle
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodParaKey.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodParaKey.html deleted file mode 100755 index f523f9d8..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CMethodParaKey.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey

-
- - - - - - - - - -
-Packages that use CMethodParaKey
mycompiler.mytypereconstruction.typeassumption  
-  -

- - - - - -
-Uses of CMethodParaKey in mycompiler.mytypereconstruction.typeassumption
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption that return CMethodParaKey
- CMethodParaKeyCParaTypeAssumption.getHashSetKey() - -
-          Author: Jörg Bäuerle
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CTypeAssumptionKey.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CTypeAssumptionKey.html deleted file mode 100755 index f7006b28..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/class-use/CTypeAssumptionKey.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey

-
- - - - - - - - - - - - - - - - - -
-Packages that use CTypeAssumptionKey
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.typeassumption  
mycompiler.mytypereconstruction.typeassumptionkey  
-  -

- - - - - -
-Uses of CTypeAssumptionKey in mycompiler.mytypereconstruction
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return types with arguments of type CTypeAssumptionKey
- java.util.Hashtable<CTypeAssumptionKey,CTypeAssumption>CTypeReconstructionResult.getFieldAndLocalVarAssumptions() - -
-           
-  -

- - - - - - - - - -
Method parameters in mycompiler.mytypereconstruction with type arguments of type CTypeAssumptionKey
- voidCTypeReconstructionResult.setFieldAndLocalVarAssumptions(java.util.Hashtable<CTypeAssumptionKey,CTypeAssumption> fieldAndLocalVarAssumptions) - -
-           
-  -

- - - - - -
-Uses of CTypeAssumptionKey in mycompiler.mytypereconstruction.typeassumption
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction.typeassumption that return CTypeAssumptionKey
-abstract  CTypeAssumptionKeyCTypeAssumption.getHashSetKey() - -
-           
-  -

- - - - - -
-Uses of CTypeAssumptionKey in mycompiler.mytypereconstruction.typeassumptionkey
-  -

- - - - - - - - - - - - - - - - - - - - - -
Subclasses of CTypeAssumptionKey in mycompiler.mytypereconstruction.typeassumptionkey
- classCInstVarKey - -
-           
- classCLocalVarKey - -
-           
- classCMethodKey - -
-           
- classCMethodParaKey - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-frame.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-frame.html deleted file mode 100755 index 9725676d..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-frame.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.typeassumptionkey - - - - - - - - - - - -mycompiler.mytypereconstruction.typeassumptionkey - - - - -
-Classes  - -
-CInstVarKey -
-CLocalVarKey -
-CMethodKey -
-CMethodParaKey -
-CTypeAssumptionKey
- - - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-summary.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-summary.html deleted file mode 100755 index e5e7123a..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-summary.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.typeassumptionkey - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.mytypereconstruction.typeassumptionkey -

- - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
CInstVarKey 
CLocalVarKey 
CMethodKey 
CMethodParaKey 
CTypeAssumptionKeyDiese Klasse modelliert einen eindeutigen Schlüssel für eine Typannahme, - die in einem CTypeAssumptionSet abgelegt wird.
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-tree.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-tree.html deleted file mode 100755 index 10d43c38..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-tree.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.typeassumptionkey Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.mytypereconstruction.typeassumptionkey -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

-
    -
  • java.lang.Object
      -
    • mycompiler.mytypereconstruction.typeassumptionkey.CTypeAssumptionKey (implements mycompiler.mytypereconstruction.set.IHashSetKey) -
        -
      • mycompiler.mytypereconstruction.typeassumptionkey.CInstVarKey
      • mycompiler.mytypereconstruction.typeassumptionkey.CLocalVarKey
      • mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey
      • mycompiler.mytypereconstruction.typeassumptionkey.CMethodParaKey
      -
    -
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-use.html b/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-use.html deleted file mode 100755 index d8ddd963..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/typeassumptionkey/package-use.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - -Uses of Package mycompiler.mytypereconstruction.typeassumptionkey - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.mytypereconstruction.typeassumptionkey

-
- - - - - - - - - - - - - - - - - -
-Packages that use mycompiler.mytypereconstruction.typeassumptionkey
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.typeassumption  
mycompiler.mytypereconstruction.typeassumptionkey  
-  -

- - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction.typeassumptionkey used by mycompiler.mytypereconstruction
CMethodKey - -
-           
CTypeAssumptionKey - -
-          Diese Klasse modelliert einen eindeutigen Schlüssel für eine Typannahme, - die in einem CTypeAssumptionSet abgelegt wird.
-  -

- - - - - - - - - - - - - - - - - - - - -
-Classes in mycompiler.mytypereconstruction.typeassumptionkey used by mycompiler.mytypereconstruction.typeassumption
CInstVarKey - -
-           
CLocalVarKey - -
-           
CMethodKey - -
-           
CMethodParaKey - -
-           
CTypeAssumptionKey - -
-          Diese Klasse modelliert einen eindeutigen Schlüssel für eine Typannahme, - die in einem CTypeAssumptionSet abgelegt wird.
-  -

- - - - - - - - -
-Classes in mycompiler.mytypereconstruction.typeassumptionkey used by mycompiler.mytypereconstruction.typeassumptionkey
CTypeAssumptionKey - -
-          Diese Klasse modelliert einen eindeutigen Schlüssel für eine Typannahme, - die in einem CTypeAssumptionSet abgelegt wird.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/unify/FC_TTO.html b/doc/Javadoc/mycompiler/mytypereconstruction/unify/FC_TTO.html deleted file mode 100755 index bf445a4a..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/unify/FC_TTO.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - -FC_TTO - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.unify -
-Class FC_TTO

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.unify.FC_TTO
-
-
-
-
public class FC_TTO
extends java.lang.Object
- - -

-Hilfsklasse f�r den Unifizierungsalgorithmus -

- -

-

-
Version:
-
$Date: 2005/06/28 19:19:10 $
-
Author:
-
Martin Pl�micke
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
FC_TTO(de.dhbwstuttgart.typeinference.Menge fc, - de.dhbwstuttgart.typeinference.Menge tto) - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- de.dhbwstuttgart.typeinference.MengegetFC() - -
-           
- de.dhbwstuttgart.typeinference.MengegetTTO() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-FC_TTO

-
-public FC_TTO(de.dhbwstuttgart.typeinference.Menge fc,
-              de.dhbwstuttgart.typeinference.Menge tto)
-
-
- - - - - - - - -
-Method Detail
- -

-getFC

-
-public de.dhbwstuttgart.typeinference.Menge getFC()
-
-
-
-
-
-
- -

-getTTO

-
-public de.dhbwstuttgart.typeinference.Menge getTTO()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/unify/Unify.html b/doc/Javadoc/mycompiler/mytypereconstruction/unify/Unify.html deleted file mode 100755 index f3ff8b78..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/unify/Unify.html +++ /dev/null @@ -1,768 +0,0 @@ - - - - - - -Unify - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.mytypereconstruction.unify -
-Class Unify

-
-java.lang.Object
-  extended by mycompiler.mytypereconstruction.unify.Unify
-
-
-
-
public class Unify
extends java.lang.Object
- - -

-Implementierung des Unifizierungsalgorithmus -

- -

-

-
Version:
-
$Date: 2005/06/28 19:19:10 $
-
Author:
-
Martin Pl�micke, Thomas Ott
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
Unify() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- de.dhbwstuttgart.typeinference.Mengeadapt(java.lang.String strTV, - Type T, - de.dhbwstuttgart.typeinference.Menge vRFC, - de.dhbwstuttgart.typeinference.Menge vRE) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<RefType>allGreater(RefType ty, - de.dhbwstuttgart.typeinference.Menge FC) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<RefType>allSmaller(RefType ty, - de.dhbwstuttgart.typeinference.Menge FC) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<Pair>copyMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> vp) - -
-           
- de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>copyMengeMengePair(de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> vp) - -
-           
-static booleanhasSolvedForm(de.dhbwstuttgart.typeinference.Menge E) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>instanceSmaller(Pair P, - FC_TTO fc_tto) - -
-           
-static PairisInFC(RefType R1, - RefType R2, - de.dhbwstuttgart.typeinference.Menge FC) - -
-           
-static PairisInFCrechtsUnify(RefType RT1, - RefType RT2, - FC_TTO fc_tto) - -
-           
-static booleanisRealSubClass(java.lang.String Basis, - java.lang.String Mutter, - FC_TTO fc_tto) - -
-           
-static booleanisRXSimilarRY(RefType RFC, - RefType RY) - -
-           
-static booleanisTVinRefType(TyploseVariable TV, - RefType RT) - -
-           
-static java.util.Hashtablematch(RefType FCtype, - RefType tomatch, - java.util.Hashtable ht) - -
-           
-static intpi(int n, - java.lang.String C, - java.lang.String D, - de.dhbwstuttgart.typeinference.Menge tto) - -
-           
-static voidprintMenge(java.lang.String strMenge, - de.dhbwstuttgart.typeinference.Menge E, - int nDebug) - -
-           
-static voidprintMengeUnifier(java.lang.String strMenge, - de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Uni, - int nDebug) - -
-           
-static de.dhbwstuttgart.typeinference.Mengesub_unify(de.dhbwstuttgart.typeinference.Menge E, - FC_TTO fc_tto) - -
-           
-static voidSubst(Pair P, - int nTypnrInPair, - TyploseVariable a, - Type o, - boolean bMitVorbedingung) - -
-           
-static voidSubstHashtable(RefType typterm, - java.util.Hashtable ht) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<Pair>SubstHashtable2MengePair(java.util.Hashtable ht) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>unify(Type ty1, - Type ty2, - FC_TTO fc_tto) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>unify(de.dhbwstuttgart.typeinference.Menge<Pair> E, - FC_TTO fc_tto) - -
-           
-static voidvarSubst(RefType typterm, - java.util.Hashtable ht) - -
-           
-static java.util.HashtableMengePair2SubstHashtableMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> v) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Unify

-
-public Unify()
-
-
- - - - - - - - -
-Method Detail
- -

-unify

-
-public static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> unify(Type ty1,
-                                                             Type ty2,
-                                                             FC_TTO fc_tto)
-
-
-
-
-
-
- -

-unify

-
-public static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> unify(de.dhbwstuttgart.typeinference.Menge<Pair> E,
-                                                             FC_TTO fc_tto)
-
-
-
-
-
-
- -

-match

-
-public static java.util.Hashtable match(RefType FCtype,
-                                        RefType tomatch,
-                                        java.util.Hashtable ht)
-                                 throws MatchException
-
-
- -
Throws: -
MatchException
-
-
-
- -

-sub_unify

-
-public static de.dhbwstuttgart.typeinference.Menge sub_unify(de.dhbwstuttgart.typeinference.Menge E,
-                                         FC_TTO fc_tto)
-
-
-
-
-
-
- -

-adapt

-
-public de.dhbwstuttgart.typeinference.Menge adapt(java.lang.String strTV,
-                              Type T,
-                              de.dhbwstuttgart.typeinference.Menge vRFC,
-                              de.dhbwstuttgart.typeinference.Menge vRE)
-
-
-
-
-
-
- -

-isRXSimilarRY

-
-public static boolean isRXSimilarRY(RefType RFC,
-                                    RefType RY)
-
-
-
-
-
-
- -

-SubstHashtable2MengePair

-
-public static de.dhbwstuttgart.typeinference.Menge<Pair> SubstHashtable2MengePair(java.util.Hashtable ht)
-
-
-
-
-
-
- -

-MengePair2SubstHashtableMengePair

-
-public static java.util.Hashtable MengePair2SubstHashtableMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> v)
-
-
-
-
-
-
- -

-copyMengePair

-
-public static de.dhbwstuttgart.typeinference.Menge<Pair> copyMengePair(de.dhbwstuttgart.typeinference.Menge<Pair> vp)
-
-
-
-
-
-
- -

-copyMengeMengePair

-
-public de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> copyMengeMengePair(de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> vp)
-
-
-
-
-
-
- -

-instanceSmaller

-
-public static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> instanceSmaller(Pair P,
-                                                                       FC_TTO fc_tto)
-
-
-
-
-
-
- -

-allSmaller

-
-public static de.dhbwstuttgart.typeinference.Menge<RefType> allSmaller(RefType ty,
-                                                   de.dhbwstuttgart.typeinference.Menge FC)
-
-
-
-
-
-
- -

-allGreater

-
-public static de.dhbwstuttgart.typeinference.Menge<RefType> allGreater(RefType ty,
-                                                   de.dhbwstuttgart.typeinference.Menge FC)
-
-
-
-
-
-
- -

-isInFC

-
-public static Pair isInFC(RefType R1,
-                          RefType R2,
-                          de.dhbwstuttgart.typeinference.Menge FC)
-
-
-
-
-
-
- -

-isInFCrechtsUnify

-
-public static Pair isInFCrechtsUnify(RefType RT1,
-                                     RefType RT2,
-                                     FC_TTO fc_tto)
-
-
-
-
-
-
- -

-isTVinRefType

-
-public static boolean isTVinRefType(TyploseVariable TV,
-                                    RefType RT)
-
-
-
-
-
-
- -

-Subst

-
-public static void Subst(Pair P,
-                         int nTypnrInPair,
-                         TyploseVariable a,
-                         Type o,
-                         boolean bMitVorbedingung)
-
-
-
-
-
-
- -

-SubstHashtable

-
-public static void SubstHashtable(RefType typterm,
-                                  java.util.Hashtable ht)
-
-
-
-
-
-
- -

-isRealSubClass

-
-public static boolean isRealSubClass(java.lang.String Basis,
-                                     java.lang.String Mutter,
-                                     FC_TTO fc_tto)
-
-
-
-
-
-
- -

-pi

-
-public static int pi(int n,
-                     java.lang.String C,
-                     java.lang.String D,
-                     de.dhbwstuttgart.typeinference.Menge tto)
-              throws SCException
-
-
- -
Throws: -
SCException
-
-
-
- -

-printMengeUnifier

-
-public static void printMengeUnifier(java.lang.String strMenge,
-                                     de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>> Uni,
-                                     int nDebug)
-
-
-
-
-
-
- -

-printMenge

-
-public static void printMenge(java.lang.String strMenge,
-                              de.dhbwstuttgart.typeinference.Menge E,
-                              int nDebug)
-
-
-
-
-
-
- -

-hasSolvedForm

-
-public static boolean hasSolvedForm(de.dhbwstuttgart.typeinference.Menge E)
-
-
-
-
-
-
- -

-varSubst

-
-public static void varSubst(RefType typterm,
-                            java.util.Hashtable ht)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/unify/class-use/FC_TTO.html b/doc/Javadoc/mycompiler/mytypereconstruction/unify/class-use/FC_TTO.html deleted file mode 100755 index f0c7360e..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/unify/class-use/FC_TTO.html +++ /dev/null @@ -1,327 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.unify.FC_TTO - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.unify.FC_TTO

-
- - - - - - - - - - - - - - - - - -
-Packages that use FC_TTO
mycompiler  
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.unify  
-  -

- - - - - -
-Uses of FC_TTO in mycompiler
-  -

- - - - - - - - - -
Methods in mycompiler that return FC_TTO
- FC_TTOSourceFile.makeFC() - -
-           
-  -

- - - - - -
-Uses of FC_TTO in mycompiler.mytypereconstruction
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction that return FC_TTO
- FC_TTOCSupportData.getFiniteClosure() - -
-           
-  -

- - - - - - - - - -
Methods in mycompiler.mytypereconstruction with parameters of type FC_TTO
- voidCSupportData.setFiniteClosure(FC_TTO finiteClosure) - -
-           
-  -

- - - - - - - - - - - -
Constructors in mycompiler.mytypereconstruction with parameters of type FC_TTO
CSupportData(FC_TTO finiteClosure, - de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A, - java.lang.String currentClass) - -
-           
CSupportData(FC_TTO finiteClosure, - de.dhbwstuttgart.typeinference.Menge<CTypeReconstructionResult> A, - java.lang.String currentClass, - java.lang.String currentMethod, - int currentMethodParaCount, - de.dhbwstuttgart.typeinference.Menge<java.lang.Integer> blockIdList, - int blockDepth) - -
-           
-  -

- - - - - -
-Uses of FC_TTO in mycompiler.mytypereconstruction.unify
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in mycompiler.mytypereconstruction.unify with parameters of type FC_TTO
-static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>Unify.instanceSmaller(Pair P, - FC_TTO fc_tto) - -
-           
-static PairUnify.isInFCrechtsUnify(RefType RT1, - RefType RT2, - FC_TTO fc_tto) - -
-           
-static booleanUnify.isRealSubClass(java.lang.String Basis, - java.lang.String Mutter, - FC_TTO fc_tto) - -
-           
-static de.dhbwstuttgart.typeinference.MengeUnify.sub_unify(de.dhbwstuttgart.typeinference.Menge E, - FC_TTO fc_tto) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>Unify.unify(Type ty1, - Type ty2, - FC_TTO fc_tto) - -
-           
-static de.dhbwstuttgart.typeinference.Menge<de.dhbwstuttgart.typeinference.Menge<Pair>>Unify.unify(de.dhbwstuttgart.typeinference.Menge<Pair> E, - FC_TTO fc_tto) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/unify/class-use/Unify.html b/doc/Javadoc/mycompiler/mytypereconstruction/unify/class-use/Unify.html deleted file mode 100755 index 5f458d99..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/unify/class-use/Unify.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.mytypereconstruction.unify.Unify - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.mytypereconstruction.unify.Unify

-
-No usage of mycompiler.mytypereconstruction.unify.Unify -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/unify/package-frame.html b/doc/Javadoc/mycompiler/mytypereconstruction/unify/package-frame.html deleted file mode 100755 index 3ac9bd10..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/unify/package-frame.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.unify - - - - - - - - - - - -mycompiler.mytypereconstruction.unify - - - - -
-Classes  - -
-FC_TTO -
-Unify
- - - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/unify/package-summary.html b/doc/Javadoc/mycompiler/mytypereconstruction/unify/package-summary.html deleted file mode 100755 index 53372ce6..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/unify/package-summary.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.unify - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.mytypereconstruction.unify -

- - - - - - - - - - - - - -
-Class Summary
FC_TTOHilfsklasse für den Unifizierungsalgorithmus
UnifyImplementierung des Unifizierungsalgorithmus
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/unify/package-tree.html b/doc/Javadoc/mycompiler/mytypereconstruction/unify/package-tree.html deleted file mode 100755 index 1be0c5ab..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/unify/package-tree.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -mycompiler.mytypereconstruction.unify Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.mytypereconstruction.unify -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

-
    -
  • java.lang.Object
      -
    • mycompiler.mytypereconstruction.unify.FC_TTO
    • mycompiler.mytypereconstruction.unify.Unify
    -
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/mytypereconstruction/unify/package-use.html b/doc/Javadoc/mycompiler/mytypereconstruction/unify/package-use.html deleted file mode 100755 index f3de8e78..00000000 --- a/doc/Javadoc/mycompiler/mytypereconstruction/unify/package-use.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - -Uses of Package mycompiler.mytypereconstruction.unify - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.mytypereconstruction.unify

-
- - - - - - - - - - - - - - - - - -
-Packages that use mycompiler.mytypereconstruction.unify
mycompiler  
mycompiler.mytypereconstruction  
mycompiler.mytypereconstruction.unify  
-  -

- - - - - - - - -
-Classes in mycompiler.mytypereconstruction.unify used by mycompiler
FC_TTO - -
-          Hilfsklasse für den Unifizierungsalgorithmus
-  -

- - - - - - - - -
-Classes in mycompiler.mytypereconstruction.unify used by mycompiler.mytypereconstruction
FC_TTO - -
-          Hilfsklasse für den Unifizierungsalgorithmus
-  -

- - - - - - - - -
-Classes in mycompiler.mytypereconstruction.unify used by mycompiler.mytypereconstruction.unify
FC_TTO - -
-          Hilfsklasse für den Unifizierungsalgorithmus
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/package-frame.html b/doc/Javadoc/mycompiler/package-frame.html deleted file mode 100755 index 884387df..00000000 --- a/doc/Javadoc/mycompiler/package-frame.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - -mycompiler - - - - - - - - - - - -mycompiler - - - - -
-Interfaces  - -
-MyCompilerAPI
- - - - - - -
-Classes  - -
-MyCompiler -
-SourceFile
- - - - diff --git a/doc/Javadoc/mycompiler/package-summary.html b/doc/Javadoc/mycompiler/package-summary.html deleted file mode 100755 index bff3d159..00000000 --- a/doc/Javadoc/mycompiler/package-summary.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - -mycompiler - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler -

- - - - - - - - - -
-Interface Summary
MyCompilerAPISchnittstellen-Klasse zum Compiler.
-  - -

- - - - - - - - - - - - - -
-Class Summary
MyCompiler 
SourceFile 
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/package-tree.html b/doc/Javadoc/mycompiler/package-tree.html deleted file mode 100755 index a8a84c5b..00000000 --- a/doc/Javadoc/mycompiler/package-tree.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - -mycompiler Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/package-use.html b/doc/Javadoc/mycompiler/package-use.html deleted file mode 100755 index 067a3f3a..00000000 --- a/doc/Javadoc/mycompiler/package-use.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - -Uses of Package mycompiler - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler

-
- - - - - - - - - -
-Packages that use mycompiler
mycompiler  
-  -

- - - - - - - - - - - -
-Classes in mycompiler used by mycompiler
MyCompilerAPI - -
-          Schnittstellen-Klasse zum Compiler.
SourceFile - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/unused/ConstantValueAttribute.html b/doc/Javadoc/mycompiler/unused/ConstantValueAttribute.html deleted file mode 100755 index 95077c95..00000000 --- a/doc/Javadoc/mycompiler/unused/ConstantValueAttribute.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - -ConstantValueAttribute - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.unused -
-Class ConstantValueAttribute

-
-java.lang.Object
-  extended by mycompiler.unused.ConstantValueAttribute
-
-
-
-
public class ConstantValueAttribute
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
ConstantValueAttribute() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-ConstantValueAttribute

-
-public ConstantValueAttribute()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/unused/Import.html b/doc/Javadoc/mycompiler/unused/Import.html deleted file mode 100755 index 5bbf039a..00000000 --- a/doc/Javadoc/mycompiler/unused/Import.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - -Import - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.unused -
-Class Import

-
-java.lang.Object
-  extended by mycompiler.myclass.Status
-      extended by mycompiler.unused.Import
-
-
-
-
public class Import
extends Status
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
Import() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class mycompiler.myclass.Status
set_Import, set_UserDef
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-Import

-
-public Import()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/unused/JavaCompiler.html b/doc/Javadoc/mycompiler/unused/JavaCompiler.html deleted file mode 100755 index b2888bf9..00000000 --- a/doc/Javadoc/mycompiler/unused/JavaCompiler.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - -JavaCompiler - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.unused -
-Class JavaCompiler

-
-java.lang.Object
-  extended by mycompiler.myparser.JavaParser
-      extended by mycompiler.unused.JavaCompiler
-
-
-
-
public class JavaCompiler
extends JavaParser
- - -

-


- -

- - - - - - - -
-Nested Class Summary
- - - - - - - -
Nested classes/interfaces inherited from class mycompiler.myparser.JavaParser
JavaParser.yyException, JavaParser.yyInput
-  - - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class mycompiler.myparser.JavaParser
ABSTRACT, ANDEQUAL, BOOLEAN, BOOLLITERAL, BRACE, BREAK, CASE, CATCH, CHAR, CHARLITERAL, CLASS, CONTINUE, DECREMENT, DEFAULT, DIVIDEEQUAL, DO, ELSE, EOF, EQUAL, EXTENDS, FINALLY, FOR, GREATEREQUAL, IDENTIFIER, IF, INCREMENT, INSTANCEOF, INT, INTLITERAL, JNULL, LESSEQUAL, LOGICALAND, LOGICALOR, MINUSEQUAL, MODULOEQUAL, NEW, NOTEQUAL, OP, OREQUAL, path, PLUSEQUAL, PRIVATE, PROTECTED, PUBLIC, RELOP, RETURN, SHIFTLEFT, SHIFTLEFTEQUAL, SHIFTRIGHT, SIGNEDSHIFTRIGHT, SIGNEDSHIFTRIGHTEQUAL, STATIC, STRINGLITERAL, SUPER, SWITCH, THIS, THROW, THROWS, TIMESEQUAL, TRY, UNSIGNEDSHIFTRIGHT, UNSIGNEDSHIFTRIGHTEQUAL, VOID, WHILE, XOREQUAL, yyCheck, yyDefRed, yyDgoto, yyErrorCode, yyFinal, yyGindex, yyLen, yyLhs, yyMax, yyName, yyRindex, yySindex, yyTable
-  - - - - - - - - - - -
-Constructor Summary
JavaCompiler() - -
-           
-  - - - - - - - - - - - -
-Method Summary
-static voidmain(java.lang.String[] args) - -
-           
- - - - - - - -
Methods inherited from class mycompiler.myparser.JavaParser
yyDefault, yyerror, yyerror, yyExpecting, yyparse, yyparse
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-JavaCompiler

-
-public JavaCompiler()
-
-
- - - - - - - - -
-Method Detail
- -

-main

-
-public static void main(java.lang.String[] args)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/unused/TestClass.html b/doc/Javadoc/mycompiler/unused/TestClass.html deleted file mode 100755 index b0d51e2d..00000000 --- a/doc/Javadoc/mycompiler/unused/TestClass.html +++ /dev/null @@ -1,255 +0,0 @@ - - - - - - -TestClass - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -mycompiler.unused -
-Class TestClass

-
-java.lang.Object
-  extended by mycompiler.unused.TestClass
-
-
-
-
public class TestClass
extends java.lang.Object
- - -

-

-
Version:
-
$Date: 2005/06/28 19:19:10 $
-
Author:
-
Jörg Bäuerle
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
TestClass() - -
-           
-  - - - - - - - - - - - -
-Method Summary
-static voidmain(java.lang.String[] args) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-TestClass

-
-public TestClass()
-
-
- - - - - - - - -
-Method Detail
- -

-main

-
-public static void main(java.lang.String[] args)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/unused/class-use/ConstantValueAttribute.html b/doc/Javadoc/mycompiler/unused/class-use/ConstantValueAttribute.html deleted file mode 100755 index 7a3f1ad5..00000000 --- a/doc/Javadoc/mycompiler/unused/class-use/ConstantValueAttribute.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.unused.ConstantValueAttribute - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.unused.ConstantValueAttribute

-
-No usage of mycompiler.unused.ConstantValueAttribute -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/unused/class-use/Import.html b/doc/Javadoc/mycompiler/unused/class-use/Import.html deleted file mode 100755 index 97557a8d..00000000 --- a/doc/Javadoc/mycompiler/unused/class-use/Import.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Uses of Class mycompiler.unused.Import - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.unused.Import

-
- - - - - - - - - -
-Packages that use Import
mycompiler.myclass  
-  -

- - - - - -
-Uses of Import in mycompiler.myclass
-  -

- - - - - - - - - -
Methods in mycompiler.myclass with parameters of type Import
- voidStatus.set_Import(Import imp) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/unused/class-use/JavaCompiler.html b/doc/Javadoc/mycompiler/unused/class-use/JavaCompiler.html deleted file mode 100755 index aa77b46d..00000000 --- a/doc/Javadoc/mycompiler/unused/class-use/JavaCompiler.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.unused.JavaCompiler - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.unused.JavaCompiler

-
-No usage of mycompiler.unused.JavaCompiler -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/unused/class-use/TestClass.html b/doc/Javadoc/mycompiler/unused/class-use/TestClass.html deleted file mode 100755 index 5624267c..00000000 --- a/doc/Javadoc/mycompiler/unused/class-use/TestClass.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Uses of Class mycompiler.unused.TestClass - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
mycompiler.unused.TestClass

-
-No usage of mycompiler.unused.TestClass -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/unused/package-frame.html b/doc/Javadoc/mycompiler/unused/package-frame.html deleted file mode 100755 index b00d7430..00000000 --- a/doc/Javadoc/mycompiler/unused/package-frame.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - -mycompiler.unused - - - - - - - - - - - -mycompiler.unused - - - - -
-Classes  - -
-ConstantValueAttribute -
-Import -
-JavaCompiler -
-TestClass
- - - - diff --git a/doc/Javadoc/mycompiler/unused/package-summary.html b/doc/Javadoc/mycompiler/unused/package-summary.html deleted file mode 100755 index c5370f04..00000000 --- a/doc/Javadoc/mycompiler/unused/package-summary.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - -mycompiler.unused - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-

-Package mycompiler.unused -

- - - - - - - - - - - - - - - - - - - - - -
-Class Summary
ConstantValueAttribute 
Import 
JavaCompiler 
TestClass 
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/unused/package-tree.html b/doc/Javadoc/mycompiler/unused/package-tree.html deleted file mode 100755 index dea56a9c..00000000 --- a/doc/Javadoc/mycompiler/unused/package-tree.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -mycompiler.unused Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package mycompiler.unused -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/mycompiler/unused/package-use.html b/doc/Javadoc/mycompiler/unused/package-use.html deleted file mode 100755 index 27bc29f1..00000000 --- a/doc/Javadoc/mycompiler/unused/package-use.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - -Uses of Package mycompiler.unused - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
mycompiler.unused

-
- - - - - - - - - -
-Packages that use mycompiler.unused
mycompiler.myclass  
-  -

- - - - - - - - -
-Classes in mycompiler.unused used by mycompiler.myclass
Import - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/overview-frame.html b/doc/Javadoc/overview-frame.html deleted file mode 100755 index 206fb0ff..00000000 --- a/doc/Javadoc/overview-frame.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - -Overview - - - - - - - - - - - - - - - -
-
- - - - - -
All Classes -

- -Packages -
-mycompiler -
-mycompiler.mybytecode -
-mycompiler.myclass -
-mycompiler.myexception -
-mycompiler.mymodifier -
-mycompiler.myoperator -
-mycompiler.myparser -
-mycompiler.mystatement -
-mycompiler.mytest -
-mycompiler.mytype -
-mycompiler.mytypereconstruction -
-mycompiler.mytypereconstruction.replacementlistener -
-mycompiler.mytypereconstruction.set -
-mycompiler.mytypereconstruction.typeassumption -
-mycompiler.mytypereconstruction.typeassumptionkey -
-mycompiler.mytypereconstruction.unify -
-mycompiler.unused -
-

- -

-  - - diff --git a/doc/Javadoc/overview-summary.html b/doc/Javadoc/overview-summary.html deleted file mode 100755 index 7f5a2402..00000000 --- a/doc/Javadoc/overview-summary.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - -Overview - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages
mycompiler 
mycompiler.mybytecode 
mycompiler.myclass 
mycompiler.myexception 
mycompiler.mymodifier 
mycompiler.myoperator 
mycompiler.myparser 
mycompiler.mystatement 
mycompiler.mytest 
mycompiler.mytype 
mycompiler.mytypereconstruction 
mycompiler.mytypereconstruction.replacementlistener 
mycompiler.mytypereconstruction.set 
mycompiler.mytypereconstruction.typeassumption 
mycompiler.mytypereconstruction.typeassumptionkey 
mycompiler.mytypereconstruction.unify 
mycompiler.unused 
- -


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/overview-tree.html b/doc/Javadoc/overview-tree.html deleted file mode 100755 index d227c78d..00000000 --- a/doc/Javadoc/overview-tree.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - -Class Hierarchy - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For All Packages

-
-
-
Package Hierarchies:
mycompiler, mycompiler.mybytecode, mycompiler.myclass, mycompiler.myexception, mycompiler.mymodifier, mycompiler.myoperator, mycompiler.myparser, mycompiler.mystatement, mycompiler.mytest, mycompiler.mytype, mycompiler.mytypereconstruction, mycompiler.mytypereconstruction.replacementlistener, mycompiler.mytypereconstruction.set, mycompiler.mytypereconstruction.typeassumption, mycompiler.mytypereconstruction.typeassumptionkey, mycompiler.mytypereconstruction.unify, mycompiler.unused
-
-

-Class Hierarchy -

- -

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/package-list b/doc/Javadoc/package-list deleted file mode 100755 index 1b61973a..00000000 --- a/doc/Javadoc/package-list +++ /dev/null @@ -1,17 +0,0 @@ -mycompiler -mycompiler.mybytecode -mycompiler.myclass -mycompiler.myexception -mycompiler.mymodifier -mycompiler.myoperator -mycompiler.myparser -mycompiler.mystatement -mycompiler.mytest -mycompiler.mytype -mycompiler.mytypereconstruction -mycompiler.mytypereconstruction.replacementlistener -mycompiler.mytypereconstruction.set -mycompiler.mytypereconstruction.typeassumption -mycompiler.mytypereconstruction.typeassumptionkey -mycompiler.mytypereconstruction.unify -mycompiler.unused diff --git a/doc/Javadoc/resources/inherit.gif b/doc/Javadoc/resources/inherit.gif deleted file mode 100755 index c814867a13deb0ca7ea2156c6ca1d5a03372af7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57 zcmZ?wbhEHbIIT!9-C*e{wE9>Kx3D)-;0v)C; KYxQGgum%9JOA&7X diff --git a/doc/Javadoc/serialized-form.html b/doc/Javadoc/serialized-form.html deleted file mode 100755 index 2bff7249..00000000 --- a/doc/Javadoc/serialized-form.html +++ /dev/null @@ -1,351 +0,0 @@ - - - - - - -Serialized Form - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Serialized Form

-
-
- - - - - -
-Package mycompiler.myexception
- -

- - - - - -
-Class mycompiler.myexception.CTypeReconstructionException extends java.lang.RuntimeException implements Serializable
- -

- -

- - - - - -
-Class mycompiler.myexception.JVMCodeException extends java.lang.Exception implements Serializable
- -

- - - - - -
-Serialized Fields
- -

-message

-
-java.lang.String message
-
-
-
-
- -

- - - - - -
-Class mycompiler.myexception.MatchException extends java.lang.Exception implements Serializable
- -

- -

- - - - - -
-Class mycompiler.myexception.SCClassBodyException extends java.lang.Exception implements Serializable
- -

- - - - - -
-Serialized Fields
- -

-exlist

-
-de.dhbwstuttgart.typeinference.Menge<E> exlist
-
-
-
-
- -

- - - - - -
-Class mycompiler.myexception.SCClassException extends java.lang.Exception implements Serializable
- -

- - - - - -
-Serialized Fields
- -

-exlist

-
-de.dhbwstuttgart.typeinference.Menge<E> exlist
-
-
-
-
- -

- - - - - -
-Class mycompiler.myexception.SCException extends java.lang.Exception implements Serializable
- -

- - - - - -
-Serialized Fields
- -

-scerrors

-
-de.dhbwstuttgart.typeinference.Menge<E> scerrors
-
-
-
-
- -

- - - - - -
-Class mycompiler.myexception.SCMethodException extends java.lang.Exception implements Serializable
- -

- - - - - -
-Serialized Fields
- -

-exlist

-
-de.dhbwstuttgart.typeinference.Menge<E> exlist
-
-
-
-
- -

- - - - - -
-Class mycompiler.myexception.SCStatementException extends java.lang.Exception implements Serializable
- -

- - - - - -
-Serialized Fields
- -

-exlist

-
-de.dhbwstuttgart.typeinference.Menge<E> exlist
-
-
-
-
-
- - - - - -
-Package mycompiler.myparser
- -

- - - - - -
-Class mycompiler.myparser.JavaParser.yyException extends java.lang.Exception implements Serializable
- -

- -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/doc/Javadoc/stylesheet.css b/doc/Javadoc/stylesheet.css deleted file mode 100755 index 6d31fdbc..00000000 --- a/doc/Javadoc/stylesheet.css +++ /dev/null @@ -1,29 +0,0 @@ -/* Javadoc style sheet */ - -/* Define colors, fonts and other style attributes here to override the defaults */ - -/* Page background color */ -body { background-color: #FFFFFF } - -/* Headings */ -h1 { font-size: 145% } - -/* Table colors */ -.TableHeadingColor { background: #CCCCFF } /* Dark mauve */ -.TableSubHeadingColor { background: #EEEEFF } /* Light mauve */ -.TableRowColor { background: #FFFFFF } /* White */ - -/* Font used in left-hand frame lists */ -.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif } -.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif } -.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif } - -/* Navigation bar fonts and colors */ -.NavBarCell1 { background-color:#EEEEFF;} /* Light mauve */ -.NavBarCell1Rev { background-color:#00008B;} /* Dark Blue */ -.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;} -.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;} - -.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} -.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} - diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Menge.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Menge.html index ec67989f..ae5f95bc 100644 --- a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Menge.html +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Menge.html @@ -2453,7 +2453,7 @@ (package private) Menge<Pair> -MUB.sigma  +MUB.generateGenerics  (package private) Menge diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Pair.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Pair.html index 9ce5898e..06022efe 100644 --- a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Pair.html +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/class-use/Pair.html @@ -419,7 +419,7 @@ (package private) Menge<Pair> -MUB.sigma  +MUB.generateGenerics  diff --git a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/MUB.html b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/MUB.html index c54a662f..a480eef7 100644 --- a/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/MUB.html +++ b/doc/LambdaJavadoc/de/dhbwstuttgart/typeinference/unify/MUB.html @@ -135,7 +135,7 @@ extends java.lang.Object (package private) Menge<Pair> -sigma  +generateGenerics  @@ -209,13 +209,13 @@ extends java.lang.Object
Menge<? extends Type> Mub
- + diff --git a/doc/LambdaJavadoc/index-files/index-18.html b/doc/LambdaJavadoc/index-files/index-18.html index 6e66932b..43970e39 100644 --- a/doc/LambdaJavadoc/index-files/index-18.html +++ b/doc/LambdaJavadoc/index-files/index-18.html @@ -532,7 +532,7 @@
 
SHIFTRIGHT - Static variable in class de.dhbwstuttgart.parser.JavaParser
 
-
sigma - Variable in class de.dhbwstuttgart.typeinference.unify.MUB
+
generateGenerics - Variable in class de.dhbwstuttgart.typeinference.unify.MUB
 
SIGNEDSHIFTRIGHT - Static variable in class de.dhbwstuttgart.parser.JavaParser
 
diff --git a/pom.xml b/pom.xml index 8fe3f636..63e8985a 100644 --- a/pom.xml +++ b/pom.xml @@ -54,8 +54,8 @@ http://maven.apache.org/maven-v4_0_0.xsd"> 3.8.0 --enable-preview - 19 - 19 + 20 + 20 @@ -112,8 +112,8 @@ http://maven.apache.org/maven-v4_0_0.xsd"> - 19 - 19 + 20 + 20 de.dhbwstuttgart.core.ConsoleInterface diff --git a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java index c582fa96..a0eab274 100644 --- a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -890,7 +890,7 @@ public class JavaTXCompiler { generatedClasses.put(new JavaClassName(name), source); }); } - generatedGenerics.put(f, converter.computedGenerics()); + generatedGenerics.put(f, converter.javaGenerics()); writeClassFile(generatedClasses, path); } } diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index acba2a13..c5179268 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -4,7 +4,6 @@ import de.dhbwstuttgart.bytecode.FunNGenerator; import de.dhbwstuttgart.environment.ByteArrayClassLoader; import de.dhbwstuttgart.environment.IByteArrayClassLoader; import de.dhbwstuttgart.parser.NullToken; -import de.dhbwstuttgart.parser.SyntaxTreeGenerator.AssignToLocal; import de.dhbwstuttgart.syntaxtree.*; import de.dhbwstuttgart.syntaxtree.factory.ASTFactory; import de.dhbwstuttgart.syntaxtree.statement.*; @@ -14,12 +13,9 @@ import de.dhbwstuttgart.target.tree.*; import de.dhbwstuttgart.target.tree.expression.TargetBlock; import de.dhbwstuttgart.target.tree.expression.TargetExpression; import de.dhbwstuttgart.target.tree.type.*; -import de.dhbwstuttgart.typeinference.constraints.Pair; import de.dhbwstuttgart.typeinference.result.*; -import org.objectweb.asm.Attribute; import java.util.*; -import java.util.concurrent.CyclicBarrier; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -30,39 +26,77 @@ public class ASTToTargetAST { public static RefType OBJECT = ASTFactory.createObjectType(); // TODO It would be better if I could call this directly but the hashcode seems to change - protected List all; - protected Sigma sigma; + protected List all; + protected Generics generics; + final Map> userDefinedGenerics = new HashMap<>(); + protected ClassOrInterface currentClass; // TODO This is only needed because of SuperCall, maybe there's - public List computedGenerics() { - return all.stream().map(GenericsResult::new).toList(); + public List txGenerics() { + return all.stream().map(generics -> new GenericsResult(generics.txGenerics)).toList(); + } + public List javaGenerics() { + return all.stream().map(generics -> new GenericsResult(generics.javaGenerics)).toList(); } - record Generics(Set> javaGenerics, Set> txGenerics, Set userDefinedGenerics) { - Generics(Set> javaGenerics, Set> txGenerics) { - this(javaGenerics, txGenerics, Set.of()); + record Generics(JavaGenerics javaGenerics, TxGenerics txGenerics) {} + + final class TxGenerics extends GenerateGenerics { + TxGenerics(ResultSet constraints) { + super(constraints); + } + + @Override + void generics(ClassOrInterface owner, Method method, Set> result, HashSet referenced) { + eliminateInfima(result); + } + + @Override + void generics(ClassOrInterface classOrInterface, Set> result) { + var referenced = new HashSet(); + eliminateInfima(result); + eliminateInnerTypeVariablesOfClass(classOrInterface, result, referenced); } } - class Sigma { - Map computedGenericsOfMethods = new HashMap<>(); - Map computedGenericsOfClasses = new HashMap<>(); - Map> usedTPHsOfMethods = new HashMap<>(); + final class JavaGenerics extends GenerateGenerics { + JavaGenerics(ResultSet constraints) { + super(constraints); + } - Set simplifiedConstraints = new HashSet<>(); - Map concreteTypes = new HashMap<>(); - Map equality = new HashMap<>(); - Map txEquality = new HashMap<>(); + @Override + void generics(ClassOrInterface owner, Method method, Set> result, HashSet referenced) { + eliminateCycles(result, referenced); + eliminateInfima(result); + equalizeTypeVariables(result); + } - Sigma(ResultSet constraints) { - ASTToTargetAST.this.sigma = this; + @Override + void generics(ClassOrInterface classOrInterface, Set> result) { + var referenced = new HashSet(); + eliminateCycles(result, referenced); + eliminateInfima(result); + eliminateInnerTypeVariablesOfClass(classOrInterface, result, referenced); + equalizeTypeVariables(result); + } + } + abstract class GenerateGenerics { + final Map>> computedGenericsOfMethods = new HashMap<>(); + final Map>> computedGenericsOfClasses = new HashMap<>(); + + final Map> usedTPHsOfMethods = new HashMap<>(); + + final Set simplifiedConstraints = new HashSet<>(); + final Map concreteTypes = new HashMap<>(); + final Map equality = new HashMap<>(); + + GenerateGenerics(ResultSet constraints) { for (var constraint : constraints.results) { if (constraint instanceof PairTPHsmallerTPH p) { simplifiedConstraints.add(p); } else if (constraint instanceof PairTPHEqualTPH p) { equality.put(p.getLeft(), p.getRight()); - txEquality.put(p.getLeft(), p.getRight()); } else if (constraint instanceof PairTPHequalRefTypeOrWildcardType p) { concreteTypes.put(this.equality.getOrDefault(p.left, p.left), p.right); } @@ -71,22 +105,22 @@ public class ASTToTargetAST { System.out.println("Simplified constraints: " + simplifiedConstraints); } - Set findTypeVariables(RefTypeOrTPHOrWildcardOrGeneric type, Map equality) { + Set findTypeVariables(RefTypeOrTPHOrWildcardOrGeneric type) { var result = new HashSet(); if (type instanceof TypePlaceholder tph) { tph = equality.getOrDefault(tph, tph); if (concreteTypes.containsKey(tph)) { - result.addAll(findTypeVariables(concreteTypes.get(tph), equality)); + result.addAll(findTypeVariables(concreteTypes.get(tph))); return result; } result.add(tph); } else if (type instanceof RefType refType) { for (var t : refType.getParaList()) - result.addAll(findTypeVariables(t, equality)); + result.addAll(findTypeVariables(t)); } else if (type instanceof ExtendsWildcardType wildcardType) { - result.addAll(findTypeVariables(wildcardType.getInnerType(), equality)); + result.addAll(findTypeVariables(wildcardType.getInnerType())); } else if (type instanceof SuperWildcardType wildcardType) { - result.addAll(findTypeVariables(wildcardType.getInnerType(), equality)); + result.addAll(findTypeVariables(wildcardType.getInnerType())); } return result; } @@ -125,7 +159,7 @@ public class ASTToTargetAST { input.add(pair); } - static void addToEquality(Map equality, TypePlaceholder from, TypePlaceholder to) { + void addToEquality(TypePlaceholder from, TypePlaceholder to) { for (var entry : new HashSet<>(equality.entrySet())) { if (entry.getValue().equals(from)) { equality.remove(entry.getKey()); @@ -157,13 +191,12 @@ public class ASTToTargetAST { private void methodFindConstraints( ClassOrInterface owner, Method method, - Set simplifiedConstraints, Set typeVariables, - Set userDefinedGenericsOfClass, Set typeVariablesOfClass, - Set> result, - Map equality + Set> result ) { + var userDefinedGenericsOfClass = userDefinedGenerics.get(owner); + // Type variables with bounds that are also type variables of the method for (var typeVariable : new HashSet<>(typeVariables)) { typeVariable = equality.getOrDefault(typeVariable, typeVariable); @@ -212,7 +245,7 @@ public class ASTToTargetAST { var optMethod = findMethod(owner, methodCall.name, methodCall.getArgumentList()); if (optMethod.isEmpty()) return; var method = optMethod.get(); - var generics = generics(owner, method).txGenerics(); + var generics = generics(owner, method); // transitive and var all = transitiveClosure(generics); @@ -289,26 +322,6 @@ public class ASTToTargetAST { } } - @Override - public void visit(CastExpr castExpr) { - - } - - @Override - public void visit(EmptyStmt emptyStmt) { - - } - - @Override - public void visit(FieldVar fieldVar) { - - } - - @Override - public void visit(ForStmt forStmt) { - forStmt.body_Loop_block.accept(this); - } - @Override public void visit(IfStmt ifStmt) { superType = new Void(new NullToken()); @@ -319,57 +332,12 @@ public class ASTToTargetAST { ifStmt.else_block.accept(this); } - @Override - public void visit(InstanceOf instanceOf) { - - } - - @Override - public void visit(LocalVar localVar) { - - } - - @Override - public void visit(LocalVarDecl localVarDecl) { - - } - - @Override - public void visit(NewClass newClass) { - this.visit((MethodCall) newClass); - } - - @Override - public void visit(NewArray newArray) { - newArray.expr.forEach(expr -> expr.accept(this)); - } - @Override public void visit(Return aReturn) { superType = aReturn.getType(); aReturn.retexpr.accept(this); } - @Override - public void visit(ReturnVoid aReturn) { - - } - - @Override - public void visit(StaticClassName staticClassName) { - - } - - @Override - public void visit(Super aSuper) { - - } - - @Override - public void visit(This aThis) { - - } - @Override public void visit(WhileStmt whileStmt) { superType = new Void(new NullToken()); @@ -378,40 +346,6 @@ public class ASTToTargetAST { whileStmt.loopBlock.accept(this); } - @Override - public void visit(DoStmt whileStmt) { - whileStmt.loopBlock.accept(this); - } - - @Override - public void visit(AssignToField assignLeftSide) { - - } - - @Override - public void visit(AssignToLocal assignLeftSide) { - - } - - @Override - public void visit(SuperCall superCall) { - - } - - @Override - public void visit(ExpressionReceiver expressionReceiver) { - expressionReceiver.expr.accept(this); - } - - @Override - public void visit(UnaryExpr unaryExpr) { - unaryExpr.expr.accept(this); - } - - @Override - public void visit(Literal literal) { - - } @Override public void visit(ArgumentList arglist) { for(int i = 0;i> genericsOfClass, - Set typeVariablesOfClass, - Set typeVariables, - Map equality + Set typeVariables ) { - for (var pair : genericsOfClass) { - typeVariablesOfClass.add((TypePlaceholder) pair.getLeft()); - } - if (!(method instanceof Constructor)) - typeVariables.addAll(findTypeVariables(method.getReturnType(), equality)); + typeVariables.addAll(findTypeVariables(method.getReturnType())); for (var arg : method.getParameterList().getFormalparalist()) { - typeVariables.addAll(findTypeVariables(arg.getType(), equality)); + typeVariables.addAll(findTypeVariables(arg.getType())); } method.block.accept(new TracingStatementVisitor() { @Override public void visit(LocalVarDecl localVarDecl) { - typeVariables.addAll(findTypeVariables(localVarDecl.getType(), equality)); + typeVariables.addAll(findTypeVariables(localVarDecl.getType())); } @Override public void visit(MethodCall methodCall) { super.visit(methodCall); - typeVariables.addAll(findTypeVariables(methodCall.getType(), equality)); + typeVariables.addAll(findTypeVariables(methodCall.getType())); } }); } - // Family of generated Generics - Generics generics(ClassOrInterface owner, Method method) { + abstract void generics(ClassOrInterface owner, Method method, Set> result, HashSet javaTypeVariablesOfClass); + + Set> generics(ClassOrInterface owner, Method method) { if (computedGenericsOfMethods.containsKey(method)) return computedGenericsOfMethods.get(method); - Set> txResult = new HashSet<>(); - Set> javaResult = new HashSet<>(); - var generics = new Generics(javaResult, txResult); - computedGenericsOfMethods.put(method, generics); + Set> result = new HashSet<>(); + computedGenericsOfMethods.put(method, result); var classGenerics = generics(owner); - var genericsOfClass = classGenerics.javaGenerics(); - var txGenericsOfClass = classGenerics.txGenerics(); - var simplifiedConstraints = new HashSet<>(this.simplifiedConstraints); - HashSet txTypeVariables = new HashSet<>(); HashSet javaTypeVariables = new HashSet<>(); - HashSet txTypeVariablesOfClass = new HashSet<>(); - HashSet javaTypeVariablesOfClass = new HashSet<>(); + HashSet typeVariablesOfClass = new HashSet<>(); - methodFindTypeVariables(method, genericsOfClass, javaTypeVariablesOfClass, javaTypeVariables, equality); - methodFindTypeVariables(method, txGenericsOfClass, txTypeVariablesOfClass, txTypeVariables, txEquality); - - methodFindConstraints(owner, method, simplifiedConstraints, javaTypeVariables, classGenerics.userDefinedGenerics, javaTypeVariablesOfClass, javaResult, equality); - methodFindConstraints(owner, method, simplifiedConstraints, txTypeVariables, classGenerics.userDefinedGenerics, txTypeVariablesOfClass, txResult, txEquality); - - { // Java Generics - eliminateTransitives(javaResult); - var referenced = new HashSet(); - - eliminateCycles(javaResult, equality, referenced); - eliminateInfima(javaResult, equality); - - var usedTphs = new HashSet(); - // For eliminating inner type variables we need to figure out which ones are actually used - for (var param : method.getParameterList().getFormalparalist()) { - usedTphs.addAll(findTypeVariables(param.getType(), equality)); - } - usedTphs.addAll(findTypeVariables(method.getReturnType(), equality)); - referenced.addAll(usedTphs); - referenced.addAll(javaTypeVariablesOfClass); - - eliminateInnerTypeVariables(referenced, javaResult); - equalizeTypeVariables(javaResult, equality); - usedTPHsOfMethods.put(method, usedTphs); - addMissingObjectBounds(javaResult, genericsOfClass); - } - { - var referenced = new HashSet(); - // JavaTX Generics - eliminateTransitives(txResult); - eliminateInfima(txResult, txEquality); - - for (var param : method.getParameterList().getFormalparalist()) { - referenced.addAll(findTypeVariables(param.getType(), txEquality)); - } - referenced.addAll(findTypeVariables(method.getReturnType(), txEquality)); - referenced.addAll(txTypeVariablesOfClass); - - eliminateInnerTypeVariables(referenced, txResult); - addMissingObjectBounds(txResult, txGenericsOfClass); + for (var pair : classGenerics) { + typeVariablesOfClass.add((TypePlaceholder) pair.getLeft()); } - System.out.println(method.name + ": " + txResult + " & " + javaResult); - return generics; + methodFindTypeVariables(method, javaTypeVariables); + methodFindConstraints(owner, method, javaTypeVariables, typeVariablesOfClass, result); + eliminateTransitives(result); + + var referenced = new HashSet(); + + generics(owner, method, result, referenced); + + var usedTphs = new HashSet(); + // For eliminating inner type variables we need to figure out which ones are actually used + for (var param : method.getParameterList().getFormalparalist()) { + usedTphs.addAll(findTypeVariables(param.getType())); + } + usedTphs.addAll(findTypeVariables(method.getReturnType())); + referenced.addAll(usedTphs); + referenced.addAll(typeVariablesOfClass); + + usedTPHsOfMethods.put(method, usedTphs); + + eliminateInnerTypeVariables(referenced, result); + addMissingObjectBounds(result, classGenerics); + + System.out.println(method.name + ": " + result); + return result; } private void eliminateChain(Set> result, List chain) { @@ -645,54 +549,41 @@ public class ASTToTargetAST { } } - Generics generics(ClassOrInterface classOrInterface) { + abstract void generics(ClassOrInterface classOrInterface, Set> result); + + Set> generics(ClassOrInterface classOrInterface) { if (computedGenericsOfClasses.containsKey(classOrInterface)) return computedGenericsOfClasses.get(classOrInterface); - Set> txResult = new HashSet<>(); Set> javaResult = new HashSet<>(); - var generics = new Generics(javaResult, txResult); - computedGenericsOfClasses.put(classOrInterface, generics); + computedGenericsOfClasses.put(classOrInterface, javaResult); for (var field : classOrInterface.getFieldDecl()) { findAllBounds(field.getType(), javaResult, equality); - findAllBounds(field.getType(), txResult, txEquality); } eliminateTransitives(javaResult); - eliminateTransitives(txResult); - System.out.println(javaResult); - var referenced = new HashSet(); - eliminateCycles(javaResult, equality, referenced); - eliminateInfima(javaResult, equality); - var txReferenced = new HashSet(); - eliminateInfima(txResult, txEquality); - - eliminateInnerTypeVariablesOfClass(classOrInterface, javaResult, equality, referenced); - equalizeTypeVariables(javaResult, equality); - eliminateInnerTypeVariablesOfClass(classOrInterface, txResult, txEquality, txReferenced); - + generics(classOrInterface, javaResult); addMissingObjectBounds(javaResult, null); - addMissingObjectBounds(txResult, null); - System.out.println("Class " + classOrInterface.getClassName().getClassName() + ": " + txResult + ", " + javaResult); - return generics; + System.out.println("Class " + classOrInterface.getClassName().getClassName() + ": " + javaResult); + return javaResult; } - void addMissingObjectBounds(Set> result, Set> filter) { + void addMissingObjectBounds(Set> result, Set> classGenerics) { outer: for (var p1 : new HashSet<>(result)) { if (p1 instanceof PairTPHsmallerTPH ptph) { for (var p2 : new HashSet<>(result)) { if (ptph.right.equals(p2.getLeft())) continue outer; } - if (filter == null || filter.stream().noneMatch((pair) -> pair.getLeft().equals(ptph.right))) + if (classGenerics == null || classGenerics.stream().noneMatch((pair) -> pair.getLeft().equals(ptph.right))) result.add(new PairTPHequalRefTypeOrWildcardType(ptph.right, OBJECT)); } } } - void equalizeTypeVariables(Set> input, Map equality) { + void equalizeTypeVariables(Set> input) { for (var pair : new HashSet<>(input)) { if (pair instanceof PairTPHsmallerTPH ptph) { var chain = new ArrayList(); @@ -729,7 +620,7 @@ public class ASTToTargetAST { var prev = start; for (var i = 1; i < index; i++) { var cur = chain.get(i); - addToEquality(equality, cur, start); + addToEquality(cur, start); input.remove(new PairTPHsmallerTPH(prev, chain.get(i))); for (var pair2 : new HashSet<>(input)) { // TODO Maybe this would be unnecessary if we were to add the = constraints later on @@ -744,23 +635,23 @@ public class ASTToTargetAST { } } - void findTphs(RefTypeOrTPHOrWildcardOrGeneric type, Set tphs, Map equality) { + void findTphs(RefTypeOrTPHOrWildcardOrGeneric type, Set tphs) { if (type instanceof RefType refType) { - refType.getParaList().forEach(t -> findTphs(t, tphs, equality)); + refType.getParaList().forEach(t -> findTphs(t, tphs)); } else if (type instanceof TypePlaceholder tph) { tph = equality.getOrDefault(tph, tph); var concreteType = concreteTypes.get(tph); if (concreteType != null) { - findTphs(concreteType, tphs, equality); + findTphs(concreteType, tphs); return; } tphs.add(tph); } } - void eliminateInnerTypeVariablesOfClass(ClassOrInterface classOrInterface, Set> input, Map equality, Set referenced) { + void eliminateInnerTypeVariablesOfClass(ClassOrInterface classOrInterface, Set> input, Set referenced) { for (var field : classOrInterface.getFieldDecl()) { - findTphs(field.getType(), referenced, equality); + findTphs(field.getType(), referenced); } for (var method : classOrInterface.getMethods()) { generics(classOrInterface, method); @@ -812,7 +703,7 @@ public class ASTToTargetAST { input.addAll(output); } - void eliminateCycles(Set> input, Map equality, Set referenced) { + void eliminateCycles(Set> input, Set referenced) { var cycles = findCycles(input); for (var cycle : cycles) { var newTph = TypePlaceholder.fresh(new NullToken()); @@ -833,12 +724,12 @@ public class ASTToTargetAST { var right = cycle.get(i + 1); var pair = new PairTPHsmallerTPH(left, right); input.remove(pair); - addToEquality(equality, left, newTph); + addToEquality(left, newTph); } } } - void eliminateInfima(Set> input, Map equality) { + void eliminateInfima(Set> input) { var foundInfima = false; do { foundInfima = false; @@ -866,7 +757,7 @@ public class ASTToTargetAST { addToPairs(input, new PairTPHsmallerTPH(left, newTph)); input.removeAll(infima); for (var infimum : infima) { - addToEquality(equality, infimum.right, newTph); + addToEquality(infimum.right, newTph); new HashSet<>(input).forEach(pair -> { if (pair.getLeft().equals(infimum.right)) { input.remove(pair); @@ -890,23 +781,26 @@ public class ASTToTargetAST { } while (foundInfima); } - RefTypeOrTPHOrWildcardOrGeneric getType(RefTypeOrTPHOrWildcardOrGeneric type, Map equality) { + RefTypeOrTPHOrWildcardOrGeneric getType(RefTypeOrTPHOrWildcardOrGeneric type) { if (type instanceof TypePlaceholder tph) { if (equality.containsKey(tph)) { - return getType(equality.get(tph), equality); + return getType(equality.get(tph)); } return concreteTypes.getOrDefault(tph, tph); } return type; } - TargetType getTargetType(TypePlaceholder tph, Map equality) { - if (equality.containsKey(tph)) { - return getTargetType(equality.get(tph), equality); + TargetType getTargetType(RefTypeOrTPHOrWildcardOrGeneric in) { + if (in instanceof TypePlaceholder tph) { + if (equality.containsKey(tph)) { + return getTargetType(equality.get(tph)); + } + var type = concreteTypes.get(tph); + if (type == null) return new TargetGenericType(tph.getName()); + return convert(type, this); } - var type = concreteTypes.get(tph); - if (type == null) return new TargetGenericType(tph.getName()); - return convert(type); + return convert(in, this); } } @@ -923,9 +817,9 @@ public class ASTToTargetAST { all = new ArrayList<>(); for (var set : resultSets) { - all.add(new Sigma(set)); + all.add(new Generics(new JavaGenerics(set), new TxGenerics(set))); } - this.sigma = all.get(0); + this.generics = all.get(0); } static Set allNodes(Set> input) { @@ -1030,8 +924,8 @@ public class ASTToTargetAST { return false; for (var i = 0; i < pars.size(); i++) { - var type1 = convert(pars.get(i).getType()); - var type2 = convert(arguments.get(i).getType()); + var type1 = convert(pars.get(i).getType(), generics.javaGenerics); + var type2 = convert(arguments.get(i).getType(), generics.javaGenerics); if (type2 instanceof TargetGenericType && type1 instanceof TargetGenericType) return true; if (!type1.equals(type2)) return false; @@ -1040,22 +934,22 @@ public class ASTToTargetAST { return true; } - Set convert(Set> result, Map equality) { + Set convert(Set> result, GenerateGenerics generics) { return result.stream().map(p -> { if (p instanceof PairTPHsmallerTPH pair) { - return new TargetGeneric(pair.left.getName(), convert(pair.right, equality)); + return new TargetGeneric(pair.left.getName(), convert(pair.right, generics)); } else if (p instanceof PairTPHequalRefTypeOrWildcardType pair) { - return new TargetGeneric(pair.left.getName(), convert(pair.right, equality)); + return new TargetGeneric(pair.left.getName(), convert(pair.right, generics)); } else { throw new IllegalArgumentException(); } }).collect(Collectors.toSet()); } - public List convert(GenericTypeVar typeVar, Map equality) { + public List convert(GenericTypeVar typeVar, GenerateGenerics generics) { var ret = new ArrayList(); for (var bound : typeVar.getBounds()) { - ret.add(new TargetGeneric(typeVar.getName(), convert(bound, equality))); + ret.add(new TargetGeneric(typeVar.getName(), generics.getTargetType(bound))); } return ret; } @@ -1064,21 +958,21 @@ public class ASTToTargetAST { currentClass = input; Set javaGenerics = new HashSet<>(); Set txGenerics = new HashSet<>(); + var genericsIter = input.getGenerics().iterator(); if (genericsIter.hasNext()) { // Add empty set of generics to cache so that it doesn't try to calculate it later var userDefinedGenerics = new HashSet(); - sigma.computedGenericsOfClasses.put(input, new Generics(new HashSet<>(), new HashSet<>(), userDefinedGenerics)); + this.userDefinedGenerics.put(input, userDefinedGenerics); while (genericsIter.hasNext()) { var next = genericsIter.next(); userDefinedGenerics.add(next); - javaGenerics.addAll(convert(next, sigma.equality)); } } else { + this.userDefinedGenerics.put(input, new HashSet<>()); // Generate generics only if there are no user defined ones - var generics = sigma.generics(input); - javaGenerics = convert(generics.javaGenerics(), sigma.equality); - txGenerics = convert(generics.txGenerics(), sigma.txEquality); + javaGenerics = convert(generics.javaGenerics.generics(input), generics.javaGenerics); + txGenerics = convert(generics.txGenerics.generics(input), generics.txGenerics); } TargetBlock fieldInitializer = null; @@ -1086,26 +980,26 @@ public class ASTToTargetAST { fieldInitializer = convert(input.getfieldInitializations().get().block); TargetBlock finalFieldInitializer = fieldInitializer; - return new TargetClass(input.getModifiers(), input.getClassName().toString(), convert(input.getSuperClass()), + return new TargetClass(input.getModifiers(), input.getClassName().toString(), convert(input.getSuperClass(), generics.javaGenerics), javaGenerics, txGenerics, - input.getSuperInterfaces().stream().map(this::convert).toList(), + input.getSuperInterfaces().stream().map(clazz -> convert(clazz, generics.javaGenerics)).toList(), input.getConstructors().stream().map(constructor -> this.convert(constructor, finalFieldInitializer)).flatMap(List::stream).toList(), input.getFieldDecl().stream().map(this::convert).toList(), input.getMethods().stream().map(this::convert).flatMap(List::stream).toList() ); } - private List convert(ParameterList input, Map equality) { + private List convert(ParameterList input, GenerateGenerics generics) { return input.getFormalparalist().stream() - .map(param -> new MethodParameter(convert(param.getType(), equality), param.getName())).toList(); + .map(param -> new MethodParameter(convert(param.getType(), generics), param.getName())).toList(); } private boolean hasGeneric(Set generics, GenericRefType type) { return generics.stream().anyMatch(g -> g.name().equals(type.getParsedName())); } - private Set collectMethodGenerics(Set> generics, Map equality, Method input) { - var convertedGenerics = new HashSet<>(convert(generics, equality)); + private Set collectMethodGenerics(GenerateGenerics generateGenerics, Set> generics, Method input) { + var convertedGenerics = new HashSet<>(convert(generics, generateGenerics)); outer: for (GenericTypeVar typeVar : input.getGenerics()) { for (var classGeneric : currentClass.getGenerics()) { @@ -1113,7 +1007,7 @@ public class ASTToTargetAST { continue outer; } } - convertedGenerics.addAll(convert(typeVar, equality)); + convertedGenerics.addAll(convert(typeVar, generateGenerics)); } /*var returnType = sigma.getType(input.getReturnType(), equality); if ((returnType instanceof GenericRefType refType) && !hasGeneric(convertedGenerics, refType)) { @@ -1130,20 +1024,21 @@ public class ASTToTargetAST { } private List convert(Constructor input, TargetBlock fieldInitializer) { - sigma = all.get(0); + generics = all.get(0); List result = new ArrayList<>(); Set> parameterSet = new HashSet<>(); for (var s : all) { - sigma = s; - var generics = sigma.generics(currentClass, input); - List params = convert(input.getParameterList(), sigma.equality); + generics = s; + var javaGenerics = this.generics.javaGenerics.generics(currentClass, input); + var txGenerics = this.generics.txGenerics.generics(currentClass, input); + List params = convert(input.getParameterList(), this.generics.javaGenerics); if (parameterSet.stream().noneMatch(p -> p.equals(params))) { - List txParams = convert(input.getParameterList(), sigma.txEquality); - var javaGenerics = collectMethodGenerics(generics.javaGenerics(), sigma.equality, input); - var txGenerics = collectMethodGenerics(generics.txGenerics(), sigma.txEquality, input); + List txParams = convert(input.getParameterList(), this.generics.txGenerics); + var javaMethodGenerics = collectMethodGenerics(generics.javaGenerics(), javaGenerics, input); + var txMethodGenerics = collectMethodGenerics(generics.txGenerics(), txGenerics, input); - result.add(new TargetConstructor(input.modifier, javaGenerics, txGenerics, params, txParams, convert(input.block), fieldInitializer)); + result.add(new TargetConstructor(input.modifier, javaMethodGenerics, txMethodGenerics, params, txParams, convert(input.block), fieldInitializer)); parameterSet.add(params); } } @@ -1152,25 +1047,26 @@ public class ASTToTargetAST { } private List convert(Method input) { - sigma = all.get(0); + generics = all.get(0); List result = new ArrayList<>(); Set> parameterSet = new HashSet<>(); for (var s : all) { - sigma = s; - var generics = sigma.generics(currentClass, input); - List params = convert(input.getParameterList(), sigma.equality); + generics = s; + var javaGenerics = this.generics.javaGenerics.generics(currentClass, input); + var txGenerics = this.generics.txGenerics.generics(currentClass, input); + List params = convert(input.getParameterList(), this.generics.javaGenerics); if (parameterSet.stream().noneMatch(p -> p.equals(params))) { - List txParams = convert(input.getParameterList(), sigma.txEquality); + List txParams = convert(input.getParameterList(), this.generics.txGenerics); - var javaGenerics = collectMethodGenerics(generics.javaGenerics(), sigma.equality, input); - var txGenerics = collectMethodGenerics(generics.txGenerics(), sigma.txEquality, input); + var javaMethodGenerics = collectMethodGenerics(generics.javaGenerics(), javaGenerics, input); + var txMethodGenerics = collectMethodGenerics(generics.txGenerics(), txGenerics, input); result.add(new TargetMethod( input.modifier, input.name, convert(input.block), - new TargetMethod.Signature(javaGenerics, params, convert(input.getReturnType(), sigma.equality)), - new TargetMethod.Signature(txGenerics, txParams, convert(input.getReturnType(), sigma.txEquality)) + new TargetMethod.Signature(javaMethodGenerics, params, convert(input.getReturnType(), this.generics.javaGenerics)), + new TargetMethod.Signature(txMethodGenerics, txParams, convert(input.getReturnType(), this.generics.txGenerics)) )); parameterSet.add(params); } @@ -1192,7 +1088,7 @@ public class ASTToTargetAST { private TargetField convert(Field input) { return new TargetField( input.modifier, - convert(input.getType()), + convert(input.getType(), generics.javaGenerics), input.getName() ); } @@ -1202,18 +1098,18 @@ public class ASTToTargetAST { public Map auxiliaries = new HashMap<>(); - protected TargetType convert(RefTypeOrTPHOrWildcardOrGeneric input) { - return convert(input, sigma.equality); + protected TargetType convert(RefTypeOrTPHOrWildcardOrGeneric input) { + return convert(input, generics.javaGenerics); } - protected TargetType convert(RefTypeOrTPHOrWildcardOrGeneric input, Map equality) { + protected TargetType convert(RefTypeOrTPHOrWildcardOrGeneric input, GenerateGenerics generics) { return input.acceptTV(new TypeVisitor<>() { @Override public TargetType visit(RefType refType) { var name = refType.getName().toString(); if (name.equals("void")) return null; - var params = refType.getParaList().stream().map(ASTToTargetAST.this::convert).toList(); + var params = refType.getParaList().stream().map(type -> convert(type, generics)).toList(); if (name.matches("Fun\\d+\\$\\$")) { // TODO This seems like a bad idea var className = FunNGenerator.getSpecializedClassName(FunNGenerator.getArguments(params), FunNGenerator.getReturnType(params)); if (!usedFunNSuperTypes.contains(params.size())) { @@ -1235,17 +1131,17 @@ public class ASTToTargetAST { @Override public TargetType visit(SuperWildcardType superWildcardType) { - return new TargetSuperWildcard(convert(superWildcardType.getInnerType())); + return new TargetSuperWildcard(convert(superWildcardType.getInnerType(), generics)); } @Override public TargetType visit(TypePlaceholder typePlaceholder) { - return sigma.getTargetType(typePlaceholder, equality); + return generics.getTargetType(typePlaceholder); } @Override public TargetType visit(ExtendsWildcardType extendsWildcardType) { - return new TargetExtendsWildcard(convert(extendsWildcardType.getInnerType())); + return new TargetExtendsWildcard(convert(extendsWildcardType.getInnerType(), generics)); } @Override diff --git a/src/main/java/de/dhbwstuttgart/target/generate/GenericsResult.java b/src/main/java/de/dhbwstuttgart/target/generate/GenericsResult.java index 5f0008c0..ae16f6c3 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/GenericsResult.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/GenericsResult.java @@ -9,23 +9,23 @@ import de.dhbwstuttgart.typeinference.result.ResultPair; import java.util.*; public class GenericsResult { - final ASTToTargetAST.Sigma sigma; + final ASTToTargetAST.GenerateGenerics generics; - GenericsResult(ASTToTargetAST.Sigma sigma) { - this.sigma = sigma; + GenericsResult(ASTToTargetAST.GenerateGenerics generics) { + this.generics = generics; } public Set> get(ClassOrInterface clazz) { - var generics = this.sigma.computedGenericsOfClasses.get(clazz); + var generics = this.generics.computedGenericsOfClasses.get(clazz); if (generics == null) return Set.of(); - return generics.javaGenerics(); + return generics; } // TODO Compute generics if not present? public Set> get(Method method) { - var generics = this.sigma.computedGenericsOfMethods.get(method); + var generics = this.generics.computedGenericsOfMethods.get(method); if (generics == null) return Set.of(); - return generics.javaGenerics(); + return generics; } public BoundsList getBounds(RefTypeOrTPHOrWildcardOrGeneric type, ClassOrInterface clazz) { @@ -67,13 +67,7 @@ public class GenericsResult { public RefTypeOrTPHOrWildcardOrGeneric resolve(RefTypeOrTPHOrWildcardOrGeneric type) { if (type instanceof TypePlaceholder tph) - return this.sigma.getType(tph, sigma.equality); - return type; - } - - public RefTypeOrTPHOrWildcardOrGeneric resolveTx(RefTypeOrTPHOrWildcardOrGeneric type) { - if (type instanceof TypePlaceholder tph) - return this.sigma.getType(tph, sigma.txEquality); + return this.generics.getType(tph); return type; } } From 8fb4f062ec32919297b15c5d0b0778a5ed4c2069 Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Fri, 28 Apr 2023 16:03:11 +0200 Subject: [PATCH 42/62] Print Class --- .../java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index c5179268..fb39bc7b 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -492,7 +492,7 @@ public class ASTToTargetAST { eliminateInnerTypeVariables(referenced, result); addMissingObjectBounds(result, classGenerics); - System.out.println(method.name + ": " + result); + System.out.println(this.getClass().getSimpleName() + " " + method.name + ": " + result); return result; } @@ -566,7 +566,7 @@ public class ASTToTargetAST { generics(classOrInterface, javaResult); addMissingObjectBounds(javaResult, null); - System.out.println("Class " + classOrInterface.getClassName().getClassName() + ": " + javaResult); + System.out.println(this.getClass().getSimpleName() + " Class " + classOrInterface.getClassName().getClassName() + ": " + javaResult); return javaResult; } From b0cbac529ecf87ee53d8843a0d419db2b792d8e9 Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Fri, 28 Apr 2023 17:15:04 +0200 Subject: [PATCH 43/62] Use family instead of generated generics --- .../target/generate/ASTToTargetAST.java | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index fb39bc7b..3bf42d7e 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -245,7 +245,7 @@ public class ASTToTargetAST { var optMethod = findMethod(owner, methodCall.name, methodCall.getArgumentList()); if (optMethod.isEmpty()) return; var method = optMethod.get(); - var generics = generics(owner, method); + var generics = family(owner, method); // transitive and var all = transitiveClosure(generics); @@ -293,7 +293,6 @@ public class ASTToTargetAST { } } - @Override public void visit(LambdaExpression lambdaExpression) { superType = new Void(new NullToken()); @@ -355,6 +354,8 @@ public class ASTToTargetAST { } }); + System.out.println(method.getName() + " " + result); + var closure = transitiveClosure((Set) simplifiedConstraints); // Type variables with bounds that are also type variables of the class for (var typeVariable : new HashSet<>(typeVariables)) { @@ -454,26 +455,39 @@ public class ASTToTargetAST { abstract void generics(ClassOrInterface owner, Method method, Set> result, HashSet javaTypeVariablesOfClass); - Set> generics(ClassOrInterface owner, Method method) { - if (computedGenericsOfMethods.containsKey(method)) - return computedGenericsOfMethods.get(method); - - Set> result = new HashSet<>(); - computedGenericsOfMethods.put(method, result); - + Set> family(ClassOrInterface owner, Method method) { + var result = new HashSet>(); var classGenerics = generics(owner); - - HashSet javaTypeVariables = new HashSet<>(); HashSet typeVariablesOfClass = new HashSet<>(); for (var pair : classGenerics) { typeVariablesOfClass.add((TypePlaceholder) pair.getLeft()); } + HashSet javaTypeVariables = new HashSet<>(); + methodFindTypeVariables(method, javaTypeVariables); methodFindConstraints(owner, method, javaTypeVariables, typeVariablesOfClass, result); eliminateTransitives(result); + return result; + } + + Set> generics(ClassOrInterface owner, Method method) { + if (computedGenericsOfMethods.containsKey(method)) + return computedGenericsOfMethods.get(method); + + var classGenerics = generics(owner); + + HashSet typeVariablesOfClass = new HashSet<>(); + + for (var pair : classGenerics) { + typeVariablesOfClass.add((TypePlaceholder) pair.getLeft()); + } + + var result = family(owner, method); + computedGenericsOfMethods.put(method, result); + var referenced = new HashSet(); generics(owner, method, result, referenced); From 25c0c9c101428096f3a4ece23edcaf0310985bf6 Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Wed, 3 May 2023 10:51:53 +0200 Subject: [PATCH 44/62] Rewrite --- .../target/generate/ASTToTargetAST.java | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index 3bf42d7e..f909a59c 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -48,13 +48,13 @@ public class ASTToTargetAST { @Override void generics(ClassOrInterface owner, Method method, Set> result, HashSet referenced) { - eliminateInfima(result); + eliminateInfima(result, referenced); } @Override void generics(ClassOrInterface classOrInterface, Set> result) { var referenced = new HashSet(); - eliminateInfima(result); + eliminateInfima(result, referenced); eliminateInnerTypeVariablesOfClass(classOrInterface, result, referenced); } } @@ -67,17 +67,17 @@ public class ASTToTargetAST { @Override void generics(ClassOrInterface owner, Method method, Set> result, HashSet referenced) { eliminateCycles(result, referenced); - eliminateInfima(result); - equalizeTypeVariables(result); + eliminateInfima(result, referenced); + equalizeTypeVariables(result, referenced); } @Override void generics(ClassOrInterface classOrInterface, Set> result) { var referenced = new HashSet(); eliminateCycles(result, referenced); - eliminateInfima(result); + eliminateInfima(result, referenced); eliminateInnerTypeVariablesOfClass(classOrInterface, result, referenced); - equalizeTypeVariables(result); + equalizeTypeVariables(result, referenced); } } @@ -86,6 +86,7 @@ public class ASTToTargetAST { final Map>> computedGenericsOfClasses = new HashMap<>(); final Map> usedTPHsOfMethods = new HashMap<>(); + final Map>> familyOfMethods = new HashMap<>(); final Set simplifiedConstraints = new HashSet<>(); final Map concreteTypes = new HashMap<>(); @@ -159,7 +160,7 @@ public class ASTToTargetAST { input.add(pair); } - void addToEquality(TypePlaceholder from, TypePlaceholder to) { + void addToEquality(TypePlaceholder from, TypePlaceholder to, Set referenced) { for (var entry : new HashSet<>(equality.entrySet())) { if (entry.getValue().equals(from)) { equality.remove(entry.getKey()); @@ -167,6 +168,8 @@ public class ASTToTargetAST { } } equality.put(from, to); + referenced.remove(from); + referenced.add(to); } static Set> transitiveClosure(Set> generics) { @@ -354,8 +357,6 @@ public class ASTToTargetAST { } }); - System.out.println(method.getName() + " " + result); - var closure = transitiveClosure((Set) simplifiedConstraints); // Type variables with bounds that are also type variables of the class for (var typeVariable : new HashSet<>(typeVariables)) { @@ -456,7 +457,12 @@ public class ASTToTargetAST { abstract void generics(ClassOrInterface owner, Method method, Set> result, HashSet javaTypeVariablesOfClass); Set> family(ClassOrInterface owner, Method method) { + if (familyOfMethods.containsKey(method)) + return familyOfMethods.get(method); + var result = new HashSet>(); + familyOfMethods.put(method, result); + var classGenerics = generics(owner); HashSet typeVariablesOfClass = new HashSet<>(); @@ -485,13 +491,11 @@ public class ASTToTargetAST { typeVariablesOfClass.add((TypePlaceholder) pair.getLeft()); } - var result = family(owner, method); + var result = new HashSet<>(family(owner, method)); computedGenericsOfMethods.put(method, result); var referenced = new HashSet(); - generics(owner, method, result, referenced); - var usedTphs = new HashSet(); // For eliminating inner type variables we need to figure out which ones are actually used for (var param : method.getParameterList().getFormalparalist()) { @@ -501,6 +505,7 @@ public class ASTToTargetAST { referenced.addAll(usedTphs); referenced.addAll(typeVariablesOfClass); + generics(owner, method, result, referenced); usedTPHsOfMethods.put(method, usedTphs); eliminateInnerTypeVariables(referenced, result); @@ -597,9 +602,9 @@ public class ASTToTargetAST { } } - void equalizeTypeVariables(Set> input) { + void equalizeTypeVariables(Set> input, Set referenced) { for (var pair : new HashSet<>(input)) { - if (pair instanceof PairTPHsmallerTPH ptph) { + if (pair instanceof PairTPHsmallerTPH ptph && referenced.contains(ptph.left)) { var chain = new ArrayList(); chain.add(ptph.left); chain.add(ptph.right); @@ -623,7 +628,7 @@ public class ASTToTargetAST { if (variance == 1 && tph.getVariance() == -1) { variance = -1; } - if (variance == -1 && tph.getVariance() == 1) { + if (variance == -1 && tph.getVariance() == 1 && referenced.contains(tph)) { break; } index++; @@ -634,8 +639,9 @@ public class ASTToTargetAST { var prev = start; for (var i = 1; i < index; i++) { var cur = chain.get(i); - addToEquality(cur, start); - input.remove(new PairTPHsmallerTPH(prev, chain.get(i))); + if (!referenced.contains(cur)) continue; + addToEquality(cur, start, referenced); + input.remove(new PairTPHsmallerTPH(prev, cur)); for (var pair2 : new HashSet<>(input)) { // TODO Maybe this would be unnecessary if we were to add the = constraints later on if (pair2 instanceof PairTPHequalRefTypeOrWildcardType && pair2.getLeft().equals(cur)) { @@ -738,12 +744,12 @@ public class ASTToTargetAST { var right = cycle.get(i + 1); var pair = new PairTPHsmallerTPH(left, right); input.remove(pair); - addToEquality(left, newTph); + addToEquality(left, newTph, referenced); } } } - void eliminateInfima(Set> input) { + void eliminateInfima(Set> input, Set referenced) { var foundInfima = false; do { foundInfima = false; @@ -771,7 +777,7 @@ public class ASTToTargetAST { addToPairs(input, new PairTPHsmallerTPH(left, newTph)); input.removeAll(infima); for (var infimum : infima) { - addToEquality(infimum.right, newTph); + addToEquality(infimum.right, newTph, referenced); new HashSet<>(input).forEach(pair -> { if (pair.getLeft().equals(infimum.right)) { input.remove(pair); From f8f76e9f7d1ce288f49c29a4f155b045c083c688 Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Mon, 8 May 2023 13:32:39 +0200 Subject: [PATCH 45/62] WIP --- .../insertGenericsJav/TestContraVariant.jav | 10 ++++---- .../syntaxtree/factory/ASTFactory.java | 8 +++--- .../target/generate/ASTToTargetAST.java | 25 +++++++++++-------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/resources/insertGenericsJav/TestContraVariant.jav b/resources/insertGenericsJav/TestContraVariant.jav index 99c83de4..5876a446 100644 --- a/resources/insertGenericsJav/TestContraVariant.jav +++ b/resources/insertGenericsJav/TestContraVariant.jav @@ -1,12 +1,12 @@ public class TestContraVariant { + main(x) { + return x; + } m(x) { + var z = main(x); var y; x = y; - return y; - } - - main(x) { - return m(x); + return new Pair(z, y); } } \ No newline at end of file diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java index 5b631250..bdef497f 100644 --- a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java +++ b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java @@ -51,6 +51,7 @@ public class ASTFactory { var classReader = new ClassReader(bytes); var classVisitor = new ClassVisitor(Opcodes.ASM7) { String classSignature; + @Override public void visitAttribute(Attribute attribute) { if (attribute.type.equals("JavaTXSignature")) { @@ -181,7 +182,7 @@ public class ASTFactory { }else{ jreRetType = jreMethod.getReturnType(); } - returnType = createType(jreRetType); + returnType = createType(jreRetType); Parameter[] jreParams = jreMethod.getParameters(); Type[] jreGenericParams = jreMethod.getGenericParameterTypes(); List params = new ArrayList<>(); @@ -284,7 +285,7 @@ public class ASTFactory { public SignatureVisitor visitTypeArgument(char wildcard) { this.wildcard = wildcard; return this; - } + } boolean equals(RefTypeOrTPHOrWildcardOrGeneric a, RefTypeOrTPHOrWildcardOrGeneric b) { if (b instanceof SuperWildcardType wc) @@ -395,11 +396,12 @@ public class ASTFactory { public static ClassOrInterface createObjectClass() { return createClass(Object.class); } + public static RefType createObjectType() { return new RefType(createClass(Object.class).getClassName(), new NullToken()); } - /* + /* public Constructor createEmptyConstructor(Class parent){ Block block = new Block(); block.setType(new de.dhbwstuttgart.syntaxtree.type.Void(block, 0)); diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index f909a59c..2f14c859 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -145,7 +145,7 @@ public class ASTToTargetAST { return containsLeft && containsRight; } - static void addToPairs(Set> input, ResultPair pair) { + void addToPairs(Set> input, ResultPair pair) { if (pair instanceof PairTPHsmallerTPH) { input.removeIf(pair2 -> { if (pair2 instanceof PairTPHequalRefTypeOrWildcardType) { @@ -248,7 +248,8 @@ public class ASTToTargetAST { var optMethod = findMethod(owner, methodCall.name, methodCall.getArgumentList()); if (optMethod.isEmpty()) return; var method = optMethod.get(); - var generics = family(owner, method); + var generics = generics(owner, method); + System.out.println("Generics: " + generics); // transitive and var all = transitiveClosure(generics); @@ -265,17 +266,21 @@ public class ASTToTargetAST { outer: for (var R1 : typeVariables) { if (typeVariablesOfClass.contains(R1)) continue; - for (var generic : all) { - if (!(generic.getRight() instanceof TypePlaceholder type)) - continue; + for (var generic : all) if (generic instanceof PairTPHsmallerTPH ptph) { + var l = equality.getOrDefault(ptph.left, ptph.left); + var r = equality.getOrDefault(ptph.right, ptph.right); for (var pair : simplifiedConstraints) { - if (!(pair.left.equals(R1) && pair.right.equals(generic.getLeft()))) + var l2 = equality.getOrDefault(pair.left, pair.left); + var r2 = equality.getOrDefault(pair.right, pair.right); + if (!(l2.equals(R1) && r2.equals(l))) continue; for (var R2 : typeVariables) { for (var pair2 : simplifiedConstraints) { - if (!(pair2.right.equals(R2) && pair2.left.equals(type))) + var l3 = equality.getOrDefault(pair2.left, pair2.left); + var r3 = equality.getOrDefault(pair2.right, pair2.right); + if (!(r3.equals(R2) && l3.equals(r))) continue; if (R1.equals(R2)) continue; if (!T1s.contains(R1) || !R2.equals(T2)) continue; @@ -480,8 +485,8 @@ public class ASTToTargetAST { } Set> generics(ClassOrInterface owner, Method method) { - if (computedGenericsOfMethods.containsKey(method)) - return computedGenericsOfMethods.get(method); + //if (computedGenericsOfMethods.containsKey(method)) + // return computedGenericsOfMethods.get(method); var classGenerics = generics(owner); @@ -597,7 +602,7 @@ public class ASTToTargetAST { continue outer; } if (classGenerics == null || classGenerics.stream().noneMatch((pair) -> pair.getLeft().equals(ptph.right))) - result.add(new PairTPHequalRefTypeOrWildcardType(ptph.right, OBJECT)); + addToPairs(result, new PairTPHequalRefTypeOrWildcardType(ptph.right, OBJECT)); } } } From 8992260264a9186f9d573642fbc319adde011bc4 Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Tue, 9 May 2023 12:18:12 +0200 Subject: [PATCH 46/62] TestContraVariant --- .../insertGenericsJav/TestContraVariant.jav | 3 ++- .../target/generate/ASTToTargetAST.java | 27 ++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/resources/insertGenericsJav/TestContraVariant.jav b/resources/insertGenericsJav/TestContraVariant.jav index 5876a446..80ea0e65 100644 --- a/resources/insertGenericsJav/TestContraVariant.jav +++ b/resources/insertGenericsJav/TestContraVariant.jav @@ -1,6 +1,7 @@ public class TestContraVariant { main(x) { - return x; + var pair = m(x); + return pair.a; } m(x) { diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index 2f14c859..f2c963a4 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -206,8 +206,10 @@ public class ASTToTargetAST { if (classHasGeneric(userDefinedGenericsOfClass, typeVariablesOfClass, typeVariable)) continue; for (var pair : simplifiedConstraints) { - if (pair.left.equals(typeVariable) && typeVariables.contains(pair.right)) { - addToPairs(result, new PairTPHsmallerTPH(pair.left, equality.getOrDefault(pair.right, pair.right))); + var left = equality.getOrDefault(pair.left, pair.left); + var right = equality.getOrDefault(pair.right, pair.right); + if (left.equals(typeVariable) && typeVariables.contains(right)) { + addToPairs(result, new PairTPHsmallerTPH(left, right)); } } } @@ -249,7 +251,6 @@ public class ASTToTargetAST { if (optMethod.isEmpty()) return; var method = optMethod.get(); var generics = generics(owner, method); - System.out.println("Generics: " + generics); // transitive and var all = transitiveClosure(generics); @@ -365,13 +366,16 @@ public class ASTToTargetAST { var closure = transitiveClosure((Set) simplifiedConstraints); // Type variables with bounds that are also type variables of the class for (var typeVariable : new HashSet<>(typeVariables)) { + typeVariable = equality.getOrDefault(typeVariable, typeVariable); if (typeVariablesOfClass.contains(typeVariable)) continue; var pairs = new HashSet(); for (var pair : closure) { if (!(pair instanceof PairTPHsmallerTPH ptph)) continue; - if (ptph.left.equals(typeVariable) && typeVariablesOfClass.contains(ptph.right)) { - pairs.add(new PairTPHsmallerTPH(ptph.left, equality.getOrDefault(ptph.right, ptph.right))); + var left = equality.getOrDefault(ptph.left, ptph.left); + var right = equality.getOrDefault(ptph.right, ptph.right); + if (left.equals(typeVariable) && typeVariablesOfClass.contains(right)) { + pairs.add(new PairTPHsmallerTPH(left, right)); } } @@ -402,12 +406,16 @@ public class ASTToTargetAST { } if (minimalPair != null) - addToPairs(result, minimalPair); + addToPairs(result, new PairTPHsmallerTPH( + equality.getOrDefault(minimalPair.left, minimalPair.left), + equality.getOrDefault(minimalPair.right, minimalPair.right) + )); } // All unbounded type variables (bounds not in method) outer: for (var typeVariable : typeVariables) { + typeVariable = equality.getOrDefault(typeVariable, typeVariable); if (classHasGeneric(userDefinedGenericsOfClass, typeVariablesOfClass, typeVariable)) continue; for (var pair : result) { @@ -420,12 +428,13 @@ public class ASTToTargetAST { // All unbounded bounds outer: for (var pair : simplifiedConstraints) { + var r = equality.getOrDefault(pair.right, pair.right); for (var pair2 : simplifiedConstraints) { - if (pair.right.equals(pair2.left)) + if (r.equals(equality.getOrDefault(pair2.left, pair2.left))) continue outer; } - if (!classHasGeneric(userDefinedGenericsOfClass, typeVariablesOfClass, pair.right) && typeVariables.contains(pair.right)) { - addToPairs(result, new PairTPHequalRefTypeOrWildcardType(pair.right, OBJECT)); + if (!classHasGeneric(userDefinedGenericsOfClass, typeVariablesOfClass, r) && typeVariables.contains(r)) { + addToPairs(result, new PairTPHequalRefTypeOrWildcardType(r, OBJECT)); } } } From 5e1631439a89b4e982a9dd431986075bd2bcd2bb Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Tue, 9 May 2023 14:28:32 +0200 Subject: [PATCH 47/62] modified: resources/insertGenericsJav/TestContraVariant.jav --- .../insertGenericsJav/TestContraVariant.jav | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/resources/insertGenericsJav/TestContraVariant.jav b/resources/insertGenericsJav/TestContraVariant.jav index 80ea0e65..dfea392d 100644 --- a/resources/insertGenericsJav/TestContraVariant.jav +++ b/resources/insertGenericsJav/TestContraVariant.jav @@ -1,13 +1,15 @@ public class TestContraVariant { - main(x) { - var pair = m(x); - return pair.a; + main(x, y) { + var y2 = m(x, y).snd(); + var z = null; + y2 = z; + return new Pair(x,z); } - m(x) { - var z = main(x); - var y; - x = y; + m(x, y) { + var x2 = main(x, y).fst(); + var z = null; + x2 = z; return new Pair(z, y); } } \ No newline at end of file From 0b33948945e61df70618f2bc05d29efabc8d7726 Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Tue, 9 May 2023 14:36:07 +0200 Subject: [PATCH 48/62] modified: resources/insertGenericsJav/TestContraVariant.jav --- resources/insertGenericsJav/TestContraVariant.jav | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/resources/insertGenericsJav/TestContraVariant.jav b/resources/insertGenericsJav/TestContraVariant.jav index dfea392d..2b0e245f 100644 --- a/resources/insertGenericsJav/TestContraVariant.jav +++ b/resources/insertGenericsJav/TestContraVariant.jav @@ -1,15 +1,17 @@ public class TestContraVariant { main(x, y) { - var y2 = m(x, y).snd(); - var z = null; - y2 = z; + var y2 = m(x, y); + var y3 = y2.snd(); + var z; + y3 = z; return new Pair(x,z); } m(x, y) { - var x2 = main(x, y).fst(); - var z = null; - x2 = z; + var x2 = main(x, y); + var x3 = x2.fst(); + var z; + x3 = z; return new Pair(z, y); } } \ No newline at end of file From 9d9a1f6614de2213a7e946e1dea13e6d295df3fa Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Wed, 10 May 2023 13:27:13 +0200 Subject: [PATCH 49/62] modified: src/test/java/AllgemeinTest.java Twice in Allgemeintest reingenommen --- src/test/java/AllgemeinTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/AllgemeinTest.java b/src/test/java/AllgemeinTest.java index 727c6de6..41523563 100644 --- a/src/test/java/AllgemeinTest.java +++ b/src/test/java/AllgemeinTest.java @@ -40,7 +40,7 @@ public class AllgemeinTest { //String className = "FCTest3"; //String className = "Var"; //String className = "Put"; - //String className = "Twice"; + String className = "Twice"; //String className = "TestSubTypless"; //String className = "addList"; //String className = "M"; @@ -52,7 +52,7 @@ public class AllgemeinTest { //String className = "VectorNotObject"; //String className = "WildcardCaptureConversionTest"; //String className = "CaptureConversion"; - String className = "Pair"; + //String className = "Pair"; //String className = "UseWildcardPair"; //String className = "Assign"; //PL 2019-10-24: genutzt fuer unterschiedliche Tests From a7ccd1528613dbd44a8b2acdd2fc8c8b8350c22a Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Mon, 15 May 2023 16:33:10 +0200 Subject: [PATCH 50/62] Work on the plugin --- .../bytecode/constraint/EqualConstraint.java | 9 -- .../constraint/ExtendsConstraint.java | 9 -- .../bytecode/constraint/TPHConstraint.java | 90 ------------------- .../ConstraintsWithSameLeftSide.java | 35 -------- .../GenericGeneratorResultsForAllMethods.java | 41 --------- .../GenericGenratorResultForSourceFile.java | 52 ----------- .../GenericsGeneratorResult.java | 59 ------------ .../GenericsGeneratorResultForClass.java | 84 ----------------- .../MethodAndConstraints.java | 47 ---------- .../NameReplacementResult.java | 49 ---------- .../de/dhbwstuttgart/core/JavaTXCompiler.java | 40 ++++----- .../target/generate/GenericsResult.java | 17 ++-- .../target/generate/GenericsResultSet.java | 33 +++++++ .../typedeployment/TypeInsertFactory.java | 87 ++++++------------ .../typedeployment/TypeInsertPlacer.java | 35 ++++---- src/test/java/packages/OLOneFileTest.java | 1 - src/test/java/packages/OLTest.java | 2 - src/test/java/targetast/TestGenerics.java | 5 +- .../typeinference/JavaTXCompilerTest.java | 7 +- src/test/java/typeinference/Meth_GenTest.java | 7 +- src/test/java/typeinference/UnifyTest.java | 7 +- 21 files changed, 115 insertions(+), 601 deletions(-) delete mode 100644 src/main/java/de/dhbwstuttgart/bytecode/constraint/EqualConstraint.java delete mode 100644 src/main/java/de/dhbwstuttgart/bytecode/constraint/ExtendsConstraint.java delete mode 100644 src/main/java/de/dhbwstuttgart/bytecode/constraint/TPHConstraint.java delete mode 100644 src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/ConstraintsWithSameLeftSide.java delete mode 100644 src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericGeneratorResultsForAllMethods.java delete mode 100644 src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericGenratorResultForSourceFile.java delete mode 100644 src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericsGeneratorResult.java delete mode 100644 src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericsGeneratorResultForClass.java delete mode 100644 src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/MethodAndConstraints.java delete mode 100644 src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/NameReplacementResult.java create mode 100644 src/main/java/de/dhbwstuttgart/target/generate/GenericsResultSet.java diff --git a/src/main/java/de/dhbwstuttgart/bytecode/constraint/EqualConstraint.java b/src/main/java/de/dhbwstuttgart/bytecode/constraint/EqualConstraint.java deleted file mode 100644 index 69fb0b02..00000000 --- a/src/main/java/de/dhbwstuttgart/bytecode/constraint/EqualConstraint.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.dhbwstuttgart.bytecode.constraint; - -public class EqualConstraint extends TPHConstraint { - - public EqualConstraint(String left, String right) { - super(left, right, Relation.EQUAL); - } - -} diff --git a/src/main/java/de/dhbwstuttgart/bytecode/constraint/ExtendsConstraint.java b/src/main/java/de/dhbwstuttgart/bytecode/constraint/ExtendsConstraint.java deleted file mode 100644 index 77007a3b..00000000 --- a/src/main/java/de/dhbwstuttgart/bytecode/constraint/ExtendsConstraint.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.dhbwstuttgart.bytecode.constraint; - -public class ExtendsConstraint extends TPHConstraint { - - public ExtendsConstraint(String left, String right) { - super(left, right, Relation.EXTENDS); - } - -} diff --git a/src/main/java/de/dhbwstuttgart/bytecode/constraint/TPHConstraint.java b/src/main/java/de/dhbwstuttgart/bytecode/constraint/TPHConstraint.java deleted file mode 100644 index 0533a028..00000000 --- a/src/main/java/de/dhbwstuttgart/bytecode/constraint/TPHConstraint.java +++ /dev/null @@ -1,90 +0,0 @@ -package de.dhbwstuttgart.bytecode.constraint; - -import de.dhbwstuttgart.typeinference.constraints.Pair; -import de.dhbwstuttgart.typeinference.unify.model.PairOperator; -import de.dhbwstuttgart.bytecode.constraint.TPHConstraint.Relation; -import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; - -public class TPHConstraint { - protected String left; - protected String right; - protected Relation rel; - protected int variance; //noch nicht benutzt - public enum Relation{ - EXTENDS, EQUAL - } - - public TPHConstraint(Pair p) { - this.left = ((TypePlaceholder)p.TA1).getName(); - this.right = ((TypePlaceholder)p.TA2).getName(); - this.rel = p.GetOperator().equals(PairOperator.SMALLERDOT) ? Relation.EXTENDS : Relation.EQUAL; - } - - public TPHConstraint(String left, String right, Relation rel) { - this.left = left; - this.right = right; - this.rel = rel; - } - - public String getLeft() { - return left; - } - - - public String getRight() { - return right; - } - - - public Relation getRel() { - return rel; - } - - public void setLeft(String left) { - this.left = left; - } - - public void setRight(String right) { - this.right = right; - } - - public void setRel(Relation rel) { - this.rel = rel; - } - - public boolean containTPH(String tph) { - return left.equals(tph)||right.equals(tph); - } - - public boolean equalConstraint(TPHConstraint constraint) { - return rel == constraint.getRel() && left.equals(constraint.getLeft()) && right.equals(constraint.getRight()); - } - - @Override - public int hashCode() { - return (left+right).hashCode(); - } - - @Override - public boolean equals (Object o) { - if (o instanceof TPHConstraint) { - TPHConstraint o_tphcons = (TPHConstraint)o; - return (this.left.equals(o_tphcons.getLeft()) - && this.right.equals(o_tphcons.getRight()) - && this.rel.equals(o_tphcons.rel)); - } - else { - return false; - } - } - - - @Override - public String toString() { - if(rel == Relation.EXTENDS) { - return left + " < " + right; - }else { - return left + " = " + right; - } - } -} diff --git a/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/ConstraintsWithSameLeftSide.java b/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/ConstraintsWithSameLeftSide.java deleted file mode 100644 index 1b184048..00000000 --- a/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/ConstraintsWithSameLeftSide.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.dhbwstuttgart.bytecode.genericsGeneratorTypes; - -import java.util.List; - -import de.dhbwstuttgart.bytecode.constraint.TPHConstraint; - -public class ConstraintsWithSameLeftSide { - private List constraints; - - /** - * @param constraints - */ - public ConstraintsWithSameLeftSide(List constraints) { - this.constraints = constraints; - } - - /** - * @return the constraints - */ - public List getConstraints() { - return constraints; - } - - /** - * @param constraints the constraints to set - */ - public void setConstraints(List constraints) { - this.constraints = constraints; - } - - @Override - public String toString() { - return "[" + constraints.toString() + "]"; - } -} diff --git a/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericGeneratorResultsForAllMethods.java b/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericGeneratorResultsForAllMethods.java deleted file mode 100644 index 091587ff..00000000 --- a/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericGeneratorResultsForAllMethods.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * - */ -package de.dhbwstuttgart.bytecode.genericsGeneratorTypes; - -import java.util.Collections; -import java.util.List; - -/** - * @author fayez - * - */ -public class GenericGeneratorResultsForAllMethods { - private final List methodsAndConstraints; - - public GenericGeneratorResultsForAllMethods() { - this(Collections.emptyList()); - } - /** - * @param methodsAndConstraints - */ - public GenericGeneratorResultsForAllMethods(List methodsAndConstraints) { - this.methodsAndConstraints = methodsAndConstraints; - } - - /** - * @return the methodsAndConstraints - */ - public List getMethodsAndConstraints() { - return methodsAndConstraints; - } - - @Override - public String toString() { - String ret = ""; - ret = ret + methodsAndConstraints.stream().reduce("", (x,y) -> x + y.toString(), (x,y) -> x + y); - //ret = ret + "\n"; - return ret; - } - -} diff --git a/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericGenratorResultForSourceFile.java b/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericGenratorResultForSourceFile.java deleted file mode 100644 index 3bcf1939..00000000 --- a/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericGenratorResultForSourceFile.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * - */ -package de.dhbwstuttgart.bytecode.genericsGeneratorTypes; - -import de.dhbwstuttgart.parser.scope.JavaClassName; - -import java.util.ArrayList; -import java.util.List; -import java.util.NoSuchElementException; - -/** - * The simplify results of a source file (package) - * - * @author fayez - * - */ -public class GenericGenratorResultForSourceFile { - private String pkgName; - private final List genericGeneratorResultForAllClasses = new ArrayList<>(); - - /** - * @param pkgName - */ - public GenericGenratorResultForSourceFile(String pkgName) { - this.pkgName = pkgName; - } - - public List getGenericGeneratorResultForAllClasses() { - return genericGeneratorResultForAllClasses; - } - - /** - * Appends the simplify results of a class to simplifyResForSF - * - * @param sResClass simplify results of a class to added - */ - public void addGenericGeneratorResultClass(GenericsGeneratorResultForClass sResClass) { - genericGeneratorResultForAllClasses.add(sResClass); - } - - public GenericsGeneratorResultForClass getSimplifyResultsByName(JavaClassName name) { - - if (this.pkgName.equals(name.getPackageName())) { - return genericGeneratorResultForAllClasses.stream() - .filter(sr -> sr.getClassName().equals(name)) - .findAny() - .orElse(new GenericsGeneratorResultForClass(name)); - } - return new GenericsGeneratorResultForClass(name); - } -} diff --git a/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericsGeneratorResult.java b/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericsGeneratorResult.java deleted file mode 100644 index fe23f239..00000000 --- a/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericsGeneratorResult.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * - */ -package de.dhbwstuttgart.bytecode.genericsGeneratorTypes; - -import java.util.Set; - -import de.dhbwstuttgart.bytecode.constraint.TPHConstraint; - -/** - * @author fayez - * - */ -public class GenericsGeneratorResult { - private TPHConstraint constraint; - /** - * contains the names of all type placeholders which are equals to the left side of - * the constraint {@link #constraint}. - */ - private Set equalsTPHs; - /** - * @param constraint - * @param equalsTPHs - */ - public GenericsGeneratorResult(TPHConstraint constraint, Set equalsTPHs) { - this.constraint = constraint; - this.equalsTPHs = equalsTPHs; - } - - /** - * @return the constraint - */ - public TPHConstraint getConstraint() { - return constraint; - } - /** - * @param constraint the constraint to set - */ - public void setConstraint(TPHConstraint constraint) { - this.constraint = constraint; - } - /** - * @return the equalsTPHs - */ - public Set getEqualsTPHs() { - return equalsTPHs; - } - /** - * @param equalsTPHs the equalsTPHs to set - */ - public void setEqualsTPHs(Set equalsTPHs) { - this.equalsTPHs = equalsTPHs; - } - - @Override - public String toString() { - return constraint.toString() + " EqualsTPS: " + equalsTPHs.toString(); - } -} diff --git a/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericsGeneratorResultForClass.java b/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericsGeneratorResultForClass.java deleted file mode 100644 index 0a3626d2..00000000 --- a/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/GenericsGeneratorResultForClass.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * - */ -package de.dhbwstuttgart.bytecode.genericsGeneratorTypes; - -import de.dhbwstuttgart.parser.scope.JavaClassName; - -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -import com.google.common.collect.Lists; - -/** - * @author fayez - * - */ -public class GenericsGeneratorResultForClass { - private final JavaClassName className; - private final List classConstraints; - private final GenericGeneratorResultsForAllMethods methodsAndTheirConstraints; - - public GenericsGeneratorResultForClass(JavaClassName className) { - this(className, Collections.emptyList(), new GenericGeneratorResultsForAllMethods()); - } - /** - * @param className - * @param classConstraints - * @param methodsAndTheirConstraints - */ - public GenericsGeneratorResultForClass(JavaClassName className, List classConstraints, - GenericGeneratorResultsForAllMethods methodsAndTheirConstraints) { - this.className = className; - this.classConstraints = classConstraints; - this.methodsAndTheirConstraints = methodsAndTheirConstraints; - } - - /** - * @return the className - */ - public JavaClassName getClassName() { - return className; - } - - /** - * @return the classConstraints - */ - public List getClassConstraints() { - return classConstraints; - } - - /** - * @return the methodsAndTheirConstraints - */ - public GenericGeneratorResultsForAllMethods getMethodsAndTheirConstraints() { - return methodsAndTheirConstraints; - } - - public boolean contains(String id) { - return methodsAndTheirConstraints.getMethodsAndConstraints().stream().map(mc -> mc.getMethodID()) - .anyMatch(i -> i.equals(id)); - } - - public List getMethodConstraintsByID(String id) { - Optional methodConstraints = methodsAndTheirConstraints.getMethodsAndConstraints() - .stream() - .filter(mc -> mc.getMethodID().equals(id)) - .findFirst(); - - if (methodConstraints.isPresent()) { - return methodConstraints.get().getConstraints(); - } else { - return Collections.emptyList(); - } - } - - @Override - public String toString() { - String ret = "Classconstraints: "; - ret = ret + classConstraints.stream().reduce("", (x,y) -> x + y.toString(), (x,y) -> x + y); - ret = ret + "\n" + methodsAndTheirConstraints.toString(); - return ret; - } -} diff --git a/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/MethodAndConstraints.java b/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/MethodAndConstraints.java deleted file mode 100644 index b9437c3a..00000000 --- a/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/MethodAndConstraints.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * - */ -package de.dhbwstuttgart.bytecode.genericsGeneratorTypes; - -import java.util.List; - -/** - * @author fayez - * - */ -public class MethodAndConstraints { - private final String methodID; - private final List constraints; - /** - * @param methodID - * @param constraints - */ - public MethodAndConstraints(String methodID, List constraints) { - this.methodID = methodID; - this.constraints = constraints; - } - /** - * @return the methodID - */ - public String getMethodID() { - // FIXME - return null; - } - /** - * @return the constraints - */ - public List getConstraints() { - return constraints; - } - - - @Override - public String toString() { - String ret = methodID + ": "; - ret = ret + constraints.stream().reduce("", - (x,y) -> x + y.toString(), - (x,y) -> x + y); - ret = ret + "\n"; - return ret; - } -} diff --git a/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/NameReplacementResult.java b/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/NameReplacementResult.java deleted file mode 100644 index 4a91655e..00000000 --- a/src/main/java/de/dhbwstuttgart/bytecode/genericsGeneratorTypes/NameReplacementResult.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * - */ -package de.dhbwstuttgart.bytecode.genericsGeneratorTypes; - -import java.util.List; - -/** - * @author fayez - * - */ -public class NameReplacementResult { - private String name; - private List oldNames; - /** - * @param name - * @param oldNames - */ - public NameReplacementResult(String name, List oldNames) { - this.name = name; - this.oldNames = oldNames; - } - /** - * @return the name - */ - public String getName() { - return name; - } - /** - * @param name the name to set - */ - public void setName(String name) { - this.name = name; - } - /** - * @return the oldNames - */ - public List getOldNames() { - return oldNames; - } - /** - * @param oldNames the oldNames to set - */ - public void setOldNames(List oldNames) { - this.oldNames = oldNames; - }; - - -} diff --git a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java index a0eab274..33cb5b29 100644 --- a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -3,7 +3,6 @@ package de.dhbwstuttgart.core; import com.google.common.collect.Lists; import de.dhbwstuttgart.bytecode.Codegen; -import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericGenratorResultForSourceFile; import de.dhbwstuttgart.environment.CompilationEnvironment; import de.dhbwstuttgart.environment.DirectoryClassLoader; import de.dhbwstuttgart.exceptions.DebugException; @@ -857,10 +856,9 @@ public class JavaTXCompiler { generateBytecode(path, typeinferenceResult); } - private Map> generatedGenerics = new HashMap<>(); + private Map> generatedGenerics = new HashMap<>(); - // TODO This is a temporary solution, we should integrate with the old API for getting Generics - public Map> getGeneratedGenerics() { + public Map> getGeneratedGenerics() { return generatedGenerics; } @@ -880,22 +878,27 @@ public class JavaTXCompiler { path = new File(outputPath ,sf.getPkgName().replace(".","/")); //add package path to root path } - var converter = new ASTToTargetAST(typeinferenceResult, sf, classLoader); - var generatedClasses = new HashMap(); - for (var clazz : sf.getClasses()) { - var codegen = new Codegen(converter.convert(clazz)); - var code = codegen.generate(); - generatedClasses.put(clazz.getClassName(), code); - converter.auxiliaries.forEach((name, source) -> { - generatedClasses.put(new JavaClassName(name), source); - }); - } - generatedGenerics.put(f, converter.javaGenerics()); + var generatedClasses = generateBytecode(sf, typeinferenceResult); writeClassFile(generatedClasses, path); } } - private void writeClassFile(HashMap classFiles, File path) throws IOException { + public Map generateBytecode(SourceFile sf, List typeInferenceResult) { + var converter = new ASTToTargetAST(typeInferenceResult, sf, classLoader); + var generatedClasses = new HashMap(); + for (var clazz : sf.getClasses()) { + var codegen = new Codegen(converter.convert(clazz)); + var code = codegen.generate(); + generatedClasses.put(clazz.getClassName(), code); + converter.auxiliaries.forEach((name, source) -> { + generatedClasses.put(new JavaClassName(name), source); + }); + } + generatedGenerics.put(sf, converter.javaGenerics()); + return generatedClasses; + } + + private void writeClassFile(Map classFiles, File path) throws IOException { FileOutputStream output; for (JavaClassName name : classFiles.keySet()) { byte[] bytecode = classFiles.get(name); @@ -911,11 +914,6 @@ public class JavaTXCompiler { } } - public List getGeneratedGenericResultsForAllSourceFiles(List results) { - // FIXME - return null; - } - /* PL 2020-03-17 mit TypeExchanger in FCGenerator.java zusammenfuehren */ /** * Tauscht die GTVs in einem Typ gegen die entsprechenden Typen in der übergebenen Map aus. diff --git a/src/main/java/de/dhbwstuttgart/target/generate/GenericsResult.java b/src/main/java/de/dhbwstuttgart/target/generate/GenericsResult.java index ae16f6c3..e06bca66 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/GenericsResult.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/GenericsResult.java @@ -4,28 +4,27 @@ import de.dhbwstuttgart.syntaxtree.ClassOrInterface; import de.dhbwstuttgart.syntaxtree.Method; import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPHOrWildcardOrGeneric; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; +import de.dhbwstuttgart.target.tree.type.TargetType; import de.dhbwstuttgart.typeinference.result.ResultPair; import java.util.*; public class GenericsResult { - final ASTToTargetAST.GenerateGenerics generics; + private final ASTToTargetAST.GenerateGenerics generics; GenericsResult(ASTToTargetAST.GenerateGenerics generics) { this.generics = generics; } - public Set> get(ClassOrInterface clazz) { + public GenericsResultSet get(ClassOrInterface clazz) { var generics = this.generics.computedGenericsOfClasses.get(clazz); - if (generics == null) return Set.of(); - return generics; + return new GenericsResultSet(generics, this.generics.equality); } // TODO Compute generics if not present? - public Set> get(Method method) { + public GenericsResultSet get(Method method) { var generics = this.generics.computedGenericsOfMethods.get(method); - if (generics == null) return Set.of(); - return generics; + return new GenericsResultSet(generics, this.generics.equality); } public BoundsList getBounds(RefTypeOrTPHOrWildcardOrGeneric type, ClassOrInterface clazz) { @@ -70,4 +69,8 @@ public class GenericsResult { return this.generics.getType(tph); return type; } + + public TargetType resolveTarget(RefTypeOrTPHOrWildcardOrGeneric type) { + return this.generics.getTargetType(type); + } } diff --git a/src/main/java/de/dhbwstuttgart/target/generate/GenericsResultSet.java b/src/main/java/de/dhbwstuttgart/target/generate/GenericsResultSet.java new file mode 100644 index 00000000..bc488da0 --- /dev/null +++ b/src/main/java/de/dhbwstuttgart/target/generate/GenericsResultSet.java @@ -0,0 +1,33 @@ +package de.dhbwstuttgart.target.generate; + +import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; +import de.dhbwstuttgart.typeinference.result.PairTPHEqualTPH; +import de.dhbwstuttgart.typeinference.result.ResultPair; + +import java.util.*; + +public class GenericsResultSet extends AbstractSet> { + + final Set> backing; + final Map equality; + + public GenericsResultSet(Set> backing, Map equality) { + this.backing = backing == null ? new HashSet<>() : new HashSet<>(backing); + this.equality = equality; + } + + @Override + public Iterator> iterator() { + return backing.iterator(); + } + + @Override + public int size() { + return backing.size(); + } + + public Optional> getResultPairFor(TypePlaceholder tph) { + var tph2 = equality.getOrDefault(tph, tph); + return this.stream().filter(pair -> pair.getLeft().equals(tph2)).findFirst(); + } +} diff --git a/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertFactory.java b/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertFactory.java index c185018f..3cae417f 100644 --- a/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertFactory.java +++ b/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertFactory.java @@ -2,15 +2,13 @@ package de.dhbwstuttgart.typedeployment; import java.util.HashSet; import java.util.Iterator; -import java.util.List; -import java.util.Optional; import java.util.Set; -import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericGenratorResultForSourceFile; +import de.dhbwstuttgart.target.generate.GenericsResult; +import de.dhbwstuttgart.target.generate.GenericsResultSet; +import de.dhbwstuttgart.typeinference.result.*; import org.antlr.v4.runtime.Token; -import org.objectweb.asm.Type; -import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericsGeneratorResult; import de.dhbwstuttgart.syntaxtree.ClassOrInterface; import de.dhbwstuttgart.syntaxtree.Method; import de.dhbwstuttgart.syntaxtree.SourceFile; @@ -20,12 +18,6 @@ import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPHOrWildcardOrGeneric; import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; -import de.dhbwstuttgart.typeinference.result.PairTPHEqualTPH; -import de.dhbwstuttgart.typeinference.result.PairTPHequalRefTypeOrWildcardType; -import de.dhbwstuttgart.typeinference.result.PairTPHsmallerTPH; -import de.dhbwstuttgart.typeinference.result.ResolvedType; -import de.dhbwstuttgart.typeinference.result.ResultSet; -import de.dhbwstuttgart.typeinference.result.ResultSetVisitor; /** * TODO: @@ -42,16 +34,12 @@ import de.dhbwstuttgart.typeinference.result.ResultSetVisitor; */ public class TypeInsertFactory { - private static List newResults; - - - public static Set createTypeInsertPoints(SourceFile forSourcefile, ResultSet withResults, List newResults, List simplifyResultsForAllSourceFiles){ - TypeInsertFactory.newResults = newResults; - return new TypeInsertPlacer().getTypeInserts(forSourcefile, withResults, simplifyResultsForAllSourceFiles); + public static Set createTypeInsertPoints(SourceFile forSourcefile, ResultSet withResults, GenericsResult generics) { + return new TypeInsertPlacer().getTypeInserts(forSourcefile, withResults, generics); } public static TypeInsert createInsertPoints(RefTypeOrTPHOrWildcardOrGeneric type, Token offset, ClassOrInterface cl, Method m, - ResultSet resultSet, List constraints, List classConstraints) { + ResultSet resultSet, GenericsResultSet constraints, GenericsResultSet classConstraints) { /* PL 2020-04-11 auskommentiert * try { @@ -79,7 +67,7 @@ public class TypeInsertFactory { */ } - private static synchronized Set createGenericInsert(List methodConstraints, List classConstraints,ClassOrInterface cl, Method m, ResultSet resultSet, Token mOffset){ + private static synchronized Set createGenericInsert(GenericsResultSet methodConstraints, GenericsResultSet classConstraints,ClassOrInterface cl, Method m, ResultSet resultSet, Token mOffset){ Set result = createGenericClassInserts(classConstraints, cl); if (m != null) { @@ -90,7 +78,7 @@ public class TypeInsertFactory { return result; } - private static Set createMethodConstraints(List constraints, Token mOffset) { + private static Set createMethodConstraints(GenericsResultSet constraints, Token mOffset) { Set result = new HashSet<>(); Token offset = mOffset; @@ -100,11 +88,11 @@ public class TypeInsertFactory { String insert = " <"; - for (GenericsGeneratorResult genericInsertConstraint : constraints) { - if (genericInsertConstraint.getConstraint().getRight().equals(Type.getInternalName(Object.class))) { - insert += genericInsertConstraint.getConstraint().getLeft(); - } else { - insert += genericInsertConstraint.getConstraint().getLeft() + " extends " + genericInsertConstraint.getConstraint().getRight(); + for (var genericInsertConstraint : constraints) { + if (genericInsertConstraint instanceof PairTPHequalRefTypeOrWildcardType peq) { + insert += peq.left.getName(); + } else if (genericInsertConstraint instanceof PairTPHsmallerTPH psm) { + insert += psm.left.getName() + " extends " + psm.right.getName(); } insert += ", "; } @@ -116,25 +104,23 @@ public class TypeInsertFactory { return result; } - private static Set createGenericClassInserts(List classConstraints, ClassOrInterface cl) { + private static Set createGenericClassInserts(GenericsResultSet classConstraints, ClassOrInterface cl) { Set result = new HashSet<>(); Token offset = cl.getGenerics().getOffset(); - - //List classConstraints = genericResult.getClassConstraints(); - + if (classConstraints == null || classConstraints.size() == 0) { return result; } String insert = " <"; - for (GenericsGeneratorResult genericInsertConstraint : classConstraints) { - if (genericInsertConstraint.getConstraint().getRight().equals(Type.getInternalName(Object.class))) { - insert += genericInsertConstraint.getConstraint().getLeft(); - } else { - insert += genericInsertConstraint.getConstraint().getLeft() + " extends " + genericInsertConstraint.getConstraint().getRight(); - } - insert += ", "; + for (var genericInsertConstraint : classConstraints) { + if (genericInsertConstraint instanceof PairTPHequalRefTypeOrWildcardType peq) { + insert += peq.left.getName(); + } else if (genericInsertConstraint instanceof PairTPHsmallerTPH psm) { + insert += psm.left.getName() + " extends " + psm.right.getName(); + } + insert += ", "; } insert = insert.substring(0, insert.length() -2); @@ -148,11 +134,11 @@ public class TypeInsertFactory { class TypeToInsertString implements ResultSetVisitor{ String insert = ""; - private List constraints; - private List classConstraints; + private GenericsResultSet constraints; + private GenericsResultSet classConstraints; - TypeToInsertString(RefTypeOrTPHOrWildcardOrGeneric type, List constraints, List classConstraints){ + TypeToInsertString(RefTypeOrTPHOrWildcardOrGeneric type, GenericsResultSet constraints, GenericsResultSet classConstraints){ this.constraints = constraints; this.classConstraints = classConstraints; type.accept(this); @@ -200,32 +186,11 @@ class TypeToInsertString implements ResultSetVisitor{ @Override public void visit(TypePlaceholder typePlaceholder) { - String realName = typePlaceholder.getName(); - //String realName = sig2.substring(1, sig2.length() - 1); - //String toVisit = realName+SPECIAL_CHAR; - //if(!genericsAndBounds.containsKey(toVisit)) {//PL 202-04-1 vielleicht braucht man das, vgl. Signature.java - Optional equalTPH = getEqualTPHFromClassConstraints(classConstraints, realName); - if(equalTPH.isPresent()){ - insert += equalTPH.get().getConstraint().getLeft();// + SPECIAL_CHAR; - } else { - insert += getEqualTPH(constraints, realName);// + SPECIAL_CHAR; - } + insert += ((TypePlaceholder) constraints.getResultPairFor(typePlaceholder).get().getLeft()).getName(); } @Override public void visit(ExtendsWildcardType extendsWildcardType) { insert += "? extends " + new TypeToInsertString(extendsWildcardType.getInnerType(), constraints, classConstraints).insert; } - - private Optional getEqualTPHFromClassConstraints(List listOfConstraints, String tph) { - return listOfConstraints.stream() - .filter(c -> c.getConstraint().getLeft().equals(tph) || c.getEqualsTPHs().contains(tph)) - .findFirst(); - } - - private String getEqualTPH(List constraints2, String tph) { - return constraints2.stream() - .filter(c -> c.getConstraint().getLeft().equals(tph) || c.getEqualsTPHs().contains(tph)) - .findFirst().get().getConstraint().getLeft(); - } } \ No newline at end of file diff --git a/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertPlacer.java b/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertPlacer.java index aba0e72e..71c1a67c 100644 --- a/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertPlacer.java +++ b/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertPlacer.java @@ -1,11 +1,11 @@ package de.dhbwstuttgart.typedeployment; -import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericGenratorResultForSourceFile; -import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericsGeneratorResult; -import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericsGeneratorResultForClass; import de.dhbwstuttgart.syntaxtree.*; import de.dhbwstuttgart.syntaxtree.statement.LambdaExpression; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; +import de.dhbwstuttgart.target.generate.GenericsResult; +import de.dhbwstuttgart.target.generate.GenericsResultSet; +import de.dhbwstuttgart.typeinference.result.ResultPair; import de.dhbwstuttgart.typeinference.result.ResultSet; import java.util.ArrayList; @@ -17,11 +17,11 @@ public class TypeInsertPlacer extends AbstractASTWalker{ Set inserts = new HashSet<>(); private ResultSet withResults; String pkgName; - private List simplifyResultsForAllSourceFiles; + private GenericsResult genericsResult; - public Set getTypeInserts(SourceFile forSourceFile, ResultSet withResults, List simplifyResultsForAllSourceFiles){ + public Set getTypeInserts(SourceFile forSourceFile, ResultSet withResults, GenericsResult genericsResult){ this.withResults = withResults; - this.simplifyResultsForAllSourceFiles = simplifyResultsForAllSourceFiles; + this.genericsResult = genericsResult; pkgName = forSourceFile.getPkgName(); forSourceFile.accept(this); return inserts; @@ -29,27 +29,22 @@ public class TypeInsertPlacer extends AbstractASTWalker{ @Override public void visit(ClassOrInterface classOrInterface) { - GenericsGeneratorResultForClass generatedGenerics = simplifyResultsForAllSourceFiles - .stream() - .map(sr->sr.getSimplifyResultsByName(classOrInterface.getClassName())) - .findFirst() - .get(); - TypeInsertPlacerClass cl = new TypeInsertPlacerClass(classOrInterface, withResults, generatedGenerics); + TypeInsertPlacerClass cl = new TypeInsertPlacerClass(classOrInterface, withResults, genericsResult); this.inserts.addAll(cl.inserts); } } class TypeInsertPlacerClass extends AbstractASTWalker{ protected final ResultSet results; - private GenericsGeneratorResultForClass generatedGenerics; + private GenericsResult generatedGenerics; protected final ClassOrInterface cl; public final Set inserts = new HashSet<>(); private Method method; - - List constraints; - List classConstraints; - TypeInsertPlacerClass(ClassOrInterface forClass, ResultSet withResults, GenericsGeneratorResultForClass generatedGenerics){ + GenericsResultSet constraints; + GenericsResultSet classConstraints; + + TypeInsertPlacerClass(ClassOrInterface forClass, ResultSet withResults, GenericsResult generatedGenerics){ this.cl = forClass; this.method = null; this.results = withResults; @@ -61,7 +56,7 @@ class TypeInsertPlacerClass extends AbstractASTWalker{ public void visit(Method method) { this.method = method; //constraints = generatedGenerics.getMethodConstraintsByID(id); - classConstraints = generatedGenerics.getClassConstraints(); + classConstraints = generatedGenerics.get(method); if(method.getReturnType() instanceof TypePlaceholder) inserts.add(TypeInsertFactory.createInsertPoints( method.getReturnType(), method.getReturnType().getOffset(), cl, method, results, constraints, classConstraints)); @@ -71,9 +66,9 @@ class TypeInsertPlacerClass extends AbstractASTWalker{ @Override public void visit(Field field) { if(field.getType() instanceof TypePlaceholder){ - classConstraints = generatedGenerics.getClassConstraints(); + classConstraints = generatedGenerics.get(cl); inserts.add(TypeInsertFactory.createInsertPoints( - field.getType(), field.getType().getOffset(), cl, method, results, new ArrayList<>(), classConstraints)); + field.getType(), field.getType().getOffset(), cl, method, results, null, classConstraints)); } super.visit(field); } diff --git a/src/test/java/packages/OLOneFileTest.java b/src/test/java/packages/OLOneFileTest.java index 9050d133..ddae05b5 100644 --- a/src/test/java/packages/OLOneFileTest.java +++ b/src/test/java/packages/OLOneFileTest.java @@ -14,7 +14,6 @@ import org.junit.Test; import com.google.common.collect.Lists; -import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericGenratorResultForSourceFile; import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.typeinference.result.ResultSet; diff --git a/src/test/java/packages/OLTest.java b/src/test/java/packages/OLTest.java index ea3f9c1b..0518be96 100644 --- a/src/test/java/packages/OLTest.java +++ b/src/test/java/packages/OLTest.java @@ -14,9 +14,7 @@ import org.junit.Test; import com.google.common.collect.Lists; -import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericGenratorResultForSourceFile; import de.dhbwstuttgart.core.JavaTXCompiler; -import de.dhbwstuttgart.typeinference.result.ResultSet; public class OLTest { private static String path; diff --git a/src/test/java/targetast/TestGenerics.java b/src/test/java/targetast/TestGenerics.java index a9058361..3d4ad553 100644 --- a/src/test/java/targetast/TestGenerics.java +++ b/src/test/java/targetast/TestGenerics.java @@ -41,8 +41,9 @@ public class TestGenerics { var compiler = new JavaTXCompiler(List.of(file), List.of(file.getParentFile())); var inference = compiler.typeInference(); compiler.generateBytecode(new File(bytecodeDirectory), inference); - var clazz = compiler.sourceFiles.get(file).getClasses().get(0); - return new Result(compiler.getGeneratedGenerics().get(file), clazz); + var sf = compiler.sourceFiles.get(file); + var clazz = sf.getClasses().get(0); + return new Result(compiler.getGeneratedGenerics().get(sf), clazz); } @Test diff --git a/src/test/java/typeinference/JavaTXCompilerTest.java b/src/test/java/typeinference/JavaTXCompilerTest.java index 63570d95..60a27221 100644 --- a/src/test/java/typeinference/JavaTXCompilerTest.java +++ b/src/test/java/typeinference/JavaTXCompilerTest.java @@ -1,6 +1,5 @@ package typeinference; -import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericGenratorResultForSourceFile; import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.syntaxtree.SourceFile; import de.dhbwstuttgart.syntaxtree.visual.ASTPrinter; @@ -142,7 +141,6 @@ public class JavaTXCompilerTest { System.out.println(ASTPrinter.print(sf)); } List results = compiler.typeInference(); - List simplifyResultsForAllSourceFiles = compiler.getGeneratedGenericResultsForAllSourceFiles(results); //compiler.generateBytecode(rootDirectory+"xxx.class", results, simplifyResultsForAllSourceFiles); for(File f : compiler.sourceFiles.keySet()){ SourceFile sf = compiler.sourceFiles.get(f); @@ -151,8 +149,9 @@ public class JavaTXCompilerTest { //List results = compiler.typeInference(); PL 2017-10-03 vor die For-Schleife gezogen assert results.size()>0; Set insertedTypes = new HashSet<>(); - for(ResultSet resultSet : results){ - Set result = TypeInsertFactory.createTypeInsertPoints(sf, resultSet, results, simplifyResultsForAllSourceFiles); + for(var i = 0; i < results.size(); i++) { + var resultSet = results.get(i); + Set result = TypeInsertFactory.createTypeInsertPoints(sf, resultSet, compiler.getGeneratedGenerics().get(sf).get(i)); assert result.size()>0; String content = readFile(f.getPath(), StandardCharsets.UTF_8); for(TypeInsert tip : result){ diff --git a/src/test/java/typeinference/Meth_GenTest.java b/src/test/java/typeinference/Meth_GenTest.java index 0eb4feab..22f7fd51 100644 --- a/src/test/java/typeinference/Meth_GenTest.java +++ b/src/test/java/typeinference/Meth_GenTest.java @@ -1,6 +1,5 @@ package typeinference; -import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericGenratorResultForSourceFile; import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.syntaxtree.SourceFile; import de.dhbwstuttgart.syntaxtree.visual.ASTPrinter; @@ -106,7 +105,6 @@ public class Meth_GenTest { System.out.println(ASTPrinter.print(sf)); } List results = compiler.typeInference(); - List simplifyResultsForAllSourceFiles = compiler.getGeneratedGenericResultsForAllSourceFiles(results); for(File f : compiler.sourceFiles.keySet()){ SourceFile sf = compiler.sourceFiles.get(f); @@ -115,8 +113,9 @@ public class Meth_GenTest { //List results = compiler.typeInference(); PL 2017-10-03 vor die For-Schleife gezogen assert results.size()>0; Set insertedTypes = new HashSet<>(); - for(ResultSet resultSet : results){ - Set result = TypeInsertFactory.createTypeInsertPoints(sf, resultSet, results, simplifyResultsForAllSourceFiles); + for(var i = 0; i < results.size(); i++){ + var resultSet = results.get(i); + Set result = TypeInsertFactory.createTypeInsertPoints(sf, resultSet, compiler.getGeneratedGenerics().get(sf).get(i)); assert result.size()>0; String content = readFile(f.getPath(), StandardCharsets.UTF_8); for(TypeInsert tip : result){ diff --git a/src/test/java/typeinference/UnifyTest.java b/src/test/java/typeinference/UnifyTest.java index 366b010e..4881de34 100644 --- a/src/test/java/typeinference/UnifyTest.java +++ b/src/test/java/typeinference/UnifyTest.java @@ -1,6 +1,5 @@ package typeinference; -import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericGenratorResultForSourceFile; import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.syntaxtree.SourceFile; import de.dhbwstuttgart.syntaxtree.visual.ASTPrinter; @@ -132,7 +131,6 @@ public class UnifyTest { System.out.println(ASTPrinter.print(sf)); } List results = compiler.typeInference(); - List simplifyResultsForAllSourceFiles = compiler.getGeneratedGenericResultsForAllSourceFiles(results); for(File f : compiler.sourceFiles.keySet()){ SourceFile sf = compiler.sourceFiles.get(f); @@ -141,8 +139,9 @@ public class UnifyTest { //List results = compiler.typeInference(); PL 2017-10-03 vor die For-Schleife gezogen assert results.size()>0; Set insertedTypes = new HashSet<>(); - for(ResultSet resultSet : results){ - Set result = TypeInsertFactory.createTypeInsertPoints(sf, resultSet, results, simplifyResultsForAllSourceFiles); + for(var i = 0; i < results.size(); i++) { + var resultSet = results.get(i); + Set result = TypeInsertFactory.createTypeInsertPoints(sf, resultSet, compiler.getGeneratedGenerics().get(sf).get(i)); assert result.size()>0; String content = readFile(f.getPath(), StandardCharsets.UTF_8); for(TypeInsert tip : result){ From 66944cf3c1878b963a5c432868c303fcb07791ae Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Mon, 15 May 2023 16:52:20 +0200 Subject: [PATCH 51/62] Recursively collect generics for FunN --- .../dhbwstuttgart/bytecode/FunNGenerator.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java b/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java index 270a0bb5..ee3b6c27 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java @@ -3,11 +3,13 @@ package de.dhbwstuttgart.bytecode; import de.dhbwstuttgart.target.tree.TargetGeneric; import de.dhbwstuttgart.target.tree.type.TargetGenericType; import de.dhbwstuttgart.target.tree.type.TargetRefType; +import de.dhbwstuttgart.target.tree.type.TargetSpecializedType; import de.dhbwstuttgart.target.tree.type.TargetType; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Type; +import java.util.HashSet; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -71,14 +73,15 @@ public class FunNGenerator { boolean containsGeneric = false; String genericSignature = "<"; + var generics = new HashSet(); for (TargetType typeArgument : parameters) { - //ToDo Etienne: Refactor - if (typeArgument instanceof TargetGenericType generic){ - //if(genericSignature.contains(generic.name())) continue; - genericSignature += String.format("%s:%s", generic.name(), objectSignature); - containsGeneric = true; - } + collectGenericTypeArguments(generics, typeArgument); } + for (var generic : generics) { + genericSignature += String.format("%s:%s", generic.name(), objectSignature); + containsGeneric = true; + } + genericSignature += ">"; if (containsGeneric) funNClassSignature.insert(0, genericSignature); @@ -88,6 +91,15 @@ public class FunNGenerator { return classWriter.toByteArray(); } + private static void collectGenericTypeArguments(HashSet generics, TargetType typeArgument) { + if (typeArgument instanceof TargetSpecializedType specializedType) { + for (var arg : specializedType.params()) + collectGenericTypeArguments(generics, arg); + } else if (typeArgument instanceof TargetGenericType genericType) { + generics.add(genericType); + } + } + public static String getSpecializedClassName(List argumentTypes, TargetType returnType) { return String.format("Fun%d$$%s%s", argumentTypes.size(), From 136bccab93e5f79095a5bb4f717db351fa4c5398 Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Tue, 16 May 2023 13:31:05 +0200 Subject: [PATCH 52/62] Fix type deployment --- pom.xml | 8 ++-- .../typedeployment/TypeInsertPlacer.java | 4 +- src/test/java/TestTypeDeployment.java | 40 +++++++++++++++++++ 3 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 src/test/java/TestTypeDeployment.java diff --git a/pom.xml b/pom.xml index 63e8985a..8fe3f636 100644 --- a/pom.xml +++ b/pom.xml @@ -54,8 +54,8 @@ http://maven.apache.org/maven-v4_0_0.xsd"> 3.8.0 --enable-preview - 20 - 20 + 19 + 19 @@ -112,8 +112,8 @@ http://maven.apache.org/maven-v4_0_0.xsd"> - 20 - 20 + 19 + 19 de.dhbwstuttgart.core.ConsoleInterface diff --git a/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertPlacer.java b/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertPlacer.java index 71c1a67c..bbeda06c 100644 --- a/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertPlacer.java +++ b/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertPlacer.java @@ -55,8 +55,8 @@ class TypeInsertPlacerClass extends AbstractASTWalker{ @Override public void visit(Method method) { this.method = method; - //constraints = generatedGenerics.getMethodConstraintsByID(id); - classConstraints = generatedGenerics.get(method); + constraints = generatedGenerics.get(method); + classConstraints = generatedGenerics.get(cl); if(method.getReturnType() instanceof TypePlaceholder) inserts.add(TypeInsertFactory.createInsertPoints( method.getReturnType(), method.getReturnType().getOffset(), cl, method, results, constraints, classConstraints)); diff --git a/src/test/java/TestTypeDeployment.java b/src/test/java/TestTypeDeployment.java new file mode 100644 index 00000000..bd2f5438 --- /dev/null +++ b/src/test/java/TestTypeDeployment.java @@ -0,0 +1,40 @@ +import de.dhbwstuttgart.core.JavaTXCompiler; +import de.dhbwstuttgart.parser.scope.JavaClassName; +import de.dhbwstuttgart.syntaxtree.SourceFile; +import de.dhbwstuttgart.typedeployment.TypeInsert; +import de.dhbwstuttgart.typedeployment.TypeInsertFactory; +import de.dhbwstuttgart.typeinference.result.ResultSet; +import org.junit.Test; + +import java.io.File; +import java.nio.file.Path; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public class TestTypeDeployment { + + @Test + public void testTypeDeployment() throws Exception { + var path = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Cycle.jav"); + var file = path.toFile(); + var compiler = new JavaTXCompiler(file, false); + var parsedSource = compiler.sourceFiles.get(file); + var tiResults = compiler.typeInference(); + Set tips = new HashSet<>(); + + for (var sf : compiler.sourceFiles.values()) { + Map bytecode = compiler.generateBytecode(sf, tiResults); + } + + System.out.println(compiler.getGeneratedGenerics()); + + for (int i = 0; i < tiResults.size(); i++) { + ResultSet tiResult = tiResults.get(i); + tips.addAll(TypeInsertFactory.createTypeInsertPoints(parsedSource, tiResult, compiler.getGeneratedGenerics().get(compiler.sourceFiles.get(file)).get(i))); + for (TypeInsert p : tips) { + System.out.println(p); + } + } + } +} From d2ef5ccb24e351be18aa1fc0961b90ecdb76e5da Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Tue, 16 May 2023 14:52:31 +0200 Subject: [PATCH 53/62] Update plugin installation --- doc/PluginBau.pdf | Bin 1538959 -> 0 bytes doc/pluginBau.md | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+) delete mode 100644 doc/PluginBau.pdf create mode 100644 doc/pluginBau.md diff --git a/doc/PluginBau.pdf b/doc/PluginBau.pdf deleted file mode 100644 index f6bab5ccc5c845303c79c2dc9a76f3a51fc1ec3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1538959 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 lKg)Pz$!r@t}$+5~dfiHOwSV z1xj(mXWST-(JhqhLFC=4G#0F}nzol3;)hd5?#LIH?hPtcX4LE|?!?o(@{Ey8#n>7y zx76-AEiDyZYm~F>89#c_HT2r?1@jeYX&^Um_*D`La%D>k51^)-?dNj z#9VJmI9`GDj$!W3G<%`_=no-q0|`<6_&KQ;0Ji-K(PL=~7!E}znFPpR551qeVaKJ- zZo2)%-|B;0ZmBqYpXW@=kDUQcZgub{c>%ku3*`treNandYagNm^GW~6G|iOxntiNF z!34>G_7m`_#HDyfP%Yjgj5ZzJq;FUnsLLj0&e?CD!*Lp}LJw^3hGc-_!uyfLpnM=(8bji;$(&=e{fil3h1EL8%Rfgsj2U8=-R7PZ8J1(kAb!Uy^=zN9e8Qr zx^>@nh-!m1)m0L|gs+VnY#Dy!T~;aCgR)FbTt^A=eb~i}w{v2glSOjtF9V&TPNtQIQgm+lGfDP$3-}M#Q z=M5q6zn-}VT&e|LOQAIjDodrB1$q#O{Q0X#6g8Zk~iBc3Rq;> zLHIuiNOY>(D7|~W}Dxwz&Ih)gvp(&JZ4vhVTJrCAGHY)Kn{zN>;D0h!vi`*+i2u@ za>&St;RkV=Ji&4luoqx1ymkM;xETjW+h)GQ`S-$A1 zF15wj+eD|%{v?wYRN)O)3cSOe7NI6s&ea|QT*$NbtfOzt$_kiwNfF}n>uRQJ0AhgA z3%LoPa`tURYfKoj**C9SqVs2`r!`{6wSgi3E~i4S(Y0kU{ruXXMiE<#2MV!^9yH01 z1F%!0w-xN`l(acF(hp(ySk(N#bJFf&$I)A-QwLZk8m@qohhDM(R#YLs#1j{?aP`Pv zZdy6?{rV3Tx_`s*38H5;3@k(T`6%$pMEpxypx+i^m>buJa1npo{swgPp2Op&>(8(Z z+sQ85n4MoO!QENlnAZosp3cJ5o|jZWeY_#RhCiyR!Myv9uLLyPCwJ`!f|oA0L@r}j zu2oGcI^Z#W_5Ybyfgvsb(moK|)v5>4J)G`py*++HlZMt@qkYiV$=2+{Y3TnM9ta1^ zSl`XcLO8ZfAj-f1uoX%T3}eR4wwaA(MadCvhX`QPw=nj7$74eTARLUrlDmri6ABxhU5Rgo04xnG4MWQg<1OT#LTYkte`q2QB{$1 z3%bj+)g)_h8nL{IOHJQQ;6M+Ak4$Tl)ufcV^opn9wJOY-UgrL(z^;6J2UT~#{*ImA zRG7pkEcmPtC%tj)s1P-g=sdAsE~`Ng>e_{$TTo2Y(liO$s^*?T(tIfWdS>~X^QLTY zGDd85_4K|kLz#o&&CaZGLEl2q3X9eU!|B9|idUfK{c{Sq=`v$H)eXy9mOCeM{P@#} zJP@su<)j`OYs61X&Y1fimb`xAlDMq02@|L-g!b+f&K6rsdf7Qww;zlB+3oV|5{XOSNJCIs##dhrNX5CWHtr6^*+V+5 zuP^E?+;MlMmVe7!P+K>^(3AhIGb2dNX1ZSORm##gT3CXI3Dx&EfM@c{Elu`_bI^lW zJ!DzN{kmX*8*zl}UE?owvP}u8KvoB265RoPGa*+@uh(vE_U8@03Y6U2FJjr&6ErKk z$P_KR{H*^(mzQA}$)6RAQnZYXYmsZVel8jN*T}Q-83UfkNOoCg%_JT zF3`akPD9s&F8li_9^MWc7{S2zpAF(yS@J*zGbD?7$M$ri~(Wm5BP|ol>^kR6~q)@R8f!lsc|iE|SJsyxO3_jye{u+;+=9 zlH>yem1wR5lV(}2XWn8+^LaUma&a(B;nbmpp(Uq-v%^Vy+4=*m&s$8XXPIb85Gmj5 zBG7T`9eIG%eNva&s&mxXzeOpfijjw(v$S5u1!r!okx6$w$V% z(4=1I%o3=Me46myrW?BQnT_G?3cs~VM_G=}tXz$!iSYr7lvnQ4MHX$P@rz2_+~1C8 zW6rmPdTzC>aUX8@m;y;@VsII8gNFk?6Pqvr=|V)Mq1~#6eI zx>3muIhkvDXG;*!V~!O0wI@mb?-oF~pI_~{Be4+4YN2o+&c&xlx5s6oL~swj#Pan8 z`I!#~xa!?t9_hgG-2xl&P;x@`*bylejS%ynfl@EUZ~RwM6f#4Y3hbN-e%8&BI9oB*f=gKkeD!7g zYNZJXAp+KcRGJKzT~UtUc<0WLcE#pZL2n3HXp&Fq2^@kvV!k+NwBsqXe@di0KhC-g zl4zT+eg_sg%F9UbW94(XoqH}CjyK9{;vjO14|zZJs{Ap;LnOK-t@ik9f%z8xqfC^X zd?TP0OOc{@X8Id7M~Ss8H$$Bn|FrtsNT&$-Ji$Urt@}lJ7q{32|46{!(z$bSjExYR z>t|mV9ck2eC7QMygmK~l#fhf@|B90dOg#UrO3a+-^FML{*Dl@|1Y!zaA8fDHIKJf` z`Nuq*%vLIVVp`Isf0*D8v|N2KZO=0&dI*o~N~@@qc)l*|2K9ujV+yAKA>nA}SVT|_ zeXq}&O&RzP6k@@~i+s4|`sEuRp53x>(kC9g`YMM6kIaXi%LLWj=BF?hi+OG=Tk{GX zP!J2CAovKxd>PQ_0RXDVb?*PnBLMX*KY&f!EGYfYJn|roTV|gphchDOo3}>mf8w1J zLg6i35)#pM0ei)@{Icp{5FDZqPA(6$d&)7OhJJNhu-EgD;==q7am0Rvqa zikX?9(Lsm07TRU|!y$e^ewhg-uN5o_QRq6=qyM8O3Fx>8&O*wYD@b~Oz#qb)a&uf( zOo;*TZLwCANj4DwQA;`)JmdnX{9vO*a_+XTKj;rzRRoRp+`)SJ3Kk|jJ2Cu^4asmH zehwV!+?yu00;DGSqe(BI^T%6PNL?F`pBo!QICK9Y-V3PbZGju~>WNTl$g_XUdm=An zvH3*K)kB}ziEj2$pnZAzKL+k(PJJvdn;QaiS!B!sM927}DtV|TSv_DXdlLj1%A)); zf5<1mO_l6<6W1P`O#bD$JRk=d*K*k>80t?SZ%V8^UR-5kxcN3{il->g^M{DqP|sZ- zfClL~Jf~6q0K5czdPUhN{Csfx)^zI0Km3_L(OHtDgU$_n2-~I-p8@u#l8V6DgDDu? zhs$hD+PRd3>`7=q>m|eq0;CeUb_B3zyBYg<=e&hT_%H&U(jWDhPX=%u17b&bH5l4N z*dqM_oHO)l$|sh$i{MsB3@t`3@DD4}0_j|MYJ+a|ym}VM|5ep);`Fucd9zXgfE?-{ zXxD+gy;gN|LqcxOWUJ3|RsKMZX{z((RGuQ}_Q2TTC6MjGzp_b4N{B)G_X{4)EM%&~ z|3MJipv>dj;sYe##T)(qku5FcqU9>$0xk6RuqSF)I3MpHGlBzndLe$Qv*q**$@d?B zf`eY2e)i~?17&t}JlA5|bo(=h=fNr4Q|L!Q!IM*RW!!(HOA9${^HT)1xb1f3il=S- zV?*#g)gUI;-nMLTAEx>!*z7-l z_74}sB_eZ`ZMPkG<^1nzuBJ*_aLo0u^ivm>X+r+72S5ZX5wCT_+z=nW(+Vl^H2Ocq zi`?CqYJodQO@Smizxxuv~r9*a}hB6}Rg z@Q>q)f`I;DUl#b8|9oebzk4&d#BQ^dRBczL#<#o6XmEeF3HZnBn(&}RsZ;^%9zj_d zoPSJD6jW#Y*!xgFH)N62U2W?iGTGH_&JDS!-w#9!^Zv(-;JL6vb#D}WL~KIY z7V%iQe!%~!C`H6$o#sbC5O95Mn?8d1k8k*b#jyK%g|Iah-!K!WAQKQ@`~G9+!vT@V zCzXFDKJm83{e$OB+ocfQ)&CUSU4%FEPc7)tA_%km!_8?ZO{paRQY|}`#>pU)DYU(~MDQ zus6;Ai6-Eno7cd(vHxKB4+bFe{m&YH4gmgx;XfGuqsaeyio3B|+J7+o2gBbZ_x~ST z!)El*jw+<@$>A%6yZIVXQ5s)xjI$Mi7)bp&&TBZtC~-LGbe(9=J8+aEPALm8LY07n zG7QYK27oIwXz#-#(}ut$mOA)F5kYCUXmvG!sjo1&M8(89Eo7+aGwFv2SW-CfTzVS_ zbexG&qtdO_qHqYrKmg0-(14XV92!LkOqtRmn6?ih$ry7*evJ0D@`FRH3!qHn{{@7x_5X7q+-|*Z@SUUN@7>Aq3ica}Ld_^~KoG;f1u;y%Z;6gb zSqk}$#;ZEo5CEN?za{ArK%XW?7S%QS4M&;1G!6hy)U&^J;zV4^jpf_g`x_7awJ2Hu zAKJHnD`lHY*8-?F7UdTp&bzZ&wDGUYkFaTgbfT?~fZ8i98Wf*CeH}##brpV)0H{py zF0s~JATbF^?5e3)k(xiCchx&7rkvBgE>9VIMgpcBe0u<8#{%t}tpb#tt1OKLC>!f< zWe@YWW&_P(`rSOmf+$Kr*_3}P8#wg>1zPj+ck9ws=$-(|e)6}nfipHqfRMSr8z)vI z0|+AO|F^RJ2jO`DkbjE%Q`zdVh``)0;@=npM{X=p0cGR-Qugjlg`_m=gJ;5~Kr(pb z^S^9;WgmL}$j%s;q?`X;bb!VTgcz6=mi%q(SFwDYfSFkTC0v8cu1bcz;(Rz$=3PnR zcTTZ83pfRJfi4b^?$hr^wAU6(WB!%kr`PTl3vbTSH2;E_9Je;Gu-i$IsgX+H)$a*V<+!7E+% zwdwe61Y&hs?-ITO0YEfV16IG?4i-VA#KQYkgM*h>6V94Bb^Z|;6PQw#|J|B-+4zTm z92CEFww{yftsY{}y_|Cn17K$e{w2mH%p~P`RAz|1OuQ3d5h8c$Dh7PBUBQhL@U*+q zelf^DrQLaV`bLU}y!2p_ymx4-8epOJcP45XT8kwep2S?4<&@ z32;esQ&YvL<7_4VtUe&!opg7GNyW9C(|9MBE&VT7wzjl zM01~0U>No@Q-2>c4<}Y}~ zK(Y4zrO8;ne*tvc{5dw46qgA=!&g-7FBl)++SCOmzvuKF02CvG^^08>J;zL97*s)Y z`EfrNI(}jF2D8)s_Z;{ynyw4n{XISZn}vTb{rqnB-wQ0iXsg=#OFlqbD`kiYz-;iZ zP6+U~&WZo?{Qh4@_g|0yU+D8+4EX;l7nR{OO)%76!XsNfLI3= zQ5nwIxt*;LPIy(9dy^+LEF>-McfSclD z%kwPh5${Afr!Tcxe0&=Xq51jvf7{VWxg+Z#o|S7~Bu^Xd7hO`CFK<4#9K_N$A2peH zpX^w$SS6S3U_}2E0oZb+$#wXt?9^&;`g;+@GP_En?9eZad3I< zzM#jV_r}Xg4UNDVi6F@!R&=M-eeeBF533@pBAc4xo}8V;owS|oox+`R?=+*p@wM^R zEnANgd~a5)*Z#aQrwUwebZ z=?PoY&on~{Sve*qCTr9yJwY9*Uw#ZHpN;n_c~4(oMIMGoql9TEpC2ub8-(ibtg%HB z#N{ZYYSVxj40sKH)_H`Wk!X@0i+|%Yz$fNxc=*&=#aYed1!w;BsxOkkb$DA0ZiAq53n zW=nCT^3Q7cnuMDSG7a8pY!TPTFpLJ=A^ktvQ?3sE7*y=3clmY0{lVkz$J*Cs8iN?$ zMXdKIq?%mT+o#CgS!+IC41~`MuzXhVxv)9KR~U%0M{fLHP$Pt_TYQj^oUAe7=&;pR z+n%IFD!`=n)MK%9N7x*CEHriJcu=Sc5A7h5WkZ)J$n*@onksm-^~Ba?EONm} zVQx*nqsMQ-&tiSXZd)TL*29cL!6-i&(wIVmfh^j zyT-hDSrt?8eq`Y^n+CdE;o@puSyPo)rC|L9KYsY6J20DOH*?EKZ0pfR;^4>7;Q8(- z26MBa6ydJT7`nxUi}oa|s)0nK1zB;TdEk>GLPvBKGId< z`0@H&WIOB6i&|P&?wW4wWcb1EC0RIEXRSt2bB?Ii)EUpUrFeSsaB>JFYBxHo<3kPY z9~stvs~LA%_f8owRB>Y|H>GL!>1Hhvr>SY&mQ#Jc%jQrVE0iPQq0mkA#oe2)#@PL% z3$Qn^SSzV9ZZObzbZg5W+g@Zyvw_(l7@SQo1QCXC2~}w-ylPa>D`J@y{-x-QUZNt9 zF+UlFqQk&ks17!gRLKyhVEACJ{pIT+9; zGN|!)#bo4X%^#v`yMAb5_F@x`joXk@L^&$iSx!lb^O0AO*KTmWhUlql$E+3@xxd&u zlG!r6Wh{9$I~379Z2^kj5?jWbWL6fE?PUv9SKnPsI`6xrAR#A`Ejic}y1e-^M=@l! z(tpux%W`qiygx}mK@%54i#5`dvfbw3Wkns3m`FD8mc%F9&H-wm;H@?{m^cuo1)-e4 zaeOnM+026XF+rBw`VsT&WI|#RCie&d*LxPL8SAK|ouFHdBg2Sq;~3hPWN6wqT7)Q$ z@5xzB_1!bhTyMDb`tsoUW9eB_ECuY{HRW3i$$m(dd|+ra-60z+p!L94I77NOcUdAg zza*V3_&JlWiYD)a+>l>lqE+DN`=^O!g05*a+=5BwC~TrN<251V5UsEmL{FTID1ysX zKORM`x;Ks2AmLS~1@KJqJZM*Ynn<{1X0=76<+{06pSJd{5kvYxpj{!IPr6;Xh${<6 zthw+gi-=qVW)*(#*6L;3!O1~j+~jF{`)Q2kA*}Q$9{*>BOw8ShFkr) zvo7o-J^DJ&SGAK%iZXkqF_s~PigJ`u(OQFDC%TeWwiq@Rd;L6~YL3^D{FL;^al3-f zJJa|duI4JN^s0->ZcI;`JH&$%zWRO`@p@1*VQEGho6R1dkI5!wc<}{xT~l;JxKI78z||PmNy;{mGQHaT9g|3Z6wh1~Dw-!=8h)uuBlWlFpLwnEQCq;@oycnLMMa$zwT9Rnh7l;+ zze)f+83pzyATQFoCb(Q1nG)gRXF+di_->gNf>s2D&cu^)f}TR_dSS%YB9o623HcXC z9oKT=2~|Hn_{g_X-14JMV>c(h z(B6!}>C7tv?@aX0I(vFpP4so&?4UF(X=3_3+=E)$2+hvSj7*MdKH4}Qj9VHXd`K>= zsH36LApE}D@5J+9;iXkyMoqTEz>_G7&1mcqAy4xRIuA37#!*2Bw{Q84s?2BLa<(gV z1?OabmZ2p)E!)ICiG#qV5@1w~>+Z%_%R)kyxg2UwE>h#Tro~ZREt{ z@Pzp3kCV>2<1h9}wcD1djdHccAqLQm;?)J~#BYx$Q=$k6k)WC+0`#gxN6%By?p?Sr z8@=r7N&i5+x+fvK>@`9X`3$$J(qn2bD%pG)HT8BhQ#D9(l{Y<3=u@%wK-1L8kDXX|EE3Q~PMK!oce$f|xxPHHlVE!7sYl&^HL0wz#I0*a&dF9P*a5KGwe` z(-I~Nb~e;`VZ7S49KL>_FK%sQxM)7zXt3cd%|afszN`g;^&6)7M(4pul{4!3oQEptqbjgE32wvCWIu_KLL*%V?B!Q+Z-+3Rk>pF4G0TsC2MI33k$!_q)w=Eu+fL{CZno?nm#AiuPHw}fKYy!tCs?m+Zx+ba}T?y z7xRTXD%`gba0;&J_y5rL76#GQVs4NJz*C0`9oRnY6HHcpOD;_C!y)lKMX0~(ZSjSw z$nM7U>6z%1WZAP2Cwm(KtGxKjFMdiqQ_qega|pTqFSfoiAdaR>7a80g zg1ZD6TtaXS9yGxQcXxsg?(Pl=L4pT&cXxLJ0fM{TA@BR`?%jL;z)Vkdb=9fkPt|Gm zgtU>i{DcU&#vSq#;YsHo+B+0{teJw74)W;R=;3No-+? zc2uZ=w@M4=!fEvU-oWglCv!%w1~rj43m(I!Vo@h2zB*ljbfM}=SxFJ+ZaCH}Z*Bi2 z=|^UenZ}=AMSq-jqg@>2Fe>Qq%?&O6>A+ubiZAFDZ_MmuBQLoJtzw+r(XbPh9mZy7 z)k)HC2d(r%kTkisqfzG(qNEj_Yi+l7|=!=eYZ>AX;kBNPut+|>GrGY>7J8< z?s9(p*YfeE^qddbM=DuM=Z%SThrA?a!DBy-E9iDsGLM9l+Lsp`tCfVV1X$}UYwW0h zmA|X5Z~5+c$lMn6e%5zS=XbE3Y+wcat1&6flvg_KqI_9!1U~pLOrkdqA(Ca(hf3Ck z(SZ-6yL2NrqSgOg*d1hxwa(0tjkNNm@g;hfVMney02{_>HF31(#^|%~)zl_-Byo-x zzu-99mD+PxiQtrVwuTkQ`FE}UE_8zJWc!3G1xNJtgSIErk!61SOMJ_T^PcsI%;a_> zf$x1ir10!ZZznBQ<9)-;q02e9GOae%TU?yb-_s|h2h;QOSs58gZpq1lU?m}`^TByq z50n??yMr4@Rg|_VtD22~3P%g9I@=s!Tnnnc^^5`1WO;%2af)muaE#ICL%FvJQ%*H$ z9R2v=`9EIRAdbYZl$_5@1>vTJ7v#BUGnl)t7VS7gvFomP-iJ{i>I;9;8@TtcP0362+OcBFRtmwLh7YX;JJ%aN;-f$Xjngs}U)|!8-)EPBFaN>&?Hc zggyW4=HTN4Ue1F1CpG?3mgeY|2bvp3pUT5s{g$h89ljlsGoSU|Lj9lK zCsj}956yZDWk*jsGk7ss=x@ z!yV+D_cJcV)RX)Ex=r^QD*tBy$;Kb$BZnAGKehyZW`g|fk;I8t_+vh7mP6)#`su9q z*B@^!A8GBj(d`QIMTqP%tkY@>lFHde`r%&e<_%A=?$G87A|Sxek8svYS6fvFlv)N? zpC`@Wd2lxb=Rm$1e$>(Z@2E0Jj)c1kh-b&j^0gC!fj|M~;QbM~t9bk>30}Ybg-Wz! z0&-sSS0W%JXs#*%;>&CP3d%nSa4lHdBrNySo>}-6*z)U0hhR5zkCdheudN#(*(%mc z!q=P_XcU56Sv_Oc1ibdCgLt%BGjGCY^iQ8QufILqR=d6aMuK#-Iy~D`L@gft+ND-E z;P>Gj&a62MqZq=q9e%faWnqc&HIyh|EhmR9E?Q5@3r%d zK)=afn4&p2tOLMf`xYwSan{KH>w_8nTDOxP~I{RQRH=<gCrSsOT;AUiv{KpKkMS=%|P+8Y>|Q1JfKv#J8*1*H_6kg_wc&k?h5 zc2YKR6t}anx3e{|b*A8>V3V@2hI9k@|Jsj)iIJVL39^t7^1oAZhdyfk;;gEf&NeWj zTVtv){wQoU+FE1kqAxI;lCD=f*Sac6Kl?4eWQtPZo6I*EKV{612k2_*g{9UXG3Bwz zJp2;2uweW_p|F6;GgxiJ<%NMhHfHN#rNv}sxoX-&gI1eGL~I1EcJI2M-d>lL)-?U8 zt@CGRZr6)uCw4Dm+YblJ>q5UW>POq-6E<)Vx$;r97xv43~hwEeQdRuNTu9>+x4Nc9Iq$KaV-IVFsO>GkB zXeenvYM>S1u>kt}v{4n`i5sb4wiKJdDjOaM<~nsHjBQ>E>3-%pIn+*oLpL7TwGtaIhsy? zKsbU8pq7dlHoih%lp4KeXAZcoqFhcL})5HL~hHLdee4i>gai|k*Fo>Ks%`*afnmKIjW+eiH?R|6|`yJ_M|wntFsKy_9HeS z(BhOKss$av(8GjPp=44Fv0C#Gk7e~5c6yMIkZ`?;f`x_UYZu5Wuc%Nem{bN&uC0}8 zlxAdPs57Y>85wzdKaFPaIuz?PyRz`|YVv*Y>c!eXvl>k##Myeu9IyoOiXv*0#h}WmRpx+{Vu0$l7kw zx%Pl-71n!+GHXo$K9$$N}UA@&*Nf z!ay;gBv1w@5A+>W#?bHgBxXngTZqOL;E4Kxvx7aA+xS|=(J(bjK`PX&xuDF83kUN8 zAVpRL%rcSxm`us4WR>ufN`>yTudI?N5MCj`+Q1KL&FS~qK6laT;vAGNtkj2v%EA^H zE5ArUN1UJFH+(}^XzWnVpbNOqp-u?lp%()y1bpqeajmVbe5<;;x-;IBOH0UIi!(ET z^G}eY;}H_YYD~D{Y;Ct-#u2!`%-(^O$_W!_bSt&lU%8ZNTC-~Y^YRAc+Df5y^*;O0 zbGD+cnYNuY$|r%0ZzyMq5*%SGg~vw|mIC*pOrBq&S~u{X@Sprff&0MJtboAJwAVvs{y!C3LG$6XPs3P?CPW(*R+NuTL@?PswFRIe{ z=1T#=|4ZB7J%0bi&4!Ao3v^lx3yfNChuDj70vu5HhH~j*(uGaY(!7lm1CYbU<9ejz zcnWNqdiLcQpm&iB_b5!?V5j>VGQ_-5re89l%f1Rl{+VH|@W864x{f}#ix=*rTsI(g z(TP09s-nybw~L*qsO$@8ggav*+Am?RsKP>u zk9C3kyTMNyOnTq|ItpOZ%*H!gyq?TO&&i6G;{1}`fA{{UxpJ`lqbyx~FjTX5M_cgpq^(0$mEd42=Tw4#o;517=uEm&mYC zG(;|y7ZyKUfa~;a>KU4VElhJTfH*`#fsEUCEe%u@4G zCZImpiC~N1i4ckqi;xjchsts)L(w`=IKzJz^WBsexq*gJus;dKL9OTW=aiZ1mDA_u z;i`r!ngT?--G0t7_LiB9xNtnR#Lx}E@VhdgIlR9*0!Gu&|z6X)3e8O%7gO z)%snf;WA&`bePd(6|}oo_U8?AlfT_O!x`-SOoTdsKwX` zR9q-sXz#8COhPO{7VHP+;U@B0ltpgryn*HQ`P5{QN0Q1L*%%P5;;cSt_V=C}jUZ zy41rVKKLwMF@AVMiB7rrA5jF`|7$vsM`FhKt6*cIruUSij>w9#OIV%$M;QNkq%7cd zV5jkDn5g$%tVsPGTnjX%TfKj0_-g%6izuK@-s_=u>J><=Gk4ApQbX-SQRpEiZ$t)& zQ7k32ZBV5fZP>RUaf)^|bDxS~wA>q!VZZ76B8bhNsHxNxE(X9_bI@BFx_&6`C=XnYUoRw(!I%dP z!_Pf-1|VQK?QUqzK-DWDTXmzT;XD?}vZON76FN0t_ej$^{rQLjZn%Qfd-=TiV{_&G z4j!Hobap!fRxUPA0-(5;m^3|vM( zKR?5SO7-K~`xc=Mm7sn$W}k^p!``3EgC!_v+7+VNmf#d9HR&v$6dR`NKIjR6B}a@4jm$=*9@3%toKQ?o7=jlve^Zz&2AM+0(tfvtC8~% zFDAYiTJU$0rk=-1>kT$Rc2x{wT<`Zkr(>}_R}-xm6|Nj*xg%g&!U-E&3L0;?G9_#( z*{Vg$t9VEA3ihAFgr3W|OBSfdoWVTY4?odkzJ6}I9XGO%5!gg)FKqiZPNdatRP z6jNAmC7TIrXQQEk-=-e5j7EMRD5(8n1AZP8&FNX9tKrQSa?*fD@VVU#sX#h-x>@h< z7AE2*3*k7+g%9d@5M)=yQ;al^hHgg?G-byTqKI${8&91p)23&{$?8U?S?C=S5t(LJ z7c=GfoR`7Y{&>Frw7Q;@k`hrGmF(~&VHWOmN`>|9V_3{@L(d96;X*;)+I8<6-3~Co zUxPS{+5$aA*e6)#<9U^RJgiE_SD!*Cb>_45VuiP9#E95%AKUn~%jQ;q6%}3>AboV$?1IDXCXM25lht2TvAKiCMtjA##Ac<{`^MUaV2x2XrY2kXzml`iCUh)Ewz z3YzA*$-d8Yn`qDOhVPx6^W$JxDkFM5qvFW=5%R%*Bbtfv&$-K`MGT2fGv#W-1$vfM z9|F?2=;<<%T*HP74pNyYoutYpxF1)bnw1%Fw*-uaAbBYEi{3Q%6hvEbdsO$Gp1aBO zl^J-thU_>(zDfT0IuRs$>aR?aIH)C1R*8&KPCXfhwFhgB{v8Zx-`R)XZ82 zb)71eB?y}%v1o==`g|butmeMF8O`%m3wh3?y)<5iWfoQrNv;hxW=VKEgo>?zn)Gm! zawW&1TFY-xu3gW%42&zecYp7IrChA$p8D!@3CaJUq?XnZ=ybt5K}s(1;$oSjsX~1^ z1ARrJJzzn-fl~;J!8=iySl_vVcnDtGQM~Et=@U&2j$x4$31!;#A2?_;&Msy3h%_kC zJ8|$ZxRPO^rEpfTF?=2NobMnt$9;B(@PeupXWenSlHTqHSZomPnFi@x>0(E^D+h>e znDGU#LFsb!L$P$0(i_qd>gyzP(&?1Ob4>F85CQA{Km~A-s?r+M%^|m;2m;z}T2GRa zlf&Oe(%1j|*|SVL*6)>2Qo=N0am(IwhwWi&35zo!Oargz9Q~D2ATXT??7u{F#i?Na z{DVgo1`L26ERvK)|88~ps~X`{a^56=d}r^E-U@T|bJ`i|P* z&VZQlV%sXfkQBV#mJH6a(=~_xPX2vyD^7mUR{=;(f*6r(S*tp{qVF4tfGzL=~(q3|~L#_olm(X&16UJ?|^^g?@8VKVtV!&OUtfz^_mR`y_^NbT9?bn`t{o zc1)(SlRKCkt6L*mA8_slvCJj$Hq|U)x=+(=CF;)FAtio??X5mJ9H{Y2CQyngX$>FX zZDn~XBetj^ScWiMpPev5BfI*TEP&_SZ%9OyGebZ>xQfF*o_`eY@&|DA%EG|+KCU|`MHmcBW=#T2t1 z4^`3pgV2IUqxkJ(jQ-u=bpWl6L@)brugjq;(>=vKn!3o<$FgMkKk26om<&&Qv;k&R ze4C9fciu-#CpUoi>8poxSsK@oo66GbXOOpYeBk1nn?=CrvyHO)eJD1tbMQ`-;=goK zmRE|I3krP^kEn0LB!aLFuoUac_p}qi9)-p{^pDtz+!hB!2T2jhj=H0E34P$GLIPJg zZ1?Ry%8Z$RQOA;{o&TM&d}S(qTX%V|D=DdN2`gkwW>2L2^(&TA*yMG1yj4__3JFQ& zEVU|ksQeW-iLU}@Dtdl&i`yj#*-0ZW9kA&i9>-P1D!J*tWzWEQYOQS z8EMMDkB}N1D}~T0|N9D}mU@c1H(_Rhr8|;CYcfRMgDp6JZAAyi77{AG6j#4rQ13Fc z5roPWJD=fTCixAtu>TmEP>d+Ny}jqLTSJZZm$7iLK{5`srd@cu7BpxAB7h?Dad&9b z%FbA-j1)mdf+=GWkX}JHcE+hMp`nE+B7V$T+20`?TbZA1#?Sy$FFWyC>;s8L8}w3; zaKR9=0>y@~hdw&bN*qHn zZ-Q7lGO@yNU<2qv31ye$0l_Y#J=?i&NVs`Xtf^a=7#ZU^3LdQ zV?hLOVGYJUZ+hmEY(L&zY$0zC%3fo27p4lL2eO~g>8U$u5T|amP_WzQJJCe-(GX%U z#XizmCd`a;<=xdRWnMHU>_aXTCUt%bZ~=?Is+$jJrA^}P@SXeU@8?N9+umJTyX|YP z_T-(35iIHyBfZCn&ZFeoeqouFOP?EBUr$|EUUjn~BmnsR@QE|op-kTv|@$mcN*UWh(R$--=t6D4J8KvDC7#$gQ z7@&QQ_cf9C75f~$Vx~xRLlj_MeIx_|P$YP{s@TxhS2m!;;+)_SD83rsM$aoIp;^Q) zH03&%k_Ava)sjmVcBJH8AeAq;kLg z%xw@o;ap>4V3>=kepDeBV8h;$>bfb$F%%)%EiOe8cDnad33MJ}#|P_th01rU8O$=N~e0 ze737HOJHV5IUe4pA*W;t82evP+@Ftq#EuGlold%$H zSu~|S3NOHs3^+TY0Wxg??9a>XPue=so0E71xVVYD`=hr=b|+TFeREM{4?RV90)y?` z=5C7!%|n!$Hwuw&M1i>Vo=4QKy2EHYjQL1?JrerdCCs*yY0^gl^#gJ9Aq2oqs35;E z31@HlXotf&mX;qJrd|FGWv23Mt(WotEiBLq{c1>QgXVC;@MyO^T44=K<{o`Z!1~Jk zd>Cr#27-Kyl${ZUW8G#~XnY#PpI!STvf}Qt2PXv|&&6rt#s7C0We#&h@OPOQCm}Bl zgv5}oT|Ske+#7`N^L|x1hv@xAdU_*-rhu3oHQP!<4i^gxKAWe7#U@<|4t4{~e0U(y zO=<++PA$1PqKsSnR;UGZ^#sIy+DQ|z{!x1G*eAzUHY%v)Qi|N)72uy`t9l{oc`C>D zbXQXvAhhYnF8BOwGq9$zz^)FRG8G`=!ky=IYY@S`7bp8h)?T;w3-}uoxq@7xY-L!f z$=H`(1iJl`AD8~5>s3Ywh}t{9qtD2pmn%=U<_dP*??*nQ?OW3FhZ;%vk*5aJ#Wq z0ln~C0(+r%wqzMAdCMI7&HMw=10l|1E$4-{N|25`EzAbq>8x}O%FnnB%a|Jm8TIGL zaaMM~UjeCJTbvVkoGVB&KJMJ zZH8HdwnQ=Sk9yjIwW=s|dnViOn~Faav8cz=3ArJObeLi3;bH?A65O5Ymgwe~_P9^q zO5Wh4G`GJb?L81Yw7E6jwC}mFwC3JrfY(k4E+0p~mA4O`+%?0D`i`CGx)u}kW~-W; zmd1be^1WhA^>ZO7d*^+R7+9O;(H)QNDKd=4-Y}FOUTVCP9rF#r ziBv}e)X=zaq&cnv{RDF2JKE2A4}>Lh>NXn{VY7;qsVK>y5%)hI5yj5uJ0d@CuE<)7 z>o}i7zc4WKd!c9G+Z?*|q^BgRt^bi7y?T#8drMg(3MI4&fMn33OYwdiqwk!2BB!~ADy|h)F^%;n@5V@!aA^GuUrvw^jcJmB4_Ujm@Wl&A9Q;M-o z3!$_hr5}O{SX*eVfI|K5!i#s*ot%Zi8@P?p7oEk(3Q5XC;l%c}IEzwtq_M{V{vAXI zZ|K=xf;&?8+fWCHR%+U#gxJs!sqF*ti%t;{W%fBv-lS7g9ukxWkyhnR@i}->W#Sd- zBKoQ&MgWfJSg79zbuk+!@sD0=@xNGuC_=Sk=;@2`#z=9yJ$h=fDwwjzv2qb75D-~Y ziR|urFakr?-`TmT#@|eKO(OJQ#JKtN79vCYA;}o&RY9nu&}ogx$8Mh`1OEXuVMNx; zVGw$TjM(XxagFCa53myOhYIjHUaIAP8)$^pH}c!}c1anwl*K=m2`Gy6F=H>1<{j|P zDTN7BYZ@tVr`B`8ioze=Yko@{3L}=r?hc?7ka(1y)697HV7|HEy@1}utZHILUhjz+ z$WL7l2=X(7W{mwJ`{k(wl*3fo}nj+&nVwh*~d0 z*g}{nH9G`YGgT*M8~LBG0TiO2*u?y(K_bmkm_O2LYIxUw@SVR%h5si?2wdQ1Xf(wx zC0m3eE|?{er@YbY3>nVHXs8A2*#E!_S}l-{HdJd;7a=41-Gdq8sn_bsy_+1QIe-NP zlL=y83qd|1`a5`v*Omo>6ol?M-y!4DZ|X&Yr-!u=^TR=XhWcj;5ybxWW4N0}ajEy= zD)Hv@!8)u;3ErEtte$|=Z(r;+TbLlu2~V%?9>B;!Sj+w7A53N4?iodIFgmSl5&)}+ z8t4=n1(U)LDFU%!&u3|AdHRMoxiU=Nm5-kAakKj`4e)tkASUc)mPvhIF;KyhgcXp2;-ApY5T!Z@FxQj(JANvh zv9db-3kHcvK}Bx;tS;U-Ru5DaJUf|R8q~p_Z9HCB(p}Nh(HUWeA>e}#PzHvQ~>Jc9|2>u2Te^F z87D)_e4QZpIFuSOk*>E3bfq+8oePhEshU{>#m)PpK}PUqwU#{oy9@JMuQm`6RIhb( zi!ms99d0N1j)R%i0Ubihzx{*OFtyHKtefT*Qri#d<&u94*d62p3XVUdf^hNh*dsdN zqD9UTfl`!MT9EnnMJNfLQQf_x2Exu`eE`BdE!x{mTw1#d%LFS0eN+;Zt&iG2tdBH!JTK@~lF7&VT00GI5_s30$oeY+F3F_L{6~VCEIp;I5>qwoa zcUcPDAC4z}eu^3aI&8*?{GFPr5Lu`Dbr^wqvf@P0=&vuL)C`@cS8uOL8Sz(elD(A# z9VCwP0n{~wCNT3i{$@wi-Ar_FE#z0_pkHYOIqoW;H=WPSN2PU@DA_1~rwrN0B8>QW zV6G=FF0O|!Na*`8M&C%lmc4jAOfSNwL9V=!lpPclG(shTl8x22onP}2*1_Jau%)j8Y$Vza5&@pGF?_>aT2us2w)*P*iHg-lj+xt8;TxL_A;IH-Zd^jL9CaQ-~{irEvb?Ruht3T515zpai<>)T0 zard!nw0p~?R(n79mb1#@K?h|rmQrf$Z7W$y|KS;5NC+ue`}#rUwtf5hwEeDx>7GjI zyN?0$+=AA%0$oYDOzp8oIJ*<~clXVbf2lvs1l^hYGw*o-!lSacfPD$yvy*`$S%=!s zx@f=PksffdQ1K9@>JmYM&20K*8ndNpw=;?rVHoiv+nhnX|7=zPKxQKXWIYZ<*d|w; z<#PL3M};2H%IPHqhSm(Q>=^tJJa5CFUHg7(W}%>_>F^xg%=F`U@X1mbM)kF>>z&T* z9e*50TKxkvpN_5%YkWwbE8+C>3Gn+C@f=J4Z7) z!tK5A!|L7z;m6JYn1ek6XywqRCINrY55DyUf4ATW;SY{?=O(Yq@Vk>Q{!3%wo~g<1 zl}6Mc`+};L{pyyOU;CA^si{N2oT)h+?S5^SxPd1dr|O~!*>5WeMWb;{Lza?@&0Id? zvs(bTN_^JHv2nAHLYxN8du~!CC)_@A+=fgTIcIR`IpyNRDROf$EcZ{;g><|eGgBYa z?lwx@wcdD20&=-9A-Q#h=s?X%g+c`g>*aq)#RET3fIj*udKJ3DG0%1#VFy~rW5rN2 z^?-`>jm2qlS_cFPMd&wC_{gL!Rf8Bp-Fz>L@7UY@tIampGQ`YcEz5@j6^ z23xO_Crzk^p3tK4+2h;4N+gyJ!q%2nR%fj>knM7qsDqm0=NA`glA-uLc>=@0r|zj(9c$ZrYv}T2cvP!3xVFC@bjUeYVZs`%`hP&XEBgOv)lUWthPZ1Hhxx zd)+(o)`vgR1V30~78kDc_R2K^6z*oLl-f(WX7E&%V1FM~H59+`ddi~iAcRicP)bvHfwbEh3H*8@r6M2Na2ZQ=d;J5V=)Ngf2-XGp=JH zvbp)}YQP4`IZc93QBB($PFJZYHu0-4*C(ZEa@& zG}xa{NkAe#C8eKPYzjP%la`XcfjJ^4nJ%te*dKNG!;oq-Vn}v^d7WG7A8T`w3Ho{v zy*KOlYE}K=z!2s{4F2$~3lj-ZN?IC$mJsr~`%Fam8cH2^FRa*83k?>e??A1foI`B+LW>sRx4issGML9TDsh z@gIf!>JNctW@bR405Vi5;3*TTfP~}06s;*%LkE@&8FU{54NNICU>jZOU*@QE$ASui z>NK~s%m)OtA_w50nj$v>5dbtTV4La^zD}(c47@eYzwW6BCI}#YUe2NjOl92ZBKb#Q zL7Hq}Q2hP9vH>ep8n|Byyv0P~4Ap@+i?8hXiPnOO5Iv;Zng;{fLPmy~ntFSCJK}+L zul1juA1Ijq=3q*nH2VL0=8&5}1o{yleSDzT6s>AM^Y?4{VUU+&LtHt?bD)BX%FCrt z;e%!J*YU@Y;Q!a->~-bCKdQSNr*Y~x=&;&HR#jE?db3@u{dH#j;etdA!479zlBQUD z6bsgMZfhPPEd%d-mg?=uSC*WLGRdoBv0k+?Fl$;G_$OlO?m~aCA}K^HPlN&}DEQdm z5a|#zYU~n+Fvho5aj31VM3ypZd~upr3g@EOz(L}VOAUn_*AZ|Q3xKWpvhH=EVA2%` zbD9He?hfjO0BI0KIM;lMg*t(hywS<`<@yl<1Pg`sJB% zw^X{*`|X=!qnL_bdF-&9T*R*Wahu9T)Yg_jRFt}vttP&{js4ffjyIO4jDBy%v)&1b z>-zYR1~$? zWP~z4goeiGAOwbda{G+Y3DlA!QQxMJlQ zv=#BS#?1nbT4KEJDJa$Et87j&yKp-@<23nfW$X7hOH9jX=%sDQf(5ygq=}BGIqCs_ z;+!RuXrj)RY=@O~AKWIo(X~-?mQ5NeR$14LTxZXW zi&N7dRaD?^&=v5yRLbBUjH?MIisp-b)#+5PKYvHxh)0A*ssLsD7r^hbi@5Xeb$9Y{@A6+@;5_F zajD`g3T-bSKuz&doy#?Cg6w^rdVvLVie_y(&4!2#9~<)TuJYjAW{f6YG!NR|`_hPA zrdC+4LJIgOqM94V(!@)llCrXLtGOtwAmWE3WtO_V`1?CLhyb24P<0>%?*x=EQWBCw zwt3uL{K63cGV6O^;f1p|<0v)w>|k)D9hC+{YjiA?eyz(!vL*mn-MA$Bn!Ko=A!vJ( zZENfd>Fqm>90e)su0-XxN78&Sjm+W|zT1iKJ-iWcVH+@>Z)Vw&Y8?4T%fMWS13Oqd z*cUH1mEgNkNf8e!GSvm8Oe95RlG@Z}uY}+EP z=T6svqk-4~pedkpLdlIN@*UUL4;(zowuNfOD}_Dy7T;=u8=!CpZqhO+2d&bZ-(|=w zmawK8b%6lzc_d00K; zN|_nwg@iZ$(pdfweSqp=w_K+HiF46*97qTefOc?j%BVqU2VwX{%}{&KcP#vhz6)WU z?r=Cg2*_zLDV0hNVV%p81M!1%hexdar>6sn!aZggb+VS=nyrIh(GAq2lS5BFH=)yL zpTvMI)EccCrPCQbyB2$XSUxF?{U~K-lNGeDdOms_qZ9KBkYTigDFen}sB!ZhqGDv@>SoRbL`Z7)7RVDo6z%PGgzy@RZvlF1joZ9D zol6;1#;`)+q9^9>5Cf|Tg5vthHefXeFi{Mc;k<3Pu+Ol#6BChB-=F|)U{snZ#Owg? zclm}E)H3yRVMg-+-Q*-z2%k!(5M9=*T$4o&Dnt}_MzQ+GiV#HSZR?4x#`pP-5liwz zl!Y+u5W^-@Weg5{afs+ku()pgA7+RUZ^DWjFJ;TO_OCogNQ)tx){i>P zt*s^4aZL;9KLd-;O{#@mT<85serAMuOB=R;k+^cogB)@90z?B8&p43iG>`BsArvQEMVoxiFxOw1B3+pi;@wEW2Tx$?@NQDl zZ2&N`++G^@J=mJE4k#|kD8!Hc)7rA06s0k&BgsuvrA z^Gs8?4PR7{mP3g{y}d0`Q;5Rd#*+v2p@3uWET4O0jH{3FJN<$AcCmvR$!}2(IzG59 zsw{Xn$?1k0HvgD@LWQVQcIK(VATyZadL=s;$;xYuA!CFMNdq#}3f+LJc%yF$xm1cy zY{8(qT^^Cg+s5yV{%1=r11*zJ?vhqA?r_V-zs!9Q`)aLr=gX6-DC6A$-68Y7R6|r8 z*D8^eP+PSF71ODLZD(Pjty0k53Zf1+^iqsN0)z56R>YZ5y8@+F)`o_J=>DOr1Q*cv z#(o%J)O;Na*9PYemT-+Nc1#^K?zq%Jhm_GhVgf`dBO3g!f&djM^P&c^DpCY;M4ZUC zcOxk5itwMdFj0T%1{9%=6chD+)g93#&8fZu7jAD4e3w04j};{;VR02l113ssd4$IG zgv+`bxg&m+bj}S0^-SqF^8MYwOC|}Jk_KW*1y^C9deC2kKy2YjiHX2zYOI#Iv7|V2 zgwFktG$;sxG0A0+g6CG6_2^Wc<7L9ayDM57j`L+TiKC}}y5)T~saQR!r?yWx!`G0t z>eQEDMO>U7_eRyjQUID)_M_FpOGwyFcvl@uCOY3rMce4W`Q%$$*DPfH80(k*>*4_R zLO`L#a7jj@#qqUWk%V;c1S&y}9PimoNlaUUyJ~!mSJ2_cJ^V zu{S01*(y2WsRmdM(xG=y-pmV4pdu8mt{ycj0(jN)X6tR|BFVg|JQy6t*b0ZqxCn3^ zbm_X46)oIgD)^P4W&qeWOol}h$2*-psR1w@7{Q1M9`>gQA%5eOiL0p56q^TU(;El6 z9v?p>Z)S5z!0)1hw7>$jMa&j~Kjvx!y*PFbm0Il9>7UuRHB)N^Ea|*eUGp;Z>X)~> zQ!%Y(2vjc?N={#WoQ*g!3U2_cllUn%%V~(yud&_>5QqRdR|^cO-)chN6HMkJYc{NU0;8&J4@1k-u~B~$dTd8%+giQ*ZA{Jf1Dg_l+bA+Pl1hXI zn+iJs6st8|9GE&G+~NeS)?+hE_Juy+kNbTi@0YU8I8u$5E&RW(v>qD+7<#%W5;X)@ ztrod`+&jJL)KAJ`QC$i+V2qjg<9GffQ9dk6NuugDDGWJ<3g)GOpFjMNUEv~ow+n23umFF#+IQwAKLQirozBXtw7449>D?a z?i!h{9ceWWAO5UaFDdK zK4_|i!iRBv5agLmN4Yw~d$soF)KFmm8_?!^LdG0Pa3iI33|ZEsw?7O6z8w|P3JN*s z$EFCG6yqrqY*`)WVdM7~_xv}m;b+Knz-{i@`2!auYHI1|qpz@3*8?j!iCBh0FKV7= z1?t2~)e9;bNNDGYJN*=d#!W**Z3DyX9n6`wfl2qLN<~9voX!TJ#y669rFRaPuP*41 z6O;&0Y=%3DaQUiU`>juQ$5Ch)l7pf=5iGJn8rR7_CYiPfXWO6JC_ATj~YF(jIVhnH-{C6vGlb!NAXy@0bC0m0q}} z3977NrtQ@qOeqMXPr1}{BILcj9hT3YI}ME1ZCXfRH>vbG4bDTTQ&^~}1H9`u1^GYE z4O;q;0RFm_Cyoc;p@Cg`9J6S+r( z?0UH_*KIy!!M^9m_PYF9T8cuwL6?AJht``qkn{2gIf&c~4DN!A91}rz!V5p%fPNBJ zJBp0_)pL;8Qg7YRBBZGioU;nND-jdo565pyi)fgP&T%ojr?fTS#ogKI@3KfkhMuakI6seIra2O*%Wx{Q zR>aAuAV`*f<2kD41%2%6%&jj%;i%3BgM$6)>GWu}T+L}mia~sJ*v?EMF>r@#UdLG0 zJ0~Znw1YHW=&`6wmT@_~KJNKB@6(FzZlNdp7R?o+B>vU`s@3?{5V|RY4qQcH$5D>^ zH@ELj@@lt=e*Ea^fCSuO^9;dvB_o$3F&l)+Dj4Ds2M(FLakjBUuRNry2qf$8M?2ws zWoB|`+D3*yg5<>8om?n$36M2;$qKAAp$yZyPr@|rf_h6h*e;GyXM z%^E-=rz$GQt)22n1Z3iXS1O=}|HO<`5Pz92nKEG`yL+w>*1PVKemT}$^t~xPdbwYD zerelWczN`ijaMk_^(46P`8OI3g@Q!BI}VgVh<|OI!q*T`>hrws9n4y#zdv+VxqiWc zh24p{tu6nh#aO?-&WloMc#1U_YsZ(^(tplH;L}2o4q!rm5H8izX->hD1j{WbvRaL=FH4YL2dgd-%sit{C)Xe(PxUUqd>ugh6MG4+hWN7Bq-8l z2s+*GFE%#~P;{B`Cr|@Am34F;kLz!2c$VA7KfFx;K9u7@W9fLu&cb9Opto)%CpYR8 zmP52=-%)jxv^n#;#<0TZY7Tck?K9dm1jycKtYk$ci>Nin+5iNk39^30{F{idqS6Iy z>nkoEyV@hQC=VMFkxgJ+9$vP#E?Jq(kLL*I_%`l`ap$lu=0-e>tXsdGSuMNuDwp!8 zQLt_K<+xU}_~*@tTZr|I^;m_Cz)Ls_Ywbn$IXJ8K!E-QhRItv#$&+PUmU@ldm7weg zD`K!%=d6>BZFdm+JWYw`#?;;R@0LZMyo*1W0>s~w@EYBeC7*t2z>6UVj=HiiaeKY$53VU+lrk+!1p26XQ_URl)YXW#E6{qn7}nALBu{%!Ystm*4}e;ZQk;&MyUCtSAP zZfqmH(ri@I`W83+q1(6S*jz!R_)V$udT;l7F1lI~%+MPQYumc}4CVcdqcSl6!a-2$ zJQLYmPtUPrPiv)N#oGs53zMs$Mx4mmMx3u~SJ{z9Ym_qCB3waQb^Y%p2od+?fzYsn z0=wZtu6=qmtd*Oo?~Ld-Erwa4E-1=;S)XVD+t1Vzz+~&XaiVdPI23C3IxjZq4a)z$ zU=Tx^Gt%I&Eww#*NPc{O{6N(1#kSpe!!eh6yAzO^$?48JJkI0WveUcQ;D(0SXDp*l zk@`G(y>gEfaGYId#*9K|UDNu1D0>UGxVmOr6nEFgU4naXcemiuxNC5CcS3Lv5(q9K z!QCymy9RgXHoV_{_w(#?&b{~ifL=YOQMBg*|3z%^Ur zroXE`$_RhBf{WTIgOIvi z%zqjT*0`!4hMze}PEO&Gf8g`HHSMJ3@y%B22=ngrx{WgHWvyEDaTwsv@g2eiLYdTU z1@THNMh(fW2u_F?Y>qUslu=>F)v`BGmThBr6}MgG>p+$XpqVG(ZmtQ z?4uoUH?x2Z{B0@?2;lM9klUyYe>t2i#C_7))AzJqQAnIE9ETX!{sHF*ig3iZsuBNy zR^l0OeTL7&-^0Sf+Mjlqe`cs>7_2aU`mB9_E$11!KtiPVJUoNTq<42fzaTeTy16>0 z24&J@%z>5hq@&F~yF=DK^3%4KoMv83fn|Yj;Z!FHoE#ltv2W)ZGfZ8H;2Q&G(O^R&;sss z>LRK}qi_T9_^Pzq>@cO5P-1Kormll4GR>)Q=%{^cBCr}G$_J$V818ZdW+-&n=+Ehl z1CE7;7jP8?$an=l%=B!LgSzNeR7eozAqae}mOBuAq{e~NNY)|L{U>GK5Ewxo`wl+@D!w^(UzP>imao$-T z#*lRb-yW>``?uc?Vo@I=a;4;VxPi;}K6UeYab48hxcr=eT3BzfGCfh$n;A^)a^muj zn-B0Gj2@u*BZsNJ;#X-Fq(7E<`G=m^aFCskR3lOpvguXSCc_OWRiHng+PJzi5hk-G z&s%6X7l0rg(x89upmzcl^MD*MzWwFP7t&=2!YyaN7fnN7*Ug^DmF6}5cKem`sy46t ziyi+JXG)N?KBA{uDyWHKfI^35%H1%$6>Y?xY~)1a@h@x_1ra^MNthjpePtRHq`7Ep ziLbOT86h2M2$fGAD)wf=Xq?xI_>JPQ%+zzjD6U@;2_fQ=hUx~Sadx*`mbiwnVA&&= z>5Xbq#}iU{zRW&>BLGf>JyHn>0=42Ux{lj*0*yOos?eM_RbwaQxwSNo>VsK+tXfe> zYVX6bo+Q#pHuVlr4~KW?f9V%NCT2xk&=vg*SI3cBhC$WST5+)+ETGeRt4 z3i*aAqZ~Tvd__cXlj0D^2(!eCe9m)jTEtG@Clyf&;60Mnxw+@g3-judxyP4}zY5Co z>Z%HllO#X?k zD@CKp;xJ~aZg7q;kcYGb1bBPuNt6A9uVWri0D$NqY6&59bAPh%@%GgJcE#QQ^>J;h zs1_O;8bE%3ohzsm2kda=H_yDo@e!83nkyQ{LHKm^^9L<>Y8q)H5+vbabEm^;xZEU3 zW3>n?e4jZkvU*zmW4DrDkAb2hi5i+7t(YT&GUC{wQI`v!pX%-Lw?Sl1phYuzOXwn8 zR|F*#q+ZaIkDst#g_0mCuM)XwP#i*N?A#>rMhX7{4Y!hXQ^fvl6^pTPxrME12403F zONe!-bv1@DfflZDV4u1~e-Uqs@!&~1k{j>GFU!bR9!!9CPOSMl*EN{+B6xb{SoZW{ znc|OU6=-D?Kpc%?MM{^9GJ3dtHucZh}hW4YjXbJ zGTe$`ZV{}K2NSt`0U!6=6w7Om-pH7@dVQhix{&*d+#v1;5l!-F{C5xzX1bUzu@c@d z-ZJQ%zd~1BcN~;bL%PpQg=d8ovH?r z@lGD$W5Ox*mNc62O`@ISOXS9#-D6j#e-A9HIAadYmb+q*q9+ujfYtkTZECBKO<>Nj z;WNblap?bsP+qKKBCVC96uBUs40fUAC1Irtz;o z7TxR6aBKP@A!U6g@ra+wl1-!^QZ@=r^|l1@vcp4pxv8JJa{1|=vPMcf2O3x`lMXOo zPD0PXmg7~ROkBbJaKi=mx>SPX#93Hj$m%byA&{Oh4FjuhGm{@HSd>Eh9H42szi2G&2lvlLgDZt({wX}gjAfx zLC(;h{p0%_s$Y^8;W{G(eo7!UEXP#B)0i=*Z%t8!B-sxTA%?Ye{wg+r;EYtkTcrv4 zxGv8a`N?_lJFEaE988zA<3d1{Xf6YE&0UXX^+FujqD*uyi@ctY$!&wEG!ns;$i~1u zc3J>?!1^CEKK+0$Xd2ZwpVDJdd~h+?q+OC-w%5`7Q=o<;NznGCnJhQMvf<&gv(aZ% zm|wuVBwnc9WFR503oSEqRY?i#DQ(Aa*1?{}`ELnx7h?qb5OPiNXd%pymk^vX43*#dfPo`hjq>QLAOTD;@)=GvfR+cRLYh zLgRp(R|2LO%!ZI}MakUa3KR?pT5js(T9~rV5!W$K>QdrRMC6_G;o}TfXrB~TF=?Uj z$lD5V5MkMe2MKS#RcDNuc4EbpCT+4yJPCaP0u{r9;#v|W)Ordr48f<< zf*|s{z{wn477se^kq<+fHsw>lhJYty)yF0#A&qNU|G0Dc0s~p-)4?yxWHtFASS$=? z&z2T|dh4>8Gt0ApjklSvsnhbg^YTsc#^L}4d8+C2c>I%b3Uhhx%!;KDlX2d)0YnBZ zD=@C?xa$mEv<-N%+pGl!r^FK3`_Je7#5r2?Rl)YX`{7(bfBv|Vq1%umOXUZrsjfb~ zY7H8!p$6B!=DGc=MAMFcH>Q-MycpNe=p8UA0ig~6@?ZY1ZG)zw345R^5iMI4M20@+ z5|WZI7|2owqo3G4YHatq7~ zZ1x!Gqzs35^~s`s7X*WP`WWE!jQkbfO2cT8xAYW6)sII~wVSS+a7~dojjiPB7fW8u z|B$z2$LJBr=(9&YV7msMcM*a|3IB!BsL+p7|Rm*vf|=rbZ~Ow_xgOBJ{gJA z;`UtQzN$$uAT_hHJ9Z5uU|WEdiaYkbbcHMDGS`I;uKeBPt!uA#wNW<|SqW9Yv9*`; zbx`BwBDLKo4vsRV{CaXGD2f9sr%gHkM&i_);T^O=is3+yY4@UrW!PM7u;Jn1ag6KK zoSmPKU`_(*Ajn7#H2sGnH#$A0a}yFv1419QhS4DKj|(>sIE4l&AZ*Wg93jhOe(+blmE+A_Uqpghvzk+@vaAl%a{3C_ zSzRsJs`y;aw(t_9am3r`gw5C3Z_h`X+ejA5ok8) zkE^U?GWShecRgfbaBf{PK5k=5Zk@m-gZ}}BP1_kT8J@azuvc3TmvR=bH@*VtAXYLH zEo*>Aw1k1DG`Y$T%jPInaU1(k|FcTO&)rA*O2eWS(pIb-^@owdnk7V zAIK-DV`FtQU3*9@$iM|`BMRlCdqyc(DIZ#89}thc;8u+y!;CXk{H~jjLPO#;@0|ND z@d_=vG-fBa&mGGuKU%U%&xm+}kU@0M4^&Jjds4KRRoQgg)-k*r(P{|wJSfPMI9$_O zdTaL4tKZk8G*ODtAwco@i01v{RKsPrI24Njo~-32>wbACNY0PjC!#ES5e^^`4cE6W zI2eShnXF<1#CRF#KYw_)gN!G(pQC30&65Yn$VL4a2~=fIg>B|<`aQou;PStcJRD{S zP>hQBA?za|&xFp-ZomRV0dOnGP1w zM}9=GXHV92-;9r8nHbR`jzN#{3F(8eXwiwt%5e2@Cmx3!E`ry0LMGL|54zOmiq)XH3j`NP(@{DE&gVls($h$-c>aKYzbbWQ11v_)38!OvNp0 zVC{K%iUTGEBSsEc&Ed(BS7!T=T=AVC-El!f0yP|We|B_4bI=xf_SiyzSr=w>c2=b5 z0~oN06EQdOCD8u|@BHw#uO4zV#Rz@d7_989IYEXQBM&Tr&X68t2~*l`5Pi?tm{h@B znF|w__k8WW=B;RoGVp!-rAnY>#t2TAK8^%0wkK%QR2^nVbdn~fFU9F`X){y|@e@jz zFfwE#4CG=hSI;wwc1XqmkYa)f=_^hS4o(hEX!*~HhlJX9*yVZB$7m^`Os4;62PT=y z(;OA&MO8TL|IuZHA*;Qb5g9iw2E3`C7Sa`9JB4?ea>B#HI#?4rbXY~O9ikcEf!Gif zk87MgK=hSNU-O&(lz|)Sk2nj999AKvM?8+7#AYB#vigL)JmoLnN3PYT2+le|`MhOP zw!;lIO+7TEkNU03PJB-gOgKLy7w`><0?LDnH4hLuly&`0;77ec43yyfjd73KhT5Rg za4b3yB*Ff~d93VV_c6OPB zxZg-X-xR_G3nS2#T>%P`#I&D&g~6ppOPGCKhMtM(&U`n!Tm{wlBk$L2#8;nhI~7@YKpt(h${0f0YI8!5UyRX zod3&ZZe3m7IX0cS7Y3roB-C#GrUK50n^fxU?`*}Nx~d(gt`xm=F(AI6a59vHO-h+8 z30 z&*wLOsW%Wr+rY3>>3JaiBQ2u^(Z3xe5A}=8O1>9EmqPRPhgF8!*B@VR%G-r}pSl-+ z|9*OU0*PHZi*R0dU5O3bT<$lD@1QYG@oYXY|5n%1a>0S|JqWCm2n|hTO5ySj?kwK2 z`O2jK9n1E~a*gU}MU5+=sWN;G5mhq$E60H?Pm9aJ#xK0Pz*>O`F8Zp$yzj$c<63_6 z7$BWhiDcYKV*P~&5_c~Ohs~RMwT=FN#k3)FZKU`u{*M4~(NZEs?)vrh zxx>f3^Ax#U9+zk=N9#)zi;6&Y@-4^gSx<|Rvz;6P=h$#!n@YY+S1puX;OP(U1aQON zj2~MPVP|7}?tMBMpjSbV$J+!>I0I%qN43X^2*^nAoDW;!etV6bjCO2Po$}8bqj+=J z5?wHCzRuV0O(R>U2CwF1LH6%lWHHkI+LNo8D&|*o8Rpi5`UpqJywi`0#o4e;B>YKD zYC$Iog^)Qs$v8-aj^@FhS8qD#X1~T_=b~G8)-=m5krc9FqeaUvFK!o>5qsiU>oMY+ z)^U!-EMXOUKp#WAgvt6cx6jwZ1w9Y>eQila&;FPSIh~D6(7n`A82UfKGztK~zI)HX zp7T3L>u=q%-P()4sTT-!LcC26spaVTPWux^;(mSYGTk7M47W0-XqcTTI4!EO@Gf_gK?J$U%txh)zc!QzR^AL&9*%82VO-7T9!K-k2 zayuxRHL1Q~M6U%W30>S6gA5#?D{+mp>VVZK>tKO1(Kaw5V?w7!u z{MtPXeG5_ZI81RRIq?}e&RXzhEw^PD_H9G7wZ zk~C>1c9$`ead~BD27!Y;1fs?q)T-Q1x%nFnx(t;8333F;YK7ltsiZCx-n0iQlA!h? z^NXeg(RY&YM|I+NZ2#=cj z0L|h$e}u%YxP0|Mg3|0>l^)qn(=K<7gNNF31Zj4Pdw_7FV!hZ=$J}?qX~2jUG!xSV zDwIy)C2#Z;bVptRgDTw5nvh1AB$1cDW;d{t6Fzx87aliUXJ5fw3# zCHJDQ%$;j{Sf3`G2s9oeSNs&|NOeRL1v#~AnbIOT;Bd#;$hfQ+F8G67biIj7so9hh z6`ds+^w*(L_mITsomBhlUq=EKGM%jeWOPm1#;q7&2QCCvw9bg)=YFGqg*F;`r9NgV z;duDTeiefvn$W0{dYH^tPWRg4d0t37x)ZXJs6m?jNZ}tV(3M&wG<&0r>UJ2+pOUo8 z(RZLv>NV{zJvesKW@=qVzra%1|5bx?e(OW=m`3}T;C)X+LFOLg&~^`#vXz4C;Xq@s zKD)3GNd}rvg7yJEC=gLF1K7b~E}?fj%sz%NJN7{cjd;Ri_c}HPm@r66o30{W$Sw}c zG(M1le~Kng7a5c{4vECkv1_qiGiSps^R1Xg*|>5TyeQvF$*5V`ugogMnJ)DEhiOT* zB(Wopo=MC^<0 zM<;M?pd}qxp?jg7*H1W;_a=xKs}|Q4<}aFTj8%?sC)5y%G0N04sgG*D8^C|__Wy7u z{{=?~8lXm#j>ikVc=YS?wcTw-$HX9s`>i&+Gc$FPx}N~Z(HPxQ@2F9LZsGwjR8e(B zY(5l5ZDcFS+c$tV1xPt&rr58EJv{Jco1xtD1rjPL7LsOt{ItEr)6_q>Yo~%!Qx|M8 zs3`a>?u0~_1vgl!Ex9xOMwQvu-ZYO4rvLN4R)C^lW=3UzsDc_F9PDg1Jr^AB>yvC^ zSX^98hz}B9_BS1y>xqPYdA&upD4Eo z3q&ATn5f{>SvP3X(>l?$*6B(!F2t<52Wa}7Viq^}?D@)yDrEkvUwGYP|#a4hz)TGDuU?e`IJarfQ>PTm+|jBW3db`oMf3jf&uD#l?u8?_}>6s zP#Y;5JNvl-gb!m79zGL;>^~8;E(^&2G&=mAt$>sac!BqnfIAo{I2epo=?)}hT#z{8 zy$!)agvC-B%J9E>9}C2Rt8jgwsbOcT5I#r{AX?k9AD1z`BHg0%)a`fcOSsk5hK)zs zEJ>uvn`}hhQ;`K{=Q6}S3bgQbIF>ir9B^?x)1eLCI#84Nc=;D*S30{zT7`_HV@89S zW(v;ja-@h&=gSK2C%^W~fzL`+iyk8fxh9`b4aL}=eW!=t#U9VHJe}N&)&}K-e%}{c zioNzfa(+dgG50)WX&(Fa_D65Q_A;geBsp&>z;m#bq-^irC@n1o>l8jbI565Zm)v+r z6dEwCt-^;fXTYlpINUt3`=#L5-kg7S6^hWnZ179#-k`*s zTI#FF)9E3@Q$Gh-G(&2&LpbILyTKF7%F5A8SdTzz9a?K0!D#1iMS<~|5VU_ z-Yfpy0{gW#qHjS?@WGt{bA+8Kft0Dk8*N~n+#Y8@kQU3yiIvL!EvY33~C35-?TiJKP7{Z zErpq%j~$D`?ew?ZyW6&(OGvMw>zxznxTNiA{0eXh)CzEC)}R6o)Zr{assJT+rew;+ z$?5xWP?B&CFGranGY8P`bf%m(_H`}PFQEy8#Ewr1Y(mc}+BoTo!{YE`+1 z8!pZ0yI~oi6b_^OMdcE;0psl0ZCr-2l|)A}oLpjVZ#pKdyNENY(=Q!8b^Sw@#C!iC z-PSj^`>*RETCh`VW*?9xNW`WI@V(RBX(^hyJ^K^`0B47Fyy!Z^wt!eFKB4UPQl@Ib z(!7UnEc@7SHuv7@>p2A9r&Ni*(R>$~(ZoRdRLWT2B5;NERq-r#LZ~s^Z;|-n^w`lX z#BUkrVUqJZY3<%5+6NP zYIK8-12(cI=5K;Mce&$2@KBu^_OdIdE$QOhZx(GFjsz>t;j>_Pp^-cve~Qtlm{;#! zb+!x*Z8`i{%2}KB@ZvkK=5MgSbt=$pdSafnTk}`!r^{D@ZQFehl&FDkIMy<59?qR4 zmt}XO-4aj%YEHr!OwD5Jjd|-*oK> zFC*4hcYM^inYROCJtF8>QTssCP`n_(cLoSS1%H@MA+sNIZ2r=4O^9cwU6n}=2-(h4 zJnYQlJfd$JMZvur2an00fZ#AxK7v*cx)|!3B9#->@jT`_&tjOReA5tKf82rE3NL~L zqR{h-3LPLlR|i)|o2+3oFNjmIm8^-E#?a z<0j7`SBLyC@r0EUeB4gjc#jJkpKH?y9sHZ$w#Dr%i~N)neawnl|G31xD%j&83!?A$ zGdCR{3a;d%ld0dS_g}YML48}4GZQY7+ zmmt!&i;_lMO}d+8F2kt=CMZQjulB~*rh?vra;!$b8iA_XXQq|w#mOsodW&&HnYKOv3&2Ch@^OsO{i!vbd^EzdI(|y6W+zuXiZdTc*tbiRkEMZm}C|wB3 zgr)&42ud_bh)6AqAE&4fNPiy7mGGR-W3gNgR_^Lp0leD`-Snq zfEXG1=2|{b^5F1zYwQX|PV8}L>R3(V|GFyVzl;ER(1ebc(6<2<;(t+iB-XDOUWkwc zzKR8(2OMsJ= zWqf+k%>{A{_-_vppCDRQw4VKq{1_}uZ-XQ1k7JQQs0x0o2_Wt&=f10VF!*YcdD6+( z&l33I$lw6ppDkNK$UFfU*~?DWHQm~vzMFLQq3RIq9R6Pzd)o9HM{;Jh;xQ>^$vA!j zeHGhi0V*r@Et@#69`~iuIpjzPSsTB!SOXTfQ7@nrzA_SyIGP|!e}&N;0;eckq_$(# z;H)fBEtYPn9<*BDz^!jy!Rm^L5PwaA_|}0*U+oicK1h=bM%)2Fy+2P33=BjSdO{m! zIV(Wwy%yJ`4r}XQdt@^uTaqZ)_!K_J3S~o&!D=Y6uckjfa)G_@aE{G0hd5b^9hk2^<-TF}d&myVs8I z1c`8R8C<@H&+wwM6hqur{z!AUm@{b!Iiej2)T4W$z%jX6>_2IedKo`3QMzD?vy9ZR z5D26HqHosd1RJvr!w0riod>7>$7{g=(HlM2yiqBHZ6e4{iFxh$cs4192l;~`coPlf{BbQJVV!1bb3rr;dof>($iVIoUR1q8yK`Qf&H9fa7>oHHQ zDNq>yoCr;PyJ&j*=O+s=BJRAiO(`fUZ952Ho+^GZRsH8x>8;}yEdq}bNGcu*B^!N~ z407ayWGqr>=|CwpU^N^49v)Z0hI(#WxRt39s*78ZK^vsw)2CMcAs@hqS((V#8U z+AO>Spb>}HZcUispBn;UkSU`HHZd>-Z95}vb#{$GE24Js3>OAxcBYZ&PTR*8rc8<^ ze*Op<0m*;>@PoYg;CVwzY_?MZ{j?dW5hCb8(h?%hL59zQ!%wvc762tn%Xt@Cbg>K? z?16#7VhSZOLO926k!Uet_tP3dm?2Sa7gsv;eK%=TLAxndIJpj=2%@u^eBL(`9|;U* zXwJ~THLo)m9~>ah1Lhd68$IJ6g zs8^FeM{yqwLAu>Y{&hV;H}+7ab1cZ5Mv=vYBMLRXt`2`x=hlQP1=A!HK7?{bbl|r% zYyZ(qud48M9v?W02O@C(cT~n zm8~fiVX~;SC^oNUaEh7}99nXsn8|(=qq^!X-y>RMe2uVyzD~bY6v%oo7QcsU!jARv zNO4t4Ei$XKt~Hoz>yu8EB=+@?Q%D$^SV#DM*>0}0L$7mTI9Q~_tpIpK>csrO{@oM? zgT&sIvDBm?)#d85tpZTE0;fPeqKMKVF^JpXQm4;OJv61JjTnK)piMka*B#d^GS0DN zv+DW)8U=cUEmoEQ@eS<5*&PA{CJ+l3H$HyNKe~8R1Lp_n(D{Nz?uPpW4*x@*WJ~#H z4;LT5tWNd~XN9v{J5_BFXyYc)g-^v;?j79AY!72B-5Qn_78Fa(9-o_nu@@Hj+zdWA zR{tbo@J}Opa&vhR2&RNCK$tuxj|HFi&`SIs7p~3V5tG}eMi;NVo6{vmXf>0@q}0&k zMtQ+l6N^f0Z9k6MSV#d{oG=1^5X3MPAlh6KONxTt!=F2cH`40cN<(>oC>AUBPShp} zpuZCN>4|=Lcf2B#8HLhs=9OK+p$m6bq2W2x=8Rjazs+;ufxE*BeB zl|ewV=E`p{>D_I(KL`ipH}RMCsDQt_I~vHyxmVDpk>8*AP1pyEv_n~s_|s;oFp?&1 z^AH*o;QUwMcU;u~(9bo>A)o+J!-cYh*vb*)#RW*<9Zgd2?g*|5e5U)aCkFy5mEBUv z;8-k+=o4qEAs3RN5e?b{U@7QqMnvI44&&5l6DW~=KJcI#i%im`_rqu+xv z;Q#!Y?7u(haSW|3M?wdk+$x*SHqhdHGup_luXBt?tGLs_X+`@xUvwW8v@~cD!Sw&N zi2r`QEAzcbjk(0xnqh zM+sgly(cVP1xL}X82(wxf3N=ErOX#Kytc8|_YNfe1_&lM&o?UG*g$$WMn8`YG`fx( zFa7DwIWVO&v7EzxoNBq|jl#gdh+4iqfesdw${qcDYlWg{lK5uI)ogF3tp4fK&hBm$ z3G1W3@-LtJ+D+}!T6C=UP1f^X1~)mK*~l(lI9{pq=3V%#U&qJ0P)j}SM7$ZLFrwzStJ~XPR-ES* zx87@IGa}k|({Z)}8A5g{VTAtC(Iy$9dZT+CC8k{8EaWP1JY(J-^D!1aAE~i0)2^ML zCJ6oN`qP)vzklf!iwG;&ywNQ7C%%{!msptN>i^B`h=qrAm66buQd4m=H+QoiMg6(6 zQl?dGu{*05&*Al07UdjYOgPF|#?tIr-(~lMS;g==KY3XmOw!!mzIR4swW3;HNlD1H zc$t==&_Z=(;ZfVjDA`pfZs(|Uh}q_1farnp{j6u`&#=HC^FV_}V$;HqEE(?LA$~b- z1a10$ZD3>H(HHF}oriOu$G*ostbAMo2LDE8SB@-ON zrr;ZD`Gdt-)4vt)6`tzTbuM=9W(p2N{aNXxrupE^*J5%%H@qX>p(JIewT8L!&y(s} zFEYNF0)YMDennM#1(WRR5%JW-z-{@y@(D3NL>P#{GcTE?vRBD`cu*n+_5n>}{Qyjo zGVQ$DzY`F3n{If{4O^vW?W8a|B2?e=b!>4nDEi}>_sQPv>56;pGW%tkzJMpHT-F&| z`aQo`Rhc^Db4|PJW8O`FrsSI|%Q~FH#>k0zk1#Z(IslO-dJ#7<#S?=_B~ek$zNO7y z8h`x7N*&aBpD)v>KoClUix=yi6Q!Of8GiMMz3a%551*E>gq3FESyf2+flTK3*IrLh zv>GRjIFm568y~7XU`VZpEQef1K|19_l9dUba1WtDyivb)`X>z@We;jN-})3vO4D2D z;9Gt>;FpX*l7r0X_lVR`&~X7S>F4(n)ENa$P*k(&yQ|s8^ZHx1=;7&c=@ON(W~Z+= zXe!rjWJKQAQ1iaGq4K`{@+HA<-AAcZop<94NmY2b%gYzkd;UfWx|xqSnj=l9*72;m zo0ae3_Noa|(m9wYz)4FPiq5LlwkotWLWzBeMikGov#})g^yTL7eL$jD_i(CYNAG2a zn7Yh|Hl`=PLu5mb;}Df>lq1K>YDsHdN~?_nFr+h&P?c^9Oj?sxxAKlc||j)?`v zgLajsnEbT~21qzmsZ5T_u9m!oIiKmwL-^BykJ@)5qG!8@TgRf9dcteT>GjkF9^l%Zy!=j1jwJ)6H@LnKK*VL%sLD|=*h@ktv?=dk`dFZD= zVbsr0bO1!kE|5U?fI3@qzLvGT6DHpbP32n$ha zu8;#jxM8-ssjb6bFfCwY%b1?YU6Pp9-HRd0F!A0Ia4;6AGR)kE-SHL8mFIqfR&Jg& zyy6pu=0NKc`MV>(`soNqX={RB=Gh)iI)%5~fgIt7UxzUN#?+CRw%Ob|(|DQsDW{u^ zJOAn$#Q5E5E>|!Kzv8f=dRgjP+3lzYU5LB=vD3Q4Yuingk(xh9*-9Ir0@`;Rlf0dq zTTbq>zxbjnlSN|sOIwFFFScug?Z^rpDUVf#49eff0(p!3Du758`hII29l|3UA)ebPhoiYTW$IP2@{cue;zhiFMP1DLrd(dG4lYyoO03qOH_q$i z4q5gsUtjaOO-f!7mtFQ6MdZOOyqQ`OwP`CCPl*Ca9il?108XbbPa?!E=X%d~<8(8L zWbvmrw}|pe;7D4lLc<>eKZpc2AOa#?e+r`?0AmE*;4(vrPEDlHr>fb+xlnE{-2i#e z0q0XyxL`=>q%zEdV$Oq4GX)DNHn5|rLt z(^o%$cYj=kT%#k(y_(!I_ALgB!4y;5a0%EM3XgE+Zoxcz$wT+>!O8=7Q}TZhIJ^Yw zHhi50T{)Wc1}|f2pGB{@wk`*-WOS!!=w>1V`2-Jc+iT835TBf(SWHoIDFp7Aa|CZL zbPc^i0|~KiFdH?Ryj{r6OMg3l?=^RiT82gG!#Q}?eei6PWO`DDkx<{3HQj)!6(c7w zer9<@0}i@}Gne0;GL5OwrnOJ;>|QHHBgSN}e*4%0L$S*M&2LJhboYH*+?Y=Gr;}15 zp*^0jMVb+PeO+DRv3?8Ba%a@h5fNV%7We!T%2!a{>(_jj$)8Aeeh+bh^VM(712>x7 zXCSR-d2XPP_N$S1n&;O$!HQ>Vj({1n{TV8)HDlWhQ?kp$`&>;a4;iT#0Vt7$=VpP1~HMthN zit{IsFouBdV4$z8=p8HUxO56p4djc%g^-|Q@&zdZ*Hks(wJ@lzFBFJ*B0o$T2>y-} zVbukLp<|mSkLzg#bS1AD3-{EH71?z(<|Z}k6cw^p37s$h8YTrm5P%>0=9{UCfHaM(BA%|vmF zERNDlV6QOy5o$I$%$ayi`qS|I0Opl=$$Jz$tH;*b31Iyf8PnjnxxPk5x!FEld)$lH z-6;9CC21=B@WTgi~H*%0@0vchXsea_#AdeLNrHN`<5I7iv?x8 zqieOeG4ul7JMFt5$NYvLN`{ni^`xIvuV}>8>9fRvu|k~pFP}HNiGKjJw62#`EvgyX&Bw#X#VYA zP<~a=e_-!CD^#$%x$_T>UAFqE(S%v+Im;=Ik zdi;4Ympd}Il>K)llH_thoGgQBG(XlNinZ%y=eVm@im$_!`W+s>Z;@jqK~?=*xd6)I zVF7X_h*rNyf#S@+69V!X2GKqw%?a}O!`Kt;7_L_0!@`Yth(i^!e7tZO3^lLgp9FZK z_N6+s{xFsNF?a4G+oZ0~N!qpEHbd3~5&L~_9CrW?#u!>?`bBI$MgF06QsAoIvTLtg zJ>x5gKvssKmB15a!6^Ci{oL=M$Ee-iKhD!sRgvLAO)!BznW$FK0Xgh73`piud%Dd> zl4?2}h<12?_=3q=wMqyll*{MuH7N#6FU>>ugFe;&@wznV>)f>eLBK$NFtSJe%j#wh zx%Rfd3$Oe??|0^c4Z6KM;^X;Mwb59x{5jeoI)sBD58&6ZW~V~`1LK$=P#yZ>UV0}m zZd~qZJvdpL9_$8>HLtZPqu$2%P2ZXJ+Op0JzcTP?s$P&JCcR4f^)tH1JO?!!_nc8l z5s)IX`|n08qN)X{PCoN{{*%dAfWZ`s{%4Qv(&d^3%Y@r?bkjjmh)-m-+u4EOA#ob+0-+f39KS^>?4%YmP)GTjANnB{})++=UT- ze1WjRWx>*vNcmLy4kVbBfl9V5#zF}cHyq|RfVlNmZ}8WAp)s?3-f<#`J+FJ{%d%P#-=j*NV$WcdX(m|Ay8nc z*U!Rq>9<9V-GTAA3tI|n{og2oU1HRxV?}?KVyDEF0NgzWV@y|WAf19dgKr3C!C28h z_?3;~zyI;y6}PvmM~Ri2_w7-R;*H+iQJi99xwo799D}q;bKt2x?$WHiecjf@z_Ko< zdU{$~Y2%oko+-2GPDiy1ExgtYAXpR-Js=wnf){|TwErti@c*m$B_!&EYt-BgWX4El zN0|0PK?3)7byAd+lr;F>hX)Q<^@(P&R+bY+Sajn1_^@<0507Ur@1y86TD48o<%Eo) zNYM1N6swm9Ek$on4sP>c>?Asp4>VNy6vhq+3tY3zi!_5;oQ`GHA5z37OqxBGbF0y0Fm}Nf&@Uv2lC+0 zK|i@!SxZDpju9(^rgwY3zgp8 zX|oaxJZ$r#6hrDCIPnd~qWm}y4hV;q$V-|XzR{VFzT>F#CI1qLW9#j8f8x*{2aa^I zKQ&FgY{-R7c$-zg)fwAd{u%A}I#oGoR+n-BIB5Y2Nzb{dsj}@1-g-(}Po(kq6unge z^LZj!Ujx^fC5)`IWX|kRA@!vWL<&CuL;nv8j@MQqqQM_o0wfIU%@+v~qJQrEQUo+0 zEmJ(5llnhEt~dxek}LGh4JCpGYR&s0@|hYjYt0)WqFNFj>@!bGc6LUp4R zqj;#!FfMqrBecZ9g5y)tN}MjFG+Ghn;fC{;>}RmR1lhVKQE_H2UL(KBuxdnx^h^hN z>~pel;+*j=HAIwBesv}+c#pXqL-c1H;E+Pepl>aP9v)h&V@ZjnxPAxo3!{c%td5r4 zG2TJ}WDQi9=Lz$>Wta#niaTA(mb|zLi))xQ3jwOFJuOA| zkRihi87ifjX79V7X)fR-C!*HHYvP#i>i+_B%`Zl6;D_p^GiG;@VU`z-bM)>FakkmV zCxLiY6E?y$P=FzSs4~zk-7!RWHVtNCY6{iPMed&sg?-dDH=y5pplr563*^AxgM`6P zL5u+z&g=?=#J6D9hj}tv9JiKuA_@8KA+!bV`SB&A035JBr8nEzoxL-nM z9Z+2+&Cy5Zp{Mwe)U(YW>_G=L->DfW*iqt*Jafx8x#*aA2^Thy>4BX1GIb$)nPg_& z_YJ;8+9RAdr!##mNYJGy(MQ@i&VYXtquM5=I3@@t%J9e0N4i)=kXJ@QD8aJu^6_0> zUKaX4A~jo5b|@2`@Rl$C`Ycs7C&doqHd(4?4$4>^hxhrqk#zI3vtw;fH%B*6G)yf{ z=RJ!$I#=DQpN!njmQ;3dw3@ouDQ_{+{=itFg>d3D8a847Lh2F6Vc;*p@CLr*UFs${ zp$}%JeFnumY1tU;<9}@U3QNnr&8pz~&* zykhTM>YTzQ>^f`I9WmhqzAy&aY1J@FU;q6wq}9{{{h*ZoE{z zK2)uTe_Zu|)FXq$4M6;HEPlTpjA}akam@!3^8exNEyL;vldVzQg1fr~2tk6o6C8r; z1_A`P;O_1cJU9e*cZc8*+$Fd>1h@^EduGnL-*acq_m5|@dw0LmZ>?Ijsw%1Tw)vzj z^#t6+IDg5|>N!e4t|>4G237}Sy&tGp{M)>?P7{tP(Z(qj{*`h!R|moa;Xprmh&gXD z9H8xdEY&G|N3@&*IO2z{wQ{dV`f%GJcbvUu*61RoRU#dm&m2Daeh`7_*~|A02E>^?S!|FV^Sw>!LU;df7Fpmf*IgNXNCO0TlK%* z1^=4Ewdx_eyihcXhnJILzE2_B+At zNBm<7_YinxJAwm4cki>k&sKH*lxoxRk43K`K_LF<$A1D|HbQH>cXk!k&S$+$Je!~$ zLWZfe`i5hMM_p3s*C&(o;iP*xgGjUD`ys>kCge(b1qJ=cam|z7^-Ke&&)&!=Mrj#E zsUeM)_WOg%2&1|tmdnv$10OMg?y5OMOU~_thvw#ovX||hF(p99x-rc#nDh`aIhr1|pCDQ?SLHGW zj%_j4mBu|TbYvVEw6j)OE?3XheXTU%P9DNtaOiCtUuG&8nNp06R@lgx66bjZ2hkAH zDr@WBimIyDl*EWl{GS?Y*SVcceV98>44W#Eh|h?XrLw&#E|cTr6xJ~bo5b6=)$!UcyT3<9?^ zb4)=kBRx4IBU#J#*KpKwGtJR|1rY$q^r2})_KuU8uexOAHWS0eNf~&nyfM|C5O_U0 zz;t*aK*2YlwaS@!@Sk0K zYR@lPh@d5+VR=bO$)Qry5_&0#cT>C`BuphL$zSMx6qT2+scz@L9S`EhQl(PUO7Z7| zAiB^xmQ5{o)}z9@QW>bD{H%(L!)?3lQ7{hudf<@09Bk2?mAgBByi_Y&T>H4`m+wwP z!(r2fkIaRAZXx^fviOV>7k+Xu!R&58pTTEK3Zdo%1+gf}9J*AdE^*TMG8@qbJ#)x~ zX>A;X#6lK!+lob*+%XuxagavZhDw$*!T6PB`}+f=JQNk`YQ^HR(@yOl>+ym?ImrRb z*wqh^4h7LRwqvYu`befC|G<(o(1}<~GyVlRAIpLv0Dt1&>L#g^!i z@PRPQRIt0u;9p zV8k|ccGfa?%3{gS3gb|N3-Q0Yp*9FYQEZ&1`cy~kEQss>l^jq;B2RdCf)7=5q1#3vDQK% zCDSvl)+1m`55GCo?<}<+V+)GrH}&!zG0$9#i^j1c;#yTUkpCzgf}J!O&+np{@}DOl@w5>%UBf zWJxo0s3ff6Wu?d*!=Wr}j%Kff(uU4Q!h z7CnXouT__rKR!h(HkFbBmq=wD6JGAEX;qh}=bQU4bn9G0vucV4PDc500?NdW0*eu zb&gn};g|+y%Y%Xc9vr6nGX}k`I4)>RI1)L3M&aP{cJ4)a(RqqKoyo6sm;maV$og<> zt~rgCTZ5!@+X{Q+MAOsN^INt3(QMmS#4)#qz)RE-48=-({T_F-^3l@dh$~?~_(*OE zw|fWARVB}CkHqUXo*Fpc=~S+q{7_iB%R8TJ_PWp#_Wc${VdpJ|uYs7DYxRX_@qy&Q z+#vSsPge`WtUJkAssf^CD7ViknW(ZmF-+G6*j%OZ4ofE%{AAnPJwl}8cI0bCU$^V zKj>)*8gr~%#hb4?*09iOnqy6uF+x0QGVnT2<$GlgBH&|^LNPEf!VK|AEK9s+kKMD8 zi7h#+s9({Q%S$|H{NO5(3I`XG_jj|hDA@miPwqX#(_20M{Tyr|eYR03#&NtV>+P)U z>|AUZd;KSohh3m)TQ^ibnLxJ&!xISM>AD+PIal)Qo96^?AGkp4$$)C{rIi8ZOPBuV zoK@5M`9N`I=CNGZ?^U?|^Q4Z5ZRKSHa_Bd69KUiNri7=} z2t7vt=CPH#W$Ht7tDB=dja!+yqXf<3FTUnxbL`y86w#YVqz;=ga8;LD0ob&Ji}2z8t;<4LOg0K||mwqP1B=#DB% zt1aY1VcW57gjQLh@(#88Xf>V6wZv@RSmK1A>SBX+*L8})NY+N;A^W7GmC~tTO#v*3 zw5`(Vc_lbvKkS5osUxH#Hjd^d zEP8UW`>xmTNncd4u&^M|)mj}d``r&IMaUJ54h~GI-=!12a4DeZPYR}2fzFVy;SlL{ z=mlru0@jyWwRs8mpn=l2j5G7yNo#Ch5T?1?Fe=n=b~58ylp^fO0^zu?T<}aoLI$~9 zIQiDt*p$r{9TK4N@HFy}X1r&Me#Z^}n4Z4{3Aq`W)^_I7j}8tE4Vp7GPW(MHd{nYK z%wQ3tkj%*d)f`DmQp%a^7Xi;tdE7p=*qe{_i0mZ%dS9d(KI9LhH$Z@y`IsO$3J5p0 z-_@X+^Oj)n!xO)6SK+cVu|p8>qT+-~#$5HsT2ow^^O+0ipGV06SIk_TAbuxcn-(N% z<)!EMr4I$tU8g@YGv*|S`Zr3ekmi4ib{ZTcEpoAx55A@_WNdtaMNsYwbLgHxF$E~atq2Kn6a>&MwX43(GE7O5 z;D^mt@#@Q2R{kiNm>M<@2vNL-oQlq_pPW=&)2oCr1%^0(yd?ulcJI4Eq)yM( zA69a^gXsg)X(8no!h8#7aCxdA9vZ^;-Z73~N1RDmsGOtau(R|hhJVMa$hIBBH;t;Q zgylD?o$9x9=YU`krnF=J35k-hlmvyBE(F;REEi>@D)`#Jmdd#Ble^ zR`s(7y#)dT-RNWl5EKb^v=gbC!hY=13J3!8NDH)V-Ugf?WkY4f+n$TBEpO=lT0IEp z87R;nr*9j(cSADA;|~s}Yj7HpV|idOq&@MrpBx@dc7#?7I;XbiWy&lpT#kq1melIc?Ui>f1XmF*^i3a~aaqW2k@N!6L_V zIF8)35adz;EbGeSs1_y#-w53 z$h;Lqf4n6`txz$c%(t}&W+Y^a?OxFnWt~LydGPKOc7(z&IwE^d*v?dKYWMkOs9<4> zV^hy={YFsWize zgK_H_&qQ3Flo?x{aY3hSWIrHdoNT@Ac@0zwAaHk|H8rsFbGHoLiIZp#6b<|Io|^%f z{4V0!1KSbPTVMa--C=Y?zfYC&3Q7Wzy!m-a{QodYi<)rZ7;dzWdg*2 z!v(@lNOY#IV@-dGu1`a0YB6>!9NaneYtY1AqCDPiW7|otI z0NpkVe$|Wj5khj?H zQ>EFR9b7sGA}+enZwPVDaMUV}V2~ILIYEoFizcPKA%yPS)qr1a?R!isRQdMbxJ#Kt zA@u7jfKI>dl)QNI_=-msUq(At<}&YfuSohND1q+44EMg0y(0lcalXSGD;+}!in>R{ z>%2??V(972rrYL1dIX_87)$lsP->Ze(-%8$C_y009hBNb<*k2^MD&0o`2XG& z`1b$7<JI$l-1n6Jr=z}I?uIiytNI(BKh z{^$evag3#pH|bgL#1p4`Pm`B=>l~`|2(VFPa!x|5cB|7Bqux)e7rbGqEzJN;5q-)_E3 zZZxv=%W!i#`i_OouF>teG_RVVH?!5P#n$Ta9W!HtCQ%tF)GtS1I(}BC{rqE=#o+}E zPFug>eY=yq+>f@l4dtN;I-on?rNfsYrq;{hKPeV)zIB%Z>s1V7eZL@Q1o1E(o?MF1Q=<6x{n)WZVFAje*7NPl<;AVhM zgl8%$DzdY;-?om)1X@pSOPuq6ZaIE&fh{asknHA+jCtJVR9OpxciiT}jOz$0^nVXz zv0UVgCEsRQR(jj|nP8(=v0Y&$x5P%r>!_B$m6nnO_^Pfq6spnD@mf=J>WL#G_YiGG zUq6#;+KjD#5i=83`ncHI?03hRlv4hqd}#aHs0>t*gXq{&-_&HM`_nR|o!21iX@a^S zUQ#+@m3d>v{@p5<(rv>PZxb%c#oGE@Ww8a z+&ejeHC+3qGTS2$J(6t26G}f{MHam z_v)uuDekqBh%2fM6b}VRse2@ACfr>S+N>_uS$GM?L)q`0Mq_V{h^$0hq=aKNulwBO z*7%-DyU->teI761#OYwV;-M`33ve7xE-*jp+uzzI4Jc!EH0q*LW*mB3R^|;X#jY`qU5P;(oV(ePw&`j~*BfX~DX?uC?aK z-neykA!|7cZc4sim94E30U^@&hwHH+i>-1`5NmgW;d(=Hf(3sS`51?W5&)wOC+qLw zp{1xKWlLm7SFjHQVlc$_XzQry-@LfvwTgO=s*MV8bFFV6HJtwdJ2IyL^AdvHIZ|X4 z?<`7)X8%TG<4Jkv12VatqGuiqb38V&2-7vL*Li@AsbAMo{x2QdBk>P5 zCCHz_0Quu4^ztW@qeejIjm;|>VXpRaME(vWBkfV7mp<7hpi85NQud}tCUx*_3g95F zsnVMnbckI~rCmrBfMXgeN4ae&YZ5LASVKchyUWQF7loWO+NBtnry#2@>Slf6E_a3K zmYTrAZ9*xVcDS6%wcj(>KkvTvLAtdIyF|~KVx4e`P;*f-RP1P&^?^c?s)Ko>z?>}^ zmOGQ0K1Iya9({>0wj}p^IMnf#Z+B*aPDEk4bZyligzgiJygQ!cU~{?J6lnK+I`7%q zinlhlGg#V8O-`{vLPpMpanm5Nl^?PP^v(S=ysWIB7=t#iE&Fq=jXl3lSK+^y$$uXp z)dgdsWVb;KmW^>v>6w(e-H-o7gVg~Cqhl1zur)(}z;4a)&5$pUA%G2LDa9R0+&JO# zWP)$3)f{J64SO~{8{W#o*V7$jyb0A3gUpiwzH#Qu;^XI9xNV0L#p2t-!k6ZCmP9&l7uew#= zRl<60#UDy~0*&t{pB6fxc2MbxWnWfuJ#oS*5U);{hlgN(r8l*ksAOPtrSd|`$FKDW zbk}{jRv-0;dQ7lm=M5Bg>$WfW_kPyr$CR)PC+oM5VOu{p?455xP7^=BaxR|RNOMcQ zo>XzP6)E5%x1!HC-!mRB`b(ckyr8U=Ka(i^(5;Ph`x6)GK1xjEnwEjLdh3RjuJ^V^WwCx9Ney_8xVYp=3+T57u65Zq9E6qvfC zcGq84UTklyv;HJ|lK=j}Q_=i!@Z00q^kw&9$95Y{qxtS%@sXsD7?%2#_gT)FLFb-4 z&l-sj;x^4qE1pJ_?WRE|Nm#jLyQ!7C^~uu>4d9L$e4!((tW|*w(ZMi?Mx6x^#HZ=%a7|9nE~4-H9vtX? zaYYAyEhNv3;kF5?qC6mB%GhGew12f`q|h5LvQR{C(QAo6R5~oaSzv(>#P;BjZ(}JC z6u-`37b~0eQ?yj>w;aM`C@fLn+P1S5iu?n6(I^5=!{+aiRB62(_|3a8-n<8BNzk&` z&f4kLG^G-yG#KKqtV0wSiL^(K^1LGD0)a;>NTBPl8$j&*EA8y=UHP>sIuQi|@uoDA zVk0?Pnok5rp5zmlp;c(E^XlNaWaw6{{OI=>`ItXH7gaVdbN7pK5h22_9`c0M{t5xr zfG2?z;6In#76MS>F`7A31ukS%+-?48#o9DQx^$oXrbt-YF|l56vxBJHg6@Q?J6M;KV2?8E~WtO5EI~KvsA@jHEyx1 ze4eRgU~0X;>H<@9H8jO_ZEHtJtm67EKLW>;xiSzVqT&{12`hgIIhID$3n4cTTbQ6M zn*GK+b4PKT75~FJQ#zod3 zzCh3c$hV0vR?@7mCG(pL{IZ_Q;@3J^)*)N!C2}vp?Grl6ZEPuLc zHxQ~Ugs^K&$3;|4+3q(I%xr==>5G+D%P@>DxXdCv+b3&2`XH48o|yY1^;MlH^acv< zx4`Qp4YT*F9k`icI6XAMiub^E}-WkVWOnTKLbiAsTNS>tAq+%_^E=4 zn)Ybq@M%~YWHWDcLR;j*cl?uj43@*$laP5|DHJO@esFy*jWBOBm~g(qR4?iEXAa`p zKEGck&l`T2GE+{DflUkya@LpYjq*TYovlZg4m?b^+(5{h{Oa&CySKvm*9}g4v&x)n zR%_-b$PWWw#8JOtJ;{?r?7pPL&*TF>n)KJ;&)9k|C~XkQ5v)&N2(2*ps;U+Hnw)>c z;yavCCiG&4Zrj6R`3_iMDK}&WKRO|t+1Y)sf4omf3@AZRq4hp<$|erkjEs>h=P zx3cuin=ApW3TgJgEFqvR_|MShG1yc2X_89}$PdRWvs>>032tp?{=Zm1?_g}34mci< z7)GDV<=muOW@9*1oWDsRZMSSA>|hSbDzM5vjaRgusPSU+40uni!D#PKqNfS|EAb1>eR5c^4L> zRpl+m057Iy%5^%1&Xh!e5|~Lzfe)rsoP&{!6qFeEARV5_vm0TRA&yJy$d+2T^R})5zAq zU?f$4v+afO2Qx5*%MC8fxWLUIhP);&_>#H334VZhDnSEGR^l$|AVb@W^+&D`Z(|*< zz*?A}AGl^*Aq0dcj@OatY6ygfmasobjA7e}((V0Vj+_T3@gtEr&(u7by`+ROGinqJ zZtdklmoI*aI^M(R5~DNW0>HGndepjurD(oUqnCqH}(Ad{NKwIWCg#b zS5~Z;=5ZeV+*cZ>Uv$jC)1el>R9a}X-yw#_1%-c_@mbB4R?mL1Yje-lrr-Yov;Z7T z-642LeuDN!F8L%CkkXY1XwTNx)YR4KHai~Oqoi+UB;Of_)d2_;N4ur65D$-+?M1V2 z*;df`3S8A4Uz{sV;!0jHCf<{i)ncVQVon>7K>4X%t@*Cv<61-*bb-K8Fqe6kqfQ>T z{>81qg6Yj$TCo3?q7P)B+CJW2ZA5%cs=qYmqkKbsh~mTATBgTW;j@Z347g;{ zNS5^mkB2%6UZibW6=Fc({omng1X!T7?Pvb6@nSj^pntEX`{rYLNK)Xf1 zTECWf7~vsMaDCZm(?9UIk@5*@S9ZV(~UKtAu8|WEAP=|=e^WMA%&Cg{FNE+oL zr}uT_Vg>|NUaRWJnz#*{)!KKcxHjubVI#-!q&}YniQI0!b7w0(-fb4IA!+nIXxW4w zA>e_DI&rJu!rU;3uvD7)ZiS>bj+bwWWj-X2x{Lg=*4yJY`z z$aOgU9Cl#DS64Z#susACJb%bL&wV{~HSsM)hek7<=F-s1jQF9RAjkZqul+^MXl}jm z!4PnU<_Zx?xH<$YHqxX5as$Tr>HPb5OP-Ig3+o|qiUrdf*?Vd*h zz#t1iZ}%D(QbXG@^`m2Xo<5@Xa>Yb;l0kiVa5{2h6|xtU68GyJ;2KWPC6I(z%pcxmk|d zmH$X2?APi(%n{uTJac&<&UqUp50Q_hlEF5r0zAG2>{a=6wmw-2vHZWg%xL z`%fWFbtcLherHjdkA>#9Lj?g}p3A;xP`S95DU1Sg+5c3n*{4%b$-u$N2S_j5y62P? zC%TY)SK8zewGP>CO;op12kT!5e1><++~TB zlj)Fvwy5R99dCPocWw^wbz*+8_J#(`K0hk*FNuK z`uAA7KF*Q%cslwS1*7o<=`Hk_^^I>y;?_2Bjiw%-sxJ|uTJ)oh5+jHeD2-s2{K}4#s9g}-nd1}uyp^2y@bUgp zndX#`qV;PUsNVw6=KSI+t=s}cBUgS)arKz%HU6`z8)AtFTk;tfO=g;|hO6N!0LH7)Y>|&XV%T`l+ zEY|^sABE*~>j?24d${C-h-;>Zv@+?x zuef%Xv)EmYGXJ|GZcC0G5RJ;<4Xw+q>nr+V%&v+5M2bUaN@-|r!$Gu}^S1U#GWtwd z{&PF#(QP3XU1^b*cR(Q~C0fa9%|n)8{kQbOXWkya>)a~jd39%xGy=&vNi1*Xqq@Z- z#&2)FAMZ7HW){FXzbDK>xm^ZXgf&e*2dh|7^Vx%N2_I%l$J~MGI=A46PF^ zTJc^JYaTe-Hv3>T%zg)!5!3II*s?_Rbz1}cbI!kI4Q%vYiv9elll1iDUrDd+u>%VH zW@Kbg-RBn=!*tN9{IGjE@XA;SCNRnT_XRJ4H*xBHfvOck_f~BL*C+X7x2sPRc_rQN zz$mT)IpBDv8?BFR-kZ6ctmqhez(=Y1OE>NMNDvFMNU6o-{L%AQ*isin(>Rp9V-bUp zQ(&NC0@S}VzJJxfeQC75SZP$*;366m`n2*NQEz<|fA5n9UD<#of8r#%vzT?>^8GfA zE=xepw5~BJ@M;G|Ux+Amj>t*Y^)7@62YasK9bv$H{x4i9o6g2qE>zSGy`9sCWA@Kb zb`S18rcwPn7cNW0dV=|q4MAdPp1k1Gm4(}U#I=&NrYuc-PLPaHBA-!+w`7%`tk!f~ zT$plSic{bsw!aDML`^}Bz?!iE1-N;Agm5}B;IHzJ8k`IGbvut&A>mpOcaxv?r4-`L zX$2%roFqfnd_27^6+Tl>045nm&wF6vUd74-fW1qQ1Y_;abXHcyo8Ba}_#tr`^eK@u zfd7>;Zzu;Gs{OM@0yAm=$^8FU8+%jkhPVo!!R`!n-V0?n)Cy2{O)fizvqP60DBbt& zuh$JAkhQdxE)0ea7kftqiq|7KbTiu!*Wqm>SK`bKlY&s8zqA=*;CeTN`vhvb5~AfgI8`t)LRi-qHWQMAwLdS;C*!? z;y4%LB?mgk`)$I$KgRxGQlzysMQq3y6-tUnIZ6KG%6O-yf0X9C?mE)_?QnImw$EBk zwQQj6XV_QnC)XQrmiq$j4vKePa=QL~S%n=4m?!P}`mOw~X6mg(m5w{9DEH>ZG>#A@ zbqZl5_ZSmSG4feSkUq?Dz8J%aOG;0y!ezYO{%0tr&G(lPmWCAEi{*nikSO}CmU-fAg)YCf%pP)-`5pp67L%*8A z%WMpFo3C4%OrM8?-Ge*2zsW51Qqd2P$$x81g>Fij^$JINNu%lrQ~{LsB8^wS>??t7 zm7{j=`IKOEu`@G*1B>3i|D2r9vHs>Df8lAQ)+5!-mBVBHCQS1{zU|N}KOb=E7;nT@ z&()n2sh?`(KMFlTkOjEkol4dq{rU%kPW%x7_rEsnIi_WRcl3pyw*dJ0G3U`{+2aLn z>$R-CI%M-3K_rW#Qt_AC+vv7VgVR6kOp{8c{z%J3ru3P zHuEz^(2DzoY<03Hq(?UyP^j&HgTd*Um23?Cye=lT0d0Io)k_f}pE+n@Y@n-LjCRbo zZ#a)Xi{=2C6qw=K6*R$Uuhrq3myDbLI4Rp>-nx{Ah;+A(2Qn+@vZ}CCWHe9Y^Y@B&Y*Z^A8iCSWUE?`Q;KoD)7bIe=P`$oWbSRee?;am#oamYu|9|}BFKyd#HMjq$4>cS2m1Si$TZss-LBzX~66-$|Cc9Wc zQG6+9ES=sfvS(qj3uPPiZf~t31@?=4se?2Qi4A+9i?nLS!Wv>lwALr>l4{uPk)3~v zkaMEK0TJ>i!pjtVx>^_yhf0eYSYn%In8TEfmhhVJmJPF1fga!Mp%w-(aaCR2+LaLd zKkOc+y4c)r3#XeVF0}ok7Zo(MkK#W8`JZ9*+tV$o=}B^`Kl)BHV@R0D%wEOrYad^T zhQiX)2o2XWn+|X04Ep4gWJ-{BrN7~usW^)Lss0WE>Yexxfj%As?3|pO{BQZ1pGW7C z`e||qE3XFMii!f!*nDGm;)k_N%P+V{yEHINzpwBzW^>JPA?GFf9~CjKnk2?|Q%*zR z`p~qXn5e}Y&nnDWh7yZz{$o9ezLX!2{IKb`s(pJ#Qc_yZ40~Z51_o=nD`OOBHoTCK-lL7{7vh@w8@~F0hPR(7G?Jz)alM)w9_tT%8rLb+bIlB^tR&G) z^lp=c{Y8h~CCSHjvidp}l-i9Uv(nCyCGP1dgdzuSr0>Li>E@_RKbR$x$RGkgYuuby zpVQU45`Fj7tUdbJ&amtL8s;Mwdr6xFRAurm#-e@9#K^eLWl&>fD^3D2nt)O1$NtQn z(@=*&{Rtp21~UV1ODsv!lJTCyq*PpceRJC2&5NY2bSb=WXPivHuIRC68@37NvKfB@ zJ{+~NH^B`B?!`mTUXnOKHN?azdoh$_dS;_Bl|^OFg8L9Ax`I zwJQ4jdyxrHwhg>Pat0C()t@Pzni{*ISN5|CjlG><&Mbj0a_6!WzINmH)a{TpVV)%p zav~vfD%wu!9DGl{G`Bo95VR^~@pcZwlOtGgA?%}7{o=vZ#uN#Zt#cUHk~*{-)I=XW znYpHcCZ`xWf@|w~zy1=pchD~75LmZ2sSJxGT2JjMUg#Yq`#|PLAX+e#9P%ay<#i$x zUlA)9B*HjEQWnEWxMRs05+n3Y+gUFt~5%pC2ZfV@OUi=9P3?-l{6cVkk}WvB|4ax%`_d9 zY1ETkr+>YvSyt83O#Ee3xUZU3VwP3YoXfC^Qc;9ijP;#1AV6uuF9<;?^OjaH{u^yn z^l3Qw78YC*skX9l;qlVR3J+HrB@J08RP5;@{lV5}pvTetgZ=2;W82+PdYq?yIgGH8 znq4PY%H*$0c!ExSi0)~{0Ein+jcGA20r|Yp{1Ch{lbI6;L!n4;h)vlt@``g;KZmTD zdvk_^(l8fVNG|6`H^_(Eay1=j82cf~oFmo4A*xkA1{K=LH!9jUjl{1}@H55Z_;)5)g0h<+kUC=#4nE`94Qe?m;m zxYX|0{nR5?v|TFlyGi;xqgHAlc+5(^7Tqrxi(cLC?qxV9(0%|V)9@oh{JJKM02GXN z6Vv{L!Y2qFpVo#i8Y^bsf6ePAl0gLqr&-K>*Ib+n6vCU})#OGyZSJ_$a|!I#JkUbL z)jU8ibx5AMPno&TPlW!E$Waj$_I1W+9G9D#^@&RU#Kw<{(>xVX5S$jA8ccn9BcVr& z`{!;?52-K)`&*^-inS|I_WY_gZwVG>neJ2fjl11l!0t=D%Yl=lML<00fkFtTBw+3= z7yg=TJ5G$o&HmFDntb1RI*T55(#WGx|MafMKMT|<`#gZaYb{%U6d*28j=_vQ(HSz) zIn$(NyX$?v8x9F`F9;P3hIUHf0|t-yhfdU=xa%9Zs=7U9{)DKAuJYd!Z!FHS(-`#h=Cr`$GMj7}D6-Ult~37r zh&H6Uwx0)u!&7At5cyTJ6$&c3@D<@T3?TeQ_S62%2fHJSo68Pzvm11wzp=I9+mr$^ z?%e8tT2gX?{GFvu9%Uij^aJ(~80j+U6AgBu4m1<*0!Q!Vzmae)iR!|IPw$uQWI@qwU)hDB;?|L&zx7?W`Qq+eW{AOURV!?P zYeg2{>Cj6HG%J;nM1)LrsnjrW;a^Z2F?MPhrNFI%(2fvp=}6N*WCXLCFLp2IYRtaGr#oSzMgI^^HG8yOT5s4BYvc5g^+)NMwG# zUR%DzA&5o#ImWX<%%Y3o4HQWxb`Mj3la7{h(MW4|x5GE|#M0#&$=coZO`-TLwD8B+ zjt+U{G^jv>^rpqP`}@}6uiEblKrePV?R&1aDQi!@&ClM=fRh%9$zRzj{8FS zjtasP2e(|?$}jX5>4SKV1D>wtL8$nFRTZ{|bni!|pMSVRm ztV7mQcc2+k&V~+XP=zPXRNOTyxEQ;rnM$f4W_GA(EZ%9Og4dG6*fuF0iBQg!yDFIF zPj&85ppgPIM*1>iU%Au&m=ukp+)|*&4gNN%^o@#zIQzr;D>or5?mU!$pf+OR{^#KL zPCY|o>L_@11myD0_af3}Db3tk$Ynazy%;sKaf*jITUs_I;vRT2Dn&%71h<6@OwQww zLLmk62?twKT-eJKH4YASXWuJ>eXy=C!;Q>Q*a^5(&D*vm^dbC6gdJ+Nc|a_xI2qWi zB9#47^uFG!(0!?5QBF?kXQ3SGPIG$SHwV{`X82$ZtRS^Q%a9*H+H4;x%j+=+ zW|B_3B&yNSqsIE}oYsCg_C$y7bYE2B?T~+ABd0r#{CFqo4TtK}fd&`d;f-PII*v`; zZhwbG{^Tu!nCdom(*FS=Cff}0vCAcyo0zm% z@B)|QojfvMH@~1ZcA(oj_eaWc>V}oz>CE@o?OTd&>-24F zc;JZ<+tZkIQ~OV|`<-xVOfA(p!UnfcGhmYg!vIHxOY5+4Rp#u%Od1P$R_;a13rQd7 zp@rvf8_ww(5uu(MkM{CHC{o`+l`b2bs3M)c+U>@rRUC3UueQI=0VXz%M*g%|{yl~q z((=>mFOs7wK=@$b+N9rBv+ly)DZtI7^OMI5c{#Gf8U?OGiwjy~6r}-o29A1nDpUm@ z@b>wM37_ZB{qhP~^tlqcYaA4}!7}0DyH}o`$2WvuXR_vu&~e*Vij*^6u0qv>f_TT| zeMf4z2HmNXM$)9{-=O^}JP@y2&jh@Hm5 z-_b8m-GcPyD)M#sUwnMLm@$5|wmt$)w-pGTp9AQmw8Dv&d^LMQb>TL}zsm3SF;(nlZg2yh>LmSk5q zwj<-Z{yWi^!=FPUoynM+;TvvpZZI zL#{!Ae20^ZUnTNF&5k&7!sqAiw{iMYTxIVcIOL4n&GD~ma?I1ui?r)qlMVN*-#6Ok zBoz>FSgFm{BHzs+zDL2-?ETkyHw=I01Y4c;D0PEI`X-0kzE z=+;k(x}}CH7i|lJF4>ob?zSIP)h?sVb_l&eEOB_RT0I?5C?@Ofh}R z*FBP5`7KtgTB_MIyRz)EqV{9+nASKBfD!wupURsdgi_@p{K8RywG<_7fgf(^u(>ya z_XQSf?etXPzOOzD>4Ofn;_%WUW}Z@O^F`=5LU%W{Ut4XSm~~AM+ZF_5^Cg}p0fCk# zK0z}qbvMpjvB;s3-2kS_)j|R!&@FhzbIMS44#ZO3)%`mw@xes_A;B^ok~(#C&%@%2 zsp;OXYEq+_c~t9YJ`YZ&7v+Qj@$Rqsnwou{+={-_al!Z8hU{75Z%GL6UGH;QL?FdC z!Fay5XBjt2Is9m`1$mzdfeH%>P$tN7+cJoAT3yN{@R+i{bwhfjm*`caDU$u`vg`Zk zKYR>%EX~b@a)r#8&=J0cK)!UJr*QF!46JG)Kv}aSV;8j%@rOHRyUI+`2Gu0!ZKw8- zYcBStRYlV(Jy{~9n(wP)X*-6s()}P+Wp_f>bgiAuD*=#1U=XZbWJ#PIvTl)0Xl(HH zZji+~GV!=NB~)O>8?4HcjRd_+J4XfLGt^3C3(dOgTr|ET>%OK@V(A~8)t*O#N}r{A zm5byfus40E-sB~Mpp6u=4iq!XV^taJzSXe7P?@j@fs)?7zMa8>x9CYaK0vi&zBh=+ zmNe}r0v={U=$@#$=f$-@6HEDKxImR|cO%Q)-LV}^1P-U|XQmvmr;n?J&lcMoz4UPv zPp3-0Qnip&irpL%>{h&XBg4g-4WHel-?xpVBE$&@M+;f|?sj|$+n?r8L1p!@{8jj_ zIP_zBe+mTV_?do+gb^Oyuk27`c1bdF0wdR)rB91=g9D>uW3tcZOmw`?d;AEQF5_|^ zT@nhHrhDTj`)XLW!p=4FxGyg%>!7x+&D=)vXSS;v`u)Oe38v^2oeRHRRSHfavy{lO z5;H@f88wdGH)v0>6v;?qXGq$fGLa_D% zOZ9a1`JZZ_x-oQg_~v?wU16ml?@-_Bm1#3fff=L(QE}*BZ6thWBVZbzn4EDZk>z&O zp*V>_MLZF+o_m6ybR~41U+{3v(GaC;E1l4nZ_T56yLNPK zw-+_L3m&b}jAD$RsHjSPm(NN`?sP$sx$X+#e9k2AZdh=*N}sUM_l+BU)>QcrqXmuFy35=Y9V63mxZ+ z74YBjpQKa7#1ef*_lNLvT4gQOq$i&)^7g_(c3M_m3;#72 zH^Zjj;fjU1@JKN^iI^KPvmL~8L6FSc)WCqGkuy#2R;=#jet8U&;WSz@PS z&;P^TTL;y(Z2h7*3rX-maQEO20TSGTySuwPB*ER?-7UBVcS!Ky?(TjkJK5*#ukNXO z_r0oD^{U=k|ExKCwu~O#J;vx?%YX+)>Fm$Bsr<$-A0nsVZe<{D;Yt*XcVGmhy|s-8 zd+Qk)A(tM=Qwke*=99O|N9)iIoN0cX6^|n}%5U+>D{dytIO9kyCgYfl6 zs(I1?A7()-Me{bw8eCdfC4W~k&9 zHgl0v2PwU}yBJj*!@rOO1N+^7@Q`kAHKOak<$#Y~%P(T`zsb_gTaY59?Ef@tH(~m{^I!eD1!ynqJ|3blRd^guXr+dm^i#{Ol%2@-n1Nm4P)o>Tl$OfMFpAmBWA z34}P|6QuP!DgTQ=JBbF11;HWGtI9G0W&BRvApuy8El@%|zh7URf z9iL2T;)5%W=h+|UZ;yG~9$PAHITEE|Yr_EAkO_T1B!HuUAR%NhFC8ymy?SL-Gl!kL zTc)wEu54MctRv(R3oI>H96^Rv%tK6js!um0!FXyibf%VAXpVbnG#O& zVCVE6yItu}xk^oB7nys433# zAiUE=AxH}QmW?-sGrz!K0NH(TPap}JKru~GYdw*Pd*@{ zz&FC@k{!n)Wek0ev3i`bSE@p%vAr(!z74rN1*z+48f5!Wo-bd;bO7v!`kV~ZY$oJBxX- z;mIsn@#!u%v4^g_PVITqysrB$Ur*iFTfAoNQkxG@zmub6g;vOB!=*q|Gt$iNW(sz+ zL-D{N?yD%?Sv7aeI#hUemm~K6+#b_T9_W>lR4lrJa9Pe}Waea?4m_-L_(*bSxIDjn z?44ouNKm9y)jimqQRWA;f9<+;Emt-}p!$5ytprx#eG~ldnK~Q_1`d%Jc@h{`H#4L1 zmV!D;AQx0DG|%08xe)846u#&2*0qbtHM(XNtRW3nZ$&qfT*2@8dHZrDvj(B3bclJh zhDp;^b&~xd0?=Xl%uJXU746@GXO>Ump40X210|!*>#rb)jh9{nt#GJe^uIR=P_rzG z;pB_qfbezP=nfsSUJ*%6i%`LswoiqxL5PA3uf>?z1X+F6MPX+u6>q|nqR#h}am`4VEcKnG9M~uZx$?#fr z8!y!(%-gs%bDhBTi8Bp@v(!hy;yoN9DwZH&;fu(qNGtdi*injnqNNjhjj_IqNl{D) z+?*SFDhvvB+`Yb&^hB~}P!xFc9hmx^`Z=Z_)DkC*oJ*Qlj^3lG>)~;pL7Y!VcYw^c znP}J{@K_3gDKe;d;zJk_#01I8mktwppRcpdX!7q5A-cG-R+}Jh&z14S7wcok9yaV5 zjO+ppDjd_-%@x}&$GofRlIQFkeb1*|Wl0%Cb&!2C0ePdY1Knv%569(?x;ddUj=#gGO&vhHTzON!qGfQ0-g2DP9_|u^6 z=xt*&9=5MEoX${N@0etKz)l=&Y17|r|8C2&o{K(;YBK~w)~M$4cqzwQ{?&hENan;I zK99@FN~OSISIfI;*LhrRVpxgOP9-Xe-n-_CMgSKR-;O$@E@D96(n2LX`~>yc zw}bzgzd5V5I{WOdc3+uJyD`?2YD4SX%d}^|{e(>EX%F)trynJWc-va}K^2eP>Gmo{ zr{j|)A)tv~5D5I0aq<@wg^=0J-Oatp9eErygxTc(Iy)uHQLC_4Q0E03U}PWTzD)kD z00a5?Ut}+(*59yAV8;TWg!HY_o%dK@6x<6O=JNt5$h0VM{vFUL<^$Ecz;irl{K%VLWpDNf8}|KR^>8%oATEWzkz% zxW7vm><|H%>H#I(12CBIcP)y5iY6wb#QlE#oe@J`$4=H?=+K`~f|mh?f`##K`tr$N zBIW^Qi$4((>U^f2ZNd&?fH`VhFQ=pocqxDa*$ZZ*1~0|@5o2aM79wXzs`EK9 zG&EFF=8PR&23lQtPZw!Hvrki2<~6{BtWSg*z^xE3^w5+`gF@HV^pKu~){dBZW4~b1 zYu(H@%Xy+@!q=70cHuWPhc{i6!?jbc*7NTq9m6;*&PIL5x50nX(UUMdb@7>gdor@BD%Vz;JC9#mNV$Ap zooZTsHG{dm^+uG6y}n_)alY6AllO_CY{{{v*<&X9Y0%c$^G>Zjujc8aTqk}!s{L_o z!*SEco}71cC@3g!?A#c2(6ka&>seN!MUMar8&Eq&c<}`Ec4FKKP+%D4xY2)s4_I{Yu;u zyM${notU_8Mtwoazf-mV9m>DiqaLI60;cDDbN_Nq)dSu$BJhTRh|zYePu9Xw`iN9N zPuNcOwCXS)Z!+yy3~*Qfd-^&bOG z8O@XM@@xjsXCIABUxc=2Oru3XCiU5}r#AYY{fM_k zQAu4Pi>mx*Jg-TU@&v@~k6rStQQK!y2`AcSIbywbQ_Q#I4QBc~SP+NrU6|N2+x$jJ8Q z?fR#%w*=n)Z+LJ-T+xrc$Q7?qX>|6*7ui?x_pk`V#@K$PWYLT3zP)veXVlwcgV++S z*IHgE71>vHW6N$I8r)!aPN5A=>M@9N?CW$fsV%J_t`ZmS%}^b;wzLnxJ!6(<*DpAZ zH~w{Xc9TDAtBf8i0HB+NXeT3?jLk$mLLRk0j6R1t(hg#K=X4n<&UU3mmzvBi61g>ww=x<{=C=6cr%Z&Hu#n8j1wC(@?;-z9zwLVFlmlO?X=nE)5Cx`H zm0s0T_6x(}Nab|h#*)Ll#LZRtthTM^Cn|=8-Hn7E);UOWiZ%J@6FhF-`Xu8aXn!ic zDDV5;ICPY%Ll4&SvL=>|+*1Sr4Ld5_9Z|Zk;%kco!F_#69f7tOScNf-+ELl4c0F+v z&GDggr&l8=vh#XmwK?O7wg~o{jCFT%xO951@*b+N>dFVa;MSu{{=$kw*6F9lw>t{M zt{bX*grwPZQcQsrY(bLTXocJoc$5W`Rj=POD@mUP28vSaQTNF8tx3jglV7zolyV10 zlR9DPn>v|vp`)X79|eE@)5Cb*vKVnlVpOsP2`w^_oRxC1zq_XcK$(Z3sKqmjb>eP2 zub(_s?@k-ls;mR_SK-T5aGCVwE*9{HQa>M5%9m09V$8VTcR`OJU+mP#9>x+O+nPTp z|FRoCIK||CH0r>OKOP_*49J`UQik&7qAS+VzPr^=qFc;Sd(2W>`K6X-wM~_t2R#Vq zjaZJuNoop9iViYm;ltJpx~*j_(9m|j(vxvUi>9h-rL|jJ)Nn#*9Suwg=J6|(2y}F z{bW{&a9jqi<6Rr8O&XT&lW8SD9ZlGuK{IgEc7y~8r!#XOjmJZF_BD4TfGb!_Pzm`K zXl|C)pZb}&X|sa*Vy{oNZ0d~7J}jj|2S>r0-}5gh#CGz6H56{R=%US6u^~97772MC zSgf&BlBAf~3XfJvTF2=9Te5age1SpGEBB)cFH&No*h;mGs#?fwb@}Cl`zBb`!m44i zD(`TZE{>@SV;RQWkUHXnP#=O+<*{e&!W~A?@J*@NmSR(}ZUeD=v8~Jim5X_&3#SnG zmbrIY_|A{qko4l3V%^2Q+}hI*pQ&T?8=sWv z-}v|m4Y^Z3-5lFpEhRfVbQv>e2{uvlwmd<*ixWLIub+7fQ{S(_t!~qvBKRs|Ge^{e zx18p__97OuzY0?)Y&D@IrI)9yXVWbo9OLGlZyAkah7XNanCE80x!wmg%5O04NR216 z0qPOkeY5DkJD5=ZNscEjoD(jzVXP~(xe6)6uNs!G84Y{oxIe|pkVLW_&|)aoUsnzN zD#-n(Oc==g9%=(zXQJFxMI|kzxge{M5rnZUJ%_27g;v=&LGDqacP9wKxO$8&V3fzC z#Te^O5Wmv=R#fKeITywQ8Ds1WU)QPCM)iwP`+nbnHiA6uQo*xwvTaCSy>H|I!Q~)H z&OfiHj0Yh-0!@Z(@v7C+Tlt`(f!D8tlCl^b1(CuxDk^IAh{;P#qxuub_xr<)iZTjm zZ=Jp0I5f{^U9PT{xL9I+Vv_Y5?61^;BSmGrXm4Yt#+4eRS}O|SY~d1)4<2$W_cwa5 zBpx!!cajqAWA*|?I5%dZ?S1#wqj;)U^BJQ_;vIL%lrhER(G=LD7zT3ZYsy&G<;x>VEYCr$w@@~sslFaU>XD!ufL%D14g7UjH zqAPt@FXe-VW}3(|zzzawLIAR1Hmtysvyv)Mhh`4he)YqEVn;w=;<*7SZnJ1_SVcFN zC&@-qr%{!mfq{Xf$7@Ng6A&W6sp|_|o*Yr5d3Fc&uiATA6qM2cg~?}QBBxw=D#zuIN(r{c_1vhK&NB`|R?>F?yjDnC{fv0BVj zGTsx;aNH`I`k|gPrOxbl^|{Vj%IzB$lV?9;!qnR|t13e^rktrg$a-1xk=>ns16+s6 zDll`c3)AZ`;1Iy)iK{Dae6!>X^f64P)(Wdaay+bvIEPP1dOs|L-W=~n!l>tz9B8oY zg1I6Jxjw;!@snH*$$c4dufVZTe5IJx&Y>-kJh4;X`g)f%T+P4xDd+K>p)CiZ2>Tpj zgn2L?k|vt?JHQI;zyr@f#Ae3Hc{j{%gJ4uooHp>oY>TQvwtBws2Mx|-)bIh~_Xmk9 z5vEz>-S!ms^?klpkYr^Y-o7IdYZFso ziygqta)Wf1d{k_}nsjHD;Bx0GIm<+x+{Hec;Id{;D-Ji;mE@j-sl5{)+PEazlS9YK z9&Nao_fH>VJlSw9rht2et6UuxfbHRutE? zFK0HkCY%PhEDpGwy1!}_FK2Yv6aQI7#?**-`$m%-KCMkte@FK^OOqpP$;cz8B6gSS z6>DmrQXukXiG#wIE@Auzy`AIZNeyG=M-1aBiceu{a)2T9x9z%;^Fbd*z!_RwbrL6h zv-aY`p-v$!TwnMwcoae!UcYwr!cw3hi#8_7;fOaDy0=CauY~MQMG;}IzbkwXlC08` z)_&hKEUPcGakM=oZY3~UUgn$f5fjGYEX&=#N;_-}FKMZ#hFefp%_djlg^-{UbXOpVy;508h({(Z%U9 zcq5>9AQ*w5^e(-?~+7#Z-7XQ;_UR^nAbPr zyMs*gw$jlY*GoNjPqT|X1KaVa!O+$^eJ=+>*W!T5SLTM;1MEdSg_>NUAoZvC%6YGxShsP`@Zzw&YniH@t^s(FQF+7adDw5C6ci^bY-S z_S@aQ3r{_{Cvvz|Pkd|hq41s0Vo?}p@{u{$mhobeRo|D}lNY=C&H)3fC+^ixQt9FE zHqLMF!4t0EV=*GVex2-Tt0+J7UNMcth%`^&Q|Kzi}lwcBKTn{yp@1jW@LjOs6E z2nV!B)ITuh-bj~}Rx+W?v;OEV~W@vfzGP@GfL67G}79b`5Oavti9Mf$c zYG`X~tDv9th)odv+=Ny5xs1li8^ZhNROzuBwgJ}v$l7%L^FVB4jXwBcMUh0sG1CY< zjPuJ3FTpg);Sw%k*us3#TFA-*Yj3 z6>JuyKhrQ|EamcLTU0FPVw^mXf4~qHV+OFt;_~9chdM8T0xWt3uJ|Z1faZjX`{*_3 z4~sj8Go?)Xw$!|B4F{oNo^~Y#8CuY>W;Jtu01jQYxyZbc!Ng83Ea*B>8`$x#L;dPd z0R{y_bq-{@>c1o-^Cfx;{0bLJT}H}KU0r?g2TcEK^1njj8(UGsAh>p+eTa;8Q*m|H z#DL|?(j{DPLIP4y!alt?@<^P?`J{hbVl2p*pknE{c5QJE!M1zTymzU@2>Z&qo zDmm%;cRaxkbBJh{2JdHHC}CipoeoY6B`hIXh-HB#NvDw4MgaF6x=Oog}p$QHni zpv~xOHqV>Y0KG=jiF~1uH;*f@d^fv*XVET#rxOak+ks>6XZK0}iytBcx@b(8v?@Lj z?e~kvGVht9mb{-I2_APu_<+mct1!5GySp>(CWGRDE?>)&m5#)F14cGes(KE%*AoJM z!ouZRt!`w}?T?4n%bwSo59*6+Jt0-VmPEY_833j80YSlntB@jH1+zg1g7H81+V#5j1X z7APgwn!Z%T7K~hd^D8Lhfg3}>Z23}<#_fCr?A*CNTC|z4nYNj;S+H5QS+m)+*|FKT zIkGvmxv;smxwCmh28#qohKz(lhKYnlhKqzpMvQ!gj1-BS=mYLcM6M$W0m%i0f@p$- zm>C-vw@Oq9R1NS;*-cV~01w}GyM?oZ_RzZlcm{G&f_ZYlm`dmKegZ}#hoG7ocDUo+ z#qQ+fqLcPL!dz z6r}7L8g{&nGv|y4IJj}%`vd0E%ysLQQVl}EKzvkkUwvi)hxxMDN= zL*OIhwD@1^Y`%nqU?CgdwSMG-q4*T|v?I%X2!tYnTTxxnUNKxTU$I?T^YeDLJBs!W znEzZL@R?rV^D;UduL9`}?~NzbKm|u2I2GA1v~RwmCyk;uZ8qOUWf1xz2rxf?Fo9{X z;IL}2=CEzB<8WwjbkYD_b8kEx`;)9Hz%ECpkE{8fyaF|V-zD{XUEKjMjDCi?)5{!ByBytoY6)Y z@Xfbcth<$2%j*6T1WV-i8W+8DePbZz_?QA|m}7&yNnli!Ig<$6+NV+mR)a4H1rig#U@4oB#rhiGK(Fe`BGCAa57iDgp=* ziXC~)=k+wha?(uRCAWIsPm=^h z;PN_PF+tK(wSh+ybbG_SJ@L|DQvY=cV^T5Ka{&`i{K16CcU9fG)eksp@HM-m2&EHp zA%RZwZY#xlO>jj};Ool43JVdUp9cuBn@omiaD6Y@z(1E!&_LiTtDvNS2_jUf4adO_ z(W+f_ZS>M#tFSdvU~dM#v}Q|z6N5>EdlM;R605AD7x^^F#J>5c3^E1RB#PkdX#VgC zMC6+n6YpcJ(6V;$d5sj^4`?ook7^yz0zfPxVho!J;Kf$r6rRI@%HSm%Ga|2d5V~Nl zU{PR2VBf*!2*V;MKXsT`TZ`Cq2_QqFab{|L?L{UbKjZMv?wxJZ$B9wb(C0S_EYFH) zU$%$m@ouLOqI^ZWDGuodN&T^qK9yCF0y)IT1x%N)2NjJW6ZHem{y1X$O%J`6`yp#8 zLakcZDM~6ys`yt{2Exy>sEF=aY#M5IVMHUSzI8xJ0u;pIL@-jwyPY6xr;EsOwjZKu zfT9LgPt(9?qhZ~JQXmAu(jlH8PFA_QO#%ZoJ8DF$5L|GP_CCYDQES9&YRE{Xmiy_Ip0Uglf9Qb7|$L1n_Pk;r|sRrV>7;1CIk1-?sS;sV_) z{QRVawB?QDn4eQpNvHiRAT3GZc)MW$f0-UTP{!h^tdws-Slwbaj$%v#hzTpXAyue? z_1!G88WbQW-Md%4lbMQ77tmJ@_nn(8b24fqFQR{#`hSZ478nm$p1{Oxs<6bB+`tcL zrmtbz#^4W$5(sRBJ7Gor(aZ(u|A z#j*G&M*GhCEwghh+0eU$8y3DsZGP5-F#Qlk%uf>cb3 zbuC|>to6*`nHdNf2wxu97};5w{uRpnCzOYWkY3Wz%Gkk#keLMtlOv>8aJ4Zcq*syF zGc(k8Af%Uf)N}YNM9fmx82F%UY5+uLXJjR$7d13BHgORTHa67urG|EY=#_~AGsI2agMXXaCp@hhZ2e%%fqa7Y+LEC!wbKKz#n z|LqC?9R>e?90d*7Se4NHQ~yEezlib|q0h+7$oMar&-fo?KGXjVnGbj`{+G;WX91r7 z-!6)itErFc&*o&B`$kNAXNg$7;Y1{2{3vK&Edq1YZ~{;J4*uhey3f#!m&i@Rfg?yd2~ zS6utA-_ll0aOb5rSdv*VEf}ZXhioC5(*|v`a(#p*9f_=i;o{n$Srv+i3jfSoU(9}}+oL5xWy-aD+X|vH)A0L-?6Ma>fnA7RG7bauW zsxQA~HthQo?%`+1VtN}zzX2Y`tP^#ae%$sd2m-G_;~Nu7nzRxy#AX-Fp-)`{)lXkT zK}0Tnsi$vSWlBb()%eM`+N30GBJ{@a zecyxatKQ<&lGQycZDM-Wo`4W()>)jfK9`7_=l78(1y+&zRC&;Dcjuh``^d z#!DVAguLJvGIrMb@`etC>cFF*FaTf}x&XMvUvS08KmP)M{>2D^{QhmW622rCuxBLv zYsA6x@&X71K-FKt3JR=*jK9s}m+-&wke3uvxOi}I)}&Qw z#RZ`fj%Kd=%G)jNZp&Ol8>C3M;Nf5*J|rC|DAS4uvvR6OmqdrzEJl(P*} z+*SZo z<_Mqldu^t1xt(a4na_bcv*zaJfbHDe^k1W*P$K#!W@culr?+f4U|?YU0|KH3ApcO| zk%9t->4VaNpaW|ImH0V}k&A23uF=iSEjc;)WaiL`J8iVQoGy05_Yci&BOo7y4$um8 z6iEkWCMwiP;G)&>&JKTe%nPNzYX(IE<^()bMS?{TUR+&uE`XI0X8il}un-t7cs`hR z#}1fn2MlA9B;b_lkmq0QAjE}O0Wm<|WCPB)7r^P`zw3atcOV9#a}5rr?$01CIxqM0 zJ)#k#-UJPcZsy&NjEuOowpCU}9`=&>X7tC#2gTBv)2VCMKD9mEKT+LhAV+mb8wgX6 zomY56l}b(TYxi@a*0HkIjt(GZ*y_J#cu?6IX@!v7vJ4<-VMKnRy94t?$(N(@QeIsh z;fE#4=k;#5>n}*7UdPQfe7C0uV@G5tLC2n$NgU`|(R|HWS>TdcQ)V>O)Z+*c09BH> z$?Zo${%A;Be3Ud%17>X`%-#`#q~Zqs-C4K$OWh*#zmnOveo>2! zDw3Oj;|xF|7z2)YO7pp~XqJ^&8oYY@ZMS~$Y93YoT(OQup@e3j0l0#c&G-$%+w;eW zsC3?w9unaD=+XIkTywF$Nz2JaP|ofyR;hOj1wC7Rt)Jz=LOClCqkj|eIT!}3j@~ps zFMq?tEmFa-u^>FXWtN(XG_ATTfH~ySG5X7g0i}}N$<;5naVQ8-ac{g-a2(rP59{>R zzC^A*Kc6we74>^BWrBQ2GCRIw628X5n}sYYD*C>tq$}WVN~Ig7o?}elWplL(YebNZ z0{76uiX9+BXdz_KNd)s5SnYOnbQI1(vGDVO@*+k9zQ`^9%$MuLR(z&4zl$0^BT*#@ z6J0T$;#)_C7c6$S->$D?^Ln^h9EyLhrE`%Jkm{W9&YfwuyB6u;0<(fnz3$*U?4~r& zDFZ4fz`kVM!gBS8;gFZC27zrGUCsVhQ+0%v`@V+j;$|$nVyZt_iW9-RsT8_`2aGsy zljG-uf}!}ud%{YezkZwmCef^k3`$}Am~Wn#?c zXL9lH+=nLDj%R);+`2PSw2zCEe`GS0j{GtdZ#hC4%SN0J#Ia=|cQTj%svAs}7nJY6 zrcJ9JpIne&MEstQoXGEXECmuA=-Ch{cq^|<%37P6npi*XxL#}OnM0|pKg|Uof5469 zZoAe*50t5`t*%Dxg*N#t>wiJdWD9~Op7N|;17b2vGtft~J_HJqVmZh5zi=^yyFITb z^5^9@qeRz|qR**6FFKnz_v>Ve0bnAVv{A2nP~yW3Hl zy^A*z4JR)vQ}PrN6MMT0oOaO0mrM9IxA0R%_&z~{eg^r* zFvZQ}k6=o17>@Ffd%>Q6IN!SevD_- zRYAZC(MlvV*Y^bIHC#1WdER@NRJZmF7-6!b8KcM{`I_rcrXtE^82N7VvB0|ZvWNP! zifARi%f6V}{py2Shz%`maU6ezTp~(H(GIYj`CcxQ9j7ExTV7g52$_K>P;3kP6^s}5 z4wT|Fl&^L{!6B@1HQVj-J}$VWt*N^)#Z}*TJnE^eg*7|#uM9S0@4Fd$EW$FD`DlcD z@%U~T;ROrLM#jbh^n>THyCuk=jGR~g>gf?%_-ly}Qa-ejeDH$3c&y7Gd_^6tj~=#+ zCSY#UtgY`h%JU@nL>qm+SEnZM@%epg6nB-_PCC)Z=S?+Cw$^QJb_x1 zLwi2F->aq?yR3Ql^l$;SIJB)?CLDOxg2>yh#CbpLjb|jeY9YqR!ofuvd{3n)aMK?N z8eSA54-%I8hey|5^lwydx7Y$%3Zxq4ZnIR3)bo{o@xr&`*x!3eIojmko?{+qH(jWv z&3%RlE;v?ga*%SAN5k+B#XjMsssr`}eYf9~*;0D|w^WVb=S!90oOU$&?P=!A-`jdH^tx&q11Jo<4!L*x5OrLg7YYVREEf;;0b zHQI;laX6K9`LB9Eh*TGS;8BQW^>SLKCEocmhsW293EinANS-bYtIQw(375zT`iYAk zsBld%_Czu_=@S6&4-=TljZ5=gxpL;b{{m^4PaJwELlh7)zRtYEN#XEmUknzhasLL8$1RTq^6&0Oz zwvkDAX(|}UcRISw)9`s7=*Q-Mx1&7WC6iFve-}?Zk_CL%l9~5`s9(GWFV5lrQnj)z z5r5Du6W&JHVR_xEq@Z7&`05@tLxjHnnw{hpNfAFMAhA#)p2z8va)`sP0&lfy(z=!` zS-HAKT6cD?*1`&7&#bkvr(DVkRyGzkvkCThs?|L23P1tkc0c3kRij-B#(&4B+I3lR=+QetOU4i{_(|0W}*+^Af9T)T?6{b)@Z%T-t=O##r17)Z*MaDv0u#7 z$gkeJ2>e$4sV%hpeo`^1_INfbe&b&sRmN{PM$%@vlVJBc4Y9^t7|7;=N&~$X4~9g1(*W17c)AlH90HduPA2WPM<=U8UVKq8OV7kw zM4*G}NY1?VI2MAb-=r$WW~iWbwLMCL`G7{m)-(Rp)AZP1^p4ZluJ4;$?iW9ULaR57 z#bw2XMb`XpQxyibX;jP+#rTN^jece{+n=s=-MW#hv`{w}71_@0BLRi(yOIe(Lqq$y z7L0c`ZP=50(uwn)_x2gHs@>EGp1Q0Fe^^B$Wzr%do0g|Lqrw$u6ED9p_4vLY?m4T+U)2|c`{dptQJIOZvneYhL_`nWAn$(84E z8Ly6ibG~2E*M2sLW8LC>U_nG910`Lbv~OUr+w~6xAfRYjoS&ku8O6k#X9K6e0JOhMvC26b7PH3dP2BnCWSB%C9z3* zy3|)GcXwu{DHJhU9(OqoO2X7^L%Iw{#1A;YX3Pt)J%Emx$;m4HrgL}e#!abEY)yg( zJ4l9t)z^wfyzruan49QmrO@R3VPZ%FJ+kXEd-F7cM5w< z4yQ!>o|>7HKcA}xFd*ovGygmnRC~OQ2+uB85cMxs0KA@mLp&Vyh6qed9C74G(2Myr z9iQ3os!WlO1mG(v!uhqp8<9>jj&bL$hz&BcVY^TBMC z@*-%BlGA-7Mp_}tz=@P}xScZ`B5H4Ky6Bd@PZqGizE*$z^OVA^Esl$|>j#N5hjCZT zgf_#$;`CFtED-GBs|;P?*^i22kF!lopcQ+9{rx8fm5(1T&z%?S`ikUAzkh+4uy%~a z%!L(PbTR7NBUpZ{6U7}@&;dv8UY9B59;>Ei?V%t-Jc{?vaMcu;i>;# z@)KqGtB8fRwZr%MI!uENv}+)HnBYiWtoD?`tzKbSvE;oymGG)Mk8=q|ABf_J&*!4x z)8nX$wBfOAV3$WT^#M!XXMN7?-_gmj_M{V0ec!8!dCHDHk#N#_T8+(@hU{e{@;7l_ z#tO%zq?8QsMuldC7Uju10q5thf$Q4&maBwM5~7DDDCji=4NIr5ye@vetA8l}Hi}M6 z8aL8T4aT=!JOv$BOJvyX8};3dtM! zoH>Jj-WF(qe#+urX?!bmDDjZd9QKE;Rgaa2hz#l#jSgG2kx&rhQD>ubpH zU&{g|Ekf35!yLHjUcZbT*WQ+U`Xz#0Ck@<>f9Y0_m?ERYGcxYcH#NFz+kIn8wI)BZ z6VUr`u=kwH9&fXSkO(--iYRFwNRO6;LcCNhI^Zjb+-JCARd2Q6e{Q;(iqflHRF}8$ zLY1Ipv^N;saG$Pa)B&T};k(Ru2ZRbsHb6U7fi18<5o#3{aPpz5xapD)@A;pLf+> zT25a?+f_H-&gW0KG(u15(w<03?o6Wz7-{N{C)M2PvpNh(4DmuCTFBcaZEf(|9gro8 zl=OJXA2RNT06w)jDQ9w~0#`;S5MB6p=^0tReY@`DC>t1QICme}ZX^#c^S(*{{ZFdx z!HyK=>3(wos;dAfCbYv{EmLPX>D=u&aKKeeq56S z8RODG_g(t;q6fRfiPGDG8LOMev=Buvu{|ay8mo|CHIHqyW~9S5dTQ~0B(s6c8U9I6 z2Dv?R_C7lArwRS1E7pMQY$c7t!npY9sNs8+d=**R$hhhOzQMvmDJs=|Bva<~iR}zY zp23%v*OByipwL4QrENPOffv{;s2cJ@m>!(m_4Oqx2$Pm*bpy$lu~PFPu&GiEN2$7fr;)?iBA%RNF^*<#8een$6}%2J!cfb%ptZ zB|>=kVydn(@>}c(#4MYTtek0Sg9@EnpsO1W6ULry$Hqu(hww@y3awh&a$8>K7SWQH z-hClhIREu)<|wPE3v;L(vatb#>nlM51|VZAizF`AaXot9A+vt=HMu5}*kFJ*jE%jX z;NaX}r&E>`H3q+FBU7XnKZ|K!XfgzD+S4XC7cXuj%h~E`fkOt9_n|*2e+S?*i(h0e=II+ISE;@F&nq&Coer7HsRDUpBI=@c-bDJ|xKCf58*-CCvX-&vyhiY*V%-dvo_vYd-wHh2We4eFS_ z04){4#T6BO-25l`>DCk)9+SWER&xH1Uz|6+Y>Q*d97B2*dc1aYoOFp;nW3`B7yVee zVZN(HTGs~kDV4%1YcIUCX{K+;0ZxU3u7Qw};B6gG9DzBdrJ-md zpxg(Fzi`tAS>#!VTqkd<67%XM=B3@Y1UBJ`ql(-*ZW=Dq(;l``=YFiODDdB3k1k7x zzpg})`aX!2(W?a$q;DXS;|yktT52n{2Bz)9anh^SQV)N9xI~F;%gOm0W9Apsad9}? z?dI9u`Br4F(?8Gtp8F@?!IF0tN_Uq0W5wKD)|~2gXnnO)d#T+r{o$s&f56>i?1!K) z4Fxddsx73pFR%t0IMTI(p9v+@FSOctYu*gSleDS9gA@afm7NE-miiWZ1*b zz_yLJ$kqA=>RwGxJ4{Nqz%6xOv^m)3n&Nvy{tneL%qyb8dffT8`vnWu@y0!7hY4CS z_nF}n*ZBA+Yh)nj-reAGx-l6eTX$1=Z&P{oZGOwS15@zQ$&9W77VRq#d=TP*oV6g+_e z64`wN$H!tV!*1yePQS@Osq<0OnS7}rLsrA;8y4pGN6h&&lvDkBdKgCH(%-vL^1-Op zSbg(Re~xT@bNNXH$4DhSRytE07}G~y{B|+PUcs){>4%-+>wV|x)O2J#w1j+Fit(eK zPW#-gx4)$d4u582SF4lq5C1Q{j`vbOZ`_5%8uOk#!UWb@(2(Wl);YK!~c zjfIbo;C}r?X>)6foPuI3K$OyU7Bw^F1J+~;X*Hz$B_n)UpT0y8MKH(o7(#U2W3Plo zvT%tK8THQ~i29>aDT@3Rn|6$4e zCDCa;4*XOeUI4=U5?|r5gL}*;HV@Y(#@iNFMg8|SKkf!>A!|9F<_`kh@{K2Q^<&1` zyo^pVXWDAbnoH>(DezOov0>HPO8HJN3{hdP`c}(2z51$vV~Smri5#;>0?8PxxC+i9 z+v9i^`Fll76yAEM4-$`=@$b2c=k*n^6QO8b6edyfCpkUv&56ly6WLJLKYNCllND#P-Ct?M!Ujwr$(iL?<)PIp=zR!uxUK z+Pk~DySi%CT6NbRQn4Ie`=?9mHlZU2c=Fp1l!gjR7ZW5Uxtj+F*4^X(x0IHm1bWwQ z=8g&%L;kTZ<*xJ>TrcDJ_h*>J zbL-h4do$i-<(x0V<_q{Q)A96QPw@kOGO(Uuz_L_4lYX|2p09@~_qm87IDD+DVgQT- zBZpRg^a)DOC`ymBw`DA4env>FeODn3*43(~dI$MY15U(N&}Ekr2|}U0CgF)3eW?14 z2WLtBc6+f?XmXC3qDp-Mg{79}8>EPl-xFOxg9J+sQPKX40s$$`<6!ih}0I4 zAfdR_P@e~HY7L-wK5vz3|L4&$2V~Y=+oH$TN(<8UnAr19?{&e_e%-Jb5UTGPrP?EE z3zU#vwa03D@7>r&ON9nB#u}2@P~@;iF(^kOWfGG@o2Q5OeElmD`kkZuZId0DOMlRl zpyDmAvE#6MJ5*c+1OzuHSn6(TG`ef03E*IEHNkov%E@BjSxKq+$zyMleaS&?m;Ul56OwlSl*2`AU3k&QYZm>8FkmIL8D zOyh9_v-{AkOS#=U+Cz!5{^(6_^my>uQ2a9h4l3tef*97X^Vq>FtlFre+D2Z)_e`%J z#rNl7TSXmbWx1z0(@u;oGWzmgjzCMpBwAOBv%ftW3cnXob4X7=fBfjSVIzl-`@3j5 zLOO<>g?q+i1xR-;ahN)nsp0BY+*=BpAmqpihoVR6-{IB=L^(d7M?|jCjZ_Edhbz`e5cv^T2}#RpLeKhx;XMP$O7-XK4=i`KAd!3;uQsxw ztqGv}^Ee=2T+hAynVy`2nV5pvyPl}{ zWirIcyvfNr%XG;q6Qd#*lQ<2NGUWzU6hbG<1^31UC*5?N)o__<_GUPj&NBNj8c1p{ z-8`oC*40dW;^?6d>v@!f7(!I}zCu9yVKkPlc_q zd)_p=MHWT{p6g-EQ>MX3Jbi%D5<*x%E6X=-9R%NLFZ${7w0}OuTlaJk-kllsRfke7 zZ902-OQ=g`|Ih-Vw9 z6^_-zE_Ma`2kLTL1Nw^#C9B7bvTf5*Yf2$nT^QzDELN{GMjFTFo{lZAox4qPA>3UU zr?Pmb++0VBF>P{@EpYJ9WHByQcd7gX7`<2%O8}Ok1G`zNSJ>&kn}9i}Fj0D4j=TE{ zSYq2Rhsa{nJ;tux)%mV-OEM!wf%GC*{}Ko>y3qZJH0Df>s_FV@sljjd$Hojqb5ar1?09}|AGAEfxzH^{^&p~9)I!BS`m3$aWPnN z@o-U5uqQHag6{f3jd`CA=cKwY1AD;$;FUgN4jevC8j%76y8wP14cxKs_Y+RfFS4x8 z(|o;V!^Jg>@V+yIou9-ET(K3Km3mFXKhav+bQs2M(FA>6RC4lp^ z%S0Y#chbDI`A%2-GB5#M``?~uR(+4afqyi^oY`WR>GCN%Zp&Xzhrq#o7X^thvhsAd zbF%Q>vxAfF9XPR*Z6Y@8ej5t|_VlB-*Z0w`RK4D8e>TbH;bZ%^e{Nt2^_g=js8)ZG zSteB3Nm-vBC#}(9D&ybV<=_8wRXS1a8M@;fK1l2>Y7~0@&+k0Eh8!{8{bAnF8A;RV^(G1llDF$NDYfS#0cb3v8;# zN7Tci@VT|SytBJ^Nu44x{!{tSqx_%3#K?gBDjX5OIf&2lj{ES%x}WfeU)~z`o(orp zJ8%~^5AtIt7vx=~mLzZtpu})ijyoCqnH)Ap$SE;V-*Nm)Fv5wGJ0F*Phxhg1pX4XL z;zg5kbE~SM?dT`X0T&P2xk_u+owy+~ug)K~W+i3Gc4C4_S1X{C$;7W=;Nk0SAw(KD zc8Y$i2)$Tee_p$*$9|DDa&Q?2L&vj$T-<3Jfc5*|k0|N0qvN@x8T9XLRxGj(#Zh zp5b4$&ChLi%m2+m?RR$VFJg#$!}f=GIa?3@F2iG3Pc*U${uTYzlT$R(@m$ODdD=~z zXP5hSfw{v5Bj*+;-xA|qEj(-!EKEbIw)Iq(YD)Rwp~cmCeVcZrFt9c7l}mGZdG++- z+*T)f`BB6~S?howcPWPDyI#)6o7b@S$H}OvF3;E9pKy2=R~)Xx))&RkvoGK)y9fHv zK|)fvj@mOMe1~uzYQC6xlX}k0I6a1-=G5~?=+`!+9Hr{!U@ue^V@CRG2(M!9S7NXG z#X}WXtugDx3}MkLw&G&T)i>0BRgDwr9F2skT3wfrlql=e+)2bunYZi&Ub!KmOsW*# zKnMqILPJE&-BldFBe-Skb-FXHKVn|_TWJn4t`pq5_cAil(@j$oFD52r#l_@B#lywL zL!Jr!$jHL`Te-EhxpA|(xpBF@yS;w7yQ2<#V{X13UA@#XHb`1@cCL8z%Q*r$_CMW)bU596U(R8(kn!j<`FtNQ zzj3ZVJC6tejk}t7UQ(-g208Q)Pix1AT&`vcCTkiHuUldyS`XB-{yebYzS%(Ys#IB6 z0C(y=ApoiPE2@R6%jZ@V=lU(D<#^!UheG|?aF#pNhsN{R74*Dm749(lptFQCFl(-A&tpCbbcnqfnhxYKBUV-Nd;%X>F}>BKQm*rbI?3{O+nX@djh?OK_V zh-QVBqZDA`h|~LL=(uNn4ta%p{mgVgpgj9)^c9)uK%5yGV>VPw z^YboPfFT(sF6{h^T3iMj{L?Rixdh{@7cn$a;A;kBB1+K_J~V&y)Y>%){?~AE5qWWu zfzyPv%shwi=bs|eSZ+4XL(Ck9m_L7b5~6#q6s6G1 z`LJgnSVV@4q1_pbb$Q1C>|?LxNXr~=P-C4k^n}ln7-!9LKrNw2phA76b7XdXx_P!( zss%`&E}hrNUzaL{siS3!e&ZCY4Gs-J8IC52$isK#l-NzT-KLd;z}B1L!~(t(1rcR? zDxl*S!9HN5kSRR(`tDeg?d|+@h+-fv0QD5-Wh9GJ=WUQ=`EWraF{zXgNEl550TVoT ze?UNRh}Q?P2;(B@Xu<*XO;ra%<>YgfmB7W~8K4myw9|q9xxy|F5qyAr^TOg8$+JXX zpj}FeOpM6nWKudwk@7Y^OmR{iPVWIxQjE|l7YqLNhL|5E1(457L^+gzBaW-e&!0apHyu&o0k}@p z9_>blsT3V5oG`Cgg}38l{_OgbOL8hebNATVzeLXDQYO+{9i;Ygo(B<=2A_eKOk%h- z{Fdx=C;1%`0KE8m!9)&f{3%B-2=oifoq0cF?~X-tG+Cex_WWl&LI^XsL!VTknn;2i z->d*l^otV)EnEmIFQX=!44)(&SjnVFVfvXO`O=7Feu$R^Rn)JBlM{>xP8N=A2*}WC z(QKhI-;0rz+h0^)@muL=)Dbe|9tgvQf`M{+)@1lN`bxLs8*R!eQAvKZ` z0zeFER}rIS%Y|GQgLs7KKg!ShdY8m0mQDNBA_qd6F-q=z0h5a=5g`xUV+i^WR0tDz zmI35|kwJrz75O5FrE<6B5$&YOFWdJEEW(&2f8rd*-v~n^yb)20D=wtdFKmn4f zK9#{92hGPb7SfLry@s`;eCUx>H_v`zLc(YoxzV$9L~x~g``eceF(DpKv`S|rs1eB7 z+d%XYAU+Opr!Fz@7^M3!k5cb|@E|CXZ9($Qp#+;#D9#qpcPJJiry?3b(Ux=dlSFgO<@9zKAm-qR!d;Bn(ma?H;G6o(+rrRkDa z0P0<~Hl<)RES}L`Wuy-THrSJDJ0jJg*uSz+glK+1&?kpV5bbTNR4tAJJcy>|x00`?1Du2^ z=CdFpJo?tyA9AxaHl}?n@_P_>h;gk3Tsan`W?*f@f({?hMtQo1Nb^xWGV?T8`dDUcRHaJhgynX<+%9I+cMKnaB{qGt_e z_yGkVj_fVI5DhCCBBpZ)kwO+^#7Z+SfQAdfBWOa!BD2g;_wnn)`})YneU|;{Ve!~I zxhFEgNJ!9->p6~`Xem)@%wi>EQNPlAyS-CgO)yhlOJguZAZu8TG5acDkyDPIrQ`1& zWFcb~FW@g4;t)b=dJhHr4WX_a>P-=vZL@*mu+yoAm^sZ^`%pXqBPaG#7MR*x#C<17sODr@WtZXONcbMPAEe}K;6_bjEwEOK`mC^lO zjk`i(YQoLa`&~Ab22s@*JY3Hui#dOmmR+u}>0DO>IJz7G zXDU+~rVb}|d>wgbv3F&flicM!huCBquPh9$$d+xvaYQlIOe|iv3JY;@8aS_>9AL-5 zRJzlfxz`DclVT84E5Fm)1R(^z# z*7?mp-y1%a8=S>DEi0WF^{R z&j;lW6r6<7f}xUV;@ptOJywdiF~IC%HP#%to}aeNHqp=pz3dvuhwY3YI~Fwf1po?& zV?o6Qp9CVnXAl6_(w_ijh@Wjcr#lxz<9>&9h+)8cucm-@L&M`nlp#XaLi$K~`$&dH zi6~hNj^Qq5-?)MgXjJgICWVNo#57bLCmj?T0o+D5uDuDQy~yxj0Ppv7^V!)ZxIyML zfhg(a#1#gIA?lG4z$p0*11m_;z2Jl_EJTF0#RfA)08p zz{%P|$a-;iLSrGuPHv_5DAV;!15&E~8&(M~`jBH6Bfdua>RXzaAs-y-^3^Jp9ygmhX7sUi?Nb^Y$t;E(!?Q zQ|CyHQyoW+5pDTUqx(`&=6vlA#y*QTB~#Y@&K{yC#fd<}b*NBJ;bd!dQ)k15>Bt$; zp?IvZ5T(o`4vJRGF$pTs@mS`ZPY@Ng*Jx$*&P$G2FwzmdP14kmk%Cdfn-FSd8zEy!z=%x_gz!L1R?iICBYkqM% zGmr!!lta}?cl!a}(Amm<4{axz3IQCiccvK@Yn@l7(>Me84gEJ5_#Q!64ZS*08jU}z zd_|*erd2ezXxTcL6wSvkQPYVlF>i+lw$)^x&)U0Qelpwgnuh*8j&1dawbj6{+DHCR z?`K+{l)HH!ZWPC_)?@G7U$^;mhsB-TpC;$sYU}H0$sFJ9Cc(Q}Qlt5Zw=$JR z#0C)|1bumGF#q@(h$DU`5P#PL#KZCnMx$h)FyNv#^S{+pC3H1y1(>}@!qGdu0I!-eB!*Go*4u_|J?h0e82PMQ#$@h z?7SKy$MXO!b3uRqRnz)buOr-kCEM-ucp8Y;)?4fQA7b#X{An9~E!B$l+fC;mj@N^z z|2-UF*SWss0$bd`S6}SHzxp*RgB5K@!!MA0m_)xEsJByR-2Nn5V9ok_A!}Drjs0!X zkGIZKSH7gLmCmzvANRfJ65$B4@s!(7w@K9jeim|CFSqX{VgsJ~4_FInj&Ee=6PzmBTkHC7Ps<1KQZly%unB60R z4-UW;BKoWH*(vCo_kqlG48|Ig;D%wUGZc; zfbKNiq48B#XDNJkgMQ8aN$S2GWBBxy*IJCPhpK1ykGgWxYcGql?45ms_K)P_``xn@ z&MJEUM-wRQ2Po_mlNA4V1)Zx0B3V}mHjW7D8ya@=59nB_u@+xG7%RUXU2@HyX*5k- zVII%$?(|{JR33-_;*fn?2#NC9T6w{W@LAw{%-`Jp%9#FicHDi!TQ*Ly^cQuYzXED2 z6WODnp&5t}YZ)Yz<&yiabZ03jAc^BvSXornJaQ2@Kf1yQBg)_!Qw!lAE6UiN8_}^| zvvgHzhD%|7(GNC!dKdj*xPF`0#JsrKQhwIC@GduX6*;cnXt>=^!`E`Xd(5oMRWyBe z_WUQ`GOyhy586KW8_xxd5H4RNs`dH$v;+)a{tr;Z0Sxv{(MZ4ndd9^xc5roci%>-hY!|7TDg?xVZ*Iq&E z{ZOt^-6$Mtho)M%9;o_dbO-h=@}k(y~}8Hz$c=B(K8h3)b;H>(-r|D^4AttcQFJm zF7QY;W@U&@fCmH(eYr90rRfp}0gDjAfUCI<25xEj7hiAw!ug;gzMbVzt}4BvJw;EY z;nC2nyg{%ZKV@t>$Z!|rt?{$5O(b98E6ltvC(7 z3l(eJ+Lu{2K29xy__&+Gp;^3m2x8zDaC?>hvy8HxD$o)*JJ2Tf1aaxW|OMo5kHF=W(>gL3?Ws?Co2PtgG z@TgmiKuf+^4rLX%M?;^`$-JDf9@DI4)NO30@y+{9t66OA^ETH;FoxGou1=5}yX;&w z+k&A+2G1OSxoO|FM@QdR3CZN>nk47M=lV`y6Wz>OV zRC_)4(=i(^byEOG;wh@NHSZ1_(t75T3wmgPgILeWi4)SE{?QQ7Ry6cq4x#Qwd^{2f z94=RbZ_EET39{d}V)OQP6h@}ME3*yoS~|IlyYe?GV`qVm&MpA)4(_Q+CGaC|c2O0g z<+R!I?`BK8j(J{_Yi#q=+l8jq$H|YMQJt^BQ}d{or)y|8pqa`9(fL1`c#ks@=3v36 zl(jN&E0?O8nzq=m52NAwa4#25e4E2t%ic5gq20N!zI!tFexD9{TH3*KI8J*{ZaD`& zi*GOeU6f7D&dN&7#KC;jTywvjwD0Ia*eWItver0!%KJknY*}5{zj$%d>`ctXojFzI zt(H>WUEaMtyS%)0ZgqObx{e!+=3(t9R=BFFXiLqsc4xU(HWm3dO}q> zIhnNsCxoBKZFTtpxc56_AI`!ibQ*we;fUj#zS$dQ1UQYkh4Q^*H?(5<7A8a7e4GcE zm)H0kX&S#o=0m?7g_ReoiP(>T%DmjdjScPj1;d7>rbl0TFz!sR-|$+lu39PmXLi0E z>0E8JxSfxcxb6{+a~qL&p-IVT0gKtXEAOviZIxnDv?kn!2|;#ZQc~=Za2cI3t!4T) zJAQCS1%3D5Pj4MV6vbKDp`fPjHyv&r{60pz{~aSsF@OO^Ha12Mj*a#6CQV%Y>*Z`p z%TxPbG`LM*9_6E=L`X+ZO;208HDI4jPaIa8Iy7rpo6(qMZeHPqv=>kB3tiwlJi~EiaIH7`BDaC zhRgW)Dok(tfw^J_L*AsCai|2HSrm1wSduf&%V>|dl(IN_kMDO+{}lz*{CXxPU@oHLW^es^<32xgv+>kSi|gw<(WlB)Eln+z#1d9b zN^OO$%Aljrln90m>kNqVN9VQ-Ppt^qx1Uyaw$7Y5+rZkhvadcBir3fK8CLl@f*_W5 z25wa*$ZQk-arZo7A$E#3N>5i$Pt!&vtbV zgza0Vs%(M&Y;c- zjK~4R$in@|0W5HC>V^(>E5my|HMaV0P_vh5XV231doNJr@$8fTEe9G%50+zCfL+Km zKDnoz@hfp*y!mw?e{_@_akRSxjv!739$v;>WIP9p(B2M2F3h)y$EELN|GP4l1A7*c z!GA_!M|0dfs{apSG$i0B&hT=>=g#JTaZCoNU+ci^`usTYzq$NnX%Z3kgb^b#@#Oro z<2U|D^!=KKhUY)K{%`#JMg=(}f4(=ba~@IEmwNnycl>x|%9|*CNFh)2h{GveAFQ=3t(d*2Ls8XFS#M(ly7JYLMN0V;?m+Pp&G3Y0 zlSUD)vHQPwKQ^qNB`KViOQO}Urr$rb?h=fdG#rvf5NRdG;|K#$EgjDXg;V5Jcb)TD zsU@41kYF5oiw^4!B|Yp+Ue4~5?H5d`U5!I(6jNQSK&g$He$F0RTqj>N)-7rntU)4@ zZOj}kSSZk?RIX?;kn@8`E8P_t3zJWFRG0{tg?x5w5C%qyznGJo4u%71nboIYfztmC z$Fz$fw3+P>ge)Tl;##?&NNPQes(vGD#^)JZGCg!=J)udx4x!eSJl6#Y0}(W#DOL6& z%}~L4m{#|jFfP8a))#K+Bg}O!U7(J$8(vxnqLz;cx+tGs+OJr<)Y`W%UKImm49Z(t z7-%MzGO^&r3*XC}H8QPYc?lqKgD`6VS%*h)tBYm1w8JvR8X~?OJ=MnrFs%xV{v$on7pF<}%WVLJ z5Euig)C?pN14WZ93_@=UVZ>9SSimfnMQZ(G&>R7fvDP*F@Ak9-06~lAunH7WT$D_^ zXm#jDvslF-)$-|;13c7H8%ZXY&_Vk{JhS*&gZDl+uhrpP_~p7Vlq}2JGK8;cwIKYe z<)|h~t4FBLh`k7=-0RL^;mpPXO3F-&a{q_;ceS=wHK9?yJii5bBjSVD5;P~%Pw$?9 z0V`5>vmaHB%L*BoC$F6o`i?_&d=|fw8=DV-%rhBCVY$sM9jT!-n?VbgP3G~eTNUak z#+sgpEk6P@J_p81P$d#MF4FuAswojFI3rOQJudGWEualBooF9EHsHcw4aZRt60Je* zb`cVwS}m#z=z1nXQWdBJlUED0j}Y>*d){qOT4NxkKQ-%<$05jrg<&8nv^{?F$glVu zZ2&C8rKAzxRQ}Kh4C}WuPO^HHt!U15Ut)$`6{d{_1}$m*W9nu$GED*f6n z&?Sx_%2cd@#IjcbRNV;_2_+(;OOgF>H*8J)&5&!FK!@Z~1gUZcP1* zgsR+S6m+qwEN0qMTo7Va_gI7nZ5GflKVLpAzJ^gzU7~4Z>CMd}G|rCHjQXyIKv61g z;i}F?rzaR1@OlV=&&i~QtlG0;K1icj%jVchLshSf5+hKXEh#G|IKkq9c)M%7h*VE{ z&x=A1u@ceKL0xJzY)=9=3D(-`u&pJy5`r{b);Wj~x;ugeLo2R>oQT2r7%UtK(Hid% zmCuIC5;wS#Y+=PlF*NcA=67RVi{lpI3BhH!)t(;=44@+D4|QIJK>0qR#o3{@O5n93^29n1N>jWDBU>Kql-*3t^4D3>WBHzHrAY0eai>m= z{jUX&iTNKamu18QMGzvEPY$bCz>~EJjf^T{{`4b2dP>Ui!uoVYMcENr^-#AO2(rq_ zi*XWaFVuTWMJ6FOb@PL4w*iblJqotA=^LK!WE8uQ!vYvcuo2tHJ}Jg54S$d|^;k~4 z+-c!Vbcghg?M2rZ!sYpm+Cj1P8mf0$JYo$ThjJo`KoQx4lmMRpDoX~YP?(>-=Fg14 zV3kPbZ?}-yC}S4$YGkRJSxtMLvSv$cLEYQGG?eipt z6Xmy`5R7yl`1&hrVMhT{6T^Yiitt$$(B4=w?dz=F3rnI_tx$gjdBC-Q@#Q#S%4jJY zNq=8G(9em%GwHc&9IJo^)!@!f=w)A=&!8rRqlwH}mwH!Y*}I}C^FP4@cM##FH#5N? z8>Id@9-}QDmDk18=A@UMsS}%#m6f3UF_#S!0JBE>&&1s7@EdUO>pgv~qHa z-gg1?6?BjbxKJNVs5+1%u#z+{IbbB{ZrLH+hhv~5))L+rU3+AzQ(it+&nou9NnZJ5 zVPibBAE}1p2u{#PKgsF`Q^JfO3o)_2t zpbH(89Wi0 zybOcj8L6fOW9%3djIx@KJ$!!K?G?R7 zV-M~Ed)uJZgJN~XL^dUdV;thIL9tMAGpxkW#y;%f=qg||kI)!ygAXE$@oiy#BGrI_Jp=|smZqPkIC0rF(IJ8r z%kffTl5K7_mNU2`i5#jGcib5HE{b{Rh;ZzIy7NI<4KLvZof6~1q`C3X^=NR6h6$pe zHvQ0%${5hof2pWd+#pra949|yu2*0-I^2_l9i7&~;HmD25;g`UZ4k1mCpyG%Y4<8y zD-buZt&%hm5VeLT3-@3f?p+Yq{5RK-at%|f`~*__5ELC;Z&4q;(}Mb;BqIGwNHBL|I~DTK|j8K zx^Hh(>pwO*J1>x$Bo68S6K6pBW#~%jg#dRz?WG?6*S|{}AHuh{O1RT~KB7T>z<}o! z_k(bC!;IrL>wN!xPx0@N*a^Rf)P)$YNwG(0WNii*BkTX6oTGv8F5h zDdSdmNBDP4%i!PNwlUiqS-s6d&KWrxy13NK8Qi`9)!FsCeib_%(dl8$yM@*KRCW5I zV!Cu$E1$Z$rY2|OSSV; zk|ce;U_CRts?%Wx9pjSI(CZR&+39R5&c#40W8SkMQVK~-&Q(s#LoC0wR#Q($RZ~?{ zag10PzzhJH0NB%a4i$06UjrxjDF!|%jVomRZP*=bs2#kcva=r>E)fN5jd=2{~0V*&XDPNBkxe=WByH(ha+ z&Yym__<+Dm>*gvlr%R3In_k*KJdC2VoK|mMKX+N%=tt%S)>UdJKdq_CcQvy?jo)7s zmV+GFb>_m6ZT@;s)`a4#9<~*8(DJ`1LGRlCFBoHzc1bYDeu(+<+a38 zqTM*ztsE?E#&>dd+lDJ-DT2`uO6I9sJg+wqkVpW}{L>SUy>4KTok`+Hj4WOyO10xs zoH|%kp1JaUs73*tKRM_Cay1!Le`&-ICi1{NPfo}{79_);jAIZ3f`vtuvuIhe1Qbum zwU%rcny@o}%HNnj(9)Hlp=4`j1KfkO0XxB3NTMRLz>xSR;QXda63Nd%cpygnYD0qJ zAccy^edA&#$SSEv#3X0&X6nRHiP2$$5qcN{8mRn;2-YuXvc7y>k~Q-<0$=0M$gG30 zD}08`72KJ?rbYm>5CQlE%)KY^9aw08_0NAlhwCVLnPpi3r#PJEn2IaXMNZ2@ zOK%qc&(k>1lcSgLzV%csbkZgH9d@52wJwvcRLLcRBU9b7$Mr2LblRGqcB4QLn8IPk^<4P#3l;r7^YruQ8R5ce4C+Qla#5# zU&{JSkn#2Ps<$A%EVH#JZJfT$T+wJ}LxqTUH>*JNL~2NOJnFU-LU2EZi|4&NIK%Qd z?2&{4U?I(>^CBUdwfAo(1K1FGtq7i=8{LJb4Pxfxa2!d)7<9SR)OA)$yv9uE22YM< z@+I-|{dI(8f3$AIz;uok6w}FKki{UUq{S0u2SC%y!Zvs=p=d|f?2{r>8L7c$QLY&@ z%n8$hfHFL!&&L(caFLh>(a?c1V?TkU0+YEXW+FKR1!tDWOQ4vH!Jm_c3F{SJUthy> zL-HgL0(kl=LamrCb zpYL2HAUoYP_5J zWq5XAqeIqyYky2KpB!kbt~7GMoZ^3HJtER4D2gfnRyuyxWUwx6+9PpB2vH+?fmVY; z`=}u+aR$heSRXFsQII%T7?4#_%do*9+et*G5VA!X zrML(M4OBrXM;PVtAb&!cHv>osc|AbUh*7j$C9eJZ{S15aFvodH$} z_>0L&n68}t5=dCUP`KDGOw>82(!rGtF#F6N3fbtC?YU@lHt-Yu(ki) zNRUVxlaoX){}}R8TnbLG83@XusRYHME{qh+V5n17g-EHY{=hhpmjiyy@Ny?``GOtf zD6=2Pej<)!&#gD+00x?-*$PWr-l}>G*ey**I8>NP%oq<8M_wZl+%g0MbqcOdzkk&) zp+A`{#%Zx8jfsgFy>e8A4O=71mvyE{S8zwP&vc%I%0WK?ftve(D;@gCYR3sE03pRc zLH64rFmsZ!jJzJ8juT`WiCB&A z38yq2xL_27T8;u}BNlQ_tS^QbS^<=+zOVFnoD`y9;qyy{dJWBLR=`9BFBNCEgwa3 zD}bBMcY{797EWqjBVsxk+>9~eCn0~@BqL%0gJbG4WqV#}w z1EF~^sWZ~VCf9b;*nuzwk>V?Qe_$4P?r;-9*KiI9sx^gi_J$I#P*6JBo>!6ismQNT-EO66kFzz8XnF-%|f!}&=PW~ z7KSFxTPG6iAqbFp;CQRh5bf7O8P#&tJdmSlbJY$bc$(V*pKd1Z8_qe4b^?H-Wh&xc zg~Tld6$x{Gmlk)#Ln60w8&6!CIDVR>BKT7x!n7D)jqo5P#L~2usto>q+yy~UT@%3_ zBq_oU>Kau)L9lYS4)?EUK{f~g@z3G#3^e@-Nog@6B_}GHb0!;m0xb6j-xNxomEQwDeRfxc~>l z>8Z$Oud%rC5YZ$Gr?*5zK0&u{;v1LHb<=g6-EY+~P`;FMS2ItS4Tqgo>qc)%PvR=w z<(G?!!yf8&e<&YZ#o$X|ipgmdLb0#+K3hHYhLfO1@b6@aAi(PDTG&u*NO9RkS zXf`^1Y4@0qhY~djqsC#+vnf97Ld1n@P+@$nEVwJi0GgsXc|$(%5l7<*k(EM<+?ynZ z3$Q7)2A4n~rUAN*DfcNzOb+MKZfBmEnQQap;dP@x7z3Km&BPeeg88X$a=;NU0>ydi zg%+-Nl*VMvBp*4-#%lOGg0|v%2k85gK%+P6kYzJGY-T0Tr(1dUWqWPqyWVmIJiW5? zoMKe`%$Rk);l$O_>U4J6(3z1jb*SlDWp2V1$!uMf(qK?6gWYc6@GY^@&M$Dvfd50x z_z^c#N28fcA(m?$mi$wa=x11y_-Fx1Sx z+je8URJTSbC@z=1hL)04a z)2)q=E|#(_1iW^(F@QAC_eGOiYnUIder+G7O>vk**8?=TPt(HvZs@wRp@?0hEL zoQ^~+vzRRajDyWq(ftMQU2np*r~bNH zcI(K&<90V&wt}qEAEVs)y7gN9b&{lwG%6kw3GJgZ_SL{HKLzLTn`W_n`~lSSD)>t;lkW(O zUZ#Xy`Sf|^3^CiaTA+&KJ;`EHXZ%|AnL!zMi+EWY>voUy!>w=J{8Z>nfQn!GPITcs zJH>@5>c!vnUSp{o+fsL=czh&%_)s`LtsQW+F^%fo6lb&^v%s|k>-%Y`e}u_nB<$YG zxVq(V?3<0L(nN5GAZ^Xo7;5R<)fI7Rp}BLlOZxSON*u=vHg~N_oQhK!w+u71{0MeDt2{kf;Z%TV zPWv0Lj~2<$Jb7Mv3=_;m9ZtXg6uec#vHjfsVmbA^D0UU~QFgwID+}Pp^DvzMeBi`; zlk*Z{z1L8)wf>~PjzX2Cmq2vR$!(GFDpBjS9ZNf?_q!vrrAlxw{%CQ($eJi8v3-_+ zOH?zl3i9lG_I&COH!3e~a^jpL1Wa$;PP#uGExpt|Qw%r#KkU6_R9(xnFG>g`1cF-# z5Eib%-8HzoE?fg-;VuD!L+}I*?hqijCO8Cl_u%gS<|5g9|L+}VjCbCLcgHw)>`yFu zcGs+~s{U0~%WS=r?vtn4V^0V>$_8wIsWMd=4hu1}EfzpHIA`?WSDw7b>i2;2*jZe$ zSohL!Ec%I+Fq-t}{*ib;%9daGijgq8+%Sfxx5;+)PfdlM-kZ7*XZQl817kCb;j>lN z*UpN&0w`*G9g^{?e#~pOoG@9#GM~$6jsn{zKi7G*S< z$>p#SZiK2L=B2>qa4);GGM|)ChQ2f#tz(!gV5lV|d(Q9Tu^tk>rIw1XEM}NYQWrhE z=c+?r$+GDgf=t!$Nhh#GBkHnUY3%N2rH7s>%g8I&b%i?4I*%I-w*oYX==JL58%JGT zYin!W;+pgvw$zZ`cCkk0phRBC^X^QPL+RW)gedAMy_FiyrpELdGlKg2ua?7?zVUk# zukJ+8Tkm%VTasRpcnQM5qEYer_MnMp6tk<$@JH|I3Gb-|)V+xz-E~Y?7=^rKBerQN_W5nuV?GW`k)-cY_yL zw|p_X-h8_={VT)U-a{DQ<=G3@<+{+@3tG98 z@3xItIJ{h_dkmQr5FmI2bcg&=Ca3AqIVZ)g26I%G`+L&u)sY%(R_rTxf{`2e7Q`(s zSzj19QzD?++39XfB;ikfM)(tr3xw=v&H3rx!JLST(uxRzUw$CGXor{|4Bp*d673Xy zwTZ3d`XNrWDa&L)yG*r>x3Y-l)A9{k$8gnuHgI!ymyl4_o7qXL6KTBvhiDf9Q97#- z@>N0*sm5d9c|moJJF$ovZeV6_iF38DvOmI+*EI&U+ZS)t0HJGp>5LaZi#cJ z*fcg@!+{j=;KG&<7PzDhc^!{pZ)!SD~L+RK`u6$k028qnz*E>f;o9m=BMvH{6L8b&@ABBO?0d{K^)VK z1w6prbAUDmI+oV6Wh&FJ<){z*qKT(-HIuEOi<><6)_U{^0ZRl15-SQ9p!WX%5KEby zt5&UR*R8-s%tya`Ij-HVR|n)7ui*fBp)>!;9b^C&2-=^kodE_w;DCe5LRw1iU5ESj0LEAp&d%91BFCUm(CzRtZlR7xjHB`%9JqBOs2LavTSA zWXc3QLTP|30^cdF`1G-M8~O}|g<1-bt1n0&t8<>uJ$Guz_^q)yCwn?ZC4FM@*Kz`e z7*Y|D5!)aIVS+VIPXbK9W*-A|>YSbBvo)8-rxo%HjG3|9o+b*1-(u3>nHSjX5Sd|? zeo%0-eD$K5t-{?dufkg2p}f^t3hTnVh+1V1m*HJ*!?N%*$f}|Npc^z9*f)?JFY9wG zH~#5Wlbd+R6hB^gLvX$}nntbeHVNl&#iqE@VlEX4H;}vwPT#T0_oykR$Le7v z8U2Eog~2ELnZn=ldNdAcxl62{84d*Vh{ZQLD6^DUWd=u*Jg`87?eTp5xk0VH>PQBL z{r~FXB(G9IDEn%v)_xpgV;rdNxX%m}#bl-Bt#tEp#tJ#-l?ada4aq;uh*B7+(oKz^ zA+nubFX!2!ULPIpr@EeszBH-VStNU-m88Y%mvx0Nl0n~Q@QNhX2L=wrm@4=Th|7Af zZ#w#Yqn4W7T>FQ})e#QIw-iJM^1Sn+s;0MoJ?h>f2~9oOe@`}JCDON2%BhlCYQ49) z9hF~L$Y6g>O_75TV98Ql$qRAe`Or?0p7^2T&FAeg6H$8^LK16wu5Yu~N}Z=Uz7)0E zIrQ(ANgrGH$s!}44x7rG=|C?0FCMVA04|3i!aQyEO+iUvVR3PBVH{iuJ@T?0M6vXF z28BF<$Wfk%ouk=Rty6iUX$I$!t*Wd0wY+>mJ;|LBBA8%n*+@e-j1}3x_3>korFSka z#;ja=1O-1#YjYGv6e`@ZmKUxq-)=_}t~R|?C*UXW5{CMcpq6j#Q6Fz~0awCr{~^n9d1+pPGUklp zC`lMT4=+|sK zpXL98fW-=$ouQ*ZjVa%a1a#uh!z)orM{jj&EPcxUM` z4(+`xyR_A^3-O<<&d1l~;b8{OUiUOEAEbtb6 zkkg~yim-{48z-U#2BXao!}u3x z;-KdXMEqwUl;goHH~?Pr;m`t^x@V|-IBD2G=D2VmeF`7Ww=Ul`D3=*gWuZ_SCj|p} z5z`P38RO1u^8^_dtqZDaUk;RH9%p(pR2)hSG=9K0$gKXbLJ$Of0iue@ zdNW(Wdc7W-XXI^)QeQ^lffqCWc0mbEm%-`NgOe&Vqj<9McOVwcOsEk(OEv<;ZbAkS z-kWerXmSlsPgHPRFemve(e~y_l%(%**@+@X+0c+V?{<{2Fb-y!IcvNEeDvXl`KWde zt5h7(DM!yQQNy=JBqe96BmUgCapbquu|S*=tb_*`K`mSlWkh1SLxg&8*y>*C){FBUoW}P;NeJrqXuV@@FCk_W5~8^n`nz9Xc&Gg zrOu*PT77A#5}z1o=ye(It4K{mXpS6U*%~Zrrkht{FFGC;6uwm-9W!dN#tK5A)yT(! zMaz?bUBeLXj}y%+v6h%@YmL4UIYkafW}XOTEVy1d9Jhq{D@pRsViedYN*iKUGUtr@ zzl>uaWu4xbq8wkqDzK5w!6=ut@s?G~1vj+`po<6lDiH#5_zu@Yj^f(E^o8{cJ<(R9 zm4Dm2q*gnL{QB|=-lpI_h%v5F4ACAAA4rctNuUaC`& z9Z*nr%+sUir6?Tf=@ukV`>I3@5RQTh_@z8SzJ_)DT7ri#0lBzT01yqfV^C#sHfSrr zQc$2W-|!OQTb9ZR+?CiUqcSX8v(2wOcWfWxb}FQ)V8*c-;H59MNyvRQANyi6mb;E* zQ(k3l%wkRDKLq&(qH)QGLKtGqd(EV!Teib~iaz^|tbCh-9!qPz?KZp=cuGow2#u+r zhW!WrWW22%L?7U<^@;Wt6p23m4S&tB+In2F7*MNM>Bmba2arb<2#Jzka1oyyxVgKp z;eIQwYHRNafMOX?smA4r1q&b~IOv#?$3iB;j~CGWX1!e{i_g(`aD&7wAW%>FfM>vP zJqSz=dEveT`v`$k3c$+y@NZ-t%9QfmX|&PRTlv!Z|0 zW*~FKjtD|=7WohlVEE+Y5LPg2sP4w z;brUG$MiKcADHE@OYlZ1L4JdNFmSU#f)FM-|K?HKl11?&y_MVJsYH$cYq zeRvFed`vzuo;;yZ;(9%D-dxU#R*W$^MJX|2m?7{qDbE#=lY3 zzd_{h*^hr?=6^Gy|1k+5NS%P8ptzHF;~^mgxKA+4gJv$$+UVjwMj<6apaUR5B4^tu z6eIABq~k{Lg~1dgxO#4DLA#9bPG*P=0WKBDVzZujRtAwCM2S5mM$?B45=mQnZ7l{I zZKke!;@bi=h#&n@iUWb;FW&&c!OFluHdq?6i-Sm8n8YSPXf8ks9sTlTj3lB(9EZ?f z&<99nJwH@`!v;3!=WM)$gO!JYXejwLX|BQ3Y6I=uu zNLvo7hjPLaX*vM6nFAA*CwTM2YHjF?pE9h_5O{$!ToU=p5?y?eG!#V`)B^O0zg2rW z1UR*z?122=7eXI)XNhk8s{F_8-d+pD8-*-CAibuAQZv$?rpZAABiwjipAn;|zYlN% zCU^P&dM}Xt|4#pZcl@6q^FeTbr~kj1{yY8u-RZy6|KC#oJN^HywZGGUsKnUR3Gg{= zbZYIg?*#1Cm{kJ+W3tLR$wM)Yu1Kp=3alqL zGRbB13>E+tP3SQF11ghEp7lX1?YLl30uy9d6kv)8>&+j{0z&zL8|ZP~wUw*3-D}^j zIQcb)6)!481C+NB5*Vbx+ zQ)wfHQ9Ypx93jAT*@HmP122T{+=_yXdgEUQWlkRUdI8Mg{SgT*FeZaIopxu*k>oi9 ziWvs5#qkXNL;x9a05fP0?ZE`4I||-mD{Bd0uPci-h~J|gOJL#t=szfQ#T=IC>Xv`~ zwaErmyNce%APK@xJt)wXy|&h^Fb%&jT&Lv$d!DM2N3aDMoppft0)6cNAm?d2@p--| zfx!IN%g<~#uLA9XBMZcg?tf5DwQXpAp8h;v&waPD`KpkpM60(GVrKh%*dBpX{Er+e zttNVKRUI8KmoIu+p%kK^6hi+{7{d*m&7B4YoqU>m`e)h*O#(j$LfHPlRM56IiVKCKcd4{4q{k+)H&bizE+5W9+PQ@~kEA#x!46S$cV~C2W!ypZ?pGE19OMyaO zkkK$xw-lh!AOFaUcX4BTI|lg9Pe|sE)`u}v`$t(&j>?xOzZ&>8H6-WER&+p@uzi_< z+1INuYm359!fnI{=eskMNI{ul#4YK-FcSX5ZYU=rVO}gST}%`Bw+mhKhj|U`X+Q*Q z^*3BoIebxi1uRn#{Be@H$HpTckO%g6mhi;a{9&P$bAVMfDDqDioSg8S3)~m*5`b@w zW1#Hhrz-XU;~nkmgA1+7E?#i6yDib>Nldtx8_V6h@7bpf-9Yu{r0aY%2Fy&u1Jl3{ zT;GRf+OI9Bt9mwWoi|s0SXiOb|EUD5mQb<$(NY|z9w1;<)%#ovt1;XA&0K+7YN)t- z2q*~vcDn%ZgpQSQo6Kf#;`ci|yA77p{)M>q{4-;&i|_ zczw(N1Q~@_1aShl9TRISHQN)#LqtK^swR*e!5RepQLg^Laj;OgI3x4t#1afD@bz?y~0e*o(8%)*_Mrzf9xWaf^d;A24H@Ba`> za&PzLM0{C>1;A2|++Tr9<_>Av6M%-;-=Pf_pWzfbAW)va{a1OU2b52&zdfAdNsx&+ zAfz3rkRF1M9{wW>U~7T`;C=r%f+5m)!vE+#u%YR?EB6sF%!dA$rx<})q=pj!fB!P` zuVj9QwEx=7|DU6&3IURA0PMejZu|Q^ZngY5F=T+XJ7A~UANL4scm#h25a?lJ-$Q01 zht^4Y?xp1o;*wSW^v@F@pah;YdaGm$48lR$49mWM{|;Q7;=m%LuZHpQI|DJuR{_t} zVZ0I+$dCYd$80Mr*%Z3#X!J7si3z~7Ysyy$UL}(2#%Dz zzvw`^@QWeeTagfc8p2|rV1E=h)5ZLqn{X3C-UV9XiqqqJLeWMBrm`j$0%4$y=qI+X|z(Z41B zfSsXefyvYqz@jNEwyYVe$!9~&`PbeDxLDT9DG~QUNE4f zLN>_oKgGz2L)nu7qLoi5d}mO}Fd{tzMQFMVZ$1P)n?U$5lHS<_rEg07sEr9po?932 zgCIsi*dQbBlSy2FpB6e`+1zwVGPf66EeF_GDiiqX8i=paJ_W#`b<*)}I^aR8IUs-{ zHV2Ks(4JO&1YQ|HnL-c5C}^Khe4j15tj^2J=dwRA0Rzk!d;&$d-v`-tu5A}Uc@z{B z*MHAB&c^q`MSWNZO5%63j|n6B;hs><2}0*7#24k62%-8`(1LYc)=;0m$_IAcKt=Wj zXx?;u8Tqux518|S7D)kX@v-rgmC$esffrz5@~fBZV!h1M2WtAURMD;EDA4K4=&K0)!6NEZhf4g#n#o8YMvZzr4w6sL^Wx z44|@K?0`FJk1~X!B=GO-C&4C8(;dUW$57e&_=Ezu8EO{J4plZ4DKNm^0GEIKe|X@l z19>}J16k{dGkNg0np-bBQtW|dBL-NY-PW)!rgnfTJ3HGHEnL_ zwxcWxHDjG2mCyNZ!#!7TYXj5MvKyx{zf`?R7Ijnn?>XE!G0KRc@3!28Inbh0^ub5qU5_P_L9#noS3W$6Z!#**Zc zbS?eSxtme>m|+vXn499TWDklcf6@7{9&DsSMGJ4b81hu|CGRGW*QuG`D-4`#+OSe*7} zv$*@7vF>Uy(aAkMk8KG!o%d!(qixWnpw!%$n@>koU5W0x*Ok0?`n->lweD7reG{{- zh8gbHQv_sh=atp}VTkJ`znjy^&c*7>FTLTs5Q#th0DF$Rx>4^+_70sRUfl<9SkDiw zUuRtArtA|&Hn?ugd3)#=H|N+pH-mH5&HTXE{g$4slWwH2?&muxkBG=vlu4rKHh>fR zU4!q6zUYPpWcPApER{AFGo1>s=Ut+D6_{#X_@9q}@jj*1rqrD-#imN$jYmf$8#}OK z1c!AX;S+W!?_x{53H*%*+#)L z9*EnYg4f7-sTUJB5%+UD)qyL`&r24V8MB?g8C90w>|M8=n;klC>A@|xuD$OZ2&K4N zxV5UVx?oXRAM&-{EyH-h7{LoqwBk&NwOqEqJ|L&Rdlm7 zlU0XXoL)5jy8U1&I&`YU9R=*V7N=Y9)LmV)4T#`2p(AZ)55Fe%^E~GZo9)S@dQ-Cj z{3cE{+l{W+x^MZOksfb2n%T!+JOhp$RMV@3OvV%JZoiZWn_-&QBDCBI?J^PP<(>r& zo>?R1R#Pqy4Gm3R3^QqBhhM`li}bO{KEAUfdBt$xW}-t{&XCpXMn`n1x5bf$$8o=I zrX==LK1@eax4GO|-ECpumd@4nWO{U)3#j*i&G5zUR~ zWg}+&9X5=}4W2syid`>rI=FCZOT{ew^a9pc>Ra3_tL7>bgmNYFRC^|HoU&x0A4MP4&Ak8T|0IPDjx&S!;%C;Z}P z`(gJ%!BHevNx`QLLNPmo`KqsP-EMc#e#7CW6+m8Y?mG8jTvFRc%8(#%*oln*2~t9T z%1)n7R)eF=?kk>K8~OdapFOux$C}ONgiQH5Qe-HH0UkKc3r(Kw!7CMDuY+aeoI79A z`@%EgvJW0#rRbULq{EZLx?<4#KxQN12(e^0xbd@Q= zZkmO|LMaJU7@n{Dbmxyl&6{hoR1JX>DC{aD%rq7xcou57)Qafh*1au3T@)%KU_>j4 z%%95_rk359`S7%zUi3QodN|yrAv#<)mRl^PlrckA<@;uJah#(+3e_3JOXu@x8oVyR zrElM=vN`KCl$VlLdN6WbojL9cPCU(2Pmp&S#J(;`y`P|cI)4y~Jxh~6yPra5e64!g z#~du;pfDHR^y39S<55mVWww<@anNaZK9N)wZ@WKtVD?)j5m|qF(Tw>&e7t6`SkO7Z~2_1b2+^lGDObd>ne=S`bI*+r;&xUVH@2M zyL`C}A)Ipi`}{P^oc1-jD}&UB?SboZjrJE=vB4=^(`C0UpOG?xLk*K}JNtk2QQ4n+b5;hxM z+(VG76=^AXV}QQEjKJ}=?&HU|o_s0D7)#-NG?Oc&y2X9S$jFXTw8dqyb(v#>EPFWB zY4lk~;|5citTCDdU};r8z4xwT`Lvy9Itc|;q9(+So&ALg^5B?+^1GWMtHLuK?d$2v z$G}&E=L>sOiW|J>AZx=@h0Zysp0|Q0TXP&X9V;T;tASHLMr?K)9n-vur;RYZk5DdZmYi#mdEPzqF%{D6g_ThKDn0S4qvOfvu_P>NoG-K}cQ$3vSk()6_RFYiDw8X~sfaaY4qYkCFX;GrBVkHhZ`y-YD5u9Y?y0MK znz^0Xy&BIEogk<8AkTx!%DD;loyMxF?dhZ3k-*9GP+G}SALoDJUKKE zS^gMDq!;ui0u{AKwfl?|mltwkYMj2MGQcy7(;4z~;&cc9!gU_Y>zofvQ2w#{aGk+% z@A7*LzHKbNW+|}(3B)BGpUC3aMxE^&s>%B)REv8hL(x>5&WxxM3RlWWjN^HFrwECj zAZIqUUhF^w%3&*d6Q)l-H38~uK}J-3mg z0!;OYMyI*bt^TvZqc1nZz)jL?bDomkLh%Xv4QGQdRqsVQqXW-%!0yXEODFUbPZ`Me z`+3@Q@kKQ49sY?yxdf&0++v&2Sg|(wsxtWSHeb;)+XB#I2u!=;4Opv z>8b=BkB?NB8O`zo*=?a2!Ag6Slv58+NJqc9QipWz4i%95Pj3s4^`Yab1xr|Y>bg(j zieD+U6Ge#KvqmJ}2-5Dh9^R0pHLAvuMuc)LD-3Xw1fo7~TIZYQWSK2%JeQ$!_ml1> zY3~0)ri2Hq{8l>%G+2&IHEf=IW)Y7->7_$*#UChfc~|U#Yj~$=6dol=-M$2G{I(`H zJ>B|d%-8v`5bR8v<;$x#qbXZ=IM3YK#)2eyAzjEJ{cl{;b1W~j!rjOcFID2|f(b3R z@SRBuYo6-^&Z}8c)w3DyxFCu)u)f5sQ0sIru9tM;CPAB|yEh>^3Q3(lrS>XdKX=b% zZ!23`eLvRkPEa?A_b!k7DxO7MDR@<6-YzG4TQ{n(FqK+ph8f$m;A+M$Sfn4K(HJKo z&t^T}2@$_ulM{CJ^6bf(dn!E)h>{j@=* zgwyi7|cqXP%v!>b(>Q2cIV77kEpm-rD!e-)9$5&v|sBDm&kPjm5^9Wrx~` zx8_$)DIUA!G7VN7d=4DrcQV#5R=wqTJ_pG|7Jh#DG<**PH$>pvD- zS1a}H^U*KWwdKfN)d|Fab7p6F;%4GzkO5Br8+&cN7=~s(?BL}7}iW6i3Sj_cc8 zh4Ms1T#x~dq*Zr^V|hHQ9ASO%0)OrMB&A8XjE~TqhVr=3+gp|2MCEk%r%sw?R|&+E zc!tz_DJdU(tMnbr^`mPjlEmBULP7(Ff?@)n+yHkXazDvoeE&#g(YP0g!jxtn3wZ6_ z<*dsk^HPIF7Uk>R7jA|H?p$_}c$jHN@An(Mb!?RQPGhX6o_tlH@)hw5JlkI&LZFn% z#~jw&EKeN<^Ih~7cuS}jOHg}u(IHKlc!zHbRPY^LpQ2I&&n55F-pKLC+^`+xYhLc< z9Cov<@79Ipd>Z_9=o!;5m2k|pF>$dxS>>4I-CnlUt$KCDG0n|vCpAkvLHHDvu$xV6 z?`QypAi8<{u&pkkR??9)Oj*+#I0&xebAEOf5fQ(5_&wIn`7@&A)9j=Nj(+}{puhRW z*ImGnT@asJ&=gfraO~A1eDJF@JL`9ie|REXIr7kHlGM19YS#!!`RJbF^?5VSL7|R1 z<@K`FSUZ+opyk!_!DTNWt?T@uUmQb2-8ph?%|S8b?Zs_``gPO&`xA_d?~_$59T_@J#W9i1?v=E8B6_&yeYfF`=nX7 zaxTGrfqPGo(2v7vdh;VJIbRS{>L^f}EVGB`{nUNMt-#EAg<$_M+vXPsWp19hi$ouK zU~5oSqs9rgc$Jo`8hu)Y7UZ7A@Z$>C7csjcNQ4rIfQygjOHB(!N^MbTl10p-- zSMPxqzyuE(8LT1VVf&f&j2J-@cs7jly@TB*5_EP6AFd5pP;N8ud+i9FV}vdzzXa*SWMa#cM-cx{!XCuU zx7GIRa+d|I>uK&@*W+O zUnoINXyV2KN|jdY^tA?+m7aw+y19;46V{%t+l$|YQk^&O%7MeCJ}qxSAbK>?Alx<- zD9w8xk+w49?qX&Jy>gjfVxbB2THlP*1sHT129t2gzSgKQ|Ng$r_3pjcF)kee z#{ihqJKFX8&81~(=Wjh_Q!G+WULxUy^>$!J+n;4;9VSl=9B+PWHV>u}3>N%FE{)5e zTjjD@EFJIZ&|O^3pnTjJKliJz+Ixo-SSe{?Mfhow2Q*yZBlvm<6Vz`^(A;817we7ITln@RoTq;`i^nB_&EyKxHtxq1kAp_cQuT= z1U@5{CgA)X_Ve0W!zGeQDv$RP0X47lU7vl!Wqd71?`5)pyeT!Wt?y4Iji2B2=YPN- z<1i#wJ1psZwtXoeOX@R;4ORnfj-2%v5ihVwY(9t=lV1BUI9pHv6dlVN zh5!Pmi|Y+)U-n6gr%!U?*CkIkRyhKOQ+dj-n|@f zWWR~Q#-Ls2G8Nrk{aX9TcC_K5svW7*U8FIwd$BaJ+YdsApaJ?C3w&Auhanz+0f~&% z#LSh;;Ecm0RCbcPJwYiL%&eWneL}KdRe$rd|Ffad*p*2GPDHUv`)CsqF8zU-ZOoRm z)7ivzU@v{|c-fOx`fFqb$A~e;rh^(;FY==ihO`pavCqv7q~ z%NFAcB2`}N@H$UfBefB7%-I3zoTE#iuuCsiDo{QQW2y5jO^caZ533=GVVFL(K7&xwKr z4O)C2J$~~11*87IKmHZMzn1XtDEN02{5uN%Cyjy@d;PDL191O^!-l$HsKaLBU}O8+ zU$g!f{+jK#zy5#oo!M&EwghZwcY9zaOX4|T>&*niwwQ26`fD1D_Y#yLqKK9y>Lu?I z&Ig;j<(JDQR_xF0YN^H~&GubPdA)d#UFbK0=p_`tzAo-^(nCHrN!@qfclbiC(&M0b zvM@+JC8%qgRq08qwpx_X=$O-`uVu_GkzMzN*iZGeGOrO7!Lf|xPG#399i`h(ZR2=w z8<#VMy?Iif7+$o<_(^SUI>{tsdiSnTfENKB!a%aZ`2yFP12S~x^meK$gd?M3lL?l& z1L5nO?@-R}J5pzHUCr=5vrA+)%4#NB(@w?DOh%VA|70*bKHg4pmae-Ak_wG@&*oXjy`3_ev->nT zeEVoV1*Za=utAT@4f4U^rU*k!Up08or|OA)h0OT7bWzf8a@@?^T_r3ysoK_ABhU#NU)B-6u5r zm+J7hxa#lzi9{}In%{go4k1owvFc}MBhT-eesX(aIE;G4anN*Nvb#mArpbuf@r={a zPv#QU(sX*J^6?F%&i}HVS1u21q_;-NliG-Az4W65lUXT}EF=wTC*DagzV5&3h8(g;T|ldqQGf9W#^xJY??u$ zI8~@h+sPG;G3iLy>RHyp+ZKz6%>lHc9@9jp$q5ze16=)@d9`j>?6rosgQ_}9jia6m z9crW+jKDo1UGZWc=0%=NBuzS#ndUXIsACl(v$p4Hx^Sv<(yE&42Kl_F6?`H^&5%>! zZm}|;aYQv`7MRz-$rX_u%!I@8L4)Llg5z|ShdTmTU$YslVW$ z60$Uue6D9kL5>p?Q8ma4JvEsHjRlRZL07j=D7s%m=VN{-L_93z6^ zy&(z-ntr&e?ib*NKKSA&M$qGI?URgWk;S&%FC*dI*A98%KPY>|RP#w>ntzCT`NY2! z--trqB_OhnbA=Qp*p-)JwxXWp$%kT>rA;nr&TsA2OtC#qal}UL5UQP!$k;vjv!Ve5 zWL(O`c6Oa812;1#wun1E9irw$j1C!#M{kAY1JE$CF#ioSEdK#CzcT@ahp=D4zz!O#LmvY$|LD^nZj@yW?5#j-(6kMZ?SC_c0vP`% zh1zL+=Atc@NME%1d6TC%<@)Ez&l~&ewA$mFY8H70$xJfYFBU&2%!SQAsBxf~zZA($ zhxqJKPzbg>f<>2pCoC)qQdBehPA1x);XfHn=o-c08fD!bza~~?(tAWQQ~sKv{PoP$ zLIF27cRBeCL>M7`D_@*m)l>C!%sry{+yhLQvU2Li!^4A*kFQIwE-x?d?R^g;|8R3D zaJ6gS8yFp!H!uu7ge~a6S+2^;%8L^hUYqLr%1Ufm-iKRufD1)A@E*N;^x{!N3ui`t ze)p!sduA;c;J6-e-wi-VkP}w_={qh7iTNLQLc&Ba zCiUr~wSCDTHxu%8zrAYW*?V!Z?)~P?Bd{W#tezHFUEPfNb9qI@z=%I=Q-%@^X0eWf z`qw7oTf)!IH}*XOq?taYd0`X-+ofJ`JC$dJ;BM-d?BnC?GWlUTho?IFtCcd^?&zOn zcu;I_+(0l9R16G(B@tBJj?4b*d-abO?)4UP1)km9I7KU7+?^`~=TN2iZxs~KDENKX zr=p?xK_@}ANJ}%s>bZcaO1anHpdC*c6X&UJdd=TWwb~8T-@MjqEe5_}iYxbuFF~7L z)5ve>q^#lthGZW>sL6-X0e+tN@7pk9(Mfr%5qFPGzBY4FA8$h&XG-O=^?YWx?AjZ`4d zc)j-qy%mx4nn$6tJ$ap0@yZjbSPj=dXx9;GO-XHEb3cY>-{nuVE$@GGmthPuog{ES z6-{2fAUiVPeOFO$Bv52y9>ghOP^XqXt*NI@R5lh}*uKp;Nw! zZPmzF+F0d6&PCD8D1qX?`jJoKWdhw)eDZ5TQMv>Z0^vduQ*G;5laT0PVQbYrhIl%z zSc7P_3|>Bp82`%&tH-{>!^0n_@^4Qkf;rGLf_WaFgZ!weG(GO!(Sn96(`#y8>^*kz zh4`Of#sRYX)>MkyDA(}p4Q3U5c>z&O7%XWhFCJXRX=By)_O^8rQT@u*c4_lUSzpza z8yybY{@qo)K!JQkz>1Zkke-c=kXU8P_#|y_ueGCSdAfmJt0J{|@sj4d`Q(tqD{gI9v24)Xpn|F|4ZEFRV_gP_gQK*|U$c;= zhccXCOG&eRw4jJ8@NO*5q_(y;AO}&=2YYMV@;Rlmj`yu~zStTYo8usX$Ta>=PDVom zEHk`PK>j-=Fte$yrz1RGMFS#EnQxplo!T_%$)niu1;-Ju+bou}MP(r#;aIw=1_Gp_ z($f4Q*zk}35#-PH>QFM)Kl5=C)XkDmD3jBnA*u@+*fYh_>Gym^|B9o005ercOG^_F zM{AR}B77X1){% zqTB9CckCEeumDCD380v~!7*6~02Dmo&i|uUYd#U%?-l)vxs$>b_OQ(}<`cyAa`s>oi;( z)C%XP(hBgB(|`PaJ+m;6kJY>$HWXHCY1K#cky@h;UeLf%i7;yov!y@Gi!+A|B^W4~(&{z39G0qdPCCTDS4O*_!~bNEC+@FGuXocE5yP1clmBZi zu&pO|UJj$5W&E?Z-YLS{F@jbc`?k^hl>Lw4&oCS^SPzeRV7nHPerW=Lk081e)B_y; z^u_-~>kDhBBQg9EQ15k0#R4%tCIa{OI2dIWdJrDGhgkOR^=~LEEiU%hjlf4Sj!&Ms z-O3OPmBVc@RVnbgtT3xe6ou~VzGBNtex$*8GLu?>+bd*4mufWBQ=Pmdy zKXPboe4zoXsjZz{#H>` zBd#9F{d>qz#-|?zmcegzg?emc+`g-H{}S#@yJt%OI;*6rYdvVA_08Nu$r2^;NGT?s zUMq_`8lAwt9X=*|TIryZ$EM|CJ(P}(edHGmhd!4(H)X9utTA9(R0$&X7 zRx^6t`-p^TKdnUpPh3Uim^T(V_Y5Xaz?QFDCGm>7KQyOc7)isFWRWpdn1R5VB9gS+ zd?>VSpQI<@t%uSh)xMKL2f+{x83V^kl~ihKAxGLb{4VhsZfBsLdgU;gCzPs^@M=o1 zWZq}e*j(Q4KV|KEho_i+idcGV@?7hA<%!E1CK?ub3&zp1WF`AMNu@3lj&Cm{OnzpK z$QLj&fCCW7$aY%dh1yv0bAl$(<0=e7%stIov4*bnW=`4Iu(xf%<<}mHj*e5k)ue-W zcCLY5uxJ!o9PQR`QZ_a*}Iun%G9doiApnz)7B~e79uOJ~sAL&ttI+ z7u@K&H1`>MykaJ;aV@G(&G1Bc^JgamgHFx6xtV?2>2HVU=L`Nv?tufDwHH4Op2umL z@-^O0kykfs3b||ceRc+F?l+(xXMEj$`v_m6sI-KJA2`IUm*})No1&>i%x-{uSNi8(L zTcXu)oNjW=yVsXja`H+?NI^g$Ylr_ptAjLaQ|IlM-GQi@ooMT|ilb~Qs@oEF}w|ll`KQ64k6OBoXG>KnNYuc>a*1Oqg;c2el-R$eeHo3YkiOET_sozD_ z%#OpRxYeD|bsqlW{W7ig65r;wyPxICADg3-h*RKMq4Ji1uJfF(w_XJWa8^{$<1l<+ zz?8-J$2Y&ci6k1ieD&MaagLwtle9Z9A2-jker5U`qUJ1x#AWpy(WyoLAOc>}Y*Dvc z1-4+3`b1Wzk8L~eOzL2&+jclLksoI$&Z?>!2kWc4wUWW8dTpX?lJD>{CMnJ9ME7+} zR6(ERi?DixB{?}&RSFo#IY-ouUK)+0!<+f-5_i19j?uvCX5^n1b&~eHn6OG~Vtnne z_`cK%rffp?kTG-alPx<%Neb#)y6B(RS0PCO76AhCxN6_)3v#UP=Wwrzj&lXt6@xev z15zo6_vD-0u{^V-m{qdtm}Ik<9k_w}gqX^vXx`Dczvb7|b3s(j!cx`Gb3C7;`n;F3 zRy|i`lZ!IPBIkW&{&jPc<2-hl{A=*V`dDO3M|h&SRNeAQ?!wRqKrc1lEv^Wy0f@#2 zqY2zbu>V$2wv2CF4xvZjt@NFwC&B$F<4{uMOHnwqD?c`&1ZVZxn}Z5@K<*=As;XwA z-gU0+F&w(iBl#XWCV}LpgEUm=68NG<7wr-2-geuCB+4zU-*^1bU-^*FxyCzE_wqf9 zQ(z$UjT5V|rA0RZcKe~!=(!Ny3!XDVHcMO8WD@gdQSd+6tC?%VQCAOD z8`4tzZb`Qmpq;7+gE+~J*zc)XBNacX2g!DTnY91j;&t__RiO4%%#>J2(z}iL*)Vww z>sr<;&gh<=^|OYa9I8IaCt2DkDZ|?%BO|BOlxIt{nWme>*B&fXdnL#1u;0ss4kV{m zhhi*n2k{cj+!s85)optvfDKZz$i`%Ap2HC5ZaZkUuf-U*1q6N4_YgV4DKhH(wQi$# zNY6vXDM-aq1kz_qqAg;_|9|LutEf1eCTcXeJHZEccb53O=JTGdt6dslUBk_jr-k6Fq+TGJ)RWhzHh@q6o{Do_y) zRN<3?mZPG^`Oc$UQs~o(QESL(Yf_?TSeJEc|Hibq$x(bvtGK6(n(V^FS{qg^>y`}K zElyK0znZMm9-h{B8tFBvH`9WQKNPcNo>9AcbDhlWMht2R-`G~adQ-jWo6e4E(TNsJ zTIjl@XcIFT+#e`}Yz{Rwx$dLhPo$Uaqi0i(+uSyyhdfS%)0VntB zui$@lRT9bI#sjUc$$jEk=#u zz+$FXm2qsYYkqd$h){cZCA?fv2|3>fKrw-1ja|DkXj}{~odj&>>&$(;Zqq%I3hR)3 zOeP~WM7QN!6yS3OeDejFZj}ZJQQTQ!a3S?SzVU+}LLmsw!oMe-e5%-pH=*Ywl=q57 z5^JGXAmY(h(#mXou7E=L{?d)((kq7KzI7x@%tnQRaub$(A|(|>4|=&mPBM>}kDS}t zUo?Pp!-5s5;mc9zR9DHjcxsmdk$=Tf_HhrDW|!T#$NOIKlV11363e#_qAh6XImz*S zoW`_c^FZA?aThN=*TIFr_PB{&>Dola`^!>mulgVR{2xQkRnVCE+i#bSQ#$mtG-;5> z;rr_XulI#Abz?TVF>Upqsqx>Y>TRo9-SfmJ3rXEwyOFNSPP&EP|=06jj5u`ev(?N5|enb_W z_VSj9QXa$lSb7W|RR-fj8{^mAouSXjirqo<>!ui`gc|(wvwo~$`MAtdu$oFTR;K5- z$J?I^-5EpzHq`wOpZ8wsQP#tULsg~nvyFuFJGBuPU#^!2&f5T2RW^LpGPism=2BBp zv5w_VkF)RPaTsGs?DJ=+iP0P;qrTp8A`g@bk3{$B>Gs82$|p**6lNALyqQlsF9o>4 zMo9CQdk{ix&!%JK6eMvDZjN?GkLM@TY8n-ZCUU;5-?qk%t5MM~I8THlKHs33#S`Wt zq(0p26t#2&cxRTd@!C?LPdf1}*f|6JvMt|@}vX8sM zUa3oTsnH& z){HuN>IQXU*HcCKew~vey49SKJyFnqaWs8JI|<^>m^?u7bz4EO(*GTuEZCx8_xYet zbrW_p>XVNL%_|rOlOyDw-4Nerh|6f=O6B3z7&?|!Ke?vB5MJ0$o zO8+|lFPcRT3ygvh7pH0sG}diq1pw~m$zkb*petvC5_kFR^BYONJ4pFoi9Bh>ca**6clU#z#qUQO< zzCU}|miI{5(c)>wGkMr{Qg!^uI{!{k`4w`x878SJOQ@vk1P4dN1*PGP$5ykxZ}K~j zraNn;!2sZa;OKj1Ax}dYu7n>Yq&hgk)}%2AUOdvLUHSp0$PWF@0ZB; zzhQpvOY7P(POrz!>1ybvG&CRezV7Qi4@`9tHY~C{p!Mu5#uB@Sok%;~5XS~kg3RDo zg*=fu`%?a`soeth1|>$YY}gJZMqAtC$t!Ee-@npl!oSXvIau+!1H!-kOQ*mV9itF2 z-THeus9WIGTNhkH0Yr>eoUNE_W)hJ|CGRt{`RDl0UlHnCK~`hA` zFCIlV@%M#4mS;e<4OFx$Z#;MV?&xEq?qg#tBk%6m*iu@)<>o_c8u4ys)M~uCfrC?; zdN9i!snWi_8iiDgwQ~5DS92!#6$85uGdw&T8=-cjWX3$fn()2PC5rakaplw{bOl>= zla=$KEryPB!BoYwKd+KJgpIZb>c8gdOh{mmS=q~(GpE;@SuR$N`VplZ1=C6z$F#PV zG!1D)(qO6TBq*_+0tL?eOArCo4zT~z>BioJfWvE zVf8QxLkW_9Xs;a)n)&I~n;;2=kNQ^OOECk_N{sf(bE|tpGhWJlXK)C{N9WzWZz4%- zzw&toG2iK!jSvuVz`f0=R*7V9vhhwwpp^@&QcT;3hH+^%rCU#48pPPnlnHno$d8u2 zC@JV``8lPEl?URt^@o2@>igkZ)?3`|@f;!k>^iU6s&Eruv4$~$?*r13!sV8gHwL6zLaial{@Z370i&PhXE&yPOm(ZLWfad-k*%-YZWU}{ zR4Y}nuqmmr*!dH&NZ!Vn&COVglN5tUn2n=sPA|$7nXZtkWOKDtC*4GdK-Eu;12wc=|It@e>VcH1 z463L^PLbHCTymD8i$>WJh+1D{`NJBsNhwQOO`7)5C>+NI91>jfi9qTyU<0$5Md5{_ z+X<+RPQp}ZJA@gIRfX9@eSB3|wv!5fkU(CUT-q)4VVL~O5&e0K%}y&b8&S090oBsi z!$Gax>6O=}jIt5+u7e%2W-H$9XC--;K~wgmRf-kHz{}Hc|GMz;)19-^ok~|q=!w`m zLh2=&a-bgXp6uuAl6|1^TZ`C0c2+#i-RTPUXTmN-O9OlWG*Z;4{)mx{4~?=yu}B`t z-54E>C*tT!_jjvp$#_LzU3e=Nl8M1739)$cE=z#v+;UnG;w>@{2O)+dEjtzyKID!c z_U@I2@~_-LTB!l2xIR>}bB^FWhl8-1q=7PLDOyYu7Ol};$!N2{5_Ty(RcoF6zH`<| zvB4kqWrex%*mY@Gq^uyF7_`OIUOt)6k|c5x+iu%NNi|XG!XsD*sgjHGSQ45j!ES9b zw4?n_xEQ#DHJ6rwJyd<+OsM~Tz!()9`+2CBL^BEP3G>{=AOq_P!3OFm=?JR*_3m(nZO~M!|!AZDrMh5 zw-{}q-m)vwg7K>6zDLgHg-yjio`1q6KFs5U&^tdZ?IQiS&)HJpOw-nYP=TDH-6(o=ie;;8l$C#j8mQPmNawK zh2YB67zDGf)#T`Nm~htTJz#X<2o`}7yeaA;NVUrcSDvS|!BHNhdPwyhaHvV-_<(44 zmV~3tGAMyTA{x;eJWfwLQfROuv9ticek}AV3Sze?%W0yz<9U%_+mUU0!j2J1w`dYv zQSsHWOMivlgG9)lO((-+`07vTKs4KGU7cM9>$Vq!|144w>L7bl_EG}IwcLE+%kjdD zOIF2NirRZVXmWNkF;3@ktCZFa%QAg|h!&2uuk^BEti2zpz`S&|h7sLc5(ne?VK~(7kzq)=k-sEoB7XTQaLaH)mpYZvYo)KIkV26epBl zqIFA((RCZr=`P}{nPB&qj?(*RB9hCTA4i`S&FCYCfTj&~jTQjAiSOM0g9Kz?L45`kBBVc2Q7FQhFG3w@jy0c(UJi zApz%iFQ|sjaJGQggi53*NE-bZ@GVgUBiKYLd``Z(I|ccxX^Ew!I04~mWpIfKZEL7P zp^P2TthkQxvlOW@3|-nQ1qZoUW<2{SEE*bmzX|@fk0(0I0zAiWN#39GHyo>_^pg^I zhN5i&-RLMX2Jj690yE8Fgp%JgNc^Fijhugm_&R*>k@|d)KIOxc+ASZ>(tCFD=1y^> ze}ZnE*V@Nfe9~j*>NFr>Vj)+0RHTIQ|L_ z3S;ovv#2`YC#kOp>Xa5Ih@Y~{oXx^$D5)*sNe~DmEC`9Qh7n2@&4;Zbq1m2Q=*pE* zp(xx&1>#{C(JO$Yr&n~kIgwV5!+$fv%%`MUI{pS))A7f!1>b~SvPx_o2Yn(WeBK&5 z(yx+PbD6%II!s5(Nn1E&dY%~&leZc7b@)Xxh^bY@(EexjzLiI4*hfD3wUYkz^u4jI z!0|iqa^3S>3`!DRAz_#~v515V^mOY)2lkCYPF6-Z<8Ts#4H{jMVmc$Sq>2O}s)hBF zYb_%Vkx|b<-l)vL`ys1lT6l4jF|c|c;dWO#X-GB`nnt;kg4sNXFN`?w)x(1?iAxpm z1b~aodt8Hdp_|?qM(^HMViW0gg2QK1lcg6z*QN)3lR_hEy&tktR{n~Hcc9mbiOX4{ zD*>UVp&P*B^@ui4F)3k3NhTH;-SgM?FhTfV#%I^OK_|aL$QlPS>;y6x_lVaxa0Xw- zGbi@k^v0ggpHn=e$=eRe&hpI@F>1FA+=NyR7UO=}EVrC~$Wh9tVte8A{VkR9j z`BU;9PMqy+DtoL=Qv4tT!_d{sHm?&z&$6#X zdXha6G*|B;{ z;gtZC;eN-1SEMpP-31jSP}Bh3f6ibe;FCtD)e^VHbyu9O!0KJM-N>2YevRRNe0)r7 z$jRVJ=n0VwYdh&LN{;60sI%9-#+Np=Qt2JAs}QRV*r5(R*YEOLJI%e*DXtmWFU05B z_1I^ge+W`ZcXTy9_onZDu^#(q9yR-#JI`;y5$=)@I+{j&G)k0q{tYy3w5yS+GT722 z*Cd_XHchu`=t)IijD-u6nt9@U79Z^n-9sP)pbuhtuDm;7_nmR@04f3&b zFu+!NgFKB|O|1)kR?PrJv;ZRNkLur?i*M2Qx;W0>d#;28HtT#xi#*d0QzhQllBfOg zcyn>~NmVbhIcz81j=6BHLqAx=zA8PQqa*r0bY8qr^(SRGoatnF>|g8q(fq{L8-6v1 zV{L^q(D1E&>EWlB1B8?XLfn z?5`Tk=@@kurexP^~_rt|{fTM`gi;1eAKh=}m;kFR6vVxI^KUgy!|FS!fCb45N}Q5@8W8^Gnf z6K6;`6x<7Ktk~}ULA&LZ0ZmTCz^)GgxqM}NFs!+r zai7}gcB}9w9qoCbKz4{MW+LRs6=nWAeu>Y7_N}=7AB46&Gmp`Z^9qmB#_!7d%0|8` zY5r#~d2eN4RYNODQ!Cl4+V@84m-1m;U98U3AXcdL$h84;BP~#;uDqKjCmc&x_!nr| z43aBPg!=zzQ=LSd4>L|h0czJS53=h(OG|e_7iqGo9U@oEG#=(Uoj3I;W>aH zBb#Pbz}Sv7^K9yyiM5hGx$?Rk-FN+>Uw6+auzEY;rV2*-BE_8>kOs#MV*9asfs_pNH#iefLj1^ zWT-3cr)c>suZE@-vbEwbxkJHOu&aGR{OX{^UuF~P5fnL@f6)V-3|Pd+7wuTAR#)b+ zt-AUqdMs@z)r!(_J-9KL8fF?oSU)|WVROIqmdE%}3>7Bpa*WvA~h#28Sp-wr*{E&2uavXDEPpV(N z@59D;Wuckddu|A%w)mU}4?pe6HLh(@msisD75{1?Xlg1Y_!H94iYnn;QCiz?Qb|jb z6ep$@etFIQI!~5X7T6SR<2~gC-<$OXV=y<|_xVCdtw_+Nz&rzDDA^Xf)-2B~e-RfR|!7E@(JqOzYh&$3%;K` ztQ^@^2HsN^9M(KsXc*X;pp;H_@poA8Ec-U8Py{^j$4cs~RZ z2F6=>_|)ZP{N?4=Wev%@`TL;cMs?Lk8j-ER$472eV@G3gRpYP5s)FK;rMZp8Dg6b` zxbF_FHB60l4S{iD7mS*{S(^&P2jnX+=LpEJPoM%6A-j+3-&(o!27SpG&u;;;Qu;T? z#%yo&aeWl$%A*udy@d6$IftTxySu6g@d+D+vb~WDq#Ux!`}3ATu6mx)v}qT#`4+nc z?CwYoX|xeWc{KS>?U{3Kmym=$ayd$T&xQiDX*xvxjE)eFcWmQ|(>BwTxI-h_X3`|1 zOo!Fb#VlnP$z{}`T-0o18$5s?7X3T21pcVtcGL|Pk_3xkV;8o91s zMn>R5^;lPs?N42}KJS}h9UENBY~0HN%+pI;tLw*(E+{;_FjgzjwAxQHfc2>1ag@40 z0orIU{&$^|4~fNZ)GIe@w&!i{Ldg7XE8$eWIrV3UnG136aj(ngwe#L55A5E=I~D>Y zkw?juRR$6(W=fqgO|2(OB_~o9ZlrY7UHkSet6lH<9S9R}QN`!32E++!>IYvZB?vc; z?tiaM?-M?*dBn-ndb1}k{Ky4%j?{Y}P$UT>;ZnCs^ULWquAE-(07Rsl9)j#>&(R3) z$+H4(zhajNBu!IVg%xYcW@9~h@|zs`5P4tFzlEXXelE+cR1jnC#?Y%V;$#x0)A+{W z!vulKB%~DbNTS#obp=T$bkUWClCS1;VK)gWCS{6>1N!jz5<;sD-H8Turzav?wLX6xUwJgv`_gbGyr)cjb`y#*F@*lsc#`O8+TwE? zSRnuM)V=%}x9WxRT6I@~RnJ@UefSl7z6>8FklrWpZS|f*xHk1zx7P8R29q_IVzhdi z%V9VW#VT618=?F%T`~FK*xAeDDI0$F1x1tJ{l2u91+FbItnF)zi*iP*UZQxVLan;T zcJ1mHss8h67?|Wf3x+M2$rL=Vq6AV(@yc1hIYka5j9py}P1IE$rZ{XYsZSycJ%f6JsBsfxhp>-gQKT}wl+jxpuvc_$fKv6^k)WgwJp)feSQTJ#76qQPB!Ibe?)pk6wL3Y3I? zmqvz1rWV*aXc-Yng`s%VkLm0qj?-Pn?4T>RGH>;?8=YqT1iC=>3=t0veRbOvC*lq? z&G990w{!aGYtrg!{`1$y#xfs#dbKOEdLxQzGxSLM69T@+wWa5;a!*zpflyYw4PNuv z3<86Qt}S9&uU25gd*1u>>tSB2tB;wNd>Zb1*2!1@oH0L>&I7@=aR^DF|XytMkvy(@+xc{5O0 zqyy^aha_BgJYMKM?$)h4)=$m6ykAR~qK?6MXR+#m6u;Ez<25ggzR%(&v44SyytmQJ z41Qwdtj#93OeVO5MB&ooj-i=_Mjx_2z&Ma;E5+-Uz)97h^!^;b0ZUf~>*-wqAfsbf zh>a(nqXjoV8I#beCGE&I_rrD(MNK>+K%?X52AnIB@`?vYP6B+%Qzf{6&fEnf8-}WW zaKhBAeJY*acfG`dc{9X?aCE^$n61aCCCWGlP0X6wcnh*42wJ$au#8f`piKZ|E&$M=tKrMu+RJ6E?h zb(FMoH8xPSEGJr=@_e^ma~f@Z2J!^R5$&D4jM%)pt3N3-%~O>$qg0$uSDp)IO?rDw zr3tP7c*%@bFMK)cNF>Z)Qy%@3;yN2dX|60a zeRzX)HLdv41HUj0CLfR~CRbu#@C^eyhuPcy@^a8E4d2}{(_E4Y0462Sjd``GGLQTV zNRQsetJ>S&HxM6hM}w33LsIiXZHilX-B$j^6L;myCC+7lVz))_Ch81B8hG1@xGp$m zBn4AFf;*RaTo_BsFeo}w6*c54fnuNtp2TC(j0f&Va5BLWBOZm33Q3@-H>4PSA6bkJ z!^h2Kyd13+2E7|tJsKg>zZipDpqOibZIjz_efhAjaN!!yZUQ9mb5sdmap@WzLO&n{Qobun2_FIdd15HNyd-}8eYfv27 zYwzE*M&GNiJ>Q#M{jE0utkG96X4~HEXkIWeg*l_(|g47DD+T&=KIQ zXnGelDVppk-&-G;>NKLn6QP7u>snBu&>5Sk0LWUl`RXeM@L2r*VFvLB!Hv>py(3IO zC-TD)fMhDEnwtQ-F?=gf4hA7l;SiBBl11^iLJDwevafrZ@(2+t60ALD6PY=Q9Iu<| zt3E@TnuZ_tyq^Ekpmsxi^%s8{(Scsuv|Z&e@g$buuSNBcDTV`}STTrL5gbMX2))r7 zqa7F?YS?dfX<#Xg2R~VaeJ$y|7+a$<$no>kF|O4p{h>jh5|vURAkDfldrQ;EDW`Z) z(dZP3(M5p>Pc&U#M}}GLwu?}mDxg&G-y+yl%9fgTn4{gvht5kjUuzSQGKrPLoKP&k}Xdh|bG`=MQtBw{|-{X|Eu$DKo{anK?^XSB^IvqN^+`g$n`8ZRtWZSyvZlt$8Mr3lzt(@k)Z1hD?Rrsoif6SP1!khH{_DZD%h6%NgvS0cgo@3FNBn;=b$8$2WgORzr;{mi*kpIkVrRI}->bTo`>p%#HlBGx*5 zq@XMm(lcga8YwE6cIh};4XG`9luREl=~r?~ram2F%4NzZA~?MoCdN;8n}de8E%l#x zL#n?_mPvrGW=XI1s6>u{G5KdfZyR)dEes@$v5@YT2L+tzR>QoHprxXLy=)=_4XrL4 z?j8~FpHPLn*V&_l8p`ZpkO#pFKUt!(wdbR=Pq8G?q_+mU#CFZ68J>PbLp1y!336O0 zm?|8%0W{66#%tcjS>7K+wXtWkRBiM-@rrxs$z~OHmiHN&WB12#wd3JJ=n~>|1Y zqPP=S6BC#~#HeTJ*JL~$id()HSCE>BLd5spre8NCbRHR|cG_y23I!s_+ zqNqcssWpEZKWF@!^a&@lYIJn0qNHoxkhKysgH%}Q40)_s3#kgxR!^^1(xp_my>vr3 zGZg#DVO+HHG6YDw(>)?pWj{>Aox!QiNkUtv1(H;;3Ux2<(7ZDaFmLgMuC9nnx7tq} zYkV9$Y>fas!2#z-waZ8#j_s+Kvc$ynQbfr^J zF^;IEv`w=5q>aKLKxX4zK#UOAU5FTCejk(nnQwWq7}Xp8hGX8nwtUq?WCG-``uJ5Bb)L`iyJ5vxy)ka zMUbh9?T(dvHJ5HZir0d>!_Bd55j9WRTEx&2#-hCLB!`#5#~ZHU%6}-JFvPYyt7p10 zei$=WN{7qJbnr9}t9q@eSMCOvIb@xKj>j9@;f?mTX}8I~m@ztU%!iok`Zjf;D6cVbteq`o7j_gEtRM6DB^=N{ z=W8mSC&SqKGIFh|zW}VAKSEQAi5u!qKj~y)3{cw zCl4()?~2Q_ZfR*oLS_*>IoRqp5?7w$PtQH&YCTN4EKI?E51t>jQk9tCN}$2=TZ00y zN@3>}VsHfmFq28JufXXjynZzEKHIZS%tgon`CnbEJaf9(^rt999#0aUz84$&XK!a` z=iXK;9m9eT62Eaa-Yz!UTb^Ow?7x+>ds8!gYh-hf_w zYlXj~o-xCpF{&^lya@lMs@O4*5q}^8n-LfBrFq!M;NQ)_q5NR0k+u%96I#S^B)&lB zQCSD5b3aEOdm?hWYPoAW2;aUhzYsNA+4_)Qr!*dae_aaC*dx+>*eQs#1-3uN%m}IL zxgGeAN*K#zzZP1JfSpr~$gc-W49+*W>iU2rfvw501p4@YGhu!!!NLN!$fl@PH`A5Z zG)?X`(udk=i6cF@9^p6-43xwv(uw_kWB9nJ&+!_7xCBi#`NoqPvKbwG@)vwObV_bz!a;40ToIDfC%?qoVzZn*$ik7KGIrCz)L ztz7HuBk4>9=Ua9=u~Ji2S4(Qi1tEY@e<-kDI&wGE6f5Kf0m@540RQLenhA}SEXAd4 zBTF7bYq@bNUOkPL?au2kK8Dv5s+tf9PL=n^tRrlVx4^AN*3|3Rz0`v2AX*|B^~NxHTzsK1`9xumDC5WQkbrv-hn zDn#dSOpGI(t{51lHkg_*q{sP8(f4>YuiOtRSVGD%oy%b$0bb7g2XsrTTZJ}O{OYK1 z%&m9K9TV96dPZO^2CeBtih`EjIq^!ZsZ;5?ZV&pMis3)FUjoYv>SQ{%kPj8btO2Hn%2v@Ol7C^vr)*5rz-hOD@q!kV9kb7y zzud%T232$Go_Y^5u($9&Y13%d#dV{a!skRjU`Nq2u6Wj=5c1aElAL6C_3#aA06EhMjq)8g_?y%>!%aZ99joZQoWhF^XFNQ3ru@EVGHH=*(eVMxB$5* z%IUFFvq)X4t8~G!k`>qShWpHq@IhN%=1Q9Y2S`DQbO>in!!W>bKjq};!Pk+%g#j6zx{&*^E~yubjy@$uNWfo{9a}Sim&PJ#%AU{+*LHQHrNa5w)YNQkO__Mlz0F1tZuD9xYb&Wi)N)p7s_%kBZK7>cAPFSN z+1ecYwRu<9FDxwct#0F59ubt--Y0W;0G)NA<^XAX$!ua{S|S3l;PzC^eNzMj+1Jh) z^?QN(KbDVmknZOD`(wmmC=jSfBEKD}5r68-m+y|bGi{SeX6pkEp9_pT2 z{cHr^TyUC?9Q?4;GE!eKmSz;f=EwDKDQT!U8L1aYv3Kq;EzKUTgiM0@RsD|dKV!y8 zGs;Vb6;)LA&CBV^D;gK^@m7RU+vHrS9=fOI=NFG^TXYN}w9K@le-+erS(MdauN)D_ z>gXujHgH+|Iu_(ttT{FJiLQWaY6yuF^Y+GHg_lsKiWKb1>qMc`ScU7DZ9kE}{!o({ zn$DGfS&E1s8X6KJ?&0~&$II{1a@+}!e7lS+rDTu$U z8`GecoUv+CSvl?^FCSXGu)Z9mvoWu-wi>7UeZ{%KdWOZZd+X&YL94tdn>n~b(*WLD zbyKZmo=_aaMz_7;%#i=)aK!CQSxIRc5%uE#)e|iL%S-zlTO8ol_j8v;-OokNIRrzV zHm?0KiH~N{d#lpgs)=hy#7*OKi>rs$*L5xYr&;UYcPjIkP~>6fu1F9 zWPg3#!x1VDF5vi_=;-9cnRmI2?r7wi&Vh9}CX>Crk!k0%?EJB(hIKc0BXFOTxcYQ8>GnRE>KeD(4wm2v11n(%N*(jxWc|nb zm5CXg0fjBLkIW)Ov;Ugo|5BMz0bp+c9GrTAc_Q>9Uj zkht%)1Oy(M|49VZFA0NTogHc%bH)!sJ~2xs)>n;aSn4+R`oD|?JIMAJSV$ExkSgMmQ%#Rs(4vt{R5^z`)V zN1IAMebZ|v->ow}9!cOY^JO!FrB7+;W#^A9qeLRl^`ugowc|H$2^roW%cM{^VMn6#4@^52MR-PHYHsWBKnj^TAu;@C+yB_JH>ol$3&bgIY|9RRFh z?;A&Sp4oe>4RzU_FK+7@f3zK%oOOBvbe%pVTR&c+8_g-tGwPO?3wLGGOTGnLzl{?} zBQbz-e*+s{0Ln6Lya#pkzElFeu(K&?Li!II9!4;i3hB}@eq|b3PyP0BXfvX5TJ0X* zKPTUMV{`^vhGSs{k}H;F#O;y@+|3`KzJ?C+eKn*6F?SKbq;>DRG_7{gN#;yY;YoH( z(0N^Mu_`;nAI^*H|0c(XziFwrukA=F?eq0P0m$*kvJeOHe>a2{5_fP~EHaiU%rDpYM`W0FNqDQ4+jvM%Wl{}?^doQ2oS%q}5`+Na`2 zuPXkrr%3lhoCwf`!JZ&!Kq~L-p7&$rdl&>7ExWK-I5{S2d|o8H+fZ4++F<}yI8=Z~ zNHVZ*FkmafKVuhe8#5K`IPdgR6adD-JU}9(J_tZ>Z)5F{Zv;y=i?&E*K^-NJ2k?{m zz!eCJ0UBfl(EGCAt3`}2ypdm8Xb;9`9YK8nUB^CTst}6%s@#R=L8(E zq($i1rG}<|fKm`;CAzHF<-A*QR8-w%OD|`-(!g~NVohYoCr$;*q zX31B+Ytv&AA_s!aq_~oWvbNsMjM$&z8|in*Gx1~R1mqk5jsan%!x&`H5DD2qI5*|> z0{Rm(Rn?pJ5+BE@ENp;)C{4er53EX2c}N4_yY!vtyiOXpy5DwRHYwQqCZP^x|MA+* zMboz3quCX&lA&Snk6bGC^F$_7?>kZFgh12)5e7X4+BxJ!1eZLyHI&5*NRE&~8csOM z!FYkE}>iTioW8Kxrs@0u(&Fyc4v#CP=jg=cyk1Q({j_) z1-KDO7fohui$BR@8G8&vv1nSOa}4A~x`+Wk8n+Bd24wKZ=!AO8nhbSi*ODU~9=RR{ z9z*{Kx)S|aC~L2U5CkFU8Q^9fTq@;E{b(H?4jl!*&n#>LpMnL`{WV6U(H>XTxB z{+qTYI6V7fy|e;#T6ex$|DpBw7AO|>nz`@nkR6@&Wcw)OECHl)`z|Z8;*oUJ!y!94 z1pbj?9|kShO;ZkWV8;^Y@oCi6AYv&*Y#vlpySNh&U&RkT?+0cE>>7Q*s3}(`5o*V5 zc&ck7)Eg=z+hbNT0LF8s(V*Uj;%t%(#a!P$ne3I{E}D00tzF$gzwO!pu$c* z*poKxf@g+0N$_{NI5b@NA=UeohK@=5Q9&>SWkX65=10bXOgVzYhk_4#EOEk@AfQG$ z(*(h2gUD!a^BbK~)Yw0;(@33k2elq!a4;2;j2dGIy*0VFBcX3G41Nm;hHLrNP=Vx2 zbg|H9(PGwWF&3Xoo|{REsl7gEB z7l@*u&QGP6LAf|6wIx3oSV91J^Pko9vp*epeMu(|4sePq9}M;<*F;b1-s(q_Ce7zQ zKn?aNy-D~&I`ZMJBL8z&Q1o|s1Z*xay;)E+%BVzJmm&dwn1pUpYD4Y%#!~~D@n!Cd zOp1yN3(dZn{=uC8KmgCE?jp3&8L^i-as|b->{bGB?Id_z`T~LRwO)c=@C$hZhEEHG z(?w=Qo$(|U=(3B%K?ngrVgB@b80Fe&rRka4T2{xgTSZs8Z$p^mi$7&l`uh6%Q43_Z z6$v3HJ~Q(sL-PD8_o>n?mI{lEjPxG@fu&Icg@IN&WvELoU1i%xx<)?X!G`dGz^vk=H)MFQpcjABV$EkR8iRuOgRafYj@?N`&v15=@HAgHs=Fmt&>Gr zh_S{oqc#l)|L}rJW9{HI-4x0mDr0G(cy_7#8X7y#``) z5ck(AVZ8$H9>MNTa&44LSg9IvyON1~=y0}W(&A9NP`?dRgtd%sB%WBgC<&|L=)5!1 zt2k97-&_#}jo7;zfImLc>KO_B>4q`8V;T$$G8{NZ_7JA1QkQ-Lm>=24^t1FtOdvt# z=Ot1rLk$^Slt-9YPGw8?t<~rJLM~J;j0dpglfD*>ZF`{DR*39z*@wABExM!dd8SHK zC0>GY$;glD+x58Vb$M!P0~d8Z$d9l3>TS9XGxQa`0*$+Z zE1JlRpRMe5tp_MQy=O3~jHYMN(z?%CH#dG1xp~kbSTjA-st=-hqkm5>OeT?orF=lL z%u57UpN^t2K(*FFr$Xb6bRF`jWA_TMbRPu5acOQjr1v+5+xLsHgA4A0YvV?yVo6n@{n5( z0T4=0!m1p$X;7)*T;{fBMar2)>7I#p4~6#nr^Y^D`!`Hf)>UF(_YJ1m4L(OuaGa5f z{YT9R;FDD~h0&^LuXS}6$*QX;00tWNr=1t-4Yy^Z*iSorE4xpc*7@;nnCo%XN=dZU zl*;TUi8x;McAHb5WCI-ia+e6Ppno0qYF*B2RtY$X`~=4o4?$Y9?wqG4pv;M0kCr*c zyhQUEMhBt4cYn}={^gN0U;A4vs2X6BE63qoMJP4*%1^CCLAeK^-!(oXLpRySL(}CG z5j-K3myYe0O=0+CPzQbUB_cNhIMhSw_O{p;kE8v(^bB-8fwrnV(RUcIi}NhO|5{l+ zq|`GP7ZKbj*&!B`>5{ee#Q;?lwE$3AD%+kr&uPQ|{SG|=-DQn(&P-_urg0czg1L41 zT*P!y_IKf$yh&T40_-`?%U)4_m+cFagh33fP6ZGRYp!V-ha_EaD$OWHVt?cyY3s@cTg4Br!b&(C(|Iml@C%zf^ zbl7g>yTjW8hU$OZco^6Mk}U^zWV=FxgB?WwSnf{@crV+3d~J2O+fNOizu|Q z5JY&E|4vf;ql;v4$j5)#%V%g~$XLkw|7`vz4)~)>I3h~TpJ(!?#y^cw0^0v0Fj!Ds zu(0s-hyS7tUf4g4Nz(n_cl<{>@P}JAOE&54Gp(PN_&oRMa@Q?5*vXCbvUKz8Ggj z^z!cLa)w?1EcLRB<6V~!t z+zwh9drq8%k+aN%7OB&VjE-V9_0zK6i_JBf>2I!dgN?bfxWXV*+VDDMp&%YQ^5iee zl^U5z$ysS%+QxuG!59on&UlU zMpkc~C^OKE{Sng?m2U!@9Et&k3w5?@1E^p=Cp)@TR%Xi;vZGe#uVT(hP!|#s;;NIb z@*$$zEM>-y=WCJNn9djK;zl8#h0q4vi>4(cAn0V_+q+aI9F6)NR;;b`zhlbB4N;dK zs_Nt8S+K2*Xp>ocrJJp-&*sag8rf?KHy-nG09v@*sC-$FkgdX`t&qL7E8a;i&nX{a zmep*3Z%m0SsMtkBF!9)GyZoyle3DpNPcp_~XRdVmkCHhGh&tMPqMtpCh0Lg)7Ki8J z&XfASe!cBxUu(q-7dnj>@ucCR#d@$?KhK3%gB@LiHOiMqP&dmP%q=yb+LPr-O$q~= zbT-mje(0orBP-+1U1}6+4KLM84Ma=}xMfc;B4XEIUPedGBk`DwnbRYX2x5-@T3dcw zs8rXe!lS4OOZyLeK1-%>lm&fZI@>OD3eIf$72Dxu1Q&t^B&oZR4lbQxOrs?5t?Oy) zc~`yMBGM~)98BAp~iyFDNwL=8&}Z07_P=PV@fuTR=doZS6J#+Gw=qP@Aeo zKKl^k+u;YEff}6)Mu@H~l6=v-TIhb1+87PT735liGStwSBc0UA&uOeXAKi0;S)wbx zLFWmddd!x05Yh1c)lL=YwkOH%U5tgLFteJk63Z*9>6F_7ta0-5KQfycV&SiKMi;Ff zn!8ETn$LZ>I;Pgr;!|_;dA4_d;ip&TuY%1tg^6*SGIcPh!V~RE=IK z{EUFDRdjs-^Qf=JTh9$gj|~zwJ50+Te85cKQ|!h|-b}oGSLv8bsnfOv6B43Pu$-|K z_^VRzgKw^M3!hC)_yb{8RrTDK<}x^XaGdD()miMq391P)zik}w{h(=nA(t20mD0Ol zSe{_JY$$gAJ3AVXz^0A>!Ua0!W}sVv>ognsfqmHvA8ynjmNn8@2u`>RO$mC@ZyyXn zxeU$}0|~!Zz-Vuuac3eCjoGB%rz4y$ayBpn) zbSnka3H>OT8dO$OC{kt*>JGV?Gn;?2YX0znvssKY*tM-psXM6leM@@Jh7h*f5j6v_JRpW$V{&rK=>VDb{cxu6_jT*V)n+7*EZ`OM(mNr1P1)C8g9XGi$6OeCO77iAnwTdh2YJrz%ziK>H|5raE*)$4y-56mKYIqg#rJCMB6FOMlhqN1n37M!`^>Ib$xc zs-F2@c=BO{e=>q2cqMK49Si!CZR<883{^KGD{NHvcd^guo4^Lkpj=7CI53H?La^CUE>)zahkvkJp6-dS^GHtpQvbu<5kk zWcckLVNX7&a655UD?YSf2-m~{`vb6iv-oBEuW&mtR9GKlt;f0`eIuUI#OET}tRVx(X#pdnTc z1564{LO26XZEgV~&ns`;T*KecBC(dq@IKwmr3SZsTdsb35bY zo~<4fqtMRG`V z-C{>+{dGY!WIjAQ2c%$H)iNlE+m0>k-^RE=iR_uweB21T>%;iX504M$A@v+9yNWZ( zf$#tR2Mc2BOf?mJhCEgfYEZoN*wK-^nr;C_jq^s@#6`yTI*&1Lm2Ba0PwPk3t8j&#{|PDKqGP8Cs` zdTw4$V#fKeG;vhfM0kZ=*6B~o1Xqb(rQ2(Z{j`>je2J7};ns?@3r-B%GP(oIL`ekX9Sm8Oim2mab7M2$tX0LMma+|t#3+cz47j0q~=@6zQ^uP1=EO~SMU6s>~~Uj@^5KEKGmhA-AZ3+-JgPjjB+AbMpA(VdL{ly*|Bh4c_wL` z{y*09&C@|$wtFx^l3~mGi6J1!JR!gF^v4(d2k(11Ug5>7jD1r~$&06EZIe>3dmT^W z>5r2$6*c9>{%+N=OJw#B4+c4p=4NC?aX_`vEWLPO3aOOuWsC~)SVE|_pP)n&a&i8| zYj2lSyvC@t^nU-`w7D+$VxiaEtY?!Gi27>r1)H;D)5o<>J~yfC7oN$gMX#rfTm@tZ ze{MWsu~XH{qj=wRP+i0-?*UJSwllS6bUxj}$c^#5nBF;2mam;0cjS(|x02zc@R{_= zFHFInzUP(M331EN|Lm=t2yo*Qs&Sho^3Gdoj#E$^fTfzeD?a+YLVyMXAN&SgSbIz~ zV?uD>h_7vLbGmpCsmg(D8%%?=bJ@Q3Fu|BUYMdrP=>A(PFY6kvOeh|Y3*wnYp3QOrv7I*epSZN-5m2Y-Qo7uBri^ZIRWWCp&XPeZ0;{>DRY4DGjD;(5!s;Fq+FSnQzN0y^%iX!*P6 zu*Gv|R_D#_{npBj$ri^?c;h$+2%OkEQ3jKB)l8z7BnDMUhes5|0-XRE%tODIRLJ}@ zH9yf4J}+s>SK~l-eU6T${Jt(bflo_pqW0poTeOh*YVl!3gMOx2q4cBYUlk?a0Ix?a zHyA^TI=fu(Qcp47LvF(qOHZ~hBCMl#bEA!3+Kpu zH^E4~@IfBEB6lO~?VvR!lvO~vU~fM&-QVzS-;xD8vCx`ONiqb6hW7^#gmqJK49i?# zjy8+-mzLE|{D|E(;c$tC=Bj9QcN7m^Owir1l^4qpWcyg)_bAavE}9|xzE_?$HGdsU z4W~F@zTdC=L86vo%F8PP`PMw)-AdxS@?Nb(tc1N4T}%Th1n~!~wkDbHrhE^^ zYVso-^=a`Pku7r9POwS%zLa6WQm=H>BMK{q14Si#NfTtcjlC>Q7;kZjK(5Y981I{J zR7pOP1NSS==cVw8tPHkcgpPK$7_HkI(8H|UY=p0HqkvD~en!fGz9!CY$D4&CfZ^9nJ$5k(}HZ8gMS2y)q@;48d>cE82pwF5T6o z=wFB5j$%Q7mK0Zn0)8gl9AznMo2U5!fhSQ zRJ3D(+2wrY@500BOLkr|6FbaG4Av1g+h!KtwvSp{=T*r2R-i^RS<-o9!12@;L- zW{6h^OX~4E-ZPWUsJJArvo^tl^?N=zEU(9nL200VvtxiKWsVp7GSNN@|q+ zB*^gRgozH~ZPcLa(wr1LBb58Vd`Co+u+71V*;nOKlHZZ`nN91JeA%mWWD}0jo>d~v zFyG$t;SMFgg!jE27CO<8(@qEjwF0xnW9D+nDIXV5)vtms)@iYyJ4+jC z2pwB`$RoUJgCrZF7oLFhh4Y{KYnjvL@c;MS16KMup)?%7A~-eS6T#&ajjLYU_ySy-c6*r~~v#f4nPaQ>%@TxNsg!%z%LL~+)B z^;X_$Hu$V~1HR7Ws#T{)uwat7IF?ws%8_AFtPg}dDC|g|E8>aY^$4PqgoRfX z$@)ZCYBJ9vxS?YSMFFu}9jnR4;Z_*7tW3+YI9q(H+Q$B4z}{Yii}0`?8MXsiGLaH}zr`AwImK#@h}3`TZx6(64r7`8vFT zT3gh$>CF`%>vU2Dhi?;{Dx$+#w%X=7OFoEx_?dXfX@NO3oM!aJ(d-?%ys32;M!6Vj zv>)km-ig*BiU$mb_`riG*c;uDvE^N;FH!i)X$?VaE@0YvIxSYI`HYJ_Cq!ZRMLu>F zus)nBV@ehWe{x|O9Mt4~|EkW4V~P1aeGtXvCZy_(ze|WI%tZ(*e3d1G3(D{|21>+( za@teCClups@hhO;<6%<8R}n&kTPG(Y^9Hi~ciJw|$j&*AW)=pk7l&{r;i{bk@h7T^mj268t!-%#u|nmX$PNWNOndU(jqeD)$oMEUfY zP~b)({!pynSng&x^ul>PDW3fDP!PguX`Ys;RFsb(iT+)YY&~q4apn5b$MxO26x!fw z(a)iQv=YkNWSZW@D3k<=gMc%!0UslymB|MwBVwcGLAt3Jp46s1(D=6%1G!0lSYsAG z$Ph{qqsY4oJ%TVry1YpN=*e=F#vH+UBfp(#0`ks=7zr`WYsUb}nrtdh*es^g98^^G znmKuzaByHD+;~R=Pjm%A+4%C{HoSWZN#?=nFiZ7PIZw6*f`G=*FvNtLP%K~X&u=WR zD844?BSwd}c&`bxMV)=9vE;kJT++mR<%Ow9{y_zYP{a%m6FZ1Bj6yDAfQLQNJ4@e3 zw5cFmSgiPFq(A;r95t3a7s!cLCL*>}LG#gwG@p%qM^^q)n4HF&AAcZjCfWkUcoB($ z{ZhwzMhmO=G@1$1O-O-7+!h(xOdeICQguiVvsEU~3|YX(l0R8X+gm((sPyA2)$o%2 zO#i6XFAbO|A()FCbUXnH8kTNX`zDPto|Wu|ArFM;E#19xN``2{Ars4+?6E)ynOTlG zyP^tGk`y2wR;E9(bsNCMoI+bNM}>Qs?N^GXC7lc21+l4$#zCh-nOv}ixH|>EwB{s^ zBrD#b0_OtuFw9P*5x8Bi&V#ly%%+wAqqVvM^s0j-my$Ve+zs9aUp(=J;Hvdr#>DkW z0`-yoYF4Ds$MrWzvv8TZrQXOHqHsojiSNs_DADC42&s_-bi*^ZNLuzvxrA~* z2u+OK#7wjyvGpq{;ZSli+;kTKF)0b9s<6JW(Ik53p{;rt9Kny6<2B}+P{(WFA*-5W zX=~9;vNNF#DMf^fS<&04bM`J&PT0=$B`&fCuw!?Uq1>73($(`;G;#)`<-sVn5f#X& zOAzM#{M{4952LvsnBu}Gj4ELQE|$TVn9MrpNh07{@~14)pFz0%{CMi17teSlJ>9XhnUPKhx@?G?hWrocgW0rkh|=T=Mc6gd?X^5A#7a zy478!fJ9}ir(}YrrY(-?s%r_0!23gGnewNQ|6V4G>OoE>4OK$qu)%>L5akN;4yvxL zuM6Q$=Y2~gjn0Y2255-ToaTtx7f;#2D(diq%u%mDS zyno*f74e6&Z*Ao@OHx>>wxjE+m3iq~>oWcN8e%xw>3gQU^v}BDTvuJOZ<~7#uKmxY zYzeEZzA;oaZW>o?6Qsi$AqSbKs75tq;Ms=vqa88nPU(NpifQuL;r_Ivpy-o78os2* zu4}cLo`8tf@2D^<6|;fR&tOXTBd)cFnx78SG9=KN`+iyg5IRTMAjp;QQQ;)^$M?XX z;#kSA`3{|W-nWK*JnRri{Fk$=sE9a6YE8)s3_-H#goY;a&URj+jxO@odJXgP<+{pk zlBca2q8WFJwT|-iq2bYu6>@=da?ym8V3Hd64Xz9%8&n0H*!HM&fY3otSz+?f6J8?l z=Bn7>E$s!p>Wro>?pyiIvhj3vdgzgPi3$t`K9M^Oo=u8m!Gq5A6Fk?V1jyP_S2r2L zQmmrOrznm47l*sQttk9$2`Y(y(=Rz+=@31B0;BC8&r*9~c|?Q0u;TcU;{lOrW_SF2 z>o7C%bR;Jj`%SpEno3h$83DfMo1)PBOK;^BN#9PHFfLY7MWkWqV())f z3Za!n9x1b8gfO{QuFie;3bgsITmV;~h$tjC-Pw0sH>&LhPAQvFBqcK6C>-?iA1aDy zhqA|zk~9Cf-;Mj_G~Rbg-Tc(UWJFK^DH0pADg??`pnQHxz@jsA+hjSF^KxO)Vn4Aj zp@bq!!x9Gf=uJ$7tfjc=vO~3=<$^SBdQ{BbKEu1Nm>TgU>0INIPJkdYl*iJE8Y)0O zKWE+9zoDP;SmwDLo!|*tKN`Xa4Si*tM!=YB+Q6@BICd5Wg|+TPuob27Pk2eY9ScGP z%L2DSuY_r3-nY2BU&`iU`+WPuoS`(<2ugpsQAs|U{)N)1P|Ey8o|F?K@h|R0qkU3KICDySC-!_m*|H6aN4TN8H_v>2Md1^%nx5jM1M?!!SlM*r0G|FEm= znvih#`xG$l>uHE|-nwEb#DiKpior=aIi!UrQKHr)_?H zZq{G?`tjlMy6^-M(fD8_;Nx263ahG*2a28Fy@IJ*LBz`A`%{lo1_a^z-`5Afa<@)8 zo<;oc8=YgdHFIspC+Dv-#Lb}%+7}_r^mj(s&v$LNWEKcR!t3csWXPpl`o4$WEQtNfB^DWmyfp|iG_0H1+wAQ zP98J>M9^yFp!E7Dv(qw`)1jVn+X80fyp%5_BS6c=1r&q7@rhbr%mp=w=avnZ3g^XS zKu6b|&wC5-GvxKBaUUjtZPBmfj?-3Ill4~AD(02A`E~xY5gl#4psAef$DiFqA0eCZ zhd%>55IDnrU1aiw#Ja<&HpHO>DIVd0eV>niOq6sf6NyYDS;n5_jPU}3(lQd#qGdp&ECAjQ>RGvFkWu<{&UCN7(SS{ zl5Y+CYHyNx^2Z7qsryXQzw59`evGz}^WWE#U$Aps{ujCgMP*cEv#>Xp?00mRz zE&l#B|NEq*T0Gwa7GvamLq&MCU7I}~@s3E)?Cr}QKcI39zXIf)kcM#kKNTX<{e;*DI{7RGu|HH{{&)PV^0m-8}>ZN2j0J9Jzi^b~z7)jfHY! z2LB9sygzTVVRpe*rZOXSl(qb8K8Pj1p9hH@YgCaPH`p%l*So{tx(WPDYn3U8@iGB^-f3 z*L#Bdz37gTYQ!Axt??6`r<0lohqbn=Q9DfV!K+_vA@9(Wfx*4M*XDT~e2-7M+%D!O znhT8^H`lTcKMLCgn$+EN)TjwB;avoT{GH_T2m%z$z&!UTDVf71pQ29z1@R>lY?XJWsKpI|Hba|Ie~6w2U$4$;be`l_hI&UWSTK{ zB;%=W%BKo7NXyOf?isM{DK9pifvn?VY`6IYxZ36Qq$VPjTbla1q4e7axPPL1P>s#O zfwMZS{fEYm<&rQ+$#t8=`+s(9-XALANR&fW=^gyCkB2gQ(rGbK^E04`$gm3g&$Ak z3Svg@|Dxx1(d^$C_BAX((^!;9*^pgaSC&h;+8 z8nW^_du+$Np!@#~$3lauRIn2p6WbHJhdg8R;{Z!;R#H*uDa?+h^gU#M`vi@hhQqk> za`Ii?-47c-f!MIJ5EX(URMWS%GLD+&|H!-|C!giLthd^K$NJ3^o> z0Abs{VN`YQgV^3?tUzjO7ycSKR@i<-(FzV#KyMGpVwa^2T z|Av`A$G~uepu-#dwf^0RNs^z_3*Iqi{WY#IRC!Q?pD*zZ|KFOZp~jXD>AU^V5j*6& zp5EV}?`p(nG2F_c`!t}2xcT6&iMuHu+n<$09tBKxZNi!fL=!2UBzGK?-$C}634Nl7 z(B?^Mu6bBR&5`HOp@N2zhM!pb`)cbeSQ^e>gbp3-gy(tcp8fTRdb&Ca#yx-X@$30} zn0-u0@41aRKO+~9RxUf1SU$kI*Ng5OMZ@zm{=En&sR zh7F%abaL@4g;FULq-<7hdj)4Wj?s3cPLnuVEGf-j!9WxNq=5}Mk5jv)!%S1EI-eLi z%bUk|@TX>hxl@y`A|<#+y&ptj^6H;0Ws}-kPq#)GkO*)pKAl>WODsERaB)jnH1d$= zkXmx6uD#9OQvYx(@B>$yeYyP{wz2MV&)Y7wgwO4mOD#_G)08;V+#Q3>PHW3zCX48g#u1oX(+Ts)?CT-51rXm*}G zk;SPC^ohbJrXWai)D)j%q6pNur3$CYBVXYIzFRx*gffCBKmSRH`{CY!a{2i@`~e0e zjNr|=lo;>vn>0n3dyy|9tryV??o&Xp^@A&iw4;`to2Mt39)6;)w!=7YGA9(dJ_t?@ zA^*`%$Vit4&g>EeTb-DkpM^ERhN8c}m}s=ola52|=w}r68W28fDp2lBIw*!I{U@vTo-@WfF44qVE{dG8XDtZ>h;h6Aw-v zQzoFFx#v!kPKX&nl!nBOg_Pe7W~V+}cnv;dNjm{G{GeB9VIH5cz4Z zwR#20N~xa_8?Z!+DU<@mEsJA`$<58Yf}HBLy*bh11~4SFa<#$>abUUBqwK z%BW^rp>0vKY2~k>m2+HXyDI!ElN(YMj_Akys(qhW>&S(|YW|-AG}O2UMGS;t&4vI2ZphP_ z76@3zQw54+l+cx-&;v)Jn`Yxn&1@ zfW_Yp5`NXpw_?g*p6H0fD96tLx+JYbDkNcjXHo=ne8Or)uR>y8x>&hcn?@pcj*1}> zq_Z@%_M=Y>Hl?Z76q%@>fjtM$vJ(&4qVK`1HZZNA=b#wb3ga?kR(478i;gxbD4rsy zDF~60=#chAPIO!XLHsTOtGlj`?9I3`U2 zOT;qrP%V5Ktl#OdX2HlI;!>~j1vzH?BR`^#(BD#%T!^N`IJQYb|B8vnw}f?XKj`wW zr0|#q&~BJhAM{~nmWD~vha2MxaUMj4)seds8gWMM0op%L28?r6?rCHvHh9pSNXrnk zaBji>8eGyQHp+i23+qV=w8-OtC){&jFSHpBVyDMFDNT%()(Dy7S$?HQ_+GV6vox?Z z1ogE9GIn<4U^MOa4~8Wc5Uhk&r%xGT5(RY0+2iMiDUTGSZ-=IB0lps@No3AX2eQI@ zP;GyCnNgdjO*e*Rm^Xb4lYUd9*Fhr^M5Q@D#1?YGX!zuv4T7G7$keugRvrAo3pys? zGgnENxOF5*fOcRRYAnHK(S5jM^RkZ|Wu;$7?dumy!x4uny8%Voc2Cx(0_au9hpTyh zvc2#9CfR|aGw)y}CzOiBb@CQDk4x?WDi+)e8Me2aq70cGz_Q*D^I{&x>GjWky(e$z zX4JS}RVN2de0un`_{^_>|GU*i1+r52$i2KT|MUQF}$GqE$#pMbj% zPuwT*D;sQU&0^eJdAtZ^)gVi9-~ybbmd?_Oa`j{r8y@&8R9HHoAahCeLGYz^DaoquKM7 zGbWupq|_Nt(lZ=5gir8z6kb;6XDC>(Vp*Jr1FNbUq>)&5za8>QalLhko{_E+>c^mWp z-y|m<1nuBs+NHR%O}dx03p@m~sjYaBOzqJRzN9A%Yk5f3K8^yt!&Hn>mQ{~?&6Imy zYgA+O5ZDiZ#ywP`X`)5|ZQ>yBJdTa;h%#mUWT@6pgB)tb;)RlRyI4E)%8ZI*01fGI z;7@6;7HazhASdE}DGb4dv$vKORe!+s}bs0=#dJYi)Ifpr;^ zoBUmx*+T~ypm>OBs*_x0g=KPP;@!vnq|MkvgRlK1Y>ryhzK@!2h~+5;+{SGw%-Au| z59V%t4QMU5M53KeHzmlYso=2YoRMdRm&#>Cv@_eT^CXe#K=wiAC9+hjj_vEP(;zC~ z^csoQXU(6*@{b=GVu8IRX($i{4gv@|s|=uD(jniE|DDzY{RkN(VOSH>9@+TAOrGxc zRi6_7v0eQl<~CL&O9~CoFi9|q#9hTk4Ez}q>D{G#Tc9o88&EO zF);;$Rw8+{Av9l-;oCm?ajDj7t#ZBN3Q|C$F>Ob0On@IKGexEgcEso`12)TZFH-f; z4)N^HB()7A?=*xvK({AgMSsS4yD;~r7M{9Zfw>|OSi6gKit6|MI7zl2X+x6TV}kpm zvp#CRTarR|k=>rMhXXQ~PDy5iw?J8*Wmu?E2GG@U;$u*u!5jbg*i-v;{+VPCf$#lX zf)sFxKXq>t>1#47e&`sC>WbDxEUWG}k7roYstx6rbdf-qv$N!rI1#{}0lo^rv!4=e zM(U_C39+lxevOMp;`f_QrL|`+#cvp_GWM8TbVkyuR~ILF_}^twsW8M<^JoCqD+Pk>Ka#+LRBLB*C z@Tk6Zop?>89jbIX>bzBpx~yktD5I|V)R0IJ3Xf&aWNfKuKA#S1#3LBU zXARWo+pvyaKkat&8zUS{I%63_RUE8#xKTl8XbPDNWz4+ zxct>$>tB%rvcCa9n3<8Hd>sAN-a=lrQKIR8xNa-IyG6qQNSUUFHu4){(jV$7Akpk_ zLdVMBY~?|E)n8~1MMmU??-_t^g@-MvO?h+wLL_NX%5Km%j(~p(hHg-*sxcV$&(3D3 zPpNuF{0B8bJy=Z=sINDBzVY>6_Yq2U-O&lI1zg?E(J`Ud7a9=>T))ZP$E6!no4Wf5 zo6DphZJM(|@698|{QN;v_LNPvGWbW#xCMkR%p=jv5N-tFf4oQVZ!ZZg>_4Ilq#!o7 zqoadQG5*+p-N%oPJ5rM`*r*D@$Zd$xA`e}}mwEy>VeZ7vUtT@w3ah69M>bYX-x37; z7W*@pR;&bN9wzoRrrM~ElOft!Ud>{9{4uJk3Klii7F8+sgR#BGF+SX-9+UIBCQBaN zN^NK01h~D1!h>VKq=PqUly9LjZ zH+t9fiNiZ8luLX|@e!h;^%u(Ic_eCtgl|bN?>Df>>$_RvGRW>+^EEJj#@YLSdsV55 zRSao^=9+z6GGUPM28s_&PeS%3krgd^=Tc8p16;c6e7*VIR`XJs+21?ZuhO# zdxu>q0{{p7hvIw=&jyZ&-@7ga5<=z(GANA`vL1K9GS?v->$7?(;*?bX+%BlAF4{_^ zlmb#N&ep-NRR?oaazPyDdYktE-YNkoN}nQ<&Y(WpfvogHIfKHiwqD`lX-!R~HQBet zMOV5eUj1Zi&ack=Sxc9Vn?vpHWa_A1N98uGY!jt?e91CnlZ#~qSZaf^W!Y2#D2)fl zP^Y1Qs$FKO0_3{w(Wf-2w#o~mf^(u$Jol7uj_>BWC9dG+Yk*}JFQ{_^Gz1gGWDRU2 zE4WdoQ-69kWUO_hqV&Bdg^&=qiiXqG8ICa-@i`>@o)&&rX+}Mc*i7zTV z+!l3dEZf2GwH$G48*$x+Wv=cpK$DTE6hPHf-ikC@d|w~w9c-xdSS87vKR11Ky_WSL zfqS#~Mhp`tsL5J&cHbre81uM6NRRGk{?tmI)IDpi1ZtJ4Ku)7vI=$?3dIX|NsmEGz z|8U}`tM9KNMW+AY(=^34qAdsSR9mMfV8IbopUGtBYD_}=XLLyaS&>@O2&O+lc*Yaz zW_`i`;~a2x)y&3alZin}K_dTp2gQD&)z|*YI_g7!_zjjyh@6h$2nI_rmU0d77h}<) z$I$&XmJcTK>sGqz0fRKcMy^9KPrftBn3A* zQHY+1r}Ovkz}0A2NZf^17N=exV4rmbvBdAWf%i3_MDGwuW=35zo8JwN1n)}Mwgc`D zND^J7f`X7&Zq{A=;l;sXzE-0DETsVr5g=tl*G@S75<1Hpr3=VWR8W&+aqDqHhHVeGxTyAlCU^^5G4@rKJ zp2V7K$qxq>2%+K5#rQzZQlD(T!9qhqqNIOu#aLiV2jt^0Z%ri`K`b4QHgGSvduE0_ zP<)n_1=aI@Y*xd_DF6=zdA4Q%pvUKt$EgaETC%aC$iHuha*8mspENP`>Ap5ssF(l7 zAM$~RLeXYaxFWGYu@9I`n;i%YhpiQU_JAzebczmnpebnZ+)&)B{QyunSor#K+$n^x zJD81euu5r2=C*rZB1O*6<$XY1w9U9Jmg>k>5McU=79;$tBj_;%i_ZV=Lajk4%{VuF z_BKnV56t=)PBp6@2&BYvC~+fe_&R*=SMO%<2i&%Pz-qDPP%jUlVwG}JzC=18jAxKc zWcIx5Dk88?(K80>2KPiockA%oaKjhV4To6isjXn2)31~XPJsewHfk*=Y273>uQZM9 zirdpEaXgle{l0LMxKTcnbNSJ~(C73biuaQ0z5{ly=VQIpdMqeL&W|4oJEDjhz6O0Ep%M80CvHh3X=uR;UvV=k1r1jQ z)!=+Ifpe#WTFuM~6Ax({sP(*b+cjc?ia{@1>|KwNz?(}kA1_UJdj5o3z&KSnp9Cxx zyMIZmE#@oX3wswdH~Z*6hBP2M3>vE(`veiB{L6m1|K#0__9yC?{0+qJQa}y%MGi1F z{IBp|4P4Gwq^sWkHK*4Y|6@)Gqy96egKs?aT)6&Ri9i&ktt`6vm(fDck?!-z9_&N3 zCH`OLG`dS!H}Q|CEe0fwz}@{yXiy~Ls+l|Ykb(Ci@Fn#pG<5ktHwM(1fSpRtiH{{p zboToW;;-dYnMmF=e8C{0Fy;S*yK7uC2OA^Qe~wpm|5kb{JNe!SQlX*Sv3Trx^B;zF z%KFrh4t#rk=~-aO_Exn01{U&7@tm#nf3P8 z@lRI^B(AamrdjOS*9+kjbN;r@{S9Gx1FpkH2bp-PnFA##*nn^*>bjF?$zdev;T zuIx9fkQ|ecELZhbw_YOtslyHv8fy9sgd?P$v{R~NqFJtRSnU(iuBFTy;R|e)uUf9VGGq*Z^ZIJ@QoX#s#?O$lE8E(p z!yWm6A{-3Hc^#c$pystrd?$(Hdo{~-y(UOM`M}g0iJJzyyRr|8|IoLEG#UshnQlwY zlr5QIu}VvSL&dQX5LnB%pEhGlGilPx6ZZU@R?6kRNG6Cb2~;X%I-w%YkcpK|!C=&& zu8suw+9>rAxc|=d$6|f0+3--YwQGS*w$2c-17(L(&7dkKJ=WEdXmAR*f)YK_D_7ILygDGEI_WCjztq+-|J5{B19;YU z{;MbkK`fXk7*pa$kRGaZUd2TnKew{H;2^Q|5Y+<8JGJGKOt!%9*1Z8O=u*kBmc|SE zY!jA>5+RFXu*E@2&rLb3%s7GU_wW()=$P5~Y2A%+o10V7JKBOt>E!N?(y}v2upg|% zsBg)-*ZjCiR#H$AM&-62jrY=HVGS?w~CES(RC{gHbB;0 zf-*YZXuEW%xYoWzASziIYLv}*UyCq@g$PM+iFhQ7VUtgA6q8UDNh1C$P*XeN_VJ*%|-U-BmOd{`m$-yE7w8= znp4YcEf|*H^?A@?WLh(=MWYA3Lx~Cb|HXL40Ar9scQmakn~||%*OtQ9yG0g1iI<>& z^~TUt%o}|%xEYC9yeH1Xd@$sFIw=EPQX3+FCASAJ78+$JWIg)6V+o(vp3`3mn@Q95 zM3S=nHpr=})HcSy(+6%O4#@c_3*`9^<|W*(tbRv*#Apoeo~;+*(3zj##juVL?=jKQ~B)fk;aKzhVGQt^uJJX-~Mts@B8j4ycCd8p{LZqH0>eEBo^V$=o)1NwhKN$)} z_Mjv>Eenbuf@U*I;sghgn|$Qoid%5Eew&>KZ-anFf!oJ=*z-z`dI?GP4r8eQ>>u*d)Q522# z{{xE;H1#FBnI==gk*?WNr|NeEJ|)Au&JKx@mI)rEpZL)t6#zA8l)G01L;Q)M!pHlz z`_UctFix<@{c~w_JCxr)X_c)0zYQ+WcqNmFxACq78cteX7hokiZr~N1&J z{!ggb$;cuGM2?MxRrHo9Lgn5H?Nxl(L;Ey>bALZ6Cp~A%XXDzu6bnlzMhZnAv$wRv zB%*S{@qOg??_H;6E$=KA)oHb7hzgH9NInKj1FPvm48I7U+NOG)n~#S%9wLGNV+?{W58lcB|wK zU&4fICBy24laoBQmNdI5SUZjT?ZB45Q{NQ=U_q7cr(%VY_^JkB@E{F_5ej)@<{~9A z^9#sqCqt#+H;k%uU&v%o&BC%N^rE(ys9YoH+!h2Libd}A?b#p?>WkmEy7Zqqaio2} z9*waAB8dy^;%SibU~q5z^kJE@_EQO9Ge|m7EAw=J_-NqssgzH{Ka)lN`cWdl90#xh zuPgszefp!n#6zT4gg~hvpGW>l2LB~u%b8h^g#E+E;N0>$htG+6@bqf^XHI5Eyl_o< zNH)&(uzdzEGW(j)CFd-(5yO~mE=&=7wGm5$$YG!8nQHgp85Y6cP7I|4Eg^Dcb)=!P~8d-(-MBZvaN4| zBc0;Mj{KrbnTY7I>Ow;3z^^Lqu194@pN5){AhA2iJf#|0@CCK>e+zhi_h$%2vPpO; z5WPR&qluN4K`QZ=xqj`7sQq7IXOq$-1yX~E!@T`O^K2Po_-c7tP`V21;veXWWKfAX ztpFje2++H2ersZz72f7Ja*_Y*V6Du z=U&*l!TOB?wPW*Y*mNzkK7y~`rJK>d=MZ&Xb5R{GjnV4Yl!NS<43lf0XJ0VzzwS$g=XH5cMTfWVbeQ6HjnNgRk3FgD$-8a zN!Q5;@IpK#z550qg^-kh0C6R7r9}fhJ%WheDu3`~terL0#jRiBOyvO^15g z%4b(pTEw5r-zY&O_N9DElOp0`blEMvoLdLajJO94GF;hwqYK%#K5 z56p+0fErxx6x;+?v&*i6oF_O33sh#I)*+(#U({BodTFe9KhjYHl$8vGuQ;<+f@9t?Ido%aHrcqA(3Q&`XbG}PEl|+u5HSdYrm^eR$jaN zU4C>BklKW0TPH1JK#ky3`D{_7SKDGKZULQ+BR%MbZ$X9-r8ESPhutLbQc|+{ZdD@| zBo}8pUIKJZ#27V4TPNQ|B*g(EWUTs$q=z7BlCGr+rKC53zV_+)+cGdQ0=*~P=rqT= zVy6vT@Q5nzXvB)>axsbkSNZM!mE}SI zd?CYz?%@sqrE-6C2#cL62#OgGQE_IS?iWETS9f=b=&YjZkWn>c^i8LP|M@q8mR5pvQ5xQtzD`FsZzAg-l@?KtI`j_E7sd8k^q*y z^P6u(RS+rQl61^l1BBfV<`<6~-Y^xiumFa>Z=++=nFdNo4b9&=)W(|+h*%+ZN6#HF zRT95shKV3aXb(=FUY=uKLx&PMrcEqhWSv;GZ>s#gnJ*2llqBjXeZBB0zksSB?;vog!xF#|k z)FEtt2mTM7`ef|`($yasxp=cv^YGSWzWJk36223T+m_b5KBNMN{~#GlyjT5Cw$mBM zt3-Kc{ezZncPf_1n-o1W8r41tb4R={$NrhK&XrBU7PRssLTQh*0`eL82nbF_0XH51 zY|CzQEQQK8PEQH`MXNc7%nY;bGtw+LJ)Lg?gPxE$0Ns= zB#*Gzqs~&PzsX^k{9nL1rBG29$I{O%elu?R{hI9`?6|U6bK_Gn(va8N{_;fhxfa|1 zm`br9QlWhOl{*KE5$ZiYggQMTAnRpDpt2~lS*H|gEm}rcge19r8x@AFi}|D0(p!frUh2YW zegttWzF2-s7x}xhnWzMEHt{kNq9JXxauSse_D@RFypt~%=er|kGo^2^U?z|2@9KrV z+le0u>v}s!x2wskr*aUD0(P%LYCcEta}ddoOQT(Kprrl+&ZWt1a%-q)oGGW~DXye7 zL5r-pnPaCyU>)WD$RwL5eZIuA<~&?7;uO>WA%C>2haK9&?_bNwhl4UgYO1{pp9UY9t6YZvD!dbhM%JV|1wiwlN#hQ z)`xl=^as*GWf^zK%9bt!P9^5o6=k{wu4mm@RSZTEqkB+>!D-Bt%U&sS;aN*b4g~XC z{F)ALNWx1T3oZ;b1=4NVm6nakc^OKX$<15{os>A7c? z5)TqG{xC9?M9^|wWi0!*-UG`24dMmJ^Xrou^gU;Yow~xaoRM~etKEoBj(4Hi&8zfn zp!1|3`jGRyJqLpp*8e=pp-Igf)~H&MmKNyf+AtN9PQHQIM%xvo?sI9Wn&jW}xEVr# z$m(#cSAo5J=L}FOUW)X)cz*e5sGR+cfwp?|i$_!x%HmqNxeHLen9?W$2(PKqVSOhT z6w;cekO`T--dPT~$acv{rbT`#$maz}$<5_xFLrGX=rM}|!T zDgnw_{D8MCinE{-2@=eLT(?+dwV~kcu*R8|*gTo}yY!z=7LpZaBhK)P59Bmt2rhnd z3fchg0G60RjQM)H9l*U^?eRycO%i}=O?+GI;_GVgB zu74`Z7lpu@vDj>3lQbN*Plr#qE9)lK8UM?x{5>cQ$}Fz`Sxl}pX1?U7EbrIJOAS(| zyXQ7Fh*A6xe-*z4J##>(G4Acm7R$^pa?tsr0G!|T z=*fEsh>N=-4aHxAt7b5$s7gHX@-OB?`&}}vT*U6bsFbqzBGpc_?q3_xfB<@_B4oYJ5MtQw5`c0qzAmK*AT45+@wR_w=-W+Y(u`49S zg=${zbd0$9LHEiI#)Y=8{|go#qSb1U^2#qod=<$VlJY31n(hFnA#` zk`_ms=|nZc#Qk)%%gOrH>1s3;eBfu-_0`(9X|vD!uXYnzy{G&}$0M$H8R{2u8%P+s zHRN|3yiSOLQ}aAKL(8jwPFB+eiXJj~nJ%e%+!HF-1`k~qqWN`VAL_H-fUSJoO@B5X z^n7Z|t_K^j{c8mE%2M)bYtf_RrO_E-8s&37%lGPLECxDNNvJ(_^V2i3xZmAYogvdY zv0z-gBXQ)fhTbV*0Opf7jr3@+BcwwD!knNk;G&`xlq?WtH%_)-7gvh{Lt8~lr0MCy zvki4KIlT7ZAi*73jLTc-JYDa}653dmGP6LFWm|Y|MMD-fUrOB3yZkJBwzr zA2b*kllf4maEyd3zk=Z?gMlYD(t#DY*jCiHZHj{lkGMh{x_N&G4auKhIkzkyo6^}x zkT4IK>7lJ|BKC3U^PZ~~OlO0zYtF`vAV)jiqF$?SD7 z#oA^+_-t=?KlmX4ZP5d=Ap%IN+tJoWrIh1$`}LDT0M75L)4tnn&s%nGK{x~~!#5uT zlmbH+HVY`86PR6B`QcQl0wfTX-_v9wYa5?;>XM%F�Q=DavO4{(&BwIuY|?!R|?= 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

cA{E(qL)^r1;h(XJ39 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%0D%f54U7^WNZt$%mqE8 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నG>A1d{OI`76(^S$$4Im43fAr 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�GTNkeF}8U>H_3NNj+>=yZ#v8-v068 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

a2)ZC z+u5q}c0>)VKkSo`$*Z_ z#wl+9Zc*}^Ik#7n;R5?oxJr6O3%%Xx@*085Uh~-e>i+e_`HxCI;e))30ROxraL?bl z)*fp`L(>EO5omXGcKSmvGO3CAbAnifvY=aCNEJh_Be18jUy4^($in{=#vsnOC(1=M z)T(QcyKtL&R}lajSTUhc2DUB(9`=+{fTL_I93;&aO%p*ZJ;lzmsk- z?j%^ba)wJIUDKaJ4f^`x3ueK6oanQECnX_4rVz*m_zVYcMCMp^FGo8V5bB~!DnGl! zz^%$h)n(^hx!2Se*+)JJ@;dOr@V!u4I@|T$9*_gHQA<0tA>9`0`RPubpIV{aB@Vy_`c_!4j}>zq@K*v48B>7v!5X1#a#%5%H3o zO?jquguT}r`-W*2gb9+2NB}~sVEGNRe(#E&#hvPsBl8n@K6&z=MdU$lg_8pwO$V_r z{OaC$_jr4Z1YoWFq;+}80qZ}06%&%Vys-CCCM{0uU%lI_&CBkMlv!M=EAU}{q)L7# zIwm_4w3s425e&lSRQ{e-%J}BK*N%;&%4R&nO0bt)cl3_Kgb@(p)ueq?+`P)%XO;{y zY+VOe<~B#Z_TSOprnU+WvCg@zOE>lU0u}*_g5>0ZSL^HRn|?qaR)jVvhn+sSp269( zCdXZesuVXavp;HD;-sOE-H}nf4LtApqxfv@iRQx+aBZd0mc+%M>|x<(7t#bM;(vSqex zGUB6&&zlh%3kMsvHT+0(;qmpddArk#5gPevC-53MNm48BW5R4K)ISEh*o&gU?OFWM zt#uIIi(_7GyhBko?;*7~yZxuT7BDdgnlnH_#cj1zdT1_L+`4uLiVrjMd zy>z&z2A1fzq~l?z(D*8fwjOi!+~n5jBbMWz*^Mb}!M!}ANQ0z{=1!p=YLvYrP} zXCI5rz?y{~Ci$#SFUBTB3RDjjjwi&~0}etUI_~YcgPbFRm?SP3DzcQtkT8S*gm5Q} z|I>{Hxj7)5{{3PL6)B!lPYK;f)L$_X42irx4XR^XsV{gEIYdcf5)h90i`UhvkSPG$ zl|~&LAus(ZT&7333&xMy#mot4GSYJqV>OUV*A)v3a08;%ld`}!C-xBrzlfOk)3+}+ zFv)RLS4MJWuKQ`izT(%KNh^s?5cklC0Jg+ZxOlDU=_uh5oPr27=gvP`s{&u+7Mgw| z)O57knR@*wXoBLa#vWly|A!6u%L5WrTo8;h|Kg(V8LN^qYsl3O9?Ro)QhuX0QsLyQ z+1WxU0wxHq)HvM zifa~Iei8VDFER;jlj@HE!`}6k6K}*M=a|{=#b5H(L>Rc@8{)YxIVVuR>9*>q$Fd=y zO15OBCOFro&%z;ar!4Bq`@Wld@+4<@jQ`~E; zV;6RjH%lCHSlZzLq)OSM3%^1G%RzBU#{Ioy-(_sz+*p_ICL>gFT@wEBVK#;m4pD;A zn8O+@?4Ij;w&ax2FmS#E&!_StThO@Es2^Dw^qnx{kM~8BOQB5YB_}%AZ-mHoOM;u{ z8@X`6CpOI)rg4f)nN&B;~P2mva_$zZQ~xklxdV1BZ9UC>pTScBtF z)1i&BrSszP#-CYO2U+Hf;CU($U2j=4X#Uzd%#uaP@QUD>jxGuljM0-5G(0S=U2Dr6 zWaSR4r2`azD;(dqYbmX$^WW#IjdA!KCykrFViC7MP(?_{Vw@`25>zh*7dVuWk&#Qs zz?UEJQLy3wObp};HR@^(6rbwT6}A(?s42w$Gu0;_)Pw>S^|&qnjm~K0F&(^23_|ss zn&^gy@jEx^24YXATbk9!BkRutH#i#idxTbke)f;8M`n5?4#Dj8`kR_rJw$0_rOM;5 zIBgB4@jHDv%%A+0F`Wvs`f>Y9yD2-HP15Lpt_CK5iLnaBtKP*5QVj~z``OC1bLTe^ zS2^o#thDbusowc&ckgvcrs;OcG_zS^mcU;Y754ZOC^49oFWC8XxZ?Saw13C4M51z+Qdn3Q~xsjp0`BH1B<;VK$n~u>h=Mp)t+HFRSM{GCC zveIp8V26$k!wA={O&1H2ZZ-FkfuoDz=xz{}6m&;ZCoqJTYg;QAS+}f7$0gxl90t@Q zeSQ9K`*+&u%_4O3yEO9*YyzT*lnLAW70<$)Ju0*iuqLg(D`LiN%nciJivzA=+}P0` zv)dM8;#_FOBaWEdykw#^Ey!|bA)9G@MVlajK9m0FA#I-(9Hk1KMr0O1at@t=v@m13%ZA@NaH~trg1QC@ zH9QQ~3ojpU!T6#po19vz3p&?Hw78teXQ8g;r%%m89BS{ft5FavppN4O2A0)nKuItV zR~VODbv61Y2Ud~zm!ZP6_^6Pd>B7Y^UqXv4!lb2)GH+GT4yUP27o~A4J8I4u@H1sKSOPAFq6}M=Ef` zmQp`MBaUHFd_uoss#reE3!09xFQv}6_lpER4;Yew0ej>(Po1OSO0seVN%<9YW0H8= zi*!NbLMhv2sJ*@0NEM))QERp`i8r=3E4VO>)l4koxhb|s;r%zFxDAe{o$AQ( zptJSLh3KPOFW@Apa}OhU2e4Rff|>g`CCi$YUlc1ad=WCYuQ$7-Ze!7a30z58TiKH$ z=b&u7auo^{<9@x)5`!E-E8$({*AKQ@Qdd5(XV9pZ(;mE1WZOcRsPu^+4z*04!`*@1 zy+j>H6eS31hB+|{{v%L{9bTu1=fzs{4@RAyCr;ZH7tr52jdsIh0eHTTJ!C&knJRB1wtzh|H2LGFn0Rcbz~nOFzbz_A4A%+Mr8T8DEa$zg!(?iKUO z>Ay{qMRL3IGj|An7A%q~o9?4Gm+_1Iy!X`Q%w{8s*W=xzy^gmOyO5X5l#rWu#{J8w zgcV0B5fQ?Mm!bt@?!L_r5WKUJCa3x;v05Shu!QbzDt{GW(1-~9H1b^{bF`?5!CLH# zxwayZo+lO|`Y29<2e>A9Q`svv@O2WRVc(semxSbbdpb8eldxT(**xY^VJgxGLVtBC zZUn>D=`nS01$pDe$aF(H5je#Ca?iv_+`MP=4PC^EA_A+I%>UFWYal7k;SddToeA&{0Jr3`j5C=UGfgPBW3Zs5_gmeRvE;lnW1ois?8 z=-1Sz(hy|D0YeJyQ}l%9qL6^Xy)R^NS!tNED^X4*S!qyRn3fi5YQ!fV`x#gv9gx%}r!v zq>g*IKnm8P?4PE1fV%>qwCLucKG9oHGJc*kSQs&xJ^%!Xkd-wruLTimBL;VU1P0VQ z8m{MD&Cn-?xV+U{d2c!N*J zqV$i0{2oi1kHa#*6+Th;$nP0RNGug&ZLeQ#g@KaM;gXgvgBp~IG#{bE;m=Ig6()*_ z{98TM?~~Q^BctPA_BUpePfh*fih2UQWdd$nLx;pc$?ywIwG_|w4lErI&n`S7binl| zyCu3TT6XNst6*#Ro=W05_)M|AV@AVr%HHzo+PXSVo$J9uR9&jlYBJIf-)V`SB!GuC zDRnz7JyrJJ(jB=2Ir{DOK!B2%i0>~Yl)}YogHGo|g+8$0i{ki;<=VsR-ND1LpFuG8 zD+uYz{oj<~rM90~OJ+K*?i8P?Xw9T+Plh)S#=pd~@X|Y*1W&VJqVsp&* zMENKYB}%w=!90w$(|HWB)0R4DqegP3R7_vI|R$qJnChyeMWiYl1{synB z^7RNxAsAoToGoSbz^uOLYY2YVU^Y5BQ&&^ZmVXEIFoQHl63&AREr5N^4_EA=VweRW z4iJCH`M%u)l`O3mCn!%&0Le1-EjEoCj@du%b9f0(*?`4BUjUCW<`lGmQfyA-Z}D>9 zt-#onE%Sq#y!pyKqI%QAg!aYuqo;Dwv~}!81tsF*n{TmB)}iG7$A-EIR9fheU_6f` z`J^%vU+p-I`<6au2p^t10Ixw4S46@BiBh}XnH3z7-1LLi{b&m`SpF+WK!?N!r6dMP zyxwJPCo0QMPFvhxow-RmpqbChS({R??Nhe51bh(uUy1!!C6-1M%e(AhG&cIS-&z_0 z?4IF}4%IK^e}Xe!+iEA)_jQHyuH&wKJ_?THbe&?MiX#e00@p|w45r<1E>Bz_+SQrnwDhrGZ z!Ejr;+~!yh(V~b@v}i8sqib)*`Hz!l%zvq#yE4&e(~n>r80Z)M*3NfW$;&|lSaIT& zA67(UQOESfo_kq;K|EUu9kjT!?JZxXU{ZL!m~lz;%KBNb#KTL+^g0MeaHze;JVar^`fX~n0r|`&m>6UKutQc^KZ6zOqpsjP8_TT8EE@2 zJqL*AHaQzvv*kS`g*q&+_r&jOK|5x4H8{T@yB5K@Va&&tMkLS=Y}_>^4+1gJGa7Gl zVhW(q*honYk3bCD=Sja{{myvb+i|YW=K}(7otzSr+Hw!d0T%yW{jdF*s*#Sbjvsz2 zMGT+>+W<%G>VdVsmC#AXb}I_Vk+>-yC0Km5&HTo5%Ixg-(_}zGIUZew2d4W8^9Sbq z_jS$4T?i~1m>75cP(Cb!<;Um!Y~{+)L6`=u#Z`sz^~!Mt!l9Ly3KB4j2D2F!$=nj% zma8*^l^n|DgY!qb$#nP+0jrL;+eHtUFkcMP4X7Lg#1c*e!)MiM$$LJlUk%Nx65uH!iiG_WeotNtemsVt}q|^W^AIRnw0G4krR=%5*s0x<(^ez7mcXVdjpY zy&j394Tzw)rbQ|t$0rR6Za0fYE~gcFqD8WZuR|qScL1V=2*c43UGSh&p+b`SwtO?_ z{nAI96Gk~TCn^j0(u&x`(Ls$Bx88tY>_ zZU?S1{eFuiq7eHbu0rS~@)4T-i#{mA>#5J0*oBV8HwkKVA!`kM9WXgn$H*I_Qb+!R zRyUW&2Kn>pt5kb5Pz(%_Cu&<6Fr&|vuOskT8m6+oJnns+4|YbfSy*L#-WM4#WhbU} zcxyU9aDk^kBKVd$5V9D;l70ePi2mUbu>Ro`6?R`aqYuVM!^&!JEo0^4l+E|gSNQ2T zs5F)&q<2Na)k4q!ra1#_!ZB-pxtHOlg68Wp4?0xdg1tozh730;_wc72lak*r7a=oe zA@xxu0m13Rv5ed?7fbM7XfOBo5Lm4+b^QFn-})P>ftPb@YZWRPY$sWuf>e~1z03TC zOVhLm{t5oXO*o>`zfWu&qV`k0Ge%Z8)@yQ&AUrwRAKZarB$rJnD4yY)WAFA(v$ z#cKkBV}%N{eIAydZx2mQ$E9rtqQhYnG9iUqG_GOtz@DJ}8L5#kf$mwF;5d+_I@>=UC4N)Q$Qp(WSeE?JL`4M2O4t* ze+yZT$7%EyI9P*EK$5R-n}+QYI6+aTMP|S(fD9lk+Fi>(xW#zgDhC>WO1;^Hd_w3z z^?#)n?l@_*o(YK%h?y3;zbV4b=+q!2y4e^`nAKgVP`QwJUWq{4s#{ufzgsqy?^mU~ zY~ESFiRS^+0Uk;|{V%%S!8^04S@(ToyJOpSCwXJrw%M_5CmlQK*iJf0$F^72M+oC-giMQ;;p7pukvO!2iY6+(ogN@)3!sGn4#zY!FXuxsp*!%RpnrT-*mXMV3~CgO=Y4!J&3 zUrtl(*BMuAjrDJwuh4(|5QqAh@NU_?CK?E>`IyTWPChAdg(9uV_A=Z_5`OJ~x1Ub> zO@h#SiLloKEns>u@lXBN*Ke;k*VheL)dPgw4C`38G1UV%+TmZ|0y1`ij_=%Sc;0Lw zWPMxw1#~3o(^Qsc{Y`3+(f@n%$ty_rT0BK7&&D(s4B9K3{PcN3{{tzbHc7*qw`=O> z{lfq7O8re~MPaj=b+^W!RZOJ{tLi7%U#B5}S`Lhk5k9VOrzXLzN{p55V?&+!cF9q6 zw0U!e--dW*NPYR5GCmam#KRhSS@R!O49WJQ_Ezoi0Z;rj+j_zzKTIU^%N9?^_PhlJ zOBkr4ydH%pobgMDdtZHenC0+AZ(zMU!8$_aq&+P)b)b8- zyuBtT_Gu9i!nQ5E0-+K2F%PA+$jdYxZF%V2SH4rJU*NJ;5&9ZvUtY5ByBWdc-g;Vz zE$wUu#c!)$-==LYU(Bz+iD4%{;&NzGiHR(cn%WN!9qZrZ*Zq>%RhcPM;DOEd1}gE- z1v!r_mCD~|#VWDhDjLn+I6D>opSx!LzCWd&=OwQFZg%374egP7$R@e^_vy%Rh$4c~ zPL`X(;ACKW#mj2GbH)V4aK1ln;7|I;g+YVZfV9=)b28h(`C%_`s*#<)hbPR_aL^*R zBmU8awj#jAqoj%GE-nV|1%H`4wmH3UKzH|H>z88%^Z1*BSs=gbmyb=VS)ql}-g}}^ z`*Apu9fJ((|EUFyLO(x0cQ>To`sZ2^Yz7UUK+Nb%j?i#}5n1J{d#?oky0cq|mpOjV zOy>5WHf;rRAGq~wwcA-q)mQR|Ljz{uG4=N66BW9x!6ue+WA)qx9&!m8x^I?(-@=8! z3o${V9WjiCIOu*VwHUvhjlf}Zw>sVicP)R+H)w}ZsXe@o1w>Rw7}lY9SevcXWH>;0 ztT3t>cWKI_Fja;%3UP6B2-Qc8tilwFFXr&o3tTi1^H_;XEibAhM~qqrO|%YBB7M4A zJpF=lbHFwlgeOZ%?_Akr=iQ>u2Vhrw3YgH1cul{s~ZrdBH)n_tJ&4RyPWOUsYTg%3-rBs$(~>m@-_GA8mo z+dgN^E;jTa`v2fZ0K|VaTW+ftH{g-@SXBJ>BvY4Iet}SHKzD`vJgv=3-n**dVz7-m zuf1mvBd_tYIsf5p&{hb zoM+=Kvb&AOk6#dl`mlunjuwnVgtSFSNGBBd9~F)VgdxBt)Gbc$Ia3Ig4*&@CMHgsr zI~7F%u#nKkhzr=UADWgxwN)ZH>!l_Wn74CK{I_I`1GJ~7$6djryu+t#1PqOc)Kf08 z5(fxYYq5E}tF2n(H&1f4%2c;Mcu|p_Bf5U4L19>}dm}AXem?iBz#MRRbuEAl@VH|p z&lx4#@ViFH0^vHdxSPn5G_hK)WA|+;fa9s%7teb+w$U(n&Z37z zhEUiz556DWn6`f3-9FyE9=%<8e;wUe+BnZODwi!lFQRH>tSxF+y!c!jrxdJ=?DB@<6N=}WmGs1q6 zk?-t?I=*yj#s8@2aP#3(cDRxvU`KF&>hgW+VkxIF9E{O95}%N;LULV;k!g$yXR7Dv z7r{qRkp%Z|7bJSZ_+|qj*|01~DDjY?1VC*C64?I>*!YjU-aZbxyP+HIY8k&fs#~f0 zT6w510y+;whRmm0=ySXa*$EW{*)g~=H}~lFU{1X%E27=`(;}%teUeBu$->d`P%dqZ z+z}E`WxsQyFn=C==_o8RFl028(wKm+%`M6OSu{tm2W6ANefk`DgK6&TWux;ILm>CZ zvG>31XZ~v=_5ZIUDHbRa3P`&%1}bV`P3KVN72P*O0ETc&lJhAl8IAGQ97+n9j?YNR zO8dc>o|w?8PJvL!PYi0W?`p%C-S=pS)m&rfGx?f6HN15Y4Sgk4d0Dw z(m=p?cZKUbmQXx2z;shz9s>oCztYnK0tFbp88%De0=xF7Ywx-#1{jO;K{uZ!}uz|C5h||2_ z(4qg=sC>J|z=-7`>lX>I`q~qdOBczBAVx_Lk&BC5FNBNal+yMo9Q3y&j0JC-o>u$> z36I!6xaT~lwGC1TEhwtb@|}d=#QM#LH1pa1KCAWZ`SpYpkdcw`&B(mIWo&MP?pmEJ ze9OczejGx9zt;c1UVR%y5Re0tqXf@CXfStoa-->(USj`6kU%IX>o|3Rbm?2!)d~wY z$LiQenn+5Ln5a}g$8tNzdMhajqrxp`rV9fq>q1W6Jr8p{Hg}0fJgr|NHLorfnwUE3 z_3JRSCJ)?-gpE4AatL_S z*V58bh!+QH2qeKNiHbs$EubAd;EfjYQI+Hv-2TYEz4g?fs)Z*Ejk7nbedt~U>msPu zWpuk$Al+(nIYRLk@ClR!-3EWzO{hRW_w@$96o2(j$jqdDfe#vLEtxQvlp7%i;ynDw z$uZZuwfQocQon7*mp?(e48k03&8(>R#gf;t7r&=wilj`MTntHP|5jwtyo9s z0MH3M&w4i!?5)R~=SoJ3;jv*`kjonG0P3P`;mXj2l4v+$^|UwJq)ws_i@J5Bq>K#rbYuV zDuWc7R-z&;d^jkhLC!yNMFnw3t|8tAOBMmt5@X?K#(vyXp7&N}kyP8HvA)nq#ST-G zkW*U99R8c9CL4YD26jUKiVKw}#0eZa)bZ1kGEy*P(;)>13B)I$mZHYS8{EPZwm#TD zoT_Hgp?*A!kBtq)FL{C7x2f*4R?;m9rKa;fz-RCagKN18tg+f%oOpo zP&YV5bcUS5oQQ!L4r*@)c(m^z2&f*Xot&U0CKunoRoz5L zO`dTf-XI@?{0VXE`0kmAv$`n2ZJXb}XX7VkM$7=EsX|2#gF^VXs}L)N?YGITJS%X& zPXr5u=#pO(-J&Q;L}IB)ugbbeHp$;V-t5)|n(4c5=dC%oh@_2V!v_td3CT@Q8cgJM z`uh6uwOJ~78VGn7gYOX27!b;!vwD1?=ogXL()X@+s=t{g@eVZv!Xa`D-Q|Gh7010M z5j`)dr^j`ZDj`YqS@C@lgOIoB)j}zXe;eri072e_m?$`bgLq~m`-_f&+8Im0&DjNR zI-QIzxag#^*g$GyZjEOqx+X7szZpNosfaCc+v`HEwKI^IKq)0jodA`17M_6m>e&+D z&g?5a#vR zPWh7m6FcEcUckwu!)v@klk5dv9uI04llSM;`|D>oGY~EUFm0~;0i}C6k}CfyYjDPzE9Ze27KZqP zSx8|QlpO~|A~t4NB9_v@zdb9hq!g{d}1g1`%yf7ju6f^Wes)u<-U39KAr~&Lp^_ltv0#`@xb1QYejBGUNWA zLTqhKRy#9`3bCpX-5=FIfFcL(V3kKuI?z$`0eZ$gc^UBEQYi|Oc_fQ_0e(Vd|uovFzv!`S+mAHoYUgy)rd6ELR z3G|m`w|IDWF1P-aux_>f1j+$cCNq%o)vP3#={;mgG`4f-j2shhOcKF&^*S{g;7)K! z^|~&APKZzNwn@z>*&c_;s7x;O9b&r)xEGU;Uu(^_EA^(>*w_}RvqF+WTYDe*H46P6 zfe%st2|PJ{g$DD*=v@PzrLS3=u7r0i^VHgY&sy4%hq1}AF>konZ_1R!gmP3GC|O>J z5A)AN&y)EwosCXT)?Ips?@&9YgoP30q1% zYRhi3P1s2;&@JIDi!2q}A$AV#77jLwSa~oR&!MS$zwJ)7x=^G;E{A%IarNg`qA*g!|hWIIR-3THkAT()aLgLgiZo z%KTZ6f4h?#G>Wm!cstE+6Kqut5@{8YekDReg&=2TNp3vz7mwLAij&uxSiZh_W1D{F zfOq;!nfAol$4>HDYy;$dfw8TLwrY7K>V$%k3Fc35^5}Ca^3XA2 zJ>Jr>O2Q(gl~8%2;Kr=>V6)zYnJ@bT1pWZFTG_!*3JZ(8YC+NO1?7bfo4aUg!U0)t zL`{0557p`HJy!fPJ$HF!y2f(dTvGOk7lP~+S)%;R zOg}=62BQ7OoC`it8;$5-E#zwUXw<_sY+cUHdTcUMVB1A6<;&rW3i^D)8mvB@riypW z7`e`g`{CdA+01XTB8gY<5#~ObH6KU6hi$lH+HX|P`qCDec;YykrHZtxs07MU3F`QL zF9#OWb*iN8HcY71tUAOo3QwFAk=B4t75|2S<(j#g3dci5W<7Lu^6xn)uy+X2jIB^_ zWsaMW1PB{+qr+0}Hv^cYBn2bud%I{_%{G$nLIH*kk9$uDbwW5~b_2Td6Exg=DOP8h zmsn{Iv)t_btRiO(BtQ#g-;}lhCYp9{K4lg9F?pGBs)}EBGI~@aGv5wAhS&q3)e>EK zMX^6%!pr5Wd8_NMYZBtclt0=<{h`anERlzo&VDFhsXuE5{L6V~izsb3y3PLtGcUgC zEgd7pbL+}R-J?sWslixG#3L`ijgd6W32^XmaU=oh%)r2`QWK{%U5H?NmY33_jK{R_ znf>`~jdk$FNwy_WTb)n2wY?);Lz0tM>eYvm_2kCbrAt4mDOkbcjS-ybx96Q_E$q-q zp+r@F>W2LNcpjE`^)r$`?;jYZzZ#w>{1x%kH{I7VKODI-KR8|ApRMcU--FW0Sv15$3D{Hol-)4pBGgZIY za4f-lkH0F)FEiAp0=N)b#twEDDxUN@JXJT!pW52Q1^HQCn&vO_@HrZy)rl1pAL#Ts z;y4T3GUE-Q-EIhuXxW|HjFc4E&1*!E^H^Rx8f%wy9PNtZ#9tU(-6V(=$~oBCIoc>9 zYS~$WMTn%7RK)4FvZosaa&N;{R;zYf;X(w;PIz|~NZvhF$ zSRHEzd4+1oYzLIOhi)uxTAYdS!Yy-XGS-+; z1i978DSIfkj$CGM6Ewm%qoZR({t{(c^EVs{F~5&S0<8J}8ObD*2|G$R()jz3n4J6& zrT@O$dXyvl4-X@xW#$bvwizm7^9iy4P9XHm&k3gQB)PA|hl&IMn_Ki}Box|zlB53) zZHz6XX<}qTpNeH8y#fDUues%ty44tM<1;hE2u~gm)J>JE+b7KI<6u9b`0;Y}JW6~r z^_s719^%1Spz_`=^bJmg&OuctM~ImhVmGbD16GAFm1mA`Tshtr^cMk0_o0HAd~;-E zxy=(*AS|ewiyJvt0n}^t>+SokVGdY{tFk~31L=KH91r#o6*x_KRy1g*`nkQ9YVzW`|V3-zi%)Kp6G5}(_?2@JlnOztD2s-YKnhzW~Gny7-Y<2js9fH@LK70 zuQ^Ig%s&B)O^Rr*{@ho}-O7yv?M#rO;OIO%d*qK7TKP{?RC{{u=20Gu966@na9O6s zWa^nU_?s^lY=x9Ktr;3?g_BrNY6SH7GyuS!DshhAH61myzx z5s4!pGElyj1IeD};(MpDgA0VMCgBs7GBg(LItD=Rk?FOyxs8Q+v#LrNUE(R%TQqGl zL(5g$CUNza+4TEJ#70+@3k{U5!EoqoXcW&uazlwAJhR|zmp`;>CfGb;QjC(%u(J&- zPc0JyXsncfYsKIE$HhtRf;1E9WWYxa7X^`43aP(?!maz{Z1#yUhx z&PgX|I=R}=)WS_D9=*?OJC`Ve=vvt$9-x0a5yy17M1YoP)*5SWKTW8o;~mS6HY`tw zJ&&Tr-_*k76--0U;=ns8M|t_1fYlKegRoH~fVz@5GAnx^4i$HH(xq2<^>VM^V&ERL zI2%SYRy7f0kqqMmhP&%aBNJZX)aNBmbzc?<_esrpA-~n7v6yF|I!&v!QIQ3-g{$M~ z_sG;7q@78$^n8#&5!Tb8@J~gkV7Oovd@ij_MwUU41LHIE@Y6~6TEb(!UD=_-i@&#& z<+h9G&c8;OA2( zpC#|VG~~WXOdYvS|)zD;?}TUft|G zTkjLKml2fz(Y%;^f|Jnf{X?&?g67U33`3bF8a*pyz*P1pDxSI-xz1*y4&jwbbxI1x z2Fv*GC+XYA^F3xzdxs_WO0i#m5gR?9$5<@>u4aissflFT*s86?^SLD$Wy2&oiXS$m z5~h*Kz`A%I2jwNG^TPDdl3cA|!eoguj-Sl{I*h_jgh;_xxo+#CQB zi~GOf=5{h1bCDO3OgwqPwtrtOF0Ea>f7~uNiSNrk+!&Ixc_dMb3jv3{$+(#fe!c$h zAN`v~LNb~>33K-~iYP8^e)*M}qhvDhsk82mJB!)+DFYiN)Br=E?bG?1In;TMQYh`1q&D(iq>?QH7 zB}NDi4b9#I`Q9Z3I1X-K$p)nLs*9n>kcv#o1ZGtKstLT)zI;#t$8U!06p zvyQ3m5dwowX=^J#_3W&=Ht zmO+aswp_ysw6V2fW!Jb7{lL(ck6N&@JUj6ppUg?2sDNP6*0zL^mB5VVG<|>@V~;U% zTMQj7&uF7q^g^0zZ?H`}OjdQFPq160NSjns*It^YIFZljCxY4EJK=`|7MN57sy4Cz zWE&ZxLg?SLKZ5zHd zIeJ)ams!=?iG}GQ=2Oy9K;bM7`+9uQ<0jOG%?I7qHgM_rQ#(^@)zi}}Kx8D9a|z0w zq${(|ttnxPk<63D_M*8tr8p(l4m&iG=yiIhg~~FSBS9#Zav>~t^U246Y%c^nj+2CF zrazh@wa>svHl0tfG919h$+_oC!l=miu=14t);CHx0VjHh)kt$30bXDhcsr~(@ifYXe=SxpLo)go04dhscv{bepEx~hR8B`-#^xVf*jw8g$iz7(a8J!Eozw@k29i3WwNRwI4~;47w}P~4s~Vo4?@%zq(1Qoh*yg4Nlao*97Ycnj9jE35 zrmIYR)NUl>R%ZOUjLQ$ua6 z43eq_l(cF+4mKiquT2O5N@W-hG(=2k zSBQ*1j1a=%x=$CHFJ`EflhcS06^YEkv_nxZW{y|NbX3ED8MhMiSibkqpiXn~^9&aI zG%y{x*At`_x}h6A&h12F2O)X$n&Ik`{Z@v#tRfw(v3J z24$tdfr#KU2)J1lY*|J^urlO=^pPSaLrS%FayLSoA8H1W%*->h5@^Ng6js74;^(LK zCqZYi<9(>>rNW>(I`%y&~-^UANZQQWU{)hNfj)Ih_~O>RZ=Y zK46a-<)*A{fs8K_)3`MeTf!9plzT#!55i3kOR)2aR2$f49vZi`vSYHc$UVKnY*3)8 zO(~e4e1-Z#@UNtzqM&baLCeQrAa?Xn4wq)b1Zic3<`uM1=)l-*YkhU{J#bSFUnj!# zkW_&n9f*IzqeiySjK+`w?SF+dO=ECMj?5Ue?Uk{oUKw8Y{lA$wigW=?f)l*3D?K^A z!QJXK0Kf#E4j#z!YE>YfP$CZ>Atsan81S9F6$u3(tqi3d^Q@=^Kp~FG;CXXrSYx^g zZ9sqVlo#F^RU|Sni5Au5AO^i|9F*B#Zd+}RL(${WSWXM&$E4${vb2fXcn(zY*%88q z0a~c>cJQX?u&63#Iga7a$agAJG&66o*QZLYjvgf`X_&n}& zQp9JaTPq?nvqShvUD&5L@wdbF=V?u66h$#5EjMFv-;TWjdF}qOXpG93l{VtQ@vb8d z`^%vZrqxdz2J0GdD^_()1Zsj47_U@dKcmRf2$_rN`TZMj4M^%mUAAS5&4VP*$F7S? zC;b8vk$uPFEjWLQQ0&D$kD4{9E>h~2gNM0 zLJX18DWs~NW>jiMe{M|+0Mq>l!i7ztfJByf9b(9?WrO8o zI}$e-V=VS(gNC?G+=<^(q3nCHKbThtKLgr{C9|D|j zuM0IZ?m1!^Af1?C$65RSdyMS#d13nkP9ASiPfJG!D8&(5plb{KDLg3g;Z zqZe1x`hOYEBOAw=EoS1>#)891WVB)y%dPOLV)3ae8Ca2_%-FOvI^Xwd08Gq`BR-@j z4XQP9IvBycL-A+fXA9Hauja)SobQmGW5i%)mZrRw*&|bV{ z!xwN#UmhsvWCBErk$%%rm`$PJ5b}0jAiY4xHZ}2#^;(6+-Xr2W%vY7mXRF6M=e5iM z!?%}TF7|Zy$ahO|2D4mdZHb5imrJ&tbYP8Ee^(BCkQ&?vQw158G(Hwr&vkPVh>IU& z_7PoIF%8#5_oLsd#jXs%wZbjkcnz-adr~Pj#D1HrRr~OY0VeJI28XKl&L1NpyPykC z*}$iMRMk=Ic?$R$m-4#LCT2#44)fe{oY!HHvmR}<2_bW!uZ$tJlkvVJIBRVenV>nW zU$k21>imxK6TV^kl)UZFEo?>M(hy)`lZ9o#!C`}tUZBJjHCnS`gvH1l@c=Vt`Guj@ z9q~kF4~-*1x4*Sb!V?3K7(%z>LgJ+!=lz3!`Uk}yS6DRD9s|&ZVtH(1Tm2&=kIIAC z?|ABl;CDMZptx`CT?!NIWvTD=N9Mp{KmbSs_Fr{}2Nuuw?vIDFrK?EqRM7iVd(|QW z$t5MBil}Yitg+BRb8?>rYSX`TU?jAEuX$awtDo^^QOy`jd6A3lvKH;*vP~)jW0j`; zi@t;{hTB!%)cR-R_5CNL_8erEqa+Egm(9Zvv@u%@%ayTk=ns%uPKuYf7p|2>QSG5< zVp^<|Y|@ART&qMc1WmIdpbj5lPOs>Qa(o2>R#(a-hi@d`U7hjJ>gww=wtq_tR~85r z6;)|zsfG0gl%C+#Dua@r;QHNKl_c@39&o>Y0Z}}!g6=adIC8$Pil|y7VPfZ)1s#y9 zvOzaDl+rfGC@Igjf9rBXe6w(YDE?&6oxPGUZ(Qcd-9Z)8#;*fS9PdrS4H6`IMnAj7 zQ4kl)^mXgP5H_=a>hLVUl>@Tf#*gBkqNeQ@7qoAuM6mJYP*wESu$Mgih9st^NwZA* zo{c`16+-xTV1nWKT$~QG`b$z-G=F$_S+UuSk6uQm{vLG8Zq!>Gd9g5aVr8GP_m2%} zJpIcXgyHJJ&)bK{F`g0_c|wa5hr*il!&IA-%VA*)gI|Jh^QByzggmZ3ZofW((>9B) z_pWYMOVKF6R%l{++#zUdfhitxfiXm;uItTqkGrD@uPgj6Rt%zl+K;#F+VU#9@F`}*Gya58c*jy*%TqVQ?MZ23YxsM(PTSNZ z8aO`!BwUIc;*pEOKa?{E|I^Tt(|9#Cy#cV9G-dEyluO#0QiAHPvCj$m?@3d@N`@pl zW-L=vU2O^Hi5KU+KgTT3pBJ(Rj|8X;fOPTK&YZTOPbde`puE2gmz7;#rov%;YPc9# zkj-t4K|LcbNlPghG8wO)xP9**b5?8qHsw-}Py80$2USU1=@^cc#T8R(xhGdw`t!>N z_RAGUA0KEBK0evkUyQ1#uGXezT4fM`1ff77RnZD5#=l4mcrP2mhy@W^>f8^P|Jh+Y zz`JS4&&AwfwLiXodO~@ap#bzmY16ov0VD+shV4v0$*Q1#Wta~HcY|p_LeXzYHJ&_$F%_C4P8(t0rzjHvv8&AszZ9#BH>QHjsL$`1)Zkwr70!Ip6`UwjQKE`YOMd4cFXj`^v)N*jorU@kP5 zL)|+*{oeK-PHrt!_FhlE%t@hqXtLM z$l6?le^SvMFK{S{~@ z#20uyZ~vIGd712HxbGubB5ef&zGr8G4itop$zw_u<*I@YG@L9vtI%Fh&LaW@H|>zq%oSm{$vl(Eis-p~<|b@|$du?$n^f z0I!*1$^NnCJzGFP+hfq8dq3#0H2C8-Wr*zj)glSrwG#Nvd6-N%<+cI9>4gH$!8^8?8WI-#0Wvh(hQ5KL55|0pO6-aRv!FOpM z_bFIZ>bc+NT)VQ9SdqraVO^=h=8zHug(R23W;qy*-SxUqW8Vz&{Q2qYO}qUqAtdCq zTQ8DM<>E0maI`0 z@!W|RF*|>C=5hVJH`~ZM6C0F48|Jx=pRVV_^edSVh7D!^JfQGm;H5b;O7)#qr0@`C z-n!McGG2Sr=!@;b$c;DVe9QWwJaFRh;`$yemh_N=>+*h4d`{x7R2d|-Lx$k2n;yG% zQ)88t2!wP)+d!2rvyy^N&#oWQ7pMwORjliG6V#WKkq}oECOS{&K$qlgE-n=f-F4Cg zo>q;w>sXzDQqa-C`OR&AQZ6-)a#kaT?JFb0>=HCFaMLMn!9WF%5XTCuvHYG}N^YKG z#FkB1>H`@ZD~Bb+q=m8zBA}xa1fB&Z5a?Y~SW~}T{u-+LnYT2sdgqZ=cCpV}zUho#46&y22aJ^u$+3W?DM#-_oos-y zHv_FFF$9;5igZn`vZ%(R$bACpfUvQyVilx8uiJ}Ry4#*^n+YDnS91O6Nz?OfPSH$P z?E$BudU<40jtJEQA(AzqM3zfcJh>Qp8n~V}-t(<@=5ho3ZuKbaMLYRF^q}qX_{@G~ zP|?MTE*YFq`DYRu9HV&sH4z>m*HSFrL3Q-Cchap7n^MaG7#^b$UfXO?ZS!mxnZ{8@j(1|8Bp~L~=Pq?M%fE?K2eG@D z>8vTv`8<)s_lDm4uWr^RR`dI0n8DV-Y}Z&QuO?H?LcF!jTRj-&xY(ZL__xp^B}O6_n{#av=zkV##EDizB#jLpdMJ7@v;$yxke< zNfrYan1y0fskiI1Fno+4S(HY3@3_Hru8yTk#l|evBojB6)M6#j!zkb^>ao?)F{_*J ze~HnTc{P1p(xtd0%UoVzWil?9T9`+!Vb!BV7;^W9e3gaE4j7r&92MGDETXXO<25KI zqLj-J&u`{WHyu1K=C@c83CGp-K&QXFmx-m4&Df%a@zQRCg5&r&Gg#A1IkJ(>?5Ns) zm|{W6GEAfU;t#T)tezLIk6Y2fMr+HSLQJnQY!Kch)5xk{S@D06DjXS)rRmY26D`@c zHcH@(WW$i24W;fqR>ydIq1UW8=}EX~9mMf;8IRY;H<&jau(>1Eia+QI#ZqwXI9`m# zc;BTFG-I9yWKZ_i$SUYocb*6q}jEoJgkKtxQ>1p*SNpV50j*y^N%P=5!KQwZvT zPE~jimz|${#Wbe$Fo4B^gbVsV!6o!Xy4y$3u>xL?BX5x*|KvxPq$0bNd^4=~Mic{z zNV;KqR!k;e&ot9x;+%=`Zw_lLJ{t3;qd4_B^k(?le*xABi_is2+j5X+yXC~Q8o>d> zlo7Lu-xF1L%ys};K5OFNhTP^(pX(O`r0p&(Ujen+vh}P_g}R3IDvr|O;i1!eH__}()|pJQzId~C5H{C9P#Vu9EW5?e8lh=_=e4!(*~K4-nt zhljK;6%748&jibZS{zt-pT=ioB@ZKe3j&(*-$k;PCo>-V72x~SX4kS=*K15j9m0g} z7uQ?u^(f+HxxK$AU^_>FKk&RyyR2{4;Max-9s(`OtW8fw68M$g)T|jxhaqT?#J^ZQdCTjh7E=j z<7jwz__u}0z|fF+q3I6{3^i3%O?sbjfW4Fh6a#ZTG~n^wM&52A^?Q`0Xf9s_y^ofz zxu2i4BUAUbg>3a^pcVhIWMKn^9ZJTRk%h;P^zk8GPKAvktg-)ASpT6^*g} zi8;h_rP-3s`%zAade^do*%h9`_VxRFrxRJYVlu{1?Hw!_0`1~Q3q!e`bFrO zB6(~PB+`o;Mw4Vl!5lFEr9XM3^<{*5g}e17#1s-2`@Dbuuv4#BR0>g{A)bI;GPR4+ z=QVB%)Bzfy2C{#EeE7bEqwsOaxfVSTwK`qArLO2mMao#k%-BTA#nw*2&771}d3Nm# z=>;k^U3&yhN`;R2IE4g2-SdwHhpK=N4l}QAY)0$w%5Qemgj;6kGYpKUU(-QaL;D){8qxM`|nH{(ei#f$XmOijE?gF`SJ%&wh|$QrrIbB7SAsgHs*Fv z>Y7o*UqbtAj?V!_gd^F(v`7NXRBERGNp=8RSVO_}s8cOn$A6o0-zOGAr(=hYYLN7T z%#(E20-(DY!KOgXUIe!JofrUgJq3i6(Xos9YPDF1+W|6xOJZ>tg9F&%-omGl?J8l9 zTwNnk1+?R#g(LPvaU#~c`FpzwY#B+QwmzbAQf87JrSb>d@E+=BC(R?hEdx*q3DDVM z1tWCRfkbu>Ei=9jg>dPgGLFW^lXTBaQGc^z=CU@}g|Rwt-X34aZF?=cj;~*O$DpFk zoF-BF@rrGD9MuZA;f%UkU>D1Dh=Nwsf-l4bNVie|t|h5weOij0e~B+TVpe`ZndZo` z<40G=v>E|(H27U4XJb0y_g5Qw{h4b`a<_-SGnw|=rUw9 zq|9Pk&Dd{#(rO&#(RGVN`;{v7`lEvy6$8#)UfJ`a9;GK4hVNagwUE)EoXNIeM*KA$B(+ zr1SmBvxh;*hglNgIx%@k-MgDO?~K=9#b?+0U~ zp71UDE_)J=jdLR7<$L;HA?cXGk`e)3_>j*Fe7;C}!nLcOr(bLww3eIDEw!!AtqojMpeA)x(Ys)K-rygy2~A!-EW zS0xinT=&Y1V1bpi(ht--I2|#lTsn?cC^C8d4;!d8(L>}4BBPf3Oh<}D2ddoTC){}! z$?6B!6936uD0&KH81MkqNpEN%-MHi(vA#Kff9We(pBTNIR}O{R@N}3qIx^^>fZI*w zP|1v+6Lm6KJ91@BXodr9Y#q1)&KdY2!`_`0mDSzmApCSJ{^-W~qJl`+o?b9`;L9%> zyBN${yUJ(!Rj$m`@C8)O&FVx|jp+pP&qgt_-#>EfL{GlMC0AER+}idShYVoSWNK$b z4?-5yl|@la*UBMp^5pnJu9XeUOp`G_i-KcM{@9yyM;Hq5ChcADQYZJ+_iih!SkiMg zBwvkedrLo50Bcvdi>T9TUpA74*JJv!0OHz6MR6$s^#FO|klneTON*ydd^c2zWQ(G5Y$t7joEv;}9Qd*+q1hpg2_~3GNDIB!iE`Lj>q~ufcTN zmF9>gONz(%FY#Lhf}qq(DSqC{Gf~&D)c#UXe4HLT%IXkO>_96=3X1&fLC{W?@&q1j zgtss63Pz8ElLm*TDtmhHn+tq&9eX$0&ynTdpFgkrup-bL7Pu1N+li%)?y_%`a0O~v z^PC)uhvJhNy!r*AXrc97MeWUh{xI-3vb*k@kKwYqb-=gb`4|h^KE875Zx+quKP{sd zY)1zEt*ZmNE=B4pz6hWqv6Tl}k>Cx_7tHnDiNox1sGzw-eQYZjq7mu_NRjZaa3Tfi zW;z5vYt~Jd{8lg|V(||r%qjFqYB_q6kRJ%oPxH}xCp%q0zhR_{T=$Xt%Ub`FW5`j+ z_zG8;-o8V3u3y8rjAYomYXlu&Th?Y6xZt8M%c&^ZHd%|_0nF-Ls$0(1lr>TfLD6DjJ^kqAh{p^e4s`? zbz^}_dmnyCG`}dfE7jv0MF#I55`7Dh=ba)tPK=RQkulE19FN@I-TGS|2w|BFdhugg~W^?OOD>><>|#F8)fbqU~cSHsh7lypo%* zn%Vb9b{VDA_^j9ypzG4>HHRqxa>K-qC$?-3yJ+G6!@&gUkij`+ML{BTW5I=!_H*s4 z)cnWR$XOv^nUi?vyK4bQe<-XezCN>CsTUe6V|E?Ap@OFOx1 zS4+zQEA8d$4y-0>wwp=ikYhs;t|oGWXV9OA2Hii4Q8Bd){?DdW%oy|1;kOI@3;&iM zc5{0N1&{^m?-UevcVFQd4v7B?pb)jT4GOaT%~c`4g|cl9FhK!iYJ(euw<}-oQ`{Z^ zN=~}h(@_pwU-1Dq@Bp6~10|N183FUb0MRIt?dCC3Kti`5*r&U{N4Vc!TqlG=|0LM8 z;%{hx914+EZMcgSC%N#0!4(Ri6QnOT3SP4rL>LXT62OG7x0q>-%?b)!xV-ZdVAKg6BcbB!^8aR0V>IM@`Ier>E1G!yreR-5kkcMdD?8PhPtH|(G6 zvb^iZM9X~pH+q9H-Y>mi+krS@9p9?u=<_V}a7^t!Pq+o?Y@26_?Co9f2Z|h2;bF&#P+xH_T899XpdF{AGlz9z`UMEDkI)g_Q}m6#qMJF2nQ6 z1X9@C1E&4})iDd&q-Ul*viFyvU7?|JNOS4u{ipddtmUQn$r%rqVmw*O-Vz44coB1%&Oh&)eyh>qj(x0|P zJyNxlSE43MzZpE)b~<-EgH{l)o`7#$WGc@mzp_LP`y*_rog|!Oy;u?yfeIQK3#fbf z?0l&rvY5@g|L|U)qCo#0VS2W+!`)SWJ{iq$k>i2$9<`Nk*fNE}s86@1H?Hbx9y|N+ z8`{u;BK!g)Jmw|l@pXOY*mUYQSVNKh9M9mUTC%=-oU7Q0r<k1>@za+VenZFo?qgQ~@pY@>sL!b6UYP73MT@R*q zNT=27<$LB^n8$cbVVN+g3Hz&@@WcAZKZLlsgpnG4Bwp?km&^kU5?iaKZR=!{Mr`9w z1Q1WeYIO4F{LI(9wBh41{`a@)gIMd^0v+$QJ0h}MC&}cd9+Bi!V&Hygdg;pOQ|cmB zsbIo5`_% z0T(%fN_o<-2bY6FUbSiGEVh!>tO`(A+2#R%*v82-6 zDn85VPxkm$HG4GvUMMNgj`4V1_i0m7h26qWZQRZ?T@xBTh8GsZR<3G94H$k-uRONW zGWx5($E5{+9mrK8B2_32PSC%o92ek-PV@X4Zp7p9)1tV5UcQQ}VQ?q@mfZO?+WRLG z!`pVPy4Let>4k3uXq6K9d7luJ+QV$460p`z*t(JtNotFYXSEvG)uopP5zZj+nEctF za5-)DdO`j`W=$udd+6{b#3SOTVN6GcTpd)@B4!zM03dCmJzX}M5@N&yU_o!BBc|@wO733dkN4iz05bWGq1#P8vMQYNAuXb)w3{F zu|6ul(t7XtOA)U6_AhMVpMe7~8AUM{v$Q3Cy_bP8>*FuXg~@(b-8@YaCfJ zJqvpgp)*F;?@Rd>c8TAsLZrF7TOu(mh-f5UTULH(bXi8a`6PZZz>dFf&$E}>81U|hnX_#ZLX}*pyL(ghlM_`m8+CnSnjN&>t2uQ zJAeAc(0p;GYA`na5-a%3MTrEahCKa2?|2! zDrJK!=Mx{%X%d{6F+LH!U|jj=_0{FmhG%kVIF;49aV!TM6NVHLBdImDmev!@g?syd zDm|b6mizc-yT6$FLAT~zKdUgjDXsa;#S5#t5)Z?RaucLaXdfTTl{o%phTcQD-0DwLkUymaglUlliV26-UgT`pGQ- z2c+VWzB#v78Ivj|LBgmM`Y9GwfUWS%aT>YVttD*Ua`t9&W*Hn~z+{B;s0Pbe>90DT2Q%guSlRo&{Vph)6u-_(c0wF$|L{iCZJ` z{+oOE9_y)VzV1u+d>dVCORG|c2mot5gO&qS&5*xU@v?k+#m|z*ew8U%0bujxZ(()( zDS$KKGK9?T|Jnb0yMY_yZGK6S#Q`)U58U^s0c%|JOD0FoM`t=Ii=AhtucROzLiymO z8=M{7)Q<{IU{qx$Z-?A~-OLNu-5K&zafTBk#PqxfU5aj{I!Ok8;qr#^k^G+~3 z+9j9nO8dpMGeLvvueU-aY8a^08K-rIU+0y*w4EkVQfBW7l!;L3G5spJ;cXs$elGlGwPJ7WawHLaBkk3>Z<67CAM$MpAHZy0|`N(Pse#mW_U3y)# zjsmld70>I>IG|bgL<&qEH^1z?*uW2u3Mt#U4m3!ZzGjAD-_;X&(?i$&-}33OB_u4Z zN*~}!TyNRA075x`VGsR}K|%JEBk}Rgh(J|tgftp~ zO=Z}M8IpexPpm5tyG#>c0_AF2Sh=llxTGoz|N7!3w+O}K|2!T7^?7SZ>xjtyaZ;#W&AJxZho(iyM z_9`}7L5hAoBkAG7ujmxru6h>uIr2Q1d!^re?GKZ*RpcPg8|M!R_sZtK+?Yd&>pBVS z`r6NdSe;%V6p64qUT9BadWsL_d(#TZcKLjDl3a1}W}R>l8T0GrS-l?7f|B3BwD5Ji8uZTmmc>6RpEEoXVp_nZ>cI06mNDVpX8fHRrI6^HJ;VM! z@7?T~qdBv7-UXYY8slG25SD^lyTf;TKeWtkrCkW3-TdmQosVQ+AM&EX zZ>B1@s<&J$TVv#wCwlYGB8AHZJ(#bIr37A)nUMg__R6srl}l4)#!<^?J{zBOnbk6f z`i>~uSTcRk4lyf2bptlOiFZh@L-V##M@#QVEp~VA=dgKgJY>b8{%jGz?PAqL%oyYzdz*JUEDDH=f(*MzbDgpKp23hj<> zaig;LH7KmPv2p%@0&e6+B{GEj2=+yRh@;O(Ta_V9BnT~jqR$+YvivW!$f6FQt|*~f z)BcOXV&F-mu6S(K#Gaqf`9&Jk_YSBQix5XsXHlA?S@zf*rnS>sOlt)4B+g=PhnGzo z*QFNtZ90}Z8HN(@r1PZQp53#QXCS9j6Shc|9`(G?u8nI{Sx>pK%yQ>tQyWzakBpt# z$ozb9K(q`F&}&7sEC{&f`-X3)hV7Qhx$KcV;ReS-Vk!1`(b{f*Dd`j5BYI}W=IFEoVE@A|BVZ#Kmt;~JnyWYp>&PT-KXR-lv z7Gbb^eAem}gU+YoRBl>Ei|wQqt9Hjr<6xeBio?@1Vk_qIwa3bdcKh)7<%joOtlf#z ztZjyipifAWYL><%)Qhn6$4!=WT2|~gvT!+d9qyEjuR;2aEnRkey>F{M$qRT#wHY=b`cc?KUkLeWH$GA5TF|;d0k}n@Xkp>Lctvq8VUoW>;L5I9@6joKbIAkiWp^rBNPY`i z5M9R7&!Fh8*J$cEdGsgDL_BCFd4M^y#VZS#5?z{Yv0gAtSA@>%^`x{|zg!|K%E1$y zlPlr_w1dCyf1{pd^?8U*L0GN{<4L0Z&n<{p);W0vib5)7A@)}vU(FT<^402RRE;@F zJdW1*73}ng!bE$=9B)$cfCMlmL>led*=4smh`@)IvDlgZB zyCT|8YNc)}p%hyH?I>Fw=wshZDk!sYicBcAN!~g5Yxkvp{Hz+T4r>;geH@kQ6hevH zUcrv7hyJNoXq>=>MCtjGkFiff5cwU6#w!Hz&ZkcpbnEnl<)qTzpO|I(KE%#tX7}@X z@$N$oj=;{MrRL7Y+bdE+Cf$(s3obO60A1cwyzF(rens0YOMyelHb+~AUrt}$O?sX2 zlpY-&vZi0mLN(5^qgXi4LuBBZ|5TL6ggLY?@llQn@kgXG!!(U-iT@RL@%vhrHvF&Q zn^x57I~!#1w=1xwNgC8Qm;3}vVM^@v(gPlpbrXyEYm8udBg8-jdDIbh8cV6ppcxTs zdY2c;aKCW&xH~?8x)*SM%v&T;DF5aLHBrqbGsErf7_j~H?aasn-IuQAS4PvmbhE>+)afU~YF<_Gb@}zRMPazJ6g#Ym$XI za3Vo#298K_ZNuhGL(xU+=qD*EX+m_w90#E2Q{;hfd-Be(UoOQtYKdg+rLQX>FU9Y-+`kINI-of9KFnn z!$p{H@C(S)xsK@cV0VR@gV^n8#2tR>p7Dm#C>0k#X2i^cw*1E(W-Qq>0MLniXh#$^ zp=#qj*bC7&d&t{?18ek_A|+55c*X(PX>w&7z)60<=+TaF;@;4t*?}g}{`34kJ=6nz zta|c@`+FyG?BAb5_{ocyFNV?V zFyJkz2Kz5-+qm?z3k!EXZ?_tuI+Px5%$e>R|NDl2zv?F;>e;Y)p0oi(g`so|Ail?6 z@aMk3;P1yG{^D4r|GwBqnloDgppB1EpZu9crp^FdOw8Gt7GWwlfdtTa+zbmp{zL!2 z$qJgUfKh>d66O?g5;y)OuTwIl2ub`C^LoA(a~`Vx=(f{vQY!}4g{K=OME@E5-4m;psoaH8v5ST6c!+8R3rST|@#43*ghf)Be}G{Lgz8 z|1|>|>AxC9GsR~68#&xw8zMXJ=0k@$TAM8$Keo(ez+22w1O@Qd&i#_L33|9y9bmJ} z@Mp|;VDa`&a6h7D1aV8_&5t&=xEPbQ*7X$h5f)JF3N>(LS)qg~AFAcsasOXq6|4L^ z)`zPR^2$alvEQV6LL9rU;Y8W)VmD*J2q%~v4kWi8SDny zE%M)-ul661KR9+k!Swm1w+7I#r7#RK-|B3fk}YZ?qEKtV8LiZ>N4uuEr>L7ymb-6k#6J z{#}daA4kcoV8f01CI00rRa$gZbm~vG2cR}{z@(WFK7uN86GTJHymS`2QZe{PuqUso zfb4Rd3jl);?!Py0L2TmuzF$L2tC<}Nq(%+PBqi#fnb#|td^jZowRz5QGX1<4Oh<(< zf|*=mVq#c9HxG78*|@m&|JD?EEfS=d`vum?5C?=lyB&>9!|*rulU2nCM%6&W`zu}l zVQLhu)qiOX5WKwGJ5W6z@@`4$eYrsbSk~=N79`~mVONub4tUVuu2BahJHOz!K^cuV zU=mS&E^`&TThZY>!sKstCc_MXHpV$+Mp}jkR42+_HXA0I*EQR6IF1 zIf|VS1b;#{VO+Rj$z0JtQu;qa=lw6? z8Tnz_ur4^h+{-7g;iYkU2VwyokDqwTPu3lyYA|&Wp%kY3q|@Qv_K(_G zhtH~pvW9hEON+nf-6*H!{T>gfuW_3GwVjACI6!a!9;FHZWZu*C#UVB*%=1r{&oi%xyb)u1w4lrO%ovwj;^fCzR*Z|EaDerbeNk)$ zTjpgF7}`y3@pRdRK&>~Y$vZM+mgl&KecsovTi3WMIU|C4ldfD}XC8Sy(^|PaVfR3( zAcikEpY}jCFqGH4OY!ID_o0mGJ~1@O=gw?m=~W2-o>1@cDWWJ~z2sr!MQp=c=kxYm zF0`?UiIC3w=H}*rfBrZ2#QTRaUiVo~ zB)kn>+K=NGwFn^_N#SLAUED)<;1c=9>))zQJeX|zPhGhh{>|)CT}$)1?y}L{kdzbD zT7Nb3t$(jE<(~=srFsrGalCgw2=~JIYP|@39L{3)JcUPlY`6`<*XOG=)t~pTJ>2!) zSP;dx)GrvKc)3x9mU1ZLF!j)ig_wVU0q{A!zwj68yhz>>6FPG|oUcUu67!xHf$;;J zXk*7q!ICTUvT=74*+pgw^MClQKK{YO9-O0|k*>1%f+TL+nwz>r_dURWPc zHlZRT)8_y12@JMmh@u$6I>t;nO}Az@3w30*q_D+>23!~Gmeb>?o0^&$8b&1s5IkU_ zhMotuWyk?dJ8Ms*P$9?br}JX|b5w)&X*N!*sbHhqo`#{*G4Q#UpTK*=>DX|Qu1THm zB8G!vEkiso!C(b|Oku%Mv02Omi_-q(@gfn|PkkNve-uSqr*#m9@xeWEZ}u?D*VpSf znr?7UyXRtw?XolFgd1vk#;=HHc>v*Ty@abU=N9JdPquY?KZ{q|2LEjNW4mL+QWF$5 zj_{W3Ic5Oi4cOTPHU(@|D!msVR56aFayQg;>bCJ8p`%haFqR_4{h|;9xM+zdwxOoj z*`I~jA2r1V=O)dO_UDwS1cMwpf`CICSt%b<%8J>Uo>3ros^$PsNmCfv zgm;B%bgiI1A!`Tn#gM){W4~|!zrbi)o8i~R6>^&4^qoiixNBb2geUYUVgMtO5NP06 z5EhoJs@V}4pbCPA0JPRiV(TcUI9nm_7xItId+-6fL14xD73{X5$}-J(`K1Kn!m%fm zgmov}=%x571B_YteV!H)^@Mbhar^M^~7m0kcSAA&Sps_FTK?WlMn%6xtg2l|FDuiSe#u2vhjHcBt3&PhPR zWC$!V^s(!CO2UriH0V)QOb79kz*GDyN?3uze(H?TK?EznT8_$=JR>MV9A;pylK=tt z@psqpQ<9u}PTE zLyrVqRNKk8f4od_3$nJAdzL9woO;Kg^VXfY(y$H1qVEY?n|N#D@y(%AN{Msp9XYz% zEe&DxwdG^I;Vto5igQ}xEEU2?4od~*bqw?~lr z2dYoGvXT2C5~BI?^**VpzVKTrO76ruQImv znPQ`~`I7RTE&LEN3Yi!4r5GEZyfEEe6E{GNwH|WgbJrT~%VXmKiY;CP46_n4*Wtk4 z;u%V}pH5M5N@eK9<=?BR*pG0bEGbduD|Yq?HfpHJ`w^5YOsn#R{Tx*)mKMZwN+{Ce zGC1vwB$J-(7mCI`^u1A$h8yD5!Lbz=!q!l15Qely70fswJz#l@LJY}oPqHos{hj2O zQXgr(Hs?q1NAbP3i$1x~F?q?gdLRW$R|I4RjV<>^ET7%U1n=QIzPo8F{gw|dVA(3A zCb9Seqb7&5efx5`d|e)7vJkQUISbgsU*Ioao*ZBR>iSvxySC zlVBrxy?iXxgB4*gtWQP}?nF-ZFyHh|`p%ll=!>Wi$ItNRn*BL?I(*v8nExZO7+mn= zpZB{rna~wPabJ+U{R~c0dLlIaR#f)e?a3Oq^8M|EA&vOb9n@~g@Zr+kqGeWzc#5a% zoJlJb*XSY+X}=^&;#JRcuj_6CJ@52B{rti3G5+79*S456I*FedCW1S37>bN~cXKQ?T^w}#zTFnN* zlGRlC9ViYv1giL}ao19d2;z(Z#)uyQP`HjP&C}nzsI&dAG1)Cg9c~C!4^ek1+_wPoDC4MmSu!cL$0)~@ z6~{$k0vH`&w!ZLsZFQ9BL^S~24x_CufcAV!Y?*)gTs80{^*0+R4C%QfxL(0Xe0UqE ze;~E_TM@(TtRZfO66l@e_WNS$acb)9X;gPggy08$Q8M8c`qBnKKZHV1yVnX+;UXl; z=Q!($=Zm95ga3lPQhNV&;SqlZ=NU_uyoh~1L z1->lVgn_=R5l06%4jaEiSkbUW(d>qa9mdn1j<(_6ypoNGgQ(dZ;K$=@f9-g#Ef zbWmeFuq933rUVW}Uy=aF1uzHBM51tWo*>Qs$phL%+wYCLvk6Qwp4X=$K^nda5yp4A z|7@{oU*O-Ce^SH!s?|aw`1mTL%bfUHMIxqE{GQ1E+G*^Od!2pK(YO+KrRnVp+?hIK znM5r(!X_23X5T=|JHS=R#6{;a3rcOacY4%>_{^9*?HN$P5AAOm@4Ef2=4DDb-u%g3 zu21~b$L8(|`D4|-`K@!LO4bvrN|B?ntgXoF&(oXEf#;>4vU=b0TUmzDEaRRszX;N0 z0PsS@EhhbIY-sycTgvbMC}kZ`h`C=O0%%n)IToNwWzzys?zdg2bu3)Y7e_NI7hg^y zo0-yMivy@dXmpLrv{6Wbg~^*#6h`p?bd=#NJK5D8{EA;l;0XJ&r9j9FwPqFY4SM<*c){0%i%5AUn-^p>NQ zkZT(OIIWcVgiOW1wDQP6C|@9%r2oBOEa+C22_87+&fuf3uk28nN}9PH#%f=5Y}trN zmi_2@vR@Dx(yz--O{msjj&Rczq73xzO*e4{$;2g z1Nc-AF@&^|`)?-ft(!}`E8X~m45?L#TfHMX@B36R$>Igb1u_DEb^5~ng)nDoO#4TE z2HuHA=NxTpahtFOV8avdU@j6TF_{4}?$xPTAe@Mw>NXBWH>`}qWtq)+4XDN zI&Fh4Sun^UaYr-6}tp_Ur)C39zK zr=qA=3s*5HW0}hh5)~Vm?Y!NYNPd?gyvUsyHeJIS{j_1ev06`7Dcr*WmeqCv7f`YR z78rm%7F4|1jEd8;EEmb17I3=K;!Tr_1G}LF*w89CYkYn#eVcoZM%Tgyf1x(A_B_&= zCEWN3>+wGjLXcuF+I_`NT}NhrM_{69>(6Ln2l(|QancljQ-wET`nKnU8EbE*5}gG2 zh}YC~eR^AWf0wbGN4{}qJN!92*K+pr>2_K{Uh*vwd00t9)3F%%>dtmfOA5NR(Xe8Q zP7z_{%Wb1YaPnj0H^qm5;<1lEUaIE6mM`YROhMZ&Mr&84YFHJCJ+VyBdAeUMz$}+^*T3`UzHdy zW`--Ekvp#iZ*}Rc{9qsjzylc3N z3-#_A>_-Up7Id@S9kjQ)!JC!7gQ)e%EWLs#O?@v^G%f)kE4(J^GM;8?)b2isNXK^nmloB3&j(n3dr1#1}3PFsTm)U0#jkx|~tY zY|+u3K1v$J6Y&*jeg{;y=`x}L{tDj(m5qF^7F9$>x$%?;kUHtSD|W4i?yzTyCLV1h zcsO`m&QER5yVrR-pq~x;TVGU`9in=`-;9Ud*o40Qg?$-1tWVwD!bFD{#))R)UXLPy zS$Cq8SXA!eA2ChYu4SNW8dEm7V2w*~B?CQ9^re(2T{GqbdCZsPq{3D7!RvOYu-rW% z{HC3q--@q7=+QPY9&-Hxw?9SK`+ySRF1PL032+APUy z4~2aXbRXs~^nCBlx5ta}7Uq^hmakah8T`9bRwXx<>)3HnVf+3;~W?x`jTV zaD$&(>&T~Sz3UpqTvbF@EJ&dOQGEUSrV6ELTNnUeK^94ivF2AU8+S4RTa!l^TAuUL z`o$-D9-EbY1SlVYl?&IClQ)yM()!ZM3+#9BUd7v%sS7&#q2q4AWYzf0wK}7uCp!%EIkb*;vuVda6@;%Ou_uD%aQB;j+L$aFZWs>MDAHwOajDDF+aZ_BX6l)5rRfPf-)Wb z2s_D14lEQ(cRTHYn%18k3y}w$WONUzDqQ&amHRRpJ4CQOX-2FPlgmjyrtsb=O;bA5 zr3sMC|MT-|Z?6iW#Vh+mYi=7n&3w!3JAXecaqjMnW~qg@e6gHm>S*`pK*(G42X$m@ zKPzUmk*0m>+0H?Y(QF*1e-ix)%H_7gJzFl1$Al=N3R(fa?ZF$I_wSZof6(~o%J%-? z1&n)x0EP;c?mkOykvYjH(yna_F$XQY^63FjV9T<3b5ZZ@-t7rD`&UP5{1>#BjER;+ z6ew}@Zlw)>8P9)*yTjBMVr5p)$5d(mkMm#5ehVjS~;o&H0K|Jmd@v%7LzV}})8N9x2{FYE(o7%c}pRkU%R)#Y zd6f}Jst$ChdRySYyQ0&M$L~T zXYvKj25%DB?WM>;J?py{Q0Eh_cLk)yWJl&fjkF*aXbDs)#h(Nf0(U=B#`uvFP2Jno zM5)KFUgb9qY=Mfs!~ou+4}Tf~EC~4*(ERTSQqYYZXbTPmo)Lqww`sN;qiELHEVLA# zJoFJ3MYJyYFZ!PS$rzN%)EEqX6q>4gFXz4&6U>d}ypTC#uZxY{dbxV;)9!gl56H6x z>XsYpu2T(X;XRLLIqiI6E;^?1%24cZKRM+x)#V!z; z+F_Vg4BPRgmYj=8I5UCA#^P0;P^Oyqrnd{qCQJ!74eJi8)>O_NBnnQKiX{B)+PZrQc-K4^yFMtJY^W*xReFi;)4ce`P|B^e{Gt~1kJoH-^Z33cHG>0{Ln+rj zWxb4Shzip$gW}}!StBqbs`uzYno}scMq(iekSG7U;U9eDU#EO+hVUhM0FkIGT5h6i zrS*qpuFF>hchJw_EYpGCwmR{*SF+$yNz{E-^98Zf+RqcYgofrDOVehlgURCJxr_73 z;(7o2hK2!)-NePc#;tk3D3$YMA^oEt&thxW#d=@&eOU_)qEY0dN&i7IE@(AJ$|(YR ztQ0Qu;ya-hy@PBGn{3t7G_-dif{NeiG#}tbguaq}@G>aAcf7CX2GVGQg>Hs(oR6Wo zD1b@e*U);mKdLNreY4|yVP)|Y%Ic)^CEV}==OYh*>S~q9xFd{@$}b;!Tdib_S&>V5 zkLXf51KHZ!&sSP1LZMP*d?`x=Gsv4|+U_l-0Lx3cG^6#FF8gI?=qcNm`B}vM1|Ohb z*S#9~ti9#gFZEaQ)IPOER3(`%RgCRb(1FBWi%KOo$tSJ`X&q5XNvDE(0@j>_nMaX? zb60EgPWH|%rFXuq8gEwN`~F1F94oaekrOOl%c>T$u17BSldFS+_ny}4(kG5ABg0$V z7l-cx{alHb2WAF>988e6VR4pgU87K>GPjh-^1aLI zOaP1N^6kj(#U~x!hmP#g%Umi*rac=y_M*$W^-6sQlQoK#%ZAI^SP~vSUS z5r4&n;2Yf<)GyJr6z zg>;CDsJXKkgzdWYWnesL3g`R2empz7?G5;W^1&V$chxFGCj}bPC>)G zp*M7BD4-;mBDjqr%n8Vy`mpzYq9fI$Lby-|BboqsdoQq?)zS{2dWsqI0AH|KO&=YN zsX;$w;irLL7wvY|yU449wFJ@`AzUNsA@n z=r>vTE@2oHdnp^ENzjf=8t-EL9}>Nr2R6%g^&zbIi_$G#NJl@??U^+~^+IJ3?aBGf zqfmAGNCD80WJ3%1OWXs2|7S)hB|88@i4%?X-pSI z?2KT>>LT!lm(nmxa?cNf%xl-`<>to9A`|ThVAL1Fi=@?oh4MdhY%zHf?-5HTk)pH&EQ;PN~oQxjYeTgA{<+^VY6(% z5)FF%O*?+X+3o>Bo639BN6%2^UN!}CgG+SM6J$x><^LisS;1_&tsoxcBO?SdTq!b$M7eG}BsmW?* zw@fFGctx5j{vgum&tATUtgA@|4h8BI@v8g=fLr+zw85UcE{`COc3XYCx9+cxeRn$E z<45W9RqSa43)tDk#T-d1q2wzW$j(+yse_hXZ+sf-3tLG%bd_{ZuEru>z?R`Se0sw} zn9A(Qd>iVxJ$u;UK+hz?fJ^XT9vp{Zq@ogwl_u@2$iLzEd64B`ghX?YerkmF)0G># zUA2CV{U@QZDZ2RMGIuAdorfX19YCMPM>~6$=OWZ9Dun87l>PCn!YoILWM+U~8ndH+ zFrx#+g*VdjY&vi-TPLg$z&YtPbixnJ zMo3xh9QF=w3%u7xPo-R&r^PvdQeY2Px1Q3HcYB7^It>6R?49)H6t3&h4)8 z;tx^w1po144jW)*2@_l>pxcJ!0tPZbGx<`@$u}1}N>7T?K|di^eAgfnl=k>vXX4Fc zG>UIWp!qpopt;;p$ygJP4pYk^hOPC}S(pS|J$3AQxx6tI+5@cf>n+=#vHDVW29Oip zybA(^FsTVCstr45g9Bbv@tMzXYD#j~m*|kI+}RTV?vGh1_iY$b45F>qi0nhAjdi!8 zSkMTk=s93=k?OTLB_!xBZl|}+qvv%Vkg@AMZYfC(p&6%oJ~glP-#aGD>V8yon$20}f?UMFE@3kc?$ zj<5G5Vd7$jq#?+r&N{JdqBce?CvRJlA(oa5mc6vL&QEtQ4aTRJ5DWT4I#S^5{wqp@ zO|ZC|Fs~%v&-5FhqCT**=4Nk3tnwINchvmDo%!%d2qRcZcK~pyHqOE98zXAUe|C3y zc|@~+!%O1a0qps+@rWQ-W-EzVdKD#KjVAK|GcIvHxLig`P~qG5aEI^F2_U)-^Z5yz zUd542`bscMeySoU*^Q>VEyjf$N5>kb@QH@87Z-!_`pB4sfB-g-SK$kdL8%aF?HHC& zzW-vT5^M}70Nq9SXlUq5N8IJ_jmrLo?KcOfSH9HY;=iwOz}yJ6O_35+0YpmpAYMqw z_b+`TwaeV8Yq%tnlPg*dB~-3TVlEdKox4^5E@7{S$W*balbGQNKOG{N8u= z+X-5r^u?W`kcTzD@YLT&mj96h1cf=B9CG6#kdp||R<_Jz2qeAsjAQ*{^^w(kqiYja5L6v5%G8mM-u5A#(` zIvo1w)ny)PZK*nDGlUJ8oY)5A9N=6rnk`X#Nz7Ra#(sV&3A}_kVsLt9Vq9V{J;}=e zxLihbS0#_!g7g$L_#__KTm%)52~wLGWr@0$%U5XwKfVKeM>Mw(*A~3CpTw}eI>VB( z2an>D%)^>-uOB)V+yHIwf_|6cvyAzCvU()SlN`uIv=#JSnt;8>Z;a{p%1|57R$V~k zHhX}HtA;*BNipB@Ry_x)yA%ROMz~()#aRYtGB3Xqz4>8FN;OP;*h(V_{MO&#Zt5m0 zZ5<}7<}bc7cUx-}zkVBKXP+ezP7YcS6GUJ3xAq!}o0l88n(nC#rt`5lr7{UsoX20d zIj(JbyEm~KP(s6M4%j}H9-K(hzxuNm#`DcoGPbVR7B4ACxd*}0dw|K1(8KStaeKUY zK@^K(OWz;f?T)=_nPIVRY3uPyt*LwtU|hwl0K*7r+R?`7h?g!6W!Ar5R>jt`8o9Pjs^%@A6hT#U8Ah6b|VnE!B3 z86KWSOyF6!249pj~-R;aV16nR-p6GJ#H6N`6INx>zuT6|f_PQSIXT2(S@VhF! zf4;D+zlv4y1}nR3zZJuN=0*<9N9?3JdA&DlL&_VP4a0!VN}T^>s$X*vwaK!jKY=OQ7OBs>gmyQY5t? zgqQT?1Ux1?J^SkJTMP~#D4#uaz2bQrBg558OFSL$1lA2;TMW2JY)q_o5Qm?$uww8P zj22DI56l!_bV%k|&QE}o@U@@51&gm}W6|CBySi`>{b3QA=*`+{oLMAlfVY`T&P$5j zCbq;ZIR-J*V9-7lI$%)@5Oo4u*{@U*!>-3c21Mn2KvLLMI*x5;Gx`#?Z87%T#^~tn z5g`HWx~d63#N=!^#NX@2b^<^&OuwDfuLtutrt3OpCFk*KefYkYnuR|2QH^?H>FEsO zNdMdfotAi_CDG!jbBs^sDnQJ32g5e0{SKoq=uXn76g3^&T?JgWgm;9nY033RVLIC? zHz;g(;rX_F`+u<)C;8tE8j)xHsOg(a*FQ#1jJ)?67RYtE^PC7ydec3Z&qZHi>hadR zql#I|SmM{#^Qf}}`dO{MNe(}%@Ou|m9vsmA5GF%6!35L3dxWPDI%}I%FKu`=1tn1@ z^prnDZjyG{Oww175dc;#$dQ=~gKO^=vYSA6-Rqq1Icj>6v0=w1N`a7DWNiOKHOT4Q zz3|Z>cX>RhfS_amXd|RcPs*C>hWcTZ!!Y_x`s2ihAi%2BdtzXOBZ|F#z@%AM&Xa5P zF~#Pqs#In6oK|{u4(xY?&c|aG!!1{&ffmTJEOdN|(>m{z{(-^Uj9~c>;-rb&1ktU%Qx{)U7 zDZ=LqxaWcx515b2S(~0zW@jA}lQ`5qS58 znUdE+kY+!f>9MPJTpJZH@Zjdpe9nEv+01cW!xE&6j}qUw0aAL~mI>Go1Ca9?Y_H9d z{l?4Nl1V~Rcro->$l7gha#)=k7QELCa4|W%umfTKAIAPMI?pfq7KX3bwrx9&*;tL) z*lKK>jqS#^)!0cJHcn&Pc<=tsIsb9S`+RtwkM|hYt-aS?m~*bR&B~EGq42veaHKu{ z7O_ml_$Ly+nVJ{iFt2&U-lA{Y`txsce~qt*OQK>J-tg_qA+fjd-;j%g#}a22eE;S| z$g}4K#~`a+932FvMMWBl`#+EnETlalxXlRAwRVK3q`x;Jb>K`hGbI;!dg3iao+R?XdVYYDZ12OY|h{Ya6ANn^|ceTC_;jt zAO_m(hB(sc-W&X^s0}j&D&Dc-prHQGW{{%NN*bQw1_*lR*7zh>kozG(rpEPUvID3> z%-xyO^eia3A7A}87Uq3-7LrQ+e74$(=SYNn!LE1$zyij;I^l})U6~*V$0Y3NfhyrP zHdt8bt>G<3S+xIC!~}>KVxfV`7(=WS%tA&u% z)%qmG=)!;eU-R5T(RvpV`^1{DuRsPP!bM7o8(`grAO`b)Ep2K@fFY0ynI^4g2V2Dj zA;SG$Wn3=oxU;71vjf0gj>AxV90adN)S^R^dVYIfRq8UZYyEskfx3JN`hA82o5m`l z|MO|K0+5gpbyw#{OzK4heSo}Kjo;I@rh7=33rRp;&-}x~YCL(5EN;LU!p&FT{F~H{ zi^2x*Kx+{ZR$##qCj|Nbb~teV91gVi@kIP#0*ODLQfFl(DXJFMe<>JfR<;28M=%pi z>s`;s^a@8jB>Bh9TW!~SKjMx9E(EKe%j!{0-VQGRZBk?HyCwB&I+|cVfIEkJ03JvX z2KvADxbuai|MRn9AvF;GeOsXvNr%&&&e*q(2mh|67YL%5Cs5KCkfyowIK_|Q z|9W_mO5*-*H9_#+PZ_WG3BvJkwqRvtEdOoBXP zlJR0M>$70&L59{SNfZS&M*Q#>hO}x{PpS({wVgT3c3VlLhK6h7SaqF4JsHWOs}#&) zlV)YOiRhV!b38xBQyBKR)}I_#Z{j=tkoX>7OH8C(jR=!COy~LX;K#;wGMsZ!tcOQ2U7(Y;Ygy&w3clnhb z4%^{roG{H>hJn#?Q}*Ji$MJ?Lf*w#g=RcZ`%`FdKD#rRo*h5>a_QemzuidqXd0_C! zOq3Me?29!VJY{iH6FdW=3fSnGxy_?!tB5}?O=1>6f(}rL0{L@4xls9mOOfX zdP;lDu8~*lM;N^lnO{ELU|Cems(JjVyx30R}>q zYC>|&zZx3h(9JYG2>T5R3+VHhsbQHri;#I(Dy+dcRnAx|E!Q>;>pNt~w1ZSGE=L?Qjnza@D5MJQ zQE`pbP-_4^{cLE`X}rQwOzpQG-tC;&AO=Trj6*#^x*Z-zEddC}r|Z2Lp%+^Sak2_( z5U#_B1?G|>H)Wh@;KEW;7a<+kR~^&m+L>0&4rIvhXISLUO=0^5;SQ#4tvw90u=sk} z6;RCUj{~-CMxO{4aFFKZP|<}o!N9aOaWzfA-;Nh5FEGPd5h4btAeZ;OJaJp|__&>3!9@?#fymxwG98Te6wWY{Lf2YmpubbCSA6AWLT%6DV zN6YhW)fChK6NG9tU9xcirO`@f;fe$bqXk!+80V@1-yP#fxBb^3#J3RLJfNi$!}P5o z(se<<@7xJPTcn^L=J%KDWhRZzk^n&o@@wtPm-sCS3m}nfa{tEgZsvx?ofRMm3RDsPxP(w~NogV$$pX}|J-9W4HpsA!O3qiN6Zbj7z1#?C4V7`z)z4X&mWGC~*MOPIvM5qBV=5h@ zQPH5n`*mzr-x)DJThDIb^hiZHJ@G9qtV)AZ5+{i8#%tg^yajUFG(h=QmLc&#mIoh9 zMhYF^soLiFGiawZ7{7p=vUMFTqId^=k^NBfZ$jNYL>%_*D=8J_GGU+^J#nnG3=K!^L_N4{_&mk%92!-C-(AVVAB8CGLj_c=U<%j@k zu)g|FfV6~g%pJLPdcVf#m?SU$jqmmQ%i&C}-wjQ5|4S}BdC9}pOmu^7l~McLmbGE- zm}Cl;um(yX(lC&3cJ`;4AxH59*4JHCN@%^k?@HF7J-?Lm(_E%{;mBX)L0VDh-_I>& z*%qqDewhQY16Ks8T!^}wq@S^AGeR`dXP(MHn3>eX(6C{~ssN{O6{XSIssP(Gz&q-o z2lvTnj&H15U}Yd@I1;RGc_3L7x!<7qWwau;!&VUjB7YXLDGl+%r!bs167$r3xrMcC z%w8&jM~g8~P3Wk$k#~S?QV%1LH1N}|4Xg`w;JjOcDJD3a8;d#_LqVo1+n0iLFcExn z`~l_9;O3YNYCRm23}zNxf!VO4I1cjMGQ)SK*xh34EkBRM;yj}&CNC-1P9-Aqqv|?x zw$(Jm*rW5Tt3znvttYgm4NXFSZb+T={kGJaE9T1!d6i`k2vYtgbT(a<9Wrth$5xap zON*pExqE^LK;CkqUG+U7_3)AISO0Advk2vKa0TPTlUA);p$%S;35h3@miS$_8q2@S zAp2*aj9B~+l1GO$G{AN6G32<2D*7MH?+97LFY(p1l&%BkN&*g)(Ne+cwSqPn0_X+z zU_7A&rWFK{HsFOaay7B}f@%e{<{Ry*j6CNEL|t-*F*`kr^}F zyKhL0g%My59}tyEH+cm|1TrS$h+X$QK!$3*iU4IauJsqGN!n@NVhZe-&J>>?G;3C) z`WT|mZW~%E2|@~@%Fc#&!p^z-j#dzfmIvE1pdfpylr{P+DnY-NS)SG$;Qa>HxP-rz zIX;M`Jj7MaS*1mXb}nG(%*nN#f6Y{bSlm<=hd#*~z65#0Myoi?3u#9tK5W(;-Utcq zvM0$J2PMm%2CWOh&@W1rkKYs-*daoS5r!ciQf_gyy@A&emCck;bm>s{Ehckx@pC~8 z6`gshsTZD`SN-$cX(>EZ%W=;zfSM_5xn?(wEH~O zQzUoXOhX9pFWyyFDwS#XpQ;;j>Do?<@Peu@_M03q(>x-EcF^ppH_qy;zOL4(BgsTo zbElP`j+u?-NlO(Pb=(jI$ztB;N9Km;h4lq_1#b;>9_9fy36lGlpe@hRZGEEn!igR! zn}``4@0lIw-Ui_mI;P&@}z;d=9oO;X`tiNN7 zCcrYjPY$|K^wkQHQ9E8|MFZ7oB8Lbr8yK6dxkzMk3?_10gc@mhAe0zddQ(%cjQiS` zcC?H`SlC`92rQJ+r71kA%F}YxxQ;8;BE&QCO0EP^${(vLx4Mj zAZI*BNH`uMA)Jq7PW2ZYNuEQ#QG23H2!sLm0*t>o+9G_Q83%yd@pn61=X+fg82BA` zb2?wJ%s?j)MHGL$yF_;>}zz;f3&xI=zBTt z5@^p~w&L;<5IH~HRaCmEZ<;a`2$0bw*c4~MF!%0ST_)sfbbD*c)8z&}9CajS-axP- zu~yS^1M`?0_>UuR9Z|z?!|V--k^Os{=g|Z-iwd}a4wT^lIz*@gjh0j;imVT?MF8R_W)| zG5M0mr){eMe*e@n2<1s&7puytj`K+sezsUFwi2l0-W+#>{)cSla5G4U>GefnJFxoo zRTuOh+rH9*b9{E6C1cAAG{p@QU_$I?0`Of8{yegw{cP-ig7oqb!J50n{6uDW1-@%e zc}ivZ4U#g0+ggo>I+>QPGC$FHCPI-Nmup4&07R0MG_!vC)GZ5e=nDpl?>Q8z3yxC{P z_n{F|(M)?rA5JSCJnXg&yr(+F&AmKs>dMPcxiPMmd}ZHkQX$XLzoO2moc zL6epAt-IhEzwCB+kP~QeMHFZ+{kZztdvob5MY8UR$W}|}F`1qoJHs`B)+=c-~i6t6B048L5vfzRUsWeqxrKyAuK3AXB(Q>(v8jZJ&>n4tgjx7|Sg9^0qW zTZ%E?R#0Kz@&Yj=4Q|Vy_`XOKhyg)zf|p{7n~IO3U~A*PJpWpng6&+{dFUKHQ^4oS zVAPs97B*%&4fM@MKaG9WpQ`FbV*P8ehFw?FU^_w@@y`s!SWtW?v3>@O=F>=052DDEd9LkX}Yt6$eP>PN%7 zKL5E26hvx3$GG)KL52*0dsV$h_1Sh^?g$fp9u zTG{r&hA$K9PUU+Mx8Q;FQijbPl1bJL_nn@a%e%j&+f6%h|JCVQ4Nnj_ixba3`H&E61utv_@2{Fz{Lv_mdSG%eBf-FVMkP0y%0rGJ- zNlD`;1Sx;*_j=Llt|*)VrIN3mZ^uU@FsnW9Pg;K`88#>Vwr&s&=41j&H`*Q*Ubfwp zl6ztEFO7xNk-S6+obkVEF;TL4^Po*#n@4>Ohrx^X-z4yvuC^y1ylq9+P$sMF&T!o3 zwDAnxh>19|$4*}brXp0;qY=2M8G4Lg&EP*xc;yg)k!g+9&z{luQrhT@yefD+1>&F9 zEt!1wm7O+g6E)o$Qz5J#jbQW+j})_Nq@u;NnD;Z&{&Kbi{b4`{!778;S5m#&2_D#8 zQ_YFI(d3&PFN99tyOdsfa@@B^4&MqHWFBPtLZ@^9l3( zjKrwr`EYd9(wLo%eOY*r>1A*fHK_tyOj02Z`JUp*^us_(VM@@50wTY1X`#J4;~SPP zKaFZ+w~H(t&EKK{isNJh@QN5qKQQ_I%fsDUQy<)~U7scMie(j*;tG3$2STre)gTG|_9JV6 z9LPVIu4Ls_F7RFt>^b>i02He>z~o5hjFnV-cXr&{I}9&mW>yDR^()08tKN`sekoK&`L<1_ zj@L|KthT#5I?7rJe#9G75&9BKG_!lC?EgV}^1UqUSDhGBnbR<_tP4Lr?~XUczaYql z&xkvzrr7nPvi31gNskoduY`VI8B92AybU>zoNwL_>+8Nntn^+)Qb}{fwJuH75z3~; z7Nsd$B)F)+R(%KCq6BpMn{Ae`)i=N+zY~dRbaUn0yziwHK=0i`oW*`H3%_q!T=@H6 z2fTqWQxk!oz8na&>P&OXro^>3mDqOJwc(6L&aXe4o_07kx{{sf17o#s^X)MmZ*EsE zscPXN9F<;339RK?lgzsDR86lg4KmFSj8rE`k!r$Q31}uB)$p@qHk;mPnQxw&6;=m$ zi`YI%UVma&mvp1#4d$08YxNFex zH{X5_fay~w+3qvd1tdyu{*t_j+;$rduY2Xna>s*3D2aYVg;j$Arx{7|zqd6?d~5OT zeV;qg|LWO~gbw6I&wXp=lSyj8h3NAEqB_7i|5hVc2Y++PcQ-<6H*egqZ*^m(__R^4 zE~laTcXNhe>1sV^s1uSi~#P7y<5>bsG)U;XurCmS=9nL zTyjOjrgatCsX64yPY_$U*|~_y!}wBC{`7MWlPhanA=v|9nq)N7+-HSCjb9@c!kd6|0P1-&owehE+A6uI8TB#++}ykn;=V67g|_kNO&<oH%Or zG{HyB%ZVC-WIrSWy{jbq)UVe<3G0>!mp8@p0|IA9M7=C1ucZFx^-AQz!xs0;Ie&ZK zOm2RVYy1Ohw_$O01v}!#_p)Lr9x1)$q&{X19hThihZ0fxSXcgVO>NJOB@~_U1|tcr zNkXhnF%gLm7~v3<{TBJdJF+zM#ki*ybxdlMOV{0XP9SX_3NEX~Ek=`$L<$ zxup2-p`$;}9Ev$&-@g7J>tJ|C*|IToejYD^B7WJ;x9vd}90IMhvFydMa!5A;T2&|S zeE+)E98}BmOvRxw9^82;V<*+%1A36JAe^)9+!o#6|anwsynwICAp_BU>eelGCV)2Ap3 z7HBZBOe|e%a@AycLZ=KH$gwQX(&d8*-xgDD|9gBuSb_&3LjB}o{Qb_>5I_&qXR6W9 z8HkkdV7a4~$2$ftR)|T>%4j-h1jb&nracAdpnmULG9`f#cc0orgp(1sHPjuVZ7gdX1a0{Ty7Rq1W? zs9K2Nl|ulo)ODq65AGX7=~(uf|8==PU9;9B+x2O059c5KPtl;~K&n$#$Qa+DYg_=| z2m5D9oZn=9Wfp{Op~wbjX5^3XwI~Z#l^J%m$%-Q>3aXtZ zLrqH9xsxmX=1;l>`>CPlZT!CCWckss5MsC!G-84X{;A%+ue znwyjMOjnU-iRrqs3O7&#Wl+}@w`(FAk%C3`>SsY~oHBu>2?bsm)HiGnXh4yZNr29Q z76l{-Og4P&^7M8PbCq!oVSC*ZU-WJvIV+W{kn;8(5dX%lF`|dd1{8HOBWg#28Pf4I zssqP;1~*`|tiYet03SpD_{zq-$g{IEqNwQ!~K0YM3ZQ*iGy%naAjbgJx!L0rZ4cQ?0HiY7iVrxpF}%w z%SW|0%mvMUWgy$oP6e7fyDS-3@BM-yl_7q%zpqbpX1f=N2a$gUkslxWc#Ef7Gcml% z$bZvhX5+CE7sQoyZnd%@7JUCjBQTmxJu!ZP&5maUg>lPjO_+UBlY9V4i^U)tBt(D# zqky<{$n^#f`?&8hdFVwe|Uuo^ul_mgiBHPsf1rNC_BqVZ|(Si2*=_kqJt6Ae8>jGy0d3sV6wq=GcSgc%DvKlBHMDM3^Xi- zu;9{quk9cR4bK?xpW5FV<)ndcaVI)Eb5Wr$#85Bnng{3uh0YEqoij_-Vvq+nBV!(ZHMa9 zF6?-T&bJ0hb+-5K4SW;V59yK*cO^)eHrUSEs1b;kG#U<8K}EHYXzh|Ad)d7!S6nr6 zDil#))5a2;SsgN2KdiLQ;Ex0>ZzUucS_p7%ehG^aqA2v>&P<{#9y{xe=CtJEDS1){ zQ-^}2b$mk>IkfdSKa|0-VUc{Nhc6&GL+h2z(QgOSnI7l!5EM!gv(O>+zyP#B-4HNb z;f^zxC8cjMM9*U@n*N*^ev`04hCqyEgmYjYlDJ_pqR5aaGrBWE{(M-Ow6oY&{n7a>$UVaDRc%C#9Y!gBZ|m1a3aHMz;a}ATnX-z+4xD0D3$MR75cA_riJ46g5Q`emDrG zwpk7hZMdZGpPm=H4Zs0P0psw|mEd3$;3qj?ye@~cr>9l*pGywv-h@9~o)Mlf{IXFN z36j=Xq4Qs%9vbvK@_e{cJD=^^^fKb5Rlrx6jx5-Je;{D_c~S-ec6IMe_`3Ujajx>$P5_sqqF`~^DAcX&Fs?*0$G2;uFl-|kfWYH;S$cJ?Ht ze-RGrq{`fa9p66gjC_8#B&ExDPLc)t*_q~@Cf>f#sTh~-uNps$=5fi48ArtWv z6SfU)u{Hi3X)K3KZ{h}YWo}nLM(P43!~1wxHMWI07+ZPSCXUe_%Xbk81jt3qz^tD@ z)o`0(wV8Z;oN@$<)wyGJ3i>rDZp8+;xLqsd@!Hbg@q8RDUA$MYd}BxR+qcW^ef;{6 zMXg(nJgx@9;Ly?)>yWL~T%>mr+KN%j*1FXoAifLu78YGiy!c&9^}O_;$L88TPnD1G zDds8p>S*6^^;TpMqfZiMxi2tgqIa8(+1G>USN31B66=Y=JOBiM4s8F&4a!B95cPUM zr@kLFc0WB)P>+D7bUyiCzD4fiP;7d3jO@Nos0ei8Ly(pxf?7*_zsEX1fOtWgYcu)3 zG@j^^sg2s&ilKI_Pf6O(q8wMUeMX|reK!?@zN}9Wa8XFXxOKdRbbLxOey@&_T$TFM zlw29|;!sYQpOR#+AZ6)`QzI&8;q$aR%9pfWi6S(;8RvH>6;Yj8B!LQ z8+Qi7MGTS9Kx%3xu1xe4EZAgH*1N08rIvGs$X#J2kBuQXA*1(?>6U}jmwnZl$_2rU zV^VSu8y%?oFZ-6`Vg+U|f1eJ?mEYv;?Vr2)dn~D5EC{kaM(}88JL~Q3ix|BswLnQ$ za0h@phvocCXJdm;7ge)mV!bI`yH##0@D!5EbtzOrM=@bP*W&W3$8n-d20_lORZgN{$76|$z#F3V+cOS^h{xWxyHlE znD${7hRfQ(nxgg^jXCJYk}dni2?w>^pax^JiQ}llK9=8`=rk zUlORWRf6C_U~MTdnuX`Byx{Q{{I65gGkLFvc!V<~d>V1Xu2cS|+SLXXT`p)8|MJfr zShaJ5ihoJ@>!SFDP=}OP-P?ddJTdW~J8zQr=dVX;QA)dx{e*Sl=ygI322(oIpJP$J|-p7^&M!G0C+|u z(^TltSKYNqIbp0TEk-w)u$8zrY8}uO#{Ki|VOs;WAQX8VI%uCXM*N}l(_Hag{s+bKR{6IyiXRA8_M%2Db(KTvVP2CC7f4Df`@9YLx~+O zv71}|t1Pc-B3P9Tvc)yqEDX1M;x3h8$?w}TkT)!1CdfF8F{-n%vc=}_!fep8u!Boj z`4J*e11#QXHc6!Sqf=q^0Rd^G)$I0JpcW;>q&**7ki-Ai9#C)~gF*vMBg~I6DJeKU zR6h_d^{-C=3t2GD>r34xM?%2Tkt64PKhXNSBLH!6X>}HwGA)H*PL`YavW*ZKhN|9E zjS3zezG1~4KvhjH$p#yhC56vyQhy$!t^@nhG7E{=6(|wrlgtK(ZI=XQ{bSgC)cn;h zu7sKpY4_7sP*_J(6=YcduPsZbt^5g%xe|CD`Rr=E|1oOtz-`qcS6v;9B-K6Tz9*8A zathPO5wTL_HTxbd!zn%*GOho3J~gp?eB6KwI|5sfR_nawaKJn4;{_vO^DgG&cuQ+a zT)$fPGO7ByKaD) zIM=u1W9){8>VzuvJ`;Oq=$|TdK^ZPR96-J4v@&GPho6&$%93=b}hT-(|CreuUu`m;D09o2|o%0OoTOyWf(2!8d62XEH@-hy3?#STrX zN4kS6br2){g%Ul5k`9}uL(xGw2E7SHOR05M9oMEZ_dtT%1cB;+aU_!eyafO@4Y>Fu zZNSzYoDlnD{%oKoN<#ft#==6@go}XOuCQY$kMM%O=E+rB9F-f)uz|OG!{4c^Uhl0@ zoU{SnVS{=f?zz|gTE_PN+P#er4g)fF7<_Q+JxgMe^Zw^5zQVD!OEw-~p}$|3(-3ho z`gah&H=~*jOR)1t!;L`qnpf>&K`n-YN`*#9Hf2 zD)71vwu>lIjvnwIftO&09*hqr5UhX)PT$qv5rs`CK&>HxD5;-B;C<%f{;!Dsc~M$? zUT@2R8Xer_sV+{B?yBHrkF3$0F-9lKj7E0Lne)%6;ekced^_mBV7TYp_Ei=?ml1*9 zWg+j$=lc;WE`@x!4KRdiaKl{IIN~pivcJ!LX!>B$j9j-NC+(^5iiyDIuosIB3Im1=(F)aL{pJ<+7Ie@sDMbhD@DZkNEK)GirE;S_TcBzkg7> zeiaQ$G5T|J^o#gkOM_@i?jICi)lFFaBjeb5&EA{-?!hp@WHI&AFm@eJ64n{7G!&Y8 z)lp@vmtwvi)4^pGxX4AC&MUoS)vE)t^9RNk$VqQ*Rs1DPgL|gSMy2{g=zf!l+%kCD zV}phiR_7z8UYOP3b$kh*6(xHKZ)y$42-{vk!6nw{~k{5k9frz^`umZRMMfJQ=@6@aYzKF=tK7(*^=={4h|Fl(9rr!KXSYtN|JdXV@&))lAPj!?Qrc4rFbn!% z0e_T(A((=L21XJC!IYy%rF;h)RqFVb;Yr)p9!Fuqt+FB;oZVI!4A7)eqwDtn$q^IG z75Tw($T1!aO|f0+h?EBaf8A zuXln?Hp{XQudmypedh0)^s>8Oxgfc@AsoF%E+!y^NAtW-lSbpOG6dZY9vwbB7V0p9 z{`H)ukkxrWlcr5%#C=HqJJF5|6al$LW;x$Snf`OFslg)6Y(VWp&dY;)&vo+!5#P7# zq`mo(bg8jlo3fv6;mje;igFxmp-G*cKE_Jli|38EM@Abzo_|?BeC`Y_6ao))jqcmQ z3(#E|MsvjhIcs{-I{O#lg0_F|BkmtcVn`%Tr`C%HYikR=Wll;zjtP1Q`@i=L$zmS; zkL>$jpL`V?$oXiQ1cW{|OM>*XHqo`;|MfdE#(;Jjd-${7|D_tvmqi14Bhn;7@2h@? z)6S2XxA+eed$%H68;xQfpQ3Uq+<;g&DM??D!Wkw|-3Un5^Rl+47qsZ8JWH%gKRH2G zEUS##D^JJF(s@NUF%wJtCAY$AVK2rfju#WkEVH^Z=)^}YquPFAnXg>#JoG8;+U8uI zmAB4AIhEWC%_>c`R-V>PIR6k*&&S1<-gWBh~d<+ zDOMDDYvZTtY&JCM@vt;&Q&i6`Pvr`#?oD-c?r|qc;#gOVu|I!^|G0UNWm6=sNzjEVV)B2 zRK2WCXa4CaUS1UEw^@bWzYY_d7?*|d?az?R$mHOM3wgFL@yW;*ld!k6P*@e&en6ku zO|LB}VQX=!F^k;0-kqS&Sx?&;F;3uV)sm8ge-3|~8bz94Jk=YoW=?IY=!I7@EQYbd zlgt!SSpp;5udFS9*!)pyg6G<0pPIGSt*6-=ieBbBA(mFjyz%3vYJR!)H-NBSBIDkA zYVMRHRvUiwYl2JV-7A#w?pZb$qr0Brh|K>1^&?9sayqoewtS(@^QbZqY}s{*WZ%Ms zR|LEdV{1QQTnP5<+Wxpp)p{DzOVK<>y1 zZ#2bXp%$4csdDi@_Di|M%jf|*V+Axntl#os$nf;aykxTYxATzmj`LB5OUEdFG8$LX zq8;`w<&Wfy`^?N72rE7=?zut|mv2CryDrHD$3e9NVd4#H#21+eY!9@(DLre4wNDam zKXhn|X>#sPWjj!s`MHa1N@XTh=_IX7RUZBXqT@i0N|vYpl*nn`asJ}{Hce(wwsChE zqQ_Tk{>*Y&vemU{LYJ(c%TWOa_e0A|kzp#I6-=&KmCFdvwOWf$FDJ_c|Asuq@B|-U zP7~G!>-d^K+DkmiN9dr^f$>_0bxp74D_nXTNtJm=jUInP#Oia&p_F}D{YG?<%F_;v zd`agQJq80vp$R!7SEder#&40RzlOC`O<758eZXT;5@o)1eL=*~ryGD`*!x2@iegOI*QvAJa( zp5w1lsf{f&tMD#`KS+D|S4t)#YPehp!@^hJRlIR=>BC#QK7BfIl&v$>oJVQa5aS(l}^=z0^>2K@<%hwDqXu+=>a z?+|k)xMF*BCk};UMVzF6NmbX~r3xs-{y%{s9YfVGbC!ftWEcof;#byl)?9bWT2qS; zo#>#*H@mplVloo<{{GIOS(CiEnuF3R_)%8*Hdo55)TD>!|9W$^|GEq`Ps zvkM>ZjMNf)b_jSI{3kwdICq@4`@K<8?x(9iXF6(CuO&{`Tvi5Sl|ANTaJ?KGiSzMm zQf>YsS|k7#?o$TRV@!Rve@^AAcYZ{t3|n! z)u3<7GKYoG*_RA-g}+ZcH7DO0Si$Ov*pR@q)?)3j=BkNLwo0aGT}<@HR* zH~oZt?84Qf%ytWgzG^?1ubW1UtfM+cn+j!SqpUQ?oUblS$Vv}KIGqj_{o`^ zVQcUkBo$^w)29Vxu*fK9R?abi4Kg*~@ilCKIf1K~Ki`hGLYoL=-D?}jZrq+HBN*}G zSnGI*9j}&R!p`NQd4V^>SQW@F9HYA9;nS;sRIkmSLm^=(sTD0IEVMqTq!r4i2tY(+;mr~x|5>l^fl|;x{wZG3;yXOs zMAi`B-Y}{<(llK_9NNUe{p*sl%&zfgHK$Nb?3qN!KIJb7?`i9fXnS9LyI&JtQ6|+~ zTvOeqj7pFFmBkADO4ap67r#CG9RJRW(dV{p=H)P5UuNWH5fmdJr!9|I z!YQcX&Aa=<=(Z@f=FP zZ}GanZP1kAB^zApM9H&Zr0u7oK4ZHot5fr^TQ!2L&9oWA%N1UcV54G`BIfJZ(sEkv zuh}=&;>Ko$1V!pPch&OwWu!=f@S@j?ONs4K0qy&lpM{Z@o!F#H#I(_Ljpv21@Ndr< zoqCt>00UZE=O3i4!LP{F%kk8$(Ct-B2`%>+BW|Vpc==F^W%RCBBQ1FF) z#=e-vtadAZKo_P`%9qbTM- zGq}y_k>tmn{hzOJiXtzlO!5(^Zw82M+7HG-WW;}d=9R;1-}$RUKmf@?QwCkhd>`8O z=LQeq?t*s)>lnfD9!E1}PFwrHTlh_1&L(@^r%RXo_Wo?6QdTCdkWBeEV`wy`a(%;n zNsYIZ*yU<_5JoZU;l})VtS}%(g}7XWFe#0rPBqHR#;mVAAO^P@6MM>7OGQ9kM)I1v z;yPp!OlF(QU^c*bg=>N(&-k-uP*Dk3(S%C1u-J4y3aKGIzKwp_jDp}QD_P}v%CIZAdv9C7P9p8TUym1WwvdV$J;8DjVLk#ZX&6e_GS2pPs@ffb)cB>x~- z2S=64A^06~0?F)5^28MJ4hgv=wfTT1v7uIxtzq&yW9Wc+1tsb3b%SBZdE>+&B(XNS zSbw(VtmgFEe5<$T{gxIDLR>*(OIZzzllq-wY|!|JE!ZpEU!EonVkQKx*+mER#AEaK z*Gyo$xUFj|U7rQ9Ru&iKi?PjEi~!bx&ob5o?$2JIQu?7gs1_MGQn~UV5ho05Wga!Eke-3=AEjkJRwJ6r@%fn#isib^L5kQ2m#5)m0*okhu{yK zg*qZ&!73yLrQ`k_PK^l7$~ha=M@N#(-P+Q;L#k}O?E+@fdxty1EWGVdMJ0uRffOxw zKvXi8V}>Gt6Q_HerCB(ayzu&A&!gF4{adSoPj<^`&=!?rk+D8k`(1skR z`s^um=Nu>I8;&Z095~pvsv0)1;?FZqCMVMy1@vp|bIJvh*&9vgq4uIke^v6S@a(hI z=scmL9P)HX>^?W=CfH+UWZ_=7Uf9~%mBgVU0=lVwF}50zP+`12z~rC(pRI}Ir81)f zB2^>kjN&w(ctqa7SpxhM=hktvv*3ej@9fJja-|>ax8tdDD}PO^+MG(}1k+b{f#FB9 z33Slbw>;tYM!5Aa>ojMi-?nC=YD6dcqmq{WiVwps<%St{E%Ap}91ci|QMQd=MB=F!eVs~ayb8|tH zf@aobkv}4R1uFF?ES&4dlyJFpVv5Pes}fD6d339KwCW4K7|43cf0L9~Td+<@EAm=7 zKYR*Bq^&fUc={o)ac$XqI?KJ&^l1Q3JuY+l+-ZQ^w4i^asn&YJCYTM_0&_e26Pi-> ztnhwb66e#=cr9urA8g)B<0WtoG%j+G$!|;T`K)PzW(NIb)7&w@y^Rz&Z(u;BfDpg} z4V5xVY|NKojhc~I#;^x5AHF`x_jatW}TB8ht9%4C0ctH+P3~evaPzzdvjA*3W77R(SMKP{y zxsoJl^TrZx1s)C(h-wLaUd0HoSz2Ta=l}vQHQGn`9lR1RT{fWu{Dxc3vWY4AY?T2> zCP;2P=-(kl=KA!izXE!@v4RbHqJt{pMFqK8YfzB470dGbTrn3FoLS7%X!C>UA(TrB zw2!FWQ_sj2E21V$ylO%u>C)@X4Y6ySe4CVrXNKE>z%z&dxl^N?{d7SnXHD;(=}BA- zg{%}~H}}a9Tw>NWQb&Z?_l-a;TL9G=2U#5a-x;0OD$m|OEL@bQc9Rabflu^Z)*5h} z;Djve*d-Xq8+Af;)Lu0Mmzm@AHe%mWVRrLnldin~4XU+gnfka%38{tw#2*uRV2k;d zLOC#@uBKX>`m1Zu6ZLa6WCmoF)g@D#(e`DX885(W?74tLZYW z3-xe|YUaxJTQhcl9ty~EV<9z{WtFfO*Bmyj4v+tTrN*?_LFbjs-H=LbF& zq~ySiWJdr^FBOAqk{_EzK6U%eV1z%_6gbH=f=uc+cBYXr_-SVLyNC}0)paF%5I`L; zT>AC>!v~QO>~tShn@M)`FZ^Jmr=%D?3&$&lX<1tn*Kf7p>n~a{;VD@^ygUp`&=&GF zf9NfMW5$44UdqgN1cB|*m?fiT7@1nvd#dAbG+nEt<(TVd5J~~ehqAC7owjD~LMsre zXg780_MUeCn^@cCk?Nk|`ZybUog^mw*CBR7Y)$-DY1nH)4p#en+p?@EJbe+$v~F}L zOjr}tBgWnKKRsf$#OjejkouOnXV3tf4nAyuqfNDQhn`|-TC>dwgfoS_``0kOSBa z=gme0)v{&lGIH)TmIaWF31db1!`_VC9HH92gG^2E0Rnh2MO+4GljU~h4kq?crYRgs zCe<~c?=UA5$}2@Jpnb~NXA3%28!=oHf1`7n_0*cHC*+83bSCAnn9^rv#U=>%ue5AU1JhpFJ6Bz<-5Oc5;^w z!TnZZZKBC>*EsgYg(cbven_LF2~CIq+a zAGvV-%d3mAEheIU3b?PtB}I0z961oa`a^w_Rq>~ZRT8fG{A?0!_R5;;8GnsISi==1 z_a?^kjE%%PwJ-y0-bd_grHAhtgYeudrh4M22x$L z=bjsrzOC^7D;IDh{niRYhmGtN6I$1^AF>ySi8z$Juq!0V)Wx_|ep5QWhn3Mvkwmm! z_-h?y2~0%}yhGVD*AFQikr;$)P?|Jh4h6E$^moBqX(<>&hmQUN8>%T@2aAd!;)li77n z*(=<+<0+Tf_>zU>=|c-1THQqpEmVW!-uJTt%to^Fkqlm+wb!LFQQa6n>^-L+vhjR<94|g*fnH?}spJ@Mz0>mJo zZdF=5frlL2*D%_`W%WLh>J2vGR~!erf7j`MZ*hS7*SZJax1yjAid#y0v=f6)F;#@w zs-?#Z+4t@GBOh`KGN1i+neZ(@#8I}Eha2u&5p=m|kEe`0NNd;@=Gjy|u62&sqc^6^ z3RT2tMxTPH!i?Ti3dPKhcpEYE5ZLu^CWH;<45d#94!QGLOD>zQwf$QCBcmJ^Su$%% zAA?OYvY#gD!2AV7`&rtE;0_!g$ZyV%(si+Hh|La{LnAt1-JN(>$JNxo&%xS=nv8h_ZYr5!zG(VtS{&Ci(j z*-`>y8GLpd>nW-@z(6j)Ina(ChWjL9V;j%n|6->!n_H9lNsKj?FT7rj5TxSa>8$+` zx}~*dK?e;+@|Y-rOs=1lO>|ubKiW)XNp!ao(t*6Ee|=rX345C&0lgbbj+NW6{Cd-; z^4CY8vuq8O6KI^!lU?|w7}Iw}l>QaIaYg$yZJ7R}UE)$G`je5v#(462SA3!nf=a(l z;qLmFx``PkVG+7#{Ljf&rlOJtqR%W z=b6Gmj#Ylj#6GFKgB`zSjq}JffI5KNruZE6Lpq*5I(2@OYu`!p&F(9OPkxw8TQOcI z<*Ck`RL7;=rDt=Bhk!w)-pMsZrmAOCP{w+bCF+J%rAooC=JcE6oz5>dx=Y_-UO(aL z?ESTTl@RRXjTtcH|Ex{tJk_GS_|_qMMFEY{G5AJ1*tf@rwF?LG@EQz9yy=~EQmj%4 z8{R6ZEpxFb4dr?^5v$L3OCC;bMP6p>ew_3y*_|qRbi8}<#C&`I$CYqsi8*zOE>r9- zg_i%WarH59P?gpVLJ6T#xV&@5QdVa?6r(BZxO|m_sNsTgdAZBf>k`F0#K=aA$Eg-+ySbEiFyO#ZweI#Y^imgSBn_ zuw*ly(aS;fQA4J#JUnoh>M%N0Rht7+UrrAaKxuZ|NZ|&?nX_~)GS8TrJD?C4*c0Zh zSitI)A>d{Ga&d~eOCNAQlR&z0zo(szIC=ac&PWfF>wnniY1fXpuFY7&1&3+D)Q&*QK1C)}^;G*j zVOfOvT6$osxN6(1-D9)QczU+z(=k!l z=sS=kAyL!mRZz12Z}XXgi=DM?Y`qPiL*!M;1X#2OSSBb9a$!{ z(1w>(99^_UiiH+Gtq-ctn5ePkcHxyet6W_FjNvOJ~3t7zD3~lG8ZBu)Gp(Brwp&G zaD19`S21Yvf=y~3F!p3KG=`~%!KWXrtm8$R@y=wR-cowxswcbl5x0=QMRe*D!QRCwn|F_I2x0#gK)VU#g*n-S9|lzfyY??Nd6fL*jobhh+*{1Iz$xSi^>#jAL_m zs+jDkzWVaZp*p#4sA^(?ZB8>&MBB`nW0Rzewx6s$BvrD6N`r$e_d;!0rCz|i(m)F{ z-A0C~|GlRD?y2j&HG&5BED_xzC*-@Hio1#!*L5w5zCJwU5x`Y=r|6ZUZv++lGI&1j zDYv}bzxrMN^lZ<4{_^VaH(w;u@N_h{mzkEPr-^#sY3+>w=UH8@^oQ_9)*BYZ7s5a1 z42gBnMn)ubXEvxvC?C--EvQFc<~TO0ac&a?AH`W!}g5Krl1+~ zGBQWr#k*m#a1@8LdgRBVrpr7$+9i?qJeIWNv}OaA1xIhij$;MwNcDsM%q%m}#6Cn= z6`Hu$;)$1Q{gJ0|Zh#stAwb@H>rL1m^cp2PCWzTUrDcHFM0`~Rm|(=kb3@uLXMqmI zCU|(rgTVOnx~6=@?_2y`sHr=4h1&G&sgkDF)`I%MpgX%O+Gz%ZQBQrQ^I-tj{IBL( zewWH`ckV29M9p5q)9#Mv=i0s1l&}T2I#SMQRBccky-e9PGJ_?yyY-dyF=R+EPRXlH z_Vp4IbJr^O#~ZKJ*`H7BY|*6IIl`i8!ui@t7rkm$z2(cB(r(X;#yGoEtT%KuL#E~x z!0?WdyUWyj-oqcWo3tx$CnsL$mS}M+G00gd08r02SyL|aM&SVSUmGXZn_B3zJ!hP| zP|3z>B^x0Zennd6VfF$`seVODO0es)pp6k*(uY_W_>wR#&1FdtUyS@D+G=4|nc56^ z)>cA>ph74ksFaA(JU#?|&FfewvTy=M%gsi|@OPxJo6wb2w?76<`yzbxo;zfea3ZbL zpi0tV3~HgnY6(KBgu3S+9Hc3yRrCfH#^@9ye~WfuxsNn! zSo~A1X+`w3K{ZG^vI&O&Q4Ri=2{?NAKf#4@nMlk2dGqUwm28)b6A&Kg=;-PVE}?p` zJKe0A;#)D!g-Ej9-S>xpCuRw#29_0NHnpG*UtB*5yr2pf6PSONWB>=1-v8x~52XKT zNERO_pC5&c?|VfSYv&If(++K1pN=^u~l1D zRjAESaL;P!k9C#u?0wW5#q@`zEF(2K8ph6ef-01C17puxjiSU<8lS}tuD-YG30BE- z>WQJAu9*>>blj~S!=(fJt+VyJlW-xRZ;<{iuirwhoq`(JzMUOAiv)<$-lD97N1W5u zk*6g8nLB^wp8`ls5LD8^H|USs2vvQ^{+kZjY3B4lxAanQ&-CQ4CK!9tkL;%Q7Foz? zv}^_+<$E2kbJE>}&Ud@u?X@*wJB#ZE1HTEVIzpO0?Wr{}DI)qyT*s7lJ!JZbRgEc< zo3ryd%y}~L9lV`OA~Gj%H)3G!77)=^!Dply^7HD?w_#;ke=|4ApoYcHLaS6%pflHj zM@@h@5KN^&9s;la71b^bI=}@KU1+R99p-?Z><)p~V|t@*O0Tby|AaOFWO589l#~BH zL;Hv3%1@1#a$jD}esG8~5E)|Ah%nVZ*w5;z<1gm^y4sRdBaHaY?SW3`fYuVIA$B-4 zpE+ROvN30_!o6VT(y!`evq?c*PWInJd!Td!l71WLG07rPKY8Pd;MR($Io(`nl_zC=^ki<4MS7q@u$r zb_!vP3@nD@Ue55JX5lG#s#>r_#HNESwD7x?i^$UqF;FWo=H7RI7)5J;_mmUqqt(b! zYM=rZfdv!xH725*IV)I~i2Kh;i>n?M>wjul4p;Yq;3p35P;uszddoQ&+U1J-tpoq` zR>L$yMt)}`k0-BguUoI_S$Hd%Yv7eGmnbOqd$O|~c3&ep-Rk04UK%NGlJn2C&)u~! zG!v?;$AW2{`pW1@_RFmGNu&1u)#~)PFsp5{VUTEQXn0q zi{m0@V8SGTf+@^#^-WNt?JeBwv7F^T2TqBS3(mgddx^JS{^grv>2%z1+i)8&nd%?V z{d}~SA?p8unWtC$>PG7bZ7NIDmkb`Qn8%466$MIh$5iZ9)0upOHBck&XznbCD3tV%bkIFJc(w1AS4z!uqCUe9BZ-n#41#r>Qhhct{ zl&txGL~R~Y;WB>V@NeV)wJ3Xo6662fiLJythJZL>WvB%pM1b&8VUPZ_#uPEmUM=HG zT)x~>%o_t&3IBQOs`sC{Z`iXPy{PvpR2vdi9FVs)w=TI!kscSaRB4FhS5eOF#|tKQlZQmTD_VD~ zcK~IEmbHx$weANF^x6bSRpMv=x`2|$0-jL9X_0*7s0+wFCGVgVd8^qT%G`d~K)mo#83+~>2dEfc>$q#CJ_8#X>R;7TZjFEar@WT*w zoyN)5L|dwvL?DM~4~-)ocw>*4@H>J4h{Ia*JjwuM04gkpX_65092re%!G~=fIcu#+ zs2|Ps<=f3cB?<7>!Op+%`)tgOiB!iP9`h>&ez)}=4Giswpo54C>XCC|p;qnB_7*#o zE|Yp@E7N|UMN<+wr2{R1ob6-BQuj0jn&V+0UCC89WZ6jR#~|U`83bM!54@CH8(Mpk z%)6*L;8*!TaA*RQ=cevgHZ%rzs-#waK|8GeLWDeS*kZARJP^Q56 z8ys!iNd??pX>Oi!Vsv-r&CHgtlqg1!DiPO2LFt+X>vHbk+RIP*RF+WMkovfq0#~)5 zdb=qZ+S6a$UxNq9WIk3V$I#U;&ry6qu?K2R=7UNL)ryIT0Ck&6tb_dR!VFt9amTRD zvJndNthwX2qdNJkiNIC*&DA{e3~A(l4+ylnnuawStnYUgHjM0apQOk7j`rBE z!txZ3p5CFT4h_b>5^w--nl*=&@wF{Dm}zjN(G*DvV-?HkLzLtie?8MmEf&b~JIgoH zEAhDV9eo#&v`K==Ac%yP>YCfP-uoMk@~Q}hSH&z+AUQQ zmj49en4OOM7;>QYEIE)Eq<4?YB{2k)3gq+%SmWF96GpUFc#=mA66Y)5SF>as|IIS- z*rDV)47;!55iA96$jU8RLwSH2)KSDgv>5I-ey~a~<2Qp#B7gL43q-!n7InqW*#<{_ zw}b@RX0C7N-c6}a|2q#yzJ+A%J|Bl02ln4?Z_91BK>NtBJJb6KKbN@?;Ldk?jIs0w3(PlCf?aTZZD@>RLoTz5CCC_~r4vX^{pPFt11}X6b-8>^_fOh9?R@-JvkS!BE>uCZCh&c@)r1mIytY7`~H zW?5ZBfvIXYRc6<}xD{uVKPXeFN*$6f#cTti?|L7u2a&})=|Ca`ue`h#= z(@ynII^x?{v*&U<^CgYEOwZ>|I!ue$dVvdJq;r+P1na|(_HHsFsEk*f;d7EHF<#4F|U zl=Y8|!13S!*{)TWKH8gP6>NLx*KP%a#*PNufQlyrE)&#|tRN6=O61(9sbt|PQB5B+ z;3ZJ>e)2W5dq;fE+n;&ViV9NQXWv=W&&HB~TakeB3%-~26BXal?FvhM9r!0+5j;yU zkF)8-P={tPWEC6ER|5_+96Pl#_cI^P=fcM9w=G{&jT(CnV&z6444cv5u+$DrSOJFN>CqwUo~ z)3Ii(rI^_xS}rtrj%3U@yNq1IAeGeJhe8XE>a~Nf4)levIrQRu@R8XVlQk2aX-qik zE}r-$nwL;XyK3?W?IgE5Y+7=0SA; zi)aO-XJYm!Md9~@Draf+4R(s%q<-sKH(VT?1Kz)+Vk=%bL6BfnRmCrw71%XVA?gUw z_$4*&!CP&C=~W!~INExNsssbx)@gaKOD*3tM`Eai*SbGt40}9`Y7N-T6Mj$?^|g(f z2~%=%z7&tfQZ8N)&w%=0@C4qizDOSyqT0s3e4crXv2zrA7}Wl*f1jbi@I}JD7w%Ac#PBY@;R02Nngy@i&6rGES+UsewrLtO2Mk7|FpD@@Y zpOGX}UL!C@8Fl36#stQrJrMu|_rry%IXPh45=ZD*b^KxfoBiT$K(%LsT8UNzN1-_Y zPKMd^|6D44u~LijhfBPvRf+*BSh%a-oX>6AEhMY76@u0x!fC~Hz{mB&<0I6$z+x~* zlH$i7h||ZL0^FN5H=I-~AfYFw@Rni=V3W*wRRbbyGN`0ccN!ZD6R+0ABq7=XSpuMK zUI_tyEvL5~AwQ+Y!;_tZPAP~fhX|+N>ac8CkkUzvBPbhy27dM+5rLnDUCL9o!8d0CW4E8vgqkZO(DK$Xmdx>Nd7>VsvP>p45S7&;0HrqF~!?Bh!MVQ>g^nIjxr0 zc!S8n6aqDgjaD|NY86BHOZ&x}pS)iz@M`}e!=nL5=ml37OQ-Rd1W-(59I;1!NCsp% z00^Ji{|&Obt-csa?Yv%&Ch)wKwlWYEP4WV!Na25(68^ydCi0mP?YpGbgE!$1*ySGxLN1O;BnsBdLV9&(p zq*cep>>qJLV+}3_D^}Z?Q2J`cn4PT6gnr^hBt&QoQ|bu!@DBE>L{1C=LQ)o#o%59l z6AHcr%fC;=NlDLB-$fbt=co5a9^6|Be~TafeVY} zRIx`GZjz|mGu6DutPY~GG1*1~^Tpp!YL!277$9YC#w^2AOc7 zARynZ3??aoROEu92A`tFQZ*ZtcbOx=M_r>-g%%h$FQW(%}Zv>bu(-RFu)YS!`Yy zAJK$>C^8b`2o!lmFuAnN6^e#-oNP`l$^-{j91JP!W!$_naN!l9dIZ0iW61;pX20w#uNhZr{=9+*d0;uDeKK zE~lIk;u_7~dF6nMriFN}Hr{Y$wYMa<)f^r7%THH(Ih?>jqLm8q_r$i{Yv%Vt;Wc<% z;iE*cGX1~ha8I26m`rXT`#zv-&J*I-b7RHI^u6&AWBjP6zq$zb=P;!6-j?XFxH;NVM+-W*{L@Rj7cm1B zh(cKFQe}<0O=Y2;pBANt7; zaqK`7LbuHh50D-5yyeTC9jxkI&#;OrR55?Uze0YV8}u8gc|@l12jGjR;aNhy5ka&> zMU&gLlJ~6CpSNaLfOLvv$N91wZd7O!MYK9io}#`RVH1oNN`dXmUusm?7j4s&mHF!9 z0=)4@rAhE>4}_-?B3pI~(!G(|suX@=i5)bT_S zSC^<3^;ggStRRCHJY%-NHQv!(&XyS=`$W--q6FiNAYLM!%NmIgH4LztSb7Hae!Eu$f#m)+&g zvE-=Ly2FVz718+|qpt^wc+{Q2xK$UjZ6En+-id1{vUo)WlqPVtSrlP3`7cM zXoS{&6~hRG)zm^XC-}?e&7EY%5tJHtNiRi~m7{R0ZhAntUBL8l2&k>n5epN+0byJO z#6Ar6_Vf{@M|F@|VCULq*U7Lt2!b^%c*NTaKXo>^E!=QOdAom}l+f-@m$$LE__u^@ z^2NB9*qvlSw~=sXj*}k7qbvcsFD*CfACzG$m*%efGlD|COzxAY<)-4>o4XFU=xzVx z%-Eqr=uvYR@(`hIkMo#g)%`Asekh{Ws^Eapchy)G6=c}0%oqmJt9zID z*bu^Q zhri>nEA{i70GR%w%#U$ftD{oih9HR$Na{5aWcpUG;Y$%=`T6@R=56tWyjE$~7C}94Vo_XjHQbUphNKdqeLsR=5bj zC&0}3(>?Kh;occ<44h8a;h$Uk(^D~PBsh~<%kZb)Hou?J!^Gh>I|5JH=(w(=BbNCg z%p|;nd0i6`mmCDslCYzznfx?KZ@2#@=D-rVkQ)GtJtn-6*TbN|Zy^rf7MKCW94n>C zjau#WIz6vHn9b{#+tTL`W+>4W=I8U_g%9m;K`x4eQ}&k@1cG#)-m1%X5ED-G4xod; zYt{zL4On(Z-2<%%Omd)|9^miK=S8t!9o2kYu9sFxRxbgMRKGjJB%Rvu(z=w`ls5;i zjw5b{Iw_aS^CpS+Jm}qG8e~HIwny}f+I&8yDkQIM1BOh1sC6-F6Wijq7GDGjqPKl) z0(~{}GH<1%9JWjdx4GuIW0T?i$Q4AAzHL=m_i+Q-fqOyEfz9st0Y-*@5Rjc0=LMhf zel2oFd>MSQpfU*SaEV38uueH3a>be$Yy8MmIc@cRO>?i$F7?pszJ)FwA!-Z|e;0V| zKcwCLxb1K&?6Q)4UzS^e6y0tui7;3k=rsDu!1{F@PM-{qmsA}A;&wE9KlddBQHkJ6 z*|P2uKCJL2fg8ZPj@eAwA!cwxPbL9zc;7VTvAx_ODxbE#o&(@OW95}I+;o(F?exrY zVf#5huf*?KwU=MugTf)-FM2=e$bGI56ZAt4IW9{)Q1n6&&py}Ln974W8&cj*AX?uV zSh36i@o&w zDa#p|S+=h!eaUA$qP!e*Xg%vGVpyR=7+Izd3x?fqj)YLBpQ|@kZ8mh}P;uuO*JLMw z=&9lf*$G|_=xOPQ){}RWbHA&+-uakti$O;2!b0=GVi?@5rZ8U2JY@@g^57@<#rFZ( zevSs9t&bpSD`0zBtp4h3DwRx6+qaDZI-E=)lzDC?(AI%Lh^^B5Ime0^sLplD^Q}LR zB{1CUgFF`rZ=YwikLY4ZPpYU$|L557IKNmO-w%@PNt3C>)9C3Qmil5MVPt98K5O+3 z#1Xr|P0qB~6S^qg$_d~Y{q_rnCh$K#0Z|pqY%x$U8`46|zy><|8%2#2{doBT+VbFE z_1;d2#3D@N1_lhj>`+W3!-#{kW{ce(jqvF@zxy9k_eD3WyYlZ*#eRr7--{+vCo|BB z`{OqBq@G;Q$o)-0PisT1jS`(DgB#eXRkpUnBZ(Xb5qNm!q0j z#Q*`~3cK|O7d${}87B(D>>O9cY=$9RG!Cm|1Wl`te&5pW`@R@^`}sJBM&Y?O$4BsK zl*jboLPuL!dFXsVJz?$Zs$FuKxuwuIl)j73NHq*wie+f;#SQuFI4EpyW&?Rk2>x7u zp96pEunAV=JwC~PcMk@zst~li80~H-h>)=kshBo`g$jxjd_~8 z=Ec;A2-uwGo?McHuDgBp*be|$-Tq>@eZN?mTEfpKxmHgkI$yfWlzfr-A5AxL-BQ{_K8s< z@SEy>S8HgSR|6*92frb=U=EvwN}IWF6PXC{V(yw3Y8TgKec2QA+oEw@q7I4NpZEKM zY=Ud+_NkaVS{#|E{^T+)Lma8n|8L9o5BlBxU1Qa5-U6*_#s-TKR|oalL1qbo4oQYCeyj(s!Gw36e#oumD5o z`wxxd*LKpF4HSk4f-66Ndiy&o+nqH!8l0RQ2>5;&7op&L8IS4xy2O5McsX$l06kFtHlu9r& zO;p+ST<8a7C($gW=Fo+Haxn8}E!?^M>&fe0b?bHPA_L;qtFmh)t210n`D7>`(3Q$V z&brw1W8vSz*ae=)94+YAuQ=_mc#R2No-z@H$(PB|#PUCWX8DUbD9=~^d3rAnlhz0Z zCKGp%w$25;*m7i-BRrTn21cjVb*Egj0^_ZKGqev1Wm)ItM9tL+)-1`3!NI#Vr+$Sc zDxH2at>}Yb8!D|dv5#2%I6<9`Y`UxWEqW;4<&EuHRwnWC>L0^8yEsP3C9tX4(yGnY6^KK<_GMa{FB6Nyo{tl&kpb0zepfT6o}{7kwe$+crQ zS;yU3I)Br(nxOXbd*nq2vW~M-`bmnrkx7mq_DKoP_cWCh5$W1ki0Ss)#VrsP)#5D9 zo0x$V1c4uXUf&X;(=k~UM!&$sk%m5Xai_@H`?wPvy4Nzzq;=@mef}rTPEMC3n*f7i zz{9?7gBA}&#`91%jtRP(MGm|0$Q!S3ay^yt=^ENi`Dt3G3XQD#{ex=@g6e5M7LEg( zk!L@6IZSy}&eE_q=yFkbR3HUe0W63J6w9BT=Q_IA&JLaKan@EX&E4s~;iSql;t~I<9iQt>rTZYD z5`AJJGit$gPH};c8w^v6l4_zh&Ok!ry@Aa5rbj+CuWDO?%K8nQvPRJjanqFla8csO z_tI6lua&bOLl^;>H**BIAdu7+p1lY<*&3p@TuDVrQycZ24rwD;j zykBHz7CK#I_w?9ndMq}#JFPnJnmVvF3+!m#Z8p+@{eGOTdpXp(=w!i_=Idg}zt+(0 z(uCj9TTTERC}KUws588t-Fc&J`f#ZrI2mBK(C#_0 zJPF#ufCL6q`0)S`RSv?AoSPWwgZ+a8#v=kt!!XOj7a|l!71a-7#CdWb+PC^z5k8i{ zY?%!K%MFuv>$!QJjwmN?i0$3zZhQ)I<}>ryl3=k ztX|Y(F94@O6UPp(WkM))c>^&Jvi|aHNt0CCFuKASta2Q45RGpChLf3ggf%_;D8Q`w zeKZ_gsDXuB%hAU}TVn+=Bpd{BG+lTCPRloO1A4_Cw&)xoS?SFm_YvljvDvPhOx$T{ ziq*Ax+vp?S38+;z;7&-WqvBs$r}g+tU1z@gK$^E-VxQRUaj=;S@|s5s^gaDT=lfsw+C384;AA90LwB7zv@IMBSws%IvJ2^bM`)QDraD0e71ECxf9$PV zfe@@zG(qqWT^!qRi$S1t!&nf*q^eNtjoOkq4$Bp9Bo*~ip?&$^1=I@U0@RaMoK zc>>FpyqMLY-OXlX%@^VJuP{Vl1^c0jp~-mn=i;sI0j+@W{6|)FR)$s;v64^6kNnk* zJWqAsVkpmdn@1-EcVb$S2^ye*ATg@|Zy|D^F-7QsDX-%HD#o zTy&9}xWjwDEl{F95gwR$a>;E<1D#>bLXBNXYhh}$(_C`6k4YkU`s220I0)) z>PMB!z-r5?>(R3|azjm9^QW+8_N-%}7aqp2zVO@ttTG z2#n#O!rQ>tt>(Y)Umu!9;gH4Addjtx{T_ZtQj?PjwcKJyRr@z7x)an&BknaU2M~fu zSOuuhZuGmR^kd0Z&J`vkm$$(_+&S=ToBN;sVGtbM_c*_YYEDE6Z{D5UvNv738@K50 zJ&7)g6WR1!;Ta+Zdf!}d7|qCDfMb*`XlA|itAjY_!7iLzE1|c6P^b`XYf2uPS;bWf z7(BafWv3(%ERa8@75|QLXRUFv%Y9kRwZ9c=QR-$ju)kaQo#u3Z)wtp^!W=)jTd^>3 zRJD#j!U3jm>Tl@3c1O8M?LpXH2GW6;27utE?WyqU9b7&KP`ZW0BpJyGsTzmc6avKU zb0o1i9}_(>EwRjN5N_iUi4gjMbUC@-PmS^XIY`$jQvg<7PyAP@9GOJEkET{tAR(D2 z+C#Uemmhz+eXf~S{}^@$_&Wul)P-`bO162O7w{=Q`}*!*=y^(y4-dZHwL%ez-Q7>> zBe3I=wGyX$DKqPXvpiX*LuoM2-Nfe@is6oS{CjbKkTW1rrurj(1IB(p)!?WK+feX zrkbM#HOn}m(4$~za*_RZ^znLe1hc2YU$?$(<4o4r?b2%EdTRbD^&X+9|BhRkr@K4g zH#gwLFX&A6y8cV#lwMC%s6(p>CcaHilo~vR&53}T_s)~r&I1K<+n1rfx8$BLe|kFw zb;9H^*XRbJ_9o7st@!d{B0T6a+}_vp+K9g{f?gF67a6qWU$vYO?bpCd+$7>oK zz&W-xK(debpCg6&K`yuBJTm${vC|kYM>sJD+b6#)wzHzS9*&m|=&j@oRr~ME4kDS+ z?Ag%6k6+@Klg|!WqSp6ARyTg$??Nl?4S(An_9+_^JYa0B-HtTx;K>0Uf{;oXpNg8O zPp$w=mY!GAEho4C^7o|yiUzd}IP1^mNu9rx`7T)~v5Dg&ZKW%J0e^La2^o+EdRvks zLOa+#M+h`9e#$nv#)&}Y#!A}TCD%Xuo*~C5MUu%={(Z%E&WR;c&IELm6a<^N-G9Cd z-Bb!_`pq8h#6@t*Xfg}lD>?9YUq{{!i7~~)h_ish!^2<9V2%QhPGG9J56S+ndfBaH z))afRe=ku=rQ{=DFcSvTZfU5r`fQ3sx8q}~Dn*ln{kzk{nb8FLA;(^2jwGq-8?FeWbOehEc1#S-sLzO|ISs)4Ec$#HDoV1lQp zNdQ+-h}dbK*?VKrgkhfr(>){m!|qN**=uh44uRo7!10EkrGq~)baUO@Nd$=m*pAO^ z=A?cim5sMrfMquT*1P=)Lc<=R|%jrv)K; zJ#7du5Zr&QeL?bR$-N44i1h6o&%)!&!Rf8y&~ z!tsn3=)Zk)`gFMYrPt0CJ-QV^!Fc93YAU_rf4#oUdH>t%3mUq`mnE2pnAvQ9^G40~ zP*G%$xBe@>IG&etxbt2&^WohqnsfDb#B_aYpR3lYUO8&`d?Twrbx*HYY}AV{HK~*u zG7U4w=dd@ynb{myk)5<_wEL7xB8L43`G%4X7mNVoA2-gtdpdFI-$SAhYLuyseZtIH zqwa7D4FvELnof3U(g$g9vNILo3tV|62Ex#OG%&eGEkn){xdXZzi68oO3qx1j2Zc}l zu=ikD*s|sDakkH+a}=Sp9pk=RYajTY4x5X^yjB1<-GM1MfQZ^voX_zup0_Q!MRcSAA9TGdU%%&+P2SSfW|48{f6mxPBbn zAeRa)?Z2#c2{T3F!cC)R`F|3YO4-&RL{~v;;o%IPV9cwO^^NS(*9;(f{Z<$tgA|Ws zMWJMlRp`N0M5zp3{v5iq@7S1@^9QD^_>QK?T$Jlp+JozzY*>AChdJsQoaBZv^F0cf zUfeFFFtd%Kj8ahWeE=|jDS(6xQQDA{a+7^;HhZx%WP|bZjt`H<>Jx!_Zy0N4R?~)WQsA^U5N+w3_V5BS(+t@LhR~ zV$g+T6pA@mcP?!#PW!Jsa%Z5zwq=#livbtcH%*u+E;yYg*fZidL);*1NCX<-TvhaTqh42Wanz5Nk*W4wPOwvqP$@a z`14N&AoHq!SE0r7`AwhGQF5d{^Dh$|{)g2YNH;m~prz|9p<^Lbo1kF9;zy(~v}?u` z5NJ9epM8e%&%=wluLJ47yAgDqX*o|;C%*rxNVDbPDe>h4}~)VxR^Z+8?+w9Jk95R&q3ohXiTy4 zh&|jb`fL!yzN{?zY<)+sqKlL?uufNDB|UI@%Rq4m_#ee6z-r)*n}05F9m4n=*2;oG z`xk!OF`9*b=;E*JAejI68BU;mHl_IroWtKKKi{9HxQl-LK6Mf`ZRaHi{EilmrF74O zyRIWKc7v?`rKOjNOa2Yto+FRCpY)vamU4oEVB{B*PMvgltvU~qA+MjFVq5>A*PnCW zy$kF&G99%29VxczGnGUzaQKyx<0PUxb=REy^ZsABLDDPdD9tyonw`-ZLt>t+-yQ2h zwIOe}n0?@x@+-fM=gH}cV2GwCSogG~!+8CMYfs+)0UKVN8i2KUJv%f1nQDFgCz+n0 zWiR4KZ`p$V_v*gd+SdD+_}iKbjm-WY*<8Sb=K22@^#A5sVI$VMeS;)%;`hFQ-#R1E z*!jkq!#mtxv{-bRu&0Em>E_3i(#$AWrwB$ox~@r(>e;CfjyR`F=GD7=d4q=|;CRXN z6?3igDJ<}C_8jbzuny{n5q>r|O;x+5p5q1EsvGSu=rFQiH+6@xY~ z6|Ac5KU}k7r_rCJojOnrG%beqYp#0i%fMIooj8h|d}%V~Y(HQLaP)RRbZu2^_+K>n z=C(MDK50y8!VMboP=dDVtuhD#__Yfj?NqUT^V?zfYa8JmsVwj*E2E?CfALBuU7A`uWv2<%@cxSWL~|l+rNQOzuFcohzO@ z9hoBNrb5^ZBR~3|5$REk!~b_g+8dSwNV0Nz-2W37cy^WhNRA2I-Clo3cbef)z8h74 zQ!YG8^zeH`O|N&-7`dOHinGH-l^05-<(FT&>Q}mTzdjUa)A!_mBvgBrnA4I<6f94{ z!{UTqWF`l{{Lj?FBF$4ZCxuf$sBscu*DqpI(~sM)w0670@mJ-vza+Z&X74~M_;Ep)!FCWTUKMD0 z_`)A*dCXV){e1Vv5>(hNvWnJ1@rf-Sj%v;)HfB?U&g3GXJ2&0$0^_fK>=~-mGt=&S z4XTZ9{N;wy0`&0J3V&A!_B$r5l@_bt@;c5qeUC4MMhG+)Z{80*Sm=SX!>Aa8+|%C* z-P0!opAj<&FxFxWNYzOqsq^|_6v`FIb$=QPmeVSxgYLy*+X92#i9EShVPw(RH+KKo zi|z7hlc#|ySh>GyOU_j`-$>l;tjwI8G^Noacl+_v-7eq#3Q590-4}i3RC#SL*{Pr8 zC&$GPT-9rnKxg?EA=E~62I7|gsJfKvj(hu7gwYQmXta|Vx9f5WX*Qmmyi?Oc~(ho;Tlk~NElV)KICSs(n zdX@-)i`>t6a$*n|Tmn4G;Yw@Y5Er3DQvE15X%u?f!Z2F{K}!D86G&`4)2cM61$v5% zu6pr4mHu~=0-YKC|HAeoesj~3%qzmVAwVJyW4;m-K=p(@EnW(K@dh9qwSTi?qT^um zULV8k9{ULUk!HmLqE}1h5l%KHYnpe8rjose^tB=DM^GSZ8AT3W1l*A&i9aI~wa*~H za4zyDfCs8nrWA`t6K4yLWy;oN6zHERCEjl){DRuZ82uW(&nyUa4Vtwx;mK=&X7ry< zJJ_M3B3tNcoi}33r>Hq8;C!nRE00hPbAAZCEW4VyZh-rJuRQrpjWypm2+uj}J!fM; zCddB%gw@=B>a@?FFexi(PEx&719IW8T~>+F;sp6Tz0=PK%BoH8kx_`s`^G5o#RZq2 zCW9aOh27%<&&96YJ<;4zIs$0z{w?d%)%_|I!qECR@t6DMUl~)UWuZMSgJ`>PL1JSBW@Ba4lspouMG}*R& z><&ak1VcXJ+dviyFal{ojcwS$xPJ2eCUxJbQB0cd220$gG|yiCS3yHw`JV;NN4bPi zU*~N0YsGJAXGfRhghwAjJU!EwK}aH2f2I`2(rR+SJdHZSAJrH=&vxHke!D9ER(IL# zS;d~Zh~7js;7xwcM{xDYqWlcNGb61|;>)^GD&^Ige2wh!iWFxS2h>0@%&t-oRD&w*VE4>$?p zpxK#$0m%v4ZBW>8sNy-gWo3veA9bLgri|Gy9&bs-KTmZW02NfZM*Ig2<2jjncLE4GRIF`=qr$h=kKvz*+#QjPXQ^~LLvksRJ&yWdUJ@gnZ z$O24_kiXlnCyHk1_b-SGBcn`YFOSlq@vr#F6KQ6)<~gha*~%PY-q26z%FN|LtWRX5 zNVz}2{K;|L{8^uUCU?dsxY+!Kr{f9 zGeL?pw2RVja-@k{jKpMMq~OdT zuYU68w}qt})Bi;yS(W^sG?L!DQj{Mp2`AN`M0)9VJ?K05?c>j!hlMEm?^^|xCVMt= zkH}gbt(Ja%Fv042+krjkP5wUWg4S+nCuZRU5my;fU;?UcuV41`Lc)yT$DSLNNRJ10 z>VxQMzLgq^Z~q{U9rz! zzJLb5P!}lBCCV3~FF)VFQ7X5bXhmY>aWNY`586mMsIu~$?liV zKdA)@hGO7tvjv4=+^f10`RW6*o%YV%L-_-c$0b{%!1Q)=NkoZ~r zbG?7EZ{x_umr!wW5g1;Tz=aMDihl*1Cis8+hNC{7{R-5NL!I(L|IRvU8iF>oAIQ7;_gs$G(jNy zDwD`mmG1iPD-{+BHaE^rJ&RncW!5_|pmV&|tsKxvD2&oH>;yhRI;{4&-=v19nYN@;km*!te2CYp*Tk}no4n-?& zzi1Dm8JJoNcCdQlDh6BLy^rHZr%oY4dy@sVu45K5Ka7!?W~5IwlI=Kzmp;c8NQ?rf ztc0ykr8_<$-M=^fH7lm6ME^D`y>+{&fA{;C+>@fb@n-eIE#bFl*5cPUQb%GfZq+oMy!l$6=US!G9CqaJEJ~? zAZ1kbg1YZ4tWNO~99-!A@=#pQlG*VwA8p@4{> zg+D{g0AU&J~$Jrw8D}e?VXJ?&5#hc zSuZX#ZJepmLt}W+Y0U{SyzEnAc^6WM_nm*s?*-edQ{pVgj@%F;7&PL#lt`G876N)` zKRdpsMZO@K{g~tuCj1O1(=3Kx0r6zU*?2T;!O>MtXe%b?cS-nS6>=2iPq|MyQ|f)a z(TV~JT7aU&uv17|sFKS1AM{x&$qwy7#LW2Q7OCyp`{1r0K1y;Q*kYI`R2%BAgkqZ) z?jUpRR}=pr(k;sWLZshufG`C}KCb*|DZQ&SbMSt--m~aEL7W^tMnm5IL8^mqq#G1w zH%wfPS2*VxMg|RJRlA+P@ahfWR3tin9gmzlk1i1}N5}TaJk8dHtODnm6=f(ZF2Yo0 z4h>NFCT`(pm5rwpEE>mxAjs-JZ(c95{{vqBi-=4qq_txY>?6Zj)HO4|D{sgdH9k@} ztV`MiNRHoW5N8dQ#qEcZ8);X$gJdFd2B3MdVPB81PB3K{#>H;hUB4;y;HA>7@E}v8 z+o==`sqsQ803(63c3Z8?)PGNCF#P_saSLug;_=&jAO_XqiOLKxYV?qreHYur9}$m$ z^@0q4U_qs1Ln^$5h!A1kb6;mLLdXbX-;T2D_`tU_PSindCi9=IV=;#*_!Cu4iXvib zpkMIiV#KWJr}yB$;W@a}DLusCZv<`okx%kch}3E2Mm{*Ex$G%v557`E6nU8KhdY=d z%0qBQGC^s_{VC|@HL7ek+q%u;3$~1L9o&9V0Mpd;nF_jDm8Sl6%@3G#nq0pYWed(&Y!h?sBLiKZxWUh#Sm$L>hS zdk|?72aY}!Mu+&}563gR9@G-J#Lq^CNqcvV zI7g`IsVL}sySXTK8g9@uv5;yb7rlTJO6ydNxGkCRJ`(Ksj`@h;MLqXkvFwq!@93N zI9P>Ly$Q!46+UcKcVatH4X}WM?bEuzA}{qQwvRp@F9}dMsqNCCt6jP}pv!uKc14v4 z=`%~SpUZy{rbme7AkrQCH$t=tOCAQg5Xotf!LX!SAzcZe zA~UELi)Ix*K8_0(o~55fOmjPOSU3|M5*GTtJv2n6JMtSZnz*l_fd@ zmVW9`W0-ieAkFY=de`1OiVm8gzbIOg%svI0>@_G4lBb4o#=H!MvrtPekW z?XO(jvX8uW@O~A}qquz>!B7?=JE&{v&fBlM>7@PxGGLmyxaF(~2%BG}bMiadeQ`Ck znc9l2(!)gzF-3f2_N)tC6~XA*?;@)VG6la{({;GBan;m@6WDW- zb)o6_Tl2T`*;%)%06lWNYj$4H7 zPU_#zsr}5eq#t=9N>s}TLL<30?N{3cJ9=t4?Lb*pDBSd6>y$#EI>-KeR<-nw-UhR_ zt)}UmVr#~nZ302Rwr-%+%&)@kvr>~< zPo~|9tV2Y$vCoB)*`V=D5ht6%t9|LM)M=yA0Ig6`1hTZy1zcm92;sOcrliW7(OqJ# zgL{U-CxKsCcnz3SSNzpd_z**1LR3r8VF_mqx<;-VKQJw+96F|Y1?kqP`5)31QmLE| zW^iteoK%{*h`Fzy%P7djn7}IxV~T*^#9Kl!d{J3UD0>n35I~3`Jgc)N1(o-+YR@2s z))(cz@UTaVq(!rjtFr|=qf?I$$;qzB*&~k*4H}#fCD>XANb4Ol%(=U)zOS?@Pg+PR z9+khJ&%n{$8^b2?3%$q>OcA=R39ox2lpoWyG?%Pw$~Y1Odl(Yog)aNv7K!Yk9C%-+#VO6`<%d+7alT^!eSZ(bV+H|q9!jw@|4j9LgZx^(e z-H_w;j}C;QJ;N_^qLd4D+mM9;t>}DD_r4SQ#?v~YeH41+CVjHv|BqOLxc_1abW)MH z3f=%>{%XS~G5>)cZbAq;m!C6D*N|}79cMncvEp_|(jW+v$(BkO^3t>BZZw+DHd}B` zwxVIpmXOD;9l_b$FSBFrywr~|5o{QIXElT@rI{??x> zCGfY9O`gQDRE!Zp6>X`Y$d>kw`aYB)1CESQBg^gvtSEE;Q zZmIh9L0eK3kJ`U)J12Z^wH@yI6$-5IIde&|#95`UGs>{8lViqKinotyeo78X@2DRp zxif`_6tm-P4b5o|wZ&h`5b98CvPzBgd%ql$F6`n)%=~|-atyDXxQ`wIOS3rd8$3)*pb9WOb5@ykK+MZ{PoC6JgYxqgs*-WW%ZgQ zFylGC$iDY^Bm36tFJAe+^w|1c$A+_{!*EupV+|VYn**;q2p8K7EWc}$4!uMx1mYgM) zIrhD4*>eg#N9i)1t>(jIl;ndSah%f<8D14B$f&;85pvw9KCGq2{G5`NePKI7=$nnad@F1WluJoTV!UeQDZS=|U`m0gdGgK9GY$r3xUY?es?9 zHgmGG_tHAS7OLj?n*FtTTft`?$lzQ$b@)Yp=P6ENpNZKNH1I+z{Ir;jur_FJxoFm4 ztmL!#cBKNt?fQVd*w^rVpalGqLb9k)Zd=a>($BNi4Nw_`Qw#0-CtLfU`D43_cJasXXl4_rO*b+5FrCxUe^El=F$Rq3Le z{A+%$R;)iK%)HK$WV6ThR;IP`z%mzx?jP^kHPAEGx}~@nw#Af+MYA+ z_F8QX+Ad8%L*4;Caq${%jr~s>l-fFp*98ULF$= zLs;a@F1lncl>rYL<@0B`XK51OXV@U<6PJWZuR{Ap9r1H|cgOekgO2Zxx&PitEl)Td zV1rniT>A!yDSY)o?%^w$AK*R_6#-E>|AC7i7mV_-yFXRa$Bk<|4Ns{lrGCI+`FLl0 zIJ|wSCT6G$WYSA^ov4bCajaDI+Y3i3e~g^4T?Hvco`y?j0yevchvCjYghB7!q+h2q`k?NeKRPIU?i z?e%XdcF;3`fgA zZ^HhOY>d6PzkK%Y6cqwot-#CBGYF6?1Bbye&YD{T;?304Hv$J?eYn#g=&Q%o{*NOf z))-I){Eh?o_Z0h=uxjMks$oA|6RvqkQ)K zd@phM6rg*6MgI7W!H`R_1o$+i?(<$r^@OL%1iq7l2v*Z}^~QCd<;P*&nO*Z{=Cxbm zP)U+XtTZVb^{&=9MMUyY@fGhM9wmU3A546q`AyqprQOeFu58oh`Q`5MAJ5xS^43Ww zQq4;X7q+{dtnSujTCo=*a2Zxti^NF-Gh46Az-4}`);Z2l7y;3xXY}tBLq8`I{eyFz zdu4KMxB8(n<^^Jd39!2d(|Eh35a0h%H30xi0GJ`oQ?YX0QIC~OD0SzECG9{Nm;0?9 zC{6+C)yVAvdfP+r?}35Xey6^4dV`V1 z+^lkHW9smn|Rj6q_afH|zj#{#w(T-Qme97UdV` z0!KnO$A75RhNF~lR6#8LouM)K8)(Dq^6_rem|LMw zsVJ_D30qY}GVsi@`{@(xf8^MaJLPU<8(U958f|`+sH0M0kNrBJWah!n+I5CpG~k_j zCTBP0A#OA|nfBB9CzXvHUB5G^fo}S>0v`oV+Kwo>8KbYpUs!kEfPoj!(YfbwhwsAL zVZV3CVyW|dGNO(C*0-zX=2JsMU)-nfMDKV-ULem1F-z3S^a*MI%1v;jhD*+{J(3VE z<)e?>u192g^F%B#y$SNl#g%~cYM!BRRyy&cKS=Z*=B-26{$Vi*+<%fj^ev$wxsf%G zzd+lu5v2Moi7G~Da`m3|+ROQ~>mF7!Gqdc%l-kPdy5jQ( z2X|qrHQeQMDfJNPLou3mlmViM=e)3&{bTO=1OktgZ{yB=FHaqX_xg*U-|pn;@&jl) z;E$QZ@rE74X2=F;_85-XXiG<)_dob@qo{Be8$D|hmfd`llE(=$p0{!e99WD|ub7{9 z)gTNI`zP#!%k9k%({UEJ2%_%Rl&YW-XS;(QtvF%q_|Mi;{Swu!i?P*}2AMd4)@%x@ zY$IE!akI}IqYvVKgcOr#U~;R5H4FpYp=@*K5_^s;xVR?*UJl2ZGi885m=)$DX=P=s z3In$WcZzfT%ToquMT&kWzQ*Nf0w6PJ5orFIW1+M}=elzrXN6}6YK0W>1b&xwMdQGS z+5}jUom7na^vybPnIGybaA-1Jt)70_wgL{dEVp!DA{X>ydd@wjZL%a;K(4K8i9#fGk(_(-tu?ul$pDrft6wwjg=n;TIrvdohg`AmVCx}|PC$6Y{})ItF`n?TTgB^$ zV;@KTs{pSEknv0)rWh13GUfV283vAV!Ql+$)ZL87b^`GVCiE5-fwzEcw{Ei;$4Z4D zu?;!iB>b*p0aBVDD&s&)i=MCWW4->#;719vHIk+?_knq|7booQiTNJx#+)-b3f;WZ zza)U@^TY7Th>@EDC8;RNMS1wlGCmGD+`2{?78Rxlr;oCrqgyengj37kN8yM%%f^}h(Kh8F3r`mb}qWKv{v`<#5&_%u?kZ{b4V zVgg4lZ~M0+Lh{{MKgn{(`D)wa*iP_oish^5_u?0(CxR8P1^sw$A0!qv!e4YAg^`Dq zCr-O{oIVB6RXrK>haDayu1-puFoV6LZtuhGycY@U;{cXA77@5a*Da56-xuF~lJD=+ zPL1aTSaS>4uVtgiggr>-D%p=8u9ud^NJKEss+x-2crprq z;WsE991679%ngt;iSE5_u$kK()j#o?DhnQCGuZ8F*+MHeNno5~>l_1ay#FEo$>zhC z?m%xV$EZ$EnV}S%6DGG5Jcb1=SFNane@QupNQp}&ECB?NEFL+knUpUO3)#SZfC5OU zB}q=8KZ-6rxXLf{;H?AiTM_w)kH_zl>;R>z%p~WS9=X3;uuEtE9S&QTdF)V{_BB)R%Ex?${@S7`djv)UL=XXCb z!G3kARSUrV1KfUg_VzEWwf5v(T2EVSESmKmkP2SxmMJF75I!*I%|F*WmiyxNqXwM- z&iKQ~!=}L)Px9o1QoH0>yfk?tTBkQQo>GnQ=h=jati~Cgr`WI_D?ld*JJuQzckv7i z(IB%8t0P-daVpusCEtD$>O`NSMBc8R(sLeBP-VkP0Dg~^6@s-in5 z$%y!A4v5s)4#%X24k%f58OZP<=Ct_~I6ucb=FB;g<*)*C^5z6C*)B1>gXsuVsegeGeQ~SLsh{-^#1U z+w>29C9SwR_Rb;p)ib{=bv*O#655JzD%&cQsMo zumx422y1alac9O(a-?`!(#$gm=q@45iKGH4ThR8-5hJ5flFODB)s%;@Hlg>oZVxrX z+oK_UJUMf~gRG?;UFZ=ReTPS5574G3G)l2%+vGgSueOZ2Kt{bFUF@;-1K}ZD_vIO{ zD0c6$>#=B3#SIP+m|*6Yxo%iBiKJ0qsmL-MC{TuB<3BGT~zW0)?Ji5zBO1 z^Nd%272vtK#KTmGFpPc(_4Zq^Rt8KgRSh22Hb@b2?VLE%p@r1hL*Pd9qQ}s11r?`Q zF<1bk0qgt1?gCx0gI9H;DB(AO>Q{QSH#PY@rxOnXw+(Glla`x+3l44NV>Vr!^3sio}xQQ zi?9^VlyckP5GxaVK|~`D=S&R~ZX68{k9>qa=3C3Cn(6xT_Vt(HLj!C=Zr&4Bci~C+ z2Gw^*;j@Xx>!%d=7i|W2x_*z-x)FT+DFJaKpQfH~Ac+Vfz!t39J}wwv?kd*oG;MhR zx8*c|7=tW-Hz-hjwjO!4JpWvvVr`c3;{C)nAnyf&oP7jMe5Q7b)?%IpIuBdXg3|2L2gz7{231zp zzbA3E!H%4BXnpJBwElws%?L%!$J*?hQImx#vLQzV0yG`MrP&|N-MEF$rjOq8iWoPs|x9HfBps++^FbrJ5Aq<+o zsQXd6=?W98wkUx}`H$dR=Dkj>U;H6W+Yi5icL|_&FZoIg7;BMQy1w`{Znd$bS&+S3?5x4bM71A84r#*5y`)0^LA?d z>8k^L^REP1S6$yO1w53STT|fHFCJ@1$;hJL8tR(EXqv`}H>&%k*fOpv;$ z$D|)bQCDVw%+SB+O5ER)P-z&U&rCh;FB&%hf(EvgpPlPzjNgjPRC{W!4E;7g4`EWp z6;d+)tLVM^|0sIL3}uc?Sfv*3mtt)7vf))@Akz(eKOz_i4Aa0y7)y|+Bj6w^Umm|-%+i1`yPZyrKqV}8pgKw`o|D*5nVe@G`dbEGc^s7~m zr~1wa$bW!>f=@J;-Mr456qj7baO)IOv-cXp+UvvVObvB!vWxC;C#(8X1dvTabqKZz z)${BfPa{5Qn#xdV-Mwb$jf^X{Qz7h4>ii|kY{*_}2u&<~xzQF<_IC__Ke+<|rQvuo zzC#C($Um4z%OC(w;KINu0-g(sguZtHMVG%G-9hbb|qZd*)JpP%& z%*gY%z0#5=7m`!J>-Ma~R@+5tYn-jhLcbB~;nf}9zVGCpkVkO?zwN)kMX_Hl7l>sb z{EtiZwOF0I0$PNptuaDx0WXi~yAYb^&(I-%tde_5K4i#UB0`;PzEv?j#{SDf>ewGi z`@Xo;p)_MC++zlnz>SHJO$#Ma?*4=u4xQ+!&^^IS1B@g9tkQ9_rtm`h2{HT!+jtB5 zYnk>srT@Kj-|vYO9nDLC10 zm{II;Nx!jqcCpxOvTvEM^-fsQ_eKAl1>57cTv2Vb_U~ruGC$cV*h6_=>%C_PpZB^> zB=c%)L5Oed*?8m6DFi>K=$T*2<2}6S5v8X*CD$!7P2Xw-5Zh_Gzmbk74 zg0Aa~lYEPhZOz`R&xCw;>&N!t6gP<^(P@UI&-*Cn?{(NEm5D68b z3pRnd(vI3E|?Ro)&!Qd7PeGR2~S=81pWE`ZOh;-u(|xpC3;o(d8IZD=6b=M|2j8sZQ%f?)%NZi?QhqKkdW%TcZgnr*8}6lZx#E`tA< z3){gujGBw?6M!n-p099Gr2c~dKH)Sg%Xcl1AxNv;favkN5&*#&@}ZJ|3reEN2w)VTaJeYI zbRLvM{^R&9H;2N1&fSmIQ$Nh&1C#f3s_pla6;jVsy!pH@HW@qfktozOx)YM43aXj% zl2@VaBLvuOV?2hyS(8n8`mx!W;Xgye+m(XH_B9&+LF**k+%A=}Z~jdvsy}~+T3A%GzjdVa`mF_H!n*9;o7`ifmdpO_K?GYbNw|d1@xI2jLyZ-+31yG$I z?ppcUrBTZ3kniv9?((&|m#`n!bZKWQ4*`oU)Fw=G`tf zp4Vp+!J?a*7WA`d1n_xTk|{nOih7OjMQ8_ef!579PMwm{pO)mHUEsQt0HC*_Nyo5H zyR0Mexkq1)kEf1Zk9wupTK#3$c5jeqUo{9*Ia-e*h5`MKF^wy5*))pMV0tra2YTmQif*H~N?d6^h^*qfu3n@HK7$Tk6oq(A^$`fZ#gtx*D2 zj=X=QR!i*cSTO!1@6=Ctb(A}|O-lexeaeWspZ)6gJMDWWQt!8nP3|%a>%X)j_s`u3 zo4Dh%sIeJ)Hv0@(c|Dhv$%2g%na=Xsmjjzp8VdMXO9ivUEz7_`Joh34(+A1}EEUe+ zfK+z9WS~p8nLaj~zHDa8&$-k3+nuhVXf+nWyWCfSg`u? zHbV(Fp<^Wq^*fk?**=)(A5@XIe-)uW56IWZ=?4*L^`Ro?HYZ62FHYT$M;aa(3fn8MLp_HjtOgdj11dK6DfHzLP1@gvbZHf1Nxmb!(JQ@BcJ!4m#gR=$NC zu8{U08x>P~P-TY!O7tw+aLieR;*{d4G>s4Z;6=!nV%uFJSeOcR_5nOVNdQoLR=2XE z=(d`uJD)QXZP@OZzr#xO#Z6v+wkMf$~a0feZb=bi>F-RiL zzqd6={LwjlMbqGM6R2pN|NII>02Fdi{{M=@P&JB-AVf|trWNBk)iZ@7sP-99tvm&~ zk}LvUNsjI&;`0G0XES|&mhC$8M9k`q9F7cbIF-}A8>v?Cd=H( z6eH*M{^)c(Hp(`FF zHkS9F>D9KC7-mcuf?ivn)bJ}Y)PZQ5%rcwJ5 zav>|x1%^`m*e3yoXszEryyNz~Hz4nFz9? zvBUX%ls|ys3Jv=hqZe)nJlo!`KvZ7MN$lJR2~@;dkqgj&0fjC0iJM`mk*srKdK_zs zzD$>3)`e@WVvoY=?jMMm!XLK5F)#Q`hm`{rQGjwCZt!BUvrUMukYxprw;CNWyR5?N zwihB>b-ue?9KQcRp{_ri*7Vut*|V4OKpNvPbz0zaC3x`Zn4BN6*9|f<9@u`kILsJy zlups=@ZhKZFkj{NR^aT{68Gb{^r`IzSl|_*vp+JWE&NRUCNlG`vYfCYi0U>4JApWk z@?Eh|K($zyG%?3~TXmyyKg>>4_b1wGM9RIY+-fl*L=CwBq(GAx#0ze52C;ss=og?j zU12C_+AVJ!B;q{r==)=|68ZbVU^iX_j)9nPs*=$j8n%`z?dC5|h=vQbc82}+hAXKf zr#_XwMjZ&TU41Vzy-$4!@8t(C^O~81BOSDOe>7XNrXO7Cybgh|@*lb89km?2EuGi- zbahUb>qv)6a;U+-y~6&=6tPNf&F@SF|Eh=GwoEGY2#gEwq>b6b`N#f+`;|&uKMI@I zhzA*YJQzd{*9?n|ftv+GBgCy51sy{bCE!?h^2qQZN4pqqir`*n*JQ{KZ53$sxkzfDDmE-5aSC5DA) za{n|C`qMwS^PME>{&KQ^p`-RyZ6AeJH5>mixo**t+31XK>B;84kmvoI`UH=@E?4Rh z5=Wvy${&kdsFd{s zp{yy2`KHeJYcGh#=ya*8>s=rzBnC)J?)V5X%EDZqePDosJ}-XtIfx7kngqR*4~FPR zjZ?pQChmaLl6vwqIfmp0w}y@srz<7FNfMgtw_N0WKRbwnVIH4^B7x_6_3x8k!utgQ zi-lK=kvY(IX!>b2ziKe-dK&?LiScwz86RJr5ptaJ;%?`U_y_&3%T>Y+tXRwEGINE3 zc8@2w-kNVZ9ee6H34ap$ULeNXH}iO3H4S=+gC%fLtBTE`dxMBzn($KZY^HZBQNm@1 z=fHFj!MI(0Rpj7uk);_+$Uy4aU@{0q4hw?X`8h=*K7OKN4gudkx0*ezA}0Zw)eNp>hzHcP+Bhzm%HnWw7DyRu1?}zcOPwMd53JWk zIk|joEB}4C-=yKIJikAvK+x4&N2F1sun~w^dm=7_<;rD**@vCzqvyqXF?$6zzhgF` z+P>lX!rqrl3^qoh%m()l`pkQ}!S=!LBCc1_{8d3)5&5iglyrl{9Z1W>P8XTW?sDu@ zvd^F0;nJ?aRXc?3ymS;AzfT_Udp3es#_3)E}pf+KLNF0P=Is4%9)S8)uTUxUj-P{BFOkJYf649ob_po{&>a^@`5)@_BH4{?;F=ZC|f^xK;iWjN%Q^cFnt;3Uv}1Sy4cyj2ZR#;rfh&$zlD zFZ8kQ6oE{szHZeRQm;gSCiMF~2w>(+d*a5^Md!V1w40#<&*YW-M{kEEuh_Bt{fo;qE z$>EPIGe?9Z_636Fal&PxadqJo>v0R_-w>Hh_;9)a5`>tqD<5DnBNZ6sA>ZT71nk%H zVlY03CQ#k*D0g>WD-{tsgTA`2X~k=dkAjB2tik6~y@=3d4R)aoWvY6o)y{<$c3q|0 z@)E<0kwH9OLkX3d6WIua*AS4x)+MBUfDvPc7qCq?AQzHP;9wmIuHPg2oqc-Pjke7A zvExO*kMj{>$YUqz{UKopu7V~Dx~_(_xdHyi+RA0PIXW5QguQZ{;elZeM=?VIN&Igp ze{wYxPuL&co2feFJWdlDI%(O^)K)`94EhETNHEzkTYB$~#^#nUreE)#((Vww`W-sN z4dQk+C8%nA#e%c;$mVs5>-j$6kmM? zh?0nu8Y9FoBk=JG5cRpyYuF2M*j(uFXIr>3n+Nx})<;;qzuZwS-`PX1yKOO&3?OHL zZPwC#NDU9A&u^ZPKu~+{nrG+SAVTM_OZU2unR$chWzlF0*D`*hR~em0YIy1wjs!3R z(T|Z!J>g!2Pm1N4AFg84G42CpZn9YVRwS&gf;%YgU^ z&gdA9x7WK>gKT~4VcXtt_pG183v6TU$s3279Ln8_*6;hy170_g!XmJ$D39TCxOb415OWG!k$?Wcd2aaN(LjJGqPa#v z%7m3Zbj9GBWsi$Es3j^o!36+<=ck9lI)6?svzOe)eu0o5c00;GDNuP|lDduCk>~0P zSH_*`=4@j=gZF3*y5axGr3d`$742Ax-LP}-wMVahLzH9f@SI)X*Ma>-28dy`)2}!A zp8Y0^Vcm-YfU*n|-4RiXm*M2Rhv1muPgF`Fpd=Y+tLI27%mtBhOR9;AN;D~#Jbb2* zY@srDjvN`0u$^EOQ@L9MB`@>R$V=ei_tFl33T>@|wAELQXC!a3CAdvTo}Ly~3?hb1 z^kE(ng;lQFgpxUd$SL$($j$53>#wIhnNrYJRTno;5jlUw3wUdg_6EzeM0TuL8ChmT zW_VQ*w}ZUgE7sE=YtCmw+_4I{$D0~Mdqc9cg`d)2VU2Y4Py z!$pGM;h$t&?NlOmz(=nMrH~Gae{W>gJ`eP#VkG*bu6uoDf<@$SCm(&y^a%aRpMws^S$YPnEG5?&d#Aa9AvM~a!b*#uJ zKTFF0yc7jwdYhEP!(CQzLm$yGpv7W0D=-EO=w2LeKBA0|J2DOwCsyB+8eOcBN)R<% zCf+!Q7h6_%$@{GgDy^jlJ9uM~OH`m2FX3xZ*7yk25Y(FmIb)H`0f7fWcp$OAtCvw6 zSiOL7FRh*9h)v2Zf?w(Juu#*whlAC2lk2O2{LQzQ$qVM^w1F`6!1pIituUh(6pK5C z$1q|&9LEpKs9XLrB9|Sr#euz^#HEX?D=VGo-WGwO7nTo%{zR_+uhc3!(aO2UIyVqF z&`m3m5|Jz;dV*Y4t$+tVBi&Ruh%9!uCwo?341PGC7=8&(Ein#e&VdoOLx_*tCnr{KmLI+ohci4sxJ{2T@z9Zw28#+qH3HH)*` zLigYOK&MRaF5<5)yooRF14WD*O|)wp^IEKj-q<|2uQNiFIdPy5*h52 zSmcBxa88s{*PBGavn{Jr*usbi>aU%Ow{@9D>dEyc*Kl-$ca{Q#P_QSSQx-c&KM@T4 zZd>jEC_u4pUt7{V1D=MlambLEQ%x}ZSNh?87MSwr5G&&?ZxSj9X;naqsJ$1 zgUu2YzWQlZq{!pgj7TNb!&aj00;%-9Am~Ny%nZ+&G_@F<>9M)eBoep@Q{pnX8}zFX ziL#MuqA2V_!3l@4_T@BB&3R-#LjP2-|6}Os z1gAKgEDO}bKxUv4=M~HEjBs2azezyD_}cgKz~Vx=uRhJ>S46h^em9HzuX?18#gLD8 zC=~U5DBThscn0m3NbNlV_QIqT6}(;SBY59H2HXV}e(!OF($_LxrOSLgcuB#A%@4YU zifHt{YuX!QJBPJ5#us*_T|yZvdLi!_4e3hX4rHeLY&=|v$x&{Yb8cw_8DEm*MeT;)QVZe zD$j2h(pN+ox3x|O%PM zRfJ^qjuHzYrlp~vxCiCBXE1Kc>kGwNaEW)^NT{HhymeqE?aVyzyX^{t%rT$ zjS9Ru4P1d4s4>V{DjI&yTanN$qN$~qbe#@D+1)h$+Cjtd9Z@>l=i%H+Z}2vavp~Zb zuQ+4HqD9SXHO z>K!=|sHf*RB4c@OlJOMhUi3$*=9V`KcixOhN7fOr?> zy$Kc+D&m=cq%{Y_5uSJX$~u_^AS`du&a$JXGX>I*9FX3%ey>y9ImEvK{>H${hFI61 zL7U1{@M?&l9|6*G4hGptRx#CvrXsux#T0oxY_BU@gJz>?#OHJq#YC z0JBOnsQy_ZkuwX#-!KcXv$J0)ncXa;8{D46Zo0K2ygKG}yPIIr;4rm)8v_pV_aRZRK_ebOQZ_&fb1n+_p#( zQb$W!YXN4&H987qF~zQcn@>K)WX~9-CcFEEv+9S*ZjiK+>Ic*+aV26{><5_@^iinD z{qFao^z?Xd>Hv!~m=?G`n+x7v~4H`&Inqa&6v=o@lMAah!5Wq0AC_C|bm!l`+Ek_JRpH z^PSJTW5&v_=$O3n1d|)U+B`GY4&OLHFEq<^YpiEJi-!O_7w^wd9@eIHW8eKmc{bhM z(cZlBC1Gt@TA_g8?^@(%KuS9>oMi~$^+&-~-@>^#{HZieo{uPvCciwleMHFC_bSHI z!z6+6GLl5~;z8$w!_~@FG_N0_=1iTm)DLUter}jGe9U9kOE`J|Ne~Hl_pbZiE(Ejp zwz__`Y(4vkYIWr#$|ypi&bx8@*y+Jg-_*RmT>R6I@7sndME<4&ikIED(ikclzI{&p zCsuH>NOw ziCWU&a17o@pUDp_UBhkr@lW~AYX%3%n{Tyz`qM!1NCOH4T3pcMNQQn%LcjF6=u6L^4<`&Z`cUItv?x%WDsN9HkEg;&XyfRIXHP5r09yf7(Qjw*QnD9ho(P_bU3m?)*t!SGI|O4_vI zg5^$hkD`Zxg7ys@nKBE1ZjX`RZtIr?P8*`p%#-Xq=fl@U=ER^NBz6i^%a5yQ5c=6d z{w2X>eCav|nd~Koo@H4#+X*&lCEh!g`9UlSt@o4YfeAQTub#EP>@)pD$P)h1C#mxG zm}G!PcSkWCp0=<8<3=7k#Sb|l8l2*1_`fK73%{(sFYo(Ybaz~YG}0|y7ma|@ozhB| zga{WPoze(WlF}h1-3Um7Qqs~P-S@%o%yU08_iyGk^B}%SSOI1v2{sY*^f0-tk)R4EMfzGPj~k)!Qh8T>UL8^}XH6;g>5 z-u{KB5{EN#${EGbJz)6-w_p@)uufdNQ`IcsR)fsc)!<#qkM?vAlK6wbgc;UP@)FA8 zR&WbKK)?$=Rib--e!jDMHBck?cCp?f3X@ zj&Y-(jL3uTe76qY!EV@hD|&=)toVs4FlA~+ca$?~TF&&NoLYi_ITeC3$k$KuC^V~I z0<~Wd-B`I}+oMP7*X$-tb<+)3a=(D;J(H;BWw&Kf#Q%YT{o!~Hzztl%J!Qg#hL&L8fh|Dm24}$As!@P$_3XF||&4q zH#iT;KITejT2^yYJ?)Cy{HkeZ0jiG;r9rI>A6Y=IvU|{lvQs`f`xq0S1$gcJhoe%v zzT0Gb`eA1hK>xRhlPpYOwJ}bFVoZ~pVmR9jL39K96ldlW;R`I@{%&s(AdOk*;>)Zs zYM(IWYdoWj_so(rU zcj7M8>Jz9UKpwPuuKbxvC#ciJmmm+9_s)#X&x0iFYJ$QPPeluuRJ)ESiZB`W8{-D_ z11wBg;g0RTYWlogF}{0ejP@1z1w>ooWwwY-pq(w7JtGIr_Tu^}sTM}AVogVYOQMxM zRZ28wo>^qFN7G(5xs+a9V90wVo24vrOQ4+;_V%r~@2Om9%{~kGS^g{{s_rhe&c1P8 z&gaB!oHp4u@hrX`R$kaypEMN5j;xnB%KzSFI7JW#fr$c7CGpI0OosZ+hoqi=V(@KG z7PesMefdJ~q|f1IR0}&3*X>{)vaiU7D_1kn0zhm!t`}PX7KQ2OAJx zwIPdSLkdlLz_=ny3@!R+v?2gA$(9JvF2YU1)UQBBi-FKKoCU1gq)$mbhc1ypB1JzW zSz=fOdJUq`TUm1Tl%9ejnL_Pb=`tcfVgzVq2i=vd0*m4E0w zQ*@kO_)C7IqN2n@t(`Q$&%gIXP(BHd4vrrbqf20kez+s(!F&PBln@&k&1eVEM)+R= zO40snSidd<;WLyG^v7{Zhr*-s)H{bhLTtjw@K-m?c`|sPG8_lzBddjFiN8sF&_luk zA~&ud2<6WtUm9xsm&_@VFO1R6foD-ywbdLZ43uG#Qkaz40@HS@uua}saIUY^s4H6` zbPc-O zW&IuW|HEFR14h!^r@3GtJW7Em_}}48S>6HhjeTdZzp2i5u0l9VzbJAxy> z-S=nJs{4<|c$|+LI!tJO!^%4YX`)$_xV~i=`15B{xYZ~OYL~wFlwUUO1tOuS`9-UG zC-11AcWb}EBdFPJQ5W&}?)6M_MbS)Po8<0CH@`!BDH3q6W}~TKJz#;+5dVwJRm}Ud zN$mPtu$dz%S`aA+l8*Vtc{l?^M{XTCL*jP6c@cSC410!@FsR=VP&e>;ZEJr#Bys7F zjB)P~qi*T`QeH&JekiF@O#v{jXu#)59blZ8Iyf!xS4q~){&pR>6;*BDTEKc7g41Q* z)_eS52z0yzZw33bOq~8D&g2eyuijw84G5FRjGDR`H^Y#WcUXf*mr?@=l7g{-P-Db zWXnNjBLweeBFNaH-oLh9y8F{Bw022>mGAbod8^T=;{KyF-0aVL)87}c(Sux?88{#B zQE94Z*+j0uAec~y0OZVg(GoKtw#pwh%Re10Lbh`Eq31t_z+buhw)`ipQ)}oiItky? z_cCvUUcv7b(jWaHZ$=EdqQt$7%CA~eq}iP9FbVi0=|xrgk)TIX>`DQ_b~mjC`sM{K zj)oNBw_O@Nr;VXjo`=G@xM?r9@8?!dPDLN=w}o`4M~lm?njRiZs8c^W5skbvr8@&Z%(SNEN;7g$4tq6$H|h+BBAp*ZE;3?abcf#r&TWW<(iG_7JYOv z3HPDMe!2bmV>~#D>Eh6=Pw?JurwsSN);6=2i$R|Nw4kr~?nT*0pCs}E{Jf*J=|lk- zvf1E_+ws286oEVQt->A8ELLYwJi0fGOruq7VN`Q%Od!+XBOHw5C(g6J_UM!M1@bXH zvV^aj8Xijf{;JDdYpRS%Wd~-A@1Yg%ntMPFK`pMm$0`J-9|li62)ANb#QuGlxE{Fi zg=wURdw`&qee;G$Jku;)|H&z$j+WFEo(g0phT3G;-4A4ph3_D0d7g0-p|I1o;ugsT z|EBVCZy51B>W7`}=jXVE*Ux7Jdsd&l|K72z<+irAm3-Czawr@NCTjusq;G?++J0*7 zD_Q&^w1;vw@mMLVlPuUPQ5%QJ;ZBPlMg}jI&zM#Ke+SzKeCXvaM<~>LyS^FYg1X(d zaPkeyIVw`X+r3W&X|NgkB+U+aP#9Y5eZhZy$iKOoL;R>@1*xz|W>E_b8^KWTJ7Jia zfVqdlF=+eNG`@eWME#)qDK#hE|`83L?soP+%%OzYM)bdcEr}Q*MOBM>RDs zCcZx>01=)F0qny^Iv9Q`_XCZ(bGzIBIkH=V+}B`z{uQ12;)_RbcNBYXSdgjnD+|2# z$jd`yWWSWbP}k-F2=jKF;BK{x1eLu0N=u~!^>F{D+zdX z+X8YI18O<&L(-}lpkx~=dY&jcFPyu(^fk=cL|GUGwHY{#BW*!;Yz&M!N_uNiQTfQZfN^lvlptb#F((; z8Ce>qtP=~xyp(BhCnX$9<=(FzoJfs7jUdrlfA|l%1JyCXE&DrjA0F$zNNLfHwBNUf zHM1M18`6v{Nm+1JBWHBIQQtlfFwe|KjmEcMORg>OS^KgIs>@#X}( zAWjj<^J5;0^8$KOvC|8Bya<{_G3@l$+Y*M8JtE=aPAVDrInj+zcsB-NIe7dzy|!}i zTkUXt(!mZ5*+9S_9)Ox^_hwqP-tYJOkCQx(kd2cnUVQLK4}df%20#rsJA#!Uq<74hLAi9(z7Jt%+luwfAQVSpMk7XfJsZCrnE!EWujx-u{ z^;B|OCu-nwedlgB;4L?b`UpHXHr1E~pK2?wkd@;BfBT zL#fwSGFy0>IQ|Km^BJ>}Q!pMGy1QwVj_SEYqGJa{)-@iwy=(Dzu1lICgKMGPc(Qe@ zL`q4Ze{_2f=ror%@-Tc7Wew!uDuad`9}7EgK9XyH2fKsD0y^geU)3r;yoE z>p~m_?)3aX3Pb*9C3q;XzMVU{EU~r#(}uInk<9zS_fvvY#%>9BtoM%z1<;6P<@*iq zDP*B+m{h?h&tx=|-pjS>D~>^dXD4wm?4O;lIs>MH162eF-CyxUJ$gnEAh{&n@lNaM z9n_%bM~kn{J8@06*gwy{LB?^9f{74$Lax&@R_cc?otFhAQt$b1XV2!i-c~MAtX&yM znFMKa@DLn|2!D5!c|n=?rxY#Jyp#rd%o*7e9N)msh(JZ!=aSmJ9T00qlwfC)`Ya_@teW>~H^kz;<;kDdm3z^9N2nxwgE-BoGsT{1Zl}Lq`Cc}S zn6%+@=5rOT3>NcB>%hxo1U~ST-j5055o)<7*YNgFf=Et|f&%hA$Es z1;JopiQ5`mOPip0N`tSa!adNDg^{yT8@w(C(XKh zUbnxIVAB}#H)~k?bUBp&eP(%E{33KI*MIB6YfNqDLyiuv$Fzoa0Q z2$_5w@c9`HL;vQu@|aV=1rZUp@5jfxGFTDYoVlC1a&(C8$Vt-j762Nm?Ww|r?O%Z- z%C6xe6JJ#?UcGq~AADW@X(P)kY}ljcSE~3A=!iSE;w^VWthckajB;+t(Jful7;^*+ znI4w1nIs_OF3aj5Yy0ML6!39~FvKw`3Otm>HZUZcZbmamcj|Xl%Q3q>-;RHIsXFI> zbvrBQlrI$M{d3<9VkuFBhZ<9=FE$*53RY=>BlTs zTj-K;ZT-|R+MWvPrW7kYmk1u^KakxSPCsM z`o&5)k%!1&J)1%G1_)SZOPf6j6qiLqrNpG)`cv5XmJ!(9?a6rZ4hqD6j@bhMC zCIn}(V6S<34uBg4Q0*2%QQC=;4A{Pe9F~-+7)%nH*;83ouBk-mA$0Fuzr#J7`pCmW zAIYP3iTZ6Y+g>dS(yj^U2$|EcZ6FP71tB~F)NtU^#Mg+$m7(kHaQG1^Ox>Viqqm)O z3zfW!I55Ua<3)_e;Rzvo>Wh;xI1HT(-jhy0L~pn6=Sh0p&USY@M&WdyltbmCj9=uA zv`Nr1E*}=7m>-SiF!ByRJHfkiH2QrN$gNQ~4nEutWulUzn9fZ%ee-wqlsOlDGk1SG zu<(<%dBxAVA^43yZOvPrnl~(;PUN0nm~nmVM>CH@BX+&Jl0*u`+}TJdE~2hq7+?W} zx7{x3vZIYG-)Eh4l@|svNn=>{wD?&9Ml>WZb5Vtn&0M5EMByPn9oSH9e_S}cO~ZtB z$UzmzNtbFFjHZK?C;h`}wIAOiysu1K$OL;!eJa%jR)b{!#6t5KO@!G-6lN}>J9+Oz zsD-?=>l2SJ-8O%;mhwh2^UdXnhARi+^Cj20h(QM~V@K1U6dQFCM{>qDp}VfESmU(> zly}f>xJsFrK`G5d&1Y-zv=YiH9Y|WIBYy&M1CUgQFq7uzr2#fe%id(lAni63$|Fa^ zEG!~fD)u)<1-|bWy$19|D*-5bhHD_Igv=oX&|fx{%U6iHQiGrdAzTZiQ zS!CaoLf30u_e^f=!K!Rj2>5k?BJ;5VZVSWPVg3WY^RkA!=Z>{Xg(7|tl&cZ6S=3tI zSW+>;H#s-V7wb=DKY887hG59RImg)SVb%ZYuW~;xNDwD5`jzepH*WAhHk}g}HFWa# zeN$&cW)#3URM#VT(o>J?K80IAe$sjK$>6Yt)l3C`jl91p%#8W_9*$O<> za)0G~O?dcNQ5h@akdJPzRx9GH3#=g1nealyfr2PQ-I2h$|w4AA*-Touh?z;xAG_t=jHvkCv;-`F)rbbndWnv zJ8Z5#?5RV;n7Ij6?=bw0|7eVczLWx&yb$?}hc%y`7e(kq+k^Ju2JbB)fC3h6cSj28 zGY8L0=Y7qmck5qEjO^+SVMXpalTEDchpWARGqkY$x=pau_ViQQ+tu&cnctfGsWla) z9$5&I@24=jTV-O#4Kf5r(Wb6FH~t-w?MW#2u#fxqj9*_T_oeQs-VNjI4~qVN%g=q_ z#l~8+W&s*?fDQkd?|}+_k&(VaMw>Ptggc`1RVLt$6NQukCwIJSM#L;vo!PPBo;@ zL;>-900s^&m%~lZxa!P-g!U3h=w{O~;h%N-8k$h!G9c7r4nO8~o1RAbheaHjctY*p zS|-p|Dnv|6EB19DaCZ+ZnG@|ElF-Od7efDrfQv+blU?o}w|E^vi-!ztD7E~Vg#u{K zPnBo3otg>*AKF=|Ybx3B#^wp0QWFR7*Ad#Q=+2kbSV!u_E>`62U~cA&`7*~6p)%REITHLbH&6+6;PJL;Dy}(PCR49`rP2Ca7#H1)?pbEFSWFn z4{jMNKuPGAtvY}3L%LJYWLofD2jM@fx~#TYI9|)sfiFoWTw1G16!01LPztDz+uwY@ z)O4`565~=oLe$r=^dv=-a)(y{XMR67+&KE7SW)~7TiQg}KPsCpz2L>*J+Pw8@i zPJoopdrHXs&EN$+<#xv+iWh{b2#g{X(YV`cvQh;YSO8||JP!h^O3VK&uqyp4E`mjZ z;-W-&w>cg8C${a9Yf?o}7UyYckBG-K- zlMB|F;YjdGa6*hM!ubxS^kB#v$?Mf;8oNE1oi4>c=X7nHetF#=={l*GZ)o4owoaJD zF|x_&MW(CJc_d&bIUN<1r7ERu<#*1Xq|vF>JV$6pef5t4lS7>UL3Qb2m^2W6LdndD)X@eBpSt8( z-XJ1N)2XZ3#pN(aCA1LV%7zgjvDEKnCKP7ib6BC|e>Nf~n@b9iW~{Wgw6KT7i>|ld z2j#TTqczWcbEeHlUMq{bfz!)gh1)RElW7DN23ED<-#!1fLdt3y$l37GF`zEwBx@N}2kLNzsA?=Rc zuv|hZA4mRz%Qi>DZVJ>DaaE`3AiI=R4}v{8kp zBhpUHprOH@OckQ$&Vn!%44TSt?%$A8nr=$eX1qxDOy~|rtl%3mruM+4@>vhXI!>1v z@C$SFy$u~QuIOH>lSCQwY#A34`ho2-gqxDkzrpCqBk9}XQhATp-Le?Q$nSKE-NpVC z>vfweX_wf|V-}R$uPMJe*)N%&epcda+X?O1@5q!dayiSP3ft*Zi3|){poU-`K?=6- zmy#F{-WEKGw*1gd{VzUxFgG9qKj*qyyTrcf{G#B0c4Hb-+IqD4A^k+R#|a#ulYo`0 zYDQ369+yFE%*=?%po_uq=EsBzij=EP5Zk-2d%=byY42wC5D|Oyg}0{9$Mii3^4+Ve z%Ktz9CK2c1jXS8PR|c_1i-dpFewOK4g@G7{5nyV;sOQVm&lI3Q&j{yWFrQDo5K}^i zRY4Z<=oJZslwIFd(c>3Rk&$@EKK`IDuA%d%QfIn=fAEn!k3kobBab4!ZE9%fHgAqm z1tkN5XixR4*MSt4+>DyDFVz#IQj%_0vNiX36eCHJCC4s(T*NdD*AWjS&(#Yh{74ziTSG8sSirZFiKb=D1wOR z0gj*xV>tdPhvW|_sGE{O$>pYa3!auD26!59_)#lZjm4h7o zUgGAewKX6>HTjpvV0`S;#qt!V7k(}L1&M@nS9TlaDPK{zT}_q}2`;yGB;ly}8KM5- z2Q$v%Sn>B9{#%`v$`bqIv!lUS?R|S|Rc|kiB`=g`+L^dUP`)qE9B*_4r=>FPAyzTM zAl&sgvqx90^h)Ms@TWJRo$6KkWNk}Q;KRMGVW2a-SM=Wkwc{eF-MAy~rVFZhs>(Zu zw{}kw7!9}m;=`!cw^&xg>t9XdVG52udng6unq!c>N`%xcLUpGRKX`kK+0x1N{ZiTjQW9z#q~6 zIvTZ4^Ek9GY*OKI&n_LJ_$ZI($mZkLU&xpWCzK_BdNLOrPp*Z)SZT5w*exUIz+)e% z&J~zPi<82~qtZ?gr-`4A<|5^Z)R+A4xUbM`5N57}4y08Sh8rB6Rctpb@= zdg&MujFI?JZ1mzrllWHqOa^JA0V zi!$>1wqjmfyXEwf!5!x60=~V#iLpO}uligL&3*HzI_B^j%)lk}TMfE2ov3hVyB$Zx zY?UgnC?nxfNg%!7Y~^ z@o!#ka#Ka{JROu=aKCa_Rvz4%6lT=?;W5MUox4%B#f9{^e`8h2cW^@?_3Ps1Bc-yY z;LG7U62|J6Q^rFR9xczD;OzIWH`RoQFoGI03O*I*B<_&tMYuB$giQ7kdG9(eoOU%$ zs!dR2YgaP6Z^k7T2iGpmA2}~jJRe0jBboX*U9Gxp3LX?=z6H<9nEzI9rq?sZlNXWpJ&MLQF(WF)-q zQEcB?6Z(oB>>@@=6Zn>o4K1O0(46*9^}mD9cg(%9oxoC^D5)0CY*6BelsSto{^#`) zka~tkT;b#v;pVbM^fFhy(%@)%0+Jm$k~%jW98OWix#Y@s#LEG8{QXj*lN6Xgq|}nD z1F7`_q2EroJKp)Cz-T!c>U#*(3_eJe1ES?$l-QCd3Dgr&OEbD4q|+k}vMK{b5d^Z_ zsAcH67I9fvpzNNwkjfIzm_z_84>j`{8ml&53^MssE%MUW8i=9%FhQ?Th#D?h*b6oD zu(%B#DY|hxj>*bzvQljwpUu_)5hON7c1U)Qh#(9+z6HAKyrJU^5=@PN2a=9R?YMJV;VeL=9mJcORM6=WG#QI_&?cN9ZBm^w1 zj^Z)XBDRaQo^>oqY;aHeGY^KSt;9H9 zuyl#JHE80A;!3(<9(Q3YfRl5`M=#pe(?Xt0*MHDP9bUhySJ}Qz<8!YtK zv)8{*y%R7*plq8bgedgsu6pbO)19vjFnXYXIVxCftL+6lC$;KwhQO>K?zmy*L42LZ z2DdC^HQeM=0oMo4^Vy2k&99Xz!AYb*k@ye9ZRhM{!YJhUlj7VZ?Q-q`o_VZKSRIxuhYbFIk8&n$~=(dZ_ias0K4j?ha+$dBHi!tGc}`T{s4 zf)mF;`y+&8MI&nhWx2T6GW=Xa3Up}9jm$U8J);Gl=_8tRG# zxMyL;Kj{a|c4)yaoXKX=iLyKcK?VT^G*x_N*o?Fuk9U`a)asaeu}fosx^&be#NL#C zqNm9-&%emW4+R>3N0V67!Bg!XUXf-)OUvuS*}fsDLW~;$EUkpr+l6idvHmdXyb?oR zLRAXUL+Q`!q>Svv(4ZwX3;wYGPQ=;HHcnzDLl9Oo+ZGsf_dl0lf*y)Xd9&WYIt*Dj zBP_iuzimLIwcJI zW*|Ik$A}yf^2~0Cy+vuQO(Oqrm#z2^sgn-DBI2LNuuz>FDu)!DT^EtdZJ9EKJWs%S@KVi<+7mb z*Mj$77HVov&-&_Z-XwPr>vh^2`pTI4Uc+>6%|1(QWoBRm;T0o=N}{}{0ZXVPZ2hC3 ziQkU)qh6+HdLFM=8V*|`|CE0Lz!AePwV$H?`P~eO@XPIezT$qQsm{^9=LAA*fflJF zs&f_nzZlynF=Ocafaa26bkS&}IyJ@xl-i}%EueMchIyezNVA5=ps8!=A>a6h}#VBsT+A{!g?Ez1aWYNB}ZU25B+@C)0nYQ{bmp(qt|3Hd`}vKlP9sVsqo3S=vx;o< z(KH@L^RI2E!+W7u(zhgzC+E%y$^qEAcQ!dTo#*m}RgL!nEYbAHTkqw_txLlfQxN{) zrTFAn4^@96!sul6$OmoEEBs)M^TvP8o>@I&2Q^HF><~TutXP^#gRQ;N%emC2Bb0Q# z>QS$48%q za);e`?G6*{klQLENYWP9=@xadsf@{b2+Ml`TM5H4NOZ6^e;>32vuxLrPpXil>qnBN z*W-hFpD)h2*bam7Hs~=LgnTt-7So?IZM#V2ZZ2P8_a8GUXY^v2?I{S;gg83xLTvG? zRCn+q_}OQ0d~`(~+UWed)Cjg!K*3R5_kf8eb?yfz=KeFkF6PSngLOH?3VvliJF%Bw zhCcNU^yCBi$Nw+49;HRG))yO33bxR9W*$yg?W+Z_DeGSZTI}`nyVj$IOoll;WZxeAwVe&)@ zGkf%qeHrynO9f6glTq6?I;p@(c*V5zBY^&)Hx5GGEKmP{?T?+#XI?gX%p11?p)?r? zYV5yZCD~8Raq87j0h9IX<0pBPrXvO8|DH=;?xa4ns1(EYegBEUX_=A*0ePe&%O zZ9;ZloM}GyahMS!;@fBVMOvT)g0rt5{IMv(sl$a>4+=-J$yz#)w1eWR|7++rPOzBI z(ACk$5*d41o-t9<*BjC<%K1+{_xm@#H6l3WX`}CE)MJaY)(xfuZL_ph$_@&1}hHwnY(rBplsOQ%K9!|6NYnTR8NAAFq_j7CHEJTNss=u97GyyLaAlMx(ci{S!4w5I^EAI?k zk6W-hqWuN2oj??*+#7Ly-LqE`Ouy)g-3Xmdq7hJdw&>L1!1)6YiK(vF$AL02WBx`&w28?8A90ty875hvD z#Lv5ALxG5-4e}6yggV#X*!}2O8CiF5(UgDh?T2_^9r|sSy#_Q=tFcf*q0l#_e7AeU z6}K1te?*r8DZD5}#hV!yyD&8Hk(UC6{+@KuhaG9gEcAvW#^nex#B8X1VfCMSBxnqv zxjLIw-ZQN^*Vdrg?LY&9sakY_(S9#}~J@WcULmr%H>%!n1I32Q_A_3xgun}Qt2j<_E>G5hTj z(*3_tMZ2F&q9J_g1xk$?U8g>4hvGbH@;X|vm6>nYjfuQ1)8%b(&KISKZS}dgWts9q z7hIr}8pW7KbYZscSrDPZilRW+rBzZt{FOu%HbMwS>=7SK*)W-xW9dh14w+(SrTzZMwn&sf+@F%{;7vQKVmAsp^8g zA^x0}nYKy1SDQ3C?ya=yYRS4iddzaRg1p=?xw}_V1J;4=FG}i}b&o&$JN$Y%G6>*) zn^7Qoo22VH9;<<<35CwdL{YTTX4LarOw|GE`a=oS$i{T~P=YP{q z<^5;vRI?5WjHpNQc1sl*3+RUVN^zj>+zGkgjoa$l+R!4xbna+uEW43DplD=}1XzFS zManjy(~&w!;>(RAs3l(~(i3uhr*+&D_xx#y{yG-BFVVW95n}kavhne#I3@IWon``s zdmRb{{y~8GSN5eEYy#61DpVz~aI}9}4r_X=e03tva;MW|5$Put*eUh6nN0CUV*SEV zfZ}z0P`fNDaQnLPvXlM7-dRN6q>I)xl5c6Xoj27{S&Yk60?{mZB;zzL{um0dsY-qm z`>`prPNyb;lI?n}VknQ#90GoRQW-0e)y*&!rmNchcsj7g|8!Xk^Q#UDP#xU0jDP}| z4>^b)rjVkJrU(tXuzA%h zb@O(a2!29_@Cnx~Bh3TDUhJ9$g>~ccE08>+2v4t0Nsc-G1GsJN{x{1o;>mxs3{OJLjGrej2SQ~e#~D=&OXLS35Z$kKC`w`JJrQSF6!C2UxNY{Vr3?@=-&t7uYm&2LPUVNplkK` z+E=1Nu)jnE!3Q1WGivG&L0E1`kbpHgezx+-OQbg2DR00zZ zA7rUNLjuTcfTfdX0awrN!&^w7?>$!#|I>JppJV-B;7a-^Q)-H*AyUMWtU;PCq86AK zJQsmaP~aZOGE!&(uzqJTrdSBgejCS~ViazID((n{vP8Q4bd|}4wHp>N3vur13tt=} zvr$?JIG)%8eo#J7nb>j{dV*;^#f|@x!j9lyn}zKN)MvL|$vvob9M(3&v}VIb&s3n` zx-nrbK*^Ze0oY4tK;H(4ppp-H^2W0aFT`>b0&kOl1UUY547*&qmGdt9R*z_QOrRiV z$yFT(fq&}zPYS-F54h@AR(T7_~43y6STXpCv2NJx>wc-0Rn?7z6-#JCBypI4dC z6cpq%;T7qlm@PDU9C^))>A4zgzByQoe6;9yk1L^?wS&b)^~#uUa=U}AHQC4sC(|J7 zN4;&$tq;HG<*1iFPQc~?cITEK_X$VeB$sWJCJ=IfGanPwiDPG>KW&Ye9K*cUFHKhv zg7g9@Y^g#M^3IDe2QTs?qQV9SVs<6ohTj+z)Bw_{Nu$8MefNSo-VOzokQ)#fM<3{# z*}P0(MzEj(^??>}K8_0TpTpd(9e1U9(AB7YgdzeQ>M95yuz~I98|5Wc@t|r~#wLXo zKK>*RXlCi_LB$Rc3Cv~4<>BeD74ACZiFd*{y?olgL`M1D9us!YdP;QZA z%dS1HEPP4SN5I8b*NMVG0ZN1FjrN*~yVJ{=Gnt`jPgCy40_8V7+znXttQ|iYP{+|e zTqHqoMi{$4Lj|nxv{7NdiWzz#G`#=VZI$}dv{Ee|$x6{w z2%qE_;1%(sw3nVaQ5Gw2xfNsI&!qJq*xd8E<$w#;E6SO5(CX{+6U2J|$^#qgDj132 zr31KRVJ;QElWy9^#?!KPmC~&106Qg;wA<4)UCJ!NuzCF&sU|%0Q;L5vZzV`&-zp*| zCa31Sy%k?G-jX9@sy#BGG5hon&!ER z(8CdUJKplI2w*owgL4M&CG z1T6AWdwS@von#jphwSj)7U3X)ZS*>96|ATS7{vku(d{B37?g%xStwJ_(W>SCMUS7>*iZH!x zwbWED+#a?*kx#siCJL$Xbhbv#cngP&u>AgwwdgmvplNW&fCrx6PvN@BrS7ud5ZE}} zMewo{8Y#iqGZ5%kal_jRrfV>_xVw9)IdSiMoM2RuctP0-pnTku#Ea{d=7nWiQfEs zMPKkR$?)9)=L$3>v5>M9(JBkA#OGYChOMXHi&ybUa-r82f3GFq%I0&=Did|_z!W?E z{pT+oTkC(7NJ|l_kRrH;OBnaZf&&lVkHzI2X@~y(_SIlSc;Iwai=M?cbM)Qat&ck^ zG3Luth3DAPYw{H(lnXgl)8wFBkvqm~@N+s}mPGQNSB~Hx!wa^(`-<)mr~K>Lq@D2| zmS3%W0x^r4NY<1Hj5ffm#_z-(+h$K#Q-kx~SeE#G3Vn%_SY7X0w{XY5Fn2+8oQQ*&JqCbSS?{X;UEx>Rco5F%Jrky<)BQNXf*n!IOrNvlm6Qv&*6>N%T=yqzb3!)VylA;ug%7mmv=eu zH-7dbmbNrzA9Z6gQAja;bnQlb&M&2$buskiy8q0#7uAJIY%BR`$mp=++pzxx>ZCMl`-&IE$Q9u@^3>iM-rDZq7@iq#0mzdPi!?em6=+BE* zcxlut6Qr*3q~Li-MtOE3aYuX@(_@=pAmaM$A2UN-IP`vii4y~s9h(FPgF4+#X6PJD zp*swvrQ+4!6!XyS3VzOD^ z4AN-+-U5hRqUO-O8_ig8VaBL13xEcj7mTNeeB?KadXc8@;GnJaPDnU;waj^WG(SqoVYKtYl!W;={)~&47QtE5?8R zuJl$wFA&=L+4teqE-hpY!8QV5mkrR0Iz;T}ewic8HSP2>%ZN1W;405i?VyyeP`&B z?oR0rk?xe1k{BA1l5Pf&Zcu6IQcAiRq#G2FZX~3;Im5T(?7e^cI_KZH=9+omwboPj zb3gZ5jKwK#$stN0w&Wpw<|Qne2i*mcE?Jlvb58H7D@l#+9=+h`CXW1ykduZs$`&lH zg9o=+6Q%qh2Y8|X--kB}FkvJs<9eUs;j}&0z!+N$IAN0Tzd#pajoepr_0z8(l3U1| zmuKf64%H7vpRE#J@^x`6++w8dN2e{SkRoXbuZFapNveLd;@Pg{E>j;pP0PUQZ1VXx zXHi?HleOKC zPI~j>-@v6DJ_$zsE46zJFlv7xDu284jZ6Vf4;Byy*Keh<6ZQzkq^JDH3qYAD0c~IO?M&jHnD;ku{xhr(Uir59{L-S=d&{W9r--) zd{N=4crVL#dYny)?|3|Ghs(GD!GS(i@67d4acldFku$c)+D|n9B0R|v3a9?Zqoh$w z{yzBxfozN4vT`!UmUw4=@UG$Xwb#tPM;ZCvIe6y zD=G^}R9!W#Z@%MvLHpaoW6vCE`hFNgSh1>+5k3T?p~CbhoLTS1Cne-_gdZMU*x?CM zLoo0rYv(SV$4IV{538W;g+M1!+Go^fbm3J+bp9;cFX0hO75xdlc^ zAZ>?osGDpB7{}jO3~pUUao@kf$KBq=`$n0Jn|3}vX3qQhkG(NXit`zo@He!sqt{r+ z1df1jdX)!Lj<E{g-`h zkP&bY17$U6+z-EslvLKR&>hpl#nClACRHBrw}>sCA_QFT$a(4%CFH2uNo3%u~Ye{q-J z7gu=$78b8u6ud!R`{0WWJMQmg!Gco~*_>;lnG1|z1XZ=Qa0)sr#mLURxFlH?+6dpzY3zax*@}1& z1ZWb_%n%MO__B?l#lH9crF}hK0?II?IiYJ`a_%6AAj}XD;>Q=Ir=8 zi94U!pAzrcZ>JAM=X3gM@WUjJ>0u@lHd{hg7s_VzyuSL?Ne6u3J!{TxfFK&|4B4y^ zc-Kq4aLd)JLft~SVz?KNd1=Ik2re7;j)iK1O3KUc`*EZhBsWme#KgpW)MF3#Lq&dn z%jm(kyTi^tY&}(b_wMgilEfXU(A=>g#bSpErT#6-zRmPSgZ-h?`}K+D5DJl7@ma!e zCcZfvW*j0`XD^ztG3WP=Vtiq zsVss$YG%>H5F59M@h45L@VIodnbX|hWJ$xsiJen40GiuQX_O!yrYo#cy7L=XY+ z2I@ngC}*Yw6)Wg|KLA}^4`=c*L*dZ@=xC6x`q4pUYMK!Eh21xKg5mdOs0$+CUQ_HV zo0p5=)$-o{y(Oa?1)==c_uu2!Y}#nRBwXKJ!z2@**0A{Yiuk1%d7?D^@L)C{;>?H< zYDu&l$oWkZTHN15iR77c#g@O?i_fPCz#!c}t@5xE0I(211*kQV06OASFyISOkhL+ zIZ;TCO2T}hTGbAeo$(O>3w8@wi69MPRkf9C+Ty7{J*`@ZewgXrX{wtU6p01w(V_*_ zH|E_VIaortAM-R==YRqN>Jn6sY*Yc<6fi`9yPd0`ZZCwE`yJ|V1-Qy#;L$^fG!#J= zs6u3R>FrDJ!{MfTI%@kiR-e($>3LNotIZE2{yAzS1R-FJhP@&0xYMC*`0XWQ7nG~% zfj3u+nqE84rEpu-w%jhb*bu$ShHvBHhi?1t-w;zYV?+Q6@E8f{4=n&*-UXiGRZ9!ZviaJvgRokkT_9X{ z$=jl0rk9cwS2GVy;u4-a&*Lvl&`W3%tU4xl8*!?tc(*XX@<>3c_>q6=SvZReY6_Pr zJggL-QHvAzvO<;mHv0nuOV*aD2){jUI=XExZmW3aOSJe}O)av0J2d&e>|ii|zk2$R z9UvI}5YMHZ$XJbJdV_91@O-t%j}JY;Ko=>fbTj;>t_>K7LLg?Rg5Cps7`ZKo)`X~} zHR;0bTm}X+dSS2_+*D(vmCNi?r`uKHCBvI*p@(zqN9Ub1r?!PFy}x9S#f1*qYv%PC z6CMLD>a{$$_Ie+4dAx1;eJX5pOI|v750si++hJ$=&h?o;uT-C-{4FQkn6EP8>%#4E zT$FC*u6}0M;jI*|P7+PkM=g=spNWx zB*bsY)pTzT%?RAem`ZKeScgS?LaAoos>qlfpP?b-|Ag6UkyI70JAG&-^oFSJHmy%O z^Br#E-{^EF`O6s623NjCtR6z32T{sokQBmx*eolK(^u)8kv_%{Fw>JKfJ`!z)To?r&jFx0^XFJX=6!jq)!JH;?Tf%hzo3h4jsK*MVtHGTVGI6?))!yAo=BSSZVBGVyQjUJRsOjaj zM6}ie0Y5Ky7!$`teIFXK9UkW0iL-t8gX?M^xTcNL@km?s4!p&9KSqViYNf0Y9}IHz z&)Qr%n^MN&{`t}|lk}@=fNAhXhppfj<>>) zB(mztgX%J(vUwlKVnU9G^XJ=72XP!Miy7bqPCNOP7S3lXVqHpBllh50j>n z9g4#@FHE%L^r~#weNK=w--tG7M;S?fMG&>1#Z_eocwUsCZ#43=3MFQkotIlGzt>FA zdmefrj-k(<@DY;KX)+PLpAr|V_&pZ&-B=7RMCddocPRNg2>}#g+3Uq4&rCqmf$zd6 zj^#GZ8Xb+cV1>U?TAioj{bXl+Ug#tib6f=m+vS-`{MT=V&%{PbSq znfhOe5>GL$j(v&0DK6P%$OlSkC+>km+`}`<{`3L77Jpk_Zg3Q4HvIa{yTP`O)&=FE{7IQ9L_CN8sgy~nebrhWG zA{Hfu%XcZDWi9-s7IjPJhm^Gxrpz&22M@Bg9B<<;JlQN( z{lN|Gdb=&LbzCi^hl$>1-Rg6PZ>cxMY{^$zUmy+)i`*p3coJ6WqXro{i}B`sP*XZ? z*YvjS?g;4zzg4xpbOHytCv779acFZh6!myUjy#L->VDLp8^N*v8Pomjz)PboM_=so zUZ0#H^nG5-2Ctiz@ZN&+` znDJNc#`NWY*gfp;t9b@1h@{Xd0HF`B^5|Jl z&|ARK2hZRxPgJxbTJ2@ggIL*4+i75qf23h1nCOzUH$8)Xk~k1_7y|EjSq5ehootRI zIxH_cto^tqe(6k3X#btb-AN@fT{H?;AhjE`=1rhT^6}1OWyr4?P7;^X{s<*ZvwX(l zu%r~lnDXbs9|U*feuaRrdBuk`4II^fM1E6>%uI+(P*>YE?Y2x^v_AKj)wWov z_6l3g(dV4ftI>S@(s`hgcV0q)9n|V9hMvd}bh}GZ$H*+~{rs!oo0W+$Pz&0bVBvz) zu~e7rVTw8lR_6_PzWgB9425M7!y4^*E?25?qvEu9nYwg9=FVthSr=B89qnBI?w0~y z`*1_x^)~Oxn%Wp+s4iCHz+xjL=#2~gOa7=bQnF;S^Ut}#AY0FH4Yl{iS_Mqq*>AE{ zS?R|aDA|4&;;vHg3^4D13hSrvH|SXK%y2#>U;WmwQ`WX5(1n&RQ$Pq%9EdFb$dPap zS>oHEl?ka!a3|$YSzlAU<41o1l>HQ$UeU%qVcCTrK9I!^t8*%3}Z3)?s#vdn>v>noz)9SrUX#kL))V8%< zk5gW=(pITdoGymIlsLjMCw~@kM)fJ?@s*$hE~~i9xm32$+erwk0Ac|ie8xd`jt_5c zddHp&%@<~#+tAVy|K_vmg`%6Ip*G&jGKE9ggboDojxO!aK~o6gYy?`-&XG~ifTJyT zKiPqd(%1x*DSjDN|29D>C1IG+K+HZtf^FsVOkDp^wXvt$K^@NzE_ z`+LO4CYGFUQNO3;I20kk1uJ#|AB!1vEJSQg(aBgP4Jv$(m6%Gk>8> z8)g9ZMxa`?I8~q--Rh4H;A5M7W+{&Z!@lVnFgYA3c-M!ua{jWk7^{kcEXH&X%M)8T zVHe#meoxH(c|aVejN)Ez19Y)wu&=Ms*y9z4zMu}T zT$lOP&qDsxdSCv|U4DBPc)dQTBSBRzesDoJpDVDCsMk2C759^$J0u?0*CmxXWq_bY zk7V5wCk~nCs|`@ye7Bp`D7pW$5&;X5+?N^T_jh8}dyVU$LhTrKBrX6&-r^QvFRi(I z5u|3{^Gkb}EIBmK4QWNqPVo~Zth_BaDoD-C{l+ikL}TwqHFZPZ1p+96qEu}YO(5H2q1H^Qu zjXR}6J8oG$C#JyLhB0F`HA9v3_T8h3+Ovt*z_@3rTwPuR<*s|hSShelglvfg{`eUc z!_%1%YRv^op}XA-5JEi$;9hc%@+?eLnDE8 z9t$4$w$VHl4Kj}lH{%_(u8Hy`#v=8p;NEE3(khs5&U%Flk zl(-8YiYqN}I_HpT%Gjey)b{i?$99_ae4{0A#^PD_mWFAZ@lKIDzf|Wep_!7(D@HF2 z(sb#(@iXg%ariUD8qD&M+>(QK9xF(Hp)g#XeZ@$J1%A~buawc0#-RO(;4jcn@V;S;9ri#*(Yomc74f1GVQkkd z`I!Hz4{&xOlTZ)^6%lv569jAQdM@pok-wy~r_}G+yN;<0ClK{Gg)LOd}mK#0)MVm#^^XL}f*wpZM05 z#M_G>9*g6|y5B=<+t-iN>3BZR0UU)LS! zJeIn^M}ZRZpt+qFf^C#3CqF#VJNgEl@R(p=!4GvV#cAkVMJUF zFEKJ$6+|Kt_xibMa=1cG+#83f-)fH~oGYlm4@h4_q(^WF61U8X%amkzx6gZ4UWw}Y zFp{q4%T?K!^6s97=ESmdBmMz`W?uu$82Q;9mzO9WuX_id@dqB?w#1ij#kK!{-&$+4 z%3U-uDpGDGR7Og^+DYZ$b~B@h$v0-!*AT;g#!B?MT3m$75!+@c6+HcQl>OHV3KXv6 z!%P}^IC+^dl)>H-WuOuxGP@%tHyx9KCasQjv9GTuUmZ!Fj4{TtW^KX&bMz6u6?nkw z9uKPVNqYFz)~@XZi%f338ZtnYP1iMT_{2C#3HphQV9aP0x%a@iQ~P;|ImilQ$FgZ2 z8EyD4e!bRfF?bf|dKAJ}&N>5UmT-P8jJ@q5=y#vk=!nIcEj+v(`VfZxTT z-(&6Za6^FMz3*}fw6|G<}Q27{)wr6&U%+IomJO$G=8Q3|IBIdW?Ke$li+ zg{p4ejxTqJQRNKh$VZRE)CMM<`v&gN)e zTs!R|sYA@-%Ru4dzsqh}P2&&8Q(qq1Eh}d}w@&!9-3ukq(5Dd8ry4u^GRpCkYp_(a zf3y1(fc`uc_h*LDTvt&u!CDpcZWi9|(o0t@0z^$V zOlHwiX*%y(_KnKS4{m8a1&TZxnJX(Ve7V(r{T&IbOaNSV+`sXd|0I!d{jMGc!^C0E z1RqJ<(Lbg+QQzz>>xrHWZ{7~=>F;9(mC`)nOGgM=?%2W|3=R64}3ExwV%+7q!qcF2Ar zHiU(%pII|#z~cuO^E=JI%E2($suUrx@x1rPFAl9W5BNMx#;0{7zw}XCv^7SGEmX9l z*O)CYDl9Vx>hNf;_jO12vpL%M+>XL zlFGB)n0i?;dRw}&{v@HCFbBA1)_cYD~}D9)*-w4 z-Hji(+5=UH1WS~mT+Lvb@Sm+Pycmm@!c^lk@udCX_yfa^P|R)hV)zPhemtw8 zPbrjAj`I6D0<`L5R6y01e+>N8>r<_q~jD8U_Ja8)_L+}KEEynujA#ifqQ*h z^+oz){!HSp^7dV}*By?3@os6P^wyeBz&faLclzP@(;Jj5gopb>8 zpqC$RHsTLkR1*TsQLebFY*dKkB=2;Tg6R6**Q2I=hzGk1weYmiL6i_-~^~y^Nvf90lsB(}G@fx$@N%lAWq?IH<%q@`%T)y1|ac z)M8{+Fr3EchzG`?#^PNA>oCcQCrgO7W}Xa#$D(>%v;8z4IMDiq$IY9UCsmQkJl(KKi%uC(4-tYkcq-%|=iOLbG=0`+7QE6)jDi|XgkO{WAPb^wR9H%+9RWB8CgZ^)A^*%2DeYtVMI8D zG>jnLe;V$7`s}uA3D!VENHV6bN}10Ls&#psf}UA3@OW9SwZ)$2UKHV>=`z(rX0hufV$ zV258TGT?;{+?Jul1~3LgFNP#BF)3CRWrt)bkcvLOpgwt#8x0}I5kGxPF+(Z?Nr%_` zkaXzx4GbdC6FML>BwsKi|Dn#N7Y=uO_l|E4=(D2(sxz;gjRGIjx+@gsjI(#ezcVf3 z?u(f=fPjM--EIcd0N(6W>12yFM8N#@NpNdUcjagLtH>;FEh;Wf=`d&k!pK!*CpWu! zy&*dhpBhEFg9!~uIu?{5`YSCH&Qk8@R5{g2{Tr0uC$54|yIg>3mH2H+-d0A58 z8eClq*Reet7q=v+k)N(B+{69Eq9g0oym`CLdo5 z23-J(TLMnkWTx^a@UB#l83V!xcgaWyFU-Iwu@QC)eZZ;CXD~a!K^Q|3Q#1kNPNMQ7 zLGp6@X_%r&JYKfB?cxpy_g&}Z$+l)DJ2H!E6=FsM^b+8yV9RQSB!2uvGJ?*(Zb`9Y zlT?Xmy5!A79~0zx$bqaA2`D;jTQdIWfZ7zh7>o}1 zRrs$fzPq$<~n(kPG1GkI6e z5sf0wKfrG}WOX;BrZe$U92mjwz_gp!5{)bsC$Ip?%vzj@r0J8iKZs<;WC4Y4Z)Bk|l?J883SC{J~>mFrIbjA^ZC@^>T?m!+r0( zUwOwm(HsEVn!lA%`F$Yjb+U)8>rm`jdaNCkbrbQTP+>4BlQh>U<16hZ%-1Y6v^t#4^m+|Km+%`uN7r)oaZnmKL+}sma%;dab=RB%dXu>W!CV?Q zlN|vkz#LHP`(WOfE8BGPGmbitcB2|CTg8 z$6SyOALz>4qW-7Dno1Y~c3vUJ-jYC`=lbm*-%`EVB4l@=Mv2I?;c=Cxt)%WDng46M z3ORiSd!s+>4YIR!^LMYfAy=|cS+uz|nXVla5pE>diwC_WKOOPME}h%3gQNHr?XTWN zQ#B>8D0rw|9k-8chQ~I|2+Kfex%r+NPuquwD0(S%b#>I=VK}MJz|Lc^EQHH3|4AJ5 zo2ZI2jFkBk<*s~BMY&cuscxR5-(vmulQc9ZWDUZM?$$;a^-Kk>^;etHy;dV15Wy=l#V zYg9`%@!RK*aCsClw%Xezo4hV%vAn-l0i9S2N)ZQ!W^;X3++Xu$rTC zBUa<2${_)NocXpXZht)aO=n`l3~&x67B=QH>~nq&)9KJ5(OOkhL=|HBU*XR$}}4xm_QimE4z9z3-9tCH#s`LqDTuzc4%g?bD6q zqgBC95Y`eRaRP3~kpXB3)V; zNG@&8WBW)R7#8zbJmzT-XOFnT$ts8>>8~FqZqRP70>5=u&?wOPn>Aro-NDU~XtO9=j0@s`nMQm|su#O$~%|aAMN?mH$BDw1v$@bV@i0co< zUm<+c812PRToN2Uq#T@*YThkOc>c7(pf}}ozkJ^?SMzMCWqUFs`<-LSXj-ToFCqz8 zTUPSX-vV7y5Xox!kPUn)4I;6-bv}+N#}b2}bI&7jN?FnGip*b)S0O zcBzT-<-*iZb*8NXz^uzMXf@Z;#FgXfR7u{l z^D^7r8T3ym#kA&uKOq8I=}n8!vVScOrHvIQCLCH%NUqUwy#FuWcQyzYbAWC&d*fEdGI3dRuj8nF?&5fKnDSR3CZN%3-Mrhj2{@9C3{Qc4eEMd;iXsfC9VvH9#=0Brp3&Xz?5~C{N)ZQ_eHj1$?jr zccw?f9rv%#6fZ;f+S%yF`XKK5ykuuc7R~~2jEhc|z&9aTT9i`}zh0+zh;Md+iS+Eo z9D7L@8J@fm^#**M(3BG+!f0hV=^{)=j8>1cwt(Ed;r*$sPW?<#7 z(^fm5Pz0CMKF>#wikZecnge?7@r!rd$R)Pg_b7H~RO21VG5rWp=zlN%)2-Qy*-u-6Czz1v`ZuAhttGdSP4B+_h=*fpSg68q%B;Akg9-+L)YOLPDSSB zM@dXH>qoEVFB`v7C^mC(;VfVtOYh`wiP>H}VP9N|wV;`o}=UG<}D^}(3Y+w2; zc~NP12^&4#FufHw@1qUi5E4+tK`31oX!@~ zoT^^^T!Kf3_WB*>OWk+Vpu{TloR+%=6ft0`8z*`p#HYAbWf zS~$F_AUenBS;|~y<|O6_CB=%8wAv15Qnj~I&YUtYX_eUcdy5H_v@)cUBGMdqCCj__ z6(=2Z<6Muwa?;9);cU?}WL?4tMeG)KXuP3a^LJjvQD%+y7?vjLEFi6t#lbY=bpqfg zLL0Y|j<2#sj+3((OBDV*)waRbEE=4w?m}len|-;U`{3xXc;iX`&co=Y_?-Igk3+?K z5tKw@>Au|RN-|dg-S*-4>g+zjirN$nK2E3=c6%+j6|=0UDNYv>ono3&ijR)-zxdDb zKg%ur;_9+Wtqe35W=4)3mD5Poo#v|~e+^~JZJ_!6M*q&6T$H*pJ5J!1R=AkSwDx9m zYf4`9^yOrJUFVFx$0$zYBkFcXk}4?Gl>Jj(y)&xnEup`gm#yvEz|F)2ZS%XFhpJaD zybHg%&atdXP*jsFa!tQnM6kO_>OcPB0^=_ZSMBy~BOs2ta)QD0xlyeA_=BX#bnQJN zOdeD}AJO)Nl;0V&`$~C}a=;3d>b?smdNmHx96K%xWqFA5aAt5XATneFxprd z26qe)goBfX5rx9Kj(HT1z-3X}WpW)2v~!XAqPPfzC=72sDHRV;1n(&?ls1g+#mM}%q;kMj9N$E(OTT^$hsT7S z@!O88xdz?e0qZu@Z9CD9bH7`!Hchc)iLgx`#HT z{2m(PH;kx=>K(1OuQ4w9|Ky>=PDNlruupA*IAHr3)Zqw19wZtp3K2FY#53wqUp>G_ zAA-t`ipb<6_nVr?gSQX03OCIHX5bzw1If!UASI(Bp`hA*YuIkCo#lmM6s)o8T+(qF zHuG(kqR>&`3X-Uq@*pPQr_$>F&Ga?RX)|e)_IFSNvDEWIG0oek*vhFzRwJRU#tpc! zX{u3zZ+T7SO6LoWXFfIt|#$*8#wW^Sjm+nz$t-WdXW7UJt6O8vpCypHeRVt z5uUIHS#0%$Kp$kDa);I#IAEtwg1SA1B*KD>xKhL#W?d!7jd(yAq~vHFl98xm*Z4rQ zM=Nc!-!N@V&7=}OSy=_O-M*3YpBRVdUr^E=bg0XHo`09-TCD6l-p{RQnTbDfD(Bi~ zObQ(g@(R-$0{%{fqj{qkVyOWUDZr1)eK%HW>j|>}N(aCNULS5# zpSENPW{jXG1D{PflUojBZN=1c=sfCZ|1}jN|66kMk{NMGW-(w=dY&Oq` z;`D%zsqyP&%(@AZ^MVLSfJ@(xfZ|0*HmPXT%rk|*;Jw3OOn5BMlN(E!zFVoQ8M|-2 zfV{e+4E!6}Jla+~*M6;azSxOFQBJrpUZ)qJJ&H9M=)JO*J>Dt{(vM3%#3=#8;KepK zb_oOjgEFJl-(1Qu*XX6Zc2Gqo_%xANs2UWA|i6 z0yF?!J|t)i_?Fob@of30uMTkLGJ^&$S>P3lF(MP~tC}~YY_YT&iik{2X;|nm4RU*$ z>bhJMBE(ohirMCw2ioB~Y(Gr$Fsglej=itnd=B%UiSBoNh?6&?Pl}J{eC{Y8HV0GM z;hagA#V)8d=Hal8us2j5n)o%moNTTMEa*B0uixB`F?fjmJh;)hj1+jA>B<6FH+%(9 z1IPt(e`f*A!PHmoF@N-6+)!qq3LUmll=+6QJRU)eM?{oX9Pi{a3{fI|s!tSRj1wkz zrAr+lr%X}u(&qB&TJZw|D8!G2=(UV0H?KoJIDzgP0C@|bbu-a+y{9%nf?D4($ab;- z6P%NWVG`F4z*>L?Jv&t(Gaj0h={Puu1+d(qCo$Y*CR?7z@T|}iO0oY#txNUzIIZJ9 zuls%9c_^bjo^8y1|8}abc^(@YJcXR6qh!j=BsV&RBub-stM2n3s?& zi8+LRDmSpCQXOD&#$F+56mjiL*n!lBoW~A%)@ubhs`B_U{HM!Jc&n=pF=_dk>w_C( z`!@e-Z6RBX>xreuQkV#?vc9HTu^$;LDLRzmRGOBGiXC@@ref;(0n!s-6*iFu#gqqU zPKBhbOI2|?e;Bux!t~8rs+x9Se<1@>w9(T8<&0_s-=ab}5NgwBf$g|>I8ij`K-zWt zZu8aOj!Pj4EQ9GuiWmMP{$-nEpDC3VXAr{!={?=V8V{?$+`bgoC?m7 z=~R2-qU1?K@P6v(I9SD+p>D`Qk}_uhz1~1-Yc|8_`q)A5YN|vCoxpCeH?qIVpfz#mUil(J7%xoFR*d#qF$>+CyfSz}Pvm}iRC zH10(eOgi|}@3_a0`@5RH1Q8>&4vfa6m}FrgUKe?ULVVkT*#eTkPZyFNCClSPd>?G0 zf{+wE2O8Z)*PM=@r?ft>Mx~J85GklpnZ$yaVz{~IF3ln;cwq>CmI=9n-enX0dWcOSlLK3N)eIqw9#6P#-xi_2M zs9ssUa4F&AY}?QdE7Z*p4$JCq!;`pURnT}YWOh(!NU@pVGO`qJu;C zrZkM&1%C8+NgH>t9-OPi9Td5IC`WNrFJ*8LGCTjav#Z<)LTjDn5((D}d@ERgO>H!% zKUYgEwA5OB%dN+Y#HAkiOWXhzt`bon0qHFtn#x;?vj_lOlFEOkv?KOC9%p$zzFkjq zy05*7e|Z1*Pqu&O_0Pj!SLNgny{X@>KWd*3JH?E622lB3|6P4u9Vywqu}3BYF@qx> z%y26Y56$E}Z^o7=sWWoJzN^E>nwMBKH2i;Xg{1Ipv61biYS= z8N#-kOn>}X5Ymd=8Vd9ZQ}z`NJ*G#iLvb9U&>XhltKMgP)kN1R@C50Z-}>rZALMqk z`S877z2Bw$$WrM#OW49QQyq2cY3qZaCjG@-%$5N6fb4$U)Jvgxe_=6{(Zh;Y(>`!u zBv-eEbvN+Q7v;zJ53TMX@Xef&lmp;8>=+qev{eD%`M`9EOp&*v}7VEpwx-G>jjNX^EIIXCLE=r zMLzwT$238L!KX}RNZ#{-N0o1MDyA$#)3!%R=V^NQcV0DcPL<5oaHBz)!}SPF9S1yeUE3eW~- z%DF3X;V@Y%mH4z59Ho+n!!4&iSNiL48a5~lfQR8D2px<7isHIJtXi1{u7ZRmxqqPL zK77K~TFH5*A^&^{_K*9IG6j*4w~vHH(sJX1u_M6a9zLg^x+H?~&$lu3;wu|*=eTic z*uOkQc0M>=H{4B)?@s5rIUb`2MjoiflJ{UNggH&Ezp{G!sr zrGk%uEX1_aF`oc_H*WUlN9`QT|@Z3g~FfdDS$mWLIc^He*=HNVo^~~iAn$U3Lfo&BT@UJo{-fUA z%Bj-xK>u-WrS6f$asI{hh4SuhbI?)rG5#ZZqH}A_l2ZIhN?`7KZ_9AiW+6{%W@~`J zSR}<0nI(^JYPdjp9AuU5&`#m$YCSl6#}ulXX+bt`G>D7Q=ba}!&)oE4bfB2)Snbzj zg3`+u+T2-O`GItYr(vNn%y8vI)K0Z5!>TK#E;>g(n+wZM3OIg|`_^qz15KpO3Esn7 zX_p#fwf?tPe%b&?5h_6qn8x&&;qp;!c|xIpZ>Z+B_!xX|?2~tC!yv%aAnO$*BE;3t zN#0IglCbT1`yuj5Y=F#-X4Qo>HPp~NiEF~-e&ku;G=_x3HDVc^LbAS&8seWiaDpmR zgZ*q$AxILl``2ju_2C=npZN0!R`(X4JcJ5qvT<}bKLUf#3iU&%D~hr)1;Uw?`PF)dc7-hmHEH-U z)6r1s6D$WO82$koD8@O;1z)_%R-r3bXn7X+J<*QLUS7-pf}sJ80LniU*Ep;L$}t#l z%vCCXriJ_&YlpF6Hg8_OA14ij(Kj1nhm{ZsEjoX5+@%g3Q9t^mDaF&IH0XA!jSh!4 za8r74r{_LvqSk*1U6X~Mq8?$+ve*B4lp&}aQaSL!hf0T+gKbmk?ve~;;BC&w@=iO> z@At9th2AZBHaH~15Bq^shF zNUkABTkqT9-O(R&SN5lAfX0`WroJViFwyS}b&!O4OTM9bm&d(`lY^zm%AY4qUI6sq z{hA!scrNmap1YC|*p_D|7}Nr2m=@b~?Do|Mwf#R`W2^Fs_lpkmhYwJG#1siCieiW* zsqI{39S~jkLWHrvwe)%f&56mh&fQ&`30v^f$w6P=ePsxE@Qo8_7_XL~X-MlFyS{ zMlZ8JCs{3-bf)m)5;ITAz!{iaQ=22QA$qW=s>u)`ljEaLG zy30g;6%CD;DgaX&ClE`K+gsD=qd$-#mUHjdpHnYc!#K%SGw&pTfb8XNM2piWo%rOp z=qO31+5d}+Vv>K_mN72ZEzz8*yu-g@C{*p=Z+Ui-p6BDIgL67mPC38LeoZ7urY~xD zU2kac_y& zhScAKX^V=VYI7PEVCFh>^4oZYxSSS59Bj84@{o2mAS!PUJ~2oPTA?uixu{b3aGZTn z>g@bxmw?@&BI7=(pzB(=UW+gU$E#bz0Dv{0m)T0m z$VH;1Gsr=WzQu?1E?9XT3?Ec2A^pfn=HxZyT8%;;4d*vPOA_DE1T@;K8pkIUB1J|r zd+?F?Xd+xgHR_^KRuw{QS)LdpxIOfQ)%a6C02O5=F3AXbPPGK1Zf-$@;Hd-553j?K zbF5P}J0)|5!ye3UT?wU~&8d4L;L#@Py^emyfARSJ(ULsOz_{c=cUWfM$-PR;pv14h zn3jWUJ9!EIuX$}M_)-5*U%>vkrwrQGS{N%~C zN~?Y$+M_RR)RaZjrp2(AesE?UX25?47FEXZ8CnN53{m%NGt7{udK(m~Bx3qna**F< zM8f>^fE=Ok`l@=sifBz>>7n1@{ba1?s@Fr4shW@Fh5#$zT=`O!Ne>Z~302#6JWj8P zMgW6GXY!e8?fjS2KKj{k91q~l|6%PdqvDFXZNXE8LvRZc+&#FvySuwf&;%(PJuU)A6oYTH_S&AI1Vdlnb?ODjs#KF0m)-50Ek zkk7>*?M=~l%!hKgQxzP&h>Smv#6hPaRrgKs-|$VCq12ypd^mvk6pTGSj^>{TR7fGv znOL#(hDu@qK?y__+xxFGS+o|!7DV2muZpt`_{M44%$IrP=B%r6sr(nx2mgcKo+wJ5 zMjW4;26NJg>PF5hfvmSJ5s>okgDZ_MU)tz#rClK0K1W|n4LBn-;XP3H2+dEmO%_Fs=lu~PwmFr>FdIjo zd!{_|av*8EgvMqXii>=y$Z>ET`uCx9lPQ5i4ztIwOe9Q#yLqASXwcL^gC04B8(RD- zQBJv!)IY(H+MEFN1Z2i>N$})E1kwrW!|3NuFqFUYouSS-1tu2$xaj*8kMsPwYwCX* z<#wz@YNAX_sKU-AF~P#Je@0Xn5yo8t9O7b~ z=JonB1tZq1_2`A=lKgo};7xwp4Ge;{j{0P56SECEwqBX;&dE62w+HGiBgahmU=#@u zFdyjBeqZ=H6_XuzbMZ6vI_V|rhL68-zdW6sJxUX>f?J>ej0HZXSnRRdYs_(qtOXs8 zaz$bcp(@Z02UX^h0=28znmF%+d*@K#IenJ5TAMG>h${iQ_pFwv{c7+i%}(5$cRa$9 z>`a_&e3N`xOref=9yoEOq68!wy3D}r4-*le+)M6ACOU}xkNEd&Ge57+Y}Z`eq&C54 zJzNh2rND&P=N5ZW-?>g(1WR;*ug*f>c!izw=Vu~=hA`!VA0$bL;BrI3SI-%%=zd1K zZ5TE|q@dib#ffhwQNae1v+#gvJzS1tS|5Srq9|fBGdJrtL|T+y?p!EWmfRx?a&CXp zrS*n}A68IQeo5tUj42e2_JK+Ib;4rux|ja<2{VR`g64}F-0TPr-0!FaTprpyd~qEU z@qav}8#gweD2lpaDc2vr$}OY1*vVLc*{I9eeKFAjK3pJDepE|5*y%w!_Y+CTJdTU$ zA*O@Rl3BOc)*(Y9>BN1d8Pv$hlsn5vs+hw)=gtq$Abi?}_)tNS+fL2ghm1g`i!DxD zXvRbT8_6Eolo|)Cbq-A3x5&U>IUFslhp z|AQud%v{TW;!~t&Ti>bM@@PM_<2c+PIYz*AKvbW`KFoB?YqJ1@5PkX?&j87(W=L8v zXd|zLmUeJY|Gwb|$ z{=*w>o*x?j1#llB~0q8u`rx9kdT-O?KJeMPhhU;6bDrqqa z8n#%@B(kJbqs8aOKWQbEuHD3fCVvM?4}CYWTmh+ln{tvtjT7vU_xg&{Ge@pZ&X-%K zu+8e+km^h+J?R8bdwCS^4)o(Es3AP4Q@!Tx$-)P7h5T=@r#@>2%d!4kCL6$y$Ra{oB} z^>5SVEX;T?JZam%Z(DyPF@>7jIe;#F#Qz@(_!X4xGJ>JgKz!HVbN{vLX2f%StHSaA zG&arfSC$f_?d=BvKeg6~QE;;0!vxUC3tl|?ecU57tOwQKlEA`kWC2s`th%vs@uuP? zio3c$^E@-5x=|eDpkhWKBqT&aLL$r_fidM3lzv9Ebb1y*_w7s@eFe`tuST9)xlrwe z4}#)oIw)>dGDQ^3K~z)&HM#GNFDxvq{_-YOP1S9DO~sM?=ncZXiMD{Y8u<$} z;6X-vUz!v5I^1#lH8rnK`Mtgkq1Z1KUMhv2IlT4{5&YMNd|ln{*&EAN_|6hubkHgp7`4po6(Jk;PWF-w+#(a$$F2m_VhE@!bf!#F*$x4={ zlr1#*^hvX3r}R?i`VI^EmgLnA*MuIzJdB{tcq$i6+?-G05~Z|abLXEdG$R`rYp<3_ zc^w;me$RT`meV(y-Vsk2XxA*lPJK$kOfAu{;I&_})^UTvIwAY7*?!OMIW3^tmG+|c zGvKOo(l#pv?|o51dC|@FH;DdT_}QpImZkJip<(s;dz%eF>cF%mu!$|YV_BMlR zbjH)E&gZgMlLt0rX+Bqw95wB`v68~?_LV2YQ|DmF z+7Ihh-_U@&8*^bn5Dgd9tOJa{TY!Iq_N9QZ`P4C5D);^H@K$+w{63dyL8cNp)yB?` zQlk>piNz(4)8jCAztUkn>~~{I%Fz5 zQKx|W=}MPJYL{;vG{@f6kIB_uuhbLzTX0_)FsLIq^wcr!{TK6K^zzs&UYuqegd_fw z0ox6kZ*y1CnLf$GwQwVbcR-R_BGDX#@DuK{$b3dIj;B6ZSXg!h9b@ov32v7gS|CnT z5(NvIKBH}~0$Mt+yDqEP?vFt%la`hUq9fIiVyd?T`B50`IF1)G?-RV!6qQMoZR31s z2byiWh9c(6lDgciU0}O5jly|9%*GjAk}1X5hOK6IK)pxg!-bQ{K?lbtMtYew2ZH6< zz}nl47R1!{y-e-L+&A#mW0pglf%vii?`7 z>q+_Yp{d2(eJqL1YHr(|byQ%UWa0Z4J?|nu@~P&HzSOLJr1S=jY4F|QPWWyy?D&u`B$b%UnuKwny%aibaUz^W#deEz6`K z(y{QO{DGI@?&7jwYC9C3sHEzXZ_mms|CC>Q;)Fj}sNpP(_>`MC|7p9#iPa9VtelMd z1ly|G%zIGnQ$D@g1DeplZ}u&}Ps?x?%fk-(Kctx{srsu`VblQQg=Nu>IZ}zbgZYcj zsV@B*-Qg+H#9%&kpw=6=U>+%mLrGK^O*Zbk-h^xO-mLrLg)?sq$D_GA2HQ0U{4 z@-k=2m9p@Bw;Ioh)I}m^7Cj_I7b>p>(clfTW|SkN>lcO*;Qkd{ot z@P*H_;Abz&ZBl5Bj&2+Jg|h^b0%mZ_l;u?yM-rO+3PPlxTLk7G$BYh_NG>=ZjY@~eMQ7iEFV z!9m=e^6uo$!Hj`5c0GZ!@JV2jiPfjP&33R~iS)o-^tQ3^v|C&Ysh{MvDl}D#v!!VD zt-W=eZcda$7Uc-(y?<70y>F10HDdo-8ni;Ldi5bxXKoy|S zA~{y*3mdPP%amPc%sdMAMH>0|Co@gfBBCllH2_OyIBxt`3E`}A(1l16>%<328HeK0 znqIAUDuyuLpn|M4xK>><1yE-^HM9yD8@y`A_LKXWh`aac3IP#ONG#l08=W>78Yfkm zVx)T1PMZI(q&YPVf0Hx5^Yhr%uW~7Z1R=Tfz_*f4>NP7agL*laL`vx*CRGA98!wqZ z(XjH6*^()Y#8s6FM)H(#J0>yqX?ocB<~Y;KlB?b3J;po|DAPwxO-_s~wV5lZ>=4+Vq!S7D(?FSifkk zJB=+UbuCPVmNxk2aoyMu;~!b>frN=+IwVpap)F6~j0V@~w#_>=nu)-egOV(2$(l(c#W=-Tog#!gyhOfJxFu>pV1sekcMOQvF~-?4<^G0lglQ@TVMUKVA@lIJZv z#$ik7sQfh8doIK(K!%Tw=)SheHLEdE2K&>JzLt*~KK_JRE|;?el~i>LF;y_n1a}V` z9_PCNYeryy4fJ!w9jvgOR*!3YBFe!+Uzukc(p%jt?Mhbq;7*|(O^CS<(**w`5eJTK zN|p^tSG*s8IH)i|If+C@1ohBJZCY8NK9Mkks)c{EDp}0MuVOCBC^l`Za~E|-#y(B; zr+!ga5peEQ-67JnckA7%j1M0D4hA~1|7r#P2p;{{2Mw)9fuN5+fX?6e-sTeH7WdBu zMmyODBK=0UmgD+|$Pj6*xSq6(Q2FT4ajYyx8K%P-L3RB^7=rgqPVgU2qGUhJz)%T< z_TR`)m~9^a_y#`ULnnWBqgqtXk;1OVEsKYZhP$uqi;ba|NrecP(kGh50c5G=UMiwo zG15y`Hxa#|ohWN)&=PZG@TO6?cmRfPK)rO&XnVIWs!|Xu{NS?-ga*IWR1})q3p8#$V&_1n$dF`hKvk7On}Qvk z2XBSnD}Bs)z}G8-AaE*7;~DQ0c486}6=j4A&A8kty3mJQo8bips7jMA;5FOFXE#iz zN6<byo{QnNQXt#eg8xt?1j-^OP8A_k?K5Y95y-!qE>u_<_T!%Ec?W!<&@&q&mNcu z&%HO#t*W@RcR>6uK>Vdd63h&W)7UGC=l(#;t)7_`Zmqi8KBr-1U=SM%yIa8>-hxj? zN1oXsO^n{|R@DG%C779;)5>;|FRIG%2J^2gVUj(i38FZmCvg>lMTgqw#OkF}6+gSe zGDGED5QXPr=bVDkw`37ztrOhef)CQA`QI>A}9!{{W3X-SwkOEfI+^EjD2OiW_IPg7Jq z0>>CeKo_d&){7M_+Dpm(rQs4Vu|5ntZd`2K) zzJ!p=9SHU^Q^&JyYF3 zDs7NZ%qa)gY#DOd$4a_#b_c|&>&y?iUcX=6Fu7(s4|WJF?picOz2H#&MCMV^@Cl}F zKuvCJzFy9+#L<=zF$&)NnMoQB!foO7(W-6t0-aEf(uD4oRHT7a3vGGLI%4*|#?4WV zs>y@ymYBhFLlx{i>l8_pa@MlZksSn>hMm~>*; z-sb&h^CPf~0p_@-H{>Hhb_Aw;?=1&P=GmoUq-HTBeg(Z)r9;|@`MzY>tC?w_~%R&L7qXxN402>@o zBt}@wC$jty9azEeOH>Ll0s;R_F65mQj_OUEpBXKpLvyChdv;#F?S=@+EWrc*Qd3$C zHR$DzovV`ac;ejA@2s!8GWrkxs((!~`-!xoak)R=jfRY)C!7P#Hf+mh0QQL?bjqXH zIc~theXEqIHV$B_RVu$aUzsR37iq#r2PeEx^e^#e83sPM^MlW9=DQCPsUN6AOSf`R zoI3C;yWj2Wk87(RBD{CF-Si6hRv1s<8g%ZK5Y3cG8vu093t?IE8ZU*?dQh}yl?jX5 zgq)b?a>dl8cGZy_jIR!tQVO6y$9=75`KsvBua zz8w3Q9_UswuPY$9$$jq#`!-{Eq=H^b3){IX`KC&!;*0gcl9Htqa0(Zf<4ih;n4GNh z2MfmB8hciV$=giAX%L&)U zbHByZ+W6ep^?Y2VG_px*kCFkZ4yi;uu4`E4Yfl7~;9TBoVh-i+khQU*EC(*F*#U=$ z+bMc25|~?j-;xNMN%{ht$hY7yak7`+3edA%&yn_wJ>HJTAr<2%$92q#`=4Le-$`Lx zy(t1VE-f=l;s`zxp^sc7s^tvzk^nj^zlu|YHZdTK7s#$cc#vj46-}C%*=-o;K?;%^ zQsFnc(L#X`-g=hM718K7$UyP@9XWh8F$o?rof@=E9iyrvC9V3jvS{{!7L{%WWt8w# zk`LltJW{gGkw!sk_zbvzw(~ktG)Muk-3Zc4g5B_Yd?T#fD&FN4h$VPSkLBhKakVN? z)S(I!>jI8|I*?8RXr;5WDo{)sA7}08FBS((2@ogl*fc6CzCAVyzah=D1Ggl)`nls* zM&R@(E<ftDkel+yFFXu5!ls7mJDA5u}vBDS^Vv5FXOCiP$NG{uP(Eqmxq|cANIv zTK00AI5Ek`HCptr3Y-bs-)agYAqWE*QJVQ;>H1zQ7GW^&=OR!PuiBb;0vGol{&=KS z(zF3;24*hpN54L&KqOn+ENW5=6sP$z7j;cxw;EbToGom8Wm*|)t=ZHDqlU&g|J)YO z$g=m0v{tLf2{g26dKGbhI$`kalA-x)$Ax73!;PpNiBZKQRV>-V+H};iy0zNBzf?nz z2dsb#nD>8WqN#-iefC67BJUu|E<>sP`gObv+_5vzyP%(jU(ypE%W7-Z_ZBKKS>zG} zTmV-O<$v3@yrXmI+1kea>vl~9KcsmjXT;TPXUDf5x5MQKlE(I<%@`92cCzhhW)*1P zf|VY!@`)lQPNWLe-zmA=A*IRFB!`o$BEnumF9!ZUXH3VPn*(s2F)V!^CEzTe+$(lK zca@j*yB8Qju!0x8DmK58H|^VmM!uQXaNF7HWX5ilwcVCh-Z7MSu@bou1u+1My533a z*z?m;^d+L_|AyzzY!@A$IRVd#PyGTBK3?{@{T5>a%{}MUf|=vm;9X(BRUpx|OoIHP z^(t<_3#ONEt?ZlZT76W$ZfD#Yq39I?^8^b-J_wZJxn=%R=Na1m;|G!zEYBTCmeqhv z5BaW38?+7UEpyPg$sVxzx_pS!?8vfob)Rll9nlA4Zio=}LR&`(8r;l%MaS57%ha_eH8BR& zff&7;=P{Bkw}np=K3XE#<)lh&qFY0pD=`yR^k~1ckUL6aQqjxlgh;gde)!ZOt@vj+ z#7uT$pS)*_SBi+-?JxY-ubme>vl8(|j8I=Iv!pgQU(tgT@(anB5l#LeYIdH7vk_%) zqKB4CpsS{~X28H8-9P}#=)LQX+WI$bDy)<8{gu3Sq+??;QFdGOf}4eg!nslcWO7ZJ zcj*u{WFv===F7(NhW6^P!-5$@1jkS;C}%vG%)L}Esld5J+!pTtdF=wVe&U^{Slonb z!>J)oTZ$;KpHsZYu9lkut)HGVfw=whkscl{XSbQwg6KaI<982E)l({5k8uwAFG-K9 zK}e4NpZUdIxETF~(sL~ZP6kd!YE!=^)E{ML`94O9H}d@q?!Ft*h>oXTfCYXY*$6<% z^vx9~d8x!PtiIv`olP>u{nL%9CY9n`J%wIq+McTO%U74iNJ>{u8Q-V$Llwu0m;5WV z*k)n}R@Nu4al`+4vVsS$Edbd5iJ-8Gp9hdQIn70MGT{tHnIbBNi*DQRk){O1amPjqC9unrnD)nE!o;EHz6i@f&NV)P{MH>YJ?t zQA$$@#3M2CAy%PYN;H~BYcrSVVu@s>M#E@9{nMMV4LkYSD_TdB%@WXXM#Sb9D*K?O z;7A5wtJWLChSFYM*5ngAvQ9l|+^g~kiw}pkgH9Z@`W~JovWh&C%HgN{6b*<5( zpou_Evh+vXfAL67Uuhi~7sdP&n3zi)ZCf@d+Ih&?)x!+FITtleEY7wh^2U?3Q@e4E%w((Mm`0cA=s&2NYmk$eE)*oE zCJm;c%BR6n{6<9>EH{CHMPW;pn;T4#Yuv|(%n(2Z{&3&a4ac&nRT+QVaU*QA?*F^_ zHfmU_vwoFiZqfIoe*QVz{btqS#Q$b-Y1#KquBJYv!aaL|R{MEH$4}HbFkUh#Xv>4^O+KNyzC-}VsKD$bgML1VJ-G~ky(x~A0y~e|) z^0vvA>Dd2X?u$(c+HC`=etoX3)U4TbO7N=E&YtX4^o{4I8!a8-#17~6`qog~i{K9w zl&(sMz5DOuxNrr5YOZZVX)<{5F(?9rX7e5#BWj4*m5V4Oh|wZYM6;OdWSl+&WM$I3+***W5-eo*DhJhwdw$ z%X*`NU*2|eY`%)*>Uq29QOjmy_NZRk4W0jwkalaVOTgzVVo%^sJ2uhPWPi%WCU4%{ z8^M2537d!3M+#+|A(S5ywOU}&S?L43e>UHUPRGbeleHuEo*FN}U=WdxXKo@^A(%#) zkZFI#OzlEkX+j`t7kOdI#59H73>URY*)t&cn4K;l@)V{uF7LSe5~xZz zfPU(6;Nmb#`VS~>;u6wX|JmR@T*&S1KT)caAIHtEpWP#Ty)y7WQHkH=P56TDQY*Qb-^f zsNFCdT{qwdv}vN-+`B1iM%$q-ey0wQrCja10|x7)>3Y?1gewQK{P5;OQ>odC6Rp2` z*y#wJj2TF`%=Cr7E17=q5MuD7k?QKSpA!7bFFY~$K6t!T>wh%dO>sZh!_eqNq@tFE z9wWMf5wY4T*nG%uQ;!ruZW z`UUf=Gqpu+{muUJddy=@r={mt%&r9Pv)QpgoMZtIi(zxF?HC7NcWP4lZv7d>(e-3* z>;qb>iR9Vj7EIa{%sJ@+qXNU+kc;`I|NWN0kYzh-U=K;71KjtX%7{i_Lyk=dU>xHD z)=t8xUfQW08ZCr8C}GV)O}cT&AC;r$B?Q7 zB9xGDNQ_GNlR^s&3@)f~R0jT>^Bipr57N$P^s6kR+Mo6HlE-lnZ|ZOQifmvWP|(6E ziZ5Wk)zhp&47vdnFHm|9--9{cLO-vBzJH_Bg{UY4n~#ul=kQkwGLMbo8nX~JbVx#p z{8@>g{E9Sehe}{^3+HTver?TOS(kKCkN#&>e3q8x*OdLRlgE_=+)CM9T7`>o0r9h& ziL4;DsG;j>*1Fk_x?YoRkB-KNsudw1{NtRszOqUrW>oa;DRi_pnSl%BK$p@ZIS1_S zhh$BXc#ey;>23~)4lqcLfjs4T?pS|~DatqULM-f#q1L!tzCAz&o8=Ezj`sk>kym=5 z?=Lhg~sTGE$=+Tkguki!*0fi9-mqr z`U1jDyoA4yGJFLnJ4qnR_lNGw1VIMTfG@Bq7+`i0)A>fmwB}P)1e?;#<5yi?rpf8a zMbG}a`msg#Pw^e|?)}fJLYsAOdn6Z>*(gbaP^bT5Gp#MoVwSWx{GLNKS9!MC7I;w_5Z}^7w}o3h~>Z;xDgVX7B~V=K|bJcg|4D{^cn=#olPc zwmEwnxcaTk>lU>lqiKZZHHO=?(q= zG#U=QQzzU1x6gejGXtE_vmtkF`h!Nidy`AM*Vit3L zZy^~VPZ-7}XimJr0E1)^|Fs%-7}8^qDJM#YH*$B$7U4@hov!2)r-T`FmR?0_X3N&R z4Zc2qXE`VT6s#Fd01jsLAfZyCpDgudkfp9<9p!C=-Kgw9?DzddZRKm^F6N9?0Uw>0 z_vSQ6lV=E}1w}n3)G!^LY(Y(~KagexmYzjRu8J~IeVUxj1gBy9d!Ulyfg-0!T`Ob> zLy{<$RkkWJ>XsgA1F>u)Hn4AlY!MY#U|dgEnjM}_tOKMWn5h?tIW`eryd zc1JCt##w1bLTYxtS}}349c6z%(NLU^ryOF%7A6XH>> z!SB+)dC4``yPDMD>BTAy&d(y!drZ?q{iDZVvp94B*f3L@5H|D!o4#j5H(qCKSegQn zHl?afYj$uOtj~2eVAUpV7y$cFVGc{2~79 zm{7>iz#c>V-eFxWE)iWOj2V%ym_cab%|Mvpy(znwra7u88ZjoKQxa#jiS@m3w`4r6 z*cFia@%eF(1aSA48Ym2Y9M;~vp54TS^#)GS^y4Rvv9H6lTt}1_U|dIX_M!-amPvvl zeF10RqPGBaj7(wQf?n4O1EL}>y6AyRV2yt}2jQ9E%*AMSj5GTeo9E}gu4(caViF+r z54}{kVc&4jlH&cTh!dF13#pT-gFWa;ws-3O@2E$wX6gS5y z=3Y|^GS>0Y`Huu>>=EfR4I}ysJAXcH>66*n&nB3FZ)0vl*DtyZqF=ye?{nmCLce7M z4|AJoqa>2b;hcvDRF#ji?Uv|VKB1v^-ZjzI%|Vcgwk24Vop&ey%OFbV;1 zILPbG@(x&dSUU6GU7zd-2tfQJO9IIUPs3~!E2fn0%+dfYL9AuR`RqEi%R3)o*se~IhuI@fpF_6`l^{7)q>Eu7k=m0aWY&qwm?GsSuv$}FKQULD7 z_{%k~vs;)*3GVluIJ2t{Mo7nr)9w}{w~WL^tUEEIgM|s`_&q(hw6cpj#SXtG*|9OJ zkIx`bQJPOX!Uc%wn?S}8j#kH5nC!@g^cA?C4diPOHj=x4CvkuqxuCIlQ#q>$Pu71= zXBHxKX?IqbJR8L{-RgK}`Tb)JpC^!E7xvq!sejH81pZdE)SIsx=A7QZ2e;1=JNn8T zfour^gI2zq@C1dFr>^`ir_yhPLptaLUs8Z>4~G^G3FmSxSA9C zKc|4KXFSNflz4I6ff018EKd4cAaxNShION7i4GCo=wK)p8>50w?5HU0Uu8g~kfSPW zh3bD>-)@MCnCPN=wI)$`e~5Y0?sa;S`nwQBI6YhwKf;+7&`c6tRLyDhwm&T(xjI|Z zFqg=r8i?MoDs38=)I)FW5IJ>E(KWcF#t9SNwh3TW86v)Ip8a{F9v$i_c*kdjw<+28uXnjLn>}p`-AhRn7*3nTkvTIT2~AJsDz^ ziXJ@qB+z#9T>$N|n>XXBqtXlYoKM*OGJP#AB^{7t!T$TeJU95pnqh8n`A+q73AMIb z7k;$ZHXQgFqAQA#$+3TX?{_#7hSm;PsVv?2W$F8^#?9%dB8H!TL((`IbO9;WGj{)D z12;m86N8%kE4UiJ{r7r=7GZ^hx|fcp#s#;sTB~{V7>nP5l`g&)z45nm_}ky=l{2#W zf*>nVY#IUoT=~hmNgxNVNxCx9rq&eDnD6^Xqh_uD7%sGDoiWm;&@IfGvvZ~C?)9&C znxjAD;cf?{qf8EKWy15wIz}IGJ90ynN z|F7-=l&+qzn|mNvmys5qgBoU%F!g zqj*=7AgV&$+c=c*DyAb&Cb!|MyjhJKEG4T|8pNeHw%xD>pWZq0pk}0NPkKTyIw+79ItwhSQy zHih>APCr>ZR?O2sb9_nYpOlYDW6!+*d1>m)aKzp9XaE1ReMPVB6V5)n-^*^i2jYS~ zmf0$Q{5y!hO3CY6LjHw7HY8hgeFqajV492Y6kt`Pz^|Ka@%DQ?gQwuel~3z)P6^*z zfEi0d@Y}|0rquQW(6^JBCa$*wHxT2 zt9@II1{uR4C&gvUu%Gida*(hc4?L?@IbEIgrRG86k5P*2+A1bv_xAnhL3eV=77ex} zz*}u7adu4!VIP;+V1KSv--Keb#pga!cX(M=A|ieZb|OmCppFZEnVF# z$(xv1z@oq9pElHz8i^{YtgWI8H`_y(?+-k`xeII+QkHbXxOnIbI>XmMrq&-|A~ zU#!_AnqDn4hvy_m)@9xd`b8dBK}39A^{Zs0l+bZiR>AXQGxM09nnGeZj{f4*rs6cA z3*!e|=W~G^LGt~ zsS#L-X1ULI<-wYU+i4$Y#!U=g%qaH;u=i3v**~t!DX|Od{Kft*Z03IqGg5eIS^j6p zZp5))QxRe?oWjgdjxBLrh&-sL$yJPJ-sIe0Ru)mHAaP&QI@OZ;$(Xvfm|~eNfzf%} zy2d^N^-R-IoOjT@COX%!yI(3&`ZCw{w@XjWvDKw?Rb0e54>#{n@d$;n38Ff>uiaAF zj5$#X<5;Sd#*(p`#m8K;e7r**xh;y7%E-l%YTQNMYnMQP7v#R&~Xi!}!xS38`&TQ0Tht$0(9U zO!FW6pDQHe1YZ{1qLu-RF|thbx{|bVTd( z^$r>c#chhung0lDv;yC4$4=YN!3T#@&7~F~N_BBo_?&Uvq~hi|mnv0z_j#N4gND?} zV2exr9==Ngr?~-9Q=k%CIlJo_Q5F=b{#L9+e9RqmKQjPr{^;$jocnGbNLjlkM&HL8 zl>&cV67N8&n^3?}T2z5_*HjX1YGnCsYQg}9m~YcuFNKmbX;D1|zNe%}x=R_hx^ZJ+ zVuGyFjgn4h|AT~=#DZ0F!NFUp#{NQS0yv% zZ&N(8bK0Wved%YUL2&=&ay~FQeAiaO7u%X2W=3`TnN3umFe-G? z{tsoRrz!Tyzp1u))q3KrZpS}jQLblto+&m|KO-NoOBy++a6{#?GE*H5I{&mHTXNHe z3(7Kcjl`K!F`@&j&0&T^KGoU>M)6Vyme#S)F#9+XtpN$QxG_Q_)5@fp;DfLaYTk>2*MD^8zl<#AyMg}y8Q~VO}R2Wx*T@4p<7a?gZ_aTROad!u>Du2*$QvN+hClIi#yp|)Ic(P zcQOw(?5%ak&kEVG=&@l+2~owVNit%}Tdi}de7r7Ci0bD_S7|;=Q-0Mq2?q8xWp>qi zSIIvt-AbS@)yGM%Tjn%q2KC{Pn>$A3#UfaB?Cws8>#L(=F=X89Z0X{jNT&TBJ^W&x zCjBC|af;`QNW;ZrMzfrCS3YUrHmS)+*Pf(-x$Ng9kzvj))^?4XiGD`(oy3oqm>grN zZRW1e{TDJ(4yu)JvfF>&m{ql%&zOuZ!aQAvi|qa|$pOnjnP_{T4BgX|bCxI)s91e|6-jJT5$ZCtu8mqPN}StUdxB6pVg<5QUg(Yp#iIikd7mP|9zUOwYnv&8AApdJS}7 z0?Wf--Afe3P+f7zWYI-GYHya64KluWJddLF)~@k9vq4nJwDO;pho4Tt0u%oZ`)Kkz zE%pn9m1df^s^k_EPuUXt9C_f0DriqDb zZK!`YWL3}Xgc|cTE67V>7PKzzg$e>nvv%6PHouj>MHK5(fGPeV{8%n4liqW3S%WW} z=#8QHs6_k}^X#CdIHDj)2B*3Hp{`i=NtK{DUVx&&0XFbU^1ya1Ihl+$_5~0V6T`{F zbGFj#j_}zo7+}F;Az)eIRZby-`7O;f^V4Z6q?tO$=(v3yzM}jw3W>QS) zs7JB=p0ibadrU5NNaf^}?Xc&*<1H^Lj?n+zhAcT<@!xJf>%te^54GP;YAFT zsst{wJ>TCy4uF-^cax7_Id6hZI%zmz%DJRIstO*5~5l!zn9> zp}v_b3N&0alyu_@4JjxtLeQh~Cw*DVR)c{xa&>a;hsQ zEb#R>CAnp1u#QG|%wcmTmZ^&Gif;6KCJl{x*yHw2n665KV!wbQ%z~tO^YtX6H)e)% z+n2<54kkLX)UA!`U6RkQH+TSuj zjlWyPH!-!gnSZOcX-o>f{l_I^uyI!-iK+78qXcdX2D{x??t}0Szju%|3HdSOMWGnB_lk79QfvI~-oATDGx7xo_MZmmQD2!kc@5%QCUG6CAK6F` z_3T{V-sR0Ua%zFr7P~EG#6=YC`Y`z^3K)F>PCA;*ZxWTzEi3%3tP-Z3A1#3+CAX@g8iTkh1vS%F?f~v=NO_o(Bm7oO;BP zK8J(B_6sRKUqCtDiD?gFl9OIPly|66b~>EYag~>L~&_{&phx~-J67XFD_0JZN6mHz+!+lzMSURWH?9 zcv#ywbL-j0gCTbX_~szi;)Ss~L(@kxh13Ixlx-c>>IuW4RQDiAsbg5e`*E;;>i(vs zri#Ei*d*NfF)mb?EO?!_D2s3IWy(NbQ03{S7q4siU9FcoY~oD(LeN4mF3b!7MUqjm9}g zbN@nS0^cVTUv?BH#yGnvK7hPnfgB?rpz7i9m|{{!TaVDaR8I{LBeQI;zp%eQh{gU$ z^_5UAQO5_f8;aDXNaY0Ql`b{wuXZ8fUK#wpr#Xt6J4JHihjQ)c=C__;y42)tah%G8 zA}0Fs3c4OSZiO71@g z&!}AOUp^;HFnT5>e!{@uueA2tSTuwWU<8^V@5F`V*6J^>cp&G0i&rPsMVCZ{KH8e% zL3alfQrb{zv5E9srz2eq>wgmd$irU7s2Jnsh$gt`r7ahl6nxB58T}D`S|Bw#h$f~} zi%%R?mO(6Hb~3c1Lgx{(p5D?8KxbC3MD{A33(S{*?huubC@8iZ6dnC>1&a|&UJ9N) zEJ+_sRIi5XgaIkGJcPi6ywBi>u<7-s3yB-dmOk zmerRrc^x$^MLjJoJw-)DvFn;#R=U@9&hOQNS{NqxtVIeUB9{14qs&+{$*RB1xN*uW z^3zIBcl+v2>-xBZ75ofZ!<6-9h+`Ia2^8jTh`zk{66Uqq_Q+a2Zsn^fT^T$e{_wH>#OgYchjmZz~ zmdl%f2>s3z8GH*SZ`i_P=F#6vaLHd7QgE5%mL@TfKKJb=K3WJSnA04k|ryF{`yRwLUB0^HSKN#a}kCo1^v^8%YK=#rVqIL8@e9W6eQaaGkA|M4B><*f`;Gh008 zzpctp|JJ5Qv3{N#@7hgWmLR0m7fz?8Ww14=rxGd;UwW@yBCD@;|UzZ`upFPrOIE;)FgV{Kpue7`Th07%ZPmq`LF;V24-^&G=r9t_pRX@y(?;Y4J&pBrRo6=2$u;RG32 zBN)5RD{PI@DkbxR33SWjr&4ED_cT{W1r8M*JYqLXfAfEOpb1y6^zH^16uJ`yY z#7CFY=g7-PxY5aux?3xo;epD$J}|@FPM3*>d4SM2GCX%d=YZJbw7YWeOM64W{wnCM z2)GAqxey+1HE65!Ec-QPqc^>EuX7h~PyOKwnbH)(0VN}$>J&BRx0Ts7`g@&+xlW=1 zg$=Lo3qdbRB{y4gDf)Wt51)%$^?pXJfmC-4JC_ix)m7%a&PuOyR`0s=(Ow=-xaCyZ zpuK}zi9_rxXb~d6EOIb@^s6c`pN--lVOegRhdN2=C3H1h&k_9H$SrIMFw6P*6GdMwjBXHPATP_5-JG;9~Ou z#48=mR+?`jzh$r_)d>nNZ3qh47$H%s!KAJJ@ICe>K_|`OVYlsDA1wkVwRmlIG3Y@J zrb=5m?s?QuDeZ&yqEofe5OOBRV~531xjnZg)$x0wA8Lsj;d?7Tgh^8H<%u4}F>yOZ z}!EjH;gQ$pZM#jG9#!6`Sn=)(gdOEYGSOWq&m+pgXjgd@4(o=AdFxTRk={R&pZ zAuyFP*CmMtdW#Rjo&DtzmuXBs=98q$Gc73Q@*w7kh5u)Y z_2&I+ipAl008Tls$9PQ9e6MtoQBmnEg-IF*W7OtYyTO@(&zKPH_gyi?R{5_*&DC^J zA~f_ye?C^TAeT^)+ceil&Z%aHR5!xcUIcL?2eOi5adg=f`>WbkOp7(7PT|b4?~Z?t z_%YYXUJJQZcZ}nQ8x^v@CXD!_OJ^H(6+qh{Usm z>RXM+#s)!-!rSy3+a*!NofHB`Ln9jU>lH8xM0Xjk18nQ;d=ATsb>1p2dp7E3-T-Z8 zxs=mTz_^nM;b}Fx0&piFe&*jt`%7|3)*ghjxLrsPt|_s8*voiUU9=Mn z+Wo?P$utru^-EW2uk`*0uaMGw&;qUrBUbG(iwai%tbh(gJp7!6B8O`b+wk?+xrU4w4WPhYr+BC7OzJ@MXBnHFv}B>kAwir^x$s9r$;SNSfdL}PADu7~64?HM z`~X7S1i6uF=`Y|O5$LZjEG*3KtrG*JDCmx?B!Dwrk#%iNijiF^f(F9GfXfxeqP`w= zPl*@BB4F!MSx>0vgy<9e96N5muiJR{uh5i*FEAU{i0Km2ZIO=BaT52yur9YQ*1n2M4~?beX+d!*Zf zp7fV(T@hO$`rO(nYTrbcF}1*(>NEs-3K7}|)OmJcLOP-ZM9`CF=q;fm5{`osR!hXi z_bRh{LNCkHW0WFbH8*h1d=8r0@jES6@29d*H{nH%f!bsrlug-P%(|hNR&yMUU3L{C zoG_sNWj(k0Aw9spczoWX8iT$)UeL>M7qOQ~Sw_TMJpFc0t=h>n^_i+Ba9FC|ydrQL zu`y76p&c=0G*9V$2OVop{h<4 zO>Y;J;iAy?1=wjc(NqCRl11lGE(9*jE1cioER#q~--`LFGDlkEE^IO(v!5$>Z`TC6q{`k*Bo&U0P;75_4Cf*S^f1 z!7c_?eZ;?+@TKYlnlzbjuGWQbhs-%iW+$pCxVFzb(csq)6_^pLKHZEN$Zor=v3%>c zGbSSj6tVWxMt0SS2)Y5pB_wX`JzfsA%~I{=z{z1dEc7W4v`3F{!x!&*YTcUAJuO|G zn%k~4-7`E4mz<8KjOY{!If*#@5q>WOzAKe0S?0I&-=F*Y`^|0($hkEkO}l=%z<&8& zQ}J7QLJsQSx9YCd4x?;ZM|pNf`XJEZGu36U8mfBBq~nPpKD$x6^W8`KG59`la8quG zzE;$^r>BC+LVg5cf*NptH_&39Zms|ZzJ5z~V_}A6PP~D|e9z2q9@-67VH0}asK>dgRW()XYH0{CnRlVM_ zB0ode9K@Z;T0D<8zV7|}lEAXt0A?Qeg4M(E63qX@F8D8^RZ|v*-7->U&%5(Q@LOs2 z*=hLvFG|vXvle`#yJTw|n;5~Jz9}l`vz})1UoHMOUBPdK0HUb9ixzwZO9FaR)-$IK zm>c__RR6#4bO=T|WkOcoA0-ccbHFcpf1hJ@V!>zk!9M3Xl@D_Zx9EJwpC#tmPTI<` zfCix(i>DsH%VZ~pN}$ck=%XWX9=X^M@aUr>N2c;WBr&kX{_}j=h^{1hb=V2iO?utj zPwpGzzls=0%kbZsRfv#xOog2w$B@A_M+cvoVXUHwI+q)=?1t!YmKk0#8&jaUXw@+I z_%R+FJgab0j?!PW5(&15X)G~``+OzGf|-0vQTwFXN9UKvVByFx(G`5Fq6th6*cICA z6+m^C*28AV1R3>B%A;X#-vi569!O7tLo+V(fx)n_?4F1J^&|CHC@3h0I^fy;vc&17 zBaCc#Shw(dHhhE(eLm;r-X;5pcX8EuJFzIg7U*b75{=zjMh*{7-Q!h?#dM(@ZSiE_> z+*G_o+!z{-V;R*)l2$v#ENSRmGdD%6A|?JL$<;0O8RwA~4neD;$QTs#71|v`s6OYB zhehz)O|W=QeOMxs66NE;m|Egm2o{%-iO9~IiB!#;`qt(Dt*&g;Ib5{+M>MUIJLY3Z zaPZfMO(=L|qPki*gAqb?a1XHTVNCHRba!{}_ZG35ug{&G@yyr~3z=0bPjO*RpCw6b zXG&s=$(olSYIj@iVLXY(7LQiDF7vvl$7CjZv8|TGcPakm5+}!w(Mx{BflP>qVPagy zi8~6PaXV%(Yjti=-fx8X!E5Yk<+~_PKte>?pgb@L8+ztQwUyr}_SdW|s;d~82Q_?r zs~z(ce{9o^lKfCae*e&SZI@F4ck$C&cz#nHzYC>O1NUi;M_7h1cWxSI-%X;?72 zy2vLz+vgbZ8x%J`v98DL`SAl7o9qzUP-X8!%iI3$4HHC$PXZ$*>VFvqA0chziH(hc zFhEVlP~{REoli_rB)he0DJJ3$z;;Iz6r=f5sait^??1{j9h*9|!|1bKjSL_LJmB8E zuf;@cj7==>gWL`JW_{=IvLgDkS5+46oyK5xZFV+9=C)*@MCQPLb$Dzn4Xf<$0TM?3 z0;MLK?^mkHWTIy+W6=|D^E4aV4oX2Q^&@C8GL31mV}SZ9wnPRWAaO<&yH#)8?tF6qqEE# zHG1i_K)w0WhLr}7bc`0&U`F)KZMlN0htgv34N@CFo+pSrohynathlK5M{?uO3Yb zZ1V3AefT!6BD%Z3k$5KzS2%#KTRPPrUk9l_8J;@y(r_~53W<)DaG_2AgKR^9is6_5 z87}JbyXTEOejQ&@6^&i&qTYQd{XNFZ7J%ROk2d2;RfqHFNH2jh#9qd5=bXwOTh>ybmG#>?r3j9jL%%*MkK zbbhUsrDf@?4q}SqqhGnt+xBVB*<(x*@3~jWHF00g8K^R*>|vtBOEp~1wo+O}6d9qW zebaHC9?MXsqEQ`c6 z242FIi6PdY>|TsqY&U*=z6%xoV2zQqH zAdZg-H{Bn=`|Cyl1~7+SiFQv+w35TWc=I&e zZu~mP;lAShXMfe<6-TWLy^bfTj%OL0ieq2>(CnW26FE?0AmkDQ{^Ir58a&nT>oCP# z4x;R}Jl5-EcE1lgpO2O2Y6O0p9cGbxMLB#$_~(V07HgODkhbwk)cW$Z`iJPxa(g^6 zba|nR%~kizeAn9#d!ytVsUbT-t9yT;ex=0MVTKliy81_1w@bvr!k5$N#RrMJ zcAh_6o-F{m*?#;Ekdyib%?IEpk9N#@xh|{)E`ju8h##DcL8CFmX)d5{67t_1uZNwL z57E!F-&NHxTA(S2`DbwDdi0qTxTn0K`QY7YwIitL)!hM@bZk+1IjfKBo<*GCNXH8C zu!Ytb+kU4Rz0kjekoNbk_KgR)+Jn|sz1lyr>qb!U9#B_*f8*x$YVrXSI$DG*E;?M0 ztiN_X4nBt~slUH?_mlaR3PzqvqN8dMsZo^h?-F5Ex?PDqPWr-@9=G5rS;tLxd;(%k zrRlq;^cK#%!G%%hwr_4q$&j6N6*H0_2oQ|LcGD1F-a4=j?oDHy5@T-X9$Fh?ZisIh zY*;cljBgsDjKAB6Xk@YZ^wAGJq*h(LlKXBx`vKv?e8U3fwg!tqvnLj=fAK-Tl*KZS zo7D?FqE&!eFS&0}qXW!NU@>Bk+N~vCp0z@CM*JvT+XMdjF%ojBQKk^ zwT<;Rl8u$j@ap{rKNk}22c%3g?_4sQT7^axk2OZ;zro<4hTW}*E^_t9KAf!YvuHg{4|dQ^ZR>owUTfvbtmv^J zVq;1Y|1rti7D)@*2h0}{3GJ9-;`Ml2_7G8&tn)(=WDq)@s+ZY}IJv z-*PJt?q}}n6$}IcQ_r5usvOp@&Z0e&1UYtmr>2oHf}&14;jw~eo;~y-IgQ4_3_c0CIB`ul#OVfOSNxpk7KEU7401ir_q#!s!O6hIzns)tI)7ts% z>$5(+&nF3=5DA^5=W{W{ZHa4>(wguoO47>`%r27hGVDT!@6Y!)H#g!4L#nE!WZ{Bp zw@<6rcwZl0JnCRKZ5PJjtRoDjlBP!ol0UFER#co%zMW3m%}R{ZDdH&hVkSX;)@RO} z8FIKP^`~OxbHG7pfK+_Knk|i4*^xLwF-ivy025+Jci{B&9QF8J=%60Z_Xgm2bBBT) zy+{^LN-5lZp3WOpsp5j1vwoL&xwJZChvbVgE!~KNA>5+>M7=}Ad?r3$ZEcHdWmA9o z&0Z$@RB_q^bd>XEE@rIibZau#NIt6fjV8<_FaP%WwWbxuud1o+cDzO_6@*kcpe$tUl+4~P~&4BI;B7xulJ z#z@UPpmfYh`^bgq%x4p+?^qhDOfhooC`@m$e@DDgeeL2i+X-5tKR{dD-rP!Y`RXO1 zKBLv1SWrnvKn&0V*j;W<33%e!Lg?r;VA58P{+Q{^{h4Cer=I=fQ0MOR+!t>~>?@Ho zCg?uvaT*a0hyY!X$_u199#da|hlgE--HOiTS9Q0G_C`xLDd{dw z9@CZ4(a|O3q5YPqDP?QU77sm7>GSnOXzj|?KDX)o^c%~c_yJrUwKlx2MzpGSj&&|r zr@KxSZy39gnahn#^p;E25W5MUw)zUTAWfdQIh5zFJrRo>yk>YZuRoPVaF#e_%F-$@ zVtFpwLetYi2|kBbJ_-sORU$s^O=T0wY+qdOPR;NC@DlBV+<^)p3YN1_URSiiqqqS6nS}#Lbt6lSy(a`6WWAH=c4_4%UpxS+eW>QYw?8-KQC!+ zhLVvUQtqz9kXkUwaz-MV(c>H`AiojFi(q?j^5v+CF%s zx6^y2^moJX97WKsfY?7pAk}r3NcE2B2Q=WD4yv5OgFMLd#E^vf=`E-2Eh}ct0j*Wo8!%a9CU@n{AagdR^q?|-YkqEgEtHLt)^X^ zqWc1Q6m}}mn1yh@Ru?gA#shix*o;Wa(H(kQ5L`RJWieu3CQALng->e_3~vz^79w~Q zR>LnNFDSYw%r8Z0Pf5mE$5!8Y!|Q!UlDCVTj!y47mxI0DWGZ0LHla#xo`{Y{bs}+}&^4eBdFx^=8Mr zCuKa(;b5vfpA3p(Vr*0u)6b5-*Rh@y)nB9F3`#VV{J|8Gd<%_fz7+VJiScp);L6vl z%oCCv2JU-L^I}F~T<5%)_Lqf^)=aiv+>De7c<)@slzAT~z@QPq-6zvgcVSI-HkXcX zIC`SnPhT~v3Q;0f{v8#a>jHKrnYTT#=U;4ewCxikdp9%y+ZvxPNh*A9I=}_VbO#{d zUuqRiO1Y#Y+6?(q+OImQ%UbohQNaqP;_fb)OQs3n!6-MID-zPu(lYxMZ~;X_cr>Ky zAhJk_v@kbOKOF6|Im!!vn%n=_?J zQhfZShKh!y@O?Cz>GJ;uZ`BO;KY_~tyk0xD;(nTZz=e(u$LFTz2N>WJehA(Yco?-B zMkb`qt&xW3dUp2ie>k2$pZ?sM^EvWh0yzeCbaBJ?hH$d^eC_e@NsaUFdr`&xXJm3q z-rZBz;}uQzHBpAQW7D5B#_)xGiWpo;)y;b}dM_!;pe8|5mgkLC&qRmb+mx5~*A7;K zi8P-}Q+spe$EU0d!0eYg)rF6xCEPlSUVq9)Ugi7O>xu64+g$CfRiRvkVW9UcOSP-Y zY$RpGNTO>i_)GDyIc}Z@2gIL=LQe^ah%9JyVpXes4nO?W!etl|;Qr!V!XZ$4%<>@N z5p7jrEtITjH_PyFJTX!IGr%dRGzKLq%JEFIYBTHZ`w)qBu}+o2bv3J;Pch^iadv28 zZnyX1TY1PGi7mhPvFJ*eNJa8f%}-M_@S>UNJ-KnSZANm09xph%#1CZ9h^;pe+TyME z&}xCpMW>BTy1hI49-9nFzQ$X6A|G)_vQkCbd7fys?|#rbE)I8{E76sssw`p3SoblmuJ5H@R*uvZ|f zg2TUltbB$sP|iV_)M)9;6?5_qJRxlfX(+z2YK7&-TM?cBNJDKOt8;XvWoC`@LnOZb zPzQbbu5pZKp4n03B|TcNPp@{T-sKR;$+?d@3ozNC6z&D!X&34fqn9p()}^1LnDm};JtNYmZRK6D-Jhw+rKjqZ;xp3Id3brXwX|5)z{iutM(Yd{R5R2_OC!OG2jqYi6~5Nr zfop@|VYQcb24g_eB(E63(OmvubM^mN@R-x#3uBX%pCT>$lAuN#9&2?qn~c8##Uk{G zzjypz4D)$%eG3;XTH+fmr~%yi=pV(mO%j0%UXL9lCgR{W7r05kLEnVtz< z96NV_7HXr`*w#1!cgQ$kdM3Nk|8z3P%LC*=L?r*r{3rqC4SLLttNspJoMPcaJMiqy zzW}JH0rg&@iGnCP`A{2y8nK;*u929=$y})HyUc(1R+%jiLz?v#S)kDb-~1V=y%M?h zOUL!SJRdy4>LEy*NE*6JcHc~pmAjL@X)_Tktnj}AR}>$p_y8YKs)mv1Ic>^Tt8&}W z_Zkp1zdsETPFgRWH>ne%(AO8Ni51dd~ z4g>t?n(_W)4`&e+4d)@QkN`;^1W8l~S+x_wPkldYQ&Gm?gXPA%JegBOHJgno?-!>` zkH-Ms9)x}J3|?v6OKFsB;vrPqx8R>7%^M+D|N{?2=K|5JH0y{e?#qe56M`32^!*Un2NXKW1BNbI0oR>6*1l+hESfM z_Ra#=!9BFE50fyITufdb)JiH9iDmNEfn#echu+6&lxx|`EkHia@y+bD$NBq1#_j543q^1WmwRl!1pSGJTz3+~6lXqi1m4~OV zwHsz%Gz+YCFD<$TqB5kcEkd2J3G>np<*Qe6PObJ>@3US{IDvj}q*{NLw;^NbFi9aG zKxwe}9YwDc((rr>_78T0UA~rk{`KQt@y(#AWf*$h`~!(&eVwNAtg^eV$GDI58+@$7 zg%gkNF(eME6*^URTMd5Ky($;qDmM{aGm3wK+A6*GGVJgifnGnmM;NJjdE~RL1}iOG zV(v4`1V0phWrO%41rIGQ5iI|u&8=?hEWdR$hGcnWZhhK&dv-W~P#f)|y)7ewnU2uD zz)}893Z!J|#JSM*Zkz3>KTKiNnzUa-LQx^)+d9+*s+HqMf8pl^rZGHX-;a+-Q?h?e z>#%J6pxO^)AMv5Ogr+*I_ZkwE+V4JI0J_Wt{T}M+F{6^l`YKshL^B(0jIk)HLzQ-Mst0ke*~Re&iRm83{LLln zXktWf*M_Hwg}Tv_#!(gYMN(rW3?W8S_=``Z&1<#LaQMem#&CRS2rHKKh6U$q1Eo za;*PKzlQK@qQzN;uVF1;b$=)^@#6-}v48YllKX7y*oZh=(**9d^{=r0s{ zIRizT-i!FgMPa9|#0KQU?DFF;YYgNXrgptHHlIoU`%Qciwm^NCiV~#2vrlshPFgtC zlqE9=U~Im#)}o*bd3x~dGT$`2y_fMlJ^1k*;<3ESKbTk{17k1?2o&4!Joa-U`S}Nv zSxA|$8I{k(u7uDv7rhv27B?>wMPQ_)^>FO)QN+^Q5I-g-c=5bkpFI+8eVN~miDlL0 zCCOtGpyA|v;|Y{^1ti}@E48^y z`XoL8X-Hm_v98}_w-uHvIQjNB2&vH#Eh-wt$=1z&E92P%5(2y>;HRKK?*0=3x7pY5 z_x|36%(&nuuqTLKAx50Rj4kH&6i&gCB$0%_`ov3fDpx_HN2AiRz-_qjnrKkmnZ#Dd z$7pf@OCq}a#dgWZ43zx0gF_v^(V5M`orv)7DnA$O+LL@+*gzc$HxB+$nSRs7EAfv! zlZrBdkLzRAR9#io2r@9iEg7U$PAq_7`o_B968VKnPkW+p*)KZqsX69TNTRZd$QZR` zRBWC8iI-t0Fgv{uG|+-zba?99H?HyI^MEAwG#BL4xBjMkW1J9FKKMz&kP{TzPrunKxZAbg+v>Cj-)gBEz+mk5GMeI(S#Nz?{Fc3Btk45> z;jr`cbLb-y^6wXu%@YBlj|8_sK9-AqAZgHpSYYf{Lpn)3xBS*tya-#nq59T=5oRfJ1FF^0bl4p;>ISoNmNB7u>Gc7=P2%Wp+H=XbcbcyrulXRkVxs=~k4ANm@=0 zh3fT^w(Izq(ZW#BND)JGgf7BgL?quKMc`Pae9E(ix$~tRf&^xqmO@V z#g>N4w7R@Xe`AmPVZAv%6+<3KjRqBzGM{r5r=PBrB}9<}T;X&#GPkobyol$;KShFN zu5aNWcAg_~=HxtEZLWM`1YP{noW;yXxZ$+*QCABxyqq`5y$_0hJsB5Oh5*_moD?qL zGI{=7II1!cezIGjG6J6vVGE}N^A>&9udOib&U>QXQCCau|D@IWB`Gs<7hSMqB7bHA za%}S9&;@1#?LG4NwE@LbPELM=@Rix%C#=GCFyl4wf@6#bI4<(RT)K4lsdr-F2eoNr zA_`~_A2_UvQN)_6ipvMk07GGa_iT$g{TczuDQDv0BU$i%?0{C?XJU^RbMv?RyIba= zVe5N6hk?v7pD3EDV*?^iat}Vqdr%+JG~G=dG)b=}p^grk~Pg zwze)*Jj(K|`s?afg%PGH`h*PME_LqX8D+kn8=<-Zo+e=z)P`p)<9`|T3=A#+p2=Ve zWYBznIAbz*>N%LOa9N&trh;-9e2~GgMYks1I_-iNsMLQ7y^e206j|C343Fulh4qK3 zzjFbz-R@8uL&1=#BN(TEk~x9$i#QNVgpSToAbvQt?CjYFDd4=2*-mN|Kr`v|*_Z7V z0JZPYUSfQ>Jq|cuf!6#aO{9q1p~Psyb{|g8j?W3$6c~fIvMbIf)`hx79IO;^)B~f0 za1z}|&ar1+2cxqD5gmj!Reom}2lW&*kXAVWfVcU){fe+l_26~!$?L5{2vn*nk?pZU zxdZ+lcleR;BO$kGb;br#S1|)TG2mV>*gzLD-Pn% zYc0V%+M;P=l?IA|eb5pFG+CE*Eigf0FfqQt;N)W&k$(=}F-zVCn*2^-k@3#H1dyxs zx-(ekx`gDllh?V^rHx&`9>y={WvP>|M4jbNG$4_cOQ=tOU zQoMc8E9hWr;1!O=+5a);^# z>bz;^cba=w(%&Bb2I<_tWRarB(eMNA1vF97d<%f1OpQ{$YDEgYt;F1mjyCHLl5%en zE}d_~0mdNxssn^RYv#ATwB*}~o_$E)2)vNDtyWj0&Fz|`M2D>&Xv)J|Vgc{A>T3H= z+#BWHWs8MTGE4KV))3xc9yq4rrp9_u{e8L~jk(UtKz3fZI13FzLk*oSWH9FI zGu{i%H$0Go5=`z_#Ekuf5N8mss>$lGGeUxF)$xJP?$JSj0Mxy?H<}WV;(lkX)$Y<; zQk#uhoTQ|LX+KB(BT6#y=*ny+1oKh>T3JMx$8ifgK-vgQD+tQ~e4_;8PKW~%{9i>w z2N4_LcJikTJS(2PeW#&sjK0BQhn@!jD?w3yi`Aw{pVgDY)o_mnIZVra4$CCZ#127v>e;IMI9v_OeRkZvg^c$wTAsIUZ$)T+vl22 zvkj1QUrp707B9qzyEUdfd-9)S?5#5O zQtds(-S@A{^U59dw7{eq*ICPe{^Dz=4Ulx=OE*|Um{06H>ZXxJ6xF(nN5{m5O2Xvp>1s^P;v)+Z zRm=>vnRc6!CES4b`0bB2 zQ(}Q)W~m>>lWs!TqN0F!MK(-&+$=;h#uv$nSt8s2&-mG~O@r~RdvBCP5>i52MKhd* zz`)p_Kte3E229c6@WbNAp@Xq62-Vu1E^+K}5<)2>^EH3zhBKprkvf#nZef%WNcwV3 zkB^g^?-=kfw5@an=h#f9!=>F`BEBC3i??ImDrWsZc~0&bJ78L+F91@40DHU{u$w-` z^>aURyK}yVr&In~H8ct~`>>eXy9=QA?wjTrVg4JnJiMsTY4!)*4Dw)pny{}EODcpP z{v{9d$wK zsIH8`+oG8+{nwVdP-A=gLq4AI7r}r_#YX7&aNtjd->=Zw#_Q`m(iS040}UbU=x}f+ ziB90a%fZvT0vwSEhBJI&OQw2fk4OxH{~^NsH>%{j?y>2jkF?`IpoqbyoE4A1JL1b{ zFU_};2M^}I$zXPB3Sw5z7~4<~mn0llpWvzqXL7ko!a1JCt75oInI`{GhQ2=eMx%wn z>92tNsYL?}0rD?M(Q}A#x!qv@|M7znB0d)jxatjJH7yQ?M(6}!X z`|qs9&+p0liyPFj)!<;Q`7>^Mg(=&B*!D(7F@+Q>HZg?-$Y+=%~eU-(YHodI*4Vlvcd)%*Sz&k`)F80h;>KJb#G zWBvTj4&wy}QijX4lZgMD+S!Nz`P9VkePazt#hHN7WQ_s7C4%o}DI=}rwS*CJ!+i3b z_!yG=+IfRPpYSv$wNBs4{He`(6UWvxT~sFVjXTfsGN0d2GlmkBpKA$LZckOgugdYY zVqhAGPU=)1+W9wDxS})d64y!yp=; zpMKIf1Bm_2O*pM`hf#;=#djd$)+NU_&Tap$*0 z!XY59v(93;1iV$^<|4s#$dZTJ4epDEJNdb(6+6#l);m9|!A9#G5dhr1UA`7j#=>f6saNULv5Q<*u5J9$6g^F}UkN0GmR zB_-eA>)+H{+0W4bI7M?<#L`jlFBic2Y#xgd;1(2fj|txHQBll2i~O!gh31q_AO7mJ zN3k~>0B<#-XbGoe&bA87&WKGE{<(vFbWtSIeI>QLe$|mZNOMOzoFO}4D3>E^k*^)b=wDG+2Uq$muGm^tN z>&PgS!rZ6|oeuj>qyaNV&93fc|5fQzWWj9cd_nyFaj~CKiI}pwjXhKfv>3s*AyxV9 z5Ny55$NWZn^F7N7@Y=~Fhl_~``n0DO%xT*_CeH8Lo9WkUpLp=yRdWro)GiI9*YyD? zN-||)2zSBZ%^n#}3QseHzGHGdFqnVFL~H-vo+0zlNj0(E>NX<`tg_MQ$8Lgige(Yk zxZmA`K96s~Nl9o8qjyMiX?`q?dL#gMgx) zl6HH9 zmbsdlnK?F=_k=nQB{;M5_o08cNypj79WcPp5>$=*mA`0cj!NUDf`VMRBQJ*im}O&& z>X+1G!R*+WqiFidr2Y5Xmbeb7V|1$kKjen0sr`~M7#BLZ*HPoUo@35~8yv=Vtm31z zqtN2mtZ%@3q*9#+q8`z7YVTatKr7q!^u(gan?N1wd_UA0(AFjTrzy4IyQUy91t)|R zz0#5BFz{g+qEVA$6dxgeUnE#5*(ACBqQTw_y(6AF>x+NDI9m^M9P>c)H&`@txWjhfcId}SZ>?Q zypR%sEfnv~YrSE9pTo9G0{9Rzj{xr_j09NiIf-KfYXwV(YsBQJkg4B=hz5TbmLc`k z`dM3;Pfg>j$)KFW4i6h}kw5`~$)!i*>MN+ED5!%y3bl#ZN*P#np6(|f9nY&#o`XgJNN_}sBj}!z{Q(@e7&;d zur+yp);wTn?`ju<1*vBYuXc~6Mmgf}ns(Xt zq^V#9z|_@qsNWsLP-7>|W*4+wT!u(spkvAlsc)s`rxZO3JpG4}J{inS8A&{S%3p<$ z>2O`p^8v3o1!ZGn%|H9)eaDR#DFuVEm!tfk{@a^?SBEY~alwDEnhE&o^Y>`P3GB~z zj#shvyA~iX>)T3e4Aa{05QKi9-_!IwORm&fa7X>%&pa|MFtsIOd)8ZVrb8t_1og%mD{W z%H0H`vd<*Huh!i@-#t0>{?EuMHT&Paghe#}zO|=%53gkFkgvfR*Z<)j-(P54?4K9v zXtv&72H#@SgdEIEC^;uX{a+V?D_mgEzlk_{tr81psSZMe%`ztW9$$%b#1i%YU+xC{ z7r?(-OaQ><^aDTt2PycbtczR`|06U4KMQ2LfT~8s*#n3^5qg4be}M5UwmBM3N!I&6 z?7d}FT+Q}37~Fyd3j}Ezf(N$_E{!I*26qYW?he774jSAc3GVI$f(3`hCAiDm$$g&t z+;^=zvu5T$^JP}}z&TyAYwvURu2Z{yyQ)NUK3mCIW4{Vk+U^JnmJ_guU;Nd4{6;87E$gh$C= zqGu@J{yQJ1DABLkW=6dNpZ+5_I{@C{qDcR8haDaj0CS>#|I5eu-AaBoKnfA3{}rr} zg%5U=|4{(doZxqfcTK|UsDLUbIFKikz;pP2nh<{C&xizdZfZSAvKCUY7jB1&lBd{-jYy&mH_)_BkpbTN)-x`ci=D zZ&4Utj_;i}^8Xf_kcbxqN;`F@{6%gHv0WBc6&WU%M&RK%(yu4upN|p7^>e}q@C5ct z{~qx-XEzPss1R{tk)ZpO6f9s(tjro3f2HA|YZ1%%VwKv{VA*@i{9Z*pvm{VEmLI$* z0qpV8i3{tIq-ZfytB{C1@lPV4J6~=hp0(%VpqKHaanlQ8Z z@B#lB!v}z0`yhJ1G{84DbBdLj;=^X9z`(M`1!KaB-rbV)(nBOg7EK@a;mqDV%H;0c zH~AN9pFD2gXm!3>a{Y)tXxHquUOwkL2vXz{V2paVRbhLuRs~(vC+R1d8>%)rYdhXF zt9?v#%-tR4#BseD?0Uh^9o5@@y0~6&ypeNKa%dS~r$Ztwm(40EOibhQ1Rv+u%M_-B zcRaE4XCe4Ee>*@Jemu()qP*R_;~HD z=3PvGKD7y>L-%n4*c{Zg`T|SFy2||)%_jBWAz$_+Zntgi7k=EUEZp0ApJ4GlISDhP zXEXxXJTAJ{J=`8SD&magGNJzxDV?BVOOB!#O~1(yh*)a?Gz}!f^k!x2b#c?3mEhOv zOz6RtZ{9~FV!n`S9N?6qBYZ`-ws!FtxLHY2cezI)fDa=SO}8bkYCBXFZl;J8F)47EU`lC%1RahQ>er96eFs}`Q8URp+=sASYbkNS+g#^} zvc`9lyxyc!&8JWbUY=Q=N2@~%dByPn@9SaAZpFoY8JgmXGK0j8`LG{j-F5Z)!PNJz zD@3u4!sjOi(+&@oM90bb&SBni=Es7P<(e|Swa>h+_(|pxPZ7^~L&bJeoY129(;?jnCHISB z<(IkrMSfW?A!6PF5z%UMku>BrpU3&E$7Z+to0dwK?o-z`(vd|tskaF3bR%j)ser>A zVknBx5}X~l)jXsrOq#^L9O^1q(9f{$qf~wXLDrNQ4&{w`zUXg0yvN0paVz%nWNtTc z?FVP4d`Jx%UDbamKjHn=sQts^rg$+tx`~akqmzS)f%UIDTSH59Hg+}uE8zDX4;L>h z>|CqA)4Bgj=jR8oyfLvcb2108vGc$Zl>jU%?sg^s77ckrOA{j}0E@D-q0{daX=?*B zScbZV@vqVx+}r>bDH97bb0+{78#g+On5~tqgR-505v+{3iHn7iiKK&pJAg&n#>vFN z&eqDn$pql!;0((ZwQzD&FmVvGwYIahF|lz1@B&yQEUaL~VAo&e#7&HBjZM%61=0VK z#|`da-2VyeuM6P2O9l;AFlhIKLqLA|oK^qN&7X(xM-%>7!5=I5V+DV#;Exsjv4THV z@W%@Ne{Kcsx9v|%Pk0Rfo6Gadi}~g9aIk{7|8aOY|C__Z^?%Rd;rhqnVdwn+-r-?` zgE>5%*$>5LX!2pge>|Q)-rgUV_m8{(#|r*f!5=I5V+DV#;Exsjv4THV@L#RK|FQka z;`A57|K=b4a(aIIM{JxN|M*9s|KcBUu>Q+G`Y+fF;6JgMa@Bdu1y&sI8TF@UJs}c| zn(?nt&?&9S-_ddE_lxa_P22BM@3q+8X54>@W?oPKl7Pv{R0fSR-5gHixInHjK!7hB z%|_6H0{4mReUrB&-f65P`OIHj+UleI5LINTa89eniW+q<{;+Gk{bT;~hA6&TE@lg| z`~fTaTD^hnFlBpUFV#HviqeSSA@z5@*oV5(nC2V)AhXyE%$gR+?SpDm6%p~Onu%dM z+%fPxm8dw48L6&8DKll8uL|VSi%Uk?M@ngpNBY4VL3z^LkKHKTTepU?(}I&$!>Gkg zH;+oCeg2Gn+cEdyjeUNSiCDh)i|LrqJe#wxJ2zR%`*o&TJbU-6E^zZG5KbL)n@_B* z&N8UXW%Tf4gVtU)`oS(;dtFUmz4!4`ezefnWsp(vGl3Z=;d|fiQqU?;lOxYk~p8?5#V}~#>gO4}{ zXmBnKfOeFd>va=62ou$Lz3mmlvkj%1_M94x{+7Aj87x0Ndac9vcz{(dOQy7M80+mN zxKBmHen+h^?-q!4Mb`TWH$_xm;$`;0mQ&>|YI-$s;#JR_xssP(^tnQSwQP;Q;Nx}D zOM~DbR7$r#$T8@nLh(U_j4%y}I!#ES9V0NLd3$9soe8o0ekJ>)tv%gxIAkLvRNhwA(r2#O4|AChN zsxIcp2KWuX!az?L2nyp1@GDtGg$u^pZ`OXL|BcE1%96Hb{sI7jQx%7 za&Y`6^M4K9<>3PTd#;0%mlf99KOippzd+po5a2J|Soy7i<9irOzouGXkMjQs%Ddl! zqOaPQ#_hHC)}?kX`K=4j@>goD*83WIxwSiK$gJD~8d(%Zub=f(W_+W-;(|+tbo$&& zU2!}Hd}#pMch8i=mI+lNQKSlm^@lMC$n0>zF}flM5xLBjiDGlO`E-1I*;uV)GSk~g%(U5@eJ65N9pb_=iP!r2*adElO3z8V2l)bM_d`O>Dc$#-_Fa^1PkYGcg+LevE3bEKB33{=5>gu7u zyM8J`rPvLs6!lj_{q~L(pkSys)e2wA5w(}suWK*%>iP?~E)_9;kbBV&Xllb1&6C(dpoxk2fvbth$=}oA2T3NxBf|ROH^t+C zKx*6YC#wh=!+nn#XKV}AEL*>&B;N-AaelfqJoZ~JQf^(^L|4kGN-toJYF9rQZfqCLHkx}8KJS)m-Y9dc1 z_jg${9R+hfe_n97LyZqaiSb5h_T12FkCi<^7Jgb76a$CTMZaqFq}xvB>iH8k$TPuz zC+~E{V3Riyl=6f9LUK@giUA;1HA=Sz!-uA-3zXo7nX>Lz6Gu|DV9R-F>SaRi&1hkn zCT|h9ufeqPZFN^p6*0ybKg$JbHgCTzq2#x%^WtT03dSqH4vl&FKvX^*Ji3$e>Wu8? z=*=r>xu8ee&igFZ2Wy|22agW*3{*JGrvzPYsMzVDLLv?f<)SO>`PIceM=1`Ue5;l( zF(#PbB^FglohFH&w2l{-B_8c4=t-Tl61;Dq{`sPysk>0jn|j7APyF2ggFtOYIy6^td>`l01+aWYJI@`kHREZRP7$F?=dW^4xkZ*TONECem*A z1MYfv;pjkXbkmPWMMZ@m9}E%lEzcfS9?c%N+l`wvT7pNK3Fu;PPH+;@`Y!TFg=Rfx z8=@ok%{evw=fJqp27&7g5wa0xVWZku8!}v1v7}sN5Y#?Gq26 zp%u>|<$DAa`ycG^tkd7r)o`ARnnQ|YpRW{SR5yKNxeNpOsNejAy@W_ikW{>=tF26J@%;-*R?WnC{LUydSjo~ZgtaFsilWta#hjH@qC6;70 z(F38QVkRe1j*FPHt3^zYwy}aaueE$z10NJ$?MJqPz!z#z#|s}bjY@mVHcm>L$E<*9 z!6lJQJ@9yn;zp1BW(nmp%#^bRrg{sd`HboUNTH%bEJ3ph= zrpDlVslOX4@4pvST*7unU)@fNV85^7-N0qmBV;>eNo+O4C>>;2Ct?`nNfcskP%@8o z(oNkrdEVXH0>q^1H}iWKN=Ou;JxErnX2jp1eVB`X7IVMxdYb&~%PP966|_VoxvngL z)+LuE=mCA}SdYP%SH*5I)F;lQsxMcpP;XT5p~Gl!%%y-MI5tK*$4fHJy*w9w#g@1? zgbw>Y8F}u_Hpy9}$9#mH`?t2Fi>@{`)0=HB8ojutLp^7zGv8(GFPdtUuF-_*x0s!| zG0*_P{h#6##}#OFMH40Cz0FC*1Py#y3J=axs#3aR3l|ul_hu4i{fK5FZA|u0D0V)m zB|duD$~TLR89Z8^#B+mE`jCE*yVokbpf~lbUs+sR2=Op|)LCVkS6<~mjmT}TdMQme z_F7;jaH`TYh)_)xAL7=L&~2FdCfXDNxAKCcP*OMcJfgBd-DCb1&GLm>~t6$YvIa#lB371)je{O zJNar0Slg^%LhOI1ZyOr#GHRYt0qto~9C_@1he%icr602|Y|}z5w zlQ?1W8C;n{m^d%GU`a{baHrQy3agtZsv++Ni*ye~%C!~oJMy+gyiA^-z{69nCDUFq zt+fw|MG|(?V%Tqpg@c`2EWk2W;Ib`0p0gkHrEYtc4t%{+!1QK|ZHV<^x`*9+izEx^s?IbF$#t`uBl(L!?Er@$zD*oMQr)@c?Npps&+g~huM{XIv*z!&6mnX4VQ zMDNEL^|X=;n5WBqQp+Rsj3VhSRLG+qq-~G8Wabd5oy5@5u*W4L#4$9#T_ik5; z;;-%lr%L=fg20wVLH2$Q)nKKW6?~(ItS@Yp0Sc)J$*Ji*%!EPc86RU>h9`f*>c_SV z(>XwEv@7N^`#d;Imy8A_%}$0sM&AW>CHREdFwmL7NAtVbQ;u!~b4S5#55QTDI#i&* zbDvM>=RRkZmR>-Hb~3O%u<2i&zeIkTppGy@MZp(P%fzxL0x>)8cCqK~kDM$+=whWw z(lcK#{Jgd+4koUDi44DSVSdM}lq}96b$Wsh`FhInD3WIPLv1+3OR>TF=jq_3I_xAJ zR#e{#x{QhAB)6z3!?$f7CMFw}j$|ufJ$*=RmfAMf8v@Jrg#Zl7z_+x`is1ID+02(A zY(sQ);o*@6dvPq#6yyYYMzNXGR^c%k8cTtpT4QSWJA-zLNb~hhtLlt`8 z9TPW9nN^iF3x^zWpV=3m$cd|ID#E>Z4z^-`rW0daArcKZYr;9B^o4 zmsaq6IvllGeCKKLMte3Inw~Kt#l-T8|H}ojY{-fW&tiLw&6p&TPK7CrhVMqgPddk1 zfh;8#RYIbasV^i+oK2Q5-hCD)w{_tH79N|gVM1~a z-SiGEpN`o?xBzkTizugzvHC(hhx3D<5U(QW=tqROSF#c}K*9T$Dlxi`0~tpjEeh?5 zVSC3ybdO{+;je4yw9=a{^ky08EgRS$#}bQI^G!hWM_PM*LYtj~E7ryP4xpfD_$=i7@Q6F?`y%#sg>jVN=9XdzJ+T_we+NpfP3VJ8K#_BK-gsK0J}OZ|vdf^2b~* zD&HI`9^k@<%rD{ zS1($hyJq<0-Mq$fcoE@_6vco^szV?Bk-SFfoO1d|A3w^fq|i5#tCJfk{HIx0i*+$X z_#p;j2}o8tXWhX3@4f5mx{vK$i4+>qb6?<1c2ffBn_N;~{w zY$1xBfXae)*v_UqH@i5a@y(|47Ka6T^i-FmoxFPFrMljuN7w`=N3Cu&3QFkYnehWY zO2>8|M!26!kdx9%256Mz=36xBDfu)Ku9uXpJV8NMpFVx9(4t;58u6sL52J$lJ}|j# z(2P8pIY?}O?HN&L*5knm)0d&xZGIk6_pA{H`dfo+!d`Nj-j%+AX{+hQBx0?$io4aK zMdr)>3vn`Lyi9Cz-ziSP1pW4*uwvOKFWyy>849_}3|?!i7^gS-jLfYqHO5Fh4dyVU{0i2y^w&d|=yaKqc+- zWDbBsEh6*p>$wY@bZL@!RYop;JfS2Tk5_erO^}2+(B!zFwYR8cyE(>O&-k&WBoi`z3a@`I+nkbqX{=w@ds%j!4y4Pj3(pFsUn zdStQ5?%|zaBXL84l>|TFe)?%($&Kl8pL8@Ym>C_-K-`I}r{}_tD6#NzE0Nv5Q}*hb zQ|OufZI0P-EjwWYLNzAqZCOkGEN&A@Lf3FrZtl?OgOdBYlSta61s|H|iL}1G^t5Fx z#IYeaV(7Fr=M9?J4YK~lVZ~E(`5zJCWCTf@WMo&f6ULnEmr#tsn79C?{BN=kGQ{?+ zRf+ReP!f)DO-RG8Ueaa2$*i>WQn9A;bf}3KFXPIH?Zd`y)P$4MK`BaYY?_n##hG<= zerz8plg(s*Z=00aWc{?X!8b1oi)CcXFI!)( z9S1qA4%q-3=x!!xBzB4YLPPS2EMKheP1T1lktkfm8)G?5LINKny7xIa9<_HIYqHOF z<0$~i3`W;ZiHpM2t=l+{DH8LW(SW#`{G&13sNcANxfj@cb^uwU$*k^9JH3$tfIOQ{?Y=;JKqC zA3gXCR!;X)DmraUf%KFMv_(ZwLn=LPD3VOlzOuH-Z)K@f_KkmwVBdQN<+9%GxtjPf zB>WZZmAxN#iIU_WF8ly zDBfRs;Yg-?AAIIwziHAFCpkFz)i4B&nZ6-vm0h*Tl#1}OCskxpFuis2%EV<#EOqE~ zE+nhQ$bfFMI-l+3cHW0a$(=7eWENH$C3(l_PCjlCX)kJTYw1H-p{y21qlO*@A?zby z|L3#o@`c%eHXPPPFw3=`wyW7hWNd##X$Luf$OuD^JE@kj1(A`oVB-sAI;CgRkD(_& z;6h(5l$x1^QeueAKs!$T*DLGZYLUcWj;6I@)>>50j4N#cyT(Nwuf{uju-p&g2YO^W z(g)t{IT1n>eOHPcapkU~La#rl4=Slh3limE*fDGZojR83@x+dwXsy`{gMX6Ba14V( z@*{M}EDIy0!^gl@ncp^Z-`u|BCVJHvI}kOAz#~x`G@nO4e?USPD|`IwEAOQGnD~*T z%R)f!@S+lBtl>z}>L|Uw6WE8_wqfYNvCk>N4xv1gSy&%dm|{_~>+g5u&dC~CN?-}dx4IG< zjGc5JURwK}zwB-A=|WH87JhTINnKb(ZBU#W1=3UTSXC}i;F6#MZ8>Nj=K>|=W?R9^ z649jBmh#~1xn1$XgW+ypkve`3hrt46#nfTkTta~^vras$^Yr*1?=cLiQ9J;>F~Cmw zo)vu9VJY>Ry0UR+r@w3oqX>+10vuI3KcsUiKs?akK5w}UX*&V-BP%cr%wA$_q#5<} z%&^MJWBD^ZnQJny!Rluyb86SCQq%PPkrU?!zFud*)c8Uu;m~|grvvc=Ax;tx5+-$L zXR_rW;W|FT>x3g#q$yJ^wMngZ1x~3#`a(mu^{hka2Y$fk&@Pkl9SYo0mPBF0jxq9A zCQ(xe7L~R4DDa5uL9!Fa(V+qYzbWZbpM;s)HhCMznmO<31kw$?8tsOE4P=!J-srnS zXBb#~?BpS?>}tH;r0>0UZ<=M;bK1;u`);tKRJREEi0;UQFVd||a}d??d9&6}4(&qHZDfnzu42$iS^ z0&2DU1FN)km6@}F{^vKD)QUP+3$`_LAs=fI;MYSrDg)FF3p&Gseb|^LvDYukPwrC$ zAx-z%HLsUc;=4BK1iveiwwSi!d}kYbPLI7{%2rx6XHlK{aW=TO@s>q>KH_wG#l1(_ z>e=a`Wq!pL!Pr&0;jIVO4wvfM#=df~#*6L^!xJN6Jjc5HR8= zQw51WBYx^x#1DVfqvykVe0scI=<`6{jd_`ISYPUL&o_Sxs*IBP@`j|ZZ`KWDspCJ|^H2RuBDHelR zSBAh0<*jr__*POO>&p`-GbrRI-KiYKwZirND7+MG20~78x-XgC-Ry8$kM2IkRQvqa zc0+wKIy5Ac-<_G78rr#0f47F;=4)~n%1F;Nyd0{hgTYKhm`~*`uFqXsO6R??K4v|{ zU~fv%`x)X#X>6qWbA(|tf33|;>H2K^Tliq5TAyWsOb^-UP!_|WD{X}U{&SC$NI|{F z+n3Li=~8jMZDs}sb|>7C3l(d9%bt?OEZaY}90e4J*P%^*yA;COGz(#Z7z&^G@d|N~ zI&dmGuO^quBJ}sGR0D3AFSQ+OI!#c2bFXbS+8(< zX^{@+@ZvX7GcI@rB{g0tB=2R}v9WlK&Qu3fDJl6Li?i`-=zu|9Zeb5SH+(BEBJm)^ z8ClA$JO-ZT+jD;H!cS9=QmveK^x_LT`*Zq*9_b56;yUqy-J4%|5V4)&*je(DKrst( z2t39cro4UvCxoYg((!4(>;BOLtJkIbdzOE)u#$BO zw;IMlhgj0GE!xsu(1{$X4-P&7c%-*?y0z3Iyt=xYn43E@vZB1Z`3!a{s+pMRSIiEX zkyw-gVh47u-mG~)DoezEz@1e)KPB=o#Zv@RX(vU4V}dR}T=Uc96ROE#luv-?c7&=_ z81}eOW!#^rqvHT5t}Acl=tItlElb;vJjs|Xlk1#~Yd*stqsA+0>i zA$~od+KO3YaCB;nJ`hU`U6Yi~36n9AkhscvXLfm&^3Hwc`zU;KEUs7!t9BC(V91Qz zg|bK`fZ*0F&)S(gtE!W`9e?#U+lbSBHS$&i*tOA-DNs zCg!y5Ro7^cRpesr9oYS{3(vNAFpM`OLuNJ?q`L!lXuY=fO@el>=}r~Wt}CzSt*Kr$&Kpt-D7~%>y1W-(tAuTFqHKGRK}aBFe^!F0KCs4 zw%9Ak1fB2KOhqsdVa=?=F1?Dkp|!9;#WbY0ka z6#Jei*IBNmO)Qw@$q}#+gaDGpe+!FBb8d)H%|jQ z-3QQ}$4M+H-5AD{k_PyuNJ1NOf@%vCBDo1msYx_@_Z`4lH!q3o?y?)zrLVTML>^q& zbUGQRcCmSNlm^igX+GHQJE9lrY77@`&M)?e9F@P-%063^wju@ESp};~!C|eWbzJ$! z5l4N=OdvJ)WcgW<1nbbD};w{8W?~+lupqvSi+fCBk%DWcLlZaW*7I!fB+zVyva+=9$uo=q7xT znENc9@@kJm_>kR|fgP4F?vDKzUg?A~d@j8?yNM9wnbf3mGB zDs`aoMI`-CO*6HlvY%AP0XBjhF(@`AQd@CyD`R)Ex;h82@!w(WBb@-~%=E`z+G_JLPP53c5GY144 zGDm1#&I{f4H5fF2QzNIJnmQ_q;AFU85$sC6X7`58%w)8Zl(^)PrQcg-Km&8$2c?GD z8OX-hdd|gW6WBwxP~#Co9G#{&_DSbQO;`rH{rXB-d>&3x^Y$}U@Qm1%l}UQ!uz+qy zydMNu_R)LPw$`L#lQt*DEd)%pgSSpgj!Yu42#e%N3)hne_zIQBo`&)Z_66Q*{~(NQ zl87aZ+s=SG-Eb!XrCAO!TG;p0I4QC|x_0bBcWj)njreHB1a$4Gf zD|($5w%1*%<9YP{OrDQj5$Cb`q*%{O{+f<11x)5{w#h&AMd%u~Sz-i!D3#UZJpTqu z;!EhQoM#<5~wPJ5<<-Gb4e{8#N-J>4R&Qxvpv;o z>j{0YHsW5=>nmpd>ME2(1F1|YeCCgjrf-IDqy%3lWIY@eKZ@+}%3x_7-9}8fIzlYv z57Xv+q3jF*pL)48Ov_O6VUr?J-@8n>?GfP?-!TKe{bR5_!`1@ND$l#5**iTCLOL-) z4mY%9QN--JZ71YJZQZN3!B40CorzpeVoHkdkyPS}3fw~avZp9xiS8rAk;pzYS_QLZ zoL3*uR8}@X^vv5h&tLe~p?-vSC$FjxtRJM8x?IVNMllT}#~~`@w@IE+DSbpG&YZQO zAck_OhKKgu7lsf|_a$vT7mQv|_5vRR>%}IPcFS6T02;?itV#_p4wY9sW5uZ zmpfx{M=?a-STl8+?0<6i9WT?ptD^Jy=thGmY2Nh1#m^**t!uD;T2V{AcWGm zj6BT`H=p8&YR>FGJvbrV4B1f%UnhZuI#ai9uFC=#v1$jgdp|nPp0=>`5_o-Ms^3TP zE(H=-ZO=_zNoVV7=9)EdljczPX8|X`cNu#Oka-^+uk+fON6ChdT(xd9%Anwl)$A%vSi?nftm^J3~k+D)LK?@7bX>SKA`J=L%skiM1{S*61E{9KMGA>N(2lOUoY?2@RhtUDgMgG)xStYegH=Jw+t znc8eVo*Z=j#f(rFBQvd68teIJoMwvkOH56qV6Ef})&$bak$NOweKFM49ZjNYTLha^ z$@4T)f-_3WKej@UG8+R>#RYpH7Vv= z!iVVy^1FN>iy=3l)M(*1>sFm$27Tk%#WqnJUHKVnz9$vH1kz?{29)-CtHH5-g16T9 zlrw-BAb+r=-RJr5_@0}JR!A{?`5T+$J%VEo@XaM@Nl62ULCsV=j9iSepX{#pKX=#H z*MGJ;&s9qZYA(>5Y2Ubxn~IJl3mLi13002kmunDMI%#OoY=}CkY9H#X`phX|%d{bI zL#9bv)fywvhmpRa89~mf)?)`wpQci~a68+(5N=&;T{#b{39G`_(sj_*7ELBmJw00T zQd6r)X55+CAcn{3$apBJ-x?3`!DLfQBLDs%BR9fvrY`5=;$nmHis#p4Cfr8lMdDEWRJbkmjrEdca8RBy|dVfzZNOYVZfpMgbAGdK@ zJ6ThEvVl)&ML%Y#GCx$hDd{+KRFjU3MgjXOS=h^;NvWy5Z67YeaGU^j4Y)3e8hW%E zo#ti|QcJ$IG%soyaYrFfT9qHt5a4iZs)%mWSxU~VD0ICs@`IQ6PtAHX;M9(V1O&hv zuhNBr6MPgEmcCC@3>^qp%_&dcDP1R@T&#W)Wwsd-yiT527f$c0`OGRN&eS8Gi-U(N zuQnQI)`8(!9v+uY(=9IEuO$KdUZPg_o3!0Fo}8UHS^$x7DQSQX6(Htr@ouKTM7hgg z1x8@<4ft2}I1^%AL!co&&9mUturMZawx`&z!pQDj#jwmkzg3m6@Gw}^2?LBWs#9Z3 z5VCmCJKQ+Ok>exq{>;>Hf(2P35v=}rny&#NKGyXby!@}9u{;o1U=thab2%8*=ZH@W zahez*!S8U{U~wD&dxq#6@u%=1n&4l}Ed6Sx8x|8n03(5eQ+Po(#!b__4B@gr?R(r{ zPIch3G5*%-vpLmK#fjg5`b6uE$~&@fy2u{0*CK7nUTY?KLcag=LIKwYz%DALPk@p8t* zAm(s4un95f@Fn%fes=!DCaPFQnIRJ}EZ_iEH!zhq$pl)D!zvCdX@i4T2&+c~9})(m zhiSN`k{q`#+Kv+kDMm{Zr?H~5LOOGn;Aw)QzCkZ-9Z~x z14beRRs)vR@TSi`*?G`jv+(bf|C7SMvtY1WiLYfn_ryV}vX3)Uv~vn_AJc87iC%vR z)4C|F!$y66l}HE_Bm?W8SG)DDuC#dC#?%wntA0XLQN}u*;jZwgQL=)#LbQ!U`LEAdC`(=iICDaA|VE-1C2?{>?95niWc(<|IF_{hxBgzvO zFM!AP)lPi{B&#Jh@7JNatOS7K)Rh4ezJG^2KA}81q8hJ0Z_|>x-ewYUXhg#KF7UH!9A+4!6!*%$I*hQZ^F7i#s%``zpUj`zy54-zM-$9K>dF>bt_J?AqT|Dm)uoa|nE=rs_@+(AVWQzb{+D;;anX&ZO@$Qv#-iHYO3(A9|GG z;QZ}P-ZpCB$xBzRE=in2T^`E$F5bn!7Bw_~nV*i)JfVw2=%hOoV#F1u!Ioo&6u z=c(k?U(&K|;qq~Ymdllx^z15$`U&d`3rjg9ed*|v;S}(ZhQo725kf8(z`WBU~ z^|eX_`;e16GK7Xr|H}O>kJOr*@zwiVszpY{@?flgUc@*7;%hkvc(uoz+!{)E*J#i8 zEuMQLcXLQYl6@gJwAz*LndzBDE95yi9oABS8lj+`LikscQ*80;uTOV}^s&Y&Z9_5K zRp(OqOKtTM(;a|AQwv_DUs(ltc|X`za?ZeFbxTX2v>%lYU5E~E{SqK>_o3vDmRu=F zKErsoSbXpHOfWzG6XGkJg0sy#0BS7p9hCd9`Z<%u^>!w3OZ$qB+wHBkLEL)SvZLSu zt1<~F|8TG-X4%(vH}3Q2T8()B_-58G zU!}4(>Ir>1BYu6h&P8eRYB-{%ogM=6lZzs)ef_{KYsK8!YVT!h|x&7@k>O$u8D+oQ6+uDj^ zmQ}s^R&RR!r+H!!^Hace+BP+VeMs%6}_Db`$WI@{c?|TkdMWQ=8UK2pu6E zb!7H=?rEUD(2=AA1R0iZ4eRvOUqy{ka4pQb8lzh^=Evt4`M4sY`2@ zjAF+@MWW?_YqvY8A`)J6+I3n2xCMp+?d1XbBVTe-+quS(Qq%W|R#`Ha^_UC%_FnGJ zH8})MGXDf(lln&|KmcvyE1DKtrk~b+PC$mgR8nmDYK446nIcp06-qbbCL#yVQc~>+Q@Gv1mW<+I&n4afqMvsLf3mVDEz8dU8|y z`iIV|`)g=H5wU#U_esaDG;?P_Q4eFw<|!F@a&GA68pd5TK@e^Mnaui_w4+b%X{;Q> zmdw|XtPNGt#zSTy&@(U7nH|h3N%cb;i=wSf{j5--uiZb7EnJ&!uon~U$mH4d-n9cf z@-NTmoU>$X;qGPsk&OhNj26_Cf{FGHx6eHq0Mh4`G}D0{uz8?;5ikFSi{uncV}=>~ z1px9HcxN+F1Dmck+WOQ;nfY^R8|jPE>okkOw$Hu;P}d%xuuR>)x{#-ZKmBxZLOu5$F$MIE-6;78Q%@HR`|IM=#$}bE4`f4XGLC@24^~*|{1qAB1 zN}A?8r#2C*s!(rYft_V%0X0^Oz0i$wBL$nVygQWm0OfpHVhcLI+cwuxCSAT9myVtZ z?7QX*;UF3J-QFK*;+8k$aYZaW_7T*~dzp>+p1X40U}GXs)B2}Br>eH@8O^-NT3yjo z>O#lChWIZHkT(t<=>N2_j}O!`^(rk{&Y0vmJljH)rvbGG31uyaQ}=E8 z<-Pg0C9G4MO|E5LL==>jrTe8R5^a8R3`zLe9Nc~8)wc;2@b*KK>C&V0wYhP(u9ff} zR9_Aomm0krnohBDKA_FhLG<@H}l9z&*l2%p=v}ER0%3%?;SpQm+0Q*2sNoK>uxW8LM z+IV{Oi(>bjapW;YA4bQr_ z`AeW(|LRU2~uI48nXagrhqB zeT{bzsYWuj3%!Y)ta_XSmTE4U$}LTHJ+106d@Y4gzski1P)rL7m9gZ~UD zsD7CQ2JJ&<-*V%%_m4nq+W;0K>@ochKIgRu`)o#poQ)@=P*A$?V~(D7#W?8O??Nt0c?OFQ@2G@ZhWlY_V|9^-6)?(?n73_!Djx9m`ob21 zh(O8<3Vxe6o7nu0aHPit?m3NLx|WZg)kVC{TR7O1xneYWtLmPXmgcVdfi)?CRHtFD z{WO6ajXki*IRNT)MCfTkzIvaZ^J7E^ll~_3@6inak^k4X*KN@0<@A21`Z&QwI+T-8WNbG4>VqU?C~PdhAvRDC3h_|}E3Y5yL?y$);d5^>Nz zp1&hx)^MNR{IWOELF0s1eG?>xLBy{67VgVT@M? z1wZ>|thb^l=_fUsw-jhB^dF4?g{k|V5z0{iBc3D~91s-afgOMU&&WqV{7D?CtOi}& zKhKNY88HmXzbhbhf%or4NB<+{vZ<(1Dh6zqTknhN68Haly|K9FHa5xf^m3?P=Q!pm zupRF!rl+U*To1j@f5^Q8{^B~DkIFCnXZ&uA<%ukT)FJ`Aa=2-aw_{)mY7xFKzyL3 z{;JtYg#g)myv?^Qhwp@uv4#D$i&B!8%R%#0Up( z6P>Zdp7DbWCJDy(t~tr#zu&i8HmXxXQgr&9HSRX&Krxe`P`<5D*-api?)r@RXa^bu zktxisDsiy$duo4J*mn26A+z7d*w0pyX&fA{foqmZaPr;N)O@(~acuOKY+MZ!$swy8Do!gERv-?rFn8 zj0yy$b&J`ta{m(LInMUi_Y_>s8Gv!;c#fj2iJ}^Yg{EWQEqRT5Tw#Y2^sbb%oi2I% zyDRf|;C$>J;@tGAKMeCa z^Cksoh|knjHc3+#^or8I3WX=-{%gfuSEw+L=1x)CBB6gpEa^hUE?_VG)Z_Ogn1X)9er~rgZB`b2@n@v+ zj25@WINney(_0NFb0otipJ?C~S&TfU)~%d;1Wz2n^iAM*A zh2sXgPRsAoa$wETDX}an``wPPZYva8kax%}5^e8(Mh|zMzMaXYpg6LR3tjmF`35Zf zQUgfyDSrE0YSrNC3Y0NQy%GZHqqe=*EG!Up=sesOHQPNrX2IM)okOCfQpEqg3ej!$ zpVtD8=jar|*}FPT_)76^$*i4mFAvCL;B8h{%3zJ#_mv4EaG3Y)XTaEsX8M~X=+m3Y z62xACPW#f*pR8Z!l+sCSOs1OAD7-n>S~{Ao%7m!o_V7wrUnEN29*d9CA#YRnWz!aJ z1L?*i@#L#Q{TZx1LoZqRTe{BemO7+o^7sN>a*s~3dR@a#YaUp zsgHc*UBjf|)^9&r93W3{;%o4+5!znfvy99>{oJTb{XUQPcTb3o0KaIQpJxi|9vY<_ zbeGeuuyxvJ?k_LRl4!jBd8OojT;PUzH6KDZWJ5d5o^L2fV{MUVqeyj|%8E!M0_zQ& zjwX^O_k>nVu3K^lR->w*rA^a3P_)+cEn5Py^uisa=znM6GN1EbreajJ_}b#`P8Ql!M{Y) z4FOe}3_`yR+pKfFRtTv6yQ8%XeUFlkkgaBkbR0Vt-nLt>T#Bc~V#c5PsMY=j#zP^c zi`~9*_SVPsp$Eeo8uGrJe|SJeZqb?X+-iFo%n2)?7^D@Ce=VybLqyBC=#@JoP$nnh?MsM2%vNi?#8XDm#L)QE zU!N*wtKU%C*hx1%*9l;>K^PPI)OA-!k|FLfy@B6{wyD8+p*BDl<{a009jGW8YWC+5 zO#>s^lC4ew??1XkhsAQnew!q%&*TYUH<;ITX$vCHz_Iz-(5Ftmoo%7C~yA;_f#R2k7CE$3+qO+!@Z zJmO}du?>{a(gx7F3`M~Gr$f5`Q{EFQ@cx#H&VKm9odH^v%{RlMaT7W){@1dep~n*V?5~IU?(gqwG@}JY4of8DvwxJ7A3OI_t|aS~ z`1Kb`{ZB&w&%gyIZaK}-1TV_|eN;zMuwaAEW6}Bw0@QWTTebeqhVj=YIEyA3msRDq zG;I)tdLF{;+tFPAprM!hzxw(GyiaMa!17;i3f*4@4k)9hDE#k!XF;(wgD+gJmY1=B z1Cvtpb_?m@qGltBkA-cHL4VZpvPtPEdR=N}=*~&_tA1|l&Mzs)r)ke_lo#idvMo&f ztX&-Lm~yCFO@1oF`s14OTV+I3a}KsC!F69*BqoZMI_!Tuh0>pbIFfQotNW5?qWnii z+tt+YDvfq~Ss6nt$X2Da6S1tXU)W^woOFD5o_8XQ?s`7M_I&u1LK8tD9Pz*8!dZe) z79DvZtu;G;8^@TPVGDV%BQg>&(p7StO+_U^l|$b^=kk}{uf$btUr_D)A%%$>gBr|M ziP4eypg@l@28F5j>>vV^E?RGp%Rsscso;&R&ZlAr6OtTU=ADzgJL zmWfHGiEtE^3*@`Da$5X`-jPcy2!gFz#_SntgU80#tLU;=Z(CLvP*5sN#Q>3Qe3WGq z-h~B|MwN6PfLHG?Tu2#x%^ITLXLR&eU8qXf+=R;o&Md|i3H2{g#V*AMD7U9-vLrgMDO}^#a{~MbUF3sahcb;ZV=xd zw|ZC_MxA5eQCSSHoWH#s2w}Du{JpMKmC}+bJsNS+&#P-NWb#nd=|e*#HXVNq97OHl z7rtU}U2Q{yWITM8zn|LkMy+d0p*wURg!*wH7wZ(ms+FFaKck@^Hk>Aty_$3fTC2a- zPv{V{?zl6ebywE6J#5Iy!GyZ-KK9U_RdJJy6DKw-qD6Se4Be)>W(ZCEX>sit;@w`@ z-*wZN5tA3H16RZo+Btr$rR&)j9o1CiXy*c?z-%?jt^|Jj3@kATE;y<)zx&zn00=I_S$O6oa5Z@`6Rg=;Y=mojxyY&4$NN<*LxQ`h0cF+Pspr(^`?iPOBp5x)sXRh z3J->q@fl@OeYBncyy?L$@l#IDz6`DSyW)-Oiz=HYAdw_)!&7TPvTr@4zVuSS* z^8RFk*B5JzNsKlu_x^u8=qP?T9TKkAYxTTE3NG+vCV^Mwpf}acaT~EnQJDIETf;*e zD0Agk<1q}ezH;aBd!OAPpQYH2fRr#MeTFzm)PwJ$0oH46!ay|nuNP~f-Q0~74KvA37o+t~67<$P z9z=p>jjEbY5iY*q{b@H^yR>%AKbdY}3IJ)VX-J+=kbwA+;2N4X>+KF^tVU-%`oeTq zk>R5OZX=@~y?uYHkXYD`K;GG6X$18Y3_o|@rGHfUMOgW%`_EMPedV&+TY^#tjz1Ae z+nt|gb<4%1O!6RfphBvKX6L||KF!+bb1~B=X{(%Zv_>oV@kBFrcZtYRmySrE7V=0M zrnXAkXYASvqdzPkmQJAV*Q?F`o}upb;5$-e0ooYFRrZrhO z*7Lzxh_kmp`%rE$mo2jH`93|D16Cexp!d1@QY07$U z{S%nL@~J|*QGYv!>(meQQ%Va?fxlqvF?_2i6~5b)=|-#3zIX7m{+s#bj+|sXfc|E{ z8%N5hH-`#M(OC%AHf(VO%7Z6KRUPbR9ua8`hTCvY+3&2AEA+|BPow3ZZ*+%?zw#a& zO&~9x1#{8H_@x{ODwki-sgz0`JhWpY@OQug9=+Y_*x!YZ>hq5EW4HiJdld!mA6lJH zn%TgxOXm$%9BUnP8LNp#lw52v!#MMYn~5h#a_c-l2s@v=Y+`|OR|kf!M*)!QRU;$Q zLwpk`&Bn*U=-w^T|5Y#%Ed_5R4wkSl{I4v9q6y?PH6svp-w^%}@<7AcHiTHm4?`xe z*>Q#8k8aEH@~fwTh;Ek4*LR|?2F!ZAE8$!Eo+8`dJqNjRWRq5XR%HNh+p04mINg^d zUa6wi3Y9uBKEy=Q!;-QR(Avl0fjURY^1vR=;@N6yatb;MehLaY78c;$>@k$By>*`x zIMdWro#dyEkwDG;s{Xkutn0H9xXs6lN*sbM#81WrEJqm`mig5;JUslQc+IFK?L1oN zxbz7{cu9youR{`bDx4u}w@}nv0~>a}AUgA|*B1W91KfMQX*!C&uLi0jm<++9fXNnTGsnGVW2FQM+&MMTV;mwMjr zG?Z3)28xSRG}KP#6ZNnM?7PeW=r=SD%8BV4AB?~ceG*o0UAXQ7sW}YmeONihQ??p) zk_0?%G_Eb83qptJ_%EdGt7cvU^<7*`S)EWNP!pApj@RBLo+pJSFJM!}3=sWk>dmPA zAv;5-q7_uX7D9F-a%Izh{u%4Wlyz3*p%bQWeVQ$P1#L1g$+VweAN_E}EbNA6utxKRl95`Z_Q~*#5~*7bE(Yxwg%y+i+5D9`ntLGP&+CSILX{9T_E*JK9D3MTp?-_wviN+si)Hv*TNA&hD z)W3iI4+rEgj^gk69Z)%u{q_B|4?+gUb;nw09}D)Rsu)(gr2lO>oPZ~47^mv}whxw= z9as#5p0P1AsMaTNw>C;JI2zYNklV}TsS0Ty>lTxFYOP+ndKA(FL#-S%F zPtgocr>>g#IhV!;%lqy5Ub3FES#h?#kWck_^+1BDnZiQVD!IS(-aO67It#GO19Q(8A%Qx=W{hNd7XLb0fBU9 zM8hWi;gs=ik&0@pj$H4K6@vGm8Nq39Bjcaq$J0g@x^>0y#zw!p1Rj~H{3Fx5?Y!NAxbeKv=+{`x( zL35CGLtDHeJ=d9@aJnqeC=|V4;;_4D2&rq`G2NfB_;CO0t(|+EgtRb72tJgx$hAVI zdiC8Ap{1TId#*97?o2QPhL09Xq69uK{b@Y~<;X~d>5Fa7BX9vGyEsr5M&$SkI4*(lzwi2uKcX~%2s@tW9nZO+R0}b^2RYt%G0gwv z;BNoA;I{~3ir@d`0@3iHoFP#?5sBx&9`#xVl zwS+XQ{xM@n>xasgll4V$ll02|V0N}4m6YUo)#=&IK~uy!FY? zrK^IHuJ|q9m*d07$;wEY<3X4cky3A5XL;_fV4uPN5O$kLPC;ABI-0$ZH+>E_7RPi> zJ0h;ym;(%eGiS$P8B9{|`x_#3XB4gR!S9B%64rI?}e?iAoNvw-2ZxVU6< zs7U;kYKaac#|PP^K6!kw(N_E@@^Gw0Ikti_Q{7awEhaP4igQ=;W^9Klqi-uT3x zjG(r8<~hnHZRg^-9Pf$AaBMNOS$|NUx-eDN1pd@liecBV!qAKOGL1!4-D;9DIs5#6 zwczZ6Qv&st1$7zOc6>y_BVHYE`PZ0J6B939-k--NZF5!Nk?$rLJSKBT^5yt_oi1p&9w&!BXB&HoI#^9M+~cx4z-~3?e6-c z&O&Sbrkma_Sop?%n*|#VuiuBnT+7O+FD06iv13wO)4fvMA7ougjfq~EL z=eyW^H$ZJm#80KZ+1AOE?t7nHxH-TtOOu?}6f!r$rf#@x0g_!75ycJ0eImMqW>L$z zL$S;KKA+h_mV45`fNuSSpg_0owfN?Y7V#u(z}%S!&+;eudF+Vh+EaT~sK%x)_A}3X z`;J|)yr28_5-1XS(l?F?x9lcnrRC_-n(e&-Sf&bW3PT}z%jb0!S_)*z)u|08{a>P) zTOPn$$MP-9z3hhE!>~~&==o{W9~LQC{%2C%8d-zb>5_VjN&9LJGr4n=+>sKvT|52A zb~s4SF5#Ft#eZzoP_cKkZ+ghuEcartURJ2riw>T=Kc}%dGMwj!{(RUPanrTS{jmw= zlZ?MWCGc~@$4r9D@0ly2D3Tu zuWhF7^_pl8r!3H_UI&4=ZzLt1&l5m}Gt30vFx%zbdVt^M7eZT4>+e0#%Q3g*#52c~F9@C%CwICpjQF z%k$kiUfQRVi4mU}4GT7Pl(n~<6K-nPMQ~$eOuhgiyi1uTutw|7X`q0f)APoStdL7V z3;#!iw?2GpMyN?Jj=nk7stHC~;kpwTt^$iQiR1qNkS3nNf=N(LVK|hks=DD`1ocy- zx9}r~%R8d|wb}VF5y&;_GmzS9C(iD08`Fn&wh_!uIe$;5x@Ol|r0XSQQQM1PtyyC~ zA!D6d#A2hgu{bBl!mr-AF7utl6!3K0F7IZ>i2^*49>(fx!bWTr)%}^3k#`Wjs5P^7# zvTf@wdx8gL>Fxtap>G(Yi@_p@-8FXyH{mz4G{bQ;1y0NtfL z`~fIQX1JhcAV=NLxkgL4k(~@J6`YDiHgjhFv}CH70mj$mif^8fNUK(g`|F#c0P?56ep3?)^1QB2S2-bf zM=%C`{AHxJU+FotD02-pTp?>U+2wrCqfyHPTH*1>lp&O(*L@a4p3gdhx$)`kX{?Ol zXbBYjn#Zfq`%bV<-j{PW?yS&EL~y`~MXuIbO@4846hTS6`OStw>h>FssNvik>nYAw zjnIE1GWG~FtoR2GM&Od|SW1y9IjUjR&dA&e(Lrg+=lA=rd{YJ%mAW`ucZ)Mwnq7W) zj?GdLo8t)m7;8TBZd~XDNy*p|eSl28E=}tMzy86KO{-;87D{`E{1q%?uV4Q4>_ACs zA=#WMjTvlzTyjL4c~@b5^8PN_)|BADGLf6HUQdW?sc3MD){jHm`ZHUg3u3#C@%k6t zQ+m^s#cR{3%ePPiMMnRY`9|0N)yW0;Lug;<^vZZulTS#+7Vrt^$Ur$~%)07~h?4+A#g^Yj+>iZEB@!iLfyaIu93j~yTn*wcQ)u@ghd-;@tSTVx0)iX zQ?jcK_$$|#xzTug^TF86Jt6mt39WW-pA3z5dJOwbkF-9!eTU)Uy3_G>yE1?A3VYtu zy4w%!XF1zq@TBZlUS{F~vdO!|bBW^w4uj5@I+a-28fH1nv>T8IKkJ z5p2RY&t*Aipv}7#cR)Xes*P&1YL}_ecsv^tJi+iui*>j9TB+;F&*)*!o|%J z{2npppG_q+kiO^ROwM%ETuBM^fN=fr>)Yhgwdblybp!1m=|xeLU@3a{3+tViYchm- za!*f(;<zR?l3jGbIZ2NHQiYoV`E4L)D2L{b0mYS z2%FFX7C^<5<6MnzzgAjyo5J2?4NrE}V%@Q2+vaSD3T*CS6RyLGQ*n)(CW>=xr>Xbr zAse$P{pX#ml8n2@lJSv;XndUdqSZI7JFsF~<^W&6h)lTzkG$Fddh!_R;-V@P7Wn=; zmn5oc@P>*1tE4wx{j0)ot?*4HmAtjTV-vCqa^wrX@U?Jaw`RB$0AWp$%l&O^`KrE6Vm7ZlbgWtB%wN@%1#nd+JG}qZGf* znpK@Bo|;CYh+H*oZ$hHuaD@;Cji`{1WdG!@hmf2yww#(Qudy}9=qlQ-*jm=swLYD- z7BeWO>bU8tr@4#D^nw5&d3si9xB+b7vlLkM2l0(tNKIx{3owxk-J;2NiP+YEs0F$P-DSW>GRbjv>8^Pwe^)x% zBD!oPx@i#9cTJS)wbP!3U zV%&cS1=_#yOQ`?2ww{WL$(=n!*kB%>HGp}a`)(GJcoeF8gDrau%bUGp>v>?iEh_qv z3E95GZW{zhlg-Cw18MnDY6~SZ{Cw)<|6~mQCa;Lz{iT`H%<6C&&bLU~ z^ruuk&oh8-tQbHyV(=DFBeiD+Exyy4a~?I#Jo76r{Q~;SiS)~)xW^A|K(tMa)#Pb< zhX4_e^@;n-3(&Qo_p@#jAAmjxH|7m%yvY9salG+=6=hknPh48HU^-i4_(Rjd7jSjR zog6B!)`}Ac$8tsELvQ9;xqcs@Oq+T0SZ(X~skOb$nXZm|E;ht7nbkfR2OL9a+>%3u zx`f!QsAg$DZtb!$T-SAbH8hNsNHlC)fD$>nP6-2Pq*H)22BjM+NqHJ2aRl@I&=}%M z)5u<08fnmF`S1F_+c*BBaRd#etrFfLA6?cRkvhb&RM-oZ{F?f zyvs&~O!u0ZcG@)JScGi35k$80nGCL>MM;tOZ<3~Q4Y>4<5bz$v-7fTxphJmO(@sg*wdmi{8&mEHCvW2%ZRA1bI0WgJW8fSppQ zyz#xA)Knqye@kN;eUY5}x0rLKgjMA;zM+=BRTibyGc=W> z$MFvUy=8Rm@i7eaWR5Q_a2;9qLvMXmyfjsTLDHYw_sB zn=0+cX!VYmZ?(_bn0k>FK>AvZ$?RO*!J6Z^BaqsMUeDt=?}yu;Tpt!w!3WHAB4Nlr z;A_h9_W$9{p+ENRe>1jC$1*K|?ZIN~)6Gr&Im@yL`bGYu-jK%}ETB$UQ={EPB`olv z8^c{(0`4x7QJoIZs_o%^sJv4zu zu)--*B!%C=FF(~HF4xg|2dP0x5kwSA24Hyh=D>f-(;^cs{;$!TqVMs7Es6#P(OWns z2?^qCvamK>5+3E~@80t6GXsC82-D&4&gmP8Sg-v?x|CsM_&!w_OK>`ZE64sP(E5&V zYi#Sw;DUsX(qNv?^RQeRo6V$Z?7~QGey(E?;oYFm42+AfjeEfZ@S?7V7_ED{kLGwJPmFVLXA5#(Kf77O|6!yamlzbw!@f5vEn8PXXPSr1f0cHBjq1x^+UR9XO7p)mwy=Mz*I->?RQ{{} z>=yAa4~3{U`CqlrXt>Zev_|+MkN;Ys0#J+GB+wYE`fr3d8#m>w96bWAuscLbs@U`g#cV8xdw z7k9iD%Wr{-4al#9xw0rwQ1X9-miU2b3cf%$o$T^Q@F_krlbvNr$QgN?EI-*L=n?6p za_*~c^gLJ@Nsl3qtg*`xt<7OMdMafAW);bgRC1Y|Dhm)~-|!K3L|l zv9Yqc)#WX0TiV`8xzEdMQ@FI$r zG%Ou&&)IqIrj%P+!d82neQHB9V_;LQG>@pm9p_MtBnmBSL;K~Wq5?gq<{MNnB7nA% zz|6&Mcz;AuK#u8)yW_UxOH#(CZ${F?PdXECns!A<5r$3s<$j>^^D66)R?8I2&eu>h zcYQ0J3V|LGTm4P#Iy{((cxx5N_mIxTg$)lU0QZp1SIszPBqZ#Vs=8%b2;&o z&wbSi^#G5BgEv3vwKJ{M692SO8ZBxPv;77*G)aD8Sl{#cDp^-|f8SNsNJ>?;$*|zP zq#dtSSJDfrM%V_PJ3RhW;yXzZ=yt@MPS5RGrG$Z+s zcaT3SF{g~7pX<*ShZ&MYNfE-&8o1f%2F2IwNT0=mYI3yoB&MfRwa-q~E^!BPOP9E1$ zO{tg8__S2CHa04<74N&~q?hKC80-ts){tTpm$r=1(=SIQ*!jFqY$%ut#5QsJZRzs& zprBtm)HW7=xB==<+C^1m6)N+aE;S#=_{B=$%ig_Ff&DX`Bgx)U>sIsOVL~Rm2RR_G zb^k)S-fN5qwZN>vg{|L{cJL2+{f62v-y&)tf(M_B4^QgXMw?{htl@MfAMxZ=red+$ zjjPkw9~!@Ucx?M4A$0AKV-drb(bpj3CmZraqBr@tgax0ftGDF7(LU1?q>Zm=R$^I; zZ1+4Mw<-g=-L$ta>e>ADl*TGl`NLo!zu(dP z=RlA|#Ns|*MbEO1up(SSuA%LFv(+Z?M{pCf zh6T-H&+CIsSXv!}$xeOz%Txtq#Bs_ewooB()AMR{| z5S{ZJ$r87hQJl&$MB-OmfwQW{(rnYYb~+^`-Yw`M#2F?_NS1Dw_UxFN@1w$=Gurh& zF6`a--3%q{Lr<1->n5?#3VbG|Zy|!UQr2Jt6oo7|-T9UIHF#-dsT7IZq_qOU|QO{D;_Zk|230+U< zvuh59Giln5`)UmmY_2zfZ$2vTQc(0@yWJSz#ktyqeE&Qi8^uR1UV}dU;iI`zV^}5* z;t6Mn+_3J&*q~{4Hrs1YWb~k_tF_&>D6DAtRPj5gvrWBD-n5}iyuFL)?txiPjbk}r zp0M)%q%cxZI5QxDjRFqu(-t2^xiZJgZiR&0`8GI;Mqnwu){iP)fT#+x$E?Tv zUe!1g)ARQ@@2+zFkMBH8P1Pezg1`op%jS`wshJ?h>$H@RTKe2^Kisd?le_&itaQgW5y{+Ge zFtImS7}(3`LO+Dwq?BXhnP=_4_3&TKy3KEHxhb&?7d!MRlv8ual4q*R+ODto>YeqYmM67u zwCCuA?fKkiZUqb@`c`52DB;i@v&qDFKv+S$=Pcq&u?C(N~5UHR-^i`mPX zZ?0GGu)a~E*G|Yv%vHz*8RxdMcwkK+3%Vi@_e-^$@?;Q!@PXQrgzk4q8 z2{sQ|?!2#oo;oRiE={~hBTRIiC@zYr{;0Kn0}30RJ{y5h*~sKx^q`hM*UgHgJ4PC7 zoCJhmBQ9b7#saS&D}ztMGLv?F36wLa|m*oI@nMlrB%Etr?cR`ttC6L zL5Uo1-v`tQ?xBnnqni07FpdX~+;=MjTD#*b%BLu>53a;Zy!b6P4jH-CykF~PvsPOV z1#M(yy+6J z=aX7A3`{yzdasgg_`8#I-WfX&2hEgGW1L~_x!DB;1=-!1d-DuGuANwCXXbCED0eUVG$^Su6uRk-S2<7F|&xG{&Q>DqQP5Kq(aaswzHKV>6$L16XT zBNsSCNm7t`8{b~fbSEISwcfWM7MFz66E=+%Ogs?N5v$~dTTJJ1(WzzIWb!1sD2#V; z?qohRV#s4i7B-WWO2}Qgoxd<;n|y_T{9b0mMIP|8=iBzCd`myMiK!^-kK%;^h_1tF zTCnM|>uWp@jt#L}yE6Z?{OihAi*1|xpbnrxxMi8drS@^8&}_x)@+X}ysT%Kw8fNUc zAvg%XYgSg+_pS%wyWvglD*;~3Y|cJc(^Y)yaK5}*JV8~Pul9T_u9X`&1ajUa<%ucD zI6gC&9~Eqc)v$}~KHbkn8jEJt>o(SE1g<{_t&7rQM5rAy+4j77rvc)VD%9ii2h z*Y>QR%qS2TNKS5ME;nMv%iACwB}36KAafo+%Bh;}9>S}6W8cL3?y3wM><;2PLUXD} z<&%3{Q978i9Q<{o;5v~&mB!powiY!FqE7fg3qNUk&Uu}ST@J1?sclz$ZK~j5RmU=? z@pxLFqw{=T4HbCu^rF9Kx1E)aU;fE!|{6b56Gz_a(k_bK7(=Ia}gUHx5tt`*zSW zNIPIrQAvsA-tWO)-}?bKkL~)w16jb>_gAaCb@`4LS%{**Z^%w``y$$^9;X+(&)iNC z>}FgWMC1HK+R--pHKQl<%_L(+&na7LrWdUkOFkmqwR}h1iPnX!=yha%lKE|WUi;1O zfdx8R$X$K21Mq47CN11?)3J1@v}84Y2&r2Syucw|Y{y%-A9090npOV%dr9T=6jLeX z%2d=jh`Feuq{IpZS{Jc+p3VhKI4WMaHr~+vg(^FR+oVG=nXmUtYS~VTG~tp`Ie)em zcl`5cza26t;q2RS^LUIJh*kBLGNbsVNO2=mH>omdi@DQT(f6fvB;@@_P^{~3Ls>_P zA<3v%_CATNoKW7$xbc!(#8by)QS1os@fu%WvyB7UjU63BITmmX3j5W!NGE3K`6J|J zSxwb0XD%xAKHFb?auqN=+&4y(mM^(I&V<1C`hT@artf4HUJ3jTRjF00pae+I-Kh7N zkXA!QfLtaZpI(*2a=?`7ozn~umM6zO(xUPWYkXdjSPBJ}zS5%xx9H+fDem&m;r@=- zDQ&wmv|{C|4|iEE+^zrl9gO$f(Qum2W6EfU90a%Sai89nU(11O>3Q+Na^sh+1+!Cy ze$k^!RhD?e)tkV!lx+Z~yQ3O&so(qYf`xSPf&L^zH7 zUU2mBbns)8s_3@Omt=#dKKrLmwCiD5_bk>%hlBMwo7&*eeBKhSNH2EqN)@dIW^u}+ zZ!jqKayLalD#~OLi|5=^5(|--mk0oFqThWlHL^%q`k3X}J$-q)N)$2J|FA$;hi{y2 zCyNe_+5Nr6?WZl?TuJ>>RJLnU>{YtWR3(vq^Azhs1E%JpR5qcWGE@$m4=x9eq+t8{ zTM1Uo6zS0?fL|s{_?YqpD2P_8?E5y}H_4nE#PJU1?x-Sc&n6fP{S^6dXz%JyU8r5L zG>|)_a~cE>0<}e(lEmW0fEfIv$mcFtFAQWu#ZAMvgk@Ey9TOI1g$+nym-9g+CU^-u za+aD;*;j4H7Z#>oSD610ooGxTIU$ z3vIo4d~)rxyjD4`_@K23KIS{slp3zu0N$$c@w61km#G{l=dTHA9nAS=kJE9}%cJ^P zrY|%XPg*K-JJQpi?VLntiMcM-ooDT+e;s{J88S_ zZ{F&8S}HK^gH1j?R#fb{5%?%PGqnw5U-Br~DwyNrxz>2f=3cmstG_2(I_0FTG{${^ zjomzepf@nKDa1}K;MiE7m><3yg6G1KTey;PsPRgF3Y#;^(73psMZWH1otbO=Hr>WB z-o_S_mZdEb;%f~ybG;o*-4?*tyq~UP8Vc?bU%kHgk)HrGPx8Dr^{w#Hv=;Gwa(*3} z8_15Yp?tkLBIc#?h0LAsQLMhOe`em%;k(wmW;_sg+#WIMhUYp>8jHLAy|K-6fg|+p z%zh;Ko9{-tp?kkL9tgKxl#C-=ck(39qM>8!lhy^cwd@$?Y2M+O#S`oOTBvJ6k1y~B zH})pGOu#%oi^MtK^);0}EB*t{am<(kBvJf|Se|QFxoIO?fZkgl%%-_b_9*J+WRBS} z((tm^A9WN*f?#p69+!=dI_A9fgV)p{&uxM+0T~X*SGw&}x>ulP(5oc(x$FhF%LdCFPevNjd&AW9m8+w{6vX28+(Ta?EKAoD zaCKqV(4ODUoPevITW&`JDmbjm1kW_}u;qx9-er<_Ev zNpnZ+TGwxM?}X4@m!@t3Mg}Whp5}VJm7?!k7QG#f9Gp=V4U+h=R z3Xa~Z$i6NOz1(%kx8LX|JFE!?EkAKvIqR|h*k{mdds+!x4FoYDZ-e|>Ru?Y7i<8gfsxZe(w+FEo^99}}@Ou>N56muc=P|vf=MTW?Ar%48 zRec@UlacH?3PgPVcpb)EFktU1?+WUCAQv@&4hbu|FY0g;mhERteyag1La>`P@l zx7o|O`qo-z>8b=`=AASm}TAvO~4^Rl&C zq2B{(atygiN>*D!wA{j6-KOJcZIRFDmaE#FI+`Ex8rYy)NvqeRS9j4audHT+D&`E9>>GzvDW2F!Zhf<;2JFGc8a2quwrYG) zum{JmdF@xvF=kdtwvDFU?ciQhexQ^0{vFzHt5K_W!roNSy33_cJwg~#Xrm3ErSKtv zqiYM^_WM)j8){|b`qVjP0BQF}--Yx8EBQL{+=u&}1P&q~Bkcw9KvYWxNO8?-drPu3 zWph_}8}Q*l&8lT9xJ@?hRa2Jw-Sr`19OThc%Je08Rn~a(NPM<_pxFK}b%RQi>ze-l z<`McSOjX9vC;{n;kw3%OCjw^|<&dO4NM`L`afn`1aidzwb^P-WTUlu?vGf}^$*5`N zF&-6Jx}-pnb6~63i+ABRU*HERW#W6PSfdsl*^Xqa%7CphTASAm6QK9=V#1PD^%D@w zY&00-3k<9lI&(srxn{n=Je8eS;e^WSj_tu762Sz^+V!u9ovfcN}^v#D8&WL%E z##uK$P2F{MOcUCD=R{n94H;JMwNf8-Mz-=pZfz5npIh^WR9MC?@6?3=#-hYeCV4Fq z3p(F&g<#-D$)ZKUU$K7j&N$nod~P?zdUZJu@Xq%CL3M)m(Q3}!=f%s>_jMp5hG5sm zQAcbHy_bbKDUgumgEmPmk!jidd# zC=3JliCmwS>%vYK;;KPa5_dzyTa;mwXpNZkn2jF3qz%fzIp)rC)n4KTdD?h@L z_bcvy!9^1M!UrczK?QQydjpHa83Gf#nP*-738^s=dbK!RV~-Rr2m}5Mi&_Yka0|L1 z;3$@6_~$8;eTZrX86T#E8Kx;VptM7Ybukt zI>C-Q=pXupzd{GA{kXKg6GX;kJIZer>}T}18?;{Nd>n>t%}9)(gA7l{W*~uq9m0gF zPTQ6A+(`s}DX;D(jIR6$5B^X~xJo^@7=XUT^Buh_bOg&)CdN>K*&$3u6WGnAge7o$ z8f+`5>|f80DN`|7qTtHkFDCjbt+YTq=e@2llyeAf_r>v0%p$y_xKFNU=rb<0gZf>S zz2$sG02lT6$phTbF&}OPNI)f3`|giaq-zhr{@zViUd}gfc2}DH$Yw!L$94SBO4DtT zOIkC~!&}Qn$HoW! zJhPPS#^)-PO?4Z`$OImEj|oE}`3MP*&vgk233csmJDZz3g*H}h8?FvkrXC}=@<1(n z=6X=o@^%#8g1*~WsPON^sr?g!APQKCAcq#kD3!NYzu15)oNg*RE$vVD;3Uv0(G4QE zn*4KsF4xJVv^>{g$U}#|(LUy$hG)ftPYj1~TA{`EipQhTv>Ng11ViCN3C^p&z4rCo z?WgOTG7#nY=9a4m^g}bwOP_3h3J$^LSLi}$x^-jC?GIZBUz$z8#7yoL!<=eT{StD3 z2KzN4==eMVBT^)5`fvrYSOje%sk*#Bbeh-*R{3;_J?o{q6;2EEsM$@Iq?xl&0D2n0 zS_`ku$*~fyN8xPvAv0O6YBfvJW8gq#sR!BQIj?g`I8y?4jX=c-V_cwq(J`2*2x4y@ za{kssw$e3S+vpy=)pC;gZM#Ct&fCq|X3WKblI`VTsUnlveZv{@kxF9`;~Wvq*28_3 z4~tUUb^qQs|3&FnLga2S%a&jtO{RBRvsod#ex(YzSyzGFrUqA=YB5mPbJGTkQl|Ns z*5(XF=i#W>M;u^XoB57S3%UxdV~h!q1hf30tBi_O=AD?OX?j_kedjigwteS)`%~4Q zZktq4HsP(elI$u zR&dykTbd(Er$@_*+O18sPD>Sovz2xcypNY7pTp*CSK9W!a?y1k5Qa6^MtYi3U#}6_ z{H)x)A1gkTZoaOWlqo%&VnoqtFEjQ8_r=B@=jU&;rNfpx96&!2x%Ogw@Et1l_o5l@ zBryK;e;4~1GezTLHr9;FQqGU(rxPxz=W1#KT990^Rif%WDWA!hE{SXLtkbP{=?-}2 zkLdP_e;d5Cox(xw8=Dvj!1QnVxHRk)crc!Kw4@!Il1325ZhP3mo4c2(l6^zfNB5mmb#Lw}fUk9wuXEx|r)mr_rBq{Hp!{wS$bwq;gO@ zi11g9J{KH;Bo_^^phwm- zrWegTwe<*$Yj{1joA+<%H0YkCL+tiL9;9BR(?4hG;BzhrE!;%N5!$6_S zPq3bR*PO+EeC+>?jL#q8p)w12OpFG|!hpeS27SRW2p3Q=__`N^<;NmCSET zoq?<7xo=r7Sqa1wHI=ifLHzC;s4b#Y4WD?0iZSf26E8@O2#s6eT3MBtzTm4ynF zn+EE*$St;nMczPfb#Z@0b$J4AGWs)sk9g62VB5 zb4yL@hWP~vF22STN0W-%B+!lBx*@XuBCXj8ZZC@ko^p7AdO*0T zV;QR>BYv{K7Y*x8Brh#3EiPWuGc`GxjJ&U}Zp|MQ=7M{Pv=h}D|U(OZ{R%U|H6m%HGZd|Gn@n}4=fzIJq&bg zP->9WrqnK6tDA$V>3L#q)do2z&!C&-HQVPwN{<=0!s`g@pdp|C{&FZ&F^>IK1a6&g zDxulK$n_sGPgcWGVUeTVyZcr7_82XQmRRYaO!S*Xqt$br)QZ~9=}LCUAX$F-;?p@} zJEX|jg2`vi&3XM-#=v+Ce0IToVP-=aONnzx65*6UIa-U|OM3|mPQ%ad9=LPm7V@l; z$MWR;u#agJ|3A%#0!IfD#k@+L#f)Q(9VY&Lc#7r@N{|-hu9@4hoT=3}QL(`$0h&It zAN%ATPU!jsJjZYLsFzRZ^X$<^&NqC}%e+^tQN=j&xH+Bfxz?)V_x`=2?zz`qbIdWu z96cs`oxN#GTiYnm{W8OULAoLoB3i%U^?a^g&bHe0YO<5S6S!Vb{j8zK9-;RZOeg8i z2fve9`N8fwpjmw~(aF>G?P|Xz`kNdkB~~#e#4VkGm_}C`XH)lu;h4asb!tVSgM?zA zEwcIg0|{eWbpwu7Y_g-3qTrm+r~2)`n-#2Yn34lPG4E{yP1Fs>yMcU59Vd zWF-yqPx!LvI!L4cN^L1kRmC|#R$8P8MepJ5#e&pV%Fzg=H1FhjbltpN)$k?8(VqZ3 z(v<4;1Np@5y`}fHpxTVn78_)gR=BO9V#iN~iB&no#e@OwgV*0mI@0mi(J#fu zq-x-gr)!{kAN6;tgf9IV#)swCe{%b z(+Bw4U1>nys^LciO1-XrY<74y;Eaq!qndyNkw8LAAPIw)d<2k!1^7J(8X5z`YTyp1 z$$NM(?XZCvm6_8?r-46hH~U1wfjjQu&7L?*&})u}n%G5N8tL zg&g4D>yznO0+;+{RO%2cqyW>SPYt}Q7+6FsSqTIdQ;{&Bm=TY~@;mtGfiwCH`1f~6 z;`jJoqWXzgfka6GfRT{4C;$fd<|zd53I`CxkS3S&6aI^<`{YWxc$P(>9fA&%1z&1r zGGi;E*n<4djwQu0y8-UhHC}{sNAR7#%%9`WsSv}SM5-lr+#VBjG0y~`awMd}fV4Zl zD6w0$QCDLPT)K5x$ffiLU%&r^-*&r|7$sR}K0JM0Om(0g8&^_oyc z^4}AWl#)*(C2XTg)nQT_NJ@f}BEVbiF3&*X^y7-L5(>=x3y{2%pzf)Q_7DJcbU!6` zg~G4;r>^c5EKzo82q|=Y{>4=7;@-bwPaY{++@tEycE8KH(Zum}sNyg^w3u$6ow5C+ zDovwweb`)nDM~h%#yO?=DwWL^zy0DyHZi?Ri65+m8f!RAcp^rbtCSMwjtXR)7V7oc z<*9$m2Wx$^oN%zX8tR= zSia2`u}Pbf=ho~jhDY{@@MuBod%L@sf#>v5Rn&R^Q;9F?7>!lh1@+{= zezmS!8}BW_<{!E4YZEgURv*kYx+|JCu+7t|FGQy<)jTvMkprg0%0e?q2g&Qu|6CEN zSBNrcK1|C&DjYiuPugL-Lxt{qf3Cj%IfiVC7defA;Lc0V;N^m4OOWK1$V8U-NF{VZ zc}LP3B_yhJv9}s?m98LbclY!o}6q zmE&cxw#o!H&nLBF3yiMZbJD4=Wv$e2ZbKfA3yk>tE6JH_N^#7aI0x!JJW$ddu&9G~ zqUmbIu%n_LXq4c7h674jsR9PBeEzKjRZJTaUtX~5JnGph)UK%GWHX~4IUl!lsfNF* z^3(`S@PF#qLwLwlq}`}nK}!4PiY_Mg1J3#FNeCPV|0m5e2`yn$mc&lF0AJG@T!OK(Pp8hit70O0qI*0ZP3`R zs86BirC3jl!<3E!TKI(9LnI>_-tC1Yk~hdU;#b%fEnk_^B*+V3S$EoXH4SK;%~*3@ zyCiU5<ZzUt_ z`@(WbjLGXopQ^)r_9L)4)i*g$H~YaL`6!zkov~zeI$*k2 zBN-{gT14SfZ?o`Y4Q;qWv?#koo1=nanL!fJB+dR1o}R0^%xQvg4jrhoix6;FR`Xi& z#;?S{pANui_rR)#0KeEN3H7{_`XbWf{?i4g2WtpC`eJ-{&%ss1p|hISe2oTdME3U{ z1E`)ZB)KuK%3Ch9`t(G|oQe0SUVX&+!0pwmXp-w&2Tb=F!0*bD5iC$&#`8aYJ@)l5 z9t%xM=qzzkch}xh#KECThj6m(p6%3chJlCFU}z+$T28d-|F|(yf2GVYzu&rSzVoEa zQvH%xvH8`+{N!Yn=SnAC)a2CEPQJUTp?hMPMbgT8`B{pkr#vFz=dPpz5W;-?CxqFR z{Ue%XM+@u(NmxHR-L|jN-Rrxuhy#z6Zr?EHi(k^8RS4Nwu-2d)v=THG-|FuVzPA1K z-1#_b!mlj3#QKtZyz#nGDk+NN(B(^=Mt%js%csP)^*TDoFH^RlJzVA_z#q?@fBOgv zoEMy%6UgULq@iC3s$vTq&&x6cBj(Ez<{r{%9ymo^7ZKV88H zD%Sh#+8%7;M;vk9Y@L!an4@o-&RXnP5PN#hNf4wT>U~k%F=s$bjGBZ8XSHH;UFIBT z)OKc~h`voxH5yXp`lTe~qXIiai|f7))-IRMSdTEK)t%*4XsmI~^+hwDEQ-p%raukY zvyBv53c8f{7am$q5h^s9M1&}V16?2?i3!|uy%}&WAZC^KM*-u3KTVL;3WP3l7CS9X^VK$-QH z*_WYxzIytZ6K135I*972cO569$$@}M=y8C`5`*+&b{Wy&gFDO=PTuO<0W(EYxBeWH zYUO4oi~Su7%V)JKdx#2t!h_mL&E#2wzd zBV?(ad^*ZH-WOi*&*7$Vo(ZUyrsTD@yAY!;D6E#q_89nGJ2l&c_M8(wf%4-2s11q- z@vlNLGP@v%=p7-5=TVfrlc`vq7K2j8R3myUu`lzJT|d7v8R;wA-c7bWNYrl|naIJZ z`f504&i%t_-ksf5W^JBu#fEM_K?Sw* zhudqomifa9IdkmAgKMcYaQ=w6YM`6KXpJE@Zn-$C4hIOiLN~dkpI;yH4;Klm)OS61 zA01CVXwYP|M-QDA)%qJEfbWyO)m|Q4qu|}|e^wacSApck@za-#yGT}W^!m3i(|5Jo z#0RESn{9xPY|#viL`?f1#*j$eA(Zksg15W`7NDG_jRlGduw^jd19=Mk01l1nef9))W{T198>+t- z$ZL*8l6mj5ClHW1pd~Gl>B#}mjH8mnpr9E8u%&Q6#DRxq03@am|F;>?@4OPUBTWax zF-rvjQCGa=_dXdkQwQ_jn!&&l08(BhIlTw&8$d}-RCx*S-w#MhW;cQdjf_RGNIlz!fE3N}U9c<&XI=w-dai|;k%6MCw1N*0J1W?| zze}-JAb2Y?Uq&K^V6p)6!#Q|DVBnqpDZhc@mW&ZHW;ZCGQ}0LiuhWGu)8 zAXGz0O8j1&02o3%EOh9iC?F3tZZMW?kspjs9D3h@bREoa3<(F-cig{|cm|MqmFX!X zAww|#?oERnJ(`5uD4A2V{DkO` z!Fx%hh$@0WnC>Of3$D})DG4y-d6^P2$i>6J$|YV{jQTm z=oo}9Ab@`ve2ja@&`<_gh$et+^q3Y7IK@jaTutX?7j3x$xbAGcMFI_{7x!vIo&^j4 zPu!9UYT5R$6*RHn+3qI~Mq>dL2ms=Mk_LhJ`8@zL@SmfQ0cFVt$SPAwdj4B6{+|N< zClQce7XyCuLTxBMx>0P z5{B-89WA0T76$$GJ21RqHnra=&(qSz$%hN zBtRtp>3jirew5|#NJik0NSyO0G@!VvfOT=c>-|WuJAlxlbP941_)7vX;qTreVA}nA z+lsQwo!3|bvm2ll$15fYs!=FF9BAE8knYcv08_w18+7kP0kXeaK#TX88gY3)5!s>} z7_F%EL&&0mt)fOZa{{tdBnf0mOY$uui4fK6|L)ewY# z4jA%TBk#W62g2ks^`^J@kV_!Nt8dsVfC}&enpbg|1I1cC16fOX8d(ZNmIACI9ccK^ zK^0g;u#Y6s;_qSnivZ;E$aq+wxHn*UJd{dErsoZCJ#!Qf0zN4Z?C1-u5f}&);7u*d z76TzT5d=&Db8Zn5BpJ+LGwntK8qf;xdY}jk`)`RSjK36NzvdJ2}1m*O9=B%?{EfZm1e#7Dd$^yuLWNrsavzq`#7odBKFaRE0 zY&SME8Z>$oCSus2z$N*D;cYTI1*j2&?eU3x3w+HZaB7L2j+{uiB^b;lc>0k_ti>IS zHrC?tM4%uzQdmbL1Wtekh(qooEffaS0>HwppD?ijL|_W2)eI`%_z?rmwdrQF4Dwq6 ztcg@)MGX=r0;qCii~#j1B?3fQ5RyGX(zuVVf*CO3z+@o#)M9>4Z~Q3kr#z<*3-Fu0 z2h+#16Z}sDRk&ptpc6*@_7JLs3D6NKWv2y`b->WYos9@S6&PN7$tRi*;9mheMzo`wE6~!F6m%D@N$1uS218yfE}^=z|#giayVFp0zDFl zO2p;|HT7S`&XvX<)135IDYq$^Uf3|85$?{Bv~6juK3XF*kmJX-5o3)`X^wn2*5G z1XG51Gf?W*04Bxo2p;PRJPMFbS|pdJ_ZciG8ul+_ahD#4i>h5E_3|rGCx0*`MI%;sgoI$m7Nn@RE9FEy4x8;nKcv*EQ}4E zpv)@H22Q`P$XM%}f)CWqjlkX9oV-wGX=8I!Gbbnq4-1r8%+|`*LB&qr&=`eT+}Oq3 z&{)br-yO;;ha&QI!M9rNXm5d$4Y_08VZH#T4pgd4!NpmZ38+g6H zPu$qh*2owtD2VbeYTRJ=hW%l{pLVG4w$36_u#!G_k`NpM+9MXd{|^4kg#Svyf3@Jh zTJT>j_vvi`;ug_Z5k^?zUM4;}Z^|1XQl8ylJH zi`u$DweP_I-axr|*>vt*{XNC3?0>KNhmhY`D?|SiI5(L2pTNcRo%F42P45|b&(FX4 z_|n+H(cIPs%FN2d@o&5UtNzarByGX+|HLJ#AgcJYL!$bQ#(zE(d8w!e9~LO*Z+8C~|Mmaez;iw8UMM$!*jpy|M7$JAMgJDjDv&Y_uBvd`VTgLR=vmJ ze#HF;-@kGCLkT-r>)$EiX1m{^|Er(>15W=}bN_RN|DTZVDf~}4z329S%ISZK%OCMk z(6D&DYuu-_Ufbgj}8C$=+pP})uu$z;M`(9+-{siQ# z+(1Hp%Q%RojoE-+{V@gqSd~9l{vz_PsGsAW`ylH7^PUyT%EbdL+y84oKH!P$hO0Jl z-dN?Nb})Y3lw0HUeNM)7XIO^LQ&giZ4aPsn8%r}HBWn@zmN+XTE1M-dG7AG4f}k$g z@!0fHm-VApk|XxYg) zU#GyE@iU_w)S0M&$Os91`&m%eXxUK5e<1$Wo>`;JPLrvm7y8Xc({1|egSv(?*vtTx zu=R`nzO|7DZ~O2?M3|!Fpo7|#Rs%DyUc2HhQ!{G|x_+9sBRYQE=P?n*a;o>;W z_{4F~(p3yR{^xR=lj0KTo27cu2chpzT%nYnRO*OiPh?_vLSB*+&V;VM6@`#wV=gy^ zRHIcAnb-Ipd6x`Lm<$>`X4d%`RzRri#ecFxT`@G}2^k8xmBKuNxxT zXN`U`SFO-~?>e9%YNNp2vL<~Z=^gD6x~$)DE@DCYiRKhjLLv5Rq^MnNl9a3P6^68J zhQ?d>Z<%XKzBV?Qxy8(xpOjivHDkhWk#KlaYvGn}B@V|Ls*G))^<3 zv#q$!Bmcr{a7yqt2X~&)L#psjQ0rHx*;!-uICsQLT~4h=y~-JGErG85LC1o}3TH4) z=g}_pE-CmuWbS$?9@ktn&#s+bw5dGvyK`Y#3&o3fM>rg~rX~<}YQODKbhD6mqj<;m zXxQ^X+YbD}NOqiKIPA&@z8~Yylh%)m(=VcHg-ohKS=i zjFS@&pWl&>qDvo4@I&`O>Zcxq9f*%;c!^0D$*v5Y{5%YrH&)=qvpP=Rd}A0oD3tPy zYrfmo=Rn5PUB^pcx_Z{oV(ErgvgrQ0lb!#N(U#=V?elOfSp9fp z%2-xPqfeDE6>#k&y*KPx)pE8)K+E+!NOK5pDukG zJNT5P_%%lE>kGOE@&#m@yPM1kB7wK6WvU;4W`2dL3$UsSyeLRJ5_9HPZ+xcSNL+CD zIP^}jcYX5LP_c(c=PzPXvs6;ET?~%FHx=~<@8=~Zn$R5^=5He|;!tc!A8)6zyJCfU zu3yZNCM^utunsTorIYDgFpocs-X`=9@i`SJ$czbeCE zd{ZsIsjwPYnD*F*u(x*@#|-8poWQQAS{~fK1N~RqpENTOO_HW>F3@}fl{cT79o-&o z(D-u+GY0R{AYHr)c)2KQF>q+2iau0NAP^?ly1ry#BuYgSNHi>3iNq+Dm`$9y|KL>c z3KMQ#B$x(y$Xs-Em~oTI>EX6miT=YTqPy^zhs;E;13rsBeBa_cyJQ`iEtJ`8@Yn~r zS#Xy`kcA&@2qObUm3myr&nM(OBR!5=q@>**1$|k@jp%WPT*!EPNBc%*BYxh~EG`b5 zVvUeuf9^Vh#&`1}D=Kal@QF*bZV%@DYL+MS`DR+|c59b*G86fS>ro<)hVRCQN3G2e zhYwj#aY;%t7GT%bc!bB5iSyViBk_}wtqu;I+pj}(Np8`@k-|8H@3?q6GdRr{X98?O zE~X6Lare*h8&l_H4-7F+U`|-I2f#0ie-Pko zuygA=oNd4JtI372h1Xy0Tgvk@9m_yA!`>D@@tcsNx~+Yb zrPDJ%aNgInR&BIlvSI95F=>=eYD3&)`m<+=VwjlpG$h;{)grj&qut8*zQ1h;+2un5ygD@wfdGRNSe#ipr%P0JS;&(4(|7Qsn-zVfeP!?B%GfQF3X|{jB3Y@ERQi2c zH#Gd^%T=cG*$NpLcM=2`JU?jn3UquFzV`2I4sg9XvSree+WXWbHK{znGBgkK@dAGw zLQ(caD1sD0Rv_Ss-{lL4#to(2=eO?`m0IithFM54C_}_r8~heF&T4fO-prX)CCN($ zzNR+gv`A1U+u$Ya8-|HPA%c^in{QHbCB;Fhti+A=%0NW%@KGI}+X&A3oL;?k61(G( zu}#e=VOF=OtM#t#{c_HGjYAWq&!sK1j}FfpM==jE7PoNtpx)YI8Kbk@G&xYf#p6h2-ikoIuc0av720!qw^|8@YAVnEFGdHA2jN1_gkKA@?sX#@= z4>UOttI1n`us+8I&ElP-9A~e{j@sYa&HmcM?o=iymytQ-FrGL;T27!6QFEJD9)-en z*1s?_M(wfy5vQKEiQTEgbFdcgJAc9L>~gx4lHvFXM|r`~Hb%v&b)RZp5Iobl)NCi# zCWH6GRM`U43>EtKH#5)9XT?+EX&HE|8eQTazICWAtuB54E!%6t((x$WraPh8Gw9od zWt0zs{p>e6r`FYJ|CgI4>8{16(J-e~0q`gE!xMFQ!h%1Y4cz)VypON;zlc(WOOX=e zLgv4iwlZvEprzfK%M3|}GSH+-e2PWepo-iKH2<)IQ96P$gAm=&m`%De`wV%WSQx#y zJ;Qi&x&j4JDX6r48KIVlZ3IHoeIY{E+%gN_XhXiTKDRwL!)IGq(^HRxkcuqJstU+Y z_M1!|D|^(|^SDW{Y}B5Xx4EJMdmo45!e1`qazdfDJvQcQ&Oiv(O(pFo8CH+D63BlZeS$uw4jl=XwdILrM)oo!x)pIxQD#bA}s`mA~k%(i!WsK zO2XPv-yhzkwRI$3p{sw+sOi8Cmb+zsQG4nux>SCL1s=wFc1n#~>?fFrgOYo<@S^ru z3fDweN)W{eXNoPuW#rA+>(VVOKA9XWIAafWlSpM7KcS&2tSUf zzA)Cv-Tu?Nh4+Eg?|qE@vV0>VY99@K)22<+g2}VP`Gx1mysD1zKmJSH=U70sFnZ8JsrDuXtZe&Mt^{LrTIKJBQ>8`&9-C^?rEiq5pt8 zhe4-M^Yv@{QiS#cl7++iiar9DVN`ZBUWaK#i?#gd*w$Mf=S$gCEqijASh9UvUB8At zO`rvv7~v8cyhKm@U@mI=mZ2x&pzlz%x38VwZF?}ZA@Cc;DdsH7&~XMqM{&MFzahh; zaD2(a&h9}oRop$jcn88A6I`YTaunI2#>+Nu<_t_EhOk~|j+xOC2BUkt59?F25a~K* zOB^*(o8ox+<@=WM+jkUN6*48G{9$(il|So$@ukO6>in!1dy;0zFKD~0vA*dk6^xo2 ze6dI=bItmU+Nc}WHnwL>gH7x`nhf%JoC|GxSpb#eR+PGnzL?*64x0aQJeh}o z9YO{~!D6gG%ETm{kM%m}@XdUor;t{~elJc44!dHK&@0D*glO#(vRlOcZo!b;s7^&= z>KI3-^O5RTC_)k;B-sxusE>Gs%Mm!V&>CCyJ}jHRd!JAHfxyKMcFmIksY_YI6*)e| zr{hXFtlNu2pZnq=;q9YhtTWJXt{Y5lJh^V^R@^|zW@3YQn)7%;fm4O((X)~~VKt8G z3Mj=CY{P;10{VAHMP%K~Z&R&VpIS|it5%v#*WyhAPoGe~Y3^k97x*MjHqx?ApJ1`c zo31#mx~=YIX-m3wnu9?=l^ph%y%#d2qn<83HvaSrWq};!c8(`od%6;`3)X3_Rwem| zCndQw&qo%ML^*Ouw&p5$NG}f!e+dOjO?8SOeqm|hBrH=pKiL|(jn;TCIyRZYtHE>~eb z;}z^X-{bY;hw73R}o-8#L)c zB;S$OjA<=?tu<{odRltmV zxry!6L-%}flz9pNxxh1Vw|&$M-RO_O{bqG$JDfIb%4CMgG0NxzOF}23cd6~(_$)pM zx08Jr#Ose*N$I!8=sp;@;q*Du(TCGZJX~BANszU!&`9sH^uLW-Wa1!a7uEq;Fgmzo;Z!Ixs~~+N$riLji#})6}>d! zFb|Y`+DR<3uU{yi`AznLJjFBXsx7ORIgkprY^(ebPD0Y^u! z>nm=b8cQWO>q_1(w>sF7siQe4r!qPuQxV@UPZ8|hVZ4SvqaMuMRX*2en-=@F<6U$8 z<TRfc+OmO zSL00-4h)IZXb5%*VOoeOQ`l;#a&x=i=g3GrV2wPnexCLz!BQPC%eJAxkUM){zP7=J zF~`DMRDg)~ZzEEp;1mGh!EN_4M$mMLR|W>t8MN+pqg zgI3AQQH=;yj%?vapAH?}&^MpsHEm=BnBdWMz_^4toR;$Ucy%iE!!UVv(&HG{8&~e~ z%EH!4J@_iCli;#V_xvy)Qz0Ed}Dy+>oyjOxPZF&X$bAM1q*zX;3pE~b4=fV8aLbG*PRGv43 zG`o$p5&e>kQ>L2K+6{PFuXSKI^*Guf+=6&f?KZGv8H@hJy*4MLi z5z7nD5=>XMP>58@qxBC%oYzp~l~jp52~_MqK@#@iX|YkP3wt#q}^?U^4@@Sk5&Q}jka+5 z#k?;0WBJH5)+@|dqJ!z-1YpW3#6RO8T8Jt>CHS>mGjw4r z)G={j|DgU>&v6IA(pmpH=#8Mq)8?(RYn6R%m)Guu_~q1xW<^~BVh5KDD=FH7n)u&6 z6`vGp{9NrXxAcwiUfE*|dh$p@SPJ_`o@k-?#`wE|8)hC4)|!xo-Z>gmH{KFahu0Vi zl*0(YS-~`>b~GanMIuT1q>^;q`It)#=t+-{eIh>C;V!|6X=q$JlB zsSNnM*`_lE&o_&B<dPkIV0WEY&|RCtz^3nJgyD1e zE=-FL>1CIaYF+7T`l{L++g%l{OqaZm9_LH_i0XR6=tX%}Bg(05#`MYHIi3n_AwvN} zaU!SohqefbfsWBFrgb(GR!`0ft?|O9wuTvpU}yQmm+ScFPx}N~15ZWPF|Wf9E@B+R zsoPdH<;=BOY1+7|7@6BuL)ezKcF|_huEWQ$O_1xqRex)uq~bWtk4`YId`hdl?dqwq zwhyUt$-g7CpnbQGFht7|lgGfx==@|ku_?Z#l&JeG@jVQ)Gdgy(h$yn@CMCL2&ykY7 z&yO{naEEA>ccN)5sEeq9v#Rf$UNdf{*J4LY3c^b!HsPWQA|VOs7|^h-36sH1b;HGw zpjhg8zz)(-6At%Am$B5)w#Uo(}9`MqP(rw zjw>xCFLg)MX5981C#|1(9PaOUSm?#U#0;smcWrsIL=sIA+i6(c^ulA2ubVELu9KVEnp*ln&rj@4?;*;AHU7;#W!xgn&HQvOtNMF^0*x^@`PtZ=pq5Q{smeLwH<8lt&Z5Vk5%bZQ>HbsR-$Y)B0G`Dk)DzYSm(m zF)N_Y9p^-Ua5VGbTX54?aeZ&=h74Nn_nRfp*{$D9_hkMQ(TsWD{sZP^DBst&23U_$ zaWztEt~w(%QuNHTzAa8=GP&^}yp>k?e0jqwX@5)d+IQ#6Pt%%tx;a<9pQzIqrKs_x zY{yw{5`4qZ=Gl7cx?D5GqqMQvOl};9!p>JuI1u|r-+e#+ydLuY%RBkCdR$po!H$#L z0B?PM!Ennqo>$wsH!fcuUVrdjdU3W)(+oR)-DutWJ^+PFNU}cc$3D673;%N75@<=* z=Qc&7+o=!OdsD2T*`#PF=|%9bk`$;t7RsJRiWJc4Q*|RM!}HxvYpI->K8ycEHNnT{ z=HZ=HSlH)*yZD00r0g3FOz7$N`0VGZ7(cEX;Nf6*f_jSLli>X`YT|Q|My1zb>L{5P z*NpgD4bJi4>$&)g{FlpDbF7BccqYEVphN!*XpO5?NnrxUbG0JZz5n#c^FD^~7#{NY+&` zz7xp~|AcQ7V>!xQ?iHWV58@`;=a%zIe3d9gwUR4eC-;YEO1}(CTt`!2_ZWI%2x7C$ zTiQeEtMQ3+B+;!;R(rm*mIe%>UJ?d|Oop6au3%ZGaucDvvT>#CRlyP@%CVl{Jm%^k z!nJt#A`@2Dp5^m}IH8AM*0td!OHb&|@~g>Yc2hP#W&QHFxAEvGfkrUMpQ&dMOP^!R zQ!H5#JmG&FwzeF@0BdQa6*z~@bVdlV_j}6H>ow@acLJ|XL1>Y?SH$=nTP+$)x@_WF@9 zJ)B@zVU^(C*|eK2Ec#PFK-*YX?CIOr*aW_7?WwPd<9V%R!`KU+(~I!&5%4Xh7>+op4a24dOfICv8DM}go769!@{5QYR=AuA+MW0 zTWp3qn&oxZ^Y0)RJo8lu>)SETJn=OJPb>794o;xAz-`UQI`X)hKPgPoB=9-W=*@-X z;zrE0FnvuHggF)!uY&sGd*SerX4Trog)2XBp>@e2Rp&4Edj6~7hVgPXv?h*vjXI9{ zokAaC+>E)G$cv_qEmjXD*}{&QiDfsNXoc z`fBNw>bv~vaqC&OC8N2o3|}3eay|Mbr*c$FZsvgZH2rF=FGA$?7(f@VvGbNUEp095+iu!z35?4#-^7+x`!<}vKA($(bgFAQHRT@8J$@GQdEB%W zjhaIm27PAJJNDw*zU&OYul?r59OBo9Md>?D4vsm!l547K*q7KH2BQWiYRAs+3ZJVd zCt%GRtlND`)W(WugSs-WmjM1Ro@uAu0NLJXPxhyKHF7Uh@kVuXz#awcK$ zkq+CI@EDn@eqXos_z7tq9K=qlS8tmt&Q+O-HhfPm*1Q;o^KC8XM%nZx?z;Nk<5oUq z>Liz7l{)#2bFCR2g$oy5 zRv!LGs4EW%sD%T{sS?7Ql-|fG2fs3Q=Gj%bN)8faki{qCi>I}9VH3xYLb#17 zV0lPd(8<5wDYTs-!-X;lc_!GcTQZBJBH=T|gPaFzWbu*0O8E51OYh9qqLSoA_mL>q zB&dmC6JX$4SU5&_sf=RHVHc%G|Ni%S$=~A8iq;7Y+{?;ncAg zuS~Sood%r=Yxm02`)D-3Xl<37xutlXT4E2Kz^!}}?je%}L9;hZNf;j{Gn(Kfiy+ghWHZOr8`O=@rFgqwbzH}a z6|I+sc!S;Hf1Vn};=#+g(U_Tn%lx|8ON?>_V|$)E@D zn$MfeTbuNYySTVeM#5?#QsCWo%@dPX(_zLBe_hvj%0A{hrJ75~ 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 (Windows) oder `JAVA_HOME=""` (Linux) einfügen. Damit sollte maven korrekt konfiguriert sein. + +3. Als letzter Schritt muss nun das Plugin in Eclipse geladen werden. Wichtig dabei ist, dass Eclipse selber mit Java 19 startet. +Dafür kann die Datei `eclipse.ini` angepasst werden die im Installationsverzeichnis von Eclipse vorhanden ist. Hier müssen zwei Zeilen +eingetragen werden: +``` +-vm +/javaw.exe +``` +Ganz am Anfang der Datei +und unter -vmargs die Option `--enable-preview` + +4. Das gebaute Plugin befindet sich unter `JavaCompilerPlugin\releng\JavaCompilerPlugin.Update\target` +Um dieses Plugin in Eclipse laden zu können muss den Dialog `Help > Install new Software` öffnen. Oben rechts steht die Option `Add...` +Im sich öffnenden Dialog muss man `Archive` anklicken und dort das Zip Archiv aus dem Oben genannten Pfad einfügen. Nun mit Add den Dialog schließen. +Als letztes muss in der Liste oben der Eintrag `JavaCompilerPlugin.Update` ausgewählt werden. Hier sollte nun unten das Plugin angezeigt werden. +Einfach auswählen und unten Next drücken. Damit sollte der Vorgang abgeschlossen sein. \ No newline at end of file From 58a72b0286bd8fdf09acfd3d2e9e9231b8548c4a Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Mon, 22 May 2023 14:40:35 +0200 Subject: [PATCH 54/62] new file: resources/AllgemeinTest/StreamTest.jav modified: src/test/java/AllgemeinTest.java --- resources/AllgemeinTest/StreamTest.jav | 14 ++++++++++++++ src/test/java/AllgemeinTest.java | 3 ++- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 resources/AllgemeinTest/StreamTest.jav diff --git a/resources/AllgemeinTest/StreamTest.jav b/resources/AllgemeinTest/StreamTest.jav new file mode 100644 index 00000000..cfaf23d0 --- /dev/null +++ b/resources/AllgemeinTest/StreamTest.jav @@ -0,0 +1,14 @@ +import java.util.stream.Stream; +import java.util.Vector; +import java.lang.Integer; + +class StreamTest { + + m() { + var vecInt = new Vector(); + var strInt = vecInt.stream(); + var dup = x -> x*2; + strInt.map(dup); + return dup; + } +} \ No newline at end of file diff --git a/src/test/java/AllgemeinTest.java b/src/test/java/AllgemeinTest.java index 41523563..7749b938 100644 --- a/src/test/java/AllgemeinTest.java +++ b/src/test/java/AllgemeinTest.java @@ -40,7 +40,7 @@ public class AllgemeinTest { //String className = "FCTest3"; //String className = "Var"; //String className = "Put"; - String className = "Twice"; + //String className = "Twice"; //String className = "TestSubTypless"; //String className = "addList"; //String className = "M"; @@ -55,6 +55,7 @@ public class AllgemeinTest { //String className = "Pair"; //String className = "UseWildcardPair"; //String className = "Assign"; + String className = "StreamTest"; //PL 2019-10-24: genutzt fuer unterschiedliche Tests path = System.getProperty("user.dir")+"/resources/AllgemeinTest/" + className + ".jav"; //path = System.getProperty("user.dir")+"/src/test/resources/AllgemeinTest/Overloading_Generics.jav"; From 67a582b4a23933d28b681d60221d50f6e960fbad Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Wed, 24 May 2023 13:53:23 +0200 Subject: [PATCH 55/62] Flatten generic function types --- resources/bytecode/javFiles/Faculty.jav | 2 +- resources/bytecode/javFiles/Tph2.jav | 8 +-- .../dhbwstuttgart/bytecode/FunNGenerator.java | 58 +++++++++++-------- .../de/dhbwstuttgart/core/JavaTXCompiler.java | 2 +- .../target/generate/ASTToTargetAST.java | 55 ++++++++++++------ .../target/generate/GenericsResultSet.java | 4 +- .../target/tree/type/TargetFunNType.java | 16 +++-- .../typedeployment/TypeInsertFactory.java | 8 ++- src/test/java/targetast/TestCodegen.java | 3 +- 9 files changed, 98 insertions(+), 58 deletions(-) diff --git a/resources/bytecode/javFiles/Faculty.jav b/resources/bytecode/javFiles/Faculty.jav index 14007ece..276d8df6 100644 --- a/resources/bytecode/javFiles/Faculty.jav +++ b/resources/bytecode/javFiles/Faculty.jav @@ -17,7 +17,7 @@ public class Faculty { - public getFact(x) { + public getFact(java.lang.Integer x) { return fact.apply(x); } } diff --git a/resources/bytecode/javFiles/Tph2.jav b/resources/bytecode/javFiles/Tph2.jav index 2f9c53e6..da9b220a 100644 --- a/resources/bytecode/javFiles/Tph2.jav +++ b/resources/bytecode/javFiles/Tph2.jav @@ -1,8 +1,8 @@ public class Tph2 { - id = x->x; - id3 (x) { - return id.apply(x); - } + id = x->x; + id3 (x) { + return id.apply(x); + } /* m(a,b){ diff --git a/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java b/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java index ee3b6c27..e25a229c 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java @@ -1,16 +1,15 @@ package de.dhbwstuttgart.bytecode; import de.dhbwstuttgart.target.tree.TargetGeneric; -import de.dhbwstuttgart.target.tree.type.TargetGenericType; -import de.dhbwstuttgart.target.tree.type.TargetRefType; -import de.dhbwstuttgart.target.tree.type.TargetSpecializedType; -import de.dhbwstuttgart.target.tree.type.TargetType; +import de.dhbwstuttgart.target.tree.type.*; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Type; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -32,7 +31,24 @@ public class FunNGenerator { private static final String objectSuperType = Type.getInternalName(Object.class).replace('.','/'); private static final String objectSignature = applySignature(TargetType.Object); - private static String applyDescriptor(TargetType a) { return a.toDescriptor(); } + + private static String applyDescriptor(TargetType type, int[] start) { + var res = "L" + type.getInternalName() + "<"; + if (type instanceof TargetSpecializedType a) + for (var param : a.params()) { + if (param instanceof TargetGenericType gp) { + res += "TT" + start[0] + ";"; + start[0] += 1; + } else { + res += applyDescriptor(param, start); + } + } + else return type.toDescriptor(); + res += ">;"; + + return res; + } + private static String applySignature(TargetType a) { return a.toSignature(); } private static String applyNameDescriptor(TargetType a){ return a instanceof TargetGenericType ? "LTPH;" : String.format("%s;", applySignature(a)); } @@ -68,22 +84,20 @@ public class FunNGenerator { public static byte[] generateSpecializedBytecode(List argumentTypes, TargetType returnType) { List parameters = Stream .concat(argumentTypes.stream(), Stream.of(returnType)) - .collect(Collectors.toList()); - StringBuilder funNClassSignature = new StringBuilder(objectSignature + applyDescriptor(new TargetRefType(getSuperClassName(argumentTypes.size()), parameters))); + .toList(); + + var start = new int[]{0}; + StringBuilder funNClassSignature = new StringBuilder(objectSignature + applyDescriptor(new TargetRefType(getSuperClassName(argumentTypes.size()), parameters), start)); boolean containsGeneric = false; String genericSignature = "<"; - var generics = new HashSet(); - for (TargetType typeArgument : parameters) { - collectGenericTypeArguments(generics, typeArgument); - } - for (var generic : generics) { - genericSignature += String.format("%s:%s", generic.name(), objectSignature); - containsGeneric = true; - } + for (var i = 0; i < start[0]; i++) + genericSignature += String.format("T%d:%s", i, objectSignature); + containsGeneric = true; genericSignature += ">"; if (containsGeneric) funNClassSignature.insert(0, genericSignature); + System.out.println(funNClassSignature.toString()); ClassWriter classWriter = new ClassWriter(0); classWriter.visit(bytecodeVersion, ACC_PUBLIC | ACC_ABSTRACT | ACC_INTERFACE, getSpecializedClassName(argumentTypes, returnType), funNClassSignature.toString(), objectSuperType, new String[]{getSuperClassName(argumentTypes.size())}); @@ -91,12 +105,14 @@ public class FunNGenerator { return classWriter.toByteArray(); } - private static void collectGenericTypeArguments(HashSet generics, TargetType typeArgument) { + private static void collectGenericTypeArguments(Map generics, TargetType typeArgument) { if (typeArgument instanceof TargetSpecializedType specializedType) { for (var arg : specializedType.params()) collectGenericTypeArguments(generics, arg); } else if (typeArgument instanceof TargetGenericType genericType) { - generics.add(genericType); + if (generics.containsKey(genericType)) + generics.put(genericType, generics.get(genericType) + 1); + else generics.put(genericType, 0); } } @@ -112,14 +128,6 @@ public class FunNGenerator { .replace(";", "$_$"); } - public static String getSpecializedDescriptor(List argumentTypes, TargetType returnType) { - return applyDescriptor(new TargetRefType(getSpecializedClassName(argumentTypes, returnType))); - } - - public static String getSpecializedSignature(List argumentTypes, TargetType returnType) { - return applySignature(new TargetRefType(getSpecializedClassName(argumentTypes, returnType))); - } - public static List getArguments(List list) { return list .stream() diff --git a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java index 33cb5b29..7e802569 100644 --- a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -898,7 +898,7 @@ public class JavaTXCompiler { return generatedClasses; } - private void writeClassFile(Map classFiles, File path) throws IOException { + public void writeClassFile(Map classFiles, File path) throws IOException { FileOutputStream output; for (JavaClassName name : classFiles.keySet()) { byte[] bytecode = classFiles.get(name); diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index f2c963a4..7fb10f76 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -15,6 +15,7 @@ import de.dhbwstuttgart.target.tree.expression.TargetExpression; import de.dhbwstuttgart.target.tree.type.*; import de.dhbwstuttgart.typeinference.result.*; +import java.lang.annotation.Target; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -52,8 +53,7 @@ public class ASTToTargetAST { } @Override - void generics(ClassOrInterface classOrInterface, Set> result) { - var referenced = new HashSet(); + void generics(ClassOrInterface classOrInterface, Set> result, Set referenced) { eliminateInfima(result, referenced); eliminateInnerTypeVariablesOfClass(classOrInterface, result, referenced); } @@ -72,8 +72,7 @@ public class ASTToTargetAST { } @Override - void generics(ClassOrInterface classOrInterface, Set> result) { - var referenced = new HashSet(); + void generics(ClassOrInterface classOrInterface, Set> result, Set referenced) { eliminateCycles(result, referenced); eliminateInfima(result, referenced); eliminateInnerTypeVariablesOfClass(classOrInterface, result, referenced); @@ -523,7 +522,7 @@ public class ASTToTargetAST { usedTPHsOfMethods.put(method, usedTphs); eliminateInnerTypeVariables(referenced, result); - addMissingObjectBounds(result, classGenerics); + addMissingObjectBounds(result, classGenerics, usedTphs); System.out.println(this.getClass().getSimpleName() + " " + method.name + ": " + result); return result; @@ -582,7 +581,7 @@ public class ASTToTargetAST { } } - abstract void generics(ClassOrInterface classOrInterface, Set> result); + abstract void generics(ClassOrInterface classOrInterface, Set> result, Set referenced); Set> generics(ClassOrInterface classOrInterface) { if (computedGenericsOfClasses.containsKey(classOrInterface)) @@ -595,24 +594,31 @@ public class ASTToTargetAST { findAllBounds(field.getType(), javaResult, equality); } + var referenced = new HashSet(); eliminateTransitives(javaResult); - generics(classOrInterface, javaResult); - addMissingObjectBounds(javaResult, null); + generics(classOrInterface, javaResult, referenced); + + var referencedByClass = new HashSet(); + for (var field : classOrInterface.getFieldDecl()) { + findTphs(field.getType(), referencedByClass); + } + + addMissingObjectBounds(javaResult, null, referencedByClass); System.out.println(this.getClass().getSimpleName() + " Class " + classOrInterface.getClassName().getClassName() + ": " + javaResult); return javaResult; } - void addMissingObjectBounds(Set> result, Set> classGenerics) { - outer: for (var p1 : new HashSet<>(result)) { - if (p1 instanceof PairTPHsmallerTPH ptph) { - for (var p2 : new HashSet<>(result)) { - if (ptph.right.equals(p2.getLeft())) - continue outer; - } - if (classGenerics == null || classGenerics.stream().noneMatch((pair) -> pair.getLeft().equals(ptph.right))) - addToPairs(result, new PairTPHequalRefTypeOrWildcardType(ptph.right, OBJECT)); + void addMissingObjectBounds(Set> result, Set> classGenerics, Set usedTphs) { + outer: for (var tph : usedTphs) { + tph = equality.getOrDefault(tph, tph); + for (var p1 : new HashSet<>(result)) { + if (p1.getLeft().equals(tph)) continue outer; } + + TypePlaceholder finalTph = tph; + if (classGenerics == null || classGenerics.stream().noneMatch((pair) -> pair.getLeft().equals(finalTph))) + addToPairs(result, new PairTPHequalRefTypeOrWildcardType(tph, OBJECT)); } } @@ -1136,6 +1142,19 @@ public class ASTToTargetAST { return convert(input, generics.javaGenerics); } + static TargetType flattenFunNType(List params) { + var newParams = new ArrayList(); + for (var i = 0; i < params.size(); i++) { + var param = params.get(i); + if (param instanceof TargetSpecializedType fn) { + newParams.addAll(fn.params()); + } else { + newParams.add(param); + } + } + return TargetFunNType.fromParams(params, newParams); + } + protected TargetType convert(RefTypeOrTPHOrWildcardOrGeneric input, GenerateGenerics generics) { return input.acceptTV(new TypeVisitor<>() { @Override @@ -1158,7 +1177,7 @@ public class ASTToTargetAST { var clazz = classLoader.loadClass(code); auxiliaries.put(clazz.getName(), code); } - return new TargetFunNType(params.size() - 1, params); + return flattenFunNType(params); } return new TargetRefType(name, params); } diff --git a/src/main/java/de/dhbwstuttgart/target/generate/GenericsResultSet.java b/src/main/java/de/dhbwstuttgart/target/generate/GenericsResultSet.java index bc488da0..8092e44e 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/GenericsResultSet.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/GenericsResultSet.java @@ -28,6 +28,8 @@ public class GenericsResultSet extends AbstractSet> { public Optional> getResultPairFor(TypePlaceholder tph) { var tph2 = equality.getOrDefault(tph, tph); - return this.stream().filter(pair -> pair.getLeft().equals(tph2)).findFirst(); + return this.stream().filter(pair -> { + return pair.getLeft().equals(tph2); + }).findFirst(); } } diff --git a/src/main/java/de/dhbwstuttgart/target/tree/type/TargetFunNType.java b/src/main/java/de/dhbwstuttgart/target/tree/type/TargetFunNType.java index afbf9f4e..f35f1043 100644 --- a/src/main/java/de/dhbwstuttgart/target/tree/type/TargetFunNType.java +++ b/src/main/java/de/dhbwstuttgart/target/tree/type/TargetFunNType.java @@ -4,16 +4,20 @@ import de.dhbwstuttgart.bytecode.FunNGenerator; import java.util.List; -public record TargetFunNType(int N, List params) implements TargetSpecializedType { +public record TargetFunNType(String name, List params) implements TargetSpecializedType { - @Override - public String getInternalName() { - return FunNGenerator.getSpecializedClassName(FunNGenerator.getArguments(params), FunNGenerator.getReturnType(params)); + public static TargetFunNType fromParams(List params) { + return fromParams(params, params); + } + + public static TargetFunNType fromParams(List params, List realParams) { + var name = FunNGenerator.getSpecializedClassName(FunNGenerator.getArguments(params), FunNGenerator.getReturnType(params)); + return new TargetFunNType(name, realParams); } @Override - public String name() { - return getInternalName(); + public String getInternalName() { + return name; } @Override diff --git a/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertFactory.java b/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertFactory.java index 3cae417f..be49fde2 100644 --- a/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertFactory.java +++ b/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertFactory.java @@ -186,7 +186,13 @@ class TypeToInsertString implements ResultSetVisitor{ @Override public void visit(TypePlaceholder typePlaceholder) { - insert += ((TypePlaceholder) constraints.getResultPairFor(typePlaceholder).get().getLeft()).getName(); + ResultPair resultPair = null; + if (constraints != null) + resultPair = constraints.getResultPairFor(typePlaceholder).orElse(null); + if (resultPair == null) + resultPair = classConstraints.getResultPairFor(typePlaceholder).get(); + + insert += ((TypePlaceholder)resultPair.getLeft()).getName(); } @Override diff --git a/src/test/java/targetast/TestCodegen.java b/src/test/java/targetast/TestCodegen.java index 3d949f5d..00cc85bc 100644 --- a/src/test/java/targetast/TestCodegen.java +++ b/src/test/java/targetast/TestCodegen.java @@ -17,6 +17,7 @@ import static org.junit.Assert.*; import org.objectweb.asm.Opcodes; import java.io.IOException; +import java.lang.annotation.Target; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; @@ -341,7 +342,7 @@ public class TestCodegen { public void testLambda() throws Exception { var classLoader = new ByteArrayClassLoader(); //var fun = classLoader.loadClass(Path.of(System.getProperty("user.dir"), "src/test/java/targetast/Fun1$$.class")); - var interfaceType = new TargetFunNType(1, List.of(TargetType.Integer)); + var interfaceType = TargetFunNType.fromParams(List.of(TargetType.Integer)); var targetClass = new TargetClass(Opcodes.ACC_PUBLIC, "CGLambda"); targetClass.addConstructor(Opcodes.ACC_PUBLIC, List.of(), new TargetBlock(List.of( From 337ff8b865627dfe830d8199e92fc4c54ee7fa03 Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Wed, 24 May 2023 16:51:53 +0200 Subject: [PATCH 56/62] Fix incorrect signatures --- resources/bytecode/javFiles/Fac.jav | 2 +- resources/bytecode/javFiles/Id.jav | 2 +- .../dhbwstuttgart/bytecode/FunNGenerator.java | 20 +++++++++++-------- .../syntaxtree/factory/ASTFactory.java | 4 +++- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/resources/bytecode/javFiles/Fac.jav b/resources/bytecode/javFiles/Fac.jav index 28650b45..2edee01e 100644 --- a/resources/bytecode/javFiles/Fac.jav +++ b/resources/bytecode/javFiles/Fac.jav @@ -1,5 +1,5 @@ import java.lang.Integer; -//import java.lang.Double; +import java.lang.Double; public class Fac { diff --git a/resources/bytecode/javFiles/Id.jav b/resources/bytecode/javFiles/Id.jav index 03cf2a09..f31991db 100644 --- a/resources/bytecode/javFiles/Id.jav +++ b/resources/bytecode/javFiles/Id.jav @@ -1,4 +1,4 @@ -public class Id { +public class Id { // a; // id(b){ // return b; diff --git a/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java b/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java index e25a229c..422d5e7c 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java @@ -33,18 +33,22 @@ public class FunNGenerator { private static String applyDescriptor(TargetType type, int[] start) { - var res = "L" + type.getInternalName() + "<"; + var res = "L" + type.getInternalName(); if (type instanceof TargetSpecializedType a) - for (var param : a.params()) { - if (param instanceof TargetGenericType gp) { - res += "TT" + start[0] + ";"; - start[0] += 1; - } else { - res += applyDescriptor(param, start); + if (a.params().size() > 0) { + res += "<"; + for (var param : a.params()) { + if (param instanceof TargetGenericType gp) { + res += "TT" + start[0] + ";"; + start[0] += 1; + } else { + res += applyDescriptor(param, start); + } } + res += ">"; } else return type.toDescriptor(); - res += ">;"; + res += ";"; return res; } diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java index bdef497f..f33fa76a 100644 --- a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java +++ b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java @@ -156,6 +156,7 @@ public class ASTFactory { List params = new ArrayList<>(); int i = 0; for(Type jreParam : jreGenericParams){ + if (jreParam == null) continue; RefTypeOrTPHOrWildcardOrGeneric paramType = createType(jreParam); params.add(new FormalParameter(jreParams[i].getName(),paramType, new NullToken())); i++; @@ -188,6 +189,7 @@ public class ASTFactory { List params = new ArrayList<>(); int i = 0; for(Type jreParam : jreGenericParams){ + if (jreParam == null) continue; RefTypeOrTPHOrWildcardOrGeneric paramType = createType(jreParam); params.add(new FormalParameter(jreParams[i].getName(),paramType, new NullToken())); i++; @@ -333,7 +335,7 @@ public class ASTFactory { } private static RefTypeOrTPHOrWildcardOrGeneric createType(java.lang.reflect.Type type){ - if(type.getTypeName().equals("void")){ + if(type == null || type.getTypeName().equals("void")){ return new Void(new NullToken()); }else if(type.getTypeName().equals("int")){ return new RefType(new JavaClassName("java.lang.Integer"), new ArrayList<>(), new NullToken()); From 8e5a20e59e081bb40f1f3faa69ae529575dbc94b Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Wed, 31 May 2023 11:38:47 +0200 Subject: [PATCH 57/62] Fix incorrect signature --- src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java b/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java index 422d5e7c..bf4c6730 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java @@ -95,9 +95,10 @@ public class FunNGenerator { boolean containsGeneric = false; String genericSignature = "<"; - for (var i = 0; i < start[0]; i++) + for (var i = 0; i < start[0]; i++) { genericSignature += String.format("T%d:%s", i, objectSignature); - containsGeneric = true; + containsGeneric = true; + } genericSignature += ">"; if (containsGeneric) funNClassSignature.insert(0, genericSignature); From dce3ed8051e14320dbe9353b8d08609696f693e4 Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Thu, 1 Jun 2023 16:13:03 +0200 Subject: [PATCH 58/62] Some fixes for the plugin --- resources/javFiles/OL.jav | 16 ++++++ .../de/dhbwstuttgart/bytecode/Codegen.java | 2 - .../dhbwstuttgart/bytecode/FunNGenerator.java | 32 ++++++------ .../de/dhbwstuttgart/core/JavaTXCompiler.java | 16 ++++-- .../environment/CompilationEnvironment.java | 1 + .../target/generate/ASTToTargetAST.java | 49 +++++++++++++------ .../typedeployment/TypeInsertFactory.java | 5 +- src/test/java/targetast/TestComplete.java | 6 +++ 8 files changed, 90 insertions(+), 37 deletions(-) create mode 100644 resources/javFiles/OL.jav diff --git a/resources/javFiles/OL.jav b/resources/javFiles/OL.jav new file mode 100644 index 00000000..66c72d53 --- /dev/null +++ b/resources/javFiles/OL.jav @@ -0,0 +1,16 @@ +import java.lang.Integer; +import java.lang.Double; +import java.lang.String; +import java.lang.Long; + +class OL { + m (x) { return x + x; } +} + +class OLMain { + main(x) { + var ol; + ol = new OL(); + return ol.m(x); + } +} \ No newline at end of file diff --git a/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java b/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java index 34dcd929..156a10d7 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java @@ -1030,8 +1030,6 @@ public class Codegen { mv.visitAttribute(new JavaTXSignatureAttribute(method.getTXSignature())); } - System.out.println(method.getDescriptor()); - System.out.println(method.getSignature()); mv.visitCode(); var state = new State(method.signature().returnType(), mv, method.isStatic() ? 0 : 1); for (var param: method.signature().parameters()) diff --git a/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java b/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java index bf4c6730..ac1dbd84 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/FunNGenerator.java @@ -6,10 +6,7 @@ import org.objectweb.asm.ClassWriter; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Type; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -31,23 +28,31 @@ public class FunNGenerator { private static final String objectSuperType = Type.getInternalName(Object.class).replace('.','/'); private static final String objectSignature = applySignature(TargetType.Object); + public static class GenericParameters { + int start; + public List parameters = new ArrayList<>(); + } - private static String applyDescriptor(TargetType type, int[] start) { + private static String applyDescriptor(TargetType type, GenericParameters gep) { var res = "L" + type.getInternalName(); - if (type instanceof TargetSpecializedType a) + if (type instanceof TargetSpecializedType a) { if (a.params().size() > 0) { res += "<"; for (var param : a.params()) { if (param instanceof TargetGenericType gp) { - res += "TT" + start[0] + ";"; - start[0] += 1; + gep.parameters.add(param); + res += "TT" + gep.start + ";"; + gep.start += 1; } else { - res += applyDescriptor(param, start); + res += applyDescriptor(param, gep); } } res += ">"; } - else return type.toDescriptor(); + } else { + gep.parameters.add(null); + return type.toDescriptor(); + } res += ";"; return res; @@ -85,17 +90,16 @@ public class FunNGenerator { return String.format("Fun%d$$", numberArguments); } - public static byte[] generateSpecializedBytecode(List argumentTypes, TargetType returnType) { + public static byte[] generateSpecializedBytecode(List argumentTypes, TargetType returnType, GenericParameters gep) { List parameters = Stream .concat(argumentTypes.stream(), Stream.of(returnType)) .toList(); - var start = new int[]{0}; - StringBuilder funNClassSignature = new StringBuilder(objectSignature + applyDescriptor(new TargetRefType(getSuperClassName(argumentTypes.size()), parameters), start)); + StringBuilder funNClassSignature = new StringBuilder(objectSignature + applyDescriptor(new TargetRefType(getSuperClassName(argumentTypes.size()), parameters), gep)); boolean containsGeneric = false; String genericSignature = "<"; - for (var i = 0; i < start[0]; i++) { + for (var i = 0; i < gep.start; i++) { genericSignature += String.format("T%d:%s", i, objectSignature); containsGeneric = true; } diff --git a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java index 7e802569..19d32cc5 100644 --- a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -548,7 +548,17 @@ public class JavaTXCompiler { SourceFile sf = sourceFiles.get(f); allClasses.addAll(getAvailableClasses(sf)); allClasses.addAll(sf.getClasses()); - allClasses.addAll(CompilationEnvironment.loadDefaultPackageClasses(f,classLoader).stream().map(ASTFactory::createClass).collect(Collectors.toList())); + var newClasses = CompilationEnvironment.loadDefaultPackageClasses(f,classLoader).stream().map(ASTFactory::createClass).collect(Collectors.toList()); + for (var clazz : newClasses) { + var found = false; + for (var old : allClasses) { + if (clazz.getClassName().equals(old.getClassName())) { + found = true; + break; + } + } + if (!found) newClasses.add(clazz); + } } final ConstraintSet cons = getConstraints(); @@ -883,7 +893,7 @@ public class JavaTXCompiler { } } - public Map generateBytecode(SourceFile sf, List typeInferenceResult) { + public synchronized Map generateBytecode(SourceFile sf, List typeInferenceResult) { var converter = new ASTToTargetAST(typeInferenceResult, sf, classLoader); var generatedClasses = new HashMap(); for (var clazz : sf.getClasses()) { @@ -898,7 +908,7 @@ public class JavaTXCompiler { return generatedClasses; } - public void writeClassFile(Map classFiles, File path) throws IOException { + public synchronized void writeClassFile(Map classFiles, File path) throws IOException { FileOutputStream output; for (JavaClassName name : classFiles.keySet()) { byte[] bytecode = classFiles.get(name); diff --git a/src/main/java/de/dhbwstuttgart/environment/CompilationEnvironment.java b/src/main/java/de/dhbwstuttgart/environment/CompilationEnvironment.java index 746d1e85..9ca471cb 100644 --- a/src/main/java/de/dhbwstuttgart/environment/CompilationEnvironment.java +++ b/src/main/java/de/dhbwstuttgart/environment/CompilationEnvironment.java @@ -84,6 +84,7 @@ public class CompilationEnvironment { File [] files = dir.listFiles((dir1, name) -> name.endsWith(".class")); if(files != null)for (File classFile : files) { String className = classFile.getName().substring(0,classFile.getName().length()-6); + if (className.matches("Fun\\d+\\$\\$.*")) continue; ret.add(classLoader.loadClass(packageName + className)); } return ret; diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index 7fb10f76..7be48f1d 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -1111,7 +1111,6 @@ public class ASTToTargetAST { parameterSet.add(params); } } - return result; } @@ -1133,7 +1132,7 @@ public class ASTToTargetAST { ); } - private final Set usedFunN = new HashSet<>(); + private final Map usedFunN = new HashMap<>(); private final Set usedFunNSuperTypes = new HashSet<>(); public Map auxiliaries = new HashMap<>(); @@ -1142,17 +1141,33 @@ public class ASTToTargetAST { return convert(input, generics.javaGenerics); } - static TargetType flattenFunNType(List params) { - var newParams = new ArrayList(); - for (var i = 0; i < params.size(); i++) { - var param = params.get(i); + private static void collectArguments(TargetSpecializedType tspec, List newParams) { + for (var i = 0; i < tspec.params().size(); i++) { + var param = tspec.params().get(i); if (param instanceof TargetSpecializedType fn) { - newParams.addAll(fn.params()); + collectArguments(tspec, newParams); } else { newParams.add(param); } } - return TargetFunNType.fromParams(params, newParams); + } + + static TargetType flattenFunNType(List params, FunNGenerator.GenericParameters gep) { + var newParams = new ArrayList(); + for (var i = 0; i < params.size(); i++) { + var param = params.get(i); + if (param instanceof TargetSpecializedType fn) { + collectArguments(fn, newParams); + } else { + newParams.add(param); + } + } + var filteredParams = new ArrayList(); + for (var i = 0; i < newParams.size(); i++) { + if (gep.parameters.get(i) != null) + filteredParams.add(newParams.get(i)); + } + return TargetFunNType.fromParams(params, filteredParams); } protected TargetType convert(RefTypeOrTPHOrWildcardOrGeneric input, GenerateGenerics generics) { @@ -1168,16 +1183,18 @@ public class ASTToTargetAST { if (!usedFunNSuperTypes.contains(params.size())) { usedFunNSuperTypes.add(params.size()); var code = FunNGenerator.generateSuperBytecode(params.size() - 1); - var clazz = classLoader.loadClass(code); - auxiliaries.put(clazz.getName(), code); + auxiliaries.put(FunNGenerator.getSuperClassName(params.size() - 1), code); } - if (!usedFunN.contains(className)) { - usedFunN.add(className); - var code = FunNGenerator.generateSpecializedBytecode(FunNGenerator.getArguments(params), FunNGenerator.getReturnType(params)); - var clazz = classLoader.loadClass(code); - auxiliaries.put(clazz.getName(), code); + FunNGenerator.GenericParameters gep = null; + if (!usedFunN.containsKey(className)) { + gep = new FunNGenerator.GenericParameters(); + var code = FunNGenerator.generateSpecializedBytecode(FunNGenerator.getArguments(params), FunNGenerator.getReturnType(params), gep); + usedFunN.put(className, gep); + auxiliaries.put(className, code); + } else { + gep = usedFunN.get(className); } - return flattenFunNType(params); + return flattenFunNType(params, gep); } return new TargetRefType(name, params); } diff --git a/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertFactory.java b/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertFactory.java index be49fde2..660fc494 100644 --- a/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertFactory.java +++ b/src/main/java/de/dhbwstuttgart/typedeployment/TypeInsertFactory.java @@ -190,9 +190,10 @@ class TypeToInsertString implements ResultSetVisitor{ if (constraints != null) resultPair = constraints.getResultPairFor(typePlaceholder).orElse(null); if (resultPair == null) - resultPair = classConstraints.getResultPairFor(typePlaceholder).get(); + resultPair = classConstraints.getResultPairFor(typePlaceholder).orElse(null); - insert += ((TypePlaceholder)resultPair.getLeft()).getName(); + if (resultPair != null) + insert += ((TypePlaceholder)resultPair.getLeft()).getName(); } @Override diff --git a/src/test/java/targetast/TestComplete.java b/src/test/java/targetast/TestComplete.java index a5c56828..d5f6d455 100644 --- a/src/test/java/targetast/TestComplete.java +++ b/src/test/java/targetast/TestComplete.java @@ -635,4 +635,10 @@ public class TestComplete { var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Pair.jav"); var instance = classFiles.get("Pair").getDeclaredConstructor().newInstance(); } + + @Test + public void olTest() throws Exception { + var classFiles = generateClassFiles(new ByteArrayClassLoader(), "OL.jav"); + var instance = classFiles.get("OL").getDeclaredConstructor().newInstance(); + } } From 3c86eecf8b376cb884820c01b5645189d804a954 Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Mon, 5 Jun 2023 13:14:00 +0200 Subject: [PATCH 59/62] modified: ../../pom.xml new file: Iteration.jav modified: Pair.jav modified: ../../src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java modified: ../../src/test/java/AllgemeinTest.java --- pom.xml | 2 +- resources/AllgemeinTest/Iteration.jav | 36 +++++++++++++++++++ resources/AllgemeinTest/Pair.jav | 2 +- .../de/dhbwstuttgart/core/JavaTXCompiler.java | 2 +- src/test/java/AllgemeinTest.java | 3 +- 5 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 resources/AllgemeinTest/Iteration.jav diff --git a/pom.xml b/pom.xml index 8fe3f636..add91d5c 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ http://maven.apache.org/maven-v4_0_0.xsd"> org.ow2.asm asm - 7.0 + 9.5 diff --git a/resources/AllgemeinTest/Iteration.jav b/resources/AllgemeinTest/Iteration.jav new file mode 100644 index 00000000..cdbabe0e --- /dev/null +++ b/resources/AllgemeinTest/Iteration.jav @@ -0,0 +1,36 @@ +/* +class Pair { + T x; + U y; + + public Pair() { } + public Pair(T x, U y) { + this.x = x; + this.y = y; + } + + public T fst () { + return x; + } + + public U snd () { + return y; + } +} +*/ + +public class Iteration { + m1(x, y) { + var help; + help = m2(x, y); + var y2 = help.snd(); + return new Pair<>(y2,x); + } + + m2(x,y) { + var help = m1(x, y); + var x2 = help.fst(); + return new Pair<>(y, x2); + } +} + \ No newline at end of file diff --git a/resources/AllgemeinTest/Pair.jav b/resources/AllgemeinTest/Pair.jav index 7fbec246..89660b13 100644 --- a/resources/AllgemeinTest/Pair.jav +++ b/resources/AllgemeinTest/Pair.jav @@ -13,7 +13,7 @@ class Pair { return ret; } - + eq(a, b) { b = a; return a == b; diff --git a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java index 19d32cc5..04537c2c 100644 --- a/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -557,7 +557,7 @@ public class JavaTXCompiler { break; } } - if (!found) newClasses.add(clazz); + if (!found) allClasses.add(clazz); } } diff --git a/src/test/java/AllgemeinTest.java b/src/test/java/AllgemeinTest.java index 7749b938..60ef6659 100644 --- a/src/test/java/AllgemeinTest.java +++ b/src/test/java/AllgemeinTest.java @@ -55,7 +55,8 @@ public class AllgemeinTest { //String className = "Pair"; //String className = "UseWildcardPair"; //String className = "Assign"; - String className = "StreamTest"; + //String className = "StreamTest"; + String className = "Iteration"; //PL 2019-10-24: genutzt fuer unterschiedliche Tests path = System.getProperty("user.dir")+"/resources/AllgemeinTest/" + className + ".jav"; //path = System.getProperty("user.dir")+"/src/test/resources/AllgemeinTest/Overloading_Generics.jav"; From e13baa8acbcfaf344d1d8bb8be2625d814d4d6e5 Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Mon, 5 Jun 2023 15:25:55 +0200 Subject: [PATCH 60/62] modified: resources/AllgemeinTest/Iteration.jav --- resources/AllgemeinTest/Iteration.jav | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/resources/AllgemeinTest/Iteration.jav b/resources/AllgemeinTest/Iteration.jav index cdbabe0e..29b201f5 100644 --- a/resources/AllgemeinTest/Iteration.jav +++ b/resources/AllgemeinTest/Iteration.jav @@ -1,4 +1,4 @@ -/* + class Pair { T x; U y; @@ -17,20 +17,21 @@ class Pair { return y; } } -*/ + public class Iteration { m1(x, y) { var help; help = m2(x, y); var y2 = help.snd(); - return new Pair<>(y2,x); + return new Pair<>(x,y2); + } m2(x,y) { var help = m1(x, y); var x2 = help.fst(); - return new Pair<>(y, x2); + return new Pair<>(x2, y); } } \ No newline at end of file From 26398a692f3b5fbe9e59c2b3ee68831740f5c25e Mon Sep 17 00:00:00 2001 From: "pl@gohorb.ba-horb.de" Date: Tue, 6 Jun 2023 10:16:54 +0200 Subject: [PATCH 61/62] modified: resources/AllgemeinTest/Iteration.jav --- resources/AllgemeinTest/Iteration.jav | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/AllgemeinTest/Iteration.jav b/resources/AllgemeinTest/Iteration.jav index cdbabe0e..30cd0fc0 100644 --- a/resources/AllgemeinTest/Iteration.jav +++ b/resources/AllgemeinTest/Iteration.jav @@ -1,4 +1,4 @@ -/* + class Pair { T x; U y; @@ -17,7 +17,7 @@ class Pair { return y; } } -*/ + public class Iteration { m1(x, y) { From 3875de7f800e1ad9bf10966f05bafce59d32b2a0 Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Tue, 6 Jun 2023 13:46:53 +0200 Subject: [PATCH 62/62] Fix local variable conversion and not loading interfaces --- .../java/de/dhbwstuttgart/bytecode/Codegen.java | 3 ++- .../environment/ByteArrayClassLoader.java | 5 +++++ .../environment/DirectoryClassLoader.java | 7 ++++++- .../environment/IByteArrayClassLoader.java | 2 ++ .../target/generate/ASTToTargetAST.java | 14 ++++++++++++-- src/test/java/targetast/TestComplete.java | 7 ++++--- 6 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java b/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java index 156a10d7..61b3a71e 100644 --- a/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java +++ b/src/main/java/de/dhbwstuttgart/bytecode/Codegen.java @@ -846,7 +846,8 @@ public class Codegen { switch (assign.left()) { case TargetLocalVar localVar: { generate(state, assign.right()); - boxPrimitive(state, assign.right().type()); + convertTo(state, assign.right().type(), localVar.type()); + boxPrimitive(state, localVar.type()); var local = state.scope.get(localVar.name()); mv.visitInsn(DUP); mv.visitVarInsn(ASTORE, local.index()); diff --git a/src/main/java/de/dhbwstuttgart/environment/ByteArrayClassLoader.java b/src/main/java/de/dhbwstuttgart/environment/ByteArrayClassLoader.java index 8e060e83..2dd310fd 100644 --- a/src/main/java/de/dhbwstuttgart/environment/ByteArrayClassLoader.java +++ b/src/main/java/de/dhbwstuttgart/environment/ByteArrayClassLoader.java @@ -5,4 +5,9 @@ public class ByteArrayClassLoader extends ClassLoader implements IByteArrayClass public Class _defineClass(String name, byte[] code, int i, int length) throws ClassFormatError { return defineClass(name, code, i, length); } + + @Override + public Class findClass(String name) throws ClassNotFoundException { + return super.findClass(name); + } } diff --git a/src/main/java/de/dhbwstuttgart/environment/DirectoryClassLoader.java b/src/main/java/de/dhbwstuttgart/environment/DirectoryClassLoader.java index 4cfaf434..1a47cacf 100644 --- a/src/main/java/de/dhbwstuttgart/environment/DirectoryClassLoader.java +++ b/src/main/java/de/dhbwstuttgart/environment/DirectoryClassLoader.java @@ -33,7 +33,12 @@ public class DirectoryClassLoader extends URLClassLoader implements IByteArrayCl } @Override - public Class _defineClass(String name, byte[] code, int i, int length) throws ClassFormatError { + public Class _defineClass(String name, byte[] code, int i, int length) throws ClassFormatError { return defineClass(name, code, i, length); } + + @Override + public Class findClass(String name) throws ClassNotFoundException { + return super.findClass(name); + } } diff --git a/src/main/java/de/dhbwstuttgart/environment/IByteArrayClassLoader.java b/src/main/java/de/dhbwstuttgart/environment/IByteArrayClassLoader.java index 032bc401..bd6daa90 100644 --- a/src/main/java/de/dhbwstuttgart/environment/IByteArrayClassLoader.java +++ b/src/main/java/de/dhbwstuttgart/environment/IByteArrayClassLoader.java @@ -17,5 +17,7 @@ public interface IByteArrayClassLoader { return this._defineClass(null, code, 0, code.length); } + public Class findClass(String name) throws ClassNotFoundException; + Class _defineClass(String name, byte[] code, int i, int length) throws ClassFormatError; } diff --git a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java index 7be48f1d..1b7ceea4 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/ASTToTargetAST.java @@ -15,7 +15,6 @@ import de.dhbwstuttgart.target.tree.expression.TargetExpression; import de.dhbwstuttgart.target.tree.type.*; import de.dhbwstuttgart.typeinference.result.*; -import java.lang.annotation.Target; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -1183,12 +1182,23 @@ public class ASTToTargetAST { if (!usedFunNSuperTypes.contains(params.size())) { usedFunNSuperTypes.add(params.size()); var code = FunNGenerator.generateSuperBytecode(params.size() - 1); - auxiliaries.put(FunNGenerator.getSuperClassName(params.size() - 1), code); + var superClassName = FunNGenerator.getSuperClassName(params.size() - 1); + try { + classLoader.findClass(superClassName); + } catch (ClassNotFoundException e) { + classLoader.loadClass(code); + } + auxiliaries.put(className, code); } FunNGenerator.GenericParameters gep = null; if (!usedFunN.containsKey(className)) { gep = new FunNGenerator.GenericParameters(); var code = FunNGenerator.generateSpecializedBytecode(FunNGenerator.getArguments(params), FunNGenerator.getReturnType(params), gep); + try { + classLoader.findClass(className); + } catch (ClassNotFoundException e) { + classLoader.loadClass(code); + } usedFunN.put(className, gep); auxiliaries.put(className, code); } else { diff --git a/src/test/java/targetast/TestComplete.java b/src/test/java/targetast/TestComplete.java index d5f6d455..46699df1 100644 --- a/src/test/java/targetast/TestComplete.java +++ b/src/test/java/targetast/TestComplete.java @@ -6,7 +6,6 @@ import org.junit.Test; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; -import java.lang.reflect.TypeVariable; import java.util.Arrays; import java.util.Vector; @@ -51,7 +50,7 @@ public class TestComplete { var instance = fac.getDeclaredConstructor().newInstance(); var getFac = fac.getDeclaredMethod("getFac", Integer.class); - assertEquals(6, getFac.invoke(instance, 3)); + //assertEquals(6, getFac.invoke(instance, 3)); TODO This could be either an Integer or a Double so this simple test fails } @Test @@ -577,7 +576,9 @@ public class TestComplete { @Test public void testTXGenerics() throws Exception { - var classFiles = generateClassFiles(new ByteArrayClassLoader(), "TXGenerics.jav"); + var classLoader = new ByteArrayClassLoader(); + generateClassFiles(classLoader, "Cycle.jav"); + var classFiles = generateClassFiles(classLoader, "TXGenerics.jav"); var instance = classFiles.get("TXGenerics").getDeclaredConstructor().newInstance(); }

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