blob: 93e69e3ad9c2690682034befb670518344061d1c [file] [log] [blame]
erik.corry@gmail.combbceb572012-03-09 10:52:05 +00001// Copyright 2012 the V8 project authors. All rights reserved.
jkummerow@chromium.orgf7a58842012-02-21 10:08:21 +00002// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions are
4// met:
5//
6// * Redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer.
8// * Redistributions in binary form must reproduce the above
9// copyright notice, this list of conditions and the following
10// disclaimer in the documentation and/or other materials provided
11// with the distribution.
12// * Neither the name of Google Inc. nor the names of its
13// contributors may be used to endorse or promote products derived
14// from this software without specific prior written permission.
15//
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28// Flags: --harmony-modules
29
erik.corry@gmail.combbceb572012-03-09 10:52:05 +000030// Test basic module syntax, with and without automatic semicolon insertion.
jkummerow@chromium.orgf7a58842012-02-21 10:08:21 +000031
32module A {}
33
34module A1 = A
35module A2 = A;
36module A3 = A2
37
38module B {
erik.corry@gmail.combbceb572012-03-09 10:52:05 +000039 export vx
40 export vy, lz, c, f
ulan@chromium.org812308e2012-02-29 15:58:45 +000041
42 var vx
43 var vx, vy;
44 var vx = 0, vy
45 let lx, ly
46 let lz = 1
jkummerow@chromium.orgf7a58842012-02-21 10:08:21 +000047 const c = 9
48 function f() {}
ulan@chromium.org812308e2012-02-29 15:58:45 +000049
erik.corry@gmail.combbceb572012-03-09 10:52:05 +000050 module C0 {}
51
52 export module C {
jkummerow@chromium.orgf7a58842012-02-21 10:08:21 +000053 let x
erik.corry@gmail.combbceb572012-03-09 10:52:05 +000054 export module D { export let x }
jkummerow@chromium.orgf7a58842012-02-21 10:08:21 +000055 let y
56 }
ulan@chromium.org812308e2012-02-29 15:58:45 +000057
jkummerow@chromium.orgf7a58842012-02-21 10:08:21 +000058 let zz = ""
ulan@chromium.org812308e2012-02-29 15:58:45 +000059
60 export var x0
61 export var x1, x2 = 6, x3
62 export let y0
63 export let y1 = 0, y2
64 export const z0 = 0
65 export const z1 = 2, z2 = 3
66 export function f0() {}
67 export module M1 {}
68 export module M2 = C.D
69 export module M3 at "http://where"
70
71 import i0 from I
erik.corry@gmail.combbceb572012-03-09 10:52:05 +000072 import i1, i2, i3, M from I
ulan@chromium.org812308e2012-02-29 15:58:45 +000073 import i4, i5 from "http://where"
jkummerow@chromium.orgf7a58842012-02-21 10:08:21 +000074}
75
erik.corry@gmail.combbceb572012-03-09 10:52:05 +000076module I {
77 export let i0, i1, i2, i3;
78 export module M {}
79}
80
jkummerow@chromium.orgf7a58842012-02-21 10:08:21 +000081module C1 = B.C;
82module D1 = B.C.D
83module D2 = C1.D
84module D3 = D2
85
86module E1 at "http://where"
87module E2 at "http://where";
88module E3 = E1.F
89
jkummerow@chromium.orgf7a58842012-02-21 10:08:21 +000090// Check that ASI does not interfere.
91
yangguo@chromium.orga7d3df92012-02-27 11:46:55 +000092module X
jkummerow@chromium.orgf7a58842012-02-21 10:08:21 +000093{
94let x
95}
96
yangguo@chromium.orga7d3df92012-02-27 11:46:55 +000097module Y
jkummerow@chromium.orgf7a58842012-02-21 10:08:21 +000098=
99X
100
yangguo@chromium.orga7d3df92012-02-27 11:46:55 +0000101module Z
jkummerow@chromium.orgf7a58842012-02-21 10:08:21 +0000102at
103"file://local"
yangguo@chromium.orga7d3df92012-02-27 11:46:55 +0000104
ulan@chromium.org812308e2012-02-29 15:58:45 +0000105import
106x
107,
108y
109from
110"file://local"
111
erik.corry@gmail.combbceb572012-03-09 10:52:05 +0000112
ulan@chromium.org812308e2012-02-29 15:58:45 +0000113module Wrap {
114export
115x
116,
117y
118
119export
120var
121v1 = 1
122
123export
124let
125v2 = 2
126
127export
128const
129v3 = 3
130
131export
132function
133f
134(
135)
136{
137}
138
139export
140module V
141{
142}
143}
144
erik.corry@gmail.combbceb572012-03-09 10:52:05 +0000145export A, A1, A2, A3, B, I, C1, D1, D2, D3, E1, E2, E3, X, Y, Z, Wrap, x, y, UU
146
147
yangguo@chromium.orga7d3df92012-02-27 11:46:55 +0000148
149// Check that 'module' still works as an identifier.
150
151var module
152module = {}
153module["a"] = 6
154function module() {}
155function f(module) { return module }
156try {} catch (module) {}
157
158module
159v = 20