can't strstr but at least use strchr
[p5sagit/Function-Parameters.git] / Parameters.xs
index 0e7cc2c..e9ab948 100644 (file)
@@ -94,7 +94,12 @@ static int kw_flags(pTHX_ const char *kw_ptr, STRLEN kw_len, Spec *spec) {
        if (kw_active_len <= kw_len) {
                return FALSE;
        }
-       for (p = kw_active; p < kw_active + kw_active_len - kw_len; p++) {
+       for (
+               p = kw_active;
+               (p = strchr(p, *kw_ptr)) &&
+               p < kw_active + kw_active_len - kw_len;
+               p++
+       ) {
                if (
                        (p == kw_active || p[-1] == ' ') &&
                        p[kw_len] == ' ' &&
@@ -175,7 +180,7 @@ static int parse_fun(pTHX_ OP **pop, const char *keyword_ptr, STRLEN keyword_len
 
                for (;;) {
                        c = lex_peek_unichar(0);
-                       if (c && strchr("$@%", c)) {
+                       if (c == '$' || c == '@' || c == '%') {
                                sv_catpvf(params, "%c", (int)c);
                                lex_read_unichar(0);
                                lex_read_space(0);
@@ -301,10 +306,9 @@ static int parse_fun(pTHX_ OP **pop, const char *keyword_ptr, STRLEN keyword_len
                sv_catpvs(gen, ")=@_;");
        }
 
-       /* fprintf(stderr, "! [%.*s]\n", (int)(PL_bufend - PL_bufptr), PL_bufptr); */
-
        /* named sub */
        if (saw_name) {
+               /* fprintf(stderr, "! [%.*s]\n", (int)(PL_bufend - PL_bufptr), PL_bufptr); */
                lex_stuff_sv(gen, SvUTF8(gen));
                *pop = parse_barestmt(0);
                return KEYWORD_PLUGIN_STMT;
@@ -312,6 +316,7 @@ static int parse_fun(pTHX_ OP **pop, const char *keyword_ptr, STRLEN keyword_len
 
        /* anon sub */
        sv_catpvs(gen, "BEGIN{" MY_PKG "::_fini}");
+       /* fprintf(stderr, "!> [%.*s]\n", (int)(PL_bufend - PL_bufptr), PL_bufptr); */
        lex_stuff_sv(gen, SvUTF8(gen));
        *pop = parse_arithexpr(0);
        s = PL_parser->bufptr;
@@ -319,6 +324,7 @@ static int parse_fun(pTHX_ OP **pop, const char *keyword_ptr, STRLEN keyword_len
                croak("%s: internal error: expected '}', found '%c'", MY_PKG, *s);
        }
        lex_unstuff(s + 1);
+       /* fprintf(stderr, "!< [%.*s]\n", (int)(PL_bufend - PL_bufptr), PL_bufptr); */
        return KEYWORD_PLUGIN_EXPR;
 }
 
@@ -341,6 +347,7 @@ static int my_keyword_plugin(pTHX_ char *keyword_ptr, STRLEN keyword_len, OP **o
 
 static int magic_free(pTHX_ SV *sv, MAGIC *mg) {
        lex_stuff_pvn("}", 1, 0);
+       /* fprintf(stderr, "!~ [%.*s]\n", (int)(PL_bufend - PL_bufptr), PL_bufptr); */
        return 0;
 }
 
@@ -367,6 +374,7 @@ PROTOTYPES: ENABLE
 BOOT:
 WARNINGS_ENABLE {
        HV *const stash = gv_stashpvs(MY_PKG, GV_ADD);
+       /**/
        newCONSTSUB(stash, "FLAG_NAME_OPTIONAL", newSViv(FLAG_NAME_OPTIONAL));
        newCONSTSUB(stash, "FLAG_NAME_REQUIRED", newSViv(FLAG_NAME_REQUIRED));
        newCONSTSUB(stash, "FLAG_NAME_PROHIBITED", newSViv(FLAG_NAME_PROHIBITED));
@@ -374,7 +382,7 @@ WARNINGS_ENABLE {
        newCONSTSUB(stash, "HINTK_NAME_", newSVpvs(HINTK_NAME_));
        newCONSTSUB(stash, "HINTK_SHIFT_", newSVpvs(HINTK_SHIFT_));
        newCONSTSUB(stash, "HINTK_ATTRS_", newSVpvs(HINTK_ATTRS_));
-       newCONSTSUB(stash, "SHIFT_NAME_LIMIT", newSViv(sizeof ((Spec *)NULL)->shift));
+       /**/
        next_keyword_plugin = PL_keyword_plugin;
        PL_keyword_plugin = my_keyword_plugin;
 } WARNINGS_RESET