don't rely on MAX_ARGUMENTS where not necessary
parent
54c0f2ae20
commit
d1e131dbf6
|
@ -294,7 +294,7 @@ lookupid:
|
||||||
return;
|
return;
|
||||||
case VAL_COND:
|
case VAL_COND:
|
||||||
gs.code.push_back(
|
gs.code.push_back(
|
||||||
(id->get_index() < MAX_ARGUMENTS
|
((id->get_flags() & IDENT_FLAG_ARG)
|
||||||
? BC_INST_LOOKUP_MARG
|
? BC_INST_LOOKUP_MARG
|
||||||
: BC_INST_LOOKUP_M
|
: BC_INST_LOOKUP_M
|
||||||
) | (id->get_index() << 8)
|
) | (id->get_index() << 8)
|
||||||
|
@ -303,7 +303,7 @@ lookupid:
|
||||||
case VAL_CODE:
|
case VAL_CODE:
|
||||||
case VAL_IDENT:
|
case VAL_IDENT:
|
||||||
gs.code.push_back(
|
gs.code.push_back(
|
||||||
(id->get_index() < MAX_ARGUMENTS
|
((id->get_flags() & IDENT_FLAG_ARG)
|
||||||
? BC_INST_LOOKUP_MARG
|
? BC_INST_LOOKUP_MARG
|
||||||
: BC_INST_LOOKUP_M
|
: BC_INST_LOOKUP_M
|
||||||
) | BC_RET_STRING | (id->get_index() << 8)
|
) | BC_RET_STRING | (id->get_index() << 8)
|
||||||
|
@ -311,7 +311,7 @@ lookupid:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
gs.code.push_back(
|
gs.code.push_back(
|
||||||
(id->get_index() < MAX_ARGUMENTS
|
((id->get_flags() & IDENT_FLAG_ARG)
|
||||||
? BC_INST_LOOKUP_ARG
|
? BC_INST_LOOKUP_ARG
|
||||||
: BC_INST_LOOKUP
|
: BC_INST_LOOKUP
|
||||||
) | ret_code(ltype, BC_RET_STRING) |
|
) | ret_code(ltype, BC_RET_STRING) |
|
||||||
|
@ -552,7 +552,7 @@ lookupid:
|
||||||
goto done;
|
goto done;
|
||||||
case ident_type::ALIAS:
|
case ident_type::ALIAS:
|
||||||
gs.code.push_back(
|
gs.code.push_back(
|
||||||
(id->get_index() < MAX_ARGUMENTS
|
((id->get_flags() & IDENT_FLAG_ARG)
|
||||||
? BC_INST_LOOKUP_MARG
|
? BC_INST_LOOKUP_MARG
|
||||||
: BC_INST_LOOKUP_M
|
: BC_INST_LOOKUP_M
|
||||||
) | (id->get_index() << 8)
|
) | (id->get_index() << 8)
|
||||||
|
@ -1054,7 +1054,7 @@ static void compile_alias(codegen_state &gs, alias *id, bool &more, int prevargs
|
||||||
++numargs;
|
++numargs;
|
||||||
}
|
}
|
||||||
gs.code.push_back(
|
gs.code.push_back(
|
||||||
(id->get_index() < MAX_ARGUMENTS ? BC_INST_CALL_ARG : BC_INST_CALL)
|
((id->get_flags() & IDENT_FLAG_ARG) ? BC_INST_CALL_ARG : BC_INST_CALL)
|
||||||
| (numargs << 8) | (id->get_index() << 13)
|
| (numargs << 8) | (id->get_index() << 13)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1244,7 +1244,7 @@ static void compilestatements(codegen_state &gs, int rettype, int brak, int prev
|
||||||
gs.gen_str();
|
gs.gen_str();
|
||||||
}
|
}
|
||||||
gs.code.push_back(
|
gs.code.push_back(
|
||||||
(id->get_index() < MAX_ARGUMENTS
|
((id->get_flags() & IDENT_FLAG_ARG)
|
||||||
? BC_INST_ALIAS_ARG
|
? BC_INST_ALIAS_ARG
|
||||||
: BC_INST_ALIAS
|
: BC_INST_ALIAS
|
||||||
) | (id->get_index() << 8)
|
) | (id->get_index() << 8)
|
||||||
|
|
|
@ -110,7 +110,7 @@ struct codegen_state {
|
||||||
|
|
||||||
void gen_ident(ident *id) {
|
void gen_ident(ident *id) {
|
||||||
code.push_back(
|
code.push_back(
|
||||||
((id->get_index() < MAX_ARGUMENTS)
|
((id->get_flags() & IDENT_FLAG_ARG)
|
||||||
? BC_INST_IDENT_ARG
|
? BC_INST_IDENT_ARG
|
||||||
: BC_INST_IDENT
|
: BC_INST_IDENT
|
||||||
) | (id->get_index() << 8)
|
) | (id->get_index() << 8)
|
||||||
|
|
|
@ -370,7 +370,7 @@ LIBCUBESCRIPT_EXPORT void state::set_alias(
|
||||||
switch (id->get_type()) {
|
switch (id->get_type()) {
|
||||||
case ident_type::ALIAS: {
|
case ident_type::ALIAS: {
|
||||||
alias_impl *a = static_cast<alias_impl *>(id);
|
alias_impl *a = static_cast<alias_impl *>(id);
|
||||||
if (a->get_index() < MAX_ARGUMENTS) {
|
if (a->get_flags() & IDENT_FLAG_ARG) {
|
||||||
a->set_arg(*p_tstate, v);
|
a->set_arg(*p_tstate, v);
|
||||||
} else {
|
} else {
|
||||||
a->set_alias(*p_tstate, v);
|
a->set_alias(*p_tstate, v);
|
||||||
|
@ -653,7 +653,7 @@ state::get_alias_val(std::string_view name) {
|
||||||
if (!a) {
|
if (!a) {
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
if ((a->get_index() < MAX_ARGUMENTS) && !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 a->get_value().get_str();
|
||||||
|
@ -875,7 +875,7 @@ LIBCUBESCRIPT_EXPORT void state::run(
|
||||||
case ident_type::ALIAS: {
|
case ident_type::ALIAS: {
|
||||||
alias *a = static_cast<alias *>(id);
|
alias *a = static_cast<alias *>(id);
|
||||||
if (
|
if (
|
||||||
(a->get_index() < MAX_ARGUMENTS) &&
|
(a->get_flags() & IDENT_FLAG_ARG) &&
|
||||||
!ident_is_used_arg(a, *p_tstate)
|
!ident_is_used_arg(a, *p_tstate)
|
||||||
) {
|
) {
|
||||||
break;
|
break;
|
||||||
|
|
10
src/cs_vm.cc
10
src/cs_vm.cc
|
@ -9,14 +9,14 @@
|
||||||
namespace cubescript {
|
namespace cubescript {
|
||||||
|
|
||||||
static inline void push_alias(state &cs, ident *id, ident_stack &st) {
|
static inline void push_alias(state &cs, ident *id, ident_stack &st) {
|
||||||
if (id->is_alias() && (id->get_index() >= MAX_ARGUMENTS)) {
|
if (id->is_alias() && !(id->get_flags() & IDENT_FLAG_ARG)) {
|
||||||
any_value nv{cs};
|
any_value nv{cs};
|
||||||
static_cast<alias_impl *>(id)->push_arg(nv, st);
|
static_cast<alias_impl *>(id)->push_arg(nv, st);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void pop_alias(ident *id) {
|
static inline void pop_alias(ident *id) {
|
||||||
if (id->is_alias() && (id->get_index() >= MAX_ARGUMENTS)) {
|
if (id->is_alias() && !(id->get_flags() & IDENT_FLAG_ARG)) {
|
||||||
static_cast<alias_impl *>(id)->pop_arg();
|
static_cast<alias_impl *>(id)->pop_arg();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -291,7 +291,7 @@ static inline int get_lookupu_type(
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
(id->get_index() < MAX_ARGUMENTS) &&
|
(id->get_flags() & IDENT_FLAG_ARG) &&
|
||||||
!ident_is_used_arg(id, ts)
|
!ident_is_used_arg(id, ts)
|
||||||
) {
|
) {
|
||||||
return ID_UNKNOWN;
|
return ID_UNKNOWN;
|
||||||
|
@ -734,7 +734,7 @@ std::uint32_t *vm_exec(
|
||||||
id = cs.new_ident(arg.get_str());
|
id = cs.new_ident(arg.get_str());
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
(id->get_index() < MAX_ARGUMENTS) &&
|
(id->get_flags() & IDENT_FLAG_ARG) &&
|
||||||
!ident_is_used_arg(id, ts)
|
!ident_is_used_arg(id, ts)
|
||||||
) {
|
) {
|
||||||
any_value nv{cs};
|
any_value nv{cs};
|
||||||
|
@ -1358,7 +1358,7 @@ noid:
|
||||||
case ID_ALIAS: {
|
case ID_ALIAS: {
|
||||||
alias *a = static_cast<alias *>(id);
|
alias *a = static_cast<alias *>(id);
|
||||||
if (
|
if (
|
||||||
(a->get_index() < MAX_ARGUMENTS) &&
|
(a->get_flags() & IDENT_FLAG_ARG) &&
|
||||||
!ident_is_used_arg(a, ts)
|
!ident_is_used_arg(a, ts)
|
||||||
) {
|
) {
|
||||||
args.resize(offset - 1, any_value{cs});
|
args.resize(offset - 1, any_value{cs});
|
||||||
|
|
Loading…
Reference in New Issue