Add S_scan_ident from toke.c.
[p5sagit/Devel-Declare.git] / Declare.xs
index af640e9..635d946 100644 (file)
@@ -194,6 +194,7 @@ int dd_toke_skipspace(pTHX_ int offset) {
 /* replacement PL_check rv2cv entry */
 
 STATIC OP *dd_ck_rv2cv(pTHX_ OP *o, void *user_data) {
+  dSP;
   OP* kid;
   int dd_flags;
 
@@ -206,13 +207,11 @@ STATIC OP *dd_ck_rv2cv(pTHX_ OP *o, void *user_data) {
       printf("linestr len: %i\n", PL_bufend - SvPVX(PL_linestr));
     }
 
-    dSP;
-  
     ENTER;
     SAVETMPS;
-  
+
     PUSHMARK(SP);
-  
+
     call_pv("Devel::Declare::done_declare", G_VOID|G_DISCARD);
 
     FREETMPS;
@@ -257,9 +256,16 @@ STATIC OP *dd_ck_rv2cv(pTHX_ OP *o, void *user_data) {
 
 OP* dd_pp_entereval(pTHX) {
   dSP;
-  dPOPss;
   STRLEN len;
   const char* s;
+  SV *sv;
+#ifdef PERL_5_9_PLUS
+  SV *saved_hh;
+  if (PL_op->op_private & OPpEVAL_HAS_HH) {
+    saved_hh = POPs;
+  }
+#endif
+  sv = POPs;
   if (SvPOK(sv)) {
     if (dd_debug) {
       printf("mangling eval sv\n");
@@ -276,6 +282,11 @@ OP* dd_pp_entereval(pTHX) {
     SvGROW(sv, 8192);
   }
   PUSHs(sv);
+#ifdef PERL_5_9_PLUS
+  if (PL_op->op_private & OPpEVAL_HAS_HH) {
+    PUSHs(saved_hh);
+  }
+#endif
   return PL_ppaddr[OP_ENTEREVAL](aTHX);
 }