Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.jruby.runtime;
  
  
  public class InterpretedIRBlockBody19 extends InterpretedIRBlockBody {
     public InterpretedIRBlockBody19(IRClosure closureArity arityint argumentType) {
         super(closurearity, -1);
     }
 
     @Override
     public String[] getParameterList() {
         return this..getParameterList();
     }
 
     private IRubyObject[] convertValueIntoArgArray(ThreadContext contextIRubyObject valueboolean passArrayArgboolean argIsArray) {
         // SSS FIXME: This should not really happen -- so, some places in the runtime library are breaking this contract.
         if (argIsArray && !(value instanceof RubyArray)) argIsArray = false;
 
         int blockArity = arity().getValue();
         switch (blockArity) {
             case -1 : return argIsArray ? ((RubyArray)value).toJavaArray() : new IRubyObject[] { value };
             case 0  : return new IRubyObject[] { value };
             case 1  : {
                if (argIsArray) {
                    RubyArray valArray = ((RubyArray)value);
                    if (valArray.size() == 0) {
                        value = passArrayArg ? RubyArray.newEmptyArray(context.runtime) : context.nil;
                    } else if (!passArrayArg) {
                        value = valArray.eltInternal(0);
                    }
                }
                return new IRubyObject[] { value };
             }
             default :
                 if (argIsArray) {
                     RubyArray valArray = (RubyArray)value;
                     if (valArray.size() == 1) value = valArray.eltInternal(0);
                     value = Helpers.aryToAry(value);
                     return (value instanceof RubyArray) ? ((RubyArray)value).toJavaArray() : new IRubyObject[] { value };
                 } else {
                     value = Helpers.aryToAry(value);
                     if (!(value instanceof RubyArray)) {
                         throw context.runtime.newTypeError(value.getType().getName() + "#to_ary should return Array");
                     }
                     return ((RubyArray)value).toJavaArray();
                 }
         }
     }
 
     @Override
     public IRubyObject yieldSpecific(ThreadContext contextBinding bindingBlock.Type type) {
         IRubyObject[] args = .;
         if (type == ..) {
             arity().checkArity(context.runtimeargs);
         }
         return commonYieldPath(contextargsnullnullbindingtype.);
     }
 
     @Override
     public IRubyObject yieldSpecific(ThreadContext contextIRubyObject arg0Binding bindingBlock.Type type) {
         IRubyObject[] args;
         if (type == ..) {
             args = arg0 instanceof RubyArray ? ((RubyArray)arg0).toJavaArray() : new IRubyObject[] { arg0 };
             arity().checkArity(context.runtimeargs);
         } else if (arg0 instanceof RubyArray) {
             args = convertValueIntoArgArray(contextarg0truetrue);
         } else if (arity().getValue() <= 1) {
             args = new IRubyObject[] { arg0 };
         } else {
             IRubyObject value = Helpers.aryToAry(arg0);
             if (!(value instanceof RubyArray)) {
                 throw context.runtime.newTypeError(arg0.getType().getName() + "#to_ary should return Array");
             }
             args = ((RubyArray)value).toJavaArray();
         }
         return commonYieldPath(contextargsnullnullbindingtype.);
     }
 
     @Override
     public IRubyObject yieldSpecific(ThreadContext contextIRubyObject arg0IRubyObject arg1Binding bindingBlock.Type type) {
         IRubyObject[] args = new IRubyObject[] { arg0arg1 };
         if (type == ..) {
             arity().checkArity(context.runtimeargs);
         } else {
             int arity = arity().getValue();
             if (arity == 0) {
                 args = .// discard args
             } else if (arity == 1) {
                 args = new IRubyObject[] { RubyArray.newArrayNoCopy(context.runtimeargs) };
             }
         }
         return commonYieldPath(contextargsnullnullbindingtype.);
     }
 
     @Override
    public IRubyObject yieldSpecific(ThreadContext contextIRubyObject arg0IRubyObject arg1IRubyObject arg2Binding bindingBlock.Type type) {
        IRubyObject[] args = new IRubyObject[] { arg0arg1arg2 };
        if (type == ..) {
            arity().checkArity(context.runtimeargs);
        } else {
            int arity = arity().getValue();
            if (arity == 0) {
                args = .// discard args
            } else if (arity == 1) {
                args = new IRubyObject[] { RubyArray.newArrayNoCopy(context.runtimeargs) };
            }
        }
        return commonYieldPath(contextargsnullnullbindingtype.);
    }
    @Override
    public IRubyObject yield(ThreadContext contextIRubyObject valueIRubyObject selfRubyModule klassboolean argIsArrayBinding bindingType type) {
		// Unwrap the array arg
        IRubyObject[] args;
        if (type == ..) {
            args = (value == null) ? . : (argIsArray ? ((RubyArray)value).toJavaArray() : new IRubyObject[] { value });
            arity().checkArity(context.runtimeargs);
        } else {
            args = (value == null) ? . : convertValueIntoArgArray(contextvaluefalseargIsArray);
        }
        return commonYieldPath(contextargsselfklassbindingtype.);
    }
    @Override
    public IRubyObject[] prepareArgumentsForCall(ThreadContext contextIRubyObject[] argsBlock.Type type) {
        if (type == ..) {
            arity().checkArity(context.runtimeargs);
        } else {
            // SSS FIXME: How is it even possible to "call" a NORMAL block?
            // I thought only procs & lambdas can be called, and blocks are yielded to.
            if (args.length == 1) {
                // Convert value to arg-array, unwrapping where necessary
                args = convertValueIntoArgArray(contextargs[0], true, (type == ..) && (args[0] instanceof RubyArray));
            } else if (arity().getValue() == 1) {
               // discard excess arguments
                args = (args.length == 0) ? context.runtime.getSingleNilArray() : new IRubyObject[] { args[0] };
            }
        }
        return args;
    }
New to GrepCode? Check out our FAQ X