427242326c
Before evaluating a module, all variables declared at the top-level in _any_ of the modules in the dependency graph must be initialized. This is observable because a module A can access a variable imported from module B (e.g. a function) at a point when module B's body hasn't been evaluated yet. We achieve this by implementing modules internally as generators with two states (not initialized, initialized). R=adamk@chromium.org BUG=v8:1569 CQ_INCLUDE_TRYBOTS=master.tryserver.v8:v8_win_dbg Committed: https://crrev.com/f4dfb6fbe1cdd9a0f287a1a9c496e1f69f6f5d20 Committed: https://crrev.com/8c52a411583e870bd5ed100864caa58f491c5d88 Review-Url: https://codereview.chromium.org/2375793002 Cr-Original-Original-Commit-Position: refs/heads/master@{#39871} Cr-Original-Commit-Position: refs/heads/master@{#39892} Cr-Commit-Position: refs/heads/master@{#39900}
21 lines
517 B
JavaScript
21 lines
517 B
JavaScript
// Copyright 2016 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
//
|
|
// MODULE
|
|
|
|
import {check} from "modules-skip-init3.js";
|
|
|
|
assertSame(undefined, w);
|
|
assertThrows(() => x, ReferenceError);
|
|
assertThrows(() => y, ReferenceError);
|
|
assertThrows(() => z, ReferenceError);
|
|
|
|
export function* v() { return 40 }
|
|
export var w = 41;
|
|
export let x = 42;
|
|
export class y {};
|
|
export const z = "hello world";
|
|
|
|
assertTrue(check());
|