I posted the following observation about different versions of the
MLVM on Lambda Dev and at the suggestion of Rémi Forax I am reposting
here. The following code:

  class Test {
    public static void print(ActionEvent e) { System.out.println("Hello!"); }

    public static void main(String[] args) {
      final ActionListener al4 = Test#print( ActionEvent );
      JButton b = new JButton();
      b.addActionListener(al4);
      b.doClick();
      b.removeActionListener(al4);
    }
  }

Works with the MLVM java-1.7.0-internal-2010_07_30.tar.gz from:

  http://www.concord.org/~sbannasch/mlvm/

Which has version number:

  wizziewol-ln:lambdas lov080$
jdk=/System/Library/Frameworks/JavaVM.framework/Versions/1.7.0_2010_07_30/Home/bin
  wizziewol-ln:lambdas lov080$ $jdk/java -version
  openjdk version "1.7.0-internal-fastdebug"
  OpenJDK Runtime Environment (build
1.7.0-internal-fastdebug-stephen_2010_07_30_11_56-b00)
  OpenJDK Server VM (build 19.0-b03-fastdebug, mixed mode)

But with the later build, java-1.7.0-internal-mlvm-2010_08_18.tar.gz,
which has version number:

  wizziewol-ln:lambdas lov080$
jdk=/System/Library/Frameworks/JavaVM.framework/Versions/1.7.0_2010_08_18/Home/bin
  wizziewol-ln:lambdas lov080$ $jdk/java -version
  openjdk version "1.7.0-internal-fastdebug"
  OpenJDK Runtime Environment (build
1.7.0-internal-fastdebug-stephen_2010_08_18_15_10-b00)
  OpenJDK 64-Bit Server VM (build 19.0-b03-fastdebug, mixed mode)

It fails with:

  Exception in thread "main" java.dyn.WrongMethodTypeException:
(Ljava/dyn/MethodHandle;Ljava/awt/event/ActionEvent;)V cannot be
called as 
(Ljava/dyn/MethodHandle;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
        at sun.dyn.FromGeneric$A2.invoke_I2(FromGeneric.java:533)
        at java.dyn.MethodHandle.invokeVarargs(MethodHandle.java:332)
        at com.sun.runtime.ProxyHelper$1.invoke(ProxyHelper.java:61)
        at $Proxy0.actionPerformed(Unknown Source)
        at 
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2015)
        at 
javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2338)
        at 
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at 
javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
        at javax.swing.AbstractButton.doClick(AbstractButton.java:356)
        at lambdas.Test.main(Test.java:18)

The compile/run script is:

  #!/bin/sh
  # Compile and run Test example
  
jdk=/System/Library/Frameworks/JavaVM.framework/Versions/1.7.0_2010_08_18/Home/bin
  javac=/Users/lov080/Dropbox/Personal/Java/JDK7/langtools/dist/lib/javac.jar
  package=lambdas
  name=Test
  cd ..
  rm ../build/classes/$package/$name.class
  # Compile (javac)
  $jdk/java -Xbootclasspath/p:$javac -ea -jar $javac \
    -g -deprecation -source 7 -Xlint:all -XDallowFunctionTypes -d
../build/classes \
    $package/$name.java
  cd ../build/classes
  # Run
  $jdk/java -cp .:$javac -ea -Xfuture \
    -XX:+UnlockExperimentalVMOptions -XX:+EnableMethodHandles
-XX:+EnableInvokeDynamic \
    -XX:SuppressErrorAt=/constantPoolOop.cpp:283 \
    $package.$name

Where javac.jar is made from the JDK 7 mercurial repository.

Cheers,

  -- Howard.
_______________________________________________
mlvm-dev mailing list
[email protected]
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to