Преглед на файлове

make `ValueStack` a template class

blueloveTH преди 2 години
родител
ревизия
a7ee33c2e3
променени са 1 файла, в които са добавени 11 реда и са изтрити 9 реда
  1. 11 9
      src/frame.h

+ 11 - 9
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<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];
     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;