get rid of cs_value::get_strr

master
Daniel Kolesa 2021-03-17 21:57:47 +01:00
parent 2f5bb697eb
commit 7eaf3679a4
7 changed files with 71 additions and 74 deletions

View File

@ -85,6 +85,13 @@ struct OSTD_EXPORT cs_strref {
operator ostd::string_range() const;
std::size_t size() const {
return ostd::string_range{*this}.size();
}
std::size_t length() const {
return ostd::string_range{*this}.length();
}
bool operator==(cs_strref const &s) const;
private:
@ -121,7 +128,6 @@ struct OSTD_EXPORT cs_value {
void set_ident(cs_ident *val);
cs_strref get_str() const;
ostd::string_range get_strr() const;
cs_int get_int() const;
cs_float get_float() const;
cs_bcode *get_code() const;
@ -867,7 +873,9 @@ private:
break;
}
case cs_value_type::String: {
ostd::range_put_all(writer, vals[i].get_strr());
ostd::range_put_all(
writer, ostd::string_range{vals[i].get_str()}
);
break;
}
default:

View File

@ -247,18 +247,6 @@ cs_strref cs_value::get_str() const {
return cs_strref{*state(), ""};
}
ostd::string_range cs_value::get_strr() const {
switch (get_type()) {
case cs_value_type::String:
return ostd::string_range(
*reinterpret_cast<cs_strref const *>(&p_stor)
);
default:
break;
}
return ostd::string_range();
}
void cs_value::get_val(cs_value &r) const {
switch (get_type()) {
case cs_value_type::String:

View File

@ -256,7 +256,7 @@ static inline uint32_t *forcecode(cs_state &cs, cs_value &v) {
static inline void forcecond(cs_state &cs, cs_value &v) {
switch (v.get_type()) {
case cs_value_type::String:
if (!v.get_strr().empty()) {
if (!ostd::string_range{v.get_str()}.empty()) {
forcecode(cs, v);
} else {
v.set_int(0);
@ -576,7 +576,7 @@ static inline int cs_get_lookupu_type(
if (arg.get_type() != cs_value_type::String) {
return -2; /* default case */
}
id = cs.get_ident(arg.get_strr());
id = cs.get_ident(arg.get_str());
if (id) {
switch(id->get_type()) {
case cs_ident_type::Alias:
@ -604,7 +604,7 @@ static inline int cs_get_lookupu_type(
return CsIdUnknown;
}
}
throw cs_error(cs, "unknown alias lookup: %s", arg.get_strr());
throw cs_error(cs, "unknown alias lookup: %s", arg.get_str());
}
static uint32_t *runcode(cs_state &cs, uint32_t *code, cs_value &result) {
@ -922,7 +922,7 @@ static uint32_t *runcode(cs_state &cs, uint32_t *code, cs_value &result) {
break;
case cs_value_type::String:
gs.code.reserve(64);
gs.gen_main(arg.get_strr());
gs.gen_main(arg.get_str());
break;
default:
gs.code.reserve(8);
@ -944,7 +944,7 @@ static uint32_t *runcode(cs_state &cs, uint32_t *code, cs_value &result) {
cs_value &arg = args[numargs - 1];
switch (arg.get_type()) {
case cs_value_type::String: {
ostd::string_range s = arg.get_strr();
ostd::string_range s = arg.get_str();
if (!s.empty()) {
cs_gen_state gs(cs);
gs.code.reserve(64);
@ -988,7 +988,7 @@ static uint32_t *runcode(cs_state &cs, uint32_t *code, cs_value &result) {
cs_value &arg = args[numargs - 1];
cs_ident *id = cs.p_state->identmap[DummyIdx];
if (arg.get_type() == cs_value_type::String) {
id = cs.new_ident(arg.get_strr());
id = cs.new_ident(arg.get_str());
}
if ((id->get_index() < MaxArguments) && !cs_is_arg_used(cs, id)) {
cs_value nv{cs};
@ -1267,7 +1267,7 @@ static uint32_t *runcode(cs_state &cs, uint32_t *code, cs_value &result) {
case CsCodeSvar1:
cs.set_var_str_checked(
static_cast<cs_svar *>(cs.p_state->identmap[op >> 8]),
args[--numargs].get_strr()
args[--numargs].get_str()
);
continue;
@ -1497,16 +1497,17 @@ litval:
numargs = offset - 1;
continue;
}
cs_ident *id = cs.get_ident(idarg.get_strr());
auto idn = idarg.get_str();
cs_ident *id = cs.get_ident(idn);
if (!id) {
noid:
if (cs_check_num(idarg.get_strr())) {
if (cs_check_num(idn)) {
goto litval;
}
result.force_null();
force_arg(result, op & CsCodeRetMask);
throw cs_error(
cs, "unknown command: %s", idarg.get_strr()
cs, "unknown command: %s", ostd::string_range{idn}
);
}
result.force_null();

View File

@ -539,7 +539,7 @@ OSTD_EXPORT cs_ident *cs_state::force_ident(cs_value &v) {
case cs_value_type::Ident:
return v.get_ident();
case cs_value_type::String: {
cs_ident *id = new_ident(v.get_strr());
cs_ident *id = new_ident(v.get_str());
v.set_ident(id);
return id;
}
@ -1062,7 +1062,7 @@ end:
void cs_init_lib_base(cs_state &gcs) {
gcs.new_command("error", "s", [](auto &cs, auto args, auto &) {
throw cs_error(cs, args[0].get_strr());
throw cs_error(cs, args[0].get_str());
});
gcs.new_command("pcall", "err", [](auto &cs, auto args, auto &ret) {
@ -1306,32 +1306,32 @@ end:
});
gcs.new_command("resetvar", "s", [](auto &cs, auto args, auto &) {
cs.reset_var(args[0].get_strr());
cs.reset_var(args[0].get_str());
});
gcs.new_command("alias", "st", [](auto &cs, auto args, auto &) {
cs.set_alias(args[0].get_strr(), args[1]);
cs.set_alias(args[0].get_str(), args[1]);
});
gcs.new_command("getvarmin", "s", [](auto &cs, auto args, auto &res) {
res.set_int(cs.get_var_min_int(args[0].get_strr()).value_or(0));
res.set_int(cs.get_var_min_int(args[0].get_str()).value_or(0));
});
gcs.new_command("getvarmax", "s", [](auto &cs, auto args, auto &res) {
res.set_int(cs.get_var_max_int(args[0].get_strr()).value_or(0));
res.set_int(cs.get_var_max_int(args[0].get_str()).value_or(0));
});
gcs.new_command("getfvarmin", "s", [](auto &cs, auto args, auto &res) {
res.set_float(cs.get_var_min_float(args[0].get_strr()).value_or(0.0f));
res.set_float(cs.get_var_min_float(args[0].get_str()).value_or(0.0f));
});
gcs.new_command("getfvarmax", "s", [](auto &cs, auto args, auto &res) {
res.set_float(cs.get_var_max_float(args[0].get_strr()).value_or(0.0f));
res.set_float(cs.get_var_max_float(args[0].get_str()).value_or(0.0f));
});
gcs.new_command("identexists", "s", [](auto &cs, auto args, auto &res) {
res.set_int(cs.have_ident(args[0].get_strr()));
res.set_int(cs.have_ident(args[0].get_str()));
});
gcs.new_command("getalias", "s", [](auto &cs, auto args, auto &res) {
auto s0 = cs.get_alias_val(args[0].get_strr());
auto s0 = cs.get_alias_val(args[0].get_str());
if (s0) {
res.set_str(*s0);
} else {

View File

@ -25,7 +25,7 @@ struct cs_arg_val<cs_float> {
template<>
struct cs_arg_val<ostd::string_range> {
static ostd::string_range get(cs_value &tv) {
return tv.get_strr();
return tv.get_str();
}
};
@ -35,7 +35,7 @@ static inline void cs_list_find(
) {
cs_int n = 0, skip = args[2].get_int();
T val = cs_arg_val<T>::get(args[1]);
for (util::list_parser p(cs, args[0].get_strr()); p.parse(); ++n) {
for (util::list_parser p(cs, args[0].get_str()); p.parse(); ++n) {
if (cmp(p, val)) {
res.set_int(n);
return;
@ -56,7 +56,7 @@ static inline void cs_list_assoc(
cs_state &cs, cs_value_r args, cs_value &res, F cmp
) {
T val = cs_arg_val<T>::get(args[1]);
for (util::list_parser p(cs, args[0].get_strr()); p.parse();) {
for (util::list_parser p(cs, args[0].get_str()); p.parse();) {
if (cmp(p, val)) {
if (p.parse()) {
res.set_str(p.get_item());
@ -117,8 +117,8 @@ template<bool PushList, bool Swap, typename F>
static inline void cs_list_merge(
cs_state &cs, cs_value_r args, cs_value &res, F cmp
) {
ostd::string_range list = args[0].get_strr();
ostd::string_range elems = args[1].get_strr();
ostd::string_range list = args[0].get_str();
ostd::string_range elems = args[1].get_str();
cs_string buf;
if (PushList) {
buf += list;
@ -141,7 +141,7 @@ static void cs_init_lib_list_sort(cs_state &cs);
void cs_init_lib_list(cs_state &gcs) {
gcs.new_command("listlen", "s", [](auto &cs, auto args, auto &res) {
res.set_int(cs_int(util::list_parser(cs, args[0].get_strr()).count()));
res.set_int(cs_int(util::list_parser(cs, args[0].get_str()).count()));
});
gcs.new_command("at", "si1V", [](auto &cs, auto args, auto &res) {
@ -174,7 +174,7 @@ void cs_init_lib_list(cs_state &gcs) {
cs_int offset = std::max(skip, cs_int(0)),
len = (numargs >= 3) ? std::max(count, cs_int(0)) : -1;
util::list_parser p(cs, args[0].get_strr());
util::list_parser p(cs, args[0].get_str());
for (cs_int i = 0; i < offset; ++i) {
if (!p.parse()) break;
}
@ -204,7 +204,7 @@ void cs_init_lib_list(cs_state &gcs) {
}
auto body = args[2].get_code();
int n = -1;
for (util::list_parser p(cs, args[1].get_strr()); p.parse();) {
for (util::list_parser p(cs, args[1].get_str()); p.parse();) {
++n;
idv.set_str(cs_string{p.get_raw_item()});
idv.push();
@ -223,7 +223,7 @@ void cs_init_lib_list(cs_state &gcs) {
}
auto body = args[2].get_code();
int n = -1;
for (util::list_parser p(cs, args[1].get_strr()); p.parse();) {
for (util::list_parser p(cs, args[1].get_str()); p.parse();) {
++n;
idv.set_str(cs_string{p.get_raw_item()});
idv.push();
@ -290,7 +290,7 @@ void cs_init_lib_list(cs_state &gcs) {
}
auto body = args[2].get_code();
int n = 0;
for (util::list_parser p(cs, args[1].get_strr()); p.parse(); ++n) {
for (util::list_parser p(cs, args[1].get_str()); p.parse(); ++n) {
idv.set_str(p.get_item());
idv.push();
switch (cs.run_loop(body)) {
@ -312,7 +312,7 @@ end:
}
auto body = args[3].get_code();
int n = 0;
for (util::list_parser p(cs, args[2].get_strr()); p.parse(); n += 2) {
for (util::list_parser p(cs, args[2].get_str()); p.parse(); n += 2) {
idv1.set_str(p.get_item());
if (p.parse()) {
idv2.set_str(p.get_item());
@ -341,7 +341,7 @@ end:
}
auto body = args[4].get_code();
int n = 0;
for (util::list_parser p(cs, args[3].get_strr()); p.parse(); n += 3) {
for (util::list_parser p(cs, args[3].get_str()); p.parse(); n += 3) {
idv1.set_str(p.get_item());
if (p.parse()) {
idv2.set_str(p.get_item());
@ -369,7 +369,7 @@ end:
gcs.new_command("looplistconcat", "rse", [](auto &cs, auto args, auto &res) {
cs_loop_list_conc(
cs, res, args[0].get_ident(), args[1].get_strr(),
cs, res, args[0].get_ident(), args[1].get_str(),
args[2].get_code(), true
);
});
@ -378,7 +378,7 @@ end:
auto &cs, auto args, auto &res
) {
cs_loop_list_conc(
cs, res, args[0].get_ident(), args[1].get_strr(),
cs, res, args[0].get_ident(), args[1].get_str(),
args[2].get_code(), false
);
});
@ -391,7 +391,7 @@ end:
auto body = args[2].get_code();
cs_string r;
int n = 0;
for (util::list_parser p(cs, args[1].get_strr()); p.parse(); ++n) {
for (util::list_parser p(cs, args[1].get_str()); p.parse(); ++n) {
idv.set_str(cs_string{p.get_raw_item()});
idv.push();
if (cs.run_bool(body)) {
@ -411,7 +411,7 @@ end:
}
auto body = args[2].get_code();
int n = 0, r = 0;
for (util::list_parser p(cs, args[1].get_strr()); p.parse(); ++n) {
for (util::list_parser p(cs, args[1].get_str()); p.parse(); ++n) {
idv.set_str(cs_string{p.get_raw_item()});
idv.push();
if (cs.run_bool(body)) {
@ -423,8 +423,8 @@ end:
gcs.new_command("prettylist", "ss", [](auto &cs, auto args, auto &res) {
auto buf = ostd::appender<cs_string>();
ostd::string_range s = args[0].get_strr();
ostd::string_range conj = args[1].get_strr();
ostd::string_range s = args[0].get_str();
ostd::string_range conj = args[1].get_str();
size_t len = util::list_parser(cs, s).count();
size_t n = 0;
for (util::list_parser p(cs, s); p.parse(); ++n) {
@ -450,7 +450,7 @@ end:
gcs.new_command("indexof", "ss", [](auto &cs, auto args, auto &res) {
res.set_int(
cs_list_includes(cs, args[0].get_strr(), args[1].get_strr())
cs_list_includes(cs, args[0].get_str(), args[1].get_str())
);
});
@ -467,8 +467,8 @@ end:
gcs.new_command("listsplice", "ssii", [](auto &cs, auto args, auto &res) {
cs_int offset = std::max(args[2].get_int(), cs_int(0));
cs_int len = std::max(args[3].get_int(), cs_int(0));
ostd::string_range s = args[0].get_strr();
ostd::string_range vals = args[1].get_strr();
ostd::string_range s = args[0].get_str();
ostd::string_range vals = args[1].get_str();
char const *list = s.data();
util::list_parser p(cs, s);
for (cs_int i = 0; i < offset; ++i) {
@ -622,13 +622,13 @@ static void cs_list_sort(
static void cs_init_lib_list_sort(cs_state &gcs) {
gcs.new_command("sortlist", "srree", [](auto &cs, auto args, auto &res) {
cs_list_sort(
cs, res, args[0].get_strr(), args[1].get_ident(),
cs, res, args[0].get_str(), args[1].get_ident(),
args[2].get_ident(), args[3].get_code(), args[4].get_code()
);
});
gcs.new_command("uniquelist", "srre", [](auto &cs, auto args, auto &res) {
cs_list_sort(
cs, res, args[0].get_strr(), args[1].get_ident(),
cs, res, args[0].get_str(), args[1].get_ident(),
args[2].get_ident(), nullptr, args[3].get_code()
);
});

View File

@ -8,13 +8,13 @@ template<typename F>
static inline void cs_strgcmp(cs_value_r args, cs_value &res, F cfunc) {
bool val;
if (args.size() >= 2) {
val = cfunc(args[0].get_strr(), args[1].get_strr());
val = cfunc(args[0].get_str(), args[1].get_str());
for (size_t i = 2; (i < args.size()) && val; ++i) {
val = cfunc(args[i - 1].get_strr(), args[i].get_strr());
val = cfunc(args[i - 1].get_str(), args[i].get_str());
}
} else {
val = cfunc(
!args.empty() ? args[0].get_strr() : ostd::string_range(),
!args.empty() ? args[0].get_str() : ostd::string_range(),
ostd::string_range()
);
}
@ -23,7 +23,7 @@ static inline void cs_strgcmp(cs_value_r args, cs_value &res, F cfunc) {
void cs_init_lib_string(cs_state &cs) {
cs.new_command("strstr", "ss", [](auto &, auto args, auto &res) {
ostd::string_range a = args[0].get_strr(), b = args[1].get_strr();
ostd::string_range a = args[0].get_str(), b = args[1].get_str();
ostd::string_range s = a;
for (cs_int i = 0; b.size() <= s.size(); ++i) {
if (b == s.slice(0, b.size())) {
@ -36,11 +36,11 @@ void cs_init_lib_string(cs_state &cs) {
});
cs.new_command("strlen", "s", [](auto &, auto args, auto &res) {
res.set_int(cs_int(args[0].get_strr().size()));
res.set_int(cs_int(args[0].get_str().size()));
});
cs.new_command("strcode", "si", [](auto &, auto args, auto &res) {
ostd::string_range str = args[0].get_strr();
ostd::string_range str = args[0].get_str();
cs_int i = args[1].get_int();
if (i >= cs_int(str.size())) {
res.set_int(0);
@ -71,13 +71,13 @@ void cs_init_lib_string(cs_state &cs) {
cs.new_command("escape", "s", [](auto &, auto args, auto &res) {
auto s = ostd::appender<cs_string>();
util::escape_string(s, args[0].get_strr());
util::escape_string(s, args[0].get_str());
res.set_str(s.get());
});
cs.new_command("unescape", "s", [](auto &, auto args, auto &res) {
auto s = ostd::appender<cs_string>();
util::unescape_string(s, args[0].get_strr());
util::unescape_string(s, args[0].get_str());
res.set_str(s.get());
});
@ -135,7 +135,7 @@ void cs_init_lib_string(cs_state &cs) {
});
cs.new_command("substr", "siiN", [](auto &, auto args, auto &res) {
ostd::string_range s = args[0].get_strr();
ostd::string_range s = args[0].get_str();
cs_int start = args[1].get_int(), count = args[2].get_int();
cs_int numargs = args[3].get_int();
cs_int len = cs_int(s.size()), offset = std::clamp(start, cs_int(0), len);
@ -170,10 +170,10 @@ void cs_init_lib_string(cs_state &cs) {
});
cs.new_command("strreplace", "ssss", [](auto &, auto args, auto &res) {
ostd::string_range s = args[0].get_strr();
ostd::string_range oldval = args[1].get_strr(),
newval = args[2].get_strr(),
newval2 = args[3].get_strr();
ostd::string_range s = args[0].get_str();
ostd::string_range oldval = args[1].get_str(),
newval = args[2].get_str(),
newval2 = args[3].get_str();
if (newval2.empty()) {
newval2 = newval;
}
@ -204,8 +204,8 @@ void cs_init_lib_string(cs_state &cs) {
});
cs.new_command("strsplice", "ssii", [](auto &, auto args, auto &res) {
ostd::string_range s = args[0].get_strr();
ostd::string_range vals = args[1].get_strr();
ostd::string_range s = args[0].get_str();
ostd::string_range vals = args[1].get_str();
cs_int skip = args[2].get_int(),
count = args[3].get_int();
cs_int offset = std::clamp(skip, cs_int(0), cs_int(s.size())),

View File

@ -275,7 +275,7 @@ int main(int argc, char **argv) {
gcs.init_libs();
gcs.new_command("exec", "s", [](auto &cs, auto args, auto &) {
auto file = args[0].get_strr();
auto file = args[0].get_str();
bool ret = cs.run_file(file);
if (!ret) {
throw cscript::cs_error(
@ -285,7 +285,7 @@ int main(int argc, char **argv) {
});
gcs.new_command("echo", "C", [](auto &, auto args, auto &) {
ostd::writeln(args[0].get_strr());
ostd::writeln(ostd::string_range{args[0].get_str()});
});
int firstarg = 0;