Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf7a839b

Browse files
committed
Clean up portability problems in regexp package: change all routine
definitions from K&R to ANSI C style, and fix broken assumption thatint and long are the same datatype. This repairs problems observedon Alpha with regexps having between 32 and 63 states.
1 parentf4e4c72 commitf7a839b

File tree

8 files changed

+226
-603
lines changed

8 files changed

+226
-603
lines changed

‎src/backend/regex/engine.c

Lines changed: 64 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -80,37 +80,26 @@ struct match
8080
pg_wchar*endp;/* end of string -- virtual NUL here */
8181
pg_wchar*coldp;/* can be no match starting before here */
8282
pg_wchar**lastpos;/* [nplus+1] */
83-
STATEVARS;
83+
STATEVARS;
8484
statesst;/* current states */
8585
statesfresh;/* states for a fresh start */
8686
statestmp;/* temporary */
8787
statesempty;/* empty set of states */
8888
};
8989

90-
/* ========= begin header generated by ./mkh ========= */
91-
#ifdef__cplusplus
92-
extern"C"
93-
{
94-
#endif
90+
staticintmatcher(structre_guts*g,pg_wchar*string,size_tnmatch,
91+
regmatch_t*pmatch,inteflags);
92+
staticpg_wchar*dissect(structmatch*m,pg_wchar*start,pg_wchar*stop,
93+
sopnostartst,sopnostopst);
94+
staticpg_wchar*backref(structmatch*m,pg_wchar*start,pg_wchar*stop,
95+
sopnostartst,sopnostopst,sopnolev);
96+
staticpg_wchar*fast(structmatch*m,pg_wchar*start,pg_wchar*stop,
97+
sopnostartst,sopnostopst);
98+
staticpg_wchar*slow(structmatch*m,pg_wchar*start,pg_wchar*stop,
99+
sopnostartst,sopnostopst);
100+
staticstatesstep(structre_guts*g,sopnostart,
101+
sopnostop,statesbef,intch,statesaft);
95102

96-
/* === engine.c === */
97-
staticint
98-
matcher(structre_guts*g,pg_wchar*string,size_tnmatch,
99-
regmatch_t*pmatch,inteflags);
100-
staticpg_wchar*
101-
dissect(structmatch*m,pg_wchar*start,pg_wchar*stop,
102-
sopnostartst,sopnostopst);
103-
staticpg_wchar*
104-
backref(structmatch*m,pg_wchar*start,pg_wchar*stop,
105-
sopnostartst,sopnostopst,sopnolev);
106-
staticpg_wchar*
107-
fast(structmatch*m,pg_wchar*start,pg_wchar*stop,
108-
sopnostartst,sopnostopst);
109-
staticpg_wchar*
110-
slow(structmatch*m,pg_wchar*start,pg_wchar*stop,sopnostartst,sopnostopst);
111-
staticstates
112-
step(structre_guts*g,sopnostart,
113-
sopnostop,statesbef,intch,statesaft);
114103
#defineBOL(OUT+1)
115104
#defineEOL(BOL+1)
116105
#defineBOLEOL(BOL+2)
@@ -128,24 +117,13 @@ extern"C"
128117
#endif
129118

130119
#ifdefREDEBUG
131-
staticvoid
132-
print(structmatch*m,pg_wchar*caption,statesst,intch,FILE*d);
133-
#endif
134-
#ifdefREDEBUG
135-
staticvoid
136-
at(structmatch*m,pg_wchar*title,pg_wchar*start,pg_wchar*stop,
137-
sopnostartst,sopnostopst);
138-
#endif
139-
#ifdefREDEBUG
140-
staticpg_wchar*
141-
p_char(intch);
142-
#endif
143-
144-
#ifdef__cplusplus
145-
}
146-
120+
staticvoidprint(structmatch*m,pg_wchar*caption,statesst,intch,
121+
FILE*d);
122+
staticvoidat(structmatch*m,pg_wchar*title,pg_wchar*start,
123+
pg_wchar*stop,sopnostartst,sopnostopst);
124+
staticpg_wchar*pchar(intch);
125+
staticintpg_isprint(intc);
147126
#endif
148-
/* ========= end header generated by ./mkh ========= */
149127

150128
#ifdefREDEBUG
151129
#defineSP(t,s,c)print(m, t, s, c, stdout)
@@ -158,17 +136,11 @@ extern"C"
158136
#endif
159137

