001
002 package org.codehaus.groovy.runtime;
003
004
005 import groovy.lang.Closure;
006
007 /**
008 * Represents wrapper around a Closure to support currying
009 *
010 * @author Jochen Theodorou
011 */
012 public class CurriedClosure extends Closure {
013
014 private Object[] curriedParams;
015
016 public CurriedClosure(Closure uncurriedClosure, Object[] arguments) {
017 super(uncurriedClosure);
018 curriedParams = arguments;
019 maximumNumberOfParameters = uncurriedClosure.getMaximumNumberOfParameters()-arguments.length;
020 }
021
022 public Object[] getUncurriedArguments(Object[] arguments) {
023 final Object newCurriedParams[] = new Object[curriedParams.length + arguments.length];
024 System.arraycopy(curriedParams, 0, newCurriedParams, 0, curriedParams.length);
025 System.arraycopy(arguments, 0, newCurriedParams, curriedParams.length, arguments.length);
026 return newCurriedParams;
027 }
028
029 }