File Coverage

Loop.xs
Criterion Covered Total %
statement 17 17 100.0
branch 7 8 87.5
condition n/a
subroutine n/a
pod n/a
total 24 25 96.0


line stmt bran cond sub pod time code
1             #define PERL_NO_GET_CONTEXT
2             #include "EXTERN.h"
3             #include "perl.h"
4             #include "XSUB.h"
5             #include "ppport.h"
6             #include "wrap_keyword_plugin.inc.c"
7              
8              
9             STATIC SV *hint_key_sv;
10              
11              
12             #define is_syntax_enabled() SvTRUE( cop_hints_fetch_sv( PL_curcop, hint_key_sv, 0, 0 ) )
13              
14              
15 10           STATIC OP *parse_loop( pTHX ) {
16             #define parse_loop() parse_loop( aTHX )
17 10           OP *exprop = newSVOP( OP_CONST, 0, &PL_sv_yes );
18 10           OP *blockop = parse_block( 0 );
19 10           OP *loopop = newWHILEOP( 0, 1, NULL, exprop, blockop, NULL, 0 );
20 10           return loopop;
21             }
22              
23              
24             STATIC Perl_keyword_plugin_t next_keyword_plugin = NULL;
25             #define next_keyword_plugin( a, b, c ) next_keyword_plugin( aTHX_ a, b, c )
26              
27              
28 27214           STATIC int my_keyword_plugin( pTHX_ char *keyword_ptr, STRLEN keyword_len, OP **op_ptr ) {
29 27214 100         if ( is_syntax_enabled() ) {
30 62 100         if ( memEQs( keyword_ptr, keyword_len, "loop" ) ) {
    100          
31 10           *op_ptr = parse_loop();
32 10           return KEYWORD_PLUGIN_STMT;
33             }
34             }
35              
36 27204           return next_keyword_plugin( keyword_ptr, keyword_len, op_ptr );
37             }
38              
39              
40             /* ======================================== */
41              
42             MODULE = Syntax::Feature::Loop PACKAGE = Syntax::Feature::Loop
43              
44              
45             void
46             hint_key()
47             PPCODE:
48 6           SvREFCNT_inc( hint_key_sv );
49 6 50         XPUSHs( hint_key_sv );
50 6           XSRETURN( 1 );
51              
52              
53             BOOT:
54             {
55 5           wrap_keyword_plugin( my_keyword_plugin, &next_keyword_plugin );
56              
57 5           hint_key_sv = newSVpvs( "Syntax::Feature::Loop::loop" );
58 5           SvREADONLY_on( hint_key_sv );
59             }