mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-15 06:29:05 +00:00
Push const through the regex engine. Fixes some of the warnings in PR6616.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100438 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -72,11 +72,11 @@ struct match {
|
|||||||
struct re_guts *g;
|
struct re_guts *g;
|
||||||
int eflags;
|
int eflags;
|
||||||
llvm_regmatch_t *pmatch; /* [nsub+1] (0 element unused) */
|
llvm_regmatch_t *pmatch; /* [nsub+1] (0 element unused) */
|
||||||
char *offp; /* offsets work from here */
|
const char *offp; /* offsets work from here */
|
||||||
char *beginp; /* start of string -- virtual NUL precedes */
|
const char *beginp; /* start of string -- virtual NUL precedes */
|
||||||
char *endp; /* end of string -- virtual NUL here */
|
const char *endp; /* end of string -- virtual NUL here */
|
||||||
char *coldp; /* can be no match starting before here */
|
const char *coldp; /* can be no match starting before here */
|
||||||
char **lastpos; /* [nplus+1] */
|
const char **lastpos; /* [nplus+1] */
|
||||||
STATEVARS;
|
STATEVARS;
|
||||||
states st; /* current states */
|
states st; /* current states */
|
||||||
states fresh; /* states for a fresh start */
|
states fresh; /* states for a fresh start */
|
||||||
@@ -84,11 +84,14 @@ struct match {
|
|||||||
states empty; /* empty set of states */
|
states empty; /* empty set of states */
|
||||||
};
|
};
|
||||||
|
|
||||||
static int matcher(struct re_guts *, char *, size_t, llvm_regmatch_t[], int);
|
static int matcher(struct re_guts *, const char *, size_t,
|
||||||
static char *dissect(struct match *, char *, char *, sopno, sopno);
|
llvm_regmatch_t[], int);
|
||||||
static char *backref(struct match *, char *, char *, sopno, sopno, sopno, int);
|
static const char *dissect(struct match *, const char *, const char *, sopno,
|
||||||
static char *fast(struct match *, char *, char *, sopno, sopno);
|
sopno);
|
||||||
static char *slow(struct match *, char *, char *, sopno, sopno);
|
static const char *backref(struct match *, const char *, const char *, sopno,
|
||||||
|
sopno, sopno, int);
|
||||||
|
static const char *fast(struct match *, const char *, const char *, sopno, sopno);
|
||||||
|
static const char *slow(struct match *, const char *, const char *, sopno, sopno);
|
||||||
static states step(struct re_guts *, sopno, sopno, states, int, states);
|
static states step(struct re_guts *, sopno, sopno, states, int, states);
|
||||||
#define MAX_RECURSION 100
|
#define MAX_RECURSION 100
|
||||||
#define BOL (OUT+1)
|
#define BOL (OUT+1)
|
||||||
@@ -125,18 +128,19 @@ static int nope = 0;
|
|||||||
- matcher - the actual matching engine
|
- matcher - the actual matching engine
|
||||||
*/
|
*/
|
||||||
static int /* 0 success, REG_NOMATCH failure */
|
static int /* 0 success, REG_NOMATCH failure */
|
||||||
matcher(struct re_guts *g, char *string, size_t nmatch, llvm_regmatch_t pmatch[],
|
matcher(struct re_guts *g, const char *string, size_t nmatch,
|
||||||
|
llvm_regmatch_t pmatch[],
|
||||||
int eflags)
|
int eflags)
|
||||||
{
|
{
|
||||||
char *endp;
|
const char *endp;
|
||||||
size_t i;
|
size_t i;
|
||||||
struct match mv;
|
struct match mv;
|
||||||
struct match *m = &mv;
|
struct match *m = &mv;
|
||||||
char *dp;
|
const char *dp;
|
||||||
const sopno gf = g->firststate+1; /* +1 for OEND */
|
const sopno gf = g->firststate+1; /* +1 for OEND */
|
||||||
const sopno gl = g->laststate;
|
const sopno gl = g->laststate;
|
||||||
char *start;
|
const char *start;
|
||||||
char *stop;
|
const char *stop;
|
||||||
|
|
||||||
/* simplify the situation where possible */
|
/* simplify the situation where possible */
|
||||||
if (g->cflags®_NOSUB)
|
if (g->cflags®_NOSUB)
|
||||||
@@ -216,7 +220,7 @@ matcher(struct re_guts *g, char *string, size_t nmatch, llvm_regmatch_t pmatch[]
|
|||||||
dp = dissect(m, m->coldp, endp, gf, gl);
|
dp = dissect(m, m->coldp, endp, gf, gl);
|
||||||
} else {
|
} else {
|
||||||
if (g->nplus > 0 && m->lastpos == NULL)
|
if (g->nplus > 0 && m->lastpos == NULL)
|
||||||
m->lastpos = (char **)malloc((g->nplus+1) *
|
m->lastpos = (const char **)malloc((g->nplus+1) *
|
||||||
sizeof(char *));
|
sizeof(char *));
|
||||||
if (g->nplus > 0 && m->lastpos == NULL) {
|
if (g->nplus > 0 && m->lastpos == NULL) {
|
||||||
free(m->pmatch);
|
free(m->pmatch);
|
||||||
@@ -287,21 +291,22 @@ matcher(struct re_guts *g, char *string, size_t nmatch, llvm_regmatch_t pmatch[]
|
|||||||
/*
|
/*
|
||||||
- dissect - figure out what matched what, no back references
|
- dissect - figure out what matched what, no back references
|
||||||
*/
|
*/
|
||||||
static char * /* == stop (success) always */
|
static const char * /* == stop (success) always */
|
||||||
dissect(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
|
dissect(struct match *m, const char *start, const char *stop, sopno startst,
|
||||||
|
sopno stopst)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
sopno ss; /* start sop of current subRE */
|
sopno ss; /* start sop of current subRE */
|
||||||
sopno es; /* end sop of current subRE */
|
sopno es; /* end sop of current subRE */
|
||||||
char *sp; /* start of string matched by it */
|
const char *sp; /* start of string matched by it */
|
||||||
char *stp; /* string matched by it cannot pass here */
|
const char *stp; /* string matched by it cannot pass here */
|
||||||
char *rest; /* start of rest of string */
|
const char *rest; /* start of rest of string */
|
||||||
char *tail; /* string unmatched by rest of RE */
|
const char *tail; /* string unmatched by rest of RE */
|
||||||
sopno ssub; /* start sop of subsubRE */
|
sopno ssub; /* start sop of subsubRE */
|
||||||
sopno esub; /* end sop of subsubRE */
|
sopno esub; /* end sop of subsubRE */
|
||||||
char *ssp; /* start of string matched by subsubRE */
|
const char *ssp; /* start of string matched by subsubRE */
|
||||||
char *sep; /* end of string matched by subsubRE */
|
const char *sep; /* end of string matched by subsubRE */
|
||||||
char *oldssp; /* previous ssp */
|
const char *oldssp; /* previous ssp */
|
||||||
|
|
||||||
AT("diss", start, stop, startst, stopst);
|
AT("diss", start, stop, startst, stopst);
|
||||||
sp = start;
|
sp = start;
|
||||||
@@ -360,7 +365,7 @@ dissect(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
|
|||||||
esub = es - 1;
|
esub = es - 1;
|
||||||
/* did innards match? */
|
/* did innards match? */
|
||||||
if (slow(m, sp, rest, ssub, esub) != NULL) {
|
if (slow(m, sp, rest, ssub, esub) != NULL) {
|
||||||
char *dp = dissect(m, sp, rest, ssub, esub);
|
const char *dp = dissect(m, sp, rest, ssub, esub);
|
||||||
(void)dp; /* avoid warning if assertions off */
|
(void)dp; /* avoid warning if assertions off */
|
||||||
assert(dp == rest);
|
assert(dp == rest);
|
||||||
} else /* no */
|
} else /* no */
|
||||||
@@ -400,7 +405,7 @@ dissect(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
|
|||||||
assert(sep == rest); /* must exhaust substring */
|
assert(sep == rest); /* must exhaust substring */
|
||||||
assert(slow(m, ssp, sep, ssub, esub) == rest);
|
assert(slow(m, ssp, sep, ssub, esub) == rest);
|
||||||
{
|
{
|
||||||
char *dp = dissect(m, ssp, sep, ssub, esub);
|
const char *dp = dissect(m, ssp, sep, ssub, esub);
|
||||||
(void)dp; /* avoid warning if assertions off */
|
(void)dp; /* avoid warning if assertions off */
|
||||||
assert(dp == sep);
|
assert(dp == sep);
|
||||||
}
|
}
|
||||||
@@ -438,7 +443,7 @@ dissect(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
|
|||||||
assert(OP(m->g->strip[esub]) == O_CH);
|
assert(OP(m->g->strip[esub]) == O_CH);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
char *dp = dissect(m, sp, rest, ssub, esub);
|
const char *dp = dissect(m, sp, rest, ssub, esub);
|
||||||
(void)dp; /* avoid warning if assertions off */
|
(void)dp; /* avoid warning if assertions off */
|
||||||
assert(dp == rest);
|
assert(dp == rest);
|
||||||
}
|
}
|
||||||
@@ -474,17 +479,17 @@ dissect(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
|
|||||||
/*
|
/*
|
||||||
- backref - figure out what matched what, figuring in back references
|
- backref - figure out what matched what, figuring in back references
|
||||||
*/
|
*/
|
||||||
static char * /* == stop (success) or NULL (failure) */
|
static const char * /* == stop (success) or NULL (failure) */
|
||||||
backref(struct match *m, char *start, char *stop, sopno startst, sopno stopst,
|
backref(struct match *m, const char *start, const char *stop, sopno startst,
|
||||||
sopno lev, int rec) /* PLUS nesting level */
|
sopno stopst, sopno lev, int rec) /* PLUS nesting level */
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
sopno ss; /* start sop of current subRE */
|
sopno ss; /* start sop of current subRE */
|
||||||
char *sp; /* start of string matched by it */
|
const char *sp; /* start of string matched by it */
|
||||||
sopno ssub; /* start sop of subsubRE */
|
sopno ssub; /* start sop of subsubRE */
|
||||||
sopno esub; /* end sop of subsubRE */
|
sopno esub; /* end sop of subsubRE */
|
||||||
char *ssp; /* start of string matched by subsubRE */
|
const char *ssp; /* start of string matched by subsubRE */
|
||||||
char *dp;
|
const char *dp;
|
||||||
size_t len;
|
size_t len;
|
||||||
int hard;
|
int hard;
|
||||||
sop s;
|
sop s;
|
||||||
@@ -674,18 +679,19 @@ backref(struct match *m, char *start, char *stop, sopno startst, sopno stopst,
|
|||||||
/*
|
/*
|
||||||
- fast - step through the string at top speed
|
- fast - step through the string at top speed
|
||||||
*/
|
*/
|
||||||
static char * /* where tentative match ended, or NULL */
|
static const char * /* where tentative match ended, or NULL */
|
||||||
fast(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
|
fast(struct match *m, const char *start, const char *stop, sopno startst,
|
||||||
|
sopno stopst)
|
||||||
{
|
{
|
||||||
states st = m->st;
|
states st = m->st;
|
||||||
states fresh = m->fresh;
|
states fresh = m->fresh;
|
||||||
states tmp = m->tmp;
|
states tmp = m->tmp;
|
||||||
char *p = start;
|
const char *p = start;
|
||||||
int c = (start == m->beginp) ? OUT : *(start-1);
|
int c = (start == m->beginp) ? OUT : *(start-1);
|
||||||
int lastc; /* previous c */
|
int lastc; /* previous c */
|
||||||
int flagch;
|
int flagch;
|
||||||
int i;
|
int i;
|
||||||
char *coldp; /* last p after which no match was underway */
|
const char *coldp; /* last p after which no match was underway */
|
||||||
|
|
||||||
CLEAR(st);
|
CLEAR(st);
|
||||||
SET1(st, startst);
|
SET1(st, startst);
|
||||||
@@ -758,18 +764,19 @@ fast(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
|
|||||||
/*
|
/*
|
||||||
- slow - step through the string more deliberately
|
- slow - step through the string more deliberately
|
||||||
*/
|
*/
|
||||||
static char * /* where it ended */
|
static const char * /* where it ended */
|
||||||
slow(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
|
slow(struct match *m, const char *start, const char *stop, sopno startst,
|
||||||
|
sopno stopst)
|
||||||
{
|
{
|
||||||
states st = m->st;
|
states st = m->st;
|
||||||
states empty = m->empty;
|
states empty = m->empty;
|
||||||
states tmp = m->tmp;
|
states tmp = m->tmp;
|
||||||
char *p = start;
|
const char *p = start;
|
||||||
int c = (start == m->beginp) ? OUT : *(start-1);
|
int c = (start == m->beginp) ? OUT : *(start-1);
|
||||||
int lastc; /* previous c */
|
int lastc; /* previous c */
|
||||||
int flagch;
|
int flagch;
|
||||||
int i;
|
int i;
|
||||||
char *matchp; /* last p at which a match ended */
|
const char *matchp; /* last p at which a match ended */
|
||||||
|
|
||||||
AT("slow", start, stop, startst, stopst);
|
AT("slow", start, stop, startst, stopst);
|
||||||
CLEAR(st);
|
CLEAR(st);
|
||||||
|
@@ -155,7 +155,7 @@ llvm_regexec(const llvm_regex_t *preg, const char *string, size_t nmatch,
|
|||||||
eflags = GOODFLAGS(eflags);
|
eflags = GOODFLAGS(eflags);
|
||||||
|
|
||||||
if (g->nstates <= (long)(CHAR_BIT*sizeof(states1)) && !(eflags®_LARGE))
|
if (g->nstates <= (long)(CHAR_BIT*sizeof(states1)) && !(eflags®_LARGE))
|
||||||
return(smatcher(g, (char *)string, nmatch, pmatch, eflags));
|
return(smatcher(g, string, nmatch, pmatch, eflags));
|
||||||
else
|
else
|
||||||
return(lmatcher(g, (char *)string, nmatch, pmatch, eflags));
|
return(lmatcher(g, string, nmatch, pmatch, eflags));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user