160138
/*
161-
- matcher - the actual matching engine
162-
== static int matcher(struct re_guts *g, pg_wchar *string, \
163-
==size_t nmatch, regmatch_t *pmatch, int eflags);
139+
* matcher - the actual matching engine
164140
*/
165141
staticint/* 0 success, REG_NOMATCH failure */
166-
matcher(g,string,nmatch,pmatch,eflags)
167-
structre_guts*g;
168-
pg_wchar*string;
169-
size_tnmatch;
170-
regmatch_t*pmatch;
171-
inteflags;
142+
matcher(structre_guts*g,pg_wchar*string,size_tnmatch,
143+
regmatch_t*pmatch,inteflags)
172144
{
173145
pg_wchar*endp;
174146
inti;
@@ -206,10 +178,11 @@ inteflags;
206178
for (dp=start;dp<stop;dp++)
207179
if (*dp==g->must[0]&&stop-dp >=g->mlen&&
208180
#ifdefMULTIBYTE
209-
memcmp(dp,g->must, (size_t) (g->mlen*sizeof(pg_wchar)))==0)
181+
memcmp(dp,g->must, (size_t) (g->mlen*sizeof(pg_wchar)))==0
210182
#else
211-
memcmp(dp,g->must, (size_t)g->mlen)==0)
183+
memcmp(dp,g->must, (size_t)g->mlen)==0
212184
#endif
185+
)
213186
break;
214187
if (dp==stop)/* we didn't find g->must */
215188
returnREG_NOMATCH;
@@ -349,17 +322,11 @@ inteflags;
349322
}
350323

351324
/*
352-
- dissect - figure out what matched what, no back references
353-
== static char *dissect(struct match *m, char *start, \
354-
==char *stop, sopno startst, sopno stopst);
325+
* dissect - figure out what matched what, no back references
355326
*/
356327
staticpg_wchar*/* == stop (success) always */
357-
dissect(m,start,stop,startst,stopst)
358-
structmatch*m;
359-
pg_wchar*start;
360-
pg_wchar*stop;
361-
sopnostartst;
362-
sopnostopst;
328+
dissect(structmatch*m,pg_wchar*start,pg_wchar*stop,
329+
sopnostartst,sopnostopst)
363330
{
364331
inti;
365332
sopnoss;/* start sop of current subRE */
@@ -549,18 +516,13 @@ sopnostopst;
549516
}
550517

551518
/*
552-
- backref - figure out what matched what, figuring in back references
553-
== static char *backref(struct match *m, char *start, \
554-
==char *stop, sopno startst, sopno stopst, sopno lev);
519+
* backref - figure out what matched what, figuring in back references
520+
*
521+
* lev is PLUS nesting level
555522
*/
556523
staticpg_wchar*/* == stop (success) or NULL (failure) */
557-
backref(m,start,stop,startst,stopst,lev)
558-
structmatch*m;
559-
pg_wchar*start;
560-
pg_wchar*stop;
561-
sopnostartst;
562-
sopnostopst;
563-
sopnolev;/* PLUS nesting level */
524+
backref(structmatch*m,pg_wchar*start,pg_wchar*stop,
525+
sopnostartst,sopnostopst,sopnolev)
564526
{
565527
inti;
566528
sopnoss;/* start sop of current subRE */
@@ -763,17 +725,11 @@ sopnolev;/* PLUS nesting level */
763725
}
764726

765727
/*
766-
- fast - step through the string at top speed
767-
== static char *fast(struct match *m, char *start, \
768-
==char *stop, sopno startst, sopno stopst);
728+
* fast - step through the string at top speed
769729
*/
770730
staticpg_wchar*/* where tentative match ended, or NULL */
771-
fast(m,start,stop,startst,stopst)
772-
structmatch*m;
773-
pg_wchar*start;
774-
pg_wchar*stop;
775-
sopnostartst;
776-
sopnostopst;
731+
fast(structmatch*m,pg_wchar*start,pg_wchar*stop,
732+
sopnostartst,sopnostopst)
777733
{
778734
statesst=m->st;
779735
statesfresh=m->fresh;
@@ -858,17 +814,11 @@ sopnostopst;
858814
}
859815

