2 * Copyright (c) 2016, Facebook, Inc.
5 * This source code is licensed under the MIT license found in the
6 * LICENSE file in the "hack" directory of this source tree. An additional
11 * THIS FILE IS @generated; DO NOT EDIT IT
12 * To regenerate this file, run
14 * buck run //hphp/hack/src:generate_full_fidelity
22 let utils = require('./full_fidelity_utils.js');
23 let array_map_reduce = utils.array_map_reduce;
24 let array_sum = utils.array_sum;
28 constructor(syntax_kind, children)
30 this._syntax_kind = syntax_kind;
31 this._children = children;
33 for(let child in children)
34 width += children[child].width;
35 this._children_width = width;
37 get syntax_kind() { return this._syntax_kind; }
38 get children() { return this._children; }
39 get is_token() { return false; }
40 get is_trivia() { return false; }
41 get is_list() { return false; }
42 get is_missing() { return false; }
44 get width() { return this._children_width; }
49 for(let key of this.children_keys)
50 s += this.children[key].full_text;
54 static from_json(json, position, source)
59 return EditableToken.from_json(json.token, position, source);
61 return EditableList.from_json(json, position, source);
63 return WhiteSpace.from_json(json, position, source);
65 return EndOfLine.from_json(json, position, source);
66 case 'delimited_comment':
67 return DelimitedComment.from_json(json, position, source);
68 case 'single_line_comment':
69 return SingleLineComment.from_json(json, position, source);
71 return Unsafe.from_json(json, position, source);
72 case 'unsafe_expression':
73 return UnsafeExpression.from_json(json, position, source);
75 return FixMe.from_json(json, position, source);
77 return IgnoreError.from_json(json, position, source);
79 return FallThrough.from_json(json, position, source);
80 case 'extra_token_error':
81 return ExtraTokenError.from_json(json, position, source);
82 case 'after_halt_compiler':
83 return AfterHaltCompiler.from_json(json, position, source);
86 return Missing.missing;
88 return EndOfFile.from_json(json, position, source);
90 return Script.from_json(json, position, source);
91 case 'qualified_name':
92 return QualifiedName.from_json(json, position, source);
93 case 'simple_type_specifier':
94 return SimpleTypeSpecifier.from_json(json, position, source);
96 return LiteralExpression.from_json(json, position, source);
97 case 'prefixed_string':
98 return PrefixedStringExpression.from_json(json, position, source);
100 return VariableExpression.from_json(json, position, source);
101 case 'pipe_variable':
102 return PipeVariableExpression.from_json(json, position, source);
103 case 'file_attribute_specification':
104 return FileAttributeSpecification.from_json(json, position, source);
105 case 'enum_declaration':
106 return EnumDeclaration.from_json(json, position, source);
108 return Enumerator.from_json(json, position, source);
109 case 'alias_declaration':
110 return AliasDeclaration.from_json(json, position, source);
111 case 'property_declaration':
112 return PropertyDeclaration.from_json(json, position, source);
113 case 'property_declarator':
114 return PropertyDeclarator.from_json(json, position, source);
115 case 'namespace_declaration':
116 return NamespaceDeclaration.from_json(json, position, source);
117 case 'namespace_body':
118 return NamespaceBody.from_json(json, position, source);
119 case 'namespace_empty_body':
120 return NamespaceEmptyBody.from_json(json, position, source);
121 case 'namespace_use_declaration':
122 return NamespaceUseDeclaration.from_json(json, position, source);
123 case 'namespace_group_use_declaration':
124 return NamespaceGroupUseDeclaration.from_json(json, position, source);
125 case 'namespace_use_clause':
126 return NamespaceUseClause.from_json(json, position, source);
127 case 'function_declaration':
128 return FunctionDeclaration.from_json(json, position, source);
129 case 'function_declaration_header':
130 return FunctionDeclarationHeader.from_json(json, position, source);
132 return WhereClause.from_json(json, position, source);
133 case 'where_constraint':
134 return WhereConstraint.from_json(json, position, source);
135 case 'methodish_declaration':
136 return MethodishDeclaration.from_json(json, position, source);
137 case 'methodish_trait_resolution':
138 return MethodishTraitResolution.from_json(json, position, source);
139 case 'classish_declaration':
140 return ClassishDeclaration.from_json(json, position, source);
141 case 'classish_body':
142 return ClassishBody.from_json(json, position, source);
143 case 'trait_use_precedence_item':
144 return TraitUsePrecedenceItem.from_json(json, position, source);
145 case 'trait_use_alias_item':
146 return TraitUseAliasItem.from_json(json, position, source);
147 case 'trait_use_conflict_resolution':
148 return TraitUseConflictResolution.from_json(json, position, source);
150 return TraitUse.from_json(json, position, source);
151 case 'require_clause':
152 return RequireClause.from_json(json, position, source);
153 case 'const_declaration':
154 return ConstDeclaration.from_json(json, position, source);
155 case 'constant_declarator':
156 return ConstantDeclarator.from_json(json, position, source);
157 case 'type_const_declaration':
158 return TypeConstDeclaration.from_json(json, position, source);
159 case 'decorated_expression':
160 return DecoratedExpression.from_json(json, position, source);
161 case 'parameter_declaration':
162 return ParameterDeclaration.from_json(json, position, source);
163 case 'variadic_parameter':
164 return VariadicParameter.from_json(json, position, source);
165 case 'attribute_specification':
166 return AttributeSpecification.from_json(json, position, source);
167 case 'inclusion_expression':
168 return InclusionExpression.from_json(json, position, source);
169 case 'inclusion_directive':
170 return InclusionDirective.from_json(json, position, source);
171 case 'compound_statement':
172 return CompoundStatement.from_json(json, position, source);
173 case 'alternate_loop_statement':
174 return AlternateLoopStatement.from_json(json, position, source);
175 case 'expression_statement':
176 return ExpressionStatement.from_json(json, position, source);
177 case 'markup_section':
178 return MarkupSection.from_json(json, position, source);
179 case 'markup_suffix':
180 return MarkupSuffix.from_json(json, position, source);
181 case 'unset_statement':
182 return UnsetStatement.from_json(json, position, source);
183 case 'let_statement':
184 return LetStatement.from_json(json, position, source);
185 case 'using_statement_block_scoped':
186 return UsingStatementBlockScoped.from_json(json, position, source);
187 case 'using_statement_function_scoped':
188 return UsingStatementFunctionScoped.from_json(json, position, source);
189 case 'declare_directive_statement':
190 return DeclareDirectiveStatement.from_json(json, position, source);
191 case 'declare_block_statement':
192 return DeclareBlockStatement.from_json(json, position, source);
193 case 'while_statement':
194 return WhileStatement.from_json(json, position, source);
196 return IfStatement.from_json(json, position, source);
197 case 'elseif_clause':
198 return ElseifClause.from_json(json, position, source);
200 return ElseClause.from_json(json, position, source);
201 case 'alternate_if_statement':
202 return AlternateIfStatement.from_json(json, position, source);
203 case 'alternate_elseif_clause':
204 return AlternateElseifClause.from_json(json, position, source);
205 case 'alternate_else_clause':
206 return AlternateElseClause.from_json(json, position, source);
207 case 'try_statement':
208 return TryStatement.from_json(json, position, source);
210 return CatchClause.from_json(json, position, source);
211 case 'finally_clause':
212 return FinallyClause.from_json(json, position, source);
214 return DoStatement.from_json(json, position, source);
215 case 'for_statement':
216 return ForStatement.from_json(json, position, source);
217 case 'foreach_statement':
218 return ForeachStatement.from_json(json, position, source);
219 case 'switch_statement':
220 return SwitchStatement.from_json(json, position, source);
221 case 'alternate_switch_statement':
222 return AlternateSwitchStatement.from_json(json, position, source);
223 case 'switch_section':
224 return SwitchSection.from_json(json, position, source);
225 case 'switch_fallthrough':
226 return SwitchFallthrough.from_json(json, position, source);
228 return CaseLabel.from_json(json, position, source);
229 case 'default_label':
230 return DefaultLabel.from_json(json, position, source);
231 case 'return_statement':
232 return ReturnStatement.from_json(json, position, source);
234 return GotoLabel.from_json(json, position, source);
235 case 'goto_statement':
236 return GotoStatement.from_json(json, position, source);
237 case 'throw_statement':
238 return ThrowStatement.from_json(json, position, source);
239 case 'break_statement':
240 return BreakStatement.from_json(json, position, source);
241 case 'continue_statement':
242 return ContinueStatement.from_json(json, position, source);
243 case 'echo_statement':
244 return EchoStatement.from_json(json, position, source);
245 case 'global_statement':
246 return GlobalStatement.from_json(json, position, source);
247 case 'concurrent_statement':
248 return ConcurrentStatement.from_json(json, position, source);
249 case 'simple_initializer':
250 return SimpleInitializer.from_json(json, position, source);
251 case 'anonymous_class':
252 return AnonymousClass.from_json(json, position, source);
253 case 'anonymous_function':
254 return AnonymousFunction.from_json(json, position, source);
255 case 'php7_anonymous_function':
256 return Php7AnonymousFunction.from_json(json, position, source);
257 case 'anonymous_function_use_clause':
258 return AnonymousFunctionUseClause.from_json(json, position, source);
259 case 'lambda_expression':
260 return LambdaExpression.from_json(json, position, source);
261 case 'lambda_signature':
262 return LambdaSignature.from_json(json, position, source);
263 case 'cast_expression':
264 return CastExpression.from_json(json, position, source);
265 case 'scope_resolution_expression':
266 return ScopeResolutionExpression.from_json(json, position, source);
267 case 'member_selection_expression':
268 return MemberSelectionExpression.from_json(json, position, source);
269 case 'safe_member_selection_expression':
270 return SafeMemberSelectionExpression.from_json(json, position, source);
271 case 'embedded_member_selection_expression':
272 return EmbeddedMemberSelectionExpression.from_json(json, position, source);
273 case 'yield_expression':
274 return YieldExpression.from_json(json, position, source);
275 case 'yield_from_expression':
276 return YieldFromExpression.from_json(json, position, source);
277 case 'prefix_unary_expression':
278 return PrefixUnaryExpression.from_json(json, position, source);
279 case 'postfix_unary_expression':
280 return PostfixUnaryExpression.from_json(json, position, source);
281 case 'binary_expression':
282 return BinaryExpression.from_json(json, position, source);
283 case 'instanceof_expression':
284 return InstanceofExpression.from_json(json, position, source);
285 case 'is_expression':
286 return IsExpression.from_json(json, position, source);
287 case 'as_expression':
288 return AsExpression.from_json(json, position, source);
289 case 'nullable_as_expression':
290 return NullableAsExpression.from_json(json, position, source);
291 case 'conditional_expression':
292 return ConditionalExpression.from_json(json, position, source);
293 case 'eval_expression':
294 return EvalExpression.from_json(json, position, source);
295 case 'empty_expression':
296 return EmptyExpression.from_json(json, position, source);
297 case 'define_expression':
298 return DefineExpression.from_json(json, position, source);
299 case 'halt_compiler_expression':
300 return HaltCompilerExpression.from_json(json, position, source);
301 case 'isset_expression':
302 return IssetExpression.from_json(json, position, source);
303 case 'function_call_expression':
304 return FunctionCallExpression.from_json(json, position, source);
305 case 'function_call_with_type_arguments_expression':
306 return FunctionCallWithTypeArgumentsExpression.from_json(json, position, source);
307 case 'parenthesized_expression':
308 return ParenthesizedExpression.from_json(json, position, source);
309 case 'braced_expression':
310 return BracedExpression.from_json(json, position, source);
311 case 'embedded_braced_expression':
312 return EmbeddedBracedExpression.from_json(json, position, source);
313 case 'list_expression':
314 return ListExpression.from_json(json, position, source);
315 case 'collection_literal_expression':
316 return CollectionLiteralExpression.from_json(json, position, source);
317 case 'object_creation_expression':
318 return ObjectCreationExpression.from_json(json, position, source);
319 case 'constructor_call':
320 return ConstructorCall.from_json(json, position, source);
321 case 'array_creation_expression':
322 return ArrayCreationExpression.from_json(json, position, source);
323 case 'array_intrinsic_expression':
324 return ArrayIntrinsicExpression.from_json(json, position, source);
325 case 'darray_intrinsic_expression':
326 return DarrayIntrinsicExpression.from_json(json, position, source);
327 case 'dictionary_intrinsic_expression':
328 return DictionaryIntrinsicExpression.from_json(json, position, source);
329 case 'keyset_intrinsic_expression':
330 return KeysetIntrinsicExpression.from_json(json, position, source);
331 case 'varray_intrinsic_expression':
332 return VarrayIntrinsicExpression.from_json(json, position, source);
333 case 'vector_intrinsic_expression':
334 return VectorIntrinsicExpression.from_json(json, position, source);
335 case 'element_initializer':
336 return ElementInitializer.from_json(json, position, source);
337 case 'subscript_expression':
338 return SubscriptExpression.from_json(json, position, source);
339 case 'embedded_subscript_expression':
340 return EmbeddedSubscriptExpression.from_json(json, position, source);
341 case 'awaitable_creation_expression':
342 return AwaitableCreationExpression.from_json(json, position, source);
343 case 'xhp_children_declaration':
344 return XHPChildrenDeclaration.from_json(json, position, source);
345 case 'xhp_children_parenthesized_list':
346 return XHPChildrenParenthesizedList.from_json(json, position, source);
347 case 'xhp_category_declaration':
348 return XHPCategoryDeclaration.from_json(json, position, source);
349 case 'xhp_enum_type':
350 return XHPEnumType.from_json(json, position, source);
352 return XHPRequired.from_json(json, position, source);
353 case 'xhp_class_attribute_declaration':
354 return XHPClassAttributeDeclaration.from_json(json, position, source);
355 case 'xhp_class_attribute':
356 return XHPClassAttribute.from_json(json, position, source);
357 case 'xhp_simple_class_attribute':
358 return XHPSimpleClassAttribute.from_json(json, position, source);
359 case 'xhp_simple_attribute':
360 return XHPSimpleAttribute.from_json(json, position, source);
361 case 'xhp_spread_attribute':
362 return XHPSpreadAttribute.from_json(json, position, source);
364 return XHPOpen.from_json(json, position, source);
365 case 'xhp_expression':
366 return XHPExpression.from_json(json, position, source);
368 return XHPClose.from_json(json, position, source);
369 case 'type_constant':
370 return TypeConstant.from_json(json, position, source);
371 case 'vector_type_specifier':
372 return VectorTypeSpecifier.from_json(json, position, source);
373 case 'keyset_type_specifier':
374 return KeysetTypeSpecifier.from_json(json, position, source);
375 case 'tuple_type_explicit_specifier':
376 return TupleTypeExplicitSpecifier.from_json(json, position, source);
377 case 'varray_type_specifier':
378 return VarrayTypeSpecifier.from_json(json, position, source);
379 case 'vector_array_type_specifier':
380 return VectorArrayTypeSpecifier.from_json(json, position, source);
381 case 'type_parameter':
382 return TypeParameter.from_json(json, position, source);
383 case 'type_constraint':
384 return TypeConstraint.from_json(json, position, source);
385 case 'darray_type_specifier':
386 return DarrayTypeSpecifier.from_json(json, position, source);
387 case 'map_array_type_specifier':
388 return MapArrayTypeSpecifier.from_json(json, position, source);
389 case 'dictionary_type_specifier':
390 return DictionaryTypeSpecifier.from_json(json, position, source);
391 case 'closure_type_specifier':
392 return ClosureTypeSpecifier.from_json(json, position, source);
393 case 'closure_parameter_type_specifier':
394 return ClosureParameterTypeSpecifier.from_json(json, position, source);
395 case 'classname_type_specifier':
396 return ClassnameTypeSpecifier.from_json(json, position, source);
397 case 'field_specifier':
398 return FieldSpecifier.from_json(json, position, source);
399 case 'field_initializer':
400 return FieldInitializer.from_json(json, position, source);
401 case 'shape_type_specifier':
402 return ShapeTypeSpecifier.from_json(json, position, source);
403 case 'shape_expression':
404 return ShapeExpression.from_json(json, position, source);
405 case 'tuple_expression':
406 return TupleExpression.from_json(json, position, source);
407 case 'generic_type_specifier':
408 return GenericTypeSpecifier.from_json(json, position, source);
409 case 'nullable_type_specifier':
410 return NullableTypeSpecifier.from_json(json, position, source);
411 case 'soft_type_specifier':
412 return SoftTypeSpecifier.from_json(json, position, source);
413 case 'reified_type_argument':
414 return ReifiedTypeArgument.from_json(json, position, source);
415 case 'type_arguments':
416 return TypeArguments.from_json(json, position, source);
417 case 'type_parameters':
418 return TypeParameters.from_json(json, position, source);
419 case 'tuple_type_specifier':
420 return TupleTypeSpecifier.from_json(json, position, source);
422 return ErrorSyntax.from_json(json, position, source);
424 return ListItem.from_json(json, position, source);
426 return PocketAtomExpression.from_json(json, position, source);
427 case 'pocket_identifier':
428 return PocketIdentifierExpression.from_json(json, position, source);
429 case 'pocket_atom_mapping':
430 return PocketAtomMappingDeclaration.from_json(json, position, source);
431 case 'pocket_enum_declaration':
432 return PocketEnumDeclaration.from_json(json, position, source);
433 case 'pocket_field_type_expr_declaration':
434 return PocketFieldTypeExprDeclaration.from_json(json, position, source);
435 case 'pocket_field_type_declaration':
436 return PocketFieldTypeDeclaration.from_json(json, position, source);
437 case 'pocket_mapping_id_declaration':
438 return PocketMappingIdDeclaration.from_json(json, position, source);
439 case 'pocket_mapping_type_declaration':
440 return PocketMappingTypeDeclaration.from_json(json, position, source);
443 throw 'unexpected json kind: ' + json.kind; // TODO: Better exception
447 reduce(reducer, accumulator, parents)
449 if (parents == undefined)
451 let new_parents = parents.slice();
452 new_parents.push(this);
453 for(let key of this.children_keys)
455 accumulator = this.children[key].reduce(
456 reducer, accumulator, new_parents);
458 return reducer(this, accumulator, parents);
461 // Returns all the parents (and the node itself) of the first node
462 // that matches a predicate, or [] if there is no such node.
463 find(predicate, parents)
465 if (parents == undefined)
467 let new_parents = parents.slice();
468 new_parents.push(this);
471 for(let key of this.children_keys)
473 let result = this.children[key].find(predicate, new_parents);
474 if (result.length != 0)
480 // Returns a list of nodes that match a predicate.
483 let reducer = (node, acc, parents) => {
488 return this.reduce(reducer, []);
493 return this.filter((node) => node.syntax_kind == kind);
496 remove_where(predicate)
499 (node, parents) => predicate(node) ? Missing.missing : node);
504 return this.remove_where((node) => node === target);
507 replace(new_node, target)
509 return this.rewrite((node, parents) => node === target ? new_node : node);
512 pre_order(action, parents)
514 if (parents == undefined)
516 action(this, parents);
517 let new_parents = parents.slice();
518 new_parents.push(this);
519 for(let key of this.children_keys)
520 this.children[key].pre_order(action, new_parents);
528 for(let key of this.children_keys)
530 if (!this.children[key].is_missing)
531 return this.children[key].leftmost_token;
536 get rightmost_token()
541 for (let i = this.children_keys.length - 1; i >= 0; i--)
543 if (!this.children[this.children_keys[i]].is_missing)
544 return this.children[key].rightmost_token;
549 insert_before(new_node, target)
551 // Inserting before missing is an error.
552 if (target.is_missing)
553 throw 'Target must not be missing in insert_before.';
555 // Inserting missing is a no-op
556 if (new_node.is_missing)
559 if (new_node.is_trivia && !target.is_trivia)
561 let token = target.is_token ? target : target.leftmost_token;
563 throw 'Unable to find token to insert trivia.';
565 // Inserting trivia before token is inserting to the right end of
566 // the leading trivia.
567 let new_leading = EditableSyntax.concatenate_lists(
568 token.leading, new_node);
569 let new_token = token.with_leading(new_leading);
570 return this.replace(new_token, token);
574 EditableSyntax.concatenate_lists(new_node, target), target);
577 insert_after(new_node, target)
579 // Inserting after missing is an error.
580 if (target.is_missing)
581 throw 'Target must not be missing in insert_after.';
583 // Inserting missing is a no-op
584 if (new_node.is_missing)
587 if (new_node.is_trivia && !target.is_trivia)
589 let token = target.is_token ? target : target.rightmost_token;
591 throw 'Unable to find token to insert trivia.';
593 // Inserting trivia after token is inserting to the left end of
594 // the trailing trivia.
595 let new_trailing = EditableSyntax.concatenate_lists(
596 new_node, token.trailing);
597 let new_token = token.with_trailing(new_trailing);
598 return this.replace(new_token, token);
602 EditableSyntax.concatenate_lists(target, new_node), target);
605 static to_list(syntax_list)
607 if (syntax_list.length == 0)
608 return Missing.missing;
610 return new EditableList(syntax_list);
613 static concatenate_lists(left, right)
617 if (right.is_missing)
619 if (left.is_list && right.is_list)
620 return new EditableList(left.children.concat(right.children));
622 return new EditableList(left.children.splice().push(right));
624 return new EditableList([right].concat(left.children));
625 return new EditableList([left, right]);
629 class EditableList extends EditableSyntax
631 constructor(children)
633 super('list', children);
635 get is_list() { return true; }
637 static from_json(json, position, source)
640 let current_position = position;
641 for(let element of json.elements)
643 let child = EditableSyntax.from_json(element, current_position, source);
644 children.push(child);
645 current_position += child.width;
647 return new EditableList(children);
650 rewrite(rewriter, parents)
653 let new_children = [];
654 let new_parents = parents.slice();
655 new_parents.push(this);
656 for (let key of this.children_keys)
658 let child = this.children[key];
659 let new_child = child.rewrite(rewriter, new_parents);
660 if (new_child != child)
662 if (new_child != null)
664 if (new_child.is_list)
666 for(let n of new_child.children)
667 new_children.push(n);
670 new_children.push(new_child);
676 if (new_children.length === 0)
677 result = Missing.missing;
678 else if (new_children.length === 1)
679 result = new_children[0];
681 result = new EditableList(new_children);
683 return rewriter(result, parents);
687 return Object.keys(this.children);
691 class EditableToken extends EditableSyntax
693 constructor(token_kind, leading, trailing, text)
695 super('token', { leading : leading, trailing : trailing });
696 this._token_kind = token_kind;
700 get token_kind() { return this._token_kind; }
701 get text() { return this._text; }
702 get leading() { return this.children.leading; }
703 get trailing() { return this.children.trailing; }
706 return this.text.length + this.leading.width + this.trailing.width;
708 get is_token() { return true; }
711 return this.leading.full_text + this.text + this.trailing.full_text;
713 with_leading(leading)
715 return EditableToken.factory(
716 this.token_kind, leading, this.trailing, this.text);
718 with_trailing(trailing)
720 return EditableToken.factory(
721 this.token_kind, this.leading, trailing, this.text);
723 static factory(token_kind, leading, trailing, token_text)
728 return new EndOfFileToken(leading, trailing);
731 return new AbstractToken(leading, trailing);
733 return new AndToken(leading, trailing);
735 return new ArrayToken(leading, trailing);
737 return new ArraykeyToken(leading, trailing);
739 return new AsToken(leading, trailing);
741 return new AsyncToken(leading, trailing);
743 return new AttributeToken(leading, trailing);
745 return new AwaitToken(leading, trailing);
747 return new BackslashToken(leading, trailing);
749 return new BinaryToken(leading, trailing);
751 return new BoolToken(leading, trailing);
753 return new BooleanToken(leading, trailing);
755 return new BreakToken(leading, trailing);
757 return new CaseToken(leading, trailing);
759 return new CatchToken(leading, trailing);
761 return new CategoryToken(leading, trailing);
763 return new ChildrenToken(leading, trailing);
765 return new ClassToken(leading, trailing);
767 return new ClassnameToken(leading, trailing);
769 return new CloneToken(leading, trailing);
771 return new ConstToken(leading, trailing);
773 return new ConstructToken(leading, trailing);
775 return new ContinueToken(leading, trailing);
777 return new CoroutineToken(leading, trailing);
779 return new DarrayToken(leading, trailing);
781 return new DeclareToken(leading, trailing);
783 return new DefaultToken(leading, trailing);
785 return new DefineToken(leading, trailing);
787 return new DestructToken(leading, trailing);
789 return new DictToken(leading, trailing);
791 return new DoToken(leading, trailing);
793 return new DoubleToken(leading, trailing);
795 return new EchoToken(leading, trailing);
797 return new ElseToken(leading, trailing);
799 return new ElseifToken(leading, trailing);
801 return new EmptyToken(leading, trailing);
803 return new EndforToken(leading, trailing);
805 return new EndforeachToken(leading, trailing);
807 return new EnddeclareToken(leading, trailing);
809 return new EndifToken(leading, trailing);
811 return new EndswitchToken(leading, trailing);
813 return new EndwhileToken(leading, trailing);
815 return new EnumToken(leading, trailing);
817 return new EvalToken(leading, trailing);
819 return new ExtendsToken(leading, trailing);
821 return new FallthroughToken(leading, trailing);
823 return new FloatToken(leading, trailing);
825 return new FileToken(leading, trailing);
827 return new FinalToken(leading, trailing);
829 return new FinallyToken(leading, trailing);
831 return new ForToken(leading, trailing);
833 return new ForeachToken(leading, trailing);
835 return new FromToken(leading, trailing);
837 return new FunctionToken(leading, trailing);
839 return new GlobalToken(leading, trailing);
841 return new ConcurrentToken(leading, trailing);
843 return new GotoToken(leading, trailing);
844 case '__halt_compiler':
845 return new HaltCompilerToken(leading, trailing);
847 return new IfToken(leading, trailing);
849 return new ImplementsToken(leading, trailing);
851 return new IncludeToken(leading, trailing);
853 return new Include_onceToken(leading, trailing);
855 return new InoutToken(leading, trailing);
857 return new InstanceofToken(leading, trailing);
859 return new InsteadofToken(leading, trailing);
861 return new IntToken(leading, trailing);
863 return new IntegerToken(leading, trailing);
865 return new InterfaceToken(leading, trailing);
867 return new IsToken(leading, trailing);
869 return new IssetToken(leading, trailing);
871 return new KeysetToken(leading, trailing);
873 return new LetToken(leading, trailing);
875 return new ListToken(leading, trailing);
877 return new MixedToken(leading, trailing);
879 return new NamespaceToken(leading, trailing);
881 return new NewToken(leading, trailing);
883 return new NewtypeToken(leading, trailing);
885 return new NoreturnToken(leading, trailing);
887 return new NumToken(leading, trailing);
889 return new ObjectToken(leading, trailing);
891 return new OrToken(leading, trailing);
893 return new ParentToken(leading, trailing);
895 return new PrintToken(leading, trailing);
897 return new PrivateToken(leading, trailing);
899 return new ProtectedToken(leading, trailing);
901 return new PublicToken(leading, trailing);
903 return new RealToken(leading, trailing);
905 return new ReifyToken(leading, trailing);
907 return new RequireToken(leading, trailing);
909 return new Require_onceToken(leading, trailing);
911 return new RequiredToken(leading, trailing);
913 return new ResourceToken(leading, trailing);
915 return new ReturnToken(leading, trailing);
917 return new SelfToken(leading, trailing);
919 return new ShapeToken(leading, trailing);
921 return new StaticToken(leading, trailing);
923 return new StringToken(leading, trailing);
925 return new SuperToken(leading, trailing);
927 return new SuspendToken(leading, trailing);
929 return new SwitchToken(leading, trailing);
931 return new ThisToken(leading, trailing);
933 return new ThrowToken(leading, trailing);
935 return new TraitToken(leading, trailing);
937 return new TryToken(leading, trailing);
939 return new TupleToken(leading, trailing);
941 return new TypeToken(leading, trailing);
943 return new UnsetToken(leading, trailing);
945 return new UseToken(leading, trailing);
947 return new UsingToken(leading, trailing);
949 return new VarToken(leading, trailing);
951 return new VarrayToken(leading, trailing);
953 return new VecToken(leading, trailing);
955 return new VoidToken(leading, trailing);
957 return new WhereToken(leading, trailing);
959 return new WhileToken(leading, trailing);
961 return new XorToken(leading, trailing);
963 return new YieldToken(leading, trailing);
965 return new NullLiteralToken(leading, trailing);
967 return new LeftBracketToken(leading, trailing);
969 return new RightBracketToken(leading, trailing);
971 return new LeftParenToken(leading, trailing);
973 return new RightParenToken(leading, trailing);
975 return new LeftBraceToken(leading, trailing);
977 return new RightBraceToken(leading, trailing);
979 return new DotToken(leading, trailing);
981 return new MinusGreaterThanToken(leading, trailing);
983 return new PlusPlusToken(leading, trailing);
985 return new MinusMinusToken(leading, trailing);
987 return new StarStarToken(leading, trailing);
989 return new StarToken(leading, trailing);
991 return new PlusToken(leading, trailing);
993 return new MinusToken(leading, trailing);
995 return new TildeToken(leading, trailing);
997 return new ExclamationToken(leading, trailing);
999 return new DollarToken(leading, trailing);
1001 return new SlashToken(leading, trailing);
1003 return new PercentToken(leading, trailing);
1005 return new LessThanGreaterThanToken(leading, trailing);
1007 return new LessThanEqualGreaterThanToken(leading, trailing);
1009 return new LessThanLessThanToken(leading, trailing);
1011 return new GreaterThanGreaterThanToken(leading, trailing);
1013 return new LessThanToken(leading, trailing);
1015 return new GreaterThanToken(leading, trailing);
1017 return new LessThanEqualToken(leading, trailing);
1019 return new GreaterThanEqualToken(leading, trailing);
1021 return new EqualEqualToken(leading, trailing);
1023 return new EqualEqualEqualToken(leading, trailing);
1025 return new ExclamationEqualToken(leading, trailing);
1027 return new ExclamationEqualEqualToken(leading, trailing);
1029 return new CaratToken(leading, trailing);
1031 return new BarToken(leading, trailing);
1033 return new AmpersandToken(leading, trailing);
1035 return new AmpersandAmpersandToken(leading, trailing);
1037 return new BarBarToken(leading, trailing);
1039 return new QuestionToken(leading, trailing);
1041 return new QuestionAsToken(leading, trailing);
1043 return new QuestionColonToken(leading, trailing);
1045 return new QuestionQuestionToken(leading, trailing);
1047 return new QuestionQuestionEqualToken(leading, trailing);
1049 return new ColonToken(leading, trailing);
1051 return new SemicolonToken(leading, trailing);
1053 return new EqualToken(leading, trailing);
1055 return new StarStarEqualToken(leading, trailing);
1057 return new StarEqualToken(leading, trailing);
1059 return new SlashEqualToken(leading, trailing);
1061 return new PercentEqualToken(leading, trailing);
1063 return new PlusEqualToken(leading, trailing);
1065 return new MinusEqualToken(leading, trailing);
1067 return new DotEqualToken(leading, trailing);
1069 return new LessThanLessThanEqualToken(leading, trailing);
1071 return new GreaterThanGreaterThanEqualToken(leading, trailing);
1073 return new AmpersandEqualToken(leading, trailing);
1075 return new CaratEqualToken(leading, trailing);
1077 return new BarEqualToken(leading, trailing);
1079 return new CommaToken(leading, trailing);
1081 return new AtToken(leading, trailing);
1083 return new ColonColonToken(leading, trailing);
1085 return new EqualGreaterThanToken(leading, trailing);
1087 return new EqualEqualGreaterThanToken(leading, trailing);
1089 return new QuestionMinusGreaterThanToken(leading, trailing);
1091 return new DotDotDotToken(leading, trailing);
1093 return new DollarDollarToken(leading, trailing);
1095 return new BarGreaterThanToken(leading, trailing);
1097 return new SlashGreaterThanToken(leading, trailing);
1099 return new LessThanSlashToken(leading, trailing);
1101 return new LessThanQuestionToken(leading, trailing);
1103 return new QuestionGreaterThanToken(leading, trailing);
1105 return new ColonAtToken(leading, trailing);
1108 return new ErrorTokenToken(leading, trailing, token_text);
1110 return new NameToken(leading, trailing, token_text);
1112 return new VariableToken(leading, trailing, token_text);
1113 case 'decimal_literal':
1114 return new DecimalLiteralToken(leading, trailing, token_text);
1115 case 'octal_literal':
1116 return new OctalLiteralToken(leading, trailing, token_text);
1117 case 'hexadecimal_literal':
1118 return new HexadecimalLiteralToken(leading, trailing, token_text);
1119 case 'binary_literal':
1120 return new BinaryLiteralToken(leading, trailing, token_text);
1121 case 'floating_literal':
1122 return new FloatingLiteralToken(leading, trailing, token_text);
1123 case 'single_quoted_string_literal':
1124 return new SingleQuotedStringLiteralToken(leading, trailing, token_text);
1125 case 'double_quoted_string_literal':
1126 return new DoubleQuotedStringLiteralToken(leading, trailing, token_text);
1127 case 'double_quoted_string_literal_head':
1128 return new DoubleQuotedStringLiteralHeadToken(leading, trailing, token_text);
1129 case 'string_literal_body':
1130 return new StringLiteralBodyToken(leading, trailing, token_text);
1131 case 'double_quoted_string_literal_tail':
1132 return new DoubleQuotedStringLiteralTailToken(leading, trailing, token_text);
1133 case 'heredoc_string_literal':
1134 return new HeredocStringLiteralToken(leading, trailing, token_text);
1135 case 'heredoc_string_literal_head':
1136 return new HeredocStringLiteralHeadToken(leading, trailing, token_text);
1137 case 'heredoc_string_literal_tail':
1138 return new HeredocStringLiteralTailToken(leading, trailing, token_text);
1139 case 'nowdoc_string_literal':
1140 return new NowdocStringLiteralToken(leading, trailing, token_text);
1141 case 'boolean_literal':
1142 return new BooleanLiteralToken(leading, trailing, token_text);
1143 case 'XHP_category_name':
1144 return new XHPCategoryNameToken(leading, trailing, token_text);
1145 case 'XHP_element_name':
1146 return new XHPElementNameToken(leading, trailing, token_text);
1147 case 'XHP_class_name':
1148 return new XHPClassNameToken(leading, trailing, token_text);
1149 case 'XHP_string_literal':
1150 return new XHPStringLiteralToken(leading, trailing, token_text);
1152 return new XHPBodyToken(leading, trailing, token_text);
1154 return new XHPCommentToken(leading, trailing, token_text);
1156 return new MarkupToken(leading, trailing, token_text);
1158 default: throw 'unexpected token kind; ' + token_kind;
1159 // TODO: Better error
1163 rewrite(rewriter, parents)
1165 let new_parents = parents.slice();
1166 new_parents.push(this);
1167 let leading = this.leading.rewrite(rewriter, new_parents);
1168 let trailing = this.trailing.rewrite(rewriter, new_parents);
1169 if (leading === this.leading && trailing === this.trailing)
1170 return rewriter(this, parents);
1172 return rewriter(EditableToken.factory(
1173 this.token_kind, leading, trailing, this.text), parents);
1176 reduce(reducer, accumulator)
1178 accumulator = this.leading.reduce(reducer, accumulator);
1179 accumulator = reducer(this, accumulator);
1180 accumulator = this.trailing.reduce(reducer, accumulator);
1184 static from_json(json, position, source)
1186 let leading_list = array_map_reduce(
1188 (json, position) => EditableSyntax.from_json(json, position, source),
1189 (json, position) => json.width + position,
1191 let leading = EditableSyntax.to_list(leading_list);
1192 let token_position = position + leading.width;
1193 let token_text = source.substring(
1194 token_position, token_position + json.width);
1195 let trailing_position = token_position + json.width;
1196 let trailing_list = array_map_reduce(
1198 (json, position) => EditableSyntax.from_json(json, position, source),
1199 (json, position) => json.width + position,
1201 let trailing = EditableSyntax.to_list(trailing_list);
1202 return EditableToken.factory(json.kind, leading, trailing, token_text);
1207 if (EditableToken._children_keys == null)
1208 EditableToken._children_keys = ['leading', 'trailing'];
1209 return EditableToken._children_keys;
1213 class EndOfFileToken extends EditableToken
1215 constructor(leading, trailing)
1217 super('end_of_file', leading, trailing, '');
1221 class AbstractToken extends EditableToken
1223 constructor(leading, trailing)
1225 super('abstract', leading, trailing, 'abstract');
1228 class AndToken extends EditableToken
1230 constructor(leading, trailing)
1232 super('and', leading, trailing, 'and');
1235 class ArrayToken extends EditableToken
1237 constructor(leading, trailing)
1239 super('array', leading, trailing, 'array');
1242 class ArraykeyToken extends EditableToken
1244 constructor(leading, trailing)
1246 super('arraykey', leading, trailing, 'arraykey');
1249 class AsToken extends EditableToken
1251 constructor(leading, trailing)
1253 super('as', leading, trailing, 'as');
1256 class AsyncToken extends EditableToken
1258 constructor(leading, trailing)
1260 super('async', leading, trailing, 'async');
1263 class AttributeToken extends EditableToken
1265 constructor(leading, trailing)
1267 super('attribute', leading, trailing, 'attribute');
1270 class AwaitToken extends EditableToken
1272 constructor(leading, trailing)
1274 super('await', leading, trailing, 'await');
1277 class BackslashToken extends EditableToken
1279 constructor(leading, trailing)
1281 super('\', leading, trailing, '\');
1284 class BinaryToken extends EditableToken
1286 constructor(leading, trailing)
1288 super('binary', leading, trailing, 'binary');
1291 class BoolToken extends EditableToken
1293 constructor(leading, trailing)
1295 super('bool', leading, trailing, 'bool');
1298 class BooleanToken extends EditableToken
1300 constructor(leading, trailing)
1302 super('boolean', leading, trailing, 'boolean');
1305 class BreakToken extends EditableToken
1307 constructor(leading, trailing)
1309 super('break', leading, trailing, 'break');
1312 class CaseToken extends EditableToken
1314 constructor(leading, trailing)
1316 super('case', leading, trailing, 'case');
1319 class CatchToken extends EditableToken
1321 constructor(leading, trailing)
1323 super('catch', leading, trailing, 'catch');
1326 class CategoryToken extends EditableToken
1328 constructor(leading, trailing)
1330 super('category', leading, trailing, 'category');
1333 class ChildrenToken extends EditableToken
1335 constructor(leading, trailing)
1337 super('children', leading, trailing, 'children');
1340 class ClassToken extends EditableToken
1342 constructor(leading, trailing)
1344 super('class', leading, trailing, 'class');
1347 class ClassnameToken extends EditableToken
1349 constructor(leading, trailing)
1351 super('classname', leading, trailing, 'classname');
1354 class CloneToken extends EditableToken
1356 constructor(leading, trailing)
1358 super('clone', leading, trailing, 'clone');
1361 class ConstToken extends EditableToken
1363 constructor(leading, trailing)
1365 super('const', leading, trailing, 'const');
1368 class ConstructToken extends EditableToken
1370 constructor(leading, trailing)
1372 super('__construct', leading, trailing, '__construct');
1375 class ContinueToken extends EditableToken
1377 constructor(leading, trailing)
1379 super('continue', leading, trailing, 'continue');
1382 class CoroutineToken extends EditableToken
1384 constructor(leading, trailing)
1386 super('coroutine', leading, trailing, 'coroutine');
1389 class DarrayToken extends EditableToken
1391 constructor(leading, trailing)
1393 super('darray', leading, trailing, 'darray');
1396 class DeclareToken extends EditableToken
1398 constructor(leading, trailing)
1400 super('declare', leading, trailing, 'declare');
1403 class DefaultToken extends EditableToken
1405 constructor(leading, trailing)
1407 super('default', leading, trailing, 'default');
1410 class DefineToken extends EditableToken
1412 constructor(leading, trailing)
1414 super('define', leading, trailing, 'define');
1417 class DestructToken extends EditableToken
1419 constructor(leading, trailing)
1421 super('__destruct', leading, trailing, '__destruct');
1424 class DictToken extends EditableToken
1426 constructor(leading, trailing)
1428 super('dict', leading, trailing, 'dict');
1431 class DoToken extends EditableToken
1433 constructor(leading, trailing)
1435 super('do', leading, trailing, 'do');
1438 class DoubleToken extends EditableToken
1440 constructor(leading, trailing)
1442 super('double', leading, trailing, 'double');
1445 class EchoToken extends EditableToken
1447 constructor(leading, trailing)
1449 super('echo', leading, trailing, 'echo');
1452 class ElseToken extends EditableToken
1454 constructor(leading, trailing)
1456 super('else', leading, trailing, 'else');
1459 class ElseifToken extends EditableToken
1461 constructor(leading, trailing)
1463 super('elseif', leading, trailing, 'elseif');
1466 class EmptyToken extends EditableToken
1468 constructor(leading, trailing)
1470 super('empty', leading, trailing, 'empty');
1473 class EndforToken extends EditableToken
1475 constructor(leading, trailing)
1477 super('endfor', leading, trailing, 'endfor');
1480 class EndforeachToken extends EditableToken
1482 constructor(leading, trailing)
1484 super('endforeach', leading, trailing, 'endforeach');
1487 class EnddeclareToken extends EditableToken
1489 constructor(leading, trailing)
1491 super('enddeclare', leading, trailing, 'enddeclare');
1494 class EndifToken extends EditableToken
1496 constructor(leading, trailing)
1498 super('endif', leading, trailing, 'endif');
1501 class EndswitchToken extends EditableToken
1503 constructor(leading, trailing)
1505 super('endswitch', leading, trailing, 'endswitch');
1508 class EndwhileToken extends EditableToken
1510 constructor(leading, trailing)
1512 super('endwhile', leading, trailing, 'endwhile');
1515 class EnumToken extends EditableToken
1517 constructor(leading, trailing)
1519 super('enum', leading, trailing, 'enum');
1522 class EvalToken extends EditableToken
1524 constructor(leading, trailing)
1526 super('eval', leading, trailing, 'eval');
1529 class ExtendsToken extends EditableToken
1531 constructor(leading, trailing)
1533 super('extends', leading, trailing, 'extends');
1536 class FallthroughToken extends EditableToken
1538 constructor(leading, trailing)
1540 super('fallthrough', leading, trailing, 'fallthrough');
1543 class FloatToken extends EditableToken
1545 constructor(leading, trailing)
1547 super('float', leading, trailing, 'float');
1550 class FileToken extends EditableToken
1552 constructor(leading, trailing)
1554 super('file', leading, trailing, 'file');
1557 class FinalToken extends EditableToken
1559 constructor(leading, trailing)
1561 super('final', leading, trailing, 'final');
1564 class FinallyToken extends EditableToken
1566 constructor(leading, trailing)
1568 super('finally', leading, trailing, 'finally');
1571 class ForToken extends EditableToken
1573 constructor(leading, trailing)
1575 super('for', leading, trailing, 'for');
1578 class ForeachToken extends EditableToken
1580 constructor(leading, trailing)
1582 super('foreach', leading, trailing, 'foreach');
1585 class FromToken extends EditableToken
1587 constructor(leading, trailing)
1589 super('from', leading, trailing, 'from');
1592 class FunctionToken extends EditableToken
1594 constructor(leading, trailing)
1596 super('function', leading, trailing, 'function');
1599 class GlobalToken extends EditableToken
1601 constructor(leading, trailing)
1603 super('global', leading, trailing, 'global');
1606 class ConcurrentToken extends EditableToken
1608 constructor(leading, trailing)
1610 super('concurrent', leading, trailing, 'concurrent');
1613 class GotoToken extends EditableToken
1615 constructor(leading, trailing)
1617 super('goto', leading, trailing, 'goto');
1620 class HaltCompilerToken extends EditableToken
1622 constructor(leading, trailing)
1624 super('__halt_compiler', leading, trailing, '__halt_compiler');
1627 class IfToken extends EditableToken
1629 constructor(leading, trailing)
1631 super('if', leading, trailing, 'if');
1634 class ImplementsToken extends EditableToken
1636 constructor(leading, trailing)
1638 super('implements', leading, trailing, 'implements');
1641 class IncludeToken extends EditableToken
1643 constructor(leading, trailing)
1645 super('include', leading, trailing, 'include');
1648 class Include_onceToken extends EditableToken
1650 constructor(leading, trailing)
1652 super('include_once', leading, trailing, 'include_once');
1655 class InoutToken extends EditableToken
1657 constructor(leading, trailing)
1659 super('inout', leading, trailing, 'inout');
1662 class InstanceofToken extends EditableToken
1664 constructor(leading, trailing)
1666 super('instanceof', leading, trailing, 'instanceof');
1669 class InsteadofToken extends EditableToken
1671 constructor(leading, trailing)
1673 super('insteadof', leading, trailing, 'insteadof');
1676 class IntToken extends EditableToken
1678 constructor(leading, trailing)
1680 super('int', leading, trailing, 'int');
1683 class IntegerToken extends EditableToken
1685 constructor(leading, trailing)
1687 super('integer', leading, trailing, 'integer');
1690 class InterfaceToken extends EditableToken
1692 constructor(leading, trailing)
1694 super('interface', leading, trailing, 'interface');
1697 class IsToken extends EditableToken
1699 constructor(leading, trailing)
1701 super('is', leading, trailing, 'is');
1704 class IssetToken extends EditableToken
1706 constructor(leading, trailing)
1708 super('isset', leading, trailing, 'isset');
1711 class KeysetToken extends EditableToken
1713 constructor(leading, trailing)
1715 super('keyset', leading, trailing, 'keyset');
1718 class LetToken extends EditableToken
1720 constructor(leading, trailing)
1722 super('let', leading, trailing, 'let');
1725 class ListToken extends EditableToken
1727 constructor(leading, trailing)
1729 super('list', leading, trailing, 'list');
1732 class MixedToken extends EditableToken
1734 constructor(leading, trailing)
1736 super('mixed', leading, trailing, 'mixed');
1739 class NamespaceToken extends EditableToken
1741 constructor(leading, trailing)
1743 super('namespace', leading, trailing, 'namespace');
1746 class NewToken extends EditableToken
1748 constructor(leading, trailing)
1750 super('new', leading, trailing, 'new');
1753 class NewtypeToken extends EditableToken
1755 constructor(leading, trailing)
1757 super('newtype', leading, trailing, 'newtype');
1760 class NoreturnToken extends EditableToken
1762 constructor(leading, trailing)
1764 super('noreturn', leading, trailing, 'noreturn');
1767 class NumToken extends EditableToken
1769 constructor(leading, trailing)
1771 super('num', leading, trailing, 'num');
1774 class ObjectToken extends EditableToken
1776 constructor(leading, trailing)
1778 super('object', leading, trailing, 'object');
1781 class OrToken extends EditableToken
1783 constructor(leading, trailing)
1785 super('or', leading, trailing, 'or');
1788 class ParentToken extends EditableToken
1790 constructor(leading, trailing)
1792 super('parent', leading, trailing, 'parent');
1795 class PrintToken extends EditableToken
1797 constructor(leading, trailing)
1799 super('print', leading, trailing, 'print');
1802 class PrivateToken extends EditableToken
1804 constructor(leading, trailing)
1806 super('private', leading, trailing, 'private');
1809 class ProtectedToken extends EditableToken
1811 constructor(leading, trailing)
1813 super('protected', leading, trailing, 'protected');
1816 class PublicToken extends EditableToken
1818 constructor(leading, trailing)
1820 super('public', leading, trailing, 'public');
1823 class RealToken extends EditableToken
1825 constructor(leading, trailing)
1827 super('real', leading, trailing, 'real');
1830 class ReifyToken extends EditableToken
1832 constructor(leading, trailing)
1834 super('reify', leading, trailing, 'reify');
1837 class RequireToken extends EditableToken
1839 constructor(leading, trailing)
1841 super('require', leading, trailing, 'require');
1844 class Require_onceToken extends EditableToken
1846 constructor(leading, trailing)
1848 super('require_once', leading, trailing, 'require_once');
1851 class RequiredToken extends EditableToken
1853 constructor(leading, trailing)
1855 super('required', leading, trailing, 'required');
1858 class ResourceToken extends EditableToken
1860 constructor(leading, trailing)
1862 super('resource', leading, trailing, 'resource');
1865 class ReturnToken extends EditableToken
1867 constructor(leading, trailing)
1869 super('return', leading, trailing, 'return');
1872 class SelfToken extends EditableToken
1874 constructor(leading, trailing)
1876 super('self', leading, trailing, 'self');
1879 class ShapeToken extends EditableToken
1881 constructor(leading, trailing)
1883 super('shape', leading, trailing, 'shape');
1886 class StaticToken extends EditableToken
1888 constructor(leading, trailing)
1890 super('static', leading, trailing, 'static');
1893 class StringToken extends EditableToken
1895 constructor(leading, trailing)
1897 super('string', leading, trailing, 'string');
1900 class SuperToken extends EditableToken
1902 constructor(leading, trailing)
1904 super('super', leading, trailing, 'super');
1907 class SuspendToken extends EditableToken
1909 constructor(leading, trailing)
1911 super('suspend', leading, trailing, 'suspend');
1914 class SwitchToken extends EditableToken
1916 constructor(leading, trailing)
1918 super('switch', leading, trailing, 'switch');
1921 class ThisToken extends EditableToken
1923 constructor(leading, trailing)
1925 super('this', leading, trailing, 'this');
1928 class ThrowToken extends EditableToken
1930 constructor(leading, trailing)
1932 super('throw', leading, trailing, 'throw');
1935 class TraitToken extends EditableToken
1937 constructor(leading, trailing)
1939 super('trait', leading, trailing, 'trait');
1942 class TryToken extends EditableToken
1944 constructor(leading, trailing)
1946 super('try', leading, trailing, 'try');
1949 class TupleToken extends EditableToken
1951 constructor(leading, trailing)
1953 super('tuple', leading, trailing, 'tuple');
1956 class TypeToken extends EditableToken
1958 constructor(leading, trailing)
1960 super('type', leading, trailing, 'type');
1963 class UnsetToken extends EditableToken
1965 constructor(leading, trailing)
1967 super('unset', leading, trailing, 'unset');
1970 class UseToken extends EditableToken
1972 constructor(leading, trailing)
1974 super('use', leading, trailing, 'use');
1977 class UsingToken extends EditableToken
1979 constructor(leading, trailing)
1981 super('using', leading, trailing, 'using');
1984 class VarToken extends EditableToken
1986 constructor(leading, trailing)
1988 super('var', leading, trailing, 'var');
1991 class VarrayToken extends EditableToken
1993 constructor(leading, trailing)
1995 super('varray', leading, trailing, 'varray');
1998 class VecToken extends EditableToken
2000 constructor(leading, trailing)
2002 super('vec', leading, trailing, 'vec');
2005 class VoidToken extends EditableToken
2007 constructor(leading, trailing)
2009 super('void', leading, trailing, 'void');
2012 class WhereToken extends EditableToken
2014 constructor(leading, trailing)
2016 super('where', leading, trailing, 'where');
2019 class WhileToken extends EditableToken
2021 constructor(leading, trailing)
2023 super('while', leading, trailing, 'while');
2026 class XorToken extends EditableToken
2028 constructor(leading, trailing)
2030 super('xor', leading, trailing, 'xor');
2033 class YieldToken extends EditableToken
2035 constructor(leading, trailing)
2037 super('yield', leading, trailing, 'yield');
2040 class NullLiteralToken extends EditableToken
2042 constructor(leading, trailing)
2044 super('null', leading, trailing, 'null');
2047 class LeftBracketToken extends EditableToken
2049 constructor(leading, trailing)
2051 super('[', leading, trailing, '[');
2054 class RightBracketToken extends EditableToken
2056 constructor(leading, trailing)
2058 super(']', leading, trailing, ']');
2061 class LeftParenToken extends EditableToken
2063 constructor(leading, trailing)
2065 super('(', leading, trailing, '(');
2068 class RightParenToken extends EditableToken
2070 constructor(leading, trailing)
2072 super(')', leading, trailing, ')');
2075 class LeftBraceToken extends EditableToken
2077 constructor(leading, trailing)
2079 super('{', leading, trailing, '{');
2082 class RightBraceToken extends EditableToken
2084 constructor(leading, trailing)
2086 super('}', leading, trailing, '}');
2089 class DotToken extends EditableToken
2091 constructor(leading, trailing)
2093 super('.', leading, trailing, '.');
2096 class MinusGreaterThanToken extends EditableToken
2098 constructor(leading, trailing)
2100 super('->', leading, trailing, '->');
2103 class PlusPlusToken extends EditableToken
2105 constructor(leading, trailing)
2107 super('++', leading, trailing, '++');
2110 class MinusMinusToken extends EditableToken
2112 constructor(leading, trailing)
2114 super('--', leading, trailing, '--');
2117 class StarStarToken extends EditableToken
2119 constructor(leading, trailing)
2121 super('**', leading, trailing, '**');
2124 class StarToken extends EditableToken
2126 constructor(leading, trailing)
2128 super('*', leading, trailing, '*');
2131 class PlusToken extends EditableToken
2133 constructor(leading, trailing)
2135 super('+', leading, trailing, '+');
2138 class MinusToken extends EditableToken
2140 constructor(leading, trailing)
2142 super('-', leading, trailing, '-');
2145 class TildeToken extends EditableToken
2147 constructor(leading, trailing)
2149 super('~', leading, trailing, '~');
2152 class ExclamationToken extends EditableToken
2154 constructor(leading, trailing)
2156 super('!', leading, trailing, '!');
2159 class DollarToken extends EditableToken
2161 constructor(leading, trailing)
2163 super('$', leading, trailing, '$');
2166 class SlashToken extends EditableToken
2168 constructor(leading, trailing)
2170 super('/', leading, trailing, '/');
2173 class PercentToken extends EditableToken
2175 constructor(leading, trailing)
2177 super('%', leading, trailing, '%');
2180 class LessThanGreaterThanToken extends EditableToken
2182 constructor(leading, trailing)
2184 super('<>', leading, trailing, '<>');
2187 class LessThanEqualGreaterThanToken extends EditableToken
2189 constructor(leading, trailing)
2191 super('<=>', leading, trailing, '<=>');
2194 class LessThanLessThanToken extends EditableToken
2196 constructor(leading, trailing)
2198 super('<<', leading, trailing, '<<');
2201 class GreaterThanGreaterThanToken extends EditableToken
2203 constructor(leading, trailing)
2205 super('>>', leading, trailing, '>>');
2208 class LessThanToken extends EditableToken
2210 constructor(leading, trailing)
2212 super('<', leading, trailing, '<');
2215 class GreaterThanToken extends EditableToken
2217 constructor(leading, trailing)
2219 super('>', leading, trailing, '>');
2222 class LessThanEqualToken extends EditableToken
2224 constructor(leading, trailing)
2226 super('<=', leading, trailing, '<=');
2229 class GreaterThanEqualToken extends EditableToken
2231 constructor(leading, trailing)
2233 super('>=', leading, trailing, '>=');
2236 class EqualEqualToken extends EditableToken
2238 constructor(leading, trailing)
2240 super('==', leading, trailing, '==');
2243 class EqualEqualEqualToken extends EditableToken
2245 constructor(leading, trailing)
2247 super('===', leading, trailing, '===');
2250 class ExclamationEqualToken extends EditableToken
2252 constructor(leading, trailing)
2254 super('!=', leading, trailing, '!=');
2257 class ExclamationEqualEqualToken extends EditableToken
2259 constructor(leading, trailing)
2261 super('!==', leading, trailing, '!==');
2264 class CaratToken extends EditableToken
2266 constructor(leading, trailing)
2268 super('^', leading, trailing, '^');
2271 class BarToken extends EditableToken
2273 constructor(leading, trailing)
2275 super('|', leading, trailing, '|');
2278 class AmpersandToken extends EditableToken
2280 constructor(leading, trailing)
2282 super('&', leading, trailing, '&');
2285 class AmpersandAmpersandToken extends EditableToken
2287 constructor(leading, trailing)
2289 super('&&', leading, trailing, '&&');
2292 class BarBarToken extends EditableToken
2294 constructor(leading, trailing)
2296 super('||', leading, trailing, '||');
2299 class QuestionToken extends EditableToken
2301 constructor(leading, trailing)
2303 super('?', leading, trailing, '?');
2306 class QuestionAsToken extends EditableToken
2308 constructor(leading, trailing)
2310 super('?as', leading, trailing, '?as');
2313 class QuestionColonToken extends EditableToken
2315 constructor(leading, trailing)
2317 super('?:', leading, trailing, '?:');
2320 class QuestionQuestionToken extends EditableToken
2322 constructor(leading, trailing)
2324 super('??', leading, trailing, '??');
2327 class QuestionQuestionEqualToken extends EditableToken
2329 constructor(leading, trailing)
2331 super('??=', leading, trailing, '??=');
2334 class ColonToken extends EditableToken
2336 constructor(leading, trailing)
2338 super(':', leading, trailing, ':');
2341 class SemicolonToken extends EditableToken
2343 constructor(leading, trailing)
2345 super(';', leading, trailing, ';');
2348 class EqualToken extends EditableToken
2350 constructor(leading, trailing)
2352 super('=', leading, trailing, '=');
2355 class StarStarEqualToken extends EditableToken
2357 constructor(leading, trailing)
2359 super('**=', leading, trailing, '**=');
2362 class StarEqualToken extends EditableToken
2364 constructor(leading, trailing)
2366 super('*=', leading, trailing, '*=');
2369 class SlashEqualToken extends EditableToken
2371 constructor(leading, trailing)
2373 super('/=', leading, trailing, '/=');
2376 class PercentEqualToken extends EditableToken
2378 constructor(leading, trailing)
2380 super('%=', leading, trailing, '%=');
2383 class PlusEqualToken extends EditableToken
2385 constructor(leading, trailing)
2387 super('+=', leading, trailing, '+=');
2390 class MinusEqualToken extends EditableToken
2392 constructor(leading, trailing)
2394 super('-=', leading, trailing, '-=');
2397 class DotEqualToken extends EditableToken
2399 constructor(leading, trailing)
2401 super('.=', leading, trailing, '.=');
2404 class LessThanLessThanEqualToken extends EditableToken
2406 constructor(leading, trailing)
2408 super('<<=', leading, trailing, '<<=');
2411 class GreaterThanGreaterThanEqualToken extends EditableToken
2413 constructor(leading, trailing)
2415 super('>>=', leading, trailing, '>>=');
2418 class AmpersandEqualToken extends EditableToken
2420 constructor(leading, trailing)
2422 super('&=', leading, trailing, '&=');
2425 class CaratEqualToken extends EditableToken
2427 constructor(leading, trailing)
2429 super('^=', leading, trailing, '^=');
2432 class BarEqualToken extends EditableToken
2434 constructor(leading, trailing)
2436 super('|=', leading, trailing, '|=');
2439 class CommaToken extends EditableToken
2441 constructor(leading, trailing)
2443 super(',', leading, trailing, ',');
2446 class AtToken extends EditableToken
2448 constructor(leading, trailing)
2450 super('@', leading, trailing, '@');
2453 class ColonColonToken extends EditableToken
2455 constructor(leading, trailing)
2457 super('::', leading, trailing, '::');
2460 class EqualGreaterThanToken extends EditableToken
2462 constructor(leading, trailing)
2464 super('=>', leading, trailing, '=>');
2467 class EqualEqualGreaterThanToken extends EditableToken
2469 constructor(leading, trailing)
2471 super('==>', leading, trailing, '==>');
2474 class QuestionMinusGreaterThanToken extends EditableToken
2476 constructor(leading, trailing)
2478 super('?->', leading, trailing, '?->');
2481 class DotDotDotToken extends EditableToken
2483 constructor(leading, trailing)
2485 super('...', leading, trailing, '...');
2488 class DollarDollarToken extends EditableToken
2490 constructor(leading, trailing)
2492 super('$$', leading, trailing, '$$');
2495 class BarGreaterThanToken extends EditableToken
2497 constructor(leading, trailing)
2499 super('|>', leading, trailing, '|>');
2502 class SlashGreaterThanToken extends EditableToken
2504 constructor(leading, trailing)
2506 super('/>', leading, trailing, '/>');
2509 class LessThanSlashToken extends EditableToken
2511 constructor(leading, trailing)
2513 super('</', leading, trailing, '</');
2516 class LessThanQuestionToken extends EditableToken
2518 constructor(leading, trailing)
2520 super('<?', leading, trailing, '<?');
2523 class QuestionGreaterThanToken extends EditableToken
2525 constructor(leading, trailing)
2527 super('?>', leading, trailing, '?>');
2530 class ColonAtToken extends EditableToken
2532 constructor(leading, trailing)
2534 super(':@', leading, trailing, ':@');
2538 class ErrorTokenToken extends EditableToken
2540 constructor(leading, trailing, text)
2542 super('error_token', leading, trailing, text);
2546 return new ErrorTokenToken(this.leading, this.trailing, text);
2550 class NameToken extends EditableToken
2552 constructor(leading, trailing, text)
2554 super('name', leading, trailing, text);
2558 return new NameToken(this.leading, this.trailing, text);
2562 class VariableToken extends EditableToken
2564 constructor(leading, trailing, text)
2566 super('variable', leading, trailing, text);
2570 return new VariableToken(this.leading, this.trailing, text);
2574 class DecimalLiteralToken extends EditableToken
2576 constructor(leading, trailing, text)
2578 super('decimal_literal', leading, trailing, text);
2582 return new DecimalLiteralToken(this.leading, this.trailing, text);
2586 class OctalLiteralToken extends EditableToken
2588 constructor(leading, trailing, text)
2590 super('octal_literal', leading, trailing, text);
2594 return new OctalLiteralToken(this.leading, this.trailing, text);
2598 class HexadecimalLiteralToken extends EditableToken
2600 constructor(leading, trailing, text)
2602 super('hexadecimal_literal', leading, trailing, text);
2606 return new HexadecimalLiteralToken(this.leading, this.trailing, text);
2610 class BinaryLiteralToken extends EditableToken
2612 constructor(leading, trailing, text)
2614 super('binary_literal', leading, trailing, text);
2618 return new BinaryLiteralToken(this.leading, this.trailing, text);
2622 class FloatingLiteralToken extends EditableToken
2624 constructor(leading, trailing, text)
2626 super('floating_literal', leading, trailing, text);
2630 return new FloatingLiteralToken(this.leading, this.trailing, text);
2634 class SingleQuotedStringLiteralToken extends EditableToken
2636 constructor(leading, trailing, text)
2638 super('single_quoted_string_literal', leading, trailing, text);
2642 return new SingleQuotedStringLiteralToken(this.leading, this.trailing, text);
2646 class DoubleQuotedStringLiteralToken extends EditableToken
2648 constructor(leading, trailing, text)
2650 super('double_quoted_string_literal', leading, trailing, text);
2654 return new DoubleQuotedStringLiteralToken(this.leading, this.trailing, text);
2658 class DoubleQuotedStringLiteralHeadToken extends EditableToken
2660 constructor(leading, trailing, text)
2662 super('double_quoted_string_literal_head', leading, trailing, text);
2666 return new DoubleQuotedStringLiteralHeadToken(this.leading, this.trailing, text);
2670 class StringLiteralBodyToken extends EditableToken
2672 constructor(leading, trailing, text)
2674 super('string_literal_body', leading, trailing, text);
2678 return new StringLiteralBodyToken(this.leading, this.trailing, text);
2682 class DoubleQuotedStringLiteralTailToken extends EditableToken
2684 constructor(leading, trailing, text)
2686 super('double_quoted_string_literal_tail', leading, trailing, text);
2690 return new DoubleQuotedStringLiteralTailToken(this.leading, this.trailing, text);
2694 class HeredocStringLiteralToken extends EditableToken
2696 constructor(leading, trailing, text)
2698 super('heredoc_string_literal', leading, trailing, text);
2702 return new HeredocStringLiteralToken(this.leading, this.trailing, text);
2706 class HeredocStringLiteralHeadToken extends EditableToken
2708 constructor(leading, trailing, text)
2710 super('heredoc_string_literal_head', leading, trailing, text);
2714 return new HeredocStringLiteralHeadToken(this.leading, this.trailing, text);
2718 class HeredocStringLiteralTailToken extends EditableToken
2720 constructor(leading, trailing, text)
2722 super('heredoc_string_literal_tail', leading, trailing, text);
2726 return new HeredocStringLiteralTailToken(this.leading, this.trailing, text);
2730 class NowdocStringLiteralToken extends EditableToken
2732 constructor(leading, trailing, text)
2734 super('nowdoc_string_literal', leading, trailing, text);
2738 return new NowdocStringLiteralToken(this.leading, this.trailing, text);
2742 class BooleanLiteralToken extends EditableToken
2744 constructor(leading, trailing, text)
2746 super('boolean_literal', leading, trailing, text);
2750 return new BooleanLiteralToken(this.leading, this.trailing, text);
2754 class XHPCategoryNameToken extends EditableToken
2756 constructor(leading, trailing, text)
2758 super('XHP_category_name', leading, trailing, text);
2762 return new XHPCategoryNameToken(this.leading, this.trailing, text);
2766 class XHPElementNameToken extends EditableToken
2768 constructor(leading, trailing, text)
2770 super('XHP_element_name', leading, trailing, text);
2774 return new XHPElementNameToken(this.leading, this.trailing, text);
2778 class XHPClassNameToken extends EditableToken
2780 constructor(leading, trailing, text)
2782 super('XHP_class_name', leading, trailing, text);
2786 return new XHPClassNameToken(this.leading, this.trailing, text);
2790 class XHPStringLiteralToken extends EditableToken
2792 constructor(leading, trailing, text)
2794 super('XHP_string_literal', leading, trailing, text);
2798 return new XHPStringLiteralToken(this.leading, this.trailing, text);
2802 class XHPBodyToken extends EditableToken
2804 constructor(leading, trailing, text)
2806 super('XHP_body', leading, trailing, text);
2810 return new XHPBodyToken(this.leading, this.trailing, text);
2814 class XHPCommentToken extends EditableToken
2816 constructor(leading, trailing, text)
2818 super('XHP_comment', leading, trailing, text);
2822 return new XHPCommentToken(this.leading, this.trailing, text);
2826 class MarkupToken extends EditableToken
2828 constructor(leading, trailing, text)
2830 super('markup', leading, trailing, text);
2834 return new MarkupToken(this.leading, this.trailing, text);
2840 class EditableTrivia extends EditableSyntax
2842 constructor(trivia_kind, text)
2844 super(trivia_kind, {});
2847 get text() { return this._text; }
2848 get full_text() { return this.text; }
2849 get width() { return this.text.length; }
2850 get is_trivia() { return true; }
2852 static from_json(json, position, source)
2854 let trivia_text = source.substring(position, position + json.width);
2858 return new WhiteSpace(trivia_text);
2860 return new EndOfLine(trivia_text);
2861 case 'delimited_comment':
2862 return new DelimitedComment(trivia_text);
2863 case 'single_line_comment':
2864 return new SingleLineComment(trivia_text);
2866 return new Unsafe(trivia_text);
2867 case 'unsafe_expression':
2868 return new UnsafeExpression(trivia_text);
2870 return new FixMe(trivia_text);
2871 case 'ignore_error':
2872 return new IgnoreError(trivia_text);
2873 case 'fall_through':
2874 return new FallThrough(trivia_text);
2875 case 'extra_token_error':
2876 return new ExtraTokenError(trivia_text);
2877 case 'after_halt_compiler':
2878 return new AfterHaltCompiler(trivia_text);
2880 default: throw 'unexpected json kind: ' + json.kind; // TODO: Better error
2884 rewrite(rewriter, parents)
2886 return rewriter(this, parents);
2894 class WhiteSpace extends EditableTrivia
2896 constructor(text) { super('whitespace', text); }
2899 return new WhiteSpace(text);
2903 class EndOfLine extends EditableTrivia
2905 constructor(text) { super('end_of_line', text); }
2908 return new EndOfLine(text);
2912 class DelimitedComment extends EditableTrivia
2914 constructor(text) { super('delimited_comment', text); }
2917 return new DelimitedComment(text);
2921 class SingleLineComment extends EditableTrivia
2923 constructor(text) { super('single_line_comment', text); }
2926 return new SingleLineComment(text);
2930 class Unsafe extends EditableTrivia
2932 constructor(text) { super('unsafe', text); }
2935 return new Unsafe(text);
2939 class UnsafeExpression extends EditableTrivia
2941 constructor(text) { super('unsafe_expression', text); }
2944 return new UnsafeExpression(text);
2948 class FixMe extends EditableTrivia
2950 constructor(text) { super('fix_me', text); }
2953 return new FixMe(text);
2957 class IgnoreError extends EditableTrivia
2959 constructor(text) { super('ignore_error', text); }
2962 return new IgnoreError(text);
2966 class FallThrough extends EditableTrivia
2968 constructor(text) { super('fall_through', text); }
2971 return new FallThrough(text);
2975 class ExtraTokenError extends EditableTrivia
2977 constructor(text) { super('extra_token_error', text); }
2980 return new ExtraTokenError(text);
2984 class AfterHaltCompiler extends EditableTrivia
2986 constructor(text) { super('after_halt_compiler', text); }
2989 return new AfterHaltCompiler(text);
2995 class Missing extends EditableSyntax
2999 super('missing', {});
3001 get is_missing() { return true; }
3002 static get missing() { return Missing._missing; }
3003 static from_json(json, position, source)
3005 return Missing._missing;
3007 rewrite(rewriter, parents)
3009 return rewriter(this, parents);
3016 Missing._missing = new Missing();
3018 class EndOfFile extends EditableSyntax
3023 super('end_of_file', {
3026 get token() { return this.children.token; }
3028 return new EndOfFile(
3031 rewrite(rewriter, parents)
3033 if (parents == undefined)
3035 let new_parents = parents.slice();
3036 new_parents.push(this);
3037 var token = this.token.rewrite(rewriter, new_parents);
3039 token === this.token)
3041 return rewriter(this, parents);
3045 return rewriter(new EndOfFile(
3049 static from_json(json, position, source)
3051 let token = EditableSyntax.from_json(
3052 json.end_of_file_token, position, source);
3053 position += token.width;
3054 return new EndOfFile(
3059 if (EndOfFile._children_keys == null)
3060 EndOfFile._children_keys = [
3062 return EndOfFile._children_keys;
3065 class Script extends EditableSyntax
3071 declarations: declarations });
3073 get declarations() { return this.children.declarations; }
3074 with_declarations(declarations){
3078 rewrite(rewriter, parents)
3080 if (parents == undefined)
3082 let new_parents = parents.slice();
3083 new_parents.push(this);
3084 var declarations = this.declarations.rewrite(rewriter, new_parents);
3086 declarations === this.declarations)
3088 return rewriter(this, parents);
3092 return rewriter(new Script(
3093 declarations), parents);
3096 static from_json(json, position, source)
3098 let declarations = EditableSyntax.from_json(
3099 json.script_declarations, position, source);
3100 position += declarations.width;
3106 if (Script._children_keys == null)
3107 Script._children_keys = [
3109 return Script._children_keys;
3112 class QualifiedName extends EditableSyntax
3117 super('qualified_name', {
3120 get parts() { return this.children.parts; }
3122 return new QualifiedName(
3125 rewrite(rewriter, parents)
3127 if (parents == undefined)
3129 let new_parents = parents.slice();
3130 new_parents.push(this);
3131 var parts = this.parts.rewrite(rewriter, new_parents);
3133 parts === this.parts)
3135 return rewriter(this, parents);
3139 return rewriter(new QualifiedName(
3143 static from_json(json, position, source)
3145 let parts = EditableSyntax.from_json(
3146 json.qualified_name_parts, position, source);
3147 position += parts.width;
3148 return new QualifiedName(
3153 if (QualifiedName._children_keys == null)
3154 QualifiedName._children_keys = [
3156 return QualifiedName._children_keys;
3159 class SimpleTypeSpecifier extends EditableSyntax
3164 super('simple_type_specifier', {
3165 specifier: specifier });
3167 get specifier() { return this.children.specifier; }
3168 with_specifier(specifier){
3169 return new SimpleTypeSpecifier(
3172 rewrite(rewriter, parents)
3174 if (parents == undefined)
3176 let new_parents = parents.slice();
3177 new_parents.push(this);
3178 var specifier = this.specifier.rewrite(rewriter, new_parents);
3180 specifier === this.specifier)
3182 return rewriter(this, parents);
3186 return rewriter(new SimpleTypeSpecifier(
3187 specifier), parents);
3190 static from_json(json, position, source)
3192 let specifier = EditableSyntax.from_json(
3193 json.simple_type_specifier, position, source);
3194 position += specifier.width;
3195 return new SimpleTypeSpecifier(
3200 if (SimpleTypeSpecifier._children_keys == null)
3201 SimpleTypeSpecifier._children_keys = [
3203 return SimpleTypeSpecifier._children_keys;
3206 class LiteralExpression extends EditableSyntax
3212 expression: expression });
3214 get expression() { return this.children.expression; }
3215 with_expression(expression){
3216 return new LiteralExpression(
3219 rewrite(rewriter, parents)
3221 if (parents == undefined)
3223 let new_parents = parents.slice();
3224 new_parents.push(this);
3225 var expression = this.expression.rewrite(rewriter, new_parents);
3227 expression === this.expression)
3229 return rewriter(this, parents);
3233 return rewriter(new LiteralExpression(
3234 expression), parents);
3237 static from_json(json, position, source)
3239 let expression = EditableSyntax.from_json(
3240 json.literal_expression, position, source);
3241 position += expression.width;
3242 return new LiteralExpression(
3247 if (LiteralExpression._children_keys == null)
3248 LiteralExpression._children_keys = [
3250 return LiteralExpression._children_keys;
3253 class PrefixedStringExpression extends EditableSyntax
3259 super('prefixed_string', {
3263 get name() { return this.children.name; }
3264 get str() { return this.children.str; }
3266 return new PrefixedStringExpression(
3271 return new PrefixedStringExpression(
3275 rewrite(rewriter, parents)
3277 if (parents == undefined)
3279 let new_parents = parents.slice();
3280 new_parents.push(this);
3281 var name = this.name.rewrite(rewriter, new_parents);
3282 var str = this.str.rewrite(rewriter, new_parents);
3284 name === this.name &&
3287 return rewriter(this, parents);
3291 return rewriter(new PrefixedStringExpression(
3296 static from_json(json, position, source)
3298 let name = EditableSyntax.from_json(
3299 json.prefixed_string_name, position, source);
3300 position += name.width;
3301 let str = EditableSyntax.from_json(
3302 json.prefixed_string_str, position, source);
3303 position += str.width;
3304 return new PrefixedStringExpression(
3310 if (PrefixedStringExpression._children_keys == null)
3311 PrefixedStringExpression._children_keys = [
3314 return PrefixedStringExpression._children_keys;
3317 class VariableExpression extends EditableSyntax
3323 expression: expression });
3325 get expression() { return this.children.expression; }
3326 with_expression(expression){
3327 return new VariableExpression(
3330 rewrite(rewriter, parents)
3332 if (parents == undefined)
3334 let new_parents = parents.slice();
3335 new_parents.push(this);
3336 var expression = this.expression.rewrite(rewriter, new_parents);
3338 expression === this.expression)
3340 return rewriter(this, parents);
3344 return rewriter(new VariableExpression(
3345 expression), parents);
3348 static from_json(json, position, source)
3350 let expression = EditableSyntax.from_json(
3351 json.variable_expression, position, source);
3352 position += expression.width;
3353 return new VariableExpression(
3358 if (VariableExpression._children_keys == null)
3359 VariableExpression._children_keys = [
3361 return VariableExpression._children_keys;
3364 class PipeVariableExpression extends EditableSyntax
3369 super('pipe_variable', {
3370 expression: expression });
3372 get expression() { return this.children.expression; }
3373 with_expression(expression){
3374 return new PipeVariableExpression(
3377 rewrite(rewriter, parents)
3379 if (parents == undefined)
3381 let new_parents = parents.slice();
3382 new_parents.push(this);
3383 var expression = this.expression.rewrite(rewriter, new_parents);
3385 expression === this.expression)
3387 return rewriter(this, parents);
3391 return rewriter(new PipeVariableExpression(
3392 expression), parents);
3395 static from_json(json, position, source)
3397 let expression = EditableSyntax.from_json(
3398 json.pipe_variable_expression, position, source);
3399 position += expression.width;
3400 return new PipeVariableExpression(
3405 if (PipeVariableExpression._children_keys == null)
3406 PipeVariableExpression._children_keys = [
3408 return PipeVariableExpression._children_keys;
3411 class FileAttributeSpecification extends EditableSyntax
3420 super('file_attribute_specification', {
3421 left_double_angle: left_double_angle,
3424 attributes: attributes,
3425 right_double_angle: right_double_angle });
3427 get left_double_angle() { return this.children.left_double_angle; }
3428 get keyword() { return this.children.keyword; }
3429 get colon() { return this.children.colon; }
3430 get attributes() { return this.children.attributes; }
3431 get right_double_angle() { return this.children.right_double_angle; }
3432 with_left_double_angle(left_double_angle){
3433 return new FileAttributeSpecification(
3438 this.right_double_angle);
3440 with_keyword(keyword){
3441 return new FileAttributeSpecification(
3442 this.left_double_angle,
3446 this.right_double_angle);
3449 return new FileAttributeSpecification(
3450 this.left_double_angle,
3454 this.right_double_angle);
3456 with_attributes(attributes){
3457 return new FileAttributeSpecification(
3458 this.left_double_angle,
3462 this.right_double_angle);
3464 with_right_double_angle(right_double_angle){
3465 return new FileAttributeSpecification(
3466 this.left_double_angle,
3470 right_double_angle);
3472 rewrite(rewriter, parents)
3474 if (parents == undefined)
3476 let new_parents = parents.slice();
3477 new_parents.push(this);
3478 var left_double_angle = this.left_double_angle.rewrite(rewriter, new_parents);
3479 var keyword = this.keyword.rewrite(rewriter, new_parents);
3480 var colon = this.colon.rewrite(rewriter, new_parents);
3481 var attributes = this.attributes.rewrite(rewriter, new_parents);
3482 var right_double_angle = this.right_double_angle.rewrite(rewriter, new_parents);
3484 left_double_angle === this.left_double_angle &&
3485 keyword === this.keyword &&
3486 colon === this.colon &&
3487 attributes === this.attributes &&
3488 right_double_angle === this.right_double_angle)
3490 return rewriter(this, parents);
3494 return rewriter(new FileAttributeSpecification(
3499 right_double_angle), parents);
3502 static from_json(json, position, source)
3504 let left_double_angle = EditableSyntax.from_json(
3505 json.file_attribute_specification_left_double_angle, position, source);
3506 position += left_double_angle.width;
3507 let keyword = EditableSyntax.from_json(
3508 json.file_attribute_specification_keyword, position, source);
3509 position += keyword.width;
3510 let colon = EditableSyntax.from_json(
3511 json.file_attribute_specification_colon, position, source);
3512 position += colon.width;
3513 let attributes = EditableSyntax.from_json(
3514 json.file_attribute_specification_attributes, position, source);
3515 position += attributes.width;
3516 let right_double_angle = EditableSyntax.from_json(
3517 json.file_attribute_specification_right_double_angle, position, source);
3518 position += right_double_angle.width;
3519 return new FileAttributeSpecification(
3524 right_double_angle);
3528 if (FileAttributeSpecification._children_keys == null)
3529 FileAttributeSpecification._children_keys = [
3530 'left_double_angle',
3534 'right_double_angle'];
3535 return FileAttributeSpecification._children_keys;
3538 class EnumDeclaration extends EditableSyntax
3551 super('enum_declaration', {
3552 attribute_spec: attribute_spec,
3558 left_brace: left_brace,
3559 enumerators: enumerators,
3560 right_brace: right_brace });
3562 get attribute_spec() { return this.children.attribute_spec; }
3563 get keyword() { return this.children.keyword; }
3564 get name() { return this.children.name; }
3565 get colon() { return this.children.colon; }
3566 get base() { return this.children.base; }
3567 get type() { return this.children.type; }
3568 get left_brace() { return this.children.left_brace; }
3569 get enumerators() { return this.children.enumerators; }
3570 get right_brace() { return this.children.right_brace; }
3571 with_attribute_spec(attribute_spec){
3572 return new EnumDeclaration(
3583 with_keyword(keyword){
3584 return new EnumDeclaration(
3585 this.attribute_spec,
3596 return new EnumDeclaration(
3597 this.attribute_spec,
3608 return new EnumDeclaration(
3609 this.attribute_spec,
3620 return new EnumDeclaration(
3621 this.attribute_spec,
3632 return new EnumDeclaration(
3633 this.attribute_spec,
3643 with_left_brace(left_brace){
3644 return new EnumDeclaration(
3645 this.attribute_spec,
3655 with_enumerators(enumerators){
3656 return new EnumDeclaration(
3657 this.attribute_spec,
3667 with_right_brace(right_brace){
3668 return new EnumDeclaration(
3669 this.attribute_spec,
3679 rewrite(rewriter, parents)
3681 if (parents == undefined)
3683 let new_parents = parents.slice();
3684 new_parents.push(this);
3685 var attribute_spec = this.attribute_spec.rewrite(rewriter, new_parents);
3686 var keyword = this.keyword.rewrite(rewriter, new_parents);
3687 var name = this.name.rewrite(rewriter, new_parents);
3688 var colon = this.colon.rewrite(rewriter, new_parents);
3689 var base = this.base.rewrite(rewriter, new_parents);
3690 var type = this.type.rewrite(rewriter, new_parents);
3691 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
3692 var enumerators = this.enumerators.rewrite(rewriter, new_parents);
3693 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
3695 attribute_spec === this.attribute_spec &&
3696 keyword === this.keyword &&
3697 name === this.name &&
3698 colon === this.colon &&
3699 base === this.base &&
3700 type === this.type &&
3701 left_brace === this.left_brace &&
3702 enumerators === this.enumerators &&
3703 right_brace === this.right_brace)
3705 return rewriter(this, parents);
3709 return rewriter(new EnumDeclaration(
3718 right_brace), parents);
3721 static from_json(json, position, source)
3723 let attribute_spec = EditableSyntax.from_json(
3724 json.enum_attribute_spec, position, source);
3725 position += attribute_spec.width;
3726 let keyword = EditableSyntax.from_json(
3727 json.enum_keyword, position, source);
3728 position += keyword.width;
3729 let name = EditableSyntax.from_json(
3730 json.enum_name, position, source);
3731 position += name.width;
3732 let colon = EditableSyntax.from_json(
3733 json.enum_colon, position, source);
3734 position += colon.width;
3735 let base = EditableSyntax.from_json(
3736 json.enum_base, position, source);
3737 position += base.width;
3738 let type = EditableSyntax.from_json(
3739 json.enum_type, position, source);
3740 position += type.width;
3741 let left_brace = EditableSyntax.from_json(
3742 json.enum_left_brace, position, source);
3743 position += left_brace.width;
3744 let enumerators = EditableSyntax.from_json(
3745 json.enum_enumerators, position, source);
3746 position += enumerators.width;
3747 let right_brace = EditableSyntax.from_json(
3748 json.enum_right_brace, position, source);
3749 position += right_brace.width;
3750 return new EnumDeclaration(
3763 if (EnumDeclaration._children_keys == null)
3764 EnumDeclaration._children_keys = [
3774 return EnumDeclaration._children_keys;
3777 class Enumerator extends EditableSyntax
3785 super('enumerator', {
3789 semicolon: semicolon });
3791 get name() { return this.children.name; }
3792 get equal() { return this.children.equal; }
3793 get value() { return this.children.value; }
3794 get semicolon() { return this.children.semicolon; }
3796 return new Enumerator(
3803 return new Enumerator(
3810 return new Enumerator(
3816 with_semicolon(semicolon){
3817 return new Enumerator(
3823 rewrite(rewriter, parents)
3825 if (parents == undefined)
3827 let new_parents = parents.slice();
3828 new_parents.push(this);
3829 var name = this.name.rewrite(rewriter, new_parents);
3830 var equal = this.equal.rewrite(rewriter, new_parents);
3831 var value = this.value.rewrite(rewriter, new_parents);
3832 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
3834 name === this.name &&
3835 equal === this.equal &&
3836 value === this.value &&
3837 semicolon === this.semicolon)
3839 return rewriter(this, parents);
3843 return rewriter(new Enumerator(
3847 semicolon), parents);
3850 static from_json(json, position, source)
3852 let name = EditableSyntax.from_json(
3853 json.enumerator_name, position, source);
3854 position += name.width;
3855 let equal = EditableSyntax.from_json(
3856 json.enumerator_equal, position, source);
3857 position += equal.width;
3858 let value = EditableSyntax.from_json(
3859 json.enumerator_value, position, source);
3860 position += value.width;
3861 let semicolon = EditableSyntax.from_json(
3862 json.enumerator_semicolon, position, source);
3863 position += semicolon.width;
3864 return new Enumerator(
3872 if (Enumerator._children_keys == null)
3873 Enumerator._children_keys = [
3878 return Enumerator._children_keys;
3881 class AliasDeclaration extends EditableSyntax
3893 super('alias_declaration', {
3894 attribute_spec: attribute_spec,
3897 generic_parameter: generic_parameter,
3898 constraint: constraint,
3901 semicolon: semicolon });
3903 get attribute_spec() { return this.children.attribute_spec; }
3904 get keyword() { return this.children.keyword; }
3905 get name() { return this.children.name; }
3906 get generic_parameter() { return this.children.generic_parameter; }
3907 get constraint() { return this.children.constraint; }
3908 get equal() { return this.children.equal; }
3909 get type() { return this.children.type; }
3910 get semicolon() { return this.children.semicolon; }
3911 with_attribute_spec(attribute_spec){
3912 return new AliasDeclaration(
3916 this.generic_parameter,
3922 with_keyword(keyword){
3923 return new AliasDeclaration(
3924 this.attribute_spec,
3927 this.generic_parameter,
3934 return new AliasDeclaration(
3935 this.attribute_spec,
3938 this.generic_parameter,
3944 with_generic_parameter(generic_parameter){
3945 return new AliasDeclaration(
3946 this.attribute_spec,
3955 with_constraint(constraint){
3956 return new AliasDeclaration(
3957 this.attribute_spec,
3960 this.generic_parameter,
3967 return new AliasDeclaration(
3968 this.attribute_spec,
3971 this.generic_parameter,
3978 return new AliasDeclaration(
3979 this.attribute_spec,
3982 this.generic_parameter,
3988 with_semicolon(semicolon){
3989 return new AliasDeclaration(
3990 this.attribute_spec,
3993 this.generic_parameter,
3999 rewrite(rewriter, parents)
4001 if (parents == undefined)
4003 let new_parents = parents.slice();
4004 new_parents.push(this);
4005 var attribute_spec = this.attribute_spec.rewrite(rewriter, new_parents);
4006 var keyword = this.keyword.rewrite(rewriter, new_parents);
4007 var name = this.name.rewrite(rewriter, new_parents);
4008 var generic_parameter = this.generic_parameter.rewrite(rewriter, new_parents);
4009 var constraint = this.constraint.rewrite(rewriter, new_parents);
4010 var equal = this.equal.rewrite(rewriter, new_parents);
4011 var type = this.type.rewrite(rewriter, new_parents);
4012 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
4014 attribute_spec === this.attribute_spec &&
4015 keyword === this.keyword &&
4016 name === this.name &&
4017 generic_parameter === this.generic_parameter &&
4018 constraint === this.constraint &&
4019 equal === this.equal &&
4020 type === this.type &&
4021 semicolon === this.semicolon)
4023 return rewriter(this, parents);
4027 return rewriter(new AliasDeclaration(
4035 semicolon), parents);
4038 static from_json(json, position, source)
4040 let attribute_spec = EditableSyntax.from_json(
4041 json.alias_attribute_spec, position, source);
4042 position += attribute_spec.width;
4043 let keyword = EditableSyntax.from_json(
4044 json.alias_keyword, position, source);
4045 position += keyword.width;
4046 let name = EditableSyntax.from_json(
4047 json.alias_name, position, source);
4048 position += name.width;
4049 let generic_parameter = EditableSyntax.from_json(
4050 json.alias_generic_parameter, position, source);
4051 position += generic_parameter.width;
4052 let constraint = EditableSyntax.from_json(
4053 json.alias_constraint, position, source);
4054 position += constraint.width;
4055 let equal = EditableSyntax.from_json(
4056 json.alias_equal, position, source);
4057 position += equal.width;
4058 let type = EditableSyntax.from_json(
4059 json.alias_type, position, source);
4060 position += type.width;
4061 let semicolon = EditableSyntax.from_json(
4062 json.alias_semicolon, position, source);
4063 position += semicolon.width;
4064 return new AliasDeclaration(
4076 if (AliasDeclaration._children_keys == null)
4077 AliasDeclaration._children_keys = [
4081 'generic_parameter',
4086 return AliasDeclaration._children_keys;
4089 class PropertyDeclaration extends EditableSyntax
4098 super('property_declaration', {
4099 attribute_spec: attribute_spec,
4100 modifiers: modifiers,
4102 declarators: declarators,
4103 semicolon: semicolon });
4105 get attribute_spec() { return this.children.attribute_spec; }
4106 get modifiers() { return this.children.modifiers; }
4107 get type() { return this.children.type; }
4108 get declarators() { return this.children.declarators; }
4109 get semicolon() { return this.children.semicolon; }
4110 with_attribute_spec(attribute_spec){
4111 return new PropertyDeclaration(
4118 with_modifiers(modifiers){
4119 return new PropertyDeclaration(
4120 this.attribute_spec,
4127 return new PropertyDeclaration(
4128 this.attribute_spec,
4134 with_declarators(declarators){
4135 return new PropertyDeclaration(
4136 this.attribute_spec,
4142 with_semicolon(semicolon){
4143 return new PropertyDeclaration(
4144 this.attribute_spec,
4150 rewrite(rewriter, parents)
4152 if (parents == undefined)
4154 let new_parents = parents.slice();
4155 new_parents.push(this);
4156 var attribute_spec = this.attribute_spec.rewrite(rewriter, new_parents);
4157 var modifiers = this.modifiers.rewrite(rewriter, new_parents);
4158 var type = this.type.rewrite(rewriter, new_parents);
4159 var declarators = this.declarators.rewrite(rewriter, new_parents);
4160 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
4162 attribute_spec === this.attribute_spec &&
4163 modifiers === this.modifiers &&
4164 type === this.type &&
4165 declarators === this.declarators &&
4166 semicolon === this.semicolon)
4168 return rewriter(this, parents);
4172 return rewriter(new PropertyDeclaration(
4177 semicolon), parents);
4180 static from_json(json, position, source)
4182 let attribute_spec = EditableSyntax.from_json(
4183 json.property_attribute_spec, position, source);
4184 position += attribute_spec.width;
4185 let modifiers = EditableSyntax.from_json(
4186 json.property_modifiers, position, source);
4187 position += modifiers.width;
4188 let type = EditableSyntax.from_json(
4189 json.property_type, position, source);
4190 position += type.width;
4191 let declarators = EditableSyntax.from_json(
4192 json.property_declarators, position, source);
4193 position += declarators.width;
4194 let semicolon = EditableSyntax.from_json(
4195 json.property_semicolon, position, source);
4196 position += semicolon.width;
4197 return new PropertyDeclaration(
4206 if (PropertyDeclaration._children_keys == null)
4207 PropertyDeclaration._children_keys = [
4213 return PropertyDeclaration._children_keys;
4216 class PropertyDeclarator extends EditableSyntax
4222 super('property_declarator', {
4224 initializer: initializer });
4226 get name() { return this.children.name; }
4227 get initializer() { return this.children.initializer; }
4229 return new PropertyDeclarator(
4233 with_initializer(initializer){
4234 return new PropertyDeclarator(
4238 rewrite(rewriter, parents)
4240 if (parents == undefined)
4242 let new_parents = parents.slice();
4243 new_parents.push(this);
4244 var name = this.name.rewrite(rewriter, new_parents);
4245 var initializer = this.initializer.rewrite(rewriter, new_parents);
4247 name === this.name &&
4248 initializer === this.initializer)
4250 return rewriter(this, parents);
4254 return rewriter(new PropertyDeclarator(
4256 initializer), parents);
4259 static from_json(json, position, source)
4261 let name = EditableSyntax.from_json(
4262 json.property_name, position, source);
4263 position += name.width;
4264 let initializer = EditableSyntax.from_json(
4265 json.property_initializer, position, source);
4266 position += initializer.width;
4267 return new PropertyDeclarator(
4273 if (PropertyDeclarator._children_keys == null)
4274 PropertyDeclarator._children_keys = [
4277 return PropertyDeclarator._children_keys;
4280 class NamespaceDeclaration extends EditableSyntax
4287 super('namespace_declaration', {
4292 get keyword() { return this.children.keyword; }
4293 get name() { return this.children.name; }
4294 get body() { return this.children.body; }
4295 with_keyword(keyword){
4296 return new NamespaceDeclaration(
4302 return new NamespaceDeclaration(
4308 return new NamespaceDeclaration(
4313 rewrite(rewriter, parents)
4315 if (parents == undefined)
4317 let new_parents = parents.slice();
4318 new_parents.push(this);
4319 var keyword = this.keyword.rewrite(rewriter, new_parents);
4320 var name = this.name.rewrite(rewriter, new_parents);
4321 var body = this.body.rewrite(rewriter, new_parents);
4323 keyword === this.keyword &&
4324 name === this.name &&
4327 return rewriter(this, parents);
4331 return rewriter(new NamespaceDeclaration(
4337 static from_json(json, position, source)
4339 let keyword = EditableSyntax.from_json(
4340 json.namespace_keyword, position, source);
4341 position += keyword.width;
4342 let name = EditableSyntax.from_json(
4343 json.namespace_name, position, source);
4344 position += name.width;
4345 let body = EditableSyntax.from_json(
4346 json.namespace_body, position, source);
4347 position += body.width;
4348 return new NamespaceDeclaration(
4355 if (NamespaceDeclaration._children_keys == null)
4356 NamespaceDeclaration._children_keys = [
4360 return NamespaceDeclaration._children_keys;
4363 class NamespaceBody extends EditableSyntax
4370 super('namespace_body', {
4371 left_brace: left_brace,
4372 declarations: declarations,
4373 right_brace: right_brace });
4375 get left_brace() { return this.children.left_brace; }
4376 get declarations() { return this.children.declarations; }
4377 get right_brace() { return this.children.right_brace; }
4378 with_left_brace(left_brace){
4379 return new NamespaceBody(
4384 with_declarations(declarations){
4385 return new NamespaceBody(
4390 with_right_brace(right_brace){
4391 return new NamespaceBody(
4396 rewrite(rewriter, parents)
4398 if (parents == undefined)
4400 let new_parents = parents.slice();
4401 new_parents.push(this);
4402 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
4403 var declarations = this.declarations.rewrite(rewriter, new_parents);
4404 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
4406 left_brace === this.left_brace &&
4407 declarations === this.declarations &&
4408 right_brace === this.right_brace)
4410 return rewriter(this, parents);
4414 return rewriter(new NamespaceBody(
4417 right_brace), parents);
4420 static from_json(json, position, source)
4422 let left_brace = EditableSyntax.from_json(
4423 json.namespace_left_brace, position, source);
4424 position += left_brace.width;
4425 let declarations = EditableSyntax.from_json(
4426 json.namespace_declarations, position, source);
4427 position += declarations.width;
4428 let right_brace = EditableSyntax.from_json(
4429 json.namespace_right_brace, position, source);
4430 position += right_brace.width;
4431 return new NamespaceBody(
4438 if (NamespaceBody._children_keys == null)
4439 NamespaceBody._children_keys = [
4443 return NamespaceBody._children_keys;
4446 class NamespaceEmptyBody extends EditableSyntax
4451 super('namespace_empty_body', {
4452 semicolon: semicolon });
4454 get semicolon() { return this.children.semicolon; }
4455 with_semicolon(semicolon){
4456 return new NamespaceEmptyBody(
4459 rewrite(rewriter, parents)
4461 if (parents == undefined)
4463 let new_parents = parents.slice();
4464 new_parents.push(this);
4465 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
4467 semicolon === this.semicolon)
4469 return rewriter(this, parents);
4473 return rewriter(new NamespaceEmptyBody(
4474 semicolon), parents);
4477 static from_json(json, position, source)
4479 let semicolon = EditableSyntax.from_json(
4480 json.namespace_semicolon, position, source);
4481 position += semicolon.width;
4482 return new NamespaceEmptyBody(
4487 if (NamespaceEmptyBody._children_keys == null)
4488 NamespaceEmptyBody._children_keys = [
4490 return NamespaceEmptyBody._children_keys;
4493 class NamespaceUseDeclaration extends EditableSyntax
4501 super('namespace_use_declaration', {
4505 semicolon: semicolon });
4507 get keyword() { return this.children.keyword; }
4508 get kind() { return this.children.kind; }
4509 get clauses() { return this.children.clauses; }
4510 get semicolon() { return this.children.semicolon; }
4511 with_keyword(keyword){
4512 return new NamespaceUseDeclaration(
4519 return new NamespaceUseDeclaration(
4525 with_clauses(clauses){
4526 return new NamespaceUseDeclaration(
4532 with_semicolon(semicolon){
4533 return new NamespaceUseDeclaration(
4539 rewrite(rewriter, parents)
4541 if (parents == undefined)
4543 let new_parents = parents.slice();
4544 new_parents.push(this);
4545 var keyword = this.keyword.rewrite(rewriter, new_parents);
4546 var kind = this.kind.rewrite(rewriter, new_parents);
4547 var clauses = this.clauses.rewrite(rewriter, new_parents);
4548 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
4550 keyword === this.keyword &&
4551 kind === this.kind &&
4552 clauses === this.clauses &&
4553 semicolon === this.semicolon)
4555 return rewriter(this, parents);
4559 return rewriter(new NamespaceUseDeclaration(
4563 semicolon), parents);
4566 static from_json(json, position, source)
4568 let keyword = EditableSyntax.from_json(
4569 json.namespace_use_keyword, position, source);
4570 position += keyword.width;
4571 let kind = EditableSyntax.from_json(
4572 json.namespace_use_kind, position, source);
4573 position += kind.width;
4574 let clauses = EditableSyntax.from_json(
4575 json.namespace_use_clauses, position, source);
4576 position += clauses.width;
4577 let semicolon = EditableSyntax.from_json(
4578 json.namespace_use_semicolon, position, source);
4579 position += semicolon.width;
4580 return new NamespaceUseDeclaration(
4588 if (NamespaceUseDeclaration._children_keys == null)
4589 NamespaceUseDeclaration._children_keys = [
4594 return NamespaceUseDeclaration._children_keys;
4597 class NamespaceGroupUseDeclaration extends EditableSyntax
4608 super('namespace_group_use_declaration', {
4612 left_brace: left_brace,
4614 right_brace: right_brace,
4615 semicolon: semicolon });
4617 get keyword() { return this.children.keyword; }
4618 get kind() { return this.children.kind; }
4619 get prefix() { return this.children.prefix; }
4620 get left_brace() { return this.children.left_brace; }
4621 get clauses() { return this.children.clauses; }
4622 get right_brace() { return this.children.right_brace; }
4623 get semicolon() { return this.children.semicolon; }
4624 with_keyword(keyword){
4625 return new NamespaceGroupUseDeclaration(
4635 return new NamespaceGroupUseDeclaration(
4644 with_prefix(prefix){
4645 return new NamespaceGroupUseDeclaration(
4654 with_left_brace(left_brace){
4655 return new NamespaceGroupUseDeclaration(
4664 with_clauses(clauses){
4665 return new NamespaceGroupUseDeclaration(
4674 with_right_brace(right_brace){
4675 return new NamespaceGroupUseDeclaration(
4684 with_semicolon(semicolon){
4685 return new NamespaceGroupUseDeclaration(
4694 rewrite(rewriter, parents)
4696 if (parents == undefined)
4698 let new_parents = parents.slice();
4699 new_parents.push(this);
4700 var keyword = this.keyword.rewrite(rewriter, new_parents);
4701 var kind = this.kind.rewrite(rewriter, new_parents);
4702 var prefix = this.prefix.rewrite(rewriter, new_parents);
4703 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
4704 var clauses = this.clauses.rewrite(rewriter, new_parents);
4705 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
4706 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
4708 keyword === this.keyword &&
4709 kind === this.kind &&
4710 prefix === this.prefix &&
4711 left_brace === this.left_brace &&
4712 clauses === this.clauses &&
4713 right_brace === this.right_brace &&
4714 semicolon === this.semicolon)
4716 return rewriter(this, parents);
4720 return rewriter(new NamespaceGroupUseDeclaration(
4727 semicolon), parents);
4730 static from_json(json, position, source)
4732 let keyword = EditableSyntax.from_json(
4733 json.namespace_group_use_keyword, position, source);
4734 position += keyword.width;
4735 let kind = EditableSyntax.from_json(
4736 json.namespace_group_use_kind, position, source);
4737 position += kind.width;
4738 let prefix = EditableSyntax.from_json(
4739 json.namespace_group_use_prefix, position, source);
4740 position += prefix.width;
4741 let left_brace = EditableSyntax.from_json(
4742 json.namespace_group_use_left_brace, position, source);
4743 position += left_brace.width;
4744 let clauses = EditableSyntax.from_json(
4745 json.namespace_group_use_clauses, position, source);
4746 position += clauses.width;
4747 let right_brace = EditableSyntax.from_json(
4748 json.namespace_group_use_right_brace, position, source);
4749 position += right_brace.width;
4750 let semicolon = EditableSyntax.from_json(
4751 json.namespace_group_use_semicolon, position, source);
4752 position += semicolon.width;
4753 return new NamespaceGroupUseDeclaration(
4764 if (NamespaceGroupUseDeclaration._children_keys == null)
4765 NamespaceGroupUseDeclaration._children_keys = [
4773 return NamespaceGroupUseDeclaration._children_keys;
4776 class NamespaceUseClause extends EditableSyntax
4784 super('namespace_use_clause', {
4785 clause_kind: clause_kind,
4790 get clause_kind() { return this.children.clause_kind; }
4791 get name() { return this.children.name; }
4792 get as() { return this.children.as; }
4793 get alias() { return this.children.alias; }
4794 with_clause_kind(clause_kind){
4795 return new NamespaceUseClause(
4802 return new NamespaceUseClause(
4809 return new NamespaceUseClause(
4816 return new NamespaceUseClause(
4822 rewrite(rewriter, parents)
4824 if (parents == undefined)
4826 let new_parents = parents.slice();
4827 new_parents.push(this);
4828 var clause_kind = this.clause_kind.rewrite(rewriter, new_parents);
4829 var name = this.name.rewrite(rewriter, new_parents);
4830 var as = this.as.rewrite(rewriter, new_parents);
4831 var alias = this.alias.rewrite(rewriter, new_parents);
4833 clause_kind === this.clause_kind &&
4834 name === this.name &&
4836 alias === this.alias)
4838 return rewriter(this, parents);
4842 return rewriter(new NamespaceUseClause(
4849 static from_json(json, position, source)
4851 let clause_kind = EditableSyntax.from_json(
4852 json.namespace_use_clause_kind, position, source);
4853 position += clause_kind.width;
4854 let name = EditableSyntax.from_json(
4855 json.namespace_use_name, position, source);
4856 position += name.width;
4857 let as = EditableSyntax.from_json(
4858 json.namespace_use_as, position, source);
4859 position += as.width;
4860 let alias = EditableSyntax.from_json(
4861 json.namespace_use_alias, position, source);
4862 position += alias.width;
4863 return new NamespaceUseClause(
4871 if (NamespaceUseClause._children_keys == null)
4872 NamespaceUseClause._children_keys = [
4877 return NamespaceUseClause._children_keys;
4880 class FunctionDeclaration extends EditableSyntax
4887 super('function_declaration', {
4888 attribute_spec: attribute_spec,
4889 declaration_header: declaration_header,
4892 get attribute_spec() { return this.children.attribute_spec; }
4893 get declaration_header() { return this.children.declaration_header; }
4894 get body() { return this.children.body; }
4895 with_attribute_spec(attribute_spec){
4896 return new FunctionDeclaration(
4898 this.declaration_header,
4901 with_declaration_header(declaration_header){
4902 return new FunctionDeclaration(
4903 this.attribute_spec,
4908 return new FunctionDeclaration(
4909 this.attribute_spec,
4910 this.declaration_header,
4913 rewrite(rewriter, parents)
4915 if (parents == undefined)
4917 let new_parents = parents.slice();
4918 new_parents.push(this);
4919 var attribute_spec = this.attribute_spec.rewrite(rewriter, new_parents);
4920 var declaration_header = this.declaration_header.rewrite(rewriter, new_parents);
4921 var body = this.body.rewrite(rewriter, new_parents);
4923 attribute_spec === this.attribute_spec &&
4924 declaration_header === this.declaration_header &&
4927 return rewriter(this, parents);
4931 return rewriter(new FunctionDeclaration(
4937 static from_json(json, position, source)
4939 let attribute_spec = EditableSyntax.from_json(
4940 json.function_attribute_spec, position, source);
4941 position += attribute_spec.width;
4942 let declaration_header = EditableSyntax.from_json(
4943 json.function_declaration_header, position, source);
4944 position += declaration_header.width;
4945 let body = EditableSyntax.from_json(
4946 json.function_body, position, source);
4947 position += body.width;
4948 return new FunctionDeclaration(
4955 if (FunctionDeclaration._children_keys == null)
4956 FunctionDeclaration._children_keys = [
4958 'declaration_header',
4960 return FunctionDeclaration._children_keys;
4963 class FunctionDeclarationHeader extends EditableSyntax
4969 type_parameter_list,
4977 super('function_declaration_header', {
4978 modifiers: modifiers,
4981 type_parameter_list: type_parameter_list,
4982 left_paren: left_paren,
4983 parameter_list: parameter_list,
4984 right_paren: right_paren,
4987 where_clause: where_clause });
4989 get modifiers() { return this.children.modifiers; }
4990 get keyword() { return this.children.keyword; }
4991 get name() { return this.children.name; }
4992 get type_parameter_list() { return this.children.type_parameter_list; }
4993 get left_paren() { return this.children.left_paren; }
4994 get parameter_list() { return this.children.parameter_list; }
4995 get right_paren() { return this.children.right_paren; }
4996 get colon() { return this.children.colon; }
4997 get type() { return this.children.type; }
4998 get where_clause() { return this.children.where_clause; }
4999 with_modifiers(modifiers){
5000 return new FunctionDeclarationHeader(
5004 this.type_parameter_list,
5006 this.parameter_list,
5012 with_keyword(keyword){
5013 return new FunctionDeclarationHeader(
5017 this.type_parameter_list,
5019 this.parameter_list,
5026 return new FunctionDeclarationHeader(
5030 this.type_parameter_list,
5032 this.parameter_list,
5038 with_type_parameter_list(type_parameter_list){
5039 return new FunctionDeclarationHeader(
5043 type_parameter_list,
5045 this.parameter_list,
5051 with_left_paren(left_paren){
5052 return new FunctionDeclarationHeader(
5056 this.type_parameter_list,
5058 this.parameter_list,
5064 with_parameter_list(parameter_list){
5065 return new FunctionDeclarationHeader(
5069 this.type_parameter_list,
5077 with_right_paren(right_paren){
5078 return new FunctionDeclarationHeader(
5082 this.type_parameter_list,
5084 this.parameter_list,
5091 return new FunctionDeclarationHeader(
5095 this.type_parameter_list,
5097 this.parameter_list,
5104 return new FunctionDeclarationHeader(
5108 this.type_parameter_list,
5110 this.parameter_list,
5116 with_where_clause(where_clause){
5117 return new FunctionDeclarationHeader(
5121 this.type_parameter_list,
5123 this.parameter_list,
5129 rewrite(rewriter, parents)
5131 if (parents == undefined)
5133 let new_parents = parents.slice();
5134 new_parents.push(this);
5135 var modifiers = this.modifiers.rewrite(rewriter, new_parents);
5136 var keyword = this.keyword.rewrite(rewriter, new_parents);
5137 var name = this.name.rewrite(rewriter, new_parents);
5138 var type_parameter_list = this.type_parameter_list.rewrite(rewriter, new_parents);
5139 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
5140 var parameter_list = this.parameter_list.rewrite(rewriter, new_parents);
5141 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
5142 var colon = this.colon.rewrite(rewriter, new_parents);
5143 var type = this.type.rewrite(rewriter, new_parents);
5144 var where_clause = this.where_clause.rewrite(rewriter, new_parents);
5146 modifiers === this.modifiers &&
5147 keyword === this.keyword &&
5148 name === this.name &&
5149 type_parameter_list === this.type_parameter_list &&
5150 left_paren === this.left_paren &&
5151 parameter_list === this.parameter_list &&
5152 right_paren === this.right_paren &&
5153 colon === this.colon &&
5154 type === this.type &&
5155 where_clause === this.where_clause)
5157 return rewriter(this, parents);
5161 return rewriter(new FunctionDeclarationHeader(
5165 type_parameter_list,
5171 where_clause), parents);
5174 static from_json(json, position, source)
5176 let modifiers = EditableSyntax.from_json(
5177 json.function_modifiers, position, source);
5178 position += modifiers.width;
5179 let keyword = EditableSyntax.from_json(
5180 json.function_keyword, position, source);
5181 position += keyword.width;
5182 let name = EditableSyntax.from_json(
5183 json.function_name, position, source);
5184 position += name.width;
5185 let type_parameter_list = EditableSyntax.from_json(
5186 json.function_type_parameter_list, position, source);
5187 position += type_parameter_list.width;
5188 let left_paren = EditableSyntax.from_json(
5189 json.function_left_paren, position, source);
5190 position += left_paren.width;
5191 let parameter_list = EditableSyntax.from_json(
5192 json.function_parameter_list, position, source);
5193 position += parameter_list.width;
5194 let right_paren = EditableSyntax.from_json(
5195 json.function_right_paren, position, source);
5196 position += right_paren.width;
5197 let colon = EditableSyntax.from_json(
5198 json.function_colon, position, source);
5199 position += colon.width;
5200 let type = EditableSyntax.from_json(
5201 json.function_type, position, source);
5202 position += type.width;
5203 let where_clause = EditableSyntax.from_json(
5204 json.function_where_clause, position, source);
5205 position += where_clause.width;
5206 return new FunctionDeclarationHeader(
5210 type_parameter_list,
5220 if (FunctionDeclarationHeader._children_keys == null)
5221 FunctionDeclarationHeader._children_keys = [
5225 'type_parameter_list',
5232 return FunctionDeclarationHeader._children_keys;
5235 class WhereClause extends EditableSyntax
5241 super('where_clause', {
5243 constraints: constraints });
5245 get keyword() { return this.children.keyword; }
5246 get constraints() { return this.children.constraints; }
5247 with_keyword(keyword){
5248 return new WhereClause(
5252 with_constraints(constraints){
5253 return new WhereClause(
5257 rewrite(rewriter, parents)
5259 if (parents == undefined)
5261 let new_parents = parents.slice();
5262 new_parents.push(this);
5263 var keyword = this.keyword.rewrite(rewriter, new_parents);
5264 var constraints = this.constraints.rewrite(rewriter, new_parents);
5266 keyword === this.keyword &&
5267 constraints === this.constraints)
5269 return rewriter(this, parents);
5273 return rewriter(new WhereClause(
5275 constraints), parents);
5278 static from_json(json, position, source)
5280 let keyword = EditableSyntax.from_json(
5281 json.where_clause_keyword, position, source);
5282 position += keyword.width;
5283 let constraints = EditableSyntax.from_json(
5284 json.where_clause_constraints, position, source);
5285 position += constraints.width;
5286 return new WhereClause(
5292 if (WhereClause._children_keys == null)
5293 WhereClause._children_keys = [
5296 return WhereClause._children_keys;
5299 class WhereConstraint extends EditableSyntax
5306 super('where_constraint', {
5307 left_type: left_type,
5309 right_type: right_type });
5311 get left_type() { return this.children.left_type; }
5312 get operator() { return this.children.operator; }
5313 get right_type() { return this.children.right_type; }
5314 with_left_type(left_type){
5315 return new WhereConstraint(
5320 with_operator(operator){
5321 return new WhereConstraint(
5326 with_right_type(right_type){
5327 return new WhereConstraint(
5332 rewrite(rewriter, parents)
5334 if (parents == undefined)
5336 let new_parents = parents.slice();
5337 new_parents.push(this);
5338 var left_type = this.left_type.rewrite(rewriter, new_parents);
5339 var operator = this.operator.rewrite(rewriter, new_parents);
5340 var right_type = this.right_type.rewrite(rewriter, new_parents);
5342 left_type === this.left_type &&
5343 operator === this.operator &&
5344 right_type === this.right_type)
5346 return rewriter(this, parents);
5350 return rewriter(new WhereConstraint(
5353 right_type), parents);
5356 static from_json(json, position, source)
5358 let left_type = EditableSyntax.from_json(
5359 json.where_constraint_left_type, position, source);
5360 position += left_type.width;
5361 let operator = EditableSyntax.from_json(
5362 json.where_constraint_operator, position, source);
5363 position += operator.width;
5364 let right_type = EditableSyntax.from_json(
5365 json.where_constraint_right_type, position, source);
5366 position += right_type.width;
5367 return new WhereConstraint(
5374 if (WhereConstraint._children_keys == null)
5375 WhereConstraint._children_keys = [
5379 return WhereConstraint._children_keys;
5382 class MethodishDeclaration extends EditableSyntax
5386 function_decl_header,
5390 super('methodish_declaration', {
5391 attribute: attribute,
5392 function_decl_header: function_decl_header,
5393 function_body: function_body,
5394 semicolon: semicolon });
5396 get attribute() { return this.children.attribute; }
5397 get function_decl_header() { return this.children.function_decl_header; }
5398 get function_body() { return this.children.function_body; }
5399 get semicolon() { return this.children.semicolon; }
5400 with_attribute(attribute){
5401 return new MethodishDeclaration(
5403 this.function_decl_header,
5407 with_function_decl_header(function_decl_header){
5408 return new MethodishDeclaration(
5410 function_decl_header,
5414 with_function_body(function_body){
5415 return new MethodishDeclaration(
5417 this.function_decl_header,
5421 with_semicolon(semicolon){
5422 return new MethodishDeclaration(
5424 this.function_decl_header,
5428 rewrite(rewriter, parents)
5430 if (parents == undefined)
5432 let new_parents = parents.slice();
5433 new_parents.push(this);
5434 var attribute = this.attribute.rewrite(rewriter, new_parents);
5435 var function_decl_header = this.function_decl_header.rewrite(rewriter, new_parents);
5436 var function_body = this.function_body.rewrite(rewriter, new_parents);
5437 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
5439 attribute === this.attribute &&
5440 function_decl_header === this.function_decl_header &&
5441 function_body === this.function_body &&
5442 semicolon === this.semicolon)
5444 return rewriter(this, parents);
5448 return rewriter(new MethodishDeclaration(
5450 function_decl_header,
5452 semicolon), parents);
5455 static from_json(json, position, source)
5457 let attribute = EditableSyntax.from_json(
5458 json.methodish_attribute, position, source);
5459 position += attribute.width;
5460 let function_decl_header = EditableSyntax.from_json(
5461 json.methodish_function_decl_header, position, source);
5462 position += function_decl_header.width;
5463 let function_body = EditableSyntax.from_json(
5464 json.methodish_function_body, position, source);
5465 position += function_body.width;
5466 let semicolon = EditableSyntax.from_json(
5467 json.methodish_semicolon, position, source);
5468 position += semicolon.width;
5469 return new MethodishDeclaration(
5471 function_decl_header,
5477 if (MethodishDeclaration._children_keys == null)
5478 MethodishDeclaration._children_keys = [
5480 'function_decl_header',
5483 return MethodishDeclaration._children_keys;
5486 class MethodishTraitResolution extends EditableSyntax
5490 function_decl_header,
5495 super('methodish_trait_resolution', {
5496 attribute: attribute,
5497 function_decl_header: function_decl_header,
5500 semicolon: semicolon });
5502 get attribute() { return this.children.attribute; }
5503 get function_decl_header() { return this.children.function_decl_header; }
5504 get equal() { return this.children.equal; }
5505 get name() { return this.children.name; }
5506 get semicolon() { return this.children.semicolon; }
5507 with_attribute(attribute){
5508 return new MethodishTraitResolution(
5510 this.function_decl_header,
5515 with_function_decl_header(function_decl_header){
5516 return new MethodishTraitResolution(
5518 function_decl_header,
5524 return new MethodishTraitResolution(
5526 this.function_decl_header,
5532 return new MethodishTraitResolution(
5534 this.function_decl_header,
5539 with_semicolon(semicolon){
5540 return new MethodishTraitResolution(
5542 this.function_decl_header,
5547 rewrite(rewriter, parents)
5549 if (parents == undefined)
5551 let new_parents = parents.slice();
5552 new_parents.push(this);
5553 var attribute = this.attribute.rewrite(rewriter, new_parents);
5554 var function_decl_header = this.function_decl_header.rewrite(rewriter, new_parents);
5555 var equal = this.equal.rewrite(rewriter, new_parents);
5556 var name = this.name.rewrite(rewriter, new_parents);
5557 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
5559 attribute === this.attribute &&
5560 function_decl_header === this.function_decl_header &&
5561 equal === this.equal &&
5562 name === this.name &&
5563 semicolon === this.semicolon)
5565 return rewriter(this, parents);
5569 return rewriter(new MethodishTraitResolution(
5571 function_decl_header,
5574 semicolon), parents);
5577 static from_json(json, position, source)
5579 let attribute = EditableSyntax.from_json(
5580 json.methodish_trait_attribute, position, source);
5581 position += attribute.width;
5582 let function_decl_header = EditableSyntax.from_json(
5583 json.methodish_trait_function_decl_header, position, source);
5584 position += function_decl_header.width;
5585 let equal = EditableSyntax.from_json(
5586 json.methodish_trait_equal, position, source);
5587 position += equal.width;
5588 let name = EditableSyntax.from_json(
5589 json.methodish_trait_name, position, source);
5590 position += name.width;
5591 let semicolon = EditableSyntax.from_json(
5592 json.methodish_trait_semicolon, position, source);
5593 position += semicolon.width;
5594 return new MethodishTraitResolution(
5596 function_decl_header,
5603 if (MethodishTraitResolution._children_keys == null)
5604 MethodishTraitResolution._children_keys = [
5606 'function_decl_header',
5610 return MethodishTraitResolution._children_keys;
5613 class ClassishDeclaration extends EditableSyntax
5627 super('classish_declaration', {
5628 attribute: attribute,
5629 modifiers: modifiers,
5632 type_parameters: type_parameters,
5633 extends_keyword: extends_keyword,
5634 extends_list: extends_list,
5635 implements_keyword: implements_keyword,
5636 implements_list: implements_list,
5639 get attribute() { return this.children.attribute; }
5640 get modifiers() { return this.children.modifiers; }
5641 get keyword() { return this.children.keyword; }
5642 get name() { return this.children.name; }
5643 get type_parameters() { return this.children.type_parameters; }
5644 get extends_keyword() { return this.children.extends_keyword; }
5645 get extends_list() { return this.children.extends_list; }
5646 get implements_keyword() { return this.children.implements_keyword; }
5647 get implements_list() { return this.children.implements_list; }
5648 get body() { return this.children.body; }
5649 with_attribute(attribute){
5650 return new ClassishDeclaration(
5655 this.type_parameters,
5656 this.extends_keyword,
5658 this.implements_keyword,
5659 this.implements_list,
5662 with_modifiers(modifiers){
5663 return new ClassishDeclaration(
5668 this.type_parameters,
5669 this.extends_keyword,
5671 this.implements_keyword,
5672 this.implements_list,
5675 with_keyword(keyword){
5676 return new ClassishDeclaration(
5681 this.type_parameters,
5682 this.extends_keyword,
5684 this.implements_keyword,
5685 this.implements_list,
5689 return new ClassishDeclaration(
5694 this.type_parameters,
5695 this.extends_keyword,
5697 this.implements_keyword,
5698 this.implements_list,
5701 with_type_parameters(type_parameters){
5702 return new ClassishDeclaration(
5708 this.extends_keyword,
5710 this.implements_keyword,
5711 this.implements_list,
5714 with_extends_keyword(extends_keyword){
5715 return new ClassishDeclaration(
5720 this.type_parameters,
5723 this.implements_keyword,
5724 this.implements_list,
5727 with_extends_list(extends_list){
5728 return new ClassishDeclaration(
5733 this.type_parameters,
5734 this.extends_keyword,
5736 this.implements_keyword,
5737 this.implements_list,
5740 with_implements_keyword(implements_keyword){
5741 return new ClassishDeclaration(
5746 this.type_parameters,
5747 this.extends_keyword,
5750 this.implements_list,
5753 with_implements_list(implements_list){
5754 return new ClassishDeclaration(
5759 this.type_parameters,
5760 this.extends_keyword,
5762 this.implements_keyword,
5767 return new ClassishDeclaration(
5772 this.type_parameters,
5773 this.extends_keyword,
5775 this.implements_keyword,
5776 this.implements_list,
5779 rewrite(rewriter, parents)
5781 if (parents == undefined)
5783 let new_parents = parents.slice();
5784 new_parents.push(this);
5785 var attribute = this.attribute.rewrite(rewriter, new_parents);
5786 var modifiers = this.modifiers.rewrite(rewriter, new_parents);
5787 var keyword = this.keyword.rewrite(rewriter, new_parents);
5788 var name = this.name.rewrite(rewriter, new_parents);
5789 var type_parameters = this.type_parameters.rewrite(rewriter, new_parents);
5790 var extends_keyword = this.extends_keyword.rewrite(rewriter, new_parents);
5791 var extends_list = this.extends_list.rewrite(rewriter, new_parents);
5792 var implements_keyword = this.implements_keyword.rewrite(rewriter, new_parents);
5793 var implements_list = this.implements_list.rewrite(rewriter, new_parents);
5794 var body = this.body.rewrite(rewriter, new_parents);
5796 attribute === this.attribute &&
5797 modifiers === this.modifiers &&
5798 keyword === this.keyword &&
5799 name === this.name &&
5800 type_parameters === this.type_parameters &&
5801 extends_keyword === this.extends_keyword &&
5802 extends_list === this.extends_list &&
5803 implements_keyword === this.implements_keyword &&
5804 implements_list === this.implements_list &&
5807 return rewriter(this, parents);
5811 return rewriter(new ClassishDeclaration(
5824 static from_json(json, position, source)
5826 let attribute = EditableSyntax.from_json(
5827 json.classish_attribute, position, source);
5828 position += attribute.width;
5829 let modifiers = EditableSyntax.from_json(
5830 json.classish_modifiers, position, source);
5831 position += modifiers.width;
5832 let keyword = EditableSyntax.from_json(
5833 json.classish_keyword, position, source);
5834 position += keyword.width;
5835 let name = EditableSyntax.from_json(
5836 json.classish_name, position, source);
5837 position += name.width;
5838 let type_parameters = EditableSyntax.from_json(
5839 json.classish_type_parameters, position, source);
5840 position += type_parameters.width;
5841 let extends_keyword = EditableSyntax.from_json(
5842 json.classish_extends_keyword, position, source);
5843 position += extends_keyword.width;
5844 let extends_list = EditableSyntax.from_json(
5845 json.classish_extends_list, position, source);
5846 position += extends_list.width;
5847 let implements_keyword = EditableSyntax.from_json(
5848 json.classish_implements_keyword, position, source);
5849 position += implements_keyword.width;
5850 let implements_list = EditableSyntax.from_json(
5851 json.classish_implements_list, position, source);
5852 position += implements_list.width;
5853 let body = EditableSyntax.from_json(
5854 json.classish_body, position, source);
5855 position += body.width;
5856 return new ClassishDeclaration(
5870 if (ClassishDeclaration._children_keys == null)
5871 ClassishDeclaration._children_keys = [
5879 'implements_keyword',
5882 return ClassishDeclaration._children_keys;
5885 class ClassishBody extends EditableSyntax
5892 super('classish_body', {
5893 left_brace: left_brace,
5895 right_brace: right_brace });
5897 get left_brace() { return this.children.left_brace; }
5898 get elements() { return this.children.elements; }
5899 get right_brace() { return this.children.right_brace; }
5900 with_left_brace(left_brace){
5901 return new ClassishBody(
5906 with_elements(elements){
5907 return new ClassishBody(
5912 with_right_brace(right_brace){
5913 return new ClassishBody(
5918 rewrite(rewriter, parents)
5920 if (parents == undefined)
5922 let new_parents = parents.slice();
5923 new_parents.push(this);
5924 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
5925 var elements = this.elements.rewrite(rewriter, new_parents);
5926 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
5928 left_brace === this.left_brace &&
5929 elements === this.elements &&
5930 right_brace === this.right_brace)
5932 return rewriter(this, parents);
5936 return rewriter(new ClassishBody(
5939 right_brace), parents);
5942 static from_json(json, position, source)
5944 let left_brace = EditableSyntax.from_json(
5945 json.classish_body_left_brace, position, source);
5946 position += left_brace.width;
5947 let elements = EditableSyntax.from_json(
5948 json.classish_body_elements, position, source);
5949 position += elements.width;
5950 let right_brace = EditableSyntax.from_json(
5951 json.classish_body_right_brace, position, source);
5952 position += right_brace.width;
5953 return new ClassishBody(
5960 if (ClassishBody._children_keys == null)
5961 ClassishBody._children_keys = [
5965 return ClassishBody._children_keys;
5968 class TraitUsePrecedenceItem extends EditableSyntax
5975 super('trait_use_precedence_item', {
5978 removed_names: removed_names });
5980 get name() { return this.children.name; }
5981 get keyword() { return this.children.keyword; }
5982 get removed_names() { return this.children.removed_names; }
5984 return new TraitUsePrecedenceItem(
5987 this.removed_names);
5989 with_keyword(keyword){
5990 return new TraitUsePrecedenceItem(
5993 this.removed_names);
5995 with_removed_names(removed_names){
5996 return new TraitUsePrecedenceItem(
6001 rewrite(rewriter, parents)
6003 if (parents == undefined)
6005 let new_parents = parents.slice();
6006 new_parents.push(this);
6007 var name = this.name.rewrite(rewriter, new_parents);
6008 var keyword = this.keyword.rewrite(rewriter, new_parents);
6009 var removed_names = this.removed_names.rewrite(rewriter, new_parents);
6011 name === this.name &&
6012 keyword === this.keyword &&
6013 removed_names === this.removed_names)
6015 return rewriter(this, parents);
6019 return rewriter(new TraitUsePrecedenceItem(
6022 removed_names), parents);
6025 static from_json(json, position, source)
6027 let name = EditableSyntax.from_json(
6028 json.trait_use_precedence_item_name, position, source);
6029 position += name.width;
6030 let keyword = EditableSyntax.from_json(
6031 json.trait_use_precedence_item_keyword, position, source);
6032 position += keyword.width;
6033 let removed_names = EditableSyntax.from_json(
6034 json.trait_use_precedence_item_removed_names, position, source);
6035 position += removed_names.width;
6036 return new TraitUsePrecedenceItem(
6043 if (TraitUsePrecedenceItem._children_keys == null)
6044 TraitUsePrecedenceItem._children_keys = [
6048 return TraitUsePrecedenceItem._children_keys;
6051 class TraitUseAliasItem extends EditableSyntax
6059 super('trait_use_alias_item', {
6060 aliasing_name: aliasing_name,
6062 modifiers: modifiers,
6063 aliased_name: aliased_name });
6065 get aliasing_name() { return this.children.aliasing_name; }
6066 get keyword() { return this.children.keyword; }
6067 get modifiers() { return this.children.modifiers; }
6068 get aliased_name() { return this.children.aliased_name; }
6069 with_aliasing_name(aliasing_name){
6070 return new TraitUseAliasItem(
6076 with_keyword(keyword){
6077 return new TraitUseAliasItem(
6083 with_modifiers(modifiers){
6084 return new TraitUseAliasItem(
6090 with_aliased_name(aliased_name){
6091 return new TraitUseAliasItem(
6097 rewrite(rewriter, parents)
6099 if (parents == undefined)
6101 let new_parents = parents.slice();
6102 new_parents.push(this);
6103 var aliasing_name = this.aliasing_name.rewrite(rewriter, new_parents);
6104 var keyword = this.keyword.rewrite(rewriter, new_parents);
6105 var modifiers = this.modifiers.rewrite(rewriter, new_parents);
6106 var aliased_name = this.aliased_name.rewrite(rewriter, new_parents);
6108 aliasing_name === this.aliasing_name &&
6109 keyword === this.keyword &&
6110 modifiers === this.modifiers &&
6111 aliased_name === this.aliased_name)
6113 return rewriter(this, parents);
6117 return rewriter(new TraitUseAliasItem(
6121 aliased_name), parents);
6124 static from_json(json, position, source)
6126 let aliasing_name = EditableSyntax.from_json(
6127 json.trait_use_alias_item_aliasing_name, position, source);
6128 position += aliasing_name.width;
6129 let keyword = EditableSyntax.from_json(
6130 json.trait_use_alias_item_keyword, position, source);
6131 position += keyword.width;
6132 let modifiers = EditableSyntax.from_json(
6133 json.trait_use_alias_item_modifiers, position, source);
6134 position += modifiers.width;
6135 let aliased_name = EditableSyntax.from_json(
6136 json.trait_use_alias_item_aliased_name, position, source);
6137 position += aliased_name.width;
6138 return new TraitUseAliasItem(
6146 if (TraitUseAliasItem._children_keys == null)
6147 TraitUseAliasItem._children_keys = [
6152 return TraitUseAliasItem._children_keys;
6155 class TraitUseConflictResolution extends EditableSyntax
6164 super('trait_use_conflict_resolution', {
6167 left_brace: left_brace,
6169 right_brace: right_brace });
6171 get keyword() { return this.children.keyword; }
6172 get names() { return this.children.names; }
6173 get left_brace() { return this.children.left_brace; }
6174 get clauses() { return this.children.clauses; }
6175 get right_brace() { return this.children.right_brace; }
6176 with_keyword(keyword){
6177 return new TraitUseConflictResolution(
6185 return new TraitUseConflictResolution(
6192 with_left_brace(left_brace){
6193 return new TraitUseConflictResolution(
6200 with_clauses(clauses){
6201 return new TraitUseConflictResolution(
6208 with_right_brace(right_brace){
6209 return new TraitUseConflictResolution(
6216 rewrite(rewriter, parents)
6218 if (parents == undefined)
6220 let new_parents = parents.slice();
6221 new_parents.push(this);
6222 var keyword = this.keyword.rewrite(rewriter, new_parents);
6223 var names = this.names.rewrite(rewriter, new_parents);
6224 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
6225 var clauses = this.clauses.rewrite(rewriter, new_parents);
6226 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
6228 keyword === this.keyword &&
6229 names === this.names &&
6230 left_brace === this.left_brace &&
6231 clauses === this.clauses &&
6232 right_brace === this.right_brace)
6234 return rewriter(this, parents);
6238 return rewriter(new TraitUseConflictResolution(
6243 right_brace), parents);
6246 static from_json(json, position, source)
6248 let keyword = EditableSyntax.from_json(
6249 json.trait_use_conflict_resolution_keyword, position, source);
6250 position += keyword.width;
6251 let names = EditableSyntax.from_json(
6252 json.trait_use_conflict_resolution_names, position, source);
6253 position += names.width;
6254 let left_brace = EditableSyntax.from_json(
6255 json.trait_use_conflict_resolution_left_brace, position, source);
6256 position += left_brace.width;
6257 let clauses = EditableSyntax.from_json(
6258 json.trait_use_conflict_resolution_clauses, position, source);
6259 position += clauses.width;
6260 let right_brace = EditableSyntax.from_json(
6261 json.trait_use_conflict_resolution_right_brace, position, source);
6262 position += right_brace.width;
6263 return new TraitUseConflictResolution(
6272 if (TraitUseConflictResolution._children_keys == null)
6273 TraitUseConflictResolution._children_keys = [
6279 return TraitUseConflictResolution._children_keys;
6282 class TraitUse extends EditableSyntax
6289 super('trait_use', {
6292 semicolon: semicolon });
6294 get keyword() { return this.children.keyword; }
6295 get names() { return this.children.names; }
6296 get semicolon() { return this.children.semicolon; }
6297 with_keyword(keyword){
6298 return new TraitUse(
6304 return new TraitUse(
6309 with_semicolon(semicolon){
6310 return new TraitUse(
6315 rewrite(rewriter, parents)
6317 if (parents == undefined)
6319 let new_parents = parents.slice();
6320 new_parents.push(this);
6321 var keyword = this.keyword.rewrite(rewriter, new_parents);
6322 var names = this.names.rewrite(rewriter, new_parents);
6323 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
6325 keyword === this.keyword &&
6326 names === this.names &&
6327 semicolon === this.semicolon)
6329 return rewriter(this, parents);
6333 return rewriter(new TraitUse(
6336 semicolon), parents);
6339 static from_json(json, position, source)
6341 let keyword = EditableSyntax.from_json(
6342 json.trait_use_keyword, position, source);
6343 position += keyword.width;
6344 let names = EditableSyntax.from_json(
6345 json.trait_use_names, position, source);
6346 position += names.width;
6347 let semicolon = EditableSyntax.from_json(
6348 json.trait_use_semicolon, position, source);
6349 position += semicolon.width;
6350 return new TraitUse(
6357 if (TraitUse._children_keys == null)
6358 TraitUse._children_keys = [
6362 return TraitUse._children_keys;
6365 class RequireClause extends EditableSyntax
6373 super('require_clause', {
6377 semicolon: semicolon });
6379 get keyword() { return this.children.keyword; }
6380 get kind() { return this.children.kind; }
6381 get name() { return this.children.name; }
6382 get semicolon() { return this.children.semicolon; }
6383 with_keyword(keyword){
6384 return new RequireClause(
6391 return new RequireClause(
6398 return new RequireClause(
6404 with_semicolon(semicolon){
6405 return new RequireClause(
6411 rewrite(rewriter, parents)
6413 if (parents == undefined)
6415 let new_parents = parents.slice();
6416 new_parents.push(this);
6417 var keyword = this.keyword.rewrite(rewriter, new_parents);
6418 var kind = this.kind.rewrite(rewriter, new_parents);
6419 var name = this.name.rewrite(rewriter, new_parents);
6420 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
6422 keyword === this.keyword &&
6423 kind === this.kind &&
6424 name === this.name &&
6425 semicolon === this.semicolon)
6427 return rewriter(this, parents);
6431 return rewriter(new RequireClause(
6435 semicolon), parents);
6438 static from_json(json, position, source)
6440 let keyword = EditableSyntax.from_json(
6441 json.require_keyword, position, source);
6442 position += keyword.width;
6443 let kind = EditableSyntax.from_json(
6444 json.require_kind, position, source);
6445 position += kind.width;
6446 let name = EditableSyntax.from_json(
6447 json.require_name, position, source);
6448 position += name.width;
6449 let semicolon = EditableSyntax.from_json(
6450 json.require_semicolon, position, source);
6451 position += semicolon.width;
6452 return new RequireClause(
6460 if (RequireClause._children_keys == null)
6461 RequireClause._children_keys = [
6466 return RequireClause._children_keys;
6469 class ConstDeclaration extends EditableSyntax
6479 super('const_declaration', {
6480 visibility: visibility,
6483 type_specifier: type_specifier,
6484 declarators: declarators,
6485 semicolon: semicolon });
6487 get visibility() { return this.children.visibility; }
6488 get abstract() { return this.children.abstract; }
6489 get keyword() { return this.children.keyword; }
6490 get type_specifier() { return this.children.type_specifier; }
6491 get declarators() { return this.children.declarators; }
6492 get semicolon() { return this.children.semicolon; }
6493 with_visibility(visibility){
6494 return new ConstDeclaration(
6498 this.type_specifier,
6502 with_abstract(abstract){
6503 return new ConstDeclaration(
6507 this.type_specifier,
6511 with_keyword(keyword){
6512 return new ConstDeclaration(
6516 this.type_specifier,
6520 with_type_specifier(type_specifier){
6521 return new ConstDeclaration(
6529 with_declarators(declarators){
6530 return new ConstDeclaration(
6534 this.type_specifier,
6538 with_semicolon(semicolon){
6539 return new ConstDeclaration(
6543 this.type_specifier,
6547 rewrite(rewriter, parents)
6549 if (parents == undefined)
6551 let new_parents = parents.slice();
6552 new_parents.push(this);
6553 var visibility = this.visibility.rewrite(rewriter, new_parents);
6554 var abstract = this.abstract.rewrite(rewriter, new_parents);
6555 var keyword = this.keyword.rewrite(rewriter, new_parents);
6556 var type_specifier = this.type_specifier.rewrite(rewriter, new_parents);
6557 var declarators = this.declarators.rewrite(rewriter, new_parents);
6558 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
6560 visibility === this.visibility &&
6561 abstract === this.abstract &&
6562 keyword === this.keyword &&
6563 type_specifier === this.type_specifier &&
6564 declarators === this.declarators &&
6565 semicolon === this.semicolon)
6567 return rewriter(this, parents);
6571 return rewriter(new ConstDeclaration(
6577 semicolon), parents);
6580 static from_json(json, position, source)
6582 let visibility = EditableSyntax.from_json(
6583 json.const_visibility, position, source);
6584 position += visibility.width;
6585 let abstract = EditableSyntax.from_json(
6586 json.const_abstract, position, source);
6587 position += abstract.width;
6588 let keyword = EditableSyntax.from_json(
6589 json.const_keyword, position, source);
6590 position += keyword.width;
6591 let type_specifier = EditableSyntax.from_json(
6592 json.const_type_specifier, position, source);
6593 position += type_specifier.width;
6594 let declarators = EditableSyntax.from_json(
6595 json.const_declarators, position, source);
6596 position += declarators.width;
6597 let semicolon = EditableSyntax.from_json(
6598 json.const_semicolon, position, source);
6599 position += semicolon.width;
6600 return new ConstDeclaration(
6610 if (ConstDeclaration._children_keys == null)
6611 ConstDeclaration._children_keys = [
6618 return ConstDeclaration._children_keys;
6621 class ConstantDeclarator extends EditableSyntax
6627 super('constant_declarator', {
6629 initializer: initializer });
6631 get name() { return this.children.name; }
6632 get initializer() { return this.children.initializer; }
6634 return new ConstantDeclarator(
6638 with_initializer(initializer){
6639 return new ConstantDeclarator(
6643 rewrite(rewriter, parents)
6645 if (parents == undefined)
6647 let new_parents = parents.slice();
6648 new_parents.push(this);
6649 var name = this.name.rewrite(rewriter, new_parents);
6650 var initializer = this.initializer.rewrite(rewriter, new_parents);
6652 name === this.name &&
6653 initializer === this.initializer)
6655 return rewriter(this, parents);
6659 return rewriter(new ConstantDeclarator(
6661 initializer), parents);
6664 static from_json(json, position, source)
6666 let name = EditableSyntax.from_json(
6667 json.constant_declarator_name, position, source);
6668 position += name.width;
6669 let initializer = EditableSyntax.from_json(
6670 json.constant_declarator_initializer, position, source);
6671 position += initializer.width;
6672 return new ConstantDeclarator(
6678 if (ConstantDeclarator._children_keys == null)
6679 ConstantDeclarator._children_keys = [
6682 return ConstantDeclarator._children_keys;
6685 class TypeConstDeclaration extends EditableSyntax
6699 super('type_const_declaration', {
6700 attribute_spec: attribute_spec,
6703 type_keyword: type_keyword,
6705 type_parameters: type_parameters,
6706 type_constraint: type_constraint,
6708 type_specifier: type_specifier,
6709 semicolon: semicolon });
6711 get attribute_spec() { return this.children.attribute_spec; }
6712 get abstract() { return this.children.abstract; }
6713 get keyword() { return this.children.keyword; }
6714 get type_keyword() { return this.children.type_keyword; }
6715 get name() { return this.children.name; }
6716 get type_parameters() { return this.children.type_parameters; }
6717 get type_constraint() { return this.children.type_constraint; }
6718 get equal() { return this.children.equal; }
6719 get type_specifier() { return this.children.type_specifier; }
6720 get semicolon() { return this.children.semicolon; }
6721 with_attribute_spec(attribute_spec){
6722 return new TypeConstDeclaration(
6728 this.type_parameters,
6729 this.type_constraint,
6731 this.type_specifier,
6734 with_abstract(abstract){
6735 return new TypeConstDeclaration(
6736 this.attribute_spec,
6741 this.type_parameters,
6742 this.type_constraint,
6744 this.type_specifier,
6747 with_keyword(keyword){
6748 return new TypeConstDeclaration(
6749 this.attribute_spec,
6754 this.type_parameters,
6755 this.type_constraint,
6757 this.type_specifier,
6760 with_type_keyword(type_keyword){
6761 return new TypeConstDeclaration(
6762 this.attribute_spec,
6767 this.type_parameters,
6768 this.type_constraint,
6770 this.type_specifier,
6774 return new TypeConstDeclaration(
6775 this.attribute_spec,
6780 this.type_parameters,
6781 this.type_constraint,
6783 this.type_specifier,
6786 with_type_parameters(type_parameters){
6787 return new TypeConstDeclaration(
6788 this.attribute_spec,
6794 this.type_constraint,
6796 this.type_specifier,
6799 with_type_constraint(type_constraint){
6800 return new TypeConstDeclaration(
6801 this.attribute_spec,
6806 this.type_parameters,
6809 this.type_specifier,
6813 return new TypeConstDeclaration(
6814 this.attribute_spec,
6819 this.type_parameters,
6820 this.type_constraint,
6822 this.type_specifier,
6825 with_type_specifier(type_specifier){
6826 return new TypeConstDeclaration(
6827 this.attribute_spec,
6832 this.type_parameters,
6833 this.type_constraint,
6838 with_semicolon(semicolon){
6839 return new TypeConstDeclaration(
6840 this.attribute_spec,
6845 this.type_parameters,
6846 this.type_constraint,
6848 this.type_specifier,
6851 rewrite(rewriter, parents)
6853 if (parents == undefined)
6855 let new_parents = parents.slice();
6856 new_parents.push(this);
6857 var attribute_spec = this.attribute_spec.rewrite(rewriter, new_parents);
6858 var abstract = this.abstract.rewrite(rewriter, new_parents);
6859 var keyword = this.keyword.rewrite(rewriter, new_parents);
6860 var type_keyword = this.type_keyword.rewrite(rewriter, new_parents);
6861 var name = this.name.rewrite(rewriter, new_parents);
6862 var type_parameters = this.type_parameters.rewrite(rewriter, new_parents);
6863 var type_constraint = this.type_constraint.rewrite(rewriter, new_parents);
6864 var equal = this.equal.rewrite(rewriter, new_parents);
6865 var type_specifier = this.type_specifier.rewrite(rewriter, new_parents);
6866 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
6868 attribute_spec === this.attribute_spec &&
6869 abstract === this.abstract &&
6870 keyword === this.keyword &&
6871 type_keyword === this.type_keyword &&
6872 name === this.name &&
6873 type_parameters === this.type_parameters &&
6874 type_constraint === this.type_constraint &&
6875 equal === this.equal &&
6876 type_specifier === this.type_specifier &&
6877 semicolon === this.semicolon)
6879 return rewriter(this, parents);
6883 return rewriter(new TypeConstDeclaration(
6893 semicolon), parents);
6896 static from_json(json, position, source)
6898 let attribute_spec = EditableSyntax.from_json(
6899 json.type_const_attribute_spec, position, source);
6900 position += attribute_spec.width;
6901 let abstract = EditableSyntax.from_json(
6902 json.type_const_abstract, position, source);
6903 position += abstract.width;
6904 let keyword = EditableSyntax.from_json(
6905 json.type_const_keyword, position, source);
6906 position += keyword.width;
6907 let type_keyword = EditableSyntax.from_json(
6908 json.type_const_type_keyword, position, source);
6909 position += type_keyword.width;
6910 let name = EditableSyntax.from_json(
6911 json.type_const_name, position, source);
6912 position += name.width;
6913 let type_parameters = EditableSyntax.from_json(
6914 json.type_const_type_parameters, position, source);
6915 position += type_parameters.width;
6916 let type_constraint = EditableSyntax.from_json(
6917 json.type_const_type_constraint, position, source);
6918 position += type_constraint.width;
6919 let equal = EditableSyntax.from_json(
6920 json.type_const_equal, position, source);
6921 position += equal.width;
6922 let type_specifier = EditableSyntax.from_json(
6923 json.type_const_type_specifier, position, source);
6924 position += type_specifier.width;
6925 let semicolon = EditableSyntax.from_json(
6926 json.type_const_semicolon, position, source);
6927 position += semicolon.width;
6928 return new TypeConstDeclaration(
6942 if (TypeConstDeclaration._children_keys == null)
6943 TypeConstDeclaration._children_keys = [
6954 return TypeConstDeclaration._children_keys;
6957 class DecoratedExpression extends EditableSyntax
6963 super('decorated_expression', {
6964 decorator: decorator,
6965 expression: expression });
6967 get decorator() { return this.children.decorator; }
6968 get expression() { return this.children.expression; }
6969 with_decorator(decorator){
6970 return new DecoratedExpression(
6974 with_expression(expression){
6975 return new DecoratedExpression(
6979 rewrite(rewriter, parents)
6981 if (parents == undefined)
6983 let new_parents = parents.slice();
6984 new_parents.push(this);
6985 var decorator = this.decorator.rewrite(rewriter, new_parents);
6986 var expression = this.expression.rewrite(rewriter, new_parents);
6988 decorator === this.decorator &&
6989 expression === this.expression)
6991 return rewriter(this, parents);
6995 return rewriter(new DecoratedExpression(
6997 expression), parents);
7000 static from_json(json, position, source)
7002 let decorator = EditableSyntax.from_json(
7003 json.decorated_expression_decorator, position, source);
7004 position += decorator.width;
7005 let expression = EditableSyntax.from_json(
7006 json.decorated_expression_expression, position, source);
7007 position += expression.width;
7008 return new DecoratedExpression(
7014 if (DecoratedExpression._children_keys == null)
7015 DecoratedExpression._children_keys = [
7018 return DecoratedExpression._children_keys;
7021 class ParameterDeclaration extends EditableSyntax
7031 super('parameter_declaration', {
7032 attribute: attribute,
7033 visibility: visibility,
7034 call_convention: call_convention,
7037 default_value: default_value });
7039 get attribute() { return this.children.attribute; }
7040 get visibility() { return this.children.visibility; }
7041 get call_convention() { return this.children.call_convention; }
7042 get type() { return this.children.type; }
7043 get name() { return this.children.name; }
7044 get default_value() { return this.children.default_value; }
7045 with_attribute(attribute){
7046 return new ParameterDeclaration(
7049 this.call_convention,
7052 this.default_value);
7054 with_visibility(visibility){
7055 return new ParameterDeclaration(
7058 this.call_convention,
7061 this.default_value);
7063 with_call_convention(call_convention){
7064 return new ParameterDeclaration(
7070 this.default_value);
7073 return new ParameterDeclaration(
7076 this.call_convention,
7079 this.default_value);
7082 return new ParameterDeclaration(
7085 this.call_convention,
7088 this.default_value);
7090 with_default_value(default_value){
7091 return new ParameterDeclaration(
7094 this.call_convention,
7099 rewrite(rewriter, parents)
7101 if (parents == undefined)
7103 let new_parents = parents.slice();
7104 new_parents.push(this);
7105 var attribute = this.attribute.rewrite(rewriter, new_parents);
7106 var visibility = this.visibility.rewrite(rewriter, new_parents);
7107 var call_convention = this.call_convention.rewrite(rewriter, new_parents);
7108 var type = this.type.rewrite(rewriter, new_parents);
7109 var name = this.name.rewrite(rewriter, new_parents);
7110 var default_value = this.default_value.rewrite(rewriter, new_parents);
7112 attribute === this.attribute &&
7113 visibility === this.visibility &&
7114 call_convention === this.call_convention &&
7115 type === this.type &&
7116 name === this.name &&
7117 default_value === this.default_value)
7119 return rewriter(this, parents);
7123 return rewriter(new ParameterDeclaration(
7129 default_value), parents);
7132 static from_json(json, position, source)
7134 let attribute = EditableSyntax.from_json(
7135 json.parameter_attribute, position, source);
7136 position += attribute.width;
7137 let visibility = EditableSyntax.from_json(
7138 json.parameter_visibility, position, source);
7139 position += visibility.width;
7140 let call_convention = EditableSyntax.from_json(
7141 json.parameter_call_convention, position, source);
7142 position += call_convention.width;
7143 let type = EditableSyntax.from_json(
7144 json.parameter_type, position, source);
7145 position += type.width;
7146 let name = EditableSyntax.from_json(
7147 json.parameter_name, position, source);
7148 position += name.width;
7149 let default_value = EditableSyntax.from_json(
7150 json.parameter_default_value, position, source);
7151 position += default_value.width;
7152 return new ParameterDeclaration(
7162 if (ParameterDeclaration._children_keys == null)
7163 ParameterDeclaration._children_keys = [
7170 return ParameterDeclaration._children_keys;
7173 class VariadicParameter extends EditableSyntax
7180 super('variadic_parameter', {
7181 call_convention: call_convention,
7183 ellipsis: ellipsis });
7185 get call_convention() { return this.children.call_convention; }
7186 get type() { return this.children.type; }
7187 get ellipsis() { return this.children.ellipsis; }
7188 with_call_convention(call_convention){
7189 return new VariadicParameter(
7195 return new VariadicParameter(
7196 this.call_convention,
7200 with_ellipsis(ellipsis){
7201 return new VariadicParameter(
7202 this.call_convention,
7206 rewrite(rewriter, parents)
7208 if (parents == undefined)
7210 let new_parents = parents.slice();
7211 new_parents.push(this);
7212 var call_convention = this.call_convention.rewrite(rewriter, new_parents);
7213 var type = this.type.rewrite(rewriter, new_parents);
7214 var ellipsis = this.ellipsis.rewrite(rewriter, new_parents);
7216 call_convention === this.call_convention &&
7217 type === this.type &&
7218 ellipsis === this.ellipsis)
7220 return rewriter(this, parents);
7224 return rewriter(new VariadicParameter(
7227 ellipsis), parents);
7230 static from_json(json, position, source)
7232 let call_convention = EditableSyntax.from_json(
7233 json.variadic_parameter_call_convention, position, source);
7234 position += call_convention.width;
7235 let type = EditableSyntax.from_json(
7236 json.variadic_parameter_type, position, source);
7237 position += type.width;
7238 let ellipsis = EditableSyntax.from_json(
7239 json.variadic_parameter_ellipsis, position, source);
7240 position += ellipsis.width;
7241 return new VariadicParameter(
7248 if (VariadicParameter._children_keys == null)
7249 VariadicParameter._children_keys = [
7253 return VariadicParameter._children_keys;
7256 class AttributeSpecification extends EditableSyntax
7263 super('attribute_specification', {
7264 left_double_angle: left_double_angle,
7265 attributes: attributes,
7266 right_double_angle: right_double_angle });
7268 get left_double_angle() { return this.children.left_double_angle; }
7269 get attributes() { return this.children.attributes; }
7270 get right_double_angle() { return this.children.right_double_angle; }
7271 with_left_double_angle(left_double_angle){
7272 return new AttributeSpecification(
7275 this.right_double_angle);
7277 with_attributes(attributes){
7278 return new AttributeSpecification(
7279 this.left_double_angle,
7281 this.right_double_angle);
7283 with_right_double_angle(right_double_angle){
7284 return new AttributeSpecification(
7285 this.left_double_angle,
7287 right_double_angle);
7289 rewrite(rewriter, parents)
7291 if (parents == undefined)
7293 let new_parents = parents.slice();
7294 new_parents.push(this);
7295 var left_double_angle = this.left_double_angle.rewrite(rewriter, new_parents);
7296 var attributes = this.attributes.rewrite(rewriter, new_parents);
7297 var right_double_angle = this.right_double_angle.rewrite(rewriter, new_parents);
7299 left_double_angle === this.left_double_angle &&
7300 attributes === this.attributes &&
7301 right_double_angle === this.right_double_angle)
7303 return rewriter(this, parents);
7307 return rewriter(new AttributeSpecification(
7310 right_double_angle), parents);
7313 static from_json(json, position, source)
7315 let left_double_angle = EditableSyntax.from_json(
7316 json.attribute_specification_left_double_angle, position, source);
7317 position += left_double_angle.width;
7318 let attributes = EditableSyntax.from_json(
7319 json.attribute_specification_attributes, position, source);
7320 position += attributes.width;
7321 let right_double_angle = EditableSyntax.from_json(
7322 json.attribute_specification_right_double_angle, position, source);
7323 position += right_double_angle.width;
7324 return new AttributeSpecification(
7327 right_double_angle);
7331 if (AttributeSpecification._children_keys == null)
7332 AttributeSpecification._children_keys = [
7333 'left_double_angle',
7335 'right_double_angle'];
7336 return AttributeSpecification._children_keys;
7339 class InclusionExpression extends EditableSyntax
7345 super('inclusion_expression', {
7347 filename: filename });
7349 get require() { return this.children.require; }
7350 get filename() { return this.children.filename; }
7351 with_require(require){
7352 return new InclusionExpression(
7356 with_filename(filename){
7357 return new InclusionExpression(
7361 rewrite(rewriter, parents)
7363 if (parents == undefined)
7365 let new_parents = parents.slice();
7366 new_parents.push(this);
7367 var require = this.require.rewrite(rewriter, new_parents);
7368 var filename = this.filename.rewrite(rewriter, new_parents);
7370 require === this.require &&
7371 filename === this.filename)
7373 return rewriter(this, parents);
7377 return rewriter(new InclusionExpression(
7379 filename), parents);
7382 static from_json(json, position, source)
7384 let require = EditableSyntax.from_json(
7385 json.inclusion_require, position, source);
7386 position += require.width;
7387 let filename = EditableSyntax.from_json(
7388 json.inclusion_filename, position, source);
7389 position += filename.width;
7390 return new InclusionExpression(
7396 if (InclusionExpression._children_keys == null)
7397 InclusionExpression._children_keys = [
7400 return InclusionExpression._children_keys;
7403 class InclusionDirective extends EditableSyntax
7409 super('inclusion_directive', {
7410 expression: expression,
7411 semicolon: semicolon });
7413 get expression() { return this.children.expression; }
7414 get semicolon() { return this.children.semicolon; }
7415 with_expression(expression){
7416 return new InclusionDirective(
7420 with_semicolon(semicolon){
7421 return new InclusionDirective(
7425 rewrite(rewriter, parents)
7427 if (parents == undefined)
7429 let new_parents = parents.slice();
7430 new_parents.push(this);
7431 var expression = this.expression.rewrite(rewriter, new_parents);
7432 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
7434 expression === this.expression &&
7435 semicolon === this.semicolon)
7437 return rewriter(this, parents);
7441 return rewriter(new InclusionDirective(
7443 semicolon), parents);
7446 static from_json(json, position, source)
7448 let expression = EditableSyntax.from_json(
7449 json.inclusion_expression, position, source);
7450 position += expression.width;
7451 let semicolon = EditableSyntax.from_json(
7452 json.inclusion_semicolon, position, source);
7453 position += semicolon.width;
7454 return new InclusionDirective(
7460 if (InclusionDirective._children_keys == null)
7461 InclusionDirective._children_keys = [
7464 return InclusionDirective._children_keys;
7467 class CompoundStatement extends EditableSyntax
7474 super('compound_statement', {
7475 left_brace: left_brace,
7476 statements: statements,
7477 right_brace: right_brace });
7479 get left_brace() { return this.children.left_brace; }
7480 get statements() { return this.children.statements; }
7481 get right_brace() { return this.children.right_brace; }
7482 with_left_brace(left_brace){
7483 return new CompoundStatement(
7488 with_statements(statements){
7489 return new CompoundStatement(
7494 with_right_brace(right_brace){
7495 return new CompoundStatement(
7500 rewrite(rewriter, parents)
7502 if (parents == undefined)
7504 let new_parents = parents.slice();
7505 new_parents.push(this);
7506 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
7507 var statements = this.statements.rewrite(rewriter, new_parents);
7508 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
7510 left_brace === this.left_brace &&
7511 statements === this.statements &&
7512 right_brace === this.right_brace)
7514 return rewriter(this, parents);
7518 return rewriter(new CompoundStatement(
7521 right_brace), parents);
7524 static from_json(json, position, source)
7526 let left_brace = EditableSyntax.from_json(
7527 json.compound_left_brace, position, source);
7528 position += left_brace.width;
7529 let statements = EditableSyntax.from_json(
7530 json.compound_statements, position, source);
7531 position += statements.width;
7532 let right_brace = EditableSyntax.from_json(
7533 json.compound_right_brace, position, source);
7534 position += right_brace.width;
7535 return new CompoundStatement(
7542 if (CompoundStatement._children_keys == null)
7543 CompoundStatement._children_keys = [
7547 return CompoundStatement._children_keys;
7550 class AlternateLoopStatement extends EditableSyntax
7558 super('alternate_loop_statement', {
7559 opening_colon: opening_colon,
7560 statements: statements,
7561 closing_keyword: closing_keyword,
7562 closing_semicolon: closing_semicolon });
7564 get opening_colon() { return this.children.opening_colon; }
7565 get statements() { return this.children.statements; }
7566 get closing_keyword() { return this.children.closing_keyword; }
7567 get closing_semicolon() { return this.children.closing_semicolon; }
7568 with_opening_colon(opening_colon){
7569 return new AlternateLoopStatement(
7572 this.closing_keyword,
7573 this.closing_semicolon);
7575 with_statements(statements){
7576 return new AlternateLoopStatement(
7579 this.closing_keyword,
7580 this.closing_semicolon);
7582 with_closing_keyword(closing_keyword){
7583 return new AlternateLoopStatement(
7587 this.closing_semicolon);
7589 with_closing_semicolon(closing_semicolon){
7590 return new AlternateLoopStatement(
7593 this.closing_keyword,
7596 rewrite(rewriter, parents)
7598 if (parents == undefined)
7600 let new_parents = parents.slice();
7601 new_parents.push(this);
7602 var opening_colon = this.opening_colon.rewrite(rewriter, new_parents);
7603 var statements = this.statements.rewrite(rewriter, new_parents);
7604 var closing_keyword = this.closing_keyword.rewrite(rewriter, new_parents);
7605 var closing_semicolon = this.closing_semicolon.rewrite(rewriter, new_parents);
7607 opening_colon === this.opening_colon &&
7608 statements === this.statements &&
7609 closing_keyword === this.closing_keyword &&
7610 closing_semicolon === this.closing_semicolon)
7612 return rewriter(this, parents);
7616 return rewriter(new AlternateLoopStatement(
7620 closing_semicolon), parents);
7623 static from_json(json, position, source)
7625 let opening_colon = EditableSyntax.from_json(
7626 json.alternate_loop_opening_colon, position, source);
7627 position += opening_colon.width;
7628 let statements = EditableSyntax.from_json(
7629 json.alternate_loop_statements, position, source);
7630 position += statements.width;
7631 let closing_keyword = EditableSyntax.from_json(
7632 json.alternate_loop_closing_keyword, position, source);
7633 position += closing_keyword.width;
7634 let closing_semicolon = EditableSyntax.from_json(
7635 json.alternate_loop_closing_semicolon, position, source);
7636 position += closing_semicolon.width;
7637 return new AlternateLoopStatement(
7645 if (AlternateLoopStatement._children_keys == null)
7646 AlternateLoopStatement._children_keys = [
7650 'closing_semicolon'];
7651 return AlternateLoopStatement._children_keys;
7654 class ExpressionStatement extends EditableSyntax
7660 super('expression_statement', {
7661 expression: expression,
7662 semicolon: semicolon });
7664 get expression() { return this.children.expression; }
7665 get semicolon() { return this.children.semicolon; }
7666 with_expression(expression){
7667 return new ExpressionStatement(
7671 with_semicolon(semicolon){
7672 return new ExpressionStatement(
7676 rewrite(rewriter, parents)
7678 if (parents == undefined)
7680 let new_parents = parents.slice();
7681 new_parents.push(this);
7682 var expression = this.expression.rewrite(rewriter, new_parents);
7683 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
7685 expression === this.expression &&
7686 semicolon === this.semicolon)
7688 return rewriter(this, parents);
7692 return rewriter(new ExpressionStatement(
7694 semicolon), parents);
7697 static from_json(json, position, source)
7699 let expression = EditableSyntax.from_json(
7700 json.expression_statement_expression, position, source);
7701 position += expression.width;
7702 let semicolon = EditableSyntax.from_json(
7703 json.expression_statement_semicolon, position, source);
7704 position += semicolon.width;
7705 return new ExpressionStatement(
7711 if (ExpressionStatement._children_keys == null)
7712 ExpressionStatement._children_keys = [
7715 return ExpressionStatement._children_keys;
7718 class MarkupSection extends EditableSyntax
7726 super('markup_section', {
7730 expression: expression });
7732 get prefix() { return this.children.prefix; }
7733 get text() { return this.children.text; }
7734 get suffix() { return this.children.suffix; }
7735 get expression() { return this.children.expression; }
7736 with_prefix(prefix){
7737 return new MarkupSection(
7744 return new MarkupSection(
7750 with_suffix(suffix){
7751 return new MarkupSection(
7757 with_expression(expression){
7758 return new MarkupSection(
7764 rewrite(rewriter, parents)
7766 if (parents == undefined)
7768 let new_parents = parents.slice();
7769 new_parents.push(this);
7770 var prefix = this.prefix.rewrite(rewriter, new_parents);
7771 var text = this.text.rewrite(rewriter, new_parents);
7772 var suffix = this.suffix.rewrite(rewriter, new_parents);
7773 var expression = this.expression.rewrite(rewriter, new_parents);
7775 prefix === this.prefix &&
7776 text === this.text &&
7777 suffix === this.suffix &&
7778 expression === this.expression)
7780 return rewriter(this, parents);
7784 return rewriter(new MarkupSection(
7788 expression), parents);
7791 static from_json(json, position, source)
7793 let prefix = EditableSyntax.from_json(
7794 json.markup_prefix, position, source);
7795 position += prefix.width;
7796 let text = EditableSyntax.from_json(
7797 json.markup_text, position, source);
7798 position += text.width;
7799 let suffix = EditableSyntax.from_json(
7800 json.markup_suffix, position, source);
7801 position += suffix.width;
7802 let expression = EditableSyntax.from_json(
7803 json.markup_expression, position, source);
7804 position += expression.width;
7805 return new MarkupSection(
7813 if (MarkupSection._children_keys == null)
7814 MarkupSection._children_keys = [
7819 return MarkupSection._children_keys;
7822 class MarkupSuffix extends EditableSyntax
7828 super('markup_suffix', {
7829 less_than_question: less_than_question,
7832 get less_than_question() { return this.children.less_than_question; }
7833 get name() { return this.children.name; }
7834 with_less_than_question(less_than_question){
7835 return new MarkupSuffix(
7840 return new MarkupSuffix(
7841 this.less_than_question,
7844 rewrite(rewriter, parents)
7846 if (parents == undefined)
7848 let new_parents = parents.slice();
7849 new_parents.push(this);
7850 var less_than_question = this.less_than_question.rewrite(rewriter, new_parents);
7851 var name = this.name.rewrite(rewriter, new_parents);
7853 less_than_question === this.less_than_question &&
7856 return rewriter(this, parents);
7860 return rewriter(new MarkupSuffix(
7865 static from_json(json, position, source)
7867 let less_than_question = EditableSyntax.from_json(
7868 json.markup_suffix_less_than_question, position, source);
7869 position += less_than_question.width;
7870 let name = EditableSyntax.from_json(
7871 json.markup_suffix_name, position, source);
7872 position += name.width;
7873 return new MarkupSuffix(
7879 if (MarkupSuffix._children_keys == null)
7880 MarkupSuffix._children_keys = [
7881 'less_than_question',
7883 return MarkupSuffix._children_keys;
7886 class UnsetStatement extends EditableSyntax
7895 super('unset_statement', {
7897 left_paren: left_paren,
7898 variables: variables,
7899 right_paren: right_paren,
7900 semicolon: semicolon });
7902 get keyword() { return this.children.keyword; }
7903 get left_paren() { return this.children.left_paren; }
7904 get variables() { return this.children.variables; }
7905 get right_paren() { return this.children.right_paren; }
7906 get semicolon() { return this.children.semicolon; }
7907 with_keyword(keyword){
7908 return new UnsetStatement(
7915 with_left_paren(left_paren){
7916 return new UnsetStatement(
7923 with_variables(variables){
7924 return new UnsetStatement(
7931 with_right_paren(right_paren){
7932 return new UnsetStatement(
7939 with_semicolon(semicolon){
7940 return new UnsetStatement(
7947 rewrite(rewriter, parents)
7949 if (parents == undefined)
7951 let new_parents = parents.slice();
7952 new_parents.push(this);
7953 var keyword = this.keyword.rewrite(rewriter, new_parents);
7954 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
7955 var variables = this.variables.rewrite(rewriter, new_parents);
7956 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
7957 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
7959 keyword === this.keyword &&
7960 left_paren === this.left_paren &&
7961 variables === this.variables &&
7962 right_paren === this.right_paren &&
7963 semicolon === this.semicolon)
7965 return rewriter(this, parents);
7969 return rewriter(new UnsetStatement(
7974 semicolon), parents);
7977 static from_json(json, position, source)
7979 let keyword = EditableSyntax.from_json(
7980 json.unset_keyword, position, source);
7981 position += keyword.width;
7982 let left_paren = EditableSyntax.from_json(
7983 json.unset_left_paren, position, source);
7984 position += left_paren.width;
7985 let variables = EditableSyntax.from_json(
7986 json.unset_variables, position, source);
7987 position += variables.width;
7988 let right_paren = EditableSyntax.from_json(
7989 json.unset_right_paren, position, source);
7990 position += right_paren.width;
7991 let semicolon = EditableSyntax.from_json(
7992 json.unset_semicolon, position, source);
7993 position += semicolon.width;
7994 return new UnsetStatement(
8003 if (UnsetStatement._children_keys == null)
8004 UnsetStatement._children_keys = [
8010 return UnsetStatement._children_keys;
8013 class LetStatement extends EditableSyntax
8023 super('let_statement', {
8028 initializer: initializer,
8029 semicolon: semicolon });
8031 get keyword() { return this.children.keyword; }
8032 get name() { return this.children.name; }
8033 get colon() { return this.children.colon; }
8034 get type() { return this.children.type; }
8035 get initializer() { return this.children.initializer; }
8036 get semicolon() { return this.children.semicolon; }
8037 with_keyword(keyword){
8038 return new LetStatement(
8047 return new LetStatement(
8056 return new LetStatement(
8065 return new LetStatement(
8073 with_initializer(initializer){
8074 return new LetStatement(
8082 with_semicolon(semicolon){
8083 return new LetStatement(
8091 rewrite(rewriter, parents)
8093 if (parents == undefined)
8095 let new_parents = parents.slice();
8096 new_parents.push(this);
8097 var keyword = this.keyword.rewrite(rewriter, new_parents);
8098 var name = this.name.rewrite(rewriter, new_parents);
8099 var colon = this.colon.rewrite(rewriter, new_parents);
8100 var type = this.type.rewrite(rewriter, new_parents);
8101 var initializer = this.initializer.rewrite(rewriter, new_parents);
8102 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
8104 keyword === this.keyword &&
8105 name === this.name &&
8106 colon === this.colon &&
8107 type === this.type &&
8108 initializer === this.initializer &&
8109 semicolon === this.semicolon)
8111 return rewriter(this, parents);
8115 return rewriter(new LetStatement(
8121 semicolon), parents);
8124 static from_json(json, position, source)
8126 let keyword = EditableSyntax.from_json(
8127 json.let_statement_keyword, position, source);
8128 position += keyword.width;
8129 let name = EditableSyntax.from_json(
8130 json.let_statement_name, position, source);
8131 position += name.width;
8132 let colon = EditableSyntax.from_json(
8133 json.let_statement_colon, position, source);
8134 position += colon.width;
8135 let type = EditableSyntax.from_json(
8136 json.let_statement_type, position, source);
8137 position += type.width;
8138 let initializer = EditableSyntax.from_json(
8139 json.let_statement_initializer, position, source);
8140 position += initializer.width;
8141 let semicolon = EditableSyntax.from_json(
8142 json.let_statement_semicolon, position, source);
8143 position += semicolon.width;
8144 return new LetStatement(
8154 if (LetStatement._children_keys == null)
8155 LetStatement._children_keys = [
8162 return LetStatement._children_keys;
8165 class UsingStatementBlockScoped extends EditableSyntax
8175 super('using_statement_block_scoped', {
8176 await_keyword: await_keyword,
8177 using_keyword: using_keyword,
8178 left_paren: left_paren,
8179 expressions: expressions,
8180 right_paren: right_paren,
8183 get await_keyword() { return this.children.await_keyword; }
8184 get using_keyword() { return this.children.using_keyword; }
8185 get left_paren() { return this.children.left_paren; }
8186 get expressions() { return this.children.expressions; }
8187 get right_paren() { return this.children.right_paren; }
8188 get body() { return this.children.body; }
8189 with_await_keyword(await_keyword){
8190 return new UsingStatementBlockScoped(
8198 with_using_keyword(using_keyword){
8199 return new UsingStatementBlockScoped(
8207 with_left_paren(left_paren){
8208 return new UsingStatementBlockScoped(
8216 with_expressions(expressions){
8217 return new UsingStatementBlockScoped(
8225 with_right_paren(right_paren){
8226 return new UsingStatementBlockScoped(
8235 return new UsingStatementBlockScoped(
8243 rewrite(rewriter, parents)
8245 if (parents == undefined)
8247 let new_parents = parents.slice();
8248 new_parents.push(this);
8249 var await_keyword = this.await_keyword.rewrite(rewriter, new_parents);
8250 var using_keyword = this.using_keyword.rewrite(rewriter, new_parents);
8251 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
8252 var expressions = this.expressions.rewrite(rewriter, new_parents);
8253 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
8254 var body = this.body.rewrite(rewriter, new_parents);
8256 await_keyword === this.await_keyword &&
8257 using_keyword === this.using_keyword &&
8258 left_paren === this.left_paren &&
8259 expressions === this.expressions &&
8260 right_paren === this.right_paren &&
8263 return rewriter(this, parents);
8267 return rewriter(new UsingStatementBlockScoped(
8276 static from_json(json, position, source)
8278 let await_keyword = EditableSyntax.from_json(
8279 json.using_block_await_keyword, position, source);
8280 position += await_keyword.width;
8281 let using_keyword = EditableSyntax.from_json(
8282 json.using_block_using_keyword, position, source);
8283 position += using_keyword.width;
8284 let left_paren = EditableSyntax.from_json(
8285 json.using_block_left_paren, position, source);
8286 position += left_paren.width;
8287 let expressions = EditableSyntax.from_json(
8288 json.using_block_expressions, position, source);
8289 position += expressions.width;
8290 let right_paren = EditableSyntax.from_json(
8291 json.using_block_right_paren, position, source);
8292 position += right_paren.width;
8293 let body = EditableSyntax.from_json(
8294 json.using_block_body, position, source);
8295 position += body.width;
8296 return new UsingStatementBlockScoped(
8306 if (UsingStatementBlockScoped._children_keys == null)
8307 UsingStatementBlockScoped._children_keys = [
8314 return UsingStatementBlockScoped._children_keys;
8317 class UsingStatementFunctionScoped extends EditableSyntax
8325 super('using_statement_function_scoped', {
8326 await_keyword: await_keyword,
8327 using_keyword: using_keyword,
8328 expression: expression,
8329 semicolon: semicolon });
8331 get await_keyword() { return this.children.await_keyword; }
8332 get using_keyword() { return this.children.using_keyword; }
8333 get expression() { return this.children.expression; }
8334 get semicolon() { return this.children.semicolon; }
8335 with_await_keyword(await_keyword){
8336 return new UsingStatementFunctionScoped(
8342 with_using_keyword(using_keyword){
8343 return new UsingStatementFunctionScoped(
8349 with_expression(expression){
8350 return new UsingStatementFunctionScoped(
8356 with_semicolon(semicolon){
8357 return new UsingStatementFunctionScoped(
8363 rewrite(rewriter, parents)
8365 if (parents == undefined)
8367 let new_parents = parents.slice();
8368 new_parents.push(this);
8369 var await_keyword = this.await_keyword.rewrite(rewriter, new_parents);
8370 var using_keyword = this.using_keyword.rewrite(rewriter, new_parents);
8371 var expression = this.expression.rewrite(rewriter, new_parents);
8372 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
8374 await_keyword === this.await_keyword &&
8375 using_keyword === this.using_keyword &&
8376 expression === this.expression &&
8377 semicolon === this.semicolon)
8379 return rewriter(this, parents);
8383 return rewriter(new UsingStatementFunctionScoped(
8387 semicolon), parents);
8390 static from_json(json, position, source)
8392 let await_keyword = EditableSyntax.from_json(
8393 json.using_function_await_keyword, position, source);
8394 position += await_keyword.width;
8395 let using_keyword = EditableSyntax.from_json(
8396 json.using_function_using_keyword, position, source);
8397 position += using_keyword.width;
8398 let expression = EditableSyntax.from_json(
8399 json.using_function_expression, position, source);
8400 position += expression.width;
8401 let semicolon = EditableSyntax.from_json(
8402 json.using_function_semicolon, position, source);
8403 position += semicolon.width;
8404 return new UsingStatementFunctionScoped(
8412 if (UsingStatementFunctionScoped._children_keys == null)
8413 UsingStatementFunctionScoped._children_keys = [
8418 return UsingStatementFunctionScoped._children_keys;
8421 class DeclareDirectiveStatement extends EditableSyntax
8430 super('declare_directive_statement', {
8432 left_paren: left_paren,
8433 expression: expression,
8434 right_paren: right_paren,
8435 semicolon: semicolon });
8437 get keyword() { return this.children.keyword; }
8438 get left_paren() { return this.children.left_paren; }
8439 get expression() { return this.children.expression; }
8440 get right_paren() { return this.children.right_paren; }
8441 get semicolon() { return this.children.semicolon; }
8442 with_keyword(keyword){
8443 return new DeclareDirectiveStatement(
8450 with_left_paren(left_paren){
8451 return new DeclareDirectiveStatement(
8458 with_expression(expression){
8459 return new DeclareDirectiveStatement(
8466 with_right_paren(right_paren){
8467 return new DeclareDirectiveStatement(
8474 with_semicolon(semicolon){
8475 return new DeclareDirectiveStatement(
8482 rewrite(rewriter, parents)
8484 if (parents == undefined)
8486 let new_parents = parents.slice();
8487 new_parents.push(this);
8488 var keyword = this.keyword.rewrite(rewriter, new_parents);
8489 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
8490 var expression = this.expression.rewrite(rewriter, new_parents);
8491 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
8492 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
8494 keyword === this.keyword &&
8495 left_paren === this.left_paren &&
8496 expression === this.expression &&
8497 right_paren === this.right_paren &&
8498 semicolon === this.semicolon)
8500 return rewriter(this, parents);
8504 return rewriter(new DeclareDirectiveStatement(
8509 semicolon), parents);
8512 static from_json(json, position, source)
8514 let keyword = EditableSyntax.from_json(
8515 json.declare_directive_keyword, position, source);
8516 position += keyword.width;
8517 let left_paren = EditableSyntax.from_json(
8518 json.declare_directive_left_paren, position, source);
8519 position += left_paren.width;
8520 let expression = EditableSyntax.from_json(
8521 json.declare_directive_expression, position, source);
8522 position += expression.width;
8523 let right_paren = EditableSyntax.from_json(
8524 json.declare_directive_right_paren, position, source);
8525 position += right_paren.width;
8526 let semicolon = EditableSyntax.from_json(
8527 json.declare_directive_semicolon, position, source);
8528 position += semicolon.width;
8529 return new DeclareDirectiveStatement(
8538 if (DeclareDirectiveStatement._children_keys == null)
8539 DeclareDirectiveStatement._children_keys = [
8545 return DeclareDirectiveStatement._children_keys;
8548 class DeclareBlockStatement extends EditableSyntax
8557 super('declare_block_statement', {
8559 left_paren: left_paren,
8560 expression: expression,
8561 right_paren: right_paren,
8564 get keyword() { return this.children.keyword; }
8565 get left_paren() { return this.children.left_paren; }
8566 get expression() { return this.children.expression; }
8567 get right_paren() { return this.children.right_paren; }
8568 get body() { return this.children.body; }
8569 with_keyword(keyword){
8570 return new DeclareBlockStatement(
8577 with_left_paren(left_paren){
8578 return new DeclareBlockStatement(
8585 with_expression(expression){
8586 return new DeclareBlockStatement(
8593 with_right_paren(right_paren){
8594 return new DeclareBlockStatement(
8602 return new DeclareBlockStatement(
8609 rewrite(rewriter, parents)
8611 if (parents == undefined)
8613 let new_parents = parents.slice();
8614 new_parents.push(this);
8615 var keyword = this.keyword.rewrite(rewriter, new_parents);
8616 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
8617 var expression = this.expression.rewrite(rewriter, new_parents);
8618 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
8619 var body = this.body.rewrite(rewriter, new_parents);
8621 keyword === this.keyword &&
8622 left_paren === this.left_paren &&
8623 expression === this.expression &&
8624 right_paren === this.right_paren &&
8627 return rewriter(this, parents);
8631 return rewriter(new DeclareBlockStatement(
8639 static from_json(json, position, source)
8641 let keyword = EditableSyntax.from_json(
8642 json.declare_block_keyword, position, source);
8643 position += keyword.width;
8644 let left_paren = EditableSyntax.from_json(
8645 json.declare_block_left_paren, position, source);
8646 position += left_paren.width;
8647 let expression = EditableSyntax.from_json(
8648 json.declare_block_expression, position, source);
8649 position += expression.width;
8650 let right_paren = EditableSyntax.from_json(
8651 json.declare_block_right_paren, position, source);
8652 position += right_paren.width;
8653 let body = EditableSyntax.from_json(
8654 json.declare_block_body, position, source);
8655 position += body.width;
8656 return new DeclareBlockStatement(
8665 if (DeclareBlockStatement._children_keys == null)
8666 DeclareBlockStatement._children_keys = [
8672 return DeclareBlockStatement._children_keys;
8675 class WhileStatement extends EditableSyntax
8684 super('while_statement', {
8686 left_paren: left_paren,
8687 condition: condition,
8688 right_paren: right_paren,
8691 get keyword() { return this.children.keyword; }
8692 get left_paren() { return this.children.left_paren; }
8693 get condition() { return this.children.condition; }
8694 get right_paren() { return this.children.right_paren; }
8695 get body() { return this.children.body; }
8696 with_keyword(keyword){
8697 return new WhileStatement(
8704 with_left_paren(left_paren){
8705 return new WhileStatement(
8712 with_condition(condition){
8713 return new WhileStatement(
8720 with_right_paren(right_paren){
8721 return new WhileStatement(
8729 return new WhileStatement(
8736 rewrite(rewriter, parents)
8738 if (parents == undefined)
8740 let new_parents = parents.slice();
8741 new_parents.push(this);
8742 var keyword = this.keyword.rewrite(rewriter, new_parents);
8743 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
8744 var condition = this.condition.rewrite(rewriter, new_parents);
8745 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
8746 var body = this.body.rewrite(rewriter, new_parents);
8748 keyword === this.keyword &&
8749 left_paren === this.left_paren &&
8750 condition === this.condition &&
8751 right_paren === this.right_paren &&
8754 return rewriter(this, parents);
8758 return rewriter(new WhileStatement(
8766 static from_json(json, position, source)
8768 let keyword = EditableSyntax.from_json(
8769 json.while_keyword, position, source);
8770 position += keyword.width;
8771 let left_paren = EditableSyntax.from_json(
8772 json.while_left_paren, position, source);
8773 position += left_paren.width;
8774 let condition = EditableSyntax.from_json(
8775 json.while_condition, position, source);
8776 position += condition.width;
8777 let right_paren = EditableSyntax.from_json(
8778 json.while_right_paren, position, source);
8779 position += right_paren.width;
8780 let body = EditableSyntax.from_json(
8781 json.while_body, position, source);
8782 position += body.width;
8783 return new WhileStatement(
8792 if (WhileStatement._children_keys == null)
8793 WhileStatement._children_keys = [
8799 return WhileStatement._children_keys;
8802 class IfStatement extends EditableSyntax
8813 super('if_statement', {
8815 left_paren: left_paren,
8816 condition: condition,
8817 right_paren: right_paren,
8818 statement: statement,
8819 elseif_clauses: elseif_clauses,
8820 else_clause: else_clause });
8822 get keyword() { return this.children.keyword; }
8823 get left_paren() { return this.children.left_paren; }
8824 get condition() { return this.children.condition; }
8825 get right_paren() { return this.children.right_paren; }
8826 get statement() { return this.children.statement; }
8827 get elseif_clauses() { return this.children.elseif_clauses; }
8828 get else_clause() { return this.children.else_clause; }
8829 with_keyword(keyword){
8830 return new IfStatement(
8836 this.elseif_clauses,
8839 with_left_paren(left_paren){
8840 return new IfStatement(
8846 this.elseif_clauses,
8849 with_condition(condition){
8850 return new IfStatement(
8856 this.elseif_clauses,
8859 with_right_paren(right_paren){
8860 return new IfStatement(
8866 this.elseif_clauses,
8869 with_statement(statement){
8870 return new IfStatement(
8876 this.elseif_clauses,
8879 with_elseif_clauses(elseif_clauses){
8880 return new IfStatement(
8889 with_else_clause(else_clause){
8890 return new IfStatement(
8896 this.elseif_clauses,
8899 rewrite(rewriter, parents)
8901 if (parents == undefined)
8903 let new_parents = parents.slice();
8904 new_parents.push(this);
8905 var keyword = this.keyword.rewrite(rewriter, new_parents);
8906 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
8907 var condition = this.condition.rewrite(rewriter, new_parents);
8908 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
8909 var statement = this.statement.rewrite(rewriter, new_parents);
8910 var elseif_clauses = this.elseif_clauses.rewrite(rewriter, new_parents);
8911 var else_clause = this.else_clause.rewrite(rewriter, new_parents);
8913 keyword === this.keyword &&
8914 left_paren === this.left_paren &&
8915 condition === this.condition &&
8916 right_paren === this.right_paren &&
8917 statement === this.statement &&
8918 elseif_clauses === this.elseif_clauses &&
8919 else_clause === this.else_clause)
8921 return rewriter(this, parents);
8925 return rewriter(new IfStatement(
8932 else_clause), parents);
8935 static from_json(json, position, source)
8937 let keyword = EditableSyntax.from_json(
8938 json.if_keyword, position, source);
8939 position += keyword.width;
8940 let left_paren = EditableSyntax.from_json(
8941 json.if_left_paren, position, source);
8942 position += left_paren.width;
8943 let condition = EditableSyntax.from_json(
8944 json.if_condition, position, source);
8945 position += condition.width;
8946 let right_paren = EditableSyntax.from_json(
8947 json.if_right_paren, position, source);
8948 position += right_paren.width;
8949 let statement = EditableSyntax.from_json(
8950 json.if_statement, position, source);
8951 position += statement.width;
8952 let elseif_clauses = EditableSyntax.from_json(
8953 json.if_elseif_clauses, position, source);
8954 position += elseif_clauses.width;
8955 let else_clause = EditableSyntax.from_json(
8956 json.if_else_clause, position, source);
8957 position += else_clause.width;
8958 return new IfStatement(
8969 if (IfStatement._children_keys == null)
8970 IfStatement._children_keys = [
8978 return IfStatement._children_keys;
8981 class ElseifClause extends EditableSyntax
8990 super('elseif_clause', {
8992 left_paren: left_paren,
8993 condition: condition,
8994 right_paren: right_paren,
8995 statement: statement });
8997 get keyword() { return this.children.keyword; }
8998 get left_paren() { return this.children.left_paren; }
8999 get condition() { return this.children.condition; }
9000 get right_paren() { return this.children.right_paren; }
9001 get statement() { return this.children.statement; }
9002 with_keyword(keyword){
9003 return new ElseifClause(
9010 with_left_paren(left_paren){
9011 return new ElseifClause(
9018 with_condition(condition){
9019 return new ElseifClause(
9026 with_right_paren(right_paren){
9027 return new ElseifClause(
9034 with_statement(statement){
9035 return new ElseifClause(
9042 rewrite(rewriter, parents)
9044 if (parents == undefined)
9046 let new_parents = parents.slice();
9047 new_parents.push(this);
9048 var keyword = this.keyword.rewrite(rewriter, new_parents);
9049 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
9050 var condition = this.condition.rewrite(rewriter, new_parents);
9051 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
9052 var statement = this.statement.rewrite(rewriter, new_parents);
9054 keyword === this.keyword &&
9055 left_paren === this.left_paren &&
9056 condition === this.condition &&
9057 right_paren === this.right_paren &&
9058 statement === this.statement)
9060 return rewriter(this, parents);
9064 return rewriter(new ElseifClause(
9069 statement), parents);
9072 static from_json(json, position, source)
9074 let keyword = EditableSyntax.from_json(
9075 json.elseif_keyword, position, source);
9076 position += keyword.width;
9077 let left_paren = EditableSyntax.from_json(
9078 json.elseif_left_paren, position, source);
9079 position += left_paren.width;
9080 let condition = EditableSyntax.from_json(
9081 json.elseif_condition, position, source);
9082 position += condition.width;
9083 let right_paren = EditableSyntax.from_json(
9084 json.elseif_right_paren, position, source);
9085 position += right_paren.width;
9086 let statement = EditableSyntax.from_json(
9087 json.elseif_statement, position, source);
9088 position += statement.width;
9089 return new ElseifClause(
9098 if (ElseifClause._children_keys == null)
9099 ElseifClause._children_keys = [
9105 return ElseifClause._children_keys;
9108 class ElseClause extends EditableSyntax
9114 super('else_clause', {
9116 statement: statement });
9118 get keyword() { return this.children.keyword; }
9119 get statement() { return this.children.statement; }
9120 with_keyword(keyword){
9121 return new ElseClause(
9125 with_statement(statement){
9126 return new ElseClause(
9130 rewrite(rewriter, parents)
9132 if (parents == undefined)
9134 let new_parents = parents.slice();
9135 new_parents.push(this);
9136 var keyword = this.keyword.rewrite(rewriter, new_parents);
9137 var statement = this.statement.rewrite(rewriter, new_parents);
9139 keyword === this.keyword &&
9140 statement === this.statement)
9142 return rewriter(this, parents);
9146 return rewriter(new ElseClause(
9148 statement), parents);
9151 static from_json(json, position, source)
9153 let keyword = EditableSyntax.from_json(
9154 json.else_keyword, position, source);
9155 position += keyword.width;
9156 let statement = EditableSyntax.from_json(
9157 json.else_statement, position, source);
9158 position += statement.width;
9159 return new ElseClause(
9165 if (ElseClause._children_keys == null)
9166 ElseClause._children_keys = [
9169 return ElseClause._children_keys;
9172 class AlternateIfStatement extends EditableSyntax
9186 super('alternate_if_statement', {
9188 left_paren: left_paren,
9189 condition: condition,
9190 right_paren: right_paren,
9192 statement: statement,
9193 elseif_clauses: elseif_clauses,
9194 else_clause: else_clause,
9195 endif_keyword: endif_keyword,
9196 semicolon: semicolon });
9198 get keyword() { return this.children.keyword; }
9199 get left_paren() { return this.children.left_paren; }
9200 get condition() { return this.children.condition; }
9201 get right_paren() { return this.children.right_paren; }
9202 get colon() { return this.children.colon; }
9203 get statement() { return this.children.statement; }
9204 get elseif_clauses() { return this.children.elseif_clauses; }
9205 get else_clause() { return this.children.else_clause; }
9206 get endif_keyword() { return this.children.endif_keyword; }
9207 get semicolon() { return this.children.semicolon; }
9208 with_keyword(keyword){
9209 return new AlternateIfStatement(
9216 this.elseif_clauses,
9221 with_left_paren(left_paren){
9222 return new AlternateIfStatement(
9229 this.elseif_clauses,
9234 with_condition(condition){
9235 return new AlternateIfStatement(
9242 this.elseif_clauses,
9247 with_right_paren(right_paren){
9248 return new AlternateIfStatement(
9255 this.elseif_clauses,
9261 return new AlternateIfStatement(
9268 this.elseif_clauses,
9273 with_statement(statement){
9274 return new AlternateIfStatement(
9281 this.elseif_clauses,
9286 with_elseif_clauses(elseif_clauses){
9287 return new AlternateIfStatement(
9299 with_else_clause(else_clause){
9300 return new AlternateIfStatement(
9307 this.elseif_clauses,
9312 with_endif_keyword(endif_keyword){
9313 return new AlternateIfStatement(
9320 this.elseif_clauses,
9325 with_semicolon(semicolon){
9326 return new AlternateIfStatement(
9333 this.elseif_clauses,
9338 rewrite(rewriter, parents)
9340 if (parents == undefined)
9342 let new_parents = parents.slice();
9343 new_parents.push(this);
9344 var keyword = this.keyword.rewrite(rewriter, new_parents);
9345 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
9346 var condition = this.condition.rewrite(rewriter, new_parents);
9347 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
9348 var colon = this.colon.rewrite(rewriter, new_parents);
9349 var statement = this.statement.rewrite(rewriter, new_parents);
9350 var elseif_clauses = this.elseif_clauses.rewrite(rewriter, new_parents);
9351 var else_clause = this.else_clause.rewrite(rewriter, new_parents);
9352 var endif_keyword = this.endif_keyword.rewrite(rewriter, new_parents);
9353 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
9355 keyword === this.keyword &&
9356 left_paren === this.left_paren &&
9357 condition === this.condition &&
9358 right_paren === this.right_paren &&
9359 colon === this.colon &&
9360 statement === this.statement &&
9361 elseif_clauses === this.elseif_clauses &&
9362 else_clause === this.else_clause &&
9363 endif_keyword === this.endif_keyword &&
9364 semicolon === this.semicolon)
9366 return rewriter(this, parents);
9370 return rewriter(new AlternateIfStatement(
9380 semicolon), parents);
9383 static from_json(json, position, source)
9385 let keyword = EditableSyntax.from_json(
9386 json.alternate_if_keyword, position, source);
9387 position += keyword.width;
9388 let left_paren = EditableSyntax.from_json(
9389 json.alternate_if_left_paren, position, source);
9390 position += left_paren.width;
9391 let condition = EditableSyntax.from_json(
9392 json.alternate_if_condition, position, source);
9393 position += condition.width;
9394 let right_paren = EditableSyntax.from_json(
9395 json.alternate_if_right_paren, position, source);
9396 position += right_paren.width;
9397 let colon = EditableSyntax.from_json(
9398 json.alternate_if_colon, position, source);
9399 position += colon.width;
9400 let statement = EditableSyntax.from_json(
9401 json.alternate_if_statement, position, source);
9402 position += statement.width;
9403 let elseif_clauses = EditableSyntax.from_json(
9404 json.alternate_if_elseif_clauses, position, source);
9405 position += elseif_clauses.width;
9406 let else_clause = EditableSyntax.from_json(
9407 json.alternate_if_else_clause, position, source);
9408 position += else_clause.width;
9409 let endif_keyword = EditableSyntax.from_json(
9410 json.alternate_if_endif_keyword, position, source);
9411 position += endif_keyword.width;
9412 let semicolon = EditableSyntax.from_json(
9413 json.alternate_if_semicolon, position, source);
9414 position += semicolon.width;
9415 return new AlternateIfStatement(
9429 if (AlternateIfStatement._children_keys == null)
9430 AlternateIfStatement._children_keys = [
9441 return AlternateIfStatement._children_keys;
9444 class AlternateElseifClause extends EditableSyntax
9454 super('alternate_elseif_clause', {
9456 left_paren: left_paren,
9457 condition: condition,
9458 right_paren: right_paren,
9460 statement: statement });
9462 get keyword() { return this.children.keyword; }
9463 get left_paren() { return this.children.left_paren; }
9464 get condition() { return this.children.condition; }
9465 get right_paren() { return this.children.right_paren; }
9466 get colon() { return this.children.colon; }
9467 get statement() { return this.children.statement; }
9468 with_keyword(keyword){
9469 return new AlternateElseifClause(
9477 with_left_paren(left_paren){
9478 return new AlternateElseifClause(
9486 with_condition(condition){
9487 return new AlternateElseifClause(
9495 with_right_paren(right_paren){
9496 return new AlternateElseifClause(
9505 return new AlternateElseifClause(
9513 with_statement(statement){
9514 return new AlternateElseifClause(
9522 rewrite(rewriter, parents)
9524 if (parents == undefined)
9526 let new_parents = parents.slice();
9527 new_parents.push(this);
9528 var keyword = this.keyword.rewrite(rewriter, new_parents);
9529 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
9530 var condition = this.condition.rewrite(rewriter, new_parents);
9531 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
9532 var colon = this.colon.rewrite(rewriter, new_parents);
9533 var statement = this.statement.rewrite(rewriter, new_parents);
9535 keyword === this.keyword &&
9536 left_paren === this.left_paren &&
9537 condition === this.condition &&
9538 right_paren === this.right_paren &&
9539 colon === this.colon &&
9540 statement === this.statement)
9542 return rewriter(this, parents);
9546 return rewriter(new AlternateElseifClause(
9552 statement), parents);
9555 static from_json(json, position, source)
9557 let keyword = EditableSyntax.from_json(
9558 json.alternate_elseif_keyword, position, source);
9559 position += keyword.width;
9560 let left_paren = EditableSyntax.from_json(
9561 json.alternate_elseif_left_paren, position, source);
9562 position += left_paren.width;
9563 let condition = EditableSyntax.from_json(
9564 json.alternate_elseif_condition, position, source);
9565 position += condition.width;
9566 let right_paren = EditableSyntax.from_json(
9567 json.alternate_elseif_right_paren, position, source);
9568 position += right_paren.width;
9569 let colon = EditableSyntax.from_json(
9570 json.alternate_elseif_colon, position, source);
9571 position += colon.width;
9572 let statement = EditableSyntax.from_json(
9573 json.alternate_elseif_statement, position, source);
9574 position += statement.width;
9575 return new AlternateElseifClause(
9585 if (AlternateElseifClause._children_keys == null)
9586 AlternateElseifClause._children_keys = [
9593 return AlternateElseifClause._children_keys;
9596 class AlternateElseClause extends EditableSyntax
9603 super('alternate_else_clause', {
9606 statement: statement });
9608 get keyword() { return this.children.keyword; }
9609 get colon() { return this.children.colon; }
9610 get statement() { return this.children.statement; }
9611 with_keyword(keyword){
9612 return new AlternateElseClause(
9618 return new AlternateElseClause(
9623 with_statement(statement){
9624 return new AlternateElseClause(
9629 rewrite(rewriter, parents)
9631 if (parents == undefined)
9633 let new_parents = parents.slice();
9634 new_parents.push(this);
9635 var keyword = this.keyword.rewrite(rewriter, new_parents);
9636 var colon = this.colon.rewrite(rewriter, new_parents);
9637 var statement = this.statement.rewrite(rewriter, new_parents);
9639 keyword === this.keyword &&
9640 colon === this.colon &&
9641 statement === this.statement)
9643 return rewriter(this, parents);
9647 return rewriter(new AlternateElseClause(
9650 statement), parents);
9653 static from_json(json, position, source)
9655 let keyword = EditableSyntax.from_json(
9656 json.alternate_else_keyword, position, source);
9657 position += keyword.width;
9658 let colon = EditableSyntax.from_json(
9659 json.alternate_else_colon, position, source);
9660 position += colon.width;
9661 let statement = EditableSyntax.from_json(
9662 json.alternate_else_statement, position, source);
9663 position += statement.width;
9664 return new AlternateElseClause(
9671 if (AlternateElseClause._children_keys == null)
9672 AlternateElseClause._children_keys = [
9676 return AlternateElseClause._children_keys;
9679 class TryStatement extends EditableSyntax
9687 super('try_statement', {
9689 compound_statement: compound_statement,
9690 catch_clauses: catch_clauses,
9691 finally_clause: finally_clause });
9693 get keyword() { return this.children.keyword; }
9694 get compound_statement() { return this.children.compound_statement; }
9695 get catch_clauses() { return this.children.catch_clauses; }
9696 get finally_clause() { return this.children.finally_clause; }
9697 with_keyword(keyword){
9698 return new TryStatement(
9700 this.compound_statement,
9702 this.finally_clause);
9704 with_compound_statement(compound_statement){
9705 return new TryStatement(
9709 this.finally_clause);
9711 with_catch_clauses(catch_clauses){
9712 return new TryStatement(
9714 this.compound_statement,
9716 this.finally_clause);
9718 with_finally_clause(finally_clause){
9719 return new TryStatement(
9721 this.compound_statement,
9725 rewrite(rewriter, parents)
9727 if (parents == undefined)
9729 let new_parents = parents.slice();
9730 new_parents.push(this);
9731 var keyword = this.keyword.rewrite(rewriter, new_parents);
9732 var compound_statement = this.compound_statement.rewrite(rewriter, new_parents);
9733 var catch_clauses = this.catch_clauses.rewrite(rewriter, new_parents);
9734 var finally_clause = this.finally_clause.rewrite(rewriter, new_parents);
9736 keyword === this.keyword &&
9737 compound_statement === this.compound_statement &&
9738 catch_clauses === this.catch_clauses &&
9739 finally_clause === this.finally_clause)
9741 return rewriter(this, parents);
9745 return rewriter(new TryStatement(
9749 finally_clause), parents);
9752 static from_json(json, position, source)
9754 let keyword = EditableSyntax.from_json(
9755 json.try_keyword, position, source);
9756 position += keyword.width;
9757 let compound_statement = EditableSyntax.from_json(
9758 json.try_compound_statement, position, source);
9759 position += compound_statement.width;
9760 let catch_clauses = EditableSyntax.from_json(
9761 json.try_catch_clauses, position, source);
9762 position += catch_clauses.width;
9763 let finally_clause = EditableSyntax.from_json(
9764 json.try_finally_clause, position, source);
9765 position += finally_clause.width;
9766 return new TryStatement(
9774 if (TryStatement._children_keys == null)
9775 TryStatement._children_keys = [
9777 'compound_statement',
9780 return TryStatement._children_keys;
9783 class CatchClause extends EditableSyntax
9793 super('catch_clause', {
9795 left_paren: left_paren,
9798 right_paren: right_paren,
9801 get keyword() { return this.children.keyword; }
9802 get left_paren() { return this.children.left_paren; }
9803 get type() { return this.children.type; }
9804 get variable() { return this.children.variable; }
9805 get right_paren() { return this.children.right_paren; }
9806 get body() { return this.children.body; }
9807 with_keyword(keyword){
9808 return new CatchClause(
9816 with_left_paren(left_paren){
9817 return new CatchClause(
9826 return new CatchClause(
9834 with_variable(variable){
9835 return new CatchClause(
9843 with_right_paren(right_paren){
9844 return new CatchClause(
9853 return new CatchClause(
9861 rewrite(rewriter, parents)
9863 if (parents == undefined)
9865 let new_parents = parents.slice();
9866 new_parents.push(this);
9867 var keyword = this.keyword.rewrite(rewriter, new_parents);
9868 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
9869 var type = this.type.rewrite(rewriter, new_parents);
9870 var variable = this.variable.rewrite(rewriter, new_parents);
9871 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
9872 var body = this.body.rewrite(rewriter, new_parents);
9874 keyword === this.keyword &&
9875 left_paren === this.left_paren &&
9876 type === this.type &&
9877 variable === this.variable &&
9878 right_paren === this.right_paren &&
9881 return rewriter(this, parents);
9885 return rewriter(new CatchClause(
9894 static from_json(json, position, source)
9896 let keyword = EditableSyntax.from_json(
9897 json.catch_keyword, position, source);
9898 position += keyword.width;
9899 let left_paren = EditableSyntax.from_json(
9900 json.catch_left_paren, position, source);
9901 position += left_paren.width;
9902 let type = EditableSyntax.from_json(
9903 json.catch_type, position, source);
9904 position += type.width;
9905 let variable = EditableSyntax.from_json(
9906 json.catch_variable, position, source);
9907 position += variable.width;
9908 let right_paren = EditableSyntax.from_json(
9909 json.catch_right_paren, position, source);
9910 position += right_paren.width;
9911 let body = EditableSyntax.from_json(
9912 json.catch_body, position, source);
9913 position += body.width;
9914 return new CatchClause(
9924 if (CatchClause._children_keys == null)
9925 CatchClause._children_keys = [
9932 return CatchClause._children_keys;
9935 class FinallyClause extends EditableSyntax
9941 super('finally_clause', {
9945 get keyword() { return this.children.keyword; }
9946 get body() { return this.children.body; }
9947 with_keyword(keyword){
9948 return new FinallyClause(
9953 return new FinallyClause(
9957 rewrite(rewriter, parents)
9959 if (parents == undefined)
9961 let new_parents = parents.slice();
9962 new_parents.push(this);
9963 var keyword = this.keyword.rewrite(rewriter, new_parents);
9964 var body = this.body.rewrite(rewriter, new_parents);
9966 keyword === this.keyword &&
9969 return rewriter(this, parents);
9973 return rewriter(new FinallyClause(
9978 static from_json(json, position, source)
9980 let keyword = EditableSyntax.from_json(
9981 json.finally_keyword, position, source);
9982 position += keyword.width;
9983 let body = EditableSyntax.from_json(
9984 json.finally_body, position, source);
9985 position += body.width;
9986 return new FinallyClause(
9992 if (FinallyClause._children_keys == null)
9993 FinallyClause._children_keys = [
9996 return FinallyClause._children_keys;
9999 class DoStatement extends EditableSyntax
10010 super('do_statement', {
10013 while_keyword: while_keyword,
10014 left_paren: left_paren,
10015 condition: condition,
10016 right_paren: right_paren,
10017 semicolon: semicolon });
10019 get keyword() { return this.children.keyword; }
10020 get body() { return this.children.body; }
10021 get while_keyword() { return this.children.while_keyword; }
10022 get left_paren() { return this.children.left_paren; }
10023 get condition() { return this.children.condition; }
10024 get right_paren() { return this.children.right_paren; }
10025 get semicolon() { return this.children.semicolon; }
10026 with_keyword(keyword){
10027 return new DoStatement(
10030 this.while_keyword,
10037 return new DoStatement(
10040 this.while_keyword,
10046 with_while_keyword(while_keyword){
10047 return new DoStatement(
10056 with_left_paren(left_paren){
10057 return new DoStatement(
10060 this.while_keyword,
10066 with_condition(condition){
10067 return new DoStatement(
10070 this.while_keyword,
10076 with_right_paren(right_paren){
10077 return new DoStatement(
10080 this.while_keyword,
10086 with_semicolon(semicolon){
10087 return new DoStatement(
10090 this.while_keyword,
10096 rewrite(rewriter, parents)
10098 if (parents == undefined)
10100 let new_parents = parents.slice();
10101 new_parents.push(this);
10102 var keyword = this.keyword.rewrite(rewriter, new_parents);
10103 var body = this.body.rewrite(rewriter, new_parents);
10104 var while_keyword = this.while_keyword.rewrite(rewriter, new_parents);
10105 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
10106 var condition = this.condition.rewrite(rewriter, new_parents);
10107 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
10108 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
10110 keyword === this.keyword &&
10111 body === this.body &&
10112 while_keyword === this.while_keyword &&
10113 left_paren === this.left_paren &&
10114 condition === this.condition &&
10115 right_paren === this.right_paren &&
10116 semicolon === this.semicolon)
10118 return rewriter(this, parents);
10122 return rewriter(new DoStatement(
10129 semicolon), parents);
10132 static from_json(json, position, source)
10134 let keyword = EditableSyntax.from_json(
10135 json.do_keyword, position, source);
10136 position += keyword.width;
10137 let body = EditableSyntax.from_json(
10138 json.do_body, position, source);
10139 position += body.width;
10140 let while_keyword = EditableSyntax.from_json(
10141 json.do_while_keyword, position, source);
10142 position += while_keyword.width;
10143 let left_paren = EditableSyntax.from_json(
10144 json.do_left_paren, position, source);
10145 position += left_paren.width;
10146 let condition = EditableSyntax.from_json(
10147 json.do_condition, position, source);
10148 position += condition.width;
10149 let right_paren = EditableSyntax.from_json(
10150 json.do_right_paren, position, source);
10151 position += right_paren.width;
10152 let semicolon = EditableSyntax.from_json(
10153 json.do_semicolon, position, source);
10154 position += semicolon.width;
10155 return new DoStatement(
10164 get children_keys()
10166 if (DoStatement._children_keys == null)
10167 DoStatement._children_keys = [
10175 return DoStatement._children_keys;
10178 class ForStatement extends EditableSyntax
10191 super('for_statement', {
10193 left_paren: left_paren,
10194 initializer: initializer,
10195 first_semicolon: first_semicolon,
10197 second_semicolon: second_semicolon,
10198 end_of_loop: end_of_loop,
10199 right_paren: right_paren,
10202 get keyword() { return this.children.keyword; }
10203 get left_paren() { return this.children.left_paren; }
10204 get initializer() { return this.children.initializer; }
10205 get first_semicolon() { return this.children.first_semicolon; }
10206 get control() { return this.children.control; }
10207 get second_semicolon() { return this.children.second_semicolon; }
10208 get end_of_loop() { return this.children.end_of_loop; }
10209 get right_paren() { return this.children.right_paren; }
10210 get body() { return this.children.body; }
10211 with_keyword(keyword){
10212 return new ForStatement(
10216 this.first_semicolon,
10218 this.second_semicolon,
10223 with_left_paren(left_paren){
10224 return new ForStatement(
10228 this.first_semicolon,
10230 this.second_semicolon,
10235 with_initializer(initializer){
10236 return new ForStatement(
10240 this.first_semicolon,
10242 this.second_semicolon,
10247 with_first_semicolon(first_semicolon){
10248 return new ForStatement(
10254 this.second_semicolon,
10259 with_control(control){
10260 return new ForStatement(
10264 this.first_semicolon,
10266 this.second_semicolon,
10271 with_second_semicolon(second_semicolon){
10272 return new ForStatement(
10276 this.first_semicolon,
10283 with_end_of_loop(end_of_loop){
10284 return new ForStatement(
10288 this.first_semicolon,
10290 this.second_semicolon,
10295 with_right_paren(right_paren){
10296 return new ForStatement(
10300 this.first_semicolon,
10302 this.second_semicolon,
10308 return new ForStatement(
10312 this.first_semicolon,
10314 this.second_semicolon,
10319 rewrite(rewriter, parents)
10321 if (parents == undefined)
10323 let new_parents = parents.slice();
10324 new_parents.push(this);
10325 var keyword = this.keyword.rewrite(rewriter, new_parents);
10326 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
10327 var initializer = this.initializer.rewrite(rewriter, new_parents);
10328 var first_semicolon = this.first_semicolon.rewrite(rewriter, new_parents);
10329 var control = this.control.rewrite(rewriter, new_parents);
10330 var second_semicolon = this.second_semicolon.rewrite(rewriter, new_parents);
10331 var end_of_loop = this.end_of_loop.rewrite(rewriter, new_parents);
10332 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
10333 var body = this.body.rewrite(rewriter, new_parents);
10335 keyword === this.keyword &&
10336 left_paren === this.left_paren &&
10337 initializer === this.initializer &&
10338 first_semicolon === this.first_semicolon &&
10339 control === this.control &&
10340 second_semicolon === this.second_semicolon &&
10341 end_of_loop === this.end_of_loop &&
10342 right_paren === this.right_paren &&
10343 body === this.body)
10345 return rewriter(this, parents);
10349 return rewriter(new ForStatement(
10361 static from_json(json, position, source)
10363 let keyword = EditableSyntax.from_json(
10364 json.for_keyword, position, source);
10365 position += keyword.width;
10366 let left_paren = EditableSyntax.from_json(
10367 json.for_left_paren, position, source);
10368 position += left_paren.width;
10369 let initializer = EditableSyntax.from_json(
10370 json.for_initializer, position, source);
10371 position += initializer.width;
10372 let first_semicolon = EditableSyntax.from_json(
10373 json.for_first_semicolon, position, source);
10374 position += first_semicolon.width;
10375 let control = EditableSyntax.from_json(
10376 json.for_control, position, source);
10377 position += control.width;
10378 let second_semicolon = EditableSyntax.from_json(
10379 json.for_second_semicolon, position, source);
10380 position += second_semicolon.width;
10381 let end_of_loop = EditableSyntax.from_json(
10382 json.for_end_of_loop, position, source);
10383 position += end_of_loop.width;
10384 let right_paren = EditableSyntax.from_json(
10385 json.for_right_paren, position, source);
10386 position += right_paren.width;
10387 let body = EditableSyntax.from_json(
10388 json.for_body, position, source);
10389 position += body.width;
10390 return new ForStatement(
10401 get children_keys()
10403 if (ForStatement._children_keys == null)
10404 ForStatement._children_keys = [
10410 'second_semicolon',
10414 return ForStatement._children_keys;
10417 class ForeachStatement extends EditableSyntax
10431 super('foreach_statement', {
10433 left_paren: left_paren,
10434 collection: collection,
10435 await_keyword: await_keyword,
10440 right_paren: right_paren,
10443 get keyword() { return this.children.keyword; }
10444 get left_paren() { return this.children.left_paren; }
10445 get collection() { return this.children.collection; }
10446 get await_keyword() { return this.children.await_keyword; }
10447 get as() { return this.children.as; }
10448 get key() { return this.children.key; }
10449 get arrow() { return this.children.arrow; }
10450 get value() { return this.children.value; }
10451 get right_paren() { return this.children.right_paren; }
10452 get body() { return this.children.body; }
10453 with_keyword(keyword){
10454 return new ForeachStatement(
10458 this.await_keyword,
10466 with_left_paren(left_paren){
10467 return new ForeachStatement(
10471 this.await_keyword,
10479 with_collection(collection){
10480 return new ForeachStatement(
10484 this.await_keyword,
10492 with_await_keyword(await_keyword){
10493 return new ForeachStatement(
10506 return new ForeachStatement(
10510 this.await_keyword,
10519 return new ForeachStatement(
10523 this.await_keyword,
10532 return new ForeachStatement(
10536 this.await_keyword,
10545 return new ForeachStatement(
10549 this.await_keyword,
10557 with_right_paren(right_paren){
10558 return new ForeachStatement(
10562 this.await_keyword,
10571 return new ForeachStatement(
10575 this.await_keyword,
10583 rewrite(rewriter, parents)
10585 if (parents == undefined)
10587 let new_parents = parents.slice();
10588 new_parents.push(this);
10589 var keyword = this.keyword.rewrite(rewriter, new_parents);
10590 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
10591 var collection = this.collection.rewrite(rewriter, new_parents);
10592 var await_keyword = this.await_keyword.rewrite(rewriter, new_parents);
10593 var as = this.as.rewrite(rewriter, new_parents);
10594 var key = this.key.rewrite(rewriter, new_parents);
10595 var arrow = this.arrow.rewrite(rewriter, new_parents);
10596 var value = this.value.rewrite(rewriter, new_parents);
10597 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
10598 var body = this.body.rewrite(rewriter, new_parents);
10600 keyword === this.keyword &&
10601 left_paren === this.left_paren &&
10602 collection === this.collection &&
10603 await_keyword === this.await_keyword &&
10605 key === this.key &&
10606 arrow === this.arrow &&
10607 value === this.value &&
10608 right_paren === this.right_paren &&
10609 body === this.body)
10611 return rewriter(this, parents);
10615 return rewriter(new ForeachStatement(
10628 static from_json(json, position, source)
10630 let keyword = EditableSyntax.from_json(
10631 json.foreach_keyword, position, source);
10632 position += keyword.width;
10633 let left_paren = EditableSyntax.from_json(
10634 json.foreach_left_paren, position, source);
10635 position += left_paren.width;
10636 let collection = EditableSyntax.from_json(
10637 json.foreach_collection, position, source);
10638 position += collection.width;
10639 let await_keyword = EditableSyntax.from_json(
10640 json.foreach_await_keyword, position, source);
10641 position += await_keyword.width;
10642 let as = EditableSyntax.from_json(
10643 json.foreach_as, position, source);
10644 position += as.width;
10645 let key = EditableSyntax.from_json(
10646 json.foreach_key, position, source);
10647 position += key.width;
10648 let arrow = EditableSyntax.from_json(
10649 json.foreach_arrow, position, source);
10650 position += arrow.width;
10651 let value = EditableSyntax.from_json(
10652 json.foreach_value, position, source);
10653 position += value.width;
10654 let right_paren = EditableSyntax.from_json(
10655 json.foreach_right_paren, position, source);
10656 position += right_paren.width;
10657 let body = EditableSyntax.from_json(
10658 json.foreach_body, position, source);
10659 position += body.width;
10660 return new ForeachStatement(
10672 get children_keys()
10674 if (ForeachStatement._children_keys == null)
10675 ForeachStatement._children_keys = [
10686 return ForeachStatement._children_keys;
10689 class SwitchStatement extends EditableSyntax
10700 super('switch_statement', {
10702 left_paren: left_paren,
10703 expression: expression,
10704 right_paren: right_paren,
10705 left_brace: left_brace,
10706 sections: sections,
10707 right_brace: right_brace });
10709 get keyword() { return this.children.keyword; }
10710 get left_paren() { return this.children.left_paren; }
10711 get expression() { return this.children.expression; }
10712 get right_paren() { return this.children.right_paren; }
10713 get left_brace() { return this.children.left_brace; }
10714 get sections() { return this.children.sections; }
10715 get right_brace() { return this.children.right_brace; }
10716 with_keyword(keyword){
10717 return new SwitchStatement(
10726 with_left_paren(left_paren){
10727 return new SwitchStatement(
10736 with_expression(expression){
10737 return new SwitchStatement(
10746 with_right_paren(right_paren){
10747 return new SwitchStatement(
10756 with_left_brace(left_brace){
10757 return new SwitchStatement(
10766 with_sections(sections){
10767 return new SwitchStatement(
10776 with_right_brace(right_brace){
10777 return new SwitchStatement(
10786 rewrite(rewriter, parents)
10788 if (parents == undefined)
10790 let new_parents = parents.slice();
10791 new_parents.push(this);
10792 var keyword = this.keyword.rewrite(rewriter, new_parents);
10793 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
10794 var expression = this.expression.rewrite(rewriter, new_parents);
10795 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
10796 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
10797 var sections = this.sections.rewrite(rewriter, new_parents);
10798 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
10800 keyword === this.keyword &&
10801 left_paren === this.left_paren &&
10802 expression === this.expression &&
10803 right_paren === this.right_paren &&
10804 left_brace === this.left_brace &&
10805 sections === this.sections &&
10806 right_brace === this.right_brace)
10808 return rewriter(this, parents);
10812 return rewriter(new SwitchStatement(
10819 right_brace), parents);
10822 static from_json(json, position, source)
10824 let keyword = EditableSyntax.from_json(
10825 json.switch_keyword, position, source);
10826 position += keyword.width;
10827 let left_paren = EditableSyntax.from_json(
10828 json.switch_left_paren, position, source);
10829 position += left_paren.width;
10830 let expression = EditableSyntax.from_json(
10831 json.switch_expression, position, source);
10832 position += expression.width;
10833 let right_paren = EditableSyntax.from_json(
10834 json.switch_right_paren, position, source);
10835 position += right_paren.width;
10836 let left_brace = EditableSyntax.from_json(
10837 json.switch_left_brace, position, source);
10838 position += left_brace.width;
10839 let sections = EditableSyntax.from_json(
10840 json.switch_sections, position, source);
10841 position += sections.width;
10842 let right_brace = EditableSyntax.from_json(
10843 json.switch_right_brace, position, source);
10844 position += right_brace.width;
10845 return new SwitchStatement(
10854 get children_keys()
10856 if (SwitchStatement._children_keys == null)
10857 SwitchStatement._children_keys = [
10865 return SwitchStatement._children_keys;
10868 class AlternateSwitchStatement extends EditableSyntax
10880 super('alternate_switch_statement', {
10882 left_paren: left_paren,
10883 expression: expression,
10884 right_paren: right_paren,
10885 opening_colon: opening_colon,
10886 sections: sections,
10887 closing_endswitch: closing_endswitch,
10888 closing_semicolon: closing_semicolon });
10890 get keyword() { return this.children.keyword; }
10891 get left_paren() { return this.children.left_paren; }
10892 get expression() { return this.children.expression; }
10893 get right_paren() { return this.children.right_paren; }
10894 get opening_colon() { return this.children.opening_colon; }
10895 get sections() { return this.children.sections; }
10896 get closing_endswitch() { return this.children.closing_endswitch; }
10897 get closing_semicolon() { return this.children.closing_semicolon; }
10898 with_keyword(keyword){
10899 return new AlternateSwitchStatement(
10904 this.opening_colon,
10906 this.closing_endswitch,
10907 this.closing_semicolon);
10909 with_left_paren(left_paren){
10910 return new AlternateSwitchStatement(
10915 this.opening_colon,
10917 this.closing_endswitch,
10918 this.closing_semicolon);
10920 with_expression(expression){
10921 return new AlternateSwitchStatement(
10926 this.opening_colon,
10928 this.closing_endswitch,
10929 this.closing_semicolon);
10931 with_right_paren(right_paren){
10932 return new AlternateSwitchStatement(
10937 this.opening_colon,
10939 this.closing_endswitch,
10940 this.closing_semicolon);
10942 with_opening_colon(opening_colon){
10943 return new AlternateSwitchStatement(
10950 this.closing_endswitch,
10951 this.closing_semicolon);
10953 with_sections(sections){
10954 return new AlternateSwitchStatement(
10959 this.opening_colon,
10961 this.closing_endswitch,
10962 this.closing_semicolon);
10964 with_closing_endswitch(closing_endswitch){
10965 return new AlternateSwitchStatement(
10970 this.opening_colon,
10973 this.closing_semicolon);
10975 with_closing_semicolon(closing_semicolon){
10976 return new AlternateSwitchStatement(
10981 this.opening_colon,
10983 this.closing_endswitch,
10984 closing_semicolon);
10986 rewrite(rewriter, parents)
10988 if (parents == undefined)
10990 let new_parents = parents.slice();
10991 new_parents.push(this);
10992 var keyword = this.keyword.rewrite(rewriter, new_parents);
10993 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
10994 var expression = this.expression.rewrite(rewriter, new_parents);
10995 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
10996 var opening_colon = this.opening_colon.rewrite(rewriter, new_parents);
10997 var sections = this.sections.rewrite(rewriter, new_parents);
10998 var closing_endswitch = this.closing_endswitch.rewrite(rewriter, new_parents);
10999 var closing_semicolon = this.closing_semicolon.rewrite(rewriter, new_parents);
11001 keyword === this.keyword &&
11002 left_paren === this.left_paren &&
11003 expression === this.expression &&
11004 right_paren === this.right_paren &&
11005 opening_colon === this.opening_colon &&
11006 sections === this.sections &&
11007 closing_endswitch === this.closing_endswitch &&
11008 closing_semicolon === this.closing_semicolon)
11010 return rewriter(this, parents);
11014 return rewriter(new AlternateSwitchStatement(
11022 closing_semicolon), parents);
11025 static from_json(json, position, source)
11027 let keyword = EditableSyntax.from_json(
11028 json.alternate_switch_keyword, position, source);
11029 position += keyword.width;
11030 let left_paren = EditableSyntax.from_json(
11031 json.alternate_switch_left_paren, position, source);
11032 position += left_paren.width;
11033 let expression = EditableSyntax.from_json(
11034 json.alternate_switch_expression, position, source);
11035 position += expression.width;
11036 let right_paren = EditableSyntax.from_json(
11037 json.alternate_switch_right_paren, position, source);
11038 position += right_paren.width;
11039 let opening_colon = EditableSyntax.from_json(
11040 json.alternate_switch_opening_colon, position, source);
11041 position += opening_colon.width;
11042 let sections = EditableSyntax.from_json(
11043 json.alternate_switch_sections, position, source);
11044 position += sections.width;
11045 let closing_endswitch = EditableSyntax.from_json(
11046 json.alternate_switch_closing_endswitch, position, source);
11047 position += closing_endswitch.width;
11048 let closing_semicolon = EditableSyntax.from_json(
11049 json.alternate_switch_closing_semicolon, position, source);
11050 position += closing_semicolon.width;
11051 return new AlternateSwitchStatement(
11059 closing_semicolon);
11061 get children_keys()
11063 if (AlternateSwitchStatement._children_keys == null)
11064 AlternateSwitchStatement._children_keys = [
11071 'closing_endswitch',
11072 'closing_semicolon'];
11073 return AlternateSwitchStatement._children_keys;
11076 class SwitchSection extends EditableSyntax
11083 super('switch_section', {
11085 statements: statements,
11086 fallthrough: fallthrough });
11088 get labels() { return this.children.labels; }
11089 get statements() { return this.children.statements; }
11090 get fallthrough() { return this.children.fallthrough; }
11091 with_labels(labels){
11092 return new SwitchSection(
11097 with_statements(statements){
11098 return new SwitchSection(
11103 with_fallthrough(fallthrough){
11104 return new SwitchSection(
11109 rewrite(rewriter, parents)
11111 if (parents == undefined)
11113 let new_parents = parents.slice();
11114 new_parents.push(this);
11115 var labels = this.labels.rewrite(rewriter, new_parents);
11116 var statements = this.statements.rewrite(rewriter, new_parents);
11117 var fallthrough = this.fallthrough.rewrite(rewriter, new_parents);
11119 labels === this.labels &&
11120 statements === this.statements &&
11121 fallthrough === this.fallthrough)
11123 return rewriter(this, parents);
11127 return rewriter(new SwitchSection(
11130 fallthrough), parents);
11133 static from_json(json, position, source)
11135 let labels = EditableSyntax.from_json(
11136 json.switch_section_labels, position, source);
11137 position += labels.width;
11138 let statements = EditableSyntax.from_json(
11139 json.switch_section_statements, position, source);
11140 position += statements.width;
11141 let fallthrough = EditableSyntax.from_json(
11142 json.switch_section_fallthrough, position, source);
11143 position += fallthrough.width;
11144 return new SwitchSection(
11149 get children_keys()
11151 if (SwitchSection._children_keys == null)
11152 SwitchSection._children_keys = [
11156 return SwitchSection._children_keys;
11159 class SwitchFallthrough extends EditableSyntax
11165 super('switch_fallthrough', {
11167 semicolon: semicolon });
11169 get keyword() { return this.children.keyword; }
11170 get semicolon() { return this.children.semicolon; }
11171 with_keyword(keyword){
11172 return new SwitchFallthrough(
11176 with_semicolon(semicolon){
11177 return new SwitchFallthrough(
11181 rewrite(rewriter, parents)
11183 if (parents == undefined)
11185 let new_parents = parents.slice();
11186 new_parents.push(this);
11187 var keyword = this.keyword.rewrite(rewriter, new_parents);
11188 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11190 keyword === this.keyword &&
11191 semicolon === this.semicolon)
11193 return rewriter(this, parents);
11197 return rewriter(new SwitchFallthrough(
11199 semicolon), parents);
11202 static from_json(json, position, source)
11204 let keyword = EditableSyntax.from_json(
11205 json.fallthrough_keyword, position, source);
11206 position += keyword.width;
11207 let semicolon = EditableSyntax.from_json(
11208 json.fallthrough_semicolon, position, source);
11209 position += semicolon.width;
11210 return new SwitchFallthrough(
11214 get children_keys()
11216 if (SwitchFallthrough._children_keys == null)
11217 SwitchFallthrough._children_keys = [
11220 return SwitchFallthrough._children_keys;
11223 class CaseLabel extends EditableSyntax
11230 super('case_label', {
11232 expression: expression,
11235 get keyword() { return this.children.keyword; }
11236 get expression() { return this.children.expression; }
11237 get colon() { return this.children.colon; }
11238 with_keyword(keyword){
11239 return new CaseLabel(
11244 with_expression(expression){
11245 return new CaseLabel(
11251 return new CaseLabel(
11256 rewrite(rewriter, parents)
11258 if (parents == undefined)
11260 let new_parents = parents.slice();
11261 new_parents.push(this);
11262 var keyword = this.keyword.rewrite(rewriter, new_parents);
11263 var expression = this.expression.rewrite(rewriter, new_parents);
11264 var colon = this.colon.rewrite(rewriter, new_parents);
11266 keyword === this.keyword &&
11267 expression === this.expression &&
11268 colon === this.colon)
11270 return rewriter(this, parents);
11274 return rewriter(new CaseLabel(
11280 static from_json(json, position, source)
11282 let keyword = EditableSyntax.from_json(
11283 json.case_keyword, position, source);
11284 position += keyword.width;
11285 let expression = EditableSyntax.from_json(
11286 json.case_expression, position, source);
11287 position += expression.width;
11288 let colon = EditableSyntax.from_json(
11289 json.case_colon, position, source);
11290 position += colon.width;
11291 return new CaseLabel(
11296 get children_keys()
11298 if (CaseLabel._children_keys == null)
11299 CaseLabel._children_keys = [
11303 return CaseLabel._children_keys;
11306 class DefaultLabel extends EditableSyntax
11312 super('default_label', {
11316 get keyword() { return this.children.keyword; }
11317 get colon() { return this.children.colon; }
11318 with_keyword(keyword){
11319 return new DefaultLabel(
11324 return new DefaultLabel(
11328 rewrite(rewriter, parents)
11330 if (parents == undefined)
11332 let new_parents = parents.slice();
11333 new_parents.push(this);
11334 var keyword = this.keyword.rewrite(rewriter, new_parents);
11335 var colon = this.colon.rewrite(rewriter, new_parents);
11337 keyword === this.keyword &&
11338 colon === this.colon)
11340 return rewriter(this, parents);
11344 return rewriter(new DefaultLabel(
11349 static from_json(json, position, source)
11351 let keyword = EditableSyntax.from_json(
11352 json.default_keyword, position, source);
11353 position += keyword.width;
11354 let colon = EditableSyntax.from_json(
11355 json.default_colon, position, source);
11356 position += colon.width;
11357 return new DefaultLabel(
11361 get children_keys()
11363 if (DefaultLabel._children_keys == null)
11364 DefaultLabel._children_keys = [
11367 return DefaultLabel._children_keys;
11370 class ReturnStatement extends EditableSyntax
11377 super('return_statement', {
11379 expression: expression,
11380 semicolon: semicolon });
11382 get keyword() { return this.children.keyword; }
11383 get expression() { return this.children.expression; }
11384 get semicolon() { return this.children.semicolon; }
11385 with_keyword(keyword){
11386 return new ReturnStatement(
11391 with_expression(expression){
11392 return new ReturnStatement(
11397 with_semicolon(semicolon){
11398 return new ReturnStatement(
11403 rewrite(rewriter, parents)
11405 if (parents == undefined)
11407 let new_parents = parents.slice();
11408 new_parents.push(this);
11409 var keyword = this.keyword.rewrite(rewriter, new_parents);
11410 var expression = this.expression.rewrite(rewriter, new_parents);
11411 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11413 keyword === this.keyword &&
11414 expression === this.expression &&
11415 semicolon === this.semicolon)
11417 return rewriter(this, parents);
11421 return rewriter(new ReturnStatement(
11424 semicolon), parents);
11427 static from_json(json, position, source)
11429 let keyword = EditableSyntax.from_json(
11430 json.return_keyword, position, source);
11431 position += keyword.width;
11432 let expression = EditableSyntax.from_json(
11433 json.return_expression, position, source);
11434 position += expression.width;
11435 let semicolon = EditableSyntax.from_json(
11436 json.return_semicolon, position, source);
11437 position += semicolon.width;
11438 return new ReturnStatement(
11443 get children_keys()
11445 if (ReturnStatement._children_keys == null)
11446 ReturnStatement._children_keys = [
11450 return ReturnStatement._children_keys;
11453 class GotoLabel extends EditableSyntax
11459 super('goto_label', {
11463 get name() { return this.children.name; }
11464 get colon() { return this.children.colon; }
11466 return new GotoLabel(
11471 return new GotoLabel(
11475 rewrite(rewriter, parents)
11477 if (parents == undefined)
11479 let new_parents = parents.slice();
11480 new_parents.push(this);
11481 var name = this.name.rewrite(rewriter, new_parents);
11482 var colon = this.colon.rewrite(rewriter, new_parents);
11484 name === this.name &&
11485 colon === this.colon)
11487 return rewriter(this, parents);
11491 return rewriter(new GotoLabel(
11496 static from_json(json, position, source)
11498 let name = EditableSyntax.from_json(
11499 json.goto_label_name, position, source);
11500 position += name.width;
11501 let colon = EditableSyntax.from_json(
11502 json.goto_label_colon, position, source);
11503 position += colon.width;
11504 return new GotoLabel(
11508 get children_keys()
11510 if (GotoLabel._children_keys == null)
11511 GotoLabel._children_keys = [
11514 return GotoLabel._children_keys;
11517 class GotoStatement extends EditableSyntax
11524 super('goto_statement', {
11526 label_name: label_name,
11527 semicolon: semicolon });
11529 get keyword() { return this.children.keyword; }
11530 get label_name() { return this.children.label_name; }
11531 get semicolon() { return this.children.semicolon; }
11532 with_keyword(keyword){
11533 return new GotoStatement(
11538 with_label_name(label_name){
11539 return new GotoStatement(
11544 with_semicolon(semicolon){
11545 return new GotoStatement(
11550 rewrite(rewriter, parents)
11552 if (parents == undefined)
11554 let new_parents = parents.slice();
11555 new_parents.push(this);
11556 var keyword = this.keyword.rewrite(rewriter, new_parents);
11557 var label_name = this.label_name.rewrite(rewriter, new_parents);
11558 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11560 keyword === this.keyword &&
11561 label_name === this.label_name &&
11562 semicolon === this.semicolon)
11564 return rewriter(this, parents);
11568 return rewriter(new GotoStatement(
11571 semicolon), parents);
11574 static from_json(json, position, source)
11576 let keyword = EditableSyntax.from_json(
11577 json.goto_statement_keyword, position, source);
11578 position += keyword.width;
11579 let label_name = EditableSyntax.from_json(
11580 json.goto_statement_label_name, position, source);
11581 position += label_name.width;
11582 let semicolon = EditableSyntax.from_json(
11583 json.goto_statement_semicolon, position, source);
11584 position += semicolon.width;
11585 return new GotoStatement(
11590 get children_keys()
11592 if (GotoStatement._children_keys == null)
11593 GotoStatement._children_keys = [
11597 return GotoStatement._children_keys;
11600 class ThrowStatement extends EditableSyntax
11607 super('throw_statement', {
11609 expression: expression,
11610 semicolon: semicolon });
11612 get keyword() { return this.children.keyword; }
11613 get expression() { return this.children.expression; }
11614 get semicolon() { return this.children.semicolon; }
11615 with_keyword(keyword){
11616 return new ThrowStatement(
11621 with_expression(expression){
11622 return new ThrowStatement(
11627 with_semicolon(semicolon){
11628 return new ThrowStatement(
11633 rewrite(rewriter, parents)
11635 if (parents == undefined)
11637 let new_parents = parents.slice();
11638 new_parents.push(this);
11639 var keyword = this.keyword.rewrite(rewriter, new_parents);
11640 var expression = this.expression.rewrite(rewriter, new_parents);
11641 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11643 keyword === this.keyword &&
11644 expression === this.expression &&
11645 semicolon === this.semicolon)
11647 return rewriter(this, parents);
11651 return rewriter(new ThrowStatement(
11654 semicolon), parents);
11657 static from_json(json, position, source)
11659 let keyword = EditableSyntax.from_json(
11660 json.throw_keyword, position, source);
11661 position += keyword.width;
11662 let expression = EditableSyntax.from_json(
11663 json.throw_expression, position, source);
11664 position += expression.width;
11665 let semicolon = EditableSyntax.from_json(
11666 json.throw_semicolon, position, source);
11667 position += semicolon.width;
11668 return new ThrowStatement(
11673 get children_keys()
11675 if (ThrowStatement._children_keys == null)
11676 ThrowStatement._children_keys = [
11680 return ThrowStatement._children_keys;
11683 class BreakStatement extends EditableSyntax
11690 super('break_statement', {
11693 semicolon: semicolon });
11695 get keyword() { return this.children.keyword; }
11696 get level() { return this.children.level; }
11697 get semicolon() { return this.children.semicolon; }
11698 with_keyword(keyword){
11699 return new BreakStatement(
11705 return new BreakStatement(
11710 with_semicolon(semicolon){
11711 return new BreakStatement(
11716 rewrite(rewriter, parents)
11718 if (parents == undefined)
11720 let new_parents = parents.slice();
11721 new_parents.push(this);
11722 var keyword = this.keyword.rewrite(rewriter, new_parents);
11723 var level = this.level.rewrite(rewriter, new_parents);
11724 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11726 keyword === this.keyword &&
11727 level === this.level &&
11728 semicolon === this.semicolon)
11730 return rewriter(this, parents);
11734 return rewriter(new BreakStatement(
11737 semicolon), parents);
11740 static from_json(json, position, source)
11742 let keyword = EditableSyntax.from_json(
11743 json.break_keyword, position, source);
11744 position += keyword.width;
11745 let level = EditableSyntax.from_json(
11746 json.break_level, position, source);
11747 position += level.width;
11748 let semicolon = EditableSyntax.from_json(
11749 json.break_semicolon, position, source);
11750 position += semicolon.width;
11751 return new BreakStatement(
11756 get children_keys()
11758 if (BreakStatement._children_keys == null)
11759 BreakStatement._children_keys = [
11763 return BreakStatement._children_keys;
11766 class ContinueStatement extends EditableSyntax
11773 super('continue_statement', {
11776 semicolon: semicolon });
11778 get keyword() { return this.children.keyword; }
11779 get level() { return this.children.level; }
11780 get semicolon() { return this.children.semicolon; }
11781 with_keyword(keyword){
11782 return new ContinueStatement(
11788 return new ContinueStatement(
11793 with_semicolon(semicolon){
11794 return new ContinueStatement(
11799 rewrite(rewriter, parents)
11801 if (parents == undefined)
11803 let new_parents = parents.slice();
11804 new_parents.push(this);
11805 var keyword = this.keyword.rewrite(rewriter, new_parents);
11806 var level = this.level.rewrite(rewriter, new_parents);
11807 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11809 keyword === this.keyword &&
11810 level === this.level &&
11811 semicolon === this.semicolon)
11813 return rewriter(this, parents);
11817 return rewriter(new ContinueStatement(
11820 semicolon), parents);
11823 static from_json(json, position, source)
11825 let keyword = EditableSyntax.from_json(
11826 json.continue_keyword, position, source);
11827 position += keyword.width;
11828 let level = EditableSyntax.from_json(
11829 json.continue_level, position, source);
11830 position += level.width;
11831 let semicolon = EditableSyntax.from_json(
11832 json.continue_semicolon, position, source);
11833 position += semicolon.width;
11834 return new ContinueStatement(
11839 get children_keys()
11841 if (ContinueStatement._children_keys == null)
11842 ContinueStatement._children_keys = [
11846 return ContinueStatement._children_keys;
11849 class EchoStatement extends EditableSyntax
11856 super('echo_statement', {
11858 expressions: expressions,
11859 semicolon: semicolon });
11861 get keyword() { return this.children.keyword; }
11862 get expressions() { return this.children.expressions; }
11863 get semicolon() { return this.children.semicolon; }
11864 with_keyword(keyword){
11865 return new EchoStatement(
11870 with_expressions(expressions){
11871 return new EchoStatement(
11876 with_semicolon(semicolon){
11877 return new EchoStatement(
11882 rewrite(rewriter, parents)
11884 if (parents == undefined)
11886 let new_parents = parents.slice();
11887 new_parents.push(this);
11888 var keyword = this.keyword.rewrite(rewriter, new_parents);
11889 var expressions = this.expressions.rewrite(rewriter, new_parents);
11890 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11892 keyword === this.keyword &&
11893 expressions === this.expressions &&
11894 semicolon === this.semicolon)
11896 return rewriter(this, parents);
11900 return rewriter(new EchoStatement(
11903 semicolon), parents);
11906 static from_json(json, position, source)
11908 let keyword = EditableSyntax.from_json(
11909 json.echo_keyword, position, source);
11910 position += keyword.width;
11911 let expressions = EditableSyntax.from_json(
11912 json.echo_expressions, position, source);
11913 position += expressions.width;
11914 let semicolon = EditableSyntax.from_json(
11915 json.echo_semicolon, position, source);
11916 position += semicolon.width;
11917 return new EchoStatement(
11922 get children_keys()
11924 if (EchoStatement._children_keys == null)
11925 EchoStatement._children_keys = [
11929 return EchoStatement._children_keys;
11932 class GlobalStatement extends EditableSyntax
11939 super('global_statement', {
11941 variables: variables,
11942 semicolon: semicolon });
11944 get keyword() { return this.children.keyword; }
11945 get variables() { return this.children.variables; }
11946 get semicolon() { return this.children.semicolon; }
11947 with_keyword(keyword){
11948 return new GlobalStatement(
11953 with_variables(variables){
11954 return new GlobalStatement(
11959 with_semicolon(semicolon){
11960 return new GlobalStatement(
11965 rewrite(rewriter, parents)
11967 if (parents == undefined)
11969 let new_parents = parents.slice();
11970 new_parents.push(this);
11971 var keyword = this.keyword.rewrite(rewriter, new_parents);
11972 var variables = this.variables.rewrite(rewriter, new_parents);
11973 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
11975 keyword === this.keyword &&
11976 variables === this.variables &&
11977 semicolon === this.semicolon)
11979 return rewriter(this, parents);
11983 return rewriter(new GlobalStatement(
11986 semicolon), parents);
11989 static from_json(json, position, source)
11991 let keyword = EditableSyntax.from_json(
11992 json.global_keyword, position, source);
11993 position += keyword.width;
11994 let variables = EditableSyntax.from_json(
11995 json.global_variables, position, source);
11996 position += variables.width;
11997 let semicolon = EditableSyntax.from_json(
11998 json.global_semicolon, position, source);
11999 position += semicolon.width;
12000 return new GlobalStatement(
12005 get children_keys()
12007 if (GlobalStatement._children_keys == null)
12008 GlobalStatement._children_keys = [
12012 return GlobalStatement._children_keys;
12015 class ConcurrentStatement extends EditableSyntax
12021 super('concurrent_statement', {
12023 statement: statement });
12025 get keyword() { return this.children.keyword; }
12026 get statement() { return this.children.statement; }
12027 with_keyword(keyword){
12028 return new ConcurrentStatement(
12032 with_statement(statement){
12033 return new ConcurrentStatement(
12037 rewrite(rewriter, parents)
12039 if (parents == undefined)
12041 let new_parents = parents.slice();
12042 new_parents.push(this);
12043 var keyword = this.keyword.rewrite(rewriter, new_parents);
12044 var statement = this.statement.rewrite(rewriter, new_parents);
12046 keyword === this.keyword &&
12047 statement === this.statement)
12049 return rewriter(this, parents);
12053 return rewriter(new ConcurrentStatement(
12055 statement), parents);
12058 static from_json(json, position, source)
12060 let keyword = EditableSyntax.from_json(
12061 json.concurrent_keyword, position, source);
12062 position += keyword.width;
12063 let statement = EditableSyntax.from_json(
12064 json.concurrent_statement, position, source);
12065 position += statement.width;
12066 return new ConcurrentStatement(
12070 get children_keys()
12072 if (ConcurrentStatement._children_keys == null)
12073 ConcurrentStatement._children_keys = [
12076 return ConcurrentStatement._children_keys;
12079 class SimpleInitializer extends EditableSyntax
12085 super('simple_initializer', {
12089 get equal() { return this.children.equal; }
12090 get value() { return this.children.value; }
12092 return new SimpleInitializer(
12097 return new SimpleInitializer(
12101 rewrite(rewriter, parents)
12103 if (parents == undefined)
12105 let new_parents = parents.slice();
12106 new_parents.push(this);
12107 var equal = this.equal.rewrite(rewriter, new_parents);
12108 var value = this.value.rewrite(rewriter, new_parents);
12110 equal === this.equal &&
12111 value === this.value)
12113 return rewriter(this, parents);
12117 return rewriter(new SimpleInitializer(
12122 static from_json(json, position, source)
12124 let equal = EditableSyntax.from_json(
12125 json.simple_initializer_equal, position, source);
12126 position += equal.width;
12127 let value = EditableSyntax.from_json(
12128 json.simple_initializer_value, position, source);
12129 position += value.width;
12130 return new SimpleInitializer(
12134 get children_keys()
12136 if (SimpleInitializer._children_keys == null)
12137 SimpleInitializer._children_keys = [
12140 return SimpleInitializer._children_keys;
12143 class AnonymousClass extends EditableSyntax
12152 implements_keyword,
12156 super('anonymous_class', {
12157 class_keyword: class_keyword,
12158 left_paren: left_paren,
12159 argument_list: argument_list,
12160 right_paren: right_paren,
12161 extends_keyword: extends_keyword,
12162 extends_list: extends_list,
12163 implements_keyword: implements_keyword,
12164 implements_list: implements_list,
12167 get class_keyword() { return this.children.class_keyword; }
12168 get left_paren() { return this.children.left_paren; }
12169 get argument_list() { return this.children.argument_list; }
12170 get right_paren() { return this.children.right_paren; }
12171 get extends_keyword() { return this.children.extends_keyword; }
12172 get extends_list() { return this.children.extends_list; }
12173 get implements_keyword() { return this.children.implements_keyword; }
12174 get implements_list() { return this.children.implements_list; }
12175 get body() { return this.children.body; }
12176 with_class_keyword(class_keyword){
12177 return new AnonymousClass(
12180 this.argument_list,
12182 this.extends_keyword,
12184 this.implements_keyword,
12185 this.implements_list,
12188 with_left_paren(left_paren){
12189 return new AnonymousClass(
12190 this.class_keyword,
12192 this.argument_list,
12194 this.extends_keyword,
12196 this.implements_keyword,
12197 this.implements_list,
12200 with_argument_list(argument_list){
12201 return new AnonymousClass(
12202 this.class_keyword,
12206 this.extends_keyword,
12208 this.implements_keyword,
12209 this.implements_list,
12212 with_right_paren(right_paren){
12213 return new AnonymousClass(
12214 this.class_keyword,
12216 this.argument_list,
12218 this.extends_keyword,
12220 this.implements_keyword,
12221 this.implements_list,
12224 with_extends_keyword(extends_keyword){
12225 return new AnonymousClass(
12226 this.class_keyword,
12228 this.argument_list,
12232 this.implements_keyword,
12233 this.implements_list,
12236 with_extends_list(extends_list){
12237 return new AnonymousClass(
12238 this.class_keyword,
12240 this.argument_list,
12242 this.extends_keyword,
12244 this.implements_keyword,
12245 this.implements_list,
12248 with_implements_keyword(implements_keyword){
12249 return new AnonymousClass(
12250 this.class_keyword,
12252 this.argument_list,
12254 this.extends_keyword,
12256 implements_keyword,
12257 this.implements_list,
12260 with_implements_list(implements_list){
12261 return new AnonymousClass(
12262 this.class_keyword,
12264 this.argument_list,
12266 this.extends_keyword,
12268 this.implements_keyword,
12273 return new AnonymousClass(
12274 this.class_keyword,
12276 this.argument_list,
12278 this.extends_keyword,
12280 this.implements_keyword,
12281 this.implements_list,
12284 rewrite(rewriter, parents)
12286 if (parents == undefined)
12288 let new_parents = parents.slice();
12289 new_parents.push(this);
12290 var class_keyword = this.class_keyword.rewrite(rewriter, new_parents);
12291 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
12292 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
12293 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
12294 var extends_keyword = this.extends_keyword.rewrite(rewriter, new_parents);
12295 var extends_list = this.extends_list.rewrite(rewriter, new_parents);
12296 var implements_keyword = this.implements_keyword.rewrite(rewriter, new_parents);
12297 var implements_list = this.implements_list.rewrite(rewriter, new_parents);
12298 var body = this.body.rewrite(rewriter, new_parents);
12300 class_keyword === this.class_keyword &&
12301 left_paren === this.left_paren &&
12302 argument_list === this.argument_list &&
12303 right_paren === this.right_paren &&
12304 extends_keyword === this.extends_keyword &&
12305 extends_list === this.extends_list &&
12306 implements_keyword === this.implements_keyword &&
12307 implements_list === this.implements_list &&
12308 body === this.body)
12310 return rewriter(this, parents);
12314 return rewriter(new AnonymousClass(
12321 implements_keyword,
12326 static from_json(json, position, source)
12328 let class_keyword = EditableSyntax.from_json(
12329 json.anonymous_class_class_keyword, position, source);
12330 position += class_keyword.width;
12331 let left_paren = EditableSyntax.from_json(
12332 json.anonymous_class_left_paren, position, source);
12333 position += left_paren.width;
12334 let argument_list = EditableSyntax.from_json(
12335 json.anonymous_class_argument_list, position, source);
12336 position += argument_list.width;
12337 let right_paren = EditableSyntax.from_json(
12338 json.anonymous_class_right_paren, position, source);
12339 position += right_paren.width;
12340 let extends_keyword = EditableSyntax.from_json(
12341 json.anonymous_class_extends_keyword, position, source);
12342 position += extends_keyword.width;
12343 let extends_list = EditableSyntax.from_json(
12344 json.anonymous_class_extends_list, position, source);
12345 position += extends_list.width;
12346 let implements_keyword = EditableSyntax.from_json(
12347 json.anonymous_class_implements_keyword, position, source);
12348 position += implements_keyword.width;
12349 let implements_list = EditableSyntax.from_json(
12350 json.anonymous_class_implements_list, position, source);
12351 position += implements_list.width;
12352 let body = EditableSyntax.from_json(
12353 json.anonymous_class_body, position, source);
12354 position += body.width;
12355 return new AnonymousClass(
12362 implements_keyword,
12366 get children_keys()
12368 if (AnonymousClass._children_keys == null)
12369 AnonymousClass._children_keys = [
12376 'implements_keyword',
12379 return AnonymousClass._children_keys;
12382 class AnonymousFunction extends EditableSyntax
12398 super('anonymous_function', {
12399 attribute_spec: attribute_spec,
12400 static_keyword: static_keyword,
12401 async_keyword: async_keyword,
12402 coroutine_keyword: coroutine_keyword,
12403 function_keyword: function_keyword,
12404 left_paren: left_paren,
12405 parameters: parameters,
12406 right_paren: right_paren,
12412 get attribute_spec() { return this.children.attribute_spec; }
12413 get static_keyword() { return this.children.static_keyword; }
12414 get async_keyword() { return this.children.async_keyword; }
12415 get coroutine_keyword() { return this.children.coroutine_keyword; }
12416 get function_keyword() { return this.children.function_keyword; }
12417 get left_paren() { return this.children.left_paren; }
12418 get parameters() { return this.children.parameters; }
12419 get right_paren() { return this.children.right_paren; }
12420 get colon() { return this.children.colon; }
12421 get type() { return this.children.type; }
12422 get use() { return this.children.use; }
12423 get body() { return this.children.body; }
12424 with_attribute_spec(attribute_spec){
12425 return new AnonymousFunction(
12427 this.static_keyword,
12428 this.async_keyword,
12429 this.coroutine_keyword,
12430 this.function_keyword,
12439 with_static_keyword(static_keyword){
12440 return new AnonymousFunction(
12441 this.attribute_spec,
12443 this.async_keyword,
12444 this.coroutine_keyword,
12445 this.function_keyword,
12454 with_async_keyword(async_keyword){
12455 return new AnonymousFunction(
12456 this.attribute_spec,
12457 this.static_keyword,
12459 this.coroutine_keyword,
12460 this.function_keyword,
12469 with_coroutine_keyword(coroutine_keyword){
12470 return new AnonymousFunction(
12471 this.attribute_spec,
12472 this.static_keyword,
12473 this.async_keyword,
12475 this.function_keyword,
12484 with_function_keyword(function_keyword){
12485 return new AnonymousFunction(
12486 this.attribute_spec,
12487 this.static_keyword,
12488 this.async_keyword,
12489 this.coroutine_keyword,
12499 with_left_paren(left_paren){
12500 return new AnonymousFunction(
12501 this.attribute_spec,
12502 this.static_keyword,
12503 this.async_keyword,
12504 this.coroutine_keyword,
12505 this.function_keyword,
12514 with_parameters(parameters){
12515 return new AnonymousFunction(
12516 this.attribute_spec,
12517 this.static_keyword,
12518 this.async_keyword,
12519 this.coroutine_keyword,
12520 this.function_keyword,
12529 with_right_paren(right_paren){
12530 return new AnonymousFunction(
12531 this.attribute_spec,
12532 this.static_keyword,
12533 this.async_keyword,
12534 this.coroutine_keyword,
12535 this.function_keyword,
12545 return new AnonymousFunction(
12546 this.attribute_spec,
12547 this.static_keyword,
12548 this.async_keyword,
12549 this.coroutine_keyword,
12550 this.function_keyword,
12560 return new AnonymousFunction(
12561 this.attribute_spec,
12562 this.static_keyword,
12563 this.async_keyword,
12564 this.coroutine_keyword,
12565 this.function_keyword,
12575 return new AnonymousFunction(
12576 this.attribute_spec,
12577 this.static_keyword,
12578 this.async_keyword,
12579 this.coroutine_keyword,
12580 this.function_keyword,
12590 return new AnonymousFunction(
12591 this.attribute_spec,
12592 this.static_keyword,
12593 this.async_keyword,
12594 this.coroutine_keyword,
12595 this.function_keyword,
12604 rewrite(rewriter, parents)
12606 if (parents == undefined)
12608 let new_parents = parents.slice();
12609 new_parents.push(this);
12610 var attribute_spec = this.attribute_spec.rewrite(rewriter, new_parents);
12611 var static_keyword = this.static_keyword.rewrite(rewriter, new_parents);
12612 var async_keyword = this.async_keyword.rewrite(rewriter, new_parents);
12613 var coroutine_keyword = this.coroutine_keyword.rewrite(rewriter, new_parents);
12614 var function_keyword = this.function_keyword.rewrite(rewriter, new_parents);
12615 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
12616 var parameters = this.parameters.rewrite(rewriter, new_parents);
12617 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
12618 var colon = this.colon.rewrite(rewriter, new_parents);
12619 var type = this.type.rewrite(rewriter, new_parents);
12620 var use = this.use.rewrite(rewriter, new_parents);
12621 var body = this.body.rewrite(rewriter, new_parents);
12623 attribute_spec === this.attribute_spec &&
12624 static_keyword === this.static_keyword &&
12625 async_keyword === this.async_keyword &&
12626 coroutine_keyword === this.coroutine_keyword &&
12627 function_keyword === this.function_keyword &&
12628 left_paren === this.left_paren &&
12629 parameters === this.parameters &&
12630 right_paren === this.right_paren &&
12631 colon === this.colon &&
12632 type === this.type &&
12633 use === this.use &&
12634 body === this.body)
12636 return rewriter(this, parents);
12640 return rewriter(new AnonymousFunction(
12655 static from_json(json, position, source)
12657 let attribute_spec = EditableSyntax.from_json(
12658 json.anonymous_attribute_spec, position, source);
12659 position += attribute_spec.width;
12660 let static_keyword = EditableSyntax.from_json(
12661 json.anonymous_static_keyword, position, source);
12662 position += static_keyword.width;
12663 let async_keyword = EditableSyntax.from_json(
12664 json.anonymous_async_keyword, position, source);
12665 position += async_keyword.width;
12666 let coroutine_keyword = EditableSyntax.from_json(
12667 json.anonymous_coroutine_keyword, position, source);
12668 position += coroutine_keyword.width;
12669 let function_keyword = EditableSyntax.from_json(
12670 json.anonymous_function_keyword, position, source);
12671 position += function_keyword.width;
12672 let left_paren = EditableSyntax.from_json(
12673 json.anonymous_left_paren, position, source);
12674 position += left_paren.width;
12675 let parameters = EditableSyntax.from_json(
12676 json.anonymous_parameters, position, source);
12677 position += parameters.width;
12678 let right_paren = EditableSyntax.from_json(
12679 json.anonymous_right_paren, position, source);
12680 position += right_paren.width;
12681 let colon = EditableSyntax.from_json(
12682 json.anonymous_colon, position, source);
12683 position += colon.width;
12684 let type = EditableSyntax.from_json(
12685 json.anonymous_type, position, source);
12686 position += type.width;
12687 let use = EditableSyntax.from_json(
12688 json.anonymous_use, position, source);
12689 position += use.width;
12690 let body = EditableSyntax.from_json(
12691 json.anonymous_body, position, source);
12692 position += body.width;
12693 return new AnonymousFunction(
12707 get children_keys()
12709 if (AnonymousFunction._children_keys == null)
12710 AnonymousFunction._children_keys = [
12714 'coroutine_keyword',
12715 'function_keyword',
12723 return AnonymousFunction._children_keys;
12726 class Php7AnonymousFunction extends EditableSyntax
12742 super('php7_anonymous_function', {
12743 attribute_spec: attribute_spec,
12744 static_keyword: static_keyword,
12745 async_keyword: async_keyword,
12746 coroutine_keyword: coroutine_keyword,
12747 function_keyword: function_keyword,
12748 left_paren: left_paren,
12749 parameters: parameters,
12750 right_paren: right_paren,
12756 get attribute_spec() { return this.children.attribute_spec; }
12757 get static_keyword() { return this.children.static_keyword; }
12758 get async_keyword() { return this.children.async_keyword; }
12759 get coroutine_keyword() { return this.children.coroutine_keyword; }
12760 get function_keyword() { return this.children.function_keyword; }
12761 get left_paren() { return this.children.left_paren; }
12762 get parameters() { return this.children.parameters; }
12763 get right_paren() { return this.children.right_paren; }
12764 get use() { return this.children.use; }
12765 get colon() { return this.children.colon; }
12766 get type() { return this.children.type; }
12767 get body() { return this.children.body; }
12768 with_attribute_spec(attribute_spec){
12769 return new Php7AnonymousFunction(
12771 this.static_keyword,
12772 this.async_keyword,
12773 this.coroutine_keyword,
12774 this.function_keyword,
12783 with_static_keyword(static_keyword){
12784 return new Php7AnonymousFunction(
12785 this.attribute_spec,
12787 this.async_keyword,
12788 this.coroutine_keyword,
12789 this.function_keyword,
12798 with_async_keyword(async_keyword){
12799 return new Php7AnonymousFunction(
12800 this.attribute_spec,
12801 this.static_keyword,
12803 this.coroutine_keyword,
12804 this.function_keyword,
12813 with_coroutine_keyword(coroutine_keyword){
12814 return new Php7AnonymousFunction(
12815 this.attribute_spec,
12816 this.static_keyword,
12817 this.async_keyword,
12819 this.function_keyword,
12828 with_function_keyword(function_keyword){
12829 return new Php7AnonymousFunction(
12830 this.attribute_spec,
12831 this.static_keyword,
12832 this.async_keyword,
12833 this.coroutine_keyword,
12843 with_left_paren(left_paren){
12844 return new Php7AnonymousFunction(
12845 this.attribute_spec,
12846 this.static_keyword,
12847 this.async_keyword,
12848 this.coroutine_keyword,
12849 this.function_keyword,
12858 with_parameters(parameters){
12859 return new Php7AnonymousFunction(
12860 this.attribute_spec,
12861 this.static_keyword,
12862 this.async_keyword,
12863 this.coroutine_keyword,
12864 this.function_keyword,
12873 with_right_paren(right_paren){
12874 return new Php7AnonymousFunction(
12875 this.attribute_spec,
12876 this.static_keyword,
12877 this.async_keyword,
12878 this.coroutine_keyword,
12879 this.function_keyword,
12889 return new Php7AnonymousFunction(
12890 this.attribute_spec,
12891 this.static_keyword,
12892 this.async_keyword,
12893 this.coroutine_keyword,
12894 this.function_keyword,
12904 return new Php7AnonymousFunction(
12905 this.attribute_spec,
12906 this.static_keyword,
12907 this.async_keyword,
12908 this.coroutine_keyword,
12909 this.function_keyword,
12919 return new Php7AnonymousFunction(
12920 this.attribute_spec,
12921 this.static_keyword,
12922 this.async_keyword,
12923 this.coroutine_keyword,
12924 this.function_keyword,
12934 return new Php7AnonymousFunction(
12935 this.attribute_spec,
12936 this.static_keyword,
12937 this.async_keyword,
12938 this.coroutine_keyword,
12939 this.function_keyword,
12948 rewrite(rewriter, parents)
12950 if (parents == undefined)
12952 let new_parents = parents.slice();
12953 new_parents.push(this);
12954 var attribute_spec = this.attribute_spec.rewrite(rewriter, new_parents);
12955 var static_keyword = this.static_keyword.rewrite(rewriter, new_parents);
12956 var async_keyword = this.async_keyword.rewrite(rewriter, new_parents);
12957 var coroutine_keyword = this.coroutine_keyword.rewrite(rewriter, new_parents);
12958 var function_keyword = this.function_keyword.rewrite(rewriter, new_parents);
12959 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
12960 var parameters = this.parameters.rewrite(rewriter, new_parents);
12961 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
12962 var use = this.use.rewrite(rewriter, new_parents);
12963 var colon = this.colon.rewrite(rewriter, new_parents);
12964 var type = this.type.rewrite(rewriter, new_parents);
12965 var body = this.body.rewrite(rewriter, new_parents);
12967 attribute_spec === this.attribute_spec &&
12968 static_keyword === this.static_keyword &&
12969 async_keyword === this.async_keyword &&
12970 coroutine_keyword === this.coroutine_keyword &&
12971 function_keyword === this.function_keyword &&
12972 left_paren === this.left_paren &&
12973 parameters === this.parameters &&
12974 right_paren === this.right_paren &&
12975 use === this.use &&
12976 colon === this.colon &&
12977 type === this.type &&
12978 body === this.body)
12980 return rewriter(this, parents);
12984 return rewriter(new Php7AnonymousFunction(
12999 static from_json(json, position, source)
13001 let attribute_spec = EditableSyntax.from_json(
13002 json.php7_anonymous_attribute_spec, position, source);
13003 position += attribute_spec.width;
13004 let static_keyword = EditableSyntax.from_json(
13005 json.php7_anonymous_static_keyword, position, source);
13006 position += static_keyword.width;
13007 let async_keyword = EditableSyntax.from_json(
13008 json.php7_anonymous_async_keyword, position, source);
13009 position += async_keyword.width;
13010 let coroutine_keyword = EditableSyntax.from_json(
13011 json.php7_anonymous_coroutine_keyword, position, source);
13012 position += coroutine_keyword.width;
13013 let function_keyword = EditableSyntax.from_json(
13014 json.php7_anonymous_function_keyword, position, source);
13015 position += function_keyword.width;
13016 let left_paren = EditableSyntax.from_json(
13017 json.php7_anonymous_left_paren, position, source);
13018 position += left_paren.width;
13019 let parameters = EditableSyntax.from_json(
13020 json.php7_anonymous_parameters, position, source);
13021 position += parameters.width;
13022 let right_paren = EditableSyntax.from_json(
13023 json.php7_anonymous_right_paren, position, source);
13024 position += right_paren.width;
13025 let use = EditableSyntax.from_json(
13026 json.php7_anonymous_use, position, source);
13027 position += use.width;
13028 let colon = EditableSyntax.from_json(
13029 json.php7_anonymous_colon, position, source);
13030 position += colon.width;
13031 let type = EditableSyntax.from_json(
13032 json.php7_anonymous_type, position, source);
13033 position += type.width;
13034 let body = EditableSyntax.from_json(
13035 json.php7_anonymous_body, position, source);
13036 position += body.width;
13037 return new Php7AnonymousFunction(
13051 get children_keys()
13053 if (Php7AnonymousFunction._children_keys == null)
13054 Php7AnonymousFunction._children_keys = [
13058 'coroutine_keyword',
13059 'function_keyword',
13067 return Php7AnonymousFunction._children_keys;
13070 class AnonymousFunctionUseClause extends EditableSyntax
13078 super('anonymous_function_use_clause', {
13080 left_paren: left_paren,
13081 variables: variables,
13082 right_paren: right_paren });
13084 get keyword() { return this.children.keyword; }
13085 get left_paren() { return this.children.left_paren; }
13086 get variables() { return this.children.variables; }
13087 get right_paren() { return this.children.right_paren; }
13088 with_keyword(keyword){
13089 return new AnonymousFunctionUseClause(
13095 with_left_paren(left_paren){
13096 return new AnonymousFunctionUseClause(
13102 with_variables(variables){
13103 return new AnonymousFunctionUseClause(
13109 with_right_paren(right_paren){
13110 return new AnonymousFunctionUseClause(
13116 rewrite(rewriter, parents)
13118 if (parents == undefined)
13120 let new_parents = parents.slice();
13121 new_parents.push(this);
13122 var keyword = this.keyword.rewrite(rewriter, new_parents);
13123 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
13124 var variables = this.variables.rewrite(rewriter, new_parents);
13125 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
13127 keyword === this.keyword &&
13128 left_paren === this.left_paren &&
13129 variables === this.variables &&
13130 right_paren === this.right_paren)
13132 return rewriter(this, parents);
13136 return rewriter(new AnonymousFunctionUseClause(
13140 right_paren), parents);
13143 static from_json(json, position, source)
13145 let keyword = EditableSyntax.from_json(
13146 json.anonymous_use_keyword, position, source);
13147 position += keyword.width;
13148 let left_paren = EditableSyntax.from_json(
13149 json.anonymous_use_left_paren, position, source);
13150 position += left_paren.width;
13151 let variables = EditableSyntax.from_json(
13152 json.anonymous_use_variables, position, source);
13153 position += variables.width;
13154 let right_paren = EditableSyntax.from_json(
13155 json.anonymous_use_right_paren, position, source);
13156 position += right_paren.width;
13157 return new AnonymousFunctionUseClause(
13163 get children_keys()
13165 if (AnonymousFunctionUseClause._children_keys == null)
13166 AnonymousFunctionUseClause._children_keys = [
13171 return AnonymousFunctionUseClause._children_keys;
13174 class LambdaExpression extends EditableSyntax
13184 super('lambda_expression', {
13185 attribute_spec: attribute_spec,
13187 coroutine: coroutine,
13188 signature: signature,
13192 get attribute_spec() { return this.children.attribute_spec; }
13193 get async() { return this.children.async; }
13194 get coroutine() { return this.children.coroutine; }
13195 get signature() { return this.children.signature; }
13196 get arrow() { return this.children.arrow; }
13197 get body() { return this.children.body; }
13198 with_attribute_spec(attribute_spec){
13199 return new LambdaExpression(
13208 return new LambdaExpression(
13209 this.attribute_spec,
13216 with_coroutine(coroutine){
13217 return new LambdaExpression(
13218 this.attribute_spec,
13225 with_signature(signature){
13226 return new LambdaExpression(
13227 this.attribute_spec,
13235 return new LambdaExpression(
13236 this.attribute_spec,
13244 return new LambdaExpression(
13245 this.attribute_spec,
13252 rewrite(rewriter, parents)
13254 if (parents == undefined)
13256 let new_parents = parents.slice();
13257 new_parents.push(this);
13258 var attribute_spec = this.attribute_spec.rewrite(rewriter, new_parents);
13259 var async = this.async.rewrite(rewriter, new_parents);
13260 var coroutine = this.coroutine.rewrite(rewriter, new_parents);
13261 var signature = this.signature.rewrite(rewriter, new_parents);
13262 var arrow = this.arrow.rewrite(rewriter, new_parents);
13263 var body = this.body.rewrite(rewriter, new_parents);
13265 attribute_spec === this.attribute_spec &&
13266 async === this.async &&
13267 coroutine === this.coroutine &&
13268 signature === this.signature &&
13269 arrow === this.arrow &&
13270 body === this.body)
13272 return rewriter(this, parents);
13276 return rewriter(new LambdaExpression(
13285 static from_json(json, position, source)
13287 let attribute_spec = EditableSyntax.from_json(
13288 json.lambda_attribute_spec, position, source);
13289 position += attribute_spec.width;
13290 let async = EditableSyntax.from_json(
13291 json.lambda_async, position, source);
13292 position += async.width;
13293 let coroutine = EditableSyntax.from_json(
13294 json.lambda_coroutine, position, source);
13295 position += coroutine.width;
13296 let signature = EditableSyntax.from_json(
13297 json.lambda_signature, position, source);
13298 position += signature.width;
13299 let arrow = EditableSyntax.from_json(
13300 json.lambda_arrow, position, source);
13301 position += arrow.width;
13302 let body = EditableSyntax.from_json(
13303 json.lambda_body, position, source);
13304 position += body.width;
13305 return new LambdaExpression(
13313 get children_keys()
13315 if (LambdaExpression._children_keys == null)
13316 LambdaExpression._children_keys = [
13323 return LambdaExpression._children_keys;
13326 class LambdaSignature extends EditableSyntax
13335 super('lambda_signature', {
13336 left_paren: left_paren,
13337 parameters: parameters,
13338 right_paren: right_paren,
13342 get left_paren() { return this.children.left_paren; }
13343 get parameters() { return this.children.parameters; }
13344 get right_paren() { return this.children.right_paren; }
13345 get colon() { return this.children.colon; }
13346 get type() { return this.children.type; }
13347 with_left_paren(left_paren){
13348 return new LambdaSignature(
13355 with_parameters(parameters){
13356 return new LambdaSignature(
13363 with_right_paren(right_paren){
13364 return new LambdaSignature(
13372 return new LambdaSignature(
13380 return new LambdaSignature(
13387 rewrite(rewriter, parents)
13389 if (parents == undefined)
13391 let new_parents = parents.slice();
13392 new_parents.push(this);
13393 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
13394 var parameters = this.parameters.rewrite(rewriter, new_parents);
13395 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
13396 var colon = this.colon.rewrite(rewriter, new_parents);
13397 var type = this.type.rewrite(rewriter, new_parents);
13399 left_paren === this.left_paren &&
13400 parameters === this.parameters &&
13401 right_paren === this.right_paren &&
13402 colon === this.colon &&
13403 type === this.type)
13405 return rewriter(this, parents);
13409 return rewriter(new LambdaSignature(
13417 static from_json(json, position, source)
13419 let left_paren = EditableSyntax.from_json(
13420 json.lambda_left_paren, position, source);
13421 position += left_paren.width;
13422 let parameters = EditableSyntax.from_json(
13423 json.lambda_parameters, position, source);
13424 position += parameters.width;
13425 let right_paren = EditableSyntax.from_json(
13426 json.lambda_right_paren, position, source);
13427 position += right_paren.width;
13428 let colon = EditableSyntax.from_json(
13429 json.lambda_colon, position, source);
13430 position += colon.width;
13431 let type = EditableSyntax.from_json(
13432 json.lambda_type, position, source);
13433 position += type.width;
13434 return new LambdaSignature(
13441 get children_keys()
13443 if (LambdaSignature._children_keys == null)
13444 LambdaSignature._children_keys = [
13450 return LambdaSignature._children_keys;
13453 class CastExpression extends EditableSyntax
13461 super('cast_expression', {
13462 left_paren: left_paren,
13464 right_paren: right_paren,
13465 operand: operand });
13467 get left_paren() { return this.children.left_paren; }
13468 get type() { return this.children.type; }
13469 get right_paren() { return this.children.right_paren; }
13470 get operand() { return this.children.operand; }
13471 with_left_paren(left_paren){
13472 return new CastExpression(
13479 return new CastExpression(
13485 with_right_paren(right_paren){
13486 return new CastExpression(
13492 with_operand(operand){
13493 return new CastExpression(
13499 rewrite(rewriter, parents)
13501 if (parents == undefined)
13503 let new_parents = parents.slice();
13504 new_parents.push(this);
13505 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
13506 var type = this.type.rewrite(rewriter, new_parents);
13507 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
13508 var operand = this.operand.rewrite(rewriter, new_parents);
13510 left_paren === this.left_paren &&
13511 type === this.type &&
13512 right_paren === this.right_paren &&
13513 operand === this.operand)
13515 return rewriter(this, parents);
13519 return rewriter(new CastExpression(
13523 operand), parents);
13526 static from_json(json, position, source)
13528 let left_paren = EditableSyntax.from_json(
13529 json.cast_left_paren, position, source);
13530 position += left_paren.width;
13531 let type = EditableSyntax.from_json(
13532 json.cast_type, position, source);
13533 position += type.width;
13534 let right_paren = EditableSyntax.from_json(
13535 json.cast_right_paren, position, source);
13536 position += right_paren.width;
13537 let operand = EditableSyntax.from_json(
13538 json.cast_operand, position, source);
13539 position += operand.width;
13540 return new CastExpression(
13546 get children_keys()
13548 if (CastExpression._children_keys == null)
13549 CastExpression._children_keys = [
13554 return CastExpression._children_keys;
13557 class ScopeResolutionExpression extends EditableSyntax
13564 super('scope_resolution_expression', {
13565 qualifier: qualifier,
13566 operator: operator,
13569 get qualifier() { return this.children.qualifier; }
13570 get operator() { return this.children.operator; }
13571 get name() { return this.children.name; }
13572 with_qualifier(qualifier){
13573 return new ScopeResolutionExpression(
13578 with_operator(operator){
13579 return new ScopeResolutionExpression(
13585 return new ScopeResolutionExpression(
13590 rewrite(rewriter, parents)
13592 if (parents == undefined)
13594 let new_parents = parents.slice();
13595 new_parents.push(this);
13596 var qualifier = this.qualifier.rewrite(rewriter, new_parents);
13597 var operator = this.operator.rewrite(rewriter, new_parents);
13598 var name = this.name.rewrite(rewriter, new_parents);
13600 qualifier === this.qualifier &&
13601 operator === this.operator &&
13602 name === this.name)
13604 return rewriter(this, parents);
13608 return rewriter(new ScopeResolutionExpression(
13614 static from_json(json, position, source)
13616 let qualifier = EditableSyntax.from_json(
13617 json.scope_resolution_qualifier, position, source);
13618 position += qualifier.width;
13619 let operator = EditableSyntax.from_json(
13620 json.scope_resolution_operator, position, source);
13621 position += operator.width;
13622 let name = EditableSyntax.from_json(
13623 json.scope_resolution_name, position, source);
13624 position += name.width;
13625 return new ScopeResolutionExpression(
13630 get children_keys()
13632 if (ScopeResolutionExpression._children_keys == null)
13633 ScopeResolutionExpression._children_keys = [
13637 return ScopeResolutionExpression._children_keys;
13640 class MemberSelectionExpression extends EditableSyntax
13647 super('member_selection_expression', {
13649 operator: operator,
13652 get object() { return this.children.object; }
13653 get operator() { return this.children.operator; }
13654 get name() { return this.children.name; }
13655 with_object(object){
13656 return new MemberSelectionExpression(
13661 with_operator(operator){
13662 return new MemberSelectionExpression(
13668 return new MemberSelectionExpression(
13673 rewrite(rewriter, parents)
13675 if (parents == undefined)
13677 let new_parents = parents.slice();
13678 new_parents.push(this);
13679 var object = this.object.rewrite(rewriter, new_parents);
13680 var operator = this.operator.rewrite(rewriter, new_parents);
13681 var name = this.name.rewrite(rewriter, new_parents);
13683 object === this.object &&
13684 operator === this.operator &&
13685 name === this.name)
13687 return rewriter(this, parents);
13691 return rewriter(new MemberSelectionExpression(
13697 static from_json(json, position, source)
13699 let object = EditableSyntax.from_json(
13700 json.member_object, position, source);
13701 position += object.width;
13702 let operator = EditableSyntax.from_json(
13703 json.member_operator, position, source);
13704 position += operator.width;
13705 let name = EditableSyntax.from_json(
13706 json.member_name, position, source);
13707 position += name.width;
13708 return new MemberSelectionExpression(
13713 get children_keys()
13715 if (MemberSelectionExpression._children_keys == null)
13716 MemberSelectionExpression._children_keys = [
13720 return MemberSelectionExpression._children_keys;
13723 class SafeMemberSelectionExpression extends EditableSyntax
13730 super('safe_member_selection_expression', {
13732 operator: operator,
13735 get object() { return this.children.object; }
13736 get operator() { return this.children.operator; }
13737 get name() { return this.children.name; }
13738 with_object(object){
13739 return new SafeMemberSelectionExpression(
13744 with_operator(operator){
13745 return new SafeMemberSelectionExpression(
13751 return new SafeMemberSelectionExpression(
13756 rewrite(rewriter, parents)
13758 if (parents == undefined)
13760 let new_parents = parents.slice();
13761 new_parents.push(this);
13762 var object = this.object.rewrite(rewriter, new_parents);
13763 var operator = this.operator.rewrite(rewriter, new_parents);
13764 var name = this.name.rewrite(rewriter, new_parents);
13766 object === this.object &&
13767 operator === this.operator &&
13768 name === this.name)
13770 return rewriter(this, parents);
13774 return rewriter(new SafeMemberSelectionExpression(
13780 static from_json(json, position, source)
13782 let object = EditableSyntax.from_json(
13783 json.safe_member_object, position, source);
13784 position += object.width;
13785 let operator = EditableSyntax.from_json(
13786 json.safe_member_operator, position, source);
13787 position += operator.width;
13788 let name = EditableSyntax.from_json(
13789 json.safe_member_name, position, source);
13790 position += name.width;
13791 return new SafeMemberSelectionExpression(
13796 get children_keys()
13798 if (SafeMemberSelectionExpression._children_keys == null)
13799 SafeMemberSelectionExpression._children_keys = [
13803 return SafeMemberSelectionExpression._children_keys;
13806 class EmbeddedMemberSelectionExpression extends EditableSyntax
13813 super('embedded_member_selection_expression', {
13815 operator: operator,
13818 get object() { return this.children.object; }
13819 get operator() { return this.children.operator; }
13820 get name() { return this.children.name; }
13821 with_object(object){
13822 return new EmbeddedMemberSelectionExpression(
13827 with_operator(operator){
13828 return new EmbeddedMemberSelectionExpression(
13834 return new EmbeddedMemberSelectionExpression(
13839 rewrite(rewriter, parents)
13841 if (parents == undefined)
13843 let new_parents = parents.slice();
13844 new_parents.push(this);
13845 var object = this.object.rewrite(rewriter, new_parents);
13846 var operator = this.operator.rewrite(rewriter, new_parents);
13847 var name = this.name.rewrite(rewriter, new_parents);
13849 object === this.object &&
13850 operator === this.operator &&
13851 name === this.name)
13853 return rewriter(this, parents);
13857 return rewriter(new EmbeddedMemberSelectionExpression(
13863 static from_json(json, position, source)
13865 let object = EditableSyntax.from_json(
13866 json.embedded_member_object, position, source);
13867 position += object.width;
13868 let operator = EditableSyntax.from_json(
13869 json.embedded_member_operator, position, source);
13870 position += operator.width;
13871 let name = EditableSyntax.from_json(
13872 json.embedded_member_name, position, source);
13873 position += name.width;
13874 return new EmbeddedMemberSelectionExpression(
13879 get children_keys()
13881 if (EmbeddedMemberSelectionExpression._children_keys == null)
13882 EmbeddedMemberSelectionExpression._children_keys = [
13886 return EmbeddedMemberSelectionExpression._children_keys;
13889 class YieldExpression extends EditableSyntax
13895 super('yield_expression', {
13897 operand: operand });
13899 get keyword() { return this.children.keyword; }
13900 get operand() { return this.children.operand; }
13901 with_keyword(keyword){
13902 return new YieldExpression(
13906 with_operand(operand){
13907 return new YieldExpression(
13911 rewrite(rewriter, parents)
13913 if (parents == undefined)
13915 let new_parents = parents.slice();
13916 new_parents.push(this);
13917 var keyword = this.keyword.rewrite(rewriter, new_parents);
13918 var operand = this.operand.rewrite(rewriter, new_parents);
13920 keyword === this.keyword &&
13921 operand === this.operand)
13923 return rewriter(this, parents);
13927 return rewriter(new YieldExpression(
13929 operand), parents);
13932 static from_json(json, position, source)
13934 let keyword = EditableSyntax.from_json(
13935 json.yield_keyword, position, source);
13936 position += keyword.width;
13937 let operand = EditableSyntax.from_json(
13938 json.yield_operand, position, source);
13939 position += operand.width;
13940 return new YieldExpression(
13944 get children_keys()
13946 if (YieldExpression._children_keys == null)
13947 YieldExpression._children_keys = [
13950 return YieldExpression._children_keys;
13953 class YieldFromExpression extends EditableSyntax
13960 super('yield_from_expression', {
13961 yield_keyword: yield_keyword,
13962 from_keyword: from_keyword,
13963 operand: operand });
13965 get yield_keyword() { return this.children.yield_keyword; }
13966 get from_keyword() { return this.children.from_keyword; }
13967 get operand() { return this.children.operand; }
13968 with_yield_keyword(yield_keyword){
13969 return new YieldFromExpression(
13974 with_from_keyword(from_keyword){
13975 return new YieldFromExpression(
13976 this.yield_keyword,
13980 with_operand(operand){
13981 return new YieldFromExpression(
13982 this.yield_keyword,
13986 rewrite(rewriter, parents)
13988 if (parents == undefined)
13990 let new_parents = parents.slice();
13991 new_parents.push(this);
13992 var yield_keyword = this.yield_keyword.rewrite(rewriter, new_parents);
13993 var from_keyword = this.from_keyword.rewrite(rewriter, new_parents);
13994 var operand = this.operand.rewrite(rewriter, new_parents);
13996 yield_keyword === this.yield_keyword &&
13997 from_keyword === this.from_keyword &&
13998 operand === this.operand)
14000 return rewriter(this, parents);
14004 return rewriter(new YieldFromExpression(
14007 operand), parents);
14010 static from_json(json, position, source)
14012 let yield_keyword = EditableSyntax.from_json(
14013 json.yield_from_yield_keyword, position, source);
14014 position += yield_keyword.width;
14015 let from_keyword = EditableSyntax.from_json(
14016 json.yield_from_from_keyword, position, source);
14017 position += from_keyword.width;
14018 let operand = EditableSyntax.from_json(
14019 json.yield_from_operand, position, source);
14020 position += operand.width;
14021 return new YieldFromExpression(
14026 get children_keys()
14028 if (YieldFromExpression._children_keys == null)
14029 YieldFromExpression._children_keys = [
14033 return YieldFromExpression._children_keys;
14036 class PrefixUnaryExpression extends EditableSyntax
14042 super('prefix_unary_expression', {
14043 operator: operator,
14044 operand: operand });
14046 get operator() { return this.children.operator; }
14047 get operand() { return this.children.operand; }
14048 with_operator(operator){
14049 return new PrefixUnaryExpression(
14053 with_operand(operand){
14054 return new PrefixUnaryExpression(
14058 rewrite(rewriter, parents)
14060 if (parents == undefined)
14062 let new_parents = parents.slice();
14063 new_parents.push(this);
14064 var operator = this.operator.rewrite(rewriter, new_parents);
14065 var operand = this.operand.rewrite(rewriter, new_parents);
14067 operator === this.operator &&
14068 operand === this.operand)
14070 return rewriter(this, parents);
14074 return rewriter(new PrefixUnaryExpression(
14076 operand), parents);
14079 static from_json(json, position, source)
14081 let operator = EditableSyntax.from_json(
14082 json.prefix_unary_operator, position, source);
14083 position += operator.width;
14084 let operand = EditableSyntax.from_json(
14085 json.prefix_unary_operand, position, source);
14086 position += operand.width;
14087 return new PrefixUnaryExpression(
14091 get children_keys()
14093 if (PrefixUnaryExpression._children_keys == null)
14094 PrefixUnaryExpression._children_keys = [
14097 return PrefixUnaryExpression._children_keys;
14100 class PostfixUnaryExpression extends EditableSyntax
14106 super('postfix_unary_expression', {
14108 operator: operator });
14110 get operand() { return this.children.operand; }
14111 get operator() { return this.children.operator; }
14112 with_operand(operand){
14113 return new PostfixUnaryExpression(
14117 with_operator(operator){
14118 return new PostfixUnaryExpression(
14122 rewrite(rewriter, parents)
14124 if (parents == undefined)
14126 let new_parents = parents.slice();
14127 new_parents.push(this);
14128 var operand = this.operand.rewrite(rewriter, new_parents);
14129 var operator = this.operator.rewrite(rewriter, new_parents);
14131 operand === this.operand &&
14132 operator === this.operator)
14134 return rewriter(this, parents);
14138 return rewriter(new PostfixUnaryExpression(
14140 operator), parents);
14143 static from_json(json, position, source)
14145 let operand = EditableSyntax.from_json(
14146 json.postfix_unary_operand, position, source);
14147 position += operand.width;
14148 let operator = EditableSyntax.from_json(
14149 json.postfix_unary_operator, position, source);
14150 position += operator.width;
14151 return new PostfixUnaryExpression(
14155 get children_keys()
14157 if (PostfixUnaryExpression._children_keys == null)
14158 PostfixUnaryExpression._children_keys = [
14161 return PostfixUnaryExpression._children_keys;
14164 class BinaryExpression extends EditableSyntax
14171 super('binary_expression', {
14172 left_operand: left_operand,
14173 operator: operator,
14174 right_operand: right_operand });
14176 get left_operand() { return this.children.left_operand; }
14177 get operator() { return this.children.operator; }
14178 get right_operand() { return this.children.right_operand; }
14179 with_left_operand(left_operand){
14180 return new BinaryExpression(
14183 this.right_operand);
14185 with_operator(operator){
14186 return new BinaryExpression(
14189 this.right_operand);
14191 with_right_operand(right_operand){
14192 return new BinaryExpression(
14197 rewrite(rewriter, parents)
14199 if (parents == undefined)
14201 let new_parents = parents.slice();
14202 new_parents.push(this);
14203 var left_operand = this.left_operand.rewrite(rewriter, new_parents);
14204 var operator = this.operator.rewrite(rewriter, new_parents);
14205 var right_operand = this.right_operand.rewrite(rewriter, new_parents);
14207 left_operand === this.left_operand &&
14208 operator === this.operator &&
14209 right_operand === this.right_operand)
14211 return rewriter(this, parents);
14215 return rewriter(new BinaryExpression(
14218 right_operand), parents);
14221 static from_json(json, position, source)
14223 let left_operand = EditableSyntax.from_json(
14224 json.binary_left_operand, position, source);
14225 position += left_operand.width;
14226 let operator = EditableSyntax.from_json(
14227 json.binary_operator, position, source);
14228 position += operator.width;
14229 let right_operand = EditableSyntax.from_json(
14230 json.binary_right_operand, position, source);
14231 position += right_operand.width;
14232 return new BinaryExpression(
14237 get children_keys()
14239 if (BinaryExpression._children_keys == null)
14240 BinaryExpression._children_keys = [
14244 return BinaryExpression._children_keys;
14247 class InstanceofExpression extends EditableSyntax
14254 super('instanceof_expression', {
14255 left_operand: left_operand,
14256 operator: operator,
14257 right_operand: right_operand });
14259 get left_operand() { return this.children.left_operand; }
14260 get operator() { return this.children.operator; }
14261 get right_operand() { return this.children.right_operand; }
14262 with_left_operand(left_operand){
14263 return new InstanceofExpression(
14266 this.right_operand);
14268 with_operator(operator){
14269 return new InstanceofExpression(
14272 this.right_operand);
14274 with_right_operand(right_operand){
14275 return new InstanceofExpression(
14280 rewrite(rewriter, parents)
14282 if (parents == undefined)
14284 let new_parents = parents.slice();
14285 new_parents.push(this);
14286 var left_operand = this.left_operand.rewrite(rewriter, new_parents);
14287 var operator = this.operator.rewrite(rewriter, new_parents);
14288 var right_operand = this.right_operand.rewrite(rewriter, new_parents);
14290 left_operand === this.left_operand &&
14291 operator === this.operator &&
14292 right_operand === this.right_operand)
14294 return rewriter(this, parents);
14298 return rewriter(new InstanceofExpression(
14301 right_operand), parents);
14304 static from_json(json, position, source)
14306 let left_operand = EditableSyntax.from_json(
14307 json.instanceof_left_operand, position, source);
14308 position += left_operand.width;
14309 let operator = EditableSyntax.from_json(
14310 json.instanceof_operator, position, source);
14311 position += operator.width;
14312 let right_operand = EditableSyntax.from_json(
14313 json.instanceof_right_operand, position, source);
14314 position += right_operand.width;
14315 return new InstanceofExpression(
14320 get children_keys()
14322 if (InstanceofExpression._children_keys == null)
14323 InstanceofExpression._children_keys = [
14327 return InstanceofExpression._children_keys;
14330 class IsExpression extends EditableSyntax
14337 super('is_expression', {
14338 left_operand: left_operand,
14339 operator: operator,
14340 right_operand: right_operand });
14342 get left_operand() { return this.children.left_operand; }
14343 get operator() { return this.children.operator; }
14344 get right_operand() { return this.children.right_operand; }
14345 with_left_operand(left_operand){
14346 return new IsExpression(
14349 this.right_operand);
14351 with_operator(operator){
14352 return new IsExpression(
14355 this.right_operand);
14357 with_right_operand(right_operand){
14358 return new IsExpression(
14363 rewrite(rewriter, parents)
14365 if (parents == undefined)
14367 let new_parents = parents.slice();
14368 new_parents.push(this);
14369 var left_operand = this.left_operand.rewrite(rewriter, new_parents);
14370 var operator = this.operator.rewrite(rewriter, new_parents);
14371 var right_operand = this.right_operand.rewrite(rewriter, new_parents);
14373 left_operand === this.left_operand &&
14374 operator === this.operator &&
14375 right_operand === this.right_operand)
14377 return rewriter(this, parents);
14381 return rewriter(new IsExpression(
14384 right_operand), parents);
14387 static from_json(json, position, source)
14389 let left_operand = EditableSyntax.from_json(
14390 json.is_left_operand, position, source);
14391 position += left_operand.width;
14392 let operator = EditableSyntax.from_json(
14393 json.is_operator, position, source);
14394 position += operator.width;
14395 let right_operand = EditableSyntax.from_json(
14396 json.is_right_operand, position, source);
14397 position += right_operand.width;
14398 return new IsExpression(
14403 get children_keys()
14405 if (IsExpression._children_keys == null)
14406 IsExpression._children_keys = [
14410 return IsExpression._children_keys;
14413 class AsExpression extends EditableSyntax
14420 super('as_expression', {
14421 left_operand: left_operand,
14422 operator: operator,
14423 right_operand: right_operand });
14425 get left_operand() { return this.children.left_operand; }
14426 get operator() { return this.children.operator; }
14427 get right_operand() { return this.children.right_operand; }
14428 with_left_operand(left_operand){
14429 return new AsExpression(
14432 this.right_operand);
14434 with_operator(operator){
14435 return new AsExpression(
14438 this.right_operand);
14440 with_right_operand(right_operand){
14441 return new AsExpression(
14446 rewrite(rewriter, parents)
14448 if (parents == undefined)
14450 let new_parents = parents.slice();
14451 new_parents.push(this);
14452 var left_operand = this.left_operand.rewrite(rewriter, new_parents);
14453 var operator = this.operator.rewrite(rewriter, new_parents);
14454 var right_operand = this.right_operand.rewrite(rewriter, new_parents);
14456 left_operand === this.left_operand &&
14457 operator === this.operator &&
14458 right_operand === this.right_operand)
14460 return rewriter(this, parents);
14464 return rewriter(new AsExpression(
14467 right_operand), parents);
14470 static from_json(json, position, source)
14472 let left_operand = EditableSyntax.from_json(
14473 json.as_left_operand, position, source);
14474 position += left_operand.width;
14475 let operator = EditableSyntax.from_json(
14476 json.as_operator, position, source);
14477 position += operator.width;
14478 let right_operand = EditableSyntax.from_json(
14479 json.as_right_operand, position, source);
14480 position += right_operand.width;
14481 return new AsExpression(
14486 get children_keys()
14488 if (AsExpression._children_keys == null)
14489 AsExpression._children_keys = [
14493 return AsExpression._children_keys;
14496 class NullableAsExpression extends EditableSyntax
14503 super('nullable_as_expression', {
14504 left_operand: left_operand,
14505 operator: operator,
14506 right_operand: right_operand });
14508 get left_operand() { return this.children.left_operand; }
14509 get operator() { return this.children.operator; }
14510 get right_operand() { return this.children.right_operand; }
14511 with_left_operand(left_operand){
14512 return new NullableAsExpression(
14515 this.right_operand);
14517 with_operator(operator){
14518 return new NullableAsExpression(
14521 this.right_operand);
14523 with_right_operand(right_operand){
14524 return new NullableAsExpression(
14529 rewrite(rewriter, parents)
14531 if (parents == undefined)
14533 let new_parents = parents.slice();
14534 new_parents.push(this);
14535 var left_operand = this.left_operand.rewrite(rewriter, new_parents);
14536 var operator = this.operator.rewrite(rewriter, new_parents);
14537 var right_operand = this.right_operand.rewrite(rewriter, new_parents);
14539 left_operand === this.left_operand &&
14540 operator === this.operator &&
14541 right_operand === this.right_operand)
14543 return rewriter(this, parents);
14547 return rewriter(new NullableAsExpression(
14550 right_operand), parents);
14553 static from_json(json, position, source)
14555 let left_operand = EditableSyntax.from_json(
14556 json.nullable_as_left_operand, position, source);
14557 position += left_operand.width;
14558 let operator = EditableSyntax.from_json(
14559 json.nullable_as_operator, position, source);
14560 position += operator.width;
14561 let right_operand = EditableSyntax.from_json(
14562 json.nullable_as_right_operand, position, source);
14563 position += right_operand.width;
14564 return new NullableAsExpression(
14569 get children_keys()
14571 if (NullableAsExpression._children_keys == null)
14572 NullableAsExpression._children_keys = [
14576 return NullableAsExpression._children_keys;
14579 class ConditionalExpression extends EditableSyntax
14588 super('conditional_expression', {
14590 question: question,
14591 consequence: consequence,
14593 alternative: alternative });
14595 get test() { return this.children.test; }
14596 get question() { return this.children.question; }
14597 get consequence() { return this.children.consequence; }
14598 get colon() { return this.children.colon; }
14599 get alternative() { return this.children.alternative; }
14601 return new ConditionalExpression(
14608 with_question(question){
14609 return new ConditionalExpression(
14616 with_consequence(consequence){
14617 return new ConditionalExpression(
14625 return new ConditionalExpression(
14632 with_alternative(alternative){
14633 return new ConditionalExpression(
14640 rewrite(rewriter, parents)
14642 if (parents == undefined)
14644 let new_parents = parents.slice();
14645 new_parents.push(this);
14646 var test = this.test.rewrite(rewriter, new_parents);
14647 var question = this.question.rewrite(rewriter, new_parents);
14648 var consequence = this.consequence.rewrite(rewriter, new_parents);
14649 var colon = this.colon.rewrite(rewriter, new_parents);
14650 var alternative = this.alternative.rewrite(rewriter, new_parents);
14652 test === this.test &&
14653 question === this.question &&
14654 consequence === this.consequence &&
14655 colon === this.colon &&
14656 alternative === this.alternative)
14658 return rewriter(this, parents);
14662 return rewriter(new ConditionalExpression(
14667 alternative), parents);
14670 static from_json(json, position, source)
14672 let test = EditableSyntax.from_json(
14673 json.conditional_test, position, source);
14674 position += test.width;
14675 let question = EditableSyntax.from_json(
14676 json.conditional_question, position, source);
14677 position += question.width;
14678 let consequence = EditableSyntax.from_json(
14679 json.conditional_consequence, position, source);
14680 position += consequence.width;
14681 let colon = EditableSyntax.from_json(
14682 json.conditional_colon, position, source);
14683 position += colon.width;
14684 let alternative = EditableSyntax.from_json(
14685 json.conditional_alternative, position, source);
14686 position += alternative.width;
14687 return new ConditionalExpression(
14694 get children_keys()
14696 if (ConditionalExpression._children_keys == null)
14697 ConditionalExpression._children_keys = [
14703 return ConditionalExpression._children_keys;
14706 class EvalExpression extends EditableSyntax
14714 super('eval_expression', {
14716 left_paren: left_paren,
14717 argument: argument,
14718 right_paren: right_paren });
14720 get keyword() { return this.children.keyword; }
14721 get left_paren() { return this.children.left_paren; }
14722 get argument() { return this.children.argument; }
14723 get right_paren() { return this.children.right_paren; }
14724 with_keyword(keyword){
14725 return new EvalExpression(
14731 with_left_paren(left_paren){
14732 return new EvalExpression(
14738 with_argument(argument){
14739 return new EvalExpression(
14745 with_right_paren(right_paren){
14746 return new EvalExpression(
14752 rewrite(rewriter, parents)
14754 if (parents == undefined)
14756 let new_parents = parents.slice();
14757 new_parents.push(this);
14758 var keyword = this.keyword.rewrite(rewriter, new_parents);
14759 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
14760 var argument = this.argument.rewrite(rewriter, new_parents);
14761 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
14763 keyword === this.keyword &&
14764 left_paren === this.left_paren &&
14765 argument === this.argument &&
14766 right_paren === this.right_paren)
14768 return rewriter(this, parents);
14772 return rewriter(new EvalExpression(
14776 right_paren), parents);
14779 static from_json(json, position, source)
14781 let keyword = EditableSyntax.from_json(
14782 json.eval_keyword, position, source);
14783 position += keyword.width;
14784 let left_paren = EditableSyntax.from_json(
14785 json.eval_left_paren, position, source);
14786 position += left_paren.width;
14787 let argument = EditableSyntax.from_json(
14788 json.eval_argument, position, source);
14789 position += argument.width;
14790 let right_paren = EditableSyntax.from_json(
14791 json.eval_right_paren, position, source);
14792 position += right_paren.width;
14793 return new EvalExpression(
14799 get children_keys()
14801 if (EvalExpression._children_keys == null)
14802 EvalExpression._children_keys = [
14807 return EvalExpression._children_keys;
14810 class EmptyExpression extends EditableSyntax
14818 super('empty_expression', {
14820 left_paren: left_paren,
14821 argument: argument,
14822 right_paren: right_paren });
14824 get keyword() { return this.children.keyword; }
14825 get left_paren() { return this.children.left_paren; }
14826 get argument() { return this.children.argument; }
14827 get right_paren() { return this.children.right_paren; }
14828 with_keyword(keyword){
14829 return new EmptyExpression(
14835 with_left_paren(left_paren){
14836 return new EmptyExpression(
14842 with_argument(argument){
14843 return new EmptyExpression(
14849 with_right_paren(right_paren){
14850 return new EmptyExpression(
14856 rewrite(rewriter, parents)
14858 if (parents == undefined)
14860 let new_parents = parents.slice();
14861 new_parents.push(this);
14862 var keyword = this.keyword.rewrite(rewriter, new_parents);
14863 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
14864 var argument = this.argument.rewrite(rewriter, new_parents);
14865 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
14867 keyword === this.keyword &&
14868 left_paren === this.left_paren &&
14869 argument === this.argument &&
14870 right_paren === this.right_paren)
14872 return rewriter(this, parents);
14876 return rewriter(new EmptyExpression(
14880 right_paren), parents);
14883 static from_json(json, position, source)
14885 let keyword = EditableSyntax.from_json(
14886 json.empty_keyword, position, source);
14887 position += keyword.width;
14888 let left_paren = EditableSyntax.from_json(
14889 json.empty_left_paren, position, source);
14890 position += left_paren.width;
14891 let argument = EditableSyntax.from_json(
14892 json.empty_argument, position, source);
14893 position += argument.width;
14894 let right_paren = EditableSyntax.from_json(
14895 json.empty_right_paren, position, source);
14896 position += right_paren.width;
14897 return new EmptyExpression(
14903 get children_keys()
14905 if (EmptyExpression._children_keys == null)
14906 EmptyExpression._children_keys = [
14911 return EmptyExpression._children_keys;
14914 class DefineExpression extends EditableSyntax
14922 super('define_expression', {
14924 left_paren: left_paren,
14925 argument_list: argument_list,
14926 right_paren: right_paren });
14928 get keyword() { return this.children.keyword; }
14929 get left_paren() { return this.children.left_paren; }
14930 get argument_list() { return this.children.argument_list; }
14931 get right_paren() { return this.children.right_paren; }
14932 with_keyword(keyword){
14933 return new DefineExpression(
14936 this.argument_list,
14939 with_left_paren(left_paren){
14940 return new DefineExpression(
14943 this.argument_list,
14946 with_argument_list(argument_list){
14947 return new DefineExpression(
14953 with_right_paren(right_paren){
14954 return new DefineExpression(
14957 this.argument_list,
14960 rewrite(rewriter, parents)
14962 if (parents == undefined)
14964 let new_parents = parents.slice();
14965 new_parents.push(this);
14966 var keyword = this.keyword.rewrite(rewriter, new_parents);
14967 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
14968 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
14969 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
14971 keyword === this.keyword &&
14972 left_paren === this.left_paren &&
14973 argument_list === this.argument_list &&
14974 right_paren === this.right_paren)
14976 return rewriter(this, parents);
14980 return rewriter(new DefineExpression(
14984 right_paren), parents);
14987 static from_json(json, position, source)
14989 let keyword = EditableSyntax.from_json(
14990 json.define_keyword, position, source);
14991 position += keyword.width;
14992 let left_paren = EditableSyntax.from_json(
14993 json.define_left_paren, position, source);
14994 position += left_paren.width;
14995 let argument_list = EditableSyntax.from_json(
14996 json.define_argument_list, position, source);
14997 position += argument_list.width;
14998 let right_paren = EditableSyntax.from_json(
14999 json.define_right_paren, position, source);
15000 position += right_paren.width;
15001 return new DefineExpression(
15007 get children_keys()
15009 if (DefineExpression._children_keys == null)
15010 DefineExpression._children_keys = [
15015 return DefineExpression._children_keys;
15018 class HaltCompilerExpression extends EditableSyntax
15026 super('halt_compiler_expression', {
15028 left_paren: left_paren,
15029 argument_list: argument_list,
15030 right_paren: right_paren });
15032 get keyword() { return this.children.keyword; }
15033 get left_paren() { return this.children.left_paren; }
15034 get argument_list() { return this.children.argument_list; }
15035 get right_paren() { return this.children.right_paren; }
15036 with_keyword(keyword){
15037 return new HaltCompilerExpression(
15040 this.argument_list,
15043 with_left_paren(left_paren){
15044 return new HaltCompilerExpression(
15047 this.argument_list,
15050 with_argument_list(argument_list){
15051 return new HaltCompilerExpression(
15057 with_right_paren(right_paren){
15058 return new HaltCompilerExpression(
15061 this.argument_list,
15064 rewrite(rewriter, parents)
15066 if (parents == undefined)
15068 let new_parents = parents.slice();
15069 new_parents.push(this);
15070 var keyword = this.keyword.rewrite(rewriter, new_parents);
15071 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
15072 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
15073 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
15075 keyword === this.keyword &&
15076 left_paren === this.left_paren &&
15077 argument_list === this.argument_list &&
15078 right_paren === this.right_paren)
15080 return rewriter(this, parents);
15084 return rewriter(new HaltCompilerExpression(
15088 right_paren), parents);
15091 static from_json(json, position, source)
15093 let keyword = EditableSyntax.from_json(
15094 json.halt_compiler_keyword, position, source);
15095 position += keyword.width;
15096 let left_paren = EditableSyntax.from_json(
15097 json.halt_compiler_left_paren, position, source);
15098 position += left_paren.width;
15099 let argument_list = EditableSyntax.from_json(
15100 json.halt_compiler_argument_list, position, source);
15101 position += argument_list.width;
15102 let right_paren = EditableSyntax.from_json(
15103 json.halt_compiler_right_paren, position, source);
15104 position += right_paren.width;
15105 return new HaltCompilerExpression(
15111 get children_keys()
15113 if (HaltCompilerExpression._children_keys == null)
15114 HaltCompilerExpression._children_keys = [
15119 return HaltCompilerExpression._children_keys;
15122 class IssetExpression extends EditableSyntax
15130 super('isset_expression', {
15132 left_paren: left_paren,
15133 argument_list: argument_list,
15134 right_paren: right_paren });
15136 get keyword() { return this.children.keyword; }
15137 get left_paren() { return this.children.left_paren; }
15138 get argument_list() { return this.children.argument_list; }
15139 get right_paren() { return this.children.right_paren; }
15140 with_keyword(keyword){
15141 return new IssetExpression(
15144 this.argument_list,
15147 with_left_paren(left_paren){
15148 return new IssetExpression(
15151 this.argument_list,
15154 with_argument_list(argument_list){
15155 return new IssetExpression(
15161 with_right_paren(right_paren){
15162 return new IssetExpression(
15165 this.argument_list,
15168 rewrite(rewriter, parents)
15170 if (parents == undefined)
15172 let new_parents = parents.slice();
15173 new_parents.push(this);
15174 var keyword = this.keyword.rewrite(rewriter, new_parents);
15175 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
15176 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
15177 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
15179 keyword === this.keyword &&
15180 left_paren === this.left_paren &&
15181 argument_list === this.argument_list &&
15182 right_paren === this.right_paren)
15184 return rewriter(this, parents);
15188 return rewriter(new IssetExpression(
15192 right_paren), parents);
15195 static from_json(json, position, source)
15197 let keyword = EditableSyntax.from_json(
15198 json.isset_keyword, position, source);
15199 position += keyword.width;
15200 let left_paren = EditableSyntax.from_json(
15201 json.isset_left_paren, position, source);
15202 position += left_paren.width;
15203 let argument_list = EditableSyntax.from_json(
15204 json.isset_argument_list, position, source);
15205 position += argument_list.width;
15206 let right_paren = EditableSyntax.from_json(
15207 json.isset_right_paren, position, source);
15208 position += right_paren.width;
15209 return new IssetExpression(
15215 get children_keys()
15217 if (IssetExpression._children_keys == null)
15218 IssetExpression._children_keys = [
15223 return IssetExpression._children_keys;
15226 class FunctionCallExpression extends EditableSyntax
15234 super('function_call_expression', {
15235 receiver: receiver,
15236 left_paren: left_paren,
15237 argument_list: argument_list,
15238 right_paren: right_paren });
15240 get receiver() { return this.children.receiver; }
15241 get left_paren() { return this.children.left_paren; }
15242 get argument_list() { return this.children.argument_list; }
15243 get right_paren() { return this.children.right_paren; }
15244 with_receiver(receiver){
15245 return new FunctionCallExpression(
15248 this.argument_list,
15251 with_left_paren(left_paren){
15252 return new FunctionCallExpression(
15255 this.argument_list,
15258 with_argument_list(argument_list){
15259 return new FunctionCallExpression(
15265 with_right_paren(right_paren){
15266 return new FunctionCallExpression(
15269 this.argument_list,
15272 rewrite(rewriter, parents)
15274 if (parents == undefined)
15276 let new_parents = parents.slice();
15277 new_parents.push(this);
15278 var receiver = this.receiver.rewrite(rewriter, new_parents);
15279 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
15280 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
15281 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
15283 receiver === this.receiver &&
15284 left_paren === this.left_paren &&
15285 argument_list === this.argument_list &&
15286 right_paren === this.right_paren)
15288 return rewriter(this, parents);
15292 return rewriter(new FunctionCallExpression(
15296 right_paren), parents);
15299 static from_json(json, position, source)
15301 let receiver = EditableSyntax.from_json(
15302 json.function_call_receiver, position, source);
15303 position += receiver.width;
15304 let left_paren = EditableSyntax.from_json(
15305 json.function_call_left_paren, position, source);
15306 position += left_paren.width;
15307 let argument_list = EditableSyntax.from_json(
15308 json.function_call_argument_list, position, source);
15309 position += argument_list.width;
15310 let right_paren = EditableSyntax.from_json(
15311 json.function_call_right_paren, position, source);
15312 position += right_paren.width;
15313 return new FunctionCallExpression(
15319 get children_keys()
15321 if (FunctionCallExpression._children_keys == null)
15322 FunctionCallExpression._children_keys = [
15327 return FunctionCallExpression._children_keys;
15330 class FunctionCallWithTypeArgumentsExpression extends EditableSyntax
15339 super('function_call_with_type_arguments_expression', {
15340 receiver: receiver,
15341 type_args: type_args,
15342 left_paren: left_paren,
15343 argument_list: argument_list,
15344 right_paren: right_paren });
15346 get receiver() { return this.children.receiver; }
15347 get type_args() { return this.children.type_args; }
15348 get left_paren() { return this.children.left_paren; }
15349 get argument_list() { return this.children.argument_list; }
15350 get right_paren() { return this.children.right_paren; }
15351 with_receiver(receiver){
15352 return new FunctionCallWithTypeArgumentsExpression(
15356 this.argument_list,
15359 with_type_args(type_args){
15360 return new FunctionCallWithTypeArgumentsExpression(
15364 this.argument_list,
15367 with_left_paren(left_paren){
15368 return new FunctionCallWithTypeArgumentsExpression(
15372 this.argument_list,
15375 with_argument_list(argument_list){
15376 return new FunctionCallWithTypeArgumentsExpression(
15383 with_right_paren(right_paren){
15384 return new FunctionCallWithTypeArgumentsExpression(
15388 this.argument_list,
15391 rewrite(rewriter, parents)
15393 if (parents == undefined)
15395 let new_parents = parents.slice();
15396 new_parents.push(this);
15397 var receiver = this.receiver.rewrite(rewriter, new_parents);
15398 var type_args = this.type_args.rewrite(rewriter, new_parents);
15399 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
15400 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
15401 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
15403 receiver === this.receiver &&
15404 type_args === this.type_args &&
15405 left_paren === this.left_paren &&
15406 argument_list === this.argument_list &&
15407 right_paren === this.right_paren)
15409 return rewriter(this, parents);
15413 return rewriter(new FunctionCallWithTypeArgumentsExpression(
15418 right_paren), parents);
15421 static from_json(json, position, source)
15423 let receiver = EditableSyntax.from_json(
15424 json.function_call_with_type_arguments_receiver, position, source);
15425 position += receiver.width;
15426 let type_args = EditableSyntax.from_json(
15427 json.function_call_with_type_arguments_type_args, position, source);
15428 position += type_args.width;
15429 let left_paren = EditableSyntax.from_json(
15430 json.function_call_with_type_arguments_left_paren, position, source);
15431 position += left_paren.width;
15432 let argument_list = EditableSyntax.from_json(
15433 json.function_call_with_type_arguments_argument_list, position, source);
15434 position += argument_list.width;
15435 let right_paren = EditableSyntax.from_json(
15436 json.function_call_with_type_arguments_right_paren, position, source);
15437 position += right_paren.width;
15438 return new FunctionCallWithTypeArgumentsExpression(
15445 get children_keys()
15447 if (FunctionCallWithTypeArgumentsExpression._children_keys == null)
15448 FunctionCallWithTypeArgumentsExpression._children_keys = [
15454 return FunctionCallWithTypeArgumentsExpression._children_keys;
15457 class ParenthesizedExpression extends EditableSyntax
15464 super('parenthesized_expression', {
15465 left_paren: left_paren,
15466 expression: expression,
15467 right_paren: right_paren });
15469 get left_paren() { return this.children.left_paren; }
15470 get expression() { return this.children.expression; }
15471 get right_paren() { return this.children.right_paren; }
15472 with_left_paren(left_paren){
15473 return new ParenthesizedExpression(
15478 with_expression(expression){
15479 return new ParenthesizedExpression(
15484 with_right_paren(right_paren){
15485 return new ParenthesizedExpression(
15490 rewrite(rewriter, parents)
15492 if (parents == undefined)
15494 let new_parents = parents.slice();
15495 new_parents.push(this);
15496 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
15497 var expression = this.expression.rewrite(rewriter, new_parents);
15498 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
15500 left_paren === this.left_paren &&
15501 expression === this.expression &&
15502 right_paren === this.right_paren)
15504 return rewriter(this, parents);
15508 return rewriter(new ParenthesizedExpression(
15511 right_paren), parents);
15514 static from_json(json, position, source)
15516 let left_paren = EditableSyntax.from_json(
15517 json.parenthesized_expression_left_paren, position, source);
15518 position += left_paren.width;
15519 let expression = EditableSyntax.from_json(
15520 json.parenthesized_expression_expression, position, source);
15521 position += expression.width;
15522 let right_paren = EditableSyntax.from_json(
15523 json.parenthesized_expression_right_paren, position, source);
15524 position += right_paren.width;
15525 return new ParenthesizedExpression(
15530 get children_keys()
15532 if (ParenthesizedExpression._children_keys == null)
15533 ParenthesizedExpression._children_keys = [
15537 return ParenthesizedExpression._children_keys;
15540 class BracedExpression extends EditableSyntax
15547 super('braced_expression', {
15548 left_brace: left_brace,
15549 expression: expression,
15550 right_brace: right_brace });
15552 get left_brace() { return this.children.left_brace; }
15553 get expression() { return this.children.expression; }
15554 get right_brace() { return this.children.right_brace; }
15555 with_left_brace(left_brace){
15556 return new BracedExpression(
15561 with_expression(expression){
15562 return new BracedExpression(
15567 with_right_brace(right_brace){
15568 return new BracedExpression(
15573 rewrite(rewriter, parents)
15575 if (parents == undefined)
15577 let new_parents = parents.slice();
15578 new_parents.push(this);
15579 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
15580 var expression = this.expression.rewrite(rewriter, new_parents);
15581 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
15583 left_brace === this.left_brace &&
15584 expression === this.expression &&
15585 right_brace === this.right_brace)
15587 return rewriter(this, parents);
15591 return rewriter(new BracedExpression(
15594 right_brace), parents);
15597 static from_json(json, position, source)
15599 let left_brace = EditableSyntax.from_json(
15600 json.braced_expression_left_brace, position, source);
15601 position += left_brace.width;
15602 let expression = EditableSyntax.from_json(
15603 json.braced_expression_expression, position, source);
15604 position += expression.width;
15605 let right_brace = EditableSyntax.from_json(
15606 json.braced_expression_right_brace, position, source);
15607 position += right_brace.width;
15608 return new BracedExpression(
15613 get children_keys()
15615 if (BracedExpression._children_keys == null)
15616 BracedExpression._children_keys = [
15620 return BracedExpression._children_keys;
15623 class EmbeddedBracedExpression extends EditableSyntax
15630 super('embedded_braced_expression', {
15631 left_brace: left_brace,
15632 expression: expression,
15633 right_brace: right_brace });
15635 get left_brace() { return this.children.left_brace; }
15636 get expression() { return this.children.expression; }
15637 get right_brace() { return this.children.right_brace; }
15638 with_left_brace(left_brace){
15639 return new EmbeddedBracedExpression(
15644 with_expression(expression){
15645 return new EmbeddedBracedExpression(
15650 with_right_brace(right_brace){
15651 return new EmbeddedBracedExpression(
15656 rewrite(rewriter, parents)
15658 if (parents == undefined)
15660 let new_parents = parents.slice();
15661 new_parents.push(this);
15662 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
15663 var expression = this.expression.rewrite(rewriter, new_parents);
15664 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
15666 left_brace === this.left_brace &&
15667 expression === this.expression &&
15668 right_brace === this.right_brace)
15670 return rewriter(this, parents);
15674 return rewriter(new EmbeddedBracedExpression(
15677 right_brace), parents);
15680 static from_json(json, position, source)
15682 let left_brace = EditableSyntax.from_json(
15683 json.embedded_braced_expression_left_brace, position, source);
15684 position += left_brace.width;
15685 let expression = EditableSyntax.from_json(
15686 json.embedded_braced_expression_expression, position, source);
15687 position += expression.width;
15688 let right_brace = EditableSyntax.from_json(
15689 json.embedded_braced_expression_right_brace, position, source);
15690 position += right_brace.width;
15691 return new EmbeddedBracedExpression(
15696 get children_keys()
15698 if (EmbeddedBracedExpression._children_keys == null)
15699 EmbeddedBracedExpression._children_keys = [
15703 return EmbeddedBracedExpression._children_keys;
15706 class ListExpression extends EditableSyntax
15714 super('list_expression', {
15716 left_paren: left_paren,
15718 right_paren: right_paren });
15720 get keyword() { return this.children.keyword; }
15721 get left_paren() { return this.children.left_paren; }
15722 get members() { return this.children.members; }
15723 get right_paren() { return this.children.right_paren; }
15724 with_keyword(keyword){
15725 return new ListExpression(
15731 with_left_paren(left_paren){
15732 return new ListExpression(
15738 with_members(members){
15739 return new ListExpression(
15745 with_right_paren(right_paren){
15746 return new ListExpression(
15752 rewrite(rewriter, parents)
15754 if (parents == undefined)
15756 let new_parents = parents.slice();
15757 new_parents.push(this);
15758 var keyword = this.keyword.rewrite(rewriter, new_parents);
15759 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
15760 var members = this.members.rewrite(rewriter, new_parents);
15761 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
15763 keyword === this.keyword &&
15764 left_paren === this.left_paren &&
15765 members === this.members &&
15766 right_paren === this.right_paren)
15768 return rewriter(this, parents);
15772 return rewriter(new ListExpression(
15776 right_paren), parents);
15779 static from_json(json, position, source)
15781 let keyword = EditableSyntax.from_json(
15782 json.list_keyword, position, source);
15783 position += keyword.width;
15784 let left_paren = EditableSyntax.from_json(
15785 json.list_left_paren, position, source);
15786 position += left_paren.width;
15787 let members = EditableSyntax.from_json(
15788 json.list_members, position, source);
15789 position += members.width;
15790 let right_paren = EditableSyntax.from_json(
15791 json.list_right_paren, position, source);
15792 position += right_paren.width;
15793 return new ListExpression(
15799 get children_keys()
15801 if (ListExpression._children_keys == null)
15802 ListExpression._children_keys = [
15807 return ListExpression._children_keys;
15810 class CollectionLiteralExpression extends EditableSyntax
15818 super('collection_literal_expression', {
15820 left_brace: left_brace,
15821 initializers: initializers,
15822 right_brace: right_brace });
15824 get name() { return this.children.name; }
15825 get left_brace() { return this.children.left_brace; }
15826 get initializers() { return this.children.initializers; }
15827 get right_brace() { return this.children.right_brace; }
15829 return new CollectionLiteralExpression(
15835 with_left_brace(left_brace){
15836 return new CollectionLiteralExpression(
15842 with_initializers(initializers){
15843 return new CollectionLiteralExpression(
15849 with_right_brace(right_brace){
15850 return new CollectionLiteralExpression(
15856 rewrite(rewriter, parents)
15858 if (parents == undefined)
15860 let new_parents = parents.slice();
15861 new_parents.push(this);
15862 var name = this.name.rewrite(rewriter, new_parents);
15863 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
15864 var initializers = this.initializers.rewrite(rewriter, new_parents);
15865 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
15867 name === this.name &&
15868 left_brace === this.left_brace &&
15869 initializers === this.initializers &&
15870 right_brace === this.right_brace)
15872 return rewriter(this, parents);
15876 return rewriter(new CollectionLiteralExpression(
15880 right_brace), parents);
15883 static from_json(json, position, source)
15885 let name = EditableSyntax.from_json(
15886 json.collection_literal_name, position, source);
15887 position += name.width;
15888 let left_brace = EditableSyntax.from_json(
15889 json.collection_literal_left_brace, position, source);
15890 position += left_brace.width;
15891 let initializers = EditableSyntax.from_json(
15892 json.collection_literal_initializers, position, source);
15893 position += initializers.width;
15894 let right_brace = EditableSyntax.from_json(
15895 json.collection_literal_right_brace, position, source);
15896 position += right_brace.width;
15897 return new CollectionLiteralExpression(
15903 get children_keys()
15905 if (CollectionLiteralExpression._children_keys == null)
15906 CollectionLiteralExpression._children_keys = [
15911 return CollectionLiteralExpression._children_keys;
15914 class ObjectCreationExpression extends EditableSyntax
15920 super('object_creation_expression', {
15921 new_keyword: new_keyword,
15924 get new_keyword() { return this.children.new_keyword; }
15925 get object() { return this.children.object; }
15926 with_new_keyword(new_keyword){
15927 return new ObjectCreationExpression(
15931 with_object(object){
15932 return new ObjectCreationExpression(
15936 rewrite(rewriter, parents)
15938 if (parents == undefined)
15940 let new_parents = parents.slice();
15941 new_parents.push(this);
15942 var new_keyword = this.new_keyword.rewrite(rewriter, new_parents);
15943 var object = this.object.rewrite(rewriter, new_parents);
15945 new_keyword === this.new_keyword &&
15946 object === this.object)
15948 return rewriter(this, parents);
15952 return rewriter(new ObjectCreationExpression(
15957 static from_json(json, position, source)
15959 let new_keyword = EditableSyntax.from_json(
15960 json.object_creation_new_keyword, position, source);
15961 position += new_keyword.width;
15962 let object = EditableSyntax.from_json(
15963 json.object_creation_object, position, source);
15964 position += object.width;
15965 return new ObjectCreationExpression(
15969 get children_keys()
15971 if (ObjectCreationExpression._children_keys == null)
15972 ObjectCreationExpression._children_keys = [
15975 return ObjectCreationExpression._children_keys;
15978 class ConstructorCall extends EditableSyntax
15986 super('constructor_call', {
15988 left_paren: left_paren,
15989 argument_list: argument_list,
15990 right_paren: right_paren });
15992 get type() { return this.children.type; }
15993 get left_paren() { return this.children.left_paren; }
15994 get argument_list() { return this.children.argument_list; }
15995 get right_paren() { return this.children.right_paren; }
15997 return new ConstructorCall(
16000 this.argument_list,
16003 with_left_paren(left_paren){
16004 return new ConstructorCall(
16007 this.argument_list,
16010 with_argument_list(argument_list){
16011 return new ConstructorCall(
16017 with_right_paren(right_paren){
16018 return new ConstructorCall(
16021 this.argument_list,
16024 rewrite(rewriter, parents)
16026 if (parents == undefined)
16028 let new_parents = parents.slice();
16029 new_parents.push(this);
16030 var type = this.type.rewrite(rewriter, new_parents);
16031 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
16032 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
16033 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
16035 type === this.type &&
16036 left_paren === this.left_paren &&
16037 argument_list === this.argument_list &&
16038 right_paren === this.right_paren)
16040 return rewriter(this, parents);
16044 return rewriter(new ConstructorCall(
16048 right_paren), parents);
16051 static from_json(json, position, source)
16053 let type = EditableSyntax.from_json(
16054 json.constructor_call_type, position, source);
16055 position += type.width;
16056 let left_paren = EditableSyntax.from_json(
16057 json.constructor_call_left_paren, position, source);
16058 position += left_paren.width;
16059 let argument_list = EditableSyntax.from_json(
16060 json.constructor_call_argument_list, position, source);
16061 position += argument_list.width;
16062 let right_paren = EditableSyntax.from_json(
16063 json.constructor_call_right_paren, position, source);
16064 position += right_paren.width;
16065 return new ConstructorCall(
16071 get children_keys()
16073 if (ConstructorCall._children_keys == null)
16074 ConstructorCall._children_keys = [
16079 return ConstructorCall._children_keys;
16082 class ArrayCreationExpression extends EditableSyntax
16089 super('array_creation_expression', {
16090 left_bracket: left_bracket,
16092 right_bracket: right_bracket });
16094 get left_bracket() { return this.children.left_bracket; }
16095 get members() { return this.children.members; }
16096 get right_bracket() { return this.children.right_bracket; }
16097 with_left_bracket(left_bracket){
16098 return new ArrayCreationExpression(
16101 this.right_bracket);
16103 with_members(members){
16104 return new ArrayCreationExpression(
16107 this.right_bracket);
16109 with_right_bracket(right_bracket){
16110 return new ArrayCreationExpression(
16115 rewrite(rewriter, parents)
16117 if (parents == undefined)
16119 let new_parents = parents.slice();
16120 new_parents.push(this);
16121 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
16122 var members = this.members.rewrite(rewriter, new_parents);
16123 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
16125 left_bracket === this.left_bracket &&
16126 members === this.members &&
16127 right_bracket === this.right_bracket)
16129 return rewriter(this, parents);
16133 return rewriter(new ArrayCreationExpression(
16136 right_bracket), parents);
16139 static from_json(json, position, source)
16141 let left_bracket = EditableSyntax.from_json(
16142 json.array_creation_left_bracket, position, source);
16143 position += left_bracket.width;
16144 let members = EditableSyntax.from_json(
16145 json.array_creation_members, position, source);
16146 position += members.width;
16147 let right_bracket = EditableSyntax.from_json(
16148 json.array_creation_right_bracket, position, source);
16149 position += right_bracket.width;
16150 return new ArrayCreationExpression(
16155 get children_keys()
16157 if (ArrayCreationExpression._children_keys == null)
16158 ArrayCreationExpression._children_keys = [
16162 return ArrayCreationExpression._children_keys;
16165 class ArrayIntrinsicExpression extends EditableSyntax
16173 super('array_intrinsic_expression', {
16175 left_paren: left_paren,
16177 right_paren: right_paren });
16179 get keyword() { return this.children.keyword; }
16180 get left_paren() { return this.children.left_paren; }
16181 get members() { return this.children.members; }
16182 get right_paren() { return this.children.right_paren; }
16183 with_keyword(keyword){
16184 return new ArrayIntrinsicExpression(
16190 with_left_paren(left_paren){
16191 return new ArrayIntrinsicExpression(
16197 with_members(members){
16198 return new ArrayIntrinsicExpression(
16204 with_right_paren(right_paren){
16205 return new ArrayIntrinsicExpression(
16211 rewrite(rewriter, parents)
16213 if (parents == undefined)
16215 let new_parents = parents.slice();
16216 new_parents.push(this);
16217 var keyword = this.keyword.rewrite(rewriter, new_parents);
16218 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
16219 var members = this.members.rewrite(rewriter, new_parents);
16220 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
16222 keyword === this.keyword &&
16223 left_paren === this.left_paren &&
16224 members === this.members &&
16225 right_paren === this.right_paren)
16227 return rewriter(this, parents);
16231 return rewriter(new ArrayIntrinsicExpression(
16235 right_paren), parents);
16238 static from_json(json, position, source)
16240 let keyword = EditableSyntax.from_json(
16241 json.array_intrinsic_keyword, position, source);
16242 position += keyword.width;
16243 let left_paren = EditableSyntax.from_json(
16244 json.array_intrinsic_left_paren, position, source);
16245 position += left_paren.width;
16246 let members = EditableSyntax.from_json(
16247 json.array_intrinsic_members, position, source);
16248 position += members.width;
16249 let right_paren = EditableSyntax.from_json(
16250 json.array_intrinsic_right_paren, position, source);
16251 position += right_paren.width;
16252 return new ArrayIntrinsicExpression(
16258 get children_keys()
16260 if (ArrayIntrinsicExpression._children_keys == null)
16261 ArrayIntrinsicExpression._children_keys = [
16266 return ArrayIntrinsicExpression._children_keys;
16269 class DarrayIntrinsicExpression extends EditableSyntax
16278 super('darray_intrinsic_expression', {
16280 explicit_type: explicit_type,
16281 left_bracket: left_bracket,
16283 right_bracket: right_bracket });
16285 get keyword() { return this.children.keyword; }
16286 get explicit_type() { return this.children.explicit_type; }
16287 get left_bracket() { return this.children.left_bracket; }
16288 get members() { return this.children.members; }
16289 get right_bracket() { return this.children.right_bracket; }
16290 with_keyword(keyword){
16291 return new DarrayIntrinsicExpression(
16293 this.explicit_type,
16296 this.right_bracket);
16298 with_explicit_type(explicit_type){
16299 return new DarrayIntrinsicExpression(
16304 this.right_bracket);
16306 with_left_bracket(left_bracket){
16307 return new DarrayIntrinsicExpression(
16309 this.explicit_type,
16312 this.right_bracket);
16314 with_members(members){
16315 return new DarrayIntrinsicExpression(
16317 this.explicit_type,
16320 this.right_bracket);
16322 with_right_bracket(right_bracket){
16323 return new DarrayIntrinsicExpression(
16325 this.explicit_type,
16330 rewrite(rewriter, parents)
16332 if (parents == undefined)
16334 let new_parents = parents.slice();
16335 new_parents.push(this);
16336 var keyword = this.keyword.rewrite(rewriter, new_parents);
16337 var explicit_type = this.explicit_type.rewrite(rewriter, new_parents);
16338 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
16339 var members = this.members.rewrite(rewriter, new_parents);
16340 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
16342 keyword === this.keyword &&
16343 explicit_type === this.explicit_type &&
16344 left_bracket === this.left_bracket &&
16345 members === this.members &&
16346 right_bracket === this.right_bracket)
16348 return rewriter(this, parents);
16352 return rewriter(new DarrayIntrinsicExpression(
16357 right_bracket), parents);
16360 static from_json(json, position, source)
16362 let keyword = EditableSyntax.from_json(
16363 json.darray_intrinsic_keyword, position, source);
16364 position += keyword.width;
16365 let explicit_type = EditableSyntax.from_json(
16366 json.darray_intrinsic_explicit_type, position, source);
16367 position += explicit_type.width;
16368 let left_bracket = EditableSyntax.from_json(
16369 json.darray_intrinsic_left_bracket, position, source);
16370 position += left_bracket.width;
16371 let members = EditableSyntax.from_json(
16372 json.darray_intrinsic_members, position, source);
16373 position += members.width;
16374 let right_bracket = EditableSyntax.from_json(
16375 json.darray_intrinsic_right_bracket, position, source);
16376 position += right_bracket.width;
16377 return new DarrayIntrinsicExpression(
16384 get children_keys()
16386 if (DarrayIntrinsicExpression._children_keys == null)
16387 DarrayIntrinsicExpression._children_keys = [
16393 return DarrayIntrinsicExpression._children_keys;
16396 class DictionaryIntrinsicExpression extends EditableSyntax
16405 super('dictionary_intrinsic_expression', {
16407 explicit_type: explicit_type,
16408 left_bracket: left_bracket,
16410 right_bracket: right_bracket });
16412 get keyword() { return this.children.keyword; }
16413 get explicit_type() { return this.children.explicit_type; }
16414 get left_bracket() { return this.children.left_bracket; }
16415 get members() { return this.children.members; }
16416 get right_bracket() { return this.children.right_bracket; }
16417 with_keyword(keyword){
16418 return new DictionaryIntrinsicExpression(
16420 this.explicit_type,
16423 this.right_bracket);
16425 with_explicit_type(explicit_type){
16426 return new DictionaryIntrinsicExpression(
16431 this.right_bracket);
16433 with_left_bracket(left_bracket){
16434 return new DictionaryIntrinsicExpression(
16436 this.explicit_type,
16439 this.right_bracket);
16441 with_members(members){
16442 return new DictionaryIntrinsicExpression(
16444 this.explicit_type,
16447 this.right_bracket);
16449 with_right_bracket(right_bracket){
16450 return new DictionaryIntrinsicExpression(
16452 this.explicit_type,
16457 rewrite(rewriter, parents)
16459 if (parents == undefined)
16461 let new_parents = parents.slice();
16462 new_parents.push(this);
16463 var keyword = this.keyword.rewrite(rewriter, new_parents);
16464 var explicit_type = this.explicit_type.rewrite(rewriter, new_parents);
16465 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
16466 var members = this.members.rewrite(rewriter, new_parents);
16467 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
16469 keyword === this.keyword &&
16470 explicit_type === this.explicit_type &&
16471 left_bracket === this.left_bracket &&
16472 members === this.members &&
16473 right_bracket === this.right_bracket)
16475 return rewriter(this, parents);
16479 return rewriter(new DictionaryIntrinsicExpression(
16484 right_bracket), parents);
16487 static from_json(json, position, source)
16489 let keyword = EditableSyntax.from_json(
16490 json.dictionary_intrinsic_keyword, position, source);
16491 position += keyword.width;
16492 let explicit_type = EditableSyntax.from_json(
16493 json.dictionary_intrinsic_explicit_type, position, source);
16494 position += explicit_type.width;
16495 let left_bracket = EditableSyntax.from_json(
16496 json.dictionary_intrinsic_left_bracket, position, source);
16497 position += left_bracket.width;
16498 let members = EditableSyntax.from_json(
16499 json.dictionary_intrinsic_members, position, source);
16500 position += members.width;
16501 let right_bracket = EditableSyntax.from_json(
16502 json.dictionary_intrinsic_right_bracket, position, source);
16503 position += right_bracket.width;
16504 return new DictionaryIntrinsicExpression(
16511 get children_keys()
16513 if (DictionaryIntrinsicExpression._children_keys == null)
16514 DictionaryIntrinsicExpression._children_keys = [
16520 return DictionaryIntrinsicExpression._children_keys;
16523 class KeysetIntrinsicExpression extends EditableSyntax
16532 super('keyset_intrinsic_expression', {
16534 explicit_type: explicit_type,
16535 left_bracket: left_bracket,
16537 right_bracket: right_bracket });
16539 get keyword() { return this.children.keyword; }
16540 get explicit_type() { return this.children.explicit_type; }
16541 get left_bracket() { return this.children.left_bracket; }
16542 get members() { return this.children.members; }
16543 get right_bracket() { return this.children.right_bracket; }
16544 with_keyword(keyword){
16545 return new KeysetIntrinsicExpression(
16547 this.explicit_type,
16550 this.right_bracket);
16552 with_explicit_type(explicit_type){
16553 return new KeysetIntrinsicExpression(
16558 this.right_bracket);
16560 with_left_bracket(left_bracket){
16561 return new KeysetIntrinsicExpression(
16563 this.explicit_type,
16566 this.right_bracket);
16568 with_members(members){
16569 return new KeysetIntrinsicExpression(
16571 this.explicit_type,
16574 this.right_bracket);
16576 with_right_bracket(right_bracket){
16577 return new KeysetIntrinsicExpression(
16579 this.explicit_type,
16584 rewrite(rewriter, parents)
16586 if (parents == undefined)
16588 let new_parents = parents.slice();
16589 new_parents.push(this);
16590 var keyword = this.keyword.rewrite(rewriter, new_parents);
16591 var explicit_type = this.explicit_type.rewrite(rewriter, new_parents);
16592 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
16593 var members = this.members.rewrite(rewriter, new_parents);
16594 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
16596 keyword === this.keyword &&
16597 explicit_type === this.explicit_type &&
16598 left_bracket === this.left_bracket &&
16599 members === this.members &&
16600 right_bracket === this.right_bracket)
16602 return rewriter(this, parents);
16606 return rewriter(new KeysetIntrinsicExpression(
16611 right_bracket), parents);
16614 static from_json(json, position, source)
16616 let keyword = EditableSyntax.from_json(
16617 json.keyset_intrinsic_keyword, position, source);
16618 position += keyword.width;
16619 let explicit_type = EditableSyntax.from_json(
16620 json.keyset_intrinsic_explicit_type, position, source);
16621 position += explicit_type.width;
16622 let left_bracket = EditableSyntax.from_json(
16623 json.keyset_intrinsic_left_bracket, position, source);
16624 position += left_bracket.width;
16625 let members = EditableSyntax.from_json(
16626 json.keyset_intrinsic_members, position, source);
16627 position += members.width;
16628 let right_bracket = EditableSyntax.from_json(
16629 json.keyset_intrinsic_right_bracket, position, source);
16630 position += right_bracket.width;
16631 return new KeysetIntrinsicExpression(
16638 get children_keys()
16640 if (KeysetIntrinsicExpression._children_keys == null)
16641 KeysetIntrinsicExpression._children_keys = [
16647 return KeysetIntrinsicExpression._children_keys;
16650 class VarrayIntrinsicExpression extends EditableSyntax
16659 super('varray_intrinsic_expression', {
16661 explicit_type: explicit_type,
16662 left_bracket: left_bracket,
16664 right_bracket: right_bracket });
16666 get keyword() { return this.children.keyword; }
16667 get explicit_type() { return this.children.explicit_type; }
16668 get left_bracket() { return this.children.left_bracket; }
16669 get members() { return this.children.members; }
16670 get right_bracket() { return this.children.right_bracket; }
16671 with_keyword(keyword){
16672 return new VarrayIntrinsicExpression(
16674 this.explicit_type,
16677 this.right_bracket);
16679 with_explicit_type(explicit_type){
16680 return new VarrayIntrinsicExpression(
16685 this.right_bracket);
16687 with_left_bracket(left_bracket){
16688 return new VarrayIntrinsicExpression(
16690 this.explicit_type,
16693 this.right_bracket);
16695 with_members(members){
16696 return new VarrayIntrinsicExpression(
16698 this.explicit_type,
16701 this.right_bracket);
16703 with_right_bracket(right_bracket){
16704 return new VarrayIntrinsicExpression(
16706 this.explicit_type,
16711 rewrite(rewriter, parents)
16713 if (parents == undefined)
16715 let new_parents = parents.slice();
16716 new_parents.push(this);
16717 var keyword = this.keyword.rewrite(rewriter, new_parents);
16718 var explicit_type = this.explicit_type.rewrite(rewriter, new_parents);
16719 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
16720 var members = this.members.rewrite(rewriter, new_parents);
16721 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
16723 keyword === this.keyword &&
16724 explicit_type === this.explicit_type &&
16725 left_bracket === this.left_bracket &&
16726 members === this.members &&
16727 right_bracket === this.right_bracket)
16729 return rewriter(this, parents);
16733 return rewriter(new VarrayIntrinsicExpression(
16738 right_bracket), parents);
16741 static from_json(json, position, source)
16743 let keyword = EditableSyntax.from_json(
16744 json.varray_intrinsic_keyword, position, source);
16745 position += keyword.width;
16746 let explicit_type = EditableSyntax.from_json(
16747 json.varray_intrinsic_explicit_type, position, source);
16748 position += explicit_type.width;
16749 let left_bracket = EditableSyntax.from_json(
16750 json.varray_intrinsic_left_bracket, position, source);
16751 position += left_bracket.width;
16752 let members = EditableSyntax.from_json(
16753 json.varray_intrinsic_members, position, source);
16754 position += members.width;
16755 let right_bracket = EditableSyntax.from_json(
16756 json.varray_intrinsic_right_bracket, position, source);
16757 position += right_bracket.width;
16758 return new VarrayIntrinsicExpression(
16765 get children_keys()
16767 if (VarrayIntrinsicExpression._children_keys == null)
16768 VarrayIntrinsicExpression._children_keys = [
16774 return VarrayIntrinsicExpression._children_keys;
16777 class VectorIntrinsicExpression extends EditableSyntax
16786 super('vector_intrinsic_expression', {
16788 explicit_type: explicit_type,
16789 left_bracket: left_bracket,
16791 right_bracket: right_bracket });
16793 get keyword() { return this.children.keyword; }
16794 get explicit_type() { return this.children.explicit_type; }
16795 get left_bracket() { return this.children.left_bracket; }
16796 get members() { return this.children.members; }
16797 get right_bracket() { return this.children.right_bracket; }
16798 with_keyword(keyword){
16799 return new VectorIntrinsicExpression(
16801 this.explicit_type,
16804 this.right_bracket);
16806 with_explicit_type(explicit_type){
16807 return new VectorIntrinsicExpression(
16812 this.right_bracket);
16814 with_left_bracket(left_bracket){
16815 return new VectorIntrinsicExpression(
16817 this.explicit_type,
16820 this.right_bracket);
16822 with_members(members){
16823 return new VectorIntrinsicExpression(
16825 this.explicit_type,
16828 this.right_bracket);
16830 with_right_bracket(right_bracket){
16831 return new VectorIntrinsicExpression(
16833 this.explicit_type,
16838 rewrite(rewriter, parents)
16840 if (parents == undefined)
16842 let new_parents = parents.slice();
16843 new_parents.push(this);
16844 var keyword = this.keyword.rewrite(rewriter, new_parents);
16845 var explicit_type = this.explicit_type.rewrite(rewriter, new_parents);
16846 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
16847 var members = this.members.rewrite(rewriter, new_parents);
16848 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
16850 keyword === this.keyword &&
16851 explicit_type === this.explicit_type &&
16852 left_bracket === this.left_bracket &&
16853 members === this.members &&
16854 right_bracket === this.right_bracket)
16856 return rewriter(this, parents);
16860 return rewriter(new VectorIntrinsicExpression(
16865 right_bracket), parents);
16868 static from_json(json, position, source)
16870 let keyword = EditableSyntax.from_json(
16871 json.vector_intrinsic_keyword, position, source);
16872 position += keyword.width;
16873 let explicit_type = EditableSyntax.from_json(
16874 json.vector_intrinsic_explicit_type, position, source);
16875 position += explicit_type.width;
16876 let left_bracket = EditableSyntax.from_json(
16877 json.vector_intrinsic_left_bracket, position, source);
16878 position += left_bracket.width;
16879 let members = EditableSyntax.from_json(
16880 json.vector_intrinsic_members, position, source);
16881 position += members.width;
16882 let right_bracket = EditableSyntax.from_json(
16883 json.vector_intrinsic_right_bracket, position, source);
16884 position += right_bracket.width;
16885 return new VectorIntrinsicExpression(
16892 get children_keys()
16894 if (VectorIntrinsicExpression._children_keys == null)
16895 VectorIntrinsicExpression._children_keys = [
16901 return VectorIntrinsicExpression._children_keys;
16904 class ElementInitializer extends EditableSyntax
16911 super('element_initializer', {
16916 get key() { return this.children.key; }
16917 get arrow() { return this.children.arrow; }
16918 get value() { return this.children.value; }
16920 return new ElementInitializer(
16926 return new ElementInitializer(
16932 return new ElementInitializer(
16937 rewrite(rewriter, parents)
16939 if (parents == undefined)
16941 let new_parents = parents.slice();
16942 new_parents.push(this);
16943 var key = this.key.rewrite(rewriter, new_parents);
16944 var arrow = this.arrow.rewrite(rewriter, new_parents);
16945 var value = this.value.rewrite(rewriter, new_parents);
16947 key === this.key &&
16948 arrow === this.arrow &&
16949 value === this.value)
16951 return rewriter(this, parents);
16955 return rewriter(new ElementInitializer(
16961 static from_json(json, position, source)
16963 let key = EditableSyntax.from_json(
16964 json.element_key, position, source);
16965 position += key.width;
16966 let arrow = EditableSyntax.from_json(
16967 json.element_arrow, position, source);
16968 position += arrow.width;
16969 let value = EditableSyntax.from_json(
16970 json.element_value, position, source);
16971 position += value.width;
16972 return new ElementInitializer(
16977 get children_keys()
16979 if (ElementInitializer._children_keys == null)
16980 ElementInitializer._children_keys = [
16984 return ElementInitializer._children_keys;
16987 class SubscriptExpression extends EditableSyntax
16995 super('subscript_expression', {
16996 receiver: receiver,
16997 left_bracket: left_bracket,
16999 right_bracket: right_bracket });
17001 get receiver() { return this.children.receiver; }
17002 get left_bracket() { return this.children.left_bracket; }
17003 get index() { return this.children.index; }
17004 get right_bracket() { return this.children.right_bracket; }
17005 with_receiver(receiver){
17006 return new SubscriptExpression(
17010 this.right_bracket);
17012 with_left_bracket(left_bracket){
17013 return new SubscriptExpression(
17017 this.right_bracket);
17020 return new SubscriptExpression(
17024 this.right_bracket);
17026 with_right_bracket(right_bracket){
17027 return new SubscriptExpression(
17033 rewrite(rewriter, parents)
17035 if (parents == undefined)
17037 let new_parents = parents.slice();
17038 new_parents.push(this);
17039 var receiver = this.receiver.rewrite(rewriter, new_parents);
17040 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
17041 var index = this.index.rewrite(rewriter, new_parents);
17042 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
17044 receiver === this.receiver &&
17045 left_bracket === this.left_bracket &&
17046 index === this.index &&
17047 right_bracket === this.right_bracket)
17049 return rewriter(this, parents);
17053 return rewriter(new SubscriptExpression(
17057 right_bracket), parents);
17060 static from_json(json, position, source)
17062 let receiver = EditableSyntax.from_json(
17063 json.subscript_receiver, position, source);
17064 position += receiver.width;
17065 let left_bracket = EditableSyntax.from_json(
17066 json.subscript_left_bracket, position, source);
17067 position += left_bracket.width;
17068 let index = EditableSyntax.from_json(
17069 json.subscript_index, position, source);
17070 position += index.width;
17071 let right_bracket = EditableSyntax.from_json(
17072 json.subscript_right_bracket, position, source);
17073 position += right_bracket.width;
17074 return new SubscriptExpression(
17080 get children_keys()
17082 if (SubscriptExpression._children_keys == null)
17083 SubscriptExpression._children_keys = [
17088 return SubscriptExpression._children_keys;
17091 class EmbeddedSubscriptExpression extends EditableSyntax
17099 super('embedded_subscript_expression', {
17100 receiver: receiver,
17101 left_bracket: left_bracket,
17103 right_bracket: right_bracket });
17105 get receiver() { return this.children.receiver; }
17106 get left_bracket() { return this.children.left_bracket; }
17107 get index() { return this.children.index; }
17108 get right_bracket() { return this.children.right_bracket; }
17109 with_receiver(receiver){
17110 return new EmbeddedSubscriptExpression(
17114 this.right_bracket);
17116 with_left_bracket(left_bracket){
17117 return new EmbeddedSubscriptExpression(
17121 this.right_bracket);
17124 return new EmbeddedSubscriptExpression(
17128 this.right_bracket);
17130 with_right_bracket(right_bracket){
17131 return new EmbeddedSubscriptExpression(
17137 rewrite(rewriter, parents)
17139 if (parents == undefined)
17141 let new_parents = parents.slice();
17142 new_parents.push(this);
17143 var receiver = this.receiver.rewrite(rewriter, new_parents);
17144 var left_bracket = this.left_bracket.rewrite(rewriter, new_parents);
17145 var index = this.index.rewrite(rewriter, new_parents);
17146 var right_bracket = this.right_bracket.rewrite(rewriter, new_parents);
17148 receiver === this.receiver &&
17149 left_bracket === this.left_bracket &&
17150 index === this.index &&
17151 right_bracket === this.right_bracket)
17153 return rewriter(this, parents);
17157 return rewriter(new EmbeddedSubscriptExpression(
17161 right_bracket), parents);
17164 static from_json(json, position, source)
17166 let receiver = EditableSyntax.from_json(
17167 json.embedded_subscript_receiver, position, source);
17168 position += receiver.width;
17169 let left_bracket = EditableSyntax.from_json(
17170 json.embedded_subscript_left_bracket, position, source);
17171 position += left_bracket.width;
17172 let index = EditableSyntax.from_json(
17173 json.embedded_subscript_index, position, source);
17174 position += index.width;
17175 let right_bracket = EditableSyntax.from_json(
17176 json.embedded_subscript_right_bracket, position, source);
17177 position += right_bracket.width;
17178 return new EmbeddedSubscriptExpression(
17184 get children_keys()
17186 if (EmbeddedSubscriptExpression._children_keys == null)
17187 EmbeddedSubscriptExpression._children_keys = [
17192 return EmbeddedSubscriptExpression._children_keys;
17195 class AwaitableCreationExpression extends EditableSyntax
17201 compound_statement)
17203 super('awaitable_creation_expression', {
17204 attribute_spec: attribute_spec,
17206 coroutine: coroutine,
17207 compound_statement: compound_statement });
17209 get attribute_spec() { return this.children.attribute_spec; }
17210 get async() { return this.children.async; }
17211 get coroutine() { return this.children.coroutine; }
17212 get compound_statement() { return this.children.compound_statement; }
17213 with_attribute_spec(attribute_spec){
17214 return new AwaitableCreationExpression(
17218 this.compound_statement);
17221 return new AwaitableCreationExpression(
17222 this.attribute_spec,
17225 this.compound_statement);
17227 with_coroutine(coroutine){
17228 return new AwaitableCreationExpression(
17229 this.attribute_spec,
17232 this.compound_statement);
17234 with_compound_statement(compound_statement){
17235 return new AwaitableCreationExpression(
17236 this.attribute_spec,
17239 compound_statement);
17241 rewrite(rewriter, parents)
17243 if (parents == undefined)
17245 let new_parents = parents.slice();
17246 new_parents.push(this);
17247 var attribute_spec = this.attribute_spec.rewrite(rewriter, new_parents);
17248 var async = this.async.rewrite(rewriter, new_parents);
17249 var coroutine = this.coroutine.rewrite(rewriter, new_parents);
17250 var compound_statement = this.compound_statement.rewrite(rewriter, new_parents);
17252 attribute_spec === this.attribute_spec &&
17253 async === this.async &&
17254 coroutine === this.coroutine &&
17255 compound_statement === this.compound_statement)
17257 return rewriter(this, parents);
17261 return rewriter(new AwaitableCreationExpression(
17265 compound_statement), parents);
17268 static from_json(json, position, source)
17270 let attribute_spec = EditableSyntax.from_json(
17271 json.awaitable_attribute_spec, position, source);
17272 position += attribute_spec.width;
17273 let async = EditableSyntax.from_json(
17274 json.awaitable_async, position, source);
17275 position += async.width;
17276 let coroutine = EditableSyntax.from_json(
17277 json.awaitable_coroutine, position, source);
17278 position += coroutine.width;
17279 let compound_statement = EditableSyntax.from_json(
17280 json.awaitable_compound_statement, position, source);
17281 position += compound_statement.width;
17282 return new AwaitableCreationExpression(
17286 compound_statement);
17288 get children_keys()
17290 if (AwaitableCreationExpression._children_keys == null)
17291 AwaitableCreationExpression._children_keys = [
17295 'compound_statement'];
17296 return AwaitableCreationExpression._children_keys;
17299 class XHPChildrenDeclaration extends EditableSyntax
17306 super('xhp_children_declaration', {
17308 expression: expression,
17309 semicolon: semicolon });
17311 get keyword() { return this.children.keyword; }
17312 get expression() { return this.children.expression; }
17313 get semicolon() { return this.children.semicolon; }
17314 with_keyword(keyword){
17315 return new XHPChildrenDeclaration(
17320 with_expression(expression){
17321 return new XHPChildrenDeclaration(
17326 with_semicolon(semicolon){
17327 return new XHPChildrenDeclaration(
17332 rewrite(rewriter, parents)
17334 if (parents == undefined)
17336 let new_parents = parents.slice();
17337 new_parents.push(this);
17338 var keyword = this.keyword.rewrite(rewriter, new_parents);
17339 var expression = this.expression.rewrite(rewriter, new_parents);
17340 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
17342 keyword === this.keyword &&
17343 expression === this.expression &&
17344 semicolon === this.semicolon)
17346 return rewriter(this, parents);
17350 return rewriter(new XHPChildrenDeclaration(
17353 semicolon), parents);
17356 static from_json(json, position, source)
17358 let keyword = EditableSyntax.from_json(
17359 json.xhp_children_keyword, position, source);
17360 position += keyword.width;
17361 let expression = EditableSyntax.from_json(
17362 json.xhp_children_expression, position, source);
17363 position += expression.width;
17364 let semicolon = EditableSyntax.from_json(
17365 json.xhp_children_semicolon, position, source);
17366 position += semicolon.width;
17367 return new XHPChildrenDeclaration(
17372 get children_keys()
17374 if (XHPChildrenDeclaration._children_keys == null)
17375 XHPChildrenDeclaration._children_keys = [
17379 return XHPChildrenDeclaration._children_keys;
17382 class XHPChildrenParenthesizedList extends EditableSyntax
17389 super('xhp_children_parenthesized_list', {
17390 left_paren: left_paren,
17391 xhp_children: xhp_children,
17392 right_paren: right_paren });
17394 get left_paren() { return this.children.left_paren; }
17395 get xhp_children() { return this.children.xhp_children; }
17396 get right_paren() { return this.children.right_paren; }
17397 with_left_paren(left_paren){
17398 return new XHPChildrenParenthesizedList(
17403 with_xhp_children(xhp_children){
17404 return new XHPChildrenParenthesizedList(
17409 with_right_paren(right_paren){
17410 return new XHPChildrenParenthesizedList(
17415 rewrite(rewriter, parents)
17417 if (parents == undefined)
17419 let new_parents = parents.slice();
17420 new_parents.push(this);
17421 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
17422 var xhp_children = this.xhp_children.rewrite(rewriter, new_parents);
17423 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
17425 left_paren === this.left_paren &&
17426 xhp_children === this.xhp_children &&
17427 right_paren === this.right_paren)
17429 return rewriter(this, parents);
17433 return rewriter(new XHPChildrenParenthesizedList(
17436 right_paren), parents);
17439 static from_json(json, position, source)
17441 let left_paren = EditableSyntax.from_json(
17442 json.xhp_children_list_left_paren, position, source);
17443 position += left_paren.width;
17444 let xhp_children = EditableSyntax.from_json(
17445 json.xhp_children_list_xhp_children, position, source);
17446 position += xhp_children.width;
17447 let right_paren = EditableSyntax.from_json(
17448 json.xhp_children_list_right_paren, position, source);
17449 position += right_paren.width;
17450 return new XHPChildrenParenthesizedList(
17455 get children_keys()
17457 if (XHPChildrenParenthesizedList._children_keys == null)
17458 XHPChildrenParenthesizedList._children_keys = [
17462 return XHPChildrenParenthesizedList._children_keys;
17465 class XHPCategoryDeclaration extends EditableSyntax
17472 super('xhp_category_declaration', {
17474 categories: categories,
17475 semicolon: semicolon });
17477 get keyword() { return this.children.keyword; }
17478 get categories() { return this.children.categories; }
17479 get semicolon() { return this.children.semicolon; }
17480 with_keyword(keyword){
17481 return new XHPCategoryDeclaration(
17486 with_categories(categories){
17487 return new XHPCategoryDeclaration(
17492 with_semicolon(semicolon){
17493 return new XHPCategoryDeclaration(
17498 rewrite(rewriter, parents)
17500 if (parents == undefined)
17502 let new_parents = parents.slice();
17503 new_parents.push(this);
17504 var keyword = this.keyword.rewrite(rewriter, new_parents);
17505 var categories = this.categories.rewrite(rewriter, new_parents);
17506 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
17508 keyword === this.keyword &&
17509 categories === this.categories &&
17510 semicolon === this.semicolon)
17512 return rewriter(this, parents);
17516 return rewriter(new XHPCategoryDeclaration(
17519 semicolon), parents);
17522 static from_json(json, position, source)
17524 let keyword = EditableSyntax.from_json(
17525 json.xhp_category_keyword, position, source);
17526 position += keyword.width;
17527 let categories = EditableSyntax.from_json(
17528 json.xhp_category_categories, position, source);
17529 position += categories.width;
17530 let semicolon = EditableSyntax.from_json(
17531 json.xhp_category_semicolon, position, source);
17532 position += semicolon.width;
17533 return new XHPCategoryDeclaration(
17538 get children_keys()
17540 if (XHPCategoryDeclaration._children_keys == null)
17541 XHPCategoryDeclaration._children_keys = [
17545 return XHPCategoryDeclaration._children_keys;
17548 class XHPEnumType extends EditableSyntax
17557 super('xhp_enum_type', {
17558 optional: optional,
17560 left_brace: left_brace,
17562 right_brace: right_brace });
17564 get optional() { return this.children.optional; }
17565 get keyword() { return this.children.keyword; }
17566 get left_brace() { return this.children.left_brace; }
17567 get values() { return this.children.values; }
17568 get right_brace() { return this.children.right_brace; }
17569 with_optional(optional){
17570 return new XHPEnumType(
17577 with_keyword(keyword){
17578 return new XHPEnumType(
17585 with_left_brace(left_brace){
17586 return new XHPEnumType(
17593 with_values(values){
17594 return new XHPEnumType(
17601 with_right_brace(right_brace){
17602 return new XHPEnumType(
17609 rewrite(rewriter, parents)
17611 if (parents == undefined)
17613 let new_parents = parents.slice();
17614 new_parents.push(this);
17615 var optional = this.optional.rewrite(rewriter, new_parents);
17616 var keyword = this.keyword.rewrite(rewriter, new_parents);
17617 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
17618 var values = this.values.rewrite(rewriter, new_parents);
17619 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
17621 optional === this.optional &&
17622 keyword === this.keyword &&
17623 left_brace === this.left_brace &&
17624 values === this.values &&
17625 right_brace === this.right_brace)
17627 return rewriter(this, parents);
17631 return rewriter(new XHPEnumType(
17636 right_brace), parents);
17639 static from_json(json, position, source)
17641 let optional = EditableSyntax.from_json(
17642 json.xhp_enum_optional, position, source);
17643 position += optional.width;
17644 let keyword = EditableSyntax.from_json(
17645 json.xhp_enum_keyword, position, source);
17646 position += keyword.width;
17647 let left_brace = EditableSyntax.from_json(
17648 json.xhp_enum_left_brace, position, source);
17649 position += left_brace.width;
17650 let values = EditableSyntax.from_json(
17651 json.xhp_enum_values, position, source);
17652 position += values.width;
17653 let right_brace = EditableSyntax.from_json(
17654 json.xhp_enum_right_brace, position, source);
17655 position += right_brace.width;
17656 return new XHPEnumType(
17663 get children_keys()
17665 if (XHPEnumType._children_keys == null)
17666 XHPEnumType._children_keys = [
17672 return XHPEnumType._children_keys;
17675 class XHPRequired extends EditableSyntax
17681 super('xhp_required', {
17683 keyword: keyword });
17685 get at() { return this.children.at; }
17686 get keyword() { return this.children.keyword; }
17688 return new XHPRequired(
17692 with_keyword(keyword){
17693 return new XHPRequired(
17697 rewrite(rewriter, parents)
17699 if (parents == undefined)
17701 let new_parents = parents.slice();
17702 new_parents.push(this);
17703 var at = this.at.rewrite(rewriter, new_parents);
17704 var keyword = this.keyword.rewrite(rewriter, new_parents);
17707 keyword === this.keyword)
17709 return rewriter(this, parents);
17713 return rewriter(new XHPRequired(
17715 keyword), parents);
17718 static from_json(json, position, source)
17720 let at = EditableSyntax.from_json(
17721 json.xhp_required_at, position, source);
17722 position += at.width;
17723 let keyword = EditableSyntax.from_json(
17724 json.xhp_required_keyword, position, source);
17725 position += keyword.width;
17726 return new XHPRequired(
17730 get children_keys()
17732 if (XHPRequired._children_keys == null)
17733 XHPRequired._children_keys = [
17736 return XHPRequired._children_keys;
17739 class XHPClassAttributeDeclaration extends EditableSyntax
17746 super('xhp_class_attribute_declaration', {
17748 attributes: attributes,
17749 semicolon: semicolon });
17751 get keyword() { return this.children.keyword; }
17752 get attributes() { return this.children.attributes; }
17753 get semicolon() { return this.children.semicolon; }
17754 with_keyword(keyword){
17755 return new XHPClassAttributeDeclaration(
17760 with_attributes(attributes){
17761 return new XHPClassAttributeDeclaration(
17766 with_semicolon(semicolon){
17767 return new XHPClassAttributeDeclaration(
17772 rewrite(rewriter, parents)
17774 if (parents == undefined)
17776 let new_parents = parents.slice();
17777 new_parents.push(this);
17778 var keyword = this.keyword.rewrite(rewriter, new_parents);
17779 var attributes = this.attributes.rewrite(rewriter, new_parents);
17780 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
17782 keyword === this.keyword &&
17783 attributes === this.attributes &&
17784 semicolon === this.semicolon)
17786 return rewriter(this, parents);
17790 return rewriter(new XHPClassAttributeDeclaration(
17793 semicolon), parents);
17796 static from_json(json, position, source)
17798 let keyword = EditableSyntax.from_json(
17799 json.xhp_attribute_keyword, position, source);
17800 position += keyword.width;
17801 let attributes = EditableSyntax.from_json(
17802 json.xhp_attribute_attributes, position, source);
17803 position += attributes.width;
17804 let semicolon = EditableSyntax.from_json(
17805 json.xhp_attribute_semicolon, position, source);
17806 position += semicolon.width;
17807 return new XHPClassAttributeDeclaration(
17812 get children_keys()
17814 if (XHPClassAttributeDeclaration._children_keys == null)
17815 XHPClassAttributeDeclaration._children_keys = [
17819 return XHPClassAttributeDeclaration._children_keys;
17822 class XHPClassAttribute extends EditableSyntax
17830 super('xhp_class_attribute', {
17833 initializer: initializer,
17834 required: required });
17836 get type() { return this.children.type; }
17837 get name() { return this.children.name; }
17838 get initializer() { return this.children.initializer; }
17839 get required() { return this.children.required; }
17841 return new XHPClassAttribute(
17848 return new XHPClassAttribute(
17854 with_initializer(initializer){
17855 return new XHPClassAttribute(
17861 with_required(required){
17862 return new XHPClassAttribute(
17868 rewrite(rewriter, parents)
17870 if (parents == undefined)
17872 let new_parents = parents.slice();
17873 new_parents.push(this);
17874 var type = this.type.rewrite(rewriter, new_parents);
17875 var name = this.name.rewrite(rewriter, new_parents);
17876 var initializer = this.initializer.rewrite(rewriter, new_parents);
17877 var required = this.required.rewrite(rewriter, new_parents);
17879 type === this.type &&
17880 name === this.name &&
17881 initializer === this.initializer &&
17882 required === this.required)
17884 return rewriter(this, parents);
17888 return rewriter(new XHPClassAttribute(
17892 required), parents);
17895 static from_json(json, position, source)
17897 let type = EditableSyntax.from_json(
17898 json.xhp_attribute_decl_type, position, source);
17899 position += type.width;
17900 let name = EditableSyntax.from_json(
17901 json.xhp_attribute_decl_name, position, source);
17902 position += name.width;
17903 let initializer = EditableSyntax.from_json(
17904 json.xhp_attribute_decl_initializer, position, source);
17905 position += initializer.width;
17906 let required = EditableSyntax.from_json(
17907 json.xhp_attribute_decl_required, position, source);
17908 position += required.width;
17909 return new XHPClassAttribute(
17915 get children_keys()
17917 if (XHPClassAttribute._children_keys == null)
17918 XHPClassAttribute._children_keys = [
17923 return XHPClassAttribute._children_keys;
17926 class XHPSimpleClassAttribute extends EditableSyntax
17931 super('xhp_simple_class_attribute', {
17934 get type() { return this.children.type; }
17936 return new XHPSimpleClassAttribute(
17939 rewrite(rewriter, parents)
17941 if (parents == undefined)
17943 let new_parents = parents.slice();
17944 new_parents.push(this);
17945 var type = this.type.rewrite(rewriter, new_parents);
17947 type === this.type)
17949 return rewriter(this, parents);
17953 return rewriter(new XHPSimpleClassAttribute(
17957 static from_json(json, position, source)
17959 let type = EditableSyntax.from_json(
17960 json.xhp_simple_class_attribute_type, position, source);
17961 position += type.width;
17962 return new XHPSimpleClassAttribute(
17965 get children_keys()
17967 if (XHPSimpleClassAttribute._children_keys == null)
17968 XHPSimpleClassAttribute._children_keys = [
17970 return XHPSimpleClassAttribute._children_keys;
17973 class XHPSimpleAttribute extends EditableSyntax
17980 super('xhp_simple_attribute', {
17983 expression: expression });
17985 get name() { return this.children.name; }
17986 get equal() { return this.children.equal; }
17987 get expression() { return this.children.expression; }
17989 return new XHPSimpleAttribute(
17995 return new XHPSimpleAttribute(
18000 with_expression(expression){
18001 return new XHPSimpleAttribute(
18006 rewrite(rewriter, parents)
18008 if (parents == undefined)
18010 let new_parents = parents.slice();
18011 new_parents.push(this);
18012 var name = this.name.rewrite(rewriter, new_parents);
18013 var equal = this.equal.rewrite(rewriter, new_parents);
18014 var expression = this.expression.rewrite(rewriter, new_parents);
18016 name === this.name &&
18017 equal === this.equal &&
18018 expression === this.expression)
18020 return rewriter(this, parents);
18024 return rewriter(new XHPSimpleAttribute(
18027 expression), parents);
18030 static from_json(json, position, source)
18032 let name = EditableSyntax.from_json(
18033 json.xhp_simple_attribute_name, position, source);
18034 position += name.width;
18035 let equal = EditableSyntax.from_json(
18036 json.xhp_simple_attribute_equal, position, source);
18037 position += equal.width;
18038 let expression = EditableSyntax.from_json(
18039 json.xhp_simple_attribute_expression, position, source);
18040 position += expression.width;
18041 return new XHPSimpleAttribute(
18046 get children_keys()
18048 if (XHPSimpleAttribute._children_keys == null)
18049 XHPSimpleAttribute._children_keys = [
18053 return XHPSimpleAttribute._children_keys;
18056 class XHPSpreadAttribute extends EditableSyntax
18064 super('xhp_spread_attribute', {
18065 left_brace: left_brace,
18066 spread_operator: spread_operator,
18067 expression: expression,
18068 right_brace: right_brace });
18070 get left_brace() { return this.children.left_brace; }
18071 get spread_operator() { return this.children.spread_operator; }
18072 get expression() { return this.children.expression; }
18073 get right_brace() { return this.children.right_brace; }
18074 with_left_brace(left_brace){
18075 return new XHPSpreadAttribute(
18077 this.spread_operator,
18081 with_spread_operator(spread_operator){
18082 return new XHPSpreadAttribute(
18088 with_expression(expression){
18089 return new XHPSpreadAttribute(
18091 this.spread_operator,
18095 with_right_brace(right_brace){
18096 return new XHPSpreadAttribute(
18098 this.spread_operator,
18102 rewrite(rewriter, parents)
18104 if (parents == undefined)
18106 let new_parents = parents.slice();
18107 new_parents.push(this);
18108 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
18109 var spread_operator = this.spread_operator.rewrite(rewriter, new_parents);
18110 var expression = this.expression.rewrite(rewriter, new_parents);
18111 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
18113 left_brace === this.left_brace &&
18114 spread_operator === this.spread_operator &&
18115 expression === this.expression &&
18116 right_brace === this.right_brace)
18118 return rewriter(this, parents);
18122 return rewriter(new XHPSpreadAttribute(
18126 right_brace), parents);
18129 static from_json(json, position, source)
18131 let left_brace = EditableSyntax.from_json(
18132 json.xhp_spread_attribute_left_brace, position, source);
18133 position += left_brace.width;
18134 let spread_operator = EditableSyntax.from_json(
18135 json.xhp_spread_attribute_spread_operator, position, source);
18136 position += spread_operator.width;
18137 let expression = EditableSyntax.from_json(
18138 json.xhp_spread_attribute_expression, position, source);
18139 position += expression.width;
18140 let right_brace = EditableSyntax.from_json(
18141 json.xhp_spread_attribute_right_brace, position, source);
18142 position += right_brace.width;
18143 return new XHPSpreadAttribute(
18149 get children_keys()
18151 if (XHPSpreadAttribute._children_keys == null)
18152 XHPSpreadAttribute._children_keys = [
18157 return XHPSpreadAttribute._children_keys;
18160 class XHPOpen extends EditableSyntax
18168 super('xhp_open', {
18169 left_angle: left_angle,
18171 attributes: attributes,
18172 right_angle: right_angle });
18174 get left_angle() { return this.children.left_angle; }
18175 get name() { return this.children.name; }
18176 get attributes() { return this.children.attributes; }
18177 get right_angle() { return this.children.right_angle; }
18178 with_left_angle(left_angle){
18179 return new XHPOpen(
18186 return new XHPOpen(
18192 with_attributes(attributes){
18193 return new XHPOpen(
18199 with_right_angle(right_angle){
18200 return new XHPOpen(
18206 rewrite(rewriter, parents)
18208 if (parents == undefined)
18210 let new_parents = parents.slice();
18211 new_parents.push(this);
18212 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
18213 var name = this.name.rewrite(rewriter, new_parents);
18214 var attributes = this.attributes.rewrite(rewriter, new_parents);
18215 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
18217 left_angle === this.left_angle &&
18218 name === this.name &&
18219 attributes === this.attributes &&
18220 right_angle === this.right_angle)
18222 return rewriter(this, parents);
18226 return rewriter(new XHPOpen(
18230 right_angle), parents);
18233 static from_json(json, position, source)
18235 let left_angle = EditableSyntax.from_json(
18236 json.xhp_open_left_angle, position, source);
18237 position += left_angle.width;
18238 let name = EditableSyntax.from_json(
18239 json.xhp_open_name, position, source);
18240 position += name.width;
18241 let attributes = EditableSyntax.from_json(
18242 json.xhp_open_attributes, position, source);
18243 position += attributes.width;
18244 let right_angle = EditableSyntax.from_json(
18245 json.xhp_open_right_angle, position, source);
18246 position += right_angle.width;
18247 return new XHPOpen(
18253 get children_keys()
18255 if (XHPOpen._children_keys == null)
18256 XHPOpen._children_keys = [
18261 return XHPOpen._children_keys;
18264 class XHPExpression extends EditableSyntax
18271 super('xhp_expression', {
18276 get open() { return this.children.open; }
18277 get body() { return this.children.body; }
18278 get close() { return this.children.close; }
18280 return new XHPExpression(
18286 return new XHPExpression(
18292 return new XHPExpression(
18297 rewrite(rewriter, parents)
18299 if (parents == undefined)
18301 let new_parents = parents.slice();
18302 new_parents.push(this);
18303 var open = this.open.rewrite(rewriter, new_parents);
18304 var body = this.body.rewrite(rewriter, new_parents);
18305 var close = this.close.rewrite(rewriter, new_parents);
18307 open === this.open &&
18308 body === this.body &&
18309 close === this.close)
18311 return rewriter(this, parents);
18315 return rewriter(new XHPExpression(
18321 static from_json(json, position, source)
18323 let open = EditableSyntax.from_json(
18324 json.xhp_open, position, source);
18325 position += open.width;
18326 let body = EditableSyntax.from_json(
18327 json.xhp_body, position, source);
18328 position += body.width;
18329 let close = EditableSyntax.from_json(
18330 json.xhp_close, position, source);
18331 position += close.width;
18332 return new XHPExpression(
18337 get children_keys()
18339 if (XHPExpression._children_keys == null)
18340 XHPExpression._children_keys = [
18344 return XHPExpression._children_keys;
18347 class XHPClose extends EditableSyntax
18354 super('xhp_close', {
18355 left_angle: left_angle,
18357 right_angle: right_angle });
18359 get left_angle() { return this.children.left_angle; }
18360 get name() { return this.children.name; }
18361 get right_angle() { return this.children.right_angle; }
18362 with_left_angle(left_angle){
18363 return new XHPClose(
18369 return new XHPClose(
18374 with_right_angle(right_angle){
18375 return new XHPClose(
18380 rewrite(rewriter, parents)
18382 if (parents == undefined)
18384 let new_parents = parents.slice();
18385 new_parents.push(this);
18386 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
18387 var name = this.name.rewrite(rewriter, new_parents);
18388 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
18390 left_angle === this.left_angle &&
18391 name === this.name &&
18392 right_angle === this.right_angle)
18394 return rewriter(this, parents);
18398 return rewriter(new XHPClose(
18401 right_angle), parents);
18404 static from_json(json, position, source)
18406 let left_angle = EditableSyntax.from_json(
18407 json.xhp_close_left_angle, position, source);
18408 position += left_angle.width;
18409 let name = EditableSyntax.from_json(
18410 json.xhp_close_name, position, source);
18411 position += name.width;
18412 let right_angle = EditableSyntax.from_json(
18413 json.xhp_close_right_angle, position, source);
18414 position += right_angle.width;
18415 return new XHPClose(
18420 get children_keys()
18422 if (XHPClose._children_keys == null)
18423 XHPClose._children_keys = [
18427 return XHPClose._children_keys;
18430 class TypeConstant extends EditableSyntax
18437 super('type_constant', {
18438 left_type: left_type,
18439 separator: separator,
18440 right_type: right_type });
18442 get left_type() { return this.children.left_type; }
18443 get separator() { return this.children.separator; }
18444 get right_type() { return this.children.right_type; }
18445 with_left_type(left_type){
18446 return new TypeConstant(
18451 with_separator(separator){
18452 return new TypeConstant(
18457 with_right_type(right_type){
18458 return new TypeConstant(
18463 rewrite(rewriter, parents)
18465 if (parents == undefined)
18467 let new_parents = parents.slice();
18468 new_parents.push(this);
18469 var left_type = this.left_type.rewrite(rewriter, new_parents);
18470 var separator = this.separator.rewrite(rewriter, new_parents);
18471 var right_type = this.right_type.rewrite(rewriter, new_parents);
18473 left_type === this.left_type &&
18474 separator === this.separator &&
18475 right_type === this.right_type)
18477 return rewriter(this, parents);
18481 return rewriter(new TypeConstant(
18484 right_type), parents);
18487 static from_json(json, position, source)
18489 let left_type = EditableSyntax.from_json(
18490 json.type_constant_left_type, position, source);
18491 position += left_type.width;
18492 let separator = EditableSyntax.from_json(
18493 json.type_constant_separator, position, source);
18494 position += separator.width;
18495 let right_type = EditableSyntax.from_json(
18496 json.type_constant_right_type, position, source);
18497 position += right_type.width;
18498 return new TypeConstant(
18503 get children_keys()
18505 if (TypeConstant._children_keys == null)
18506 TypeConstant._children_keys = [
18510 return TypeConstant._children_keys;
18513 class VectorTypeSpecifier extends EditableSyntax
18522 super('vector_type_specifier', {
18524 left_angle: left_angle,
18526 trailing_comma: trailing_comma,
18527 right_angle: right_angle });
18529 get keyword() { return this.children.keyword; }
18530 get left_angle() { return this.children.left_angle; }
18531 get type() { return this.children.type; }
18532 get trailing_comma() { return this.children.trailing_comma; }
18533 get right_angle() { return this.children.right_angle; }
18534 with_keyword(keyword){
18535 return new VectorTypeSpecifier(
18539 this.trailing_comma,
18542 with_left_angle(left_angle){
18543 return new VectorTypeSpecifier(
18547 this.trailing_comma,
18551 return new VectorTypeSpecifier(
18555 this.trailing_comma,
18558 with_trailing_comma(trailing_comma){
18559 return new VectorTypeSpecifier(
18566 with_right_angle(right_angle){
18567 return new VectorTypeSpecifier(
18571 this.trailing_comma,
18574 rewrite(rewriter, parents)
18576 if (parents == undefined)
18578 let new_parents = parents.slice();
18579 new_parents.push(this);
18580 var keyword = this.keyword.rewrite(rewriter, new_parents);
18581 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
18582 var type = this.type.rewrite(rewriter, new_parents);
18583 var trailing_comma = this.trailing_comma.rewrite(rewriter, new_parents);
18584 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
18586 keyword === this.keyword &&
18587 left_angle === this.left_angle &&
18588 type === this.type &&
18589 trailing_comma === this.trailing_comma &&
18590 right_angle === this.right_angle)
18592 return rewriter(this, parents);
18596 return rewriter(new VectorTypeSpecifier(
18601 right_angle), parents);
18604 static from_json(json, position, source)
18606 let keyword = EditableSyntax.from_json(
18607 json.vector_type_keyword, position, source);
18608 position += keyword.width;
18609 let left_angle = EditableSyntax.from_json(
18610 json.vector_type_left_angle, position, source);
18611 position += left_angle.width;
18612 let type = EditableSyntax.from_json(
18613 json.vector_type_type, position, source);
18614 position += type.width;
18615 let trailing_comma = EditableSyntax.from_json(
18616 json.vector_type_trailing_comma, position, source);
18617 position += trailing_comma.width;
18618 let right_angle = EditableSyntax.from_json(
18619 json.vector_type_right_angle, position, source);
18620 position += right_angle.width;
18621 return new VectorTypeSpecifier(
18628 get children_keys()
18630 if (VectorTypeSpecifier._children_keys == null)
18631 VectorTypeSpecifier._children_keys = [
18637 return VectorTypeSpecifier._children_keys;
18640 class KeysetTypeSpecifier extends EditableSyntax
18649 super('keyset_type_specifier', {
18651 left_angle: left_angle,
18653 trailing_comma: trailing_comma,
18654 right_angle: right_angle });
18656 get keyword() { return this.children.keyword; }
18657 get left_angle() { return this.children.left_angle; }
18658 get type() { return this.children.type; }
18659 get trailing_comma() { return this.children.trailing_comma; }
18660 get right_angle() { return this.children.right_angle; }
18661 with_keyword(keyword){
18662 return new KeysetTypeSpecifier(
18666 this.trailing_comma,
18669 with_left_angle(left_angle){
18670 return new KeysetTypeSpecifier(
18674 this.trailing_comma,
18678 return new KeysetTypeSpecifier(
18682 this.trailing_comma,
18685 with_trailing_comma(trailing_comma){
18686 return new KeysetTypeSpecifier(
18693 with_right_angle(right_angle){
18694 return new KeysetTypeSpecifier(
18698 this.trailing_comma,
18701 rewrite(rewriter, parents)
18703 if (parents == undefined)
18705 let new_parents = parents.slice();
18706 new_parents.push(this);
18707 var keyword = this.keyword.rewrite(rewriter, new_parents);
18708 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
18709 var type = this.type.rewrite(rewriter, new_parents);
18710 var trailing_comma = this.trailing_comma.rewrite(rewriter, new_parents);
18711 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
18713 keyword === this.keyword &&
18714 left_angle === this.left_angle &&
18715 type === this.type &&
18716 trailing_comma === this.trailing_comma &&
18717 right_angle === this.right_angle)
18719 return rewriter(this, parents);
18723 return rewriter(new KeysetTypeSpecifier(
18728 right_angle), parents);
18731 static from_json(json, position, source)
18733 let keyword = EditableSyntax.from_json(
18734 json.keyset_type_keyword, position, source);
18735 position += keyword.width;
18736 let left_angle = EditableSyntax.from_json(
18737 json.keyset_type_left_angle, position, source);
18738 position += left_angle.width;
18739 let type = EditableSyntax.from_json(
18740 json.keyset_type_type, position, source);
18741 position += type.width;
18742 let trailing_comma = EditableSyntax.from_json(
18743 json.keyset_type_trailing_comma, position, source);
18744 position += trailing_comma.width;
18745 let right_angle = EditableSyntax.from_json(
18746 json.keyset_type_right_angle, position, source);
18747 position += right_angle.width;
18748 return new KeysetTypeSpecifier(
18755 get children_keys()
18757 if (KeysetTypeSpecifier._children_keys == null)
18758 KeysetTypeSpecifier._children_keys = [
18764 return KeysetTypeSpecifier._children_keys;
18767 class TupleTypeExplicitSpecifier extends EditableSyntax
18775 super('tuple_type_explicit_specifier', {
18777 left_angle: left_angle,
18779 right_angle: right_angle });
18781 get keyword() { return this.children.keyword; }
18782 get left_angle() { return this.children.left_angle; }
18783 get types() { return this.children.types; }
18784 get right_angle() { return this.children.right_angle; }
18785 with_keyword(keyword){
18786 return new TupleTypeExplicitSpecifier(
18792 with_left_angle(left_angle){
18793 return new TupleTypeExplicitSpecifier(
18800 return new TupleTypeExplicitSpecifier(
18806 with_right_angle(right_angle){
18807 return new TupleTypeExplicitSpecifier(
18813 rewrite(rewriter, parents)
18815 if (parents == undefined)
18817 let new_parents = parents.slice();
18818 new_parents.push(this);
18819 var keyword = this.keyword.rewrite(rewriter, new_parents);
18820 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
18821 var types = this.types.rewrite(rewriter, new_parents);
18822 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
18824 keyword === this.keyword &&
18825 left_angle === this.left_angle &&
18826 types === this.types &&
18827 right_angle === this.right_angle)
18829 return rewriter(this, parents);
18833 return rewriter(new TupleTypeExplicitSpecifier(
18837 right_angle), parents);
18840 static from_json(json, position, source)
18842 let keyword = EditableSyntax.from_json(
18843 json.tuple_type_keyword, position, source);
18844 position += keyword.width;
18845 let left_angle = EditableSyntax.from_json(
18846 json.tuple_type_left_angle, position, source);
18847 position += left_angle.width;
18848 let types = EditableSyntax.from_json(
18849 json.tuple_type_types, position, source);
18850 position += types.width;
18851 let right_angle = EditableSyntax.from_json(
18852 json.tuple_type_right_angle, position, source);
18853 position += right_angle.width;
18854 return new TupleTypeExplicitSpecifier(
18860 get children_keys()
18862 if (TupleTypeExplicitSpecifier._children_keys == null)
18863 TupleTypeExplicitSpecifier._children_keys = [
18868 return TupleTypeExplicitSpecifier._children_keys;
18871 class VarrayTypeSpecifier extends EditableSyntax
18880 super('varray_type_specifier', {
18882 left_angle: left_angle,
18884 trailing_comma: trailing_comma,
18885 right_angle: right_angle });
18887 get keyword() { return this.children.keyword; }
18888 get left_angle() { return this.children.left_angle; }
18889 get type() { return this.children.type; }
18890 get trailing_comma() { return this.children.trailing_comma; }
18891 get right_angle() { return this.children.right_angle; }
18892 with_keyword(keyword){
18893 return new VarrayTypeSpecifier(
18897 this.trailing_comma,
18900 with_left_angle(left_angle){
18901 return new VarrayTypeSpecifier(
18905 this.trailing_comma,
18909 return new VarrayTypeSpecifier(
18913 this.trailing_comma,
18916 with_trailing_comma(trailing_comma){
18917 return new VarrayTypeSpecifier(
18924 with_right_angle(right_angle){
18925 return new VarrayTypeSpecifier(
18929 this.trailing_comma,
18932 rewrite(rewriter, parents)
18934 if (parents == undefined)
18936 let new_parents = parents.slice();
18937 new_parents.push(this);
18938 var keyword = this.keyword.rewrite(rewriter, new_parents);
18939 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
18940 var type = this.type.rewrite(rewriter, new_parents);
18941 var trailing_comma = this.trailing_comma.rewrite(rewriter, new_parents);
18942 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
18944 keyword === this.keyword &&
18945 left_angle === this.left_angle &&
18946 type === this.type &&
18947 trailing_comma === this.trailing_comma &&
18948 right_angle === this.right_angle)
18950 return rewriter(this, parents);
18954 return rewriter(new VarrayTypeSpecifier(
18959 right_angle), parents);
18962 static from_json(json, position, source)
18964 let keyword = EditableSyntax.from_json(
18965 json.varray_keyword, position, source);
18966 position += keyword.width;
18967 let left_angle = EditableSyntax.from_json(
18968 json.varray_left_angle, position, source);
18969 position += left_angle.width;
18970 let type = EditableSyntax.from_json(
18971 json.varray_type, position, source);
18972 position += type.width;
18973 let trailing_comma = EditableSyntax.from_json(
18974 json.varray_trailing_comma, position, source);
18975 position += trailing_comma.width;
18976 let right_angle = EditableSyntax.from_json(
18977 json.varray_right_angle, position, source);
18978 position += right_angle.width;
18979 return new VarrayTypeSpecifier(
18986 get children_keys()
18988 if (VarrayTypeSpecifier._children_keys == null)
18989 VarrayTypeSpecifier._children_keys = [
18995 return VarrayTypeSpecifier._children_keys;
18998 class VectorArrayTypeSpecifier extends EditableSyntax
19006 super('vector_array_type_specifier', {
19008 left_angle: left_angle,
19010 right_angle: right_angle });
19012 get keyword() { return this.children.keyword; }
19013 get left_angle() { return this.children.left_angle; }
19014 get type() { return this.children.type; }
19015 get right_angle() { return this.children.right_angle; }
19016 with_keyword(keyword){
19017 return new VectorArrayTypeSpecifier(
19023 with_left_angle(left_angle){
19024 return new VectorArrayTypeSpecifier(
19031 return new VectorArrayTypeSpecifier(
19037 with_right_angle(right_angle){
19038 return new VectorArrayTypeSpecifier(
19044 rewrite(rewriter, parents)
19046 if (parents == undefined)
19048 let new_parents = parents.slice();
19049 new_parents.push(this);
19050 var keyword = this.keyword.rewrite(rewriter, new_parents);
19051 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
19052 var type = this.type.rewrite(rewriter, new_parents);
19053 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
19055 keyword === this.keyword &&
19056 left_angle === this.left_angle &&
19057 type === this.type &&
19058 right_angle === this.right_angle)
19060 return rewriter(this, parents);
19064 return rewriter(new VectorArrayTypeSpecifier(
19068 right_angle), parents);
19071 static from_json(json, position, source)
19073 let keyword = EditableSyntax.from_json(
19074 json.vector_array_keyword, position, source);
19075 position += keyword.width;
19076 let left_angle = EditableSyntax.from_json(
19077 json.vector_array_left_angle, position, source);
19078 position += left_angle.width;
19079 let type = EditableSyntax.from_json(
19080 json.vector_array_type, position, source);
19081 position += type.width;
19082 let right_angle = EditableSyntax.from_json(
19083 json.vector_array_right_angle, position, source);
19084 position += right_angle.width;
19085 return new VectorArrayTypeSpecifier(
19091 get children_keys()
19093 if (VectorArrayTypeSpecifier._children_keys == null)
19094 VectorArrayTypeSpecifier._children_keys = [
19099 return VectorArrayTypeSpecifier._children_keys;
19102 class TypeParameter extends EditableSyntax
19111 super('type_parameter', {
19112 attribute_spec: attribute_spec,
19114 variance: variance,
19116 constraints: constraints });
19118 get attribute_spec() { return this.children.attribute_spec; }
19119 get reified() { return this.children.reified; }
19120 get variance() { return this.children.variance; }
19121 get name() { return this.children.name; }
19122 get constraints() { return this.children.constraints; }
19123 with_attribute_spec(attribute_spec){
19124 return new TypeParameter(
19131 with_reified(reified){
19132 return new TypeParameter(
19133 this.attribute_spec,
19139 with_variance(variance){
19140 return new TypeParameter(
19141 this.attribute_spec,
19148 return new TypeParameter(
19149 this.attribute_spec,
19155 with_constraints(constraints){
19156 return new TypeParameter(
19157 this.attribute_spec,
19163 rewrite(rewriter, parents)
19165 if (parents == undefined)
19167 let new_parents = parents.slice();
19168 new_parents.push(this);
19169 var attribute_spec = this.attribute_spec.rewrite(rewriter, new_parents);
19170 var reified = this.reified.rewrite(rewriter, new_parents);
19171 var variance = this.variance.rewrite(rewriter, new_parents);
19172 var name = this.name.rewrite(rewriter, new_parents);
19173 var constraints = this.constraints.rewrite(rewriter, new_parents);
19175 attribute_spec === this.attribute_spec &&
19176 reified === this.reified &&
19177 variance === this.variance &&
19178 name === this.name &&
19179 constraints === this.constraints)
19181 return rewriter(this, parents);
19185 return rewriter(new TypeParameter(
19190 constraints), parents);
19193 static from_json(json, position, source)
19195 let attribute_spec = EditableSyntax.from_json(
19196 json.type_attribute_spec, position, source);
19197 position += attribute_spec.width;
19198 let reified = EditableSyntax.from_json(
19199 json.type_reified, position, source);
19200 position += reified.width;
19201 let variance = EditableSyntax.from_json(
19202 json.type_variance, position, source);
19203 position += variance.width;
19204 let name = EditableSyntax.from_json(
19205 json.type_name, position, source);
19206 position += name.width;
19207 let constraints = EditableSyntax.from_json(
19208 json.type_constraints, position, source);
19209 position += constraints.width;
19210 return new TypeParameter(
19217 get children_keys()
19219 if (TypeParameter._children_keys == null)
19220 TypeParameter._children_keys = [
19226 return TypeParameter._children_keys;
19229 class TypeConstraint extends EditableSyntax
19235 super('type_constraint', {
19239 get keyword() { return this.children.keyword; }
19240 get type() { return this.children.type; }
19241 with_keyword(keyword){
19242 return new TypeConstraint(
19247 return new TypeConstraint(
19251 rewrite(rewriter, parents)
19253 if (parents == undefined)
19255 let new_parents = parents.slice();
19256 new_parents.push(this);
19257 var keyword = this.keyword.rewrite(rewriter, new_parents);
19258 var type = this.type.rewrite(rewriter, new_parents);
19260 keyword === this.keyword &&
19261 type === this.type)
19263 return rewriter(this, parents);
19267 return rewriter(new TypeConstraint(
19272 static from_json(json, position, source)
19274 let keyword = EditableSyntax.from_json(
19275 json.constraint_keyword, position, source);
19276 position += keyword.width;
19277 let type = EditableSyntax.from_json(
19278 json.constraint_type, position, source);
19279 position += type.width;
19280 return new TypeConstraint(
19284 get children_keys()
19286 if (TypeConstraint._children_keys == null)
19287 TypeConstraint._children_keys = [
19290 return TypeConstraint._children_keys;
19293 class DarrayTypeSpecifier extends EditableSyntax
19304 super('darray_type_specifier', {
19306 left_angle: left_angle,
19310 trailing_comma: trailing_comma,
19311 right_angle: right_angle });
19313 get keyword() { return this.children.keyword; }
19314 get left_angle() { return this.children.left_angle; }
19315 get key() { return this.children.key; }
19316 get comma() { return this.children.comma; }
19317 get value() { return this.children.value; }
19318 get trailing_comma() { return this.children.trailing_comma; }
19319 get right_angle() { return this.children.right_angle; }
19320 with_keyword(keyword){
19321 return new DarrayTypeSpecifier(
19327 this.trailing_comma,
19330 with_left_angle(left_angle){
19331 return new DarrayTypeSpecifier(
19337 this.trailing_comma,
19341 return new DarrayTypeSpecifier(
19347 this.trailing_comma,
19351 return new DarrayTypeSpecifier(
19357 this.trailing_comma,
19361 return new DarrayTypeSpecifier(
19367 this.trailing_comma,
19370 with_trailing_comma(trailing_comma){
19371 return new DarrayTypeSpecifier(
19380 with_right_angle(right_angle){
19381 return new DarrayTypeSpecifier(
19387 this.trailing_comma,
19390 rewrite(rewriter, parents)
19392 if (parents == undefined)
19394 let new_parents = parents.slice();
19395 new_parents.push(this);
19396 var keyword = this.keyword.rewrite(rewriter, new_parents);
19397 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
19398 var key = this.key.rewrite(rewriter, new_parents);
19399 var comma = this.comma.rewrite(rewriter, new_parents);
19400 var value = this.value.rewrite(rewriter, new_parents);
19401 var trailing_comma = this.trailing_comma.rewrite(rewriter, new_parents);
19402 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
19404 keyword === this.keyword &&
19405 left_angle === this.left_angle &&
19406 key === this.key &&
19407 comma === this.comma &&
19408 value === this.value &&
19409 trailing_comma === this.trailing_comma &&
19410 right_angle === this.right_angle)
19412 return rewriter(this, parents);
19416 return rewriter(new DarrayTypeSpecifier(
19423 right_angle), parents);
19426 static from_json(json, position, source)
19428 let keyword = EditableSyntax.from_json(
19429 json.darray_keyword, position, source);
19430 position += keyword.width;
19431 let left_angle = EditableSyntax.from_json(
19432 json.darray_left_angle, position, source);
19433 position += left_angle.width;
19434 let key = EditableSyntax.from_json(
19435 json.darray_key, position, source);
19436 position += key.width;
19437 let comma = EditableSyntax.from_json(
19438 json.darray_comma, position, source);
19439 position += comma.width;
19440 let value = EditableSyntax.from_json(
19441 json.darray_value, position, source);
19442 position += value.width;
19443 let trailing_comma = EditableSyntax.from_json(
19444 json.darray_trailing_comma, position, source);
19445 position += trailing_comma.width;
19446 let right_angle = EditableSyntax.from_json(
19447 json.darray_right_angle, position, source);
19448 position += right_angle.width;
19449 return new DarrayTypeSpecifier(
19458 get children_keys()
19460 if (DarrayTypeSpecifier._children_keys == null)
19461 DarrayTypeSpecifier._children_keys = [
19469 return DarrayTypeSpecifier._children_keys;
19472 class MapArrayTypeSpecifier extends EditableSyntax
19482 super('map_array_type_specifier', {
19484 left_angle: left_angle,
19488 right_angle: right_angle });
19490 get keyword() { return this.children.keyword; }
19491 get left_angle() { return this.children.left_angle; }
19492 get key() { return this.children.key; }
19493 get comma() { return this.children.comma; }
19494 get value() { return this.children.value; }
19495 get right_angle() { return this.children.right_angle; }
19496 with_keyword(keyword){
19497 return new MapArrayTypeSpecifier(
19505 with_left_angle(left_angle){
19506 return new MapArrayTypeSpecifier(
19515 return new MapArrayTypeSpecifier(
19524 return new MapArrayTypeSpecifier(
19533 return new MapArrayTypeSpecifier(
19541 with_right_angle(right_angle){
19542 return new MapArrayTypeSpecifier(
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_angle = this.left_angle.rewrite(rewriter, new_parents);
19558 var key = this.key.rewrite(rewriter, new_parents);
19559 var comma = this.comma.rewrite(rewriter, new_parents);
19560 var value = this.value.rewrite(rewriter, new_parents);
19561 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
19563 keyword === this.keyword &&
19564 left_angle === this.left_angle &&
19565 key === this.key &&
19566 comma === this.comma &&
19567 value === this.value &&
19568 right_angle === this.right_angle)
19570 return rewriter(this, parents);
19574 return rewriter(new MapArrayTypeSpecifier(
19580 right_angle), parents);
19583 static from_json(json, position, source)
19585 let keyword = EditableSyntax.from_json(
19586 json.map_array_keyword, position, source);
19587 position += keyword.width;
19588 let left_angle = EditableSyntax.from_json(
19589 json.map_array_left_angle, position, source);
19590 position += left_angle.width;
19591 let key = EditableSyntax.from_json(
19592 json.map_array_key, position, source);
19593 position += key.width;
19594 let comma = EditableSyntax.from_json(
19595 json.map_array_comma, position, source);
19596 position += comma.width;
19597 let value = EditableSyntax.from_json(
19598 json.map_array_value, position, source);
19599 position += value.width;
19600 let right_angle = EditableSyntax.from_json(
19601 json.map_array_right_angle, position, source);
19602 position += right_angle.width;
19603 return new MapArrayTypeSpecifier(
19611 get children_keys()
19613 if (MapArrayTypeSpecifier._children_keys == null)
19614 MapArrayTypeSpecifier._children_keys = [
19621 return MapArrayTypeSpecifier._children_keys;
19624 class DictionaryTypeSpecifier extends EditableSyntax
19632 super('dictionary_type_specifier', {
19634 left_angle: left_angle,
19636 right_angle: right_angle });
19638 get keyword() { return this.children.keyword; }
19639 get left_angle() { return this.children.left_angle; }
19640 get members() { return this.children.members; }
19641 get right_angle() { return this.children.right_angle; }
19642 with_keyword(keyword){
19643 return new DictionaryTypeSpecifier(
19649 with_left_angle(left_angle){
19650 return new DictionaryTypeSpecifier(
19656 with_members(members){
19657 return new DictionaryTypeSpecifier(
19663 with_right_angle(right_angle){
19664 return new DictionaryTypeSpecifier(
19670 rewrite(rewriter, parents)
19672 if (parents == undefined)
19674 let new_parents = parents.slice();
19675 new_parents.push(this);
19676 var keyword = this.keyword.rewrite(rewriter, new_parents);
19677 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
19678 var members = this.members.rewrite(rewriter, new_parents);
19679 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
19681 keyword === this.keyword &&
19682 left_angle === this.left_angle &&
19683 members === this.members &&
19684 right_angle === this.right_angle)
19686 return rewriter(this, parents);
19690 return rewriter(new DictionaryTypeSpecifier(
19694 right_angle), parents);
19697 static from_json(json, position, source)
19699 let keyword = EditableSyntax.from_json(
19700 json.dictionary_type_keyword, position, source);
19701 position += keyword.width;
19702 let left_angle = EditableSyntax.from_json(
19703 json.dictionary_type_left_angle, position, source);
19704 position += left_angle.width;
19705 let members = EditableSyntax.from_json(
19706 json.dictionary_type_members, position, source);
19707 position += members.width;
19708 let right_angle = EditableSyntax.from_json(
19709 json.dictionary_type_right_angle, position, source);
19710 position += right_angle.width;
19711 return new DictionaryTypeSpecifier(
19717 get children_keys()
19719 if (DictionaryTypeSpecifier._children_keys == null)
19720 DictionaryTypeSpecifier._children_keys = [
19725 return DictionaryTypeSpecifier._children_keys;
19728 class ClosureTypeSpecifier extends EditableSyntax
19741 super('closure_type_specifier', {
19742 outer_left_paren: outer_left_paren,
19743 coroutine: coroutine,
19744 function_keyword: function_keyword,
19745 inner_left_paren: inner_left_paren,
19746 parameter_list: parameter_list,
19747 inner_right_paren: inner_right_paren,
19749 return_type: return_type,
19750 outer_right_paren: outer_right_paren });
19752 get outer_left_paren() { return this.children.outer_left_paren; }
19753 get coroutine() { return this.children.coroutine; }
19754 get function_keyword() { return this.children.function_keyword; }
19755 get inner_left_paren() { return this.children.inner_left_paren; }
19756 get parameter_list() { return this.children.parameter_list; }
19757 get inner_right_paren() { return this.children.inner_right_paren; }
19758 get colon() { return this.children.colon; }
19759 get return_type() { return this.children.return_type; }
19760 get outer_right_paren() { return this.children.outer_right_paren; }
19761 with_outer_left_paren(outer_left_paren){
19762 return new ClosureTypeSpecifier(
19765 this.function_keyword,
19766 this.inner_left_paren,
19767 this.parameter_list,
19768 this.inner_right_paren,
19771 this.outer_right_paren);
19773 with_coroutine(coroutine){
19774 return new ClosureTypeSpecifier(
19775 this.outer_left_paren,
19777 this.function_keyword,
19778 this.inner_left_paren,
19779 this.parameter_list,
19780 this.inner_right_paren,
19783 this.outer_right_paren);
19785 with_function_keyword(function_keyword){
19786 return new ClosureTypeSpecifier(
19787 this.outer_left_paren,
19790 this.inner_left_paren,
19791 this.parameter_list,
19792 this.inner_right_paren,
19795 this.outer_right_paren);
19797 with_inner_left_paren(inner_left_paren){
19798 return new ClosureTypeSpecifier(
19799 this.outer_left_paren,
19801 this.function_keyword,
19803 this.parameter_list,
19804 this.inner_right_paren,
19807 this.outer_right_paren);
19809 with_parameter_list(parameter_list){
19810 return new ClosureTypeSpecifier(
19811 this.outer_left_paren,
19813 this.function_keyword,
19814 this.inner_left_paren,
19816 this.inner_right_paren,
19819 this.outer_right_paren);
19821 with_inner_right_paren(inner_right_paren){
19822 return new ClosureTypeSpecifier(
19823 this.outer_left_paren,
19825 this.function_keyword,
19826 this.inner_left_paren,
19827 this.parameter_list,
19831 this.outer_right_paren);
19834 return new ClosureTypeSpecifier(
19835 this.outer_left_paren,
19837 this.function_keyword,
19838 this.inner_left_paren,
19839 this.parameter_list,
19840 this.inner_right_paren,
19843 this.outer_right_paren);
19845 with_return_type(return_type){
19846 return new ClosureTypeSpecifier(
19847 this.outer_left_paren,
19849 this.function_keyword,
19850 this.inner_left_paren,
19851 this.parameter_list,
19852 this.inner_right_paren,
19855 this.outer_right_paren);
19857 with_outer_right_paren(outer_right_paren){
19858 return new ClosureTypeSpecifier(
19859 this.outer_left_paren,
19861 this.function_keyword,
19862 this.inner_left_paren,
19863 this.parameter_list,
19864 this.inner_right_paren,
19867 outer_right_paren);
19869 rewrite(rewriter, parents)
19871 if (parents == undefined)
19873 let new_parents = parents.slice();
19874 new_parents.push(this);
19875 var outer_left_paren = this.outer_left_paren.rewrite(rewriter, new_parents);
19876 var coroutine = this.coroutine.rewrite(rewriter, new_parents);
19877 var function_keyword = this.function_keyword.rewrite(rewriter, new_parents);
19878 var inner_left_paren = this.inner_left_paren.rewrite(rewriter, new_parents);
19879 var parameter_list = this.parameter_list.rewrite(rewriter, new_parents);
19880 var inner_right_paren = this.inner_right_paren.rewrite(rewriter, new_parents);
19881 var colon = this.colon.rewrite(rewriter, new_parents);
19882 var return_type = this.return_type.rewrite(rewriter, new_parents);
19883 var outer_right_paren = this.outer_right_paren.rewrite(rewriter, new_parents);
19885 outer_left_paren === this.outer_left_paren &&
19886 coroutine === this.coroutine &&
19887 function_keyword === this.function_keyword &&
19888 inner_left_paren === this.inner_left_paren &&
19889 parameter_list === this.parameter_list &&
19890 inner_right_paren === this.inner_right_paren &&
19891 colon === this.colon &&
19892 return_type === this.return_type &&
19893 outer_right_paren === this.outer_right_paren)
19895 return rewriter(this, parents);
19899 return rewriter(new ClosureTypeSpecifier(
19908 outer_right_paren), parents);
19911 static from_json(json, position, source)
19913 let outer_left_paren = EditableSyntax.from_json(
19914 json.closure_outer_left_paren, position, source);
19915 position += outer_left_paren.width;
19916 let coroutine = EditableSyntax.from_json(
19917 json.closure_coroutine, position, source);
19918 position += coroutine.width;
19919 let function_keyword = EditableSyntax.from_json(
19920 json.closure_function_keyword, position, source);
19921 position += function_keyword.width;
19922 let inner_left_paren = EditableSyntax.from_json(
19923 json.closure_inner_left_paren, position, source);
19924 position += inner_left_paren.width;
19925 let parameter_list = EditableSyntax.from_json(
19926 json.closure_parameter_list, position, source);
19927 position += parameter_list.width;
19928 let inner_right_paren = EditableSyntax.from_json(
19929 json.closure_inner_right_paren, position, source);
19930 position += inner_right_paren.width;
19931 let colon = EditableSyntax.from_json(
19932 json.closure_colon, position, source);
19933 position += colon.width;
19934 let return_type = EditableSyntax.from_json(
19935 json.closure_return_type, position, source);
19936 position += return_type.width;
19937 let outer_right_paren = EditableSyntax.from_json(
19938 json.closure_outer_right_paren, position, source);
19939 position += outer_right_paren.width;
19940 return new ClosureTypeSpecifier(
19949 outer_right_paren);
19951 get children_keys()
19953 if (ClosureTypeSpecifier._children_keys == null)
19954 ClosureTypeSpecifier._children_keys = [
19955 'outer_left_paren',
19957 'function_keyword',
19958 'inner_left_paren',
19960 'inner_right_paren',
19963 'outer_right_paren'];
19964 return ClosureTypeSpecifier._children_keys;
19967 class ClosureParameterTypeSpecifier extends EditableSyntax
19973 super('closure_parameter_type_specifier', {
19974 call_convention: call_convention,
19977 get call_convention() { return this.children.call_convention; }
19978 get type() { return this.children.type; }
19979 with_call_convention(call_convention){
19980 return new ClosureParameterTypeSpecifier(
19985 return new ClosureParameterTypeSpecifier(
19986 this.call_convention,
19989 rewrite(rewriter, parents)
19991 if (parents == undefined)
19993 let new_parents = parents.slice();
19994 new_parents.push(this);
19995 var call_convention = this.call_convention.rewrite(rewriter, new_parents);
19996 var type = this.type.rewrite(rewriter, new_parents);
19998 call_convention === this.call_convention &&
19999 type === this.type)
20001 return rewriter(this, parents);
20005 return rewriter(new ClosureParameterTypeSpecifier(
20010 static from_json(json, position, source)
20012 let call_convention = EditableSyntax.from_json(
20013 json.closure_parameter_call_convention, position, source);
20014 position += call_convention.width;
20015 let type = EditableSyntax.from_json(
20016 json.closure_parameter_type, position, source);
20017 position += type.width;
20018 return new ClosureParameterTypeSpecifier(
20022 get children_keys()
20024 if (ClosureParameterTypeSpecifier._children_keys == null)
20025 ClosureParameterTypeSpecifier._children_keys = [
20028 return ClosureParameterTypeSpecifier._children_keys;
20031 class ClassnameTypeSpecifier extends EditableSyntax
20040 super('classname_type_specifier', {
20042 left_angle: left_angle,
20044 trailing_comma: trailing_comma,
20045 right_angle: right_angle });
20047 get keyword() { return this.children.keyword; }
20048 get left_angle() { return this.children.left_angle; }
20049 get type() { return this.children.type; }
20050 get trailing_comma() { return this.children.trailing_comma; }
20051 get right_angle() { return this.children.right_angle; }
20052 with_keyword(keyword){
20053 return new ClassnameTypeSpecifier(
20057 this.trailing_comma,
20060 with_left_angle(left_angle){
20061 return new ClassnameTypeSpecifier(
20065 this.trailing_comma,
20069 return new ClassnameTypeSpecifier(
20073 this.trailing_comma,
20076 with_trailing_comma(trailing_comma){
20077 return new ClassnameTypeSpecifier(
20084 with_right_angle(right_angle){
20085 return new ClassnameTypeSpecifier(
20089 this.trailing_comma,
20092 rewrite(rewriter, parents)
20094 if (parents == undefined)
20096 let new_parents = parents.slice();
20097 new_parents.push(this);
20098 var keyword = this.keyword.rewrite(rewriter, new_parents);
20099 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
20100 var type = this.type.rewrite(rewriter, new_parents);
20101 var trailing_comma = this.trailing_comma.rewrite(rewriter, new_parents);
20102 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
20104 keyword === this.keyword &&
20105 left_angle === this.left_angle &&
20106 type === this.type &&
20107 trailing_comma === this.trailing_comma &&
20108 right_angle === this.right_angle)
20110 return rewriter(this, parents);
20114 return rewriter(new ClassnameTypeSpecifier(
20119 right_angle), parents);
20122 static from_json(json, position, source)
20124 let keyword = EditableSyntax.from_json(
20125 json.classname_keyword, position, source);
20126 position += keyword.width;
20127 let left_angle = EditableSyntax.from_json(
20128 json.classname_left_angle, position, source);
20129 position += left_angle.width;
20130 let type = EditableSyntax.from_json(
20131 json.classname_type, position, source);
20132 position += type.width;
20133 let trailing_comma = EditableSyntax.from_json(
20134 json.classname_trailing_comma, position, source);
20135 position += trailing_comma.width;
20136 let right_angle = EditableSyntax.from_json(
20137 json.classname_right_angle, position, source);
20138 position += right_angle.width;
20139 return new ClassnameTypeSpecifier(
20146 get children_keys()
20148 if (ClassnameTypeSpecifier._children_keys == null)
20149 ClassnameTypeSpecifier._children_keys = [
20155 return ClassnameTypeSpecifier._children_keys;
20158 class FieldSpecifier extends EditableSyntax
20166 super('field_specifier', {
20167 question: question,
20172 get question() { return this.children.question; }
20173 get name() { return this.children.name; }
20174 get arrow() { return this.children.arrow; }
20175 get type() { return this.children.type; }
20176 with_question(question){
20177 return new FieldSpecifier(
20184 return new FieldSpecifier(
20191 return new FieldSpecifier(
20198 return new FieldSpecifier(
20204 rewrite(rewriter, parents)
20206 if (parents == undefined)
20208 let new_parents = parents.slice();
20209 new_parents.push(this);
20210 var question = this.question.rewrite(rewriter, new_parents);
20211 var name = this.name.rewrite(rewriter, new_parents);
20212 var arrow = this.arrow.rewrite(rewriter, new_parents);
20213 var type = this.type.rewrite(rewriter, new_parents);
20215 question === this.question &&
20216 name === this.name &&
20217 arrow === this.arrow &&
20218 type === this.type)
20220 return rewriter(this, parents);
20224 return rewriter(new FieldSpecifier(
20231 static from_json(json, position, source)
20233 let question = EditableSyntax.from_json(
20234 json.field_question, position, source);
20235 position += question.width;
20236 let name = EditableSyntax.from_json(
20237 json.field_name, position, source);
20238 position += name.width;
20239 let arrow = EditableSyntax.from_json(
20240 json.field_arrow, position, source);
20241 position += arrow.width;
20242 let type = EditableSyntax.from_json(
20243 json.field_type, position, source);
20244 position += type.width;
20245 return new FieldSpecifier(
20251 get children_keys()
20253 if (FieldSpecifier._children_keys == null)
20254 FieldSpecifier._children_keys = [
20259 return FieldSpecifier._children_keys;
20262 class FieldInitializer extends EditableSyntax
20269 super('field_initializer', {
20274 get name() { return this.children.name; }
20275 get arrow() { return this.children.arrow; }
20276 get value() { return this.children.value; }
20278 return new FieldInitializer(
20284 return new FieldInitializer(
20290 return new FieldInitializer(
20295 rewrite(rewriter, parents)
20297 if (parents == undefined)
20299 let new_parents = parents.slice();
20300 new_parents.push(this);
20301 var name = this.name.rewrite(rewriter, new_parents);
20302 var arrow = this.arrow.rewrite(rewriter, new_parents);
20303 var value = this.value.rewrite(rewriter, new_parents);
20305 name === this.name &&
20306 arrow === this.arrow &&
20307 value === this.value)
20309 return rewriter(this, parents);
20313 return rewriter(new FieldInitializer(
20319 static from_json(json, position, source)
20321 let name = EditableSyntax.from_json(
20322 json.field_initializer_name, position, source);
20323 position += name.width;
20324 let arrow = EditableSyntax.from_json(
20325 json.field_initializer_arrow, position, source);
20326 position += arrow.width;
20327 let value = EditableSyntax.from_json(
20328 json.field_initializer_value, position, source);
20329 position += value.width;
20330 return new FieldInitializer(
20335 get children_keys()
20337 if (FieldInitializer._children_keys == null)
20338 FieldInitializer._children_keys = [
20342 return FieldInitializer._children_keys;
20345 class ShapeTypeSpecifier extends EditableSyntax
20354 super('shape_type_specifier', {
20356 left_paren: left_paren,
20358 ellipsis: ellipsis,
20359 right_paren: right_paren });
20361 get keyword() { return this.children.keyword; }
20362 get left_paren() { return this.children.left_paren; }
20363 get fields() { return this.children.fields; }
20364 get ellipsis() { return this.children.ellipsis; }
20365 get right_paren() { return this.children.right_paren; }
20366 with_keyword(keyword){
20367 return new ShapeTypeSpecifier(
20374 with_left_paren(left_paren){
20375 return new ShapeTypeSpecifier(
20382 with_fields(fields){
20383 return new ShapeTypeSpecifier(
20390 with_ellipsis(ellipsis){
20391 return new ShapeTypeSpecifier(
20398 with_right_paren(right_paren){
20399 return new ShapeTypeSpecifier(
20406 rewrite(rewriter, parents)
20408 if (parents == undefined)
20410 let new_parents = parents.slice();
20411 new_parents.push(this);
20412 var keyword = this.keyword.rewrite(rewriter, new_parents);
20413 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
20414 var fields = this.fields.rewrite(rewriter, new_parents);
20415 var ellipsis = this.ellipsis.rewrite(rewriter, new_parents);
20416 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
20418 keyword === this.keyword &&
20419 left_paren === this.left_paren &&
20420 fields === this.fields &&
20421 ellipsis === this.ellipsis &&
20422 right_paren === this.right_paren)
20424 return rewriter(this, parents);
20428 return rewriter(new ShapeTypeSpecifier(
20433 right_paren), parents);
20436 static from_json(json, position, source)
20438 let keyword = EditableSyntax.from_json(
20439 json.shape_type_keyword, position, source);
20440 position += keyword.width;
20441 let left_paren = EditableSyntax.from_json(
20442 json.shape_type_left_paren, position, source);
20443 position += left_paren.width;
20444 let fields = EditableSyntax.from_json(
20445 json.shape_type_fields, position, source);
20446 position += fields.width;
20447 let ellipsis = EditableSyntax.from_json(
20448 json.shape_type_ellipsis, position, source);
20449 position += ellipsis.width;
20450 let right_paren = EditableSyntax.from_json(
20451 json.shape_type_right_paren, position, source);
20452 position += right_paren.width;
20453 return new ShapeTypeSpecifier(
20460 get children_keys()
20462 if (ShapeTypeSpecifier._children_keys == null)
20463 ShapeTypeSpecifier._children_keys = [
20469 return ShapeTypeSpecifier._children_keys;
20472 class ShapeExpression extends EditableSyntax
20480 super('shape_expression', {
20482 left_paren: left_paren,
20484 right_paren: right_paren });
20486 get keyword() { return this.children.keyword; }
20487 get left_paren() { return this.children.left_paren; }
20488 get fields() { return this.children.fields; }
20489 get right_paren() { return this.children.right_paren; }
20490 with_keyword(keyword){
20491 return new ShapeExpression(
20497 with_left_paren(left_paren){
20498 return new ShapeExpression(
20504 with_fields(fields){
20505 return new ShapeExpression(
20511 with_right_paren(right_paren){
20512 return new ShapeExpression(
20518 rewrite(rewriter, parents)
20520 if (parents == undefined)
20522 let new_parents = parents.slice();
20523 new_parents.push(this);
20524 var keyword = this.keyword.rewrite(rewriter, new_parents);
20525 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
20526 var fields = this.fields.rewrite(rewriter, new_parents);
20527 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
20529 keyword === this.keyword &&
20530 left_paren === this.left_paren &&
20531 fields === this.fields &&
20532 right_paren === this.right_paren)
20534 return rewriter(this, parents);
20538 return rewriter(new ShapeExpression(
20542 right_paren), parents);
20545 static from_json(json, position, source)
20547 let keyword = EditableSyntax.from_json(
20548 json.shape_expression_keyword, position, source);
20549 position += keyword.width;
20550 let left_paren = EditableSyntax.from_json(
20551 json.shape_expression_left_paren, position, source);
20552 position += left_paren.width;
20553 let fields = EditableSyntax.from_json(
20554 json.shape_expression_fields, position, source);
20555 position += fields.width;
20556 let right_paren = EditableSyntax.from_json(
20557 json.shape_expression_right_paren, position, source);
20558 position += right_paren.width;
20559 return new ShapeExpression(
20565 get children_keys()
20567 if (ShapeExpression._children_keys == null)
20568 ShapeExpression._children_keys = [
20573 return ShapeExpression._children_keys;
20576 class TupleExpression extends EditableSyntax
20584 super('tuple_expression', {
20586 left_paren: left_paren,
20588 right_paren: right_paren });
20590 get keyword() { return this.children.keyword; }
20591 get left_paren() { return this.children.left_paren; }
20592 get items() { return this.children.items; }
20593 get right_paren() { return this.children.right_paren; }
20594 with_keyword(keyword){
20595 return new TupleExpression(
20601 with_left_paren(left_paren){
20602 return new TupleExpression(
20609 return new TupleExpression(
20615 with_right_paren(right_paren){
20616 return new TupleExpression(
20622 rewrite(rewriter, parents)
20624 if (parents == undefined)
20626 let new_parents = parents.slice();
20627 new_parents.push(this);
20628 var keyword = this.keyword.rewrite(rewriter, new_parents);
20629 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
20630 var items = this.items.rewrite(rewriter, new_parents);
20631 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
20633 keyword === this.keyword &&
20634 left_paren === this.left_paren &&
20635 items === this.items &&
20636 right_paren === this.right_paren)
20638 return rewriter(this, parents);
20642 return rewriter(new TupleExpression(
20646 right_paren), parents);
20649 static from_json(json, position, source)
20651 let keyword = EditableSyntax.from_json(
20652 json.tuple_expression_keyword, position, source);
20653 position += keyword.width;
20654 let left_paren = EditableSyntax.from_json(
20655 json.tuple_expression_left_paren, position, source);
20656 position += left_paren.width;
20657 let items = EditableSyntax.from_json(
20658 json.tuple_expression_items, position, source);
20659 position += items.width;
20660 let right_paren = EditableSyntax.from_json(
20661 json.tuple_expression_right_paren, position, source);
20662 position += right_paren.width;
20663 return new TupleExpression(
20669 get children_keys()
20671 if (TupleExpression._children_keys == null)
20672 TupleExpression._children_keys = [
20677 return TupleExpression._children_keys;
20680 class GenericTypeSpecifier extends EditableSyntax
20686 super('generic_type_specifier', {
20687 class_type: class_type,
20688 argument_list: argument_list });
20690 get class_type() { return this.children.class_type; }
20691 get argument_list() { return this.children.argument_list; }
20692 with_class_type(class_type){
20693 return new GenericTypeSpecifier(
20695 this.argument_list);
20697 with_argument_list(argument_list){
20698 return new GenericTypeSpecifier(
20702 rewrite(rewriter, parents)
20704 if (parents == undefined)
20706 let new_parents = parents.slice();
20707 new_parents.push(this);
20708 var class_type = this.class_type.rewrite(rewriter, new_parents);
20709 var argument_list = this.argument_list.rewrite(rewriter, new_parents);
20711 class_type === this.class_type &&
20712 argument_list === this.argument_list)
20714 return rewriter(this, parents);
20718 return rewriter(new GenericTypeSpecifier(
20720 argument_list), parents);
20723 static from_json(json, position, source)
20725 let class_type = EditableSyntax.from_json(
20726 json.generic_class_type, position, source);
20727 position += class_type.width;
20728 let argument_list = EditableSyntax.from_json(
20729 json.generic_argument_list, position, source);
20730 position += argument_list.width;
20731 return new GenericTypeSpecifier(
20735 get children_keys()
20737 if (GenericTypeSpecifier._children_keys == null)
20738 GenericTypeSpecifier._children_keys = [
20741 return GenericTypeSpecifier._children_keys;
20744 class NullableTypeSpecifier extends EditableSyntax
20750 super('nullable_type_specifier', {
20751 question: question,
20754 get question() { return this.children.question; }
20755 get type() { return this.children.type; }
20756 with_question(question){
20757 return new NullableTypeSpecifier(
20762 return new NullableTypeSpecifier(
20766 rewrite(rewriter, parents)
20768 if (parents == undefined)
20770 let new_parents = parents.slice();
20771 new_parents.push(this);
20772 var question = this.question.rewrite(rewriter, new_parents);
20773 var type = this.type.rewrite(rewriter, new_parents);
20775 question === this.question &&
20776 type === this.type)
20778 return rewriter(this, parents);
20782 return rewriter(new NullableTypeSpecifier(
20787 static from_json(json, position, source)
20789 let question = EditableSyntax.from_json(
20790 json.nullable_question, position, source);
20791 position += question.width;
20792 let type = EditableSyntax.from_json(
20793 json.nullable_type, position, source);
20794 position += type.width;
20795 return new NullableTypeSpecifier(
20799 get children_keys()
20801 if (NullableTypeSpecifier._children_keys == null)
20802 NullableTypeSpecifier._children_keys = [
20805 return NullableTypeSpecifier._children_keys;
20808 class SoftTypeSpecifier extends EditableSyntax
20814 super('soft_type_specifier', {
20818 get at() { return this.children.at; }
20819 get type() { return this.children.type; }
20821 return new SoftTypeSpecifier(
20826 return new SoftTypeSpecifier(
20830 rewrite(rewriter, parents)
20832 if (parents == undefined)
20834 let new_parents = parents.slice();
20835 new_parents.push(this);
20836 var at = this.at.rewrite(rewriter, new_parents);
20837 var type = this.type.rewrite(rewriter, new_parents);
20840 type === this.type)
20842 return rewriter(this, parents);
20846 return rewriter(new SoftTypeSpecifier(
20851 static from_json(json, position, source)
20853 let at = EditableSyntax.from_json(
20854 json.soft_at, position, source);
20855 position += at.width;
20856 let type = EditableSyntax.from_json(
20857 json.soft_type, position, source);
20858 position += type.width;
20859 return new SoftTypeSpecifier(
20863 get children_keys()
20865 if (SoftTypeSpecifier._children_keys == null)
20866 SoftTypeSpecifier._children_keys = [
20869 return SoftTypeSpecifier._children_keys;
20872 class ReifiedTypeArgument extends EditableSyntax
20878 super('reified_type_argument', {
20882 get reified() { return this.children.reified; }
20883 get type() { return this.children.type; }
20884 with_reified(reified){
20885 return new ReifiedTypeArgument(
20890 return new ReifiedTypeArgument(
20894 rewrite(rewriter, parents)
20896 if (parents == undefined)
20898 let new_parents = parents.slice();
20899 new_parents.push(this);
20900 var reified = this.reified.rewrite(rewriter, new_parents);
20901 var type = this.type.rewrite(rewriter, new_parents);
20903 reified === this.reified &&
20904 type === this.type)
20906 return rewriter(this, parents);
20910 return rewriter(new ReifiedTypeArgument(
20915 static from_json(json, position, source)
20917 let reified = EditableSyntax.from_json(
20918 json.reified_type_argument_reified, position, source);
20919 position += reified.width;
20920 let type = EditableSyntax.from_json(
20921 json.reified_type_argument_type, position, source);
20922 position += type.width;
20923 return new ReifiedTypeArgument(
20927 get children_keys()
20929 if (ReifiedTypeArgument._children_keys == null)
20930 ReifiedTypeArgument._children_keys = [
20933 return ReifiedTypeArgument._children_keys;
20936 class TypeArguments extends EditableSyntax
20943 super('type_arguments', {
20944 left_angle: left_angle,
20946 right_angle: right_angle });
20948 get left_angle() { return this.children.left_angle; }
20949 get types() { return this.children.types; }
20950 get right_angle() { return this.children.right_angle; }
20951 with_left_angle(left_angle){
20952 return new TypeArguments(
20958 return new TypeArguments(
20963 with_right_angle(right_angle){
20964 return new TypeArguments(
20969 rewrite(rewriter, parents)
20971 if (parents == undefined)
20973 let new_parents = parents.slice();
20974 new_parents.push(this);
20975 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
20976 var types = this.types.rewrite(rewriter, new_parents);
20977 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
20979 left_angle === this.left_angle &&
20980 types === this.types &&
20981 right_angle === this.right_angle)
20983 return rewriter(this, parents);
20987 return rewriter(new TypeArguments(
20990 right_angle), parents);
20993 static from_json(json, position, source)
20995 let left_angle = EditableSyntax.from_json(
20996 json.type_arguments_left_angle, position, source);
20997 position += left_angle.width;
20998 let types = EditableSyntax.from_json(
20999 json.type_arguments_types, position, source);
21000 position += types.width;
21001 let right_angle = EditableSyntax.from_json(
21002 json.type_arguments_right_angle, position, source);
21003 position += right_angle.width;
21004 return new TypeArguments(
21009 get children_keys()
21011 if (TypeArguments._children_keys == null)
21012 TypeArguments._children_keys = [
21016 return TypeArguments._children_keys;
21019 class TypeParameters extends EditableSyntax
21026 super('type_parameters', {
21027 left_angle: left_angle,
21028 parameters: parameters,
21029 right_angle: right_angle });
21031 get left_angle() { return this.children.left_angle; }
21032 get parameters() { return this.children.parameters; }
21033 get right_angle() { return this.children.right_angle; }
21034 with_left_angle(left_angle){
21035 return new TypeParameters(
21040 with_parameters(parameters){
21041 return new TypeParameters(
21046 with_right_angle(right_angle){
21047 return new TypeParameters(
21052 rewrite(rewriter, parents)
21054 if (parents == undefined)
21056 let new_parents = parents.slice();
21057 new_parents.push(this);
21058 var left_angle = this.left_angle.rewrite(rewriter, new_parents);
21059 var parameters = this.parameters.rewrite(rewriter, new_parents);
21060 var right_angle = this.right_angle.rewrite(rewriter, new_parents);
21062 left_angle === this.left_angle &&
21063 parameters === this.parameters &&
21064 right_angle === this.right_angle)
21066 return rewriter(this, parents);
21070 return rewriter(new TypeParameters(
21073 right_angle), parents);
21076 static from_json(json, position, source)
21078 let left_angle = EditableSyntax.from_json(
21079 json.type_parameters_left_angle, position, source);
21080 position += left_angle.width;
21081 let parameters = EditableSyntax.from_json(
21082 json.type_parameters_parameters, position, source);
21083 position += parameters.width;
21084 let right_angle = EditableSyntax.from_json(
21085 json.type_parameters_right_angle, position, source);
21086 position += right_angle.width;
21087 return new TypeParameters(
21092 get children_keys()
21094 if (TypeParameters._children_keys == null)
21095 TypeParameters._children_keys = [
21099 return TypeParameters._children_keys;
21102 class TupleTypeSpecifier extends EditableSyntax
21109 super('tuple_type_specifier', {
21110 left_paren: left_paren,
21112 right_paren: right_paren });
21114 get left_paren() { return this.children.left_paren; }
21115 get types() { return this.children.types; }
21116 get right_paren() { return this.children.right_paren; }
21117 with_left_paren(left_paren){
21118 return new TupleTypeSpecifier(
21124 return new TupleTypeSpecifier(
21129 with_right_paren(right_paren){
21130 return new TupleTypeSpecifier(
21135 rewrite(rewriter, parents)
21137 if (parents == undefined)
21139 let new_parents = parents.slice();
21140 new_parents.push(this);
21141 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
21142 var types = this.types.rewrite(rewriter, new_parents);
21143 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
21145 left_paren === this.left_paren &&
21146 types === this.types &&
21147 right_paren === this.right_paren)
21149 return rewriter(this, parents);
21153 return rewriter(new TupleTypeSpecifier(
21156 right_paren), parents);
21159 static from_json(json, position, source)
21161 let left_paren = EditableSyntax.from_json(
21162 json.tuple_left_paren, position, source);
21163 position += left_paren.width;
21164 let types = EditableSyntax.from_json(
21165 json.tuple_types, position, source);
21166 position += types.width;
21167 let right_paren = EditableSyntax.from_json(
21168 json.tuple_right_paren, position, source);
21169 position += right_paren.width;
21170 return new TupleTypeSpecifier(
21175 get children_keys()
21177 if (TupleTypeSpecifier._children_keys == null)
21178 TupleTypeSpecifier._children_keys = [
21182 return TupleTypeSpecifier._children_keys;
21185 class ErrorSyntax extends EditableSyntax
21193 get error() { return this.children.error; }
21195 return new ErrorSyntax(
21198 rewrite(rewriter, parents)
21200 if (parents == undefined)
21202 let new_parents = parents.slice();
21203 new_parents.push(this);
21204 var error = this.error.rewrite(rewriter, new_parents);
21206 error === this.error)
21208 return rewriter(this, parents);
21212 return rewriter(new ErrorSyntax(
21216 static from_json(json, position, source)
21218 let error = EditableSyntax.from_json(
21219 json.error_error, position, source);
21220 position += error.width;
21221 return new ErrorSyntax(
21224 get children_keys()
21226 if (ErrorSyntax._children_keys == null)
21227 ErrorSyntax._children_keys = [
21229 return ErrorSyntax._children_keys;
21232 class ListItem extends EditableSyntax
21238 super('list_item', {
21240 separator: separator });
21242 get item() { return this.children.item; }
21243 get separator() { return this.children.separator; }
21245 return new ListItem(
21249 with_separator(separator){
21250 return new ListItem(
21254 rewrite(rewriter, parents)
21256 if (parents == undefined)
21258 let new_parents = parents.slice();
21259 new_parents.push(this);
21260 var item = this.item.rewrite(rewriter, new_parents);
21261 var separator = this.separator.rewrite(rewriter, new_parents);
21263 item === this.item &&
21264 separator === this.separator)
21266 return rewriter(this, parents);
21270 return rewriter(new ListItem(
21272 separator), parents);
21275 static from_json(json, position, source)
21277 let item = EditableSyntax.from_json(
21278 json.list_item, position, source);
21279 position += item.width;
21280 let separator = EditableSyntax.from_json(
21281 json.list_separator, position, source);
21282 position += separator.width;
21283 return new ListItem(
21287 get children_keys()
21289 if (ListItem._children_keys == null)
21290 ListItem._children_keys = [
21293 return ListItem._children_keys;
21296 class PocketAtomExpression extends EditableSyntax
21302 super('pocket_atom', {
21304 expression: expression });
21306 get glyph() { return this.children.glyph; }
21307 get expression() { return this.children.expression; }
21309 return new PocketAtomExpression(
21313 with_expression(expression){
21314 return new PocketAtomExpression(
21318 rewrite(rewriter, parents)
21320 if (parents == undefined)
21322 let new_parents = parents.slice();
21323 new_parents.push(this);
21324 var glyph = this.glyph.rewrite(rewriter, new_parents);
21325 var expression = this.expression.rewrite(rewriter, new_parents);
21327 glyph === this.glyph &&
21328 expression === this.expression)
21330 return rewriter(this, parents);
21334 return rewriter(new PocketAtomExpression(
21336 expression), parents);
21339 static from_json(json, position, source)
21341 let glyph = EditableSyntax.from_json(
21342 json.pocket_atom_glyph, position, source);
21343 position += glyph.width;
21344 let expression = EditableSyntax.from_json(
21345 json.pocket_atom_expression, position, source);
21346 position += expression.width;
21347 return new PocketAtomExpression(
21351 get children_keys()
21353 if (PocketAtomExpression._children_keys == null)
21354 PocketAtomExpression._children_keys = [
21357 return PocketAtomExpression._children_keys;
21360 class PocketIdentifierExpression extends EditableSyntax
21369 super('pocket_identifier', {
21370 qualifier: qualifier,
21371 pu_operator: pu_operator,
21373 operator: operator,
21376 get qualifier() { return this.children.qualifier; }
21377 get pu_operator() { return this.children.pu_operator; }
21378 get field() { return this.children.field; }
21379 get operator() { return this.children.operator; }
21380 get name() { return this.children.name; }
21381 with_qualifier(qualifier){
21382 return new PocketIdentifierExpression(
21389 with_pu_operator(pu_operator){
21390 return new PocketIdentifierExpression(
21398 return new PocketIdentifierExpression(
21405 with_operator(operator){
21406 return new PocketIdentifierExpression(
21414 return new PocketIdentifierExpression(
21421 rewrite(rewriter, parents)
21423 if (parents == undefined)
21425 let new_parents = parents.slice();
21426 new_parents.push(this);
21427 var qualifier = this.qualifier.rewrite(rewriter, new_parents);
21428 var pu_operator = this.pu_operator.rewrite(rewriter, new_parents);
21429 var field = this.field.rewrite(rewriter, new_parents);
21430 var operator = this.operator.rewrite(rewriter, new_parents);
21431 var name = this.name.rewrite(rewriter, new_parents);
21433 qualifier === this.qualifier &&
21434 pu_operator === this.pu_operator &&
21435 field === this.field &&
21436 operator === this.operator &&
21437 name === this.name)
21439 return rewriter(this, parents);
21443 return rewriter(new PocketIdentifierExpression(
21451 static from_json(json, position, source)
21453 let qualifier = EditableSyntax.from_json(
21454 json.pocket_identifier_qualifier, position, source);
21455 position += qualifier.width;
21456 let pu_operator = EditableSyntax.from_json(
21457 json.pocket_identifier_pu_operator, position, source);
21458 position += pu_operator.width;
21459 let field = EditableSyntax.from_json(
21460 json.pocket_identifier_field, position, source);
21461 position += field.width;
21462 let operator = EditableSyntax.from_json(
21463 json.pocket_identifier_operator, position, source);
21464 position += operator.width;
21465 let name = EditableSyntax.from_json(
21466 json.pocket_identifier_name, position, source);
21467 position += name.width;
21468 return new PocketIdentifierExpression(
21475 get children_keys()
21477 if (PocketIdentifierExpression._children_keys == null)
21478 PocketIdentifierExpression._children_keys = [
21484 return PocketIdentifierExpression._children_keys;
21487 class PocketAtomMappingDeclaration extends EditableSyntax
21497 super('pocket_atom_mapping', {
21499 expression: expression,
21500 left_paren: left_paren,
21501 mappings: mappings,
21502 right_paren: right_paren,
21503 semicolon: semicolon });
21505 get glyph() { return this.children.glyph; }
21506 get expression() { return this.children.expression; }
21507 get left_paren() { return this.children.left_paren; }
21508 get mappings() { return this.children.mappings; }
21509 get right_paren() { return this.children.right_paren; }
21510 get semicolon() { return this.children.semicolon; }
21512 return new PocketAtomMappingDeclaration(
21520 with_expression(expression){
21521 return new PocketAtomMappingDeclaration(
21529 with_left_paren(left_paren){
21530 return new PocketAtomMappingDeclaration(
21538 with_mappings(mappings){
21539 return new PocketAtomMappingDeclaration(
21547 with_right_paren(right_paren){
21548 return new PocketAtomMappingDeclaration(
21556 with_semicolon(semicolon){
21557 return new PocketAtomMappingDeclaration(
21565 rewrite(rewriter, parents)
21567 if (parents == undefined)
21569 let new_parents = parents.slice();
21570 new_parents.push(this);
21571 var glyph = this.glyph.rewrite(rewriter, new_parents);
21572 var expression = this.expression.rewrite(rewriter, new_parents);
21573 var left_paren = this.left_paren.rewrite(rewriter, new_parents);
21574 var mappings = this.mappings.rewrite(rewriter, new_parents);
21575 var right_paren = this.right_paren.rewrite(rewriter, new_parents);
21576 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
21578 glyph === this.glyph &&
21579 expression === this.expression &&
21580 left_paren === this.left_paren &&
21581 mappings === this.mappings &&
21582 right_paren === this.right_paren &&
21583 semicolon === this.semicolon)
21585 return rewriter(this, parents);
21589 return rewriter(new PocketAtomMappingDeclaration(
21595 semicolon), parents);
21598 static from_json(json, position, source)
21600 let glyph = EditableSyntax.from_json(
21601 json.pocket_atom_mapping_glyph, position, source);
21602 position += glyph.width;
21603 let expression = EditableSyntax.from_json(
21604 json.pocket_atom_mapping_expression, position, source);
21605 position += expression.width;
21606 let left_paren = EditableSyntax.from_json(
21607 json.pocket_atom_mapping_left_paren, position, source);
21608 position += left_paren.width;
21609 let mappings = EditableSyntax.from_json(
21610 json.pocket_atom_mapping_mappings, position, source);
21611 position += mappings.width;
21612 let right_paren = EditableSyntax.from_json(
21613 json.pocket_atom_mapping_right_paren, position, source);
21614 position += right_paren.width;
21615 let semicolon = EditableSyntax.from_json(
21616 json.pocket_atom_mapping_semicolon, position, source);
21617 position += semicolon.width;
21618 return new PocketAtomMappingDeclaration(
21626 get children_keys()
21628 if (PocketAtomMappingDeclaration._children_keys == null)
21629 PocketAtomMappingDeclaration._children_keys = [
21636 return PocketAtomMappingDeclaration._children_keys;
21639 class PocketEnumDeclaration extends EditableSyntax
21649 super('pocket_enum_declaration', {
21650 modifiers: modifiers,
21653 left_brace: left_brace,
21655 right_brace: right_brace });
21657 get modifiers() { return this.children.modifiers; }
21658 get enum() { return this.children.enum; }
21659 get name() { return this.children.name; }
21660 get left_brace() { return this.children.left_brace; }
21661 get fields() { return this.children.fields; }
21662 get right_brace() { return this.children.right_brace; }
21663 with_modifiers(modifiers){
21664 return new PocketEnumDeclaration(
21673 return new PocketEnumDeclaration(
21682 return new PocketEnumDeclaration(
21690 with_left_brace(left_brace){
21691 return new PocketEnumDeclaration(
21699 with_fields(fields){
21700 return new PocketEnumDeclaration(
21708 with_right_brace(right_brace){
21709 return new PocketEnumDeclaration(
21717 rewrite(rewriter, parents)
21719 if (parents == undefined)
21721 let new_parents = parents.slice();
21722 new_parents.push(this);
21723 var modifiers = this.modifiers.rewrite(rewriter, new_parents);
21724 var enum = this.enum.rewrite(rewriter, new_parents);
21725 var name = this.name.rewrite(rewriter, new_parents);
21726 var left_brace = this.left_brace.rewrite(rewriter, new_parents);
21727 var fields = this.fields.rewrite(rewriter, new_parents);
21728 var right_brace = this.right_brace.rewrite(rewriter, new_parents);
21730 modifiers === this.modifiers &&
21731 enum === this.enum &&
21732 name === this.name &&
21733 left_brace === this.left_brace &&
21734 fields === this.fields &&
21735 right_brace === this.right_brace)
21737 return rewriter(this, parents);
21741 return rewriter(new PocketEnumDeclaration(
21747 right_brace), parents);
21750 static from_json(json, position, source)
21752 let modifiers = EditableSyntax.from_json(
21753 json.pocket_enum_modifiers, position, source);
21754 position += modifiers.width;
21755 let enum = EditableSyntax.from_json(
21756 json.pocket_enum_enum, position, source);
21757 position += enum.width;
21758 let name = EditableSyntax.from_json(
21759 json.pocket_enum_name, position, source);
21760 position += name.width;
21761 let left_brace = EditableSyntax.from_json(
21762 json.pocket_enum_left_brace, position, source);
21763 position += left_brace.width;
21764 let fields = EditableSyntax.from_json(
21765 json.pocket_enum_fields, position, source);
21766 position += fields.width;
21767 let right_brace = EditableSyntax.from_json(
21768 json.pocket_enum_right_brace, position, source);
21769 position += right_brace.width;
21770 return new PocketEnumDeclaration(
21778 get children_keys()
21780 if (PocketEnumDeclaration._children_keys == null)
21781 PocketEnumDeclaration._children_keys = [
21788 return PocketEnumDeclaration._children_keys;
21791 class PocketFieldTypeExprDeclaration extends EditableSyntax
21799 super('pocket_field_type_expr_declaration', {
21803 semicolon: semicolon });
21805 get case() { return this.children.case; }
21806 get type() { return this.children.type; }
21807 get name() { return this.children.name; }
21808 get semicolon() { return this.children.semicolon; }
21810 return new PocketFieldTypeExprDeclaration(
21817 return new PocketFieldTypeExprDeclaration(
21824 return new PocketFieldTypeExprDeclaration(
21830 with_semicolon(semicolon){
21831 return new PocketFieldTypeExprDeclaration(
21837 rewrite(rewriter, parents)
21839 if (parents == undefined)
21841 let new_parents = parents.slice();
21842 new_parents.push(this);
21843 var case = this.case.rewrite(rewriter, new_parents);
21844 var type = this.type.rewrite(rewriter, new_parents);
21845 var name = this.name.rewrite(rewriter, new_parents);
21846 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
21848 case === this.case &&
21849 type === this.type &&
21850 name === this.name &&
21851 semicolon === this.semicolon)
21853 return rewriter(this, parents);
21857 return rewriter(new PocketFieldTypeExprDeclaration(
21861 semicolon), parents);
21864 static from_json(json, position, source)
21866 let case = EditableSyntax.from_json(
21867 json.pocket_field_type_expr_case, position, source);
21868 position += case.width;
21869 let type = EditableSyntax.from_json(
21870 json.pocket_field_type_expr_type, position, source);
21871 position += type.width;
21872 let name = EditableSyntax.from_json(
21873 json.pocket_field_type_expr_name, position, source);
21874 position += name.width;
21875 let semicolon = EditableSyntax.from_json(
21876 json.pocket_field_type_expr_semicolon, position, source);
21877 position += semicolon.width;
21878 return new PocketFieldTypeExprDeclaration(
21884 get children_keys()
21886 if (PocketFieldTypeExprDeclaration._children_keys == null)
21887 PocketFieldTypeExprDeclaration._children_keys = [
21892 return PocketFieldTypeExprDeclaration._children_keys;
21895 class PocketFieldTypeDeclaration extends EditableSyntax
21903 super('pocket_field_type_declaration', {
21907 semicolon: semicolon });
21909 get case() { return this.children.case; }
21910 get type() { return this.children.type; }
21911 get name() { return this.children.name; }
21912 get semicolon() { return this.children.semicolon; }
21914 return new PocketFieldTypeDeclaration(
21921 return new PocketFieldTypeDeclaration(
21928 return new PocketFieldTypeDeclaration(
21934 with_semicolon(semicolon){
21935 return new PocketFieldTypeDeclaration(
21941 rewrite(rewriter, parents)
21943 if (parents == undefined)
21945 let new_parents = parents.slice();
21946 new_parents.push(this);
21947 var case = this.case.rewrite(rewriter, new_parents);
21948 var type = this.type.rewrite(rewriter, new_parents);
21949 var name = this.name.rewrite(rewriter, new_parents);
21950 var semicolon = this.semicolon.rewrite(rewriter, new_parents);
21952 case === this.case &&
21953 type === this.type &&
21954 name === this.name &&
21955 semicolon === this.semicolon)
21957 return rewriter(this, parents);
21961 return rewriter(new PocketFieldTypeDeclaration(
21965 semicolon), parents);
21968 static from_json(json, position, source)
21970 let case = EditableSyntax.from_json(
21971 json.pocket_field_type_case, position, source);
21972 position += case.width;
21973 let type = EditableSyntax.from_json(
21974 json.pocket_field_type_type, position, source);
21975 position += type.width;
21976 let name = EditableSyntax.from_json(
21977 json.pocket_field_type_name, position, source);
21978 position += name.width;
21979 let semicolon = EditableSyntax.from_json(
21980 json.pocket_field_type_semicolon, position, source);
21981 position += semicolon.width;
21982 return new PocketFieldTypeDeclaration(
21988 get children_keys()
21990 if (PocketFieldTypeDeclaration._children_keys == null)
21991 PocketFieldTypeDeclaration._children_keys = [
21996 return PocketFieldTypeDeclaration._children_keys;
21999 class PocketMappingIdDeclaration extends EditableSyntax
22005 super('pocket_mapping_id_declaration', {
22007 initializer: initializer });
22009 get name() { return this.children.name; }
22010 get initializer() { return this.children.initializer; }
22012 return new PocketMappingIdDeclaration(
22016 with_initializer(initializer){
22017 return new PocketMappingIdDeclaration(
22021 rewrite(rewriter, parents)
22023 if (parents == undefined)
22025 let new_parents = parents.slice();
22026 new_parents.push(this);
22027 var name = this.name.rewrite(rewriter, new_parents);
22028 var initializer = this.initializer.rewrite(rewriter, new_parents);
22030 name === this.name &&
22031 initializer === this.initializer)
22033 return rewriter(this, parents);
22037 return rewriter(new PocketMappingIdDeclaration(
22039 initializer), parents);
22042 static from_json(json, position, source)
22044 let name = EditableSyntax.from_json(
22045 json.pocket_mapping_id_name, position, source);
22046 position += name.width;
22047 let initializer = EditableSyntax.from_json(
22048 json.pocket_mapping_id_initializer, position, source);
22049 position += initializer.width;
22050 return new PocketMappingIdDeclaration(
22054 get children_keys()
22056 if (PocketMappingIdDeclaration._children_keys == null)
22057 PocketMappingIdDeclaration._children_keys = [
22060 return PocketMappingIdDeclaration._children_keys;
22063 class PocketMappingTypeDeclaration extends EditableSyntax
22071 super('pocket_mapping_type_declaration', {
22077 get keyword() { return this.children.keyword; }
22078 get name() { return this.children.name; }
22079 get equal() { return this.children.equal; }
22080 get type() { return this.children.type; }
22081 with_keyword(keyword){
22082 return new PocketMappingTypeDeclaration(
22089 return new PocketMappingTypeDeclaration(
22096 return new PocketMappingTypeDeclaration(
22103 return new PocketMappingTypeDeclaration(
22109 rewrite(rewriter, parents)
22111 if (parents == undefined)
22113 let new_parents = parents.slice();
22114 new_parents.push(this);
22115 var keyword = this.keyword.rewrite(rewriter, new_parents);
22116 var name = this.name.rewrite(rewriter, new_parents);
22117 var equal = this.equal.rewrite(rewriter, new_parents);
22118 var type = this.type.rewrite(rewriter, new_parents);
22120 keyword === this.keyword &&
22121 name === this.name &&
22122 equal === this.equal &&
22123 type === this.type)
22125 return rewriter(this, parents);
22129 return rewriter(new PocketMappingTypeDeclaration(
22136 static from_json(json, position, source)
22138 let keyword = EditableSyntax.from_json(
22139 json.pocket_mapping_type_keyword, position, source);
22140 position += keyword.width;
22141 let name = EditableSyntax.from_json(
22142 json.pocket_mapping_type_name, position, source);
22143 position += name.width;
22144 let equal = EditableSyntax.from_json(
22145 json.pocket_mapping_type_equal, position, source);
22146 position += equal.width;
22147 let type = EditableSyntax.from_json(
22148 json.pocket_mapping_type_type, position, source);
22149 position += type.width;
22150 return new PocketMappingTypeDeclaration(
22156 get children_keys()
22158 if (PocketMappingTypeDeclaration._children_keys == null)
22159 PocketMappingTypeDeclaration._children_keys = [
22164 return PocketMappingTypeDeclaration._children_keys;
22169 function from_json(json)
22171 return EditableSyntax.from_json(json.parse_tree, 0, json.program_text);
22174 exports.from_json = from_json;
22175 exports.EditableSyntax = EditableSyntax;
22176 exports.EditableList = EditableList;
22177 exports.EditableToken = EditableToken;
22178 exports.EndOfFileToken = EndOfFileToken;
22180 exports.AbstractToken = AbstractToken;
22181 exports.AndToken = AndToken;
22182 exports.ArrayToken = ArrayToken;
22183 exports.ArraykeyToken = ArraykeyToken;
22184 exports.AsToken = AsToken;
22185 exports.AsyncToken = AsyncToken;
22186 exports.AttributeToken = AttributeToken;
22187 exports.AwaitToken = AwaitToken;
22188 exports.BackslashToken = BackslashToken;
22189 exports.BinaryToken = BinaryToken;
22190 exports.BoolToken = BoolToken;
22191 exports.BooleanToken = BooleanToken;
22192 exports.BreakToken = BreakToken;
22193 exports.CaseToken = CaseToken;
22194 exports.CatchToken = CatchToken;
22195 exports.CategoryToken = CategoryToken;
22196 exports.ChildrenToken = ChildrenToken;
22197 exports.ClassToken = ClassToken;
22198 exports.ClassnameToken = ClassnameToken;
22199 exports.CloneToken = CloneToken;
22200 exports.ConstToken = ConstToken;
22201 exports.ConstructToken = ConstructToken;
22202 exports.ContinueToken = ContinueToken;
22203 exports.CoroutineToken = CoroutineToken;
22204 exports.DarrayToken = DarrayToken;
22205 exports.DeclareToken = DeclareToken;
22206 exports.DefaultToken = DefaultToken;
22207 exports.DefineToken = DefineToken;
22208 exports.DestructToken = DestructToken;
22209 exports.DictToken = DictToken;
22210 exports.DoToken = DoToken;
22211 exports.DoubleToken = DoubleToken;
22212 exports.EchoToken = EchoToken;
22213 exports.ElseToken = ElseToken;
22214 exports.ElseifToken = ElseifToken;
22215 exports.EmptyToken = EmptyToken;
22216 exports.EndforToken = EndforToken;
22217 exports.EndforeachToken = EndforeachToken;
22218 exports.EnddeclareToken = EnddeclareToken;
22219 exports.EndifToken = EndifToken;
22220 exports.EndswitchToken = EndswitchToken;
22221 exports.EndwhileToken = EndwhileToken;
22222 exports.EnumToken = EnumToken;
22223 exports.EvalToken = EvalToken;
22224 exports.ExtendsToken = ExtendsToken;
22225 exports.FallthroughToken = FallthroughToken;
22226 exports.FloatToken = FloatToken;
22227 exports.FileToken = FileToken;
22228 exports.FinalToken = FinalToken;
22229 exports.FinallyToken = FinallyToken;
22230 exports.ForToken = ForToken;
22231 exports.ForeachToken = ForeachToken;
22232 exports.FromToken = FromToken;
22233 exports.FunctionToken = FunctionToken;
22234 exports.GlobalToken = GlobalToken;
22235 exports.ConcurrentToken = ConcurrentToken;
22236 exports.GotoToken = GotoToken;
22237 exports.HaltCompilerToken = HaltCompilerToken;
22238 exports.IfToken = IfToken;
22239 exports.ImplementsToken = ImplementsToken;
22240 exports.IncludeToken = IncludeToken;
22241 exports.Include_onceToken = Include_onceToken;
22242 exports.InoutToken = InoutToken;
22243 exports.InstanceofToken = InstanceofToken;
22244 exports.InsteadofToken = InsteadofToken;
22245 exports.IntToken = IntToken;
22246 exports.IntegerToken = IntegerToken;
22247 exports.InterfaceToken = InterfaceToken;
22248 exports.IsToken = IsToken;
22249 exports.IssetToken = IssetToken;
22250 exports.KeysetToken = KeysetToken;
22251 exports.LetToken = LetToken;
22252 exports.ListToken = ListToken;
22253 exports.MixedToken = MixedToken;
22254 exports.NamespaceToken = NamespaceToken;
22255 exports.NewToken = NewToken;
22256 exports.NewtypeToken = NewtypeToken;
22257 exports.NoreturnToken = NoreturnToken;
22258 exports.NumToken = NumToken;
22259 exports.ObjectToken = ObjectToken;
22260 exports.OrToken = OrToken;
22261 exports.ParentToken = ParentToken;
22262 exports.PrintToken = PrintToken;
22263 exports.PrivateToken = PrivateToken;
22264 exports.ProtectedToken = ProtectedToken;
22265 exports.PublicToken = PublicToken;
22266 exports.RealToken = RealToken;
22267 exports.ReifyToken = ReifyToken;
22268 exports.RequireToken = RequireToken;
22269 exports.Require_onceToken = Require_onceToken;
22270 exports.RequiredToken = RequiredToken;
22271 exports.ResourceToken = ResourceToken;
22272 exports.ReturnToken = ReturnToken;
22273 exports.SelfToken = SelfToken;
22274 exports.ShapeToken = ShapeToken;
22275 exports.StaticToken = StaticToken;
22276 exports.StringToken = StringToken;
22277 exports.SuperToken = SuperToken;
22278 exports.SuspendToken = SuspendToken;
22279 exports.SwitchToken = SwitchToken;
22280 exports.ThisToken = ThisToken;
22281 exports.ThrowToken = ThrowToken;
22282 exports.TraitToken = TraitToken;
22283 exports.TryToken = TryToken;
22284 exports.TupleToken = TupleToken;
22285 exports.TypeToken = TypeToken;
22286 exports.UnsetToken = UnsetToken;
22287 exports.UseToken = UseToken;
22288 exports.UsingToken = UsingToken;
22289 exports.VarToken = VarToken;
22290 exports.VarrayToken = VarrayToken;
22291 exports.VecToken = VecToken;
22292 exports.VoidToken = VoidToken;
22293 exports.WhereToken = WhereToken;
22294 exports.WhileToken = WhileToken;
22295 exports.XorToken = XorToken;
22296 exports.YieldToken = YieldToken;
22297 exports.NullLiteralToken = NullLiteralToken;
22298 exports.LeftBracketToken = LeftBracketToken;
22299 exports.RightBracketToken = RightBracketToken;
22300 exports.LeftParenToken = LeftParenToken;
22301 exports.RightParenToken = RightParenToken;
22302 exports.LeftBraceToken = LeftBraceToken;
22303 exports.RightBraceToken = RightBraceToken;
22304 exports.DotToken = DotToken;
22305 exports.MinusGreaterThanToken = MinusGreaterThanToken;
22306 exports.PlusPlusToken = PlusPlusToken;
22307 exports.MinusMinusToken = MinusMinusToken;
22308 exports.StarStarToken = StarStarToken;
22309 exports.StarToken = StarToken;
22310 exports.PlusToken = PlusToken;
22311 exports.MinusToken = MinusToken;
22312 exports.TildeToken = TildeToken;
22313 exports.ExclamationToken = ExclamationToken;
22314 exports.DollarToken = DollarToken;
22315 exports.SlashToken = SlashToken;
22316 exports.PercentToken = PercentToken;
22317 exports.LessThanGreaterThanToken = LessThanGreaterThanToken;
22318 exports.LessThanEqualGreaterThanToken = LessThanEqualGreaterThanToken;
22319 exports.LessThanLessThanToken = LessThanLessThanToken;
22320 exports.GreaterThanGreaterThanToken = GreaterThanGreaterThanToken;
22321 exports.LessThanToken = LessThanToken;
22322 exports.GreaterThanToken = GreaterThanToken;
22323 exports.LessThanEqualToken = LessThanEqualToken;
22324 exports.GreaterThanEqualToken = GreaterThanEqualToken;
22325 exports.EqualEqualToken = EqualEqualToken;
22326 exports.EqualEqualEqualToken = EqualEqualEqualToken;
22327 exports.ExclamationEqualToken = ExclamationEqualToken;
22328 exports.ExclamationEqualEqualToken = ExclamationEqualEqualToken;
22329 exports.CaratToken = CaratToken;
22330 exports.BarToken = BarToken;
22331 exports.AmpersandToken = AmpersandToken;
22332 exports.AmpersandAmpersandToken = AmpersandAmpersandToken;
22333 exports.BarBarToken = BarBarToken;
22334 exports.QuestionToken = QuestionToken;
22335 exports.QuestionAsToken = QuestionAsToken;
22336 exports.QuestionColonToken = QuestionColonToken;
22337 exports.QuestionQuestionToken = QuestionQuestionToken;
22338 exports.QuestionQuestionEqualToken = QuestionQuestionEqualToken;
22339 exports.ColonToken = ColonToken;
22340 exports.SemicolonToken = SemicolonToken;
22341 exports.EqualToken = EqualToken;
22342 exports.StarStarEqualToken = StarStarEqualToken;
22343 exports.StarEqualToken = StarEqualToken;
22344 exports.SlashEqualToken = SlashEqualToken;
22345 exports.PercentEqualToken = PercentEqualToken;
22346 exports.PlusEqualToken = PlusEqualToken;
22347 exports.MinusEqualToken = MinusEqualToken;
22348 exports.DotEqualToken = DotEqualToken;
22349 exports.LessThanLessThanEqualToken = LessThanLessThanEqualToken;
22350 exports.GreaterThanGreaterThanEqualToken = GreaterThanGreaterThanEqualToken;
22351 exports.AmpersandEqualToken = AmpersandEqualToken;
22352 exports.CaratEqualToken = CaratEqualToken;
22353 exports.BarEqualToken = BarEqualToken;
22354 exports.CommaToken = CommaToken;
22355 exports.AtToken = AtToken;
22356 exports.ColonColonToken = ColonColonToken;
22357 exports.EqualGreaterThanToken = EqualGreaterThanToken;
22358 exports.EqualEqualGreaterThanToken = EqualEqualGreaterThanToken;
22359 exports.QuestionMinusGreaterThanToken = QuestionMinusGreaterThanToken;
22360 exports.DotDotDotToken = DotDotDotToken;
22361 exports.DollarDollarToken = DollarDollarToken;
22362 exports.BarGreaterThanToken = BarGreaterThanToken;
22363 exports.SlashGreaterThanToken = SlashGreaterThanToken;
22364 exports.LessThanSlashToken = LessThanSlashToken;
22365 exports.LessThanQuestionToken = LessThanQuestionToken;
22366 exports.QuestionGreaterThanToken = QuestionGreaterThanToken;
22367 exports.ColonAtToken = ColonAtToken;
22369 exports.ErrorTokenToken = ErrorTokenToken;
22370 exports.NameToken = NameToken;
22371 exports.VariableToken = VariableToken;
22372 exports.DecimalLiteralToken = DecimalLiteralToken;
22373 exports.OctalLiteralToken = OctalLiteralToken;
22374 exports.HexadecimalLiteralToken = HexadecimalLiteralToken;
22375 exports.BinaryLiteralToken = BinaryLiteralToken;
22376 exports.FloatingLiteralToken = FloatingLiteralToken;
22377 exports.SingleQuotedStringLiteralToken = SingleQuotedStringLiteralToken;
22378 exports.DoubleQuotedStringLiteralToken = DoubleQuotedStringLiteralToken;
22379 exports.DoubleQuotedStringLiteralHeadToken = DoubleQuotedStringLiteralHeadToken;
22380 exports.StringLiteralBodyToken = StringLiteralBodyToken;
22381 exports.DoubleQuotedStringLiteralTailToken = DoubleQuotedStringLiteralTailToken;
22382 exports.HeredocStringLiteralToken = HeredocStringLiteralToken;
22383 exports.HeredocStringLiteralHeadToken = HeredocStringLiteralHeadToken;
22384 exports.HeredocStringLiteralTailToken = HeredocStringLiteralTailToken;
22385 exports.NowdocStringLiteralToken = NowdocStringLiteralToken;
22386 exports.BooleanLiteralToken = BooleanLiteralToken;
22387 exports.XHPCategoryNameToken = XHPCategoryNameToken;
22388 exports.XHPElementNameToken = XHPElementNameToken;
22389 exports.XHPClassNameToken = XHPClassNameToken;
22390 exports.XHPStringLiteralToken = XHPStringLiteralToken;
22391 exports.XHPBodyToken = XHPBodyToken;
22392 exports.XHPCommentToken = XHPCommentToken;
22393 exports.MarkupToken = MarkupToken;
22395 exports.EditableTrivia = EditableTrivia;
22396 exports.WhiteSpace = WhiteSpace;
22397 exports.EndOfLine = EndOfLine;
22398 exports.DelimitedComment = DelimitedComment;
22399 exports.SingleLineComment = SingleLineComment;
22400 exports.Unsafe = Unsafe;
22401 exports.UnsafeExpression = UnsafeExpression;
22402 exports.FixMe = FixMe;
22403 exports.IgnoreError = IgnoreError;
22404 exports.FallThrough = FallThrough;
22405 exports.ExtraTokenError = ExtraTokenError;
22406 exports.AfterHaltCompiler = AfterHaltCompiler;
22408 exports.EndOfFile = EndOfFile;
22409 exports.Script = Script;
22410 exports.QualifiedName = QualifiedName;
22411 exports.SimpleTypeSpecifier = SimpleTypeSpecifier;
22412 exports.LiteralExpression = LiteralExpression;
22413 exports.PrefixedStringExpression = PrefixedStringExpression;
22414 exports.VariableExpression = VariableExpression;
22415 exports.PipeVariableExpression = PipeVariableExpression;
22416 exports.FileAttributeSpecification = FileAttributeSpecification;
22417 exports.EnumDeclaration = EnumDeclaration;
22418 exports.Enumerator = Enumerator;
22419 exports.AliasDeclaration = AliasDeclaration;
22420 exports.PropertyDeclaration = PropertyDeclaration;
22421 exports.PropertyDeclarator = PropertyDeclarator;
22422 exports.NamespaceDeclaration = NamespaceDeclaration;
22423 exports.NamespaceBody = NamespaceBody;
22424 exports.NamespaceEmptyBody = NamespaceEmptyBody;
22425 exports.NamespaceUseDeclaration = NamespaceUseDeclaration;
22426 exports.NamespaceGroupUseDeclaration = NamespaceGroupUseDeclaration;
22427 exports.NamespaceUseClause = NamespaceUseClause;
22428 exports.FunctionDeclaration = FunctionDeclaration;
22429 exports.FunctionDeclarationHeader = FunctionDeclarationHeader;
22430 exports.WhereClause = WhereClause;
22431 exports.WhereConstraint = WhereConstraint;
22432 exports.MethodishDeclaration = MethodishDeclaration;
22433 exports.MethodishTraitResolution = MethodishTraitResolution;
22434 exports.ClassishDeclaration = ClassishDeclaration;
22435 exports.ClassishBody = ClassishBody;
22436 exports.TraitUsePrecedenceItem = TraitUsePrecedenceItem;
22437 exports.TraitUseAliasItem = TraitUseAliasItem;
22438 exports.TraitUseConflictResolution = TraitUseConflictResolution;
22439 exports.TraitUse = TraitUse;
22440 exports.RequireClause = RequireClause;
22441 exports.ConstDeclaration = ConstDeclaration;
22442 exports.ConstantDeclarator = ConstantDeclarator;
22443 exports.TypeConstDeclaration = TypeConstDeclaration;
22444 exports.DecoratedExpression = DecoratedExpression;
22445 exports.ParameterDeclaration = ParameterDeclaration;
22446 exports.VariadicParameter = VariadicParameter;
22447 exports.AttributeSpecification = AttributeSpecification;
22448 exports.InclusionExpression = InclusionExpression;
22449 exports.InclusionDirective = InclusionDirective;
22450 exports.CompoundStatement = CompoundStatement;
22451 exports.AlternateLoopStatement = AlternateLoopStatement;
22452 exports.ExpressionStatement = ExpressionStatement;
22453 exports.MarkupSection = MarkupSection;
22454 exports.MarkupSuffix = MarkupSuffix;
22455 exports.UnsetStatement = UnsetStatement;
22456 exports.LetStatement = LetStatement;
22457 exports.UsingStatementBlockScoped = UsingStatementBlockScoped;
22458 exports.UsingStatementFunctionScoped = UsingStatementFunctionScoped;
22459 exports.DeclareDirectiveStatement = DeclareDirectiveStatement;
22460 exports.DeclareBlockStatement = DeclareBlockStatement;
22461 exports.WhileStatement = WhileStatement;
22462 exports.IfStatement = IfStatement;
22463 exports.ElseifClause = ElseifClause;
22464 exports.ElseClause = ElseClause;
22465 exports.AlternateIfStatement = AlternateIfStatement;
22466 exports.AlternateElseifClause = AlternateElseifClause;
22467 exports.AlternateElseClause = AlternateElseClause;
22468 exports.TryStatement = TryStatement;
22469 exports.CatchClause = CatchClause;
22470 exports.FinallyClause = FinallyClause;
22471 exports.DoStatement = DoStatement;
22472 exports.ForStatement = ForStatement;
22473 exports.ForeachStatement = ForeachStatement;
22474 exports.SwitchStatement = SwitchStatement;
22475 exports.AlternateSwitchStatement = AlternateSwitchStatement;
22476 exports.SwitchSection = SwitchSection;
22477 exports.SwitchFallthrough = SwitchFallthrough;
22478 exports.CaseLabel = CaseLabel;
22479 exports.DefaultLabel = DefaultLabel;
22480 exports.ReturnStatement = ReturnStatement;
22481 exports.GotoLabel = GotoLabel;
22482 exports.GotoStatement = GotoStatement;
22483 exports.ThrowStatement = ThrowStatement;
22484 exports.BreakStatement = BreakStatement;
22485 exports.ContinueStatement = ContinueStatement;
22486 exports.EchoStatement = EchoStatement;
22487 exports.GlobalStatement = GlobalStatement;
22488 exports.ConcurrentStatement = ConcurrentStatement;
22489 exports.SimpleInitializer = SimpleInitializer;
22490 exports.AnonymousClass = AnonymousClass;
22491 exports.AnonymousFunction = AnonymousFunction;
22492 exports.Php7AnonymousFunction = Php7AnonymousFunction;
22493 exports.AnonymousFunctionUseClause = AnonymousFunctionUseClause;
22494 exports.LambdaExpression = LambdaExpression;
22495 exports.LambdaSignature = LambdaSignature;
22496 exports.CastExpression = CastExpression;
22497 exports.ScopeResolutionExpression = ScopeResolutionExpression;
22498 exports.MemberSelectionExpression = MemberSelectionExpression;
22499 exports.SafeMemberSelectionExpression = SafeMemberSelectionExpression;
22500 exports.EmbeddedMemberSelectionExpression = EmbeddedMemberSelectionExpression;
22501 exports.YieldExpression = YieldExpression;
22502 exports.YieldFromExpression = YieldFromExpression;
22503 exports.PrefixUnaryExpression = PrefixUnaryExpression;
22504 exports.PostfixUnaryExpression = PostfixUnaryExpression;
22505 exports.BinaryExpression = BinaryExpression;
22506 exports.InstanceofExpression = InstanceofExpression;
22507 exports.IsExpression = IsExpression;
22508 exports.AsExpression = AsExpression;
22509 exports.NullableAsExpression = NullableAsExpression;
22510 exports.ConditionalExpression = ConditionalExpression;
22511 exports.EvalExpression = EvalExpression;
22512 exports.EmptyExpression = EmptyExpression;
22513 exports.DefineExpression = DefineExpression;
22514 exports.HaltCompilerExpression = HaltCompilerExpression;
22515 exports.IssetExpression = IssetExpression;
22516 exports.FunctionCallExpression = FunctionCallExpression;
22517 exports.FunctionCallWithTypeArgumentsExpression = FunctionCallWithTypeArgumentsExpression;
22518 exports.ParenthesizedExpression = ParenthesizedExpression;
22519 exports.BracedExpression = BracedExpression;
22520 exports.EmbeddedBracedExpression = EmbeddedBracedExpression;
22521 exports.ListExpression = ListExpression;
22522 exports.CollectionLiteralExpression = CollectionLiteralExpression;
22523 exports.ObjectCreationExpression = ObjectCreationExpression;
22524 exports.ConstructorCall = ConstructorCall;
22525 exports.ArrayCreationExpression = ArrayCreationExpression;
22526 exports.ArrayIntrinsicExpression = ArrayIntrinsicExpression;
22527 exports.DarrayIntrinsicExpression = DarrayIntrinsicExpression;
22528 exports.DictionaryIntrinsicExpression = DictionaryIntrinsicExpression;
22529 exports.KeysetIntrinsicExpression = KeysetIntrinsicExpression;
22530 exports.VarrayIntrinsicExpression = VarrayIntrinsicExpression;
22531 exports.VectorIntrinsicExpression = VectorIntrinsicExpression;
22532 exports.ElementInitializer = ElementInitializer;
22533 exports.SubscriptExpression = SubscriptExpression;
22534 exports.EmbeddedSubscriptExpression = EmbeddedSubscriptExpression;
22535 exports.AwaitableCreationExpression = AwaitableCreationExpression;
22536 exports.XHPChildrenDeclaration = XHPChildrenDeclaration;
22537 exports.XHPChildrenParenthesizedList = XHPChildrenParenthesizedList;
22538 exports.XHPCategoryDeclaration = XHPCategoryDeclaration;
22539 exports.XHPEnumType = XHPEnumType;
22540 exports.XHPRequired = XHPRequired;
22541 exports.XHPClassAttributeDeclaration = XHPClassAttributeDeclaration;
22542 exports.XHPClassAttribute = XHPClassAttribute;
22543 exports.XHPSimpleClassAttribute = XHPSimpleClassAttribute;
22544 exports.XHPSimpleAttribute = XHPSimpleAttribute;
22545 exports.XHPSpreadAttribute = XHPSpreadAttribute;
22546 exports.XHPOpen = XHPOpen;
22547 exports.XHPExpression = XHPExpression;
22548 exports.XHPClose = XHPClose;
22549 exports.TypeConstant = TypeConstant;
22550 exports.VectorTypeSpecifier = VectorTypeSpecifier;
22551 exports.KeysetTypeSpecifier = KeysetTypeSpecifier;
22552 exports.TupleTypeExplicitSpecifier = TupleTypeExplicitSpecifier;
22553 exports.VarrayTypeSpecifier = VarrayTypeSpecifier;
22554 exports.VectorArrayTypeSpecifier = VectorArrayTypeSpecifier;
22555 exports.TypeParameter = TypeParameter;
22556 exports.TypeConstraint = TypeConstraint;
22557 exports.DarrayTypeSpecifier = DarrayTypeSpecifier;
22558 exports.MapArrayTypeSpecifier = MapArrayTypeSpecifier;
22559 exports.DictionaryTypeSpecifier = DictionaryTypeSpecifier;
22560 exports.ClosureTypeSpecifier = ClosureTypeSpecifier;
22561 exports.ClosureParameterTypeSpecifier = ClosureParameterTypeSpecifier;
22562 exports.ClassnameTypeSpecifier = ClassnameTypeSpecifier;
22563 exports.FieldSpecifier = FieldSpecifier;
22564 exports.FieldInitializer = FieldInitializer;
22565 exports.ShapeTypeSpecifier = ShapeTypeSpecifier;
22566 exports.ShapeExpression = ShapeExpression;
22567 exports.TupleExpression = TupleExpression;
22568 exports.GenericTypeSpecifier = GenericTypeSpecifier;
22569 exports.NullableTypeSpecifier = NullableTypeSpecifier;
22570 exports.SoftTypeSpecifier = SoftTypeSpecifier;
22571 exports.ReifiedTypeArgument = ReifiedTypeArgument;
22572 exports.TypeArguments = TypeArguments;
22573 exports.TypeParameters = TypeParameters;
22574 exports.TupleTypeSpecifier = TupleTypeSpecifier;
22575 exports.ErrorSyntax = ErrorSyntax;
22576 exports.ListItem = ListItem;
22577 exports.PocketAtomExpression = PocketAtomExpression;
22578 exports.PocketIdentifierExpression = PocketIdentifierExpression;
22579 exports.PocketAtomMappingDeclaration = PocketAtomMappingDeclaration;
22580 exports.PocketEnumDeclaration = PocketEnumDeclaration;
22581 exports.PocketFieldTypeExprDeclaration = PocketFieldTypeExprDeclaration;
22582 exports.PocketFieldTypeDeclaration = PocketFieldTypeDeclaration;
22583 exports.PocketMappingIdDeclaration = PocketMappingIdDeclaration;
22584 exports.PocketMappingTypeDeclaration = PocketMappingTypeDeclaration;