]> git.vpit.fr Git - perl/modules/Scope-Upper.git/blobdiff - Upper.xs
Fix for {ENTER,LEAVE}_with_name
[perl/modules/Scope-Upper.git] / Upper.xs
index af2a1d4b27c4f03214090af4bf039fc4b11602e9..9c28d1720059cf4d7b7a1173af352210233e8d6f 100644 (file)
--- a/Upper.xs
+++ b/Upper.xs
 # define HvNAME_get(H) HvNAME(H)
 #endif
 
+#ifndef ENTER_with_name
+# define ENTER_with_name(N) ENTER
+#endif
+
+#ifndef LEAVE_with_name
+# define LEAVE_with_name(N) LEAVE
+#endif
+
 #ifndef gv_fetchpvn_flags
 # define gv_fetchpvn_flags(A, B, C, D) gv_fetchpv((A), (C), (D))
 #endif
@@ -293,8 +301,8 @@ STATIC void su_call(pTHX_ void *ud_) {
  PUSHMARK(SP);
  PUTBACK;
 
- /* If cxstack_ix isn't incremented there, the eval context will be overwritten
-  * when the new sub scope will be created in call_sv. */
+ /* If the recently popped context isn't saved there, it will be overwritten by
+  * the sub scope from call_sv, although it's still needed in our caller. */
 
 #if SU_HAS_PERL(5, 9, 5)
  if (dieing) {
@@ -491,7 +499,7 @@ STATIC I32 su_init(pTHX_ I32 cxix, void *ud, I32 size) {
 #define su_init(L, U, S) su_init(aTHX_ (L), (U), (S))
  I32 i, depth = 0, *origin;
 
- LEAVE;
+ LEAVE_with_name("sub");
 
  if (cxix >= cxstack_ix) {
   SU_UD_HANDLER(ud)(aTHX_ ud);
@@ -551,7 +559,7 @@ STATIC I32 su_init(pTHX_ I32 cxix, void *ud, I32 size) {
  SAVEDESTRUCTOR_X(su_pop, ud);
 
 done:
- ENTER;
+ ENTER_with_name("sub");
 
  return depth;
 }