master
Daniel Kolesa 2017-04-01 01:03:22 +02:00
parent 73d1b142d1
commit 5b1baafdb3
3 changed files with 12 additions and 9 deletions

View File

@ -53,7 +53,7 @@ cs_int cs_parse_int(ostd::string_range input, ostd::string_range *end) {
if (input.size() >= 2) {
ostd::string_range pfx = input.slice(0, 2);
if ((pfx == "0x") || (pfx == "0X")) {
input += 2;
input = input.slice(2, input.size());
past = input;
while (!past.empty() && isxdigit(*past)) {
ret = ret * 16 + p_hexd_to_int(*past);
@ -61,7 +61,7 @@ cs_int cs_parse_int(ostd::string_range input, ostd::string_range *end) {
}
goto done;
} else if ((pfx == "0b") || (pfx == "0B")) {
input += 2;
input = input.slice(2, input.size());
past = input;
while (!past.empty() && ((*past == '0') || (*past == '1'))) {
ret = ret * 2 + (*past - '0');
@ -164,7 +164,7 @@ cs_float cs_parse_float(ostd::string_range input, ostd::string_range *end) {
if (input.size() >= 2) {
ostd::string_range pfx = input.slice(0, 2);
if ((pfx == "0x") || (pfx == "0X")) {
input += 2;
input = input.slice(2, input.size());
if (!parse_gen_float<true>(input, end, ret)) {
p_set_end(orig, end);
return ret;
@ -232,7 +232,8 @@ end:
cs, "unfinished string '%s'", slice_until(orig, str)
);
}
return str + 1;
str.pop_front();
return str;
}
OSTD_EXPORT ostd::string_range parse_word(
@ -257,13 +258,15 @@ end:
}
break;
case '[':
str = parse_word(cs, str + 1);
str.pop_front();
str = parse_word(cs, str);
if (str.empty() || (*str != ']')) {
throw cs_error(cs, "missing \"]\"");
}
break;
case '(':
str = parse_word(cs, str + 1);
str.pop_front();
str = parse_word(cs, str);
if (str.empty() || (*str != ')')) {
throw cs_error(cs, "missing \")\"");
}

View File

@ -194,7 +194,7 @@ void cs_init_lib_string(cs_state &cs) {
if (!found.empty()) {
buf += s.slice(0, &found[0] - &s[0]);
buf += (i & 1) ? newval2 : newval;
s = found + oldval.size();
s = found.slice(oldval.size(), found.size());
} else {
buf += s;
res.set_str(std::move(buf));

View File

@ -132,7 +132,7 @@ static inline cs_command *get_hint_cmd(cs_state &cs, ostd::string_range buf) {
ostd::string_range nextchars = "([;";
auto lp = ostd::find_one_of(buf, nextchars);
if (!lp.empty()) {
cs_command *cmd = get_hint_cmd(cs, buf + 1);
cs_command *cmd = get_hint_cmd(cs, buf.slice(1, buf.size()));
if (cmd) {
return cmd;
}
@ -210,7 +210,7 @@ static bool do_call(cs_state &cs, ostd::string_range line, bool file = false) {
terr.slice(0, &col[0] - &terr[0]),
[](auto c) { return !isdigit(c); }
).empty();
terr = col + 2;
terr = col.slice(2, col.size());
}
if (!file && ((terr == "missing \"]\"") || (terr == "missing \")\""))) {
return true;