blob: ad0f55aa5dc1ba2d31c67feccce7a34c8f0d7104 [file] [log] [blame]
// Copyright (C) 2017 Lucas Azzola. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Lucas Azzola
esid: pending
description: lexical environment runtime semantics for optional catch binding
features: [optional-catch-binding]
info: |
Runtime Semantics: CatchClauseEvaluation
Catch : catch Block
Let oldEnv be the running execution context's LexicalEnvironment.
Let catchEnv be NewDeclarativeEnvironment(oldEnv).
Set the running execution context's LexicalEnvironment to catchEnv.
(...)
Set the running execution context's LexicalEnvironment to oldEnv.
Return Completion(B).
---*/
let x = 1;
let ranCatch = false;
try {
x = 2;
throw new Error();
} catch {
let x = 3;
let y = true;
ranCatch = true;
}
assert(ranCatch, 'executed `catch` block');
assert.sameValue(x, 2);
assert.throws(ReferenceError, function() {
y;
});