This commit is contained in:
blueloveTH 2023-04-15 10:31:59 +08:00
parent 1e3e88d832
commit c2a9b77a18
4 changed files with 18 additions and 11 deletions

View File

@ -69,7 +69,8 @@ inline PyObject* Generator::next(){
frame = std::move(vm->callstack.top());
vm->callstack.pop();
state = 1;
return frame.popx();
PyObject** _sp = frame._sp;
return POPX();
}else{
state = 2;
return nullptr;

View File

@ -139,11 +139,11 @@ struct Py_ final: PyObject {
};
#define OBJ_GET(T, obj) (((Py_<T>*)(obj))->_value)
#define OBJ_MARK(obj) if(!is_tagged(obj)) obj->_obj_gc_mark()
#define OBJ_MARK(obj) if(!is_tagged(obj)) (obj)->_obj_gc_mark()
Str obj_type_name(VM* vm, Type type);
#if DEBUG_NO_BUILTIN_MODULES
#if DEBUG_NO_BUILTIN_MODULES || DEBUG_NO_NAME_GETTER
#define OBJ_NAME(obj) Str("<?>")
#else
#define OBJ_NAME(obj) OBJ_GET(Str, vm->getattr(obj, __name__))

View File

@ -60,13 +60,6 @@ public:
PyObject** begin() const { return _args; }
PyObject** end() const { return _args + _size; }
List to_list() noexcept {
List ret(_size);
// TODO: use move/memcpy
for(int i=0; i<_size; i++) ret[i] = _args[i];
return ret;
}
void extend_self(PyObject* self){
PyObject** old_args = _args;
int old_size = _size;
@ -99,6 +92,18 @@ struct ArgsView{
int size() const { return _end - _begin; }
bool empty() const { return _begin == _end; }
PyObject* operator[](int i) const { return _begin[i]; }
List to_list() const{
List ret(size());
for(int i=0; i<size(); i++) ret[i] = _begin[i];
return ret;
}
Tuple to_tuple() const{
Tuple ret(size());
for(int i=0; i<size(); i++) ret[i] = _begin[i];
return ret;
}
};
} // namespace pkpy

View File

@ -897,7 +897,8 @@ inline void VM::_error(Exception e){
e.is_re = false;
throw e;
}
top_frame()->push(VAR(e));
PyObject** _sp = top_frame()->_sp;
PUSH(VAR(e));
_raise();
}