<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
    <title></title>
  </head>
  <body bgcolor="#ffffff" text="#000000">
    On 12.10.2010 10:31, Jeff Walden wrote:
    <blockquote cite="mid:4CB400CB.3060805@mit.edu" type="cite">
      <blockquote type="cite">10.4.2.1&nbsp; Strict Mode Restrictions
        <br>
        <br>
        The eval code cannot instantiate variable or function bindings
        in the
        <br>
        variable environment of the calling context that invoked the
        eval if
        <br>
        either the code of the calling context or the eval code is
        strict code.
        <br>
        Instead such bindings are instantiated in a new
        VariableEnvironment
        <br>
        that is only accessible to the eval code.
        <br>
      </blockquote>
      <br>
      At risk of pedantry, this is not consistent with the remainder of
      ES5.
      <br>
      <br>
      First: the strictness of the calling context does not affect
      calculation of eval code's variable environment if the call to
      eval was indirect (10.4.2 step 3).&nbsp; Second: for an indirect eval
      of non-strict code, the variable environment used is the global
      environment.
      <br>
      <br>
      Therefore, if an indirect eval occurs at global level in strict
      code, it *can* "instantiate variable or function bindings in the
      variable environment of the calling context that invoked the eval"
      even though "the code of the calling context...is strict code".&nbsp;
      Further, "such bindings are instantiated in a new
      VariableEnvironment" that is accessible to other global code and
      to other Programs executed against the global environment, and it
      is *not* "only accessible to the eval code".
      <br>
      <br>
    </blockquote>
    <br>
    Hm, good catch. So, this all about that 10.4.2 exists on the step 1
    without mentioning about <i>strictVarEnv</i> which appear only on
    step 3. However, it's just a (minor?) inconsistency of the 10.4.2
    (step 1). Because after that 10.4.2.1 says what is eval strict
    variant (i.e. considering the strictness of the current calling
    context). Moreover, as I see in BESEN implementation now, such
    indirect eval's code is treated as strict though (that is, the
    implementation determines it based on 10.4.2.1). So the erratum is
    to fix 10.4.2 step 1, as I understand you.<br>
    <br>
    Dmitry.<br>
    <br>
    <blockquote cite="mid:4CB400CB.3060805@mit.edu" type="cite">I
      suspect this paragraph was meant to be informative rather than
      normative, and I assume most readers will treat it as such,
      referring to the paragraph only for basic understanding, not exact
      detail.&nbsp; Even still, it shouldn't contradict the rest of the spec.
      <br>
      <br>
      Jeff
      <br>
      _______________________________________________
      <br>
      es5-discuss mailing list
      <br>
      <a class="moz-txt-link-abbreviated" href="mailto:es5-discuss@mozilla.org">es5-discuss@mozilla.org</a>
      <br>
      <a class="moz-txt-link-freetext" href="https://mail.mozilla.org/listinfo/es5-discuss">https://mail.mozilla.org/listinfo/es5-discuss</a>
      <br>
    </blockquote>
    <br>
  </body>
</html>