From: Kensuke M. <mat...@ki...> - 2012-08-07 06:03:58
|
Hi, I tried to convert scala program, but segmentation fault occurred. Does xmlvm2c support method overloading by return type? A .class file has two method. * public int call(); * public java.lang.Object call(); Generated callee .c source file has only "int call()", but caller uses "java.lang.Object call()". * test code * package test { import java.util.concurrent.Callable; class Hoge extends Callable[Int] { def call() = 1 } object Test { def callAndPrint(c: Callable[_]) { System.out.println(c.call()); } def main(args: Array[String]) { callAndPrint(new Hoge); } } } * result of javap -c * Compiled from "Test.scala" public class test.Hoge extends java.lang.Object implements java.util.concurrent.Callable,scala.ScalaObject{ public int call(); Code: 0: iconst_1 1: ireturn public java.lang.Object call(); Code: 0: aload_0 1: invokevirtual #11; //Method call:()I 4: invokestatic #17; //Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer; 7: areturn public test.Hoge(); Code: 0: aload_0 1: invokespecial #23; //Method java/lang/Object."<init>":()V 4: return } Compiled from "Test.scala" public final class test.Test$ extends java.lang.Object implements scala.ScalaObject{ public static final test.Test$ MODULE$; public static {}; Code: 0: new #9; //class test/Test$ 3: invokespecial #12; //Method "<init>":()V 6: return public void callAndPrint(java.util.concurrent.Callable); Code: 0: getstatic #20; //Field java/lang/System.out:Ljava/io/PrintStream; 3: aload_1 4: invokeinterface #27, 1; //InterfaceMethod java/util/concurrent/Callable.call:()Ljava/lang/Object; 9: invokevirtual #33; //Method java/io/PrintStream.println:(Ljava/lang/Object;)V 12: return public void main(java.lang.String[]); Code: 0: aload_0 1: new #43; //class test/Hoge 4: dup 5: invokespecial #44; //Method test/Hoge."<init>":()V 8: invokevirtual #46; //Method callAndPrint:(Ljava/util/concurrent/Callable;)V 11: return } -- 松崎 憲介 (MATSUZAKI Kensuke) URL : http://www.kitec.co.jp/ |