3273 static C_char *utf_index(C_word s, C_word i) 3274 { 3275 C_word bv = C_block_item(s, 0); 3276 if(i == 0) { 3277 C_set_block_item(s, 2, C_fix(0)); 3278 C_set_block_item(s, 3, C_fix(0)); 3279 return C_c_string(bv); 3280 } else if(C_header_size(bv) - 1 == C_unfix(C_block_item(s, 1))) { 3281 /* len == codepoints */ 3282 C_set_block_item(s, 2, C_fix(i)); 3283 C_set_block_item(s, 3, C_fix(i)); 3284 return C_c_string(bv) + i; 3285 } 3286 return utf_index1(s, i); 3287 }