summaryrefslogtreecommitdiff
path: root/cli/js
diff options
context:
space:
mode:
Diffstat (limited to 'cli/js')
-rw-r--r--cli/js/repl.ts13
1 files changed, 10 insertions, 3 deletions
diff --git a/cli/js/repl.ts b/cli/js/repl.ts
index 79273ed33..f38324d11 100644
--- a/cli/js/repl.ts
+++ b/cli/js/repl.ts
@@ -49,11 +49,18 @@ let lastThrownError: Value = undefined;
// Returns true if code is consumed (no error/irrecoverable error).
// Returns false if error is recoverable
function evaluate(code: string): boolean {
- const [result, errInfo] = core.evalContext(code);
+ // each evalContext is a separate function body, and we want strict mode to
+ // work, so we should ensure that the code starts with "use strict"
+ const [result, errInfo] = core.evalContext(`"use strict";\n\n${code}`);
if (!errInfo) {
- lastEvalResult = result;
+ // when a function is eval'ed with just "use strict" sometimes the result
+ // is "use strict" which should be discarded
+ lastEvalResult =
+ typeof result === "string" && result === "use strict"
+ ? undefined
+ : result;
if (!isCloseCalled()) {
- replLog(result);
+ replLog(lastEvalResult);
}
} else if (errInfo.isCompileError && isRecoverableError(errInfo.thrown)) {
// Recoverable compiler error