From e2ca45cc7610170ee78b754befd1da95dc360da8 Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Tue, 7 Jan 2020 07:30:04 -0800 Subject: [PATCH] Patch mismatch methods --- modern/__generated__/makiInterfaces.ts | 6 +-- .../maki-interpreter/objectData/stdPatched.js | 45 ++++++++++++++++++- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/modern/__generated__/makiInterfaces.ts b/modern/__generated__/makiInterfaces.ts index 46f6982e..5df5273f 100644 --- a/modern/__generated__/makiInterfaces.ts +++ b/modern/__generated__/makiInterfaces.ts @@ -258,7 +258,7 @@ export interface Wac extends MakiObject { show(): void; hide(): void; isvisible(): boolean; - onnotify(notifstr: string, a: number, b: number): void; + onnotify(command: string, param: string, a: number, b: number): number; onshow(): void; onhide(): void; setstatusbar(onoff: boolean): void; @@ -731,7 +731,7 @@ export interface GuiList extends GuiObject { setminimumsize(size: number): void; getwantautodeselect(): number; setwantautodeselect(want: number): void; - onsetvisible(show: number): void; + onsetvisible(show: boolean): void; setautosort(dosort: number): void; setfontsize(size: number): number; getfontsize(): number; @@ -798,7 +798,7 @@ export interface GuiTree extends GuiObject { onmousewheelup(clicked: number, lines: number): number; onmousewheeldown(clicked: number, lines: number): number; oncontextmenu(x: number, y: number): number; - onchar(c: number): number; + onchar(c: string): number; onitemrecvdrop(item: TreeItem): void; onlabelchange(item: TreeItem): void; onitemselected(item: TreeItem): void; diff --git a/modern/src/maki-interpreter/objectData/stdPatched.js b/modern/src/maki-interpreter/objectData/stdPatched.js index 8a88d6c0..8472175e 100644 --- a/modern/src/maki-interpreter/objectData/stdPatched.js +++ b/modern/src/maki-interpreter/objectData/stdPatched.js @@ -1,5 +1,17 @@ const std = require("./std.json"); +const NAME_TO_DEF = {}; + +Object.values(std).forEach(value => { + NAME_TO_DEF[value.name] = value; +}); + +function getMethod(className, methodName) { + return NAME_TO_DEF[className].functions.find(({ name }) => { + return name === methodName; + }); +} + // Between myself and the author of the decompiler, a number of manual tweaks // have been made to our current object definitions. This function recreates // those tweaks so we can have an apples to apples comparison. @@ -10,13 +22,42 @@ const std = require("./std.json"); * > The std.mi has this set as void, but we checked in Winamp and confirmed it * > returns 0/1 */ -std["5D0C5BB67DE14b1fA70F8D1659941941"].functions[5].result = "boolean"; +getMethod("Timer", "isRunning").result = "boolean"; /* * From Object.pm * * > note, std.mi does not have this parameter! */ -std.B4DCCFFF81FE4bcc961B720FD5BE0FFF.functions[0].parameters[0][1] = "onoff"; +getMethod("ToggleButton", "onToggle").parameters[0][1] = "onoff"; + +// Some methods are not compatible with the type signature of their parent class +getMethod("GuiTree", "onChar").parameters[0][0] = "string"; +getMethod("GuiList", "onSetVisible").parameters[0][0] = "boolean"; + +// I'm not sure how to get these to match +getMethod("Wac", "onNotify").parameters = getMethod( + "Object", + "onNotify" +).parameters; +getMethod("Wac", "onNotify").result = "number"; + +/* + +Here's the error we get without that patch: + +modern/__generated__/makiInterfaces.ts:254:18 - error TS2430: Interface 'Wac' incorrectly extends interface 'MakiObject'. + Types of property 'onnotify' are incompatible. + Type '(notifstr: string, a: number, b: number) => void' is not assignable to type '(command: string, param: string, a: number, b: number) => number'. + Types of parameters 'a' and 'param' are incompatible. + Type 'string' is not assignable to type 'number'. + +254 export interface Wac extends MakiObject { + ~~~ + + +Found 1 error. + + */ module.exports = std;