object.c:1318
VALUE
rb_Array(val)
    VALUE val;
{
    VALUE tmp = rb_check_array_type(val);
    ID to_a;

    if (NIL_P(tmp)) {
	to_a = rb_intern("to_a");
	if (rb_respond_to(val, to_a)) {
	    val = rb_funcall(val, to_a, 0);
	    if (TYPE(val) != T_ARRAY) {
		rb_raise(rb_eTypeError, "`to_a' did not return Array");
	    }
	    return val;
	}
	else {
	    return rb_ary_new3(1, val);
	}
    }
    return tmp;
}
