// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSFunctor0.java
// @JSFunctor
// public interface JSFunctor0<R extends JSObject> extends JSFunctorBase{
// 
// 	public R apply();
// 
// }
// 
// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSFunctor1.java
// @JSFunctor
// public interface JSFunctor1<T1 extends JSObject, R extends JSObject> extends JSFunctorBase {
// 
// 	public R apply(T1 a);
// 
// }
// 
// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSFunctor2.java
// @JSFunctor
// public interface JSFunctor2<T1 extends JSObject, T2 extends JSObject, R extends JSObject> extends JSFunctorBase {
// 	
// 	public R apply(T1 a, T2 b);
// 
// }
// 
// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSFunctor3.java
// @JSFunctor
// public interface JSFunctor3<T1 extends JSObject, T2 extends JSObject, T3 extends JSObject, R extends JSObject>
// 		extends JSFunctorBase {
// 
// 	public R apply(T1 a, T2 b, T3 c);
// 
// }
// 
// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSVoidFunctor0.java
// @JSFunctor
// public interface JSVoidFunctor0 extends JSFunctorBase {
// 
// 	public void apply();
// 
// }
// 
// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSVoidFunctor1.java
// @JSFunctor
// public interface JSVoidFunctor1<T1 extends JSObject> extends JSFunctorBase {
// 
// 	public void apply(T1 a);
// 
// }
// 
// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSVoidFunctor2.java
// @JSFunctor
// public interface JSVoidFunctor2<T1 extends JSObject, T2 extends JSObject> extends JSFunctorBase {
// 
// 	public void apply(T1 a, T2 b);
// 
// }
// 
// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSVoidFunctor3.java
// @JSFunctor
// public interface JSVoidFunctor3<T1 extends JSObject, T2 extends JSObject, T3 extends JSObject> extends JSFunctorBase {
// 
// 	public void apply(T1 a, T2 b, T3 c);
// 
// }


import org.teavm.jso.JSBody;
import org.teavm.jso.core.JSFunction;
import de.iterable.teavm.utils.functor.JSFunctor0;
import de.iterable.teavm.utils.functor.JSFunctor1;
import de.iterable.teavm.utils.functor.JSFunctor2;
import de.iterable.teavm.utils.functor.JSFunctor3;
import de.iterable.teavm.utils.functor.JSVoidFunctor0;
import de.iterable.teavm.utils.functor.JSVoidFunctor1;
import de.iterable.teavm.utils.functor.JSVoidFunctor2;
import de.iterable.teavm.utils.functor.JSVoidFunctor3;
package de.iterable.teavm.utils.jso;



public final class JSFunctorUtils {

    @JSBody(params = "functor", script = "return functor;")
    public static native JSFunction of(JSVoidFunctor0 functor);

    @JSBody(params = "functor", script = "return functor;")
    public static native JSFunction of(JSVoidFunctor1<?> functor);

    @JSBody(params = "functor", script = "return functor;")
    public static native JSFunction of(JSVoidFunctor2<?, ?> functor);

    @JSBody(params = "functor", script = "return functor;")
    public static native JSFunction of(JSVoidFunctor3<?, ?, ?> functor);

    @JSBody(params = "functor", script = "return functor;")
    public static native JSFunction of(JSFunctor0<?> functor);

    @JSBody(params = "functor", script = "return functor;")
    public static native JSFunction of(JSFunctor1<?, ?> functor);

// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSFunctor0.java
// @JSFunctor
// public interface JSFunctor0<R extends JSObject> extends JSFunctorBase{
// 
// 	public R apply();
// 
// }
// 
// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSFunctor1.java
// @JSFunctor
// public interface JSFunctor1<T1 extends JSObject, R extends JSObject> extends JSFunctorBase {
// 
// 	public R apply(T1 a);
// 
// }
// 
// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSFunctor2.java
// @JSFunctor
// public interface JSFunctor2<T1 extends JSObject, T2 extends JSObject, R extends JSObject> extends JSFunctorBase {
// 	
// 	public R apply(T1 a, T2 b);
// 
// }
// 
// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSFunctor3.java
// @JSFunctor
// public interface JSFunctor3<T1 extends JSObject, T2 extends JSObject, T3 extends JSObject, R extends JSObject>
// 		extends JSFunctorBase {
// 
// 	public R apply(T1 a, T2 b, T3 c);
// 
// }
// 
// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSVoidFunctor0.java
// @JSFunctor
// public interface JSVoidFunctor0 extends JSFunctorBase {
// 
// 	public void apply();
// 
// }
// 
// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSVoidFunctor1.java
// @JSFunctor
// public interface JSVoidFunctor1<T1 extends JSObject> extends JSFunctorBase {
// 
// 	public void apply(T1 a);
// 
// }
// 
// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSVoidFunctor2.java
// @JSFunctor
// public interface JSVoidFunctor2<T1 extends JSObject, T2 extends JSObject> extends JSFunctorBase {
// 
// 	public void apply(T1 a, T2 b);
// 
// }
// 
// Path: utils/src/main/java/de/iterable/teavm/utils/functor/JSVoidFunctor3.java
// @JSFunctor
// public interface JSVoidFunctor3<T1 extends JSObject, T2 extends JSObject, T3 extends JSObject> extends JSFunctorBase {
// 
// 	public void apply(T1 a, T2 b, T3 c);
// 
// }


// Path: utils/src/main/java/de/iterable/teavm/utils/jso/JSFunctorUtils.java
import org.teavm.jso.JSBody;
import org.teavm.jso.core.JSFunction;
import de.iterable.teavm.utils.functor.JSFunctor0;
import de.iterable.teavm.utils.functor.JSFunctor1;
import de.iterable.teavm.utils.functor.JSFunctor2;
import de.iterable.teavm.utils.functor.JSFunctor3;
import de.iterable.teavm.utils.functor.JSVoidFunctor0;
import de.iterable.teavm.utils.functor.JSVoidFunctor1;
import de.iterable.teavm.utils.functor.JSVoidFunctor2;
import de.iterable.teavm.utils.functor.JSVoidFunctor3;

package de.iterable.teavm.utils.jso;



public final class JSFunctorUtils {

    @JSBody(params = "functor", script = "return functor;")
    public static native JSFunction of(JSVoidFunctor0 functor);

    @JSBody(params = "functor", script = "return functor;")
    public static native JSFunction of(JSVoidFunctor1<?> functor);

    @JSBody(params = "functor", script = "return functor;")
    public static native JSFunction of(JSVoidFunctor2<?, ?> functor);

    @JSBody(params = "functor", script = "return functor;")
    public static native JSFunction of(JSVoidFunctor3<?, ?, ?> functor);

    @JSBody(params = "functor", script = "return functor;")
    public static native JSFunction of(JSFunctor0<?> functor);

    @JSBody(params = "functor", script = "return functor;")
    public static native JSFunction of(JSFunctor1<?, ?> functor);

    @JSBody(params = "functor", script = "return functor;")