From 7c7228f0a37b6ac15a6c16f4023159c439d471ad Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 21 Jul 2013 17:48:20 -0400 Subject: factor this out --- Keyword.xs | 51 +++++++++++++++++++++------------------------------ 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/Keyword.xs b/Keyword.xs index c5a9f4e..e53f001 100644 --- a/Keyword.xs +++ b/Keyword.xs @@ -15,6 +15,25 @@ #define LEAVE_PARSER LEAVE +static SV *parser_fn(OP *(fn)(U32)) +{ + I32 floor; + CV *code; + + REENTER_PARSER; + + floor = start_subparse(0, CVf_ANON); + code = newATTRSUB(floor, NULL, NULL, NULL, fn(0)); + + LEAVE_PARSER; + + if (CvCLONE(code)) { + code = cv_clone(code); + } + + return newRV_inc((SV*)code); +} + static OP *parser_callback(pTHX_ GV *namegv, SV *psobj, U32 *flagsp) { dSP; @@ -123,43 +142,15 @@ lex_stuff(str) SV * parse_block() - PREINIT: - I32 floor; - CV *code; CODE: - REENTER_PARSER; - - floor = start_subparse(0, CVf_ANON); - code = newATTRSUB(floor, NULL, NULL, NULL, parse_block(0)); - - LEAVE_PARSER; - - if (CvCLONE(code)) { - code = cv_clone(code); - } - - RETVAL = newRV_inc((SV*)code); + RETVAL = parser_fn(Perl_parse_block); OUTPUT: RETVAL SV * parse_arithexpr() - PREINIT: - I32 floor; - CV *code; CODE: - REENTER_PARSER; - - floor = start_subparse(0, CVf_ANON); - code = newATTRSUB(floor, NULL, NULL, NULL, parse_arithexpr(0)); - - LEAVE_PARSER; - - if (CvCLONE(code)) { - code = cv_clone(code); - } - - RETVAL = newRV_inc((SV*)code); + RETVAL = parser_fn(Perl_parse_arithexpr); OUTPUT: RETVAL -- cgit v1.2.3-54-g00ecf