Type fold(int opcode, List<Type> argtypes) {
        int argCount = argtypes.length();
        if (argCount == 1)
            return fold1(opcode, argtypes.head);
        else if (argCount == 2)
            return fold2(opcode, argtypes.head, argtypes.tail.head);
        else
            throw new AssertionError();
    }
Type fold ( int opcode , List < Type > argtypes ) { int argCount = argtypes . length ( ) ; if ( argCount == 1 ) return fold1 ( opcode , argtypes . head ) ; else if ( argCount == 2 ) return fold2 ( opcode , argtypes . head , argtypes . tail . head ) ; else throw new AssertionError ( ) ; }
Fold binary or unary operation, returning constant type reflecting the
operations result. Return null if fold failed due to an
arithmetic exception.
@param opcode    The operation's opcode instruction (usually a byte code),
as entered by class Symtab.
@param argtypes  The operation's argument types (a list of length 1 or 2).
Argument types are assumed to have non-null constValue's.