From a7ee33c2e32be0195b3651284b49ebad9b5964ec Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Mon, 1 May 2023 19:59:28 +0800 Subject: [PATCH] make `ValueStack` a template class --- src/frame.h | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/frame.h b/src/frame.h index 150e75c4..c5f0164a 100644 --- a/src/frame.h +++ b/src/frame.h @@ -58,13 +58,13 @@ struct FastLocals{ } }; -struct ValueStack { - static const size_t MAX_SIZE = 32768; - // We allocate 512 more bytes to keep `_sp` valid when `is_overflow() == true`. - PyObject* _begin[MAX_SIZE + 512]; +template +struct ValueStackImpl { + // We allocate extra MAX_SIZE/128 places to keep `_sp` valid when `is_overflow() == true`. + PyObject* _begin[MAX_SIZE + MAX_SIZE/128]; PyObject** _sp; - ValueStack(): _sp(_begin) {} + ValueStackImpl(): _sp(_begin) {} PyObject*& top(){ return _sp[-1]; } PyObject* top() const { return _sp[-1]; } @@ -92,12 +92,14 @@ struct ValueStack { void clear() { _sp = _begin; } bool is_overflow() const { return _sp >= _begin + MAX_SIZE; } - ValueStack(const ValueStack&) = delete; - ValueStack(ValueStack&&) = delete; - ValueStack& operator=(const ValueStack&) = delete; - ValueStack& operator=(ValueStack&&) = delete; + ValueStackImpl(const ValueStackImpl&) = delete; + ValueStackImpl(ValueStackImpl&&) = delete; + ValueStackImpl& operator=(const ValueStackImpl&) = delete; + ValueStackImpl& operator=(ValueStackImpl&&) = delete; }; +using ValueStack = ValueStackImpl<32768>; + struct Frame { int _ip = -1; int _next_ip = 0;