Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.dynjs.runtime;
  
  import java.util.List;
  
  
  public class BoundFunction extends AbstractFunction {
      
     private static String[] figureBoundParameters(JSFunction fnObject[] boundArgs) {
         String[] formalParams = fn.getFormalParameters();
         int numRemainingArgs = formalParams.length - boundArgs.length;
         
         if ( numRemainingArgs <= 0 ) {
             return new String[0];
         }
         
         String[] remainingParams = new String[numRemainingArgs];
         
         for ( int i = 0 ; i < numRemainingArgs ; ++i ) {
             remainingParams[i] = formalParamsi + boundArgs.length ];
         }
         
         return remainingParams;
     }
 
     private JSFunction target;
     private Object boundThis;
     private Object[] boundArgs;
 
     public BoundFunction(LexicalEnvironment scopefinal JSFunction targetfinal Object boundThisfinal Object[] boundArgs) {
         super(scopetruefigureBoundParameters(targetboundArgs));
         this. = target;
         this. = boundThis;
         this. = boundArgs;
     }
     
     @Override
     public Object call(ExecutionContext context) {
 
         Arguments argsObj = (Argumentscontext.resolve("arguments").getValue(context);
         int numExtraArgs = (intargsObj.get(context"length");
         
         Object[] args = new Objectthis..length + numExtraArgs ];
         
         for ( int i = 0 ; i < this..length ; ++i ) {
             args[i] = this.[i];
         }
         
         for ( int i = 0 ; i < numExtraArgs ; ++i ) {
             Object v = argsObj.getcontext"" + i );
             if ( v instanceof Reference ) {
                 v = ((Referencev).getValue(context);
             }
             args[i + this..length ] = v;
         }
         
         return context.call(this.this.args);
     }
 
 
     /*
     @Override
     public Object call(ExecutionContext context, Object self, Object... args) {
         // 15.3.4.5.1
         System.err.println( "called args: " + args.length + " // " + Arrays.asList( args ) );
         Object[] allArgs = new Object[boundArgs.length + args.length];
 
         for (int i = 0; i < boundArgs.length; ++i) {
             allArgs[i] = boundArgs[i];
         }
 
         for (int i = boundArgs.length, j = 0; i < boundArgs.length + args.length; ++i, ++j) {
             allArgs[i] = args[j];
         }
 
         if (self != Types.UNDEFINED) {
             return context.call(this.target, self, allArgs);
         } else {
             return context.call(this.target, this.boundThis, allArgs);
         }
     }
     */
 
     @Override
     public boolean hasInstance(ExecutionContext contextObject v) {
         // 15.3.4.5.3
         return .hasInstance(contextv);
     }
 
     @Override
     public JSObject createNewObject(ExecutionContext context) {
         return .createNewObject(context);
     }
 
     @Override
     public String getFileName() {
         return .getFileName();
     }
    @Override
    public String getDebugContext() {
        return "bound-function:" + .getDebugContext();
    }
    @Override
        return .getFunctionDeclarations();
    }
    @Override
        return .getVariableDeclarations();
    }
New to GrepCode? Check out our FAQ X