From 04d40efd2e4894786c9bdc9344f1c959b2edb0d7 Mon Sep 17 00:00:00 2001 From: chrisd08 Date: Thu, 9 Apr 2020 16:03:31 +0100 Subject: [PATCH] Fixes class getters inheritance bug --- src/lualib/Descriptors.ts | 2 +- test/unit/classes/accessors.spec.ts | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/lualib/Descriptors.ts b/src/lualib/Descriptors.ts index eb5198408..7b6410ed6 100644 --- a/src/lualib/Descriptors.ts +++ b/src/lualib/Descriptors.ts @@ -50,7 +50,7 @@ function ____descriptorNewindex(this: any, key: string, value: any): void { // It's also used directly in class transform to add descriptors to the prototype function __TS__SetDescriptor(this: void, metatable: Metatable, prop: string, descriptor: PropertyDescriptor): void { - if (!metatable._descriptors) metatable._descriptors = {}; + if (!rawget(metatable, "_descriptors")) metatable._descriptors = {}; metatable._descriptors[prop] = descriptor; if (descriptor.get) metatable.__index = ____descriptorIndex; diff --git a/test/unit/classes/accessors.spec.ts b/test/unit/classes/accessors.spec.ts index 5f9232246..4004a43f2 100644 --- a/test/unit/classes/accessors.spec.ts +++ b/test/unit/classes/accessors.spec.ts @@ -66,6 +66,26 @@ test("get accessor override accessor", () => { `.expectToMatchJsResult(); }); +test("get accessor override accessor (multiple)", () => { + util.testFunction` + class Foo { + _foo = "foo"; + get foo() { return this._foo; } + } + class Bar extends Foo { + _bar = "bar"; + get foo() { return this._bar; } + } + class Baz extends Foo { + _baz = "baz"; + get foo() { return this._baz; } + } + const bar = new Bar(); + const baz = new Baz(); + return bar.foo + baz.foo; + `.expectToMatchJsResult(); +}); + test("get accessor from interface", () => { util.testFunction` class Foo {