Skip to content

Commit

Permalink
JRUBY-5011 (jrubyc --java): 'cannot find symbol' if function def has …
Browse files Browse the repository at this point in the history
…more than 3 arguments
  • Loading branch information
enebo committed Sep 27, 2010
1 parent d65e1a8 commit 7ca06d7
Showing 1 changed file with 20 additions and 3 deletions.
23 changes: 20 additions & 3 deletions lib/ruby/site_ruby/shared/jruby/compiler/java_class.rb
Expand Up @@ -480,6 +480,9 @@ def imports_string
end

class RubyMethod
# How many arguments we can invoke without needing to box arguments
MAX_UNBOXED_ARITY_LENGTH = 3

def initialize(ruby_class, name, java_signature = nil, annotations = [])
@ruby_class = ruby_class
@name = name
Expand All @@ -495,6 +498,10 @@ def constructor?
false
end

def arity
typed_args.size
end

def to_s
declarator_string do
<<-JAVA
Expand All @@ -519,7 +526,13 @@ def annotations_string
end

def conversion_string(var_names)
var_names.map { |a| " IRubyObject ruby_#{a} = JavaUtil.convertJavaToRuby(__ruby__, #{a});"}.join("\n")
if arity <= MAX_UNBOXED_ARITY_LENGTH
var_names.map { |a| " IRubyObject ruby_#{a} = JavaUtil.convertJavaToRuby(__ruby__, #{a});"}.join("\n")
else
str = " IRubyObject ruby_args[] = new IRubyObject[#{arity}];\n"
var_names.each_with_index { |a, i| str += " ruby_args[#{i}] = JavaUtil.convertJavaToRuby(__ruby__, #{a});\n" }
str
end
end

# FIXME: We should allow all valid modifiers
Expand Down Expand Up @@ -574,8 +587,12 @@ def var_names
def passed_args
return @passed_args if @passed_args

@passed_args = var_names.map {|a| "ruby_#{a}"}.join(', ')
@passed_args = ', ' + @passed_args if args.size > 0
if arity <= MAX_UNBOXED_ARITY_LENGTH
@passed_args = var_names.map {|a| "ruby_#{a}"}.join(', ')
@passed_args = ', ' + @passed_args if args.size > 0
else
@passed_args = ", ruby_args";
end
end

def return_type
Expand Down

0 comments on commit 7ca06d7

Please sign in to comment.