Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   ***** BEGIN LICENSE BLOCK *****
   * Version: CPL 1.0/GPL 2.0/LGPL 2.1
   *
   * The contents of this file are subject to the Common Public
   * License Version 1.0 (the "License"); you may not use this file
   * except in compliance with the License. You may obtain a copy of
   * the License at http://www.eclipse.org/legal/cpl-v10.html
   *
  * Software distributed under the License is distributed on an "AS
  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  * implied. See the License for the specific language governing
  * rights and limitations under the License.
  *
  * Copyright (C) 2009 Thomas E Enebo <enebo@acm.org>
  *
  * Alternatively, the contents of this file may be used under the terms of
  * either of the GNU General Public License Version 2 or later (the "GPL"),
  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  * in which case the provisions of the GPL or the LGPL are applicable instead
  * of those above. If you wish to allow use of your version of this file only
  * under the terms of either the GPL or the LGPL, and not to allow others to
  * use your version of this file under the terms of the CPL, indicate your
  * decision by deleting the provisions above and replace them with the notice
  * and other provisions required by the GPL or the LGPL. If you do not delete
  * the provisions above, a recipient may use your version of this file under
  * the terms of any one of the CPL, the GPL or the LGPL.
  ***** END LICENSE BLOCK *****/
 
 package org.jruby.runtime.assigner;
 
 import org.jruby.Ruby;
Assigner for three fixed parameters (pre), a rest argument and a block variable: |a,b,c,*d,&e|
 
 public class Pre3Rest1Post0BlockAssigner extends Assigner {
     private final Node parameter1;
     private final Node parameter2;
     private final Node parameter3;
     private final Node rest;
     private final Node blockVar;
 
     public Pre3Rest1Post0BlockAssigner(Node parameter1Node parameter2,
             Node parameter3Node restNode blockVar) {
         this. = parameter1;
         this. = parameter2;
         this. = parameter3;
         this. = rest;
         this. = blockVar;
     }
 
     @Override
     public void assign(Ruby runtimeThreadContext contextIRubyObject selfBlock block) {
         IRubyObject nil = runtime.getNil();
 
         .assign(runtimecontextselfnilblockfalse);
         .assign(runtimecontextselfnilblockfalse);
         .assign(runtimecontextselfnilblockfalse);
 
         .assign(runtimecontextselfruntime.newArrayNoCopyLight(.), blocktrue);
         .assign(runtimecontextself, RuntimeHelpers.processBlockArgument(runtimeblock), .false);
     }
 
     @Override
     public void assign(Ruby runtimeThreadContext contextIRubyObject selfIRubyObject value1,
             Block block) {
         .assign(runtimecontextselfvalue1blockfalse);
         .assign(runtimecontextselfruntime.getNil(), blockfalse);
         .assign(runtimecontextselfruntime.getNil(), blockfalse);
 
         .assign(runtimecontextselfruntime.newArrayNoCopyLight(.), blocktrue);
         .assign(runtimecontextself, RuntimeHelpers.processBlockArgument(runtimeblock), .false);
     }
 
     @Override
     public void assign(Ruby runtimeThreadContext contextIRubyObject selfIRubyObject value1,
             IRubyObject value2Block block) {
         .assign(runtimecontextselfvalue1blockfalse);
         .assign(runtimecontextselfvalue2blockfalse);
         .assign(runtimecontextselfruntime.getNil(), blockfalse);
 
         .assign(runtimecontextselfruntime.newArrayNoCopyLight(.), blocktrue);
         .assign(runtimecontextself, RuntimeHelpers.processBlockArgument(runtimeblock), .false);
     }
 
     @Override
     public void assign(Ruby runtimeThreadContext contextIRubyObject selfIRubyObject value1,
             IRubyObject value2IRubyObject value3Block block) {
         .assign(runtimecontextselfvalue1blockfalse);
         .assign(runtimecontextselfvalue2blockfalse);
         .assign(runtimecontextselfvalue3blockfalse);
        .assign(runtimecontextselfruntime.newArrayNoCopyLight(.), blocktrue);
        .assign(runtimecontextself, RuntimeHelpers.processBlockArgument(runtimeblock), .false);
    }
    @Override
    public void assign(Ruby runtimeThreadContext contextIRubyObject selfIRubyObject values[],
            Block block) {
        int length = values == null ? 0 : values.length;
        switch (length) {
            case 0:
                assign(runtimecontextselfblock);
                break;
            case 1:
                assign(runtimecontextselfvalues[0], block);
                break;
            case 2:
                assign(runtimecontextselfvalues[0], values[1], block);
                break;
            case 3:
                assign(runtimecontextselfvalues[0], values[1], values[2], block);
                break;
            default:
                .assign(runtimecontextselfvalues[0], blockfalse);
                .assign(runtimecontextselfvalues[1], blockfalse);
                .assign(runtimecontextselfvalues[2], blockfalse);
                .assign(runtimecontextself,
                        runtime.newArrayNoCopyLight(shiftedArray(values, 3)), blocktrue);
                .assign(runtimecontextself, RuntimeHelpers.processBlockArgument(runtimeblock), .false);
                break;
        }
    }
    @Override
    public void assignArray(Ruby runtimeThreadContext contextIRubyObject selfIRubyObject arg,
            Block block) {
        RubyArray values = (RubyArrayarg;
        int length = values.getLength();
        switch (length) {
            case 0:
                assign(runtimecontextselfblock);
                break;
            case 1:
                assign(runtimecontextselfvalues.eltInternal(0), block);
                break;
            case 2:
                assign(runtimecontextselfvalues.eltInternal(0), values.eltInternal(1), block);
                break;
            case 3:
                assign(runtimecontextselfvalues.eltInternal(0), values.eltInternal(1),
                        values.eltInternal(2), block);
                break;
            default:
                .assign(runtimecontextselfvalues.eltInternal(0), blockfalse);
                .assign(runtimecontextselfvalues.eltInternal(1), blockfalse);
                .assign(runtimecontextselfvalues.eltInternal(2), blockfalse);
                .assign(runtimecontextselfvalues.subseqLight(3, length - 3), blocktrue);
                .assign(runtimecontextself, RuntimeHelpers.processBlockArgument(runtimeblock), .false);
                break;
        }
    }
New to GrepCode? Check out our FAQ X