plasma-umass / doppio

Breaks the browser language barrier (includes a plugin-free JVM).
http://plasma-umass.github.io/doppio-demo
MIT License
2.16k stars 175 forks source link

Doppio doesn't work with upstream javac #88

Closed jvilk closed 11 years ago

jvilk commented 11 years ago
  1. Grab a bzip of upstream javac here: http://hg.openjdk.java.net/jdk6/jdk6/langtools/archive/tip.tar.bz2
  2. Compile all of the *.java files. I do this like so (from the src/share/classes folder):
export JVC_CLASSES=`find . -name *.java | tr '\n' ' '
javac $JVC_CLASSES
  1. Try to invoke com/sun/tools/javac/Main on something. You will get the following result:
Internal JVM Error: TypeError: Cannot call method 'toClassString' of undefined
TypeError: Cannot call method 'toClassString' of undefined
    at DynInvokeOpcode.root.DynInvokeOpcode.DynInvokeOpcode.execute (/Users/jvilk/Code/doppio2/doppio/src/opcodes.js:56:195)
    at Method.root.Method.Method.bytecode_loop (/Users/jvilk/Code/doppio2/doppio/src/methods.js:113:43)
    at Method.root.Method.Method.run_bytecode (/Users/jvilk/Code/doppio2/doppio/src/methods.js:104:29)
    at Method.root.Method.Method.run (/Users/jvilk/Code/doppio2/doppio/src/methods.js:123:208)
    at InvokeOpcode.root.InvokeOpcode.InvokeOpcode.execute (/Users/jvilk/Code/doppio2/doppio/src/opcodes.js:45:55)
    at Method.root.Method.Method.bytecode_loop (/Users/jvilk/Code/doppio2/doppio/src/methods.js:113:43)
    at Method.root.Method.Method.run_bytecode (/Users/jvilk/Code/doppio2/doppio/src/methods.js:104:29)
    at Method.root.Method.Method.run (/Users/jvilk/Code/doppio2/doppio/src/methods.js:123:208)
    at InvokeOpcode.root.InvokeOpcode.InvokeOpcode.execute (/Users/jvilk/Code/doppio2/doppio/src/opcodes.js:45:55)
    at Method.root.Method.Method.bytecode_loop (/Users/jvilk/Code/doppio2/doppio/src/methods.js:113:43)

I did a quick debug print; this is the value of obj (it tries to do obj.type.toClassString()) when this occurs:

{ '$first': null,
  'com/sun/tools/javac/util/BaseFileManager': null }

Looks like a field is being used instead of the actual object?

perimosocordiae commented 11 years ago

My repro with the current head (xargs is better than your tr hack):

src/share/classes$ find . -name *.java | xargs javac
Note: ./com/sun/tools/javadoc/Messager.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

doppio$ ./console/runner.coffee --classpath=/tmp/langtools-4ab5d66aaf2b/src/share/classes/ com/sun/tools/javac/Main --java=classes/demo/Fib.java
doppio$ java classes/demo/Fib
fib(20) = 6765

Disposition: works for me. Closing.