version 1.30, 2020/06/10 21:04:40 |
version 1.31, 2020/06/10 21:05:02 |
|
|
parent(left(p)) = p; |
parent(left(p)) = p; |
parent(right(p)) = p; |
parent(right(p)) = p; |
break; |
break; |
|
case ZERO: |
|
break; |
default: /* can't happen */ |
default: /* can't happen */ |
FATAL("can't happen: unknown type %d in penter", type(p)); |
FATAL("can't happen: unknown type %d in penter", type(p)); |
break; |
break; |
|
|
xfree(p); |
xfree(p); |
break; |
break; |
UNARY |
UNARY |
|
case ZERO: |
freetr(left(p)); |
freetr(left(p)); |
xfree(p); |
xfree(p); |
break; |
break; |
|
|
cfoll(f,left(v)); |
cfoll(f,left(v)); |
cfoll(f,right(v)); |
cfoll(f,right(v)); |
break; |
break; |
|
case ZERO: |
|
break; |
default: /* can't happen */ |
default: /* can't happen */ |
FATAL("can't happen: unknown type %d in cfoll", type(v)); |
FATAL("can't happen: unknown type %d in cfoll", type(v)); |
} |
} |
|
|
b = first(right(p)); |
b = first(right(p)); |
if (first(left(p)) == 0 || b == 0) return(0); |
if (first(left(p)) == 0 || b == 0) return(0); |
return(1); |
return(1); |
|
case ZERO: |
|
return 0; |
} |
} |
FATAL("can't happen: unknown type %d in first", type(p)); /* can't happen */ |
FATAL("can't happen: unknown type %d in first", type(p)); /* can't happen */ |
return(-1); |
return(-1); |
|
|
case QUEST: |
case QUEST: |
rtok = relex(); |
rtok = relex(); |
return (unary(op2(QUEST, np, NIL))); |
return (unary(op2(QUEST, np, NIL))); |
|
case ZERO: |
|
rtok = relex(); |
|
return (unary(op2(ZERO, np, NIL))); |
default: |
default: |
return (np); |
return (np); |
} |
} |
|
|
|
|
#endif |
#endif |
|
|
struct charclass { |
static const struct charclass { |
const char *cc_name; |
const char *cc_name; |
int cc_namelen; |
int cc_namelen; |
int (*cc_func)(int); |
int (*cc_func)(int); |
|
|
int i, j; |
int i, j; |
uschar *buf = NULL; |
uschar *buf = NULL; |
int ret = 1; |
int ret = 1; |
bool init_q = (firstnum == 0); /* first added char will be ? */ |
int init_q = (firstnum == 0); /* first added char will be ? */ |
int n_q_reps = secondnum-firstnum; /* m>n, so reduce until {1,m-n} left */ |
int n_q_reps = secondnum-firstnum; /* m>n, so reduce until {1,m-n} left */ |
int prefix_length = reptok - basestr; /* prefix includes first rep */ |
int prefix_length = reptok - basestr; /* prefix includes first rep */ |
int suffix_length = strlen((const char *) reptok) - reptoklen; /* string after rep specifier */ |
int suffix_length = strlen((const char *) reptok) - reptoklen; /* string after rep specifier */ |
|
|
static uschar *buf = NULL; |
static uschar *buf = NULL; |
static int bufsz = 100; |
static int bufsz = 100; |
uschar *bp; |
uschar *bp; |
struct charclass *cc; |
const struct charclass *cc; |
int i; |
int i; |
int num, m; |
int num, m; |
bool commafound, digitfound; |
bool commafound, digitfound; |
|
|
if (repeat(starttok, prestr-starttok, lastatom, |
if (repeat(starttok, prestr-starttok, lastatom, |
startreptok - lastatom, n, m) > 0) { |
startreptok - lastatom, n, m) > 0) { |
if (n == 0 && m == 0) { |
if (n == 0 && m == 0) { |
return EMPTYRE; |
return ZERO; |
} |
} |
/* must rescan input for next token */ |
/* must rescan input for next token */ |
goto rescan; |
goto rescan; |