mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-17 05:43:59 +00:00
Fix relative numerical addressing (addr,+N).
As a bonus the patch untangles a bit the logic and makes the code easier to grasp. PR: 192108 MFC after: 1 week
This commit is contained in:
parent
27c095f49e
commit
b38ebc0538
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=269302
|
@ -288,24 +288,32 @@ applies(struct s_command *cp)
|
|||
r = 1;
|
||||
else if (cp->a2)
|
||||
if (cp->startline > 0) {
|
||||
if (MATCH(cp->a2)) {
|
||||
cp->startline = 0;
|
||||
lastaddr = 1;
|
||||
r = 1;
|
||||
} else if (linenum - cp->startline <= cp->a2->u.l)
|
||||
r = 1;
|
||||
else if ((cp->a2->type == AT_LINE &&
|
||||
linenum > cp->a2->u.l) ||
|
||||
(cp->a2->type == AT_RELLINE &&
|
||||
linenum - cp->startline > cp->a2->u.l)) {
|
||||
/*
|
||||
* We missed the 2nd address due to a branch,
|
||||
* so just close the range and return false.
|
||||
*/
|
||||
cp->startline = 0;
|
||||
r = 0;
|
||||
} else
|
||||
r = 1;
|
||||
switch (cp->a2->type) {
|
||||
case AT_RELLINE:
|
||||
if (linenum - cp->startline <= cp->a2->u.l)
|
||||
r = 1;
|
||||
else {
|
||||
cp->startline = 0;
|
||||
r = 0;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (MATCH(cp->a2)) {
|
||||
cp->startline = 0;
|
||||
lastaddr = 1;
|
||||
r = 1;
|
||||
} else if (cp->a2->type == AT_LINE &&
|
||||
linenum > cp->a2->u.l) {
|
||||
/*
|
||||
* We missed the 2nd address due to a
|
||||
* branch, so just close the range and
|
||||
* return false.
|
||||
*/
|
||||
cp->startline = 0;
|
||||
r = 0;
|
||||
} else
|
||||
r = 1;
|
||||
}
|
||||
} else if (MATCH(cp->a1)) {
|
||||
/*
|
||||
* If the second address is a number less than or
|
||||
|
|
Loading…
Reference in a new issue