diff --git a/src/builtins.ts b/src/builtins.ts index 79d7eb1d01..22228cfb22 100644 --- a/src/builtins.ts +++ b/src/builtins.ts @@ -9614,7 +9614,10 @@ function ensureVisitMembersOf(compiler: Compiler, instance: Class): void { ); // And make sure the base visitor function exists - if (base) ensureVisitMembersOf(compiler, base); + if (base && base.type.isManaged) { + // errored earlier if not managed + ensureVisitMembersOf(compiler, base); + } } /** Compiles the `__visit_members` function. */ diff --git a/tests/compiler/unmanaged-errors.json b/tests/compiler/unmanaged-errors.json new file mode 100644 index 0000000000..a636c438c9 --- /dev/null +++ b/tests/compiler/unmanaged-errors.json @@ -0,0 +1,9 @@ +{ + "asc_flags": [ + ], + "stderr": [ + "AS207: Unmanaged classes cannot extend managed classes and vice-versa.", "UnmanagedFoo extends ManagedBase", + "AS207: Unmanaged classes cannot extend managed classes and vice-versa.", "ManagedFoo extends UnmanagedBase", + "EOF" + ] +} diff --git a/tests/compiler/unmanaged-errors.ts b/tests/compiler/unmanaged-errors.ts new file mode 100644 index 0000000000..335ff73703 --- /dev/null +++ b/tests/compiler/unmanaged-errors.ts @@ -0,0 +1,12 @@ +export class ManagedBase {} +@unmanaged export class UnmanagedFoo extends ManagedBase {} // AS207 + +// see: https://github.com/AssemblyScript/assemblyscript/issues/2067 + +@unmanaged export class UnmanagedBase {} +export class ManagedBaz {} +export class ManagedFoo extends UnmanagedBase { // AS207 + constructor(public baz: ManagedBaz) { super(); } +} + +ERROR("EOF");