ostd fixes

master
Daniel Kolesa 2017-02-09 21:27:57 +01:00
parent 2536179500
commit fda734a868
5 changed files with 49 additions and 29 deletions

View File

@ -531,12 +531,13 @@ struct CsErrorException {
{
char fbuf[512];
auto ret = ostd::format(
ostd::CharRange(fbuf, sizeof(fbuf)), msg, std::forward<A>(args)...
ostd::CharRange(fbuf, fbuf + sizeof(fbuf)), msg,
std::forward<A>(args)...
);
if ((ret < 0) || (size_t(ret) > sizeof(fbuf))) {
p_errmsg = save_msg(cs, msg);
} else {
p_errmsg = save_msg(cs, ostd::CharRange(fbuf, ret));
p_errmsg = save_msg(cs, ostd::CharRange(fbuf, fbuf + ret));
}
p_stack = save_stack(cs);
}

View File

@ -207,7 +207,7 @@ static inline void compileunescapestr(GenState &gs, bool macro = false) {
);
size_t bufs = (gs.code.capacity() - gs.code.size()) * sizeof(uint32_t);
char *buf = new char[bufs + 1];
auto writer = ostd::CharRange(buf, bufs);
auto writer = ostd::CharRange(buf, buf + bufs);
size_t len = util::unescape_string(writer, str);
memset(&buf[len], 0, sizeof(uint32_t) - len % sizeof(uint32_t));
gs.code.back() |= len << 8;

View File

@ -150,9 +150,10 @@ CsFloat CsValue::force_float() {
case CsValueType::String:
case CsValueType::Macro:
case CsValueType::Cstring:
rf = cs_parse_float(
ostd::ConstCharRange(csv_get<char const *>(p_stor), p_len)
);
rf = cs_parse_float(ostd::ConstCharRange(
csv_get<char const *>(p_stor),
csv_get<char const *>(p_stor) + p_len
));
break;
case CsValueType::Float:
return csv_get<CsFloat>(p_stor);
@ -172,9 +173,10 @@ CsInt CsValue::force_int() {
case CsValueType::String:
case CsValueType::Macro:
case CsValueType::Cstring:
ri = cs_parse_int(
ostd::ConstCharRange(csv_get<char const *>(p_stor), p_len)
);
ri = cs_parse_int(ostd::ConstCharRange(
csv_get<char const *>(p_stor),
csv_get<char const *>(p_stor) + p_len
));
break;
case CsValueType::Int:
return csv_get<CsInt>(p_stor);
@ -196,15 +198,24 @@ ostd::ConstCharRange CsValue::force_str() {
break;
case CsValueType::Macro:
case CsValueType::Cstring:
rs = ostd::ConstCharRange(csv_get<char const *>(p_stor), p_len);
rs = ostd::ConstCharRange(
csv_get<char const *>(p_stor),
csv_get<char const *>(p_stor) + p_len
);
break;
case CsValueType::String:
return ostd::ConstCharRange(csv_get<char const *>(p_stor), p_len);
return ostd::ConstCharRange(
csv_get<char const *>(p_stor),
csv_get<char const *>(p_stor) + p_len
);
default:
break;
}
set_str(std::move(rs));
return ostd::ConstCharRange(csv_get<char const *>(p_stor), p_len);
return ostd::ConstCharRange(
csv_get<char const *>(p_stor),
csv_get<char const *>(p_stor) + p_len
);
}
CsInt CsValue::get_int() const {
@ -216,9 +227,10 @@ CsInt CsValue::get_int() const {
case CsValueType::String:
case CsValueType::Macro:
case CsValueType::Cstring:
return cs_parse_int(
ostd::ConstCharRange(csv_get<char const *>(p_stor), p_len)
);
return cs_parse_int(ostd::ConstCharRange(
csv_get<char const *>(p_stor),
csv_get<char const *>(p_stor) + p_len
));
default:
break;
}
@ -234,9 +246,10 @@ CsFloat CsValue::get_float() const {
case CsValueType::String:
case CsValueType::Macro:
case CsValueType::Cstring:
return cs_parse_float(
ostd::ConstCharRange(csv_get<char const *>(p_stor), p_len)
);
return cs_parse_float(ostd::ConstCharRange(
csv_get<char const *>(p_stor),
csv_get<char const *>(p_stor) + p_len
));
default:
break;
}
@ -278,7 +291,10 @@ ostd::ConstCharRange CsValue::get_strr() const {
case CsValueType::String:
case CsValueType::Macro:
case CsValueType::Cstring:
return ostd::ConstCharRange(csv_get<char const *>(p_stor), p_len);
return ostd::ConstCharRange(
csv_get<char const *>(p_stor),
csv_get<char const *>(p_stor)+ p_len
);
default:
break;
}
@ -348,9 +364,10 @@ bool CsValue::get_bool() const {
case CsValueType::String:
case CsValueType::Macro:
case CsValueType::Cstring:
return cs_get_bool(
ostd::ConstCharRange(csv_get<char const *>(p_stor), p_len)
);
return cs_get_bool(ostd::ConstCharRange(
csv_get<char const *>(p_stor),
csv_get<char const *>(p_stor) + p_len
));
default:
return false;
}

View File

@ -115,7 +115,7 @@ ostd::ConstCharRange CsErrorException::save_msg(
GenState *gs = cs.p_pstate;
if (gs) {
/* we can attach line number */
ostd::CharRange r(cs.p_errbuf, sizeof(cs.p_errbuf));
ostd::CharRange r(cs.p_errbuf, cs.p_errbuf + sizeof(cs.p_errbuf));
std::ptrdiff_t sz = -1;
if (!gs->src_name.empty()) {
sz = ostd::format(r, "%s:%d: %s", gs->src_name, gs->current_line, msg);
@ -123,11 +123,11 @@ ostd::ConstCharRange CsErrorException::save_msg(
sz = ostd::format(r, "%d: %s", gs->current_line, msg);
}
if (sz > 0) {
return ostd::ConstCharRange(cs.p_errbuf, sz);
return ostd::ConstCharRange(cs.p_errbuf, cs.p_errbuf + sz);
}
}
memcpy(cs.p_errbuf, msg.data(), msg.size());
return ostd::ConstCharRange(cs.p_errbuf, msg.size());
return ostd::ConstCharRange(cs.p_errbuf, cs.p_errbuf + msg.size());
}
static void bcode_ref(uint32_t *code) {
@ -768,7 +768,8 @@ static uint32_t *runcode(CsState &cs, uint32_t *code, CsValue &result) {
case CsCodeMacro: {
uint32_t len = op >> 8;
args[numargs++].set_macro(ostd::ConstCharRange(
reinterpret_cast<char const *>(code), len
reinterpret_cast<char const *>(code),
reinterpret_cast<char const *>(code) + len
));
code += len / sizeof(uint32_t) + 1;
continue;
@ -777,7 +778,8 @@ static uint32_t *runcode(CsState &cs, uint32_t *code, CsValue &result) {
case CsCodeVal | CsRetString: {
uint32_t len = op >> 8;
args[numargs++].set_str(CsString{
reinterpret_cast<char const *>(code), len
reinterpret_cast<char const *>(code),
reinterpret_cast<char const *>(code) + len
});
code += len / sizeof(uint32_t) + 1;
continue;
@ -1825,7 +1827,7 @@ static bool cs_run_file(
}
buf[len] = '\0';
cs_run(cs, fname, ostd::ConstCharRange(buf.get(), len), ret);
cs_run(cs, fname, ostd::ConstCharRange(buf.get(), buf.get() + len), ret);
return true;
}

View File

@ -479,7 +479,7 @@ end:
char const *qend = !quote.empty() ? &quote[quote.size()] : list;
CsString buf;
if (qend > list) {
buf += ostd::ConstCharRange(list, qend - list);
buf += ostd::ConstCharRange(list, qend);
}
if (!vals.empty()) {
if (!buf.empty()) {