860816
/*
861-
- slow - step through the string more deliberately
862-
== static char *slow(struct match *m, char *start, \
863-
==char *stop, sopno startst, sopno stopst);
817+
* slow - step through the string more deliberately
864818
*/
865819
staticpg_wchar*/* where it ended */
866-
slow(m,start,stop,startst,stopst)
867-
structmatch*m;
868-
pg_wchar*start;
869-
pg_wchar*stop;
870-
sopnostartst;
871-
sopnostopst;
820+
slow(structmatch*m,pg_wchar*start,pg_wchar*stop,
821+
sopnostartst,sopnostopst)
872822
{
873823
statesst=m->st;
874824
statesempty=m->empty;
@@ -948,27 +898,15 @@ sopnostopst;
948898

949899

950900
/*
951-
- step - map set of states reachable before char to set reachable after
952-
== static states step(struct re_guts *g, sopno start, sopno stop, \
953-
==states bef, int ch, states aft);
954-
== #defineBOL(OUT+1)
955-
== #defineEOL(BOL+1)
956-
== #defineBOLEOL(BOL+2)
957-
== #defineNOTHING (BOL+3)
958-
== #defineBOW(BOL+4)
959-
== #defineEOW(BOL+5)
960-
== #defineCODEMAX (BOL+5)// highest code used
961-
== #defineNONCHAR(c)((c) > CHAR_MAX)
962-
== #defineNNONCHAR(CODEMAX-CHAR_MAX)
901+
* step - map set of states reachable before char to set reachable after
963902
*/
964903
staticstates
965-
step(g,start,stop,bef,ch,aft)
966-
structre_guts*g;
967-
sopnostart;/* start state within strip */
968-
sopnostop;/* state after stop state within strip */
969-
statesbef;/* states reachable before */
970-
intch;/* character or NONCHAR code */
971-
statesaft;/* states already known reachable after */
904+
step(structre_guts*g,
905+
sopnostart,/* start state within strip */
906+
sopnostop,/* state after stop state within strip */
907+
statesbef,/* states reachable before */
908+
intch,/* character or NONCHAR code */
909+
statesaft)/* states already known reachable after */
972910
{
973911
cset*cs;
974912
sops;
@@ -1082,19 +1020,11 @@ statesaft;/* states already known reachable after */
10821020

10831021
#ifdefREDEBUG
10841022
/*
1085-
- print - print a set of states
1086-
== #ifdef REDEBUG
1087-
== static void print(struct match *m, char *caption, states st, \
1088-
==int ch, FILE *d);
1089-
== #endif
1023+
* print - print a set of states
10901024
*/
10911025
staticvoid
1092-
print(m,caption,st,ch,d)
1093-
structmatch*m;
1094-
pg_wchar*caption;
1095-
statesst;
1096-
intch;
1097-
FILE*d;
1026+
print(structmatch*m,pg_wchar*caption,statesst,
1027+
intch,FILE*d)
10981028
{
10991029
structre_guts*g=m->g;
11001030
inti;
@@ -1116,20 +1046,11 @@ FILE *d;
11161046
}
11171047

11181048
/*
1119-
- at - print current situation
1120-
== #ifdef REDEBUG
1121-
== static void at(struct match *m, pg_wchar *title, pg_wchar *start, pg_wchar *stop, \
1122-
==sopno startst, sopno stopst);
1123-
== #endif
1049+
* at - print current situation
11241050
*/
11251051
staticvoid
1126-
at(m,title,start,stop,startst,stopst)
1127-
structmatch*m;
1128-
pg_wchar*title;
1129-
pg_wchar*start;
1130-
pg_wchar*stop;
1131-
sopnostartst;
1132-
sopnostopst;
1052+
at(structmatch*m,pg_wchar*title,pg_wchar*start,pg_wchar*stop,
1053+
sopnostartst,sopnostopst)
11331054
{
11341055
if (!(m->eflags&REG_TRACE))
11351056
return;
@@ -1140,19 +1061,26 @@ sopnostopst;
11401061
}
11411062

11421063
#ifndefPCHARDONE
1143-
#definePCHARDONE/*never again */
1064+
#definePCHARDONE/*only do this once */
11441065
/*
1145-
- pchar - make a character printable
1146-
== #ifdef REDEBUG
1147-
== static char *pchar(int ch);
1148-
== #endif
1066+
* pchar - make a character printable
11491067
*
11501068
* Is this identical to regchar() over in debug.c?Well, yes.But a
11511069
* duplicate here avoids having a debugging-capable regexec.o tied to
11521070
* a matching debug.o, and this is convenient.It all disappears in
11531071
* the non-debug compilation anyway, so it doesn't matter much.
11541072
*/
1073+
staticpg_wchar*/* -> representation */
1074+
pchar(intch)
1075+
{
1076+
staticpg_wcharpbuf[10];
11551077

1078+
if (pg_isprint(ch)||ch==' ')
1079+
sprintf(pbuf,"%c",ch);
1080+
else
1081+
sprintf(pbuf,"\\%o",ch);
1082+
returnpbuf;
1083+
}
11561084

11571085
staticint
11581086
pg_isprint(intc)
@@ -1164,19 +1092,6 @@ pg_isprint(int c)
11641092
#endif
11651093
}
11661094

1167-
staticpg_wchar*/* -> representation */
1168-
pchar(ch)
1169-
intch;
1170-
{
1171-
staticpg_wcharpbuf[10];
1172-
1173-
if (pg_isprint(ch)||ch==' ')
1174-
sprintf(pbuf,"%c",ch);
1175-
else
1176-
sprintf(pbuf,"\\%o",ch);
1177-
returnpbuf;
1178-
}
1179-
11801095
#endif
11811096
#endif
11821097

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp