Type* List__append_specializeType(Term* term) { Term* listInput = term->input(0); switch (list_get_parameter_type(&listInput->type->parameter)) { case sym_Untyped: return listInput->type; case sym_UniformListType: { Type* listElementType = list_get_repeated_type_from_type(listInput->type); Type* commonType = find_common_type(listElementType, term->input(1)->type); if (commonType == listElementType) return listInput->type; else return create_typed_unsized_list_type(commonType); } case sym_AnonStructType: case sym_StructType: { List elementTypes; copy(list_get_type_list_from_type(listInput->type), &elementTypes); set_type(elementTypes.append(), term->input(1)->type); return create_typed_unsized_list_type(find_common_type(&elementTypes)); } case sym_Invalid: default: return TYPES.any; } }
Type* range_specializeType(Term* term) { Type* type = create_typed_unsized_list_type(TYPES.int_type); type_start_at_zero_refs(type); return type; }