Syntax-Feature-QwComments

 view release on metacpan or  search on metacpan

QwComments.xs  view on Meta::CPAN

      }
      else if ( c == '\\' ) {
         lex_read_unichar( 0 );
         c = lex_peek_unichar( 0 );
         if ( c != sdelim && c != edelim && c != '\\' && c != '#' ) {
            append_char_to_word( word_sv, '\\' );
            goto REDO;
         }

         lex_read_unichar( 0 );
         append_char_to_word( word_sv, c );
      }
      else if ( c == '#' || isSPACE( c ) ) {
         append_word_to_list( &list_op, word_sv );
         lex_read_space( 0 );
      }
      else {
         if ( c == ',' && !warned_comma ) {
            Perl_warner( aTHX_ packWARN( WARN_QW ), "Possible attempt to separate words with commas" );
            ++warned_comma;
         }

         lex_read_unichar( 0 );
         append_char_to_word( word_sv, c );
      }
   }

   SvREFCNT_dec( word_sv );

   if ( !list_op )
      list_op = newNULLLIST();

   list_op->op_flags |= OPf_PARENS;
   return list_op;
}


STATIC Perl_keyword_plugin_t next_keyword_plugin = NULL;
#define next_keyword_plugin( a, b, c ) next_keyword_plugin( aTHX_ a, b, c )


STATIC int my_keyword_plugin( pTHX_ char *keyword_ptr, STRLEN keyword_len, OP **op_ptr ) {
   if ( is_syntax_enabled() ) {
      if ( memEQs( keyword_ptr, keyword_len, "qw" ) ) {
         *op_ptr = parse_qw();
         return KEYWORD_PLUGIN_EXPR;
      }
   }

   return next_keyword_plugin( keyword_ptr, keyword_len, op_ptr );
}


/* ======================================== */

MODULE = Syntax::Feature::QwComments   PACKAGE = Syntax::Feature::QwComments


void
hint_key()
   PPCODE:
      SvREFCNT_inc( hint_key_sv );
      XPUSHs( hint_key_sv );
      XSRETURN( 1 );


BOOT:
{
   wrap_keyword_plugin( my_keyword_plugin, &next_keyword_plugin );

   hint_key_sv = newSVpvs( "Syntax::Feature::QwComments::qw" );
   SvREADONLY_on( hint_key_sv );
}



( run in 0.804 second using v1.01-cache-2.11-cpan-5511b514fd6 )