author Iain Ireland <>
Fri, 11 Jan 2019 18:05:36 +0000
changeset 453523 025feea5945bffc625e9cca2e23be51ee8670315
parent 401010 4f1a5068af92d329781d4805519a0904c45d0e67
permissions -rw-r--r--
Bug 1480390: Move ForOfIterClose logic inside TryNoteIter r=tcampbell This patch was intended to be a pure refactoring of existing code with no side-effects, moving the logic for handling for-of/for-of-iterclose trynotes inside TryNoteIter to avoid duplicating logic in all users of TryNoteIter. However, it turns out that there was a subtle preexisting bug in TryNoteIter that is fixed by the refactoring. Specifically, the logic to skip from a for-of-iterclose to its enclosing for-of must run before the logic to skip trynotes based on stack depth. Otherwise, the stack depth code may filter out the enclosing for-of (see the attached test case for an example) and we will skip too many try-notes. Differential Revision:


.. glossary::

   object directory
       A directory holding the output of the build system. The build
       system attempts to isolate all file modifications to this
       directory. By convention, object directories are commonly
       directories under the source directory prefixed with **obj-**.
       e.g. **obj-firefox**.

       A shell script used to configure the build system.

       A generated shell script which detects the current system
       environment, applies a requested set of build configuration
       options, and writes out metadata to be consumed by the build

       An executable file produced by **configure** that takes the
       generated build config and writes out files used to build the
       tree. Traditionally, config.status writes out a bunch of

   install manifest
       A file containing metadata describing file installation rules.
       A large part of the build system consists of copying files
       around to appropriate places. We write out special files
       describing the set of required operations so we can process the
       actions efficiently. These files are install manifests.

   clobber build
      A build performed with an initially empty object directory. All
      build actions must be performed.

   incremental build
      A build performed with the result of a previous build in an
      object directory. The build should not have to work as hard because
      it will be able to reuse the work from previous builds.

      An API for accessing a common and limited subset of the build and
      run-time configuration. See :ref:`mozinfo`.