spider-src 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/Gemfile +7 -0
  4. data/LICENSE.txt +74 -0
  5. data/README.md +37 -0
  6. data/Rakefile +25 -0
  7. data/lib/spider-src/support/spider/.eslintrc +17 -0
  8. data/lib/spider-src/support/spider/.npmignore +9 -0
  9. data/lib/spider-src/support/spider/.travis.yml +7 -0
  10. data/lib/spider-src/support/spider/.yo-rc.json +3 -0
  11. data/lib/spider-src/support/spider/CHANGELOG.md +64 -0
  12. data/lib/spider-src/support/spider/Gruntfile.js +97 -0
  13. data/lib/spider-src/support/spider/Gruntfile.spider +93 -0
  14. data/lib/spider-src/support/spider/LICENSE +201 -0
  15. data/lib/spider-src/support/spider/README.md +50 -0
  16. data/lib/spider-src/support/spider/cli.js +119 -0
  17. data/lib/spider-src/support/spider/lib/ast/CaseClause.js +179 -0
  18. data/lib/spider-src/support/spider/lib/ast/CatchClause.js +26 -0
  19. data/lib/spider-src/support/spider/lib/ast/ExportBatchSpecifier.js +19 -0
  20. data/lib/spider-src/support/spider/lib/ast/ExportSpecifier.js +33 -0
  21. data/lib/spider-src/support/spider/lib/ast/ImportDefaultSpecifier.js +23 -0
  22. data/lib/spider-src/support/spider/lib/ast/ImportNamespaceSpecifier.js +23 -0
  23. data/lib/spider-src/support/spider/lib/ast/ImportSpecifier.js +40 -0
  24. data/lib/spider-src/support/spider/lib/ast/Node.js +93 -0
  25. data/lib/spider-src/support/spider/lib/ast/Parameter.js +229 -0
  26. data/lib/spider-src/support/spider/lib/ast/Program.js +58 -0
  27. data/lib/spider-src/support/spider/lib/ast/Property.js +32 -0
  28. data/lib/spider-src/support/spider/lib/ast/Range.js +257 -0
  29. data/lib/spider-src/support/spider/lib/ast/VariableDeclarator.js +29 -0
  30. data/lib/spider-src/support/spider/lib/ast/expressions/ArrayExpression.js +41 -0
  31. data/lib/spider-src/support/spider/lib/ast/expressions/ArrayPattern.js +45 -0
  32. data/lib/spider-src/support/spider/lib/ast/expressions/AssignmentExpression.js +29 -0
  33. data/lib/spider-src/support/spider/lib/ast/expressions/BinaryExpression.js +104 -0
  34. data/lib/spider-src/support/spider/lib/ast/expressions/CallExpression.js +139 -0
  35. data/lib/spider-src/support/spider/lib/ast/expressions/ConditionalExpression.js +31 -0
  36. data/lib/spider-src/support/spider/lib/ast/expressions/CurryCallExpression.js +102 -0
  37. data/lib/spider-src/support/spider/lib/ast/expressions/ExistentialExpression.js +83 -0
  38. data/lib/spider-src/support/spider/lib/ast/expressions/ForInExpression.js +116 -0
  39. data/lib/spider-src/support/spider/lib/ast/expressions/FunctionExpression.js +157 -0
  40. data/lib/spider-src/support/spider/lib/ast/expressions/InExpression.js +99 -0
  41. data/lib/spider-src/support/spider/lib/ast/expressions/LogicalExpression.js +50 -0
  42. data/lib/spider-src/support/spider/lib/ast/expressions/MemberExpression.js +43 -0
  43. data/lib/spider-src/support/spider/lib/ast/expressions/NewExpression.js +46 -0
  44. data/lib/spider-src/support/spider/lib/ast/expressions/NullCheckCallExpression.js +132 -0
  45. data/lib/spider-src/support/spider/lib/ast/expressions/NullCoalescingExpression.js +114 -0
  46. data/lib/spider-src/support/spider/lib/ast/expressions/NullPropagatingExpression.js +161 -0
  47. data/lib/spider-src/support/spider/lib/ast/expressions/ObjectExpression.js +39 -0
  48. data/lib/spider-src/support/spider/lib/ast/expressions/ObjectPattern.js +49 -0
  49. data/lib/spider-src/support/spider/lib/ast/expressions/RangeMemberExpression.js +157 -0
  50. data/lib/spider-src/support/spider/lib/ast/expressions/SplatExpression.js +48 -0
  51. data/lib/spider-src/support/spider/lib/ast/expressions/SuperExpression.js +170 -0
  52. data/lib/spider-src/support/spider/lib/ast/expressions/ThisExpression.js +22 -0
  53. data/lib/spider-src/support/spider/lib/ast/expressions/UnaryExpression.js +147 -0
  54. data/lib/spider-src/support/spider/lib/ast/expressions/UpdateExpression.js +26 -0
  55. data/lib/spider-src/support/spider/lib/ast/literals/BooleanLiteral.js +24 -0
  56. data/lib/spider-src/support/spider/lib/ast/literals/Identifier.js +60 -0
  57. data/lib/spider-src/support/spider/lib/ast/literals/NullLiteral.js +24 -0
  58. data/lib/spider-src/support/spider/lib/ast/literals/NumberLiteral.js +24 -0
  59. data/lib/spider-src/support/spider/lib/ast/literals/RegularExpressionLiteral.js +25 -0
  60. data/lib/spider-src/support/spider/lib/ast/literals/StringLiteral.js +90 -0
  61. data/lib/spider-src/support/spider/lib/ast/literals/UndefinedLiteral.js +30 -0
  62. data/lib/spider-src/support/spider/lib/ast/statements/BlockStatement.js +47 -0
  63. data/lib/spider-src/support/spider/lib/ast/statements/BreakStatement.js +19 -0
  64. data/lib/spider-src/support/spider/lib/ast/statements/ContinueStatement.js +19 -0
  65. data/lib/spider-src/support/spider/lib/ast/statements/DebuggerStatement.js +19 -0
  66. data/lib/spider-src/support/spider/lib/ast/statements/DoWhileStatement.js +25 -0
  67. data/lib/spider-src/support/spider/lib/ast/statements/ExportDeclarationStatement.js +51 -0
  68. data/lib/spider-src/support/spider/lib/ast/statements/ExpressionStatement.js +22 -0
  69. data/lib/spider-src/support/spider/lib/ast/statements/FallthroughStatement.js +74 -0
  70. data/lib/spider-src/support/spider/lib/ast/statements/ForInStatement.js +79 -0
  71. data/lib/spider-src/support/spider/lib/ast/statements/ForOfStatement.js +98 -0
  72. data/lib/spider-src/support/spider/lib/ast/statements/ForStatement.js +43 -0
  73. data/lib/spider-src/support/spider/lib/ast/statements/FunctionDeclarationStatement.js +104 -0
  74. data/lib/spider-src/support/spider/lib/ast/statements/GoStatement.js +41 -0
  75. data/lib/spider-src/support/spider/lib/ast/statements/IfStatement.js +32 -0
  76. data/lib/spider-src/support/spider/lib/ast/statements/ImportDeclarationStatement.js +40 -0
  77. data/lib/spider-src/support/spider/lib/ast/statements/PushStatement.js +37 -0
  78. data/lib/spider-src/support/spider/lib/ast/statements/ReturnStatement.js +26 -0
  79. data/lib/spider-src/support/spider/lib/ast/statements/SwitchStatement.js +159 -0
  80. data/lib/spider-src/support/spider/lib/ast/statements/ThrowStatement.js +22 -0
  81. data/lib/spider-src/support/spider/lib/ast/statements/TryStatement.js +36 -0
  82. data/lib/spider-src/support/spider/lib/ast/statements/UntilStatement.js +31 -0
  83. data/lib/spider-src/support/spider/lib/ast/statements/UseStatement.js +49 -0
  84. data/lib/spider-src/support/spider/lib/ast/statements/VariableDeclarationStatement.js +36 -0
  85. data/lib/spider-src/support/spider/lib/ast/statements/WhileStatement.js +25 -0
  86. data/lib/spider-src/support/spider/lib/ast.js +16 -0
  87. data/lib/spider-src/support/spider/lib/parser.js +14878 -0
  88. data/lib/spider-src/support/spider/lib/spider.js +217 -0
  89. data/lib/spider-src/support/spider/package.json +61 -0
  90. data/lib/spider-src/support/spider/spider-script.js +6 -0
  91. data/lib/spider-src/support/spider/src/ast/CaseClause.spider +179 -0
  92. data/lib/spider-src/support/spider/src/ast/CatchClause.spider +30 -0
  93. data/lib/spider-src/support/spider/src/ast/ExportBatchSpecifier.spider +19 -0
  94. data/lib/spider-src/support/spider/src/ast/ExportSpecifier.spider +37 -0
  95. data/lib/spider-src/support/spider/src/ast/ImportDefaultSpecifier.spider +25 -0
  96. data/lib/spider-src/support/spider/src/ast/ImportNamespaceSpecifier.spider +25 -0
  97. data/lib/spider-src/support/spider/src/ast/ImportSpecifier.spider +44 -0
  98. data/lib/spider-src/support/spider/src/ast/Node.spider +104 -0
  99. data/lib/spider-src/support/spider/src/ast/Parameter.spider +233 -0
  100. data/lib/spider-src/support/spider/src/ast/Program.spider +109 -0
  101. data/lib/spider-src/support/spider/src/ast/Property.spider +36 -0
  102. data/lib/spider-src/support/spider/src/ast/Range.spider +291 -0
  103. data/lib/spider-src/support/spider/src/ast/VariableDeclarator.spider +33 -0
  104. data/lib/spider-src/support/spider/src/ast/expressions/ArrayExpression.spider +32 -0
  105. data/lib/spider-src/support/spider/src/ast/expressions/ArrayPattern.spider +37 -0
  106. data/lib/spider-src/support/spider/src/ast/expressions/AssignmentExpression.spider +34 -0
  107. data/lib/spider-src/support/spider/src/ast/expressions/BinaryExpression.spider +125 -0
  108. data/lib/spider-src/support/spider/src/ast/expressions/CallExpression.spider +149 -0
  109. data/lib/spider-src/support/spider/src/ast/expressions/ConditionalExpression.spider +34 -0
  110. data/lib/spider-src/support/spider/src/ast/expressions/CurryCallExpression.spider +109 -0
  111. data/lib/spider-src/support/spider/src/ast/expressions/ExistentialExpression.spider +102 -0
  112. data/lib/spider-src/support/spider/src/ast/expressions/ForInExpression.spider +140 -0
  113. data/lib/spider-src/support/spider/src/ast/expressions/FunctionExpression.spider +183 -0
  114. data/lib/spider-src/support/spider/src/ast/expressions/InExpression.spider +114 -0
  115. data/lib/spider-src/support/spider/src/ast/expressions/LogicalExpression.spider +62 -0
  116. data/lib/spider-src/support/spider/src/ast/expressions/MemberExpression.spider +57 -0
  117. data/lib/spider-src/support/spider/src/ast/expressions/NewExpression.spider +40 -0
  118. data/lib/spider-src/support/spider/src/ast/expressions/NullCheckCallExpression.spider +151 -0
  119. data/lib/spider-src/support/spider/src/ast/expressions/NullCoalescingExpression.spider +151 -0
  120. data/lib/spider-src/support/spider/src/ast/expressions/NullPropagatingExpression.spider +190 -0
  121. data/lib/spider-src/support/spider/src/ast/expressions/ObjectExpression.spider +30 -0
  122. data/lib/spider-src/support/spider/src/ast/expressions/ObjectPattern.spider +42 -0
  123. data/lib/spider-src/support/spider/src/ast/expressions/RangeMemberExpression.spider +179 -0
  124. data/lib/spider-src/support/spider/src/ast/expressions/SplatExpression.spider +49 -0
  125. data/lib/spider-src/support/spider/src/ast/expressions/SuperExpression.spider +235 -0
  126. data/lib/spider-src/support/spider/src/ast/expressions/ThisExpression.spider +21 -0
  127. data/lib/spider-src/support/spider/src/ast/expressions/UnaryExpression.spider +158 -0
  128. data/lib/spider-src/support/spider/src/ast/expressions/UpdateExpression.spider +28 -0
  129. data/lib/spider-src/support/spider/src/ast/literals/BooleanLiteral.spider +23 -0
  130. data/lib/spider-src/support/spider/src/ast/literals/Identifier.spider +68 -0
  131. data/lib/spider-src/support/spider/src/ast/literals/NullLiteral.spider +23 -0
  132. data/lib/spider-src/support/spider/src/ast/literals/NumberLiteral.spider +23 -0
  133. data/lib/spider-src/support/spider/src/ast/literals/RegularExpressionLiteral.spider +24 -0
  134. data/lib/spider-src/support/spider/src/ast/literals/StringLiteral.spider +91 -0
  135. data/lib/spider-src/support/spider/src/ast/literals/UndefinedLiteral.spider +30 -0
  136. data/lib/spider-src/support/spider/src/ast/statements/BlockStatement.spider +45 -0
  137. data/lib/spider-src/support/spider/src/ast/statements/BreakStatement.spider +19 -0
  138. data/lib/spider-src/support/spider/src/ast/statements/ContinueStatement.spider +19 -0
  139. data/lib/spider-src/support/spider/src/ast/statements/DebuggerStatement.spider +19 -0
  140. data/lib/spider-src/support/spider/src/ast/statements/DoWhileStatement.spider +28 -0
  141. data/lib/spider-src/support/spider/src/ast/statements/ExportDeclarationStatement.spider +46 -0
  142. data/lib/spider-src/support/spider/src/ast/statements/ExpressionStatement.spider +22 -0
  143. data/lib/spider-src/support/spider/src/ast/statements/FallthroughStatement.spider +85 -0
  144. data/lib/spider-src/support/spider/src/ast/statements/ForInStatement.spider +92 -0
  145. data/lib/spider-src/support/spider/src/ast/statements/ForOfStatement.spider +117 -0
  146. data/lib/spider-src/support/spider/src/ast/statements/ForStatement.spider +51 -0
  147. data/lib/spider-src/support/spider/src/ast/statements/FunctionDeclarationStatement.spider +115 -0
  148. data/lib/spider-src/support/spider/src/ast/statements/GoStatement.spider +44 -0
  149. data/lib/spider-src/support/spider/src/ast/statements/IfStatement.spider +38 -0
  150. data/lib/spider-src/support/spider/src/ast/statements/ImportDeclarationStatement.spider +33 -0
  151. data/lib/spider-src/support/spider/src/ast/statements/PushStatement.spider +40 -0
  152. data/lib/spider-src/support/spider/src/ast/statements/ReturnStatement.spider +28 -0
  153. data/lib/spider-src/support/spider/src/ast/statements/SwitchStatement.spider +161 -0
  154. data/lib/spider-src/support/spider/src/ast/statements/ThrowStatement.spider +23 -0
  155. data/lib/spider-src/support/spider/src/ast/statements/TryStatement.spider +42 -0
  156. data/lib/spider-src/support/spider/src/ast/statements/UntilStatement.spider +36 -0
  157. data/lib/spider-src/support/spider/src/ast/statements/UseStatement.spider +62 -0
  158. data/lib/spider-src/support/spider/src/ast/statements/VariableDeclarationStatement.spider +34 -0
  159. data/lib/spider-src/support/spider/src/ast/statements/WhileStatement.spider +28 -0
  160. data/lib/spider-src/support/spider/src/ast.spider +80 -0
  161. data/lib/spider-src/support/spider/src/spider.pegjs +1434 -0
  162. data/lib/spider-src/support/spider/src/spider.spider +276 -0
  163. data/lib/spider-src/support/spider/test/spider_test.js +1787 -0
  164. data/lib/spider-src/version.rb +5 -0
  165. data/lib/spider-src.rb +37 -0
  166. data/spider-src.gemspec +24 -0
  167. data/test/test_spider_src.rb +33 -0
  168. metadata +225 -0
