<div dir="ltr"><div>If you leave off --java this will generate an AOT java class.  --java cannot work because we cannot generate a method name containing '?' that is valid java syntax.  Java bytecode format does not have this restriction though.<br><br></div>-Tom<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 25, 2016 at 5:48 AM, Hugh Sasse <span dir="ltr"><<a href="mailto:hgs@dmu.ac.uk" target="_blank">hgs@dmu.ac.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">[I sent this on Friday, but clearly it didn't actually leave here...]<br>
I can reproduce this with this:<br>
<br>
<br>
C:\hgs_documents\progs\jruby>type qmark.rb<br>
#<br>
# Test case with a ? method for Jruby<br>
#<br>
<br>
class Table < Hash<br>
  def has_key?(args)<br>
    if key.respond_to? :upcase<br>
      super key.upcase()<br>
    else<br>
      super<br>
    end<br>
  end<br>
end<br>
<br>
<br>
<br>
C:\hgs_documents\progs\jruby>jrubyc --java qmark.rb<br>
Unhandled Java exception: org.jruby.parser.ParserSyntaxException: syntax error,<br>
unexpected QUESTION<br>
<br>
org.jruby.parser.ParserSyntaxException: syntax error, unexpected QUESTION<br>
<br>
                      build_signature at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:142<br>
             block in ClassNodeWalker at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:228<br>
             block in visit_args_node at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:35<br>
                            with_node at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:188<br>
             block in visit_args_node at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:34<br>
                        visitArgsNode at JRuby$$Compiler$$ClassNodeWalker_385928<br>
906.gen:13<br>
             block in ClassNodeWalker at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:240<br>
             block in visit_defn_node at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:35<br>
                            with_node at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:188<br>
             block in visit_defn_node at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:34<br>
                        visitDefnNode at JRuby$$Compiler$$ClassNodeWalker_385928<br>
906.gen:13<br>
             block in ClassNodeWalker at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:234<br>
            block in visit_class_node at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:35<br>
                            with_node at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:188<br>
            block in visit_class_node at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:34<br>
                       visitClassNode at JRuby$$Compiler$$ClassNodeWalker_385928<br>
906.gen:13<br>
             block in ClassNodeWalker at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:281<br>
             block in visit_root_node at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:35<br>
                            with_node at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:188<br>
             block in visit_root_node at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:34<br>
                        visitRootNode at JRuby$$Compiler$$ClassNodeWalker_385928<br>
906.gen:13<br>
                        generate_java at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler/java_class.rb:8<br>
  block in compile_files_with_options at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler.rb:141<br>
  block in compile_files_with_options at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler.rb:291<br>
                                 each at org/jruby/RubyArray.java:1560<br>
           compile_files_with_options at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler.rb:275<br>
                         compile_argv at C:/jruby-9.0.4.0/lib/ruby/stdlib/jruby/<br>
compiler.rb:94<br>
                                <top> at C_3a_/jruby_minus_9_dot_0_dot_4_dot_0/b<br>
in/C:/jruby-9.0.4.0/bin/jrubyc:5<br>
<br>
C:\hgs_documents\progs\jruby>jruby --version<br>
jruby 9.0.4.0 (2.2.2) 2015-11-12 b9fb7aa Java HotSpot(TM) Client VM 25.71-b15 on<br>
 1.8.0_71-b15 +jit [Windows 7-x86]<br>
<br>
C:\hgs_documents\progs\jruby><br>
<br>
<br>
As I said, I think I'm probably taking the wrong approach to this,<br>
but can't find the correct approach so far...<br>
<br>
Thank you,<br>
Hugh.<span class="im HOEnZb"><br>
<br>
<br>
On 21/01/2016 21:49, Christian MICHON wrote:<br>
> What exact set of commands did you use to compile to bytecode?<br>
><br>
> Please share some code not compiling properly, even a 1 or 2 liners will<br>
> suffice.<br>
><br>
> On Thu, Jan 21, 2016 at 2:13 PM, Hugh Sasse <<a href="mailto:hgs@dmu.ac.uk" target="_blank">hgs@dmu.ac.uk</a><br></span><div class="HOEnZb"><div class="h5">
> <mailto:<a href="mailto:hgs@dmu.ac.uk" target="_blank">hgs@dmu.ac.uk</a>>> wrote:<br>
><br>
>     Hello,<br>
>     I'm using JRuby 9.0.4.0 on Windows 32 bit.<br>
>     I have not got any further with trying to get my code compiled to an<br>
>     executable jar file.  I have worked around my subclass of Hash<br>
>     needing the []() and []=() methods using fetch() and store() instead.<br>
>     However, has_key?() has me stumped, because jrubyc gives me<br>
>     errors relating to the unexpected '?' character, which cannot be<br>
>     name mangled into Java.  My attempts to solve this run into using<br>
>     things like member? which would need to be redefined.<br>
><br>
>     I read on <a href="https://github.com/jruby/jruby/wiki/JRubyCompiler" rel="noreferrer" target="_blank">https://github.com/jruby/jruby/wiki/JRubyCompiler</a><br>
>     that :<br>
>     """As of late September 2007, the JRuby compiler is considered<br>
>     complete. Any features missing are to be considered bugs. As part of<br>
>     JRuby's test run, the entire Ruby standard library is compiled to<br>
>     Java bytecode."""<br>
><br>
>     So, since I can't seem to use functions called member? or has_key?<br>
>     or include?,<br>
>     but the ones in the standard library are being used and converted<br>
>     into bytecode<br>
>     successfully, I am obviously doing this incorrectly.  My ability to<br>
>     find the correct<br>
>     way to do this by searching the web appears inadequate as well.<br>
><br>
>     So my question is, what should I have read that tells me how to get<br>
>     these methods<br>
>     that I redefine myself into bytecode, and thus into an executable<br>
>     jar file, please?<br>
><br>
>     Thank you,<br>
>     Hugh<br>
><br>
><br>
><br>
><br>
><br>
> --<br>
> Christian<br>
<br>
<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature">blog: <a href="http://blog.enebo.com" target="_blank">http://blog.enebo.com</a>       twitter: tom_enebo<br>mail: <a href="mailto:tom.enebo@gmail.com" target="_blank">tom.enebo@gmail.com</a></div>
</div>