From beb2757fe4c06209e07d93e71313f6c117804a68 Mon Sep 17 00:00:00 2001 From: Chris Bajorin Date: Fri, 13 Mar 2020 16:19:15 -0400 Subject: [PATCH 1/2] handle non-indexable types for lefthand value of instanceof --- src/lualib/InstanceOf.ts | 2 +- test/unit/classes/instanceof.spec.ts | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/lualib/InstanceOf.ts b/src/lualib/InstanceOf.ts index b856ddaa9..c4b354aca 100644 --- a/src/lualib/InstanceOf.ts +++ b/src/lualib/InstanceOf.ts @@ -8,7 +8,7 @@ function __TS__InstanceOf(this: void, obj: LuaClassInstance, classTbl: LuaClass) return !!classTbl[Symbol.hasInstance](obj); } - if (obj !== undefined) { + if (type(obj) === "table") { let luaClass = obj.constructor; while (luaClass !== undefined) { if (luaClass === classTbl) { diff --git a/test/unit/classes/instanceof.spec.ts b/test/unit/classes/instanceof.spec.ts index fdbb6e36e..8662190a5 100644 --- a/test/unit/classes/instanceof.spec.ts +++ b/test/unit/classes/instanceof.spec.ts @@ -49,6 +49,28 @@ test("null instanceof Class", () => { `.expectToMatchJsResult(); }); +test("function instance of Class", () => { + util.testFunction` + class myClass {} + const noop = () => {} + return (noop as any) instanceof myClass; + `.expectToMatchJsResult(); +}); + +test("boolean instance of Class", () => { + util.testFunction` + class myClass {} + return (false as any) instanceof myClass; + `.expectToMatchJsResult(); +}); + +test("number instance of Class", () => { + util.testFunction` + class myClass {} + return (5 as any) instanceof myClass; + `.expectToMatchJsResult(); +}); + test("instanceof export", () => { util.testModule` export class myClass {} From b65f1fa602aec7a4e9d8bf88d7052db75c75789e Mon Sep 17 00:00:00 2001 From: Chris Bajorin Date: Fri, 13 Mar 2020 17:02:20 -0400 Subject: [PATCH 2/2] cleanup --- src/lualib/InstanceOf.ts | 2 +- test/unit/classes/instanceof.spec.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lualib/InstanceOf.ts b/src/lualib/InstanceOf.ts index c4b354aca..b75c040c2 100644 --- a/src/lualib/InstanceOf.ts +++ b/src/lualib/InstanceOf.ts @@ -8,7 +8,7 @@ function __TS__InstanceOf(this: void, obj: LuaClassInstance, classTbl: LuaClass) return !!classTbl[Symbol.hasInstance](obj); } - if (type(obj) === "table") { + if (typeof obj === "object") { let luaClass = obj.constructor; while (luaClass !== undefined) { if (luaClass === classTbl) { diff --git a/test/unit/classes/instanceof.spec.ts b/test/unit/classes/instanceof.spec.ts index 8662190a5..4e4000153 100644 --- a/test/unit/classes/instanceof.spec.ts +++ b/test/unit/classes/instanceof.spec.ts @@ -49,22 +49,22 @@ test("null instanceof Class", () => { `.expectToMatchJsResult(); }); -test("function instance of Class", () => { +test("function instanceof Class", () => { util.testFunction` class myClass {} - const noop = () => {} + const noop = () => {}; return (noop as any) instanceof myClass; `.expectToMatchJsResult(); }); -test("boolean instance of Class", () => { +test("boolean instanceof Class", () => { util.testFunction` class myClass {} return (false as any) instanceof myClass; `.expectToMatchJsResult(); }); -test("number instance of Class", () => { +test("number instanceof Class", () => { util.testFunction` class myClass {} return (5 as any) instanceof myClass;