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