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
|
a, cs.p_stack, (1<<callargs)-1, argstack
|
||||||
};
|
};
|
||||||
cs.p_stack = &aliaslink;
|
cs.p_stack = &aliaslink;
|
||||||
if (!a->code) {
|
ostd::Uint32 *codep = reinterpret_cast<ostd::Uint32 *>(a->compile_code(cs));
|
||||||
a->code = reinterpret_cast<Bytecode *>(
|
|
||||||
compilecode(cs, a->val_v.get_str())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
ostd::Uint32 *codep = reinterpret_cast<ostd::Uint32 *>(a->code);
|
|
||||||
bcode_incr(codep);
|
bcode_incr(codep);
|
||||||
runcode(cs, codep+1, (result));
|
runcode(cs, codep+1, (result));
|
||||||
bcode_decr(codep);
|
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):
|
Alias::Alias(ostd::ConstCharRange name, char *a, int fl):
|
||||||
Ident(IdentType::alias, name, fl),
|
Ident(IdentType::alias, name, fl),
|
||||||
code(nullptr), p_astack(nullptr)
|
p_acode(nullptr), p_astack(nullptr)
|
||||||
{
|
{
|
||||||
val_v.set_mstr(a);
|
val_v.set_mstr(a);
|
||||||
}
|
}
|
||||||
Alias::Alias(ostd::ConstCharRange name, CsInt a, int fl):
|
Alias::Alias(ostd::ConstCharRange name, CsInt a, int fl):
|
||||||
Ident(IdentType::alias, name, fl),
|
Ident(IdentType::alias, name, fl),
|
||||||
code(nullptr), p_astack(nullptr)
|
p_acode(nullptr), p_astack(nullptr)
|
||||||
{
|
{
|
||||||
val_v.set_int(a);
|
val_v.set_int(a);
|
||||||
}
|
}
|
||||||
Alias::Alias(ostd::ConstCharRange name, CsFloat a, int fl):
|
Alias::Alias(ostd::ConstCharRange name, CsFloat a, int fl):
|
||||||
Ident(IdentType::alias, name, fl),
|
Ident(IdentType::alias, name, fl),
|
||||||
code(nullptr), p_astack(nullptr)
|
p_acode(nullptr), p_astack(nullptr)
|
||||||
{
|
{
|
||||||
val_v.set_float(a);
|
val_v.set_float(a);
|
||||||
}
|
}
|
||||||
Alias::Alias(ostd::ConstCharRange name, int fl):
|
Alias::Alias(ostd::ConstCharRange name, int fl):
|
||||||
Ident(IdentType::alias, name, fl),
|
Ident(IdentType::alias, name, fl),
|
||||||
code(nullptr), p_astack(nullptr)
|
p_acode(nullptr), p_astack(nullptr)
|
||||||
{
|
{
|
||||||
val_v.set_null();
|
val_v.set_null();
|
||||||
}
|
}
|
||||||
Alias::Alias(ostd::ConstCharRange name, CsValue const &v, int fl):
|
Alias::Alias(ostd::ConstCharRange name, CsValue const &v, int fl):
|
||||||
Ident(IdentType::alias, name, 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(
|
Command::Command(
|
||||||
|
@ -254,7 +254,7 @@ CsState::~CsState() {
|
||||||
Alias *a = i->get_alias();
|
Alias *a = i->get_alias();
|
||||||
if (a) {
|
if (a) {
|
||||||
a->force_null();
|
a->force_null();
|
||||||
delete[] reinterpret_cast<ostd::Uint32 *>(a->code);
|
a->clean_code();
|
||||||
} else if (i->is_command() || i->is_special()) {
|
} else if (i->is_command() || i->is_special()) {
|
||||||
delete[] static_cast<Command *>(i)->cargs;
|
delete[] static_cast<Command *>(i)->cargs;
|
||||||
}
|
}
|
||||||
|
@ -723,13 +723,20 @@ void Alias::get_cval(CsValue &v) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Alias::clean_code() {
|
void Alias::clean_code() {
|
||||||
ostd::Uint32 *bcode = reinterpret_cast<ostd::Uint32 *>(code);
|
ostd::Uint32 *bcode = reinterpret_cast<ostd::Uint32 *>(p_acode);
|
||||||
if (bcode) {
|
if (bcode) {
|
||||||
bcode_decr(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) {
|
void Alias::push_arg(CsValue const &v, IdentStack &st, bool um) {
|
||||||
if (p_astack == &st) {
|
if (p_astack == &st) {
|
||||||
/* prevent cycles and unnecessary code elsewhere */
|
/* prevent cycles and unnecessary code elsewhere */
|
||||||
|
|
|
@ -295,7 +295,6 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
struct OSTD_EXPORT Alias: Ident {
|
struct OSTD_EXPORT Alias: Ident {
|
||||||
Bytecode *code;
|
|
||||||
CsValue val_v;
|
CsValue val_v;
|
||||||
|
|
||||||
Alias(ostd::ConstCharRange n, char *a, int flags);
|
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 set_alias(CsState &cs, CsValue &v);
|
||||||
|
|
||||||
void clean_code();
|
void clean_code();
|
||||||
|
Bytecode *compile_code(CsState &cs);
|
||||||
|
|
||||||
void force_null() {
|
void force_null() {
|
||||||
cleanup_value();
|
cleanup_value();
|
||||||
|
@ -347,6 +347,7 @@ struct OSTD_EXPORT Alias: Ident {
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Bytecode *p_acode;
|
||||||
IdentStack *p_astack;
|
IdentStack *p_astack;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue