diff --git a/src/cs_gen.cc b/src/cs_gen.cc index f18ab368..de9d8b90 100644 --- a/src/cs_gen.cc +++ b/src/cs_gen.cc @@ -1066,8 +1066,8 @@ static void compile_cmd( case '3': case '4': if (more && (numargs < MaxArguments)) { - int numrep = *fmt - '0' + 1; - fmt -= numrep; + int numrep = -int(*fmt) + '0' - 1; + fmt = ostd::string_range{&fmt[numrep], &fmt[fmt.size()]}; rep = true; } else { while (numargs > MaxArguments) { diff --git a/src/cs_util.cc b/src/cs_util.cc index 46d960b8..6500aa95 100644 --- a/src/cs_util.cc +++ b/src/cs_util.cc @@ -75,7 +75,7 @@ cs_int cs_parse_int(ostd::string_range input, ostd::string_range *end) { ++past; } done: - if (past.equals_front(input)) { + if (&past[0] == &input[0]) { p_set_end(orig, end); } else { p_set_end(past, end); diff --git a/src/cs_vm.cc b/src/cs_vm.cc index 49029103..b323e571 100644 --- a/src/cs_vm.cc +++ b/src/cs_vm.cc @@ -451,7 +451,9 @@ static inline void callcommand( case '3': case '4': if (i + 1 < numargs) { - fmt -= *fmt - '0' + 1; + fmt = ostd::string_range{ + &fmt[-int(*fmt) + '0' - 1], &fmt[fmt.size()] + }; rep = true; } break;