static jl_value_t *nth_field(jl_value_t *v, size_t i) { jl_value_t *fld = ((jl_value_t**)v)[1+i]; if (fld == NULL) jl_undef_ref_error(); return fld; }
jl_value_t *jl_arrayref(jl_array_t *a, size_t i) { jl_type_t *el_type = (jl_type_t*)jl_tparam0(jl_typeof(a)); jl_value_t *elt; if (jl_is_bits_type(el_type)) { if (el_type == (jl_type_t*)jl_bool_type) { if (((int8_t*)a->data)[i] != 0) return jl_true; return jl_false; } elt = new_scalar((jl_bits_type_t*)el_type); size_t nb = a->elsize; switch (nb) { case 1: *(int8_t*)jl_bits_data(elt) = ((int8_t*)a->data)[i]; break; case 2: *(int16_t*)jl_bits_data(elt) = ((int16_t*)a->data)[i]; break; case 4: *(int32_t*)jl_bits_data(elt) = ((int32_t*)a->data)[i]; break; case 8: *(int64_t*)jl_bits_data(elt) = ((int64_t*)a->data)[i]; break; case 16: *(bits128_t*)jl_bits_data(elt) = ((bits128_t*)a->data)[i]; break; default: memcpy(jl_bits_data(elt), &((char*)a->data)[i*nb], nb); } } else { elt = ((jl_value_t**)a->data)[i]; if (elt == NULL) { jl_undef_ref_error(); } } return elt; }