org.fun4j.compiler.expressions
Class VarArgs

java.lang.Object
  extended by org.fun4j.compiler.Expression
      extended by org.fun4j.compiler.expressions.VarArgs
All Implemented Interfaces:
org.objectweb.asm.Opcodes

public class VarArgs
extends Expression

An expression for lisp vararg semantics. all arguments are passed in the argument array. they are copied into a cons list and this list is used as a single argument to the actual function body.


Field Summary
 
Fields inherited from interface org.objectweb.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEDYNAMIC_OWNER, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7
 
Constructor Summary
VarArgs(Expression expr)
           
 
Method Summary
 int arity()
           
static Cons arrToSingleCons(java.lang.Object[] args)
          This method converts an Object array to a Cons list containing all elements of the array.
 void compile(org.objectweb.asm.MethodVisitor mv)
          apply(Object... args) is a varargs method.
static java.lang.Object[] prepareArgs(java.lang.Object[] args)
          This method prepares the argument array of a method call to comply with the Lisp varargs semantics.
 java.lang.String toString()
           
 
Methods inherited from class org.fun4j.compiler.Expression
getTailCalls
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

VarArgs

public VarArgs(Expression expr)
Method Detail

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

compile

public void compile(org.objectweb.asm.MethodVisitor mv)
apply(Object... args) is a varargs method. Thus all local variables are passed in in one array. All elements of this array are copied into a cons list and this list is used as a single argument to the function. That is the list is stored back as args[0] So the user code sees a single argument list.

Specified by:
compile in class Expression

prepareArgs

public static java.lang.Object[] prepareArgs(java.lang.Object[] args)
This method prepares the argument array of a method call to comply with the Lisp varargs semantics.

Parameters:
args -
Returns:
the resulting Object array conating a single cons object with all elements of the original input array

arrToSingleCons

public static Cons arrToSingleCons(java.lang.Object[] args)
This method converts an Object array to a Cons list containing all elements of the array.

Parameters:
args - the input array
Returns:
the resulting Cons list

arity

public int arity()
Overrides:
arity in class Expression