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(); }
};
template<size_t MAX_SIZE>
struct ValueStackImpl {
// We allocate extra MAX_SIZE/128 places to keep `_sp` valid when `is_overflow() == true`.
PyObject* _begin[MAX_SIZE + MAX_SIZE/128];
struct ValueStack {
// We allocate extra PK_VM_STACK_SIZE/128 places to keep `_sp` valid when `is_overflow() == true`.
PyObject* _begin[PK_VM_STACK_SIZE + PK_VM_STACK_SIZE/128];
PyObject** _sp;
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() const { return _sp[-1]; }
@ -68,14 +67,12 @@ struct ValueStackImpl {
PyObject* operator[](int i) const { return _begin[i]; }
PyObject*& operator[](int i) { return _begin[i]; }
ValueStackImpl(const ValueStackImpl&) = delete;
ValueStackImpl(ValueStackImpl&&) = delete;
ValueStackImpl& operator=(const ValueStackImpl&) = delete;
ValueStackImpl& operator=(ValueStackImpl&&) = delete;
ValueStack(const ValueStack&) = delete;
ValueStack(ValueStack&&) = delete;
ValueStack& operator=(const ValueStack&) = delete;
ValueStack& operator=(ValueStack&&) = delete;
};
using ValueStack = ValueStackImpl<PK_VM_STACK_SIZE>;
struct Frame {
int _ip;
int _next_ip;