aboutsummaryrefslogtreecommitdiff
path: root/src/libregexp/regaux.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libregexp/regaux.c')
-rw-r--r--src/libregexp/regaux.c46
1 files changed, 41 insertions, 5 deletions
diff --git a/src/libregexp/regaux.c b/src/libregexp/regaux.c
index 956c1eb0..b854b5ac 100644
--- a/src/libregexp/regaux.c
+++ b/src/libregexp/regaux.c
@@ -30,19 +30,27 @@ _renewmatch(Resub *mp, int ms, Resublist *sp)
extern Relist*
_renewthread(Relist *lp, /* _relist to add to */
Reinst *ip, /* instruction to add */
+ int ms,
Resublist *sep) /* pointers to subexpressions */
{
Relist *p;
for(p=lp; p->inst; p++){
if(p->inst == ip){
- if((sep)->m[0].s.sp < p->se.m[0].s.sp)
- p->se = *sep;
+ if(sep->m[0].s.sp < p->se.m[0].s.sp){
+ if(ms > 1)
+ p->se = *sep;
+ else
+ p->se.m[0] = sep->m[0];
+ }
return 0;
}
}
p->inst = ip;
- p->se = *sep;
+ if(ms > 1)
+ p->se = *sep;
+ else
+ p->se.m[0] = sep->m[0];
(++p)->inst = 0;
return p;
}
@@ -54,6 +62,7 @@ _renewthread(Relist *lp, /* _relist to add to */
extern Relist*
_renewemptythread(Relist *lp, /* _relist to add to */
Reinst *ip, /* instruction to add */
+ int ms,
char *sp) /* pointers to subexpressions */
{
Relist *p;
@@ -61,16 +70,43 @@ _renewemptythread(Relist *lp, /* _relist to add to */
for(p=lp; p->inst; p++){
if(p->inst == ip){
if(sp < p->se.m[0].s.sp) {
- memset((void *)&p->se, 0, sizeof(p->se));
+ if(ms > 1)
+ memset(&p->se, 0, sizeof(p->se));
p->se.m[0].s.sp = sp;
}
return 0;
}
}
p->inst = ip;
- memset((void *)&p->se, 0, sizeof(p->se));
+ if(ms > 1)
+ memset(&p->se, 0, sizeof(p->se));
p->se.m[0].s.sp = sp;
(++p)->inst = 0;
return p;
}
+extern Relist*
+_rrenewemptythread(Relist *lp, /* _relist to add to */
+ Reinst *ip, /* instruction to add */
+ int ms,
+ Rune *rsp) /* pointers to subexpressions */
+{
+ Relist *p;
+
+ for(p=lp; p->inst; p++){
+ if(p->inst == ip){
+ if(rsp < p->se.m[0].s.rsp) {
+ if(ms > 1)
+ memset(&p->se, 0, sizeof(p->se));
+ p->se.m[0].s.rsp = rsp;
+ }
+ return 0;
+ }
+ }
+ p->inst = ip;
+ if(ms > 1)
+ memset(&p->se, 0, sizeof(p->se));
+ p->se.m[0].s.rsp = rsp;
+ (++p)->inst = 0;
+ return p;
+}