hide value getter from public alias interface

since this will become thread-specific, this API makes no sense
master
Daniel Kolesa 2021-04-01 04:19:00 +02:00
parent 6bb3dc2a57
commit e2b65000d5
4 changed files with 33 additions and 25 deletions

View File

@ -300,8 +300,6 @@ protected:
}; };
struct LIBCUBESCRIPT_EXPORT alias: ident { struct LIBCUBESCRIPT_EXPORT alias: ident {
any_value get_value() const;
protected: protected:
alias() = default; alias() = default;
}; };

View File

@ -176,7 +176,7 @@ bcode *alias_impl::compile_code(thread_state &ts) {
if (!p_acode) { if (!p_acode) {
codegen_state gs(ts); codegen_state gs(ts);
gs.code.reserve(64); gs.code.reserve(64);
gs.gen_main(get_value().get_str()); gs.gen_main(p_astack->val_s.get_str());
/* i wish i could steal the memory somehow */ /* i wish i could steal the memory somehow */
uint32_t *code = bcode_alloc(ts.istate, gs.code.size()); uint32_t *code = bcode_alloc(ts.istate, gs.code.size());
memcpy(code, gs.code.data(), gs.code.size() * sizeof(uint32_t)); memcpy(code, gs.code.data(), gs.code.size() * sizeof(uint32_t));
@ -397,10 +397,6 @@ LIBCUBESCRIPT_EXPORT void string_var::set_value(string_ref val) {
static_cast<svar_impl *>(this)->p_storage = val; static_cast<svar_impl *>(this)->p_storage = val;
} }
LIBCUBESCRIPT_EXPORT any_value alias::get_value() const {
return static_cast<alias_impl const *>(this)->p_astack->val_s;
}
LIBCUBESCRIPT_EXPORT std::string_view command::get_args() const { LIBCUBESCRIPT_EXPORT std::string_view command::get_args() const {
return static_cast<command_impl const *>(this)->p_cargs; return static_cast<command_impl const *>(this)->p_cargs;
} }

View File

@ -196,8 +196,9 @@ LIBCUBESCRIPT_EXPORT void state::destroy() {
ident *i = p.second; ident *i = p.second;
alias *a = i->get_alias(); alias *a = i->get_alias();
if (a) { if (a) {
a->get_value().force_none(); auto *aimp = static_cast<alias_impl *>(a);
static_cast<alias_impl *>(a)->clean_code(); aimp->p_astack->val_s.force_none();
aimp->clean_code();
} }
sp->destroy(i->p_impl); sp->destroy(i->p_impl);
} }
@ -467,7 +468,7 @@ LIBCUBESCRIPT_EXPORT void state::clear_override(ident &id) {
case ident_type::ALIAS: { case ident_type::ALIAS: {
alias_impl &a = static_cast<alias_impl &>(id); alias_impl &a = static_cast<alias_impl &>(id);
a.clean_code(); a.clean_code();
a.get_value().set_str(""); a.p_astack->val_s.set_str("");
break; break;
} }
case ident_type::IVAR: { case ident_type::IVAR: {
@ -656,7 +657,7 @@ state::get_alias_val(std::string_view name) {
if ((a->get_flags() & IDENT_FLAG_ARG) && !ident_is_used_arg(a, *p_tstate)) { if ((a->get_flags() & IDENT_FLAG_ARG) && !ident_is_used_arg(a, *p_tstate)) {
return std::nullopt; return std::nullopt;
} }
return a->get_value().get_str(); return static_cast<alias_impl *>(a)->p_astack->val_s.get_str();
} }
integer_type clamp_var(state &cs, integer_var *iv, integer_type v) { integer_type clamp_var(state &cs, integer_var *iv, integer_type v) {
@ -881,7 +882,10 @@ LIBCUBESCRIPT_EXPORT void state::run(
) { ) {
break; break;
} }
if (a->get_value().get_type() == value_type::NONE) { if (
static_cast<alias_impl *>(a)->p_astack->val_s.get_type() ==
value_type::NONE
) {
break; break;
} }
exec_alias( exec_alias(

View File

@ -770,7 +770,7 @@ std::uint32_t *vm_exec(
any_value &arg = args.back(); any_value &arg = args.back();
switch (get_lookupu_type(ts, arg, id, op)) { switch (get_lookupu_type(ts, arg, id, op)) {
case ID_ALIAS: case ID_ALIAS:
arg = static_cast<alias *>(id)->get_value(); arg = static_cast<alias_impl *>(id)->p_astack->val_s;
arg.force_str(); arg.force_str();
continue; continue;
case ID_SVAR: case ID_SVAR:
@ -798,7 +798,7 @@ std::uint32_t *vm_exec(
args.emplace_back(cs).set_str(""); args.emplace_back(cs).set_str("");
} else { } else {
auto &v = args.emplace_back(cs); auto &v = args.emplace_back(cs);
v = a->get_value(); v = static_cast<alias_impl *>(a)->p_astack->val_s;
v.force_str(); v.force_str();
} }
continue; continue;
@ -809,9 +809,9 @@ std::uint32_t *vm_exec(
any_value &arg = args.back(); any_value &arg = args.back();
switch (get_lookupu_type(ts, arg, id, op)) { switch (get_lookupu_type(ts, arg, id, op)) {
case ID_ALIAS: case ID_ALIAS:
arg.set_int( arg.set_int(static_cast<alias_impl *>(
static_cast<alias *>(id)->get_value().get_int() id
); )->p_astack->val_s.get_int());
continue; continue;
case ID_SVAR: case ID_SVAR:
arg.set_int(parse_int( arg.set_int(parse_int(
@ -838,7 +838,9 @@ std::uint32_t *vm_exec(
if (!a) { if (!a) {
args.emplace_back(cs).set_int(0); args.emplace_back(cs).set_int(0);
} else { } else {
args.emplace_back(cs).set_int(a->get_value().get_int()); args.emplace_back(cs).set_int(
static_cast<alias_impl *>(a)->p_astack->val_s.get_int()
);
} }
continue; continue;
} }
@ -847,9 +849,9 @@ std::uint32_t *vm_exec(
any_value &arg = args.back(); any_value &arg = args.back();
switch (get_lookupu_type(ts, arg, id, op)) { switch (get_lookupu_type(ts, arg, id, op)) {
case ID_ALIAS: case ID_ALIAS:
arg.set_float( arg.set_float(static_cast<alias_impl *>(
static_cast<alias *>(id)->get_value().get_float() id
); )->p_astack->val_s.get_float());
continue; continue;
case ID_SVAR: case ID_SVAR:
arg.set_float(parse_float( arg.set_float(parse_float(
@ -878,7 +880,9 @@ std::uint32_t *vm_exec(
if (!a) { if (!a) {
args.emplace_back(cs).set_float(float_type(0)); args.emplace_back(cs).set_float(float_type(0));
} else { } else {
args.emplace_back(cs).set_float(a->get_value().get_float()); args.emplace_back(cs).set_float(static_cast<alias_impl *>(
a
)->p_astack->val_s.get_float());
} }
continue; continue;
} }
@ -887,7 +891,9 @@ std::uint32_t *vm_exec(
any_value &arg = args.back(); any_value &arg = args.back();
switch (get_lookupu_type(ts, arg, id, op)) { switch (get_lookupu_type(ts, arg, id, op)) {
case ID_ALIAS: case ID_ALIAS:
static_cast<alias *>(id)->get_value().get_val(arg); static_cast<alias_impl *>(
id
)->p_astack->val_s.get_val(arg);
continue; continue;
case ID_SVAR: case ID_SVAR:
arg.set_str(static_cast<string_var *>(id)->get_value()); arg.set_str(static_cast<string_var *>(id)->get_value());
@ -912,7 +918,9 @@ std::uint32_t *vm_exec(
if (!a) { if (!a) {
args.emplace_back(cs).set_none(); args.emplace_back(cs).set_none();
} else { } else {
a->get_value().get_val(args.emplace_back(cs)); static_cast<alias_impl *>(a)->p_astack->val_s.get_val(
args.emplace_back(cs)
);
} }
continue; continue;
} }
@ -1210,7 +1218,9 @@ noid:
force_arg(result, op & BC_INST_RET_MASK); force_arg(result, op & BC_INST_RET_MASK);
continue; continue;
} }
if (a->get_value().get_type() == value_type::NONE) { if (static_cast<alias_impl *>(
a
)->p_astack->val_s.get_type() == value_type::NONE) {
goto noid; goto noid;
} }
exec_alias( exec_alias(