From 973c9427f0ab24e695c2501b7834d64b36ca03ed Mon Sep 17 00:00:00 2001 From: Jeremy Rifkin <51220084+jeremy-rifkin@users.noreply.github.com> Date: Sat, 3 Dec 2022 11:41:43 -0500 Subject: [PATCH] Ts-ify objdumpers (#4385) * Ts conversion for objdumpers * Updated copyright years --- .eslintrc.yml | 2 +- lib/objdumper/{_all.js => _all.ts} | 2 +- lib/objdumper/{base.js => base.ts} | 17 ++++++++++------- lib/objdumper/{binutils.js => binutils.ts} | 13 +++++-------- lib/objdumper/{da65.js => da65.ts} | 15 ++++++--------- lib/objdumper/{default.js => default.ts} | 4 ++-- .../{elftoolchain.js => elftoolchain.ts} | 13 +++++-------- lib/objdumper/{index.js => index.ts} | 2 +- lib/objdumper/{llvm.js => llvm.ts} | 13 +++++-------- 9 files changed, 36 insertions(+), 45 deletions(-) rename lib/objdumper/{_all.js => _all.ts} (96%) rename lib/objdumper/{base.js => base.ts} (71%) rename lib/objdumper/{binutils.js => binutils.ts} (88%) rename lib/objdumper/{da65.js => da65.ts} (91%) rename lib/objdumper/{default.js => default.ts} (94%) rename lib/objdumper/{elftoolchain.js => elftoolchain.ts} (89%) rename lib/objdumper/{index.js => index.ts} (96%) rename lib/objdumper/{llvm.js => llvm.ts} (89%) diff --git a/.eslintrc.yml b/.eslintrc.yml index dd0bcff9a..051465483 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -70,7 +70,7 @@ rules: no-useless-call: error no-useless-computed-key: error no-useless-concat: error - no-useless-constructor: error + '@typescript-eslint/no-useless-constructor': error no-useless-escape: error no-useless-rename: error no-useless-return: error diff --git a/lib/objdumper/_all.js b/lib/objdumper/_all.ts similarity index 96% rename from lib/objdumper/_all.js rename to lib/objdumper/_all.ts index e8e0d6207..17784a71f 100644 --- a/lib/objdumper/_all.js +++ b/lib/objdumper/_all.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2021, Compiler Explorer Authors +// Copyright (c) 2022, Compiler Explorer Authors // All rights reserved. // // Redistribution and use in source and binary forms, with or without diff --git a/lib/objdumper/base.js b/lib/objdumper/base.ts similarity index 71% rename from lib/objdumper/base.js rename to lib/objdumper/base.ts index 77cc7ee86..6d4559679 100644 --- a/lib/objdumper/base.js +++ b/lib/objdumper/base.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2021, Compiler Explorer Authors +// Copyright (c) 2022, Compiler Explorer Authors // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -22,13 +22,10 @@ // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. -export class BaseObjdumper { - constructor() { - this.intelAsmOptions = null; - this.widthOptions = null; - } +export abstract class BaseObjdumper { + constructor(protected readonly intelAsmOptions: string[], protected readonly widthOptions: string[]) {} - getDefaultArgs(outputFilename, demangle, intelAsm) { + getDefaultArgs(outputFilename: string, demangle?: boolean, intelAsm?: boolean) { const args = ['-d', outputFilename, '-l', ...this.widthOptions]; if (demangle) args.push('-C'); @@ -36,4 +33,10 @@ export class BaseObjdumper { return args; } + + // There's no way in TS to do an abstract static members and interfaces don't allow "static" at all. + // There's apparently a hack with InstanceType but I couldn't get it working. I think this is the best solution. + static get key(): string { + throw new Error('Objdumper must provide a `static get key()` implementation'); + } } diff --git a/lib/objdumper/binutils.js b/lib/objdumper/binutils.ts similarity index 88% rename from lib/objdumper/binutils.js rename to lib/objdumper/binutils.ts index da85d9797..99f33ae96 100644 --- a/lib/objdumper/binutils.js +++ b/lib/objdumper/binutils.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2021, Compiler Explorer Authors +// Copyright (c) 2022, Compiler Explorer Authors // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -25,14 +25,11 @@ import {BaseObjdumper} from './base'; export class BinutilsObjdumper extends BaseObjdumper { - static get key() { - return 'binutils'; - } - constructor() { - super(); + super(['-M', 'intel'], ['--insn-width=16']); + } - this.intelAsmOptions = ['-M', 'intel']; - this.widthOptions = ['--insn-width=16']; + static override get key() { + return 'binutils'; } } diff --git a/lib/objdumper/da65.js b/lib/objdumper/da65.ts similarity index 91% rename from lib/objdumper/da65.js rename to lib/objdumper/da65.ts index 5cf7a7acf..b48bfc631 100644 --- a/lib/objdumper/da65.js +++ b/lib/objdumper/da65.ts @@ -25,18 +25,15 @@ import {BaseObjdumper} from './base'; export class Da65Objdumper extends BaseObjdumper { - static get key() { - return 'da65'; - } - constructor() { - super(); - - this.intelAsmOptions = []; - this.widthOptions = []; + super([], []); } - getDefaultArgs(outputFilename) { + override getDefaultArgs(outputFilename: string) { return [outputFilename]; } + + static override get key() { + return 'da65'; + } } diff --git a/lib/objdumper/default.js b/lib/objdumper/default.ts similarity index 94% rename from lib/objdumper/default.js rename to lib/objdumper/default.ts index c89ca48d8..886d2d429 100644 --- a/lib/objdumper/default.js +++ b/lib/objdumper/default.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2021, Compiler Explorer Authors +// Copyright (c) 2022, Compiler Explorer Authors // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -25,7 +25,7 @@ import {BinutilsObjdumper} from './binutils'; export class DefaultObjdumper extends BinutilsObjdumper { - static get key() { + static override get key() { return 'default'; } } diff --git a/lib/objdumper/elftoolchain.js b/lib/objdumper/elftoolchain.ts similarity index 89% rename from lib/objdumper/elftoolchain.js rename to lib/objdumper/elftoolchain.ts index d6d5221b6..408aa2b3a 100644 --- a/lib/objdumper/elftoolchain.js +++ b/lib/objdumper/elftoolchain.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2021, Compiler Explorer Authors +// Copyright (c) 2022, Compiler Explorer Authors // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -25,14 +25,11 @@ import {BaseObjdumper} from './base'; export class ElfToolChainObjdumper extends BaseObjdumper { - static get key() { - return 'elftoolchain'; - } - constructor() { - super(); + super(['-M', 'intel'], []); + } - this.intelAsmOptions = ['-M', 'intel']; - this.widthOptions = []; + static override get key() { + return 'elftoolchain'; } } diff --git a/lib/objdumper/index.js b/lib/objdumper/index.ts similarity index 96% rename from lib/objdumper/index.js rename to lib/objdumper/index.ts index 791d8a500..716db51c1 100644 --- a/lib/objdumper/index.js +++ b/lib/objdumper/index.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2021, Compiler Explorer Authors +// Copyright (c) 2022, Compiler Explorer Authors // All rights reserved. // // Redistribution and use in source and binary forms, with or without diff --git a/lib/objdumper/llvm.js b/lib/objdumper/llvm.ts similarity index 89% rename from lib/objdumper/llvm.js rename to lib/objdumper/llvm.ts index 93e73bc4a..217ba1073 100644 --- a/lib/objdumper/llvm.js +++ b/lib/objdumper/llvm.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2021, Compiler Explorer Authors +// Copyright (c) 2022, Compiler Explorer Authors // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -25,14 +25,11 @@ import {BaseObjdumper} from './base'; export class LlvmObjdumper extends BaseObjdumper { - static get key() { - return 'llvm'; - } - constructor() { - super(); + super(['--x86-asm-syntax=intel'], []); + } - this.intelAsmOptions = ['--x86-asm-syntax=intel']; - this.widthOptions = []; + static override get key() { + return 'llvm'; } } -- GitLab