Skip to content

Commit 64e42a2

Browse files
authored
Merge pull request #6689 from WalterBright/bypass
adjust hardcoded index of Error.bypassException merged-on-behalf-of: Andrei Alexandrescu <andralex@users.noreply.github.com>
2 parents 353bc87 + 705a160 commit 64e42a2

1 file changed

Lines changed: 13 additions & 6 deletions

File tree

src/ddmd/dinterpret.d

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1808,20 +1808,27 @@ public:
18081808
}
18091809
// Little sanity check to make sure it's really a Throwable
18101810
ClassReferenceExp boss = oldest.thrown;
1811-
assert((*boss.value.elements)[4].type.ty == Tclass); // Throwable.next
1811+
const next = 4; // index of Throwable.next
1812+
assert((*boss.value.elements)[next].type.ty == Tclass); // Throwable.next
18121813
ClassReferenceExp collateral = newest.thrown;
18131814
if (isAnErrorException(collateral.originalClass()) && !isAnErrorException(boss.originalClass()))
18141815
{
1816+
/* Find the index of the Error.bypassException field
1817+
*/
1818+
auto bypass = next + 1;
1819+
if ((*collateral.value.elements)[bypass].type.ty == Tuns32)
1820+
bypass += 1; // skip over _refcount field
1821+
assert((*collateral.value.elements)[bypass].type.ty == Tclass);
1822+
18151823
// The new exception bypass the existing chain
1816-
assert((*collateral.value.elements)[5].type.ty == Tclass);
1817-
(*collateral.value.elements)[5] = boss;
1824+
(*collateral.value.elements)[bypass] = boss;
18181825
return newest;
18191826
}
1820-
while ((*boss.value.elements)[4].op == TOKclassreference)
1827+
while ((*boss.value.elements)[next].op == TOKclassreference)
18211828
{
1822-
boss = cast(ClassReferenceExp)(*boss.value.elements)[4];
1829+
boss = cast(ClassReferenceExp)(*boss.value.elements)[next];
18231830
}
1824-
(*boss.value.elements)[4] = collateral;
1831+
(*boss.value.elements)[next] = collateral;
18251832
return oldest;
18261833
}
18271834

0 commit comments

Comments
 (0)