mirror of
https://github.com/vim/vim.git
synced 2025-09-30 04:44:14 -04:00
updated for version 7.3.1036
Problem: Can't build on HP-UX. Solution: Give the union a name. (John Marriott)
This commit is contained in:
125
src/regexp_nfa.c
125
src/regexp_nfa.c
@@ -2493,20 +2493,20 @@ typedef struct
|
|||||||
{
|
{
|
||||||
int in_use; /* number of subexpr with useful info */
|
int in_use; /* number of subexpr with useful info */
|
||||||
|
|
||||||
/* When REG_MULTI is TRUE multilist is used, otherwise linelist. */
|
/* When REG_MULTI is TRUE list.multi is used, otherwise list.line. */
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
struct multipos
|
struct multipos
|
||||||
{
|
{
|
||||||
lpos_T start;
|
lpos_T start;
|
||||||
lpos_T end;
|
lpos_T end;
|
||||||
} multilist[NSUBEXP];
|
} multi[NSUBEXP];
|
||||||
struct linepos
|
struct linepos
|
||||||
{
|
{
|
||||||
char_u *start;
|
char_u *start;
|
||||||
char_u *end;
|
char_u *end;
|
||||||
} linelist[NSUBEXP];
|
} line[NSUBEXP];
|
||||||
};
|
} list;
|
||||||
} regsub_T;
|
} regsub_T;
|
||||||
|
|
||||||
/* nfa_thread_T contains execution information of a NFA state */
|
/* nfa_thread_T contains execution information of a NFA state */
|
||||||
@@ -2536,15 +2536,15 @@ log_subexpr(sub)
|
|||||||
if (REG_MULTI)
|
if (REG_MULTI)
|
||||||
fprintf(log_fd, "\n *** group %d, start: c=%d, l=%d, end: c=%d, l=%d",
|
fprintf(log_fd, "\n *** group %d, start: c=%d, l=%d, end: c=%d, l=%d",
|
||||||
j,
|
j,
|
||||||
sub->multilist[j].start.col,
|
sub->list.multi[j].start.col,
|
||||||
(int)sub->multilist[j].start.lnum,
|
(int)sub->list.multi[j].start.lnum,
|
||||||
sub->multilist[j].end.col,
|
sub->list.multi[j].end.col,
|
||||||
(int)sub->multilist[j].end.lnum);
|
(int)sub->list.multi[j].end.lnum);
|
||||||
else
|
else
|
||||||
fprintf(log_fd, "\n *** group %d, start: \"%s\", end: \"%s\"",
|
fprintf(log_fd, "\n *** group %d, start: \"%s\", end: \"%s\"",
|
||||||
j,
|
j,
|
||||||
(char *)sub->linelist[j].start,
|
(char *)sub->list.line[j].start,
|
||||||
(char *)sub->linelist[j].end);
|
(char *)sub->list.line[j].end);
|
||||||
fprintf(log_fd, "\n");
|
fprintf(log_fd, "\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -2626,12 +2626,12 @@ addstate(l, state, sub, off)
|
|||||||
{
|
{
|
||||||
/* Copy the match start and end positions. */
|
/* Copy the match start and end positions. */
|
||||||
if (REG_MULTI)
|
if (REG_MULTI)
|
||||||
mch_memmove(&lastthread->sub.multilist[0],
|
mch_memmove(&lastthread->sub.list.multi[0],
|
||||||
&sub->multilist[0],
|
&sub->list.multi[0],
|
||||||
sizeof(struct multipos) * sub->in_use);
|
sizeof(struct multipos) * sub->in_use);
|
||||||
else
|
else
|
||||||
mch_memmove(&lastthread->sub.linelist[0],
|
mch_memmove(&lastthread->sub.list.line[0],
|
||||||
&sub->linelist[0],
|
&sub->list.line[0],
|
||||||
sizeof(struct linepos) * sub->in_use);
|
sizeof(struct linepos) * sub->in_use);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2705,7 +2705,7 @@ addstate(l, state, sub, off)
|
|||||||
{
|
{
|
||||||
if (subidx < sub->in_use)
|
if (subidx < sub->in_use)
|
||||||
{
|
{
|
||||||
save_lpos = sub->multilist[subidx].start;
|
save_lpos = sub->list.multi[subidx].start;
|
||||||
save_in_use = -1;
|
save_in_use = -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -2713,20 +2713,20 @@ addstate(l, state, sub, off)
|
|||||||
save_in_use = sub->in_use;
|
save_in_use = sub->in_use;
|
||||||
for (i = sub->in_use; i < subidx; ++i)
|
for (i = sub->in_use; i < subidx; ++i)
|
||||||
{
|
{
|
||||||
sub->multilist[i].start.lnum = -1;
|
sub->list.multi[i].start.lnum = -1;
|
||||||
sub->multilist[i].end.lnum = -1;
|
sub->list.multi[i].end.lnum = -1;
|
||||||
}
|
}
|
||||||
sub->in_use = subidx + 1;
|
sub->in_use = subidx + 1;
|
||||||
}
|
}
|
||||||
if (off == -1)
|
if (off == -1)
|
||||||
{
|
{
|
||||||
sub->multilist[subidx].start.lnum = reglnum + 1;
|
sub->list.multi[subidx].start.lnum = reglnum + 1;
|
||||||
sub->multilist[subidx].start.col = 0;
|
sub->list.multi[subidx].start.col = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sub->multilist[subidx].start.lnum = reglnum;
|
sub->list.multi[subidx].start.lnum = reglnum;
|
||||||
sub->multilist[subidx].start.col =
|
sub->list.multi[subidx].start.col =
|
||||||
(colnr_T)(reginput - regline + off);
|
(colnr_T)(reginput - regline + off);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2734,7 +2734,7 @@ addstate(l, state, sub, off)
|
|||||||
{
|
{
|
||||||
if (subidx < sub->in_use)
|
if (subidx < sub->in_use)
|
||||||
{
|
{
|
||||||
save_ptr = sub->linelist[subidx].start;
|
save_ptr = sub->list.line[subidx].start;
|
||||||
save_in_use = -1;
|
save_in_use = -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -2742,12 +2742,12 @@ addstate(l, state, sub, off)
|
|||||||
save_in_use = sub->in_use;
|
save_in_use = sub->in_use;
|
||||||
for (i = sub->in_use; i < subidx; ++i)
|
for (i = sub->in_use; i < subidx; ++i)
|
||||||
{
|
{
|
||||||
sub->linelist[i].start = NULL;
|
sub->list.line[i].start = NULL;
|
||||||
sub->linelist[i].end = NULL;
|
sub->list.line[i].end = NULL;
|
||||||
}
|
}
|
||||||
sub->in_use = subidx + 1;
|
sub->in_use = subidx + 1;
|
||||||
}
|
}
|
||||||
sub->linelist[subidx].start = reginput + off;
|
sub->list.line[subidx].start = reginput + off;
|
||||||
}
|
}
|
||||||
|
|
||||||
addstate(l, state->out, sub, off);
|
addstate(l, state->out, sub, off);
|
||||||
@@ -2755,9 +2755,9 @@ addstate(l, state, sub, off)
|
|||||||
if (save_in_use == -1)
|
if (save_in_use == -1)
|
||||||
{
|
{
|
||||||
if (REG_MULTI)
|
if (REG_MULTI)
|
||||||
sub->multilist[subidx].start = save_lpos;
|
sub->list.multi[subidx].start = save_lpos;
|
||||||
else
|
else
|
||||||
sub->linelist[subidx].start = save_ptr;
|
sub->list.line[subidx].start = save_ptr;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
sub->in_use = save_in_use;
|
sub->in_use = save_in_use;
|
||||||
@@ -2793,31 +2793,31 @@ addstate(l, state, sub, off)
|
|||||||
sub->in_use = subidx + 1;
|
sub->in_use = subidx + 1;
|
||||||
if (REG_MULTI)
|
if (REG_MULTI)
|
||||||
{
|
{
|
||||||
save_lpos = sub->multilist[subidx].end;
|
save_lpos = sub->list.multi[subidx].end;
|
||||||
if (off == -1)
|
if (off == -1)
|
||||||
{
|
{
|
||||||
sub->multilist[subidx].end.lnum = reglnum + 1;
|
sub->list.multi[subidx].end.lnum = reglnum + 1;
|
||||||
sub->multilist[subidx].end.col = 0;
|
sub->list.multi[subidx].end.col = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sub->multilist[subidx].end.lnum = reglnum;
|
sub->list.multi[subidx].end.lnum = reglnum;
|
||||||
sub->multilist[subidx].end.col =
|
sub->list.multi[subidx].end.col =
|
||||||
(colnr_T)(reginput - regline + off);
|
(colnr_T)(reginput - regline + off);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
save_ptr = sub->linelist[subidx].end;
|
save_ptr = sub->list.line[subidx].end;
|
||||||
sub->linelist[subidx].end = reginput + off;
|
sub->list.line[subidx].end = reginput + off;
|
||||||
}
|
}
|
||||||
|
|
||||||
addstate(l, state->out, sub, off);
|
addstate(l, state->out, sub, off);
|
||||||
|
|
||||||
if (REG_MULTI)
|
if (REG_MULTI)
|
||||||
sub->multilist[subidx].end = save_lpos;
|
sub->list.multi[subidx].end = save_lpos;
|
||||||
else
|
else
|
||||||
sub->linelist[subidx].end = save_ptr;
|
sub->list.line[subidx].end = save_ptr;
|
||||||
sub->in_use = save_in_use;
|
sub->in_use = save_in_use;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -2975,13 +2975,13 @@ retempty:
|
|||||||
|
|
||||||
if (REG_MULTI)
|
if (REG_MULTI)
|
||||||
{
|
{
|
||||||
if (sub->multilist[subidx].start.lnum < 0
|
if (sub->list.multi[subidx].start.lnum < 0
|
||||||
|| sub->multilist[subidx].end.lnum < 0)
|
|| sub->list.multi[subidx].end.lnum < 0)
|
||||||
goto retempty;
|
goto retempty;
|
||||||
/* TODO: line breaks */
|
/* TODO: line breaks */
|
||||||
len = sub->multilist[subidx].end.col
|
len = sub->list.multi[subidx].end.col
|
||||||
- sub->multilist[subidx].start.col;
|
- sub->list.multi[subidx].start.col;
|
||||||
if (cstrncmp(regline + sub->multilist[subidx].start.col,
|
if (cstrncmp(regline + sub->list.multi[subidx].start.col,
|
||||||
reginput, &len) == 0)
|
reginput, &len) == 0)
|
||||||
{
|
{
|
||||||
*bytelen = len;
|
*bytelen = len;
|
||||||
@@ -2990,11 +2990,11 @@ retempty:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (sub->linelist[subidx].start == NULL
|
if (sub->list.line[subidx].start == NULL
|
||||||
|| sub->linelist[subidx].end == NULL)
|
|| sub->list.line[subidx].end == NULL)
|
||||||
goto retempty;
|
goto retempty;
|
||||||
len = (int)(sub->linelist[subidx].end - sub->linelist[subidx].start);
|
len = (int)(sub->list.line[subidx].end - sub->list.line[subidx].start);
|
||||||
if (cstrncmp(sub->linelist[subidx].start, reginput, &len) == 0)
|
if (cstrncmp(sub->list.line[subidx].start, reginput, &len) == 0)
|
||||||
{
|
{
|
||||||
*bytelen = len;
|
*bytelen = len;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -3260,15 +3260,16 @@ nfa_regmatch(start, submatch, m)
|
|||||||
if (REG_MULTI)
|
if (REG_MULTI)
|
||||||
for (j = 0; j < submatch->in_use; j++)
|
for (j = 0; j < submatch->in_use; j++)
|
||||||
{
|
{
|
||||||
submatch->multilist[j].start =
|
submatch->list.multi[j].start =
|
||||||
t->sub.multilist[j].start;
|
t->sub.list.multi[j].start;
|
||||||
submatch->multilist[j].end = t->sub.multilist[j].end;
|
submatch->list.multi[j].end = t->sub.list.multi[j].end;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
for (j = 0; j < submatch->in_use; j++)
|
for (j = 0; j < submatch->in_use; j++)
|
||||||
{
|
{
|
||||||
submatch->linelist[j].start = t->sub.linelist[j].start;
|
submatch->list.line[j].start =
|
||||||
submatch->linelist[j].end = t->sub.linelist[j].end;
|
t->sub.list.line[j].start;
|
||||||
|
submatch->list.line[j].end = t->sub.list.line[j].end;
|
||||||
}
|
}
|
||||||
#ifdef ENABLE_LOG
|
#ifdef ENABLE_LOG
|
||||||
log_subexpr(&t->sub);
|
log_subexpr(&t->sub);
|
||||||
@@ -3355,14 +3356,14 @@ nfa_regmatch(start, submatch, m)
|
|||||||
if (REG_MULTI)
|
if (REG_MULTI)
|
||||||
for (j = 1; j < m->in_use; j++)
|
for (j = 1; j < m->in_use; j++)
|
||||||
{
|
{
|
||||||
t->sub.multilist[j].start = m->multilist[j].start;
|
t->sub.list.multi[j].start = m->list.multi[j].start;
|
||||||
t->sub.multilist[j].end = m->multilist[j].end;
|
t->sub.list.multi[j].end = m->list.multi[j].end;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
for (j = 1; j < m->in_use; j++)
|
for (j = 1; j < m->in_use; j++)
|
||||||
{
|
{
|
||||||
t->sub.linelist[j].start = m->linelist[j].start;
|
t->sub.list.line[j].start = m->list.line[j].start;
|
||||||
t->sub.linelist[j].end = m->linelist[j].end;
|
t->sub.list.line[j].end = m->list.line[j].end;
|
||||||
}
|
}
|
||||||
t->sub.in_use = m->in_use;
|
t->sub.in_use = m->in_use;
|
||||||
|
|
||||||
@@ -3907,13 +3908,13 @@ nfa_regtry(start, col)
|
|||||||
if (REG_MULTI)
|
if (REG_MULTI)
|
||||||
{
|
{
|
||||||
/* Use 0xff to set lnum to -1 */
|
/* Use 0xff to set lnum to -1 */
|
||||||
vim_memset(sub.multilist, 0xff, sizeof(struct multipos) * nfa_nsubexpr);
|
vim_memset(sub.list.multi, 0xff, sizeof(struct multipos) * nfa_nsubexpr);
|
||||||
vim_memset(m.multilist, 0xff, sizeof(struct multipos) * nfa_nsubexpr);
|
vim_memset(m.list.multi, 0xff, sizeof(struct multipos) * nfa_nsubexpr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vim_memset(sub.linelist, 0, sizeof(struct linepos) * nfa_nsubexpr);
|
vim_memset(sub.list.line, 0, sizeof(struct linepos) * nfa_nsubexpr);
|
||||||
vim_memset(m.linelist, 0, sizeof(struct linepos) * nfa_nsubexpr);
|
vim_memset(m.list.line, 0, sizeof(struct linepos) * nfa_nsubexpr);
|
||||||
}
|
}
|
||||||
sub.in_use = 0;
|
sub.in_use = 0;
|
||||||
m.in_use = 0;
|
m.in_use = 0;
|
||||||
@@ -3926,8 +3927,8 @@ nfa_regtry(start, col)
|
|||||||
{
|
{
|
||||||
for (i = 0; i < sub.in_use; i++)
|
for (i = 0; i < sub.in_use; i++)
|
||||||
{
|
{
|
||||||
reg_startpos[i] = sub.multilist[i].start;
|
reg_startpos[i] = sub.list.multi[i].start;
|
||||||
reg_endpos[i] = sub.multilist[i].end;
|
reg_endpos[i] = sub.list.multi[i].end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reg_startpos[0].lnum < 0)
|
if (reg_startpos[0].lnum < 0)
|
||||||
@@ -3949,8 +3950,8 @@ nfa_regtry(start, col)
|
|||||||
{
|
{
|
||||||
for (i = 0; i < sub.in_use; i++)
|
for (i = 0; i < sub.in_use; i++)
|
||||||
{
|
{
|
||||||
reg_startp[i] = sub.linelist[i].start;
|
reg_startp[i] = sub.list.line[i].start;
|
||||||
reg_endp[i] = sub.linelist[i].end;
|
reg_endp[i] = sub.list.line[i].end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reg_startp[0] == NULL)
|
if (reg_startp[0] == NULL)
|
||||||
|
@@ -728,6 +728,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1036,
|
||||||
/**/
|
/**/
|
||||||
1035,
|
1035,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user