more cleanups

master
Daniel Kolesa 2016-08-21 00:51:45 +01:00
parent 5c3aa477d2
commit d80e922913
3 changed files with 18 additions and 15 deletions

View File

@ -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);

View File

@ -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 */

View File

@ -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;
};