author Iain Ireland <>
Fri, 11 Jan 2019 18:05:36 +0000
changeset 453523 025feea5945bffc625e9cca2e23be51ee8670315
parent 453355 3f00314f0fe03d7b9166323326a136349b17b736
child 454190 9a00f3b44547afcdec22dc3d5bfe93e41c4ee843
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:

# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at

def moz_jemalloc4(value):
    die('MOZ_JEMALLOC4 is deprecated')

option('--enable-jemalloc', env='MOZ_MEMORY',
       help='Replace memory allocator with jemalloc')

@depends('--enable-jemalloc', target)
def jemalloc(value, target):
    if value.origin != 'default':
        return bool(value) or None

    if target.kernel in ('Darwin', 'Linux', 'WINNT'):
        return True

set_config('MOZ_MEMORY', jemalloc)
set_define('MOZ_MEMORY', jemalloc)
add_old_configure_assignment('MOZ_MEMORY', jemalloc)

# Because --enable-jemalloc doesn't use a default because of the dependency
# on the target, we can't use a js_option for it to propagate to js/src
# through the old-configure.
def jemalloc_for_old_configure(jemalloc):
    return '--%s-jemalloc' % ('enable' if jemalloc else 'disable')


       help='Enable ability to dynamically replace the malloc implementation')

@depends('--enable-replace-malloc', jemalloc, milestone, build_project)
def replace_malloc(value, jemalloc, milestone, build_project):
    # Enable on central for the debugging opportunities it adds.
    if value and not jemalloc:
        die('--enable-replace-malloc requires --enable-jemalloc')
    if value.origin != 'default':
        return bool(value) or None
    if build_project == 'memory':
        return True
    if milestone.is_nightly and jemalloc and build_project != 'js':
        return True

set_config('MOZ_REPLACE_MALLOC', replace_malloc)
set_define('MOZ_REPLACE_MALLOC', replace_malloc)

@depends(replace_malloc, build_project)
def replace_malloc_static(replace_malloc, build_project):
    # Default to statically linking replace-malloc libraries that can be
    # statically linked, except when building with --enable-project=memory.
    if replace_malloc and build_project != 'memory':
        return True

set_config('MOZ_REPLACE_MALLOC_STATIC', replace_malloc_static)