commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Valery Silaev <vsil...@gmail.com>
Subject Re: [JAVAFLOW] Running a Javaflow example
Date Thu, 17 Dec 2009 13:34:51 GMT

This is not a problem of ASM version, I've hit the same bug:
http://issues.apache.org/jira/browse/SANDBOX-318

The issue is related with constructor invocation in method instrumented by
AsmClassTransformer (problem does not exists with BcelClassTransformer)

> >>   private void echo(int x) {
> >>     System.out.println("echo " + x);
> >>     Continuation.suspend();
> >>   }

"echo " + x is causing the creation of StringBuilder object:
new StringBuilder("echo ").append(x);

As an ugly workaround, method may be rewritten as this:
private void echo(int x) {
 System.out.println(join("echo ", x));
 Continuation.suspend();
}

private String join(String prefix, int o) { return prefix + o; }

Btw, is Eugen still participate in Javaflow project? Need fix for this bug
too, but JVM bytecode is a Greek for me...


Jin Mingjian wrote:
> 
> get the older archive? why not use the asm version?
> 
> regards,
> Jin
> 
> 
> 
> 2009/9/1 Hiroshi Yamauchi <yamauchi@google.com>
> 
>> Hi Torsten,
>>
>> How do I use BCEL from javaflow, or how do I get the BCEL based javaflow?
>>
>> Thanks,
>>
>> Hiroshi
>>
>> On Sun, Aug 23, 2009 at 10:10 AM, Torsten Curdt<tcurdt@apache.org> wrote:
>> > In the latest trunk javaflow switched to use the ASM engine instead of
>> > the BCEL one by default. There is still some work to do. But maybe
>> > give the BCEL one a try.
>> >
>> > cheers
>> > --
>> > Torsten
>> >
>> > On Tue, Aug 18, 2009 at 02:15, Hiroshi Yamauchi<yamauchi@google.com>
>> wrote:
>> >> Hi,
>> >>
>> >> I'm trying to run a javaflow example code. But it's been unsuccessful
>> so
>> far.
>> >>
>> >> I'm basically following this blog post:
>> >> http://blogs.sun.com/sundararajan/entry/continuations_for_java
>> >>
>> >> I built javaflow-1.0-SNAPSHOT.jar using maven and downloaded
>> >> commons-logging-1.1.1.jar and asm-all-3.2.jar.
>> >>
>> >> Here's what I did:
>> >>
>> >> $ cat Test.java
>> >> import org.apache.commons.javaflow.*;
>> >>
>> >> class Test {
>> >>  static class MyRunnable implements Runnable {
>> >>   public void run() {
>> >>     System.out.println("run started!");
>> >>     for( int i=0; i < 10; i++ ) {
>> >>       echo(i);
>> >>     }
>> >>   }
>> >>
>> >>   private void echo(int x) {
>> >>     System.out.println("echo " + x);
>> >>     Continuation.suspend();
>> >>   }
>> >>  }
>> >>
>> >>  public static void main(String[] args) {
>> >>   System.out.println("main started");
>> >>   Continuation c = Continuation.startWith(new MyRunnable());
>> >>   System.out.println("in main after continuation return");
>> >>   while (c != null) {
>> >>     c = Continuation.continueWith(c);
>> >>     System.out.println("in main");
>> >>   }
>> >>  }
>> >> }
>> >> $ javac -cp ../target/javaflow-1.0-SNAPSHOT.jar Test.java
>> >> $ jar cvf Test.jar Test.class Test\$MyRunnable.class
>> >> added manifest
>> >> adding: Test.class(in = 882) (out= 516)(deflated 41%)
>> >> adding: Test$MyRunnable.class(in = 903) (out= 563)(deflated 37%)
>> >> $ java -cp
>> ../target/javaflow-1.0-SNAPSHOT.jar:../lib/commons-logging-1.1.1.jar:../lib/asm-all-3.2.jar
>> >>  org.apache.commons.javaflow.utils.RewritingUtils Test.jar
>> >> Test-instrumented.jar
>> >> rewriting Test.jar
>> >> org.objectweb.asm.tree.analysis.AnalyzerException: Error at
>> >> instruction 8: Cannot pop operand off an empty stack.
>> >>       at org.objectweb.asm.tree.analysis.Analyzer.analyze(Unknown
>> Source)
>> >>       at
>> org.apache.commons.javaflow.bytecode.transformation.asm.ContinuationMethodAnalyzer$2.analyze(ContinuationMethodAnalyzer.java:124)
>> >>       at
>> org.apache.commons.javaflow.bytecode.transformation.asm.ContinuationMethodAnalyzer.visitEnd(ContinuationMethodAnalyzer.java:135)
>> >>       at org.objectweb.asm.ClassReader.accept(Unknown Source)
>> >>       at org.objectweb.asm.ClassReader.accept(Unknown Source)
>> >>       at
>> org.apache.commons.javaflow.bytecode.transformation.asm.AsmClassTransformer.transform(AsmClassTransformer.java:53)
>> >>       at
>> org.apache.commons.javaflow.bytecode.transformation.asm.AsmClassTransformer.transform(AsmClassTransformer.java:40)
>> >>       at
>> org.apache.commons.javaflow.utils.RewritingUtils.rewriteJar(RewritingUtils.java:108)
>> >>       at
>> org.apache.commons.javaflow.utils.RewritingUtils.rewriteJar(RewritingUtils.java:71)
>> >>       at
>> org.apache.commons.javaflow.utils.RewritingUtils.main(RewritingUtils.java:181)
>> >> Caused by: java.lang.IndexOutOfBoundsException: Cannot pop operand off
>> >> an empty stack.
>> >>       at org.objectweb.asm.tree.analysis.Frame.pop(Unknown Source)
>> >>       at org.objectweb.asm.tree.analysis.Frame.execute(Unknown Source)
>> >>       at
>> org.apache.commons.javaflow.bytecode.transformation.asm.MonitoringFrame.execute(MonitoringFrame.java:70)
>> >>       ... 10 more
>> >> org.objectweb.asm.tree.analysis.AnalyzerException: Error at
>> >> instruction 8: Cannot pop operand off an empty stack.
>> >>       at org.objectweb.asm.tree.analysis.Analyzer.analyze(Unknown
>> Source)
>> >>       at org.objectweb.asm.util.CheckMethodAdapter$1.visitEnd(Unknown
>> Source)
>> >>       at org.objectweb.asm.util.CheckMethodAdapter.visitEnd(Unknown
>> Source)
>> >>       at org.objectweb.asm.tree.MethodNode.accept(Unknown Source)
>> >>       at
>> org.apache.commons.javaflow.bytecode.transformation.asm.ContinuationMethodAnalyzer.visitEnd(ContinuationMethodAnalyzer.java:141)
>> >>       at org.objectweb.asm.ClassReader.accept(Unknown Source)
>> >>       at org.objectweb.asm.ClassReader.accept(Unknown Source)
>> >>       at
>> org.apache.commons.javaflow.bytecode.transformation.asm.AsmClassTransformer.transform(AsmClassTransformer.java:53)
>> >>       at
>> org.apache.commons.javaflow.bytecode.transformation.asm.AsmClassTransformer.transform(AsmClassTransformer.java:40)
>> >>       at
>> org.apache.commons.javaflow.utils.RewritingUtils.rewriteJar(RewritingUtils.java:108)
>> >>       at
>> org.apache.commons.javaflow.utils.RewritingUtils.rewriteJar(RewritingUtils.java:71)
>> >>       at
>> org.apache.commons.javaflow.utils.RewritingUtils.main(RewritingUtils.java:181)
>> >> Caused by: java.lang.IndexOutOfBoundsException: Cannot pop operand off
>> >> an empty stack.
>> >>       at org.objectweb.asm.tree.analysis.Frame.pop(Unknown Source)
>> >>       at org.objectweb.asm.tree.analysis.Frame.execute(Unknown Source)
>> >>       ... 12 more
>> >> Exception in thread "main" java.lang.RuntimeException: Error at
>> >> instruction 8: Cannot pop operand off an empty stack.
>> >> main([Ljava/lang/String;)V
>> >> 00000 R .  :  :    L0
>> >> 00001 R .  :  :     LINENUMBER 19 L0
>> >> 00002 R .  :  :     GETSTATIC java/lang/System.out :
>> Ljava/io/PrintStream;
>> >> 00003 R .  : R  :     LDC "main started"
>> >> 00004 R .  : R R  :    L1
>> >> 00005 R .  : R R  :     INVOKEVIRTUAL java/io/PrintStream.println
>> >> (Ljava/lang/String;)V
>> >> 00006 R .  :  :    L2
>> >> 00007 R .  :  :     LINENUMBER 20 L2
>> >> 00008 R .  :  :     INVOKESPECIAL Test$MyRunnable.<init> ()V
>> >> 00009 ?     :     NEW Test$MyRunnable
>> >> 00010 ?     :     DUP
>> >> 00011 ?     :    L3
>> >> 00012 ?     :     INVOKESTATIC
>> >> org/apache/commons/javaflow/Continuation.startWith
>> >> (Ljava/lang/Runnable;)Lorg/apache/commons/javaflow/Continuation;
>> >> 00013 ?     :     ASTORE 1
>> >> 00014 ?     :    L4
>> >> 00015 ?     :     LINENUMBER 21 L4
>> >> 00016 ?     :     GETSTATIC java/lang/System.out :
>> Ljava/io/PrintStream;
>> >> 00017 ?     :     LDC "in main after continuation return"
>> >> 00018 ?     :    L5
>> >> 00019 ?     :     INVOKEVIRTUAL java/io/PrintStream.println
>> >> (Ljava/lang/String;)V
>> >> 00020 ?     :    L6
>> >> 00021 ?     :     LINENUMBER 22 L6
>> >> 00022 ?     :    FRAME APPEND
>> [org/apache/commons/javaflow/Continuation]
>> >> 00023 ?     :     ALOAD 1
>> >> 00024 ?     :     IFNULL L7
>> >> 00025 ?     :    L8
>> >> 00026 ?     :     LINENUMBER 23 L8
>> >> 00027 ?     :     ALOAD 1
>> >> 00028 ?     :    L9
>> >> 00029 ?     :     INVOKESTATIC
>> >> org/apache/commons/javaflow/Continuation.continueWith
>> >>
>> (Lorg/apache/commons/javaflow/Continuation;)Lorg/apache/commons/javaflow/Continuation;
>> >> 00030 ?     :     ASTORE 1
>> >> 00031 ?     :    L10
>> >> 00032 ?     :     LINENUMBER 24 L10
>> >> 00033 ?     :     GETSTATIC java/lang/System.out :
>> Ljava/io/PrintStream;
>> >> 00034 ?     :     LDC "in main"
>> >> 00035 ?     :    L11
>> >> 00036 ?     :     INVOKEVIRTUAL java/io/PrintStream.println
>> >> (Ljava/lang/String;)V
>> >> 00037 ?     :     GOTO L6
>> >> 00038 ?     :    L7
>> >> 00039 ?     :     LINENUMBER 26 L7
>> >> 00040 ?     :    FRAME SAME
>> >> 00041 ?     :     RETURN
>> >>
>> >>
>> >>       at org.objectweb.asm.util.CheckMethodAdapter$1.visitEnd(Unknown
>> Source)
>> >>       at org.objectweb.asm.util.CheckMethodAdapter.visitEnd(Unknown
>> Source)
>> >>       at org.objectweb.asm.tree.MethodNode.accept(Unknown Source)
>> >>       at
>> org.apache.commons.javaflow.bytecode.transformation.asm.ContinuationMethodAnalyzer.visitEnd(ContinuationMethodAnalyzer.java:141)
>> >>       at org.objectweb.asm.ClassReader.accept(Unknown Source)
>> >>       at org.objectweb.asm.ClassReader.accept(Unknown Source)
>> >>       at
>> org.apache.commons.javaflow.bytecode.transformation.asm.AsmClassTransformer.transform(AsmClassTransformer.java:53)
>> >>       at
>> org.apache.commons.javaflow.bytecode.transformation.asm.AsmClassTransformer.transform(AsmClassTransformer.java:40)
>> >>       at
>> org.apache.commons.javaflow.utils.RewritingUtils.rewriteJar(RewritingUtils.java:108)
>> >>       at
>> org.apache.commons.javaflow.utils.RewritingUtils.rewriteJar(RewritingUtils.java:71)
>> >>       at
>> org.apache.commons.javaflow.utils.RewritingUtils.main(RewritingUtils.java:181)
>> >>
>> >> Can someone advise how to get this working?
>> >>
>> >> Thanks,
>> >> Hiroshi
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>> >> For additional commands, e-mail: user-help@commons.apache.org
>> >>
>> >>
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>> > For additional commands, e-mail: user-help@commons.apache.org
>> >
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>> For additional commands, e-mail: user-help@commons.apache.org
>>
>>
> 
> 

-- 
View this message in context: http://n4.nabble.com/JAVAFLOW-Running-a-Javaflow-example-tp747470p965979.html
Sent from the Commons - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Mime
View raw message