#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "ppport.h"




/* Global Data */

#define MY_CXT_KEY "Hook::Scope::_guts" XS_VERSION

typedef struct {
    /* Put Global Data in here */
    int dummy;		/* you can access this elsewhere as MY_CXT.dummy */
} my_cxt_t;

START_MY_CXT

void
exec_leave(pTHX_ SV* hook) {
  dSP;
  ENTER;
  SAVETMPS;
  PUSHMARK(SP);
  PUTBACK;
  call_sv(hook, G_VOID);
  SPAGAIN;
  PUTBACK;
  FREETMPS;
  LEAVE;
  SvREFCNT_dec(hook);
}

MODULE = Hook::Scope		PACKAGE = Hook::Scope		

PROTOTYPES: ENABLE

void
POST(SV* hook)
PROTOTYPE: &
PPCODE:
{
  LEAVE;
  SAVEDESTRUCTOR_X(exec_leave,newSVsv(hook));
  ENTER;
}


BOOT:
{
    MY_CXT_INIT;
    /* If any of the fields in the my_cxt_t struct need
       to be initialised, do it here.
     */
}