some optimize

This commit is contained in:
blueloveTH 2024-03-17 19:22:17 +08:00
parent f48db51d7c
commit 6b57c684e4
2 changed files with 9 additions and 4 deletions

View File

@ -7,11 +7,15 @@ namespace pkpy{
vm->bind_notimplemented_constructor<RangeIter>(type); vm->bind_notimplemented_constructor<RangeIter>(type);
vm->bind__iter__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* obj){ return obj; }); vm->bind__iter__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* obj){ return obj; });
vm->bind__next__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* obj){ vm->bind__next__(PK_OBJ_GET(Type, type), [](VM* vm, PyObject* obj){
RangeIter& self = _CAST(RangeIter&, obj); RangeIter& self = PK_OBJ_GET(RangeIter, obj);
bool has_next = self.r.step > 0 ? self.current < self.r.stop : self.current > self.r.stop; if(self.r.step > 0){
if(!has_next) return vm->StopIteration; if(self.current >= self.r.stop) return vm->StopIteration;
}else{
if(self.current <= self.r.stop) return vm->StopIteration;
}
PyObject* ret = VAR(self.current);
self.current += self.r.step; self.current += self.r.step;
return VAR(self.current - self.r.step); return ret;
}); });
} }

View File

@ -352,6 +352,7 @@ void init_builtins(VM* _vm) {
case 3: r.start = CAST(i64, args[0]); r.stop = CAST(i64, args[1]); r.step = CAST(i64, args[2]); break; case 3: r.start = CAST(i64, args[0]); r.stop = CAST(i64, args[1]); r.step = CAST(i64, args[2]); break;
default: vm->TypeError("expected 1-3 arguments, got " + std::to_string(args.size())); default: vm->TypeError("expected 1-3 arguments, got " + std::to_string(args.size()));
} }
if(r.step == 0) vm->ValueError("range() arg 3 must not be zero");
return VAR(r); return VAR(r);
}); });