Skip to content

Commit 647cc5e

Browse files
authored
fix: Defuse assertion when mixing managed and unmanaged classes (#2071)
1 parent 1d11f4b commit 647cc5e

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

src/builtins.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9614,7 +9614,10 @@ function ensureVisitMembersOf(compiler: Compiler, instance: Class): void {
96149614
);
96159615

96169616
// And make sure the base visitor function exists
9617-
if (base) ensureVisitMembersOf(compiler, base);
9617+
if (base && base.type.isManaged) {
9618+
// errored earlier if not managed
9619+
ensureVisitMembersOf(compiler, base);
9620+
}
96189621
}
96199622

96209623
/** Compiles the `__visit_members` function. */

tests/compiler/unmanaged-errors.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"asc_flags": [
3+
],
4+
"stderr": [
5+
"AS207: Unmanaged classes cannot extend managed classes and vice-versa.", "UnmanagedFoo extends ManagedBase",
6+
"AS207: Unmanaged classes cannot extend managed classes and vice-versa.", "ManagedFoo extends UnmanagedBase",
7+
"EOF"
8+
]
9+
}

tests/compiler/unmanaged-errors.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
export class ManagedBase {}
2+
@unmanaged export class UnmanagedFoo extends ManagedBase {} // AS207
3+
4+
// see: https://github.com/AssemblyScript/assemblyscript/issues/2067
5+
6+
@unmanaged export class UnmanagedBase {}
7+
export class ManagedBaz {}
8+
export class ManagedFoo extends UnmanagedBase { // AS207
9+
constructor(public baz: ManagedBaz) { super(); }
10+
}
11+
12+
ERROR("EOF");

0 commit comments

Comments
 (0)