@@ -0,0 +1,1434 @@
1
+ {
2
+ var ast = module.require('./ast');
3
+
4
+ function filledArray(count, value) {
5
+ var result = new Array(count), i;
6
+
7
+ for (i = 0; i < count; i++) {
8
+ result[i] = value;
9
+ }
10
+
11
+ return result;
12
+ }
13
+
14
+ function extractOptional(optional, index) {
15
+ return optional ? optional[index] : null;
16
+ }
17
+
18
+ function extractList(list, index) {
19
+ var result = new Array(list.length), i;
20
+
21
+ for (i = 0; i < list.length; i++) {
22
+ result[i] = list[i][index];
23
+ }
24
+
25
+ return result;
26
+ }
27
+
28
+ function buildList(first, rest, index) {
29
+ return [first].concat(extractList(rest, index));
30
+ }
31
+
32
+ function buildTree(first, rest, builder) {
33
+ var result = first, i;
34
+
35
+ for (i = 0; i < rest.length; i++) {
36
+ result = builder(result, rest[i]);
37
+ }
38
+
39
+ return result;
40
+ }
41
+
42
+ function buildBinaryExpression(first, rest) {
43
+ return buildTree(first, rest, function(result, element) {
44
+ return insertLocationData(new ast.BinaryExpression(result, element[1], element[3]), text(), line(), column());
45
+ });
46
+ }
47
+
48
+ function buildLogicalExpression(first, rest) {
49
+ return buildTree(first, rest, function(result, element) {
50
+ return insertLocationData(new ast.LogicalExpression(result, element[1], element[3]), text(), line(), column());
51
+ });
52
+ }
53
+
54
+ function buildNullCoalescingExpression(first, rest) {
55
+ return buildTree(first, rest, function(result, element) {
56
+ return insertLocationData(new ast.NullCoalescingExpression(result, element[3]), text(), line(), column());
57
+ });
58
+ }
59
+
60
+ function optionalList(value) {
61
+ return value !== null ? value : [];
62
+ }
63
+
64
+ function insertLocationData(node, text, line, column) {
65
+ var lines = text.split("\n");
66
+ node.loc = {
67
+ "start": {
68
+ "line": line,
69
+ "column": column - 1
70
+ },
71
+ "end": {
72
+ "line": line + lines.length - 1,
73
+ "column": (lines.length === 1 ? (column - 1) : 0) +
74
+ lines[lines.length - 1].length
75
+ }
76
+ };
77
+
78
+ return node;
79
+ }
80
+ }
81
+
82
+ Start
83
+ = __ program:Program __ { return program; }
84
+
85
+ /* ----- A.1 Lexical Grammar ----- */
86
+
87
+ SourceCharacter
88
+ = .
89
+
90
+ WhiteSpace "whitespace"
91
+ = "\t"
92
+ / "\v"
93
+ / "\f"
94
+ / " "
95
+ / "\u00A0"
96
+ / "\uFEFF"
97
+ / Zs
98
+
99
+ LineTerminator
100
+ = [\n\r\u2028\u2029]
101
+
102
+ LineTerminatorSequence "end of line"
103
+ = "\n"
104
+ / "\r\n"
105
+ / "\r"
106
+ / "\u2028"
107
+ / "\u2029"
108
+
109
+ Comment "comment"
110
+ = MultiLineComment
111
+ / SingleLineComment
112
+
113
+ MultiLineComment
114
+ = "/*" (!"*/" SourceCharacter)* "*/"
115
+
116
+ MultiLineCommentNoLineTerminator
117
+ = "/*" (!("*/" / LineTerminator) SourceCharacter)* "*/"
118
+
119
+ SingleLineComment
120
+ = "//" (!LineTerminator SourceCharacter)*
121
+
122
+ Identifier
123
+ = !ReservedWord name:IdentifierName { return name; }
124
+
125
+ IdentifierName "identifier"
126
+ = first:IdentifierStart rest:IdentifierPart* {
127
+ return insertLocationData(new ast.Identifier(first + rest.join("")), text(), line(), column());
128
+ }
129
+
130
+ IdentifierStart
131
+ = UnicodeLetter
132
+ / "$"
133
+ / "_"
134
+ / "\\" sequence:UnicodeEscapeSequence { return sequence; }
135
+
136
+ IdentifierPart
137
+ = IdentifierStart
138
+ / UnicodeCombiningMark
139
+ / UnicodeDigit
140
+ / UnicodeConnectorPunctuation
141
+ / "\u200C"
142
+ / "\u200D"
143
+
144
+ UnicodeLetter
145
+ = Lu
146
+ / Ll
147
+ / Lt
148
+ / Lm
149
+ / Lo
150
+ / Nl
151
+
152
+ UnicodeCombiningMark
153
+ = Mn
154
+ / Mc
155
+
156
+ UnicodeDigit
157
+ = Nd
158
+
159
+ UnicodeConnectorPunctuation
160
+ = Pc
161
+
162
+ ReservedWord
163
+ = Keyword
164
+ / NullLiteral
165
+ / BooleanLiteral
166
+
167
+ Keyword
168
+ = AndToken
169
+ / OrToken
170
+ / ReturnToken
171
+ / VarToken
172
+ / IfToken
173
+ / ElseToken
174
+ / ForToken
175
+ / FnToken
176
+ / NewToken
177
+ / UseToken
178
+ / ThisToken
179
+ / SuperToken
180
+ / ThrowToken
181
+ / BreakToken
182
+ / ContinueToken
183
+ / DebuggerToken
184
+ / WhileToken
185
+ / UntilToken
186
+ / TypeofToken
187
+ / InToken
188
+ / OfToken
189
+ / TryToken
190
+ / CatchToken
191
+ / FinallyToken
192
+ / InstanceofToken
193
+ / SwitchToken
194
+ / CaseToken
195
+ / DefaultToken
196
+ / FallthroughToken
197
+ / NotToken
198
+ / ImportToken
199
+ / FromToken
200
+ / AsToken
201
+ / ExportToken
202
+ / DeleteToken
203
+ / AsyncToken
204
+ / AwaitToken
205
+ / GoToken
206
+ / NullToken
207
+ / UndefinedToken
208
+
209
+ Literal
210
+ = NullLiteral
211
+ / UndefinedLiteral
212
+ / BooleanLiteral
213
+ / NumericLiteral
214
+ / StringLiteral
215
+ / RegularExpressionLiteral
216
+
217
+ NullLiteral
218
+ = NullToken { return insertLocationData(new ast.NullLiteral(), text(), line(), column()); }
219
+
220
+ UndefinedLiteral
221
+ = UndefinedToken { return insertLocationData(new ast.UndefinedLiteral(), text(), line(), column()); }
222
+
223
+ BooleanLiteral
224
+ = TrueToken { return insertLocationData(new ast.BooleanLiteral("true"), text(), line(), column()); }
225
+ / FalseToken { return insertLocationData(new ast.BooleanLiteral("false"), text(), line(), column()); }
226
+
227
+ NumericLiteral "number"
228
+ = literal:HexIntegerLiteral !(IdentifierStart / DecimalDigit) {
229
+ return literal;
230
+ }
231
+ / literal:DecimalLiteral !(IdentifierStart / DecimalDigit) {
232
+ return literal;
233
+ }
234
+
235
+ DecimalLiteral
236
+ = DecimalIntegerLiteral "." !"." DecimalDigit* ExponentPart? {
237
+ return insertLocationData(new ast.NumberLiteral(text()), text(), line(), column());
238
+ }
239
+ / "." !"." DecimalDigit+ ExponentPart? {
240
+ return insertLocationData(new ast.NumberLiteral(text()), text(), line(), column());
241
+ }
242
+ / DecimalIntegerLiteral ExponentPart? {
243
+ return insertLocationData(new ast.NumberLiteral(text()), text(), line(), column());
244
+ }
245
+
246
+ DecimalIntegerLiteral
247
+ = "0"
248
+ / NonZeroDigit DecimalDigit*
249
+
250
+ DecimalDigit
251
+ = [0-9]
252
+
253
+ NonZeroDigit
254
+ = [1-9]
255
+
256
+ ExponentPart
257
+ = ExponentIndicator SignedInteger
258
+
259
+ ExponentIndicator
260
+ = "e"i
261
+
262
+ SignedInteger
263
+ = [+-]? DecimalDigit+
264
+
265
+ HexIntegerLiteral
266
+ = "0x"i digits:$HexDigit+ {
267
+ return insertLocationData(new ast.NumberLiteral(text(), 16), text(), line(), column());
268
+ }
269
+
270
+ HexDigit
271
+ = [0-9a-f]i
272
+
273
+ StringLiteral "string"
274
+ = '"' chars:DoubleStringCharacter* '"' {
275
+ return insertLocationData(new ast.StringLiteral(chars, column()), text(), line(), column());
276
+ }
277
+ / "'" chars:SingleStringCharacter* "'" {
278
+ return insertLocationData(new ast.StringLiteral(chars, column()), text(), line(), column());
279
+ }
280
+
281
+ DoubleStringCharacter
282
+ = !('"' / "\\" / LineTerminator) SourceCharacter { return text(); }
283
+ / "\\" sequence:EscapeSequence { return sequence; }
284
+ / LineContinuation
285
+ / LineTerminator __ { return new ast.StringLiteral.NewLine(text()); }
286
+
287
+ SingleStringCharacter
288
+ = !("'" / "\\" / LineTerminator) SourceCharacter { return text(); }
289
+ / "\\" sequence:EscapeSequence { return sequence; }
290
+ / LineContinuation
291
+ / LineTerminator __ { return new ast.StringLiteral.NewLine(text()); }
292
+
293
+ LineContinuation
294
+ = "\\" LineTerminatorSequence { return ""; }
295
+
296
+ EscapeSequence
297
+ = ExpressionSequence
298
+ / CharacterEscapeSequence
299
+ / "0" !DecimalDigit { return "\0"; }
300
+ / HexEscapeSequence
301
+ / UnicodeEscapeSequence
302
+
303
+ CharacterEscapeSequence
304
+ = SingleEscapeCharacter
305
+ / NonEscapeCharacter
306
+
307
+ SingleEscapeCharacter
308
+ = "'"
309
+ / '"'
310
+ / "\\"
311
+ / "b" { return "\b"; }
312
+ / "f" { return "\f"; }
313
+ / "n" { return "\n"; }
314
+ / "r" { return "\r"; }
315
+ / "t" { return "\t"; }
316
+ / "v" { return "\x0B"; }
317
+
318
+ NonEscapeCharacter
319
+ = !(EscapeCharacter / LineTerminator) SourceCharacter { return text(); }
320
+
321
+ EscapeCharacter
322
+ = SingleEscapeCharacter
323
+ / DecimalDigit
324
+ / "x"
325
+ / "u"
326
+
327
+ HexEscapeSequence
328
+ = "x" digits:$(HexDigit HexDigit) {
329
+ return String.fromCharCode(parseInt(digits, 16));
330
+ }
331
+
332
+ UnicodeEscapeSequence
333
+ = "u" digits:$(HexDigit HexDigit HexDigit HexDigit) {
334
+ return String.fromCharCode(parseInt(digits, 16));
335
+ }
336
+
337
+ ExpressionSequence
338
+ = "(" expression:Expression ")" {
339
+ return expression;
340
+ }
341
+
342
+ RegularExpressionLiteral "regular expression"
343
+ = "/" pattern:$RegularExpressionBody "/" flags:$RegularExpressionFlags {
344
+ return insertLocationData(new ast.RegularExpressionLiteral(pattern, flags), text(), line(), column());
345
+ }
346
+
347
+ RegularExpressionBody
348
+ = RegularExpressionFirstChar RegularExpressionChar*
349
+
350
+ RegularExpressionFirstChar
351
+ = ![*\\/[] RegularExpressionNonTerminator
352
+ / RegularExpressionBackslashSequence
353
+ / RegularExpressionClass
354
+
355
+ RegularExpressionChar
356
+ = ![\\/[] RegularExpressionNonTerminator
357
+ / RegularExpressionBackslashSequence
358
+ / RegularExpressionClass
359
+
360
+ RegularExpressionBackslashSequence
361
+ = "\\" RegularExpressionNonTerminator
362
+
363
+ RegularExpressionNonTerminator
364
+ = !LineTerminator SourceCharacter
365
+
366
+ RegularExpressionClass
367
+ = "[" RegularExpressionClassChar* "]"
368
+
369
+ RegularExpressionClassChar
370
+ = ![\]\\] RegularExpressionNonTerminator
371
+ / RegularExpressionBackslashSequence
372
+
373
+ RegularExpressionFlags
374
+ = IdentifierPart*
375
+
376
+ /*
377
+ * Unicode Character Categories
378
+ *
379
+ * Extracted from the following Unicode Character Database file:
380
+ *
381
+ * http://www.unicode.org/Public/6.3.0/ucd/extracted/DerivedGeneralCategory.txt
382
+ *
383
+ * Unix magic used:
384
+ *
385
+ * grep "; $CATEGORY" DerivedGeneralCategory.txt | # Filter characters
386
+ * cut -f1 -d " " | # Extract code points
387
+ * grep -v '[0-9a-fA-F]\{5\}' | # Exclude non-BMP characters
388
+ * sed -e 's/\.\./-/' | # Adjust formatting
389
+ * sed -e 's/\([0-9a-fA-F]\{4\}\)/\\u\1/g' | # Adjust formatting
390
+ * tr -d '\n' # Join lines
391
+ *
392
+ * ECMA-262 allows using Unicode 3.0 or later, version 6.3.0 was the latest one
393
+ * at the time of writing.
394
+ *
395
+ * Non-BMP characters are completely ignored to avoid surrogate pair handling
396
+ * (detecting surrogate pairs isn't possible with a simple character class and
397
+ * other methods would degrade performance). I don't consider it a big deal as
398
+ * even parsers in JavaScript engines of common browsers seem to ignore them.
399
+ */
400
+
401
+ // Letter, Lowercase
402
+ Ll = [\u0061-\u007A\u00B5\u00DF-\u00F6\u00F8-\u00FF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137-\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148-\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C-\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA-\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9-\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC-\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF-\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F-\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0-\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB-\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE-\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0561-\u0587\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6-\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FC7\u1FD0-\u1FD3\u1FD6-\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6-\u1FF7\u210A\u210E-\u210F\u2113\u212F\u2134\u2139\u213C-\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65-\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73-\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3-\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7FA\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A]
403
+
404
+ // Letter, Modifier
405
+ Lm = [\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5-\u06E6\u07F4-\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C-\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D-\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA717-\uA71F\uA770\uA788\uA7F8-\uA7F9\uA9CF\uAA70\uAADD\uAAF3-\uAAF4\uFF70\uFF9E-\uFF9F]
406
+
407
+ // Letter, Other
408
+ Lo = [\u00AA\u00BA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05F0-\u05F2\u0620-\u063F\u0641-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0977\u0979-\u097F\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58-\u0C59\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0CF1-\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065-\u1066\u106E-\u1070\u1075-\u1081\u108E\u10D0-\u10FA\u10FD-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE-\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5-\u1CF6\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A-\uA62B\uA66E\uA6A0-\uA6E5\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]
409
+
410
+ // Letter, Titlecase
411
+ Lt = [\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC]
412
+
413
+ // Letter, Uppercase
414
+ Lu = [\u0041-\u005A\u00C0-\u00D6\u00D8-\u00DE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178-\u0179\u017B\u017D\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018B\u018E-\u0191\u0193-\u0194\u0196-\u0198\u019C-\u019D\u019F-\u01A0\u01A2\u01A4\u01A6-\u01A7\u01A9\u01AC\u01AE-\u01AF\u01B1-\u01B3\u01B5\u01B7-\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A-\u023B\u023D-\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u0386\u0388-\u038A\u038C\u038E-\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9-\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0-\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E-\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D-\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA\uFF21-\uFF3A]
415
+
416
+ // Mark, Spacing Combining
417
+ Mc = [\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E-\u094F\u0982-\u0983\u09BE-\u09C0\u09C7-\u09C8\u09CB-\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB-\u0ACC\u0B02-\u0B03\u0B3E\u0B40\u0B47-\u0B48\u0B4B-\u0B4C\u0B57\u0BBE-\u0BBF\u0BC1-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82-\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7-\u0CC8\u0CCA-\u0CCB\u0CD5-\u0CD6\u0D02-\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82-\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2-\u0DF3\u0F3E-\u0F3F\u0F7F\u102B-\u102C\u1031\u1038\u103B-\u103C\u1056-\u1057\u1062-\u1064\u1067-\u106D\u1083-\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7-\u17C8\u1923-\u1926\u1929-\u192B\u1930-\u1931\u1933-\u1938\u19B0-\u19C0\u19C8-\u19C9\u1A19-\u1A1A\u1A55\u1A57\u1A61\u1A63-\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43-\u1B44\u1B82\u1BA1\u1BA6-\u1BA7\u1BAA\u1BAC-\u1BAD\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2-\u1BF3\u1C24-\u1C2B\u1C34-\u1C35\u1CE1\u1CF2-\u1CF3\u302E-\u302F\uA823-\uA824\uA827\uA880-\uA881\uA8B4-\uA8C3\uA952-\uA953\uA983\uA9B4-\uA9B5\uA9BA-\uA9BB\uA9BD-\uA9C0\uAA2F-\uAA30\uAA33-\uAA34\uAA4D\uAA7B\uAAEB\uAAEE-\uAAEF\uAAF5\uABE3-\uABE4\uABE6-\uABE7\uABE9-\uABEA\uABEC]
418
+
419
+ // Mark, Nonspacing
420
+ Mn = [\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u08FE\u0900-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962-\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2-\u09E3\u0A01-\u0A02\u0A3C\u0A41-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A51\u0A70-\u0A71\u0A75\u0A81-\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7-\u0AC8\u0ACD\u0AE2-\u0AE3\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62-\u0B63\u0B82\u0BC0\u0BCD\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C62-\u0C63\u0CBC\u0CBF\u0CC6\u0CCC-\u0CCD\u0CE2-\u0CE3\u0D41-\u0D44\u0D4D\u0D62-\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EC8-\u0ECD\u0F18-\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86-\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039-\u103A\u103D-\u103E\u1058-\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17B4-\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193B\u1A17-\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80-\u1B81\u1BA2-\u1BA5\u1BA8-\u1BA9\u1BAB\u1BE6\u1BE8-\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1DC0-\u1DE6\u1DFC-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099-\u309A\uA66F\uA674-\uA67D\uA69F\uA6F0-\uA6F1\uA802\uA806\uA80B\uA825-\uA826\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uAA29-\uAA2E\uAA31-\uAA32\uAA35-\uAA36\uAA43\uAA4C\uAAB0\uAAB2-\uAAB4\uAAB7-\uAAB8\uAABE-\uAABF\uAAC1\uAAEC-\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE26]
421
+
422
+ // Number, Decimal Digit
423
+ Nd = [\u0030-\u0039\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19]
424
+
425
+ // Number, Letter
426
+ Nl = [\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF]
427
+
428
+ // Punctuation, Connector
429
+ Pc = [\u005F\u203F-\u2040\u2054\uFE33-\uFE34\uFE4D-\uFE4F\uFF3F]
430
+
431
+ // Separator, Space
432
+ Zs = [\u0020\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]
433
+
434
+ /* Tokens */
435
+
436
+ AndToken = "and" !IdentifierPart
437
+ OrToken = "or" !IdentifierPart
438
+ ReturnToken = "return" !IdentifierPart
439
+ FnToken = "fn" !IdentifierPart
440
+ VarToken = "var" !IdentifierPart
441
+ IfToken = "if" !IdentifierPart
442
+ ElseToken = "else" !IdentifierPart
443
+ ForToken = "for" !IdentifierPart
444
+ TrueToken = "true" !IdentifierPart
445
+ FalseToken = "false" !IdentifierPart
446
+ NullToken = "null" !IdentifierPart
447
+ NewToken = "new" !IdentifierPart
448
+ UseToken = "use" !IdentifierPart
449
+ ThisToken = "this" !IdentifierPart
450
+ SuperToken = "super" !IdentifierPart
451
+ ThrowToken = "throw" !IdentifierPart
452
+ BreakToken = "break" !IdentifierPart
453
+ ContinueToken = "continue" !IdentifierPart
454
+ DebuggerToken = "debugger" !IdentifierPart
455
+ WhileToken = "while" !IdentifierPart
456
+ UntilToken = "until" !IdentifierPart
457
+ TypeofToken = "typeof" !IdentifierPart
458
+ InToken = "in" !IdentifierPart
459
+ OfToken = "of" !IdentifierPart
460
+ TryToken = "try" !IdentifierPart
461
+ FinallyToken = "finally" !IdentifierPart
462
+ CatchToken = "catch" !IdentifierPart
463
+ InstanceofToken = "instanceof" !IdentifierPart
464
+ SwitchToken = "switch" !IdentifierPart
465
+ CaseToken = "case" !IdentifierPart
466
+ DefaultToken = "default" !IdentifierPart
467
+ FallthroughToken = "fallthrough" !IdentifierPart
468
+ NotToken = "not" !IdentifierPart
469
+ ImportToken = "import" !IdentifierPart
470
+ FromToken = "from" !IdentifierPart
471
+ AsToken = "as" !IdentifierPart
472
+ ExportToken = "export" !IdentifierPart
473
+ DeleteToken = "delete" !IdentifierPart
474
+ DoToken = "do" !IdentifierPart
475
+ AsyncToken = "async" !IdentifierPart
476
+ AwaitToken = "await" !IdentifierPart
477
+ GoToken = "go" !IdentifierPart
478
+ UndefinedToken = "undefined" !IdentifierPart
479
+
480
+ __
481
+ = (WhiteSpace / LineTerminatorSequence / Comment)*
482
+
483
+ _
484
+ = (WhiteSpace / MultiLineCommentNoLineTerminator)*
485
+
486
+ EOS
487
+ = __ ";"
488
+
489
+ EOF
490
+ = !.
491
+
492
+ Program
493
+ = body:StatementList? {
494
+ return insertLocationData(new ast.Program(optionalList(body)), text(), line(), column());
495
+ }
496
+
497
+ StatementList
498
+ = first:Statement rest:(__ Statement)* {
499
+ return buildList(first, rest, 1);
500
+ }
501
+
502
+ Statement
503
+ = Block
504
+ / VariableStatement
505
+ / FunctionDeclaration
506
+ / IfStatement
507
+ / PushStatement
508
+ / ExpressionStatement
509
+ / ReturnStatement
510
+ / ForStatement
511
+ / UseStatement
512
+ / ThrowStatement
513
+ / TryStatement
514
+ / BreakStatement
515
+ / ContinueStatement
516
+ / DebuggerStatement
517
+ / WhileStatement
518
+ / UntilStatement
519
+ / SwitchStatement
520
+ / FallthroughStatement
521
+ / ImportDeclarationStatement
522
+ / ExportDeclarationStatement
523
+ / DoWhileStatement
524
+ / GoStatement
525
+
526
+ Block
527
+ = "{" __ body:(StatementList __)? "}" {
528
+ return insertLocationData(new ast.BlockStatement(optionalList(extractOptional(body, 0))), text(), line(), column());
529
+ }
530
+
531
+ VariableStatement
532
+ = VarToken __ declarations:VariableDeclarationList EOS {
533
+ return insertLocationData(new ast.VariableDeclarationStatement(declarations), text(), line(), column());
534
+ }
535
+
536
+ VariableDeclarationList
537
+ = first:VariableDeclaration rest:(__ "," __ VariableDeclaration)* {
538
+ return buildList(first, rest, 3);
539
+ }
540
+
541
+ VariableDeclaration
542
+ = id:Identifier init:(__ Initialiser)? {
543
+ return insertLocationData(new ast.VariableDeclarator(id, extractOptional(init, 1)), text(), line(), column());
544
+ }
545
+ / id:Pattern init:(__ Initialiser)? {
546
+ return insertLocationData(new ast.VariableDeclarator(id, extractOptional(init, 1)), text(), line(), column());
547
+ }
548
+
549
+ Initialiser
550
+ = "=" !"=" __ expression:AssignmentExpression { return expression; }
551
+
552
+ FunctionDeclaration
553
+ = AsyncToken __ FnToken __ id:Identifier __
554
+ "(" __ params:(FormalParameterList __)? ")" __
555
+ inheritsFrom:InheritsFrom?
556
+ __ body:Block __
557
+ {
558
+ return insertLocationData(
559
+ new ast.VariableDeclarationStatement(
560
+ [new ast.VariableDeclarator(id,
561
+ new ast.UnaryExpression("async",
562
+ new ast.FunctionExpression(
563
+ null,
564
+ optionalList(extractOptional(params, 0)),
565
+ body,
566
+ inheritsFrom
567
+ )
568
+ )
569
+ )]
570
+ ),
571
+ text(), line(), column());
572
+ }
573
+ / FnToken __ id:Identifier __
574
+ "(" __ params:(FormalParameterList __)? ")" __
575
+ inheritsFrom:InheritsFrom?
576
+ __ body:Block __
577
+ {
578
+ return insertLocationData(
579
+ new ast.FunctionDeclarationStatement(id, optionalList(extractOptional(params, 0)), body, inheritsFrom),
580
+ text(), line(), column());
581
+ }
582
+
583
+ InheritsFrom
584
+ = "extends" __ call:CallExpression __ {
585
+ return call;
586
+ }
587
+
588
+ FormalParameterList
589
+ = first:FormalParameter rest:(__ "," __ FormalParameter)* {
590
+ return buildList(first, rest, 3);
591
+ }
592
+
593
+ FormalParameter
594
+ = id:Identifier __ "=" __ defaultValue:Expression {
595
+ return insertLocationData(new ast.Parameter(id, defaultValue, false), text(), line(), column());
596
+ }
597
+ / id:Identifier __ "..." {
598
+ return insertLocationData(new ast.Parameter(id, null, true), text(), line(), column());
599
+ }
600
+ / id:Identifier {
601
+ return insertLocationData(new ast.Parameter(id, null, false), text(), line(), column());
602
+ }
603
+
604
+ IfStatement
605
+ = IfToken __ test:Expression __
606
+ consequent:Statement __
607
+ ElseToken __
608
+ alternate:Statement
609
+ {
610
+ return insertLocationData(new ast.IfStatement(test, consequent, alternate), text(), line(), column());
611
+ }
612
+ / IfToken __ test:Expression __
613
+ consequent:Statement {
614
+ return insertLocationData(new ast.IfStatement(test, consequent, null), text(), line(), column());
615
+ }
616
+
617
+ ReturnStatement
618
+ = ReturnToken EOS {
619
+ return insertLocationData(new ast.ReturnStatement(null), text(), line(), column());
620
+ }
621
+ / ReturnToken _ argument:Expression EOS {
622
+ return insertLocationData(new ast.ReturnStatement(argument), text(), line(), column());
623
+ }
624
+
625
+ ThrowStatement
626
+ = ThrowToken _ argument:Expression EOS {
627
+ return insertLocationData(new ast.ThrowStatement(argument), text(), line(), column());
628
+ }
629
+
630
+ TryStatement
631
+ = TryToken __ block:Block __ handler:Catch __ finalizer:Finally {
632
+ return insertLocationData(new ast.TryStatement(block, handler, finalizer), text(), line(), column());
633
+ }
634
+ / TryToken __ block:Block __ handler:Catch {
635
+ return insertLocationData(new ast.TryStatement(block, handler, null), text(), line(), column());
636
+ }
637
+ / TryToken __ block:Block __ finalizer:Finally {
638
+ return insertLocationData(new ast.TryStatement(block, null, finalizer), text(), line(), column());
639
+ }
640
+
641
+ Catch
642
+ = CatchToken __ param:Identifier __ body:Block {
643
+ return insertLocationData(new ast.CatchClause(param, body), text(), line(), column());
644
+ }
645
+
646
+ Finally
647
+ = FinallyToken __ block:Block { return block; }
648
+
649
+ BreakStatement
650
+ = BreakToken EOS {
651
+ return insertLocationData(new ast.BreakStatement(), text(), line(), column());
652
+ }
653
+
654
+ ContinueStatement
655
+ = ContinueToken EOS {
656
+ return insertLocationData(new ast.ContinueStatement(), text(), line(), column());
657
+ }
658
+
659
+ FallthroughStatement
660
+ = FallthroughToken EOS {
661
+ return insertLocationData(new ast.FallthroughStatement(), text(), line(), column());
662
+ }
663
+
664
+ ImportDeclarationStatement
665
+ = ImportToken __ specifiers:ImportSpecifierList __ FromToken __ source:StringLiteral EOS {
666
+ return insertLocationData(new ast.ImportDeclarationStatement(specifiers, source, "named"), text(), line(), column());
667
+ }
668
+ / ImportToken __ "*" __ AsToken __ id:Identifier __ FromToken __ source:StringLiteral EOS {
669
+ return insertLocationData(new ast.ImportDeclarationStatement([
670
+ new ast.ImportNamespaceSpecifier(id)
671
+ ], source, "named"), text(), line(), column());
672
+ }
673
+ / ImportToken __ source:StringLiteral __ AsToken __ id:Identifier EOS {
674
+ return insertLocationData(new ast.ImportDeclarationStatement([
675
+ new ast.ImportDefaultSpecifier(id)
676
+ ], source, "default"), text(), line(), column());
677
+ }
678
+
679
+ ImportSpecifierList
680
+ = first:ImportSpecifier rest:("," __ ImportSpecifier)* {
681
+ return buildList(first, rest, 2);
682
+ }
683
+
684
+ ImportSpecifier
685
+ = id:Identifier __ AsToken __ alias:Identifier {
686
+ return insertLocationData(new ast.ImportSpecifier(id, alias), text(), line(), column());
687
+ }
688
+ / id:Identifier {
689
+ return insertLocationData(new ast.ImportSpecifier(id, null), text(), line(), column());
690
+ }
691
+
692
+ ExportDeclarationStatement
693
+ = ExportToken __ specifiers:ExportSpecifierList source:(__ FromToken __ StringLiteral)? EOS {
694
+ return insertLocationData(new ast.ExportDeclarationStatement(specifiers, extractOptional(source, 3), null, false), text(), line(), column());
695
+ }
696
+ / ExportToken __ "*" __ FromToken __ source:StringLiteral EOS {
697
+ return insertLocationData(new ast.ExportDeclarationStatement([
698
+ new ast.ExportBatchSpecifier()
699
+ ], source, null, false), text(), line(), column());
700
+ }
701
+ / ExportToken __ statement:VariableStatement {
702
+ return insertLocationData(new ast.ExportDeclarationStatement(null, null, statement, false), text(), line(), column());
703
+ }
704
+ / ExportToken __ statement:FunctionDeclaration {
705
+ return insertLocationData(new ast.ExportDeclarationStatement(null, null, statement, false), text(), line(), column());
706
+ }
707
+ / ExportToken __ DefaultToken __ expression:Expression EOS {
708
+ return insertLocationData(new ast.ExportDeclarationStatement(null, null, expression, true), text(), line(), column());
709
+ }
710
+
711
+ ExportSpecifierList
712
+ = first:ExportSpecifier rest:("," __ ExportSpecifier)* {
713
+ return buildList(first, rest, 2);
714
+ }
715
+
716
+ ExportSpecifier
717
+ = id:Identifier __ AsToken __ alias:Identifier {
718
+ return insertLocationData(new ast.ExportSpecifier(id, alias), text(), line(), column());
719
+ }
720
+ / id:Identifier {
721
+ return insertLocationData(new ast.ExportSpecifier(id, null), text(), line(), column());
722
+ }
723
+
724
+ DoWhileStatement
725
+ = DoToken __
726
+ body:Statement __
727
+ WhileToken __ test:Expression EOS {
728
+ return insertLocationData(new ast.DoWhileStatement(test, body), text(), line(), column());
729
+ }
730
+
731
+ PushStatement
732
+ = left:LeftHandSideExpression __ "<-" __ right:AssignmentExpression EOS {
733
+ return insertLocationData(new ast.PushStatement(left, right), text(), line(), column());
734
+ }
735
+
736
+ GoStatement
737
+ = GoToken __ body:Block EOS {
738
+ return insertLocationData(new ast.GoStatement(body), text(), line(), column());
739
+ }
740
+
741
+ DebuggerStatement
742
+ = DebuggerToken EOS {
743
+ return insertLocationData(new ast.DebuggerStatement(), text(), line(), column());
744
+ }
745
+
746
+ WhileStatement
747
+ = WhileToken __ test:Expression __
748
+ body:Statement {
749
+ return insertLocationData(new ast.WhileStatement(test, body), text(), line(), column());
750
+ }
751
+
752
+ UntilStatement
753
+ = UntilToken __ test:Expression __
754
+ body:Statement {
755
+ return insertLocationData(new ast.UntilStatement(test, body), text(), line(), column());
756
+ }
757
+
758
+ SwitchStatement
759
+ = SwitchToken __ discriminant:Expression __ "{" __
760
+ cases:CaseClauseList __
761
+ "}" {
762
+ return insertLocationData(new ast.SwitchStatement(discriminant, cases), text(), line(), column());
763
+ }
764
+
765
+ CaseClauseList
766
+ = first:CaseClause rest:(__ ","? __ CaseClause)* {
767
+ return buildList(first, rest, 3);
768
+ }
769
+
770
+ CaseClause
771
+ = CaseToken __ tests:CaseClauseTestList __ ":" __ body:Statement {
772
+ return insertLocationData(new ast.CaseClause(tests, body), text(), line(), column());
773
+ }
774
+ / DefaultToken __ ":" __ body:Statement {
775
+ return insertLocationData(new ast.CaseClause(null, body), text(), line(), column());
776
+ }
777
+
778
+ CaseClauseTestList
779
+ = first:CaseClauseTest rest:("," __ CaseClauseTest)* {
780
+ return buildList(first, rest, 2);
781
+ }
782
+
783
+ CaseClauseTest
784
+ = OptionalRange
785
+ / Expression
786
+
787
+ ForStatement
788
+ = ForToken __
789
+ item:Identifier __
790
+ index:("," __ Identifier)? __
791
+ InToken __ array:Expression __
792
+ body:Statement {
793
+ return insertLocationData(new ast.ForInStatement(
794
+ item,
795
+ extractOptional(index, 2),
796
+ array,
797
+ body
798
+ ), text(), line(), column());
799
+ }
800
+ / ForToken __
801
+ key:Identifier __
802
+ value:("," __ Identifier)? __
803
+ OfToken __ object:Expression __
804
+ body:Statement {
805
+ return insertLocationData(new ast.ForOfStatement(
806
+ key,
807
+ extractOptional(value, 2),
808
+ object,
809
+ body
810
+ ), text(), line(), column());
811
+ }
812
+ / ForToken __
813
+ VarToken __ declarations:VariableDeclarationList __ ";" __
814
+ test:(Expression __)? ";" __
815
+ update:(!("{" __ "}") Expression __)? __
816
+ body:Statement {
817
+ return insertLocationData(new ast.ForStatement(
818
+ new ast.VariableDeclarationStatement(declarations),
819
+ extractOptional(test, 0),
820
+ extractOptional(update, 1),
821
+ body
822
+ ), text(), line(), column());
823
+ }
824
+ / ForToken __
825
+ init:(Expression __)? ";" __
826
+ test:(Expression __)? ";" __
827
+ update:(!("{" __ "}") Expression __)? __
828
+ body:Statement {
829
+ return insertLocationData(new ast.ForStatement(
830
+ extractOptional(init, 0),
831
+ extractOptional(test, 0),
832
+ extractOptional(update, 1),
833
+ body
834
+ ), text(), line(), column());
835
+ }
836
+
837
+ UseStatement
838
+ = UseToken __ identifiers:UseIdentifierList EOS
839
+ { return new ast.UseStatement(identifiers) }
840
+
841
+ UseIdentifierList
842
+ = first:UseIdentifier rest:(__ "," __ UseIdentifier)* {
843
+ return buildList(first, rest, 3);
844
+ }
845
+
846
+ UseIdentifier
847
+ = Identifier
848
+ / ":" id:Identifier {
849
+ return id.asPredefinedCollection();
850
+ }
851
+
852
+ ExpressionStatement
853
+ = !("{" / FnToken) expression:Expression EOS {
854
+ return insertLocationData(new ast.ExpressionStatement(expression), text(), line(), column());
855
+ }
856
+
857
+ AssignmentExpression
858
+ = left:Pattern __ "=" !"=" __ right:AssignmentExpression {
859
+ return insertLocationData(new ast.AssignmentExpression(
860
+ left, "=", right), text(), line(), column());
861
+ }
862
+ / left:ConditionalExpression
863
+ assignment:(__ operator:AssignmentOperator __
864
+ right:AssignmentExpression)? {
865
+ if (!assignment) {
866
+ return left;
867
+ }
868
+
869
+ return insertLocationData(new ast.AssignmentExpression(
870
+ left,
871
+ extractOptional(assignment, 1),
872
+ extractOptional(assignment, 3)), text(), line(), column());
873
+ }
874
+
875
+ AssignmentOperator
876
+ = "=" !"=" { return "=" }
877
+ / "*="
878
+ / "/="
879
+ / "%="
880
+ / "+="
881
+ / "-="
882
+ / "<<="
883
+ / ">>="
884
+ / ">>>="
885
+ / "&="
886
+ / "^="
887
+ / "|="
888
+
889
+ ConditionalExpression
890
+ = consequent:LogicalORExpression __
891
+ condition:(IfToken __ LogicalORExpression __
892
+ ElseToken __ LogicalORExpression)? {
893
+ if (condition) {
894
+ var test = extractOptional(condition, 2);
895
+ var alternate = extractOptional(condition, 6);
896
+
897
+ return insertLocationData(new ast.ConditionalExpression(test, consequent, alternate), text(), line(), column());
898
+ } else {
899
+ return consequent;
900
+ }
901
+ }
902
+
903
+ LogicalORExpression
904
+ = first:LogicalANDExpression
905
+ rest:(__ LogicalOROperator __ LogicalANDExpression)*
906
+ { return buildLogicalExpression(first, rest); }
907
+
908
+ LogicalOROperator
909
+ = "||"
910
+ / OrToken { return "||"; }
911
+
912
+ LogicalANDExpression
913
+ = first:BitwiseORExpression
914
+ rest:(__ LogicalANDOperator __ BitwiseORExpression)*
915
+ { return buildLogicalExpression(first, rest); }
916
+
917
+ LogicalANDOperator
918
+ = "&&"
919
+ / AndToken { return "&&"; }
920
+
921
+ BitwiseORExpression
922
+ = first:BitwiseXORExpression
923
+ rest:(__ BitwiseOROperator __ BitwiseXORExpression)*
924
+ { return buildBinaryExpression(first, rest); }
925
+
926
+ BitwiseOROperator
927
+ = $("|" ![|=])
928
+
929
+ BitwiseXORExpression
930
+ = first:BitwiseANDExpression
931
+ rest:(__ BitwiseXOROperator __ BitwiseANDExpression)*
932
+ { return buildBinaryExpression(first, rest); }
933
+
934
+ BitwiseXOROperator
935
+ = $("^" !"=")
936
+
937
+ BitwiseANDExpression
938
+ = first:EqualityExpression
939
+ rest:(__ BitwiseANDOperator __ EqualityExpression)*
940
+ { return buildBinaryExpression(first, rest); }
941
+
942
+ BitwiseANDOperator
943
+ = $("&" ![&=])
944
+
945
+ EqualityExpression
946
+ = first:RelationalExpression
947
+ rest:(__ EqualityOperator __ RelationalExpression)*
948
+ { return buildBinaryExpression(first, rest); }
949
+
950
+ EqualityOperator
951
+ = "=="
952
+ / "!="
953
+
954
+ RelationalExpression
955
+ = first:InExpression
956
+ rest:(__ RelationalOperator __ InExpression)*
957
+ { return buildBinaryExpression(first, rest); }
958
+
959
+ RelationalOperator
960
+ = "<="
961
+ / ">="
962
+ / $("<" !"<")
963
+ / $(">" !">")
964
+ / $InstanceofToken
965
+
966
+ InExpression
967
+ = left:NullCoalescingExpression
968
+ right:(__ InToken __ NullCoalescingExpression)? {
969
+ if (!right) {
970
+ return left;
971
+ }
972
+ return insertLocationData(new ast.InExpression(left, extractOptional(right, 3)), text(), line(), column());
973
+ }
974
+
975
+ NullCoalescingExpression
976
+ = first:ShiftExpression
977
+ rest:(__ "??" __ ShiftExpression)*
978
+ { return buildNullCoalescingExpression(first, rest); }
979
+
980
+ ShiftExpression
981
+ = first:AdditiveExpression
982
+ rest:(__ ShiftOperator __ AdditiveExpression)*
983
+ { return buildBinaryExpression(first, rest); }
984
+
985
+ ShiftOperator
986
+ = $("<<" !"=")
987
+ / $(">>>" !"=")
988
+ / $(">>" !"=")
989
+
990
+ AdditiveExpression
991
+ = first:MultiplicativeExpression
992
+ rest:(__ AdditiveOperator __ MultiplicativeExpression)*
993
+ { return buildBinaryExpression(first, rest); }
994
+
995
+ AdditiveOperator
996
+ = $("+" ![+=])
997
+ / $("-" ![-=])
998
+
999
+ MultiplicativeExpression
1000
+ = first:ExponentiativeExpression
1001
+ rest:(__ MultiplicativeOperator __ UnaryExpression)*
1002
+ { return buildBinaryExpression(first, rest); }
1003
+
1004
+ MultiplicativeOperator
1005
+ = $("*" ![*=])
1006
+ / $("/" !"=")
1007
+ / $("#" !"=")
1008
+ / $("%" ![%=])
1009
+ / $("%%" !"=")
1010
+
1011
+ ExponentiativeExpression
1012
+ = first:UnaryExpression
1013
+ rest:(__ ExponentiativeOperator __ UnaryExpression)*
1014
+ { return buildBinaryExpression(first, rest); }
1015
+
1016
+ ExponentiativeOperator
1017
+ = $("**" !"=")
1018
+
1019
+ UnaryExpression
1020
+ = operator:UnaryOperator __ argument:PostfixExpression {
1021
+ if (operator === "++" || operator === "--") {
1022
+ return insertLocationData(new ast.UpdateExpression(argument, operator, true), text(), line(), column());
1023
+ } else {
1024
+ return insertLocationData(new ast.UnaryExpression(operator, argument), text(), line(), column());
1025
+ }
1026
+ }
1027
+ / PostfixExpression
1028
+
1029
+ UnaryOperator
1030
+ = $DeleteToken
1031
+ / $TypeofToken
1032
+ / $AsyncToken
1033
+ / $AwaitToken
1034
+ / $NotToken { return "!" }
1035
+ / "<-"
1036
+ / "++"
1037
+ / "--"
1038
+ / $("+" !"=")
1039
+ / $("-" !"=")
1040
+ / "!"
1041
+
1042
+ PostfixExpression
1043
+ = argument:ExistentialExpression _ operator:PostfixOperator? {
1044
+ if (operator) {
1045
+ return insertLocationData(new ast.UpdateExpression(argument, operator, false), text(), line(), column());
1046
+ } else {
1047
+ return argument;
1048
+ }
1049
+ }
1050
+
1051
+ PostfixOperator
1052
+ = "++"
1053
+ / "--"
1054
+
1055
+ ExistentialExpression
1056
+ = argument:LeftHandSideExpression operator:"?"? !"?" {
1057
+ if (operator) {
1058
+ return insertLocationData(new ast.ExistentialExpression(argument), text(), line(), column());
1059
+ } else {
1060
+ return argument;
1061
+ }
1062
+ }
1063
+
1064
+ LeftHandSideExpression
1065
+ = CallExpression
1066
+
1067
+ CallExpression
1068
+ = first:(
1069
+ callee:MemberExpression call:(__ CallExpressionOperator? __ args:Arguments)? {
1070
+ if (!call) {
1071
+ return callee;
1072
+ }
1073
+
1074
+ var op = extractOptional(call, 1);
1075
+ if (op === "?") {
1076
+ return insertLocationData(new ast.NullCheckCallExpression(callee, extractOptional(call, 3)), text(), line(), column());
1077
+ } else if (op === "^") {
1078
+ return insertLocationData(new ast.CurryCallExpression(callee, extractOptional(call, 3)), text(), line(), column());
1079
+ } else {
1080
+ return insertLocationData(new ast.CallExpression(callee, extractOptional(call, 3)), text(), line(), column());
1081
+ }
1082
+ }
1083
+ )
1084
+ rest:(
1085
+ __ operator:CallExpressionOperator? __ args:Arguments {
1086
+ var type = "CallExpression";
1087
+ if (operator === "?") {
1088
+ type = "NullCheckCallExpression";
1089
+ } else if (operator === "^") {
1090
+ type = "CurryCallExpression";
1091
+ }
1092
+
1093
+ return {
1094
+ type: type,
1095
+ arguments: args
1096
+ };
1097
+ }
1098
+ / __ "[" __ property:Expression __ "]" {
1099
+ return {
1100
+ type: "MemberExpression",
1101
+ property: property,
1102
+ computed: true
1103
+ };
1104
+ }
1105
+ / __ "[" __ range:OptionalRange __ "]" {
1106
+ return {
1107
+ type: "RangeMemberExpression",
1108
+ range: range
1109
+ }
1110
+ }
1111
+ / __ nullPropagatingOperator:"?"? __ "." !"." __ property:IdentifierName {
1112
+ return {
1113
+ type: nullPropagatingOperator === "?" ? "NullPropagatingExpression" : "MemberExpression",
1114
+ property: property,
1115
+ computed: false
1116
+ };
1117
+ }
1118
+ )*
1119
+ {
1120
+ return buildTree(first, rest, function(result, element) {
1121
+ if (element.type === "MemberExpression") {
1122
+ return insertLocationData(new ast.MemberExpression(result, element.property, element.computed), text(), line(), column());
1123
+ } if (element.type === "NullPropagatingExpression") {
1124
+ return insertLocationData(new ast.NullPropagatingExpression(result, element.property, element.computed), text(), line(), column());
1125
+ } else if (element.type === "CallExpression") {
1126
+ return insertLocationData(new ast.CallExpression(result, element.arguments), text(), line(), column());
1127
+ } else if (element.type === "CurryCallExpression") {
1128
+ return insertLocationData(new ast.CurryCallExpression(result, element.arguments), text(), line(), column());
1129
+ } else if (element.type === "NullCheckCallExpression") {
1130
+ return insertLocationData(new ast.NullCheckCallExpression(result, element.arguments), text(), line(), column());
1131
+ } else if (element.type === "RangeMemberExpression") {
1132
+ return insertLocationData(new ast.RangeMemberExpression(result, element.range), text(), line(), column());
1133
+ }
1134
+ });
1135
+ }
1136
+
1137
+ CallExpressionOperator
1138
+ = "?"
1139
+ / "^"
1140
+
1141
+ MemberExpression
1142
+ = first:(
1143
+ FunctionExpression
1144
+ / NewToken __ callee:MemberExpression __ args:Arguments {
1145
+ return insertLocationData(new ast.NewExpression(callee, args), text(), line(), column());
1146
+ }
1147
+ )
1148
+ rest:(
1149
+ __ "[" __ property:Expression __ "]" {
1150
+ return {
1151
+ type: "MemberExpression",
1152
+ property: property,
1153
+ computed: true
1154
+ };
1155
+ }
1156
+ / __ nullPropagatingOperator:"?"? __ "." !"." __ property:IdentifierName {
1157
+ return {
1158
+ type: nullPropagatingOperator === "?" ? "NullPropagatingExpression" : "MemberExpression",
1159
+ property: property,
1160
+ computed: false
1161
+ };
1162
+ }
1163
+ / __ "[" __ range:OptionalRange __ "]" {
1164
+ return {
1165
+ type: "RangeMemberExpression",
1166
+ range: range
1167
+ }
1168
+ }
1169
+ )*
1170
+ {
1171
+ return buildTree(first, rest, function (result, element) {
1172
+ if (element.type === "NullPropagatingExpression") {
1173
+ return insertLocationData(new ast.NullPropagatingExpression(result, element.property, element.computed), text(), line(), column());
1174
+ } else if (element.type === "MemberExpression") {
1175
+ return insertLocationData(new ast.MemberExpression(result, element.property, element.computed), text(), line(), column());
1176
+ } else if (element.type === "RangeMemberExpression") {
1177
+ return insertLocationData(new ast.RangeMemberExpression(result, element.range), text(), line(), column());
1178
+ }
1179
+ });
1180
+ }
1181
+
1182
+ Arguments
1183
+ = "(" __ args:(ArgumentList __)? ")" {
1184
+ return optionalList(extractOptional(args, 0));
1185
+ }
1186
+
1187
+ ArgumentList
1188
+ = first:Argument rest:(__ "," __ Argument)* {
1189
+ return buildList(first, rest, 3);
1190
+ }
1191
+
1192
+ Argument
1193
+ = expression:AssignmentExpression __ "..." {
1194
+ return insertLocationData(new ast.SplatExpression(expression), text(), line(), column());
1195
+ }
1196
+ / AssignmentExpression
1197
+
1198
+ FunctionExpression
1199
+ = FnToken __ id:(Identifier __)?
1200
+ "(" __ params:(FormalParameterList __)? ")" __
1201
+ inheritsFrom:InheritsFrom?
1202
+ __ body:Block __
1203
+ {
1204
+ return insertLocationData(new ast.FunctionExpression(
1205
+ extractOptional(id, 0),
1206
+ optionalList(extractOptional(params, 0)),
1207
+ body,
1208
+ inheritsFrom
1209
+ ), text(), line(), column());
1210
+ }
1211
+ / "(" __ params:(FormalParameterList __)? ")"
1212
+ __ operator:FunctionExpressionOperator
1213
+ __ body:Block __
1214
+ {
1215
+ return insertLocationData(new ast.FunctionExpression(
1216
+ null,
1217
+ optionalList(extractOptional(params, 0)),
1218
+ body,
1219
+ null,
1220
+ operator
1221
+ ), text(), line(), column());
1222
+ }
1223
+ / "(" __ params:(FormalParameterList __)? ")"
1224
+ __ operator:FunctionExpressionOperator
1225
+ __ body:Expression __
1226
+ {
1227
+ return insertLocationData(new ast.FunctionExpression(
1228
+ null,
1229
+ optionalList(extractOptional(params, 0)),
1230
+ body,
1231
+ null,
1232
+ operator
1233
+ ), text(), line(), column());
1234
+ }
1235
+ / ForInExpression
1236
+
1237
+ FunctionExpressionOperator
1238
+ = "->"
1239
+ / "=>"
1240
+
1241
+ ForInExpression
1242
+ = "[" __
1243
+ expression:Expression __
1244
+ ForToken __
1245
+ item:Identifier __
1246
+ index:("," __ Identifier __)?
1247
+ InToken __
1248
+ array:Expression __
1249
+ condition:(IfToken __ Expression __)?
1250
+ "]" {
1251
+ return insertLocationData(new ast.ForInExpression(
1252
+ expression,
1253
+ item,
1254
+ index ? extractOptional(index, 2) : null,
1255
+ array,
1256
+ condition ? extractOptional(condition, 2) : null
1257
+ ), text(), line(), column());
1258
+ }
1259
+ / GlobalIdentifierExpression
1260
+
1261
+ GlobalIdentifierExpression
1262
+ = "::" __ id:Identifier
1263
+ { return id.asGlobal(); }
1264
+ / PrimaryExpression
1265
+
1266
+ PrimaryExpression
1267
+ = ThisExpression
1268
+ / SuperExpression
1269
+ / RangeExpression
1270
+ / Identifier
1271
+ / Literal
1272
+ / ArrayLiteral
1273
+ / ObjectLiteral
1274
+ / "(" __ expression:Expression __ ")" { return expression; }
1275
+
1276
+ ThisExpression
1277
+ = ThisToken {
1278
+ return insertLocationData(new ast.ThisExpression(), text(), line(), column());
1279
+ }
1280
+
1281
+ SuperExpression
1282
+ = SuperToken {
1283
+ return insertLocationData(new ast.SuperExpression(), text(), line(), column());
1284
+ }
1285
+
1286
+ RangeExpression
1287
+ = "[" __ range:Range __ "]" {
1288
+ return range;
1289
+ }
1290
+
1291
+ Range
1292
+ = from:Expression __ operator:RangeOperator __ to:Expression {
1293
+ return insertLocationData(new ast.Range(from, operator, to), text(), line(), column());
1294
+ }
1295
+
1296
+ OptionalRange
1297
+ = from:Expression? __ operator:RangeOperator __ to:Expression? {
1298
+ return insertLocationData(new ast.Range(from, operator, to), text(), line(), column());
1299
+ }
1300
+
1301
+ RangeOperator
1302
+ = ".." !"." { return ".."; }
1303
+ / "..."
1304
+
1305
+ Expression
1306
+ = expression:AssignmentExpression {
1307
+ return expression;
1308
+ }
1309
+
1310
+ ArrayLiteral
1311
+ = "[" __ elision:(Elision __)? "]" {
1312
+ return insertLocationData(new ast.ArrayExpression(optionalList(extractOptional(elision, 0))), text(), line(), column());
1313
+ }
1314
+ / "[" __ elements:ElementList __ "]" {
1315
+ return insertLocationData(new ast.ArrayExpression(elements), text(), line(), column());
1316
+ }
1317
+ / "[" __ elements:ElementList __ "," __ elision:(Elision __)? "]" {
1318
+ return insertLocationData(new ast.ArrayExpression(elements.concat(optionalList(extractOptional(elision, 0)))), text(), line(), column());
1319
+ }
1320
+
1321
+ ElementList
1322
+ = first:(
1323
+ elision:(Elision __)? element:AssignmentExpression {
1324
+ return optionalList(extractOptional(elision, 0)).concat(element);
1325
+ }
1326
+ )
1327
+ rest:(
1328
+ __ "," __ elision:(Elision __)? element:AssignmentExpression {
1329
+ return optionalList(extractOptional(elision, 0)).concat(element);
1330
+ }
1331
+ )*
1332
+ { return Array.prototype.concat.apply(first, rest); }
1333
+
1334
+ ArrayPattern
1335
+ = "[" __ elision:(Elision __)? "]" {
1336
+ return insertLocationData(new ast.ArrayPattern(optionalList(extractOptional(elision, 0))), text(), line(), column());
1337
+ }
1338
+ / "[" __ elements:PatternElementList __ "]" {
1339
+ return insertLocationData(new ast.ArrayPattern(elements), text(), line(), column());
1340
+ }
1341
+ / "[" __ elements:PatternElementList __ "," __ elision:(Elision __)? "]" {
1342
+ return insertLocationData(new ast.ArrayPattern(elements.concat(optionalList(extractOptional(elision, 0)))), text(), line(), column());
1343
+ }
1344
+
1345
+ PatternElementList
1346
+ = first:(
1347
+ elision:(Elision __)? element:PatternElement {
1348
+ return optionalList(extractOptional(elision, 0)).concat(element);
1349
+ }
1350
+ )
1351
+ rest:(
1352
+ __ "," __ elision:(Elision __)? element:PatternElement {
1353
+ return optionalList(extractOptional(elision, 0)).concat(element);
1354
+ }
1355
+ )*
1356
+ { return Array.prototype.concat.apply(first, rest); }
1357
+
1358
+ PatternElement
1359
+ = Identifier
1360
+ / ArrayPattern
1361
+
1362
+ Elision
1363
+ = "," commas:(__ ",")* { return filledArray(commas.length + 1, null); }
1364
+
1365
+ ObjectLiteral
1366
+ = "{" __ "}" {
1367
+ return new ast.ObjectExpression([]);
1368
+ }
1369
+ / "{" __ properties:PropertyNameAndValueList __ "}" {
1370
+ return insertLocationData(new ast.ObjectExpression(properties), text(), line(), column());
1371
+ }
1372
+ / "{" __ properties:PropertyNameAndValueList __ "," __ "}" {
1373
+ return insertLocationData(new ast.ObjectExpression(properties), text(), line(), column());
1374
+ }
1375
+
1376
+ PropertyNameAndValueList
1377
+ = first:PropertyAssignment rest:(__ "," __ PropertyAssignment)* {
1378
+ return buildList(first, rest, 3);
1379
+ }
1380
+
1381
+ PropertyAssignment
1382
+ = key:PropertyName __ ":" __ value:AssignmentExpression {
1383
+ return insertLocationData(new ast.Property(key, value, false, false), text(), line(), column());
1384
+ }
1385
+ / key:PropertyName __
1386
+ "(" __ params:(FormalParameterList __)? ")"
1387
+ __ body:Block __
1388
+ {
1389
+ return insertLocationData(new ast.Property(key, new ast.FunctionExpression(
1390
+ null,
1391
+ optionalList(extractOptional(params, 0)),
1392
+ body,
1393
+ null
1394
+ ), false, true), text(), line(), column());
1395
+ }
1396
+ / key:IdentifierName {
1397
+ return insertLocationData(new ast.Property(key, key, true, false), text(), line(), column());
1398
+ }
1399
+
1400
+ PropertyName
1401
+ = IdentifierName
1402
+ / StringLiteral
1403
+ / NumericLiteral
1404
+
1405
+ ObjectPattern
1406
+ = "{" __ "}" {
1407
+ return new ast.ObjectPattern([]);
1408
+ }
1409
+ / "{" __ properties:PatternPropertyNameAndValueList __ "}" {
1410
+ return insertLocationData(new ast.ObjectPattern(properties), text(), line(), column());
1411
+ }
1412
+ / "{" __ properties:PatternPropertyNameAndValueList __ "," __ "}" {
1413
+ return insertLocationData(new ast.ObjectPattern(properties), text(), line(), column());
1414
+ }
1415
+
1416
+ PatternPropertyNameAndValueList
1417
+ = first:PatternPropertyAssignment rest:(__ "," __ PatternPropertyAssignment)* {
1418
+ return buildList(first, rest, 3);
1419
+ }
1420
+
1421
+ PatternPropertyAssignment
1422
+ = key:IdentifierName __ ":" __ value:IdentifierName {
1423
+ return insertLocationData(new ast.Property(key, value, false, false), text(), line(), column());
1424
+ }
1425
+ / key:IdentifierName __ ":" __ value:ObjectPattern {
1426
+ return insertLocationData(new ast.Property(key, value, false, false), text(), line(), column());
1427
+ }
1428
+ / key:IdentifierName {
1429
+ return insertLocationData(new ast.Property(key, key, true, false), text(), line(), column());
1430
+ }
1431
+
1432
+ Pattern
1433
+ = ObjectPattern
1434
+ / ArrayPattern