difforig B-Hooks-Parser-0.08 diff -u B-Hooks-Parser-0.08/stolen_chunk_of_toke.c.orig --- B-Hooks-Parser-0.08/stolen_chunk_of_toke.c.orig 2008-11-04 02:47:43.000000000 +0100 +++ B-Hooks-Parser-0.08/stolen_chunk_of_toke.c 2009-05-06 14:54:58.296875000 +0200 @@ -39,7 +39,7 @@ #define DPTR2FPTR(t,p) ((t)PTR2nat(p)) /* data pointer to function pointer */ #define FPTR2DPTR(t,p) ((t)PTR2nat(p)) /* function pointer to data pointer */ #define PTR2nat(p) (PTRV)(p) /* pointer to integer of PTRSIZE */ -#define MEM_WRAP_CHECK_(n,t) MEM_WRAP_CHECK(n,t), +/*#define MEM_WRAP_CHECK_(n,t) MEM_WRAP_CHECK(n,t),*/ /* On MacOS, respect nonbreaking spaces */ #ifdef MACOS_TRADITIONAL @@ -92,10 +92,16 @@ #define PL_multi_close (PL_parser->multi_close) #define PL_multi_end (PL_parser->multi_end) #define PL_lex_repl (PL_parser->lex_repl) -#define PL_nexttype (PL_parser->nexttype) #define PL_nexttoke (PL_parser->nexttoke) #define PL_lex_defer (PL_parser->lex_defer) #define PL_lex_expect (PL_parser->lex_expect) +# ifdef PERL_MAD +# define PL_curforce (PL_parser->curforce) +# define PL_lasttoke (PL_parser->lasttoke) +# else +# define PL_nexttype (PL_parser->nexttype) +# define PL_nextval (PL_parser->nextval) +# endif #endif /* and now we're back to the toke.c stuff again (mst) */ @@ -792,11 +798,23 @@ STATIC void S_force_next(pTHX_ I32 type) { + dVAR; +#ifdef PERL_MAD + if (PL_curforce < 0) + start_force(PL_lasttoke); + PL_nexttoke[PL_curforce].next_type = type; + if (PL_lex_state != LEX_KNOWNEXT) + PL_lex_defer = PL_lex_state; + PL_lex_state = LEX_KNOWNEXT; + PL_lex_expect = PL_expect; + PL_curforce = -1; +#else PL_nexttype[PL_nexttoke] = type; PL_nexttoke++; if (PL_lex_state != LEX_KNOWNEXT) { - PL_lex_defer = PL_lex_state; - PL_lex_expect = PL_expect; - PL_lex_state = LEX_KNOWNEXT; + PL_lex_defer = PL_lex_state; + PL_lex_expect = PL_expect; + PL_lex_state = LEX_KNOWNEXT; } +#endif }