2 * Copyright (c) 2016, Facebook, Inc.
5 * This source code is licensed under the BSD-style license found in the
6 * LICENSE file in the "hack" directory of this source tree. An additional
7 * grant of patent rights can be found in the PATENTS file in the same
12 * THIS FILE IS @generated; DO NOT EDIT IT
13 * To regenerate this file, run
15 * buck run //hphp/hack/src:generate_full_fidelity
23 let utils = require('./full_fidelity_utils.js');
24 let array_map_reduce = utils.array_map_reduce;
25 let array_sum = utils.array_sum;
29 constructor(syntax_kind, children)
31 this._syntax_kind = syntax_kind;
32 this._children = children;
34 for(let child in children)
35 width += children[child].width;
36 this._children_width = width;
38 get syntax_kind() { return this._syntax_kind; }
39 get children() { return this._children; }
40 get is_token() { return false; }
41 get is_trivia() { return false; }
42 get is_list() { return false; }
43 get is_missing() { return false; }
45 get width() { return this._children_width; }
50 for(let key of this.children_keys)
51 s += this.children[key].full_text;
55 static from_json(json, position, source)
60 return EditableToken.from_json(json.token, position, source);
62 return EditableList.from_json(json, position, source);
64 return WhiteSpace.from_json(json, position, source);
66 return EndOfLine.from_json(json, position, source);
67 case 'delimited_comment':
68 return DelimitedComment.from_json(json, position, source);
69 case 'single_line_comment':
70 return SingleLineComment.from_json(json, position, source);
72 return Unsafe.from_json(json, position, source);
73 case 'unsafe_expression':
74 return UnsafeExpression.from_json(json, position, source);
76 return FixMe.from_json(json, position, source);
78 return IgnoreError.from_json(json, position, source);
80 return FallThrough.from_json(json, position, source);
81 case 'extra_token_error':
82 return ExtraTokenError.from_json(json, position, source);
83 case 'after_halt_compiler':
84 return AfterHaltCompiler.from_json(json, position, source);
87 return Missing.missing;
89 return EndOfFile.from_json(json, position, source);
91 return Script.from_json(json, position, source);
92 case 'qualified_name':
93 return QualifiedName.from_json(json, position, source);
94 case 'simple_type_specifier':
95 return SimpleTypeSpecifier.from_json(json, position, source);
97 return LiteralExpression.from_json(json, position, source);
99 return VariableExpression.from_json(json, position, source);
100 case 'pipe_variable':
101 return PipeVariableExpression.from_json(json, position, source);
102 case 'enum_declaration':
103 return EnumDeclaration.from_json(json, position, source);
105 return Enumerator.from_json(json, position, source);
106 case 'alias_declaration':
107 return AliasDeclaration.from_json(json, position, source);
108 case 'property_declaration':
109 return PropertyDeclaration.from_json(json, position, source);
110 case 'property_declarator':
111 return PropertyDeclarator.from_json(json, position, source);
112 case 'namespace_declaration':
113 return NamespaceDeclaration.from_json(json, position, source);
114 case 'namespace_body':
115 return NamespaceBody.from_json(json, position, source);
116 case 'namespace_empty_body':
117 return NamespaceEmptyBody.from_json(json, position, source);
118 case 'namespace_use_declaration':
119 return NamespaceUseDeclaration.from_json(json, position, source);
120 case 'namespace_group_use_declaration':
121 return NamespaceGroupUseDeclaration.from_json(json, position, source);
122 case 'namespace_use_clause':
123 return NamespaceUseClause.from_json(json, position, source);
124 case 'function_declaration':
125 return FunctionDeclaration.from_json(json, position, source);
126 case 'function_declaration_header':
127 return FunctionDeclarationHeader.from_json(json, position, source);
129 return WhereClause.from_json(json, position, source);
130 case 'where_constraint':
131 return WhereConstraint.from_json(json, position, source);
132 case 'methodish_declaration':
133 return MethodishDeclaration.from_json(json, position, source);
134 case 'classish_declaration':
135 return ClassishDeclaration.from_json(json, position, source);
136 case 'classish_body':
137 return ClassishBody.from_json(json, position, source);
138 case 'trait_use_precedence_item':
139 return TraitUsePrecedenceItem.from_json(json, position, source);
140 case 'trait_use_alias_item':
141 return TraitUseAliasItem.from_json(json, position, source);
142 case 'trait_use_conflict_resolution':
143 return TraitUseConflictResolution.from_json(json, position, source);
145 return TraitUse.from_json(json, position, source);
146 case 'require_clause':
147 return RequireClause.from_json(json, position, source);
148 case 'const_declaration':
149 return ConstDeclaration.from_json(json, position, source);
150 case 'constant_declarator':
151 return ConstantDeclarator.from_json(json, position, source);
152 case 'type_const_declaration':
153 return TypeConstDeclaration.from_json(json, position, source);
154 case 'decorated_expression':
155 return DecoratedExpression.from_json(json, position, source);
156 case 'parameter_declaration':
157 return ParameterDeclaration.from_json(json, position, source);
158 case 'variadic_parameter':
159 return VariadicParameter.from_json(json, position, source);
160 case 'attribute_specification':
161 return AttributeSpecification.from_json(json, position, source);
163 return Attribute.from_json(json, position, source);
164 case 'inclusion_expression':
165 return InclusionExpression.from_json(json, position, source);
166 case 'inclusion_directive':
167 return InclusionDirective.from_json(json, position, source);
168 case 'compound_statement':
169 return CompoundStatement.from_json(json, position, source);
170 case 'alternate_loop_statement':
171 return AlternateLoopStatement.from_json(json, position, source);
172 case 'expression_statement':
173 return ExpressionStatement.from_json(json, position, source);
174 case 'markup_section':
175 return MarkupSection.from_json(json, position, source);
176 case 'markup_suffix':
177 return MarkupSuffix.from_json(json, position, source);
178 case 'unset_statement':
179 return UnsetStatement.from_json(json, position, source);
180 case 'using_statement_block_scoped':
181 return UsingStatementBlockScoped.from_json(json, position, source);
182 case 'using_statement_function_scoped':
183 return UsingStatementFunctionScoped.from_json(json, position, source);
184 case 'declare_directive_statement':
185 return DeclareDirectiveStatement.from_json(json, position, source);
186 case 'declare_block_statement':
187 return DeclareBlockStatement.from_json(json, position, source);
188 case 'while_statement':
189 return WhileStatement.from_json(json, position, source);
191 return IfStatement.from_json(json, position, source);
192 case 'elseif_clause':
193 return ElseifClause.from_json(json, position, source);
195 return ElseClause.from_json(json, position, source);
196 case 'if_endif_statement':
197 return IfEndIfStatement.from_json(json, position, source);
198 case 'elseif_colon_clause':
199 return ElseifColonClause.from_json(json, position, source);
200 case 'else_colon_clause':
201 return ElseColonClause.from_json(json, position, source);
202 case 'try_statement':
203 return TryStatement.from_json(json, position, source);
205 return CatchClause.from_json(json, position, source);
206 case 'finally_clause':
207 return FinallyClause.from_json(json, position, source);
209 return DoStatement.from_json(json, position, source);
210 case 'for_statement':
211 return ForStatement.from_json(json, position, source);
212 case 'foreach_statement':
213 return ForeachStatement.from_json(json, position, source);
214 case 'switch_statement':
215 return SwitchStatement.from_json(json, position, source);
216 case 'alternate_switch_statement':
217 return AlternateSwitchStatement.from_json(json, position, source);
218 case 'switch_section':
219 return SwitchSection.from_json(json, position, source);
220 case 'switch_fallthrough':
221 return SwitchFallthrough.from_json(json, position, source);
223 return CaseLabel.from_json(json, position, source);
224 case 'default_label':
225 return DefaultLabel.from_json(json, position, source);
226 case 'return_statement':
227 return ReturnStatement.from_json(json, position, source);
229 return GotoLabel.from_json(json, position, source);
230 case 'goto_statement':
231 return GotoStatement.from_json(json, position, source);
232 case 'throw_statement':
233 return ThrowStatement.from_json(json, position, source);
234 case 'break_statement':
235 return BreakStatement.from_json(json, position, source);
236 case 'continue_statement':
237 return ContinueStatement.from_json(json, position, source);
238 case 'function_static_statement':
239 return FunctionStaticStatement.from_json(json, position, source);
240 case 'static_declarator':
241 return StaticDeclarator.from_json(json, position, source);
242 case 'echo_statement':
243 return EchoStatement.from_json(json, position, source);
244 case 'global_statement':
245 return GlobalStatement.from_json(json, position, source);
246 case 'simple_initializer':
247 return SimpleInitializer.from_json(json, position, source);
248 case 'anonymous_class':
249 return AnonymousClass.from_json(json, position, source);
250 case 'anonymous_function':
251 return AnonymousFunction.from_json(json, position, source);
252 case 'php7_anonymous_function':
253 return Php7AnonymousFunction.from_json(json, position, source);
254 case 'anonymous_function_use_clause':
255 return AnonymousFunctionUseClause.from_json(json, position, source);
256 case 'lambda_expression':
257 return LambdaExpression.from_json(json, position, source);
258 case 'lambda_signature':
259 return LambdaSignature.from_json(json, position, source);
260 case 'cast_expression':
261 return CastExpression.from_json(json, position, source);
262 case 'scope_resolution_expression':
263 return ScopeResolutionExpression.from_json(json, position, source);
264 case 'member_selection_expression':
265 return MemberSelectionExpression.from_json(json, position, source);
266 case 'safe_member_selection_expression':
267 return SafeMemberSelectionExpression.from_json(json, position, source);
268 case 'embedded_member_selection_expression':
269 return EmbeddedMemberSelectionExpression.from_json(json, position, source);
270 case 'yield_expression':
271 return YieldExpression.from_json(json, position, source);
272 case 'yield_from_expression':
273 return YieldFromExpression.from_json(json, position, source);
274 case 'prefix_unary_expression':
275 return PrefixUnaryExpression.from_json(json, position, source);
276 case 'postfix_unary_expression':
277 return PostfixUnaryExpression.from_json(json, position, source);
278 case 'binary_expression':
279 return BinaryExpression.from_json(json, position, source);
280 case 'instanceof_expression':
281 return InstanceofExpression.from_json(json, position, source);
282 case 'is_expression':
283 return IsExpression.from_json(json, position, source);
284 case 'conditional_expression':
285 return ConditionalExpression.from_json(json, position, source);
286 case 'eval_expression':
287 return EvalExpression.from_json(json, position, source);
288 case 'empty_expression':
289 return EmptyExpression.from_json(json, position, source);
290 case 'define_expression':
291 return DefineExpression.from_json(json, position, source);
292 case 'halt_compiler_expression':
293 return HaltCompilerExpression.from_json(json, position, source);
294 case 'isset_expression':
295 return IssetExpression.from_json(json, position, source);
296 case 'function_call_expression':
297 return FunctionCallExpression.from_json(json, position, source);
298 case 'function_call_with_type_arguments_expression':
299 return FunctionCallWithTypeArgumentsExpression.from_json(json, position, source);
300 case 'parenthesized_expression':
301 return ParenthesizedExpression.from_json(json, position, source);
302 case 'braced_expression':
303 return BracedExpression.from_json(json, position, source);
304 case 'embedded_braced_expression':
305 return EmbeddedBracedExpression.from_json(json, position, source);
306 case 'list_expression':
307 return ListExpression.from_json(json, position, source);
308 case 'collection_literal_expression':
309 return CollectionLiteralExpression.from_json(json, position, source);
310 case 'object_creation_expression':
311 return ObjectCreationExpression.from_json(json, position, source);
312 case 'constructor_call':
313 return ConstructorCall.from_json(json, position, source);
314 case 'array_creation_expression':
315 return ArrayCreationExpression.from_json(json, position, source);
316 case 'array_intrinsic_expression':
317 return ArrayIntrinsicExpression.from_json(json, position, source);
318 case 'darray_intrinsic_expression':
319 return DarrayIntrinsicExpression.from_json(json, position, source);
320 case 'dictionary_intrinsic_expression':
321 return DictionaryIntrinsicExpression.from_json(json, position, source);
322 case 'keyset_intrinsic_expression':
323 return KeysetIntrinsicExpression.from_json(json, position, source);
324 case 'varray_intrinsic_expression':
325 return VarrayIntrinsicExpression.from_json(json, position, source);
326 case 'vector_intrinsic_expression':
327 return VectorIntrinsicExpression.from_json(json, position, source);
328 case 'element_initializer':
329 return ElementInitializer.from_json(json, position, source);
330 case 'subscript_expression':
331 return SubscriptExpression.from_json(json, position, source);
332 case 'embedded_subscript_expression':
333 return EmbeddedSubscriptExpression.from_json(json, position, source);
334 case 'awaitable_creation_expression':
335 return AwaitableCreationExpression.from_json(json, position, source);
336 case 'xhp_children_declaration':
337 return XHPChildrenDeclaration.from_json(json, position, source);
338 case 'xhp_children_parenthesized_list':
339 return XHPChildrenParenthesizedList.from_json(json, position, source);
340 case 'xhp_category_declaration':
341 return XHPCategoryDeclaration.from_json(json, position, source);
342 case 'xhp_enum_type':
343 return XHPEnumType.from_json(json, position, source);
345 return XHPRequired.from_json(json, position, source);
346 case 'xhp_class_attribute_declaration':
347 return XHPClassAttributeDeclaration.from_json(json, position, source);
348 case 'xhp_class_attribute':
349 return XHPClassAttribute.from_json(json, position, source);
350 case 'xhp_simple_class_attribute':
351 return XHPSimpleClassAttribute.from_json(json, position, source);
352 case 'xhp_simple_attribute':
353 return XHPSimpleAttribute.from_json(json, position, source);
354 case 'xhp_spread_attribute':
355 return XHPSpreadAttribute.from_json(json, position, source);
357 return XHPOpen.from_json(json, position, source);
358 case 'xhp_expression':
359 return XHPExpression.from_json(json, position, source);
361 return XHPClose.from_json(json, position, source);
362 case 'type_constant':
363 return TypeConstant.from_json(json, position, source);
364 case 'vector_type_specifier':
365 return VectorTypeSpecifier.from_json(json, position, source);
366 case 'keyset_type_specifier':
367 return KeysetTypeSpecifier.from_json(json, position, source);
368 case 'tuple_type_explicit_specifier':
369 return TupleTypeExplicitSpecifier.from_json(json, position, source);
370 case 'varray_type_specifier':
371 return VarrayTypeSpecifier.from_json(json, position, source);
372 case 'vector_array_type_specifier':
373 return VectorArrayTypeSpecifier.from_json(json, position, source);
374 case 'type_parameter':
375 return TypeParameter.from_json(json, position, source);
376 case 'type_constraint':
377 return TypeConstraint.from_json(json, position, source);
378 case 'darray_type_specifier':
379 return DarrayTypeSpecifier.from_json(json, position, source);
380 case 'map_array_type_specifier':
381 return MapArrayTypeSpecifier.from_json(json, position, source);
382 case 'dictionary_type_specifier':
383 return DictionaryTypeSpecifier.from_json(json, position, source);
384 case 'closure_type_specifier':
385 return ClosureTypeSpecifier.from_json(json, position, source);
386 case 'closure_parameter_type_specifier':
387 return ClosureParameterTypeSpecifier.from_json(json, position, source);
388 case 'classname_type_specifier':
389 return ClassnameTypeSpecifier.from_json(json, position, source);
390 case 'field_specifier':
391 return FieldSpecifier.from_json(json, position, source);
392 case 'field_initializer':
393 return FieldInitializer.from_json(json, position, source);
394 case 'shape_type_specifier':
395 return ShapeTypeSpecifier.from_json(json, position, source);
396 case 'shape_expression':
397 return ShapeExpression.from_json(json, position, source);
398 case 'tuple_expression':
399 return TupleExpression.from_json(json, position, source);
400 case 'generic_type_specifier':
401 return GenericTypeSpecifier.from_json(json, position, source);
402 case 'nullable_type_specifier':
403 return NullableTypeSpecifier.from_json(json, position, source);
404 case 'soft_type_specifier':
405 return SoftTypeSpecifier.from_json(json, position, source);
406 case 'type_arguments':
407 return TypeArguments.from_json(json, position, source);
408 case 'type_parameters':
409 return TypeParameters.from_json(json, position, source);
410 case 'tuple_type_specifier':
411 return TupleTypeSpecifier.from_json(json, position, source);
413 return ErrorSyntax.from_json(json, position, source);
415 return ListItem.from_json(json, position, source);
418 throw 'unexpected json kind: ' + json.kind; // TODO: Better exception
422 reduce(reducer, accumulator, parents)
424 if (parents == undefined)
426 let new_parents = parents.slice();
427 new_parents.push(this);
428 for(let key of this.children_keys)
430 accumulator = this.children[key].reduce(
431 reducer, accumulator, new_parents);
433 return reducer(this, accumulator, parents);
436 // Returns all the parents (and the node itself) of the first node
437 // that matches a predicate, or [] if there is no such node.
438 find(predicate, parents)
440 if (parents == undefined)
442 let new_parents = parents.slice();
443 new_parents.push(this);
446 for(let key of this.children_keys)
448 let result = this.children[key].find(predicate, new_parents);
449 if (result.length != 0)
455 // Returns a list of nodes that match a predicate.
458 let reducer = (node, acc, parents) => {
463 return this.reduce(reducer, []);
468 return this.filter((node) => node.syntax_kind == kind);
471 remove_where(predicate)
474 (node, parents) => predicate(node) ? Missing.missing : node);
479 return this.remove_where((node) => node === target);
482 replace(new_node, target)
484 return this.rewrite((node, parents) => node === target ? new_node : node);
487 pre_order(action, parents)
489 if (parents == undefined)
491 action(this, parents);
492 let new_parents = parents.slice();
493 new_parents.push(this);
494 for(let key of this.children_keys)
495 this.children[key].pre_order(action, new_parents);
503 for(let key of this.children_keys)
505 if (!this.children[key].is_missing)
506 return this.children[key].leftmost_token;
511 get rightmost_token()
516 for (let i = this.children_keys.length - 1; i >= 0; i--)
518 if (!this.children[this.children_keys[i]].is_missing)
519 return this.children[key].rightmost_token;
524 insert_before(new_node, target)
526 // Inserting before missing is an error.
527 if (target.is_missing)
528 throw 'Target must not be missing in insert_before.';
530 // Inserting missing is a no-op
531 if (new_node.is_missing)
534 if (new_node.is_trivia && !target.is_trivia)
536 let token = target.is_token ? target : target.leftmost_token;
538 throw 'Unable to find token to insert trivia.';
540 // Inserting trivia before token is inserting to the right end of
541 // the leading trivia.
542 let new_leading = EditableSyntax.concatenate_lists(
543 token.leading, new_node);
544 let new_token = token.with_leading(new_leading);
545 return this.replace(new_token, token);
549 EditableSyntax.concatenate_lists(new_node, target), target);
552 insert_after(new_node, target)
554 // Inserting after missing is an error.
555 if (target.is_missing)
556 throw 'Target must not be missing in insert_after.';
558 // Inserting missing is a no-op
559 if (new_node.is_missing)
562 if (new_node.is_trivia && !target.is_trivia)
564 let token = target.is_token ? target : target.rightmost_token;
566 throw 'Unable to find token to insert trivia.';
568 // Inserting trivia after token is inserting to the left end of
569 // the trailing trivia.
570 let new_trailing = EditableSyntax.concatenate_lists(
571 new_node, token.trailing);
572 let new_token = token.with_trailing(new_trailing);
573 return this.replace(new_token, token);
577 EditableSyntax.concatenate_lists(target, new_node), target);
580 static to_list(syntax_list)
582 if (syntax_list.length == 0)
583 return Missing.missing;
585 return new EditableList(syntax_list);
588 static concatenate_lists(left, right)
592 if (right.is_missing)
594 if (left.is_list && right.is_list)
595 return new EditableList(left.children.concat(right.children));
597 return new EditableList(left.children.splice().push(right));
599 return new EditableList([right].concat(left.children));
600 return new EditableList([left, right]);
604 class EditableList extends EditableSyntax
606 constructor(children)
608 super('list', children);
610 get is_list() { return true; }
612 static from_json(json, position, source)
615 let current_position = position;
616 for(let element of json.elements)
618 let child = EditableSyntax.from_json(element, current_position, source);
619 children.push(child);
620 current_position += child.width;
622 return new EditableList(children);
625 rewrite(rewriter, parents)
628 let new_children = [];
629 let new_parents = parents.slice();
630 new_parents.push(this);
631 for (let key of this.children_keys)
633 let child = this.children[key];
634 let new_child = child.rewrite(rewriter, new_parents);
635 if (new_child != child)
637 if (new_child != null)
639 if (new_child.is_list)
641 for(let n of new_child.children)
642 new_children.push(n);
645 new_children.push(new_child);
651 if (new_children.length === 0)
652 result = Missing.missing;
653 else if (new_children.length === 1)
654 result = new_children[0];
656 result = new EditableList(new_children);
658 return rewriter(result, parents);
662 return Object.keys(this.children);
666 class EditableToken extends EditableSyntax
668 constructor(token_kind, leading, trailing, text)
670 super('token', { leading : leading, trailing : trailing });
671 this._token_kind = token_kind;
675 get token_kind() { return this._token_kind; }
676 get text() { return this._text; }
677 get leading() { return this.children.leading; }
678 get trailing() { return this.children.trailing; }
681 return this.text.length + this.leading.width + this.trailing.width;
683 get is_token() { return true; }
686 return this.leading.full_text + this.text + this.trailing.full_text;
688 with_leading(leading)
690 return EditableToken.factory(
691 this.token_kind, leading, this.trailing, this.text);
693 with_trailing(trailing)
695 return EditableToken.factory(
696 this.token_kind, this.leading, trailing, this.text);
698 static factory(token_kind, leading, trailing, token_text)
703 return new EndOfFileToken(leading, trailing);
706 return new AbstractToken(leading, trailing);
708 return new AndToken(leading, trailing);
710 return new ArrayToken(leading, trailing);
712 return new ArraykeyToken(leading, trailing);
714 return new AsToken(leading, trailing);
716 return new AsyncToken(leading, trailing);
718 return new AttributeToken(leading, trailing);
720 return new AwaitToken(leading, trailing);
722 return new BackslashToken(leading, trailing);
724 return new BoolToken(leading, trailing);
726 return new BreakToken(leading, trailing);
728 return new CaseToken(leading, trailing);
730 return new CatchToken(leading, trailing);
732 return new CategoryToken(leading, trailing);
734 return new ChildrenToken(leading, trailing);
736 return new ClassToken(leading, trailing);
738 return new ClassnameToken(leading, trailing);
740 return new CloneToken(leading, trailing);
742 return new ConstToken(leading, trailing);
744 return new ConstructToken(leading, trailing);
746 return new ContinueToken(leading, trailing);
748 return new CoroutineToken(leading, trailing);
750 return new DarrayToken(leading, trailing);
752 return new DeclareToken(leading, trailing);
754 return new DefaultToken(leading, trailing);
756 return new DefineToken(leading, trailing);
758 return new DestructToken(leading, trailing);
760 return new DictToken(leading, trailing);
762 return new DoToken(leading, trailing);
764 return new DoubleToken(leading, trailing);
766 return new EchoToken(leading, trailing);
768 return new ElseToken(leading, trailing);
770 return new ElseifToken(leading, trailing);
772 return new EmptyToken(leading, trailing);
774 return new EndforToken(leading, trailing);
776 return new EndforeachToken(leading, trailing);
778 return new EnddeclareToken(leading, trailing);
780 return new EndifToken(leading, trailing);
782 return new EndswitchToken(leading, trailing);
784 return new EndwhileToken(leading, trailing);
786 return new EnumToken(leading, trailing);
788 return new EvalToken(leading, trailing);
790 return new ExtendsToken(leading, trailing);
792 return new FallthroughToken(leading, trailing);
794 return new FloatToken(leading, trailing);
796 return new FinalToken(leading, trailing);
798 return new FinallyToken(leading, trailing);
800 return new ForToken(leading, trailing);
802 return new ForeachToken(leading, trailing);
804 return new FromToken(leading, trailing);
806 return new FunctionToken(leading, trailing);
808 return new GlobalToken(leading, trailing);
810 return new GotoToken(leading, trailing);
812 return new IfToken(leading, trailing);
814 return new ImplementsToken(leading, trailing);
816 return new IncludeToken(leading, trailing);
818 return new Include_onceToken(leading, trailing);
820 return new InoutToken(leading, trailing);
822 return new InstanceofToken(leading, trailing);
824 return new InsteadofToken(leading, trailing);
826 return new IntToken(leading, trailing);
828 return new InterfaceToken(leading, trailing);
830 return new IsToken(leading, trailing);
832 return new IssetToken(leading, trailing);
834 return new KeysetToken(leading, trailing);
836 return new ListToken(leading, trailing);
838 return new MixedToken(leading, trailing);
840 return new NamespaceToken(leading, trailing);
842 return new NewToken(leading, trailing);
844 return new NewtypeToken(leading, trailing);
846 return new NoreturnToken(leading, trailing);
848 return new NumToken(leading, trailing);
850 return new ObjectToken(leading, trailing);
852 return new OrToken(leading, trailing);
854 return new ParentToken(leading, trailing);
856 return new PrintToken(leading, trailing);
858 return new PrivateToken(leading, trailing);
860 return new ProtectedToken(leading, trailing);
862 return new PublicToken(leading, trailing);
864 return new RequireToken(leading, trailing);
866 return new Require_onceToken(leading, trailing);
868 return new RequiredToken(leading, trailing);
870 return new ResourceToken(leading, trailing);
872 return new ReturnToken(leading, trailing);
874 return new SelfToken(leading, trailing);
876 return new ShapeToken(leading, trailing);
878 return new StaticToken(leading, trailing);
880 return new StringToken(leading, trailing);
882 return new SuperToken(leading, trailing);
884 return new SuspendToken(leading, trailing);
886 return new SwitchToken(leading, trailing);
888 return new ThisToken(leading, trailing);
890 return new ThrowToken(leading, trailing);
892 return new TraitToken(leading, trailing);
894 return new TryToken(leading, trailing);
896 return new TupleToken(leading, trailing);
898 return new TypeToken(leading, trailing);
900 return new UnsetToken(leading, trailing);
902 return new UseToken(leading, trailing);
904 return new UsingToken(leading, trailing);
906 return new VarToken(leading, trailing);
908 return new VarrayToken(leading, trailing);
910 return new VecToken(leading, trailing);
912 return new VoidToken(leading, trailing);
914 return new WhereToken(leading, trailing);
916 return new WhileToken(leading, trailing);
918 return new XorToken(leading, trailing);
920 return new YieldToken(leading, trailing);
922 return new LeftBracketToken(leading, trailing);
924 return new RightBracketToken(leading, trailing);
926 return new LeftParenToken(leading, trailing);
928 return new RightParenToken(leading, trailing);
930 return new LeftBraceToken(leading, trailing);
932 return new RightBraceToken(leading, trailing);
934 return new DotToken(leading, trailing);
936 return new MinusGreaterThanToken(leading, trailing);
938 return new PlusPlusToken(leading, trailing);
940 return new MinusMinusToken(leading, trailing);
942 return new StarStarToken(leading, trailing);
944 return new StarToken(leading, trailing);
946 return new PlusToken(leading, trailing);
948 return new MinusToken(leading, trailing);
950 return new TildeToken(leading, trailing);
952 return new ExclamationToken(leading, trailing);
954 return new DollarToken(leading, trailing);
956 return new SlashToken(leading, trailing);
958 return new PercentToken(leading, trailing);
960 return new LessThanGreaterThanToken(leading, trailing);
962 return new LessThanEqualGreaterThanToken(leading, trailing);
964 return new LessThanLessThanToken(leading, trailing);
966 return new GreaterThanGreaterThanToken(leading, trailing);
968 return new LessThanToken(leading, trailing);
970 return new GreaterThanToken(leading, trailing);
972 return new LessThanEqualToken(leading, trailing);
974 return new GreaterThanEqualToken(leading, trailing);
976 return new EqualEqualToken(leading, trailing);
978 return new EqualEqualEqualToken(leading, trailing);
980 return new ExclamationEqualToken(leading, trailing);
982 return new ExclamationEqualEqualToken(leading, trailing);
984 return new CaratToken(leading, trailing);
986 return new BarToken(leading, trailing);
988 return new AmpersandToken(leading, trailing);
990 return new AmpersandAmpersandToken(leading, trailing);
992 return new BarBarToken(leading, trailing);
994 return new QuestionToken(leading, trailing);
996 return new QuestionColonToken(leading, trailing);
998 return new QuestionQuestionToken(leading, trailing);
1000 return new ColonToken(leading, trailing);
1002 return new SemicolonToken(leading, trailing);
1004 return new EqualToken(leading, trailing);
1006 return new StarStarEqualToken(leading, trailing);
1008 return new StarEqualToken(leading, trailing);
1010 return new SlashEqualToken(leading, trailing);
1012 return new PercentEqualToken(leading, trailing);
1014 return new PlusEqualToken(leading, trailing);
1016 return new MinusEqualToken(leading, trailing);
1018 return new DotEqualToken(leading, trailing);
1020 return new LessThanLessThanEqualToken(leading, trailing);
1022 return new GreaterThanGreaterThanEqualToken(leading, trailing);
1024 return new AmpersandEqualToken(leading, trailing);
1026 return new CaratEqualToken(leading, trailing);
1028 return new BarEqualToken(leading, trailing);
1030 return new CommaToken(leading, trailing);
1032 return new AtToken(leading, trailing);
1034 return new ColonColonToken(leading, trailing);
1036 return new EqualGreaterThanToken(leading, trailing);
1038 return new EqualEqualGreaterThanToken(leading, trailing);
1040 return new QuestionMinusGreaterThanToken(leading, trailing);
1042 return new DotDotDotToken(leading, trailing);
1044 return new DollarDollarToken(leading, trailing);
1046 return new BarGreaterThanToken(leading, trailing);
1048 return new NullLiteralToken(leading, trailing);
1050 return new SlashGreaterThanToken(leading, trailing);
1052 return new LessThanSlashToken(leading, trailing);
1054 return new LessThanQuestionToken(leading, trailing);
1056 return new QuestionGreaterThanToken(leading, trailing);
1057 case '__halt_compiler':
1058 return new HaltCompilerToken(leading, trailing);
1061 return new ErrorTokenToken(leading, trailing, token_text);
1063 return new NameToken(leading, trailing, token_text);
1065 return new VariableToken(leading, trailing, token_text);
1066 case 'decimal_literal':
1067 return new DecimalLiteralToken(leading, trailing, token_text);
1068 case 'octal_literal':
1069 return new OctalLiteralToken(leading, trailing, token_text);
1070 case 'hexadecimal_literal':
1071 return new HexadecimalLiteralToken(leading, trailing, token_text);
1072 case 'binary_literal':
1073 return new BinaryLiteralToken(leading, trailing, token_text);
1074 case 'floating_literal':
1075 return new FloatingLiteralToken(leading, trailing, token_text);
1076 case 'execution_string_literal':
1077 return new ExecutionStringLiteralToken(leading, trailing, token_text);
1078 case 'execution_string_literal_head':
1079 return new ExecutionStringLiteralHeadToken(leading, trailing, token_text);
1080 case 'execution_string_literal_tail':
1081 return new ExecutionStringLiteralTailToken(leading, trailing, token_text);
1082 case 'single_quoted_string_literal':
1083 return new SingleQuotedStringLiteralToken(leading, trailing, token_text);
1084 case 'double_quoted_string_literal':
1085 return new DoubleQuotedStringLiteralToken(leading, trailing, token_text);
1086 case 'double_quoted_string_literal_head':
1087 return new DoubleQuotedStringLiteralHeadToken(leading, trailing, token_text);
1088 case 'string_literal_body':
1089 return new StringLiteralBodyToken(leading, trailing, token_text);
1090 case 'double_quoted_string_literal_tail':
1091 return new DoubleQuotedStringLiteralTailToken(leading, trailing, token_text);
1092 case 'heredoc_string_literal':
1093 return new HeredocStringLiteralToken(leading, trailing, token_text);
1094 case 'heredoc_string_literal_head':
1095 return new HeredocStringLiteralHeadToken(leading, trailing, token_text);
1096 case 'heredoc_string_literal_tail':
1097 return new HeredocStringLiteralTailToken(leading, trailing, token_text);
1098 case 'nowdoc_string_literal':
1099 return new NowdocStringLiteralToken(leading, trailing, token_text);
1100 case 'boolean_literal':
1101 return new BooleanLiteralToken(leading, trailing, token_text);
1102 case 'XHP_category_name':
1103 return new XHPCategoryNameToken(leading, trailing, token_text);
1104 case 'XHP_element_name':
1105 return new XHPElementNameToken(leading, trailing, token_text);
1106 case 'XHP_class_name':
1107 return new XHPClassNameToken(leading, trailing, token_text);
1108 case 'XHP_string_literal':
1109 return new XHPStringLiteralToken(leading, trailing, token_text);
1111 return new XHPBodyToken(leading, trailing, token_text);
1113 return new XHPCommentToken(leading, trailing, token_text);
1115 return new MarkupToken(leading, trailing, token_text);
1117 default: throw 'unexpected token kind; ' + token_kind;
1118 // TODO: Better error
1122 rewrite(rewriter, parents)
1124 let new_parents = parents.slice();
1125 new_parents.push(this);
1126 let leading = this.leading.rewrite(rewriter, new_parents);
1127 let trailing = this.trailing.rewrite(rewriter, new_parents);
1128 if (leading === this.leading && trailing === this.trailing)
1129 return rewriter(this, parents);
1131 return rewriter(EditableToken.factory(
1132 this.token_kind, leading, trailing, this.text), parents);
1135 reduce(reducer, accumulator)
1137 accumulator = this.leading.reduce(reducer, accumulator);
1138 accumulator = reducer(this, accumulator);
1139 accumulator = this.trailing.reduce(reducer, accumulator);
1143 static from_json(json, position, source)
1145 let leading_list = array_map_reduce(
1147 (json, position) => EditableSyntax.from_json(json, position, source),
1148 (json, position) => json.width + position,
1150 let leading = EditableSyntax.to_list(leading_list);
1151 let token_position = position + leading.width;
1152 let token_text = source.substring(
1153 token_position, token_position + json.width);
1154 let trailing_position = token_position + json.width;
1155 let trailing_list = array_map_reduce(
1157 (json, position) => EditableSyntax.from_json(json, position, source),
1158 (json, position) => json.width + position,
1160 let trailing = EditableSyntax.to_list(trailing_list);
1161 return EditableToken.factory(json.kind, leading, trailing, token_text);
1166 if (EditableToken._children_keys == null)
1167 EditableToken._children_keys = ['leading', 'trailing'];
1168 return EditableToken._children_keys;
1172 class EndOfFileToken extends EditableToken
1174 constructor(leading, trailing)
1176 super('end_of_file', leading, trailing, '');
1180 class AbstractToken extends EditableToken
1182 constructor(leading, trailing)
1184 super('abstract', leading, trailing, 'abstract');
1187 class AndToken extends EditableToken
1189 constructor(leading, trailing)
1191 super('and', leading, trailing, 'and');
1194 class ArrayToken extends EditableToken
1196 constructor(leading, trailing)
1198 super('array', leading, trailing, 'array');
1201 class ArraykeyToken extends EditableToken
1203 constructor(leading, trailing)
1205 super('arraykey', leading, trailing, 'arraykey');
1208 class AsToken extends EditableToken
1210 constructor(leading, trailing)
1212 super('as', leading, trailing, 'as');
1215 class AsyncToken extends EditableToken
1217 constructor(leading, trailing)
1219 super('async', leading, trailing, 'async');
1222 class AttributeToken extends EditableToken
1224 constructor(leading, trailing)
1226 super('attribute', leading, trailing, 'attribute');
1229 class AwaitToken extends EditableToken
1231 constructor(leading, trailing)
1233 super('await', leading, trailing, 'await');
1236 class BackslashToken extends EditableToken
1238 constructor(leading, trailing)
1240 super('\', leading, trailing, '\');
1243 class BoolToken extends EditableToken
1245 constructor(leading, trailing)
1247 super('bool', leading, trailing, 'bool');
1250 class BreakToken extends EditableToken
1252 constructor(leading, trailing)
1254 super('break', leading, trailing, 'break');
1257 class CaseToken extends EditableToken
1259 constructor(leading, trailing)
1261 super('case', leading, trailing, 'case');
1264 class CatchToken extends EditableToken
1266 constructor(leading, trailing)
1268 super('catch', leading, trailing, 'catch');
1271 class CategoryToken extends EditableToken
1273 constructor(leading, trailing)
1275 super('category', leading, trailing, 'category');
1278 class ChildrenToken extends EditableToken
1280 constructor(leading, trailing)
1282 super('children', leading, trailing, 'children');
1285 class ClassToken extends EditableToken
1287 constructor(leading, trailing)
1289 super('class', leading, trailing, 'class');
1292 class ClassnameToken extends EditableToken
1294 constructor(leading, trailing)
1296 super('classname', leading, trailing, 'classname');
1299 class CloneToken extends EditableToken
1301 constructor(leading, trailing)
1303 super('clone', leading, trailing, 'clone');
1306 class ConstToken extends EditableToken
1308 constructor(leading, trailing)
1310 super('const', leading, trailing, 'const');
1313 class ConstructToken extends EditableToken
1315 constructor(leading, trailing)
1317 super('__construct', leading, trailing, '__construct');
1320 class ContinueToken extends EditableToken
1322 constructor(leading, trailing)
1324 super('continue', leading, trailing, 'continue');
1327 class CoroutineToken extends EditableToken
1329 constructor(leading, trailing)
1331 super('coroutine', leading, trailing, 'coroutine');
1334 class DarrayToken extends EditableToken
1336 constructor(leading, trailing)
1338 super('darray', leading, trailing, 'darray');
1341 class DeclareToken extends EditableToken
1343 constructor(leading, trailing)
1345 super('declare', leading, trailing, 'declare');
1348 class DefaultToken extends EditableToken
1350 constructor(leading, trailing)
1352 super('default', leading, trailing, 'default');
1355 class DefineToken extends EditableToken
1357 constructor(leading, trailing)
1359 super('define', leading, trailing, 'define');
1362 class DestructToken extends EditableToken
1364 constructor(leading, trailing)
1366 super('__destruct', leading, trailing, '__destruct');
1369 class DictToken extends EditableToken
1371 constructor(leading, trailing)
1373 super('dict', leading, trailing, 'dict');
1376 class DoToken extends EditableToken
1378 constructor(leading, trailing)
1380 super('do', leading, trailing, 'do');
1383 class DoubleToken extends EditableToken
1385 constructor(leading, trailing)
1387 super('double', leading, trailing, 'double');
1390 class EchoToken extends EditableToken
1392 constructor(leading, trailing)
1394 super('echo', leading, trailing, 'echo');
1397 class ElseToken extends EditableToken
1399 constructor(leading, trailing)
1401 super('else', leading, trailing, 'else');
1404 class ElseifToken extends EditableToken
1406 constructor(leading, trailing)
1408 super('elseif', leading, trailing, 'elseif');
1411 class EmptyToken extends EditableToken
1413 constructor(leading, trailing)
1415 super('empty', leading, trailing, 'empty');
1418 class EndforToken extends EditableToken
1420 constructor(leading, trailing)
1422 super('endfor', leading, trailing, 'endfor');
1425 class EndforeachToken extends EditableToken
1427 constructor(leading, trailing)
1429 super('endforeach', leading, trailing, 'endforeach');
1432 class EnddeclareToken extends EditableToken
1434 constructor(leading, trailing)
1436 super('enddeclare', leading, trailing, 'enddeclare');
1439 class EndifToken extends EditableToken
1441 constructor(leading, trailing)
1443 super('endif', leading, trailing, 'endif');
1446 class EndswitchToken extends EditableToken
1448 constructor(leading, trailing)
1450 super('endswitch', leading, trailing, 'endswitch');
1453 class EndwhileToken extends EditableToken
1455 constructor(leading, trailing)
1457 super('endwhile', leading, trailing, 'endwhile');
1460 class EnumToken extends EditableToken
1462 constructor(leading, trailing)
1464 super('enum', leading, trailing, 'enum');
1467 class EvalToken extends EditableToken
1469 constructor(leading, trailing)
1471 super('eval', leading, trailing, 'eval');
1474 class ExtendsToken extends EditableToken
1476 constructor(leading, trailing)
1478 super('extends', leading, trailing, 'extends');
1481 class FallthroughToken extends EditableToken
1483 constructor(leading, trailing)
1485 super('fallthrough', leading, trailing, 'fallthrough');
1488 class FloatToken extends EditableToken
1490 constructor(leading, trailing)
1492 super('float', leading, trailing, 'float');
1495 class FinalToken extends EditableToken
1497 constructor(leading, trailing)
1499 super('final', leading, trailing, 'final');
1502 class FinallyToken extends EditableToken
1504 constructor(leading, trailing)
1506 super('finally', leading, trailing, 'finally');
1509 class ForToken extends EditableToken
1511 constructor(leading, trailing)
1513 super('for', leading, trailing, 'for');
1516 class ForeachToken extends EditableToken
1518 constructor(leading, trailing)
1520 super('foreach', leading, trailing, 'foreach');
1523 class FromToken extends EditableToken
1525 constructor(leading, trailing)
1527 super('from', leading, trailing, 'from');
1530 class FunctionToken extends EditableToken
1532 constructor(leading, trailing)
1534 super('function', leading, trailing, 'function');
1537 class GlobalToken extends EditableToken
1539 constructor(leading, trailing)
1541 super('global', leading, trailing, 'global');
1544 class GotoToken extends EditableToken
1546 constructor(leading, trailing)
1548 super('goto', leading, trailing, 'goto');
1551 class IfToken extends EditableToken
1553 constructor(leading, trailing)
1555 super('if', leading, trailing, 'if');
1558 class ImplementsToken extends EditableToken
1560 constructor(leading, trailing)
1562 super('implements', leading, trailing, 'implements');
1565 class IncludeToken extends EditableToken
1567 constructor(leading, trailing)
1569 super('include', leading, trailing, 'include');
1572 class Include_onceToken extends EditableToken
1574 constructor(leading, trailing)
1576 super('include_once', leading, trailing, 'include_once');
1579 class InoutToken extends EditableToken
1581 constructor(leading, trailing)
1583 super('inout', leading, trailing, 'inout');
1586 class InstanceofToken extends EditableToken
1588 constructor(leading, trailing)
1590 super('instanceof', leading, trailing, 'instanceof');
1593 class InsteadofToken extends EditableToken
1595 constructor(leading, trailing)
1597 super('insteadof', leading, trailing, 'insteadof');
1600 class IntToken extends EditableToken
1602 constructor(leading, trailing)
1604 super('int', leading, trailing, 'int');
1607 class InterfaceToken extends EditableToken
1609 constructor(leading, trailing)
1611 super('interface', leading, trailing, 'interface');
1614 class IsToken extends EditableToken
1616 constructor(leading, trailing)
1618 super('is', leading, trailing, 'is');
1621 class IssetToken extends EditableToken
1623 constructor(leading, trailing)
1625 super('isset', leading, trailing, 'isset');
1628 class KeysetToken extends EditableToken
1630 constructor(leading, trailing)
1632 super('keyset', leading, trailing, 'keyset');
1635 class ListToken extends EditableToken
1637 constructor(leading, trailing)
1639 super('list', leading, trailing, 'list');
1642 class MixedToken extends EditableToken
1644 constructor(leading, trailing)
1646 super('mixed', leading, trailing, 'mixed');
1649 class NamespaceToken extends EditableToken
1651 constructor(leading, trailing)
1653 super('namespace', leading, trailing, 'namespace');
1656 class NewToken extends EditableToken
1658 constructor(leading, trailing)
1660 super('new', leading, trailing, 'new');
1663 class NewtypeToken extends EditableToken
1665 constructor(leading, trailing)
1667 super('newtype', leading, trailing, 'newtype');
1670 class NoreturnToken extends EditableToken
1672 constructor(leading, trailing)
1674 super('noreturn', leading, trailing, 'noreturn');
1677 class NumToken extends EditableToken
1679 constructor(leading, trailing)
1681 super('num', leading, trailing, 'num');
1684 class ObjectToken extends EditableToken
1686 constructor(leading, trailing)
1688 super('object', leading, trailing, 'object');
1691 class OrToken extends EditableToken
1693 constructor(leading, trailing)
1695 super('or', leading, trailing, 'or');
1698 class ParentToken extends EditableToken
1700 constructor(leading, trailing)
1702 super('parent', leading, trailing, 'parent');
1705 class PrintToken extends EditableToken
1707 constructor(leading, trailing)
1709 super('print', leading, trailing, 'print');
1712 class PrivateToken extends EditableToken
1714 constructor(leading, trailing)
1716 super('private', leading, trailing, 'private');
1719 class ProtectedToken extends EditableToken
1721 constructor(leading, trailing)
1723 super('protected', leading, trailing, 'protected');
1726 class PublicToken extends EditableToken
1728 constructor(leading, trailing)
1730 super('public', leading, trailing, 'public');
1733 class RequireToken extends EditableToken
1735 constructor(leading, trailing)
1737 super('require', leading, trailing, 'require');
1740 class Require_onceToken extends EditableToken
1742 constructor(leading, trailing)
1744 super('require_once', leading, trailing, 'require_once');
1747 class RequiredToken extends EditableToken
1749 constructor(leading, trailing)
1751 super('required', leading, trailing, 'required');
1754 class ResourceToken extends EditableToken
1756 constructor(leading, trailing)
1758 super('resource', leading, trailing, 'resource');
1761 class ReturnToken extends EditableToken
1763 constructor(leading, trailing)
1765 super('return', leading, trailing, 'return');
1768 class SelfToken extends EditableToken
1770 constructor(leading, trailing)
1772 super('self', leading, trailing, 'self');
1775 class ShapeToken extends EditableToken
1777 constructor(leading, trailing)
1779 super('shape', leading, trailing, 'shape');
1782 class StaticToken extends EditableToken
1784 constructor(leading, trailing)
1786 super('static', leading, trailing, 'static');
1789 class StringToken extends EditableToken
1791 constructor(leading, trailing)
1793 super('string', leading, trailing, 'string');
1796 class SuperToken extends EditableToken
1798 constructor(leading, trailing)
1800 super('super', leading, trailing, 'super');
1803 class SuspendToken extends EditableToken
1805 constructor(leading, trailing)
1807 super('suspend', leading, trailing, 'suspend');
1810 class SwitchToken extends EditableToken
1812 constructor(leading, trailing)
1814 super('switch', leading, trailing, 'switch');
1817 class ThisToken extends EditableToken
1819 constructor(leading, trailing)
1821 super('this', leading, trailing, 'this');
1824 class ThrowToken extends EditableToken
1826 constructor(leading, trailing)
1828 super('throw', leading, trailing, 'throw');
1831 class TraitToken extends EditableToken
1833 constructor(leading, trailing)
1835 super('trait', leading, trailing, 'trait');
1838 class TryToken extends EditableToken
1840 constructor(leading, trailing)
1842 super('try', leading, trailing, 'try');
1845 class TupleToken extends EditableToken
1847 constructor(leading, trailing)
1849 super('tuple', leading, trailing, 'tuple');
1852 class TypeToken extends EditableToken
1854 constructor(leading, trailing)
1856 super('type', leading, trailing, 'type');
1859 class UnsetToken extends EditableToken
1861 constructor(leading, trailing)
1863 super('unset', leading, trailing, 'unset');
1866 class UseToken extends EditableToken
1868 constructor(leading, trailing)
1870 super('use', leading, trailing, 'use');
1873 class UsingToken extends EditableToken
1875 constructor(leading, trailing)
1877 super('using', leading, trailing, 'using');
1880 class VarToken extends EditableToken
1882 constructor(leading, trailing)
1884 super('var', leading, trailing, 'var');
1887 class VarrayToken extends EditableToken
1889 constructor(leading, trailing)
1891 super('varray', leading, trailing, 'varray');
1894 class VecToken extends EditableToken
1896 constructor(leading, trailing)
1898 super('vec', leading, trailing, 'vec');
1901 class VoidToken extends EditableToken
1903 constructor(leading, trailing)
1905 super('void', leading, trailing, 'void');
1908 class WhereToken extends EditableToken
1910 constructor(leading, trailing)
1912 super('where', leading, trailing, 'where');
1915 class WhileToken extends EditableToken
1917 constructor(leading, trailing)
1919 super('while', leading, trailing, 'while');
1922 class XorToken extends EditableToken
1924 constructor(leading, trailing)
1926 super('xor', leading, trailing, 'xor');
1929 class YieldToken extends EditableToken
1931 constructor(leading, trailing)
1933 super('yield', leading, trailing, 'yield');
1936 class LeftBracketToken extends EditableToken
1938 constructor(leading, trailing)
1940 super('[', leading, trailing, '[');
1943 class RightBracketToken extends EditableToken
1945 constructor(leading, trailing)
1947 super(']', leading, trailing, ']');
1950 class LeftParenToken extends EditableToken
1952 constructor(leading, trailing)
1954 super('(', leading, trailing, '(');
1957 class RightParenToken extends EditableToken
1959 constructor(leading, trailing)
1961 super(')', leading, trailing, ')');
1964 class LeftBraceToken extends EditableToken
1966 constructor(leading, trailing)
1968 super('{', leading, trailing, '{');
1971 class RightBraceToken extends EditableToken
1973 constructor(leading, trailing)
1975 super('}', leading, trailing, '}');
1978 class DotToken extends EditableToken
1980 constructor(leading, trailing)
1982 super('.', leading, trailing, '.');
1985 class MinusGreaterThanToken extends EditableToken
1987 constructor(leading, trailing)
1989 super('->', leading, trailing, '->');
1992 class PlusPlusToken extends EditableToken
1994 constructor(leading, trailing)
1996 super('++', leading, trailing, '++');
1999 class MinusMinusToken extends EditableToken
2001 constructor(leading, trailing)
2003 super('--', leading, trailing, '--');
2006 class StarStarToken extends EditableToken
2008 constructor(leading, trailing)
2010 super('**', leading, trailing, '**');
2013 class StarToken extends EditableToken
2015 constructor(leading, trailing)
2017 super('*', leading, trailing, '*');
2020 class PlusToken extends EditableToken
2022 constructor(leading, trailing)
2024 super('+', leading, trailing, '+');
2027 class MinusToken extends EditableToken
2029 constructor(leading, trailing)
2031 super('-', leading, trailing, '-');
2034 class TildeToken extends EditableToken
2036 constructor(leading, trailing)
2038 super('~', leading, trailing, '~');
2041 class ExclamationToken extends EditableToken
2043 constructor(leading, trailing)
2045 super('!', leading, trailing, '!');
2048 class DollarToken extends EditableToken
2050 constructor(leading, trailing)
2052 super('$', leading, trailing, '$');
2055 class SlashToken extends EditableToken
2057 constructor(leading, trailing)
2059 super('/', leading, trailing, '/');
2062 class PercentToken extends EditableToken
2064 constructor(leading, trailing)
2066 super('%', leading, trailing, '%');
2069 class LessThanGreaterThanToken extends EditableToken
2071 constructor(leading, trailing)
2073 super('<>', leading, trailing, '<>');
2076 class LessThanEqualGreaterThanToken extends EditableToken
2078 constructor(leading, trailing)
2080 super('<=>', leading, trailing, '<=>');
2083 class LessThanLessThanToken extends EditableToken
2085 constructor(leading, trailing)
2087 super('<<', leading, trailing, '<<');
2090 class GreaterThanGreaterThanToken extends EditableToken
2092 constructor(leading, trailing)
2094 super('>>', leading, trailing, '>>');
2097 class LessThanToken extends EditableToken
2099 constructor(leading, trailing)
2101 super('<', leading, trailing, '<');
2104 class GreaterThanToken extends EditableToken
2106 constructor(leading, trailing)
2108 super('>', leading, trailing, '>');
2111 class LessThanEqualToken extends EditableToken
2113 constructor(leading, trailing)
2115 super('<=', leading, trailing, '<=');
2118 class GreaterThanEqualToken extends EditableToken
2120 constructor(leading, trailing)
2122 super('>=', leading, trailing, '>=');
2125 class EqualEqualToken extends EditableToken
2127 constructor(leading, trailing)
2129 super('==', leading, trailing, '==');
2132 class EqualEqualEqualToken extends EditableToken
2134 constructor(leading, trailing)
2136 super('===', leading, trailing, '===');
2139 class ExclamationEqualToken extends EditableToken
2141 constructor(leading, trailing)
2143 super('!=', leading, trailing, '!=');
2146 class ExclamationEqualEqualToken extends EditableToken
2148 constructor(leading, trailing)
2150 super('!==', leading, trailing, '!==');
2153 class CaratToken extends EditableToken
2155 constructor(leading, trailing)
2157 super('^', leading, trailing, '^');
2160 class BarToken extends EditableToken
2162 constructor(leading, trailing)
2164 super('|', leading, trailing, '|');
2167 class AmpersandToken extends EditableToken
2169 constructor(leading, trailing)
2171 super('&', leading, trailing, '&');
2174 class AmpersandAmpersandToken extends EditableToken
2176 constructor(leading, trailing)
2178 super('&&', leading, trailing, '&&');
2181 class BarBarToken extends EditableToken
2183 constructor(leading, trailing)
2185 super('||', leading, trailing, '||');
2188 class QuestionToken extends EditableToken
2190 constructor(leading, trailing)
2192 super('?', leading, trailing, '?');
2195 class QuestionColonToken extends EditableToken
2197 constructor(leading, trailing)
2199 super('?:', leading, trailing, '?:');
2202 class QuestionQuestionToken extends EditableToken
2204 constructor(leading, trailing)
2206 super('??', leading, trailing, '??');
2209 class ColonToken extends EditableToken
2211 constructor(leading, trailing)
2213 super(':', leading, trailing, ':');
2216 class SemicolonToken extends EditableToken
2218 constructor(leading, trailing)
2220 super(';', leading, trailing, ';');
2223 class EqualToken extends EditableToken
2225 constructor(leading, trailing)
2227 super('=', leading, trailing, '=');
2230 class StarStarEqualToken extends EditableToken
2232 constructor(leading, trailing)
2234 super('**=', leading, trailing, '**=');
2237 class StarEqualToken extends EditableToken
2239 constructor(leading, trailing)
2241 super('*=', leading, trailing, '*=');
2244 class SlashEqualToken extends EditableToken
2246 constructor(leading, trailing)
2248 super('/=', leading, trailing, '/=');
2251 class PercentEqualToken extends EditableToken
2253 constructor(leading, trailing)
2255 super('%=', leading, trailing, '%=');
2258 class PlusEqualToken extends EditableToken
2260 constructor(leading, trailing)
2262 super('+=', leading, trailing, '+=');
2265 class MinusEqualToken extends EditableToken
2267 constructor(leading, trailing)
2269 super('-=', leading, trailing, '-=');
2272 class DotEqualToken extends EditableToken
2274 constructor(leading, trailing)
2276 super('.=', leading, trailing, '.=');
2279 class LessThanLessThanEqualToken extends EditableToken
2281 constructor(leading, trailing)
2283 super('<<=', leading, trailing, '<<=');
2286 class GreaterThanGreaterThanEqualToken extends EditableToken
2288 constructor(leading, trailing)
2290 super('>>=', leading, trailing, '>>=');
2293 class AmpersandEqualToken extends EditableToken
2295 constructor(leading, trailing)
2297 super('&=', leading, trailing, '&=');
2300 class CaratEqualToken extends EditableToken
2302 constructor(leading, trailing)
2304 super('^=', leading, trailing, '^=');
2307 class BarEqualToken extends EditableToken
2309 constructor(leading, trailing)
2311 super('|=', leading, trailing, '|=');
2314 class CommaToken extends EditableToken
2316 constructor(leading, trailing)
2318 super(',', leading, trailing, ',');
2321 class AtToken extends EditableToken
2323 constructor(leading, trailing)
2325 super('@', leading, trailing, '@');
2328 class ColonColonToken extends EditableToken
2330 constructor(leading, trailing)
2332 super('::', leading, trailing, '::');
2335 class EqualGreaterThanToken extends EditableToken
2337 constructor(leading, trailing)
2339 super('=>', leading, trailing, '=>');
2342 class EqualEqualGreaterThanToken extends EditableToken
2344 constructor(leading, trailing)
2346 super('==>', leading, trailing, '==>');
2349 class QuestionMinusGreaterThanToken extends EditableToken
2351 constructor(leading, trailing)
2353 super('?->', leading, trailing, '?->');
2356 class DotDotDotToken extends EditableToken
2358 constructor(leading, trailing)
2360 super('...', leading, trailing, '...');
2363 class DollarDollarToken extends EditableToken
2365 constructor(leading, trailing)
2367 super('$$', leading, trailing, '$$');
2370 class BarGreaterThanToken extends EditableToken
2372 constructor(leading, trailing)
2374 super('|>', leading, trailing, '|>');
2377 class NullLiteralToken extends EditableToken
2379 constructor(leading, trailing)
2381 super('null', leading, trailing, 'null');
2384 class SlashGreaterThanToken extends EditableToken
2386 constructor(leading, trailing)
2388 super('/>', leading, trailing, '/>');
2391 class LessThanSlashToken extends EditableToken
2393 constructor(leading, trailing)
2395 super('</', leading, trailing, '</');
2398 class LessThanQuestionToken extends EditableToken
2400 constructor(leading, trailing)
2402 super('<?', leading, trailing, '<?');
2405 class QuestionGreaterThanToken extends EditableToken
2407 constructor(leading, trailing)
2409 super('?>', leading, trailing, '?>');
2412 class HaltCompilerToken extends EditableToken
2414 constructor(leading, trailing)
2416 super('__halt_compiler', leading, trailing, '__halt_compiler');
2420 class ErrorTokenToken extends EditableToken
2422 constructor(leading, trailing, text)
2424 super('error_token', leading, trailing, text);
2428 return new ErrorTokenToken(this.leading, this.trailing, text);
2432 class NameToken extends EditableToken
2434 constructor(leading, trailing, text)
2436 super('name', leading, trailing, text);
2440 return new NameToken(this.leading, this.trailing, text);
2444 class VariableToken extends EditableToken
2446 constructor(leading, trailing, text)
2448 super('variable', leading, trailing, text);
2452 return new VariableToken(this.leading, this.trailing, text);
2456 class DecimalLiteralToken extends EditableToken
2458 constructor(leading, trailing, text)
2460 super('decimal_literal', leading, trailing, text);
2464 return new DecimalLiteralToken(this.leading, this.trailing, text);
2468 class OctalLiteralToken extends EditableToken
2470 constructor(leading, trailing, text)
2472 super('octal_literal', leading, trailing, text);
2476 return new OctalLiteralToken(this.leading, this.trailing, text);
2480 class HexadecimalLiteralToken extends EditableToken
2482 constructor(leading, trailing, text)
2484 super('hexadecimal_literal', leading, trailing, text);
2488 return new HexadecimalLiteralToken(this.leading, this.trailing, text);
2492 class BinaryLiteralToken extends EditableToken
2494 constructor(leading, trailing, text)
2496 super('binary_literal', leading, trailing, text);
2500 return new BinaryLiteralToken(this.leading, this.trailing, text);
2504 class FloatingLiteralToken extends EditableToken
2506 constructor(leading, trailing, text)
2508 super('floating_literal', leading, trailing, text);
2512 return new FloatingLiteralToken(this.leading, this.trailing, text);
2516 class ExecutionStringLiteralToken extends EditableToken
2518 constructor(leading, trailing, text)
2520 super('execution_string_literal', leading, trailing, text);
2524 return new ExecutionStringLiteralToken(this.leading, this.trailing, text);
2528 class ExecutionStringLiteralHeadToken extends EditableToken
2530 constructor(leading, trailing, text)
2532 super('execution_string_literal_head', leading, trailing, text);
2536 return new ExecutionStringLiteralHeadToken(this.leading, this.trailing, text);
2540 class ExecutionStringLiteralTailToken extends EditableToken
2542 constructor(leading, trailing, text)
2544 super('execution_string_literal_tail', leading, trailing, text);
2548 return new ExecutionStringLiteralTailToken(this.leading, this.trailing, text);
2552 class SingleQuotedStringLiteralToken extends EditableToken
2554 constructor(leading, trailing, text)
2556 super('single_quoted_string_literal', leading, trailing, text);
2560 return new SingleQuotedStringLiteralToken(this.leading, this.trailing, text);
2564 class DoubleQuotedStringLiteralToken extends EditableToken
2566 constructor(leading, trailing, text)
2568 super('double_quoted_string_literal', leading, trailing, text);
2572 return new DoubleQuotedStringLiteralToken(this.leading, this.trailing, text);
2576 class DoubleQuotedStringLiteralHeadToken extends EditableToken
2578 constructor(leading, trailing, text)
2580 super('double_quoted_string_literal_head', leading, trailing, text);
2584 return new DoubleQuotedStringLiteralHeadToken(this.leading, this.trailing, text);
2588 class StringLiteralBodyToken extends EditableToken
2590 constructor(leading, trailing, text)
2592 super('string_literal_body', leading, trailing, text);
2596 return new StringLiteralBodyToken(this.leading, this.trailing, text);
2600 class DoubleQuotedStringLiteralTailToken extends EditableToken
2602 constructor(leading, trailing, text)
2604 super('double_quoted_string_literal_tail', leading, trailing, text);
2608 return new DoubleQuotedStringLiteralTailToken(this.leading, this.trailing, text);
2612 class HeredocStringLiteralToken extends EditableToken
2614 constructor(leading, trailing, text)
2616 super('heredoc_string_literal', leading, trailing, text);
2620 return new HeredocStringLiteralToken(this.leading, this.trailing, text);
2624 class HeredocStringLiteralHeadToken extends EditableToken
2626 constructor(leading, trailing, text)
2628 super('heredoc_string_literal_head', leading, trailing, text);
2632 return new HeredocStringLiteralHeadToken(this.leading, this.trailing, text);
2636 class HeredocStringLiteralTailToken extends EditableToken
2638 constructor(leading, trailing, text)
2640 super('heredoc_string_literal_tail', leading, trailing, text);
2644 return new HeredocStringLiteralTailToken(this.leading, this.trailing, text);
2648 class NowdocStringLiteralToken extends EditableToken
2650 constructor(leading, trailing, text)
2652 super('nowdoc_string_literal', leading, trailing, text);
2656 return new NowdocStringLiteralToken(this.leading, this.trailing, text);
2660 class BooleanLiteralToken extends EditableToken
2662 constructor(leading, trailing, text)
2664 super('boolean_literal', leading, trailing, text);
2668 return new BooleanLiteralToken(this.leading, this.trailing, text);
2672 class XHPCategoryNameToken extends EditableToken
2674 constructor(leading, trailing, text)
2676 super('XHP_category_name', leading, trailing, text);
2680 return new XHPCategoryNameToken(this.leading, this.trailing, text);
2684 class XHPElementNameToken extends EditableToken
2686 constructor(leading, trailing, text)
2688 super('XHP_element_name', leading, trailing, text);
2692 return new XHPElementNameToken(this.leading, this.trailing, text);
2696 class XHPClassNameToken extends EditableToken
2698 constructor(leading, trailing, text)
2700 super('XHP_class_name', leading, trailing, text);
2704 return new XHPClassNameToken(this.leading, this.trailing, text);
2708 class XHPStringLiteralToken extends EditableToken
2710 constructor(leading, trailing, text)
2712 super('XHP_string_literal', leading, trailing, text);
2716 return new XHPStringLiteralToken(this.leading, this.trailing, text);
2720 class XHPBodyToken extends EditableToken
2722 constructor(leading, trailing, text)
2724 super('XHP_body', leading, trailing, text);
2728 return new XHPBodyToken(this.leading, this.trailing, text);
2732 class XHPCommentToken extends EditableToken
2734 constructor(leading, trailing, text)
2736 super('XHP_comment', leading, trailing, text);
2740 return new XHPCommentToken(this.leading, this.trailing, text);
2744 class MarkupToken extends EditableToken
2746 constructor(leading, trailing, text)
2748 super('markup', leading, trailing, text);
2752 return new MarkupToken(this.leading, this.trailing, text);
2758 class EditableTrivia extends EditableSyntax
2760 constructor(trivia_kind, text)
2762 super(trivia_kind, {});
2765 get text() { return this._text; }
2766 get full_text() { return this.text; }
2767 get width() { return this.text.length; }
2768 get is_trivia() { return true; }
2770 static from_json(json, position, source)
2772 let trivia_text = source.substring(position, position + json.width);
2776 return new WhiteSpace(trivia_text);
2778 return new EndOfLine(trivia_text);
2779 case 'delimited_comment':
2780 return new DelimitedComment(trivia_text);
2781 case 'single_line_comment':
2782 return new SingleLineComment(trivia_text);
2784 return new Unsafe(trivia_text);
2785 case 'unsafe_expression':
2786 return new UnsafeExpression(trivia_text);
2788 return new FixMe(trivia_text);
2789 case 'ignore_error':
2790 return new IgnoreError(trivia_text);
2791 case 'fall_through':
2792 return new FallThrough(trivia_text);
2793 case 'extra_token_error':
2794 return new ExtraTokenError(trivia_text);
2795 case 'after_halt_compiler':
2796 return new AfterHaltCompiler(trivia_text);
2798 default: throw 'unexpected json kind: ' + json.kind; // TODO: Better error
2802 rewrite(rewriter, parents)
2804 return rewriter(this, parents);
2812 class WhiteSpace extends EditableTrivia
2814 constructor(text) { super('whitespace', text); }
2817 return new WhiteSpace(text);
2821 class EndOfLine extends EditableTrivia
2823 constructor(text) { super('end_of_line', text); }
2826 return new EndOfLine(text);
2830 class DelimitedComment extends EditableTrivia
2832 constructor(text) { super('delimited_comment', text); }
2835 return new DelimitedComment(text);
2839 class SingleLineComment extends EditableTrivia
2841 constructor(text) { super('single_line_comment', text); }
2844 return new SingleLineComment(text);
2848 class Unsafe extends EditableTrivia
2850 constructor(text) { super('unsafe', text); }
2853 return new Unsafe(text);
2857 class UnsafeExpression extends EditableTrivia
2859 constructor(text) { super('unsafe_expression', text); }
2862 return new UnsafeExpression(text);
2866 class FixMe extends EditableTrivia
2868 constructor(text) { super('fix_me', text); }
2871 return new FixMe(text);
2875 class IgnoreError extends EditableTrivia
2877 constructor(text) { super('ignore_error', text); }
2880 return new IgnoreError(text);
2884 class FallThrough extends EditableTrivia
2886 constructor(text) { super('fall_through', text); }
2889 return new FallThrough(text);
2893 class ExtraTokenError extends EditableTrivia
2895 constructor(text) { super('extra_token_error', text); }
2898 return new ExtraTokenError(text);
2902 class AfterHaltCompiler extends EditableTrivia
2904 constructor(text) { super('after_halt_compiler', text); }
2907 return new AfterHaltCompiler(text);
2913 class Missing extends EditableSyntax
2917 super('missing', {});
2919 get is_missing() { return true; }
2920 static get missing() { return Missing._missing; }
2921 static from_json(json, position, source)
2923 return Missing._missing;
2925 rewrite(rewriter, parents)
2927 return rewriter(this, parents);
2934 Missing._missing = new Missing();
2936 class EndOfFile extends EditableSyntax
2941 super('end_of_file', {
2944 get token() { return this.children.token; }
2946 return new EndOfFile(
2949 rewrite(rewriter, parents)
2951 if (parents == undefined)
2953 let new_parents = parents.slice();
2954 new_parents.push(this);
2955 var token = this.token.rewrite(rewriter, new_parents);
2957 token === this.token)
2959 return rewriter(this, parents);
2963 return rewriter(new EndOfFile(
2967 static from_json(json, position, source)
2969 let token = EditableSyntax.from_json(
2970 json.end_of_file_token, position, source);
2971 position += token.width;
2972 return new EndOfFile(
2977 if (EndOfFile._children_keys == null)
2978 EndOfFile._children_keys = [
2980 return EndOfFile._children_keys;
2983 class Script extends EditableSyntax
2989 declarations: declarations });
2991 get declarations() { return this.children.declarations; }
2992 with_declarations(declarations){
2996 rewrite(rewriter, parents)
2998 if (parents == undefined)
3000 let new_parents = parents.slice();
3001 new_parents.push(this);
3002 var declarations = this.declarations.rewrite(rewriter, new_parents);
3004 declarations === this.declarations)
3006 return rewriter(this, parents);
3010 return rewriter(new Script(
3011 declarations), parents);
3014 static from_json(json, position, source)
3016 let declarations = EditableSyntax.from_json(
3017 json.script_declarations, position, source);
3018 position += declarations.width;
3024 if (Script._children_keys == null)
3025 Script._children_keys = [
3027 return Script._children_keys;
3030 class QualifiedName extends EditableSyntax
3035 super('qualified_name', {
3038 get parts() { return this.children.parts; }
3040 return new QualifiedName(
3043 rewrite(rewriter, parents)
3045 if (parents == undefined)
3047 let new_parents = parents.slice();
3048 new_parents.push(this);
3049 var parts = this.parts.rewrite(rewriter, new_parents);
3051 parts === this.parts)
3053 return rewriter(this, parents);
3057 return rewriter(new QualifiedName(
3061 static from_json(json, position, source)
3063 let parts = EditableSyntax.from_json(
3064 json.qualified_name_parts, position, source);
3065 position += parts.width;
3066 return new QualifiedName(
3071 if (QualifiedName._children_keys == null)
3072 QualifiedName._children_keys = [
3074 return QualifiedName._children_keys;
3077 class SimpleTypeSpecifier extends EditableSyntax
3082 super('simple_type_specifier', {
3083 specifier: specifier });
3085 get specifier() { return this.children.specifier; }
3086 with_specifier(specifier){
3087 return new SimpleTypeSpecifier(
3090 rewrite(rewriter, parents)
3092 if (parents == undefined)
3094 let new_parents = parents.slice();
3095 new_parents.push(this);
3096 var specifier = this.specifier.rewrite(rewriter, new_parents);
3098 specifier === this.specifier)
3100 return rewriter(this, parents);
3104 return rewriter(new SimpleTypeSpecifier(
3105 specifier), parents);
3108 static from_json(json, position, source)
3110 let specifier = EditableSyntax.from_json(
3111 json.simple_type_specifier, position, source);
3112 position += specifier.width;
3113 return new SimpleTypeSpecifier(
3118 if (SimpleTypeSpecifier._children_keys == null)
3119 SimpleTypeSpecifier._children_keys = [
3121 return SimpleTypeSpecifier._children_keys;
3124 class LiteralExpression extends EditableSyntax
3130 expression: expression });
3132 get expression() { return this.children.expression; }
3133 with_expression(expression){
3134 return new LiteralExpression(
3137 rewrite(rewriter, parents)
3139 if (parents == undefined)
3141 let new_parents = parents.slice();
3142 new_parents.push(this);
3143 var expression = this.expression.rewrite(rewriter, new_parents);
3145 expression === this.expression)
3147 return rewriter(this, parents);
3151 return rewriter(new LiteralExpression(
3152 expression), parents);
3155 static from_json(json, position, source)
3157 let expression = EditableSyntax.from_json(
3158 json.literal_expression, position, source);
3159 position += expression.width;
3160 return new LiteralExpression(
3165 if (LiteralExpression._children_keys == null)
3166 LiteralExpression._children_keys = [
3168 return LiteralExpression._children_keys;
3171 class VariableExpression extends EditableSyntax
3177 expression: expression });
3179 get expression() { return this.children.expression; }
3180 with_expression(expression){
3181 return new VariableExpression(
3184 rewrite(rewriter, parents)
3186 if (parents == undefined)
3188 let new_parents = parents.slice();
3189 new_parents.push(this);
3190 var expression = this.expression.rewrite(rewriter, new_parents);
3192 expression === this.expression)
3194 return rewriter(this, parents);
3198 return rewriter(new VariableExpression(
3199 expression), parents);
3202 static from_json(json, position, source)
3204 let expression = EditableSyntax.from_json(
3205 json.variable_expression, position, source);
3206 position += expression.width;
3207 return new VariableExpression(
3212 if (VariableExpression._children_keys == null)
3213 VariableExpression._children_keys = [
3215 return VariableExpression._children_keys;
3218 class PipeVariableExpression extends EditableSyntax
3223 super('pipe_variable', {
3224 expression: expression });
3226 get expression() { return this.children.expression; }
3227 with_expression(expression){
3228 return new PipeVariableExpression(
3231 rewrite(rewriter, parents)
3233 if (parents == undefined)
3235 let new_parents = parents.slice();
3236 new_parents.push(this);
3237 var expression = this.expression.rewrite(rewriter, new_parents);
3239 expression === this.expression)
3241 return rewriter(this, parents);
3245 return rewriter(new PipeVariableExpression(
3246 expression), parents);
3249 static from_json(json, position, source)
3251 let expression = EditableSyntax.from_json(
3252 json.pipe_variable_expression, position, source);
3253 position += expression.width;
3254 return new PipeVariableExpression(
3259 if (PipeVariableExpression._children_keys == null)
3260 PipeVariableExpression._children_keys = [
3262 return PipeVariableExpression._children_keys;
3265 class EnumDeclaration extends EditableSyntax
3278 super('enum_declaration', {
3279 attribute_spec: attribute_spec,
3285 left_brace: left_brace,
3286 enumerators: enumerators,
3287 right_brace: right_brace });
3289 get attribute_spec() { return this.children.attribute_spec; }
3290 get keyword() { return this.children.keyword; }
3291 get name() { return this.children.name; }
3292 get colon() { return this.children.colon; }
3293 get base() { return this.children.base; }
3294 get type() { return this.children.type; }
3295 get left_brace() { return this.children.left_brace; }
3296 get enumerators() { return this.children.enumerators; }
3297 get right_brace() { return this.children.right_brace; }
3298 with_attribute_spec(attribute_spec){
3299 return new EnumDeclaration(
3310 with_keyword(keyword){
3311 return new EnumDeclaration(
3312 this.attribute_spec,
3323 return new EnumDeclaration(
3324 this.attribute_spec,
3335 return new EnumDeclaration(
3336 this.attribute_spec,
3347 return new EnumDeclaration(
3348 this.attribute_spec,
3359 return new EnumDeclaration(
3360 this.attribute_spec,
3370 with_left_brace(left_brace){
3371 return new EnumDeclaration(
3372 this.attribute_spec,
3382 with_enumerators(enumerators){
3383 return new EnumDeclaration(
3384 this.attribute_spec,
3394 with_right_brace(right_brace){
3395 return new EnumDeclaration(
3396 this.attribute_spec,
3406 rewrite(rewriter, parents)
3408 if (parents == undefined)
3410 let new_parents = parents.slice();
3411 new_parents.push(this);
3412 var attribute_spec = this.attribute_spec.rewrite(rewriter, new_parents);
3413 var keyword = this.keyword.rewrite(rewriter, new_parents);
3414 var name = this.name.rewrite(rewriter, new_parents);
3415 var colon = this.colon.rewrite(rewriter, new_parents);
3416 var base = this.base.rewrite(rewriter, new_parents);
3417 var type = this.type.rewrite(rewriter, new_parents);
3418 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
3419 var enumerators = this.enumerators.rewrite(rewriter, new_parents);
3420 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
3422 attribute_spec === this.attribute_spec &&
3423 keyword === this.keyword &&
3424 name === this.name &&
3425 colon === this.colon &&
3426 base === this.base &&
3427 type === this.type &&
3428 left_brace === this.left_brace &&
3429 enumerators === this.enumerators &&
3430 right_brace === this.right_brace)
3432 return rewriter(this, parents);
3436 return rewriter(new EnumDeclaration(
3445 right_brace), parents);
3448 static from_json(json, position, source)
3450 let attribute_spec = EditableSyntax.from_json(
3451 json.enum_attribute_spec, position, source);
3452 position += attribute_spec.width;
3453 let keyword = EditableSyntax.from_json(
3454 json.enum_keyword, position, source);
3455 position += keyword.width;
3456 let name = EditableSyntax.from_json(
3457 json.enum_name, position, source);
3458 position += name.width;
3459 let colon = EditableSyntax.from_json(
3460 json.enum_colon, position, source);
3461 position += colon.width;
3462 let base = EditableSyntax.from_json(
3463 json.enum_base, position, source);
3464 position += base.width;
3465 let type = EditableSyntax.from_json(
3466 json.enum_type, position, source);
3467 position += type.width;
3468 let left_brace = EditableSyntax.from_json(
3469 json.enum_left_brace, position, source);
3470 position += left_brace.width;
3471 let enumerators = EditableSyntax.from_json(
3472 json.enum_enumerators, position, source);
3473 position += enumerators.width;
3474 let right_brace = EditableSyntax.from_json(
3475 json.enum_right_brace, position, source);
3476 position += right_brace.width;
3477 return new EnumDeclaration(
3490 if (EnumDeclaration._children_keys == null)
3491 EnumDeclaration._children_keys = [
3501 return EnumDeclaration._children_keys;
3504 class Enumerator extends EditableSyntax
3512 super('enumerator', {
3516 semicolon: semicolon });
3518 get name() { return this.children.name; }
3519 get equal() { return this.children.equal; }
3520 get value() { return this.children.value; }
3521 get semicolon() { return this.children.semicolon; }
3523 return new Enumerator(
3530 return new Enumerator(
3537 return new Enumerator(
3543 with_semicolon(semicolon){
3544 return new Enumerator(
3550 rewrite(rewriter, parents)
3552 if (parents == undefined)
3554 let new_parents = parents.slice();
3555 new_parents.push(this);
3556 var name = this.name.rewrite(rewriter, new_parents);
3557 var equal = this.equal.rewrite(rewriter, new_parents);
3558 var value = this.value.rewrite(rewriter, new_parents);
3559 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
3561 name === this.name &&
3562 equal === this.equal &&
3563 value === this.value &&
3564 semicolon === this.semicolon)
3566 return rewriter(this, parents);
3570 return rewriter(new Enumerator(
3574 semicolon), parents);
3577 static from_json(json, position, source)
3579 let name = EditableSyntax.from_json(
3580 json.enumerator_name, position, source);
3581 position += name.width;
3582 let equal = EditableSyntax.from_json(
3583 json.enumerator_equal, position, source);
3584 position += equal.width;
3585 let value = EditableSyntax.from_json(
3586 json.enumerator_value, position, source);
3587 position += value.width;
3588 let semicolon = EditableSyntax.from_json(
3589 json.enumerator_semicolon, position, source);
3590 position += semicolon.width;
3591 return new Enumerator(
3599 if (Enumerator._children_keys == null)
3600 Enumerator._children_keys = [
3605 return Enumerator._children_keys;
3608 class AliasDeclaration extends EditableSyntax
3620 super('alias_declaration', {
3621 attribute_spec: attribute_spec,
3624 generic_parameter: generic_parameter,
3625 constraint: constraint,
3628 semicolon: semicolon });
3630 get attribute_spec() { return this.children.attribute_spec; }
3631 get keyword() { return this.children.keyword; }
3632 get name() { return this.children.name; }
3633 get generic_parameter() { return this.children.generic_parameter; }
3634 get constraint() { return this.children.constraint; }
3635 get equal() { return this.children.equal; }
3636 get type() { return this.children.type; }
3637 get semicolon() { return this.children.semicolon; }
3638 with_attribute_spec(attribute_spec){
3639 return new AliasDeclaration(
3643 this.generic_parameter,
3649 with_keyword(keyword){
3650 return new AliasDeclaration(
3651 this.attribute_spec,
3654 this.generic_parameter,
3661 return new AliasDeclaration(
3662 this.attribute_spec,
3665 this.generic_parameter,
3671 with_generic_parameter(generic_parameter){
3672 return new AliasDeclaration(
3673 this.attribute_spec,
3682 with_constraint(constraint){
3683 return new AliasDeclaration(
3684 this.attribute_spec,
3687 this.generic_parameter,
3694 return new AliasDeclaration(
3695 this.attribute_spec,
3698 this.generic_parameter,
3705 return new AliasDeclaration(
3706 this.attribute_spec,
3709 this.generic_parameter,
3715 with_semicolon(semicolon){
3716 return new AliasDeclaration(
3717 this.attribute_spec,
3720 this.generic_parameter,
3726 rewrite(rewriter, parents)
3728 if (parents == undefined)
3730 let new_parents = parents.slice();
3731 new_parents.push(this);
3732 var attribute_spec = this.attribute_spec.rewrite(rewriter, new_parents);
3733 var keyword = this.keyword.rewrite(rewriter, new_parents);
3734 var name = this.name.rewrite(rewriter, new_parents);
3735 var generic_parameter = this.generic_parameter.rewrite(rewriter, new_parents);
3736 var constraint = this.constraint.rewrite(rewriter, new_parents);
3737 var equal = this.equal.rewrite(rewriter, new_parents);
3738 var type = this.type.rewrite(rewriter, new_parents);
3739 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
3741 attribute_spec === this.attribute_spec &&
3742 keyword === this.keyword &&
3743 name === this.name &&
3744 generic_parameter === this.generic_parameter &&
3745 constraint === this.constraint &&
3746 equal === this.equal &&
3747 type === this.type &&
3748 semicolon === this.semicolon)
3750 return rewriter(this, parents);
3754 return rewriter(new AliasDeclaration(
3762 semicolon), parents);
3765 static from_json(json, position, source)
3767 let attribute_spec = EditableSyntax.from_json(
3768 json.alias_attribute_spec, position, source);
3769 position += attribute_spec.width;
3770 let keyword = EditableSyntax.from_json(
3771 json.alias_keyword, position, source);
3772 position += keyword.width;
3773 let name = EditableSyntax.from_json(
3774 json.alias_name, position, source);
3775 position += name.width;
3776 let generic_parameter = EditableSyntax.from_json(
3777 json.alias_generic_parameter, position, source);
3778 position += generic_parameter.width;
3779 let constraint = EditableSyntax.from_json(
3780 json.alias_constraint, position, source);
3781 position += constraint.width;
3782 let equal = EditableSyntax.from_json(
3783 json.alias_equal, position, source);
3784 position += equal.width;
3785 let type = EditableSyntax.from_json(
3786 json.alias_type, position, source);
3787 position += type.width;
3788 let semicolon = EditableSyntax.from_json(
3789 json.alias_semicolon, position, source);
3790 position += semicolon.width;
3791 return new AliasDeclaration(
3803 if (AliasDeclaration._children_keys == null)
3804 AliasDeclaration._children_keys = [
3808 'generic_parameter',
3813 return AliasDeclaration._children_keys;
3816 class PropertyDeclaration extends EditableSyntax
3824 super('property_declaration', {
3825 modifiers: modifiers,
3827 declarators: declarators,
3828 semicolon: semicolon });
3830 get modifiers() { return this.children.modifiers; }
3831 get type() { return this.children.type; }
3832 get declarators() { return this.children.declarators; }
3833 get semicolon() { return this.children.semicolon; }
3834 with_modifiers(modifiers){
3835 return new PropertyDeclaration(
3842 return new PropertyDeclaration(
3848 with_declarators(declarators){
3849 return new PropertyDeclaration(
3855 with_semicolon(semicolon){
3856 return new PropertyDeclaration(
3862 rewrite(rewriter, parents)
3864 if (parents == undefined)
3866 let new_parents = parents.slice();
3867 new_parents.push(this);
3868 var modifiers = this.modifiers.rewrite(rewriter, new_parents);
3869 var type = this.type.rewrite(rewriter, new_parents);
3870 var declarators = this.declarators.rewrite(rewriter, new_parents);
3871 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
3873 modifiers === this.modifiers &&
3874 type === this.type &&
3875 declarators === this.declarators &&
3876 semicolon === this.semicolon)
3878 return rewriter(this, parents);
3882 return rewriter(new PropertyDeclaration(
3886 semicolon), parents);
3889 static from_json(json, position, source)
3891 let modifiers = EditableSyntax.from_json(
3892 json.property_modifiers, position, source);
3893 position += modifiers.width;
3894 let type = EditableSyntax.from_json(
3895 json.property_type, position, source);
3896 position += type.width;
3897 let declarators = EditableSyntax.from_json(
3898 json.property_declarators, position, source);
3899 position += declarators.width;
3900 let semicolon = EditableSyntax.from_json(
3901 json.property_semicolon, position, source);
3902 position += semicolon.width;
3903 return new PropertyDeclaration(
3911 if (PropertyDeclaration._children_keys == null)
3912 PropertyDeclaration._children_keys = [
3917 return PropertyDeclaration._children_keys;
3920 class PropertyDeclarator extends EditableSyntax
3926 super('property_declarator', {
3928 initializer: initializer });
3930 get name() { return this.children.name; }
3931 get initializer() { return this.children.initializer; }
3933 return new PropertyDeclarator(
3937 with_initializer(initializer){
3938 return new PropertyDeclarator(
3942 rewrite(rewriter, parents)
3944 if (parents == undefined)
3946 let new_parents = parents.slice();
3947 new_parents.push(this);
3948 var name = this.name.rewrite(rewriter, new_parents);
3949 var initializer = this.initializer.rewrite(rewriter, new_parents);
3951 name === this.name &&
3952 initializer === this.initializer)
3954 return rewriter(this, parents);
3958 return rewriter(new PropertyDeclarator(
3960 initializer), parents);
3963 static from_json(json, position, source)
3965 let name = EditableSyntax.from_json(
3966 json.property_name, position, source);
3967 position += name.width;
3968 let initializer = EditableSyntax.from_json(
3969 json.property_initializer, position, source);
3970 position += initializer.width;
3971 return new PropertyDeclarator(
3977 if (PropertyDeclarator._children_keys == null)
3978 PropertyDeclarator._children_keys = [
3981 return PropertyDeclarator._children_keys;
3984 class NamespaceDeclaration extends EditableSyntax
3991 super('namespace_declaration', {
3996 get keyword() { return this.children.keyword; }
3997 get name() { return this.children.name; }
3998 get body() { return this.children.body; }
3999 with_keyword(keyword){
4000 return new NamespaceDeclaration(
4006 return new NamespaceDeclaration(
4012 return new NamespaceDeclaration(
4017 rewrite(rewriter, parents)
4019 if (parents == undefined)
4021 let new_parents = parents.slice();
4022 new_parents.push(this);
4023 var keyword = this.keyword.rewrite(rewriter, new_parents);
4024 var name = this.name.rewrite(rewriter, new_parents);
4025 var body = this.body.rewrite(rewriter, new_parents);
4027 keyword === this.keyword &&
4028 name === this.name &&
4031 return rewriter(this, parents);
4035 return rewriter(new NamespaceDeclaration(
4041 static from_json(json, position, source)
4043 let keyword = EditableSyntax.from_json(
4044 json.namespace_keyword, position, source);
4045 position += keyword.width;
4046 let name = EditableSyntax.from_json(
4047 json.namespace_name, position, source);
4048 position += name.width;
4049 let body = EditableSyntax.from_json(
4050 json.namespace_body, position, source);
4051 position += body.width;
4052 return new NamespaceDeclaration(
4059 if (NamespaceDeclaration._children_keys == null)
4060 NamespaceDeclaration._children_keys = [
4064 return NamespaceDeclaration._children_keys;
4067 class NamespaceBody extends EditableSyntax
4074 super('namespace_body', {
4075 left_brace: left_brace,
4076 declarations: declarations,
4077 right_brace: right_brace });
4079 get left_brace() { return this.children.left_brace; }
4080 get declarations() { return this.children.declarations; }
4081 get right_brace() { return this.children.right_brace; }
4082 with_left_brace(left_brace){
4083 return new NamespaceBody(
4088 with_declarations(declarations){
4089 return new NamespaceBody(
4094 with_right_brace(right_brace){
4095 return new NamespaceBody(
4100 rewrite(rewriter, parents)
4102 if (parents == undefined)
4104 let new_parents = parents.slice();
4105 new_parents.push(this);
4106 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
4107 var declarations = this.declarations.rewrite(rewriter, new_parents);
4108 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
4110 left_brace === this.left_brace &&
4111 declarations === this.declarations &&
4112 right_brace === this.right_brace)
4114 return rewriter(this, parents);
4118 return rewriter(new NamespaceBody(
4121 right_brace), parents);
4124 static from_json(json, position, source)
4126 let left_brace = EditableSyntax.from_json(
4127 json.namespace_left_brace, position, source);
4128 position += left_brace.width;
4129 let declarations = EditableSyntax.from_json(
4130 json.namespace_declarations, position, source);
4131 position += declarations.width;
4132 let right_brace = EditableSyntax.from_json(
4133 json.namespace_right_brace, position, source);
4134 position += right_brace.width;
4135 return new NamespaceBody(
4142 if (NamespaceBody._children_keys == null)
4143 NamespaceBody._children_keys = [
4147 return NamespaceBody._children_keys;
4150 class NamespaceEmptyBody extends EditableSyntax
4155 super('namespace_empty_body', {
4156 semicolon: semicolon });
4158 get semicolon() { return this.children.semicolon; }
4159 with_semicolon(semicolon){
4160 return new NamespaceEmptyBody(
4163 rewrite(rewriter, parents)
4165 if (parents == undefined)
4167 let new_parents = parents.slice();
4168 new_parents.push(this);
4169 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
4171 semicolon === this.semicolon)
4173 return rewriter(this, parents);
4177 return rewriter(new NamespaceEmptyBody(
4178 semicolon), parents);
4181 static from_json(json, position, source)
4183 let semicolon = EditableSyntax.from_json(
4184 json.namespace_semicolon, position, source);
4185 position += semicolon.width;
4186 return new NamespaceEmptyBody(
4191 if (NamespaceEmptyBody._children_keys == null)
4192 NamespaceEmptyBody._children_keys = [
4194 return NamespaceEmptyBody._children_keys;
4197 class NamespaceUseDeclaration extends EditableSyntax
4205 super('namespace_use_declaration', {
4209 semicolon: semicolon });
4211 get keyword() { return this.children.keyword; }
4212 get kind() { return this.children.kind; }
4213 get clauses() { return this.children.clauses; }
4214 get semicolon() { return this.children.semicolon; }
4215 with_keyword(keyword){
4216 return new NamespaceUseDeclaration(
4223 return new NamespaceUseDeclaration(
4229 with_clauses(clauses){
4230 return new NamespaceUseDeclaration(
4236 with_semicolon(semicolon){
4237 return new NamespaceUseDeclaration(
4243 rewrite(rewriter, parents)
4245 if (parents == undefined)
4247 let new_parents = parents.slice();
4248 new_parents.push(this);
4249 var keyword = this.keyword.rewrite(rewriter, new_parents);
4250 var kind = this.kind.rewrite(rewriter, new_parents);
4251 var clauses = this.clauses.rewrite(rewriter, new_parents);
4252 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
4254 keyword === this.keyword &&
4255 kind === this.kind &&
4256 clauses === this.clauses &&
4257 semicolon === this.semicolon)
4259 return rewriter(this, parents);
4263 return rewriter(new NamespaceUseDeclaration(
4267 semicolon), parents);
4270 static from_json(json, position, source)
4272 let keyword = EditableSyntax.from_json(
4273 json.namespace_use_keyword, position, source);
4274 position += keyword.width;
4275 let kind = EditableSyntax.from_json(
4276 json.namespace_use_kind, position, source);
4277 position += kind.width;
4278 let clauses = EditableSyntax.from_json(
4279 json.namespace_use_clauses, position, source);
4280 position += clauses.width;
4281 let semicolon = EditableSyntax.from_json(
4282 json.namespace_use_semicolon, position, source);
4283 position += semicolon.width;
4284 return new NamespaceUseDeclaration(
4292 if (NamespaceUseDeclaration._children_keys == null)
4293 NamespaceUseDeclaration._children_keys = [
4298 return NamespaceUseDeclaration._children_keys;
4301 class NamespaceGroupUseDeclaration extends EditableSyntax
4312 super('namespace_group_use_declaration', {
4316 left_brace: left_brace,
4318 right_brace: right_brace,
4319 semicolon: semicolon });
4321 get keyword() { return this.children.keyword; }
4322 get kind() { return this.children.kind; }
4323 get prefix() { return this.children.prefix; }
4324 get left_brace() { return this.children.left_brace; }
4325 get clauses() { return this.children.clauses; }
4326 get right_brace() { return this.children.right_brace; }
4327 get semicolon() { return this.children.semicolon; }
4328 with_keyword(keyword){
4329 return new NamespaceGroupUseDeclaration(
4339 return new NamespaceGroupUseDeclaration(
4348 with_prefix(prefix){
4349 return new NamespaceGroupUseDeclaration(
4358 with_left_brace(left_brace){
4359 return new NamespaceGroupUseDeclaration(
4368 with_clauses(clauses){
4369 return new NamespaceGroupUseDeclaration(
4378 with_right_brace(right_brace){
4379 return new NamespaceGroupUseDeclaration(
4388 with_semicolon(semicolon){
4389 return new NamespaceGroupUseDeclaration(
4398 rewrite(rewriter, parents)
4400 if (parents == undefined)
4402 let new_parents = parents.slice();
4403 new_parents.push(this);
4404 var keyword = this.keyword.rewrite(rewriter, new_parents);
4405 var kind = this.kind.rewrite(rewriter, new_parents);
4406 var prefix = this.prefix.rewrite(rewriter, new_parents);
4407 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
4408 var clauses = this.clauses.rewrite(rewriter, new_parents);
4409 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
4410 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
4412 keyword === this.keyword &&
4413 kind === this.kind &&
4414 prefix === this.prefix &&
4415 left_brace === this.left_brace &&
4416 clauses === this.clauses &&
4417 right_brace === this.right_brace &&
4418 semicolon === this.semicolon)
4420 return rewriter(this, parents);
4424 return rewriter(new NamespaceGroupUseDeclaration(
4431 semicolon), parents);
4434 static from_json(json, position, source)
4436 let keyword = EditableSyntax.from_json(
4437 json.namespace_group_use_keyword, position, source);
4438 position += keyword.width;
4439 let kind = EditableSyntax.from_json(
4440 json.namespace_group_use_kind, position, source);
4441 position += kind.width;
4442 let prefix = EditableSyntax.from_json(
4443 json.namespace_group_use_prefix, position, source);
4444 position += prefix.width;
4445 let left_brace = EditableSyntax.from_json(
4446 json.namespace_group_use_left_brace, position, source);
4447 position += left_brace.width;
4448 let clauses = EditableSyntax.from_json(
4449 json.namespace_group_use_clauses, position, source);
4450 position += clauses.width;
4451 let right_brace = EditableSyntax.from_json(
4452 json.namespace_group_use_right_brace, position, source);
4453 position += right_brace.width;
4454 let semicolon = EditableSyntax.from_json(
4455 json.namespace_group_use_semicolon, position, source);
4456 position += semicolon.width;
4457 return new NamespaceGroupUseDeclaration(
4468 if (NamespaceGroupUseDeclaration._children_keys == null)
4469 NamespaceGroupUseDeclaration._children_keys = [
4477 return NamespaceGroupUseDeclaration._children_keys;
4480 class NamespaceUseClause extends EditableSyntax
4488 super('namespace_use_clause', {
4489 clause_kind: clause_kind,
4494 get clause_kind() { return this.children.clause_kind; }
4495 get name() { return this.children.name; }
4496 get as() { return this.children.as; }
4497 get alias() { return this.children.alias; }
4498 with_clause_kind(clause_kind){
4499 return new NamespaceUseClause(
4506 return new NamespaceUseClause(
4513 return new NamespaceUseClause(
4520 return new NamespaceUseClause(
4526 rewrite(rewriter, parents)
4528 if (parents == undefined)
4530 let new_parents = parents.slice();
4531 new_parents.push(this);
4532 var clause_kind = this.clause_kind.rewrite(rewriter, new_parents);
4533 var name = this.name.rewrite(rewriter, new_parents);
4534 var as = this.as.rewrite(rewriter, new_parents);
4535 var alias = this.alias.rewrite(rewriter, new_parents);
4537 clause_kind === this.clause_kind &&
4538 name === this.name &&
4540 alias === this.alias)
4542 return rewriter(this, parents);
4546 return rewriter(new NamespaceUseClause(
4553 static from_json(json, position, source)
4555 let clause_kind = EditableSyntax.from_json(
4556 json.namespace_use_clause_kind, position, source);
4557 position += clause_kind.width;
4558 let name = EditableSyntax.from_json(
4559 json.namespace_use_name, position, source);
4560 position += name.width;
4561 let as = EditableSyntax.from_json(
4562 json.namespace_use_as, position, source);
4563 position += as.width;
4564 let alias = EditableSyntax.from_json(
4565 json.namespace_use_alias, position, source);
4566 position += alias.width;
4567 return new NamespaceUseClause(
4575 if (NamespaceUseClause._children_keys == null)
4576 NamespaceUseClause._children_keys = [
4581 return NamespaceUseClause._children_keys;
4584 class FunctionDeclaration extends EditableSyntax
4591 super('function_declaration', {
4592 attribute_spec: attribute_spec,
4593 declaration_header: declaration_header,
4596 get attribute_spec() { return this.children.attribute_spec; }
4597 get declaration_header() { return this.children.declaration_header; }
4598 get body() { return this.children.body; }
4599 with_attribute_spec(attribute_spec){
4600 return new FunctionDeclaration(
4602 this.declaration_header,
4605 with_declaration_header(declaration_header){
4606 return new FunctionDeclaration(
4607 this.attribute_spec,
4612 return new FunctionDeclaration(
4613 this.attribute_spec,
4614 this.declaration_header,
4617 rewrite(rewriter, parents)
4619 if (parents == undefined)
4621 let new_parents = parents.slice();
4622 new_parents.push(this);
4623 var attribute_spec = this.attribute_spec.rewrite(rewriter, new_parents);
4624 var declaration_header = this.declaration_header.rewrite(rewriter, new_parents);
4625 var body = this.body.rewrite(rewriter, new_parents);
4627 attribute_spec === this.attribute_spec &&
4628 declaration_header === this.declaration_header &&
4631 return rewriter(this, parents);
4635 return rewriter(new FunctionDeclaration(
4641 static from_json(json, position, source)
4643 let attribute_spec = EditableSyntax.from_json(
4644 json.function_attribute_spec, position, source);
4645 position += attribute_spec.width;
4646 let declaration_header = EditableSyntax.from_json(
4647 json.function_declaration_header, position, source);
4648 position += declaration_header.width;
4649 let body = EditableSyntax.from_json(
4650 json.function_body, position, source);
4651 position += body.width;
4652 return new FunctionDeclaration(
4659 if (FunctionDeclaration._children_keys == null)
4660 FunctionDeclaration._children_keys = [
4662 'declaration_header',
4664 return FunctionDeclaration._children_keys;
4667 class FunctionDeclarationHeader extends EditableSyntax
4674 type_parameter_list,
4682 super('function_declaration_header', {
4683 modifiers: modifiers,
4685 ampersand: ampersand,
4687 type_parameter_list: type_parameter_list,
4688 left_paren: left_paren,
4689 parameter_list: parameter_list,
4690 right_paren: right_paren,
4693 where_clause: where_clause });
4695 get modifiers() { return this.children.modifiers; }
4696 get keyword() { return this.children.keyword; }
4697 get ampersand() { return this.children.ampersand; }
4698 get name() { return this.children.name; }
4699 get type_parameter_list() { return this.children.type_parameter_list; }
4700 get left_paren() { return this.children.left_paren; }
4701 get parameter_list() { return this.children.parameter_list; }
4702 get right_paren() { return this.children.right_paren; }
4703 get colon() { return this.children.colon; }
4704 get type() { return this.children.type; }
4705 get where_clause() { return this.children.where_clause; }
4706 with_modifiers(modifiers){
4707 return new FunctionDeclarationHeader(
4712 this.type_parameter_list,
4714 this.parameter_list,
4720 with_keyword(keyword){
4721 return new FunctionDeclarationHeader(
4726 this.type_parameter_list,
4728 this.parameter_list,
4734 with_ampersand(ampersand){
4735 return new FunctionDeclarationHeader(
4740 this.type_parameter_list,
4742 this.parameter_list,
4749 return new FunctionDeclarationHeader(
4754 this.type_parameter_list,
4756 this.parameter_list,
4762 with_type_parameter_list(type_parameter_list){
4763 return new FunctionDeclarationHeader(
4768 type_parameter_list,
4770 this.parameter_list,
4776 with_left_paren(left_paren){
4777 return new FunctionDeclarationHeader(
4782 this.type_parameter_list,
4784 this.parameter_list,
4790 with_parameter_list(parameter_list){
4791 return new FunctionDeclarationHeader(
4796 this.type_parameter_list,
4804 with_right_paren(right_paren){
4805 return new FunctionDeclarationHeader(
4810 this.type_parameter_list,
4812 this.parameter_list,
4819 return new FunctionDeclarationHeader(
4824 this.type_parameter_list,
4826 this.parameter_list,
4833 return new FunctionDeclarationHeader(
4838 this.type_parameter_list,
4840 this.parameter_list,
4846 with_where_clause(where_clause){
4847 return new FunctionDeclarationHeader(
4852 this.type_parameter_list,
4854 this.parameter_list,
4860 rewrite(rewriter, parents)
4862 if (parents == undefined)
4864 let new_parents = parents.slice();
4865 new_parents.push(this);
4866 var modifiers = this.modifiers.rewrite(rewriter, new_parents);
4867 var keyword = this.keyword.rewrite(rewriter, new_parents);
4868 var ampersand = this.ampersand.rewrite(rewriter, new_parents);
4869 var name = this.name.rewrite(rewriter, new_parents);
4870 var type_parameter_list = this.type_parameter_list.rewrite(rewriter, new_parents);
4871 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
4872 var parameter_list = this.parameter_list.rewrite(rewriter, new_parents);
4873 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
4874 var colon = this.colon.rewrite(rewriter, new_parents);
4875 var type = this.type.rewrite(rewriter, new_parents);
4876 var where_clause = this.where_clause.rewrite(rewriter, new_parents);
4878 modifiers === this.modifiers &&
4879 keyword === this.keyword &&
4880 ampersand === this.ampersand &&
4881 name === this.name &&
4882 type_parameter_list === this.type_parameter_list &&
4883 left_paren === this.left_paren &&
4884 parameter_list === this.parameter_list &&
4885 right_paren === this.right_paren &&
4886 colon === this.colon &&
4887 type === this.type &&
4888 where_clause === this.where_clause)
4890 return rewriter(this, parents);
4894 return rewriter(new FunctionDeclarationHeader(
4899 type_parameter_list,
4905 where_clause), parents);
4908 static from_json(json, position, source)
4910 let modifiers = EditableSyntax.from_json(
4911 json.function_modifiers, position, source);
4912 position += modifiers.width;
4913 let keyword = EditableSyntax.from_json(
4914 json.function_keyword, position, source);
4915 position += keyword.width;
4916 let ampersand = EditableSyntax.from_json(
4917 json.function_ampersand, position, source);
4918 position += ampersand.width;
4919 let name = EditableSyntax.from_json(
4920 json.function_name, position, source);
4921 position += name.width;
4922 let type_parameter_list = EditableSyntax.from_json(
4923 json.function_type_parameter_list, position, source);
4924 position += type_parameter_list.width;
4925 let left_paren = EditableSyntax.from_json(
4926 json.function_left_paren, position, source);
4927 position += left_paren.width;
4928 let parameter_list = EditableSyntax.from_json(
4929 json.function_parameter_list, position, source);
4930 position += parameter_list.width;
4931 let right_paren = EditableSyntax.from_json(
4932 json.function_right_paren, position, source);
4933 position += right_paren.width;
4934 let colon = EditableSyntax.from_json(
4935 json.function_colon, position, source);
4936 position += colon.width;
4937 let type = EditableSyntax.from_json(
4938 json.function_type, position, source);
4939 position += type.width;
4940 let where_clause = EditableSyntax.from_json(
4941 json.function_where_clause, position, source);
4942 position += where_clause.width;
4943 return new FunctionDeclarationHeader(
4948 type_parameter_list,
4958 if (FunctionDeclarationHeader._children_keys == null)
4959 FunctionDeclarationHeader._children_keys = [
4964 'type_parameter_list',
4971 return FunctionDeclarationHeader._children_keys;
4974 class WhereClause extends EditableSyntax
4980 super('where_clause', {
4982 constraints: constraints });
4984 get keyword() { return this.children.keyword; }
4985 get constraints() { return this.children.constraints; }
4986 with_keyword(keyword){
4987 return new WhereClause(
4991 with_constraints(constraints){
4992 return new WhereClause(
4996 rewrite(rewriter, parents)
4998 if (parents == undefined)
5000 let new_parents = parents.slice();
5001 new_parents.push(this);
5002 var keyword = this.keyword.rewrite(rewriter, new_parents);
5003 var constraints = this.constraints.rewrite(rewriter, new_parents);
5005 keyword === this.keyword &&
5006 constraints === this.constraints)
5008 return rewriter(this, parents);
5012 return rewriter(new WhereClause(
5014 constraints), parents);
5017 static from_json(json, position, source)
5019 let keyword = EditableSyntax.from_json(
5020 json.where_clause_keyword, position, source);
5021 position += keyword.width;
5022 let constraints = EditableSyntax.from_json(
5023 json.where_clause_constraints, position, source);
5024 position += constraints.width;
5025 return new WhereClause(
5031 if (WhereClause._children_keys == null)
5032 WhereClause._children_keys = [
5035 return WhereClause._children_keys;
5038 class WhereConstraint extends EditableSyntax
5045 super('where_constraint', {
5046 left_type: left_type,
5048 right_type: right_type });
5050 get left_type() { return this.children.left_type; }
5051 get operator() { return this.children.operator; }
5052 get right_type() { return this.children.right_type; }
5053 with_left_type(left_type){
5054 return new WhereConstraint(
5059 with_operator(operator){
5060 return new WhereConstraint(
5065 with_right_type(right_type){
5066 return new WhereConstraint(
5071 rewrite(rewriter, parents)
5073 if (parents == undefined)
5075 let new_parents = parents.slice();
5076 new_parents.push(this);
5077 var left_type = this.left_type.rewrite(rewriter, new_parents);
5078 var operator = this.operator.rewrite(rewriter, new_parents);
5079 var right_type = this.right_type.rewrite(rewriter, new_parents);
5081 left_type === this.left_type &&
5082 operator === this.operator &&
5083 right_type === this.right_type)
5085 return rewriter(this, parents);
5089 return rewriter(new WhereConstraint(
5092 right_type), parents);
5095 static from_json(json, position, source)
5097 let left_type = EditableSyntax.from_json(
5098 json.where_constraint_left_type, position, source);
5099 position += left_type.width;
5100 let operator = EditableSyntax.from_json(
5101 json.where_constraint_operator, position, source);
5102 position += operator.width;
5103 let right_type = EditableSyntax.from_json(
5104 json.where_constraint_right_type, position, source);
5105 position += right_type.width;
5106 return new WhereConstraint(
5113 if (WhereConstraint._children_keys == null)
5114 WhereConstraint._children_keys = [
5118 return WhereConstraint._children_keys;
5121 class MethodishDeclaration extends EditableSyntax
5125 function_decl_header,
5129 super('methodish_declaration', {
5130 attribute: attribute,
5131 function_decl_header: function_decl_header,
5132 function_body: function_body,
5133 semicolon: semicolon });
5135 get attribute() { return this.children.attribute; }
5136 get function_decl_header() { return this.children.function_decl_header; }
5137 get function_body() { return this.children.function_body; }
5138 get semicolon() { return this.children.semicolon; }
5139 with_attribute(attribute){
5140 return new MethodishDeclaration(
5142 this.function_decl_header,
5146 with_function_decl_header(function_decl_header){
5147 return new MethodishDeclaration(
5149 function_decl_header,
5153 with_function_body(function_body){
5154 return new MethodishDeclaration(
5156 this.function_decl_header,
5160 with_semicolon(semicolon){
5161 return new MethodishDeclaration(
5163 this.function_decl_header,
5167 rewrite(rewriter, parents)
5169 if (parents == undefined)
5171 let new_parents = parents.slice();
5172 new_parents.push(this);
5173 var attribute = this.attribute.rewrite(rewriter, new_parents);
5174 var function_decl_header = this.function_decl_header.rewrite(rewriter, new_parents);
5175 var function_body = this.function_body.rewrite(rewriter, new_parents);
5176 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
5178 attribute === this.attribute &&
5179 function_decl_header === this.function_decl_header &&
5180 function_body === this.function_body &&
5181 semicolon === this.semicolon)
5183 return rewriter(this, parents);
5187 return rewriter(new MethodishDeclaration(
5189 function_decl_header,
5191 semicolon), parents);
5194 static from_json(json, position, source)
5196 let attribute = EditableSyntax.from_json(
5197 json.methodish_attribute, position, source);
5198 position += attribute.width;
5199 let function_decl_header = EditableSyntax.from_json(
5200 json.methodish_function_decl_header, position, source);
5201 position += function_decl_header.width;
5202 let function_body = EditableSyntax.from_json(
5203 json.methodish_function_body, position, source);
5204 position += function_body.width;
5205 let semicolon = EditableSyntax.from_json(
5206 json.methodish_semicolon, position, source);
5207 position += semicolon.width;
5208 return new MethodishDeclaration(
5210 function_decl_header,
5216 if (MethodishDeclaration._children_keys == null)
5217 MethodishDeclaration._children_keys = [
5219 'function_decl_header',
5222 return MethodishDeclaration._children_keys;
5225 class ClassishDeclaration extends EditableSyntax
5239 super('classish_declaration', {
5240 attribute: attribute,
5241 modifiers: modifiers,
5244 type_parameters: type_parameters,
5245 extends_keyword: extends_keyword,
5246 extends_list: extends_list,
5247 implements_keyword: implements_keyword,
5248 implements_list: implements_list,
5251 get attribute() { return this.children.attribute; }
5252 get modifiers() { return this.children.modifiers; }
5253 get keyword() { return this.children.keyword; }
5254 get name() { return this.children.name; }
5255 get type_parameters() { return this.children.type_parameters; }
5256 get extends_keyword() { return this.children.extends_keyword; }
5257 get extends_list() { return this.children.extends_list; }
5258 get implements_keyword() { return this.children.implements_keyword; }
5259 get implements_list() { return this.children.implements_list; }
5260 get body() { return this.children.body; }
5261 with_attribute(attribute){
5262 return new ClassishDeclaration(
5267 this.type_parameters,
5268 this.extends_keyword,
5270 this.implements_keyword,
5271 this.implements_list,
5274 with_modifiers(modifiers){
5275 return new ClassishDeclaration(
5280 this.type_parameters,
5281 this.extends_keyword,
5283 this.implements_keyword,
5284 this.implements_list,
5287 with_keyword(keyword){
5288 return new ClassishDeclaration(
5293 this.type_parameters,
5294 this.extends_keyword,
5296 this.implements_keyword,
5297 this.implements_list,
5301 return new ClassishDeclaration(
5306 this.type_parameters,
5307 this.extends_keyword,
5309 this.implements_keyword,
5310 this.implements_list,
5313 with_type_parameters(type_parameters){
5314 return new ClassishDeclaration(
5320 this.extends_keyword,
5322 this.implements_keyword,
5323 this.implements_list,
5326 with_extends_keyword(extends_keyword){
5327 return new ClassishDeclaration(
5332 this.type_parameters,
5335 this.implements_keyword,
5336 this.implements_list,
5339 with_extends_list(extends_list){
5340 return new ClassishDeclaration(
5345 this.type_parameters,
5346 this.extends_keyword,
5348 this.implements_keyword,
5349 this.implements_list,
5352 with_implements_keyword(implements_keyword){
5353 return new ClassishDeclaration(
5358 this.type_parameters,
5359 this.extends_keyword,
5362 this.implements_list,
5365 with_implements_list(implements_list){
5366 return new ClassishDeclaration(
5371 this.type_parameters,
5372 this.extends_keyword,
5374 this.implements_keyword,
5379 return new ClassishDeclaration(
5384 this.type_parameters,
5385 this.extends_keyword,
5387 this.implements_keyword,
5388 this.implements_list,
5391 rewrite(rewriter, parents)
5393 if (parents == undefined)
5395 let new_parents = parents.slice();
5396 new_parents.push(this);
5397 var attribute = this.attribute.rewrite(rewriter, new_parents);
5398 var modifiers = this.modifiers.rewrite(rewriter, new_parents);
5399 var keyword = this.keyword.rewrite(rewriter, new_parents);
5400 var name = this.name.rewrite(rewriter, new_parents);
5401 var type_parameters = this.type_parameters.rewrite(rewriter, new_parents);
5402 var extends_keyword = this.extends_keyword.rewrite(rewriter, new_parents);
5403 var extends_list = this.extends_list.rewrite(rewriter, new_parents);
5404 var implements_keyword = this.implements_keyword.rewrite(rewriter, new_parents);
5405 var implements_list = this.implements_list.rewrite(rewriter, new_parents);
5406 var body = this.body.rewrite(rewriter, new_parents);
5408 attribute === this.attribute &&
5409 modifiers === this.modifiers &&
5410 keyword === this.keyword &&
5411 name === this.name &&
5412 type_parameters === this.type_parameters &&
5413 extends_keyword === this.extends_keyword &&
5414 extends_list === this.extends_list &&
5415 implements_keyword === this.implements_keyword &&
5416 implements_list === this.implements_list &&
5419 return rewriter(this, parents);
5423 return rewriter(new ClassishDeclaration(
5436 static from_json(json, position, source)
5438 let attribute = EditableSyntax.from_json(
5439 json.classish_attribute, position, source);
5440 position += attribute.width;
5441 let modifiers = EditableSyntax.from_json(
5442 json.classish_modifiers, position, source);
5443 position += modifiers.width;
5444 let keyword = EditableSyntax.from_json(
5445 json.classish_keyword, position, source);
5446 position += keyword.width;
5447 let name = EditableSyntax.from_json(
5448 json.classish_name, position, source);
5449 position += name.width;
5450 let type_parameters = EditableSyntax.from_json(
5451 json.classish_type_parameters, position, source);
5452 position += type_parameters.width;
5453 let extends_keyword = EditableSyntax.from_json(
5454 json.classish_extends_keyword, position, source);
5455 position += extends_keyword.width;
5456 let extends_list = EditableSyntax.from_json(
5457 json.classish_extends_list, position, source);
5458 position += extends_list.width;
5459 let implements_keyword = EditableSyntax.from_json(
5460 json.classish_implements_keyword, position, source);
5461 position += implements_keyword.width;
5462 let implements_list = EditableSyntax.from_json(
5463 json.classish_implements_list, position, source);
5464 position += implements_list.width;
5465 let body = EditableSyntax.from_json(
5466 json.classish_body, position, source);
5467 position += body.width;
5468 return new ClassishDeclaration(
5482 if (ClassishDeclaration._children_keys == null)
5483 ClassishDeclaration._children_keys = [
5491 'implements_keyword',
5494 return ClassishDeclaration._children_keys;
5497 class ClassishBody extends EditableSyntax
5504 super('classish_body', {
5505 left_brace: left_brace,
5507 right_brace: right_brace });
5509 get left_brace() { return this.children.left_brace; }
5510 get elements() { return this.children.elements; }
5511 get right_brace() { return this.children.right_brace; }
5512 with_left_brace(left_brace){
5513 return new ClassishBody(
5518 with_elements(elements){
5519 return new ClassishBody(
5524 with_right_brace(right_brace){
5525 return new ClassishBody(
5530 rewrite(rewriter, parents)
5532 if (parents == undefined)
5534 let new_parents = parents.slice();
5535 new_parents.push(this);
5536 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
5537 var elements = this.elements.rewrite(rewriter, new_parents);
5538 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
5540 left_brace === this.left_brace &&
5541 elements === this.elements &&
5542 right_brace === this.right_brace)
5544 return rewriter(this, parents);
5548 return rewriter(new ClassishBody(
5551 right_brace), parents);
5554 static from_json(json, position, source)
5556 let left_brace = EditableSyntax.from_json(
5557 json.classish_body_left_brace, position, source);
5558 position += left_brace.width;
5559 let elements = EditableSyntax.from_json(
5560 json.classish_body_elements, position, source);
5561 position += elements.width;
5562 let right_brace = EditableSyntax.from_json(
5563 json.classish_body_right_brace, position, source);
5564 position += right_brace.width;
5565 return new ClassishBody(
5572 if (ClassishBody._children_keys == null)
5573 ClassishBody._children_keys = [
5577 return ClassishBody._children_keys;
5580 class TraitUsePrecedenceItem extends EditableSyntax
5587 super('trait_use_precedence_item', {
5590 removed_names: removed_names });
5592 get name() { return this.children.name; }
5593 get keyword() { return this.children.keyword; }
5594 get removed_names() { return this.children.removed_names; }
5596 return new TraitUsePrecedenceItem(
5599 this.removed_names);
5601 with_keyword(keyword){
5602 return new TraitUsePrecedenceItem(
5605 this.removed_names);
5607 with_removed_names(removed_names){
5608 return new TraitUsePrecedenceItem(
5613 rewrite(rewriter, parents)
5615 if (parents == undefined)
5617 let new_parents = parents.slice();
5618 new_parents.push(this);
5619 var name = this.name.rewrite(rewriter, new_parents);
5620 var keyword = this.keyword.rewrite(rewriter, new_parents);
5621 var removed_names = this.removed_names.rewrite(rewriter, new_parents);
5623 name === this.name &&
5624 keyword === this.keyword &&
5625 removed_names === this.removed_names)
5627 return rewriter(this, parents);
5631 return rewriter(new TraitUsePrecedenceItem(
5634 removed_names), parents);
5637 static from_json(json, position, source)
5639 let name = EditableSyntax.from_json(
5640 json.trait_use_precedence_item_name, position, source);
5641 position += name.width;
5642 let keyword = EditableSyntax.from_json(
5643 json.trait_use_precedence_item_keyword, position, source);
5644 position += keyword.width;
5645 let removed_names = EditableSyntax.from_json(
5646 json.trait_use_precedence_item_removed_names, position, source);
5647 position += removed_names.width;
5648 return new TraitUsePrecedenceItem(
5655 if (TraitUsePrecedenceItem._children_keys == null)
5656 TraitUsePrecedenceItem._children_keys = [
5660 return TraitUsePrecedenceItem._children_keys;
5663 class TraitUseAliasItem extends EditableSyntax
5671 super('trait_use_alias_item', {
5672 aliasing_name: aliasing_name,
5674 modifiers: modifiers,
5675 aliased_name: aliased_name });
5677 get aliasing_name() { return this.children.aliasing_name; }
5678 get keyword() { return this.children.keyword; }
5679 get modifiers() { return this.children.modifiers; }
5680 get aliased_name() { return this.children.aliased_name; }
5681 with_aliasing_name(aliasing_name){
5682 return new TraitUseAliasItem(
5688 with_keyword(keyword){
5689 return new TraitUseAliasItem(
5695 with_modifiers(modifiers){
5696 return new TraitUseAliasItem(
5702 with_aliased_name(aliased_name){
5703 return new TraitUseAliasItem(
5709 rewrite(rewriter, parents)
5711 if (parents == undefined)
5713 let new_parents = parents.slice();
5714 new_parents.push(this);
5715 var aliasing_name = this.aliasing_name.rewrite(rewriter, new_parents);
5716 var keyword = this.keyword.rewrite(rewriter, new_parents);
5717 var modifiers = this.modifiers.rewrite(rewriter, new_parents);
5718 var aliased_name = this.aliased_name.rewrite(rewriter, new_parents);
5720 aliasing_name === this.aliasing_name &&
5721 keyword === this.keyword &&
5722 modifiers === this.modifiers &&
5723 aliased_name === this.aliased_name)
5725 return rewriter(this, parents);
5729 return rewriter(new TraitUseAliasItem(
5733 aliased_name), parents);
5736 static from_json(json, position, source)
5738 let aliasing_name = EditableSyntax.from_json(
5739 json.trait_use_alias_item_aliasing_name, position, source);
5740 position += aliasing_name.width;
5741 let keyword = EditableSyntax.from_json(
5742 json.trait_use_alias_item_keyword, position, source);
5743 position += keyword.width;
5744 let modifiers = EditableSyntax.from_json(
5745 json.trait_use_alias_item_modifiers, position, source);
5746 position += modifiers.width;
5747 let aliased_name = EditableSyntax.from_json(
5748 json.trait_use_alias_item_aliased_name, position, source);
5749 position += aliased_name.width;
5750 return new TraitUseAliasItem(
5758 if (TraitUseAliasItem._children_keys == null)
5759 TraitUseAliasItem._children_keys = [
5764 return TraitUseAliasItem._children_keys;
5767 class TraitUseConflictResolution extends EditableSyntax
5776 super('trait_use_conflict_resolution', {
5779 left_brace: left_brace,
5781 right_brace: right_brace });
5783 get keyword() { return this.children.keyword; }
5784 get names() { return this.children.names; }
5785 get left_brace() { return this.children.left_brace; }
5786 get clauses() { return this.children.clauses; }
5787 get right_brace() { return this.children.right_brace; }
5788 with_keyword(keyword){
5789 return new TraitUseConflictResolution(
5797 return new TraitUseConflictResolution(
5804 with_left_brace(left_brace){
5805 return new TraitUseConflictResolution(
5812 with_clauses(clauses){
5813 return new TraitUseConflictResolution(
5820 with_right_brace(right_brace){
5821 return new TraitUseConflictResolution(
5828 rewrite(rewriter, parents)
5830 if (parents == undefined)
5832 let new_parents = parents.slice();
5833 new_parents.push(this);
5834 var keyword = this.keyword.rewrite(rewriter, new_parents);
5835 var names = this.names.rewrite(rewriter, new_parents);
5836 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
5837 var clauses = this.clauses.rewrite(rewriter, new_parents);
5838 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
5840 keyword === this.keyword &&
5841 names === this.names &&
5842 left_brace === this.left_brace &&
5843 clauses === this.clauses &&
5844 right_brace === this.right_brace)
5846 return rewriter(this, parents);
5850 return rewriter(new TraitUseConflictResolution(
5855 right_brace), parents);
5858 static from_json(json, position, source)
5860 let keyword = EditableSyntax.from_json(
5861 json.trait_use_conflict_resolution_keyword, position, source);
5862 position += keyword.width;
5863 let names = EditableSyntax.from_json(
5864 json.trait_use_conflict_resolution_names, position, source);
5865 position += names.width;
5866 let left_brace = EditableSyntax.from_json(
5867 json.trait_use_conflict_resolution_left_brace, position, source);
5868 position += left_brace.width;
5869 let clauses = EditableSyntax.from_json(
5870 json.trait_use_conflict_resolution_clauses, position, source);
5871 position += clauses.width;
5872 let right_brace = EditableSyntax.from_json(
5873 json.trait_use_conflict_resolution_right_brace, position, source);
5874 position += right_brace.width;
5875 return new TraitUseConflictResolution(
5884 if (TraitUseConflictResolution._children_keys == null)
5885 TraitUseConflictResolution._children_keys = [
5891 return TraitUseConflictResolution._children_keys;
5894 class TraitUse extends EditableSyntax
5901 super('trait_use', {
5904 semicolon: semicolon });
5906 get keyword() { return this.children.keyword; }
5907 get names() { return this.children.names; }
5908 get semicolon() { return this.children.semicolon; }
5909 with_keyword(keyword){
5910 return new TraitUse(
5916 return new TraitUse(
5921 with_semicolon(semicolon){
5922 return new TraitUse(
5927 rewrite(rewriter, parents)
5929 if (parents == undefined)
5931 let new_parents = parents.slice();
5932 new_parents.push(this);
5933 var keyword = this.keyword.rewrite(rewriter, new_parents);
5934 var names = this.names.rewrite(rewriter, new_parents);
5935 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
5937 keyword === this.keyword &&
5938 names === this.names &&
5939 semicolon === this.semicolon)
5941 return rewriter(this, parents);
5945 return rewriter(new TraitUse(
5948 semicolon), parents);
5951 static from_json(json, position, source)
5953 let keyword = EditableSyntax.from_json(
5954 json.trait_use_keyword, position, source);
5955 position += keyword.width;
5956 let names = EditableSyntax.from_json(
5957 json.trait_use_names, position, source);
5958 position += names.width;
5959 let semicolon = EditableSyntax.from_json(
5960 json.trait_use_semicolon, position, source);
5961 position += semicolon.width;
5962 return new TraitUse(
5969 if (TraitUse._children_keys == null)
5970 TraitUse._children_keys = [
5974 return TraitUse._children_keys;
5977 class RequireClause extends EditableSyntax
5985 super('require_clause', {
5989 semicolon: semicolon });
5991 get keyword() { return this.children.keyword; }
5992 get kind() { return this.children.kind; }
5993 get name() { return this.children.name; }
5994 get semicolon() { return this.children.semicolon; }
5995 with_keyword(keyword){
5996 return new RequireClause(
6003 return new RequireClause(
6010 return new RequireClause(
6016 with_semicolon(semicolon){
6017 return new RequireClause(
6023 rewrite(rewriter, parents)
6025 if (parents == undefined)
6027 let new_parents = parents.slice();
6028 new_parents.push(this);
6029 var keyword = this.keyword.rewrite(rewriter, new_parents);
6030 var kind = this.kind.rewrite(rewriter, new_parents);
6031 var name = this.name.rewrite(rewriter, new_parents);
6032 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
6034 keyword === this.keyword &&
6035 kind === this.kind &&
6036 name === this.name &&
6037 semicolon === this.semicolon)
6039 return rewriter(this, parents);
6043 return rewriter(new RequireClause(
6047 semicolon), parents);
6050 static from_json(json, position, source)
6052 let keyword = EditableSyntax.from_json(
6053 json.require_keyword, position, source);
6054 position += keyword.width;
6055 let kind = EditableSyntax.from_json(
6056 json.require_kind, position, source);
6057 position += kind.width;
6058 let name = EditableSyntax.from_json(
6059 json.require_name, position, source);
6060 position += name.width;
6061 let semicolon = EditableSyntax.from_json(
6062 json.require_semicolon, position, source);
6063 position += semicolon.width;
6064 return new RequireClause(
6072 if (RequireClause._children_keys == null)
6073 RequireClause._children_keys = [
6078 return RequireClause._children_keys;
6081 class ConstDeclaration extends EditableSyntax
6090 super('const_declaration', {
6093 type_specifier: type_specifier,
6094 declarators: declarators,
6095 semicolon: semicolon });
6097 get abstract() { return this.children.abstract; }
6098 get keyword() { return this.children.keyword; }
6099 get type_specifier() { return this.children.type_specifier; }
6100 get declarators() { return this.children.declarators; }
6101 get semicolon() { return this.children.semicolon; }
6102 with_abstract(abstract){
6103 return new ConstDeclaration(
6106 this.type_specifier,
6110 with_keyword(keyword){
6111 return new ConstDeclaration(
6114 this.type_specifier,
6118 with_type_specifier(type_specifier){
6119 return new ConstDeclaration(
6126 with_declarators(declarators){
6127 return new ConstDeclaration(
6130 this.type_specifier,
6134 with_semicolon(semicolon){
6135 return new ConstDeclaration(
6138 this.type_specifier,
6142 rewrite(rewriter, parents)
6144 if (parents == undefined)
6146 let new_parents = parents.slice();
6147 new_parents.push(this);
6148 var abstract = this.abstract.rewrite(rewriter, new_parents);
6149 var keyword = this.keyword.rewrite(rewriter, new_parents);
6150 var type_specifier = this.type_specifier.rewrite(rewriter, new_parents);
6151 var declarators = this.declarators.rewrite(rewriter, new_parents);
6152 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
6154 abstract === this.abstract &&
6155 keyword === this.keyword &&
6156 type_specifier === this.type_specifier &&
6157 declarators === this.declarators &&
6158 semicolon === this.semicolon)
6160 return rewriter(this, parents);
6164 return rewriter(new ConstDeclaration(
6169 semicolon), parents);
6172 static from_json(json, position, source)
6174 let abstract = EditableSyntax.from_json(
6175 json.const_abstract, position, source);
6176 position += abstract.width;
6177 let keyword = EditableSyntax.from_json(
6178 json.const_keyword, position, source);
6179 position += keyword.width;
6180 let type_specifier = EditableSyntax.from_json(
6181 json.const_type_specifier, position, source);
6182 position += type_specifier.width;
6183 let declarators = EditableSyntax.from_json(
6184 json.const_declarators, position, source);
6185 position += declarators.width;
6186 let semicolon = EditableSyntax.from_json(
6187 json.const_semicolon, position, source);
6188 position += semicolon.width;
6189 return new ConstDeclaration(
6198 if (ConstDeclaration._children_keys == null)
6199 ConstDeclaration._children_keys = [
6205 return ConstDeclaration._children_keys;
6208 class ConstantDeclarator extends EditableSyntax
6214 super('constant_declarator', {
6216 initializer: initializer });
6218 get name() { return this.children.name; }
6219 get initializer() { return this.children.initializer; }
6221 return new ConstantDeclarator(
6225 with_initializer(initializer){
6226 return new ConstantDeclarator(
6230 rewrite(rewriter, parents)
6232 if (parents == undefined)
6234 let new_parents = parents.slice();
6235 new_parents.push(this);
6236 var name = this.name.rewrite(rewriter, new_parents);
6237 var initializer = this.initializer.rewrite(rewriter, new_parents);
6239 name === this.name &&
6240 initializer === this.initializer)
6242 return rewriter(this, parents);
6246 return rewriter(new ConstantDeclarator(
6248 initializer), parents);
6251 static from_json(json, position, source)
6253 let name = EditableSyntax.from_json(
6254 json.constant_declarator_name, position, source);
6255 position += name.width;
6256 let initializer = EditableSyntax.from_json(
6257 json.constant_declarator_initializer, position, source);
6258 position += initializer.width;
6259 return new ConstantDeclarator(
6265 if (ConstantDeclarator._children_keys == null)
6266 ConstantDeclarator._children_keys = [
6269 return ConstantDeclarator._children_keys;
6272 class TypeConstDeclaration extends EditableSyntax
6285 super('type_const_declaration', {
6288 type_keyword: type_keyword,
6290 type_parameters: type_parameters,
6291 type_constraint: type_constraint,
6293 type_specifier: type_specifier,
6294 semicolon: semicolon });
6296 get abstract() { return this.children.abstract; }
6297 get keyword() { return this.children.keyword; }
6298 get type_keyword() { return this.children.type_keyword; }
6299 get name() { return this.children.name; }
6300 get type_parameters() { return this.children.type_parameters; }
6301 get type_constraint() { return this.children.type_constraint; }
6302 get equal() { return this.children.equal; }
6303 get type_specifier() { return this.children.type_specifier; }
6304 get semicolon() { return this.children.semicolon; }
6305 with_abstract(abstract){
6306 return new TypeConstDeclaration(
6311 this.type_parameters,
6312 this.type_constraint,
6314 this.type_specifier,
6317 with_keyword(keyword){
6318 return new TypeConstDeclaration(
6323 this.type_parameters,
6324 this.type_constraint,
6326 this.type_specifier,
6329 with_type_keyword(type_keyword){
6330 return new TypeConstDeclaration(
6335 this.type_parameters,
6336 this.type_constraint,
6338 this.type_specifier,
6342 return new TypeConstDeclaration(
6347 this.type_parameters,
6348 this.type_constraint,
6350 this.type_specifier,
6353 with_type_parameters(type_parameters){
6354 return new TypeConstDeclaration(
6360 this.type_constraint,
6362 this.type_specifier,
6365 with_type_constraint(type_constraint){
6366 return new TypeConstDeclaration(
6371 this.type_parameters,
6374 this.type_specifier,
6378 return new TypeConstDeclaration(
6383 this.type_parameters,
6384 this.type_constraint,
6386 this.type_specifier,
6389 with_type_specifier(type_specifier){
6390 return new TypeConstDeclaration(
6395 this.type_parameters,
6396 this.type_constraint,
6401 with_semicolon(semicolon){
6402 return new TypeConstDeclaration(
6407 this.type_parameters,
6408 this.type_constraint,
6410 this.type_specifier,
6413 rewrite(rewriter, parents)
6415 if (parents == undefined)
6417 let new_parents = parents.slice();
6418 new_parents.push(this);
6419 var abstract = this.abstract.rewrite(rewriter, new_parents);
6420 var keyword = this.keyword.rewrite(rewriter, new_parents);
6421 var type_keyword = this.type_keyword.rewrite(rewriter, new_parents);
6422 var name = this.name.rewrite(rewriter, new_parents);
6423 var type_parameters = this.type_parameters.rewrite(rewriter, new_parents);
6424 var type_constraint = this.type_constraint.rewrite(rewriter, new_parents);
6425 var equal = this.equal.rewrite(rewriter, new_parents);
6426 var type_specifier = this.type_specifier.rewrite(rewriter, new_parents);
6427 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
6429 abstract === this.abstract &&
6430 keyword === this.keyword &&
6431 type_keyword === this.type_keyword &&
6432 name === this.name &&
6433 type_parameters === this.type_parameters &&
6434 type_constraint === this.type_constraint &&
6435 equal === this.equal &&
6436 type_specifier === this.type_specifier &&
6437 semicolon === this.semicolon)
6439 return rewriter(this, parents);
6443 return rewriter(new TypeConstDeclaration(
6452 semicolon), parents);
6455 static from_json(json, position, source)
6457 let abstract = EditableSyntax.from_json(
6458 json.type_const_abstract, position, source);
6459 position += abstract.width;
6460 let keyword = EditableSyntax.from_json(
6461 json.type_const_keyword, position, source);
6462 position += keyword.width;
6463 let type_keyword = EditableSyntax.from_json(
6464 json.type_const_type_keyword, position, source);
6465 position += type_keyword.width;
6466 let name = EditableSyntax.from_json(
6467 json.type_const_name, position, source);
6468 position += name.width;
6469 let type_parameters = EditableSyntax.from_json(
6470 json.type_const_type_parameters, position, source);
6471 position += type_parameters.width;
6472 let type_constraint = EditableSyntax.from_json(
6473 json.type_const_type_constraint, position, source);
6474 position += type_constraint.width;
6475 let equal = EditableSyntax.from_json(
6476 json.type_const_equal, position, source);
6477 position += equal.width;
6478 let type_specifier = EditableSyntax.from_json(
6479 json.type_const_type_specifier, position, source);
6480 position += type_specifier.width;
6481 let semicolon = EditableSyntax.from_json(
6482 json.type_const_semicolon, position, source);
6483 position += semicolon.width;
6484 return new TypeConstDeclaration(
6497 if (TypeConstDeclaration._children_keys == null)
6498 TypeConstDeclaration._children_keys = [
6508 return TypeConstDeclaration._children_keys;
6511 class DecoratedExpression extends EditableSyntax
6517 super('decorated_expression', {
6518 decorator: decorator,
6519 expression: expression });
6521 get decorator() { return this.children.decorator; }
6522 get expression() { return this.children.expression; }
6523 with_decorator(decorator){
6524 return new DecoratedExpression(
6528 with_expression(expression){
6529 return new DecoratedExpression(
6533 rewrite(rewriter, parents)
6535 if (parents == undefined)
6537 let new_parents = parents.slice();
6538 new_parents.push(this);
6539 var decorator = this.decorator.rewrite(rewriter, new_parents);
6540 var expression = this.expression.rewrite(rewriter, new_parents);
6542 decorator === this.decorator &&
6543 expression === this.expression)
6545 return rewriter(this, parents);
6549 return rewriter(new DecoratedExpression(
6551 expression), parents);
6554 static from_json(json, position, source)
6556 let decorator = EditableSyntax.from_json(
6557 json.decorated_expression_decorator, position, source);
6558 position += decorator.width;
6559 let expression = EditableSyntax.from_json(
6560 json.decorated_expression_expression, position, source);
6561 position += expression.width;
6562 return new DecoratedExpression(
6568 if (DecoratedExpression._children_keys == null)
6569 DecoratedExpression._children_keys = [
6572 return DecoratedExpression._children_keys;
6575 class ParameterDeclaration extends EditableSyntax
6585 super('parameter_declaration', {
6586 attribute: attribute,
6587 visibility: visibility,
6588 call_convention: call_convention,
6591 default_value: default_value });
6593 get attribute() { return this.children.attribute; }
6594 get visibility() { return this.children.visibility; }
6595 get call_convention() { return this.children.call_convention; }
6596 get type() { return this.children.type; }
6597 get name() { return this.children.name; }
6598 get default_value() { return this.children.default_value; }
6599 with_attribute(attribute){
6600 return new ParameterDeclaration(
6603 this.call_convention,
6606 this.default_value);
6608 with_visibility(visibility){
6609 return new ParameterDeclaration(
6612 this.call_convention,
6615 this.default_value);
6617 with_call_convention(call_convention){
6618 return new ParameterDeclaration(
6624 this.default_value);
6627 return new ParameterDeclaration(
6630 this.call_convention,
6633 this.default_value);
6636 return new ParameterDeclaration(
6639 this.call_convention,
6642 this.default_value);
6644 with_default_value(default_value){
6645 return new ParameterDeclaration(
6648 this.call_convention,
6653 rewrite(rewriter, parents)
6655 if (parents == undefined)
6657 let new_parents = parents.slice();
6658 new_parents.push(this);
6659 var attribute = this.attribute.rewrite(rewriter, new_parents);
6660 var visibility = this.visibility.rewrite(rewriter, new_parents);
6661 var call_convention = this.call_convention.rewrite(rewriter, new_parents);
6662 var type = this.type.rewrite(rewriter, new_parents);
6663 var name = this.name.rewrite(rewriter, new_parents);
6664 var default_value = this.default_value.rewrite(rewriter, new_parents);
6666 attribute === this.attribute &&
6667 visibility === this.visibility &&
6668 call_convention === this.call_convention &&
6669 type === this.type &&
6670 name === this.name &&
6671 default_value === this.default_value)
6673 return rewriter(this, parents);
6677 return rewriter(new ParameterDeclaration(
6683 default_value), parents);
6686 static from_json(json, position, source)
6688 let attribute = EditableSyntax.from_json(
6689 json.parameter_attribute, position, source);
6690 position += attribute.width;
6691 let visibility = EditableSyntax.from_json(
6692 json.parameter_visibility, position, source);
6693 position += visibility.width;
6694 let call_convention = EditableSyntax.from_json(
6695 json.parameter_call_convention, position, source);
6696 position += call_convention.width;
6697 let type = EditableSyntax.from_json(
6698 json.parameter_type, position, source);
6699 position += type.width;
6700 let name = EditableSyntax.from_json(
6701 json.parameter_name, position, source);
6702 position += name.width;
6703 let default_value = EditableSyntax.from_json(
6704 json.parameter_default_value, position, source);
6705 position += default_value.width;
6706 return new ParameterDeclaration(
6716 if (ParameterDeclaration._children_keys == null)
6717 ParameterDeclaration._children_keys = [
6724 return ParameterDeclaration._children_keys;
6727 class VariadicParameter extends EditableSyntax
6734 super('variadic_parameter', {
6735 call_convention: call_convention,
6737 ellipsis: ellipsis });
6739 get call_convention() { return this.children.call_convention; }
6740 get type() { return this.children.type; }
6741 get ellipsis() { return this.children.ellipsis; }
6742 with_call_convention(call_convention){
6743 return new VariadicParameter(
6749 return new VariadicParameter(
6750 this.call_convention,
6754 with_ellipsis(ellipsis){
6755 return new VariadicParameter(
6756 this.call_convention,
6760 rewrite(rewriter, parents)
6762 if (parents == undefined)
6764 let new_parents = parents.slice();
6765 new_parents.push(this);
6766 var call_convention = this.call_convention.rewrite(rewriter, new_parents);
6767 var type = this.type.rewrite(rewriter, new_parents);
6768 var ellipsis = this.ellipsis.rewrite(rewriter, new_parents);
6770 call_convention === this.call_convention &&
6771 type === this.type &&
6772 ellipsis === this.ellipsis)
6774 return rewriter(this, parents);
6778 return rewriter(new VariadicParameter(
6781 ellipsis), parents);
6784 static from_json(json, position, source)
6786 let call_convention = EditableSyntax.from_json(
6787 json.variadic_parameter_call_convention, position, source);
6788 position += call_convention.width;
6789 let type = EditableSyntax.from_json(
6790 json.variadic_parameter_type, position, source);
6791 position += type.width;
6792 let ellipsis = EditableSyntax.from_json(
6793 json.variadic_parameter_ellipsis, position, source);
6794 position += ellipsis.width;
6795 return new VariadicParameter(
6802 if (VariadicParameter._children_keys == null)
6803 VariadicParameter._children_keys = [
6807 return VariadicParameter._children_keys;
6810 class AttributeSpecification extends EditableSyntax
6817 super('attribute_specification', {
6818 left_double_angle: left_double_angle,
6819 attributes: attributes,
6820 right_double_angle: right_double_angle });
6822 get left_double_angle() { return this.children.left_double_angle; }
6823 get attributes() { return this.children.attributes; }
6824 get right_double_angle() { return this.children.right_double_angle; }
6825 with_left_double_angle(left_double_angle){
6826 return new AttributeSpecification(
6829 this.right_double_angle);
6831 with_attributes(attributes){
6832 return new AttributeSpecification(
6833 this.left_double_angle,
6835 this.right_double_angle);
6837 with_right_double_angle(right_double_angle){
6838 return new AttributeSpecification(
6839 this.left_double_angle,
6841 right_double_angle);
6843 rewrite(rewriter, parents)
6845 if (parents == undefined)
6847 let new_parents = parents.slice();
6848 new_parents.push(this);
6849 var left_double_angle = this.left_double_angle.rewrite(rewriter, new_parents);
6850 var attributes = this.attributes.rewrite(rewriter, new_parents);
6851 var right_double_angle = this.right_double_angle.rewrite(rewriter, new_parents);
6853 left_double_angle === this.left_double_angle &&
6854 attributes === this.attributes &&
6855 right_double_angle === this.right_double_angle)
6857 return rewriter(this, parents);
6861 return rewriter(new AttributeSpecification(
6864 right_double_angle), parents);
6867 static from_json(json, position, source)
6869 let left_double_angle = EditableSyntax.from_json(
6870 json.attribute_specification_left_double_angle, position, source);
6871 position += left_double_angle.width;
6872 let attributes = EditableSyntax.from_json(
6873 json.attribute_specification_attributes, position, source);
6874 position += attributes.width;
6875 let right_double_angle = EditableSyntax.from_json(
6876 json.attribute_specification_right_double_angle, position, source);
6877 position += right_double_angle.width;
6878 return new AttributeSpecification(
6881 right_double_angle);
6885 if (AttributeSpecification._children_keys == null)
6886 AttributeSpecification._children_keys = [
6887 'left_double_angle',
6889 'right_double_angle'];
6890 return AttributeSpecification._children_keys;
6893 class Attribute extends EditableSyntax
6901 super('attribute', {
6903 left_paren: left_paren,
6905 right_paren: right_paren });
6907 get name() { return this.children.name; }
6908 get left_paren() { return this.children.left_paren; }
6909 get values() { return this.children.values; }
6910 get right_paren() { return this.children.right_paren; }
6912 return new Attribute(
6918 with_left_paren(left_paren){
6919 return new Attribute(
6925 with_values(values){
6926 return new Attribute(
6932 with_right_paren(right_paren){
6933 return new Attribute(
6939 rewrite(rewriter, parents)
6941 if (parents == undefined)
6943 let new_parents = parents.slice();
6944 new_parents.push(this);
6945 var name = this.name.rewrite(rewriter, new_parents);
6946 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
6947 var values = this.values.rewrite(rewriter, new_parents);
6948 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
6950 name === this.name &&
6951 left_paren === this.left_paren &&
6952 values === this.values &&
6953 right_paren === this.right_paren)
6955 return rewriter(this, parents);
6959 return rewriter(new Attribute(
6963 right_paren), parents);
6966 static from_json(json, position, source)
6968 let name = EditableSyntax.from_json(
6969 json.attribute_name, position, source);
6970 position += name.width;
6971 let left_paren = EditableSyntax.from_json(
6972 json.attribute_left_paren, position, source);
6973 position += left_paren.width;
6974 let values = EditableSyntax.from_json(
6975 json.attribute_values, position, source);
6976 position += values.width;
6977 let right_paren = EditableSyntax.from_json(
6978 json.attribute_right_paren, position, source);
6979 position += right_paren.width;
6980 return new Attribute(
6988 if (Attribute._children_keys == null)
6989 Attribute._children_keys = [
6994 return Attribute._children_keys;
6997 class InclusionExpression extends EditableSyntax
7003 super('inclusion_expression', {
7005 filename: filename });
7007 get require() { return this.children.require; }
7008 get filename() { return this.children.filename; }
7009 with_require(require){
7010 return new InclusionExpression(
7014 with_filename(filename){
7015 return new InclusionExpression(
7019 rewrite(rewriter, parents)
7021 if (parents == undefined)
7023 let new_parents = parents.slice();
7024 new_parents.push(this);
7025 var require = this.require.rewrite(rewriter, new_parents);
7026 var filename = this.filename.rewrite(rewriter, new_parents);
7028 require === this.require &&
7029 filename === this.filename)
7031 return rewriter(this, parents);
7035 return rewriter(new InclusionExpression(
7037 filename), parents);
7040 static from_json(json, position, source)
7042 let require = EditableSyntax.from_json(
7043 json.inclusion_require, position, source);
7044 position += require.width;
7045 let filename = EditableSyntax.from_json(
7046 json.inclusion_filename, position, source);
7047 position += filename.width;
7048 return new InclusionExpression(
7054 if (InclusionExpression._children_keys == null)
7055 InclusionExpression._children_keys = [
7058 return InclusionExpression._children_keys;
7061 class InclusionDirective extends EditableSyntax
7067 super('inclusion_directive', {
7068 expression: expression,
7069 semicolon: semicolon });
7071 get expression() { return this.children.expression; }
7072 get semicolon() { return this.children.semicolon; }
7073 with_expression(expression){
7074 return new InclusionDirective(
7078 with_semicolon(semicolon){
7079 return new InclusionDirective(
7083 rewrite(rewriter, parents)
7085 if (parents == undefined)
7087 let new_parents = parents.slice();
7088 new_parents.push(this);
7089 var expression = this.expression.rewrite(rewriter, new_parents);
7090 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
7092 expression === this.expression &&
7093 semicolon === this.semicolon)
7095 return rewriter(this, parents);
7099 return rewriter(new InclusionDirective(
7101 semicolon), parents);
7104 static from_json(json, position, source)
7106 let expression = EditableSyntax.from_json(
7107 json.inclusion_expression, position, source);
7108 position += expression.width;
7109 let semicolon = EditableSyntax.from_json(
7110 json.inclusion_semicolon, position, source);
7111 position += semicolon.width;
7112 return new InclusionDirective(
7118 if (InclusionDirective._children_keys == null)
7119 InclusionDirective._children_keys = [
7122 return InclusionDirective._children_keys;
7125 class CompoundStatement extends EditableSyntax
7132 super('compound_statement', {
7133 left_brace: left_brace,
7134 statements: statements,
7135 right_brace: right_brace });
7137 get left_brace() { return this.children.left_brace; }
7138 get statements() { return this.children.statements; }
7139 get right_brace() { return this.children.right_brace; }
7140 with_left_brace(left_brace){
7141 return new CompoundStatement(
7146 with_statements(statements){
7147 return new CompoundStatement(
7152 with_right_brace(right_brace){
7153 return new CompoundStatement(
7158 rewrite(rewriter, parents)
7160 if (parents == undefined)
7162 let new_parents = parents.slice();
7163 new_parents.push(this);
7164 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
7165 var statements = this.statements.rewrite(rewriter, new_parents);
7166 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
7168 left_brace === this.left_brace &&
7169 statements === this.statements &&
7170 right_brace === this.right_brace)
7172 return rewriter(this, parents);
7176 return rewriter(new CompoundStatement(
7179 right_brace), parents);
7182 static from_json(json, position, source)
7184 let left_brace = EditableSyntax.from_json(
7185 json.compound_left_brace, position, source);
7186 position += left_brace.width;
7187 let statements = EditableSyntax.from_json(
7188 json.compound_statements, position, source);
7189 position += statements.width;
7190 let right_brace = EditableSyntax.from_json(
7191 json.compound_right_brace, position, source);
7192 position += right_brace.width;
7193 return new CompoundStatement(
7200 if (CompoundStatement._children_keys == null)
7201 CompoundStatement._children_keys = [
7205 return CompoundStatement._children_keys;
7208 class AlternateLoopStatement extends EditableSyntax
7216 super('alternate_loop_statement', {
7217 opening_colon: opening_colon,
7218 statements: statements,
7219 closing_keyword: closing_keyword,
7220 closing_semicolon: closing_semicolon });
7222 get opening_colon() { return this.children.opening_colon; }
7223 get statements() { return this.children.statements; }
7224 get closing_keyword() { return this.children.closing_keyword; }
7225 get closing_semicolon() { return this.children.closing_semicolon; }
7226 with_opening_colon(opening_colon){
7227 return new AlternateLoopStatement(
7230 this.closing_keyword,
7231 this.closing_semicolon);
7233 with_statements(statements){
7234 return new AlternateLoopStatement(
7237 this.closing_keyword,
7238 this.closing_semicolon);
7240 with_closing_keyword(closing_keyword){
7241 return new AlternateLoopStatement(
7245 this.closing_semicolon);
7247 with_closing_semicolon(closing_semicolon){
7248 return new AlternateLoopStatement(
7251 this.closing_keyword,
7254 rewrite(rewriter, parents)
7256 if (parents == undefined)
7258 let new_parents = parents.slice();
7259 new_parents.push(this);
7260 var opening_colon = this.opening_colon.rewrite(rewriter, new_parents);
7261 var statements = this.statements.rewrite(rewriter, new_parents);
7262 var closing_keyword = this.closing_keyword.rewrite(rewriter, new_parents);
7263 var closing_semicolon = this.closing_semicolon.rewrite(rewriter, new_parents);
7265 opening_colon === this.opening_colon &&
7266 statements === this.statements &&
7267 closing_keyword === this.closing_keyword &&
7268 closing_semicolon === this.closing_semicolon)
7270 return rewriter(this, parents);
7274 return rewriter(new AlternateLoopStatement(
7278 closing_semicolon), parents);
7281 static from_json(json, position, source)
7283 let opening_colon = EditableSyntax.from_json(
7284 json.alternate_loop_opening_colon, position, source);
7285 position += opening_colon.width;
7286 let statements = EditableSyntax.from_json(
7287 json.alternate_loop_statements, position, source);
7288 position += statements.width;
7289 let closing_keyword = EditableSyntax.from_json(
7290 json.alternate_loop_closing_keyword, position, source);
7291 position += closing_keyword.width;
7292 let closing_semicolon = EditableSyntax.from_json(
7293 json.alternate_loop_closing_semicolon, position, source);
7294 position += closing_semicolon.width;
7295 return new AlternateLoopStatement(
7303 if (AlternateLoopStatement._children_keys == null)
7304 AlternateLoopStatement._children_keys = [
7308 'closing_semicolon'];
7309 return AlternateLoopStatement._children_keys;
7312 class ExpressionStatement extends EditableSyntax
7318 super('expression_statement', {
7319 expression: expression,
7320 semicolon: semicolon });
7322 get expression() { return this.children.expression; }
7323 get semicolon() { return this.children.semicolon; }
7324 with_expression(expression){
7325 return new ExpressionStatement(
7329 with_semicolon(semicolon){
7330 return new ExpressionStatement(
7334 rewrite(rewriter, parents)
7336 if (parents == undefined)
7338 let new_parents = parents.slice();
7339 new_parents.push(this);
7340 var expression = this.expression.rewrite(rewriter, new_parents);
7341 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
7343 expression === this.expression &&
7344 semicolon === this.semicolon)
7346 return rewriter(this, parents);
7350 return rewriter(new ExpressionStatement(
7352 semicolon), parents);
7355 static from_json(json, position, source)
7357 let expression = EditableSyntax.from_json(
7358 json.expression_statement_expression, position, source);
7359 position += expression.width;
7360 let semicolon = EditableSyntax.from_json(
7361 json.expression_statement_semicolon, position, source);
7362 position += semicolon.width;
7363 return new ExpressionStatement(
7369 if (ExpressionStatement._children_keys == null)
7370 ExpressionStatement._children_keys = [
7373 return ExpressionStatement._children_keys;
7376 class MarkupSection extends EditableSyntax
7384 super('markup_section', {
7388 expression: expression });
7390 get prefix() { return this.children.prefix; }
7391 get text() { return this.children.text; }
7392 get suffix() { return this.children.suffix; }
7393 get expression() { return this.children.expression; }
7394 with_prefix(prefix){
7395 return new MarkupSection(
7402 return new MarkupSection(
7408 with_suffix(suffix){
7409 return new MarkupSection(
7415 with_expression(expression){
7416 return new MarkupSection(
7422 rewrite(rewriter, parents)
7424 if (parents == undefined)
7426 let new_parents = parents.slice();
7427 new_parents.push(this);
7428 var prefix = this.prefix.rewrite(rewriter, new_parents);
7429 var text = this.text.rewrite(rewriter, new_parents);
7430 var suffix = this.suffix.rewrite(rewriter, new_parents);
7431 var expression = this.expression.rewrite(rewriter, new_parents);
7433 prefix === this.prefix &&
7434 text === this.text &&
7435 suffix === this.suffix &&
7436 expression === this.expression)
7438 return rewriter(this, parents);
7442 return rewriter(new MarkupSection(
7446 expression), parents);
7449 static from_json(json, position, source)
7451 let prefix = EditableSyntax.from_json(
7452 json.markup_prefix, position, source);
7453 position += prefix.width;
7454 let text = EditableSyntax.from_json(
7455 json.markup_text, position, source);
7456 position += text.width;
7457 let suffix = EditableSyntax.from_json(
7458 json.markup_suffix, position, source);
7459 position += suffix.width;
7460 let expression = EditableSyntax.from_json(
7461 json.markup_expression, position, source);
7462 position += expression.width;
7463 return new MarkupSection(
7471 if (MarkupSection._children_keys == null)
7472 MarkupSection._children_keys = [
7477 return MarkupSection._children_keys;
7480 class MarkupSuffix extends EditableSyntax
7486 super('markup_suffix', {
7487 less_than_question: less_than_question,
7490 get less_than_question() { return this.children.less_than_question; }
7491 get name() { return this.children.name; }
7492 with_less_than_question(less_than_question){
7493 return new MarkupSuffix(
7498 return new MarkupSuffix(
7499 this.less_than_question,
7502 rewrite(rewriter, parents)
7504 if (parents == undefined)
7506 let new_parents = parents.slice();
7507 new_parents.push(this);
7508 var less_than_question = this.less_than_question.rewrite(rewriter, new_parents);
7509 var name = this.name.rewrite(rewriter, new_parents);
7511 less_than_question === this.less_than_question &&
7514 return rewriter(this, parents);
7518 return rewriter(new MarkupSuffix(
7523 static from_json(json, position, source)
7525 let less_than_question = EditableSyntax.from_json(
7526 json.markup_suffix_less_than_question, position, source);
7527 position += less_than_question.width;
7528 let name = EditableSyntax.from_json(
7529 json.markup_suffix_name, position, source);
7530 position += name.width;
7531 return new MarkupSuffix(
7537 if (MarkupSuffix._children_keys == null)
7538 MarkupSuffix._children_keys = [
7539 'less_than_question',
7541 return MarkupSuffix._children_keys;
7544 class UnsetStatement extends EditableSyntax
7553 super('unset_statement', {
7555 left_paren: left_paren,
7556 variables: variables,
7557 right_paren: right_paren,
7558 semicolon: semicolon });
7560 get keyword() { return this.children.keyword; }
7561 get left_paren() { return this.children.left_paren; }
7562 get variables() { return this.children.variables; }
7563 get right_paren() { return this.children.right_paren; }
7564 get semicolon() { return this.children.semicolon; }
7565 with_keyword(keyword){
7566 return new UnsetStatement(
7573 with_left_paren(left_paren){
7574 return new UnsetStatement(
7581 with_variables(variables){
7582 return new UnsetStatement(
7589 with_right_paren(right_paren){
7590 return new UnsetStatement(
7597 with_semicolon(semicolon){
7598 return new UnsetStatement(
7605 rewrite(rewriter, parents)
7607 if (parents == undefined)
7609 let new_parents = parents.slice();
7610 new_parents.push(this);
7611 var keyword = this.keyword.rewrite(rewriter, new_parents);
7612 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
7613 var variables = this.variables.rewrite(rewriter, new_parents);
7614 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
7615 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
7617 keyword === this.keyword &&
7618 left_paren === this.left_paren &&
7619 variables === this.variables &&
7620 right_paren === this.right_paren &&
7621 semicolon === this.semicolon)
7623 return rewriter(this, parents);
7627 return rewriter(new UnsetStatement(
7632 semicolon), parents);
7635 static from_json(json, position, source)
7637 let keyword = EditableSyntax.from_json(
7638 json.unset_keyword, position, source);
7639 position += keyword.width;
7640 let left_paren = EditableSyntax.from_json(
7641 json.unset_left_paren, position, source);
7642 position += left_paren.width;
7643 let variables = EditableSyntax.from_json(
7644 json.unset_variables, position, source);
7645 position += variables.width;
7646 let right_paren = EditableSyntax.from_json(
7647 json.unset_right_paren, position, source);
7648 position += right_paren.width;
7649 let semicolon = EditableSyntax.from_json(
7650 json.unset_semicolon, position, source);
7651 position += semicolon.width;
7652 return new UnsetStatement(
7661 if (UnsetStatement._children_keys == null)
7662 UnsetStatement._children_keys = [
7668 return UnsetStatement._children_keys;
7671 class UsingStatementBlockScoped extends EditableSyntax
7681 super('using_statement_block_scoped', {
7682 await_keyword: await_keyword,
7683 using_keyword: using_keyword,
7684 left_paren: left_paren,
7685 expressions: expressions,
7686 right_paren: right_paren,
7689 get await_keyword() { return this.children.await_keyword; }
7690 get using_keyword() { return this.children.using_keyword; }
7691 get left_paren() { return this.children.left_paren; }
7692 get expressions() { return this.children.expressions; }
7693 get right_paren() { return this.children.right_paren; }
7694 get body() { return this.children.body; }
7695 with_await_keyword(await_keyword){
7696 return new UsingStatementBlockScoped(
7704 with_using_keyword(using_keyword){
7705 return new UsingStatementBlockScoped(
7713 with_left_paren(left_paren){
7714 return new UsingStatementBlockScoped(
7722 with_expressions(expressions){
7723 return new UsingStatementBlockScoped(
7731 with_right_paren(right_paren){
7732 return new UsingStatementBlockScoped(
7741 return new UsingStatementBlockScoped(
7749 rewrite(rewriter, parents)
7751 if (parents == undefined)
7753 let new_parents = parents.slice();
7754 new_parents.push(this);
7755 var await_keyword = this.await_keyword.rewrite(rewriter, new_parents);
7756 var using_keyword = this.using_keyword.rewrite(rewriter, new_parents);
7757 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
7758 var expressions = this.expressions.rewrite(rewriter, new_parents);
7759 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
7760 var body = this.body.rewrite(rewriter, new_parents);
7762 await_keyword === this.await_keyword &&
7763 using_keyword === this.using_keyword &&
7764 left_paren === this.left_paren &&
7765 expressions === this.expressions &&
7766 right_paren === this.right_paren &&
7769 return rewriter(this, parents);
7773 return rewriter(new UsingStatementBlockScoped(
7782 static from_json(json, position, source)
7784 let await_keyword = EditableSyntax.from_json(
7785 json.using_block_await_keyword, position, source);
7786 position += await_keyword.width;
7787 let using_keyword = EditableSyntax.from_json(
7788 json.using_block_using_keyword, position, source);
7789 position += using_keyword.width;
7790 let left_paren = EditableSyntax.from_json(
7791 json.using_block_left_paren, position, source);
7792 position += left_paren.width;
7793 let expressions = EditableSyntax.from_json(
7794 json.using_block_expressions, position, source);
7795 position += expressions.width;
7796 let right_paren = EditableSyntax.from_json(
7797 json.using_block_right_paren, position, source);
7798 position += right_paren.width;
7799 let body = EditableSyntax.from_json(
7800 json.using_block_body, position, source);
7801 position += body.width;
7802 return new UsingStatementBlockScoped(
7812 if (UsingStatementBlockScoped._children_keys == null)
7813 UsingStatementBlockScoped._children_keys = [
7820 return UsingStatementBlockScoped._children_keys;
7823 class UsingStatementFunctionScoped extends EditableSyntax
7831 super('using_statement_function_scoped', {
7832 await_keyword: await_keyword,
7833 using_keyword: using_keyword,
7834 expression: expression,
7835 semicolon: semicolon });
7837 get await_keyword() { return this.children.await_keyword; }
7838 get using_keyword() { return this.children.using_keyword; }
7839 get expression() { return this.children.expression; }
7840 get semicolon() { return this.children.semicolon; }
7841 with_await_keyword(await_keyword){
7842 return new UsingStatementFunctionScoped(
7848 with_using_keyword(using_keyword){
7849 return new UsingStatementFunctionScoped(
7855 with_expression(expression){
7856 return new UsingStatementFunctionScoped(
7862 with_semicolon(semicolon){
7863 return new UsingStatementFunctionScoped(
7869 rewrite(rewriter, parents)
7871 if (parents == undefined)
7873 let new_parents = parents.slice();
7874 new_parents.push(this);
7875 var await_keyword = this.await_keyword.rewrite(rewriter, new_parents);
7876 var using_keyword = this.using_keyword.rewrite(rewriter, new_parents);
7877 var expression = this.expression.rewrite(rewriter, new_parents);
7878 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
7880 await_keyword === this.await_keyword &&
7881 using_keyword === this.using_keyword &&
7882 expression === this.expression &&
7883 semicolon === this.semicolon)
7885 return rewriter(this, parents);
7889 return rewriter(new UsingStatementFunctionScoped(
7893 semicolon), parents);
7896 static from_json(json, position, source)
7898 let await_keyword = EditableSyntax.from_json(
7899 json.using_function_await_keyword, position, source);
7900 position += await_keyword.width;
7901 let using_keyword = EditableSyntax.from_json(
7902 json.using_function_using_keyword, position, source);
7903 position += using_keyword.width;
7904 let expression = EditableSyntax.from_json(
7905 json.using_function_expression, position, source);
7906 position += expression.width;
7907 let semicolon = EditableSyntax.from_json(
7908 json.using_function_semicolon, position, source);
7909 position += semicolon.width;
7910 return new UsingStatementFunctionScoped(
7918 if (UsingStatementFunctionScoped._children_keys == null)
7919 UsingStatementFunctionScoped._children_keys = [
7924 return UsingStatementFunctionScoped._children_keys;
7927 class DeclareDirectiveStatement extends EditableSyntax
7936 super('declare_directive_statement', {
7938 left_paren: left_paren,
7939 expression: expression,
7940 right_paren: right_paren,
7941 semicolon: semicolon });
7943 get keyword() { return this.children.keyword; }
7944 get left_paren() { return this.children.left_paren; }
7945 get expression() { return this.children.expression; }
7946 get right_paren() { return this.children.right_paren; }
7947 get semicolon() { return this.children.semicolon; }
7948 with_keyword(keyword){
7949 return new DeclareDirectiveStatement(
7956 with_left_paren(left_paren){
7957 return new DeclareDirectiveStatement(
7964 with_expression(expression){
7965 return new DeclareDirectiveStatement(
7972 with_right_paren(right_paren){
7973 return new DeclareDirectiveStatement(
7980 with_semicolon(semicolon){
7981 return new DeclareDirectiveStatement(
7988 rewrite(rewriter, parents)
7990 if (parents == undefined)
7992 let new_parents = parents.slice();
7993 new_parents.push(this);
7994 var keyword = this.keyword.rewrite(rewriter, new_parents);
7995 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
7996 var expression = this.expression.rewrite(rewriter, new_parents);
7997 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
7998 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
8000 keyword === this.keyword &&
8001 left_paren === this.left_paren &&
8002 expression === this.expression &&
8003 right_paren === this.right_paren &&
8004 semicolon === this.semicolon)
8006 return rewriter(this, parents);
8010 return rewriter(new DeclareDirectiveStatement(
8015 semicolon), parents);
8018 static from_json(json, position, source)
8020 let keyword = EditableSyntax.from_json(
8021 json.declare_directive_keyword, position, source);
8022 position += keyword.width;
8023 let left_paren = EditableSyntax.from_json(
8024 json.declare_directive_left_paren, position, source);
8025 position += left_paren.width;
8026 let expression = EditableSyntax.from_json(
8027 json.declare_directive_expression, position, source);
8028 position += expression.width;
8029 let right_paren = EditableSyntax.from_json(
8030 json.declare_directive_right_paren, position, source);
8031 position += right_paren.width;
8032 let semicolon = EditableSyntax.from_json(
8033 json.declare_directive_semicolon, position, source);
8034 position += semicolon.width;
8035 return new DeclareDirectiveStatement(
8044 if (DeclareDirectiveStatement._children_keys == null)
8045 DeclareDirectiveStatement._children_keys = [
8051 return DeclareDirectiveStatement._children_keys;
8054 class DeclareBlockStatement extends EditableSyntax
8063 super('declare_block_statement', {
8065 left_paren: left_paren,
8066 expression: expression,
8067 right_paren: right_paren,
8070 get keyword() { return this.children.keyword; }
8071 get left_paren() { return this.children.left_paren; }
8072 get expression() { return this.children.expression; }
8073 get right_paren() { return this.children.right_paren; }
8074 get body() { return this.children.body; }
8075 with_keyword(keyword){
8076 return new DeclareBlockStatement(
8083 with_left_paren(left_paren){
8084 return new DeclareBlockStatement(
8091 with_expression(expression){
8092 return new DeclareBlockStatement(
8099 with_right_paren(right_paren){
8100 return new DeclareBlockStatement(
8108 return new DeclareBlockStatement(
8115 rewrite(rewriter, parents)
8117 if (parents == undefined)
8119 let new_parents = parents.slice();
8120 new_parents.push(this);
8121 var keyword = this.keyword.rewrite(rewriter, new_parents);
8122 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
8123 var expression = this.expression.rewrite(rewriter, new_parents);
8124 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
8125 var body = this.body.rewrite(rewriter, new_parents);
8127 keyword === this.keyword &&
8128 left_paren === this.left_paren &&
8129 expression === this.expression &&
8130 right_paren === this.right_paren &&
8133 return rewriter(this, parents);
8137 return rewriter(new DeclareBlockStatement(
8145 static from_json(json, position, source)
8147 let keyword = EditableSyntax.from_json(
8148 json.declare_block_keyword, position, source);
8149 position += keyword.width;
8150 let left_paren = EditableSyntax.from_json(
8151 json.declare_block_left_paren, position, source);
8152 position += left_paren.width;
8153 let expression = EditableSyntax.from_json(
8154 json.declare_block_expression, position, source);
8155 position += expression.width;
8156 let right_paren = EditableSyntax.from_json(
8157 json.declare_block_right_paren, position, source);
8158 position += right_paren.width;
8159 let body = EditableSyntax.from_json(
8160 json.declare_block_body, position, source);
8161 position += body.width;
8162 return new DeclareBlockStatement(
8171 if (DeclareBlockStatement._children_keys == null)
8172 DeclareBlockStatement._children_keys = [
8178 return DeclareBlockStatement._children_keys;
8181 class WhileStatement extends EditableSyntax
8190 super('while_statement', {
8192 left_paren: left_paren,
8193 condition: condition,
8194 right_paren: right_paren,
8197 get keyword() { return this.children.keyword; }
8198 get left_paren() { return this.children.left_paren; }
8199 get condition() { return this.children.condition; }
8200 get right_paren() { return this.children.right_paren; }
8201 get body() { return this.children.body; }
8202 with_keyword(keyword){
8203 return new WhileStatement(
8210 with_left_paren(left_paren){
8211 return new WhileStatement(
8218 with_condition(condition){
8219 return new WhileStatement(
8226 with_right_paren(right_paren){
8227 return new WhileStatement(
8235 return new WhileStatement(
8242 rewrite(rewriter, parents)
8244 if (parents == undefined)
8246 let new_parents = parents.slice();
8247 new_parents.push(this);
8248 var keyword = this.keyword.rewrite(rewriter, new_parents);
8249 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
8250 var condition = this.condition.rewrite(rewriter, new_parents);
8251 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
8252 var body = this.body.rewrite(rewriter, new_parents);
8254 keyword === this.keyword &&
8255 left_paren === this.left_paren &&
8256 condition === this.condition &&
8257 right_paren === this.right_paren &&
8260 return rewriter(this, parents);
8264 return rewriter(new WhileStatement(
8272 static from_json(json, position, source)
8274 let keyword = EditableSyntax.from_json(
8275 json.while_keyword, position, source);
8276 position += keyword.width;
8277 let left_paren = EditableSyntax.from_json(
8278 json.while_left_paren, position, source);
8279 position += left_paren.width;
8280 let condition = EditableSyntax.from_json(
8281 json.while_condition, position, source);
8282 position += condition.width;
8283 let right_paren = EditableSyntax.from_json(
8284 json.while_right_paren, position, source);
8285 position += right_paren.width;
8286 let body = EditableSyntax.from_json(
8287 json.while_body, position, source);
8288 position += body.width;
8289 return new WhileStatement(
8298 if (WhileStatement._children_keys == null)
8299 WhileStatement._children_keys = [
8305 return WhileStatement._children_keys;
8308 class IfStatement extends EditableSyntax
8319 super('if_statement', {
8321 left_paren: left_paren,
8322 condition: condition,
8323 right_paren: right_paren,
8324 statement: statement,
8325 elseif_clauses: elseif_clauses,
8326 else_clause: else_clause });
8328 get keyword() { return this.children.keyword; }
8329 get left_paren() { return this.children.left_paren; }
8330 get condition() { return this.children.condition; }
8331 get right_paren() { return this.children.right_paren; }
8332 get statement() { return this.children.statement; }
8333 get elseif_clauses() { return this.children.elseif_clauses; }
8334 get else_clause() { return this.children.else_clause; }
8335 with_keyword(keyword){
8336 return new IfStatement(
8342 this.elseif_clauses,
8345 with_left_paren(left_paren){
8346 return new IfStatement(
8352 this.elseif_clauses,
8355 with_condition(condition){
8356 return new IfStatement(
8362 this.elseif_clauses,
8365 with_right_paren(right_paren){
8366 return new IfStatement(
8372 this.elseif_clauses,
8375 with_statement(statement){
8376 return new IfStatement(
8382 this.elseif_clauses,
8385 with_elseif_clauses(elseif_clauses){
8386 return new IfStatement(
8395 with_else_clause(else_clause){
8396 return new IfStatement(
8402 this.elseif_clauses,
8405 rewrite(rewriter, parents)
8407 if (parents == undefined)
8409 let new_parents = parents.slice();
8410 new_parents.push(this);
8411 var keyword = this.keyword.rewrite(rewriter, new_parents);
8412 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
8413 var condition = this.condition.rewrite(rewriter, new_parents);
8414 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
8415 var statement = this.statement.rewrite(rewriter, new_parents);
8416 var elseif_clauses = this.elseif_clauses.rewrite(rewriter, new_parents);
8417 var else_clause = this.else_clause.rewrite(rewriter, new_parents);
8419 keyword === this.keyword &&
8420 left_paren === this.left_paren &&
8421 condition === this.condition &&
8422 right_paren === this.right_paren &&
8423 statement === this.statement &&
8424 elseif_clauses === this.elseif_clauses &&
8425 else_clause === this.else_clause)
8427 return rewriter(this, parents);
8431 return rewriter(new IfStatement(
8438 else_clause), parents);
8441 static from_json(json, position, source)
8443 let keyword = EditableSyntax.from_json(
8444 json.if_keyword, position, source);
8445 position += keyword.width;
8446 let left_paren = EditableSyntax.from_json(
8447 json.if_left_paren, position, source);
8448 position += left_paren.width;
8449 let condition = EditableSyntax.from_json(
8450 json.if_condition, position, source);
8451 position += condition.width;
8452 let right_paren = EditableSyntax.from_json(
8453 json.if_right_paren, position, source);
8454 position += right_paren.width;
8455 let statement = EditableSyntax.from_json(
8456 json.if_statement, position, source);
8457 position += statement.width;
8458 let elseif_clauses = EditableSyntax.from_json(
8459 json.if_elseif_clauses, position, source);
8460 position += elseif_clauses.width;
8461 let else_clause = EditableSyntax.from_json(
8462 json.if_else_clause, position, source);
8463 position += else_clause.width;
8464 return new IfStatement(
8475 if (IfStatement._children_keys == null)
8476 IfStatement._children_keys = [
8484 return IfStatement._children_keys;
8487 class ElseifClause extends EditableSyntax
8496 super('elseif_clause', {
8498 left_paren: left_paren,
8499 condition: condition,
8500 right_paren: right_paren,
8501 statement: statement });
8503 get keyword() { return this.children.keyword; }
8504 get left_paren() { return this.children.left_paren; }
8505 get condition() { return this.children.condition; }
8506 get right_paren() { return this.children.right_paren; }
8507 get statement() { return this.children.statement; }
8508 with_keyword(keyword){
8509 return new ElseifClause(
8516 with_left_paren(left_paren){
8517 return new ElseifClause(
8524 with_condition(condition){
8525 return new ElseifClause(
8532 with_right_paren(right_paren){
8533 return new ElseifClause(
8540 with_statement(statement){
8541 return new ElseifClause(
8548 rewrite(rewriter, parents)
8550 if (parents == undefined)
8552 let new_parents = parents.slice();
8553 new_parents.push(this);
8554 var keyword = this.keyword.rewrite(rewriter, new_parents);
8555 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
8556 var condition = this.condition.rewrite(rewriter, new_parents);
8557 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
8558 var statement = this.statement.rewrite(rewriter, new_parents);
8560 keyword === this.keyword &&
8561 left_paren === this.left_paren &&
8562 condition === this.condition &&
8563 right_paren === this.right_paren &&
8564 statement === this.statement)
8566 return rewriter(this, parents);
8570 return rewriter(new ElseifClause(
8575 statement), parents);
8578 static from_json(json, position, source)
8580 let keyword = EditableSyntax.from_json(
8581 json.elseif_keyword, position, source);
8582 position += keyword.width;
8583 let left_paren = EditableSyntax.from_json(
8584 json.elseif_left_paren, position, source);
8585 position += left_paren.width;
8586 let condition = EditableSyntax.from_json(
8587 json.elseif_condition, position, source);
8588 position += condition.width;
8589 let right_paren = EditableSyntax.from_json(
8590 json.elseif_right_paren, position, source);
8591 position += right_paren.width;
8592 let statement = EditableSyntax.from_json(
8593 json.elseif_statement, position, source);
8594 position += statement.width;
8595 return new ElseifClause(
8604 if (ElseifClause._children_keys == null)
8605 ElseifClause._children_keys = [
8611 return ElseifClause._children_keys;
8614 class ElseClause extends EditableSyntax
8620 super('else_clause', {
8622 statement: statement });
8624 get keyword() { return this.children.keyword; }
8625 get statement() { return this.children.statement; }
8626 with_keyword(keyword){
8627 return new ElseClause(
8631 with_statement(statement){
8632 return new ElseClause(
8636 rewrite(rewriter, parents)
8638 if (parents == undefined)
8640 let new_parents = parents.slice();
8641 new_parents.push(this);
8642 var keyword = this.keyword.rewrite(rewriter, new_parents);
8643 var statement = this.statement.rewrite(rewriter, new_parents);
8645 keyword === this.keyword &&
8646 statement === this.statement)
8648 return rewriter(this, parents);
8652 return rewriter(new ElseClause(
8654 statement), parents);
8657 static from_json(json, position, source)
8659 let keyword = EditableSyntax.from_json(
8660 json.else_keyword, position, source);
8661 position += keyword.width;
8662 let statement = EditableSyntax.from_json(
8663 json.else_statement, position, source);
8664 position += statement.width;
8665 return new ElseClause(
8671 if (ElseClause._children_keys == null)
8672 ElseClause._children_keys = [
8675 return ElseClause._children_keys;
8678 class IfEndIfStatement extends EditableSyntax
8687 elseif_colon_clauses,
8692 super('if_endif_statement', {
8694 left_paren: left_paren,
8695 condition: condition,
8696 right_paren: right_paren,
8698 statement: statement,
8699 elseif_colon_clauses: elseif_colon_clauses,
8700 else_colon_clause: else_colon_clause,
8701 endif_keyword: endif_keyword,
8702 semicolon: semicolon });
8704 get keyword() { return this.children.keyword; }
8705 get left_paren() { return this.children.left_paren; }
8706 get condition() { return this.children.condition; }
8707 get right_paren() { return this.children.right_paren; }
8708 get colon() { return this.children.colon; }
8709 get statement() { return this.children.statement; }
8710 get elseif_colon_clauses() { return this.children.elseif_colon_clauses; }
8711 get else_colon_clause() { return this.children.else_colon_clause; }
8712 get endif_keyword() { return this.children.endif_keyword; }
8713 get semicolon() { return this.children.semicolon; }
8714 with_keyword(keyword){
8715 return new IfEndIfStatement(
8722 this.elseif_colon_clauses,
8723 this.else_colon_clause,
8727 with_left_paren(left_paren){
8728 return new IfEndIfStatement(
8735 this.elseif_colon_clauses,
8736 this.else_colon_clause,
8740 with_condition(condition){
8741 return new IfEndIfStatement(
8748 this.elseif_colon_clauses,
8749 this.else_colon_clause,
8753 with_right_paren(right_paren){
8754 return new IfEndIfStatement(
8761 this.elseif_colon_clauses,
8762 this.else_colon_clause,
8767 return new IfEndIfStatement(
8774 this.elseif_colon_clauses,
8775 this.else_colon_clause,
8779 with_statement(statement){
8780 return new IfEndIfStatement(
8787 this.elseif_colon_clauses,
8788 this.else_colon_clause,
8792 with_elseif_colon_clauses(elseif_colon_clauses){
8793 return new IfEndIfStatement(
8800 elseif_colon_clauses,
8801 this.else_colon_clause,
8805 with_else_colon_clause(else_colon_clause){
8806 return new IfEndIfStatement(
8813 this.elseif_colon_clauses,
8818 with_endif_keyword(endif_keyword){
8819 return new IfEndIfStatement(
8826 this.elseif_colon_clauses,
8827 this.else_colon_clause,
8831 with_semicolon(semicolon){
8832 return new IfEndIfStatement(
8839 this.elseif_colon_clauses,
8840 this.else_colon_clause,
8844 rewrite(rewriter, parents)
8846 if (parents == undefined)
8848 let new_parents = parents.slice();
8849 new_parents.push(this);
8850 var keyword = this.keyword.rewrite(rewriter, new_parents);
8851 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
8852 var condition = this.condition.rewrite(rewriter, new_parents);
8853 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
8854 var colon = this.colon.rewrite(rewriter, new_parents);
8855 var statement = this.statement.rewrite(rewriter, new_parents);
8856 var elseif_colon_clauses = this.elseif_colon_clauses.rewrite(rewriter, new_parents);
8857 var else_colon_clause = this.else_colon_clause.rewrite(rewriter, new_parents);
8858 var endif_keyword = this.endif_keyword.rewrite(rewriter, new_parents);
8859 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
8861 keyword === this.keyword &&
8862 left_paren === this.left_paren &&
8863 condition === this.condition &&
8864 right_paren === this.right_paren &&
8865 colon === this.colon &&
8866 statement === this.statement &&
8867 elseif_colon_clauses === this.elseif_colon_clauses &&
8868 else_colon_clause === this.else_colon_clause &&
8869 endif_keyword === this.endif_keyword &&
8870 semicolon === this.semicolon)
8872 return rewriter(this, parents);
8876 return rewriter(new IfEndIfStatement(
8883 elseif_colon_clauses,
8886 semicolon), parents);
8889 static from_json(json, position, source)
8891 let keyword = EditableSyntax.from_json(
8892 json.if_endif_keyword, position, source);
8893 position += keyword.width;
8894 let left_paren = EditableSyntax.from_json(
8895 json.if_endif_left_paren, position, source);
8896 position += left_paren.width;
8897 let condition = EditableSyntax.from_json(
8898 json.if_endif_condition, position, source);
8899 position += condition.width;
8900 let right_paren = EditableSyntax.from_json(
8901 json.if_endif_right_paren, position, source);
8902 position += right_paren.width;
8903 let colon = EditableSyntax.from_json(
8904 json.if_endif_colon, position, source);
8905 position += colon.width;
8906 let statement = EditableSyntax.from_json(
8907 json.if_endif_statement, position, source);
8908 position += statement.width;
8909 let elseif_colon_clauses = EditableSyntax.from_json(
8910 json.if_endif_elseif_colon_clauses, position, source);
8911 position += elseif_colon_clauses.width;
8912 let else_colon_clause = EditableSyntax.from_json(
8913 json.if_endif_else_colon_clause, position, source);
8914 position += else_colon_clause.width;
8915 let endif_keyword = EditableSyntax.from_json(
8916 json.if_endif_endif_keyword, position, source);
8917 position += endif_keyword.width;
8918 let semicolon = EditableSyntax.from_json(
8919 json.if_endif_semicolon, position, source);
8920 position += semicolon.width;
8921 return new IfEndIfStatement(
8928 elseif_colon_clauses,
8935 if (IfEndIfStatement._children_keys == null)
8936 IfEndIfStatement._children_keys = [
8943 'elseif_colon_clauses',
8944 'else_colon_clause',
8947 return IfEndIfStatement._children_keys;
8950 class ElseifColonClause extends EditableSyntax
8960 super('elseif_colon_clause', {
8962 left_paren: left_paren,
8963 condition: condition,
8964 right_paren: right_paren,
8966 statement: statement });
8968 get keyword() { return this.children.keyword; }
8969 get left_paren() { return this.children.left_paren; }
8970 get condition() { return this.children.condition; }
8971 get right_paren() { return this.children.right_paren; }
8972 get colon() { return this.children.colon; }
8973 get statement() { return this.children.statement; }
8974 with_keyword(keyword){
8975 return new ElseifColonClause(
8983 with_left_paren(left_paren){
8984 return new ElseifColonClause(
8992 with_condition(condition){
8993 return new ElseifColonClause(
9001 with_right_paren(right_paren){
9002 return new ElseifColonClause(
9011 return new ElseifColonClause(
9019 with_statement(statement){
9020 return new ElseifColonClause(
9028 rewrite(rewriter, parents)
9030 if (parents == undefined)
9032 let new_parents = parents.slice();
9033 new_parents.push(this);
9034 var keyword = this.keyword.rewrite(rewriter, new_parents);
9035 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
9036 var condition = this.condition.rewrite(rewriter, new_parents);
9037 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
9038 var colon = this.colon.rewrite(rewriter, new_parents);
9039 var statement = this.statement.rewrite(rewriter, new_parents);
9041 keyword === this.keyword &&
9042 left_paren === this.left_paren &&
9043 condition === this.condition &&
9044 right_paren === this.right_paren &&
9045 colon === this.colon &&
9046 statement === this.statement)
9048 return rewriter(this, parents);
9052 return rewriter(new ElseifColonClause(
9058 statement), parents);
9061 static from_json(json, position, source)
9063 let keyword = EditableSyntax.from_json(
9064 json.elseif_colon_keyword, position, source);
9065 position += keyword.width;
9066 let left_paren = EditableSyntax.from_json(
9067 json.elseif_colon_left_paren, position, source);
9068 position += left_paren.width;
9069 let condition = EditableSyntax.from_json(
9070 json.elseif_colon_condition, position, source);
9071 position += condition.width;
9072 let right_paren = EditableSyntax.from_json(
9073 json.elseif_colon_right_paren, position, source);
9074 position += right_paren.width;
9075 let colon = EditableSyntax.from_json(
9076 json.elseif_colon_colon, position, source);
9077 position += colon.width;
9078 let statement = EditableSyntax.from_json(
9079 json.elseif_colon_statement, position, source);
9080 position += statement.width;
9081 return new ElseifColonClause(
9091 if (ElseifColonClause._children_keys == null)
9092 ElseifColonClause._children_keys = [
9099 return ElseifColonClause._children_keys;
9102 class ElseColonClause extends EditableSyntax
9109 super('else_colon_clause', {
9112 statement: statement });
9114 get keyword() { return this.children.keyword; }
9115 get colon() { return this.children.colon; }
9116 get statement() { return this.children.statement; }
9117 with_keyword(keyword){
9118 return new ElseColonClause(
9124 return new ElseColonClause(
9129 with_statement(statement){
9130 return new ElseColonClause(
9135 rewrite(rewriter, parents)
9137 if (parents == undefined)
9139 let new_parents = parents.slice();
9140 new_parents.push(this);
9141 var keyword = this.keyword.rewrite(rewriter, new_parents);
9142 var colon = this.colon.rewrite(rewriter, new_parents);
9143 var statement = this.statement.rewrite(rewriter, new_parents);
9145 keyword === this.keyword &&
9146 colon === this.colon &&
9147 statement === this.statement)
9149 return rewriter(this, parents);
9153 return rewriter(new ElseColonClause(
9156 statement), parents);
9159 static from_json(json, position, source)
9161 let keyword = EditableSyntax.from_json(
9162 json.else_colon_keyword, position, source);
9163 position += keyword.width;
9164 let colon = EditableSyntax.from_json(
9165 json.else_colon_colon, position, source);
9166 position += colon.width;
9167 let statement = EditableSyntax.from_json(
9168 json.else_colon_statement, position, source);
9169 position += statement.width;
9170 return new ElseColonClause(
9177 if (ElseColonClause._children_keys == null)
9178 ElseColonClause._children_keys = [
9182 return ElseColonClause._children_keys;
9185 class TryStatement extends EditableSyntax
9193 super('try_statement', {
9195 compound_statement: compound_statement,
9196 catch_clauses: catch_clauses,
9197 finally_clause: finally_clause });
9199 get keyword() { return this.children.keyword; }
9200 get compound_statement() { return this.children.compound_statement; }
9201 get catch_clauses() { return this.children.catch_clauses; }
9202 get finally_clause() { return this.children.finally_clause; }
9203 with_keyword(keyword){
9204 return new TryStatement(
9206 this.compound_statement,
9208 this.finally_clause);
9210 with_compound_statement(compound_statement){
9211 return new TryStatement(
9215 this.finally_clause);
9217 with_catch_clauses(catch_clauses){
9218 return new TryStatement(
9220 this.compound_statement,
9222 this.finally_clause);
9224 with_finally_clause(finally_clause){
9225 return new TryStatement(
9227 this.compound_statement,
9231 rewrite(rewriter, parents)
9233 if (parents == undefined)
9235 let new_parents = parents.slice();
9236 new_parents.push(this);
9237 var keyword = this.keyword.rewrite(rewriter, new_parents);
9238 var compound_statement = this.compound_statement.rewrite(rewriter, new_parents);
9239 var catch_clauses = this.catch_clauses.rewrite(rewriter, new_parents);
9240 var finally_clause = this.finally_clause.rewrite(rewriter, new_parents);
9242 keyword === this.keyword &&
9243 compound_statement === this.compound_statement &&
9244 catch_clauses === this.catch_clauses &&
9245 finally_clause === this.finally_clause)
9247 return rewriter(this, parents);
9251 return rewriter(new TryStatement(
9255 finally_clause), parents);
9258 static from_json(json, position, source)
9260 let keyword = EditableSyntax.from_json(
9261 json.try_keyword, position, source);
9262 position += keyword.width;
9263 let compound_statement = EditableSyntax.from_json(
9264 json.try_compound_statement, position, source);
9265 position += compound_statement.width;
9266 let catch_clauses = EditableSyntax.from_json(
9267 json.try_catch_clauses, position, source);
9268 position += catch_clauses.width;
9269 let finally_clause = EditableSyntax.from_json(
9270 json.try_finally_clause, position, source);
9271 position += finally_clause.width;
9272 return new TryStatement(
9280 if (TryStatement._children_keys == null)
9281 TryStatement._children_keys = [
9283 'compound_statement',
9286 return TryStatement._children_keys;
9289 class CatchClause extends EditableSyntax
9299 super('catch_clause', {
9301 left_paren: left_paren,
9304 right_paren: right_paren,
9307 get keyword() { return this.children.keyword; }
9308 get left_paren() { return this.children.left_paren; }
9309 get type() { return this.children.type; }
9310 get variable() { return this.children.variable; }
9311 get right_paren() { return this.children.right_paren; }
9312 get body() { return this.children.body; }
9313 with_keyword(keyword){
9314 return new CatchClause(
9322 with_left_paren(left_paren){
9323 return new CatchClause(
9332 return new CatchClause(
9340 with_variable(variable){
9341 return new CatchClause(
9349 with_right_paren(right_paren){
9350 return new CatchClause(
9359 return new CatchClause(
9367 rewrite(rewriter, parents)
9369 if (parents == undefined)
9371 let new_parents = parents.slice();
9372 new_parents.push(this);
9373 var keyword = this.keyword.rewrite(rewriter, new_parents);
9374 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
9375 var type = this.type.rewrite(rewriter, new_parents);
9376 var variable = this.variable.rewrite(rewriter, new_parents);
9377 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
9378 var body = this.body.rewrite(rewriter, new_parents);
9380 keyword === this.keyword &&
9381 left_paren === this.left_paren &&
9382 type === this.type &&
9383 variable === this.variable &&
9384 right_paren === this.right_paren &&
9387 return rewriter(this, parents);
9391 return rewriter(new CatchClause(
9400 static from_json(json, position, source)
9402 let keyword = EditableSyntax.from_json(
9403 json.catch_keyword, position, source);
9404 position += keyword.width;
9405 let left_paren = EditableSyntax.from_json(
9406 json.catch_left_paren, position, source);
9407 position += left_paren.width;
9408 let type = EditableSyntax.from_json(
9409 json.catch_type, position, source);
9410 position += type.width;
9411 let variable = EditableSyntax.from_json(
9412 json.catch_variable, position, source);
9413 position += variable.width;
9414 let right_paren = EditableSyntax.from_json(
9415 json.catch_right_paren, position, source);
9416 position += right_paren.width;
9417 let body = EditableSyntax.from_json(
9418 json.catch_body, position, source);
9419 position += body.width;
9420 return new CatchClause(
9430 if (CatchClause._children_keys == null)
9431 CatchClause._children_keys = [
9438 return CatchClause._children_keys;
9441 class FinallyClause extends EditableSyntax
9447 super('finally_clause', {
9451 get keyword() { return this.children.keyword; }
9452 get body() { return this.children.body; }
9453 with_keyword(keyword){
9454 return new FinallyClause(
9459 return new FinallyClause(
9463 rewrite(rewriter, parents)
9465 if (parents == undefined)
9467 let new_parents = parents.slice();
9468 new_parents.push(this);
9469 var keyword = this.keyword.rewrite(rewriter, new_parents);
9470 var body = this.body.rewrite(rewriter, new_parents);
9472 keyword === this.keyword &&
9475 return rewriter(this, parents);
9479 return rewriter(new FinallyClause(
9484 static from_json(json, position, source)
9486 let keyword = EditableSyntax.from_json(
9487 json.finally_keyword, position, source);
9488 position += keyword.width;
9489 let body = EditableSyntax.from_json(
9490 json.finally_body, position, source);
9491 position += body.width;
9492 return new FinallyClause(
9498 if (FinallyClause._children_keys == null)
9499 FinallyClause._children_keys = [
9502 return FinallyClause._children_keys;
9505 class DoStatement extends EditableSyntax
9516 super('do_statement', {
9519 while_keyword: while_keyword,
9520 left_paren: left_paren,
9521 condition: condition,
9522 right_paren: right_paren,
9523 semicolon: semicolon });
9525 get keyword() { return this.children.keyword; }
9526 get body() { return this.children.body; }
9527 get while_keyword() { return this.children.while_keyword; }
9528 get left_paren() { return this.children.left_paren; }
9529 get condition() { return this.children.condition; }
9530 get right_paren() { return this.children.right_paren; }
9531 get semicolon() { return this.children.semicolon; }
9532 with_keyword(keyword){
9533 return new DoStatement(
9543 return new DoStatement(
9552 with_while_keyword(while_keyword){
9553 return new DoStatement(
9562 with_left_paren(left_paren){
9563 return new DoStatement(
9572 with_condition(condition){
9573 return new DoStatement(
9582 with_right_paren(right_paren){
9583 return new DoStatement(
9592 with_semicolon(semicolon){
9593 return new DoStatement(
9602 rewrite(rewriter, parents)
9604 if (parents == undefined)
9606 let new_parents = parents.slice();
9607 new_parents.push(this);
9608 var keyword = this.keyword.rewrite(rewriter, new_parents);
9609 var body = this.body.rewrite(rewriter, new_parents);
9610 var while_keyword = this.while_keyword.rewrite(rewriter, new_parents);
9611 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
9612 var condition = this.condition.rewrite(rewriter, new_parents);
9613 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
9614 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
9616 keyword === this.keyword &&
9617 body === this.body &&
9618 while_keyword === this.while_keyword &&
9619 left_paren === this.left_paren &&
9620 condition === this.condition &&
9621 right_paren === this.right_paren &&
9622 semicolon === this.semicolon)
9624 return rewriter(this, parents);
9628 return rewriter(new DoStatement(
9635 semicolon), parents);
9638 static from_json(json, position, source)
9640 let keyword = EditableSyntax.from_json(
9641 json.do_keyword, position, source);
9642 position += keyword.width;
9643 let body = EditableSyntax.from_json(
9644 json.do_body, position, source);
9645 position += body.width;
9646 let while_keyword = EditableSyntax.from_json(
9647 json.do_while_keyword, position, source);
9648 position += while_keyword.width;
9649 let left_paren = EditableSyntax.from_json(
9650 json.do_left_paren, position, source);
9651 position += left_paren.width;
9652 let condition = EditableSyntax.from_json(
9653 json.do_condition, position, source);
9654 position += condition.width;
9655 let right_paren = EditableSyntax.from_json(
9656 json.do_right_paren, position, source);
9657 position += right_paren.width;
9658 let semicolon = EditableSyntax.from_json(
9659 json.do_semicolon, position, source);
9660 position += semicolon.width;
9661 return new DoStatement(
9672 if (DoStatement._children_keys == null)
9673 DoStatement._children_keys = [
9681 return DoStatement._children_keys;
9684 class ForStatement extends EditableSyntax
9697 super('for_statement', {
9699 left_paren: left_paren,
9700 initializer: initializer,
9701 first_semicolon: first_semicolon,
9703 second_semicolon: second_semicolon,
9704 end_of_loop: end_of_loop,
9705 right_paren: right_paren,
9708 get keyword() { return this.children.keyword; }
9709 get left_paren() { return this.children.left_paren; }
9710 get initializer() { return this.children.initializer; }
9711 get first_semicolon() { return this.children.first_semicolon; }
9712 get control() { return this.children.control; }
9713 get second_semicolon() { return this.children.second_semicolon; }
9714 get end_of_loop() { return this.children.end_of_loop; }
9715 get right_paren() { return this.children.right_paren; }
9716 get body() { return this.children.body; }
9717 with_keyword(keyword){
9718 return new ForStatement(
9722 this.first_semicolon,
9724 this.second_semicolon,
9729 with_left_paren(left_paren){
9730 return new ForStatement(
9734 this.first_semicolon,
9736 this.second_semicolon,
9741 with_initializer(initializer){
9742 return new ForStatement(
9746 this.first_semicolon,
9748 this.second_semicolon,
9753 with_first_semicolon(first_semicolon){
9754 return new ForStatement(
9760 this.second_semicolon,
9765 with_control(control){
9766 return new ForStatement(
9770 this.first_semicolon,
9772 this.second_semicolon,
9777 with_second_semicolon(second_semicolon){
9778 return new ForStatement(
9782 this.first_semicolon,
9789 with_end_of_loop(end_of_loop){
9790 return new ForStatement(
9794 this.first_semicolon,
9796 this.second_semicolon,
9801 with_right_paren(right_paren){
9802 return new ForStatement(
9806 this.first_semicolon,
9808 this.second_semicolon,
9814 return new ForStatement(
9818 this.first_semicolon,
9820 this.second_semicolon,
9825 rewrite(rewriter, parents)
9827 if (parents == undefined)
9829 let new_parents = parents.slice();
9830 new_parents.push(this);
9831 var keyword = this.keyword.rewrite(rewriter, new_parents);
9832 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
9833 var initializer = this.initializer.rewrite(rewriter, new_parents);
9834 var first_semicolon = this.first_semicolon.rewrite(rewriter, new_parents);
9835 var control = this.control.rewrite(rewriter, new_parents);
9836 var second_semicolon = this.second_semicolon.rewrite(rewriter, new_parents);
9837 var end_of_loop = this.end_of_loop.rewrite(rewriter, new_parents);
9838 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
9839 var body = this.body.rewrite(rewriter, new_parents);
9841 keyword === this.keyword &&
9842 left_paren === this.left_paren &&
9843 initializer === this.initializer &&
9844 first_semicolon === this.first_semicolon &&
9845 control === this.control &&
9846 second_semicolon === this.second_semicolon &&
9847 end_of_loop === this.end_of_loop &&
9848 right_paren === this.right_paren &&
9851 return rewriter(this, parents);
9855 return rewriter(new ForStatement(
9867 static from_json(json, position, source)
9869 let keyword = EditableSyntax.from_json(
9870 json.for_keyword, position, source);
9871 position += keyword.width;
9872 let left_paren = EditableSyntax.from_json(
9873 json.for_left_paren, position, source);
9874 position += left_paren.width;
9875 let initializer = EditableSyntax.from_json(
9876 json.for_initializer, position, source);
9877 position += initializer.width;
9878 let first_semicolon = EditableSyntax.from_json(
9879 json.for_first_semicolon, position, source);
9880 position += first_semicolon.width;
9881 let control = EditableSyntax.from_json(
9882 json.for_control, position, source);
9883 position += control.width;
9884 let second_semicolon = EditableSyntax.from_json(
9885 json.for_second_semicolon, position, source);
9886 position += second_semicolon.width;
9887 let end_of_loop = EditableSyntax.from_json(
9888 json.for_end_of_loop, position, source);
9889 position += end_of_loop.width;
9890 let right_paren = EditableSyntax.from_json(
9891 json.for_right_paren, position, source);
9892 position += right_paren.width;
9893 let body = EditableSyntax.from_json(
9894 json.for_body, position, source);
9895 position += body.width;
9896 return new ForStatement(
9909 if (ForStatement._children_keys == null)
9910 ForStatement._children_keys = [
9920 return ForStatement._children_keys;
9923 class ForeachStatement extends EditableSyntax
9937 super('foreach_statement', {
9939 left_paren: left_paren,
9940 collection: collection,
9941 await_keyword: await_keyword,
9946 right_paren: right_paren,
9949 get keyword() { return this.children.keyword; }
9950 get left_paren() { return this.children.left_paren; }
9951 get collection() { return this.children.collection; }
9952 get await_keyword() { return this.children.await_keyword; }
9953 get as() { return this.children.as; }
9954 get key() { return this.children.key; }
9955 get arrow() { return this.children.arrow; }
9956 get value() { return this.children.value; }
9957 get right_paren() { return this.children.right_paren; }
9958 get body() { return this.children.body; }
9959 with_keyword(keyword){
9960 return new ForeachStatement(
9972 with_left_paren(left_paren){
9973 return new ForeachStatement(
9985 with_collection(collection){
9986 return new ForeachStatement(
9998 with_await_keyword(await_keyword){
9999 return new ForeachStatement(
10012 return new ForeachStatement(
10016 this.await_keyword,
10025 return new ForeachStatement(
10029 this.await_keyword,
10038 return new ForeachStatement(
10042 this.await_keyword,
10051 return new ForeachStatement(
10055 this.await_keyword,
10063 with_right_paren(right_paren){
10064 return new ForeachStatement(
10068 this.await_keyword,
10077 return new ForeachStatement(
10081 this.await_keyword,
10089 rewrite(rewriter, parents)
10091 if (parents == undefined)
10093 let new_parents = parents.slice();
10094 new_parents.push(this);
10095 var keyword = this.keyword.rewrite(rewriter, new_parents);
10096 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
10097 var collection = this.collection.rewrite(rewriter, new_parents);
10098 var await_keyword = this.await_keyword.rewrite(rewriter, new_parents);
10099 var as = this.as.rewrite(rewriter, new_parents);
10100 var key = this.key.rewrite(rewriter, new_parents);
10101 var arrow = this.arrow.rewrite(rewriter, new_parents);
10102 var value = this.value.rewrite(rewriter, new_parents);
10103 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
10104 var body = this.body.rewrite(rewriter, new_parents);
10106 keyword === this.keyword &&
10107 left_paren === this.left_paren &&
10108 collection === this.collection &&
10109 await_keyword === this.await_keyword &&
10111 key === this.key &&
10112 arrow === this.arrow &&
10113 value === this.value &&
10114 right_paren === this.right_paren &&
10115 body === this.body)
10117 return rewriter(this, parents);
10121 return rewriter(new ForeachStatement(
10134 static from_json(json, position, source)
10136 let keyword = EditableSyntax.from_json(
10137 json.foreach_keyword, position, source);
10138 position += keyword.width;
10139 let left_paren = EditableSyntax.from_json(
10140 json.foreach_left_paren, position, source);
10141 position += left_paren.width;
10142 let collection = EditableSyntax.from_json(
10143 json.foreach_collection, position, source);
10144 position += collection.width;
10145 let await_keyword = EditableSyntax.from_json(
10146 json.foreach_await_keyword, position, source);
10147 position += await_keyword.width;
10148 let as = EditableSyntax.from_json(
10149 json.foreach_as, position, source);
10150 position += as.width;
10151 let key = EditableSyntax.from_json(
10152 json.foreach_key, position, source);
10153 position += key.width;
10154 let arrow = EditableSyntax.from_json(
10155 json.foreach_arrow, position, source);
10156 position += arrow.width;
10157 let value = EditableSyntax.from_json(
10158 json.foreach_value, position, source);
10159 position += value.width;
10160 let right_paren = EditableSyntax.from_json(
10161 json.foreach_right_paren, position, source);
10162 position += right_paren.width;
10163 let body = EditableSyntax.from_json(
10164 json.foreach_body, position, source);
10165 position += body.width;
10166 return new ForeachStatement(
10178 get children_keys()
10180 if (ForeachStatement._children_keys == null)
10181 ForeachStatement._children_keys = [
10192 return ForeachStatement._children_keys;
10195 class SwitchStatement extends EditableSyntax
10206 super('switch_statement', {
10208 left_paren: left_paren,
10209 expression: expression,
10210 right_paren: right_paren,
10211 left_brace: left_brace,
10212 sections: sections,
10213 right_brace: right_brace });
10215 get keyword() { return this.children.keyword; }
10216 get left_paren() { return this.children.left_paren; }
10217 get expression() { return this.children.expression; }
10218 get right_paren() { return this.children.right_paren; }
10219 get left_brace() { return this.children.left_brace; }
10220 get sections() { return this.children.sections; }
10221 get right_brace() { return this.children.right_brace; }
10222 with_keyword(keyword){
10223 return new SwitchStatement(
10232 with_left_paren(left_paren){
10233 return new SwitchStatement(
10242 with_expression(expression){
10243 return new SwitchStatement(
10252 with_right_paren(right_paren){
10253 return new SwitchStatement(
10262 with_left_brace(left_brace){
10263 return new SwitchStatement(
10272 with_sections(sections){
10273 return new SwitchStatement(
10282 with_right_brace(right_brace){
10283 return new SwitchStatement(
10292 rewrite(rewriter, parents)
10294 if (parents == undefined)
10296 let new_parents = parents.slice();
10297 new_parents.push(this);
10298 var keyword = this.keyword.rewrite(rewriter, new_parents);
10299 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
10300 var expression = this.expression.rewrite(rewriter, new_parents);
10301 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
10302 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
10303 var sections = this.sections.rewrite(rewriter, new_parents);
10304 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
10306 keyword === this.keyword &&
10307 left_paren === this.left_paren &&
10308 expression === this.expression &&
10309 right_paren === this.right_paren &&
10310 left_brace === this.left_brace &&
10311 sections === this.sections &&
10312 right_brace === this.right_brace)
10314 return rewriter(this, parents);
10318 return rewriter(new SwitchStatement(
10325 right_brace), parents);
10328 static from_json(json, position, source)
10330 let keyword = EditableSyntax.from_json(
10331 json.switch_keyword, position, source);
10332 position += keyword.width;
10333 let left_paren = EditableSyntax.from_json(
10334 json.switch_left_paren, position, source);
10335 position += left_paren.width;
10336 let expression = EditableSyntax.from_json(
10337 json.switch_expression, position, source);
10338 position += expression.width;
10339 let right_paren = EditableSyntax.from_json(
10340 json.switch_right_paren, position, source);
10341 position += right_paren.width;
10342 let left_brace = EditableSyntax.from_json(
10343 json.switch_left_brace, position, source);
10344 position += left_brace.width;
10345 let sections = EditableSyntax.from_json(
10346 json.switch_sections, position, source);
10347 position += sections.width;
10348 let right_brace = EditableSyntax.from_json(
10349 json.switch_right_brace, position, source);
10350 position += right_brace.width;
10351 return new SwitchStatement(
10360 get children_keys()
10362 if (SwitchStatement._children_keys == null)
10363 SwitchStatement._children_keys = [
10371 return SwitchStatement._children_keys;
10374 class AlternateSwitchStatement extends EditableSyntax
10386 super('alternate_switch_statement', {
10388 left_paren: left_paren,
10389 expression: expression,
10390 right_paren: right_paren,
10391 opening_colon: opening_colon,
10392 sections: sections,
10393 closing_endswitch: closing_endswitch,
10394 closing_semicolon: closing_semicolon });
10396 get keyword() { return this.children.keyword; }
10397 get left_paren() { return this.children.left_paren; }
10398 get expression() { return this.children.expression; }
10399 get right_paren() { return this.children.right_paren; }
10400 get opening_colon() { return this.children.opening_colon; }
10401 get sections() { return this.children.sections; }
10402 get closing_endswitch() { return this.children.closing_endswitch; }
10403 get closing_semicolon() { return this.children.closing_semicolon; }
10404 with_keyword(keyword){
10405 return new AlternateSwitchStatement(
10410 this.opening_colon,
10412 this.closing_endswitch,
10413 this.closing_semicolon);
10415 with_left_paren(left_paren){
10416 return new AlternateSwitchStatement(
10421 this.opening_colon,
10423 this.closing_endswitch,
10424 this.closing_semicolon);
10426 with_expression(expression){
10427 return new AlternateSwitchStatement(
10432 this.opening_colon,
10434 this.closing_endswitch,
10435 this.closing_semicolon);
10437 with_right_paren(right_paren){
10438 return new AlternateSwitchStatement(
10443 this.opening_colon,
10445 this.closing_endswitch,
10446 this.closing_semicolon);
10448 with_opening_colon(opening_colon){
10449 return new AlternateSwitchStatement(
10456 this.closing_endswitch,
10457 this.closing_semicolon);
10459 with_sections(sections){
10460 return new AlternateSwitchStatement(
10465 this.opening_colon,
10467 this.closing_endswitch,
10468 this.closing_semicolon);
10470 with_closing_endswitch(closing_endswitch){
10471 return new AlternateSwitchStatement(
10476 this.opening_colon,
10479 this.closing_semicolon);
10481 with_closing_semicolon(closing_semicolon){
10482 return new AlternateSwitchStatement(
10487 this.opening_colon,
10489 this.closing_endswitch,
10490 closing_semicolon);
10492 rewrite(rewriter, parents)
10494 if (parents == undefined)
10496 let new_parents = parents.slice();
10497 new_parents.push(this);
10498 var keyword = this.keyword.rewrite(rewriter, new_parents);
10499 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
10500 var expression = this.expression.rewrite(rewriter, new_parents);
10501 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
10502 var opening_colon = this.opening_colon.rewrite(rewriter, new_parents);
10503 var sections = this.sections.rewrite(rewriter, new_parents);
10504 var closing_endswitch = this.closing_endswitch.rewrite(rewriter, new_parents);
10505 var closing_semicolon = this.closing_semicolon.rewrite(rewriter, new_parents);
10507 keyword === this.keyword &&
10508 left_paren === this.left_paren &&
10509 expression === this.expression &&
10510 right_paren === this.right_paren &&
10511 opening_colon === this.opening_colon &&
10512 sections === this.sections &&
10513 closing_endswitch === this.closing_endswitch &&
10514 closing_semicolon === this.closing_semicolon)
10516 return rewriter(this, parents);
10520 return rewriter(new AlternateSwitchStatement(
10528 closing_semicolon), parents);
10531 static from_json(json, position, source)
10533 let keyword = EditableSyntax.from_json(
10534 json.alternate_switch_keyword, position, source);
10535 position += keyword.width;
10536 let left_paren = EditableSyntax.from_json(
10537 json.alternate_switch_left_paren, position, source);
10538 position += left_paren.width;
10539 let expression = EditableSyntax.from_json(
10540 json.alternate_switch_expression, position, source);
10541 position += expression.width;
10542 let right_paren = EditableSyntax.from_json(
10543 json.alternate_switch_right_paren, position, source);
10544 position += right_paren.width;
10545 let opening_colon = EditableSyntax.from_json(
10546 json.alternate_switch_opening_colon, position, source);
10547 position += opening_colon.width;
10548 let sections = EditableSyntax.from_json(
10549 json.alternate_switch_sections, position, source);
10550 position += sections.width;
10551 let closing_endswitch = EditableSyntax.from_json(
10552 json.alternate_switch_closing_endswitch, position, source);
10553 position += closing_endswitch.width;
10554 let closing_semicolon = EditableSyntax.from_json(
10555 json.alternate_switch_closing_semicolon, position, source);
10556 position += closing_semicolon.width;
10557 return new AlternateSwitchStatement(
10565 closing_semicolon);
10567 get children_keys()
10569 if (AlternateSwitchStatement._children_keys == null)
10570 AlternateSwitchStatement._children_keys = [
10577 'closing_endswitch',
10578 'closing_semicolon'];
10579 return AlternateSwitchStatement._children_keys;
10582 class SwitchSection extends EditableSyntax
10589 super('switch_section', {
10591 statements: statements,
10592 fallthrough: fallthrough });
10594 get labels() { return this.children.labels; }
10595 get statements() { return this.children.statements; }
10596 get fallthrough() { return this.children.fallthrough; }
10597 with_labels(labels){
10598 return new SwitchSection(
10603 with_statements(statements){
10604 return new SwitchSection(
10609 with_fallthrough(fallthrough){
10610 return new SwitchSection(
10615 rewrite(rewriter, parents)
10617 if (parents == undefined)
10619 let new_parents = parents.slice();
10620 new_parents.push(this);
10621 var labels = this.labels.rewrite(rewriter, new_parents);
10622 var statements = this.statements.rewrite(rewriter, new_parents);
10623 var fallthrough = this.fallthrough.rewrite(rewriter, new_parents);
10625 labels === this.labels &&
10626 statements === this.statements &&
10627 fallthrough === this.fallthrough)
10629 return rewriter(this, parents);
10633 return rewriter(new SwitchSection(
10636 fallthrough), parents);
10639 static from_json(json, position, source)
10641 let labels = EditableSyntax.from_json(
10642 json.switch_section_labels, position, source);
10643 position += labels.width;
10644 let statements = EditableSyntax.from_json(
10645 json.switch_section_statements, position, source);
10646 position += statements.width;
10647 let fallthrough = EditableSyntax.from_json(
10648 json.switch_section_fallthrough, position, source);
10649 position += fallthrough.width;
10650 return new SwitchSection(
10655 get children_keys()
10657 if (SwitchSection._children_keys == null)
10658 SwitchSection._children_keys = [
10662 return SwitchSection._children_keys;
10665 class SwitchFallthrough extends EditableSyntax
10671 super('switch_fallthrough', {
10673 semicolon: semicolon });
10675 get keyword() { return this.children.keyword; }
10676 get semicolon() { return this.children.semicolon; }
10677 with_keyword(keyword){
10678 return new SwitchFallthrough(
10682 with_semicolon(semicolon){
10683 return new SwitchFallthrough(
10687 rewrite(rewriter, parents)
10689 if (parents == undefined)
10691 let new_parents = parents.slice();
10692 new_parents.push(this);
10693 var keyword = this.keyword.rewrite(rewriter, new_parents);
10694 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
10696 keyword === this.keyword &&
10697 semicolon === this.semicolon)
10699 return rewriter(this, parents);
10703 return rewriter(new SwitchFallthrough(
10705 semicolon), parents);
10708 static from_json(json, position, source)
10710 let keyword = EditableSyntax.from_json(
10711 json.fallthrough_keyword, position, source);
10712 position += keyword.width;
10713 let semicolon = EditableSyntax.from_json(
10714 json.fallthrough_semicolon, position, source);
10715 position += semicolon.width;
10716 return new SwitchFallthrough(
10720 get children_keys()
10722 if (SwitchFallthrough._children_keys == null)
10723 SwitchFallthrough._children_keys = [
10726 return SwitchFallthrough._children_keys;
10729 class CaseLabel extends EditableSyntax
10736 super('case_label', {
10738 expression: expression,
10741 get keyword() { return this.children.keyword; }
10742 get expression() { return this.children.expression; }
10743 get colon() { return this.children.colon; }
10744 with_keyword(keyword){
10745 return new CaseLabel(
10750 with_expression(expression){
10751 return new CaseLabel(
10757 return new CaseLabel(
10762 rewrite(rewriter, parents)
10764 if (parents == undefined)
10766 let new_parents = parents.slice();
10767 new_parents.push(this);
10768 var keyword = this.keyword.rewrite(rewriter, new_parents);
10769 var expression = this.expression.rewrite(rewriter, new_parents);
10770 var colon = this.colon.rewrite(rewriter, new_parents);
10772 keyword === this.keyword &&
10773 expression === this.expression &&
10774 colon === this.colon)
10776 return rewriter(this, parents);
10780 return rewriter(new CaseLabel(
10786 static from_json(json, position, source)
10788 let keyword = EditableSyntax.from_json(
10789 json.case_keyword, position, source);
10790 position += keyword.width;
10791 let expression = EditableSyntax.from_json(
10792 json.case_expression, position, source);
10793 position += expression.width;
10794 let colon = EditableSyntax.from_json(
10795 json.case_colon, position, source);
10796 position += colon.width;
10797 return new CaseLabel(
10802 get children_keys()
10804 if (CaseLabel._children_keys == null)
10805 CaseLabel._children_keys = [
10809 return CaseLabel._children_keys;
10812 class DefaultLabel extends EditableSyntax
10818 super('default_label', {
10822 get keyword() { return this.children.keyword; }
10823 get colon() { return this.children.colon; }
10824 with_keyword(keyword){
10825 return new DefaultLabel(
10830 return new DefaultLabel(
10834 rewrite(rewriter, parents)
10836 if (parents == undefined)
10838 let new_parents = parents.slice();
10839 new_parents.push(this);
10840 var keyword = this.keyword.rewrite(rewriter, new_parents);
10841 var colon = this.colon.rewrite(rewriter, new_parents);
10843 keyword === this.keyword &&
10844 colon === this.colon)
10846 return rewriter(this, parents);
10850 return rewriter(new DefaultLabel(
10855 static from_json(json, position, source)
10857 let keyword = EditableSyntax.from_json(
10858 json.default_keyword, position, source);
10859 position += keyword.width;
10860 let colon = EditableSyntax.from_json(
10861 json.default_colon, position, source);
10862 position += colon.width;
10863 return new DefaultLabel(
10867 get children_keys()
10869 if (DefaultLabel._children_keys == null)
10870 DefaultLabel._children_keys = [
10873 return DefaultLabel._children_keys;
10876 class ReturnStatement extends EditableSyntax
10883 super('return_statement', {
10885 expression: expression,
10886 semicolon: semicolon });
10888 get keyword() { return this.children.keyword; }
10889 get expression() { return this.children.expression; }
10890 get semicolon() { return this.children.semicolon; }
10891 with_keyword(keyword){
10892 return new ReturnStatement(
10897 with_expression(expression){
10898 return new ReturnStatement(
10903 with_semicolon(semicolon){
10904 return new ReturnStatement(
10909 rewrite(rewriter, parents)
10911 if (parents == undefined)
10913 let new_parents = parents.slice();
10914 new_parents.push(this);
10915 var keyword = this.keyword.rewrite(rewriter, new_parents);
10916 var expression = this.expression.rewrite(rewriter, new_parents);
10917 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
10919 keyword === this.keyword &&
10920 expression === this.expression &&
10921 semicolon === this.semicolon)
10923 return rewriter(this, parents);
10927 return rewriter(new ReturnStatement(
10930 semicolon), parents);
10933 static from_json(json, position, source)
10935 let keyword = EditableSyntax.from_json(
10936 json.return_keyword, position, source);
10937 position += keyword.width;
10938 let expression = EditableSyntax.from_json(
10939 json.return_expression, position, source);
10940 position += expression.width;
10941 let semicolon = EditableSyntax.from_json(
10942 json.return_semicolon, position, source);
10943 position += semicolon.width;
10944 return new ReturnStatement(
10949 get children_keys()
10951 if (ReturnStatement._children_keys == null)
10952 ReturnStatement._children_keys = [
10956 return ReturnStatement._children_keys;
10959 class GotoLabel extends EditableSyntax
10965 super('goto_label', {
10969 get name() { return this.children.name; }
10970 get colon() { return this.children.colon; }
10972 return new GotoLabel(
10977 return new GotoLabel(
10981 rewrite(rewriter, parents)
10983 if (parents == undefined)
10985 let new_parents = parents.slice();
10986 new_parents.push(this);
10987 var name = this.name.rewrite(rewriter, new_parents);
10988 var colon = this.colon.rewrite(rewriter, new_parents);
10990 name === this.name &&
10991 colon === this.colon)
10993 return rewriter(this, parents);
10997 return rewriter(new GotoLabel(
11002 static from_json(json, position, source)
11004 let name = EditableSyntax.from_json(
11005 json.goto_label_name, position, source);
11006 position += name.width;
11007 let colon = EditableSyntax.from_json(
11008 json.goto_label_colon, position, source);
11009 position += colon.width;
11010 return new GotoLabel(
11014 get children_keys()
11016 if (GotoLabel._children_keys == null)
11017 GotoLabel._children_keys = [
11020 return GotoLabel._children_keys;
11023 class GotoStatement extends EditableSyntax
11030 super('goto_statement', {
11032 label_name: label_name,
11033 semicolon: semicolon });
11035 get keyword() { return this.children.keyword; }
11036 get label_name() { return this.children.label_name; }
11037 get semicolon() { return this.children.semicolon; }
11038 with_keyword(keyword){
11039 return new GotoStatement(
11044 with_label_name(label_name){
11045 return new GotoStatement(
11050 with_semicolon(semicolon){
11051 return new GotoStatement(
11056 rewrite(rewriter, parents)
11058 if (parents == undefined)
11060 let new_parents = parents.slice();
11061 new_parents.push(this);
11062 var keyword = this.keyword.rewrite(rewriter, new_parents);
11063 var label_name = this.label_name.rewrite(rewriter, new_parents);
11064 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11066 keyword === this.keyword &&
11067 label_name === this.label_name &&
11068 semicolon === this.semicolon)
11070 return rewriter(this, parents);
11074 return rewriter(new GotoStatement(
11077 semicolon), parents);
11080 static from_json(json, position, source)
11082 let keyword = EditableSyntax.from_json(
11083 json.goto_statement_keyword, position, source);
11084 position += keyword.width;
11085 let label_name = EditableSyntax.from_json(
11086 json.goto_statement_label_name, position, source);
11087 position += label_name.width;
11088 let semicolon = EditableSyntax.from_json(
11089 json.goto_statement_semicolon, position, source);
11090 position += semicolon.width;
11091 return new GotoStatement(
11096 get children_keys()
11098 if (GotoStatement._children_keys == null)
11099 GotoStatement._children_keys = [
11103 return GotoStatement._children_keys;
11106 class ThrowStatement extends EditableSyntax
11113 super('throw_statement', {
11115 expression: expression,
11116 semicolon: semicolon });
11118 get keyword() { return this.children.keyword; }
11119 get expression() { return this.children.expression; }
11120 get semicolon() { return this.children.semicolon; }
11121 with_keyword(keyword){
11122 return new ThrowStatement(
11127 with_expression(expression){
11128 return new ThrowStatement(
11133 with_semicolon(semicolon){
11134 return new ThrowStatement(
11139 rewrite(rewriter, parents)
11141 if (parents == undefined)
11143 let new_parents = parents.slice();
11144 new_parents.push(this);
11145 var keyword = this.keyword.rewrite(rewriter, new_parents);
11146 var expression = this.expression.rewrite(rewriter, new_parents);
11147 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11149 keyword === this.keyword &&
11150 expression === this.expression &&
11151 semicolon === this.semicolon)
11153 return rewriter(this, parents);
11157 return rewriter(new ThrowStatement(
11160 semicolon), parents);
11163 static from_json(json, position, source)
11165 let keyword = EditableSyntax.from_json(
11166 json.throw_keyword, position, source);
11167 position += keyword.width;
11168 let expression = EditableSyntax.from_json(
11169 json.throw_expression, position, source);
11170 position += expression.width;
11171 let semicolon = EditableSyntax.from_json(
11172 json.throw_semicolon, position, source);
11173 position += semicolon.width;
11174 return new ThrowStatement(
11179 get children_keys()
11181 if (ThrowStatement._children_keys == null)
11182 ThrowStatement._children_keys = [
11186 return ThrowStatement._children_keys;
11189 class BreakStatement extends EditableSyntax
11196 super('break_statement', {
11199 semicolon: semicolon });
11201 get keyword() { return this.children.keyword; }
11202 get level() { return this.children.level; }
11203 get semicolon() { return this.children.semicolon; }
11204 with_keyword(keyword){
11205 return new BreakStatement(
11211 return new BreakStatement(
11216 with_semicolon(semicolon){
11217 return new BreakStatement(
11222 rewrite(rewriter, parents)
11224 if (parents == undefined)
11226 let new_parents = parents.slice();
11227 new_parents.push(this);
11228 var keyword = this.keyword.rewrite(rewriter, new_parents);
11229 var level = this.level.rewrite(rewriter, new_parents);
11230 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11232 keyword === this.keyword &&
11233 level === this.level &&
11234 semicolon === this.semicolon)
11236 return rewriter(this, parents);
11240 return rewriter(new BreakStatement(
11243 semicolon), parents);
11246 static from_json(json, position, source)
11248 let keyword = EditableSyntax.from_json(
11249 json.break_keyword, position, source);
11250 position += keyword.width;
11251 let level = EditableSyntax.from_json(
11252 json.break_level, position, source);
11253 position += level.width;
11254 let semicolon = EditableSyntax.from_json(
11255 json.break_semicolon, position, source);
11256 position += semicolon.width;
11257 return new BreakStatement(
11262 get children_keys()
11264 if (BreakStatement._children_keys == null)
11265 BreakStatement._children_keys = [
11269 return BreakStatement._children_keys;
11272 class ContinueStatement extends EditableSyntax
11279 super('continue_statement', {
11282 semicolon: semicolon });
11284 get keyword() { return this.children.keyword; }
11285 get level() { return this.children.level; }
11286 get semicolon() { return this.children.semicolon; }
11287 with_keyword(keyword){
11288 return new ContinueStatement(
11294 return new ContinueStatement(
11299 with_semicolon(semicolon){
11300 return new ContinueStatement(
11305 rewrite(rewriter, parents)
11307 if (parents == undefined)
11309 let new_parents = parents.slice();
11310 new_parents.push(this);
11311 var keyword = this.keyword.rewrite(rewriter, new_parents);
11312 var level = this.level.rewrite(rewriter, new_parents);
11313 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11315 keyword === this.keyword &&
11316 level === this.level &&
11317 semicolon === this.semicolon)
11319 return rewriter(this, parents);
11323 return rewriter(new ContinueStatement(
11326 semicolon), parents);
11329 static from_json(json, position, source)
11331 let keyword = EditableSyntax.from_json(
11332 json.continue_keyword, position, source);
11333 position += keyword.width;
11334 let level = EditableSyntax.from_json(
11335 json.continue_level, position, source);
11336 position += level.width;
11337 let semicolon = EditableSyntax.from_json(
11338 json.continue_semicolon, position, source);
11339 position += semicolon.width;
11340 return new ContinueStatement(
11345 get children_keys()
11347 if (ContinueStatement._children_keys == null)
11348 ContinueStatement._children_keys = [
11352 return ContinueStatement._children_keys;
11355 class FunctionStaticStatement extends EditableSyntax
11362 super('function_static_statement', {
11363 static_keyword: static_keyword,
11364 declarations: declarations,
11365 semicolon: semicolon });
11367 get static_keyword() { return this.children.static_keyword; }
11368 get declarations() { return this.children.declarations; }
11369 get semicolon() { return this.children.semicolon; }
11370 with_static_keyword(static_keyword){
11371 return new FunctionStaticStatement(
11376 with_declarations(declarations){
11377 return new FunctionStaticStatement(
11378 this.static_keyword,
11382 with_semicolon(semicolon){
11383 return new FunctionStaticStatement(
11384 this.static_keyword,
11388 rewrite(rewriter, parents)
11390 if (parents == undefined)
11392 let new_parents = parents.slice();
11393 new_parents.push(this);
11394 var static_keyword = this.static_keyword.rewrite(rewriter, new_parents);
11395 var declarations = this.declarations.rewrite(rewriter, new_parents);
11396 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11398 static_keyword === this.static_keyword &&
11399 declarations === this.declarations &&
11400 semicolon === this.semicolon)
11402 return rewriter(this, parents);
11406 return rewriter(new FunctionStaticStatement(
11409 semicolon), parents);
11412 static from_json(json, position, source)
11414 let static_keyword = EditableSyntax.from_json(
11415 json.static_static_keyword, position, source);
11416 position += static_keyword.width;
11417 let declarations = EditableSyntax.from_json(
11418 json.static_declarations, position, source);
11419 position += declarations.width;
11420 let semicolon = EditableSyntax.from_json(
11421 json.static_semicolon, position, source);
11422 position += semicolon.width;
11423 return new FunctionStaticStatement(
11428 get children_keys()
11430 if (FunctionStaticStatement._children_keys == null)
11431 FunctionStaticStatement._children_keys = [
11435 return FunctionStaticStatement._children_keys;
11438 class StaticDeclarator extends EditableSyntax
11444 super('static_declarator', {
11446 initializer: initializer });
11448 get name() { return this.children.name; }
11449 get initializer() { return this.children.initializer; }
11451 return new StaticDeclarator(
11455 with_initializer(initializer){
11456 return new StaticDeclarator(
11460 rewrite(rewriter, parents)
11462 if (parents == undefined)
11464 let new_parents = parents.slice();
11465 new_parents.push(this);
11466 var name = this.name.rewrite(rewriter, new_parents);
11467 var initializer = this.initializer.rewrite(rewriter, new_parents);
11469 name === this.name &&
11470 initializer === this.initializer)
11472 return rewriter(this, parents);
11476 return rewriter(new StaticDeclarator(
11478 initializer), parents);
11481 static from_json(json, position, source)
11483 let name = EditableSyntax.from_json(
11484 json.static_name, position, source);
11485 position += name.width;
11486 let initializer = EditableSyntax.from_json(
11487 json.static_initializer, position, source);
11488 position += initializer.width;
11489 return new StaticDeclarator(
11493 get children_keys()
11495 if (StaticDeclarator._children_keys == null)
11496 StaticDeclarator._children_keys = [
11499 return StaticDeclarator._children_keys;
11502 class EchoStatement extends EditableSyntax
11509 super('echo_statement', {
11511 expressions: expressions,
11512 semicolon: semicolon });
11514 get keyword() { return this.children.keyword; }
11515 get expressions() { return this.children.expressions; }
11516 get semicolon() { return this.children.semicolon; }
11517 with_keyword(keyword){
11518 return new EchoStatement(
11523 with_expressions(expressions){
11524 return new EchoStatement(
11529 with_semicolon(semicolon){
11530 return new EchoStatement(
11535 rewrite(rewriter, parents)
11537 if (parents == undefined)
11539 let new_parents = parents.slice();
11540 new_parents.push(this);
11541 var keyword = this.keyword.rewrite(rewriter, new_parents);
11542 var expressions = this.expressions.rewrite(rewriter, new_parents);
11543 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11545 keyword === this.keyword &&
11546 expressions === this.expressions &&
11547 semicolon === this.semicolon)
11549 return rewriter(this, parents);
11553 return rewriter(new EchoStatement(
11556 semicolon), parents);
11559 static from_json(json, position, source)
11561 let keyword = EditableSyntax.from_json(
11562 json.echo_keyword, position, source);
11563 position += keyword.width;
11564 let expressions = EditableSyntax.from_json(
11565 json.echo_expressions, position, source);
11566 position += expressions.width;
11567 let semicolon = EditableSyntax.from_json(
11568 json.echo_semicolon, position, source);
11569 position += semicolon.width;
11570 return new EchoStatement(
11575 get children_keys()
11577 if (EchoStatement._children_keys == null)
11578 EchoStatement._children_keys = [
11582 return EchoStatement._children_keys;
11585 class GlobalStatement extends EditableSyntax
11592 super('global_statement', {
11594 variables: variables,
11595 semicolon: semicolon });
11597 get keyword() { return this.children.keyword; }
11598 get variables() { return this.children.variables; }
11599 get semicolon() { return this.children.semicolon; }
11600 with_keyword(keyword){
11601 return new GlobalStatement(
11606 with_variables(variables){
11607 return new GlobalStatement(
11612 with_semicolon(semicolon){
11613 return new GlobalStatement(
11618 rewrite(rewriter, parents)
11620 if (parents == undefined)
11622 let new_parents = parents.slice();
11623 new_parents.push(this);
11624 var keyword = this.keyword.rewrite(rewriter, new_parents);
11625 var variables = this.variables.rewrite(rewriter, new_parents);
11626 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11628 keyword === this.keyword &&
11629 variables === this.variables &&
11630 semicolon === this.semicolon)
11632 return rewriter(this, parents);
11636 return rewriter(new GlobalStatement(
11639 semicolon), parents);
11642 static from_json(json, position, source)
11644 let keyword = EditableSyntax.from_json(
11645 json.global_keyword, position, source);
11646 position += keyword.width;
11647 let variables = EditableSyntax.from_json(
11648 json.global_variables, position, source);
11649 position += variables.width;
11650 let semicolon = EditableSyntax.from_json(
11651 json.global_semicolon, position, source);
11652 position += semicolon.width;
11653 return new GlobalStatement(
11658 get children_keys()
11660 if (GlobalStatement._children_keys == null)
11661 GlobalStatement._children_keys = [
11665 return GlobalStatement._children_keys;
11668 class SimpleInitializer extends EditableSyntax
11674 super('simple_initializer', {
11678 get equal() { return this.children.equal; }
11679 get value() { return this.children.value; }
11681 return new SimpleInitializer(
11686 return new SimpleInitializer(
11690 rewrite(rewriter, parents)
11692 if (parents == undefined)
11694 let new_parents = parents.slice();
11695 new_parents.push(this);
11696 var equal = this.equal.rewrite(rewriter, new_parents);
11697 var value = this.value.rewrite(rewriter, new_parents);
11699 equal === this.equal &&
11700 value === this.value)
11702 return rewriter(this, parents);
11706 return rewriter(new SimpleInitializer(
11711 static from_json(json, position, source)
11713 let equal = EditableSyntax.from_json(
11714 json.simple_initializer_equal, position, source);
11715 position += equal.width;
11716 let value = EditableSyntax.from_json(
11717 json.simple_initializer_value, position, source);
11718 position += value.width;
11719 return new SimpleInitializer(
11723 get children_keys()
11725 if (SimpleInitializer._children_keys == null)
11726 SimpleInitializer._children_keys = [
11729 return SimpleInitializer._children_keys;
11732 class AnonymousClass extends EditableSyntax
11741 implements_keyword,
11745 super('anonymous_class', {
11746 class_keyword: class_keyword,
11747 left_paren: left_paren,
11748 argument_list: argument_list,
11749 right_paren: right_paren,
11750 extends_keyword: extends_keyword,
11751 extends_list: extends_list,
11752 implements_keyword: implements_keyword,
11753 implements_list: implements_list,
11756 get class_keyword() { return this.children.class_keyword; }
11757 get left_paren() { return this.children.left_paren; }
11758 get argument_list() { return this.children.argument_list; }
11759 get right_paren() { return this.children.right_paren; }
11760 get extends_keyword() { return this.children.extends_keyword; }
11761 get extends_list() { return this.children.extends_list; }
11762 get implements_keyword() { return this.children.implements_keyword; }
11763 get implements_list() { return this.children.implements_list; }
11764 get body() { return this.children.body; }
11765 with_class_keyword(class_keyword){
11766 return new AnonymousClass(
11769 this.argument_list,
11771 this.extends_keyword,
11773 this.implements_keyword,
11774 this.implements_list,
11777 with_left_paren(left_paren){
11778 return new AnonymousClass(
11779 this.class_keyword,
11781 this.argument_list,
11783 this.extends_keyword,
11785 this.implements_keyword,
11786 this.implements_list,
11789 with_argument_list(argument_list){
11790 return new AnonymousClass(
11791 this.class_keyword,
11795 this.extends_keyword,
11797 this.implements_keyword,
11798 this.implements_list,
11801 with_right_paren(right_paren){
11802 return new AnonymousClass(
11803 this.class_keyword,
11805 this.argument_list,
11807 this.extends_keyword,
11809 this.implements_keyword,
11810 this.implements_list,
11813 with_extends_keyword(extends_keyword){
11814 return new AnonymousClass(
11815 this.class_keyword,
11817 this.argument_list,
11821 this.implements_keyword,
11822 this.implements_list,
11825 with_extends_list(extends_list){
11826 return new AnonymousClass(
11827 this.class_keyword,
11829 this.argument_list,
11831 this.extends_keyword,
11833 this.implements_keyword,
11834 this.implements_list,
11837 with_implements_keyword(implements_keyword){
11838 return new AnonymousClass(
11839 this.class_keyword,
11841 this.argument_list,
11843 this.extends_keyword,
11845 implements_keyword,
11846 this.implements_list,
11849 with_implements_list(implements_list){
11850 return new AnonymousClass(
11851 this.class_keyword,
11853 this.argument_list,
11855 this.extends_keyword,
11857 this.implements_keyword,
11862 return new AnonymousClass(
11863 this.class_keyword,
11865 this.argument_list,
11867 this.extends_keyword,
11869 this.implements_keyword,
11870 this.implements_list,
11873 rewrite(rewriter, parents)
11875 if (parents == undefined)
11877 let new_parents = parents.slice();
11878 new_parents.push(this);
11879 var class_keyword = this.class_keyword.rewrite(rewriter, new_parents);
11880 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
11881 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
11882 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
11883 var extends_keyword = this.extends_keyword.rewrite(rewriter, new_parents);
11884 var extends_list = this.extends_list.rewrite(rewriter, new_parents);
11885 var implements_keyword = this.implements_keyword.rewrite(rewriter, new_parents);
11886 var implements_list = this.implements_list.rewrite(rewriter, new_parents);
11887 var body = this.body.rewrite(rewriter, new_parents);
11889 class_keyword === this.class_keyword &&
11890 left_paren === this.left_paren &&
11891 argument_list === this.argument_list &&
11892 right_paren === this.right_paren &&
11893 extends_keyword === this.extends_keyword &&
11894 extends_list === this.extends_list &&
11895 implements_keyword === this.implements_keyword &&
11896 implements_list === this.implements_list &&
11897 body === this.body)
11899 return rewriter(this, parents);
11903 return rewriter(new AnonymousClass(
11910 implements_keyword,
11915 static from_json(json, position, source)
11917 let class_keyword = EditableSyntax.from_json(
11918 json.anonymous_class_class_keyword, position, source);
11919 position += class_keyword.width;
11920 let left_paren = EditableSyntax.from_json(
11921 json.anonymous_class_left_paren, position, source);
11922 position += left_paren.width;
11923 let argument_list = EditableSyntax.from_json(
11924 json.anonymous_class_argument_list, position, source);
11925 position += argument_list.width;
11926 let right_paren = EditableSyntax.from_json(
11927 json.anonymous_class_right_paren, position, source);
11928 position += right_paren.width;
11929 let extends_keyword = EditableSyntax.from_json(
11930 json.anonymous_class_extends_keyword, position, source);
11931 position += extends_keyword.width;
11932 let extends_list = EditableSyntax.from_json(
11933 json.anonymous_class_extends_list, position, source);
11934 position += extends_list.width;
11935 let implements_keyword = EditableSyntax.from_json(
11936 json.anonymous_class_implements_keyword, position, source);
11937 position += implements_keyword.width;
11938 let implements_list = EditableSyntax.from_json(
11939 json.anonymous_class_implements_list, position, source);
11940 position += implements_list.width;
11941 let body = EditableSyntax.from_json(
11942 json.anonymous_class_body, position, source);
11943 position += body.width;
11944 return new AnonymousClass(
11951 implements_keyword,
11955 get children_keys()
11957 if (AnonymousClass._children_keys == null)
11958 AnonymousClass._children_keys = [
11965 'implements_keyword',
11968 return AnonymousClass._children_keys;
11971 class AnonymousFunction extends EditableSyntax
11986 super('anonymous_function', {
11987 static_keyword: static_keyword,
11988 async_keyword: async_keyword,
11989 coroutine_keyword: coroutine_keyword,
11990 function_keyword: function_keyword,
11991 left_paren: left_paren,
11992 parameters: parameters,
11993 right_paren: right_paren,
11999 get static_keyword() { return this.children.static_keyword; }
12000 get async_keyword() { return this.children.async_keyword; }
12001 get coroutine_keyword() { return this.children.coroutine_keyword; }
12002 get function_keyword() { return this.children.function_keyword; }
12003 get left_paren() { return this.children.left_paren; }
12004 get parameters() { return this.children.parameters; }
12005 get right_paren() { return this.children.right_paren; }
12006 get colon() { return this.children.colon; }
12007 get type() { return this.children.type; }
12008 get use() { return this.children.use; }
12009 get body() { return this.children.body; }
12010 with_static_keyword(static_keyword){
12011 return new AnonymousFunction(
12013 this.async_keyword,
12014 this.coroutine_keyword,
12015 this.function_keyword,
12024 with_async_keyword(async_keyword){
12025 return new AnonymousFunction(
12026 this.static_keyword,
12028 this.coroutine_keyword,
12029 this.function_keyword,
12038 with_coroutine_keyword(coroutine_keyword){
12039 return new AnonymousFunction(
12040 this.static_keyword,
12041 this.async_keyword,
12043 this.function_keyword,
12052 with_function_keyword(function_keyword){
12053 return new AnonymousFunction(
12054 this.static_keyword,
12055 this.async_keyword,
12056 this.coroutine_keyword,
12066 with_left_paren(left_paren){
12067 return new AnonymousFunction(
12068 this.static_keyword,
12069 this.async_keyword,
12070 this.coroutine_keyword,
12071 this.function_keyword,
12080 with_parameters(parameters){
12081 return new AnonymousFunction(
12082 this.static_keyword,
12083 this.async_keyword,
12084 this.coroutine_keyword,
12085 this.function_keyword,
12094 with_right_paren(right_paren){
12095 return new AnonymousFunction(
12096 this.static_keyword,
12097 this.async_keyword,
12098 this.coroutine_keyword,
12099 this.function_keyword,
12109 return new AnonymousFunction(
12110 this.static_keyword,
12111 this.async_keyword,
12112 this.coroutine_keyword,
12113 this.function_keyword,
12123 return new AnonymousFunction(
12124 this.static_keyword,
12125 this.async_keyword,
12126 this.coroutine_keyword,
12127 this.function_keyword,
12137 return new AnonymousFunction(
12138 this.static_keyword,
12139 this.async_keyword,
12140 this.coroutine_keyword,
12141 this.function_keyword,
12151 return new AnonymousFunction(
12152 this.static_keyword,
12153 this.async_keyword,
12154 this.coroutine_keyword,
12155 this.function_keyword,
12164 rewrite(rewriter, parents)
12166 if (parents == undefined)
12168 let new_parents = parents.slice();
12169 new_parents.push(this);
12170 var static_keyword = this.static_keyword.rewrite(rewriter, new_parents);
12171 var async_keyword = this.async_keyword.rewrite(rewriter, new_parents);
12172 var coroutine_keyword = this.coroutine_keyword.rewrite(rewriter, new_parents);
12173 var function_keyword = this.function_keyword.rewrite(rewriter, new_parents);
12174 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
12175 var parameters = this.parameters.rewrite(rewriter, new_parents);
12176 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
12177 var colon = this.colon.rewrite(rewriter, new_parents);
12178 var type = this.type.rewrite(rewriter, new_parents);
12179 var use = this.use.rewrite(rewriter, new_parents);
12180 var body = this.body.rewrite(rewriter, new_parents);
12182 static_keyword === this.static_keyword &&
12183 async_keyword === this.async_keyword &&
12184 coroutine_keyword === this.coroutine_keyword &&
12185 function_keyword === this.function_keyword &&
12186 left_paren === this.left_paren &&
12187 parameters === this.parameters &&
12188 right_paren === this.right_paren &&
12189 colon === this.colon &&
12190 type === this.type &&
12191 use === this.use &&
12192 body === this.body)
12194 return rewriter(this, parents);
12198 return rewriter(new AnonymousFunction(
12212 static from_json(json, position, source)
12214 let static_keyword = EditableSyntax.from_json(
12215 json.anonymous_static_keyword, position, source);
12216 position += static_keyword.width;
12217 let async_keyword = EditableSyntax.from_json(
12218 json.anonymous_async_keyword, position, source);
12219 position += async_keyword.width;
12220 let coroutine_keyword = EditableSyntax.from_json(
12221 json.anonymous_coroutine_keyword, position, source);
12222 position += coroutine_keyword.width;
12223 let function_keyword = EditableSyntax.from_json(
12224 json.anonymous_function_keyword, position, source);
12225 position += function_keyword.width;
12226 let left_paren = EditableSyntax.from_json(
12227 json.anonymous_left_paren, position, source);
12228 position += left_paren.width;
12229 let parameters = EditableSyntax.from_json(
12230 json.anonymous_parameters, position, source);
12231 position += parameters.width;
12232 let right_paren = EditableSyntax.from_json(
12233 json.anonymous_right_paren, position, source);
12234 position += right_paren.width;
12235 let colon = EditableSyntax.from_json(
12236 json.anonymous_colon, position, source);
12237 position += colon.width;
12238 let type = EditableSyntax.from_json(
12239 json.anonymous_type, position, source);
12240 position += type.width;
12241 let use = EditableSyntax.from_json(
12242 json.anonymous_use, position, source);
12243 position += use.width;
12244 let body = EditableSyntax.from_json(
12245 json.anonymous_body, position, source);
12246 position += body.width;
12247 return new AnonymousFunction(
12260 get children_keys()
12262 if (AnonymousFunction._children_keys == null)
12263 AnonymousFunction._children_keys = [
12266 'coroutine_keyword',
12267 'function_keyword',
12275 return AnonymousFunction._children_keys;
12278 class Php7AnonymousFunction extends EditableSyntax
12293 super('php7_anonymous_function', {
12294 static_keyword: static_keyword,
12295 async_keyword: async_keyword,
12296 coroutine_keyword: coroutine_keyword,
12297 function_keyword: function_keyword,
12298 left_paren: left_paren,
12299 parameters: parameters,
12300 right_paren: right_paren,
12306 get static_keyword() { return this.children.static_keyword; }
12307 get async_keyword() { return this.children.async_keyword; }
12308 get coroutine_keyword() { return this.children.coroutine_keyword; }
12309 get function_keyword() { return this.children.function_keyword; }
12310 get left_paren() { return this.children.left_paren; }
12311 get parameters() { return this.children.parameters; }
12312 get right_paren() { return this.children.right_paren; }
12313 get use() { return this.children.use; }
12314 get colon() { return this.children.colon; }
12315 get type() { return this.children.type; }
12316 get body() { return this.children.body; }
12317 with_static_keyword(static_keyword){
12318 return new Php7AnonymousFunction(
12320 this.async_keyword,
12321 this.coroutine_keyword,
12322 this.function_keyword,
12331 with_async_keyword(async_keyword){
12332 return new Php7AnonymousFunction(
12333 this.static_keyword,
12335 this.coroutine_keyword,
12336 this.function_keyword,
12345 with_coroutine_keyword(coroutine_keyword){
12346 return new Php7AnonymousFunction(
12347 this.static_keyword,
12348 this.async_keyword,
12350 this.function_keyword,
12359 with_function_keyword(function_keyword){
12360 return new Php7AnonymousFunction(
12361 this.static_keyword,
12362 this.async_keyword,
12363 this.coroutine_keyword,
12373 with_left_paren(left_paren){
12374 return new Php7AnonymousFunction(
12375 this.static_keyword,
12376 this.async_keyword,
12377 this.coroutine_keyword,
12378 this.function_keyword,
12387 with_parameters(parameters){
12388 return new Php7AnonymousFunction(
12389 this.static_keyword,
12390 this.async_keyword,
12391 this.coroutine_keyword,
12392 this.function_keyword,
12401 with_right_paren(right_paren){
12402 return new Php7AnonymousFunction(
12403 this.static_keyword,
12404 this.async_keyword,
12405 this.coroutine_keyword,
12406 this.function_keyword,
12416 return new Php7AnonymousFunction(
12417 this.static_keyword,
12418 this.async_keyword,
12419 this.coroutine_keyword,
12420 this.function_keyword,
12430 return new Php7AnonymousFunction(
12431 this.static_keyword,
12432 this.async_keyword,
12433 this.coroutine_keyword,
12434 this.function_keyword,
12444 return new Php7AnonymousFunction(
12445 this.static_keyword,
12446 this.async_keyword,
12447 this.coroutine_keyword,
12448 this.function_keyword,
12458 return new Php7AnonymousFunction(
12459 this.static_keyword,
12460 this.async_keyword,
12461 this.coroutine_keyword,
12462 this.function_keyword,
12471 rewrite(rewriter, parents)
12473 if (parents == undefined)
12475 let new_parents = parents.slice();
12476 new_parents.push(this);
12477 var static_keyword = this.static_keyword.rewrite(rewriter, new_parents);
12478 var async_keyword = this.async_keyword.rewrite(rewriter, new_parents);
12479 var coroutine_keyword = this.coroutine_keyword.rewrite(rewriter, new_parents);
12480 var function_keyword = this.function_keyword.rewrite(rewriter, new_parents);
12481 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
12482 var parameters = this.parameters.rewrite(rewriter, new_parents);
12483 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
12484 var use = this.use.rewrite(rewriter, new_parents);
12485 var colon = this.colon.rewrite(rewriter, new_parents);
12486 var type = this.type.rewrite(rewriter, new_parents);
12487 var body = this.body.rewrite(rewriter, new_parents);
12489 static_keyword === this.static_keyword &&
12490 async_keyword === this.async_keyword &&
12491 coroutine_keyword === this.coroutine_keyword &&
12492 function_keyword === this.function_keyword &&
12493 left_paren === this.left_paren &&
12494 parameters === this.parameters &&
12495 right_paren === this.right_paren &&
12496 use === this.use &&
12497 colon === this.colon &&
12498 type === this.type &&
12499 body === this.body)
12501 return rewriter(this, parents);
12505 return rewriter(new Php7AnonymousFunction(
12519 static from_json(json, position, source)
12521 let static_keyword = EditableSyntax.from_json(
12522 json.php7_anonymous_static_keyword, position, source);
12523 position += static_keyword.width;
12524 let async_keyword = EditableSyntax.from_json(
12525 json.php7_anonymous_async_keyword, position, source);
12526 position += async_keyword.width;
12527 let coroutine_keyword = EditableSyntax.from_json(
12528 json.php7_anonymous_coroutine_keyword, position, source);
12529 position += coroutine_keyword.width;
12530 let function_keyword = EditableSyntax.from_json(
12531 json.php7_anonymous_function_keyword, position, source);
12532 position += function_keyword.width;
12533 let left_paren = EditableSyntax.from_json(
12534 json.php7_anonymous_left_paren, position, source);
12535 position += left_paren.width;
12536 let parameters = EditableSyntax.from_json(
12537 json.php7_anonymous_parameters, position, source);
12538 position += parameters.width;
12539 let right_paren = EditableSyntax.from_json(
12540 json.php7_anonymous_right_paren, position, source);
12541 position += right_paren.width;
12542 let use = EditableSyntax.from_json(
12543 json.php7_anonymous_use, position, source);
12544 position += use.width;
12545 let colon = EditableSyntax.from_json(
12546 json.php7_anonymous_colon, position, source);
12547 position += colon.width;
12548 let type = EditableSyntax.from_json(
12549 json.php7_anonymous_type, position, source);
12550 position += type.width;
12551 let body = EditableSyntax.from_json(
12552 json.php7_anonymous_body, position, source);
12553 position += body.width;
12554 return new Php7AnonymousFunction(
12567 get children_keys()
12569 if (Php7AnonymousFunction._children_keys == null)
12570 Php7AnonymousFunction._children_keys = [
12573 'coroutine_keyword',
12574 'function_keyword',
12582 return Php7AnonymousFunction._children_keys;
12585 class AnonymousFunctionUseClause extends EditableSyntax
12593 super('anonymous_function_use_clause', {
12595 left_paren: left_paren,
12596 variables: variables,
12597 right_paren: right_paren });
12599 get keyword() { return this.children.keyword; }
12600 get left_paren() { return this.children.left_paren; }
12601 get variables() { return this.children.variables; }
12602 get right_paren() { return this.children.right_paren; }
12603 with_keyword(keyword){
12604 return new AnonymousFunctionUseClause(
12610 with_left_paren(left_paren){
12611 return new AnonymousFunctionUseClause(
12617 with_variables(variables){
12618 return new AnonymousFunctionUseClause(
12624 with_right_paren(right_paren){
12625 return new AnonymousFunctionUseClause(
12631 rewrite(rewriter, parents)
12633 if (parents == undefined)
12635 let new_parents = parents.slice();
12636 new_parents.push(this);
12637 var keyword = this.keyword.rewrite(rewriter, new_parents);
12638 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
12639 var variables = this.variables.rewrite(rewriter, new_parents);
12640 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
12642 keyword === this.keyword &&
12643 left_paren === this.left_paren &&
12644 variables === this.variables &&
12645 right_paren === this.right_paren)
12647 return rewriter(this, parents);
12651 return rewriter(new AnonymousFunctionUseClause(
12655 right_paren), parents);
12658 static from_json(json, position, source)
12660 let keyword = EditableSyntax.from_json(
12661 json.anonymous_use_keyword, position, source);
12662 position += keyword.width;
12663 let left_paren = EditableSyntax.from_json(
12664 json.anonymous_use_left_paren, position, source);
12665 position += left_paren.width;
12666 let variables = EditableSyntax.from_json(
12667 json.anonymous_use_variables, position, source);
12668 position += variables.width;
12669 let right_paren = EditableSyntax.from_json(
12670 json.anonymous_use_right_paren, position, source);
12671 position += right_paren.width;
12672 return new AnonymousFunctionUseClause(
12678 get children_keys()
12680 if (AnonymousFunctionUseClause._children_keys == null)
12681 AnonymousFunctionUseClause._children_keys = [
12686 return AnonymousFunctionUseClause._children_keys;
12689 class LambdaExpression extends EditableSyntax
12698 super('lambda_expression', {
12700 coroutine: coroutine,
12701 signature: signature,
12705 get async() { return this.children.async; }
12706 get coroutine() { return this.children.coroutine; }
12707 get signature() { return this.children.signature; }
12708 get arrow() { return this.children.arrow; }
12709 get body() { return this.children.body; }
12711 return new LambdaExpression(
12718 with_coroutine(coroutine){
12719 return new LambdaExpression(
12726 with_signature(signature){
12727 return new LambdaExpression(
12735 return new LambdaExpression(
12743 return new LambdaExpression(
12750 rewrite(rewriter, parents)
12752 if (parents == undefined)
12754 let new_parents = parents.slice();
12755 new_parents.push(this);
12756 var async = this.async.rewrite(rewriter, new_parents);
12757 var coroutine = this.coroutine.rewrite(rewriter, new_parents);
12758 var signature = this.signature.rewrite(rewriter, new_parents);
12759 var arrow = this.arrow.rewrite(rewriter, new_parents);
12760 var body = this.body.rewrite(rewriter, new_parents);
12762 async === this.async &&
12763 coroutine === this.coroutine &&
12764 signature === this.signature &&
12765 arrow === this.arrow &&
12766 body === this.body)
12768 return rewriter(this, parents);
12772 return rewriter(new LambdaExpression(
12780 static from_json(json, position, source)
12782 let async = EditableSyntax.from_json(
12783 json.lambda_async, position, source);
12784 position += async.width;
12785 let coroutine = EditableSyntax.from_json(
12786 json.lambda_coroutine, position, source);
12787 position += coroutine.width;
12788 let signature = EditableSyntax.from_json(
12789 json.lambda_signature, position, source);
12790 position += signature.width;
12791 let arrow = EditableSyntax.from_json(
12792 json.lambda_arrow, position, source);
12793 position += arrow.width;
12794 let body = EditableSyntax.from_json(
12795 json.lambda_body, position, source);
12796 position += body.width;
12797 return new LambdaExpression(
12804 get children_keys()
12806 if (LambdaExpression._children_keys == null)
12807 LambdaExpression._children_keys = [
12813 return LambdaExpression._children_keys;
12816 class LambdaSignature extends EditableSyntax
12825 super('lambda_signature', {
12826 left_paren: left_paren,
12827 parameters: parameters,
12828 right_paren: right_paren,
12832 get left_paren() { return this.children.left_paren; }
12833 get parameters() { return this.children.parameters; }
12834 get right_paren() { return this.children.right_paren; }
12835 get colon() { return this.children.colon; }
12836 get type() { return this.children.type; }
12837 with_left_paren(left_paren){
12838 return new LambdaSignature(
12845 with_parameters(parameters){
12846 return new LambdaSignature(
12853 with_right_paren(right_paren){
12854 return new LambdaSignature(
12862 return new LambdaSignature(
12870 return new LambdaSignature(
12877 rewrite(rewriter, parents)
12879 if (parents == undefined)
12881 let new_parents = parents.slice();
12882 new_parents.push(this);
12883 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
12884 var parameters = this.parameters.rewrite(rewriter, new_parents);
12885 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
12886 var colon = this.colon.rewrite(rewriter, new_parents);
12887 var type = this.type.rewrite(rewriter, new_parents);
12889 left_paren === this.left_paren &&
12890 parameters === this.parameters &&
12891 right_paren === this.right_paren &&
12892 colon === this.colon &&
12893 type === this.type)
12895 return rewriter(this, parents);
12899 return rewriter(new LambdaSignature(
12907 static from_json(json, position, source)
12909 let left_paren = EditableSyntax.from_json(
12910 json.lambda_left_paren, position, source);
12911 position += left_paren.width;
12912 let parameters = EditableSyntax.from_json(
12913 json.lambda_parameters, position, source);
12914 position += parameters.width;
12915 let right_paren = EditableSyntax.from_json(
12916 json.lambda_right_paren, position, source);
12917 position += right_paren.width;
12918 let colon = EditableSyntax.from_json(
12919 json.lambda_colon, position, source);
12920 position += colon.width;
12921 let type = EditableSyntax.from_json(
12922 json.lambda_type, position, source);
12923 position += type.width;
12924 return new LambdaSignature(
12931 get children_keys()
12933 if (LambdaSignature._children_keys == null)
12934 LambdaSignature._children_keys = [
12940 return LambdaSignature._children_keys;
12943 class CastExpression extends EditableSyntax
12951 super('cast_expression', {
12952 left_paren: left_paren,
12954 right_paren: right_paren,
12955 operand: operand });
12957 get left_paren() { return this.children.left_paren; }
12958 get type() { return this.children.type; }
12959 get right_paren() { return this.children.right_paren; }
12960 get operand() { return this.children.operand; }
12961 with_left_paren(left_paren){
12962 return new CastExpression(
12969 return new CastExpression(
12975 with_right_paren(right_paren){
12976 return new CastExpression(
12982 with_operand(operand){
12983 return new CastExpression(
12989 rewrite(rewriter, parents)
12991 if (parents == undefined)
12993 let new_parents = parents.slice();
12994 new_parents.push(this);
12995 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
12996 var type = this.type.rewrite(rewriter, new_parents);
12997 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
12998 var operand = this.operand.rewrite(rewriter, new_parents);
13000 left_paren === this.left_paren &&
13001 type === this.type &&
13002 right_paren === this.right_paren &&
13003 operand === this.operand)
13005 return rewriter(this, parents);
13009 return rewriter(new CastExpression(
13013 operand), parents);
13016 static from_json(json, position, source)
13018 let left_paren = EditableSyntax.from_json(
13019 json.cast_left_paren, position, source);
13020 position += left_paren.width;
13021 let type = EditableSyntax.from_json(
13022 json.cast_type, position, source);
13023 position += type.width;
13024 let right_paren = EditableSyntax.from_json(
13025 json.cast_right_paren, position, source);
13026 position += right_paren.width;
13027 let operand = EditableSyntax.from_json(
13028 json.cast_operand, position, source);
13029 position += operand.width;
13030 return new CastExpression(
13036 get children_keys()
13038 if (CastExpression._children_keys == null)
13039 CastExpression._children_keys = [
13044 return CastExpression._children_keys;
13047 class ScopeResolutionExpression extends EditableSyntax
13054 super('scope_resolution_expression', {
13055 qualifier: qualifier,
13056 operator: operator,
13059 get qualifier() { return this.children.qualifier; }
13060 get operator() { return this.children.operator; }
13061 get name() { return this.children.name; }
13062 with_qualifier(qualifier){
13063 return new ScopeResolutionExpression(
13068 with_operator(operator){
13069 return new ScopeResolutionExpression(
13075 return new ScopeResolutionExpression(
13080 rewrite(rewriter, parents)
13082 if (parents == undefined)
13084 let new_parents = parents.slice();
13085 new_parents.push(this);
13086 var qualifier = this.qualifier.rewrite(rewriter, new_parents);
13087 var operator = this.operator.rewrite(rewriter, new_parents);
13088 var name = this.name.rewrite(rewriter, new_parents);
13090 qualifier === this.qualifier &&
13091 operator === this.operator &&
13092 name === this.name)
13094 return rewriter(this, parents);
13098 return rewriter(new ScopeResolutionExpression(
13104 static from_json(json, position, source)
13106 let qualifier = EditableSyntax.from_json(
13107 json.scope_resolution_qualifier, position, source);
13108 position += qualifier.width;
13109 let operator = EditableSyntax.from_json(
13110 json.scope_resolution_operator, position, source);
13111 position += operator.width;
13112 let name = EditableSyntax.from_json(
13113 json.scope_resolution_name, position, source);
13114 position += name.width;
13115 return new ScopeResolutionExpression(
13120 get children_keys()
13122 if (ScopeResolutionExpression._children_keys == null)
13123 ScopeResolutionExpression._children_keys = [
13127 return ScopeResolutionExpression._children_keys;
13130 class MemberSelectionExpression extends EditableSyntax
13137 super('member_selection_expression', {
13139 operator: operator,
13142 get object() { return this.children.object; }
13143 get operator() { return this.children.operator; }
13144 get name() { return this.children.name; }
13145 with_object(object){
13146 return new MemberSelectionExpression(
13151 with_operator(operator){
13152 return new MemberSelectionExpression(
13158 return new MemberSelectionExpression(
13163 rewrite(rewriter, parents)
13165 if (parents == undefined)
13167 let new_parents = parents.slice();
13168 new_parents.push(this);
13169 var object = this.object.rewrite(rewriter, new_parents);
13170 var operator = this.operator.rewrite(rewriter, new_parents);
13171 var name = this.name.rewrite(rewriter, new_parents);
13173 object === this.object &&
13174 operator === this.operator &&
13175 name === this.name)
13177 return rewriter(this, parents);
13181 return rewriter(new MemberSelectionExpression(
13187 static from_json(json, position, source)
13189 let object = EditableSyntax.from_json(
13190 json.member_object, position, source);
13191 position += object.width;
13192 let operator = EditableSyntax.from_json(
13193 json.member_operator, position, source);
13194 position += operator.width;
13195 let name = EditableSyntax.from_json(
13196 json.member_name, position, source);
13197 position += name.width;
13198 return new MemberSelectionExpression(
13203 get children_keys()
13205 if (MemberSelectionExpression._children_keys == null)
13206 MemberSelectionExpression._children_keys = [
13210 return MemberSelectionExpression._children_keys;
13213 class SafeMemberSelectionExpression extends EditableSyntax
13220 super('safe_member_selection_expression', {
13222 operator: operator,
13225 get object() { return this.children.object; }
13226 get operator() { return this.children.operator; }
13227 get name() { return this.children.name; }
13228 with_object(object){
13229 return new SafeMemberSelectionExpression(
13234 with_operator(operator){
13235 return new SafeMemberSelectionExpression(
13241 return new SafeMemberSelectionExpression(
13246 rewrite(rewriter, parents)
13248 if (parents == undefined)
13250 let new_parents = parents.slice();
13251 new_parents.push(this);
13252 var object = this.object.rewrite(rewriter, new_parents);
13253 var operator = this.operator.rewrite(rewriter, new_parents);
13254 var name = this.name.rewrite(rewriter, new_parents);
13256 object === this.object &&
13257 operator === this.operator &&
13258 name === this.name)
13260 return rewriter(this, parents);
13264 return rewriter(new SafeMemberSelectionExpression(
13270 static from_json(json, position, source)
13272 let object = EditableSyntax.from_json(
13273 json.safe_member_object, position, source);
13274 position += object.width;
13275 let operator = EditableSyntax.from_json(
13276 json.safe_member_operator, position, source);
13277 position += operator.width;
13278 let name = EditableSyntax.from_json(
13279 json.safe_member_name, position, source);
13280 position += name.width;
13281 return new SafeMemberSelectionExpression(
13286 get children_keys()
13288 if (SafeMemberSelectionExpression._children_keys == null)
13289 SafeMemberSelectionExpression._children_keys = [
13293 return SafeMemberSelectionExpression._children_keys;
13296 class EmbeddedMemberSelectionExpression extends EditableSyntax
13303 super('embedded_member_selection_expression', {
13305 operator: operator,
13308 get object() { return this.children.object; }
13309 get operator() { return this.children.operator; }
13310 get name() { return this.children.name; }
13311 with_object(object){
13312 return new EmbeddedMemberSelectionExpression(
13317 with_operator(operator){
13318 return new EmbeddedMemberSelectionExpression(
13324 return new EmbeddedMemberSelectionExpression(
13329 rewrite(rewriter, parents)
13331 if (parents == undefined)
13333 let new_parents = parents.slice();
13334 new_parents.push(this);
13335 var object = this.object.rewrite(rewriter, new_parents);
13336 var operator = this.operator.rewrite(rewriter, new_parents);
13337 var name = this.name.rewrite(rewriter, new_parents);
13339 object === this.object &&
13340 operator === this.operator &&
13341 name === this.name)
13343 return rewriter(this, parents);
13347 return rewriter(new EmbeddedMemberSelectionExpression(
13353 static from_json(json, position, source)
13355 let object = EditableSyntax.from_json(
13356 json.embedded_member_object, position, source);
13357 position += object.width;
13358 let operator = EditableSyntax.from_json(
13359 json.embedded_member_operator, position, source);
13360 position += operator.width;
13361 let name = EditableSyntax.from_json(
13362 json.embedded_member_name, position, source);
13363 position += name.width;
13364 return new EmbeddedMemberSelectionExpression(
13369 get children_keys()
13371 if (EmbeddedMemberSelectionExpression._children_keys == null)
13372 EmbeddedMemberSelectionExpression._children_keys = [
13376 return EmbeddedMemberSelectionExpression._children_keys;
13379 class YieldExpression extends EditableSyntax
13385 super('yield_expression', {
13387 operand: operand });
13389 get keyword() { return this.children.keyword; }
13390 get operand() { return this.children.operand; }
13391 with_keyword(keyword){
13392 return new YieldExpression(
13396 with_operand(operand){
13397 return new YieldExpression(
13401 rewrite(rewriter, parents)
13403 if (parents == undefined)
13405 let new_parents = parents.slice();
13406 new_parents.push(this);
13407 var keyword = this.keyword.rewrite(rewriter, new_parents);
13408 var operand = this.operand.rewrite(rewriter, new_parents);
13410 keyword === this.keyword &&
13411 operand === this.operand)
13413 return rewriter(this, parents);
13417 return rewriter(new YieldExpression(
13419 operand), parents);
13422 static from_json(json, position, source)
13424 let keyword = EditableSyntax.from_json(
13425 json.yield_keyword, position, source);
13426 position += keyword.width;
13427 let operand = EditableSyntax.from_json(
13428 json.yield_operand, position, source);
13429 position += operand.width;
13430 return new YieldExpression(
13434 get children_keys()
13436 if (YieldExpression._children_keys == null)
13437 YieldExpression._children_keys = [
13440 return YieldExpression._children_keys;
13443 class YieldFromExpression extends EditableSyntax
13450 super('yield_from_expression', {
13451 yield_keyword: yield_keyword,
13452 from_keyword: from_keyword,
13453 operand: operand });
13455 get yield_keyword() { return this.children.yield_keyword; }
13456 get from_keyword() { return this.children.from_keyword; }
13457 get operand() { return this.children.operand; }
13458 with_yield_keyword(yield_keyword){
13459 return new YieldFromExpression(
13464 with_from_keyword(from_keyword){
13465 return new YieldFromExpression(
13466 this.yield_keyword,
13470 with_operand(operand){
13471 return new YieldFromExpression(
13472 this.yield_keyword,
13476 rewrite(rewriter, parents)
13478 if (parents == undefined)
13480 let new_parents = parents.slice();
13481 new_parents.push(this);
13482 var yield_keyword = this.yield_keyword.rewrite(rewriter, new_parents);
13483 var from_keyword = this.from_keyword.rewrite(rewriter, new_parents);
13484 var operand = this.operand.rewrite(rewriter, new_parents);
13486 yield_keyword === this.yield_keyword &&
13487 from_keyword === this.from_keyword &&
13488 operand === this.operand)
13490 return rewriter(this, parents);
13494 return rewriter(new YieldFromExpression(
13497 operand), parents);
13500 static from_json(json, position, source)
13502 let yield_keyword = EditableSyntax.from_json(
13503 json.yield_from_yield_keyword, position, source);
13504 position += yield_keyword.width;
13505 let from_keyword = EditableSyntax.from_json(
13506 json.yield_from_from_keyword, position, source);
13507 position += from_keyword.width;
13508 let operand = EditableSyntax.from_json(
13509 json.yield_from_operand, position, source);
13510 position += operand.width;
13511 return new YieldFromExpression(
13516 get children_keys()
13518 if (YieldFromExpression._children_keys == null)
13519 YieldFromExpression._children_keys = [
13523 return YieldFromExpression._children_keys;
13526 class PrefixUnaryExpression extends EditableSyntax
13532 super('prefix_unary_expression', {
13533 operator: operator,
13534 operand: operand });
13536 get operator() { return this.children.operator; }
13537 get operand() { return this.children.operand; }
13538 with_operator(operator){
13539 return new PrefixUnaryExpression(
13543 with_operand(operand){
13544 return new PrefixUnaryExpression(
13548 rewrite(rewriter, parents)
13550 if (parents == undefined)
13552 let new_parents = parents.slice();
13553 new_parents.push(this);
13554 var operator = this.operator.rewrite(rewriter, new_parents);
13555 var operand = this.operand.rewrite(rewriter, new_parents);
13557 operator === this.operator &&
13558 operand === this.operand)
13560 return rewriter(this, parents);
13564 return rewriter(new PrefixUnaryExpression(
13566 operand), parents);
13569 static from_json(json, position, source)
13571 let operator = EditableSyntax.from_json(
13572 json.prefix_unary_operator, position, source);
13573 position += operator.width;
13574 let operand = EditableSyntax.from_json(
13575 json.prefix_unary_operand, position, source);
13576 position += operand.width;
13577 return new PrefixUnaryExpression(
13581 get children_keys()
13583 if (PrefixUnaryExpression._children_keys == null)
13584 PrefixUnaryExpression._children_keys = [
13587 return PrefixUnaryExpression._children_keys;
13590 class PostfixUnaryExpression extends EditableSyntax
13596 super('postfix_unary_expression', {
13598 operator: operator });
13600 get operand() { return this.children.operand; }
13601 get operator() { return this.children.operator; }
13602 with_operand(operand){
13603 return new PostfixUnaryExpression(
13607 with_operator(operator){
13608 return new PostfixUnaryExpression(
13612 rewrite(rewriter, parents)
13614 if (parents == undefined)
13616 let new_parents = parents.slice();
13617 new_parents.push(this);
13618 var operand = this.operand.rewrite(rewriter, new_parents);
13619 var operator = this.operator.rewrite(rewriter, new_parents);
13621 operand === this.operand &&
13622 operator === this.operator)
13624 return rewriter(this, parents);
13628 return rewriter(new PostfixUnaryExpression(
13630 operator), parents);
13633 static from_json(json, position, source)
13635 let operand = EditableSyntax.from_json(
13636 json.postfix_unary_operand, position, source);
13637 position += operand.width;
13638 let operator = EditableSyntax.from_json(
13639 json.postfix_unary_operator, position, source);
13640 position += operator.width;
13641 return new PostfixUnaryExpression(
13645 get children_keys()
13647 if (PostfixUnaryExpression._children_keys == null)
13648 PostfixUnaryExpression._children_keys = [
13651 return PostfixUnaryExpression._children_keys;
13654 class BinaryExpression extends EditableSyntax
13661 super('binary_expression', {
13662 left_operand: left_operand,
13663 operator: operator,
13664 right_operand: right_operand });
13666 get left_operand() { return this.children.left_operand; }
13667 get operator() { return this.children.operator; }
13668 get right_operand() { return this.children.right_operand; }
13669 with_left_operand(left_operand){
13670 return new BinaryExpression(
13673 this.right_operand);
13675 with_operator(operator){
13676 return new BinaryExpression(
13679 this.right_operand);
13681 with_right_operand(right_operand){
13682 return new BinaryExpression(
13687 rewrite(rewriter, parents)
13689 if (parents == undefined)
13691 let new_parents = parents.slice();
13692 new_parents.push(this);
13693 var left_operand = this.left_operand.rewrite(rewriter, new_parents);
13694 var operator = this.operator.rewrite(rewriter, new_parents);
13695 var right_operand = this.right_operand.rewrite(rewriter, new_parents);
13697 left_operand === this.left_operand &&
13698 operator === this.operator &&
13699 right_operand === this.right_operand)
13701 return rewriter(this, parents);
13705 return rewriter(new BinaryExpression(
13708 right_operand), parents);
13711 static from_json(json, position, source)
13713 let left_operand = EditableSyntax.from_json(
13714 json.binary_left_operand, position, source);
13715 position += left_operand.width;
13716 let operator = EditableSyntax.from_json(
13717 json.binary_operator, position, source);
13718 position += operator.width;
13719 let right_operand = EditableSyntax.from_json(
13720 json.binary_right_operand, position, source);
13721 position += right_operand.width;
13722 return new BinaryExpression(
13727 get children_keys()
13729 if (BinaryExpression._children_keys == null)
13730 BinaryExpression._children_keys = [
13734 return BinaryExpression._children_keys;
13737 class InstanceofExpression extends EditableSyntax
13744 super('instanceof_expression', {
13745 left_operand: left_operand,
13746 operator: operator,
13747 right_operand: right_operand });
13749 get left_operand() { return this.children.left_operand; }
13750 get operator() { return this.children.operator; }
13751 get right_operand() { return this.children.right_operand; }
13752 with_left_operand(left_operand){
13753 return new InstanceofExpression(
13756 this.right_operand);
13758 with_operator(operator){
13759 return new InstanceofExpression(
13762 this.right_operand);
13764 with_right_operand(right_operand){
13765 return new InstanceofExpression(
13770 rewrite(rewriter, parents)
13772 if (parents == undefined)
13774 let new_parents = parents.slice();
13775 new_parents.push(this);
13776 var left_operand = this.left_operand.rewrite(rewriter, new_parents);
13777 var operator = this.operator.rewrite(rewriter, new_parents);
13778 var right_operand = this.right_operand.rewrite(rewriter, new_parents);
13780 left_operand === this.left_operand &&
13781 operator === this.operator &&
13782 right_operand === this.right_operand)
13784 return rewriter(this, parents);
13788 return rewriter(new InstanceofExpression(
13791 right_operand), parents);
13794 static from_json(json, position, source)
13796 let left_operand = EditableSyntax.from_json(
13797 json.instanceof_left_operand, position, source);
13798 position += left_operand.width;
13799 let operator = EditableSyntax.from_json(
13800 json.instanceof_operator, position, source);
13801 position += operator.width;
13802 let right_operand = EditableSyntax.from_json(
13803 json.instanceof_right_operand, position, source);
13804 position += right_operand.width;
13805 return new InstanceofExpression(
13810 get children_keys()
13812 if (InstanceofExpression._children_keys == null)
13813 InstanceofExpression._children_keys = [
13817 return InstanceofExpression._children_keys;
13820 class IsExpression extends EditableSyntax
13827 super('is_expression', {
13828 left_operand: left_operand,
13829 operator: operator,
13830 right_operand: right_operand });
13832 get left_operand() { return this.children.left_operand; }
13833 get operator() { return this.children.operator; }
13834 get right_operand() { return this.children.right_operand; }
13835 with_left_operand(left_operand){
13836 return new IsExpression(
13839 this.right_operand);
13841 with_operator(operator){
13842 return new IsExpression(
13845 this.right_operand);
13847 with_right_operand(right_operand){
13848 return new IsExpression(
13853 rewrite(rewriter, parents)
13855 if (parents == undefined)
13857 let new_parents = parents.slice();
13858 new_parents.push(this);
13859 var left_operand = this.left_operand.rewrite(rewriter, new_parents);
13860 var operator = this.operator.rewrite(rewriter, new_parents);
13861 var right_operand = this.right_operand.rewrite(rewriter, new_parents);
13863 left_operand === this.left_operand &&
13864 operator === this.operator &&
13865 right_operand === this.right_operand)
13867 return rewriter(this, parents);
13871 return rewriter(new IsExpression(
13874 right_operand), parents);
13877 static from_json(json, position, source)
13879 let left_operand = EditableSyntax.from_json(
13880 json.is_left_operand, position, source);
13881 position += left_operand.width;
13882 let operator = EditableSyntax.from_json(
13883 json.is_operator, position, source);
13884 position += operator.width;
13885 let right_operand = EditableSyntax.from_json(
13886 json.is_right_operand, position, source);
13887 position += right_operand.width;
13888 return new IsExpression(
13893 get children_keys()
13895 if (IsExpression._children_keys == null)
13896 IsExpression._children_keys = [
13900 return IsExpression._children_keys;
13903 class ConditionalExpression extends EditableSyntax
13912 super('conditional_expression', {
13914 question: question,
13915 consequence: consequence,
13917 alternative: alternative });
13919 get test() { return this.children.test; }
13920 get question() { return this.children.question; }
13921 get consequence() { return this.children.consequence; }
13922 get colon() { return this.children.colon; }
13923 get alternative() { return this.children.alternative; }
13925 return new ConditionalExpression(
13932 with_question(question){
13933 return new ConditionalExpression(
13940 with_consequence(consequence){
13941 return new ConditionalExpression(
13949 return new ConditionalExpression(
13956 with_alternative(alternative){
13957 return new ConditionalExpression(
13964 rewrite(rewriter, parents)
13966 if (parents == undefined)
13968 let new_parents = parents.slice();
13969 new_parents.push(this);
13970 var test = this.test.rewrite(rewriter, new_parents);
13971 var question = this.question.rewrite(rewriter, new_parents);
13972 var consequence = this.consequence.rewrite(rewriter, new_parents);
13973 var colon = this.colon.rewrite(rewriter, new_parents);
13974 var alternative = this.alternative.rewrite(rewriter, new_parents);
13976 test === this.test &&
13977 question === this.question &&
13978 consequence === this.consequence &&
13979 colon === this.colon &&
13980 alternative === this.alternative)
13982 return rewriter(this, parents);
13986 return rewriter(new ConditionalExpression(
13991 alternative), parents);
13994 static from_json(json, position, source)
13996 let test = EditableSyntax.from_json(
13997 json.conditional_test, position, source);
13998 position += test.width;
13999 let question = EditableSyntax.from_json(
14000 json.conditional_question, position, source);
14001 position += question.width;
14002 let consequence = EditableSyntax.from_json(
14003 json.conditional_consequence, position, source);
14004 position += consequence.width;
14005 let colon = EditableSyntax.from_json(
14006 json.conditional_colon, position, source);
14007 position += colon.width;
14008 let alternative = EditableSyntax.from_json(
14009 json.conditional_alternative, position, source);
14010 position += alternative.width;
14011 return new ConditionalExpression(
14018 get children_keys()
14020 if (ConditionalExpression._children_keys == null)
14021 ConditionalExpression._children_keys = [
14027 return ConditionalExpression._children_keys;
14030 class EvalExpression extends EditableSyntax
14038 super('eval_expression', {
14040 left_paren: left_paren,
14041 argument: argument,
14042 right_paren: right_paren });
14044 get keyword() { return this.children.keyword; }
14045 get left_paren() { return this.children.left_paren; }
14046 get argument() { return this.children.argument; }
14047 get right_paren() { return this.children.right_paren; }
14048 with_keyword(keyword){
14049 return new EvalExpression(
14055 with_left_paren(left_paren){
14056 return new EvalExpression(
14062 with_argument(argument){
14063 return new EvalExpression(
14069 with_right_paren(right_paren){
14070 return new EvalExpression(
14076 rewrite(rewriter, parents)
14078 if (parents == undefined)
14080 let new_parents = parents.slice();
14081 new_parents.push(this);
14082 var keyword = this.keyword.rewrite(rewriter, new_parents);
14083 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
14084 var argument = this.argument.rewrite(rewriter, new_parents);
14085 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
14087 keyword === this.keyword &&
14088 left_paren === this.left_paren &&
14089 argument === this.argument &&
14090 right_paren === this.right_paren)
14092 return rewriter(this, parents);
14096 return rewriter(new EvalExpression(
14100 right_paren), parents);
14103 static from_json(json, position, source)
14105 let keyword = EditableSyntax.from_json(
14106 json.eval_keyword, position, source);
14107 position += keyword.width;
14108 let left_paren = EditableSyntax.from_json(
14109 json.eval_left_paren, position, source);
14110 position += left_paren.width;
14111 let argument = EditableSyntax.from_json(
14112 json.eval_argument, position, source);
14113 position += argument.width;
14114 let right_paren = EditableSyntax.from_json(
14115 json.eval_right_paren, position, source);
14116 position += right_paren.width;
14117 return new EvalExpression(
14123 get children_keys()
14125 if (EvalExpression._children_keys == null)
14126 EvalExpression._children_keys = [
14131 return EvalExpression._children_keys;
14134 class EmptyExpression extends EditableSyntax
14142 super('empty_expression', {
14144 left_paren: left_paren,
14145 argument: argument,
14146 right_paren: right_paren });
14148 get keyword() { return this.children.keyword; }
14149 get left_paren() { return this.children.left_paren; }
14150 get argument() { return this.children.argument; }
14151 get right_paren() { return this.children.right_paren; }
14152 with_keyword(keyword){
14153 return new EmptyExpression(
14159 with_left_paren(left_paren){
14160 return new EmptyExpression(
14166 with_argument(argument){
14167 return new EmptyExpression(
14173 with_right_paren(right_paren){
14174 return new EmptyExpression(
14180 rewrite(rewriter, parents)
14182 if (parents == undefined)
14184 let new_parents = parents.slice();
14185 new_parents.push(this);
14186 var keyword = this.keyword.rewrite(rewriter, new_parents);
14187 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
14188 var argument = this.argument.rewrite(rewriter, new_parents);
14189 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
14191 keyword === this.keyword &&
14192 left_paren === this.left_paren &&
14193 argument === this.argument &&
14194 right_paren === this.right_paren)
14196 return rewriter(this, parents);
14200 return rewriter(new EmptyExpression(
14204 right_paren), parents);
14207 static from_json(json, position, source)
14209 let keyword = EditableSyntax.from_json(
14210 json.empty_keyword, position, source);
14211 position += keyword.width;
14212 let left_paren = EditableSyntax.from_json(
14213 json.empty_left_paren, position, source);
14214 position += left_paren.width;
14215 let argument = EditableSyntax.from_json(
14216 json.empty_argument, position, source);
14217 position += argument.width;
14218 let right_paren = EditableSyntax.from_json(
14219 json.empty_right_paren, position, source);
14220 position += right_paren.width;
14221 return new EmptyExpression(
14227 get children_keys()
14229 if (EmptyExpression._children_keys == null)
14230 EmptyExpression._children_keys = [
14235 return EmptyExpression._children_keys;
14238 class DefineExpression extends EditableSyntax
14246 super('define_expression', {
14248 left_paren: left_paren,
14249 argument_list: argument_list,
14250 right_paren: right_paren });
14252 get keyword() { return this.children.keyword; }
14253 get left_paren() { return this.children.left_paren; }
14254 get argument_list() { return this.children.argument_list; }
14255 get right_paren() { return this.children.right_paren; }
14256 with_keyword(keyword){
14257 return new DefineExpression(
14260 this.argument_list,
14263 with_left_paren(left_paren){
14264 return new DefineExpression(
14267 this.argument_list,
14270 with_argument_list(argument_list){
14271 return new DefineExpression(
14277 with_right_paren(right_paren){
14278 return new DefineExpression(
14281 this.argument_list,
14284 rewrite(rewriter, parents)
14286 if (parents == undefined)
14288 let new_parents = parents.slice();
14289 new_parents.push(this);
14290 var keyword = this.keyword.rewrite(rewriter, new_parents);
14291 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
14292 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
14293 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
14295 keyword === this.keyword &&
14296 left_paren === this.left_paren &&
14297 argument_list === this.argument_list &&
14298 right_paren === this.right_paren)
14300 return rewriter(this, parents);
14304 return rewriter(new DefineExpression(
14308 right_paren), parents);
14311 static from_json(json, position, source)
14313 let keyword = EditableSyntax.from_json(
14314 json.define_keyword, position, source);
14315 position += keyword.width;
14316 let left_paren = EditableSyntax.from_json(
14317 json.define_left_paren, position, source);
14318 position += left_paren.width;
14319 let argument_list = EditableSyntax.from_json(
14320 json.define_argument_list, position, source);
14321 position += argument_list.width;
14322 let right_paren = EditableSyntax.from_json(
14323 json.define_right_paren, position, source);
14324 position += right_paren.width;
14325 return new DefineExpression(
14331 get children_keys()
14333 if (DefineExpression._children_keys == null)
14334 DefineExpression._children_keys = [
14339 return DefineExpression._children_keys;
14342 class HaltCompilerExpression extends EditableSyntax
14350 super('halt_compiler_expression', {
14352 left_paren: left_paren,
14353 argument_list: argument_list,
14354 right_paren: right_paren });
14356 get keyword() { return this.children.keyword; }
14357 get left_paren() { return this.children.left_paren; }
14358 get argument_list() { return this.children.argument_list; }
14359 get right_paren() { return this.children.right_paren; }
14360 with_keyword(keyword){
14361 return new HaltCompilerExpression(
14364 this.argument_list,
14367 with_left_paren(left_paren){
14368 return new HaltCompilerExpression(
14371 this.argument_list,
14374 with_argument_list(argument_list){
14375 return new HaltCompilerExpression(
14381 with_right_paren(right_paren){
14382 return new HaltCompilerExpression(
14385 this.argument_list,
14388 rewrite(rewriter, parents)
14390 if (parents == undefined)
14392 let new_parents = parents.slice();
14393 new_parents.push(this);
14394 var keyword = this.keyword.rewrite(rewriter, new_parents);
14395 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
14396 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
14397 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
14399 keyword === this.keyword &&
14400 left_paren === this.left_paren &&
14401 argument_list === this.argument_list &&
14402 right_paren === this.right_paren)
14404 return rewriter(this, parents);
14408 return rewriter(new HaltCompilerExpression(
14412 right_paren), parents);
14415 static from_json(json, position, source)
14417 let keyword = EditableSyntax.from_json(
14418 json.halt_compiler_keyword, position, source);
14419 position += keyword.width;
14420 let left_paren = EditableSyntax.from_json(
14421 json.halt_compiler_left_paren, position, source);
14422 position += left_paren.width;
14423 let argument_list = EditableSyntax.from_json(
14424 json.halt_compiler_argument_list, position, source);
14425 position += argument_list.width;
14426 let right_paren = EditableSyntax.from_json(
14427 json.halt_compiler_right_paren, position, source);
14428 position += right_paren.width;
14429 return new HaltCompilerExpression(
14435 get children_keys()
14437 if (HaltCompilerExpression._children_keys == null)
14438 HaltCompilerExpression._children_keys = [
14443 return HaltCompilerExpression._children_keys;
14446 class IssetExpression extends EditableSyntax
14454 super('isset_expression', {
14456 left_paren: left_paren,
14457 argument_list: argument_list,
14458 right_paren: right_paren });
14460 get keyword() { return this.children.keyword; }
14461 get left_paren() { return this.children.left_paren; }
14462 get argument_list() { return this.children.argument_list; }
14463 get right_paren() { return this.children.right_paren; }
14464 with_keyword(keyword){
14465 return new IssetExpression(
14468 this.argument_list,
14471 with_left_paren(left_paren){
14472 return new IssetExpression(
14475 this.argument_list,
14478 with_argument_list(argument_list){
14479 return new IssetExpression(
14485 with_right_paren(right_paren){
14486 return new IssetExpression(
14489 this.argument_list,
14492 rewrite(rewriter, parents)
14494 if (parents == undefined)
14496 let new_parents = parents.slice();
14497 new_parents.push(this);
14498 var keyword = this.keyword.rewrite(rewriter, new_parents);
14499 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
14500 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
14501 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
14503 keyword === this.keyword &&
14504 left_paren === this.left_paren &&
14505 argument_list === this.argument_list &&
14506 right_paren === this.right_paren)
14508 return rewriter(this, parents);
14512 return rewriter(new IssetExpression(
14516 right_paren), parents);
14519 static from_json(json, position, source)
14521 let keyword = EditableSyntax.from_json(
14522 json.isset_keyword, position, source);
14523 position += keyword.width;
14524 let left_paren = EditableSyntax.from_json(
14525 json.isset_left_paren, position, source);
14526 position += left_paren.width;
14527 let argument_list = EditableSyntax.from_json(
14528 json.isset_argument_list, position, source);
14529 position += argument_list.width;
14530 let right_paren = EditableSyntax.from_json(
14531 json.isset_right_paren, position, source);
14532 position += right_paren.width;
14533 return new IssetExpression(
14539 get children_keys()
14541 if (IssetExpression._children_keys == null)
14542 IssetExpression._children_keys = [
14547 return IssetExpression._children_keys;
14550 class FunctionCallExpression extends EditableSyntax
14558 super('function_call_expression', {
14559 receiver: receiver,
14560 left_paren: left_paren,
14561 argument_list: argument_list,
14562 right_paren: right_paren });
14564 get receiver() { return this.children.receiver; }
14565 get left_paren() { return this.children.left_paren; }
14566 get argument_list() { return this.children.argument_list; }
14567 get right_paren() { return this.children.right_paren; }
14568 with_receiver(receiver){
14569 return new FunctionCallExpression(
14572 this.argument_list,
14575 with_left_paren(left_paren){
14576 return new FunctionCallExpression(
14579 this.argument_list,
14582 with_argument_list(argument_list){
14583 return new FunctionCallExpression(
14589 with_right_paren(right_paren){
14590 return new FunctionCallExpression(
14593 this.argument_list,
14596 rewrite(rewriter, parents)
14598 if (parents == undefined)
14600 let new_parents = parents.slice();
14601 new_parents.push(this);
14602 var receiver = this.receiver.rewrite(rewriter, new_parents);
14603 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
14604 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
14605 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
14607 receiver === this.receiver &&
14608 left_paren === this.left_paren &&
14609 argument_list === this.argument_list &&
14610 right_paren === this.right_paren)
14612 return rewriter(this, parents);
14616 return rewriter(new FunctionCallExpression(
14620 right_paren), parents);
14623 static from_json(json, position, source)
14625 let receiver = EditableSyntax.from_json(
14626 json.function_call_receiver, position, source);
14627 position += receiver.width;
14628 let left_paren = EditableSyntax.from_json(
14629 json.function_call_left_paren, position, source);
14630 position += left_paren.width;
14631 let argument_list = EditableSyntax.from_json(
14632 json.function_call_argument_list, position, source);
14633 position += argument_list.width;
14634 let right_paren = EditableSyntax.from_json(
14635 json.function_call_right_paren, position, source);
14636 position += right_paren.width;
14637 return new FunctionCallExpression(
14643 get children_keys()
14645 if (FunctionCallExpression._children_keys == null)
14646 FunctionCallExpression._children_keys = [
14651 return FunctionCallExpression._children_keys;
14654 class FunctionCallWithTypeArgumentsExpression extends EditableSyntax
14663 super('function_call_with_type_arguments_expression', {
14664 receiver: receiver,
14665 type_args: type_args,
14666 left_paren: left_paren,
14667 argument_list: argument_list,
14668 right_paren: right_paren });
14670 get receiver() { return this.children.receiver; }
14671 get type_args() { return this.children.type_args; }
14672 get left_paren() { return this.children.left_paren; }
14673 get argument_list() { return this.children.argument_list; }
14674 get right_paren() { return this.children.right_paren; }
14675 with_receiver(receiver){
14676 return new FunctionCallWithTypeArgumentsExpression(
14680 this.argument_list,
14683 with_type_args(type_args){
14684 return new FunctionCallWithTypeArgumentsExpression(
14688 this.argument_list,
14691 with_left_paren(left_paren){
14692 return new FunctionCallWithTypeArgumentsExpression(
14696 this.argument_list,
14699 with_argument_list(argument_list){
14700 return new FunctionCallWithTypeArgumentsExpression(
14707 with_right_paren(right_paren){
14708 return new FunctionCallWithTypeArgumentsExpression(
14712 this.argument_list,
14715 rewrite(rewriter, parents)
14717 if (parents == undefined)
14719 let new_parents = parents.slice();
14720 new_parents.push(this);
14721 var receiver = this.receiver.rewrite(rewriter, new_parents);
14722 var type_args = this.type_args.rewrite(rewriter, new_parents);
14723 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
14724 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
14725 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
14727 receiver === this.receiver &&
14728 type_args === this.type_args &&
14729 left_paren === this.left_paren &&
14730 argument_list === this.argument_list &&
14731 right_paren === this.right_paren)
14733 return rewriter(this, parents);
14737 return rewriter(new FunctionCallWithTypeArgumentsExpression(
14742 right_paren), parents);
14745 static from_json(json, position, source)
14747 let receiver = EditableSyntax.from_json(
14748 json.function_call_with_type_arguments_receiver, position, source);
14749 position += receiver.width;
14750 let type_args = EditableSyntax.from_json(
14751 json.function_call_with_type_arguments_type_args, position, source);
14752 position += type_args.width;
14753 let left_paren = EditableSyntax.from_json(
14754 json.function_call_with_type_arguments_left_paren, position, source);
14755 position += left_paren.width;
14756 let argument_list = EditableSyntax.from_json(
14757 json.function_call_with_type_arguments_argument_list, position, source);
14758 position += argument_list.width;
14759 let right_paren = EditableSyntax.from_json(
14760 json.function_call_with_type_arguments_right_paren, position, source);
14761 position += right_paren.width;
14762 return new FunctionCallWithTypeArgumentsExpression(
14769 get children_keys()
14771 if (FunctionCallWithTypeArgumentsExpression._children_keys == null)
14772 FunctionCallWithTypeArgumentsExpression._children_keys = [
14778 return FunctionCallWithTypeArgumentsExpression._children_keys;
14781 class ParenthesizedExpression extends EditableSyntax
14788 super('parenthesized_expression', {
14789 left_paren: left_paren,
14790 expression: expression,
14791 right_paren: right_paren });
14793 get left_paren() { return this.children.left_paren; }
14794 get expression() { return this.children.expression; }
14795 get right_paren() { return this.children.right_paren; }
14796 with_left_paren(left_paren){
14797 return new ParenthesizedExpression(
14802 with_expression(expression){
14803 return new ParenthesizedExpression(
14808 with_right_paren(right_paren){
14809 return new ParenthesizedExpression(
14814 rewrite(rewriter, parents)
14816 if (parents == undefined)
14818 let new_parents = parents.slice();
14819 new_parents.push(this);
14820 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
14821 var expression = this.expression.rewrite(rewriter, new_parents);
14822 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
14824 left_paren === this.left_paren &&
14825 expression === this.expression &&
14826 right_paren === this.right_paren)
14828 return rewriter(this, parents);
14832 return rewriter(new ParenthesizedExpression(
14835 right_paren), parents);
14838 static from_json(json, position, source)
14840 let left_paren = EditableSyntax.from_json(
14841 json.parenthesized_expression_left_paren, position, source);
14842 position += left_paren.width;
14843 let expression = EditableSyntax.from_json(
14844 json.parenthesized_expression_expression, position, source);
14845 position += expression.width;
14846 let right_paren = EditableSyntax.from_json(
14847 json.parenthesized_expression_right_paren, position, source);
14848 position += right_paren.width;
14849 return new ParenthesizedExpression(
14854 get children_keys()
14856 if (ParenthesizedExpression._children_keys == null)
14857 ParenthesizedExpression._children_keys = [
14861 return ParenthesizedExpression._children_keys;
14864 class BracedExpression extends EditableSyntax
14871 super('braced_expression', {
14872 left_brace: left_brace,
14873 expression: expression,
14874 right_brace: right_brace });
14876 get left_brace() { return this.children.left_brace; }
14877 get expression() { return this.children.expression; }
14878 get right_brace() { return this.children.right_brace; }
14879 with_left_brace(left_brace){
14880 return new BracedExpression(
14885 with_expression(expression){
14886 return new BracedExpression(
14891 with_right_brace(right_brace){
14892 return new BracedExpression(
14897 rewrite(rewriter, parents)
14899 if (parents == undefined)
14901 let new_parents = parents.slice();
14902 new_parents.push(this);
14903 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
14904 var expression = this.expression.rewrite(rewriter, new_parents);
14905 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
14907 left_brace === this.left_brace &&
14908 expression === this.expression &&
14909 right_brace === this.right_brace)
14911 return rewriter(this, parents);
14915 return rewriter(new BracedExpression(
14918 right_brace), parents);
14921 static from_json(json, position, source)
14923 let left_brace = EditableSyntax.from_json(
14924 json.braced_expression_left_brace, position, source);
14925 position += left_brace.width;
14926 let expression = EditableSyntax.from_json(
14927 json.braced_expression_expression, position, source);
14928 position += expression.width;
14929 let right_brace = EditableSyntax.from_json(
14930 json.braced_expression_right_brace, position, source);
14931 position += right_brace.width;
14932 return new BracedExpression(
14937 get children_keys()
14939 if (BracedExpression._children_keys == null)
14940 BracedExpression._children_keys = [
14944 return BracedExpression._children_keys;
14947 class EmbeddedBracedExpression extends EditableSyntax
14954 super('embedded_braced_expression', {
14955 left_brace: left_brace,
14956 expression: expression,
14957 right_brace: right_brace });
14959 get left_brace() { return this.children.left_brace; }
14960 get expression() { return this.children.expression; }
14961 get right_brace() { return this.children.right_brace; }
14962 with_left_brace(left_brace){
14963 return new EmbeddedBracedExpression(
14968 with_expression(expression){
14969 return new EmbeddedBracedExpression(
14974 with_right_brace(right_brace){
14975 return new EmbeddedBracedExpression(
14980 rewrite(rewriter, parents)
14982 if (parents == undefined)
14984 let new_parents = parents.slice();
14985 new_parents.push(this);
14986 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
14987 var expression = this.expression.rewrite(rewriter, new_parents);
14988 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
14990 left_brace === this.left_brace &&
14991 expression === this.expression &&
14992 right_brace === this.right_brace)
14994 return rewriter(this, parents);
14998 return rewriter(new EmbeddedBracedExpression(
15001 right_brace), parents);
15004 static from_json(json, position, source)
15006 let left_brace = EditableSyntax.from_json(
15007 json.embedded_braced_expression_left_brace, position, source);
15008 position += left_brace.width;
15009 let expression = EditableSyntax.from_json(
15010 json.embedded_braced_expression_expression, position, source);
15011 position += expression.width;
15012 let right_brace = EditableSyntax.from_json(
15013 json.embedded_braced_expression_right_brace, position, source);
15014 position += right_brace.width;
15015 return new EmbeddedBracedExpression(
15020 get children_keys()
15022 if (EmbeddedBracedExpression._children_keys == null)
15023 EmbeddedBracedExpression._children_keys = [
15027 return EmbeddedBracedExpression._children_keys;
15030 class ListExpression extends EditableSyntax
15038 super('list_expression', {
15040 left_paren: left_paren,
15042 right_paren: right_paren });
15044 get keyword() { return this.children.keyword; }
15045 get left_paren() { return this.children.left_paren; }
15046 get members() { return this.children.members; }
15047 get right_paren() { return this.children.right_paren; }
15048 with_keyword(keyword){
15049 return new ListExpression(
15055 with_left_paren(left_paren){
15056 return new ListExpression(
15062 with_members(members){
15063 return new ListExpression(
15069 with_right_paren(right_paren){
15070 return new ListExpression(
15076 rewrite(rewriter, parents)
15078 if (parents == undefined)
15080 let new_parents = parents.slice();
15081 new_parents.push(this);
15082 var keyword = this.keyword.rewrite(rewriter, new_parents);
15083 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
15084 var members = this.members.rewrite(rewriter, new_parents);
15085 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
15087 keyword === this.keyword &&
15088 left_paren === this.left_paren &&
15089 members === this.members &&
15090 right_paren === this.right_paren)
15092 return rewriter(this, parents);
15096 return rewriter(new ListExpression(
15100 right_paren), parents);
15103 static from_json(json, position, source)
15105 let keyword = EditableSyntax.from_json(
15106 json.list_keyword, position, source);
15107 position += keyword.width;
15108 let left_paren = EditableSyntax.from_json(
15109 json.list_left_paren, position, source);
15110 position += left_paren.width;
15111 let members = EditableSyntax.from_json(
15112 json.list_members, position, source);
15113 position += members.width;
15114 let right_paren = EditableSyntax.from_json(
15115 json.list_right_paren, position, source);
15116 position += right_paren.width;
15117 return new ListExpression(
15123 get children_keys()
15125 if (ListExpression._children_keys == null)
15126 ListExpression._children_keys = [
15131 return ListExpression._children_keys;
15134 class CollectionLiteralExpression extends EditableSyntax
15142 super('collection_literal_expression', {
15144 left_brace: left_brace,
15145 initializers: initializers,
15146 right_brace: right_brace });
15148 get name() { return this.children.name; }
15149 get left_brace() { return this.children.left_brace; }
15150 get initializers() { return this.children.initializers; }
15151 get right_brace() { return this.children.right_brace; }
15153 return new CollectionLiteralExpression(
15159 with_left_brace(left_brace){
15160 return new CollectionLiteralExpression(
15166 with_initializers(initializers){
15167 return new CollectionLiteralExpression(
15173 with_right_brace(right_brace){
15174 return new CollectionLiteralExpression(
15180 rewrite(rewriter, parents)
15182 if (parents == undefined)
15184 let new_parents = parents.slice();
15185 new_parents.push(this);
15186 var name = this.name.rewrite(rewriter, new_parents);
15187 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
15188 var initializers = this.initializers.rewrite(rewriter, new_parents);
15189 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
15191 name === this.name &&
15192 left_brace === this.left_brace &&
15193 initializers === this.initializers &&
15194 right_brace === this.right_brace)
15196 return rewriter(this, parents);
15200 return rewriter(new CollectionLiteralExpression(
15204 right_brace), parents);
15207 static from_json(json, position, source)
15209 let name = EditableSyntax.from_json(
15210 json.collection_literal_name, position, source);
15211 position += name.width;
15212 let left_brace = EditableSyntax.from_json(
15213 json.collection_literal_left_brace, position, source);
15214 position += left_brace.width;
15215 let initializers = EditableSyntax.from_json(
15216 json.collection_literal_initializers, position, source);
15217 position += initializers.width;
15218 let right_brace = EditableSyntax.from_json(
15219 json.collection_literal_right_brace, position, source);
15220 position += right_brace.width;
15221 return new CollectionLiteralExpression(
15227 get children_keys()
15229 if (CollectionLiteralExpression._children_keys == null)
15230 CollectionLiteralExpression._children_keys = [
15235 return CollectionLiteralExpression._children_keys;
15238 class ObjectCreationExpression extends EditableSyntax
15244 super('object_creation_expression', {
15245 new_keyword: new_keyword,
15248 get new_keyword() { return this.children.new_keyword; }
15249 get object() { return this.children.object; }
15250 with_new_keyword(new_keyword){
15251 return new ObjectCreationExpression(
15255 with_object(object){
15256 return new ObjectCreationExpression(
15260 rewrite(rewriter, parents)
15262 if (parents == undefined)
15264 let new_parents = parents.slice();
15265 new_parents.push(this);
15266 var new_keyword = this.new_keyword.rewrite(rewriter, new_parents);
15267 var object = this.object.rewrite(rewriter, new_parents);
15269 new_keyword === this.new_keyword &&
15270 object === this.object)
15272 return rewriter(this, parents);
15276 return rewriter(new ObjectCreationExpression(
15281 static from_json(json, position, source)
15283 let new_keyword = EditableSyntax.from_json(
15284 json.object_creation_new_keyword, position, source);
15285 position += new_keyword.width;
15286 let object = EditableSyntax.from_json(
15287 json.object_creation_object, position, source);
15288 position += object.width;
15289 return new ObjectCreationExpression(
15293 get children_keys()
15295 if (ObjectCreationExpression._children_keys == null)
15296 ObjectCreationExpression._children_keys = [
15299 return ObjectCreationExpression._children_keys;
15302 class ConstructorCall extends EditableSyntax
15310 super('constructor_call', {
15312 left_paren: left_paren,
15313 argument_list: argument_list,
15314 right_paren: right_paren });
15316 get type() { return this.children.type; }
15317 get left_paren() { return this.children.left_paren; }
15318 get argument_list() { return this.children.argument_list; }
15319 get right_paren() { return this.children.right_paren; }
15321 return new ConstructorCall(
15324 this.argument_list,
15327 with_left_paren(left_paren){
15328 return new ConstructorCall(
15331 this.argument_list,
15334 with_argument_list(argument_list){
15335 return new ConstructorCall(
15341 with_right_paren(right_paren){
15342 return new ConstructorCall(
15345 this.argument_list,
15348 rewrite(rewriter, parents)
15350 if (parents == undefined)
15352 let new_parents = parents.slice();
15353 new_parents.push(this);
15354 var type = this.type.rewrite(rewriter, new_parents);
15355 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
15356 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
15357 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
15359 type === this.type &&
15360 left_paren === this.left_paren &&
15361 argument_list === this.argument_list &&
15362 right_paren === this.right_paren)
15364 return rewriter(this, parents);
15368 return rewriter(new ConstructorCall(
15372 right_paren), parents);
15375 static from_json(json, position, source)
15377 let type = EditableSyntax.from_json(
15378 json.constructor_call_type, position, source);
15379 position += type.width;
15380 let left_paren = EditableSyntax.from_json(
15381 json.constructor_call_left_paren, position, source);
15382 position += left_paren.width;
15383 let argument_list = EditableSyntax.from_json(
15384 json.constructor_call_argument_list, position, source);
15385 position += argument_list.width;
15386 let right_paren = EditableSyntax.from_json(
15387 json.constructor_call_right_paren, position, source);
15388 position += right_paren.width;
15389 return new ConstructorCall(
15395 get children_keys()
15397 if (ConstructorCall._children_keys == null)
15398 ConstructorCall._children_keys = [
15403 return ConstructorCall._children_keys;
15406 class ArrayCreationExpression extends EditableSyntax
15413 super('array_creation_expression', {
15414 left_bracket: left_bracket,
15416 right_bracket: right_bracket });
15418 get left_bracket() { return this.children.left_bracket; }
15419 get members() { return this.children.members; }
15420 get right_bracket() { return this.children.right_bracket; }
15421 with_left_bracket(left_bracket){
15422 return new ArrayCreationExpression(
15425 this.right_bracket);
15427 with_members(members){
15428 return new ArrayCreationExpression(
15431 this.right_bracket);
15433 with_right_bracket(right_bracket){
15434 return new ArrayCreationExpression(
15439 rewrite(rewriter, parents)
15441 if (parents == undefined)
15443 let new_parents = parents.slice();
15444 new_parents.push(this);
15445 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
15446 var members = this.members.rewrite(rewriter, new_parents);
15447 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
15449 left_bracket === this.left_bracket &&
15450 members === this.members &&
15451 right_bracket === this.right_bracket)
15453 return rewriter(this, parents);
15457 return rewriter(new ArrayCreationExpression(
15460 right_bracket), parents);
15463 static from_json(json, position, source)
15465 let left_bracket = EditableSyntax.from_json(
15466 json.array_creation_left_bracket, position, source);
15467 position += left_bracket.width;
15468 let members = EditableSyntax.from_json(
15469 json.array_creation_members, position, source);
15470 position += members.width;
15471 let right_bracket = EditableSyntax.from_json(
15472 json.array_creation_right_bracket, position, source);
15473 position += right_bracket.width;
15474 return new ArrayCreationExpression(
15479 get children_keys()
15481 if (ArrayCreationExpression._children_keys == null)
15482 ArrayCreationExpression._children_keys = [
15486 return ArrayCreationExpression._children_keys;
15489 class ArrayIntrinsicExpression extends EditableSyntax
15497 super('array_intrinsic_expression', {
15499 left_paren: left_paren,
15501 right_paren: right_paren });
15503 get keyword() { return this.children.keyword; }
15504 get left_paren() { return this.children.left_paren; }
15505 get members() { return this.children.members; }
15506 get right_paren() { return this.children.right_paren; }
15507 with_keyword(keyword){
15508 return new ArrayIntrinsicExpression(
15514 with_left_paren(left_paren){
15515 return new ArrayIntrinsicExpression(
15521 with_members(members){
15522 return new ArrayIntrinsicExpression(
15528 with_right_paren(right_paren){
15529 return new ArrayIntrinsicExpression(
15535 rewrite(rewriter, parents)
15537 if (parents == undefined)
15539 let new_parents = parents.slice();
15540 new_parents.push(this);
15541 var keyword = this.keyword.rewrite(rewriter, new_parents);
15542 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
15543 var members = this.members.rewrite(rewriter, new_parents);
15544 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
15546 keyword === this.keyword &&
15547 left_paren === this.left_paren &&
15548 members === this.members &&
15549 right_paren === this.right_paren)
15551 return rewriter(this, parents);
15555 return rewriter(new ArrayIntrinsicExpression(
15559 right_paren), parents);
15562 static from_json(json, position, source)
15564 let keyword = EditableSyntax.from_json(
15565 json.array_intrinsic_keyword, position, source);
15566 position += keyword.width;
15567 let left_paren = EditableSyntax.from_json(
15568 json.array_intrinsic_left_paren, position, source);
15569 position += left_paren.width;
15570 let members = EditableSyntax.from_json(
15571 json.array_intrinsic_members, position, source);
15572 position += members.width;
15573 let right_paren = EditableSyntax.from_json(
15574 json.array_intrinsic_right_paren, position, source);
15575 position += right_paren.width;
15576 return new ArrayIntrinsicExpression(
15582 get children_keys()
15584 if (ArrayIntrinsicExpression._children_keys == null)
15585 ArrayIntrinsicExpression._children_keys = [
15590 return ArrayIntrinsicExpression._children_keys;
15593 class DarrayIntrinsicExpression extends EditableSyntax
15601 super('darray_intrinsic_expression', {
15603 left_bracket: left_bracket,
15605 right_bracket: right_bracket });
15607 get keyword() { return this.children.keyword; }
15608 get left_bracket() { return this.children.left_bracket; }
15609 get members() { return this.children.members; }
15610 get right_bracket() { return this.children.right_bracket; }
15611 with_keyword(keyword){
15612 return new DarrayIntrinsicExpression(
15616 this.right_bracket);
15618 with_left_bracket(left_bracket){
15619 return new DarrayIntrinsicExpression(
15623 this.right_bracket);
15625 with_members(members){
15626 return new DarrayIntrinsicExpression(
15630 this.right_bracket);
15632 with_right_bracket(right_bracket){
15633 return new DarrayIntrinsicExpression(
15639 rewrite(rewriter, parents)
15641 if (parents == undefined)
15643 let new_parents = parents.slice();
15644 new_parents.push(this);
15645 var keyword = this.keyword.rewrite(rewriter, new_parents);
15646 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
15647 var members = this.members.rewrite(rewriter, new_parents);
15648 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
15650 keyword === this.keyword &&
15651 left_bracket === this.left_bracket &&
15652 members === this.members &&
15653 right_bracket === this.right_bracket)
15655 return rewriter(this, parents);
15659 return rewriter(new DarrayIntrinsicExpression(
15663 right_bracket), parents);
15666 static from_json(json, position, source)
15668 let keyword = EditableSyntax.from_json(
15669 json.darray_intrinsic_keyword, position, source);
15670 position += keyword.width;
15671 let left_bracket = EditableSyntax.from_json(
15672 json.darray_intrinsic_left_bracket, position, source);
15673 position += left_bracket.width;
15674 let members = EditableSyntax.from_json(
15675 json.darray_intrinsic_members, position, source);
15676 position += members.width;
15677 let right_bracket = EditableSyntax.from_json(
15678 json.darray_intrinsic_right_bracket, position, source);
15679 position += right_bracket.width;
15680 return new DarrayIntrinsicExpression(
15686 get children_keys()
15688 if (DarrayIntrinsicExpression._children_keys == null)
15689 DarrayIntrinsicExpression._children_keys = [
15694 return DarrayIntrinsicExpression._children_keys;
15697 class DictionaryIntrinsicExpression extends EditableSyntax
15705 super('dictionary_intrinsic_expression', {
15707 left_bracket: left_bracket,
15709 right_bracket: right_bracket });
15711 get keyword() { return this.children.keyword; }
15712 get left_bracket() { return this.children.left_bracket; }
15713 get members() { return this.children.members; }
15714 get right_bracket() { return this.children.right_bracket; }
15715 with_keyword(keyword){
15716 return new DictionaryIntrinsicExpression(
15720 this.right_bracket);
15722 with_left_bracket(left_bracket){
15723 return new DictionaryIntrinsicExpression(
15727 this.right_bracket);
15729 with_members(members){
15730 return new DictionaryIntrinsicExpression(
15734 this.right_bracket);
15736 with_right_bracket(right_bracket){
15737 return new DictionaryIntrinsicExpression(
15743 rewrite(rewriter, parents)
15745 if (parents == undefined)
15747 let new_parents = parents.slice();
15748 new_parents.push(this);
15749 var keyword = this.keyword.rewrite(rewriter, new_parents);
15750 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
15751 var members = this.members.rewrite(rewriter, new_parents);
15752 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
15754 keyword === this.keyword &&
15755 left_bracket === this.left_bracket &&
15756 members === this.members &&
15757 right_bracket === this.right_bracket)
15759 return rewriter(this, parents);
15763 return rewriter(new DictionaryIntrinsicExpression(
15767 right_bracket), parents);
15770 static from_json(json, position, source)
15772 let keyword = EditableSyntax.from_json(
15773 json.dictionary_intrinsic_keyword, position, source);
15774 position += keyword.width;
15775 let left_bracket = EditableSyntax.from_json(
15776 json.dictionary_intrinsic_left_bracket, position, source);
15777 position += left_bracket.width;
15778 let members = EditableSyntax.from_json(
15779 json.dictionary_intrinsic_members, position, source);
15780 position += members.width;
15781 let right_bracket = EditableSyntax.from_json(
15782 json.dictionary_intrinsic_right_bracket, position, source);
15783 position += right_bracket.width;
15784 return new DictionaryIntrinsicExpression(
15790 get children_keys()
15792 if (DictionaryIntrinsicExpression._children_keys == null)
15793 DictionaryIntrinsicExpression._children_keys = [
15798 return DictionaryIntrinsicExpression._children_keys;
15801 class KeysetIntrinsicExpression extends EditableSyntax
15809 super('keyset_intrinsic_expression', {
15811 left_bracket: left_bracket,
15813 right_bracket: right_bracket });
15815 get keyword() { return this.children.keyword; }
15816 get left_bracket() { return this.children.left_bracket; }
15817 get members() { return this.children.members; }
15818 get right_bracket() { return this.children.right_bracket; }
15819 with_keyword(keyword){
15820 return new KeysetIntrinsicExpression(
15824 this.right_bracket);
15826 with_left_bracket(left_bracket){
15827 return new KeysetIntrinsicExpression(
15831 this.right_bracket);
15833 with_members(members){
15834 return new KeysetIntrinsicExpression(
15838 this.right_bracket);
15840 with_right_bracket(right_bracket){
15841 return new KeysetIntrinsicExpression(
15847 rewrite(rewriter, parents)
15849 if (parents == undefined)
15851 let new_parents = parents.slice();
15852 new_parents.push(this);
15853 var keyword = this.keyword.rewrite(rewriter, new_parents);
15854 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
15855 var members = this.members.rewrite(rewriter, new_parents);
15856 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
15858 keyword === this.keyword &&
15859 left_bracket === this.left_bracket &&
15860 members === this.members &&
15861 right_bracket === this.right_bracket)
15863 return rewriter(this, parents);
15867 return rewriter(new KeysetIntrinsicExpression(
15871 right_bracket), parents);
15874 static from_json(json, position, source)
15876 let keyword = EditableSyntax.from_json(
15877 json.keyset_intrinsic_keyword, position, source);
15878 position += keyword.width;
15879 let left_bracket = EditableSyntax.from_json(
15880 json.keyset_intrinsic_left_bracket, position, source);
15881 position += left_bracket.width;
15882 let members = EditableSyntax.from_json(
15883 json.keyset_intrinsic_members, position, source);
15884 position += members.width;
15885 let right_bracket = EditableSyntax.from_json(
15886 json.keyset_intrinsic_right_bracket, position, source);
15887 position += right_bracket.width;
15888 return new KeysetIntrinsicExpression(
15894 get children_keys()
15896 if (KeysetIntrinsicExpression._children_keys == null)
15897 KeysetIntrinsicExpression._children_keys = [
15902 return KeysetIntrinsicExpression._children_keys;
15905 class VarrayIntrinsicExpression extends EditableSyntax
15913 super('varray_intrinsic_expression', {
15915 left_bracket: left_bracket,
15917 right_bracket: right_bracket });
15919 get keyword() { return this.children.keyword; }
15920 get left_bracket() { return this.children.left_bracket; }
15921 get members() { return this.children.members; }
15922 get right_bracket() { return this.children.right_bracket; }
15923 with_keyword(keyword){
15924 return new VarrayIntrinsicExpression(
15928 this.right_bracket);
15930 with_left_bracket(left_bracket){
15931 return new VarrayIntrinsicExpression(
15935 this.right_bracket);
15937 with_members(members){
15938 return new VarrayIntrinsicExpression(
15942 this.right_bracket);
15944 with_right_bracket(right_bracket){
15945 return new VarrayIntrinsicExpression(
15951 rewrite(rewriter, parents)
15953 if (parents == undefined)
15955 let new_parents = parents.slice();
15956 new_parents.push(this);
15957 var keyword = this.keyword.rewrite(rewriter, new_parents);
15958 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
15959 var members = this.members.rewrite(rewriter, new_parents);
15960 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
15962 keyword === this.keyword &&
15963 left_bracket === this.left_bracket &&
15964 members === this.members &&
15965 right_bracket === this.right_bracket)
15967 return rewriter(this, parents);
15971 return rewriter(new VarrayIntrinsicExpression(
15975 right_bracket), parents);
15978 static from_json(json, position, source)
15980 let keyword = EditableSyntax.from_json(
15981 json.varray_intrinsic_keyword, position, source);
15982 position += keyword.width;
15983 let left_bracket = EditableSyntax.from_json(
15984 json.varray_intrinsic_left_bracket, position, source);
15985 position += left_bracket.width;
15986 let members = EditableSyntax.from_json(
15987 json.varray_intrinsic_members, position, source);
15988 position += members.width;
15989 let right_bracket = EditableSyntax.from_json(
15990 json.varray_intrinsic_right_bracket, position, source);
15991 position += right_bracket.width;
15992 return new VarrayIntrinsicExpression(
15998 get children_keys()
16000 if (VarrayIntrinsicExpression._children_keys == null)
16001 VarrayIntrinsicExpression._children_keys = [
16006 return VarrayIntrinsicExpression._children_keys;
16009 class VectorIntrinsicExpression extends EditableSyntax
16017 super('vector_intrinsic_expression', {
16019 left_bracket: left_bracket,
16021 right_bracket: right_bracket });
16023 get keyword() { return this.children.keyword; }
16024 get left_bracket() { return this.children.left_bracket; }
16025 get members() { return this.children.members; }
16026 get right_bracket() { return this.children.right_bracket; }
16027 with_keyword(keyword){
16028 return new VectorIntrinsicExpression(
16032 this.right_bracket);
16034 with_left_bracket(left_bracket){
16035 return new VectorIntrinsicExpression(
16039 this.right_bracket);
16041 with_members(members){
16042 return new VectorIntrinsicExpression(
16046 this.right_bracket);
16048 with_right_bracket(right_bracket){
16049 return new VectorIntrinsicExpression(
16055 rewrite(rewriter, parents)
16057 if (parents == undefined)
16059 let new_parents = parents.slice();
16060 new_parents.push(this);
16061 var keyword = this.keyword.rewrite(rewriter, new_parents);
16062 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
16063 var members = this.members.rewrite(rewriter, new_parents);
16064 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
16066 keyword === this.keyword &&
16067 left_bracket === this.left_bracket &&
16068 members === this.members &&
16069 right_bracket === this.right_bracket)
16071 return rewriter(this, parents);
16075 return rewriter(new VectorIntrinsicExpression(
16079 right_bracket), parents);
16082 static from_json(json, position, source)
16084 let keyword = EditableSyntax.from_json(
16085 json.vector_intrinsic_keyword, position, source);
16086 position += keyword.width;
16087 let left_bracket = EditableSyntax.from_json(
16088 json.vector_intrinsic_left_bracket, position, source);
16089 position += left_bracket.width;
16090 let members = EditableSyntax.from_json(
16091 json.vector_intrinsic_members, position, source);
16092 position += members.width;
16093 let right_bracket = EditableSyntax.from_json(
16094 json.vector_intrinsic_right_bracket, position, source);
16095 position += right_bracket.width;
16096 return new VectorIntrinsicExpression(
16102 get children_keys()
16104 if (VectorIntrinsicExpression._children_keys == null)
16105 VectorIntrinsicExpression._children_keys = [
16110 return VectorIntrinsicExpression._children_keys;
16113 class ElementInitializer extends EditableSyntax
16120 super('element_initializer', {
16125 get key() { return this.children.key; }
16126 get arrow() { return this.children.arrow; }
16127 get value() { return this.children.value; }
16129 return new ElementInitializer(
16135 return new ElementInitializer(
16141 return new ElementInitializer(
16146 rewrite(rewriter, parents)
16148 if (parents == undefined)
16150 let new_parents = parents.slice();
16151 new_parents.push(this);
16152 var key = this.key.rewrite(rewriter, new_parents);
16153 var arrow = this.arrow.rewrite(rewriter, new_parents);
16154 var value = this.value.rewrite(rewriter, new_parents);
16156 key === this.key &&
16157 arrow === this.arrow &&
16158 value === this.value)
16160 return rewriter(this, parents);
16164 return rewriter(new ElementInitializer(
16170 static from_json(json, position, source)
16172 let key = EditableSyntax.from_json(
16173 json.element_key, position, source);
16174 position += key.width;
16175 let arrow = EditableSyntax.from_json(
16176 json.element_arrow, position, source);
16177 position += arrow.width;
16178 let value = EditableSyntax.from_json(
16179 json.element_value, position, source);
16180 position += value.width;
16181 return new ElementInitializer(
16186 get children_keys()
16188 if (ElementInitializer._children_keys == null)
16189 ElementInitializer._children_keys = [
16193 return ElementInitializer._children_keys;
16196 class SubscriptExpression extends EditableSyntax
16204 super('subscript_expression', {
16205 receiver: receiver,
16206 left_bracket: left_bracket,
16208 right_bracket: right_bracket });
16210 get receiver() { return this.children.receiver; }
16211 get left_bracket() { return this.children.left_bracket; }
16212 get index() { return this.children.index; }
16213 get right_bracket() { return this.children.right_bracket; }
16214 with_receiver(receiver){
16215 return new SubscriptExpression(
16219 this.right_bracket);
16221 with_left_bracket(left_bracket){
16222 return new SubscriptExpression(
16226 this.right_bracket);
16229 return new SubscriptExpression(
16233 this.right_bracket);
16235 with_right_bracket(right_bracket){
16236 return new SubscriptExpression(
16242 rewrite(rewriter, parents)
16244 if (parents == undefined)
16246 let new_parents = parents.slice();
16247 new_parents.push(this);
16248 var receiver = this.receiver.rewrite(rewriter, new_parents);
16249 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
16250 var index = this.index.rewrite(rewriter, new_parents);
16251 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
16253 receiver === this.receiver &&
16254 left_bracket === this.left_bracket &&
16255 index === this.index &&
16256 right_bracket === this.right_bracket)
16258 return rewriter(this, parents);
16262 return rewriter(new SubscriptExpression(
16266 right_bracket), parents);
16269 static from_json(json, position, source)
16271 let receiver = EditableSyntax.from_json(
16272 json.subscript_receiver, position, source);
16273 position += receiver.width;
16274 let left_bracket = EditableSyntax.from_json(
16275 json.subscript_left_bracket, position, source);
16276 position += left_bracket.width;
16277 let index = EditableSyntax.from_json(
16278 json.subscript_index, position, source);
16279 position += index.width;
16280 let right_bracket = EditableSyntax.from_json(
16281 json.subscript_right_bracket, position, source);
16282 position += right_bracket.width;
16283 return new SubscriptExpression(
16289 get children_keys()
16291 if (SubscriptExpression._children_keys == null)
16292 SubscriptExpression._children_keys = [
16297 return SubscriptExpression._children_keys;
16300 class EmbeddedSubscriptExpression extends EditableSyntax
16308 super('embedded_subscript_expression', {
16309 receiver: receiver,
16310 left_bracket: left_bracket,
16312 right_bracket: right_bracket });
16314 get receiver() { return this.children.receiver; }
16315 get left_bracket() { return this.children.left_bracket; }
16316 get index() { return this.children.index; }
16317 get right_bracket() { return this.children.right_bracket; }
16318 with_receiver(receiver){
16319 return new EmbeddedSubscriptExpression(
16323 this.right_bracket);
16325 with_left_bracket(left_bracket){
16326 return new EmbeddedSubscriptExpression(
16330 this.right_bracket);
16333 return new EmbeddedSubscriptExpression(
16337 this.right_bracket);
16339 with_right_bracket(right_bracket){
16340 return new EmbeddedSubscriptExpression(
16346 rewrite(rewriter, parents)
16348 if (parents == undefined)
16350 let new_parents = parents.slice();
16351 new_parents.push(this);
16352 var receiver = this.receiver.rewrite(rewriter, new_parents);
16353 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
16354 var index = this.index.rewrite(rewriter, new_parents);
16355 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
16357 receiver === this.receiver &&
16358 left_bracket === this.left_bracket &&
16359 index === this.index &&
16360 right_bracket === this.right_bracket)
16362 return rewriter(this, parents);
16366 return rewriter(new EmbeddedSubscriptExpression(
16370 right_bracket), parents);
16373 static from_json(json, position, source)
16375 let receiver = EditableSyntax.from_json(
16376 json.embedded_subscript_receiver, position, source);
16377 position += receiver.width;
16378 let left_bracket = EditableSyntax.from_json(
16379 json.embedded_subscript_left_bracket, position, source);
16380 position += left_bracket.width;
16381 let index = EditableSyntax.from_json(
16382 json.embedded_subscript_index, position, source);
16383 position += index.width;
16384 let right_bracket = EditableSyntax.from_json(
16385 json.embedded_subscript_right_bracket, position, source);
16386 position += right_bracket.width;
16387 return new EmbeddedSubscriptExpression(
16393 get children_keys()
16395 if (EmbeddedSubscriptExpression._children_keys == null)
16396 EmbeddedSubscriptExpression._children_keys = [
16401 return EmbeddedSubscriptExpression._children_keys;
16404 class AwaitableCreationExpression extends EditableSyntax
16409 compound_statement)
16411 super('awaitable_creation_expression', {
16413 coroutine: coroutine,
16414 compound_statement: compound_statement });
16416 get async() { return this.children.async; }
16417 get coroutine() { return this.children.coroutine; }
16418 get compound_statement() { return this.children.compound_statement; }
16420 return new AwaitableCreationExpression(
16423 this.compound_statement);
16425 with_coroutine(coroutine){
16426 return new AwaitableCreationExpression(
16429 this.compound_statement);
16431 with_compound_statement(compound_statement){
16432 return new AwaitableCreationExpression(
16435 compound_statement);
16437 rewrite(rewriter, parents)
16439 if (parents == undefined)
16441 let new_parents = parents.slice();
16442 new_parents.push(this);
16443 var async = this.async.rewrite(rewriter, new_parents);
16444 var coroutine = this.coroutine.rewrite(rewriter, new_parents);
16445 var compound_statement = this.compound_statement.rewrite(rewriter, new_parents);
16447 async === this.async &&
16448 coroutine === this.coroutine &&
16449 compound_statement === this.compound_statement)
16451 return rewriter(this, parents);
16455 return rewriter(new AwaitableCreationExpression(
16458 compound_statement), parents);
16461 static from_json(json, position, source)
16463 let async = EditableSyntax.from_json(
16464 json.awaitable_async, position, source);
16465 position += async.width;
16466 let coroutine = EditableSyntax.from_json(
16467 json.awaitable_coroutine, position, source);
16468 position += coroutine.width;
16469 let compound_statement = EditableSyntax.from_json(
16470 json.awaitable_compound_statement, position, source);
16471 position += compound_statement.width;
16472 return new AwaitableCreationExpression(
16475 compound_statement);
16477 get children_keys()
16479 if (AwaitableCreationExpression._children_keys == null)
16480 AwaitableCreationExpression._children_keys = [
16483 'compound_statement'];
16484 return AwaitableCreationExpression._children_keys;
16487 class XHPChildrenDeclaration extends EditableSyntax
16494 super('xhp_children_declaration', {
16496 expression: expression,
16497 semicolon: semicolon });
16499 get keyword() { return this.children.keyword; }
16500 get expression() { return this.children.expression; }
16501 get semicolon() { return this.children.semicolon; }
16502 with_keyword(keyword){
16503 return new XHPChildrenDeclaration(
16508 with_expression(expression){
16509 return new XHPChildrenDeclaration(
16514 with_semicolon(semicolon){
16515 return new XHPChildrenDeclaration(
16520 rewrite(rewriter, parents)
16522 if (parents == undefined)
16524 let new_parents = parents.slice();
16525 new_parents.push(this);
16526 var keyword = this.keyword.rewrite(rewriter, new_parents);
16527 var expression = this.expression.rewrite(rewriter, new_parents);
16528 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
16530 keyword === this.keyword &&
16531 expression === this.expression &&
16532 semicolon === this.semicolon)
16534 return rewriter(this, parents);
16538 return rewriter(new XHPChildrenDeclaration(
16541 semicolon), parents);
16544 static from_json(json, position, source)
16546 let keyword = EditableSyntax.from_json(
16547 json.xhp_children_keyword, position, source);
16548 position += keyword.width;
16549 let expression = EditableSyntax.from_json(
16550 json.xhp_children_expression, position, source);
16551 position += expression.width;
16552 let semicolon = EditableSyntax.from_json(
16553 json.xhp_children_semicolon, position, source);
16554 position += semicolon.width;
16555 return new XHPChildrenDeclaration(
16560 get children_keys()
16562 if (XHPChildrenDeclaration._children_keys == null)
16563 XHPChildrenDeclaration._children_keys = [
16567 return XHPChildrenDeclaration._children_keys;
16570 class XHPChildrenParenthesizedList extends EditableSyntax
16577 super('xhp_children_parenthesized_list', {
16578 left_paren: left_paren,
16579 xhp_children: xhp_children,
16580 right_paren: right_paren });
16582 get left_paren() { return this.children.left_paren; }
16583 get xhp_children() { return this.children.xhp_children; }
16584 get right_paren() { return this.children.right_paren; }
16585 with_left_paren(left_paren){
16586 return new XHPChildrenParenthesizedList(
16591 with_xhp_children(xhp_children){
16592 return new XHPChildrenParenthesizedList(
16597 with_right_paren(right_paren){
16598 return new XHPChildrenParenthesizedList(
16603 rewrite(rewriter, parents)
16605 if (parents == undefined)
16607 let new_parents = parents.slice();
16608 new_parents.push(this);
16609 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
16610 var xhp_children = this.xhp_children.rewrite(rewriter, new_parents);
16611 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
16613 left_paren === this.left_paren &&
16614 xhp_children === this.xhp_children &&
16615 right_paren === this.right_paren)
16617 return rewriter(this, parents);
16621 return rewriter(new XHPChildrenParenthesizedList(
16624 right_paren), parents);
16627 static from_json(json, position, source)
16629 let left_paren = EditableSyntax.from_json(
16630 json.xhp_children_list_left_paren, position, source);
16631 position += left_paren.width;
16632 let xhp_children = EditableSyntax.from_json(
16633 json.xhp_children_list_xhp_children, position, source);
16634 position += xhp_children.width;
16635 let right_paren = EditableSyntax.from_json(
16636 json.xhp_children_list_right_paren, position, source);
16637 position += right_paren.width;
16638 return new XHPChildrenParenthesizedList(
16643 get children_keys()
16645 if (XHPChildrenParenthesizedList._children_keys == null)
16646 XHPChildrenParenthesizedList._children_keys = [
16650 return XHPChildrenParenthesizedList._children_keys;
16653 class XHPCategoryDeclaration extends EditableSyntax
16660 super('xhp_category_declaration', {
16662 categories: categories,
16663 semicolon: semicolon });
16665 get keyword() { return this.children.keyword; }
16666 get categories() { return this.children.categories; }
16667 get semicolon() { return this.children.semicolon; }
16668 with_keyword(keyword){
16669 return new XHPCategoryDeclaration(
16674 with_categories(categories){
16675 return new XHPCategoryDeclaration(
16680 with_semicolon(semicolon){
16681 return new XHPCategoryDeclaration(
16686 rewrite(rewriter, parents)
16688 if (parents == undefined)
16690 let new_parents = parents.slice();
16691 new_parents.push(this);
16692 var keyword = this.keyword.rewrite(rewriter, new_parents);
16693 var categories = this.categories.rewrite(rewriter, new_parents);
16694 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
16696 keyword === this.keyword &&
16697 categories === this.categories &&
16698 semicolon === this.semicolon)
16700 return rewriter(this, parents);
16704 return rewriter(new XHPCategoryDeclaration(
16707 semicolon), parents);
16710 static from_json(json, position, source)
16712 let keyword = EditableSyntax.from_json(
16713 json.xhp_category_keyword, position, source);
16714 position += keyword.width;
16715 let categories = EditableSyntax.from_json(
16716 json.xhp_category_categories, position, source);
16717 position += categories.width;
16718 let semicolon = EditableSyntax.from_json(
16719 json.xhp_category_semicolon, position, source);
16720 position += semicolon.width;
16721 return new XHPCategoryDeclaration(
16726 get children_keys()
16728 if (XHPCategoryDeclaration._children_keys == null)
16729 XHPCategoryDeclaration._children_keys = [
16733 return XHPCategoryDeclaration._children_keys;
16736 class XHPEnumType extends EditableSyntax
16745 super('xhp_enum_type', {
16746 optional: optional,
16748 left_brace: left_brace,
16750 right_brace: right_brace });
16752 get optional() { return this.children.optional; }
16753 get keyword() { return this.children.keyword; }
16754 get left_brace() { return this.children.left_brace; }
16755 get values() { return this.children.values; }
16756 get right_brace() { return this.children.right_brace; }
16757 with_optional(optional){
16758 return new XHPEnumType(
16765 with_keyword(keyword){
16766 return new XHPEnumType(
16773 with_left_brace(left_brace){
16774 return new XHPEnumType(
16781 with_values(values){
16782 return new XHPEnumType(
16789 with_right_brace(right_brace){
16790 return new XHPEnumType(
16797 rewrite(rewriter, parents)
16799 if (parents == undefined)
16801 let new_parents = parents.slice();
16802 new_parents.push(this);
16803 var optional = this.optional.rewrite(rewriter, new_parents);
16804 var keyword = this.keyword.rewrite(rewriter, new_parents);
16805 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
16806 var values = this.values.rewrite(rewriter, new_parents);
16807 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
16809 optional === this.optional &&
16810 keyword === this.keyword &&
16811 left_brace === this.left_brace &&
16812 values === this.values &&
16813 right_brace === this.right_brace)
16815 return rewriter(this, parents);
16819 return rewriter(new XHPEnumType(
16824 right_brace), parents);
16827 static from_json(json, position, source)
16829 let optional = EditableSyntax.from_json(
16830 json.xhp_enum_optional, position, source);
16831 position += optional.width;
16832 let keyword = EditableSyntax.from_json(
16833 json.xhp_enum_keyword, position, source);
16834 position += keyword.width;
16835 let left_brace = EditableSyntax.from_json(
16836 json.xhp_enum_left_brace, position, source);
16837 position += left_brace.width;
16838 let values = EditableSyntax.from_json(
16839 json.xhp_enum_values, position, source);
16840 position += values.width;
16841 let right_brace = EditableSyntax.from_json(
16842 json.xhp_enum_right_brace, position, source);
16843 position += right_brace.width;
16844 return new XHPEnumType(
16851 get children_keys()
16853 if (XHPEnumType._children_keys == null)
16854 XHPEnumType._children_keys = [
16860 return XHPEnumType._children_keys;
16863 class XHPRequired extends EditableSyntax
16869 super('xhp_required', {
16871 keyword: keyword });
16873 get at() { return this.children.at; }
16874 get keyword() { return this.children.keyword; }
16876 return new XHPRequired(
16880 with_keyword(keyword){
16881 return new XHPRequired(
16885 rewrite(rewriter, parents)
16887 if (parents == undefined)
16889 let new_parents = parents.slice();
16890 new_parents.push(this);
16891 var at = this.at.rewrite(rewriter, new_parents);
16892 var keyword = this.keyword.rewrite(rewriter, new_parents);
16895 keyword === this.keyword)
16897 return rewriter(this, parents);
16901 return rewriter(new XHPRequired(
16903 keyword), parents);
16906 static from_json(json, position, source)
16908 let at = EditableSyntax.from_json(
16909 json.xhp_required_at, position, source);
16910 position += at.width;
16911 let keyword = EditableSyntax.from_json(
16912 json.xhp_required_keyword, position, source);
16913 position += keyword.width;
16914 return new XHPRequired(
16918 get children_keys()
16920 if (XHPRequired._children_keys == null)
16921 XHPRequired._children_keys = [
16924 return XHPRequired._children_keys;
16927 class XHPClassAttributeDeclaration extends EditableSyntax
16934 super('xhp_class_attribute_declaration', {
16936 attributes: attributes,
16937 semicolon: semicolon });
16939 get keyword() { return this.children.keyword; }
16940 get attributes() { return this.children.attributes; }
16941 get semicolon() { return this.children.semicolon; }
16942 with_keyword(keyword){
16943 return new XHPClassAttributeDeclaration(
16948 with_attributes(attributes){
16949 return new XHPClassAttributeDeclaration(
16954 with_semicolon(semicolon){
16955 return new XHPClassAttributeDeclaration(
16960 rewrite(rewriter, parents)
16962 if (parents == undefined)
16964 let new_parents = parents.slice();
16965 new_parents.push(this);
16966 var keyword = this.keyword.rewrite(rewriter, new_parents);
16967 var attributes = this.attributes.rewrite(rewriter, new_parents);
16968 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
16970 keyword === this.keyword &&
16971 attributes === this.attributes &&
16972 semicolon === this.semicolon)
16974 return rewriter(this, parents);
16978 return rewriter(new XHPClassAttributeDeclaration(
16981 semicolon), parents);
16984 static from_json(json, position, source)
16986 let keyword = EditableSyntax.from_json(
16987 json.xhp_attribute_keyword, position, source);
16988 position += keyword.width;
16989 let attributes = EditableSyntax.from_json(
16990 json.xhp_attribute_attributes, position, source);
16991 position += attributes.width;
16992 let semicolon = EditableSyntax.from_json(
16993 json.xhp_attribute_semicolon, position, source);
16994 position += semicolon.width;
16995 return new XHPClassAttributeDeclaration(
17000 get children_keys()
17002 if (XHPClassAttributeDeclaration._children_keys == null)
17003 XHPClassAttributeDeclaration._children_keys = [
17007 return XHPClassAttributeDeclaration._children_keys;
17010 class XHPClassAttribute extends EditableSyntax
17018 super('xhp_class_attribute', {
17021 initializer: initializer,
17022 required: required });
17024 get type() { return this.children.type; }
17025 get name() { return this.children.name; }
17026 get initializer() { return this.children.initializer; }
17027 get required() { return this.children.required; }
17029 return new XHPClassAttribute(
17036 return new XHPClassAttribute(
17042 with_initializer(initializer){
17043 return new XHPClassAttribute(
17049 with_required(required){
17050 return new XHPClassAttribute(
17056 rewrite(rewriter, parents)
17058 if (parents == undefined)
17060 let new_parents = parents.slice();
17061 new_parents.push(this);
17062 var type = this.type.rewrite(rewriter, new_parents);
17063 var name = this.name.rewrite(rewriter, new_parents);
17064 var initializer = this.initializer.rewrite(rewriter, new_parents);
17065 var required = this.required.rewrite(rewriter, new_parents);
17067 type === this.type &&
17068 name === this.name &&
17069 initializer === this.initializer &&
17070 required === this.required)
17072 return rewriter(this, parents);
17076 return rewriter(new XHPClassAttribute(
17080 required), parents);
17083 static from_json(json, position, source)
17085 let type = EditableSyntax.from_json(
17086 json.xhp_attribute_decl_type, position, source);
17087 position += type.width;
17088 let name = EditableSyntax.from_json(
17089 json.xhp_attribute_decl_name, position, source);
17090 position += name.width;
17091 let initializer = EditableSyntax.from_json(
17092 json.xhp_attribute_decl_initializer, position, source);
17093 position += initializer.width;
17094 let required = EditableSyntax.from_json(
17095 json.xhp_attribute_decl_required, position, source);
17096 position += required.width;
17097 return new XHPClassAttribute(
17103 get children_keys()
17105 if (XHPClassAttribute._children_keys == null)
17106 XHPClassAttribute._children_keys = [
17111 return XHPClassAttribute._children_keys;
17114 class XHPSimpleClassAttribute extends EditableSyntax
17119 super('xhp_simple_class_attribute', {
17122 get type() { return this.children.type; }
17124 return new XHPSimpleClassAttribute(
17127 rewrite(rewriter, parents)
17129 if (parents == undefined)
17131 let new_parents = parents.slice();
17132 new_parents.push(this);
17133 var type = this.type.rewrite(rewriter, new_parents);
17135 type === this.type)
17137 return rewriter(this, parents);
17141 return rewriter(new XHPSimpleClassAttribute(
17145 static from_json(json, position, source)
17147 let type = EditableSyntax.from_json(
17148 json.xhp_simple_class_attribute_type, position, source);
17149 position += type.width;
17150 return new XHPSimpleClassAttribute(
17153 get children_keys()
17155 if (XHPSimpleClassAttribute._children_keys == null)
17156 XHPSimpleClassAttribute._children_keys = [
17158 return XHPSimpleClassAttribute._children_keys;
17161 class XHPSimpleAttribute extends EditableSyntax
17168 super('xhp_simple_attribute', {
17171 expression: expression });
17173 get name() { return this.children.name; }
17174 get equal() { return this.children.equal; }
17175 get expression() { return this.children.expression; }
17177 return new XHPSimpleAttribute(
17183 return new XHPSimpleAttribute(
17188 with_expression(expression){
17189 return new XHPSimpleAttribute(
17194 rewrite(rewriter, parents)
17196 if (parents == undefined)
17198 let new_parents = parents.slice();
17199 new_parents.push(this);
17200 var name = this.name.rewrite(rewriter, new_parents);
17201 var equal = this.equal.rewrite(rewriter, new_parents);
17202 var expression = this.expression.rewrite(rewriter, new_parents);
17204 name === this.name &&
17205 equal === this.equal &&
17206 expression === this.expression)
17208 return rewriter(this, parents);
17212 return rewriter(new XHPSimpleAttribute(
17215 expression), parents);
17218 static from_json(json, position, source)
17220 let name = EditableSyntax.from_json(
17221 json.xhp_simple_attribute_name, position, source);
17222 position += name.width;
17223 let equal = EditableSyntax.from_json(
17224 json.xhp_simple_attribute_equal, position, source);
17225 position += equal.width;
17226 let expression = EditableSyntax.from_json(
17227 json.xhp_simple_attribute_expression, position, source);
17228 position += expression.width;
17229 return new XHPSimpleAttribute(
17234 get children_keys()
17236 if (XHPSimpleAttribute._children_keys == null)
17237 XHPSimpleAttribute._children_keys = [
17241 return XHPSimpleAttribute._children_keys;
17244 class XHPSpreadAttribute extends EditableSyntax
17252 super('xhp_spread_attribute', {
17253 left_brace: left_brace,
17254 spread_operator: spread_operator,
17255 expression: expression,
17256 right_brace: right_brace });
17258 get left_brace() { return this.children.left_brace; }
17259 get spread_operator() { return this.children.spread_operator; }
17260 get expression() { return this.children.expression; }
17261 get right_brace() { return this.children.right_brace; }
17262 with_left_brace(left_brace){
17263 return new XHPSpreadAttribute(
17265 this.spread_operator,
17269 with_spread_operator(spread_operator){
17270 return new XHPSpreadAttribute(
17276 with_expression(expression){
17277 return new XHPSpreadAttribute(
17279 this.spread_operator,
17283 with_right_brace(right_brace){
17284 return new XHPSpreadAttribute(
17286 this.spread_operator,
17290 rewrite(rewriter, parents)
17292 if (parents == undefined)
17294 let new_parents = parents.slice();
17295 new_parents.push(this);
17296 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
17297 var spread_operator = this.spread_operator.rewrite(rewriter, new_parents);
17298 var expression = this.expression.rewrite(rewriter, new_parents);
17299 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
17301 left_brace === this.left_brace &&
17302 spread_operator === this.spread_operator &&
17303 expression === this.expression &&
17304 right_brace === this.right_brace)
17306 return rewriter(this, parents);
17310 return rewriter(new XHPSpreadAttribute(
17314 right_brace), parents);
17317 static from_json(json, position, source)
17319 let left_brace = EditableSyntax.from_json(
17320 json.xhp_spread_attribute_left_brace, position, source);
17321 position += left_brace.width;
17322 let spread_operator = EditableSyntax.from_json(
17323 json.xhp_spread_attribute_spread_operator, position, source);
17324 position += spread_operator.width;
17325 let expression = EditableSyntax.from_json(
17326 json.xhp_spread_attribute_expression, position, source);
17327 position += expression.width;
17328 let right_brace = EditableSyntax.from_json(
17329 json.xhp_spread_attribute_right_brace, position, source);
17330 position += right_brace.width;
17331 return new XHPSpreadAttribute(
17337 get children_keys()
17339 if (XHPSpreadAttribute._children_keys == null)
17340 XHPSpreadAttribute._children_keys = [
17345 return XHPSpreadAttribute._children_keys;
17348 class XHPOpen extends EditableSyntax
17356 super('xhp_open', {
17357 left_angle: left_angle,
17359 attributes: attributes,
17360 right_angle: right_angle });
17362 get left_angle() { return this.children.left_angle; }
17363 get name() { return this.children.name; }
17364 get attributes() { return this.children.attributes; }
17365 get right_angle() { return this.children.right_angle; }
17366 with_left_angle(left_angle){
17367 return new XHPOpen(
17374 return new XHPOpen(
17380 with_attributes(attributes){
17381 return new XHPOpen(
17387 with_right_angle(right_angle){
17388 return new XHPOpen(
17394 rewrite(rewriter, parents)
17396 if (parents == undefined)
17398 let new_parents = parents.slice();
17399 new_parents.push(this);
17400 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
17401 var name = this.name.rewrite(rewriter, new_parents);
17402 var attributes = this.attributes.rewrite(rewriter, new_parents);
17403 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
17405 left_angle === this.left_angle &&
17406 name === this.name &&
17407 attributes === this.attributes &&
17408 right_angle === this.right_angle)
17410 return rewriter(this, parents);
17414 return rewriter(new XHPOpen(
17418 right_angle), parents);
17421 static from_json(json, position, source)
17423 let left_angle = EditableSyntax.from_json(
17424 json.xhp_open_left_angle, position, source);
17425 position += left_angle.width;
17426 let name = EditableSyntax.from_json(
17427 json.xhp_open_name, position, source);
17428 position += name.width;
17429 let attributes = EditableSyntax.from_json(
17430 json.xhp_open_attributes, position, source);
17431 position += attributes.width;
17432 let right_angle = EditableSyntax.from_json(
17433 json.xhp_open_right_angle, position, source);
17434 position += right_angle.width;
17435 return new XHPOpen(
17441 get children_keys()
17443 if (XHPOpen._children_keys == null)
17444 XHPOpen._children_keys = [
17449 return XHPOpen._children_keys;
17452 class XHPExpression extends EditableSyntax
17459 super('xhp_expression', {
17464 get open() { return this.children.open; }
17465 get body() { return this.children.body; }
17466 get close() { return this.children.close; }
17468 return new XHPExpression(
17474 return new XHPExpression(
17480 return new XHPExpression(
17485 rewrite(rewriter, parents)
17487 if (parents == undefined)
17489 let new_parents = parents.slice();
17490 new_parents.push(this);
17491 var open = this.open.rewrite(rewriter, new_parents);
17492 var body = this.body.rewrite(rewriter, new_parents);
17493 var close = this.close.rewrite(rewriter, new_parents);
17495 open === this.open &&
17496 body === this.body &&
17497 close === this.close)
17499 return rewriter(this, parents);
17503 return rewriter(new XHPExpression(
17509 static from_json(json, position, source)
17511 let open = EditableSyntax.from_json(
17512 json.xhp_open, position, source);
17513 position += open.width;
17514 let body = EditableSyntax.from_json(
17515 json.xhp_body, position, source);
17516 position += body.width;
17517 let close = EditableSyntax.from_json(
17518 json.xhp_close, position, source);
17519 position += close.width;
17520 return new XHPExpression(
17525 get children_keys()
17527 if (XHPExpression._children_keys == null)
17528 XHPExpression._children_keys = [
17532 return XHPExpression._children_keys;
17535 class XHPClose extends EditableSyntax
17542 super('xhp_close', {
17543 left_angle: left_angle,
17545 right_angle: right_angle });
17547 get left_angle() { return this.children.left_angle; }
17548 get name() { return this.children.name; }
17549 get right_angle() { return this.children.right_angle; }
17550 with_left_angle(left_angle){
17551 return new XHPClose(
17557 return new XHPClose(
17562 with_right_angle(right_angle){
17563 return new XHPClose(
17568 rewrite(rewriter, parents)
17570 if (parents == undefined)
17572 let new_parents = parents.slice();
17573 new_parents.push(this);
17574 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
17575 var name = this.name.rewrite(rewriter, new_parents);
17576 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
17578 left_angle === this.left_angle &&
17579 name === this.name &&
17580 right_angle === this.right_angle)
17582 return rewriter(this, parents);
17586 return rewriter(new XHPClose(
17589 right_angle), parents);
17592 static from_json(json, position, source)
17594 let left_angle = EditableSyntax.from_json(
17595 json.xhp_close_left_angle, position, source);
17596 position += left_angle.width;
17597 let name = EditableSyntax.from_json(
17598 json.xhp_close_name, position, source);
17599 position += name.width;
17600 let right_angle = EditableSyntax.from_json(
17601 json.xhp_close_right_angle, position, source);
17602 position += right_angle.width;
17603 return new XHPClose(
17608 get children_keys()
17610 if (XHPClose._children_keys == null)
17611 XHPClose._children_keys = [
17615 return XHPClose._children_keys;
17618 class TypeConstant extends EditableSyntax
17625 super('type_constant', {
17626 left_type: left_type,
17627 separator: separator,
17628 right_type: right_type });
17630 get left_type() { return this.children.left_type; }
17631 get separator() { return this.children.separator; }
17632 get right_type() { return this.children.right_type; }
17633 with_left_type(left_type){
17634 return new TypeConstant(
17639 with_separator(separator){
17640 return new TypeConstant(
17645 with_right_type(right_type){
17646 return new TypeConstant(
17651 rewrite(rewriter, parents)
17653 if (parents == undefined)
17655 let new_parents = parents.slice();
17656 new_parents.push(this);
17657 var left_type = this.left_type.rewrite(rewriter, new_parents);
17658 var separator = this.separator.rewrite(rewriter, new_parents);
17659 var right_type = this.right_type.rewrite(rewriter, new_parents);
17661 left_type === this.left_type &&
17662 separator === this.separator &&
17663 right_type === this.right_type)
17665 return rewriter(this, parents);
17669 return rewriter(new TypeConstant(
17672 right_type), parents);
17675 static from_json(json, position, source)
17677 let left_type = EditableSyntax.from_json(
17678 json.type_constant_left_type, position, source);
17679 position += left_type.width;
17680 let separator = EditableSyntax.from_json(
17681 json.type_constant_separator, position, source);
17682 position += separator.width;
17683 let right_type = EditableSyntax.from_json(
17684 json.type_constant_right_type, position, source);
17685 position += right_type.width;
17686 return new TypeConstant(
17691 get children_keys()
17693 if (TypeConstant._children_keys == null)
17694 TypeConstant._children_keys = [
17698 return TypeConstant._children_keys;
17701 class VectorTypeSpecifier extends EditableSyntax
17710 super('vector_type_specifier', {
17712 left_angle: left_angle,
17714 trailing_comma: trailing_comma,
17715 right_angle: right_angle });
17717 get keyword() { return this.children.keyword; }
17718 get left_angle() { return this.children.left_angle; }
17719 get type() { return this.children.type; }
17720 get trailing_comma() { return this.children.trailing_comma; }
17721 get right_angle() { return this.children.right_angle; }
17722 with_keyword(keyword){
17723 return new VectorTypeSpecifier(
17727 this.trailing_comma,
17730 with_left_angle(left_angle){
17731 return new VectorTypeSpecifier(
17735 this.trailing_comma,
17739 return new VectorTypeSpecifier(
17743 this.trailing_comma,
17746 with_trailing_comma(trailing_comma){
17747 return new VectorTypeSpecifier(
17754 with_right_angle(right_angle){
17755 return new VectorTypeSpecifier(
17759 this.trailing_comma,
17762 rewrite(rewriter, parents)
17764 if (parents == undefined)
17766 let new_parents = parents.slice();
17767 new_parents.push(this);
17768 var keyword = this.keyword.rewrite(rewriter, new_parents);
17769 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
17770 var type = this.type.rewrite(rewriter, new_parents);
17771 var trailing_comma = this.trailing_comma.rewrite(rewriter, new_parents);
17772 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
17774 keyword === this.keyword &&
17775 left_angle === this.left_angle &&
17776 type === this.type &&
17777 trailing_comma === this.trailing_comma &&
17778 right_angle === this.right_angle)
17780 return rewriter(this, parents);
17784 return rewriter(new VectorTypeSpecifier(
17789 right_angle), parents);
17792 static from_json(json, position, source)
17794 let keyword = EditableSyntax.from_json(
17795 json.vector_type_keyword, position, source);
17796 position += keyword.width;
17797 let left_angle = EditableSyntax.from_json(
17798 json.vector_type_left_angle, position, source);
17799 position += left_angle.width;
17800 let type = EditableSyntax.from_json(
17801 json.vector_type_type, position, source);
17802 position += type.width;
17803 let trailing_comma = EditableSyntax.from_json(
17804 json.vector_type_trailing_comma, position, source);
17805 position += trailing_comma.width;
17806 let right_angle = EditableSyntax.from_json(
17807 json.vector_type_right_angle, position, source);
17808 position += right_angle.width;
17809 return new VectorTypeSpecifier(
17816 get children_keys()
17818 if (VectorTypeSpecifier._children_keys == null)
17819 VectorTypeSpecifier._children_keys = [
17825 return VectorTypeSpecifier._children_keys;
17828 class KeysetTypeSpecifier extends EditableSyntax
17837 super('keyset_type_specifier', {
17839 left_angle: left_angle,
17841 trailing_comma: trailing_comma,
17842 right_angle: right_angle });
17844 get keyword() { return this.children.keyword; }
17845 get left_angle() { return this.children.left_angle; }
17846 get type() { return this.children.type; }
17847 get trailing_comma() { return this.children.trailing_comma; }
17848 get right_angle() { return this.children.right_angle; }
17849 with_keyword(keyword){
17850 return new KeysetTypeSpecifier(
17854 this.trailing_comma,
17857 with_left_angle(left_angle){
17858 return new KeysetTypeSpecifier(
17862 this.trailing_comma,
17866 return new KeysetTypeSpecifier(
17870 this.trailing_comma,
17873 with_trailing_comma(trailing_comma){
17874 return new KeysetTypeSpecifier(
17881 with_right_angle(right_angle){
17882 return new KeysetTypeSpecifier(
17886 this.trailing_comma,
17889 rewrite(rewriter, parents)
17891 if (parents == undefined)
17893 let new_parents = parents.slice();
17894 new_parents.push(this);
17895 var keyword = this.keyword.rewrite(rewriter, new_parents);
17896 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
17897 var type = this.type.rewrite(rewriter, new_parents);
17898 var trailing_comma = this.trailing_comma.rewrite(rewriter, new_parents);
17899 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
17901 keyword === this.keyword &&
17902 left_angle === this.left_angle &&
17903 type === this.type &&
17904 trailing_comma === this.trailing_comma &&
17905 right_angle === this.right_angle)
17907 return rewriter(this, parents);
17911 return rewriter(new KeysetTypeSpecifier(
17916 right_angle), parents);
17919 static from_json(json, position, source)
17921 let keyword = EditableSyntax.from_json(
17922 json.keyset_type_keyword, position, source);
17923 position += keyword.width;
17924 let left_angle = EditableSyntax.from_json(
17925 json.keyset_type_left_angle, position, source);
17926 position += left_angle.width;
17927 let type = EditableSyntax.from_json(
17928 json.keyset_type_type, position, source);
17929 position += type.width;
17930 let trailing_comma = EditableSyntax.from_json(
17931 json.keyset_type_trailing_comma, position, source);
17932 position += trailing_comma.width;
17933 let right_angle = EditableSyntax.from_json(
17934 json.keyset_type_right_angle, position, source);
17935 position += right_angle.width;
17936 return new KeysetTypeSpecifier(
17943 get children_keys()
17945 if (KeysetTypeSpecifier._children_keys == null)
17946 KeysetTypeSpecifier._children_keys = [
17952 return KeysetTypeSpecifier._children_keys;
17955 class TupleTypeExplicitSpecifier extends EditableSyntax
17963 super('tuple_type_explicit_specifier', {
17965 left_angle: left_angle,
17967 right_angle: right_angle });
17969 get keyword() { return this.children.keyword; }
17970 get left_angle() { return this.children.left_angle; }
17971 get types() { return this.children.types; }
17972 get right_angle() { return this.children.right_angle; }
17973 with_keyword(keyword){
17974 return new TupleTypeExplicitSpecifier(
17980 with_left_angle(left_angle){
17981 return new TupleTypeExplicitSpecifier(
17988 return new TupleTypeExplicitSpecifier(
17994 with_right_angle(right_angle){
17995 return new TupleTypeExplicitSpecifier(
18001 rewrite(rewriter, parents)
18003 if (parents == undefined)
18005 let new_parents = parents.slice();
18006 new_parents.push(this);
18007 var keyword = this.keyword.rewrite(rewriter, new_parents);
18008 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
18009 var types = this.types.rewrite(rewriter, new_parents);
18010 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
18012 keyword === this.keyword &&
18013 left_angle === this.left_angle &&
18014 types === this.types &&
18015 right_angle === this.right_angle)
18017 return rewriter(this, parents);
18021 return rewriter(new TupleTypeExplicitSpecifier(
18025 right_angle), parents);
18028 static from_json(json, position, source)
18030 let keyword = EditableSyntax.from_json(
18031 json.tuple_type_keyword, position, source);
18032 position += keyword.width;
18033 let left_angle = EditableSyntax.from_json(
18034 json.tuple_type_left_angle, position, source);
18035 position += left_angle.width;
18036 let types = EditableSyntax.from_json(
18037 json.tuple_type_types, position, source);
18038 position += types.width;
18039 let right_angle = EditableSyntax.from_json(
18040 json.tuple_type_right_angle, position, source);
18041 position += right_angle.width;
18042 return new TupleTypeExplicitSpecifier(
18048 get children_keys()
18050 if (TupleTypeExplicitSpecifier._children_keys == null)
18051 TupleTypeExplicitSpecifier._children_keys = [
18056 return TupleTypeExplicitSpecifier._children_keys;
18059 class VarrayTypeSpecifier extends EditableSyntax
18068 super('varray_type_specifier', {
18070 left_angle: left_angle,
18072 trailing_comma: trailing_comma,
18073 right_angle: right_angle });
18075 get keyword() { return this.children.keyword; }
18076 get left_angle() { return this.children.left_angle; }
18077 get type() { return this.children.type; }
18078 get trailing_comma() { return this.children.trailing_comma; }
18079 get right_angle() { return this.children.right_angle; }
18080 with_keyword(keyword){
18081 return new VarrayTypeSpecifier(
18085 this.trailing_comma,
18088 with_left_angle(left_angle){
18089 return new VarrayTypeSpecifier(
18093 this.trailing_comma,
18097 return new VarrayTypeSpecifier(
18101 this.trailing_comma,
18104 with_trailing_comma(trailing_comma){
18105 return new VarrayTypeSpecifier(
18112 with_right_angle(right_angle){
18113 return new VarrayTypeSpecifier(
18117 this.trailing_comma,
18120 rewrite(rewriter, parents)
18122 if (parents == undefined)
18124 let new_parents = parents.slice();
18125 new_parents.push(this);
18126 var keyword = this.keyword.rewrite(rewriter, new_parents);
18127 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
18128 var type = this.type.rewrite(rewriter, new_parents);
18129 var trailing_comma = this.trailing_comma.rewrite(rewriter, new_parents);
18130 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
18132 keyword === this.keyword &&
18133 left_angle === this.left_angle &&
18134 type === this.type &&
18135 trailing_comma === this.trailing_comma &&
18136 right_angle === this.right_angle)
18138 return rewriter(this, parents);
18142 return rewriter(new VarrayTypeSpecifier(
18147 right_angle), parents);
18150 static from_json(json, position, source)
18152 let keyword = EditableSyntax.from_json(
18153 json.varray_keyword, position, source);
18154 position += keyword.width;
18155 let left_angle = EditableSyntax.from_json(
18156 json.varray_left_angle, position, source);
18157 position += left_angle.width;
18158 let type = EditableSyntax.from_json(
18159 json.varray_type, position, source);
18160 position += type.width;
18161 let trailing_comma = EditableSyntax.from_json(
18162 json.varray_trailing_comma, position, source);
18163 position += trailing_comma.width;
18164 let right_angle = EditableSyntax.from_json(
18165 json.varray_right_angle, position, source);
18166 position += right_angle.width;
18167 return new VarrayTypeSpecifier(
18174 get children_keys()
18176 if (VarrayTypeSpecifier._children_keys == null)
18177 VarrayTypeSpecifier._children_keys = [
18183 return VarrayTypeSpecifier._children_keys;
18186 class VectorArrayTypeSpecifier extends EditableSyntax
18194 super('vector_array_type_specifier', {
18196 left_angle: left_angle,
18198 right_angle: right_angle });
18200 get keyword() { return this.children.keyword; }
18201 get left_angle() { return this.children.left_angle; }
18202 get type() { return this.children.type; }
18203 get right_angle() { return this.children.right_angle; }
18204 with_keyword(keyword){
18205 return new VectorArrayTypeSpecifier(
18211 with_left_angle(left_angle){
18212 return new VectorArrayTypeSpecifier(
18219 return new VectorArrayTypeSpecifier(
18225 with_right_angle(right_angle){
18226 return new VectorArrayTypeSpecifier(
18232 rewrite(rewriter, parents)
18234 if (parents == undefined)
18236 let new_parents = parents.slice();
18237 new_parents.push(this);
18238 var keyword = this.keyword.rewrite(rewriter, new_parents);
18239 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
18240 var type = this.type.rewrite(rewriter, new_parents);
18241 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
18243 keyword === this.keyword &&
18244 left_angle === this.left_angle &&
18245 type === this.type &&
18246 right_angle === this.right_angle)
18248 return rewriter(this, parents);
18252 return rewriter(new VectorArrayTypeSpecifier(
18256 right_angle), parents);
18259 static from_json(json, position, source)
18261 let keyword = EditableSyntax.from_json(
18262 json.vector_array_keyword, position, source);
18263 position += keyword.width;
18264 let left_angle = EditableSyntax.from_json(
18265 json.vector_array_left_angle, position, source);
18266 position += left_angle.width;
18267 let type = EditableSyntax.from_json(
18268 json.vector_array_type, position, source);
18269 position += type.width;
18270 let right_angle = EditableSyntax.from_json(
18271 json.vector_array_right_angle, position, source);
18272 position += right_angle.width;
18273 return new VectorArrayTypeSpecifier(
18279 get children_keys()
18281 if (VectorArrayTypeSpecifier._children_keys == null)
18282 VectorArrayTypeSpecifier._children_keys = [
18287 return VectorArrayTypeSpecifier._children_keys;
18290 class TypeParameter extends EditableSyntax
18297 super('type_parameter', {
18298 variance: variance,
18300 constraints: constraints });
18302 get variance() { return this.children.variance; }
18303 get name() { return this.children.name; }
18304 get constraints() { return this.children.constraints; }
18305 with_variance(variance){
18306 return new TypeParameter(
18312 return new TypeParameter(
18317 with_constraints(constraints){
18318 return new TypeParameter(
18323 rewrite(rewriter, parents)
18325 if (parents == undefined)
18327 let new_parents = parents.slice();
18328 new_parents.push(this);
18329 var variance = this.variance.rewrite(rewriter, new_parents);
18330 var name = this.name.rewrite(rewriter, new_parents);
18331 var constraints = this.constraints.rewrite(rewriter, new_parents);
18333 variance === this.variance &&
18334 name === this.name &&
18335 constraints === this.constraints)
18337 return rewriter(this, parents);
18341 return rewriter(new TypeParameter(
18344 constraints), parents);
18347 static from_json(json, position, source)
18349 let variance = EditableSyntax.from_json(
18350 json.type_variance, position, source);
18351 position += variance.width;
18352 let name = EditableSyntax.from_json(
18353 json.type_name, position, source);
18354 position += name.width;
18355 let constraints = EditableSyntax.from_json(
18356 json.type_constraints, position, source);
18357 position += constraints.width;
18358 return new TypeParameter(
18363 get children_keys()
18365 if (TypeParameter._children_keys == null)
18366 TypeParameter._children_keys = [
18370 return TypeParameter._children_keys;
18373 class TypeConstraint extends EditableSyntax
18379 super('type_constraint', {
18383 get keyword() { return this.children.keyword; }
18384 get type() { return this.children.type; }
18385 with_keyword(keyword){
18386 return new TypeConstraint(
18391 return new TypeConstraint(
18395 rewrite(rewriter, parents)
18397 if (parents == undefined)
18399 let new_parents = parents.slice();
18400 new_parents.push(this);
18401 var keyword = this.keyword.rewrite(rewriter, new_parents);
18402 var type = this.type.rewrite(rewriter, new_parents);
18404 keyword === this.keyword &&
18405 type === this.type)
18407 return rewriter(this, parents);
18411 return rewriter(new TypeConstraint(
18416 static from_json(json, position, source)
18418 let keyword = EditableSyntax.from_json(
18419 json.constraint_keyword, position, source);
18420 position += keyword.width;
18421 let type = EditableSyntax.from_json(
18422 json.constraint_type, position, source);
18423 position += type.width;
18424 return new TypeConstraint(
18428 get children_keys()
18430 if (TypeConstraint._children_keys == null)
18431 TypeConstraint._children_keys = [
18434 return TypeConstraint._children_keys;
18437 class DarrayTypeSpecifier extends EditableSyntax
18448 super('darray_type_specifier', {
18450 left_angle: left_angle,
18454 trailing_comma: trailing_comma,
18455 right_angle: right_angle });
18457 get keyword() { return this.children.keyword; }
18458 get left_angle() { return this.children.left_angle; }
18459 get key() { return this.children.key; }
18460 get comma() { return this.children.comma; }
18461 get value() { return this.children.value; }
18462 get trailing_comma() { return this.children.trailing_comma; }
18463 get right_angle() { return this.children.right_angle; }
18464 with_keyword(keyword){
18465 return new DarrayTypeSpecifier(
18471 this.trailing_comma,
18474 with_left_angle(left_angle){
18475 return new DarrayTypeSpecifier(
18481 this.trailing_comma,
18485 return new DarrayTypeSpecifier(
18491 this.trailing_comma,
18495 return new DarrayTypeSpecifier(
18501 this.trailing_comma,
18505 return new DarrayTypeSpecifier(
18511 this.trailing_comma,
18514 with_trailing_comma(trailing_comma){
18515 return new DarrayTypeSpecifier(
18524 with_right_angle(right_angle){
18525 return new DarrayTypeSpecifier(
18531 this.trailing_comma,
18534 rewrite(rewriter, parents)
18536 if (parents == undefined)
18538 let new_parents = parents.slice();
18539 new_parents.push(this);
18540 var keyword = this.keyword.rewrite(rewriter, new_parents);
18541 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
18542 var key = this.key.rewrite(rewriter, new_parents);
18543 var comma = this.comma.rewrite(rewriter, new_parents);
18544 var value = this.value.rewrite(rewriter, new_parents);
18545 var trailing_comma = this.trailing_comma.rewrite(rewriter, new_parents);
18546 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
18548 keyword === this.keyword &&
18549 left_angle === this.left_angle &&
18550 key === this.key &&
18551 comma === this.comma &&
18552 value === this.value &&
18553 trailing_comma === this.trailing_comma &&
18554 right_angle === this.right_angle)
18556 return rewriter(this, parents);
18560 return rewriter(new DarrayTypeSpecifier(
18567 right_angle), parents);
18570 static from_json(json, position, source)
18572 let keyword = EditableSyntax.from_json(
18573 json.darray_keyword, position, source);
18574 position += keyword.width;
18575 let left_angle = EditableSyntax.from_json(
18576 json.darray_left_angle, position, source);
18577 position += left_angle.width;
18578 let key = EditableSyntax.from_json(
18579 json.darray_key, position, source);
18580 position += key.width;
18581 let comma = EditableSyntax.from_json(
18582 json.darray_comma, position, source);
18583 position += comma.width;
18584 let value = EditableSyntax.from_json(
18585 json.darray_value, position, source);
18586 position += value.width;
18587 let trailing_comma = EditableSyntax.from_json(
18588 json.darray_trailing_comma, position, source);
18589 position += trailing_comma.width;
18590 let right_angle = EditableSyntax.from_json(
18591 json.darray_right_angle, position, source);
18592 position += right_angle.width;
18593 return new DarrayTypeSpecifier(
18602 get children_keys()
18604 if (DarrayTypeSpecifier._children_keys == null)
18605 DarrayTypeSpecifier._children_keys = [
18613 return DarrayTypeSpecifier._children_keys;
18616 class MapArrayTypeSpecifier extends EditableSyntax
18626 super('map_array_type_specifier', {
18628 left_angle: left_angle,
18632 right_angle: right_angle });
18634 get keyword() { return this.children.keyword; }
18635 get left_angle() { return this.children.left_angle; }
18636 get key() { return this.children.key; }
18637 get comma() { return this.children.comma; }
18638 get value() { return this.children.value; }
18639 get right_angle() { return this.children.right_angle; }
18640 with_keyword(keyword){
18641 return new MapArrayTypeSpecifier(
18649 with_left_angle(left_angle){
18650 return new MapArrayTypeSpecifier(
18659 return new MapArrayTypeSpecifier(
18668 return new MapArrayTypeSpecifier(
18677 return new MapArrayTypeSpecifier(
18685 with_right_angle(right_angle){
18686 return new MapArrayTypeSpecifier(
18694 rewrite(rewriter, parents)
18696 if (parents == undefined)
18698 let new_parents = parents.slice();
18699 new_parents.push(this);
18700 var keyword = this.keyword.rewrite(rewriter, new_parents);
18701 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
18702 var key = this.key.rewrite(rewriter, new_parents);
18703 var comma = this.comma.rewrite(rewriter, new_parents);
18704 var value = this.value.rewrite(rewriter, new_parents);
18705 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
18707 keyword === this.keyword &&
18708 left_angle === this.left_angle &&
18709 key === this.key &&
18710 comma === this.comma &&
18711 value === this.value &&
18712 right_angle === this.right_angle)
18714 return rewriter(this, parents);
18718 return rewriter(new MapArrayTypeSpecifier(
18724 right_angle), parents);
18727 static from_json(json, position, source)
18729 let keyword = EditableSyntax.from_json(
18730 json.map_array_keyword, position, source);
18731 position += keyword.width;
18732 let left_angle = EditableSyntax.from_json(
18733 json.map_array_left_angle, position, source);
18734 position += left_angle.width;
18735 let key = EditableSyntax.from_json(
18736 json.map_array_key, position, source);
18737 position += key.width;
18738 let comma = EditableSyntax.from_json(
18739 json.map_array_comma, position, source);
18740 position += comma.width;
18741 let value = EditableSyntax.from_json(
18742 json.map_array_value, position, source);
18743 position += value.width;
18744 let right_angle = EditableSyntax.from_json(
18745 json.map_array_right_angle, position, source);
18746 position += right_angle.width;
18747 return new MapArrayTypeSpecifier(
18755 get children_keys()
18757 if (MapArrayTypeSpecifier._children_keys == null)
18758 MapArrayTypeSpecifier._children_keys = [
18765 return MapArrayTypeSpecifier._children_keys;
18768 class DictionaryTypeSpecifier extends EditableSyntax
18776 super('dictionary_type_specifier', {
18778 left_angle: left_angle,
18780 right_angle: right_angle });
18782 get keyword() { return this.children.keyword; }
18783 get left_angle() { return this.children.left_angle; }
18784 get members() { return this.children.members; }
18785 get right_angle() { return this.children.right_angle; }
18786 with_keyword(keyword){
18787 return new DictionaryTypeSpecifier(
18793 with_left_angle(left_angle){
18794 return new DictionaryTypeSpecifier(
18800 with_members(members){
18801 return new DictionaryTypeSpecifier(
18807 with_right_angle(right_angle){
18808 return new DictionaryTypeSpecifier(
18814 rewrite(rewriter, parents)
18816 if (parents == undefined)
18818 let new_parents = parents.slice();
18819 new_parents.push(this);
18820 var keyword = this.keyword.rewrite(rewriter, new_parents);
18821 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
18822 var members = this.members.rewrite(rewriter, new_parents);
18823 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
18825 keyword === this.keyword &&
18826 left_angle === this.left_angle &&
18827 members === this.members &&
18828 right_angle === this.right_angle)
18830 return rewriter(this, parents);
18834 return rewriter(new DictionaryTypeSpecifier(
18838 right_angle), parents);
18841 static from_json(json, position, source)
18843 let keyword = EditableSyntax.from_json(
18844 json.dictionary_type_keyword, position, source);
18845 position += keyword.width;
18846 let left_angle = EditableSyntax.from_json(
18847 json.dictionary_type_left_angle, position, source);
18848 position += left_angle.width;
18849 let members = EditableSyntax.from_json(
18850 json.dictionary_type_members, position, source);
18851 position += members.width;
18852 let right_angle = EditableSyntax.from_json(
18853 json.dictionary_type_right_angle, position, source);
18854 position += right_angle.width;
18855 return new DictionaryTypeSpecifier(
18861 get children_keys()
18863 if (DictionaryTypeSpecifier._children_keys == null)
18864 DictionaryTypeSpecifier._children_keys = [
18869 return DictionaryTypeSpecifier._children_keys;
18872 class ClosureTypeSpecifier extends EditableSyntax
18885 super('closure_type_specifier', {
18886 outer_left_paren: outer_left_paren,
18887 coroutine: coroutine,
18888 function_keyword: function_keyword,
18889 inner_left_paren: inner_left_paren,
18890 parameter_list: parameter_list,
18891 inner_right_paren: inner_right_paren,
18893 return_type: return_type,
18894 outer_right_paren: outer_right_paren });
18896 get outer_left_paren() { return this.children.outer_left_paren; }
18897 get coroutine() { return this.children.coroutine; }
18898 get function_keyword() { return this.children.function_keyword; }
18899 get inner_left_paren() { return this.children.inner_left_paren; }
18900 get parameter_list() { return this.children.parameter_list; }
18901 get inner_right_paren() { return this.children.inner_right_paren; }
18902 get colon() { return this.children.colon; }
18903 get return_type() { return this.children.return_type; }
18904 get outer_right_paren() { return this.children.outer_right_paren; }
18905 with_outer_left_paren(outer_left_paren){
18906 return new ClosureTypeSpecifier(
18909 this.function_keyword,
18910 this.inner_left_paren,
18911 this.parameter_list,
18912 this.inner_right_paren,
18915 this.outer_right_paren);
18917 with_coroutine(coroutine){
18918 return new ClosureTypeSpecifier(
18919 this.outer_left_paren,
18921 this.function_keyword,
18922 this.inner_left_paren,
18923 this.parameter_list,
18924 this.inner_right_paren,
18927 this.outer_right_paren);
18929 with_function_keyword(function_keyword){
18930 return new ClosureTypeSpecifier(
18931 this.outer_left_paren,
18934 this.inner_left_paren,
18935 this.parameter_list,
18936 this.inner_right_paren,
18939 this.outer_right_paren);
18941 with_inner_left_paren(inner_left_paren){
18942 return new ClosureTypeSpecifier(
18943 this.outer_left_paren,
18945 this.function_keyword,
18947 this.parameter_list,
18948 this.inner_right_paren,
18951 this.outer_right_paren);
18953 with_parameter_list(parameter_list){
18954 return new ClosureTypeSpecifier(
18955 this.outer_left_paren,
18957 this.function_keyword,
18958 this.inner_left_paren,
18960 this.inner_right_paren,
18963 this.outer_right_paren);
18965 with_inner_right_paren(inner_right_paren){
18966 return new ClosureTypeSpecifier(
18967 this.outer_left_paren,
18969 this.function_keyword,
18970 this.inner_left_paren,
18971 this.parameter_list,
18975 this.outer_right_paren);
18978 return new ClosureTypeSpecifier(
18979 this.outer_left_paren,
18981 this.function_keyword,
18982 this.inner_left_paren,
18983 this.parameter_list,
18984 this.inner_right_paren,
18987 this.outer_right_paren);
18989 with_return_type(return_type){
18990 return new ClosureTypeSpecifier(
18991 this.outer_left_paren,
18993 this.function_keyword,
18994 this.inner_left_paren,
18995 this.parameter_list,
18996 this.inner_right_paren,
18999 this.outer_right_paren);
19001 with_outer_right_paren(outer_right_paren){
19002 return new ClosureTypeSpecifier(
19003 this.outer_left_paren,
19005 this.function_keyword,
19006 this.inner_left_paren,
19007 this.parameter_list,
19008 this.inner_right_paren,
19011 outer_right_paren);
19013 rewrite(rewriter, parents)
19015 if (parents == undefined)
19017 let new_parents = parents.slice();
19018 new_parents.push(this);
19019 var outer_left_paren = this.outer_left_paren.rewrite(rewriter, new_parents);
19020 var coroutine = this.coroutine.rewrite(rewriter, new_parents);
19021 var function_keyword = this.function_keyword.rewrite(rewriter, new_parents);
19022 var inner_left_paren = this.inner_left_paren.rewrite(rewriter, new_parents);
19023 var parameter_list = this.parameter_list.rewrite(rewriter, new_parents);
19024 var inner_right_paren = this.inner_right_paren.rewrite(rewriter, new_parents);
19025 var colon = this.colon.rewrite(rewriter, new_parents);
19026 var return_type = this.return_type.rewrite(rewriter, new_parents);
19027 var outer_right_paren = this.outer_right_paren.rewrite(rewriter, new_parents);
19029 outer_left_paren === this.outer_left_paren &&
19030 coroutine === this.coroutine &&
19031 function_keyword === this.function_keyword &&
19032 inner_left_paren === this.inner_left_paren &&
19033 parameter_list === this.parameter_list &&
19034 inner_right_paren === this.inner_right_paren &&
19035 colon === this.colon &&
19036 return_type === this.return_type &&
19037 outer_right_paren === this.outer_right_paren)
19039 return rewriter(this, parents);
19043 return rewriter(new ClosureTypeSpecifier(
19052 outer_right_paren), parents);
19055 static from_json(json, position, source)
19057 let outer_left_paren = EditableSyntax.from_json(
19058 json.closure_outer_left_paren, position, source);
19059 position += outer_left_paren.width;
19060 let coroutine = EditableSyntax.from_json(
19061 json.closure_coroutine, position, source);
19062 position += coroutine.width;
19063 let function_keyword = EditableSyntax.from_json(
19064 json.closure_function_keyword, position, source);
19065 position += function_keyword.width;
19066 let inner_left_paren = EditableSyntax.from_json(
19067 json.closure_inner_left_paren, position, source);
19068 position += inner_left_paren.width;
19069 let parameter_list = EditableSyntax.from_json(
19070 json.closure_parameter_list, position, source);
19071 position += parameter_list.width;
19072 let inner_right_paren = EditableSyntax.from_json(
19073 json.closure_inner_right_paren, position, source);
19074 position += inner_right_paren.width;
19075 let colon = EditableSyntax.from_json(
19076 json.closure_colon, position, source);
19077 position += colon.width;
19078 let return_type = EditableSyntax.from_json(
19079 json.closure_return_type, position, source);
19080 position += return_type.width;
19081 let outer_right_paren = EditableSyntax.from_json(
19082 json.closure_outer_right_paren, position, source);
19083 position += outer_right_paren.width;
19084 return new ClosureTypeSpecifier(
19093 outer_right_paren);
19095 get children_keys()
19097 if (ClosureTypeSpecifier._children_keys == null)
19098 ClosureTypeSpecifier._children_keys = [
19099 'outer_left_paren',
19101 'function_keyword',
19102 'inner_left_paren',
19104 'inner_right_paren',
19107 'outer_right_paren'];
19108 return ClosureTypeSpecifier._children_keys;
19111 class ClosureParameterTypeSpecifier extends EditableSyntax
19117 super('closure_parameter_type_specifier', {
19118 call_convention: call_convention,
19121 get call_convention() { return this.children.call_convention; }
19122 get type() { return this.children.type; }
19123 with_call_convention(call_convention){
19124 return new ClosureParameterTypeSpecifier(
19129 return new ClosureParameterTypeSpecifier(
19130 this.call_convention,
19133 rewrite(rewriter, parents)
19135 if (parents == undefined)
19137 let new_parents = parents.slice();
19138 new_parents.push(this);
19139 var call_convention = this.call_convention.rewrite(rewriter, new_parents);
19140 var type = this.type.rewrite(rewriter, new_parents);
19142 call_convention === this.call_convention &&
19143 type === this.type)
19145 return rewriter(this, parents);
19149 return rewriter(new ClosureParameterTypeSpecifier(
19154 static from_json(json, position, source)
19156 let call_convention = EditableSyntax.from_json(
19157 json.closure_parameter_call_convention, position, source);
19158 position += call_convention.width;
19159 let type = EditableSyntax.from_json(
19160 json.closure_parameter_type, position, source);
19161 position += type.width;
19162 return new ClosureParameterTypeSpecifier(
19166 get children_keys()
19168 if (ClosureParameterTypeSpecifier._children_keys == null)
19169 ClosureParameterTypeSpecifier._children_keys = [
19172 return ClosureParameterTypeSpecifier._children_keys;
19175 class ClassnameTypeSpecifier extends EditableSyntax
19184 super('classname_type_specifier', {
19186 left_angle: left_angle,
19188 trailing_comma: trailing_comma,
19189 right_angle: right_angle });
19191 get keyword() { return this.children.keyword; }
19192 get left_angle() { return this.children.left_angle; }
19193 get type() { return this.children.type; }
19194 get trailing_comma() { return this.children.trailing_comma; }
19195 get right_angle() { return this.children.right_angle; }
19196 with_keyword(keyword){
19197 return new ClassnameTypeSpecifier(
19201 this.trailing_comma,
19204 with_left_angle(left_angle){
19205 return new ClassnameTypeSpecifier(
19209 this.trailing_comma,
19213 return new ClassnameTypeSpecifier(
19217 this.trailing_comma,
19220 with_trailing_comma(trailing_comma){
19221 return new ClassnameTypeSpecifier(
19228 with_right_angle(right_angle){
19229 return new ClassnameTypeSpecifier(
19233 this.trailing_comma,
19236 rewrite(rewriter, parents)
19238 if (parents == undefined)
19240 let new_parents = parents.slice();
19241 new_parents.push(this);
19242 var keyword = this.keyword.rewrite(rewriter, new_parents);
19243 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
19244 var type = this.type.rewrite(rewriter, new_parents);
19245 var trailing_comma = this.trailing_comma.rewrite(rewriter, new_parents);
19246 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
19248 keyword === this.keyword &&
19249 left_angle === this.left_angle &&
19250 type === this.type &&
19251 trailing_comma === this.trailing_comma &&
19252 right_angle === this.right_angle)
19254 return rewriter(this, parents);
19258 return rewriter(new ClassnameTypeSpecifier(
19263 right_angle), parents);
19266 static from_json(json, position, source)
19268 let keyword = EditableSyntax.from_json(
19269 json.classname_keyword, position, source);
19270 position += keyword.width;
19271 let left_angle = EditableSyntax.from_json(
19272 json.classname_left_angle, position, source);
19273 position += left_angle.width;
19274 let type = EditableSyntax.from_json(
19275 json.classname_type, position, source);
19276 position += type.width;
19277 let trailing_comma = EditableSyntax.from_json(
19278 json.classname_trailing_comma, position, source);
19279 position += trailing_comma.width;
19280 let right_angle = EditableSyntax.from_json(
19281 json.classname_right_angle, position, source);
19282 position += right_angle.width;
19283 return new ClassnameTypeSpecifier(
19290 get children_keys()
19292 if (ClassnameTypeSpecifier._children_keys == null)
19293 ClassnameTypeSpecifier._children_keys = [
19299 return ClassnameTypeSpecifier._children_keys;
19302 class FieldSpecifier extends EditableSyntax
19310 super('field_specifier', {
19311 question: question,
19316 get question() { return this.children.question; }
19317 get name() { return this.children.name; }
19318 get arrow() { return this.children.arrow; }
19319 get type() { return this.children.type; }
19320 with_question(question){
19321 return new FieldSpecifier(
19328 return new FieldSpecifier(
19335 return new FieldSpecifier(
19342 return new FieldSpecifier(
19348 rewrite(rewriter, parents)
19350 if (parents == undefined)
19352 let new_parents = parents.slice();
19353 new_parents.push(this);
19354 var question = this.question.rewrite(rewriter, new_parents);
19355 var name = this.name.rewrite(rewriter, new_parents);
19356 var arrow = this.arrow.rewrite(rewriter, new_parents);
19357 var type = this.type.rewrite(rewriter, new_parents);
19359 question === this.question &&
19360 name === this.name &&
19361 arrow === this.arrow &&
19362 type === this.type)
19364 return rewriter(this, parents);
19368 return rewriter(new FieldSpecifier(
19375 static from_json(json, position, source)
19377 let question = EditableSyntax.from_json(
19378 json.field_question, position, source);
19379 position += question.width;
19380 let name = EditableSyntax.from_json(
19381 json.field_name, position, source);
19382 position += name.width;
19383 let arrow = EditableSyntax.from_json(
19384 json.field_arrow, position, source);
19385 position += arrow.width;
19386 let type = EditableSyntax.from_json(
19387 json.field_type, position, source);
19388 position += type.width;
19389 return new FieldSpecifier(
19395 get children_keys()
19397 if (FieldSpecifier._children_keys == null)
19398 FieldSpecifier._children_keys = [
19403 return FieldSpecifier._children_keys;
19406 class FieldInitializer extends EditableSyntax
19413 super('field_initializer', {
19418 get name() { return this.children.name; }
19419 get arrow() { return this.children.arrow; }
19420 get value() { return this.children.value; }
19422 return new FieldInitializer(
19428 return new FieldInitializer(
19434 return new FieldInitializer(
19439 rewrite(rewriter, parents)
19441 if (parents == undefined)
19443 let new_parents = parents.slice();
19444 new_parents.push(this);
19445 var name = this.name.rewrite(rewriter, new_parents);
19446 var arrow = this.arrow.rewrite(rewriter, new_parents);
19447 var value = this.value.rewrite(rewriter, new_parents);
19449 name === this.name &&
19450 arrow === this.arrow &&
19451 value === this.value)
19453 return rewriter(this, parents);
19457 return rewriter(new FieldInitializer(
19463 static from_json(json, position, source)
19465 let name = EditableSyntax.from_json(
19466 json.field_initializer_name, position, source);
19467 position += name.width;
19468 let arrow = EditableSyntax.from_json(
19469 json.field_initializer_arrow, position, source);
19470 position += arrow.width;
19471 let value = EditableSyntax.from_json(
19472 json.field_initializer_value, position, source);
19473 position += value.width;
19474 return new FieldInitializer(
19479 get children_keys()
19481 if (FieldInitializer._children_keys == null)
19482 FieldInitializer._children_keys = [
19486 return FieldInitializer._children_keys;
19489 class ShapeTypeSpecifier extends EditableSyntax
19498 super('shape_type_specifier', {
19500 left_paren: left_paren,
19502 ellipsis: ellipsis,
19503 right_paren: right_paren });
19505 get keyword() { return this.children.keyword; }
19506 get left_paren() { return this.children.left_paren; }
19507 get fields() { return this.children.fields; }
19508 get ellipsis() { return this.children.ellipsis; }
19509 get right_paren() { return this.children.right_paren; }
19510 with_keyword(keyword){
19511 return new ShapeTypeSpecifier(
19518 with_left_paren(left_paren){
19519 return new ShapeTypeSpecifier(
19526 with_fields(fields){
19527 return new ShapeTypeSpecifier(
19534 with_ellipsis(ellipsis){
19535 return new ShapeTypeSpecifier(
19542 with_right_paren(right_paren){
19543 return new ShapeTypeSpecifier(
19550 rewrite(rewriter, parents)
19552 if (parents == undefined)
19554 let new_parents = parents.slice();
19555 new_parents.push(this);
19556 var keyword = this.keyword.rewrite(rewriter, new_parents);
19557 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
19558 var fields = this.fields.rewrite(rewriter, new_parents);
19559 var ellipsis = this.ellipsis.rewrite(rewriter, new_parents);
19560 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
19562 keyword === this.keyword &&
19563 left_paren === this.left_paren &&
19564 fields === this.fields &&
19565 ellipsis === this.ellipsis &&
19566 right_paren === this.right_paren)
19568 return rewriter(this, parents);
19572 return rewriter(new ShapeTypeSpecifier(
19577 right_paren), parents);
19580 static from_json(json, position, source)
19582 let keyword = EditableSyntax.from_json(
19583 json.shape_type_keyword, position, source);
19584 position += keyword.width;
19585 let left_paren = EditableSyntax.from_json(
19586 json.shape_type_left_paren, position, source);
19587 position += left_paren.width;
19588 let fields = EditableSyntax.from_json(
19589 json.shape_type_fields, position, source);
19590 position += fields.width;
19591 let ellipsis = EditableSyntax.from_json(
19592 json.shape_type_ellipsis, position, source);
19593 position += ellipsis.width;
19594 let right_paren = EditableSyntax.from_json(
19595 json.shape_type_right_paren, position, source);
19596 position += right_paren.width;
19597 return new ShapeTypeSpecifier(
19604 get children_keys()
19606 if (ShapeTypeSpecifier._children_keys == null)
19607 ShapeTypeSpecifier._children_keys = [
19613 return ShapeTypeSpecifier._children_keys;
19616 class ShapeExpression extends EditableSyntax
19624 super('shape_expression', {
19626 left_paren: left_paren,
19628 right_paren: right_paren });
19630 get keyword() { return this.children.keyword; }
19631 get left_paren() { return this.children.left_paren; }
19632 get fields() { return this.children.fields; }
19633 get right_paren() { return this.children.right_paren; }
19634 with_keyword(keyword){
19635 return new ShapeExpression(
19641 with_left_paren(left_paren){
19642 return new ShapeExpression(
19648 with_fields(fields){
19649 return new ShapeExpression(
19655 with_right_paren(right_paren){
19656 return new ShapeExpression(
19662 rewrite(rewriter, parents)
19664 if (parents == undefined)
19666 let new_parents = parents.slice();
19667 new_parents.push(this);
19668 var keyword = this.keyword.rewrite(rewriter, new_parents);
19669 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
19670 var fields = this.fields.rewrite(rewriter, new_parents);
19671 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
19673 keyword === this.keyword &&
19674 left_paren === this.left_paren &&
19675 fields === this.fields &&
19676 right_paren === this.right_paren)
19678 return rewriter(this, parents);
19682 return rewriter(new ShapeExpression(
19686 right_paren), parents);
19689 static from_json(json, position, source)
19691 let keyword = EditableSyntax.from_json(
19692 json.shape_expression_keyword, position, source);
19693 position += keyword.width;
19694 let left_paren = EditableSyntax.from_json(
19695 json.shape_expression_left_paren, position, source);
19696 position += left_paren.width;
19697 let fields = EditableSyntax.from_json(
19698 json.shape_expression_fields, position, source);
19699 position += fields.width;
19700 let right_paren = EditableSyntax.from_json(
19701 json.shape_expression_right_paren, position, source);
19702 position += right_paren.width;
19703 return new ShapeExpression(
19709 get children_keys()
19711 if (ShapeExpression._children_keys == null)
19712 ShapeExpression._children_keys = [
19717 return ShapeExpression._children_keys;
19720 class TupleExpression extends EditableSyntax
19728 super('tuple_expression', {
19730 left_paren: left_paren,
19732 right_paren: right_paren });
19734 get keyword() { return this.children.keyword; }
19735 get left_paren() { return this.children.left_paren; }
19736 get items() { return this.children.items; }
19737 get right_paren() { return this.children.right_paren; }
19738 with_keyword(keyword){
19739 return new TupleExpression(
19745 with_left_paren(left_paren){
19746 return new TupleExpression(
19753 return new TupleExpression(
19759 with_right_paren(right_paren){
19760 return new TupleExpression(
19766 rewrite(rewriter, parents)
19768 if (parents == undefined)
19770 let new_parents = parents.slice();
19771 new_parents.push(this);
19772 var keyword = this.keyword.rewrite(rewriter, new_parents);
19773 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
19774 var items = this.items.rewrite(rewriter, new_parents);
19775 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
19777 keyword === this.keyword &&
19778 left_paren === this.left_paren &&
19779 items === this.items &&
19780 right_paren === this.right_paren)
19782 return rewriter(this, parents);
19786 return rewriter(new TupleExpression(
19790 right_paren), parents);
19793 static from_json(json, position, source)
19795 let keyword = EditableSyntax.from_json(
19796 json.tuple_expression_keyword, position, source);
19797 position += keyword.width;
19798 let left_paren = EditableSyntax.from_json(
19799 json.tuple_expression_left_paren, position, source);
19800 position += left_paren.width;
19801 let items = EditableSyntax.from_json(
19802 json.tuple_expression_items, position, source);
19803 position += items.width;
19804 let right_paren = EditableSyntax.from_json(
19805 json.tuple_expression_right_paren, position, source);
19806 position += right_paren.width;
19807 return new TupleExpression(
19813 get children_keys()
19815 if (TupleExpression._children_keys == null)
19816 TupleExpression._children_keys = [
19821 return TupleExpression._children_keys;
19824 class GenericTypeSpecifier extends EditableSyntax
19830 super('generic_type_specifier', {
19831 class_type: class_type,
19832 argument_list: argument_list });
19834 get class_type() { return this.children.class_type; }
19835 get argument_list() { return this.children.argument_list; }
19836 with_class_type(class_type){
19837 return new GenericTypeSpecifier(
19839 this.argument_list);
19841 with_argument_list(argument_list){
19842 return new GenericTypeSpecifier(
19846 rewrite(rewriter, parents)
19848 if (parents == undefined)
19850 let new_parents = parents.slice();
19851 new_parents.push(this);
19852 var class_type = this.class_type.rewrite(rewriter, new_parents);
19853 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
19855 class_type === this.class_type &&
19856 argument_list === this.argument_list)
19858 return rewriter(this, parents);
19862 return rewriter(new GenericTypeSpecifier(
19864 argument_list), parents);
19867 static from_json(json, position, source)
19869 let class_type = EditableSyntax.from_json(
19870 json.generic_class_type, position, source);
19871 position += class_type.width;
19872 let argument_list = EditableSyntax.from_json(
19873 json.generic_argument_list, position, source);
19874 position += argument_list.width;
19875 return new GenericTypeSpecifier(
19879 get children_keys()
19881 if (GenericTypeSpecifier._children_keys == null)
19882 GenericTypeSpecifier._children_keys = [
19885 return GenericTypeSpecifier._children_keys;
19888 class NullableTypeSpecifier extends EditableSyntax
19894 super('nullable_type_specifier', {
19895 question: question,
19898 get question() { return this.children.question; }
19899 get type() { return this.children.type; }
19900 with_question(question){
19901 return new NullableTypeSpecifier(
19906 return new NullableTypeSpecifier(
19910 rewrite(rewriter, parents)
19912 if (parents == undefined)
19914 let new_parents = parents.slice();
19915 new_parents.push(this);
19916 var question = this.question.rewrite(rewriter, new_parents);
19917 var type = this.type.rewrite(rewriter, new_parents);
19919 question === this.question &&
19920 type === this.type)
19922 return rewriter(this, parents);
19926 return rewriter(new NullableTypeSpecifier(
19931 static from_json(json, position, source)
19933 let question = EditableSyntax.from_json(
19934 json.nullable_question, position, source);
19935 position += question.width;
19936 let type = EditableSyntax.from_json(
19937 json.nullable_type, position, source);
19938 position += type.width;
19939 return new NullableTypeSpecifier(
19943 get children_keys()
19945 if (NullableTypeSpecifier._children_keys == null)
19946 NullableTypeSpecifier._children_keys = [
19949 return NullableTypeSpecifier._children_keys;
19952 class SoftTypeSpecifier extends EditableSyntax
19958 super('soft_type_specifier', {
19962 get at() { return this.children.at; }
19963 get type() { return this.children.type; }
19965 return new SoftTypeSpecifier(
19970 return new SoftTypeSpecifier(
19974 rewrite(rewriter, parents)
19976 if (parents == undefined)
19978 let new_parents = parents.slice();
19979 new_parents.push(this);
19980 var at = this.at.rewrite(rewriter, new_parents);
19981 var type = this.type.rewrite(rewriter, new_parents);
19984 type === this.type)
19986 return rewriter(this, parents);
19990 return rewriter(new SoftTypeSpecifier(
19995 static from_json(json, position, source)
19997 let at = EditableSyntax.from_json(
19998 json.soft_at, position, source);
19999 position += at.width;
20000 let type = EditableSyntax.from_json(
20001 json.soft_type, position, source);
20002 position += type.width;
20003 return new SoftTypeSpecifier(
20007 get children_keys()
20009 if (SoftTypeSpecifier._children_keys == null)
20010 SoftTypeSpecifier._children_keys = [
20013 return SoftTypeSpecifier._children_keys;
20016 class TypeArguments extends EditableSyntax
20023 super('type_arguments', {
20024 left_angle: left_angle,
20026 right_angle: right_angle });
20028 get left_angle() { return this.children.left_angle; }
20029 get types() { return this.children.types; }
20030 get right_angle() { return this.children.right_angle; }
20031 with_left_angle(left_angle){
20032 return new TypeArguments(
20038 return new TypeArguments(
20043 with_right_angle(right_angle){
20044 return new TypeArguments(
20049 rewrite(rewriter, parents)
20051 if (parents == undefined)
20053 let new_parents = parents.slice();
20054 new_parents.push(this);
20055 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
20056 var types = this.types.rewrite(rewriter, new_parents);
20057 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
20059 left_angle === this.left_angle &&
20060 types === this.types &&
20061 right_angle === this.right_angle)
20063 return rewriter(this, parents);
20067 return rewriter(new TypeArguments(
20070 right_angle), parents);
20073 static from_json(json, position, source)
20075 let left_angle = EditableSyntax.from_json(
20076 json.type_arguments_left_angle, position, source);
20077 position += left_angle.width;
20078 let types = EditableSyntax.from_json(
20079 json.type_arguments_types, position, source);
20080 position += types.width;
20081 let right_angle = EditableSyntax.from_json(
20082 json.type_arguments_right_angle, position, source);
20083 position += right_angle.width;
20084 return new TypeArguments(
20089 get children_keys()
20091 if (TypeArguments._children_keys == null)
20092 TypeArguments._children_keys = [
20096 return TypeArguments._children_keys;
20099 class TypeParameters extends EditableSyntax
20106 super('type_parameters', {
20107 left_angle: left_angle,
20108 parameters: parameters,
20109 right_angle: right_angle });
20111 get left_angle() { return this.children.left_angle; }
20112 get parameters() { return this.children.parameters; }
20113 get right_angle() { return this.children.right_angle; }
20114 with_left_angle(left_angle){
20115 return new TypeParameters(
20120 with_parameters(parameters){
20121 return new TypeParameters(
20126 with_right_angle(right_angle){
20127 return new TypeParameters(
20132 rewrite(rewriter, parents)
20134 if (parents == undefined)
20136 let new_parents = parents.slice();
20137 new_parents.push(this);
20138 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
20139 var parameters = this.parameters.rewrite(rewriter, new_parents);
20140 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
20142 left_angle === this.left_angle &&
20143 parameters === this.parameters &&
20144 right_angle === this.right_angle)
20146 return rewriter(this, parents);
20150 return rewriter(new TypeParameters(
20153 right_angle), parents);
20156 static from_json(json, position, source)
20158 let left_angle = EditableSyntax.from_json(
20159 json.type_parameters_left_angle, position, source);
20160 position += left_angle.width;
20161 let parameters = EditableSyntax.from_json(
20162 json.type_parameters_parameters, position, source);
20163 position += parameters.width;
20164 let right_angle = EditableSyntax.from_json(
20165 json.type_parameters_right_angle, position, source);
20166 position += right_angle.width;
20167 return new TypeParameters(
20172 get children_keys()
20174 if (TypeParameters._children_keys == null)
20175 TypeParameters._children_keys = [
20179 return TypeParameters._children_keys;
20182 class TupleTypeSpecifier extends EditableSyntax
20189 super('tuple_type_specifier', {
20190 left_paren: left_paren,
20192 right_paren: right_paren });
20194 get left_paren() { return this.children.left_paren; }
20195 get types() { return this.children.types; }
20196 get right_paren() { return this.children.right_paren; }
20197 with_left_paren(left_paren){
20198 return new TupleTypeSpecifier(
20204 return new TupleTypeSpecifier(
20209 with_right_paren(right_paren){
20210 return new TupleTypeSpecifier(
20215 rewrite(rewriter, parents)
20217 if (parents == undefined)
20219 let new_parents = parents.slice();
20220 new_parents.push(this);
20221 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
20222 var types = this.types.rewrite(rewriter, new_parents);
20223 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
20225 left_paren === this.left_paren &&
20226 types === this.types &&
20227 right_paren === this.right_paren)
20229 return rewriter(this, parents);
20233 return rewriter(new TupleTypeSpecifier(
20236 right_paren), parents);
20239 static from_json(json, position, source)
20241 let left_paren = EditableSyntax.from_json(
20242 json.tuple_left_paren, position, source);
20243 position += left_paren.width;
20244 let types = EditableSyntax.from_json(
20245 json.tuple_types, position, source);
20246 position += types.width;
20247 let right_paren = EditableSyntax.from_json(
20248 json.tuple_right_paren, position, source);
20249 position += right_paren.width;
20250 return new TupleTypeSpecifier(
20255 get children_keys()
20257 if (TupleTypeSpecifier._children_keys == null)
20258 TupleTypeSpecifier._children_keys = [
20262 return TupleTypeSpecifier._children_keys;
20265 class ErrorSyntax extends EditableSyntax
20273 get error() { return this.children.error; }
20275 return new ErrorSyntax(
20278 rewrite(rewriter, parents)
20280 if (parents == undefined)
20282 let new_parents = parents.slice();
20283 new_parents.push(this);
20284 var error = this.error.rewrite(rewriter, new_parents);
20286 error === this.error)
20288 return rewriter(this, parents);
20292 return rewriter(new ErrorSyntax(
20296 static from_json(json, position, source)
20298 let error = EditableSyntax.from_json(
20299 json.error_error, position, source);
20300 position += error.width;
20301 return new ErrorSyntax(
20304 get children_keys()
20306 if (ErrorSyntax._children_keys == null)
20307 ErrorSyntax._children_keys = [
20309 return ErrorSyntax._children_keys;
20312 class ListItem extends EditableSyntax
20318 super('list_item', {
20320 separator: separator });
20322 get item() { return this.children.item; }
20323 get separator() { return this.children.separator; }
20325 return new ListItem(
20329 with_separator(separator){
20330 return new ListItem(
20334 rewrite(rewriter, parents)
20336 if (parents == undefined)
20338 let new_parents = parents.slice();
20339 new_parents.push(this);
20340 var item = this.item.rewrite(rewriter, new_parents);
20341 var separator = this.separator.rewrite(rewriter, new_parents);
20343 item === this.item &&
20344 separator === this.separator)
20346 return rewriter(this, parents);
20350 return rewriter(new ListItem(
20352 separator), parents);
20355 static from_json(json, position, source)
20357 let item = EditableSyntax.from_json(
20358 json.list_item, position, source);
20359 position += item.width;
20360 let separator = EditableSyntax.from_json(
20361 json.list_separator, position, source);
20362 position += separator.width;
20363 return new ListItem(
20367 get children_keys()
20369 if (ListItem._children_keys == null)
20370 ListItem._children_keys = [
20373 return ListItem._children_keys;
20378 function from_json(json)
20380 return EditableSyntax.from_json(json.parse_tree, 0, json.program_text);
20383 exports.from_json = from_json;
20384 exports.EditableSyntax = EditableSyntax;
20385 exports.EditableList = EditableList;
20386 exports.EditableToken = EditableToken;
20387 exports.EndOfFileToken = EndOfFileToken;
20389 exports.AbstractToken = AbstractToken;
20390 exports.AndToken = AndToken;
20391 exports.ArrayToken = ArrayToken;
20392 exports.ArraykeyToken = ArraykeyToken;
20393 exports.AsToken = AsToken;
20394 exports.AsyncToken = AsyncToken;
20395 exports.AttributeToken = AttributeToken;
20396 exports.AwaitToken = AwaitToken;
20397 exports.BackslashToken = BackslashToken;
20398 exports.BoolToken = BoolToken;
20399 exports.BreakToken = BreakToken;
20400 exports.CaseToken = CaseToken;
20401 exports.CatchToken = CatchToken;
20402 exports.CategoryToken = CategoryToken;
20403 exports.ChildrenToken = ChildrenToken;
20404 exports.ClassToken = ClassToken;
20405 exports.ClassnameToken = ClassnameToken;
20406 exports.CloneToken = CloneToken;
20407 exports.ConstToken = ConstToken;
20408 exports.ConstructToken = ConstructToken;
20409 exports.ContinueToken = ContinueToken;
20410 exports.CoroutineToken = CoroutineToken;
20411 exports.DarrayToken = DarrayToken;
20412 exports.DeclareToken = DeclareToken;
20413 exports.DefaultToken = DefaultToken;
20414 exports.DefineToken = DefineToken;
20415 exports.DestructToken = DestructToken;
20416 exports.DictToken = DictToken;
20417 exports.DoToken = DoToken;
20418 exports.DoubleToken = DoubleToken;
20419 exports.EchoToken = EchoToken;
20420 exports.ElseToken = ElseToken;
20421 exports.ElseifToken = ElseifToken;
20422 exports.EmptyToken = EmptyToken;
20423 exports.EndforToken = EndforToken;
20424 exports.EndforeachToken = EndforeachToken;
20425 exports.EnddeclareToken = EnddeclareToken;
20426 exports.EndifToken = EndifToken;
20427 exports.EndswitchToken = EndswitchToken;
20428 exports.EndwhileToken = EndwhileToken;
20429 exports.EnumToken = EnumToken;
20430 exports.EvalToken = EvalToken;
20431 exports.ExtendsToken = ExtendsToken;
20432 exports.FallthroughToken = FallthroughToken;
20433 exports.FloatToken = FloatToken;
20434 exports.FinalToken = FinalToken;
20435 exports.FinallyToken = FinallyToken;
20436 exports.ForToken = ForToken;
20437 exports.ForeachToken = ForeachToken;
20438 exports.FromToken = FromToken;
20439 exports.FunctionToken = FunctionToken;
20440 exports.GlobalToken = GlobalToken;
20441 exports.GotoToken = GotoToken;
20442 exports.IfToken = IfToken;
20443 exports.ImplementsToken = ImplementsToken;
20444 exports.IncludeToken = IncludeToken;
20445 exports.Include_onceToken = Include_onceToken;
20446 exports.InoutToken = InoutToken;
20447 exports.InstanceofToken = InstanceofToken;
20448 exports.InsteadofToken = InsteadofToken;
20449 exports.IntToken = IntToken;
20450 exports.InterfaceToken = InterfaceToken;
20451 exports.IsToken = IsToken;
20452 exports.IssetToken = IssetToken;
20453 exports.KeysetToken = KeysetToken;
20454 exports.ListToken = ListToken;
20455 exports.MixedToken = MixedToken;
20456 exports.NamespaceToken = NamespaceToken;
20457 exports.NewToken = NewToken;
20458 exports.NewtypeToken = NewtypeToken;
20459 exports.NoreturnToken = NoreturnToken;
20460 exports.NumToken = NumToken;
20461 exports.ObjectToken = ObjectToken;
20462 exports.OrToken = OrToken;
20463 exports.ParentToken = ParentToken;
20464 exports.PrintToken = PrintToken;
20465 exports.PrivateToken = PrivateToken;
20466 exports.ProtectedToken = ProtectedToken;
20467 exports.PublicToken = PublicToken;
20468 exports.RequireToken = RequireToken;
20469 exports.Require_onceToken = Require_onceToken;
20470 exports.RequiredToken = RequiredToken;
20471 exports.ResourceToken = ResourceToken;
20472 exports.ReturnToken = ReturnToken;
20473 exports.SelfToken = SelfToken;
20474 exports.ShapeToken = ShapeToken;
20475 exports.StaticToken = StaticToken;
20476 exports.StringToken = StringToken;
20477 exports.SuperToken = SuperToken;
20478 exports.SuspendToken = SuspendToken;
20479 exports.SwitchToken = SwitchToken;
20480 exports.ThisToken = ThisToken;
20481 exports.ThrowToken = ThrowToken;
20482 exports.TraitToken = TraitToken;
20483 exports.TryToken = TryToken;
20484 exports.TupleToken = TupleToken;
20485 exports.TypeToken = TypeToken;
20486 exports.UnsetToken = UnsetToken;
20487 exports.UseToken = UseToken;
20488 exports.UsingToken = UsingToken;
20489 exports.VarToken = VarToken;
20490 exports.VarrayToken = VarrayToken;
20491 exports.VecToken = VecToken;
20492 exports.VoidToken = VoidToken;
20493 exports.WhereToken = WhereToken;
20494 exports.WhileToken = WhileToken;
20495 exports.XorToken = XorToken;
20496 exports.YieldToken = YieldToken;
20497 exports.LeftBracketToken = LeftBracketToken;
20498 exports.RightBracketToken = RightBracketToken;
20499 exports.LeftParenToken = LeftParenToken;
20500 exports.RightParenToken = RightParenToken;
20501 exports.LeftBraceToken = LeftBraceToken;
20502 exports.RightBraceToken = RightBraceToken;
20503 exports.DotToken = DotToken;
20504 exports.MinusGreaterThanToken = MinusGreaterThanToken;
20505 exports.PlusPlusToken = PlusPlusToken;
20506 exports.MinusMinusToken = MinusMinusToken;
20507 exports.StarStarToken = StarStarToken;
20508 exports.StarToken = StarToken;
20509 exports.PlusToken = PlusToken;
20510 exports.MinusToken = MinusToken;
20511 exports.TildeToken = TildeToken;
20512 exports.ExclamationToken = ExclamationToken;
20513 exports.DollarToken = DollarToken;
20514 exports.SlashToken = SlashToken;
20515 exports.PercentToken = PercentToken;
20516 exports.LessThanGreaterThanToken = LessThanGreaterThanToken;
20517 exports.LessThanEqualGreaterThanToken = LessThanEqualGreaterThanToken;
20518 exports.LessThanLessThanToken = LessThanLessThanToken;
20519 exports.GreaterThanGreaterThanToken = GreaterThanGreaterThanToken;
20520 exports.LessThanToken = LessThanToken;
20521 exports.GreaterThanToken = GreaterThanToken;
20522 exports.LessThanEqualToken = LessThanEqualToken;
20523 exports.GreaterThanEqualToken = GreaterThanEqualToken;
20524 exports.EqualEqualToken = EqualEqualToken;
20525 exports.EqualEqualEqualToken = EqualEqualEqualToken;
20526 exports.ExclamationEqualToken = ExclamationEqualToken;
20527 exports.ExclamationEqualEqualToken = ExclamationEqualEqualToken;
20528 exports.CaratToken = CaratToken;
20529 exports.BarToken = BarToken;
20530 exports.AmpersandToken = AmpersandToken;
20531 exports.AmpersandAmpersandToken = AmpersandAmpersandToken;
20532 exports.BarBarToken = BarBarToken;
20533 exports.QuestionToken = QuestionToken;
20534 exports.QuestionColonToken = QuestionColonToken;
20535 exports.QuestionQuestionToken = QuestionQuestionToken;
20536 exports.ColonToken = ColonToken;
20537 exports.SemicolonToken = SemicolonToken;
20538 exports.EqualToken = EqualToken;
20539 exports.StarStarEqualToken = StarStarEqualToken;
20540 exports.StarEqualToken = StarEqualToken;
20541 exports.SlashEqualToken = SlashEqualToken;
20542 exports.PercentEqualToken = PercentEqualToken;
20543 exports.PlusEqualToken = PlusEqualToken;
20544 exports.MinusEqualToken = MinusEqualToken;
20545 exports.DotEqualToken = DotEqualToken;
20546 exports.LessThanLessThanEqualToken = LessThanLessThanEqualToken;
20547 exports.GreaterThanGreaterThanEqualToken = GreaterThanGreaterThanEqualToken;
20548 exports.AmpersandEqualToken = AmpersandEqualToken;
20549 exports.CaratEqualToken = CaratEqualToken;
20550 exports.BarEqualToken = BarEqualToken;
20551 exports.CommaToken = CommaToken;
20552 exports.AtToken = AtToken;
20553 exports.ColonColonToken = ColonColonToken;
20554 exports.EqualGreaterThanToken = EqualGreaterThanToken;
20555 exports.EqualEqualGreaterThanToken = EqualEqualGreaterThanToken;
20556 exports.QuestionMinusGreaterThanToken = QuestionMinusGreaterThanToken;
20557 exports.DotDotDotToken = DotDotDotToken;
20558 exports.DollarDollarToken = DollarDollarToken;
20559 exports.BarGreaterThanToken = BarGreaterThanToken;
20560 exports.NullLiteralToken = NullLiteralToken;
20561 exports.SlashGreaterThanToken = SlashGreaterThanToken;
20562 exports.LessThanSlashToken = LessThanSlashToken;
20563 exports.LessThanQuestionToken = LessThanQuestionToken;
20564 exports.QuestionGreaterThanToken = QuestionGreaterThanToken;
20565 exports.HaltCompilerToken = HaltCompilerToken;
20567 exports.ErrorTokenToken = ErrorTokenToken;
20568 exports.NameToken = NameToken;
20569 exports.VariableToken = VariableToken;
20570 exports.DecimalLiteralToken = DecimalLiteralToken;
20571 exports.OctalLiteralToken = OctalLiteralToken;
20572 exports.HexadecimalLiteralToken = HexadecimalLiteralToken;
20573 exports.BinaryLiteralToken = BinaryLiteralToken;
20574 exports.FloatingLiteralToken = FloatingLiteralToken;
20575 exports.ExecutionStringLiteralToken = ExecutionStringLiteralToken;
20576 exports.ExecutionStringLiteralHeadToken = ExecutionStringLiteralHeadToken;
20577 exports.ExecutionStringLiteralTailToken = ExecutionStringLiteralTailToken;
20578 exports.SingleQuotedStringLiteralToken = SingleQuotedStringLiteralToken;
20579 exports.DoubleQuotedStringLiteralToken = DoubleQuotedStringLiteralToken;
20580 exports.DoubleQuotedStringLiteralHeadToken = DoubleQuotedStringLiteralHeadToken;
20581 exports.StringLiteralBodyToken = StringLiteralBodyToken;
20582 exports.DoubleQuotedStringLiteralTailToken = DoubleQuotedStringLiteralTailToken;
20583 exports.HeredocStringLiteralToken = HeredocStringLiteralToken;
20584 exports.HeredocStringLiteralHeadToken = HeredocStringLiteralHeadToken;
20585 exports.HeredocStringLiteralTailToken = HeredocStringLiteralTailToken;
20586 exports.NowdocStringLiteralToken = NowdocStringLiteralToken;
20587 exports.BooleanLiteralToken = BooleanLiteralToken;
20588 exports.XHPCategoryNameToken = XHPCategoryNameToken;
20589 exports.XHPElementNameToken = XHPElementNameToken;
20590 exports.XHPClassNameToken = XHPClassNameToken;
20591 exports.XHPStringLiteralToken = XHPStringLiteralToken;
20592 exports.XHPBodyToken = XHPBodyToken;
20593 exports.XHPCommentToken = XHPCommentToken;
20594 exports.MarkupToken = MarkupToken;
20596 exports.EditableTrivia = EditableTrivia;
20597 exports.WhiteSpace = WhiteSpace;
20598 exports.EndOfLine = EndOfLine;
20599 exports.DelimitedComment = DelimitedComment;
20600 exports.SingleLineComment = SingleLineComment;
20601 exports.Unsafe = Unsafe;
20602 exports.UnsafeExpression = UnsafeExpression;
20603 exports.FixMe = FixMe;
20604 exports.IgnoreError = IgnoreError;
20605 exports.FallThrough = FallThrough;
20606 exports.ExtraTokenError = ExtraTokenError;
20607 exports.AfterHaltCompiler = AfterHaltCompiler;
20609 exports.EndOfFile = EndOfFile;
20610 exports.Script = Script;
20611 exports.QualifiedName = QualifiedName;
20612 exports.SimpleTypeSpecifier = SimpleTypeSpecifier;
20613 exports.LiteralExpression = LiteralExpression;
20614 exports.VariableExpression = VariableExpression;
20615 exports.PipeVariableExpression = PipeVariableExpression;
20616 exports.EnumDeclaration = EnumDeclaration;
20617 exports.Enumerator = Enumerator;
20618 exports.AliasDeclaration = AliasDeclaration;
20619 exports.PropertyDeclaration = PropertyDeclaration;
20620 exports.PropertyDeclarator = PropertyDeclarator;
20621 exports.NamespaceDeclaration = NamespaceDeclaration;
20622 exports.NamespaceBody = NamespaceBody;
20623 exports.NamespaceEmptyBody = NamespaceEmptyBody;
20624 exports.NamespaceUseDeclaration = NamespaceUseDeclaration;
20625 exports.NamespaceGroupUseDeclaration = NamespaceGroupUseDeclaration;
20626 exports.NamespaceUseClause = NamespaceUseClause;
20627 exports.FunctionDeclaration = FunctionDeclaration;
20628 exports.FunctionDeclarationHeader = FunctionDeclarationHeader;
20629 exports.WhereClause = WhereClause;
20630 exports.WhereConstraint = WhereConstraint;
20631 exports.MethodishDeclaration = MethodishDeclaration;
20632 exports.ClassishDeclaration = ClassishDeclaration;
20633 exports.ClassishBody = ClassishBody;
20634 exports.TraitUsePrecedenceItem = TraitUsePrecedenceItem;
20635 exports.TraitUseAliasItem = TraitUseAliasItem;
20636 exports.TraitUseConflictResolution = TraitUseConflictResolution;
20637 exports.TraitUse = TraitUse;
20638 exports.RequireClause = RequireClause;
20639 exports.ConstDeclaration = ConstDeclaration;
20640 exports.ConstantDeclarator = ConstantDeclarator;
20641 exports.TypeConstDeclaration = TypeConstDeclaration;
20642 exports.DecoratedExpression = DecoratedExpression;
20643 exports.ParameterDeclaration = ParameterDeclaration;
20644 exports.VariadicParameter = VariadicParameter;
20645 exports.AttributeSpecification = AttributeSpecification;
20646 exports.Attribute = Attribute;
20647 exports.InclusionExpression = InclusionExpression;
20648 exports.InclusionDirective = InclusionDirective;
20649 exports.CompoundStatement = CompoundStatement;
20650 exports.AlternateLoopStatement = AlternateLoopStatement;
20651 exports.ExpressionStatement = ExpressionStatement;
20652 exports.MarkupSection = MarkupSection;
20653 exports.MarkupSuffix = MarkupSuffix;
20654 exports.UnsetStatement = UnsetStatement;
20655 exports.UsingStatementBlockScoped = UsingStatementBlockScoped;
20656 exports.UsingStatementFunctionScoped = UsingStatementFunctionScoped;
20657 exports.DeclareDirectiveStatement = DeclareDirectiveStatement;
20658 exports.DeclareBlockStatement = DeclareBlockStatement;
20659 exports.WhileStatement = WhileStatement;
20660 exports.IfStatement = IfStatement;
20661 exports.ElseifClause = ElseifClause;
20662 exports.ElseClause = ElseClause;
20663 exports.IfEndIfStatement = IfEndIfStatement;
20664 exports.ElseifColonClause = ElseifColonClause;
20665 exports.ElseColonClause = ElseColonClause;
20666 exports.TryStatement = TryStatement;
20667 exports.CatchClause = CatchClause;
20668 exports.FinallyClause = FinallyClause;
20669 exports.DoStatement = DoStatement;
20670 exports.ForStatement = ForStatement;
20671 exports.ForeachStatement = ForeachStatement;
20672 exports.SwitchStatement = SwitchStatement;
20673 exports.AlternateSwitchStatement = AlternateSwitchStatement;
20674 exports.SwitchSection = SwitchSection;
20675 exports.SwitchFallthrough = SwitchFallthrough;
20676 exports.CaseLabel = CaseLabel;
20677 exports.DefaultLabel = DefaultLabel;
20678 exports.ReturnStatement = ReturnStatement;
20679 exports.GotoLabel = GotoLabel;
20680 exports.GotoStatement = GotoStatement;
20681 exports.ThrowStatement = ThrowStatement;
20682 exports.BreakStatement = BreakStatement;
20683 exports.ContinueStatement = ContinueStatement;
20684 exports.FunctionStaticStatement = FunctionStaticStatement;
20685 exports.StaticDeclarator = StaticDeclarator;
20686 exports.EchoStatement = EchoStatement;
20687 exports.GlobalStatement = GlobalStatement;
20688 exports.SimpleInitializer = SimpleInitializer;
20689 exports.AnonymousClass = AnonymousClass;
20690 exports.AnonymousFunction = AnonymousFunction;
20691 exports.Php7AnonymousFunction = Php7AnonymousFunction;
20692 exports.AnonymousFunctionUseClause = AnonymousFunctionUseClause;
20693 exports.LambdaExpression = LambdaExpression;
20694 exports.LambdaSignature = LambdaSignature;
20695 exports.CastExpression = CastExpression;
20696 exports.ScopeResolutionExpression = ScopeResolutionExpression;
20697 exports.MemberSelectionExpression = MemberSelectionExpression;
20698 exports.SafeMemberSelectionExpression = SafeMemberSelectionExpression;
20699 exports.EmbeddedMemberSelectionExpression = EmbeddedMemberSelectionExpression;
20700 exports.YieldExpression = YieldExpression;
20701 exports.YieldFromExpression = YieldFromExpression;
20702 exports.PrefixUnaryExpression = PrefixUnaryExpression;
20703 exports.PostfixUnaryExpression = PostfixUnaryExpression;
20704 exports.BinaryExpression = BinaryExpression;
20705 exports.InstanceofExpression = InstanceofExpression;
20706 exports.IsExpression = IsExpression;
20707 exports.ConditionalExpression = ConditionalExpression;
20708 exports.EvalExpression = EvalExpression;
20709 exports.EmptyExpression = EmptyExpression;
20710 exports.DefineExpression = DefineExpression;
20711 exports.HaltCompilerExpression = HaltCompilerExpression;
20712 exports.IssetExpression = IssetExpression;
20713 exports.FunctionCallExpression = FunctionCallExpression;
20714 exports.FunctionCallWithTypeArgumentsExpression = FunctionCallWithTypeArgumentsExpression;
20715 exports.ParenthesizedExpression = ParenthesizedExpression;
20716 exports.BracedExpression = BracedExpression;
20717 exports.EmbeddedBracedExpression = EmbeddedBracedExpression;
20718 exports.ListExpression = ListExpression;
20719 exports.CollectionLiteralExpression = CollectionLiteralExpression;
20720 exports.ObjectCreationExpression = ObjectCreationExpression;
20721 exports.ConstructorCall = ConstructorCall;
20722 exports.ArrayCreationExpression = ArrayCreationExpression;
20723 exports.ArrayIntrinsicExpression = ArrayIntrinsicExpression;
20724 exports.DarrayIntrinsicExpression = DarrayIntrinsicExpression;
20725 exports.DictionaryIntrinsicExpression = DictionaryIntrinsicExpression;
20726 exports.KeysetIntrinsicExpression = KeysetIntrinsicExpression;
20727 exports.VarrayIntrinsicExpression = VarrayIntrinsicExpression;
20728 exports.VectorIntrinsicExpression = VectorIntrinsicExpression;
20729 exports.ElementInitializer = ElementInitializer;
20730 exports.SubscriptExpression = SubscriptExpression;
20731 exports.EmbeddedSubscriptExpression = EmbeddedSubscriptExpression;
20732 exports.AwaitableCreationExpression = AwaitableCreationExpression;
20733 exports.XHPChildrenDeclaration = XHPChildrenDeclaration;
20734 exports.XHPChildrenParenthesizedList = XHPChildrenParenthesizedList;
20735 exports.XHPCategoryDeclaration = XHPCategoryDeclaration;
20736 exports.XHPEnumType = XHPEnumType;
20737 exports.XHPRequired = XHPRequired;
20738 exports.XHPClassAttributeDeclaration = XHPClassAttributeDeclaration;
20739 exports.XHPClassAttribute = XHPClassAttribute;
20740 exports.XHPSimpleClassAttribute = XHPSimpleClassAttribute;
20741 exports.XHPSimpleAttribute = XHPSimpleAttribute;
20742 exports.XHPSpreadAttribute = XHPSpreadAttribute;
20743 exports.XHPOpen = XHPOpen;
20744 exports.XHPExpression = XHPExpression;
20745 exports.XHPClose = XHPClose;
20746 exports.TypeConstant = TypeConstant;
20747 exports.VectorTypeSpecifier = VectorTypeSpecifier;
20748 exports.KeysetTypeSpecifier = KeysetTypeSpecifier;
20749 exports.TupleTypeExplicitSpecifier = TupleTypeExplicitSpecifier;
20750 exports.VarrayTypeSpecifier = VarrayTypeSpecifier;
20751 exports.VectorArrayTypeSpecifier = VectorArrayTypeSpecifier;
20752 exports.TypeParameter = TypeParameter;
20753 exports.TypeConstraint = TypeConstraint;
20754 exports.DarrayTypeSpecifier = DarrayTypeSpecifier;
20755 exports.MapArrayTypeSpecifier = MapArrayTypeSpecifier;
20756 exports.DictionaryTypeSpecifier = DictionaryTypeSpecifier;
20757 exports.ClosureTypeSpecifier = ClosureTypeSpecifier;
20758 exports.ClosureParameterTypeSpecifier = ClosureParameterTypeSpecifier;
20759 exports.ClassnameTypeSpecifier = ClassnameTypeSpecifier;
20760 exports.FieldSpecifier = FieldSpecifier;
20761 exports.FieldInitializer = FieldInitializer;
20762 exports.ShapeTypeSpecifier = ShapeTypeSpecifier;
20763 exports.ShapeExpression = ShapeExpression;
20764 exports.TupleExpression = TupleExpression;
20765 exports.GenericTypeSpecifier = GenericTypeSpecifier;
20766 exports.NullableTypeSpecifier = NullableTypeSpecifier;
20767 exports.SoftTypeSpecifier = SoftTypeSpecifier;
20768 exports.TypeArguments = TypeArguments;
20769 exports.TypeParameters = TypeParameters;
20770 exports.TupleTypeSpecifier = TupleTypeSpecifier;
20771 exports.ErrorSyntax = ErrorSyntax;
20772 exports.ListItem = ListItem;