diff options
Diffstat (limited to 'js')
-rw-r--r-- | js/console.ts | 8 | ||||
-rw-r--r-- | js/console_test.ts | 5 | ||||
-rw-r--r-- | js/globals.ts | 1 |
3 files changed, 14 insertions, 0 deletions
diff --git a/js/console.ts b/js/console.ts index 10be30ace..c16ea0302 100644 --- a/js/console.ts +++ b/js/console.ts @@ -483,14 +483,18 @@ type PrintFunc = (x: string, isErr?: boolean) => void; const countMap = new Map<string, number>(); const timerMap = new Map<string, number>(); +export const isConsoleInstance = Symbol("isConsoleInstance"); export class Console { indentLevel: number; collapsedAt: number | null; + [isConsoleInstance]: boolean = false; + /** @internal */ constructor(private printFunc: PrintFunc) { this.indentLevel = 0; this.collapsedAt = null; + this[isConsoleInstance] = true; } /** Writes the arguments to stdout */ @@ -730,6 +734,10 @@ export class Console { cursorTo(stdout, 0, 0); clearScreenDown(stdout); }; + + static [Symbol.hasInstance](instance: Console): boolean { + return instance[isConsoleInstance]; + } } /** diff --git a/js/console_test.ts b/js/console_test.ts index 7bedcf973..a4ff8a4da 100644 --- a/js/console_test.ts +++ b/js/console_test.ts @@ -20,6 +20,11 @@ test(function consoleShouldBeANamespace() { assertEquals(prototype2, Object.prototype); }); +test(function consoleHasRightInstance() { + assert(console instanceof Console); + assertEquals({} instanceof Console, false); +}); + test(function consoleTestAssertShouldNotThrowError() { console.assert(true); diff --git a/js/globals.ts b/js/globals.ts index 93fe6dbe7..4bb40fdb5 100644 --- a/js/globals.ts +++ b/js/globals.ts @@ -52,6 +52,7 @@ Object.freeze(window.Deno); // by ObjectCreate(%ObjectPrototype%), instead of %ObjectPrototype%. let console = Object.create({}) as consoleTypes.Console; Object.assign(console, new consoleTypes.Console(core.print)); +console[consoleTypes.isConsoleInstance] = true; // Globally available functions and object instances. window.atob = textEncoding.atob; |