forked from OctaForge/libcubescript
more cleanups
parent
5c3aa477d2
commit
d80e922913
7
cs_vm.cc
7
cs_vm.cc
|
@ -463,12 +463,7 @@ static inline void cs_call_alias(
|
|||
a, cs.p_stack, (1<<callargs)-1, argstack
|
||||
};
|
||||
cs.p_stack = &aliaslink;
|
||||
if (!a->code) {
|
||||
a->code = reinterpret_cast<Bytecode *>(
|
||||
compilecode(cs, a->val_v.get_str())
|
||||
);
|
||||
}
|
||||
ostd::Uint32 *codep = reinterpret_cast<ostd::Uint32 *>(a->code);
|
||||
ostd::Uint32 *codep = reinterpret_cast<ostd::Uint32 *>(a->compile_code(cs));
|
||||
bcode_incr(codep);
|
||||
runcode(cs, codep+1, (result));
|
||||
bcode_decr(codep);
|
||||
|
|
|
@ -67,31 +67,31 @@ Svar::Svar(ostd::ConstCharRange name, char **s, VarCb f, int fl):
|
|||
|
||||
Alias::Alias(ostd::ConstCharRange name, char *a, int fl):
|
||||
Ident(IdentType::alias, name, fl),
|
||||
code(nullptr), p_astack(nullptr)
|
||||
p_acode(nullptr), p_astack(nullptr)
|
||||
{
|
||||
val_v.set_mstr(a);
|
||||
}
|
||||
Alias::Alias(ostd::ConstCharRange name, CsInt a, int fl):
|
||||
Ident(IdentType::alias, name, fl),
|
||||
code(nullptr), p_astack(nullptr)
|
||||
p_acode(nullptr), p_astack(nullptr)
|
||||
{
|
||||
val_v.set_int(a);
|
||||
}
|
||||
Alias::Alias(ostd::ConstCharRange name, CsFloat a, int fl):
|
||||
Ident(IdentType::alias, name, fl),
|
||||
code(nullptr), p_astack(nullptr)
|
||||
p_acode(nullptr), p_astack(nullptr)
|
||||
{
|
||||
val_v.set_float(a);
|
||||
}
|
||||
Alias::Alias(ostd::ConstCharRange name, int fl):
|
||||
Ident(IdentType::alias, name, fl),
|
||||
code(nullptr), p_astack(nullptr)
|
||||
p_acode(nullptr), p_astack(nullptr)
|
||||
{
|
||||
val_v.set_null();
|
||||
}
|
||||
Alias::Alias(ostd::ConstCharRange name, CsValue const &v, int fl):
|
||||
Ident(IdentType::alias, name, fl),
|
||||
code(nullptr), val_v(v), p_astack(nullptr)
|
||||
val_v(v), p_acode(nullptr), p_astack(nullptr)
|
||||
{}
|
||||
|
||||
Command::Command(
|
||||
|
@ -254,7 +254,7 @@ CsState::~CsState() {
|
|||
Alias *a = i->get_alias();
|
||||
if (a) {
|
||||
a->force_null();
|
||||
delete[] reinterpret_cast<ostd::Uint32 *>(a->code);
|
||||
a->clean_code();
|
||||
} else if (i->is_command() || i->is_special()) {
|
||||
delete[] static_cast<Command *>(i)->cargs;
|
||||
}
|
||||
|
@ -723,13 +723,20 @@ void Alias::get_cval(CsValue &v) const {
|
|||
}
|
||||
|
||||
void Alias::clean_code() {
|
||||
ostd::Uint32 *bcode = reinterpret_cast<ostd::Uint32 *>(code);
|
||||
ostd::Uint32 *bcode = reinterpret_cast<ostd::Uint32 *>(p_acode);
|
||||
if (bcode) {
|
||||
bcode_decr(bcode);
|
||||
code = nullptr;
|
||||
p_acode = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
Bytecode *Alias::compile_code(CsState &cs) {
|
||||
if (!p_acode) {
|
||||
p_acode = reinterpret_cast<Bytecode *>(compilecode(cs, val_v.get_str()));
|
||||
}
|
||||
return p_acode;
|
||||
}
|
||||
|
||||
void Alias::push_arg(CsValue const &v, IdentStack &st, bool um) {
|
||||
if (p_astack == &st) {
|
||||
/* prevent cycles and unnecessary code elsewhere */
|
||||
|
|
|
@ -295,7 +295,6 @@ private:
|
|||
};
|
||||
|
||||
struct OSTD_EXPORT Alias: Ident {
|
||||
Bytecode *code;
|
||||
CsValue val_v;
|
||||
|
||||
Alias(ostd::ConstCharRange n, char *a, int flags);
|
||||
|
@ -340,6 +339,7 @@ struct OSTD_EXPORT Alias: Ident {
|
|||
void set_alias(CsState &cs, CsValue &v);
|
||||
|
||||
void clean_code();
|
||||
Bytecode *compile_code(CsState &cs);
|
||||
|
||||
void force_null() {
|
||||
cleanup_value();
|
||||
|
@ -347,6 +347,7 @@ struct OSTD_EXPORT Alias: Ident {
|
|||
}
|
||||
|
||||
private:
|
||||
Bytecode *p_acode;
|
||||
IdentStack *p_astack;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue