1bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com// Copyright 2012 the V8 project authors. All rights reserved. 2f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// Redistribution and use in source and binary forms, with or without 3f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// modification, are permitted provided that the following conditions are 4f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// met: 5f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// 6f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// * Redistributions of source code must retain the above copyright 7f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// notice, this list of conditions and the following disclaimer. 8f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// * Redistributions in binary form must reproduce the above 9f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// copyright notice, this list of conditions and the following 10f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// disclaimer in the documentation and/or other materials provided 11f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// with the distribution. 12f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// * Neither the name of Google Inc. nor the names of its 13f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// contributors may be used to endorse or promote products derived 14f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// from this software without specific prior written permission. 15f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// 16f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 28f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// Flags: --harmony-modules 29f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 30bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com// Test basic module syntax, with and without automatic semicolon insertion. 31f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 32f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgmodule A {} 33f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 34f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgmodule A1 = A 35f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgmodule A2 = A; 36f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgmodule A3 = A2 37f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 38f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgmodule B { 39bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com export vx 40bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com export vy, lz, c, f 41812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 42812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org var vx 43812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org var vx, vy; 44812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org var vx = 0, vy 45812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org let lx, ly 46812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org let lz = 1 47f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org const c = 9 48f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org function f() {} 49812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 50bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com module C0 {} 51bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com 52bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com export module C { 53f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org let x 54bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com export module D { export let x } 55f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org let y 56f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org } 57812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 58f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org let zz = "" 59812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 60812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org export var x0 61812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org export var x1, x2 = 6, x3 62812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org export let y0 63812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org export let y1 = 0, y2 64812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org export const z0 = 0 65812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org export const z1 = 2, z2 = 3 66812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org export function f0() {} 67812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org export module M1 {} 68812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org export module M2 = C.D 69812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org export module M3 at "http://where" 70812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 71812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org import i0 from I 72bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com import i1, i2, i3, M from I 73ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com //import i4, i5 from "http://where" 74f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org} 75f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 76bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.commodule I { 77bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com export let i0, i1, i2, i3; 78bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com export module M {} 79bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com} 80bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com 81f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgmodule C1 = B.C; 82f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgmodule D1 = B.C.D 83f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgmodule D2 = C1.D 84f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgmodule D3 = D2 85f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 86f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgmodule E1 at "http://where" 87f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgmodule E2 at "http://where"; 88ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.commodule E3 = E1 89f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 90f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// Check that ASI does not interfere. 91f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 92a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.orgmodule X 93f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org{ 94f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orglet x 95f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org} 96f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 97a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.orgmodule Y 98f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org= 99f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgX 100f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 101a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.orgmodule Z 102f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgat 103f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org"file://local" 104a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org 105812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgimport 106ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comvx 107812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org, 108ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comvy 109812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgfrom 110ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comB 111812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 112bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com 113812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgmodule Wrap { 114812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgexport 115812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgx 116812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org, 117812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgy 118812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 11981cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.orgvar 12081cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.orgx 12181cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org, 12281cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.orgy 12381cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org 124812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgexport 125812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgvar 126812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgv1 = 1 127812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 128812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgexport 129812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orglet 130812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgv2 = 2 131812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 132812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgexport 133812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgconst 134812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgv3 = 3 135812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 136812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgexport 137812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgfunction 138812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgf 139812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org( 140812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org) 141812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org{ 142812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 143812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 144812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgexport 145812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgmodule V 146812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org{ 147812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 148812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 149812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 150bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.comexport A, A1, A2, A3, B, I, C1, D1, D2, D3, E1, E2, E3, X, Y, Z, Wrap, x, y, UU 151bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com 152bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com 153a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org 154a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org// Check that 'module' still works as an identifier. 155a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org 156a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.orgvar module 157a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.orgmodule = {} 158a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.orgmodule["a"] = 6 159a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.orgfunction module() {} 160a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.orgfunction f(module) { return module } 161a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.orgtry {} catch (module) {} 162a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org 163a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.orgmodule 164a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.orgv = 20 16533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 16633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 16733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 16833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// Check that module declarations are rejected in eval or local scope. 16933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 17033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgmodule M { export let x; } 17133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 17233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("export x;", SyntaxError); // It's using eval, so should throw. 17333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("export let x;", SyntaxError); 17433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("import x from M;", SyntaxError); 17533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("module M {};", SyntaxError); 17633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 17733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("{ export x; }", SyntaxError); 17833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("{ export let x; }", SyntaxError); 17933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("{ import x from M; }", SyntaxError); 18033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("{ module M {}; }", SyntaxError); 18133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 18233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("function f() { export x; }", SyntaxError); 18333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("function f() { export let x; }", SyntaxError); 18433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("function f() { import x from M; }", SyntaxError); 18533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("function f() { module M {}; }", SyntaxError); 18633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 18733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("function f() { { export x; } }", SyntaxError); 18833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("function f() { { export let x; } }", SyntaxError); 18933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("function f() { { import x from M; } }", SyntaxError); 19033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgassertThrows("function f() { { module M {}; } }", SyntaxError); 191