FreeWRL
view release on metacpan or search on metacpan
JS/js/jsregexp.c view on Meta::CPAN
matched = !JS_ISWORD(*cp); \
matchlen = 1; \
break; \
\
case REOP_SPACE: \
matched = JS_ISSPACE(*cp); \
matchlen = 1; \
break; \
\
case REOP_NONSPACE: \
matched = !JS_ISSPACE(*cp); \
matchlen = 1; \
break; \
\
case REOP_FLAT1: \
c = *cp; \
c2 = (jschar)pc[1]; \
matched = (c == c2); \
matchlen = 1; \
break; \
\
case REOP_FLAT1i: \
c = *cp; \
c2 = (jschar)pc[1]; \
matched = MATCH_CHARS_IGNORING_CASE(c, c2); \
matchlen = 1; \
break; \
\
case REOP_UCFLAT1: \
c = *cp; \
c2 = ((pc[1] << 8) | pc[2]); \
matched = (c == c2); \
matchlen = 1; \
break; \
\
case REOP_UCFLAT1i: \
c = *cp; \
c2 = ((pc[1] << 8) | pc[2]); \
matched = MATCH_CHARS_IGNORING_CASE(c, c2); \
matchlen = 1; \
break; \
\
case REOP_UCCLASS: \
case REOP_NUCCLASS: \
size = (pc[1] << 8) | pc[2]; \
oplen += size; \
c = *cp; \
byte = (uintN)c >> 3; \
if (byte >= size) { \
matched = (op == REOP_NUCCLASS); \
} else { \
bit = c & 7; \
bit = 1 << bit; \
matched = pc[3 + byte] & bit; \
} \
matchlen = 1; \
break; \
/* END NONDOT_SINGLE_CASES */
/*
* Macro-expand single-char/single-opcode cases here and below.
*/
SINGLE_CASES
case REOP_STAR:
op = (REOp) *++pc;
oplen = reopsize[op];
for (cp2 = cp; cp < cpend; cp++) {
switch (op) {
NONDOT_SINGLE_CASES
default:
PR_ASSERT(0);
}
if (!matched)
break;
}
backtracker:
pc += oplen;
do {
cp3 = MatchRegExp(state, pc, cp);
if (cp3)
return cp3;
} while (--cp >= cp2);
return NULL;
case REOP_PLUS:
op = (REOp) *++pc;
oplen = reopsize[op];
for (cp2 = cp; cp < cpend; cp++) {
switch (op) {
SINGLE_CASES
default:
PR_ASSERT(0);
}
if (!matched)
break;
}
if (cp == cp2) {
/* Did not match once, hope for an alternative. */
return NULL;
}
/* Matched one or more times, try rest of regexp. */
cp2++;
goto backtracker;
case REOP_OPT:
op = (REOp) *++pc;
oplen = reopsize[op];
switch (op) {
SINGLE_CASES
default:
PR_ASSERT(0);
}
pc += oplen;
if (matched) {
cp2 = MatchRegExp(state, pc, cp + 1);
if (cp2)
return cp2;
}
continue;
( run in 0.724 second using v1.01-cache-2.11-cpan-f56aa216473 )