13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved. 2592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// Redistribution and use in source and binary forms, with or without 3592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// modification, are permitted provided that the following conditions are 4592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// met: 5592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// 6592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// * Redistributions of source code must retain the above copyright 7592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// notice, this list of conditions and the following disclaimer. 8592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// * Redistributions in binary form must reproduce the above 9592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// copyright notice, this list of conditions and the following 10592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// disclaimer in the documentation and/or other materials provided 11592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// with the distribution. 12592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// * Neither the name of Google Inc. nor the names of its 13592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// contributors may be used to endorse or promote products derived 14592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// from this software without specific prior written permission. 15592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// 16592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Flags: --harmony-modules 29592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Test basic module syntax, with and without automatic semicolon insertion. 31592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule A {} 3385b71799222b55eb5dd74ea26efe0c64ab655c8cBen Murdoch 343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule A1 = A 353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule A2 = A; 363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule A3 = A2 373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule B { 393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export vx 403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export vy, lz, c, f 413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var vx 433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var vx, vy; 443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var vx = 0, vy 453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch let lx, ly 463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch let lz = 1 473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch const c = 9 483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch function f() {} 493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch module C0 {} 513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export module C { 533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch let x 543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export module D { export let x } 553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch let y 563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch let zz = "" 593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export var x0 613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export var x1, x2 = 6, x3 623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export let y0 633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export let y1 = 0, y2 643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export const z0 = 0 653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export const z1 = 2, z2 = 3 663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export function f0() {} 673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export module M1 {} 683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export module M2 = C.D 693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export module M3 at "http://where" 703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch import i0 from I 723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch import i1, i2, i3, M from I 73b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch //import i4, i5 from "http://where" 743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule I { 773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export let i0, i1, i2, i3; 783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch export module M {} 793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule C1 = B.C; 823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule D1 = B.C.D 833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule D2 = C1.D 843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule D3 = D2 853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule E1 at "http://where" 873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule E2 at "http://where"; 88b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochmodule E3 = E1 893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Check that ASI does not interfere. 913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule X 933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch{ 943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochlet x 953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule Y 983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch= 993ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochX 1003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule Z 1023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochat 1033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch"file://local" 1043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochimport 106b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvx 1073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch, 108b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvy 1093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfrom 110b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochB 1113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule Wrap { 1143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochexport 1153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochx 1163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch, 1173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochy 1183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 119b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar 120b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochx 121b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch, 122b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochy 123b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochexport 1253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar 1263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochv1 = 1 1273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochexport 1293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochlet 1303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochv2 = 2 1313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochexport 1333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochconst 1343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochv3 = 3 1353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochexport 1373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction 1383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochf 1393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch( 1403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch) 1413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch{ 14285b71799222b55eb5dd74ea26efe0c64ab655c8cBen Murdoch} 143592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch 1443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochexport 1453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule V 1463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch{ 1473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochexport A, A1, A2, A3, B, I, C1, D1, D2, D3, E1, E2, E3, X, Y, Z, Wrap, x, y, UU 1513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Check that 'module' still works as an identifier. 1553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar module 1573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule = {} 1583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule["a"] = 6 1593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction module() {} 1603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f(module) { return module } 1613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtry {} catch (module) {} 1623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochmodule 1643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochv = 20 165b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 166b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 167b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 168b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Check that module declarations are rejected in eval or local scope. 169b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 170b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochmodule M { export let x; } 171b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 172b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("export x;", SyntaxError); // It's using eval, so should throw. 173b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("export let x;", SyntaxError); 174b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("import x from M;", SyntaxError); 175b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("module M {};", SyntaxError); 176b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 177b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("{ export x; }", SyntaxError); 178b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("{ export let x; }", SyntaxError); 179b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("{ import x from M; }", SyntaxError); 180b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("{ module M {}; }", SyntaxError); 181b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 182b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("function f() { export x; }", SyntaxError); 183b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("function f() { export let x; }", SyntaxError); 184b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("function f() { import x from M; }", SyntaxError); 185b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("function f() { module M {}; }", SyntaxError); 186b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 187b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("function f() { { export x; } }", SyntaxError); 188b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("function f() { { export let x; } }", SyntaxError); 189b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("function f() { { import x from M; } }", SyntaxError); 190b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows("function f() { { module M {}; } }", SyntaxError); 191