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()); frame = std::move(vm->callstack.top());
vm->callstack.pop(); vm->callstack.pop();
state = 1; state = 1;
return frame.popx(); PyObject** _sp = frame._sp;
return POPX();
}else{ }else{
state = 2; state = 2;
return nullptr; return nullptr;

View File

@ -139,11 +139,11 @@ struct Py_ final: PyObject {
}; };
#define OBJ_GET(T, obj) (((Py_<T>*)(obj))->_value) #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); 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("<?>") #define OBJ_NAME(obj) Str("<?>")
#else #else
#define OBJ_NAME(obj) OBJ_GET(Str, vm->getattr(obj, __name__)) #define OBJ_NAME(obj) OBJ_GET(Str, vm->getattr(obj, __name__))

View File

@ -60,13 +60,6 @@ public:
PyObject** begin() const { return _args; } PyObject** begin() const { return _args; }
PyObject** end() const { return _args + _size; } 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){ void extend_self(PyObject* self){
PyObject** old_args = _args; PyObject** old_args = _args;
int old_size = _size; int old_size = _size;
@ -99,6 +92,18 @@ struct ArgsView{
int size() const { return _end - _begin; } int size() const { return _end - _begin; }
bool empty() const { return _begin == _end; } bool empty() const { return _begin == _end; }
PyObject* operator[](int i) const { return _begin[i]; } 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 } // namespace pkpy

View File

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