From d1e131dbf62016e23fc3673e5d163e9611301191 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Sat, 27 Mar 2021 23:43:55 +0100 Subject: [PATCH] don't rely on MAX_ARGUMENTS where not necessary --- src/cs_gen.cc | 12 ++++++------ src/cs_gen.hh | 2 +- src/cs_state.cc | 6 +++--- src/cs_vm.cc | 10 +++++----- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/cs_gen.cc b/src/cs_gen.cc index a82f8ea..9ad0d58 100644 --- a/src/cs_gen.cc +++ b/src/cs_gen.cc @@ -294,7 +294,7 @@ lookupid: return; case VAL_COND: gs.code.push_back( - (id->get_index() < MAX_ARGUMENTS + ((id->get_flags() & IDENT_FLAG_ARG) ? BC_INST_LOOKUP_MARG : BC_INST_LOOKUP_M ) | (id->get_index() << 8) @@ -303,7 +303,7 @@ lookupid: case VAL_CODE: case VAL_IDENT: gs.code.push_back( - (id->get_index() < MAX_ARGUMENTS + ((id->get_flags() & IDENT_FLAG_ARG) ? BC_INST_LOOKUP_MARG : BC_INST_LOOKUP_M ) | BC_RET_STRING | (id->get_index() << 8) @@ -311,7 +311,7 @@ lookupid: break; default: gs.code.push_back( - (id->get_index() < MAX_ARGUMENTS + ((id->get_flags() & IDENT_FLAG_ARG) ? BC_INST_LOOKUP_ARG : BC_INST_LOOKUP ) | ret_code(ltype, BC_RET_STRING) | @@ -552,7 +552,7 @@ lookupid: goto done; case ident_type::ALIAS: gs.code.push_back( - (id->get_index() < MAX_ARGUMENTS + ((id->get_flags() & IDENT_FLAG_ARG) ? BC_INST_LOOKUP_MARG : BC_INST_LOOKUP_M ) | (id->get_index() << 8) @@ -1054,7 +1054,7 @@ static void compile_alias(codegen_state &gs, alias *id, bool &more, int prevargs ++numargs; } 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) ); } @@ -1244,7 +1244,7 @@ static void compilestatements(codegen_state &gs, int rettype, int brak, int prev gs.gen_str(); } gs.code.push_back( - (id->get_index() < MAX_ARGUMENTS + ((id->get_flags() & IDENT_FLAG_ARG) ? BC_INST_ALIAS_ARG : BC_INST_ALIAS ) | (id->get_index() << 8) diff --git a/src/cs_gen.hh b/src/cs_gen.hh index 259ad85..3e55480 100644 --- a/src/cs_gen.hh +++ b/src/cs_gen.hh @@ -110,7 +110,7 @@ struct codegen_state { void gen_ident(ident *id) { code.push_back( - ((id->get_index() < MAX_ARGUMENTS) + ((id->get_flags() & IDENT_FLAG_ARG) ? BC_INST_IDENT_ARG : BC_INST_IDENT ) | (id->get_index() << 8) diff --git a/src/cs_state.cc b/src/cs_state.cc index a5ad3c5..f3a4d40 100644 --- a/src/cs_state.cc +++ b/src/cs_state.cc @@ -370,7 +370,7 @@ LIBCUBESCRIPT_EXPORT void state::set_alias( switch (id->get_type()) { case ident_type::ALIAS: { alias_impl *a = static_cast(id); - if (a->get_index() < MAX_ARGUMENTS) { + if (a->get_flags() & IDENT_FLAG_ARG) { a->set_arg(*p_tstate, v); } else { a->set_alias(*p_tstate, v); @@ -653,7 +653,7 @@ state::get_alias_val(std::string_view name) { if (!a) { 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 a->get_value().get_str(); @@ -875,7 +875,7 @@ LIBCUBESCRIPT_EXPORT void state::run( case ident_type::ALIAS: { alias *a = static_cast(id); if ( - (a->get_index() < MAX_ARGUMENTS) && + (a->get_flags() & IDENT_FLAG_ARG) && !ident_is_used_arg(a, *p_tstate) ) { break; diff --git a/src/cs_vm.cc b/src/cs_vm.cc index edaa19e..4b2597d 100644 --- a/src/cs_vm.cc +++ b/src/cs_vm.cc @@ -9,14 +9,14 @@ namespace cubescript { 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}; static_cast(id)->push_arg(nv, st); } } 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(id)->pop_arg(); } } @@ -291,7 +291,7 @@ static inline int get_lookupu_type( break; } if ( - (id->get_index() < MAX_ARGUMENTS) && + (id->get_flags() & IDENT_FLAG_ARG) && !ident_is_used_arg(id, ts) ) { return ID_UNKNOWN; @@ -734,7 +734,7 @@ std::uint32_t *vm_exec( id = cs.new_ident(arg.get_str()); } if ( - (id->get_index() < MAX_ARGUMENTS) && + (id->get_flags() & IDENT_FLAG_ARG) && !ident_is_used_arg(id, ts) ) { any_value nv{cs}; @@ -1358,7 +1358,7 @@ noid: case ID_ALIAS: { alias *a = static_cast(id); if ( - (a->get_index() < MAX_ARGUMENTS) && + (a->get_flags() & IDENT_FLAG_ARG) && !ident_is_used_arg(a, ts) ) { args.resize(offset - 1, any_value{cs});