mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 08:14:09 -08:00
Add test to prove that all modification to a local variable are visible in a corresponding catch block
This commit is contained in:
parent
6196dc80ed
commit
1f30e5fd88
|
@ -19,10 +19,6 @@ import java.util.Collections;
|
|||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
public class Variable implements VariableReader {
|
||||
private Program program;
|
||||
private int index;
|
||||
|
|
|
@ -98,10 +98,12 @@ public class Parser {
|
|||
debugNames = newDebugNames;
|
||||
}
|
||||
for (Variable definedVar : defExtractor.getDefinedVariables()) {
|
||||
/*
|
||||
int sourceVar = phiUpdater.getSourceVariable(definedVar.getIndex());
|
||||
if (sourceVar >= 0) {
|
||||
varMap.put(sourceVar, definedVar.getIndex());
|
||||
}
|
||||
*/
|
||||
}
|
||||
for (Map.Entry<Integer, String> debugName : debugNames.entrySet()) {
|
||||
int receiver = varMap.getOrDefault(debugName.getKey(), -1);
|
||||
|
@ -147,6 +149,7 @@ public class Parser {
|
|||
IntIntMap varMap = new IntIntOpenHashMap(step.varMap);
|
||||
BasicBlock block = program.basicBlockAt(node);
|
||||
|
||||
/*
|
||||
for (TryCatchJoint joint : block.getTryCatchJoints()) {
|
||||
int receiver = joint.getReceiver().getIndex();
|
||||
int sourceVar = phiUpdater.getSourceVariable(receiver);
|
||||
|
@ -161,9 +164,11 @@ public class Parser {
|
|||
varMap.put(sourceVar, receiver);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
result[node] = new IntIntOpenHashMap(varMap);
|
||||
|
||||
/*
|
||||
for (Instruction insn : block.getInstructions()) {
|
||||
insn.acceptVisitor(defExtractor);
|
||||
for (Variable definedVar : defExtractor.getDefinedVariables()) {
|
||||
|
@ -173,6 +178,7 @@ public class Parser {
|
|||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
for (int successor : dom.outgoingEdges(node)) {
|
||||
stack[top++] = new Step(successor, new IntIntOpenHashMap(varMap));
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<orderEntry type="module" module-name="teavm-classlib" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-platform" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-core" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-metaprogramming-api" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-interop" scope="PROVIDED" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-io:commons-io:2.4" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.carrotsearch:hppc:0.6.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.objenesis:objenesis:2.4" level="project" />
|
||||
|
@ -38,9 +38,4 @@
|
|||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.jcraft:jzlib:1.1.3" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: joda-time:joda-time:2.7" level="project" />
|
||||
</component>
|
||||
<component name="teavm">
|
||||
<option name="enabled" value="true" />
|
||||
<option name="mainClass" value="org.teavm.samples.async.AsyncProgram" />
|
||||
<option name="targetDirectory" value="$MODULE_DIR$/target/generated/js/teavm" />
|
||||
</component>
|
||||
</module>
|
|
@ -35,7 +35,7 @@
|
|||
<orderEntry type="module" module-name="teavm-classlib" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-platform" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-core" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-metaprogramming-api" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-interop" scope="PROVIDED" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-io:commons-io:2.4" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.carrotsearch:hppc:0.6.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.objenesis:objenesis:2.4" level="project" />
|
||||
|
@ -63,9 +63,4 @@
|
|||
<orderEntry type="library" name="Maven: org.netbeans.html:net.java.html.boot:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.netbeans.html:net.java.html:1.2.3" level="project" />
|
||||
</component>
|
||||
<component name="teavm">
|
||||
<option name="enabled" value="true" />
|
||||
<option name="mainClass" value="org.teavm.samples.benchmark.teavm.BenchmarkStarter" />
|
||||
<option name="targetDirectory" value="$MODULE_DIR$/target/generated/js/teavm" />
|
||||
</component>
|
||||
</module>
|
|
@ -29,7 +29,7 @@
|
|||
<orderEntry type="module" module-name="teavm-classlib" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-platform" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-core" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-metaprogramming-api" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-interop" scope="PROVIDED" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-io:commons-io:2.4" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.carrotsearch:hppc:0.6.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.objenesis:objenesis:2.4" level="project" />
|
||||
|
@ -42,9 +42,4 @@
|
|||
<orderEntry type="library" scope="PROVIDED" name="Maven: joda-time:joda-time:2.7" level="project" />
|
||||
<orderEntry type="module" module-name="teavm-jso-apis" scope="PROVIDED" />
|
||||
</component>
|
||||
<component name="teavm">
|
||||
<option name="enabled" value="true" />
|
||||
<option name="mainClass" value="org.teavm.samples.kotlin.HelloKt" />
|
||||
<option name="targetDirectory" value="$MODULE_DIR$/target/generated/js/teavm" />
|
||||
</component>
|
||||
</module>
|
|
@ -25,7 +25,7 @@
|
|||
<orderEntry type="module" module-name="teavm-classlib" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-platform" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-core" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-metaprogramming-api" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-interop" scope="PROVIDED" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-io:commons-io:2.4" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.carrotsearch:hppc:0.6.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.objenesis:objenesis:2.4" level="project" />
|
||||
|
@ -39,9 +39,4 @@
|
|||
<orderEntry type="module" module-name="teavm-jso" />
|
||||
<orderEntry type="library" name="Maven: org.scala-lang:scala-library:2.11.7" level="project" />
|
||||
</component>
|
||||
<component name="teavm">
|
||||
<option name="enabled" value="true" />
|
||||
<option name="mainClass" value="org.teavm.samples.scala.Client" />
|
||||
<option name="targetDirectory" value="$MODULE_DIR$/target/generated/js/teavm" />
|
||||
</component>
|
||||
</module>
|
|
@ -25,7 +25,7 @@
|
|||
<orderEntry type="module" module-name="teavm-classlib" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-platform" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-core" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-metaprogramming-api" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-interop" scope="PROVIDED" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-io:commons-io:2.4" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.carrotsearch:hppc:0.6.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.objenesis:objenesis:2.4" level="project" />
|
||||
|
@ -39,9 +39,4 @@
|
|||
<orderEntry type="module" module-name="teavm-jso-apis" scope="PROVIDED" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet:javax.servlet-api:3.1.0" level="project" />
|
||||
</component>
|
||||
<component name="teavm">
|
||||
<option name="enabled" value="true" />
|
||||
<option name="mainClass" value="org.teavm.samples.storage.Application" />
|
||||
<option name="targetDirectory" value="$MODULE_DIR$/target/generated/js/teavm" />
|
||||
</component>
|
||||
</module>
|
|
@ -25,7 +25,7 @@
|
|||
<orderEntry type="module" module-name="teavm-classlib" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-platform" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-core" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-metaprogramming-api" scope="PROVIDED" />
|
||||
<orderEntry type="module" module-name="teavm-interop" scope="PROVIDED" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-io:commons-io:2.4" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.carrotsearch:hppc:0.6.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.objenesis:objenesis:2.4" level="project" />
|
||||
|
@ -39,9 +39,4 @@
|
|||
<orderEntry type="module" module-name="teavm-jso-apis" scope="PROVIDED" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet:javax.servlet-api:3.1.0" level="project" />
|
||||
</component>
|
||||
<component name="teavm">
|
||||
<option name="enabled" value="true" />
|
||||
<option name="mainClass" value="org.teavm.samples.video.Player" />
|
||||
<option name="targetDirectory" value="$MODULE_DIR$/target/generated/js/teavm" />
|
||||
</component>
|
||||
</module>
|
|
@ -16,7 +16,6 @@
|
|||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import java.lang.annotation.Retention;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.teavm.junit.TeaVMTestRunner;
|
||||
|
@ -118,6 +117,21 @@ public class VMTest {
|
|||
assertEquals("SECOND ", ClassWithStaticField.foo(false));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void variableReadInCatchBlock() {
|
||||
int n = foo();
|
||||
try {
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
n += foo();
|
||||
}
|
||||
bar();
|
||||
n += foo() * 5;
|
||||
} catch (RuntimeException e) {
|
||||
assertEquals(RuntimeException.class, e.getClass());
|
||||
assertEquals(n, 22);
|
||||
}
|
||||
}
|
||||
|
||||
private static class ClassWithStaticField {
|
||||
public final static String CONST1 = "FIRST";
|
||||
public final static String CONST2 = "SECOND";
|
||||
|
|
|
@ -64,8 +64,8 @@ import org.teavm.idea.jps.model.TeaVMJpsConfiguration;
|
|||
import org.teavm.idea.jps.remote.TeaVMBuilderAssistant;
|
||||
import org.teavm.idea.jps.remote.TeaVMElementLocation;
|
||||
import org.teavm.model.CallLocation;
|
||||
import org.teavm.model.InstructionLocation;
|
||||
import org.teavm.model.MethodReference;
|
||||
import org.teavm.model.TextLocation;
|
||||
import org.teavm.model.ValueType;
|
||||
import org.teavm.tooling.EmptyTeaVMToolLog;
|
||||
import org.teavm.tooling.TeaVMTool;
|
||||
|
@ -243,7 +243,7 @@ class TeaVMBuild {
|
|||
int endOffset = -1;
|
||||
|
||||
if (callLocation != null) {
|
||||
InstructionLocation insnLocation = callLocation.getSourceLocation();
|
||||
TextLocation insnLocation = callLocation.getSourceLocation();
|
||||
if (insnLocation != null) {
|
||||
path = insnLocation.getFileName();
|
||||
line = insnLocation.getLine();
|
||||
|
@ -449,8 +449,6 @@ class TeaVMBuild {
|
|||
return "Discovering classes to compile";
|
||||
case LINKING:
|
||||
return "Resolving method invocations";
|
||||
case DEVIRTUALIZATION:
|
||||
return "Eliminating virtual calls";
|
||||
case DECOMPILATION:
|
||||
return "Compiling classes";
|
||||
case RENDERING:
|
||||
|
|
Loading…
Reference in New Issue
Block a user