From a634d046be9fdfe4382aae1c81588dfd9dfe40c5 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Sun, 16 Jun 2024 21:47:18 +0800 Subject: [PATCH] remove old smallmap --- include/pocketpy/compiler/expr.hpp | 7 +++++-- include/pocketpy/interpreter/vm.hpp | 1 - src/compiler/expr.cpp | 4 ++-- src/interpreter/vm.cpp | 11 ++--------- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/include/pocketpy/compiler/expr.hpp b/include/pocketpy/compiler/expr.hpp index bfb0d1e5..bf38468f 100644 --- a/include/pocketpy/compiler/expr.hpp +++ b/include/pocketpy/compiler/expr.hpp @@ -64,12 +64,14 @@ struct CodeEmitContext{ int level; vector global_names; - CodeEmitContext(VM* vm, CodeObject_ co, int level) : vm(vm), co(co), level(level) {} + CodeEmitContext(VM* vm, CodeObject_ co, int level) : vm(vm), co(co), level(level) { + c11_smallmap_s2n__ctor(&_co_consts_string_dedup_map); + } int curr_iblock = 0; bool is_compiling_class = false; - small_map _co_consts_string_dedup_map; + c11_smallmap_s2n _co_consts_string_dedup_map; int get_loop() const noexcept; CodeBlock* enter_block(CodeBlockType type) noexcept; @@ -119,6 +121,7 @@ struct CodeEmitContext{ // clean void s_clean() noexcept{ s_debug_info("s_clean"); + c11_smallmap_s2n__dtor(&_co_consts_string_dedup_map); for(Expr* e: _s_expr) delete_expr(e); _s_expr.clear(); } diff --git a/include/pocketpy/interpreter/vm.hpp b/include/pocketpy/interpreter/vm.hpp index ddea3931..27c51ee4 100644 --- a/include/pocketpy/interpreter/vm.hpp +++ b/include/pocketpy/interpreter/vm.hpp @@ -188,7 +188,6 @@ public: PyObject* __last_exception; PyObject* __curr_class; PyVar __cached_object_new; - small_map __cached_op_funcs; FuncDecl_ __dynamic_func_decl; PyVar __vectorcall_buffer[PK_MAX_CO_VARNAMES]; diff --git a/src/compiler/expr.cpp b/src/compiler/expr.cpp index b4bc8af2..18ca583f 100644 --- a/src/compiler/expr.cpp +++ b/src/compiler/expr.cpp @@ -123,14 +123,14 @@ int CodeEmitContext::add_varname(StrName name) noexcept{ } int CodeEmitContext::add_const_string(std::string_view key) noexcept{ - int* val = _co_consts_string_dedup_map.try_get(key); + uint16_t* val = c11_smallmap_s2n__try_get(&_co_consts_string_dedup_map, {key.data(), (int)key.size()}); if(val) { return *val; } else { co->consts.push_back(VAR(key)); int index = co->consts.size() - 1; key = co->consts.back().obj_get().sv(); - _co_consts_string_dedup_map.insert(key, index); + c11_smallmap_s2n__set(&_co_consts_string_dedup_map, {key.data(), (int)key.size()}, index); return index; } } diff --git a/src/interpreter/vm.cpp b/src/interpreter/vm.cpp index ecbe72fb..28a1e486 100644 --- a/src/interpreter/vm.cpp +++ b/src/interpreter/vm.cpp @@ -265,15 +265,8 @@ bool VM::py_eq(PyVar lhs, PyVar rhs) { } PyVar VM::py_op(std::string_view name) { - PyVar func; - auto it = __cached_op_funcs.try_get(name); - if(it == nullptr) { - func = py_import("operator")->attr()[StrName::get(name)]; - __cached_op_funcs.insert(name, func); - } else { - func = *it; - } - return func; + // TODO: cache the result + return py_import("operator")->attr()[StrName::get(name)]; } i64 VM::normalized_index(i64 index, int size) {