Regression?

Howard Lovatt howard.lovatt at gmail.com
Thu Sep 2 16:29:42 PDT 2010


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.


More information about the mlvm-dev mailing list