added patch for overloading constants, made PERL_OBJECT-aware
[p5sagit/p5-mst-13.2.git] / scope.h
diff --git a/scope.h b/scope.h
index 3c38a1f..2bccd63 100644 (file)
--- a/scope.h
+++ b/scope.h
 #define SAVEt_REGCONTEXT 21
 #define SAVEt_STACK_POS  22
 #define SAVEt_I16      23
-#define SAVEt_OP       24
+#define SAVEt_AELEM     24
+#define SAVEt_HELEM     25
+#define SAVEt_OP       26
+#define SAVEt_NOHINTS  27
 
 #define SSCHECK(need) if (savestack_ix + need > savestack_max) savestack_grow()
 #define SSPUSHINT(i) (savestack[savestack_ix++].any_i32 = (I32)(i))
 #define SAVECLEARSV(sv)        save_clearsv(SOFT_CAST(SV**)&(sv))
 #define SAVEDELETE(h,k,l) \
          save_delete(SOFT_CAST(HV*)(h), SOFT_CAST(char*)(k), (I32)(l))
+#ifdef PERL_OBJECT
+#define CALLDESTRUCTOR this->*SSPOPDPTR
 #define SAVEDESTRUCTOR(f,p) \
-         save_destructor(SOFT_CAST(void(*)_((void*)))(f),SOFT_CAST(void*)(p))
+         save_destructor((DESTRUCTORFUNC)(FUNC_NAME_TO_PTR(f)),        \
+                         SOFT_CAST(void*)(p))
+#else
+#define CALLDESTRUCTOR *SSPOPDPTR
+#define SAVEDESTRUCTOR(f,p) \
+         save_destructor(SOFT_CAST(void(*)_((void*)))(FUNC_NAME_TO_PTR(f)), \
+                         SOFT_CAST(void*)(p))
+#endif
 #define SAVESTACK_POS() STMT_START {   \
     SSCHECK(2);                                \
     SSPUSHINT(stack_sp - stack_base);  \
     SSPUSHINT(SAVEt_STACK_POS);                \
  } STMT_END
 #define SAVEOP()       save_op()
-
+#define SAVEHINTS() STMT_START {       \
+    if (hints & HINT_LOCALIZE_HH)      \
+       save_hints();                   \
+    else {                             \
+       SSPUSHINT(hints);               \
+       SSPUSHINT(SAVEt_NOHINTS);       \
+    }                                  \
+ } STMT_END
 /* A jmpenv packages the state required to perform a proper non-local jump.
  * Note that there is a start_env initialized when perl starts, and top_env
  * points to this initially, so top_env should always be non-null.