tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

global-if-decl-else-decl-a-eval-global-existing-non-enumerable-global-init.js (1867B)


      1 // This file was procedurally generated from the following sources:
      2 // - src/annex-b-fns/eval-global-existing-non-enumerable-global-init.case
      3 // - src/annex-b-fns/eval-global/direct-if-decl-else-decl-a.template
      4 /*---
      5 description: Variable binding is left in place by legacy function hoisting. CreateGlobalVariableBinding leaves the binding as non-enumerable even if it has the chance to change it to be enumerable. (IfStatement with a declaration in both statement positions in eval code)
      6 esid: sec-functiondeclarations-in-ifstatement-statement-clauses
      7 flags: [generated, noStrict]
      8 includes: [fnGlobalObject.js, propertyHelper.js]
      9 info: |
     10    The following rules for IfStatement augment those in 13.6:
     11 
     12    IfStatement[Yield, Return]:
     13        if ( Expression[In, ?Yield] ) FunctionDeclaration[?Yield] else Statement[?Yield, ?Return]
     14        if ( Expression[In, ?Yield] ) Statement[?Yield, ?Return] else FunctionDeclaration[?Yield]
     15        if ( Expression[In, ?Yield] ) FunctionDeclaration[?Yield] else FunctionDeclaration[?Yield]
     16        if ( Expression[In, ?Yield] ) FunctionDeclaration[?Yield]
     17 
     18 
     19    B.3.3.3 Changes to EvalDeclarationInstantiation
     20 
     21    [...]
     22    i. If varEnvRec is a global Environment Record, then
     23       i. Perform ? varEnvRec.CreateGlobalVarBinding(F, true).
     24    [...]
     25 
     26 ---*/
     27 Object.defineProperty(fnGlobalObject(), 'f', {
     28  value: 'x',
     29  enumerable: false,
     30  writable: true,
     31  configurable: true
     32 });
     33 
     34 eval(
     35  'var global = fnGlobalObject();\
     36  assert.sameValue(f, "x", "binding is not reinitialized");\
     37  \
     38  verifyProperty(global, "f", {\
     39    enumerable: false,\
     40    writable: true,\
     41    configurable: true\
     42  }, { restore: true });if (true) function f() {  } else function _f() {}'
     43 );
     44 
     45 assert.sameValue(typeof f, "function");
     46 verifyProperty(global, 'f', {
     47  enumerable: false,
     48  writable: true,
     49  configurable: true
     50 });
     51 
     52 reportCompare(0, 0);