This commit is contained in:
blueloveTH 2024-03-27 16:07:21 +08:00
parent 3de540447a
commit 29421ba691
5 changed files with 11 additions and 16 deletions

View File

@ -36,10 +36,10 @@ struct Str{
bool empty() const { return size == 0; }
size_t hash() const{ return std::hash<std::string_view>()(sv()); }
Str& operator=(const Str& other);
Str operator+(const Str& other) const;
friend Str operator+(const char* p, const Str& str);
Str operator+(const char* p) const;
Str& operator=(const Str&);
Str operator+(const Str&) const;
Str operator+(const char*) const;
friend Str operator+(const char*, const Str&);
bool operator==(const std::string_view other) const;
bool operator!=(const std::string_view other) const;
@ -112,11 +112,11 @@ struct StrName {
}
bool operator<(const StrName& other) const noexcept {
return this->index < other.index;
return sv() < other.sv();
}
bool operator>(const StrName& other) const noexcept {
return this->index > other.index;
return sv() > other.sv();
}
static bool is_valid(int index);
@ -126,10 +126,6 @@ struct StrName {
static uint32_t _pesudo_random_index;
};
struct StrNameComparator {
bool operator()(const StrName& a, const StrName& b) const;
};
struct SStream{
PK_ALWAYS_PASS_BY_POINTER(SStream)
// pod_vector<T> is allocated by pool64 so the buffer can be moved into Str without a copy

View File

@ -294,7 +294,7 @@ void init_builtins(VM* _vm) {
});
_vm->bind_func<1>(_vm->builtins, "dir", [](VM* vm, ArgsView args) {
std::set<StrName, StrNameComparator> names;
std::set<StrName> names;
if(!is_tagged(args[0]) && args[0]->is_attr_valid()){
auto keys = args[0]->attr().keys();
names.insert(keys.begin(), keys.end());

View File

@ -406,10 +406,6 @@ int utf8len(unsigned char c, bool suppress){
return _r_interned().find(index) != _r_interned().end();
}
bool StrNameComparator::operator()(const StrName& a, const StrName& b) const {
return a._r_interned()[a.index] < b._r_interned()[b.index];
}
Str SStream::str(){
// after this call, the buffer is no longer valid
buffer.reserve(buffer.size() + 1); // allocate one more byte for '\0'

View File

@ -276,7 +276,7 @@ namespace pkpy{
if(i != 0) ss << ".";
ss << cpnts[i];
}
return Str(ss.str());
return ss.str();
};
if(path[0] == '.'){

View File

@ -630,3 +630,6 @@ def f(a, b):
return sum([b, c])
assert f(1, 2) == 3
dir_int = dir(int)
assert dir_int[:4] == ['__add__', '__and__', '__base__', '__eq__']