mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 03:20:18 +00:00
some fix
This commit is contained in:
parent
acf0e16cbb
commit
4ac915e25c
@ -91,11 +91,17 @@ struct SmallNameDict{
|
||||
uint16_t capacity() const { return PK_SMALL_NAME_DICT_CAPACITY; }
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct NameDictItem{
|
||||
StrName first;
|
||||
T second;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct LargeNameDict {
|
||||
PK_ALWAYS_PASS_BY_POINTER(LargeNameDict)
|
||||
|
||||
using Item = std::pair<StrName, T>;
|
||||
using Item = NameDictItem<T>;
|
||||
static constexpr uint16_t kInitialCapacity = 32;
|
||||
static_assert(is_pod<T>::value);
|
||||
|
||||
@ -223,8 +229,8 @@ while(!_items[i].first.empty()) { \
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<StrName> keys() const {
|
||||
std::vector<StrName> v;
|
||||
pod_vector<StrName> keys() const {
|
||||
pod_vector<StrName> v;
|
||||
for(uint16_t i=0; i<_capacity; i++){
|
||||
if(_items[i].first.empty()) continue;
|
||||
v.push_back(_items[i].first);
|
||||
@ -307,18 +313,18 @@ struct NameDictImpl{
|
||||
else _large.apply(func);
|
||||
}
|
||||
|
||||
std::vector<StrName> keys() const{
|
||||
std::vector<StrName> v;
|
||||
pod_vector<StrName> keys() const{
|
||||
pod_vector<StrName> v;
|
||||
apply([&](StrName key, V val){
|
||||
v.push_back(key);
|
||||
});
|
||||
return v;
|
||||
}
|
||||
|
||||
std::vector<std::pair<StrName, V>> items() const{
|
||||
std::vector<std::pair<StrName, V>> v;
|
||||
pod_vector<NameDictItem<V>> items() const{
|
||||
pod_vector<NameDictItem<V>> v;
|
||||
apply([&](StrName key, V val){
|
||||
v.push_back({key, val});
|
||||
v.push_back(NameDictItem<V>{key, val});
|
||||
});
|
||||
return v;
|
||||
}
|
||||
|
@ -1132,15 +1132,15 @@ void init_builtins(VM* _vm) {
|
||||
_vm->bind_method<0>(VM::tp_mappingproxy, "values", [](VM* vm, ArgsView args) {
|
||||
MappingProxy& self = _CAST(MappingProxy&, args[0]);
|
||||
List values;
|
||||
for(auto& item : self.attr().items()) values.push_back(item.second);
|
||||
for(auto [k, v] : self.attr().items()) values.push_back(v);
|
||||
return VAR(std::move(values));
|
||||
});
|
||||
|
||||
_vm->bind_method<0>(VM::tp_mappingproxy, "items", [](VM* vm, ArgsView args) {
|
||||
MappingProxy& self = _CAST(MappingProxy&, args[0]);
|
||||
List items;
|
||||
for(auto& item : self.attr().items()){
|
||||
PyObject* t = VAR(Tuple(VAR(item.first.sv()), item.second));
|
||||
for(auto [k, v] : self.attr().items()){
|
||||
PyObject* t = VAR(Tuple(VAR(k.sv()), v));
|
||||
items.push_back(std::move(t));
|
||||
}
|
||||
return VAR(std::move(items));
|
||||
@ -1180,11 +1180,11 @@ void init_builtins(VM* _vm) {
|
||||
ss << "mappingproxy({";
|
||||
bool first = true;
|
||||
vm->_repr_recursion_set.insert(_0);
|
||||
for(auto& item : self.attr().items()){
|
||||
for(auto [k, v] : self.attr().items()){
|
||||
if(!first) ss << ", ";
|
||||
first = false;
|
||||
ss << item.first.escape() << ": ";
|
||||
ss << CAST(Str, vm->py_repr(item.second));
|
||||
ss << k.escape() << ": ";
|
||||
ss << CAST(Str, vm->py_repr(v));
|
||||
}
|
||||
vm->_repr_recursion_set.erase(_0);
|
||||
ss << "})";
|
||||
|
Loading…
x
Reference in New Issue
Block a user