This commit is contained in:
blueloveTH 2024-03-18 12:42:05 +08:00
parent 6b57c684e4
commit 5cb31814be

View File

@ -28,16 +28,15 @@ struct FastLocals{
PyObject** end() const { return a + size(); } PyObject** end() const { return a + size(); }
}; };
template<size_t MAX_SIZE> struct ValueStack {
struct ValueStackImpl { // We allocate extra PK_VM_STACK_SIZE/128 places to keep `_sp` valid when `is_overflow() == true`.
// We allocate extra MAX_SIZE/128 places to keep `_sp` valid when `is_overflow() == true`. PyObject* _begin[PK_VM_STACK_SIZE + PK_VM_STACK_SIZE/128];
PyObject* _begin[MAX_SIZE + MAX_SIZE/128];
PyObject** _sp; PyObject** _sp;
PyObject** _max_end; PyObject** _max_end;
static constexpr size_t max_size() { return MAX_SIZE; } static constexpr size_t max_size() { return PK_VM_STACK_SIZE; }
ValueStackImpl(): _sp(_begin), _max_end(_begin + MAX_SIZE) {} ValueStack(): _sp(_begin), _max_end(_begin + PK_VM_STACK_SIZE) {}
PyObject*& top(){ return _sp[-1]; } PyObject*& top(){ return _sp[-1]; }
PyObject* top() const { return _sp[-1]; } PyObject* top() const { return _sp[-1]; }
@ -68,14 +67,12 @@ struct ValueStackImpl {
PyObject* operator[](int i) const { return _begin[i]; } PyObject* operator[](int i) const { return _begin[i]; }
PyObject*& operator[](int i) { return _begin[i]; } PyObject*& operator[](int i) { return _begin[i]; }
ValueStackImpl(const ValueStackImpl&) = delete; ValueStack(const ValueStack&) = delete;
ValueStackImpl(ValueStackImpl&&) = delete; ValueStack(ValueStack&&) = delete;
ValueStackImpl& operator=(const ValueStackImpl&) = delete; ValueStack& operator=(const ValueStack&) = delete;
ValueStackImpl& operator=(ValueStackImpl&&) = delete; ValueStack& operator=(ValueStack&&) = delete;
}; };
using ValueStack = ValueStackImpl<PK_VM_STACK_SIZE>;
struct Frame { struct Frame {
int _ip; int _ip;
int _next_ip; int _next_ip;