code: 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();
      }
docs: 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.