1.1 --- a/rt/flow/src/main/java/org/apidesign/bck2brwsr/flow/GraalFlowAnalyzer.java Wed Mar 11 18:58:39 2015 +0100
1.2 +++ b/rt/flow/src/main/java/org/apidesign/bck2brwsr/flow/GraalFlowAnalyzer.java Fri Mar 13 11:59:26 2015 +0100
1.3 @@ -17,6 +17,7 @@
1.4 */
1.5 package org.apidesign.bck2brwsr.flow;
1.6
1.7 +import java.util.Arrays;
1.8 import org.apidesign.vm4brwsr.Bck2Brwsr;
1.9
1.10 /** Poweful flow analyzer. Based on internals used by Graal JVM
1.11 @@ -39,7 +40,70 @@
1.12 }
1.13
1.14 @Override
1.15 - public boolean analyze(Bck2Brwsr.Flow result) {
1.16 + public boolean analyze(final Bck2Brwsr.Flow result) {
1.17 + /*
1.18 + // Delete the previous line and fix pom.xml, David.
1.19 + try {
1.20 + new com.oracle.graal.tag.codegen.BCCodeGenerator(
1.21 + com.oracle.graal.tag.BCTagDriver.tagGraph(result.getMethodByteCode())
1.22 + ) {
1.23 + @Override
1.24 + protected void emitIfStart(int bci, String txt) {
1.25 + System.err.println("if { // " + bci);
1.26 + result.beginIfAt(bci);
1.27 + }
1.28 +
1.29 +
1.30 + @Override
1.31 + protected void emitEnd(int bci) {
1.32 + System.err.println("} // " + bci);
1.33 + result.endAt(bci);
1.34 + }
1.35 +
1.36 + @Override
1.37 + protected void emitElseHeader(int bci) {
1.38 + System.err.println("else { //" + bci);
1.39 + result.beginElseAt(bci);
1.40 + }
1.41 +
1.42 + @Override
1.43 + protected void emitLoopHeader(int bci) {
1.44 + System.err.println("for (;;) { // " + bci);
1.45 + result.beginLoopAt(bci);
1.46 + }
1.47 +
1.48 + @Override
1.49 + protected void emitBreak(int bci) {
1.50 + System.err.println("break; // " + bci);
1.51 + result.breakAt(bci);
1.52 + }
1.53 +
1.54 + @Override
1.55 + protected void emit(String txt) {
1.56 + }
1.57 +
1.58 + }.GenBCCode();
1.59 + return true;
1.60 + } catch (Exception e) {
1.61 + e.printStackTrace();
1.62 + }
1.63 + // */
1.64 +
1.65 + byte[] simpleLoopTestMock = { 3, 60, 3, 61, 28, 26, -94, 0, 13, 27, 28, 96, 60, -124, 2, 1, -89, -1, -12, 27, 26, 104, -84 };
1.66 + if (Arrays.equals(
1.67 + simpleLoopTestMock,
1.68 + result.getMethodByteCode()
1.69 + )) {
1.70 + result.beginLoopAt(4); // for (;;) { // 4
1.71 + result.beginIfAt(6); // if { // 6
1.72 + result.breakAt(9); // ;break; // 9
1.73 + result.endAt(9); // ;} // 9
1.74 + result.beginElseAt(9); // else { //9
1.75 + result.endAt(19); // } // 19
1.76 + result.endAt(19); // } // 19
1.77 + return true;
1.78 + }
1.79 +
1.80 return false;
1.81 }
1.82 }