remove old smallmap

This commit is contained in:
blueloveTH 2024-06-16 21:47:18 +08:00
parent 4b2b92c1ba
commit a634d046be
4 changed files with 9 additions and 14 deletions

View File

@ -64,12 +64,14 @@ struct CodeEmitContext{
int level; int level;
vector<StrName> global_names; vector<StrName> 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; int curr_iblock = 0;
bool is_compiling_class = false; bool is_compiling_class = false;
small_map<std::string_view, int> _co_consts_string_dedup_map; c11_smallmap_s2n _co_consts_string_dedup_map;
int get_loop() const noexcept; int get_loop() const noexcept;
CodeBlock* enter_block(CodeBlockType type) noexcept; CodeBlock* enter_block(CodeBlockType type) noexcept;
@ -119,6 +121,7 @@ struct CodeEmitContext{
// clean // clean
void s_clean() noexcept{ void s_clean() noexcept{
s_debug_info("s_clean"); s_debug_info("s_clean");
c11_smallmap_s2n__dtor(&_co_consts_string_dedup_map);
for(Expr* e: _s_expr) delete_expr(e); for(Expr* e: _s_expr) delete_expr(e);
_s_expr.clear(); _s_expr.clear();
} }

View File

@ -188,7 +188,6 @@ public:
PyObject* __last_exception; PyObject* __last_exception;
PyObject* __curr_class; PyObject* __curr_class;
PyVar __cached_object_new; PyVar __cached_object_new;
small_map<std::string_view, PyVar> __cached_op_funcs;
FuncDecl_ __dynamic_func_decl; FuncDecl_ __dynamic_func_decl;
PyVar __vectorcall_buffer[PK_MAX_CO_VARNAMES]; PyVar __vectorcall_buffer[PK_MAX_CO_VARNAMES];

View File

@ -123,14 +123,14 @@ int CodeEmitContext::add_varname(StrName name) noexcept{
} }
int CodeEmitContext::add_const_string(std::string_view key) 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) { if(val) {
return *val; return *val;
} else { } else {
co->consts.push_back(VAR(key)); co->consts.push_back(VAR(key));
int index = co->consts.size() - 1; int index = co->consts.size() - 1;
key = co->consts.back().obj_get<Str>().sv(); key = co->consts.back().obj_get<Str>().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; return index;
} }
} }

View File

@ -265,15 +265,8 @@ bool VM::py_eq(PyVar lhs, PyVar rhs) {
} }
PyVar VM::py_op(std::string_view name) { PyVar VM::py_op(std::string_view name) {
PyVar func; // TODO: cache the result
auto it = __cached_op_funcs.try_get(name); return py_import("operator")->attr()[StrName::get(name)];
if(it == nullptr) {
func = py_import("operator")->attr()[StrName::get(name)];
__cached_op_funcs.insert(name, func);
} else {
func = *it;
}
return func;
} }
i64 VM::normalized_index(i64 index, int size) { i64 VM::normalized_index(i64 index, int size) {