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; 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; bool operator==(cs_strref const &s) const;
private: private:
@ -121,7 +128,6 @@ struct OSTD_EXPORT cs_value {
void set_ident(cs_ident *val); void set_ident(cs_ident *val);
cs_strref get_str() const; cs_strref get_str() const;
ostd::string_range get_strr() const;
cs_int get_int() const; cs_int get_int() const;
cs_float get_float() const; cs_float get_float() const;
cs_bcode *get_code() const; cs_bcode *get_code() const;
@ -867,7 +873,9 @@ private:
break; break;
} }
case cs_value_type::String: { 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; break;
} }
default: default:

View File

@ -247,18 +247,6 @@ cs_strref cs_value::get_str() const {
return cs_strref{*state(), ""}; 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 { void cs_value::get_val(cs_value &r) const {
switch (get_type()) { switch (get_type()) {
case cs_value_type::String: 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) { static inline void forcecond(cs_state &cs, cs_value &v) {
switch (v.get_type()) { switch (v.get_type()) {
case cs_value_type::String: case cs_value_type::String:
if (!v.get_strr().empty()) { if (!ostd::string_range{v.get_str()}.empty()) {
forcecode(cs, v); forcecode(cs, v);
} else { } else {
v.set_int(0); v.set_int(0);
@ -576,7 +576,7 @@ static inline int cs_get_lookupu_type(
if (arg.get_type() != cs_value_type::String) { if (arg.get_type() != cs_value_type::String) {
return -2; /* default case */ return -2; /* default case */
} }
id = cs.get_ident(arg.get_strr()); id = cs.get_ident(arg.get_str());
if (id) { if (id) {
switch(id->get_type()) { switch(id->get_type()) {
case cs_ident_type::Alias: case cs_ident_type::Alias:
@ -604,7 +604,7 @@ static inline int cs_get_lookupu_type(
return CsIdUnknown; 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) { 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; break;
case cs_value_type::String: case cs_value_type::String:
gs.code.reserve(64); gs.code.reserve(64);
gs.gen_main(arg.get_strr()); gs.gen_main(arg.get_str());
break; break;
default: default:
gs.code.reserve(8); 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]; cs_value &arg = args[numargs - 1];
switch (arg.get_type()) { switch (arg.get_type()) {
case cs_value_type::String: { case cs_value_type::String: {
ostd::string_range s = arg.get_strr(); ostd::string_range s = arg.get_str();
if (!s.empty()) { if (!s.empty()) {
cs_gen_state gs(cs); cs_gen_state gs(cs);
gs.code.reserve(64); 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_value &arg = args[numargs - 1];
cs_ident *id = cs.p_state->identmap[DummyIdx]; cs_ident *id = cs.p_state->identmap[DummyIdx];
if (arg.get_type() == cs_value_type::String) { 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)) { if ((id->get_index() < MaxArguments) && !cs_is_arg_used(cs, id)) {
cs_value nv{cs}; cs_value nv{cs};
@ -1267,7 +1267,7 @@ static uint32_t *runcode(cs_state &cs, uint32_t *code, cs_value &result) {
case CsCodeSvar1: case CsCodeSvar1:
cs.set_var_str_checked( cs.set_var_str_checked(
static_cast<cs_svar *>(cs.p_state->identmap[op >> 8]), static_cast<cs_svar *>(cs.p_state->identmap[op >> 8]),
args[--numargs].get_strr() args[--numargs].get_str()
); );
continue; continue;
@ -1497,16 +1497,17 @@ litval:
numargs = offset - 1; numargs = offset - 1;
continue; continue;
} }
cs_ident *id = cs.get_ident(idarg.get_strr()); auto idn = idarg.get_str();
cs_ident *id = cs.get_ident(idn);
if (!id) { if (!id) {
noid: noid:
if (cs_check_num(idarg.get_strr())) { if (cs_check_num(idn)) {
goto litval; goto litval;
} }
result.force_null(); result.force_null();
force_arg(result, op & CsCodeRetMask); force_arg(result, op & CsCodeRetMask);
throw cs_error( throw cs_error(
cs, "unknown command: %s", idarg.get_strr() cs, "unknown command: %s", ostd::string_range{idn}
); );
} }
result.force_null(); 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: case cs_value_type::Ident:
return v.get_ident(); return v.get_ident();
case cs_value_type::String: { 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); v.set_ident(id);
return id; return id;
} }
@ -1062,7 +1062,7 @@ end:
void cs_init_lib_base(cs_state &gcs) { void cs_init_lib_base(cs_state &gcs) {
gcs.new_command("error", "s", [](auto &cs, auto args, auto &) { 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) { 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 &) { 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 &) { 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) { 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) { 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) { 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) { 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) { 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) { 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) { if (s0) {
res.set_str(*s0); res.set_str(*s0);
} else { } else {

View File

@ -25,7 +25,7 @@ struct cs_arg_val<cs_float> {
template<> template<>
struct cs_arg_val<ostd::string_range> { struct cs_arg_val<ostd::string_range> {
static ostd::string_range get(cs_value &tv) { 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(); cs_int n = 0, skip = args[2].get_int();
T val = cs_arg_val<T>::get(args[1]); 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)) { if (cmp(p, val)) {
res.set_int(n); res.set_int(n);
return; return;
@ -56,7 +56,7 @@ static inline void cs_list_assoc(
cs_state &cs, cs_value_r args, cs_value &res, F cmp cs_state &cs, cs_value_r args, cs_value &res, F cmp
) { ) {
T val = cs_arg_val<T>::get(args[1]); 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 (cmp(p, val)) {
if (p.parse()) { if (p.parse()) {
res.set_str(p.get_item()); res.set_str(p.get_item());
@ -117,8 +117,8 @@ template<bool PushList, bool Swap, typename F>
static inline void cs_list_merge( static inline void cs_list_merge(
cs_state &cs, cs_value_r args, cs_value &res, F cmp cs_state &cs, cs_value_r args, cs_value &res, F cmp
) { ) {
ostd::string_range list = args[0].get_strr(); ostd::string_range list = args[0].get_str();
ostd::string_range elems = args[1].get_strr(); ostd::string_range elems = args[1].get_str();
cs_string buf; cs_string buf;
if (PushList) { if (PushList) {
buf += list; buf += list;
@ -141,7 +141,7 @@ static void cs_init_lib_list_sort(cs_state &cs);
void cs_init_lib_list(cs_state &gcs) { void cs_init_lib_list(cs_state &gcs) {
gcs.new_command("listlen", "s", [](auto &cs, auto args, auto &res) { 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) { 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)), cs_int offset = std::max(skip, cs_int(0)),
len = (numargs >= 3) ? std::max(count, cs_int(0)) : -1; 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) { for (cs_int i = 0; i < offset; ++i) {
if (!p.parse()) break; if (!p.parse()) break;
} }
@ -204,7 +204,7 @@ void cs_init_lib_list(cs_state &gcs) {
} }
auto body = args[2].get_code(); auto body = args[2].get_code();
int n = -1; 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; ++n;
idv.set_str(cs_string{p.get_raw_item()}); idv.set_str(cs_string{p.get_raw_item()});
idv.push(); idv.push();
@ -223,7 +223,7 @@ void cs_init_lib_list(cs_state &gcs) {
} }
auto body = args[2].get_code(); auto body = args[2].get_code();
int n = -1; 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; ++n;
idv.set_str(cs_string{p.get_raw_item()}); idv.set_str(cs_string{p.get_raw_item()});
idv.push(); idv.push();
@ -290,7 +290,7 @@ void cs_init_lib_list(cs_state &gcs) {
} }
auto body = args[2].get_code(); auto body = args[2].get_code();
int n = 0; 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.set_str(p.get_item());
idv.push(); idv.push();
switch (cs.run_loop(body)) { switch (cs.run_loop(body)) {
@ -312,7 +312,7 @@ end:
} }
auto body = args[3].get_code(); auto body = args[3].get_code();
int n = 0; 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()); idv1.set_str(p.get_item());
if (p.parse()) { if (p.parse()) {
idv2.set_str(p.get_item()); idv2.set_str(p.get_item());
@ -341,7 +341,7 @@ end:
} }
auto body = args[4].get_code(); auto body = args[4].get_code();
int n = 0; 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()); idv1.set_str(p.get_item());
if (p.parse()) { if (p.parse()) {
idv2.set_str(p.get_item()); idv2.set_str(p.get_item());
@ -369,7 +369,7 @@ end:
gcs.new_command("looplistconcat", "rse", [](auto &cs, auto args, auto &res) { gcs.new_command("looplistconcat", "rse", [](auto &cs, auto args, auto &res) {
cs_loop_list_conc( 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 args[2].get_code(), true
); );
}); });
@ -378,7 +378,7 @@ end:
auto &cs, auto args, auto &res auto &cs, auto args, auto &res
) { ) {
cs_loop_list_conc( 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 args[2].get_code(), false
); );
}); });
@ -391,7 +391,7 @@ end:
auto body = args[2].get_code(); auto body = args[2].get_code();
cs_string r; cs_string r;
int n = 0; 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.set_str(cs_string{p.get_raw_item()});
idv.push(); idv.push();
if (cs.run_bool(body)) { if (cs.run_bool(body)) {
@ -411,7 +411,7 @@ end:
} }
auto body = args[2].get_code(); auto body = args[2].get_code();
int n = 0, r = 0; 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.set_str(cs_string{p.get_raw_item()});
idv.push(); idv.push();
if (cs.run_bool(body)) { if (cs.run_bool(body)) {
@ -423,8 +423,8 @@ end:
gcs.new_command("prettylist", "ss", [](auto &cs, auto args, auto &res) { gcs.new_command("prettylist", "ss", [](auto &cs, auto args, auto &res) {
auto buf = ostd::appender<cs_string>(); auto buf = ostd::appender<cs_string>();
ostd::string_range s = args[0].get_strr(); ostd::string_range s = args[0].get_str();
ostd::string_range conj = args[1].get_strr(); ostd::string_range conj = args[1].get_str();
size_t len = util::list_parser(cs, s).count(); size_t len = util::list_parser(cs, s).count();
size_t n = 0; size_t n = 0;
for (util::list_parser p(cs, s); p.parse(); ++n) { 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) { gcs.new_command("indexof", "ss", [](auto &cs, auto args, auto &res) {
res.set_int( 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) { 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 offset = std::max(args[2].get_int(), cs_int(0));
cs_int len = std::max(args[3].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 s = args[0].get_str();
ostd::string_range vals = args[1].get_strr(); ostd::string_range vals = args[1].get_str();
char const *list = s.data(); char const *list = s.data();
util::list_parser p(cs, s); util::list_parser p(cs, s);
for (cs_int i = 0; i < offset; ++i) { 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) { static void cs_init_lib_list_sort(cs_state &gcs) {
gcs.new_command("sortlist", "srree", [](auto &cs, auto args, auto &res) { gcs.new_command("sortlist", "srree", [](auto &cs, auto args, auto &res) {
cs_list_sort( 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() args[2].get_ident(), args[3].get_code(), args[4].get_code()
); );
}); });
gcs.new_command("uniquelist", "srre", [](auto &cs, auto args, auto &res) { gcs.new_command("uniquelist", "srre", [](auto &cs, auto args, auto &res) {
cs_list_sort( 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() 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) { static inline void cs_strgcmp(cs_value_r args, cs_value &res, F cfunc) {
bool val; bool val;
if (args.size() >= 2) { 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) { 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 { } else {
val = cfunc( val = cfunc(
!args.empty() ? args[0].get_strr() : ostd::string_range(), !args.empty() ? args[0].get_str() : ostd::string_range(),
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) { void cs_init_lib_string(cs_state &cs) {
cs.new_command("strstr", "ss", [](auto &, auto args, auto &res) { 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; ostd::string_range s = a;
for (cs_int i = 0; b.size() <= s.size(); ++i) { for (cs_int i = 0; b.size() <= s.size(); ++i) {
if (b == s.slice(0, b.size())) { 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) { 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) { 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(); cs_int i = args[1].get_int();
if (i >= cs_int(str.size())) { if (i >= cs_int(str.size())) {
res.set_int(0); 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) { cs.new_command("escape", "s", [](auto &, auto args, auto &res) {
auto s = ostd::appender<cs_string>(); 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()); res.set_str(s.get());
}); });
cs.new_command("unescape", "s", [](auto &, auto args, auto &res) { cs.new_command("unescape", "s", [](auto &, auto args, auto &res) {
auto s = ostd::appender<cs_string>(); 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()); 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) { 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 start = args[1].get_int(), count = args[2].get_int();
cs_int numargs = args[3].get_int(); cs_int numargs = args[3].get_int();
cs_int len = cs_int(s.size()), offset = std::clamp(start, cs_int(0), len); 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) { cs.new_command("strreplace", "ssss", [](auto &, auto args, auto &res) {
ostd::string_range s = args[0].get_strr(); ostd::string_range s = args[0].get_str();
ostd::string_range oldval = args[1].get_strr(), ostd::string_range oldval = args[1].get_str(),
newval = args[2].get_strr(), newval = args[2].get_str(),
newval2 = args[3].get_strr(); newval2 = args[3].get_str();
if (newval2.empty()) { if (newval2.empty()) {
newval2 = newval; newval2 = newval;
} }
@ -204,8 +204,8 @@ void cs_init_lib_string(cs_state &cs) {
}); });
cs.new_command("strsplice", "ssii", [](auto &, auto args, auto &res) { cs.new_command("strsplice", "ssii", [](auto &, auto args, auto &res) {
ostd::string_range s = args[0].get_strr(); ostd::string_range s = args[0].get_str();
ostd::string_range vals = args[1].get_strr(); ostd::string_range vals = args[1].get_str();
cs_int skip = args[2].get_int(), cs_int skip = args[2].get_int(),
count = args[3].get_int(); count = args[3].get_int();
cs_int offset = std::clamp(skip, cs_int(0), cs_int(s.size())), 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.init_libs();
gcs.new_command("exec", "s", [](auto &cs, auto args, auto &) { 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); bool ret = cs.run_file(file);
if (!ret) { if (!ret) {
throw cscript::cs_error( throw cscript::cs_error(
@ -285,7 +285,7 @@ int main(int argc, char **argv) {
}); });
gcs.new_command("echo", "C", [](auto &, auto args, auto &) { 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; int firstarg = 0;