3 * Copyright (c) 2016, Facebook, Inc.
6 * This source code is licensed under the BSD-style license found in the
7 * LICENSE file in the "hack" directory of this source tree. An additional
8 * grant of patent rights can be found in the PATENTS file in the same
13 * THIS FILE IS @generated; DO NOT EDIT IT
14 * To regenerate this file, run
16 * buck run //hphp/hack/src:generate_full_fidelity
22 require_once 'full_fidelity_parser.php';
24 abstract class EditableSyntax
implements ArrayAccess
{
25 private string $_syntax_kind;
26 protected ?
int $_width;
27 public function __construct(string $syntax_kind) {
28 $this->_syntax_kind
= $syntax_kind;
31 public function offsetExists (mixed $offset): bool {
35 public function offsetGet (mixed $offset): mixed {
39 public function offsetSet (mixed $offset, mixed $value): void
{
42 public function offsetUnset (mixed $offset): void
{
45 public function syntax_kind(): string {
46 return $this->_syntax_kind
;
49 public abstract function children():
50 Generator
<string, EditableSyntax
, void
>;
52 public function preorder(): Continuation
<EditableSyntax
> {
54 foreach($this->children() as $name => $child)
55 foreach($child->preorder() as $descendant)
59 private function _parented_preorder(array<EditableSyntax
> $parents):
60 Continuation
<(EditableSyntax
, array<EditableSyntax
>)> {
61 $new_parents = $parents;
62 array_push($new_parents, $this);
63 yield
tuple($this, $parents);
64 foreach($this->children() as $name => $child)
65 foreach($child->_parented_preorder($new_parents) as $descendant)
69 public function parented_preorder():
70 Continuation
<(EditableSyntax
, array<EditableSyntax
>)> {
71 return $this->_parented_preorder([]);
74 public function postorder(): Continuation
<EditableSyntax
> {
75 foreach($this->children() as $name => $child)
76 foreach($child->preorder() as $descendant)
81 public function is_token(): bool {
85 public function is_trivia(): bool {
89 public function is_list(): bool {
93 public function is_missing(): bool {
97 public function width(): int {
98 if ($this->_width
=== null) {
100 /* TODO: Make an accumulation sequence operator */
101 foreach ($this->children() as $name => $node) {
102 $width +
= $node->width();
104 $this->_width
= $width;
107 return $this->_width
;
111 public function full_text(): string {
112 /* TODO: Make an accumulation sequence operator */
114 foreach ($this->children() as $name => $node) {
115 $s .= $node->full_text();
120 public static function from_json(mixed $json, int $position, string $source) {
121 switch($json->kind
) {
123 return EditableToken
::from_json($json->token
, $position, $source);
125 return EditableList
::from_json($json, $position, $source);
127 return WhiteSpace
::from_json($json, $position, $source);
129 return EndOfLine
::from_json($json, $position, $source);
130 case 'delimited_comment':
131 return DelimitedComment
::from_json($json, $position, $source);
132 case 'single_line_comment':
133 return SingleLineComment
::from_json($json, $position, $source);
135 return Unsafe
::from_json($json, $position, $source);
136 case 'unsafe_expression':
137 return UnsafeExpression
::from_json($json, $position, $source);
139 return FixMe
::from_json($json, $position, $source);
141 return IgnoreError
::from_json($json, $position, $source);
143 return FallThrough
::from_json($json, $position, $source);
144 case 'extra_token_error':
145 return ExtraTokenError
::from_json($json, $position, $source);
146 case 'after_halt_compiler':
147 return AfterHaltCompiler
::from_json($json, $position, $source);
150 return Missing
::missing();
152 return EndOfFile
::from_json($json, $position, $source);
154 return Script
::from_json($json, $position, $source);
155 case 'simple_type_specifier':
156 return SimpleTypeSpecifier
::from_json($json, $position, $source);
158 return LiteralExpression
::from_json($json, $position, $source);
160 return VariableExpression
::from_json($json, $position, $source);
161 case 'qualified_name':
162 return QualifiedNameExpression
::from_json($json, $position, $source);
163 case 'pipe_variable':
164 return PipeVariableExpression
::from_json($json, $position, $source);
165 case 'enum_declaration':
166 return EnumDeclaration
::from_json($json, $position, $source);
168 return Enumerator
::from_json($json, $position, $source);
169 case 'alias_declaration':
170 return AliasDeclaration
::from_json($json, $position, $source);
171 case 'property_declaration':
172 return PropertyDeclaration
::from_json($json, $position, $source);
173 case 'property_declarator':
174 return PropertyDeclarator
::from_json($json, $position, $source);
175 case 'namespace_declaration':
176 return NamespaceDeclaration
::from_json($json, $position, $source);
177 case 'namespace_body':
178 return NamespaceBody
::from_json($json, $position, $source);
179 case 'namespace_empty_body':
180 return NamespaceEmptyBody
::from_json($json, $position, $source);
181 case 'namespace_use_declaration':
182 return NamespaceUseDeclaration
::from_json($json, $position, $source);
183 case 'namespace_group_use_declaration':
184 return NamespaceGroupUseDeclaration
::from_json($json, $position, $source);
185 case 'namespace_use_clause':
186 return NamespaceUseClause
::from_json($json, $position, $source);
187 case 'function_declaration':
188 return FunctionDeclaration
::from_json($json, $position, $source);
189 case 'function_declaration_header':
190 return FunctionDeclarationHeader
::from_json($json, $position, $source);
192 return WhereClause
::from_json($json, $position, $source);
193 case 'where_constraint':
194 return WhereConstraint
::from_json($json, $position, $source);
195 case 'methodish_declaration':
196 return MethodishDeclaration
::from_json($json, $position, $source);
197 case 'classish_declaration':
198 return ClassishDeclaration
::from_json($json, $position, $source);
199 case 'classish_body':
200 return ClassishBody
::from_json($json, $position, $source);
201 case 'trait_use_precedence_item':
202 return TraitUsePrecedenceItem
::from_json($json, $position, $source);
203 case 'trait_use_alias_item':
204 return TraitUseAliasItem
::from_json($json, $position, $source);
205 case 'trait_use_conflict_resolution':
206 return TraitUseConflictResolution
::from_json($json, $position, $source);
208 return TraitUse
::from_json($json, $position, $source);
209 case 'require_clause':
210 return RequireClause
::from_json($json, $position, $source);
211 case 'const_declaration':
212 return ConstDeclaration
::from_json($json, $position, $source);
213 case 'constant_declarator':
214 return ConstantDeclarator
::from_json($json, $position, $source);
215 case 'type_const_declaration':
216 return TypeConstDeclaration
::from_json($json, $position, $source);
217 case 'decorated_expression':
218 return DecoratedExpression
::from_json($json, $position, $source);
219 case 'parameter_declaration':
220 return ParameterDeclaration
::from_json($json, $position, $source);
221 case 'variadic_parameter':
222 return VariadicParameter
::from_json($json, $position, $source);
223 case 'attribute_specification':
224 return AttributeSpecification
::from_json($json, $position, $source);
226 return Attribute
::from_json($json, $position, $source);
227 case 'inclusion_expression':
228 return InclusionExpression
::from_json($json, $position, $source);
229 case 'inclusion_directive':
230 return InclusionDirective
::from_json($json, $position, $source);
231 case 'compound_statement':
232 return CompoundStatement
::from_json($json, $position, $source);
233 case 'expression_statement':
234 return ExpressionStatement
::from_json($json, $position, $source);
235 case 'markup_section':
236 return MarkupSection
::from_json($json, $position, $source);
237 case 'markup_suffix':
238 return MarkupSuffix
::from_json($json, $position, $source);
239 case 'unset_statement':
240 return UnsetStatement
::from_json($json, $position, $source);
241 case 'using_statement_block_scoped':
242 return UsingStatementBlockScoped
::from_json($json, $position, $source);
243 case 'using_statement_function_scoped':
244 return UsingStatementFunctionScoped
::from_json($json, $position, $source);
245 case 'declare_directive_statement':
246 return DeclareDirectiveStatement
::from_json($json, $position, $source);
247 case 'declare_block_statement':
248 return DeclareBlockStatement
::from_json($json, $position, $source);
249 case 'while_statement':
250 return WhileStatement
::from_json($json, $position, $source);
252 return IfStatement
::from_json($json, $position, $source);
253 case 'elseif_clause':
254 return ElseifClause
::from_json($json, $position, $source);
256 return ElseClause
::from_json($json, $position, $source);
257 case 'if_endif_statement':
258 return IfEndIfStatement
::from_json($json, $position, $source);
259 case 'elseif_colon_clause':
260 return ElseifColonClause
::from_json($json, $position, $source);
261 case 'else_colon_clause':
262 return ElseColonClause
::from_json($json, $position, $source);
263 case 'try_statement':
264 return TryStatement
::from_json($json, $position, $source);
266 return CatchClause
::from_json($json, $position, $source);
267 case 'finally_clause':
268 return FinallyClause
::from_json($json, $position, $source);
270 return DoStatement
::from_json($json, $position, $source);
271 case 'for_statement':
272 return ForStatement
::from_json($json, $position, $source);
273 case 'foreach_statement':
274 return ForeachStatement
::from_json($json, $position, $source);
275 case 'switch_statement':
276 return SwitchStatement
::from_json($json, $position, $source);
277 case 'switch_section':
278 return SwitchSection
::from_json($json, $position, $source);
279 case 'switch_fallthrough':
280 return SwitchFallthrough
::from_json($json, $position, $source);
282 return CaseLabel
::from_json($json, $position, $source);
283 case 'default_label':
284 return DefaultLabel
::from_json($json, $position, $source);
285 case 'return_statement':
286 return ReturnStatement
::from_json($json, $position, $source);
288 return GotoLabel
::from_json($json, $position, $source);
289 case 'goto_statement':
290 return GotoStatement
::from_json($json, $position, $source);
291 case 'throw_statement':
292 return ThrowStatement
::from_json($json, $position, $source);
293 case 'break_statement':
294 return BreakStatement
::from_json($json, $position, $source);
295 case 'continue_statement':
296 return ContinueStatement
::from_json($json, $position, $source);
297 case 'function_static_statement':
298 return FunctionStaticStatement
::from_json($json, $position, $source);
299 case 'static_declarator':
300 return StaticDeclarator
::from_json($json, $position, $source);
301 case 'echo_statement':
302 return EchoStatement
::from_json($json, $position, $source);
303 case 'global_statement':
304 return GlobalStatement
::from_json($json, $position, $source);
305 case 'simple_initializer':
306 return SimpleInitializer
::from_json($json, $position, $source);
307 case 'anonymous_class':
308 return AnonymousClass
::from_json($json, $position, $source);
309 case 'anonymous_function':
310 return AnonymousFunction
::from_json($json, $position, $source);
311 case 'php7_anonymous_function':
312 return Php7AnonymousFunction
::from_json($json, $position, $source);
313 case 'anonymous_function_use_clause':
314 return AnonymousFunctionUseClause
::from_json($json, $position, $source);
315 case 'lambda_expression':
316 return LambdaExpression
::from_json($json, $position, $source);
317 case 'lambda_signature':
318 return LambdaSignature
::from_json($json, $position, $source);
319 case 'cast_expression':
320 return CastExpression
::from_json($json, $position, $source);
321 case 'scope_resolution_expression':
322 return ScopeResolutionExpression
::from_json($json, $position, $source);
323 case 'member_selection_expression':
324 return MemberSelectionExpression
::from_json($json, $position, $source);
325 case 'safe_member_selection_expression':
326 return SafeMemberSelectionExpression
::from_json($json, $position, $source);
327 case 'embedded_member_selection_expression':
328 return EmbeddedMemberSelectionExpression
::from_json($json, $position, $source);
329 case 'yield_expression':
330 return YieldExpression
::from_json($json, $position, $source);
331 case 'yield_from_expression':
332 return YieldFromExpression
::from_json($json, $position, $source);
333 case 'prefix_unary_expression':
334 return PrefixUnaryExpression
::from_json($json, $position, $source);
335 case 'postfix_unary_expression':
336 return PostfixUnaryExpression
::from_json($json, $position, $source);
337 case 'binary_expression':
338 return BinaryExpression
::from_json($json, $position, $source);
339 case 'instanceof_expression':
340 return InstanceofExpression
::from_json($json, $position, $source);
341 case 'is_expression':
342 return IsExpression
::from_json($json, $position, $source);
343 case 'conditional_expression':
344 return ConditionalExpression
::from_json($json, $position, $source);
345 case 'eval_expression':
346 return EvalExpression
::from_json($json, $position, $source);
347 case 'empty_expression':
348 return EmptyExpression
::from_json($json, $position, $source);
349 case 'define_expression':
350 return DefineExpression
::from_json($json, $position, $source);
351 case 'halt_compiler_expression':
352 return HaltCompilerExpression
::from_json($json, $position, $source);
353 case 'isset_expression':
354 return IssetExpression
::from_json($json, $position, $source);
355 case 'function_call_expression':
356 return FunctionCallExpression
::from_json($json, $position, $source);
357 case 'function_call_with_type_arguments_expression':
358 return FunctionCallWithTypeArgumentsExpression
::from_json($json, $position, $source);
359 case 'parenthesized_expression':
360 return ParenthesizedExpression
::from_json($json, $position, $source);
361 case 'braced_expression':
362 return BracedExpression
::from_json($json, $position, $source);
363 case 'embedded_braced_expression':
364 return EmbeddedBracedExpression
::from_json($json, $position, $source);
365 case 'list_expression':
366 return ListExpression
::from_json($json, $position, $source);
367 case 'collection_literal_expression':
368 return CollectionLiteralExpression
::from_json($json, $position, $source);
369 case 'object_creation_expression':
370 return ObjectCreationExpression
::from_json($json, $position, $source);
371 case 'constructor_call':
372 return ConstructorCall
::from_json($json, $position, $source);
373 case 'array_creation_expression':
374 return ArrayCreationExpression
::from_json($json, $position, $source);
375 case 'array_intrinsic_expression':
376 return ArrayIntrinsicExpression
::from_json($json, $position, $source);
377 case 'darray_intrinsic_expression':
378 return DarrayIntrinsicExpression
::from_json($json, $position, $source);
379 case 'dictionary_intrinsic_expression':
380 return DictionaryIntrinsicExpression
::from_json($json, $position, $source);
381 case 'keyset_intrinsic_expression':
382 return KeysetIntrinsicExpression
::from_json($json, $position, $source);
383 case 'varray_intrinsic_expression':
384 return VarrayIntrinsicExpression
::from_json($json, $position, $source);
385 case 'vector_intrinsic_expression':
386 return VectorIntrinsicExpression
::from_json($json, $position, $source);
387 case 'element_initializer':
388 return ElementInitializer
::from_json($json, $position, $source);
389 case 'subscript_expression':
390 return SubscriptExpression
::from_json($json, $position, $source);
391 case 'embedded_subscript_expression':
392 return EmbeddedSubscriptExpression
::from_json($json, $position, $source);
393 case 'awaitable_creation_expression':
394 return AwaitableCreationExpression
::from_json($json, $position, $source);
395 case 'xhp_children_declaration':
396 return XHPChildrenDeclaration
::from_json($json, $position, $source);
397 case 'xhp_children_parenthesized_list':
398 return XHPChildrenParenthesizedList
::from_json($json, $position, $source);
399 case 'xhp_category_declaration':
400 return XHPCategoryDeclaration
::from_json($json, $position, $source);
401 case 'xhp_enum_type':
402 return XHPEnumType
::from_json($json, $position, $source);
404 return XHPRequired
::from_json($json, $position, $source);
405 case 'xhp_class_attribute_declaration':
406 return XHPClassAttributeDeclaration
::from_json($json, $position, $source);
407 case 'xhp_class_attribute':
408 return XHPClassAttribute
::from_json($json, $position, $source);
409 case 'xhp_simple_class_attribute':
410 return XHPSimpleClassAttribute
::from_json($json, $position, $source);
411 case 'xhp_simple_attribute':
412 return XHPSimpleAttribute
::from_json($json, $position, $source);
413 case 'xhp_spread_attribute':
414 return XHPSpreadAttribute
::from_json($json, $position, $source);
416 return XHPOpen
::from_json($json, $position, $source);
417 case 'xhp_expression':
418 return XHPExpression
::from_json($json, $position, $source);
420 return XHPClose
::from_json($json, $position, $source);
421 case 'type_constant':
422 return TypeConstant
::from_json($json, $position, $source);
423 case 'vector_type_specifier':
424 return VectorTypeSpecifier
::from_json($json, $position, $source);
425 case 'keyset_type_specifier':
426 return KeysetTypeSpecifier
::from_json($json, $position, $source);
427 case 'tuple_type_explicit_specifier':
428 return TupleTypeExplicitSpecifier
::from_json($json, $position, $source);
429 case 'varray_type_specifier':
430 return VarrayTypeSpecifier
::from_json($json, $position, $source);
431 case 'vector_array_type_specifier':
432 return VectorArrayTypeSpecifier
::from_json($json, $position, $source);
433 case 'type_parameter':
434 return TypeParameter
::from_json($json, $position, $source);
435 case 'type_constraint':
436 return TypeConstraint
::from_json($json, $position, $source);
437 case 'darray_type_specifier':
438 return DarrayTypeSpecifier
::from_json($json, $position, $source);
439 case 'map_array_type_specifier':
440 return MapArrayTypeSpecifier
::from_json($json, $position, $source);
441 case 'dictionary_type_specifier':
442 return DictionaryTypeSpecifier
::from_json($json, $position, $source);
443 case 'closure_type_specifier':
444 return ClosureTypeSpecifier
::from_json($json, $position, $source);
445 case 'closure_parameter_type_specifier':
446 return ClosureParameterTypeSpecifier
::from_json($json, $position, $source);
447 case 'classname_type_specifier':
448 return ClassnameTypeSpecifier
::from_json($json, $position, $source);
449 case 'field_specifier':
450 return FieldSpecifier
::from_json($json, $position, $source);
451 case 'field_initializer':
452 return FieldInitializer
::from_json($json, $position, $source);
453 case 'shape_type_specifier':
454 return ShapeTypeSpecifier
::from_json($json, $position, $source);
455 case 'shape_expression':
456 return ShapeExpression
::from_json($json, $position, $source);
457 case 'tuple_expression':
458 return TupleExpression
::from_json($json, $position, $source);
459 case 'generic_type_specifier':
460 return GenericTypeSpecifier
::from_json($json, $position, $source);
461 case 'nullable_type_specifier':
462 return NullableTypeSpecifier
::from_json($json, $position, $source);
463 case 'soft_type_specifier':
464 return SoftTypeSpecifier
::from_json($json, $position, $source);
465 case 'type_arguments':
466 return TypeArguments
::from_json($json, $position, $source);
467 case 'type_parameters':
468 return TypeParameters
::from_json($json, $position, $source);
469 case 'tuple_type_specifier':
470 return TupleTypeSpecifier
::from_json($json, $position, $source);
472 return ErrorSyntax
::from_json($json, $position, $source);
474 return ListItem
::from_json($json, $position, $source);
477 throw new Exception('unexpected json kind: ' . $json->kind
);
478 // TODO: Better exception
482 public function to_array(): array<EditableSyntax
> {
486 public function reduce
<TAccumulator
>(
490 array<EditableSyntax
>): TAccumulator
) $reducer,
491 TAccumulator
$accumulator,
492 ?
array<EditableSyntax
> $parents = null): TAccumulator
{
493 $new_parents = $parents ??
[];
494 array_push($new_parents, $this);
495 foreach($this->children() as $child) {
496 $accumulator = $child->reduce($reducer, $accumulator, $new_parents);
498 return $reducer($this, $accumulator, $parents ??
[]);
501 // Returns all the parents (and the node itself) of the first node
502 // that matches a predicate, or [] if there is no such node.
503 public function find_with_parents(
504 (function(EditableSyntax
):bool) $predicate,
505 ?
array<EditableSyntax
> $parents = null): array<EditableSyntax
> {
506 $new_parents = $parents ??
[];
507 array_push($new_parents, $this);
508 if ($predicate($this))
510 foreach($this->children() as $child) {
511 $result = $child->find_with_parents($predicate, $new_parents);
512 if (count($result) != 0)
518 // Returns a list of nodes that match a predicate.
519 public function filter(
520 (function(EditableSyntax
, ?
array<EditableSyntax
>):bool) $predicate):
521 array<EditableSyntax
> {
522 $reducer = ($node, $acc, $parents) ==> {
523 if ($predicate($node, $parents))
524 array_push($acc, $node);
527 return $this->reduce($reducer, []);
530 public function of_syntax_kind(string $kind): Continuation
<EditableSyntax
> {
531 foreach($this->preorder() as $child)
532 if ($child->syntax_kind() === $kind)
536 public function remove_where(
537 (function(EditableSyntax
, ?
array<EditableSyntax
>):bool) $predicate):
538 array<EditableSyntax
> {
539 return $this->rewrite(
540 ($node, $parents) ==>
541 $predicate($node, $parents) ? Missing
::missing() : $node);
544 public function without(EditableSyntax
$target): EditableSyntax
{
545 return $this->remove_where(($node, $parents) ==> $node === $target);
548 public function replace(
549 EditableSyntax
$new_node,
550 EditableSyntax
$target): EditableSyntax
{
551 return $this->rewrite(
552 ($node, $parents) ==> $node === $target ?
$new_node : $node);
555 public function leftmost_token(): ?EditableSyntax
{
556 if ($this->is_token())
558 foreach($this->children() as $child)
560 if (!$child->is_missing())
561 return $child->leftmost_token();
566 public function rightmost_token(): ?EditableSyntax
{
567 if ($this->is_token())
570 // TODO: Better way to reverse a sequence?
571 foreach (array_reverse(iterator_to_array($this->children())) as $child) {
572 if (!$child->is_missing())
573 return $child->rightmost_token();
578 public function insert_before(
579 EditableSyntax
$new_node,
580 EditableSyntax
$target): EditableSyntax
{
581 // Inserting before missing is an error.
582 if ($target->is_missing())
583 throw new Exception('Target must not be missing in insert_before.');
585 // Inserting missing is a no-op
586 if ($new_node->is_missing())
589 if ($new_node->is_trivia() && !$target->is_trivia()) {
590 $token = $target->is_token() ?
$target : $target->leftmost_token();
592 throw new Exception('Unable to find token to insert trivia.');
594 // Inserting trivia before token is inserting to the right end of
595 // the leading trivia.
596 $new_leading = EditableList
::concatenate_lists(
597 $token->leading(), $new_node);
598 $new_token = $token->with_leading($new_leading);
599 return $this->replace($new_token, $token);
602 return $this->replace(
603 EditableList
::concatenate_lists($new_node, $target), $target);
606 public function insert_after(
607 EditableSyntax
$new_node,
608 EditableSyntax
$target): EditableSyntax
{
610 // Inserting after missing is an error.
611 if ($target->is_missing())
612 throw new Exception('Target must not be missing in insert_after.');
614 // Inserting missing is a no-op
615 if ($new_node->is_missing())
618 if ($new_node->is_trivia() && !$target->is_trivia()) {
619 $token = $target->is_token() ?
$target : $target->rightmost_token();
621 throw new Exception('Unable to find token to insert trivia.');
623 // Inserting trivia after token is inserting to the left end of
624 // the trailing trivia.
625 $new_trailing = EditableList
::concatenate_lists(
626 $new_node, $token->trailing());
627 $new_token = $token->with_trailing($new_trailing);
628 return $this->replace($new_token, $token);
631 return $this->replace(
632 EditableSyntax
::concatenate_lists($target, $new_node), $target);
636 final class EditableList
extends EditableSyntax
implements ArrayAccess
{
637 private array<EditableSyntax
> $_children;
638 public function __construct(array<EditableSyntax
> $children) {
639 parent
::__construct('list');
640 $this->_children
= $children;
643 public function offsetExists(mixed $offset): bool {
644 return array_key_exists($offset, $this->_children
);
647 public function offsetGet(mixed $offset): mixed {
648 return $this->_children
[$offset];
651 public function offsetSet(mixed $offset, mixed $value): void
{
654 public function offsetUnset(mixed $offset): void
{
657 public function is_list(): bool {
661 public function to_array(): array<EditableSyntax
> {
662 return $this->_children
;
665 public function children(): Generator
<string, EditableSyntax
, void
> {
666 foreach($this->_children
as $key => $node)
670 /* TODO: Getter by index? */
672 public static function to_list(
673 array<EditableSyntax
> $syntax_list): EditableSyntax
{
674 if (count($syntax_list) === 0)
675 return Missing
::missing();
677 return new EditableList($syntax_list);
680 public static function concatenate_lists(
681 EditableSyntax
$left,
682 EditableSyntax
$right): EditableSyntax
{
683 if ($left->is_missing())
685 if ($right->is_missing())
687 return new EditableList(
688 array_merge($left->to_array(), $right->to_array()));
691 public static function from_json(mixed $json, int $position, string $source) {
692 // TODO Implement array map
694 $current_position = $position;
695 foreach($json->elements
as $element)
697 $child = EditableSyntax
::from_json($element, $current_position, $source);
698 array_push($children, $child);
699 $current_position +
= $child->width();
701 return new EditableList($children);
704 public function rewrite(
706 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
707 ?
array<EditableSyntax
> $parents = null): EditableSyntax
{
710 $new_parents = $parents ??
[];
711 array_push($new_parents, $this);
712 foreach ($this->children() as $child)
714 $new_child = $child->rewrite($rewriter, $new_parents);
715 if ($new_child != $child)
717 if ($new_child != null)
719 if ($new_child->is_list())
721 foreach($new_child->children() as $n)
722 array_push($new_children, $n);
725 array_push($new_children, $new_child);
730 if (count($new_children) === 0)
731 $result = Missing
::missing();
732 else if (count($new_children) === 1)
733 $result = $new_children[0];
735 $result = new EditableList($new_children);
737 return $rewriter($result, $parents ??
[]);
741 abstract class EditableToken
extends EditableSyntax
{
742 private string $_token_kind;
743 private EditableSyntax
$_leading;
744 private EditableSyntax
$_trailing;
746 public function __construct(
748 EditableSyntax
$leading,
749 EditableSyntax
$trailing,
751 parent
::__construct('token');
752 $this->_token_kind
= $token_kind;
753 $this->_text
= $text;
754 $this->_leading
= $leading;
755 $this->_trailing
= $trailing;
756 $this->_width
= strlen($text) +
757 $leading->width() +
$trailing->width();
760 public function token_kind(): string {
761 return $this->_token_kind
;
764 public function text(): string {
768 public function leading(): EditableSyntax
{
769 return $this->_leading
;
772 public function trailing(): EditableSyntax
{
773 return $this->_trailing
;
776 public function children(): Generator
<string, EditableSyntax
, void
> {
777 yield
'leading' => $this->leading();
778 yield
'trailing' => $this->trailing();
781 public function is_token(): bool {
785 public function full_text(): string {
786 return $this->leading()->full_text() .
788 $this->trailing()->full_text();
791 public abstract function with_leading(
792 EditableSyntax
$leading): EditableToken
;
794 public abstract function with_trailing(
795 EditableSyntax
$trailing): EditableToken
;
797 private static function factory(
799 EditableSyntax
$leading,
800 EditableSyntax
$trailing,
801 string $token_text) {
802 switch($token_kind) {
804 return new EndOfFileToken($leading, $trailing);
807 return new AbstractToken($leading, $trailing);
809 return new AndToken($leading, $trailing);
811 return new ArrayToken($leading, $trailing);
813 return new ArraykeyToken($leading, $trailing);
815 return new AsToken($leading, $trailing);
817 return new AsyncToken($leading, $trailing);
819 return new AttributeToken($leading, $trailing);
821 return new AwaitToken($leading, $trailing);
823 return new BoolToken($leading, $trailing);
825 return new BreakToken($leading, $trailing);
827 return new CaseToken($leading, $trailing);
829 return new CatchToken($leading, $trailing);
831 return new CategoryToken($leading, $trailing);
833 return new ChildrenToken($leading, $trailing);
835 return new ClassToken($leading, $trailing);
837 return new ClassnameToken($leading, $trailing);
839 return new CloneToken($leading, $trailing);
841 return new ConstToken($leading, $trailing);
843 return new ConstructToken($leading, $trailing);
845 return new ContinueToken($leading, $trailing);
847 return new CoroutineToken($leading, $trailing);
849 return new DarrayToken($leading, $trailing);
851 return new DeclareToken($leading, $trailing);
853 return new DefaultToken($leading, $trailing);
855 return new DefineToken($leading, $trailing);
857 return new DestructToken($leading, $trailing);
859 return new DictToken($leading, $trailing);
861 return new DoToken($leading, $trailing);
863 return new DoubleToken($leading, $trailing);
865 return new EchoToken($leading, $trailing);
867 return new ElseToken($leading, $trailing);
869 return new ElseifToken($leading, $trailing);
871 return new EmptyToken($leading, $trailing);
873 return new EndifToken($leading, $trailing);
875 return new EnumToken($leading, $trailing);
877 return new EvalToken($leading, $trailing);
879 return new ExtendsToken($leading, $trailing);
881 return new FallthroughToken($leading, $trailing);
883 return new FloatToken($leading, $trailing);
885 return new FinalToken($leading, $trailing);
887 return new FinallyToken($leading, $trailing);
889 return new ForToken($leading, $trailing);
891 return new ForeachToken($leading, $trailing);
893 return new FromToken($leading, $trailing);
895 return new FunctionToken($leading, $trailing);
897 return new GlobalToken($leading, $trailing);
899 return new GotoToken($leading, $trailing);
901 return new IfToken($leading, $trailing);
903 return new ImplementsToken($leading, $trailing);
905 return new IncludeToken($leading, $trailing);
907 return new Include_onceToken($leading, $trailing);
909 return new InoutToken($leading, $trailing);
911 return new InstanceofToken($leading, $trailing);
913 return new InsteadofToken($leading, $trailing);
915 return new IntToken($leading, $trailing);
917 return new InterfaceToken($leading, $trailing);
919 return new IsToken($leading, $trailing);
921 return new IssetToken($leading, $trailing);
923 return new KeysetToken($leading, $trailing);
925 return new ListToken($leading, $trailing);
927 return new MixedToken($leading, $trailing);
929 return new NamespaceToken($leading, $trailing);
931 return new NewToken($leading, $trailing);
933 return new NewtypeToken($leading, $trailing);
935 return new NoreturnToken($leading, $trailing);
937 return new NumToken($leading, $trailing);
939 return new ObjectToken($leading, $trailing);
941 return new OrToken($leading, $trailing);
943 return new ParentToken($leading, $trailing);
945 return new PrintToken($leading, $trailing);
947 return new PrivateToken($leading, $trailing);
949 return new ProtectedToken($leading, $trailing);
951 return new PublicToken($leading, $trailing);
953 return new RequireToken($leading, $trailing);
955 return new Require_onceToken($leading, $trailing);
957 return new RequiredToken($leading, $trailing);
959 return new ResourceToken($leading, $trailing);
961 return new ReturnToken($leading, $trailing);
963 return new SelfToken($leading, $trailing);
965 return new ShapeToken($leading, $trailing);
967 return new StaticToken($leading, $trailing);
969 return new StringToken($leading, $trailing);
971 return new SuperToken($leading, $trailing);
973 return new SuspendToken($leading, $trailing);
975 return new SwitchToken($leading, $trailing);
977 return new ThisToken($leading, $trailing);
979 return new ThrowToken($leading, $trailing);
981 return new TraitToken($leading, $trailing);
983 return new TryToken($leading, $trailing);
985 return new TupleToken($leading, $trailing);
987 return new TypeToken($leading, $trailing);
989 return new UnsetToken($leading, $trailing);
991 return new UseToken($leading, $trailing);
993 return new UsingToken($leading, $trailing);
995 return new VarToken($leading, $trailing);
997 return new VarrayToken($leading, $trailing);
999 return new VecToken($leading, $trailing);
1001 return new VoidToken($leading, $trailing);
1003 return new WhereToken($leading, $trailing);
1005 return new WhileToken($leading, $trailing);
1007 return new XorToken($leading, $trailing);
1009 return new YieldToken($leading, $trailing);
1011 return new LeftBracketToken($leading, $trailing);
1013 return new RightBracketToken($leading, $trailing);
1015 return new LeftParenToken($leading, $trailing);
1017 return new RightParenToken($leading, $trailing);
1019 return new LeftBraceToken($leading, $trailing);
1021 return new RightBraceToken($leading, $trailing);
1023 return new DotToken($leading, $trailing);
1025 return new MinusGreaterThanToken($leading, $trailing);
1027 return new PlusPlusToken($leading, $trailing);
1029 return new MinusMinusToken($leading, $trailing);
1031 return new StarStarToken($leading, $trailing);
1033 return new StarToken($leading, $trailing);
1035 return new PlusToken($leading, $trailing);
1037 return new MinusToken($leading, $trailing);
1039 return new TildeToken($leading, $trailing);
1041 return new ExclamationToken($leading, $trailing);
1043 return new DollarToken($leading, $trailing);
1045 return new SlashToken($leading, $trailing);
1047 return new PercentToken($leading, $trailing);
1049 return new LessThanGreaterThanToken($leading, $trailing);
1051 return new LessThanEqualGreaterThanToken($leading, $trailing);
1053 return new LessThanLessThanToken($leading, $trailing);
1055 return new GreaterThanGreaterThanToken($leading, $trailing);
1057 return new LessThanToken($leading, $trailing);
1059 return new GreaterThanToken($leading, $trailing);
1061 return new LessThanEqualToken($leading, $trailing);
1063 return new GreaterThanEqualToken($leading, $trailing);
1065 return new EqualEqualToken($leading, $trailing);
1067 return new EqualEqualEqualToken($leading, $trailing);
1069 return new ExclamationEqualToken($leading, $trailing);
1071 return new ExclamationEqualEqualToken($leading, $trailing);
1073 return new CaratToken($leading, $trailing);
1075 return new BarToken($leading, $trailing);
1077 return new AmpersandToken($leading, $trailing);
1079 return new AmpersandAmpersandToken($leading, $trailing);
1081 return new BarBarToken($leading, $trailing);
1083 return new QuestionToken($leading, $trailing);
1085 return new QuestionColonToken($leading, $trailing);
1087 return new QuestionQuestionToken($leading, $trailing);
1089 return new ColonToken($leading, $trailing);
1091 return new SemicolonToken($leading, $trailing);
1093 return new EqualToken($leading, $trailing);
1095 return new StarStarEqualToken($leading, $trailing);
1097 return new StarEqualToken($leading, $trailing);
1099 return new SlashEqualToken($leading, $trailing);
1101 return new PercentEqualToken($leading, $trailing);
1103 return new PlusEqualToken($leading, $trailing);
1105 return new MinusEqualToken($leading, $trailing);
1107 return new DotEqualToken($leading, $trailing);
1109 return new LessThanLessThanEqualToken($leading, $trailing);
1111 return new GreaterThanGreaterThanEqualToken($leading, $trailing);
1113 return new AmpersandEqualToken($leading, $trailing);
1115 return new CaratEqualToken($leading, $trailing);
1117 return new BarEqualToken($leading, $trailing);
1119 return new CommaToken($leading, $trailing);
1121 return new AtToken($leading, $trailing);
1123 return new ColonColonToken($leading, $trailing);
1125 return new EqualGreaterThanToken($leading, $trailing);
1127 return new EqualEqualGreaterThanToken($leading, $trailing);
1129 return new QuestionMinusGreaterThanToken($leading, $trailing);
1131 return new DotDotDotToken($leading, $trailing);
1133 return new DollarDollarToken($leading, $trailing);
1135 return new BarGreaterThanToken($leading, $trailing);
1137 return new NullLiteralToken($leading, $trailing);
1139 return new SlashGreaterThanToken($leading, $trailing);
1141 return new LessThanSlashToken($leading, $trailing);
1143 return new LessThanQuestionToken($leading, $trailing);
1145 return new QuestionGreaterThanToken($leading, $trailing);
1146 case '__halt_compiler':
1147 return new HaltCompilerToken($leading, $trailing);
1150 return new ErrorTokenToken($leading, $trailing, $token_text);
1152 return new NameToken($leading, $trailing, $token_text);
1153 case 'qualified_name':
1154 return new QualifiedNameToken($leading, $trailing, $token_text);
1156 return new VariableToken($leading, $trailing, $token_text);
1157 case 'namespace_prefix':
1158 return new NamespacePrefixToken($leading, $trailing, $token_text);
1159 case 'decimal_literal':
1160 return new DecimalLiteralToken($leading, $trailing, $token_text);
1161 case 'octal_literal':
1162 return new OctalLiteralToken($leading, $trailing, $token_text);
1163 case 'hexadecimal_literal':
1164 return new HexadecimalLiteralToken($leading, $trailing, $token_text);
1165 case 'binary_literal':
1166 return new BinaryLiteralToken($leading, $trailing, $token_text);
1167 case 'floating_literal':
1168 return new FloatingLiteralToken($leading, $trailing, $token_text);
1169 case 'execution_string_literal':
1170 return new ExecutionStringLiteralToken($leading, $trailing, $token_text);
1171 case 'execution_string_literal_head':
1172 return new ExecutionStringLiteralHeadToken($leading, $trailing, $token_text);
1173 case 'execution_string_literal_tail':
1174 return new ExecutionStringLiteralTailToken($leading, $trailing, $token_text);
1175 case 'single_quoted_string_literal':
1176 return new SingleQuotedStringLiteralToken($leading, $trailing, $token_text);
1177 case 'double_quoted_string_literal':
1178 return new DoubleQuotedStringLiteralToken($leading, $trailing, $token_text);
1179 case 'double_quoted_string_literal_head':
1180 return new DoubleQuotedStringLiteralHeadToken($leading, $trailing, $token_text);
1181 case 'string_literal_body':
1182 return new StringLiteralBodyToken($leading, $trailing, $token_text);
1183 case 'double_quoted_string_literal_tail':
1184 return new DoubleQuotedStringLiteralTailToken($leading, $trailing, $token_text);
1185 case 'heredoc_string_literal':
1186 return new HeredocStringLiteralToken($leading, $trailing, $token_text);
1187 case 'heredoc_string_literal_head':
1188 return new HeredocStringLiteralHeadToken($leading, $trailing, $token_text);
1189 case 'heredoc_string_literal_tail':
1190 return new HeredocStringLiteralTailToken($leading, $trailing, $token_text);
1191 case 'nowdoc_string_literal':
1192 return new NowdocStringLiteralToken($leading, $trailing, $token_text);
1193 case 'boolean_literal':
1194 return new BooleanLiteralToken($leading, $trailing, $token_text);
1195 case 'XHP_category_name':
1196 return new XHPCategoryNameToken($leading, $trailing, $token_text);
1197 case 'XHP_element_name':
1198 return new XHPElementNameToken($leading, $trailing, $token_text);
1199 case 'XHP_class_name':
1200 return new XHPClassNameToken($leading, $trailing, $token_text);
1201 case 'XHP_string_literal':
1202 return new XHPStringLiteralToken($leading, $trailing, $token_text);
1204 return new XHPBodyToken($leading, $trailing, $token_text);
1206 return new XHPCommentToken($leading, $trailing, $token_text);
1208 return new MarkupToken($leading, $trailing, $token_text);
1211 throw new Exception('unexpected token kind: ' . $token_kind);
1212 // TODO: Better error
1216 public function rewrite(
1218 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
1219 ?
array<EditableSyntax
> $parents = null): EditableSyntax
{
1220 $new_parents = $parents ??
[];
1221 array_push($new_parents, $this);
1222 $leading = $this->leading()->rewrite($rewriter, $new_parents);
1223 $trailing = $this->trailing()->rewrite($rewriter, $new_parents);
1224 if ($leading === $this->leading() && $trailing === $this->trailing())
1225 return $rewriter($this, $parents ??
[]);
1227 return $rewriter(EditableToken
::factory(
1228 $this->token_kind(), $leading, $trailing,
1229 $this->text()), $parents ??
[]);
1232 public function reduce
<TAccumulator
>(
1236 array<EditableSyntax
>): TAccumulator
) $reducer,
1237 TAccumulator
$accumulator,
1238 ?
array<EditableSyntax
> $parents = null): TAccumulator
{
1239 $accumulator = $this->leading()->reduce($reducer, $accumulator);
1240 $accumulator = $reducer($this, $accumulator, $parents ??
[]);
1241 $accumulator = $this->trailing()->reduce($reducer, $accumulator);
1242 return $accumulator;
1245 public static function from_json(
1248 string $source): EditableToken
{
1249 $leading_list = fold_map(
1251 ($j, $p) ==> EditableSyntax
::from_json($j, $p, $source),
1252 ($j, $p) ==> $j->width +
$p,
1255 $leading = EditableList
::to_list($leading_list);
1256 $token_position = $position +
$leading->width();
1257 $token_width = $json->width
;
1258 $token_text = substr($source, $token_position, $token_width);
1259 $trailing_position = $token_position +
$token_width;
1260 $trailing_list = fold_map(
1262 ($j, $p) ==> EditableSyntax
::from_json($j, $p, $source),
1263 ($j, $p) ==> $j->width +
$p,
1264 $trailing_position);
1265 $trailing = EditableList
::to_list($trailing_list);
1266 return EditableToken
::factory(
1267 $json->kind
, $leading, $trailing, $token_text);
1271 final class EndOfFileToken
extends EditableToken
{
1272 public function __construct(
1273 EditableSyntax
$leading,
1274 EditableSyntax
$trailing) {
1275 parent
::__construct('end_of_file', $leading, $trailing, '');
1278 public function with_leading(EditableSyntax
$leading): EndOfFileToken
{
1279 return new EndOfFileToken($leading, $this->trailing());
1282 public function with_trailing(EditableSyntax
$trailing): EndOfFileToken
{
1283 return new EndOfFileToken($this->leading(), $trailing);
1287 final class AbstractToken
extends EditableToken
{
1288 public function __construct(
1289 EditableSyntax
$leading,
1290 EditableSyntax
$trailing) {
1291 parent
::__construct('abstract', $leading, $trailing, 'abstract');
1294 public function with_leading(EditableSyntax
$leading): AbstractToken
{
1295 return new AbstractToken($leading, $this->trailing());
1298 public function with_trailing(EditableSyntax
$trailing): AbstractToken
{
1299 return new AbstractToken($this->leading(), $trailing);
1302 final class AndToken
extends EditableToken
{
1303 public function __construct(
1304 EditableSyntax
$leading,
1305 EditableSyntax
$trailing) {
1306 parent
::__construct('and', $leading, $trailing, 'and');
1309 public function with_leading(EditableSyntax
$leading): AndToken
{
1310 return new AndToken($leading, $this->trailing());
1313 public function with_trailing(EditableSyntax
$trailing): AndToken
{
1314 return new AndToken($this->leading(), $trailing);
1317 final class ArrayToken
extends EditableToken
{
1318 public function __construct(
1319 EditableSyntax
$leading,
1320 EditableSyntax
$trailing) {
1321 parent
::__construct('array', $leading, $trailing, 'array');
1324 public function with_leading(EditableSyntax
$leading): ArrayToken
{
1325 return new ArrayToken($leading, $this->trailing());
1328 public function with_trailing(EditableSyntax
$trailing): ArrayToken
{
1329 return new ArrayToken($this->leading(), $trailing);
1332 final class ArraykeyToken
extends EditableToken
{
1333 public function __construct(
1334 EditableSyntax
$leading,
1335 EditableSyntax
$trailing) {
1336 parent
::__construct('arraykey', $leading, $trailing, 'arraykey');
1339 public function with_leading(EditableSyntax
$leading): ArraykeyToken
{
1340 return new ArraykeyToken($leading, $this->trailing());
1343 public function with_trailing(EditableSyntax
$trailing): ArraykeyToken
{
1344 return new ArraykeyToken($this->leading(), $trailing);
1347 final class AsToken
extends EditableToken
{
1348 public function __construct(
1349 EditableSyntax
$leading,
1350 EditableSyntax
$trailing) {
1351 parent
::__construct('as', $leading, $trailing, 'as');
1354 public function with_leading(EditableSyntax
$leading): AsToken
{
1355 return new AsToken($leading, $this->trailing());
1358 public function with_trailing(EditableSyntax
$trailing): AsToken
{
1359 return new AsToken($this->leading(), $trailing);
1362 final class AsyncToken
extends EditableToken
{
1363 public function __construct(
1364 EditableSyntax
$leading,
1365 EditableSyntax
$trailing) {
1366 parent
::__construct('async', $leading, $trailing, 'async');
1369 public function with_leading(EditableSyntax
$leading): AsyncToken
{
1370 return new AsyncToken($leading, $this->trailing());
1373 public function with_trailing(EditableSyntax
$trailing): AsyncToken
{
1374 return new AsyncToken($this->leading(), $trailing);
1377 final class AttributeToken
extends EditableToken
{
1378 public function __construct(
1379 EditableSyntax
$leading,
1380 EditableSyntax
$trailing) {
1381 parent
::__construct('attribute', $leading, $trailing, 'attribute');
1384 public function with_leading(EditableSyntax
$leading): AttributeToken
{
1385 return new AttributeToken($leading, $this->trailing());
1388 public function with_trailing(EditableSyntax
$trailing): AttributeToken
{
1389 return new AttributeToken($this->leading(), $trailing);
1392 final class AwaitToken
extends EditableToken
{
1393 public function __construct(
1394 EditableSyntax
$leading,
1395 EditableSyntax
$trailing) {
1396 parent
::__construct('await', $leading, $trailing, 'await');
1399 public function with_leading(EditableSyntax
$leading): AwaitToken
{
1400 return new AwaitToken($leading, $this->trailing());
1403 public function with_trailing(EditableSyntax
$trailing): AwaitToken
{
1404 return new AwaitToken($this->leading(), $trailing);
1407 final class BoolToken
extends EditableToken
{
1408 public function __construct(
1409 EditableSyntax
$leading,
1410 EditableSyntax
$trailing) {
1411 parent
::__construct('bool', $leading, $trailing, 'bool');
1414 public function with_leading(EditableSyntax
$leading): BoolToken
{
1415 return new BoolToken($leading, $this->trailing());
1418 public function with_trailing(EditableSyntax
$trailing): BoolToken
{
1419 return new BoolToken($this->leading(), $trailing);
1422 final class BreakToken
extends EditableToken
{
1423 public function __construct(
1424 EditableSyntax
$leading,
1425 EditableSyntax
$trailing) {
1426 parent
::__construct('break', $leading, $trailing, 'break');
1429 public function with_leading(EditableSyntax
$leading): BreakToken
{
1430 return new BreakToken($leading, $this->trailing());
1433 public function with_trailing(EditableSyntax
$trailing): BreakToken
{
1434 return new BreakToken($this->leading(), $trailing);
1437 final class CaseToken
extends EditableToken
{
1438 public function __construct(
1439 EditableSyntax
$leading,
1440 EditableSyntax
$trailing) {
1441 parent
::__construct('case', $leading, $trailing, 'case');
1444 public function with_leading(EditableSyntax
$leading): CaseToken
{
1445 return new CaseToken($leading, $this->trailing());
1448 public function with_trailing(EditableSyntax
$trailing): CaseToken
{
1449 return new CaseToken($this->leading(), $trailing);
1452 final class CatchToken
extends EditableToken
{
1453 public function __construct(
1454 EditableSyntax
$leading,
1455 EditableSyntax
$trailing) {
1456 parent
::__construct('catch', $leading, $trailing, 'catch');
1459 public function with_leading(EditableSyntax
$leading): CatchToken
{
1460 return new CatchToken($leading, $this->trailing());
1463 public function with_trailing(EditableSyntax
$trailing): CatchToken
{
1464 return new CatchToken($this->leading(), $trailing);
1467 final class CategoryToken
extends EditableToken
{
1468 public function __construct(
1469 EditableSyntax
$leading,
1470 EditableSyntax
$trailing) {
1471 parent
::__construct('category', $leading, $trailing, 'category');
1474 public function with_leading(EditableSyntax
$leading): CategoryToken
{
1475 return new CategoryToken($leading, $this->trailing());
1478 public function with_trailing(EditableSyntax
$trailing): CategoryToken
{
1479 return new CategoryToken($this->leading(), $trailing);
1482 final class ChildrenToken
extends EditableToken
{
1483 public function __construct(
1484 EditableSyntax
$leading,
1485 EditableSyntax
$trailing) {
1486 parent
::__construct('children', $leading, $trailing, 'children');
1489 public function with_leading(EditableSyntax
$leading): ChildrenToken
{
1490 return new ChildrenToken($leading, $this->trailing());
1493 public function with_trailing(EditableSyntax
$trailing): ChildrenToken
{
1494 return new ChildrenToken($this->leading(), $trailing);
1497 final class ClassToken
extends EditableToken
{
1498 public function __construct(
1499 EditableSyntax
$leading,
1500 EditableSyntax
$trailing) {
1501 parent
::__construct('class', $leading, $trailing, 'class');
1504 public function with_leading(EditableSyntax
$leading): ClassToken
{
1505 return new ClassToken($leading, $this->trailing());
1508 public function with_trailing(EditableSyntax
$trailing): ClassToken
{
1509 return new ClassToken($this->leading(), $trailing);
1512 final class ClassnameToken
extends EditableToken
{
1513 public function __construct(
1514 EditableSyntax
$leading,
1515 EditableSyntax
$trailing) {
1516 parent
::__construct('classname', $leading, $trailing, 'classname');
1519 public function with_leading(EditableSyntax
$leading): ClassnameToken
{
1520 return new ClassnameToken($leading, $this->trailing());
1523 public function with_trailing(EditableSyntax
$trailing): ClassnameToken
{
1524 return new ClassnameToken($this->leading(), $trailing);
1527 final class CloneToken
extends EditableToken
{
1528 public function __construct(
1529 EditableSyntax
$leading,
1530 EditableSyntax
$trailing) {
1531 parent
::__construct('clone', $leading, $trailing, 'clone');
1534 public function with_leading(EditableSyntax
$leading): CloneToken
{
1535 return new CloneToken($leading, $this->trailing());
1538 public function with_trailing(EditableSyntax
$trailing): CloneToken
{
1539 return new CloneToken($this->leading(), $trailing);
1542 final class ConstToken
extends EditableToken
{
1543 public function __construct(
1544 EditableSyntax
$leading,
1545 EditableSyntax
$trailing) {
1546 parent
::__construct('const', $leading, $trailing, 'const');
1549 public function with_leading(EditableSyntax
$leading): ConstToken
{
1550 return new ConstToken($leading, $this->trailing());
1553 public function with_trailing(EditableSyntax
$trailing): ConstToken
{
1554 return new ConstToken($this->leading(), $trailing);
1557 final class ConstructToken
extends EditableToken
{
1558 public function __construct(
1559 EditableSyntax
$leading,
1560 EditableSyntax
$trailing) {
1561 parent
::__construct('__construct', $leading, $trailing, '__construct');
1564 public function with_leading(EditableSyntax
$leading): ConstructToken
{
1565 return new ConstructToken($leading, $this->trailing());
1568 public function with_trailing(EditableSyntax
$trailing): ConstructToken
{
1569 return new ConstructToken($this->leading(), $trailing);
1572 final class ContinueToken
extends EditableToken
{
1573 public function __construct(
1574 EditableSyntax
$leading,
1575 EditableSyntax
$trailing) {
1576 parent
::__construct('continue', $leading, $trailing, 'continue');
1579 public function with_leading(EditableSyntax
$leading): ContinueToken
{
1580 return new ContinueToken($leading, $this->trailing());
1583 public function with_trailing(EditableSyntax
$trailing): ContinueToken
{
1584 return new ContinueToken($this->leading(), $trailing);
1587 final class CoroutineToken
extends EditableToken
{
1588 public function __construct(
1589 EditableSyntax
$leading,
1590 EditableSyntax
$trailing) {
1591 parent
::__construct('coroutine', $leading, $trailing, 'coroutine');
1594 public function with_leading(EditableSyntax
$leading): CoroutineToken
{
1595 return new CoroutineToken($leading, $this->trailing());
1598 public function with_trailing(EditableSyntax
$trailing): CoroutineToken
{
1599 return new CoroutineToken($this->leading(), $trailing);
1602 final class DarrayToken
extends EditableToken
{
1603 public function __construct(
1604 EditableSyntax
$leading,
1605 EditableSyntax
$trailing) {
1606 parent
::__construct('darray', $leading, $trailing, 'darray');
1609 public function with_leading(EditableSyntax
$leading): DarrayToken
{
1610 return new DarrayToken($leading, $this->trailing());
1613 public function with_trailing(EditableSyntax
$trailing): DarrayToken
{
1614 return new DarrayToken($this->leading(), $trailing);
1617 final class DeclareToken
extends EditableToken
{
1618 public function __construct(
1619 EditableSyntax
$leading,
1620 EditableSyntax
$trailing) {
1621 parent
::__construct('declare', $leading, $trailing, 'declare');
1624 public function with_leading(EditableSyntax
$leading): DeclareToken
{
1625 return new DeclareToken($leading, $this->trailing());
1628 public function with_trailing(EditableSyntax
$trailing): DeclareToken
{
1629 return new DeclareToken($this->leading(), $trailing);
1632 final class DefaultToken
extends EditableToken
{
1633 public function __construct(
1634 EditableSyntax
$leading,
1635 EditableSyntax
$trailing) {
1636 parent
::__construct('default', $leading, $trailing, 'default');
1639 public function with_leading(EditableSyntax
$leading): DefaultToken
{
1640 return new DefaultToken($leading, $this->trailing());
1643 public function with_trailing(EditableSyntax
$trailing): DefaultToken
{
1644 return new DefaultToken($this->leading(), $trailing);
1647 final class DefineToken
extends EditableToken
{
1648 public function __construct(
1649 EditableSyntax
$leading,
1650 EditableSyntax
$trailing) {
1651 parent
::__construct('define', $leading, $trailing, 'define');
1654 public function with_leading(EditableSyntax
$leading): DefineToken
{
1655 return new DefineToken($leading, $this->trailing());
1658 public function with_trailing(EditableSyntax
$trailing): DefineToken
{
1659 return new DefineToken($this->leading(), $trailing);
1662 final class DestructToken
extends EditableToken
{
1663 public function __construct(
1664 EditableSyntax
$leading,
1665 EditableSyntax
$trailing) {
1666 parent
::__construct('__destruct', $leading, $trailing, '__destruct');
1669 public function with_leading(EditableSyntax
$leading): DestructToken
{
1670 return new DestructToken($leading, $this->trailing());
1673 public function with_trailing(EditableSyntax
$trailing): DestructToken
{
1674 return new DestructToken($this->leading(), $trailing);
1677 final class DictToken
extends EditableToken
{
1678 public function __construct(
1679 EditableSyntax
$leading,
1680 EditableSyntax
$trailing) {
1681 parent
::__construct('dict', $leading, $trailing, 'dict');
1684 public function with_leading(EditableSyntax
$leading): DictToken
{
1685 return new DictToken($leading, $this->trailing());
1688 public function with_trailing(EditableSyntax
$trailing): DictToken
{
1689 return new DictToken($this->leading(), $trailing);
1692 final class DoToken
extends EditableToken
{
1693 public function __construct(
1694 EditableSyntax
$leading,
1695 EditableSyntax
$trailing) {
1696 parent
::__construct('do', $leading, $trailing, 'do');
1699 public function with_leading(EditableSyntax
$leading): DoToken
{
1700 return new DoToken($leading, $this->trailing());
1703 public function with_trailing(EditableSyntax
$trailing): DoToken
{
1704 return new DoToken($this->leading(), $trailing);
1707 final class DoubleToken
extends EditableToken
{
1708 public function __construct(
1709 EditableSyntax
$leading,
1710 EditableSyntax
$trailing) {
1711 parent
::__construct('double', $leading, $trailing, 'double');
1714 public function with_leading(EditableSyntax
$leading): DoubleToken
{
1715 return new DoubleToken($leading, $this->trailing());
1718 public function with_trailing(EditableSyntax
$trailing): DoubleToken
{
1719 return new DoubleToken($this->leading(), $trailing);
1722 final class EchoToken
extends EditableToken
{
1723 public function __construct(
1724 EditableSyntax
$leading,
1725 EditableSyntax
$trailing) {
1726 parent
::__construct('echo', $leading, $trailing, 'echo');
1729 public function with_leading(EditableSyntax
$leading): EchoToken
{
1730 return new EchoToken($leading, $this->trailing());
1733 public function with_trailing(EditableSyntax
$trailing): EchoToken
{
1734 return new EchoToken($this->leading(), $trailing);
1737 final class ElseToken
extends EditableToken
{
1738 public function __construct(
1739 EditableSyntax
$leading,
1740 EditableSyntax
$trailing) {
1741 parent
::__construct('else', $leading, $trailing, 'else');
1744 public function with_leading(EditableSyntax
$leading): ElseToken
{
1745 return new ElseToken($leading, $this->trailing());
1748 public function with_trailing(EditableSyntax
$trailing): ElseToken
{
1749 return new ElseToken($this->leading(), $trailing);
1752 final class ElseifToken
extends EditableToken
{
1753 public function __construct(
1754 EditableSyntax
$leading,
1755 EditableSyntax
$trailing) {
1756 parent
::__construct('elseif', $leading, $trailing, 'elseif');
1759 public function with_leading(EditableSyntax
$leading): ElseifToken
{
1760 return new ElseifToken($leading, $this->trailing());
1763 public function with_trailing(EditableSyntax
$trailing): ElseifToken
{
1764 return new ElseifToken($this->leading(), $trailing);
1767 final class EmptyToken
extends EditableToken
{
1768 public function __construct(
1769 EditableSyntax
$leading,
1770 EditableSyntax
$trailing) {
1771 parent
::__construct('empty', $leading, $trailing, 'empty');
1774 public function with_leading(EditableSyntax
$leading): EmptyToken
{
1775 return new EmptyToken($leading, $this->trailing());
1778 public function with_trailing(EditableSyntax
$trailing): EmptyToken
{
1779 return new EmptyToken($this->leading(), $trailing);
1782 final class EndifToken
extends EditableToken
{
1783 public function __construct(
1784 EditableSyntax
$leading,
1785 EditableSyntax
$trailing) {
1786 parent
::__construct('endif', $leading, $trailing, 'endif');
1789 public function with_leading(EditableSyntax
$leading): EndifToken
{
1790 return new EndifToken($leading, $this->trailing());
1793 public function with_trailing(EditableSyntax
$trailing): EndifToken
{
1794 return new EndifToken($this->leading(), $trailing);
1797 final class EnumToken
extends EditableToken
{
1798 public function __construct(
1799 EditableSyntax
$leading,
1800 EditableSyntax
$trailing) {
1801 parent
::__construct('enum', $leading, $trailing, 'enum');
1804 public function with_leading(EditableSyntax
$leading): EnumToken
{
1805 return new EnumToken($leading, $this->trailing());
1808 public function with_trailing(EditableSyntax
$trailing): EnumToken
{
1809 return new EnumToken($this->leading(), $trailing);
1812 final class EvalToken
extends EditableToken
{
1813 public function __construct(
1814 EditableSyntax
$leading,
1815 EditableSyntax
$trailing) {
1816 parent
::__construct('eval', $leading, $trailing, 'eval');
1819 public function with_leading(EditableSyntax
$leading): EvalToken
{
1820 return new EvalToken($leading, $this->trailing());
1823 public function with_trailing(EditableSyntax
$trailing): EvalToken
{
1824 return new EvalToken($this->leading(), $trailing);
1827 final class ExtendsToken
extends EditableToken
{
1828 public function __construct(
1829 EditableSyntax
$leading,
1830 EditableSyntax
$trailing) {
1831 parent
::__construct('extends', $leading, $trailing, 'extends');
1834 public function with_leading(EditableSyntax
$leading): ExtendsToken
{
1835 return new ExtendsToken($leading, $this->trailing());
1838 public function with_trailing(EditableSyntax
$trailing): ExtendsToken
{
1839 return new ExtendsToken($this->leading(), $trailing);
1842 final class FallthroughToken
extends EditableToken
{
1843 public function __construct(
1844 EditableSyntax
$leading,
1845 EditableSyntax
$trailing) {
1846 parent
::__construct('fallthrough', $leading, $trailing, 'fallthrough');
1849 public function with_leading(EditableSyntax
$leading): FallthroughToken
{
1850 return new FallthroughToken($leading, $this->trailing());
1853 public function with_trailing(EditableSyntax
$trailing): FallthroughToken
{
1854 return new FallthroughToken($this->leading(), $trailing);
1857 final class FloatToken
extends EditableToken
{
1858 public function __construct(
1859 EditableSyntax
$leading,
1860 EditableSyntax
$trailing) {
1861 parent
::__construct('float', $leading, $trailing, 'float');
1864 public function with_leading(EditableSyntax
$leading): FloatToken
{
1865 return new FloatToken($leading, $this->trailing());
1868 public function with_trailing(EditableSyntax
$trailing): FloatToken
{
1869 return new FloatToken($this->leading(), $trailing);
1872 final class FinalToken
extends EditableToken
{
1873 public function __construct(
1874 EditableSyntax
$leading,
1875 EditableSyntax
$trailing) {
1876 parent
::__construct('final', $leading, $trailing, 'final');
1879 public function with_leading(EditableSyntax
$leading): FinalToken
{
1880 return new FinalToken($leading, $this->trailing());
1883 public function with_trailing(EditableSyntax
$trailing): FinalToken
{
1884 return new FinalToken($this->leading(), $trailing);
1887 final class FinallyToken
extends EditableToken
{
1888 public function __construct(
1889 EditableSyntax
$leading,
1890 EditableSyntax
$trailing) {
1891 parent
::__construct('finally', $leading, $trailing, 'finally');
1894 public function with_leading(EditableSyntax
$leading): FinallyToken
{
1895 return new FinallyToken($leading, $this->trailing());
1898 public function with_trailing(EditableSyntax
$trailing): FinallyToken
{
1899 return new FinallyToken($this->leading(), $trailing);
1902 final class ForToken
extends EditableToken
{
1903 public function __construct(
1904 EditableSyntax
$leading,
1905 EditableSyntax
$trailing) {
1906 parent
::__construct('for', $leading, $trailing, 'for');
1909 public function with_leading(EditableSyntax
$leading): ForToken
{
1910 return new ForToken($leading, $this->trailing());
1913 public function with_trailing(EditableSyntax
$trailing): ForToken
{
1914 return new ForToken($this->leading(), $trailing);
1917 final class ForeachToken
extends EditableToken
{
1918 public function __construct(
1919 EditableSyntax
$leading,
1920 EditableSyntax
$trailing) {
1921 parent
::__construct('foreach', $leading, $trailing, 'foreach');
1924 public function with_leading(EditableSyntax
$leading): ForeachToken
{
1925 return new ForeachToken($leading, $this->trailing());
1928 public function with_trailing(EditableSyntax
$trailing): ForeachToken
{
1929 return new ForeachToken($this->leading(), $trailing);
1932 final class FromToken
extends EditableToken
{
1933 public function __construct(
1934 EditableSyntax
$leading,
1935 EditableSyntax
$trailing) {
1936 parent
::__construct('from', $leading, $trailing, 'from');
1939 public function with_leading(EditableSyntax
$leading): FromToken
{
1940 return new FromToken($leading, $this->trailing());
1943 public function with_trailing(EditableSyntax
$trailing): FromToken
{
1944 return new FromToken($this->leading(), $trailing);
1947 final class FunctionToken
extends EditableToken
{
1948 public function __construct(
1949 EditableSyntax
$leading,
1950 EditableSyntax
$trailing) {
1951 parent
::__construct('function', $leading, $trailing, 'function');
1954 public function with_leading(EditableSyntax
$leading): FunctionToken
{
1955 return new FunctionToken($leading, $this->trailing());
1958 public function with_trailing(EditableSyntax
$trailing): FunctionToken
{
1959 return new FunctionToken($this->leading(), $trailing);
1962 final class GlobalToken
extends EditableToken
{
1963 public function __construct(
1964 EditableSyntax
$leading,
1965 EditableSyntax
$trailing) {
1966 parent
::__construct('global', $leading, $trailing, 'global');
1969 public function with_leading(EditableSyntax
$leading): GlobalToken
{
1970 return new GlobalToken($leading, $this->trailing());
1973 public function with_trailing(EditableSyntax
$trailing): GlobalToken
{
1974 return new GlobalToken($this->leading(), $trailing);
1977 final class GotoToken
extends EditableToken
{
1978 public function __construct(
1979 EditableSyntax
$leading,
1980 EditableSyntax
$trailing) {
1981 parent
::__construct('goto', $leading, $trailing, 'goto');
1984 public function with_leading(EditableSyntax
$leading): GotoToken
{
1985 return new GotoToken($leading, $this->trailing());
1988 public function with_trailing(EditableSyntax
$trailing): GotoToken
{
1989 return new GotoToken($this->leading(), $trailing);
1992 final class IfToken
extends EditableToken
{
1993 public function __construct(
1994 EditableSyntax
$leading,
1995 EditableSyntax
$trailing) {
1996 parent
::__construct('if', $leading, $trailing, 'if');
1999 public function with_leading(EditableSyntax
$leading): IfToken
{
2000 return new IfToken($leading, $this->trailing());
2003 public function with_trailing(EditableSyntax
$trailing): IfToken
{
2004 return new IfToken($this->leading(), $trailing);
2007 final class ImplementsToken
extends EditableToken
{
2008 public function __construct(
2009 EditableSyntax
$leading,
2010 EditableSyntax
$trailing) {
2011 parent
::__construct('implements', $leading, $trailing, 'implements');
2014 public function with_leading(EditableSyntax
$leading): ImplementsToken
{
2015 return new ImplementsToken($leading, $this->trailing());
2018 public function with_trailing(EditableSyntax
$trailing): ImplementsToken
{
2019 return new ImplementsToken($this->leading(), $trailing);
2022 final class IncludeToken
extends EditableToken
{
2023 public function __construct(
2024 EditableSyntax
$leading,
2025 EditableSyntax
$trailing) {
2026 parent
::__construct('include', $leading, $trailing, 'include');
2029 public function with_leading(EditableSyntax
$leading): IncludeToken
{
2030 return new IncludeToken($leading, $this->trailing());
2033 public function with_trailing(EditableSyntax
$trailing): IncludeToken
{
2034 return new IncludeToken($this->leading(), $trailing);
2037 final class Include_onceToken
extends EditableToken
{
2038 public function __construct(
2039 EditableSyntax
$leading,
2040 EditableSyntax
$trailing) {
2041 parent
::__construct('include_once', $leading, $trailing, 'include_once');
2044 public function with_leading(EditableSyntax
$leading): Include_onceToken
{
2045 return new Include_onceToken($leading, $this->trailing());
2048 public function with_trailing(EditableSyntax
$trailing): Include_onceToken
{
2049 return new Include_onceToken($this->leading(), $trailing);
2052 final class InoutToken
extends EditableToken
{
2053 public function __construct(
2054 EditableSyntax
$leading,
2055 EditableSyntax
$trailing) {
2056 parent
::__construct('inout', $leading, $trailing, 'inout');
2059 public function with_leading(EditableSyntax
$leading): InoutToken
{
2060 return new InoutToken($leading, $this->trailing());
2063 public function with_trailing(EditableSyntax
$trailing): InoutToken
{
2064 return new InoutToken($this->leading(), $trailing);
2067 final class InstanceofToken
extends EditableToken
{
2068 public function __construct(
2069 EditableSyntax
$leading,
2070 EditableSyntax
$trailing) {
2071 parent
::__construct('instanceof', $leading, $trailing, 'instanceof');
2074 public function with_leading(EditableSyntax
$leading): InstanceofToken
{
2075 return new InstanceofToken($leading, $this->trailing());
2078 public function with_trailing(EditableSyntax
$trailing): InstanceofToken
{
2079 return new InstanceofToken($this->leading(), $trailing);
2082 final class InsteadofToken
extends EditableToken
{
2083 public function __construct(
2084 EditableSyntax
$leading,
2085 EditableSyntax
$trailing) {
2086 parent
::__construct('insteadof', $leading, $trailing, 'insteadof');
2089 public function with_leading(EditableSyntax
$leading): InsteadofToken
{
2090 return new InsteadofToken($leading, $this->trailing());
2093 public function with_trailing(EditableSyntax
$trailing): InsteadofToken
{
2094 return new InsteadofToken($this->leading(), $trailing);
2097 final class IntToken
extends EditableToken
{
2098 public function __construct(
2099 EditableSyntax
$leading,
2100 EditableSyntax
$trailing) {
2101 parent
::__construct('int', $leading, $trailing, 'int');
2104 public function with_leading(EditableSyntax
$leading): IntToken
{
2105 return new IntToken($leading, $this->trailing());
2108 public function with_trailing(EditableSyntax
$trailing): IntToken
{
2109 return new IntToken($this->leading(), $trailing);
2112 final class InterfaceToken
extends EditableToken
{
2113 public function __construct(
2114 EditableSyntax
$leading,
2115 EditableSyntax
$trailing) {
2116 parent
::__construct('interface', $leading, $trailing, 'interface');
2119 public function with_leading(EditableSyntax
$leading): InterfaceToken
{
2120 return new InterfaceToken($leading, $this->trailing());
2123 public function with_trailing(EditableSyntax
$trailing): InterfaceToken
{
2124 return new InterfaceToken($this->leading(), $trailing);
2127 final class IsToken
extends EditableToken
{
2128 public function __construct(
2129 EditableSyntax
$leading,
2130 EditableSyntax
$trailing) {
2131 parent
::__construct('is', $leading, $trailing, 'is');
2134 public function with_leading(EditableSyntax
$leading): IsToken
{
2135 return new IsToken($leading, $this->trailing());
2138 public function with_trailing(EditableSyntax
$trailing): IsToken
{
2139 return new IsToken($this->leading(), $trailing);
2142 final class IssetToken
extends EditableToken
{
2143 public function __construct(
2144 EditableSyntax
$leading,
2145 EditableSyntax
$trailing) {
2146 parent
::__construct('isset', $leading, $trailing, 'isset');
2149 public function with_leading(EditableSyntax
$leading): IssetToken
{
2150 return new IssetToken($leading, $this->trailing());
2153 public function with_trailing(EditableSyntax
$trailing): IssetToken
{
2154 return new IssetToken($this->leading(), $trailing);
2157 final class KeysetToken
extends EditableToken
{
2158 public function __construct(
2159 EditableSyntax
$leading,
2160 EditableSyntax
$trailing) {
2161 parent
::__construct('keyset', $leading, $trailing, 'keyset');
2164 public function with_leading(EditableSyntax
$leading): KeysetToken
{
2165 return new KeysetToken($leading, $this->trailing());
2168 public function with_trailing(EditableSyntax
$trailing): KeysetToken
{
2169 return new KeysetToken($this->leading(), $trailing);
2172 final class ListToken
extends EditableToken
{
2173 public function __construct(
2174 EditableSyntax
$leading,
2175 EditableSyntax
$trailing) {
2176 parent
::__construct('list', $leading, $trailing, 'list');
2179 public function with_leading(EditableSyntax
$leading): ListToken
{
2180 return new ListToken($leading, $this->trailing());
2183 public function with_trailing(EditableSyntax
$trailing): ListToken
{
2184 return new ListToken($this->leading(), $trailing);
2187 final class MixedToken
extends EditableToken
{
2188 public function __construct(
2189 EditableSyntax
$leading,
2190 EditableSyntax
$trailing) {
2191 parent
::__construct('mixed', $leading, $trailing, 'mixed');
2194 public function with_leading(EditableSyntax
$leading): MixedToken
{
2195 return new MixedToken($leading, $this->trailing());
2198 public function with_trailing(EditableSyntax
$trailing): MixedToken
{
2199 return new MixedToken($this->leading(), $trailing);
2202 final class NamespaceToken
extends EditableToken
{
2203 public function __construct(
2204 EditableSyntax
$leading,
2205 EditableSyntax
$trailing) {
2206 parent
::__construct('namespace', $leading, $trailing, 'namespace');
2209 public function with_leading(EditableSyntax
$leading): NamespaceToken
{
2210 return new NamespaceToken($leading, $this->trailing());
2213 public function with_trailing(EditableSyntax
$trailing): NamespaceToken
{
2214 return new NamespaceToken($this->leading(), $trailing);
2217 final class NewToken
extends EditableToken
{
2218 public function __construct(
2219 EditableSyntax
$leading,
2220 EditableSyntax
$trailing) {
2221 parent
::__construct('new', $leading, $trailing, 'new');
2224 public function with_leading(EditableSyntax
$leading): NewToken
{
2225 return new NewToken($leading, $this->trailing());
2228 public function with_trailing(EditableSyntax
$trailing): NewToken
{
2229 return new NewToken($this->leading(), $trailing);
2232 final class NewtypeToken
extends EditableToken
{
2233 public function __construct(
2234 EditableSyntax
$leading,
2235 EditableSyntax
$trailing) {
2236 parent
::__construct('newtype', $leading, $trailing, 'newtype');
2239 public function with_leading(EditableSyntax
$leading): NewtypeToken
{
2240 return new NewtypeToken($leading, $this->trailing());
2243 public function with_trailing(EditableSyntax
$trailing): NewtypeToken
{
2244 return new NewtypeToken($this->leading(), $trailing);
2247 final class NoreturnToken
extends EditableToken
{
2248 public function __construct(
2249 EditableSyntax
$leading,
2250 EditableSyntax
$trailing) {
2251 parent
::__construct('noreturn', $leading, $trailing, 'noreturn');
2254 public function with_leading(EditableSyntax
$leading): NoreturnToken
{
2255 return new NoreturnToken($leading, $this->trailing());
2258 public function with_trailing(EditableSyntax
$trailing): NoreturnToken
{
2259 return new NoreturnToken($this->leading(), $trailing);
2262 final class NumToken
extends EditableToken
{
2263 public function __construct(
2264 EditableSyntax
$leading,
2265 EditableSyntax
$trailing) {
2266 parent
::__construct('num', $leading, $trailing, 'num');
2269 public function with_leading(EditableSyntax
$leading): NumToken
{
2270 return new NumToken($leading, $this->trailing());
2273 public function with_trailing(EditableSyntax
$trailing): NumToken
{
2274 return new NumToken($this->leading(), $trailing);
2277 final class ObjectToken
extends EditableToken
{
2278 public function __construct(
2279 EditableSyntax
$leading,
2280 EditableSyntax
$trailing) {
2281 parent
::__construct('object', $leading, $trailing, 'object');
2284 public function with_leading(EditableSyntax
$leading): ObjectToken
{
2285 return new ObjectToken($leading, $this->trailing());
2288 public function with_trailing(EditableSyntax
$trailing): ObjectToken
{
2289 return new ObjectToken($this->leading(), $trailing);
2292 final class OrToken
extends EditableToken
{
2293 public function __construct(
2294 EditableSyntax
$leading,
2295 EditableSyntax
$trailing) {
2296 parent
::__construct('or', $leading, $trailing, 'or');
2299 public function with_leading(EditableSyntax
$leading): OrToken
{
2300 return new OrToken($leading, $this->trailing());
2303 public function with_trailing(EditableSyntax
$trailing): OrToken
{
2304 return new OrToken($this->leading(), $trailing);
2307 final class ParentToken
extends EditableToken
{
2308 public function __construct(
2309 EditableSyntax
$leading,
2310 EditableSyntax
$trailing) {
2311 parent
::__construct('parent', $leading, $trailing, 'parent');
2314 public function with_leading(EditableSyntax
$leading): ParentToken
{
2315 return new ParentToken($leading, $this->trailing());
2318 public function with_trailing(EditableSyntax
$trailing): ParentToken
{
2319 return new ParentToken($this->leading(), $trailing);
2322 final class PrintToken
extends EditableToken
{
2323 public function __construct(
2324 EditableSyntax
$leading,
2325 EditableSyntax
$trailing) {
2326 parent
::__construct('print', $leading, $trailing, 'print');
2329 public function with_leading(EditableSyntax
$leading): PrintToken
{
2330 return new PrintToken($leading, $this->trailing());
2333 public function with_trailing(EditableSyntax
$trailing): PrintToken
{
2334 return new PrintToken($this->leading(), $trailing);
2337 final class PrivateToken
extends EditableToken
{
2338 public function __construct(
2339 EditableSyntax
$leading,
2340 EditableSyntax
$trailing) {
2341 parent
::__construct('private', $leading, $trailing, 'private');
2344 public function with_leading(EditableSyntax
$leading): PrivateToken
{
2345 return new PrivateToken($leading, $this->trailing());
2348 public function with_trailing(EditableSyntax
$trailing): PrivateToken
{
2349 return new PrivateToken($this->leading(), $trailing);
2352 final class ProtectedToken
extends EditableToken
{
2353 public function __construct(
2354 EditableSyntax
$leading,
2355 EditableSyntax
$trailing) {
2356 parent
::__construct('protected', $leading, $trailing, 'protected');
2359 public function with_leading(EditableSyntax
$leading): ProtectedToken
{
2360 return new ProtectedToken($leading, $this->trailing());
2363 public function with_trailing(EditableSyntax
$trailing): ProtectedToken
{
2364 return new ProtectedToken($this->leading(), $trailing);
2367 final class PublicToken
extends EditableToken
{
2368 public function __construct(
2369 EditableSyntax
$leading,
2370 EditableSyntax
$trailing) {
2371 parent
::__construct('public', $leading, $trailing, 'public');
2374 public function with_leading(EditableSyntax
$leading): PublicToken
{
2375 return new PublicToken($leading, $this->trailing());
2378 public function with_trailing(EditableSyntax
$trailing): PublicToken
{
2379 return new PublicToken($this->leading(), $trailing);
2382 final class RequireToken
extends EditableToken
{
2383 public function __construct(
2384 EditableSyntax
$leading,
2385 EditableSyntax
$trailing) {
2386 parent
::__construct('require', $leading, $trailing, 'require');
2389 public function with_leading(EditableSyntax
$leading): RequireToken
{
2390 return new RequireToken($leading, $this->trailing());
2393 public function with_trailing(EditableSyntax
$trailing): RequireToken
{
2394 return new RequireToken($this->leading(), $trailing);
2397 final class Require_onceToken
extends EditableToken
{
2398 public function __construct(
2399 EditableSyntax
$leading,
2400 EditableSyntax
$trailing) {
2401 parent
::__construct('require_once', $leading, $trailing, 'require_once');
2404 public function with_leading(EditableSyntax
$leading): Require_onceToken
{
2405 return new Require_onceToken($leading, $this->trailing());
2408 public function with_trailing(EditableSyntax
$trailing): Require_onceToken
{
2409 return new Require_onceToken($this->leading(), $trailing);
2412 final class RequiredToken
extends EditableToken
{
2413 public function __construct(
2414 EditableSyntax
$leading,
2415 EditableSyntax
$trailing) {
2416 parent
::__construct('required', $leading, $trailing, 'required');
2419 public function with_leading(EditableSyntax
$leading): RequiredToken
{
2420 return new RequiredToken($leading, $this->trailing());
2423 public function with_trailing(EditableSyntax
$trailing): RequiredToken
{
2424 return new RequiredToken($this->leading(), $trailing);
2427 final class ResourceToken
extends EditableToken
{
2428 public function __construct(
2429 EditableSyntax
$leading,
2430 EditableSyntax
$trailing) {
2431 parent
::__construct('resource', $leading, $trailing, 'resource');
2434 public function with_leading(EditableSyntax
$leading): ResourceToken
{
2435 return new ResourceToken($leading, $this->trailing());
2438 public function with_trailing(EditableSyntax
$trailing): ResourceToken
{
2439 return new ResourceToken($this->leading(), $trailing);
2442 final class ReturnToken
extends EditableToken
{
2443 public function __construct(
2444 EditableSyntax
$leading,
2445 EditableSyntax
$trailing) {
2446 parent
::__construct('return', $leading, $trailing, 'return');
2449 public function with_leading(EditableSyntax
$leading): ReturnToken
{
2450 return new ReturnToken($leading, $this->trailing());
2453 public function with_trailing(EditableSyntax
$trailing): ReturnToken
{
2454 return new ReturnToken($this->leading(), $trailing);
2457 final class SelfToken
extends EditableToken
{
2458 public function __construct(
2459 EditableSyntax
$leading,
2460 EditableSyntax
$trailing) {
2461 parent
::__construct('self', $leading, $trailing, 'self');
2464 public function with_leading(EditableSyntax
$leading): SelfToken
{
2465 return new SelfToken($leading, $this->trailing());
2468 public function with_trailing(EditableSyntax
$trailing): SelfToken
{
2469 return new SelfToken($this->leading(), $trailing);
2472 final class ShapeToken
extends EditableToken
{
2473 public function __construct(
2474 EditableSyntax
$leading,
2475 EditableSyntax
$trailing) {
2476 parent
::__construct('shape', $leading, $trailing, 'shape');
2479 public function with_leading(EditableSyntax
$leading): ShapeToken
{
2480 return new ShapeToken($leading, $this->trailing());
2483 public function with_trailing(EditableSyntax
$trailing): ShapeToken
{
2484 return new ShapeToken($this->leading(), $trailing);
2487 final class StaticToken
extends EditableToken
{
2488 public function __construct(
2489 EditableSyntax
$leading,
2490 EditableSyntax
$trailing) {
2491 parent
::__construct('static', $leading, $trailing, 'static');
2494 public function with_leading(EditableSyntax
$leading): StaticToken
{
2495 return new StaticToken($leading, $this->trailing());
2498 public function with_trailing(EditableSyntax
$trailing): StaticToken
{
2499 return new StaticToken($this->leading(), $trailing);
2502 final class StringToken
extends EditableToken
{
2503 public function __construct(
2504 EditableSyntax
$leading,
2505 EditableSyntax
$trailing) {
2506 parent
::__construct('string', $leading, $trailing, 'string');
2509 public function with_leading(EditableSyntax
$leading): StringToken
{
2510 return new StringToken($leading, $this->trailing());
2513 public function with_trailing(EditableSyntax
$trailing): StringToken
{
2514 return new StringToken($this->leading(), $trailing);
2517 final class SuperToken
extends EditableToken
{
2518 public function __construct(
2519 EditableSyntax
$leading,
2520 EditableSyntax
$trailing) {
2521 parent
::__construct('super', $leading, $trailing, 'super');
2524 public function with_leading(EditableSyntax
$leading): SuperToken
{
2525 return new SuperToken($leading, $this->trailing());
2528 public function with_trailing(EditableSyntax
$trailing): SuperToken
{
2529 return new SuperToken($this->leading(), $trailing);
2532 final class SuspendToken
extends EditableToken
{
2533 public function __construct(
2534 EditableSyntax
$leading,
2535 EditableSyntax
$trailing) {
2536 parent
::__construct('suspend', $leading, $trailing, 'suspend');
2539 public function with_leading(EditableSyntax
$leading): SuspendToken
{
2540 return new SuspendToken($leading, $this->trailing());
2543 public function with_trailing(EditableSyntax
$trailing): SuspendToken
{
2544 return new SuspendToken($this->leading(), $trailing);
2547 final class SwitchToken
extends EditableToken
{
2548 public function __construct(
2549 EditableSyntax
$leading,
2550 EditableSyntax
$trailing) {
2551 parent
::__construct('switch', $leading, $trailing, 'switch');
2554 public function with_leading(EditableSyntax
$leading): SwitchToken
{
2555 return new SwitchToken($leading, $this->trailing());
2558 public function with_trailing(EditableSyntax
$trailing): SwitchToken
{
2559 return new SwitchToken($this->leading(), $trailing);
2562 final class ThisToken
extends EditableToken
{
2563 public function __construct(
2564 EditableSyntax
$leading,
2565 EditableSyntax
$trailing) {
2566 parent
::__construct('this', $leading, $trailing, 'this');
2569 public function with_leading(EditableSyntax
$leading): ThisToken
{
2570 return new ThisToken($leading, $this->trailing());
2573 public function with_trailing(EditableSyntax
$trailing): ThisToken
{
2574 return new ThisToken($this->leading(), $trailing);
2577 final class ThrowToken
extends EditableToken
{
2578 public function __construct(
2579 EditableSyntax
$leading,
2580 EditableSyntax
$trailing) {
2581 parent
::__construct('throw', $leading, $trailing, 'throw');
2584 public function with_leading(EditableSyntax
$leading): ThrowToken
{
2585 return new ThrowToken($leading, $this->trailing());
2588 public function with_trailing(EditableSyntax
$trailing): ThrowToken
{
2589 return new ThrowToken($this->leading(), $trailing);
2592 final class TraitToken
extends EditableToken
{
2593 public function __construct(
2594 EditableSyntax
$leading,
2595 EditableSyntax
$trailing) {
2596 parent
::__construct('trait', $leading, $trailing, 'trait');
2599 public function with_leading(EditableSyntax
$leading): TraitToken
{
2600 return new TraitToken($leading, $this->trailing());
2603 public function with_trailing(EditableSyntax
$trailing): TraitToken
{
2604 return new TraitToken($this->leading(), $trailing);
2607 final class TryToken
extends EditableToken
{
2608 public function __construct(
2609 EditableSyntax
$leading,
2610 EditableSyntax
$trailing) {
2611 parent
::__construct('try', $leading, $trailing, 'try');
2614 public function with_leading(EditableSyntax
$leading): TryToken
{
2615 return new TryToken($leading, $this->trailing());
2618 public function with_trailing(EditableSyntax
$trailing): TryToken
{
2619 return new TryToken($this->leading(), $trailing);
2622 final class TupleToken
extends EditableToken
{
2623 public function __construct(
2624 EditableSyntax
$leading,
2625 EditableSyntax
$trailing) {
2626 parent
::__construct('tuple', $leading, $trailing, 'tuple');
2629 public function with_leading(EditableSyntax
$leading): TupleToken
{
2630 return new TupleToken($leading, $this->trailing());
2633 public function with_trailing(EditableSyntax
$trailing): TupleToken
{
2634 return new TupleToken($this->leading(), $trailing);
2637 final class TypeToken
extends EditableToken
{
2638 public function __construct(
2639 EditableSyntax
$leading,
2640 EditableSyntax
$trailing) {
2641 parent
::__construct('type', $leading, $trailing, 'type');
2644 public function with_leading(EditableSyntax
$leading): TypeToken
{
2645 return new TypeToken($leading, $this->trailing());
2648 public function with_trailing(EditableSyntax
$trailing): TypeToken
{
2649 return new TypeToken($this->leading(), $trailing);
2652 final class UnsetToken
extends EditableToken
{
2653 public function __construct(
2654 EditableSyntax
$leading,
2655 EditableSyntax
$trailing) {
2656 parent
::__construct('unset', $leading, $trailing, 'unset');
2659 public function with_leading(EditableSyntax
$leading): UnsetToken
{
2660 return new UnsetToken($leading, $this->trailing());
2663 public function with_trailing(EditableSyntax
$trailing): UnsetToken
{
2664 return new UnsetToken($this->leading(), $trailing);
2667 final class UseToken
extends EditableToken
{
2668 public function __construct(
2669 EditableSyntax
$leading,
2670 EditableSyntax
$trailing) {
2671 parent
::__construct('use', $leading, $trailing, 'use');
2674 public function with_leading(EditableSyntax
$leading): UseToken
{
2675 return new UseToken($leading, $this->trailing());
2678 public function with_trailing(EditableSyntax
$trailing): UseToken
{
2679 return new UseToken($this->leading(), $trailing);
2682 final class UsingToken
extends EditableToken
{
2683 public function __construct(
2684 EditableSyntax
$leading,
2685 EditableSyntax
$trailing) {
2686 parent
::__construct('using', $leading, $trailing, 'using');
2689 public function with_leading(EditableSyntax
$leading): UsingToken
{
2690 return new UsingToken($leading, $this->trailing());
2693 public function with_trailing(EditableSyntax
$trailing): UsingToken
{
2694 return new UsingToken($this->leading(), $trailing);
2697 final class VarToken
extends EditableToken
{
2698 public function __construct(
2699 EditableSyntax
$leading,
2700 EditableSyntax
$trailing) {
2701 parent
::__construct('var', $leading, $trailing, 'var');
2704 public function with_leading(EditableSyntax
$leading): VarToken
{
2705 return new VarToken($leading, $this->trailing());
2708 public function with_trailing(EditableSyntax
$trailing): VarToken
{
2709 return new VarToken($this->leading(), $trailing);
2712 final class VarrayToken
extends EditableToken
{
2713 public function __construct(
2714 EditableSyntax
$leading,
2715 EditableSyntax
$trailing) {
2716 parent
::__construct('varray', $leading, $trailing, 'varray');
2719 public function with_leading(EditableSyntax
$leading): VarrayToken
{
2720 return new VarrayToken($leading, $this->trailing());
2723 public function with_trailing(EditableSyntax
$trailing): VarrayToken
{
2724 return new VarrayToken($this->leading(), $trailing);
2727 final class VecToken
extends EditableToken
{
2728 public function __construct(
2729 EditableSyntax
$leading,
2730 EditableSyntax
$trailing) {
2731 parent
::__construct('vec', $leading, $trailing, 'vec');
2734 public function with_leading(EditableSyntax
$leading): VecToken
{
2735 return new VecToken($leading, $this->trailing());
2738 public function with_trailing(EditableSyntax
$trailing): VecToken
{
2739 return new VecToken($this->leading(), $trailing);
2742 final class VoidToken
extends EditableToken
{
2743 public function __construct(
2744 EditableSyntax
$leading,
2745 EditableSyntax
$trailing) {
2746 parent
::__construct('void', $leading, $trailing, 'void');
2749 public function with_leading(EditableSyntax
$leading): VoidToken
{
2750 return new VoidToken($leading, $this->trailing());
2753 public function with_trailing(EditableSyntax
$trailing): VoidToken
{
2754 return new VoidToken($this->leading(), $trailing);
2757 final class WhereToken
extends EditableToken
{
2758 public function __construct(
2759 EditableSyntax
$leading,
2760 EditableSyntax
$trailing) {
2761 parent
::__construct('where', $leading, $trailing, 'where');
2764 public function with_leading(EditableSyntax
$leading): WhereToken
{
2765 return new WhereToken($leading, $this->trailing());
2768 public function with_trailing(EditableSyntax
$trailing): WhereToken
{
2769 return new WhereToken($this->leading(), $trailing);
2772 final class WhileToken
extends EditableToken
{
2773 public function __construct(
2774 EditableSyntax
$leading,
2775 EditableSyntax
$trailing) {
2776 parent
::__construct('while', $leading, $trailing, 'while');
2779 public function with_leading(EditableSyntax
$leading): WhileToken
{
2780 return new WhileToken($leading, $this->trailing());
2783 public function with_trailing(EditableSyntax
$trailing): WhileToken
{
2784 return new WhileToken($this->leading(), $trailing);
2787 final class XorToken
extends EditableToken
{
2788 public function __construct(
2789 EditableSyntax
$leading,
2790 EditableSyntax
$trailing) {
2791 parent
::__construct('xor', $leading, $trailing, 'xor');
2794 public function with_leading(EditableSyntax
$leading): XorToken
{
2795 return new XorToken($leading, $this->trailing());
2798 public function with_trailing(EditableSyntax
$trailing): XorToken
{
2799 return new XorToken($this->leading(), $trailing);
2802 final class YieldToken
extends EditableToken
{
2803 public function __construct(
2804 EditableSyntax
$leading,
2805 EditableSyntax
$trailing) {
2806 parent
::__construct('yield', $leading, $trailing, 'yield');
2809 public function with_leading(EditableSyntax
$leading): YieldToken
{
2810 return new YieldToken($leading, $this->trailing());
2813 public function with_trailing(EditableSyntax
$trailing): YieldToken
{
2814 return new YieldToken($this->leading(), $trailing);
2817 final class LeftBracketToken
extends EditableToken
{
2818 public function __construct(
2819 EditableSyntax
$leading,
2820 EditableSyntax
$trailing) {
2821 parent
::__construct('[', $leading, $trailing, '[');
2824 public function with_leading(EditableSyntax
$leading): LeftBracketToken
{
2825 return new LeftBracketToken($leading, $this->trailing());
2828 public function with_trailing(EditableSyntax
$trailing): LeftBracketToken
{
2829 return new LeftBracketToken($this->leading(), $trailing);
2832 final class RightBracketToken
extends EditableToken
{
2833 public function __construct(
2834 EditableSyntax
$leading,
2835 EditableSyntax
$trailing) {
2836 parent
::__construct(']', $leading, $trailing, ']');
2839 public function with_leading(EditableSyntax
$leading): RightBracketToken
{
2840 return new RightBracketToken($leading, $this->trailing());
2843 public function with_trailing(EditableSyntax
$trailing): RightBracketToken
{
2844 return new RightBracketToken($this->leading(), $trailing);
2847 final class LeftParenToken
extends EditableToken
{
2848 public function __construct(
2849 EditableSyntax
$leading,
2850 EditableSyntax
$trailing) {
2851 parent
::__construct('(', $leading, $trailing, '(');
2854 public function with_leading(EditableSyntax
$leading): LeftParenToken
{
2855 return new LeftParenToken($leading, $this->trailing());
2858 public function with_trailing(EditableSyntax
$trailing): LeftParenToken
{
2859 return new LeftParenToken($this->leading(), $trailing);
2862 final class RightParenToken
extends EditableToken
{
2863 public function __construct(
2864 EditableSyntax
$leading,
2865 EditableSyntax
$trailing) {
2866 parent
::__construct(')', $leading, $trailing, ')');
2869 public function with_leading(EditableSyntax
$leading): RightParenToken
{
2870 return new RightParenToken($leading, $this->trailing());
2873 public function with_trailing(EditableSyntax
$trailing): RightParenToken
{
2874 return new RightParenToken($this->leading(), $trailing);
2877 final class LeftBraceToken
extends EditableToken
{
2878 public function __construct(
2879 EditableSyntax
$leading,
2880 EditableSyntax
$trailing) {
2881 parent
::__construct('{', $leading, $trailing, '{');
2884 public function with_leading(EditableSyntax
$leading): LeftBraceToken
{
2885 return new LeftBraceToken($leading, $this->trailing());
2888 public function with_trailing(EditableSyntax
$trailing): LeftBraceToken
{
2889 return new LeftBraceToken($this->leading(), $trailing);
2892 final class RightBraceToken
extends EditableToken
{
2893 public function __construct(
2894 EditableSyntax
$leading,
2895 EditableSyntax
$trailing) {
2896 parent
::__construct('}', $leading, $trailing, '}');
2899 public function with_leading(EditableSyntax
$leading): RightBraceToken
{
2900 return new RightBraceToken($leading, $this->trailing());
2903 public function with_trailing(EditableSyntax
$trailing): RightBraceToken
{
2904 return new RightBraceToken($this->leading(), $trailing);
2907 final class DotToken
extends EditableToken
{
2908 public function __construct(
2909 EditableSyntax
$leading,
2910 EditableSyntax
$trailing) {
2911 parent
::__construct('.', $leading, $trailing, '.');
2914 public function with_leading(EditableSyntax
$leading): DotToken
{
2915 return new DotToken($leading, $this->trailing());
2918 public function with_trailing(EditableSyntax
$trailing): DotToken
{
2919 return new DotToken($this->leading(), $trailing);
2922 final class MinusGreaterThanToken
extends EditableToken
{
2923 public function __construct(
2924 EditableSyntax
$leading,
2925 EditableSyntax
$trailing) {
2926 parent
::__construct('->', $leading, $trailing, '->');
2929 public function with_leading(EditableSyntax
$leading): MinusGreaterThanToken
{
2930 return new MinusGreaterThanToken($leading, $this->trailing());
2933 public function with_trailing(EditableSyntax
$trailing): MinusGreaterThanToken
{
2934 return new MinusGreaterThanToken($this->leading(), $trailing);
2937 final class PlusPlusToken
extends EditableToken
{
2938 public function __construct(
2939 EditableSyntax
$leading,
2940 EditableSyntax
$trailing) {
2941 parent
::__construct('++', $leading, $trailing, '++');
2944 public function with_leading(EditableSyntax
$leading): PlusPlusToken
{
2945 return new PlusPlusToken($leading, $this->trailing());
2948 public function with_trailing(EditableSyntax
$trailing): PlusPlusToken
{
2949 return new PlusPlusToken($this->leading(), $trailing);
2952 final class MinusMinusToken
extends EditableToken
{
2953 public function __construct(
2954 EditableSyntax
$leading,
2955 EditableSyntax
$trailing) {
2956 parent
::__construct('--', $leading, $trailing, '--');
2959 public function with_leading(EditableSyntax
$leading): MinusMinusToken
{
2960 return new MinusMinusToken($leading, $this->trailing());
2963 public function with_trailing(EditableSyntax
$trailing): MinusMinusToken
{
2964 return new MinusMinusToken($this->leading(), $trailing);
2967 final class StarStarToken
extends EditableToken
{
2968 public function __construct(
2969 EditableSyntax
$leading,
2970 EditableSyntax
$trailing) {
2971 parent
::__construct('**', $leading, $trailing, '**');
2974 public function with_leading(EditableSyntax
$leading): StarStarToken
{
2975 return new StarStarToken($leading, $this->trailing());
2978 public function with_trailing(EditableSyntax
$trailing): StarStarToken
{
2979 return new StarStarToken($this->leading(), $trailing);
2982 final class StarToken
extends EditableToken
{
2983 public function __construct(
2984 EditableSyntax
$leading,
2985 EditableSyntax
$trailing) {
2986 parent
::__construct('*', $leading, $trailing, '*');
2989 public function with_leading(EditableSyntax
$leading): StarToken
{
2990 return new StarToken($leading, $this->trailing());
2993 public function with_trailing(EditableSyntax
$trailing): StarToken
{
2994 return new StarToken($this->leading(), $trailing);
2997 final class PlusToken
extends EditableToken
{
2998 public function __construct(
2999 EditableSyntax
$leading,
3000 EditableSyntax
$trailing) {
3001 parent
::__construct('+', $leading, $trailing, '+');
3004 public function with_leading(EditableSyntax
$leading): PlusToken
{
3005 return new PlusToken($leading, $this->trailing());
3008 public function with_trailing(EditableSyntax
$trailing): PlusToken
{
3009 return new PlusToken($this->leading(), $trailing);
3012 final class MinusToken
extends EditableToken
{
3013 public function __construct(
3014 EditableSyntax
$leading,
3015 EditableSyntax
$trailing) {
3016 parent
::__construct('-', $leading, $trailing, '-');
3019 public function with_leading(EditableSyntax
$leading): MinusToken
{
3020 return new MinusToken($leading, $this->trailing());
3023 public function with_trailing(EditableSyntax
$trailing): MinusToken
{
3024 return new MinusToken($this->leading(), $trailing);
3027 final class TildeToken
extends EditableToken
{
3028 public function __construct(
3029 EditableSyntax
$leading,
3030 EditableSyntax
$trailing) {
3031 parent
::__construct('~', $leading, $trailing, '~');
3034 public function with_leading(EditableSyntax
$leading): TildeToken
{
3035 return new TildeToken($leading, $this->trailing());
3038 public function with_trailing(EditableSyntax
$trailing): TildeToken
{
3039 return new TildeToken($this->leading(), $trailing);
3042 final class ExclamationToken
extends EditableToken
{
3043 public function __construct(
3044 EditableSyntax
$leading,
3045 EditableSyntax
$trailing) {
3046 parent
::__construct('!', $leading, $trailing, '!');
3049 public function with_leading(EditableSyntax
$leading): ExclamationToken
{
3050 return new ExclamationToken($leading, $this->trailing());
3053 public function with_trailing(EditableSyntax
$trailing): ExclamationToken
{
3054 return new ExclamationToken($this->leading(), $trailing);
3057 final class DollarToken
extends EditableToken
{
3058 public function __construct(
3059 EditableSyntax
$leading,
3060 EditableSyntax
$trailing) {
3061 parent
::__construct('$', $leading, $trailing, '$');
3064 public function with_leading(EditableSyntax
$leading): DollarToken
{
3065 return new DollarToken($leading, $this->trailing());
3068 public function with_trailing(EditableSyntax
$trailing): DollarToken
{
3069 return new DollarToken($this->leading(), $trailing);
3072 final class SlashToken
extends EditableToken
{
3073 public function __construct(
3074 EditableSyntax
$leading,
3075 EditableSyntax
$trailing) {
3076 parent
::__construct('/', $leading, $trailing, '/');
3079 public function with_leading(EditableSyntax
$leading): SlashToken
{
3080 return new SlashToken($leading, $this->trailing());
3083 public function with_trailing(EditableSyntax
$trailing): SlashToken
{
3084 return new SlashToken($this->leading(), $trailing);
3087 final class PercentToken
extends EditableToken
{
3088 public function __construct(
3089 EditableSyntax
$leading,
3090 EditableSyntax
$trailing) {
3091 parent
::__construct('%', $leading, $trailing, '%');
3094 public function with_leading(EditableSyntax
$leading): PercentToken
{
3095 return new PercentToken($leading, $this->trailing());
3098 public function with_trailing(EditableSyntax
$trailing): PercentToken
{
3099 return new PercentToken($this->leading(), $trailing);
3102 final class LessThanGreaterThanToken
extends EditableToken
{
3103 public function __construct(
3104 EditableSyntax
$leading,
3105 EditableSyntax
$trailing) {
3106 parent
::__construct('<>', $leading, $trailing, '<>');
3109 public function with_leading(EditableSyntax
$leading): LessThanGreaterThanToken
{
3110 return new LessThanGreaterThanToken($leading, $this->trailing());
3113 public function with_trailing(EditableSyntax
$trailing): LessThanGreaterThanToken
{
3114 return new LessThanGreaterThanToken($this->leading(), $trailing);
3117 final class LessThanEqualGreaterThanToken
extends EditableToken
{
3118 public function __construct(
3119 EditableSyntax
$leading,
3120 EditableSyntax
$trailing) {
3121 parent
::__construct('<=>', $leading, $trailing, '<=>');
3124 public function with_leading(EditableSyntax
$leading): LessThanEqualGreaterThanToken
{
3125 return new LessThanEqualGreaterThanToken($leading, $this->trailing());
3128 public function with_trailing(EditableSyntax
$trailing): LessThanEqualGreaterThanToken
{
3129 return new LessThanEqualGreaterThanToken($this->leading(), $trailing);
3132 final class LessThanLessThanToken
extends EditableToken
{
3133 public function __construct(
3134 EditableSyntax
$leading,
3135 EditableSyntax
$trailing) {
3136 parent
::__construct('<<', $leading, $trailing, '<<');
3139 public function with_leading(EditableSyntax
$leading): LessThanLessThanToken
{
3140 return new LessThanLessThanToken($leading, $this->trailing());
3143 public function with_trailing(EditableSyntax
$trailing): LessThanLessThanToken
{
3144 return new LessThanLessThanToken($this->leading(), $trailing);
3147 final class GreaterThanGreaterThanToken
extends EditableToken
{
3148 public function __construct(
3149 EditableSyntax
$leading,
3150 EditableSyntax
$trailing) {
3151 parent
::__construct('>>', $leading, $trailing, '>>');
3154 public function with_leading(EditableSyntax
$leading): GreaterThanGreaterThanToken
{
3155 return new GreaterThanGreaterThanToken($leading, $this->trailing());
3158 public function with_trailing(EditableSyntax
$trailing): GreaterThanGreaterThanToken
{
3159 return new GreaterThanGreaterThanToken($this->leading(), $trailing);
3162 final class LessThanToken
extends EditableToken
{
3163 public function __construct(
3164 EditableSyntax
$leading,
3165 EditableSyntax
$trailing) {
3166 parent
::__construct('<', $leading, $trailing, '<');
3169 public function with_leading(EditableSyntax
$leading): LessThanToken
{
3170 return new LessThanToken($leading, $this->trailing());
3173 public function with_trailing(EditableSyntax
$trailing): LessThanToken
{
3174 return new LessThanToken($this->leading(), $trailing);
3177 final class GreaterThanToken
extends EditableToken
{
3178 public function __construct(
3179 EditableSyntax
$leading,
3180 EditableSyntax
$trailing) {
3181 parent
::__construct('>', $leading, $trailing, '>');
3184 public function with_leading(EditableSyntax
$leading): GreaterThanToken
{
3185 return new GreaterThanToken($leading, $this->trailing());
3188 public function with_trailing(EditableSyntax
$trailing): GreaterThanToken
{
3189 return new GreaterThanToken($this->leading(), $trailing);
3192 final class LessThanEqualToken
extends EditableToken
{
3193 public function __construct(
3194 EditableSyntax
$leading,
3195 EditableSyntax
$trailing) {
3196 parent
::__construct('<=', $leading, $trailing, '<=');
3199 public function with_leading(EditableSyntax
$leading): LessThanEqualToken
{
3200 return new LessThanEqualToken($leading, $this->trailing());
3203 public function with_trailing(EditableSyntax
$trailing): LessThanEqualToken
{
3204 return new LessThanEqualToken($this->leading(), $trailing);
3207 final class GreaterThanEqualToken
extends EditableToken
{
3208 public function __construct(
3209 EditableSyntax
$leading,
3210 EditableSyntax
$trailing) {
3211 parent
::__construct('>=', $leading, $trailing, '>=');
3214 public function with_leading(EditableSyntax
$leading): GreaterThanEqualToken
{
3215 return new GreaterThanEqualToken($leading, $this->trailing());
3218 public function with_trailing(EditableSyntax
$trailing): GreaterThanEqualToken
{
3219 return new GreaterThanEqualToken($this->leading(), $trailing);
3222 final class EqualEqualToken
extends EditableToken
{
3223 public function __construct(
3224 EditableSyntax
$leading,
3225 EditableSyntax
$trailing) {
3226 parent
::__construct('==', $leading, $trailing, '==');
3229 public function with_leading(EditableSyntax
$leading): EqualEqualToken
{
3230 return new EqualEqualToken($leading, $this->trailing());
3233 public function with_trailing(EditableSyntax
$trailing): EqualEqualToken
{
3234 return new EqualEqualToken($this->leading(), $trailing);
3237 final class EqualEqualEqualToken
extends EditableToken
{
3238 public function __construct(
3239 EditableSyntax
$leading,
3240 EditableSyntax
$trailing) {
3241 parent
::__construct('===', $leading, $trailing, '===');
3244 public function with_leading(EditableSyntax
$leading): EqualEqualEqualToken
{
3245 return new EqualEqualEqualToken($leading, $this->trailing());
3248 public function with_trailing(EditableSyntax
$trailing): EqualEqualEqualToken
{
3249 return new EqualEqualEqualToken($this->leading(), $trailing);
3252 final class ExclamationEqualToken
extends EditableToken
{
3253 public function __construct(
3254 EditableSyntax
$leading,
3255 EditableSyntax
$trailing) {
3256 parent
::__construct('!=', $leading, $trailing, '!=');
3259 public function with_leading(EditableSyntax
$leading): ExclamationEqualToken
{
3260 return new ExclamationEqualToken($leading, $this->trailing());
3263 public function with_trailing(EditableSyntax
$trailing): ExclamationEqualToken
{
3264 return new ExclamationEqualToken($this->leading(), $trailing);
3267 final class ExclamationEqualEqualToken
extends EditableToken
{
3268 public function __construct(
3269 EditableSyntax
$leading,
3270 EditableSyntax
$trailing) {
3271 parent
::__construct('!==', $leading, $trailing, '!==');
3274 public function with_leading(EditableSyntax
$leading): ExclamationEqualEqualToken
{
3275 return new ExclamationEqualEqualToken($leading, $this->trailing());
3278 public function with_trailing(EditableSyntax
$trailing): ExclamationEqualEqualToken
{
3279 return new ExclamationEqualEqualToken($this->leading(), $trailing);
3282 final class CaratToken
extends EditableToken
{
3283 public function __construct(
3284 EditableSyntax
$leading,
3285 EditableSyntax
$trailing) {
3286 parent
::__construct('^', $leading, $trailing, '^');
3289 public function with_leading(EditableSyntax
$leading): CaratToken
{
3290 return new CaratToken($leading, $this->trailing());
3293 public function with_trailing(EditableSyntax
$trailing): CaratToken
{
3294 return new CaratToken($this->leading(), $trailing);
3297 final class BarToken
extends EditableToken
{
3298 public function __construct(
3299 EditableSyntax
$leading,
3300 EditableSyntax
$trailing) {
3301 parent
::__construct('|', $leading, $trailing, '|');
3304 public function with_leading(EditableSyntax
$leading): BarToken
{
3305 return new BarToken($leading, $this->trailing());
3308 public function with_trailing(EditableSyntax
$trailing): BarToken
{
3309 return new BarToken($this->leading(), $trailing);
3312 final class AmpersandToken
extends EditableToken
{
3313 public function __construct(
3314 EditableSyntax
$leading,
3315 EditableSyntax
$trailing) {
3316 parent
::__construct('&', $leading, $trailing, '&');
3319 public function with_leading(EditableSyntax
$leading): AmpersandToken
{
3320 return new AmpersandToken($leading, $this->trailing());
3323 public function with_trailing(EditableSyntax
$trailing): AmpersandToken
{
3324 return new AmpersandToken($this->leading(), $trailing);
3327 final class AmpersandAmpersandToken
extends EditableToken
{
3328 public function __construct(
3329 EditableSyntax
$leading,
3330 EditableSyntax
$trailing) {
3331 parent
::__construct('&&', $leading, $trailing, '&&');
3334 public function with_leading(EditableSyntax
$leading): AmpersandAmpersandToken
{
3335 return new AmpersandAmpersandToken($leading, $this->trailing());
3338 public function with_trailing(EditableSyntax
$trailing): AmpersandAmpersandToken
{
3339 return new AmpersandAmpersandToken($this->leading(), $trailing);
3342 final class BarBarToken
extends EditableToken
{
3343 public function __construct(
3344 EditableSyntax
$leading,
3345 EditableSyntax
$trailing) {
3346 parent
::__construct('||', $leading, $trailing, '||');
3349 public function with_leading(EditableSyntax
$leading): BarBarToken
{
3350 return new BarBarToken($leading, $this->trailing());
3353 public function with_trailing(EditableSyntax
$trailing): BarBarToken
{
3354 return new BarBarToken($this->leading(), $trailing);
3357 final class QuestionToken
extends EditableToken
{
3358 public function __construct(
3359 EditableSyntax
$leading,
3360 EditableSyntax
$trailing) {
3361 parent
::__construct('?', $leading, $trailing, '?');
3364 public function with_leading(EditableSyntax
$leading): QuestionToken
{
3365 return new QuestionToken($leading, $this->trailing());
3368 public function with_trailing(EditableSyntax
$trailing): QuestionToken
{
3369 return new QuestionToken($this->leading(), $trailing);
3372 final class QuestionColonToken
extends EditableToken
{
3373 public function __construct(
3374 EditableSyntax
$leading,
3375 EditableSyntax
$trailing) {
3376 parent
::__construct('?:', $leading, $trailing, '?:');
3379 public function with_leading(EditableSyntax
$leading): QuestionColonToken
{
3380 return new QuestionColonToken($leading, $this->trailing());
3383 public function with_trailing(EditableSyntax
$trailing): QuestionColonToken
{
3384 return new QuestionColonToken($this->leading(), $trailing);
3387 final class QuestionQuestionToken
extends EditableToken
{
3388 public function __construct(
3389 EditableSyntax
$leading,
3390 EditableSyntax
$trailing) {
3391 parent
::__construct('??', $leading, $trailing, '??');
3394 public function with_leading(EditableSyntax
$leading): QuestionQuestionToken
{
3395 return new QuestionQuestionToken($leading, $this->trailing());
3398 public function with_trailing(EditableSyntax
$trailing): QuestionQuestionToken
{
3399 return new QuestionQuestionToken($this->leading(), $trailing);
3402 final class ColonToken
extends EditableToken
{
3403 public function __construct(
3404 EditableSyntax
$leading,
3405 EditableSyntax
$trailing) {
3406 parent
::__construct(':', $leading, $trailing, ':');
3409 public function with_leading(EditableSyntax
$leading): ColonToken
{
3410 return new ColonToken($leading, $this->trailing());
3413 public function with_trailing(EditableSyntax
$trailing): ColonToken
{
3414 return new ColonToken($this->leading(), $trailing);
3417 final class SemicolonToken
extends EditableToken
{
3418 public function __construct(
3419 EditableSyntax
$leading,
3420 EditableSyntax
$trailing) {
3421 parent
::__construct(';', $leading, $trailing, ';');
3424 public function with_leading(EditableSyntax
$leading): SemicolonToken
{
3425 return new SemicolonToken($leading, $this->trailing());
3428 public function with_trailing(EditableSyntax
$trailing): SemicolonToken
{
3429 return new SemicolonToken($this->leading(), $trailing);
3432 final class EqualToken
extends EditableToken
{
3433 public function __construct(
3434 EditableSyntax
$leading,
3435 EditableSyntax
$trailing) {
3436 parent
::__construct('=', $leading, $trailing, '=');
3439 public function with_leading(EditableSyntax
$leading): EqualToken
{
3440 return new EqualToken($leading, $this->trailing());
3443 public function with_trailing(EditableSyntax
$trailing): EqualToken
{
3444 return new EqualToken($this->leading(), $trailing);
3447 final class StarStarEqualToken
extends EditableToken
{
3448 public function __construct(
3449 EditableSyntax
$leading,
3450 EditableSyntax
$trailing) {
3451 parent
::__construct('**=', $leading, $trailing, '**=');
3454 public function with_leading(EditableSyntax
$leading): StarStarEqualToken
{
3455 return new StarStarEqualToken($leading, $this->trailing());
3458 public function with_trailing(EditableSyntax
$trailing): StarStarEqualToken
{
3459 return new StarStarEqualToken($this->leading(), $trailing);
3462 final class StarEqualToken
extends EditableToken
{
3463 public function __construct(
3464 EditableSyntax
$leading,
3465 EditableSyntax
$trailing) {
3466 parent
::__construct('*=', $leading, $trailing, '*=');
3469 public function with_leading(EditableSyntax
$leading): StarEqualToken
{
3470 return new StarEqualToken($leading, $this->trailing());
3473 public function with_trailing(EditableSyntax
$trailing): StarEqualToken
{
3474 return new StarEqualToken($this->leading(), $trailing);
3477 final class SlashEqualToken
extends EditableToken
{
3478 public function __construct(
3479 EditableSyntax
$leading,
3480 EditableSyntax
$trailing) {
3481 parent
::__construct('/=', $leading, $trailing, '/=');
3484 public function with_leading(EditableSyntax
$leading): SlashEqualToken
{
3485 return new SlashEqualToken($leading, $this->trailing());
3488 public function with_trailing(EditableSyntax
$trailing): SlashEqualToken
{
3489 return new SlashEqualToken($this->leading(), $trailing);
3492 final class PercentEqualToken
extends EditableToken
{
3493 public function __construct(
3494 EditableSyntax
$leading,
3495 EditableSyntax
$trailing) {
3496 parent
::__construct('%=', $leading, $trailing, '%=');
3499 public function with_leading(EditableSyntax
$leading): PercentEqualToken
{
3500 return new PercentEqualToken($leading, $this->trailing());
3503 public function with_trailing(EditableSyntax
$trailing): PercentEqualToken
{
3504 return new PercentEqualToken($this->leading(), $trailing);
3507 final class PlusEqualToken
extends EditableToken
{
3508 public function __construct(
3509 EditableSyntax
$leading,
3510 EditableSyntax
$trailing) {
3511 parent
::__construct('+=', $leading, $trailing, '+=');
3514 public function with_leading(EditableSyntax
$leading): PlusEqualToken
{
3515 return new PlusEqualToken($leading, $this->trailing());
3518 public function with_trailing(EditableSyntax
$trailing): PlusEqualToken
{
3519 return new PlusEqualToken($this->leading(), $trailing);
3522 final class MinusEqualToken
extends EditableToken
{
3523 public function __construct(
3524 EditableSyntax
$leading,
3525 EditableSyntax
$trailing) {
3526 parent
::__construct('-=', $leading, $trailing, '-=');
3529 public function with_leading(EditableSyntax
$leading): MinusEqualToken
{
3530 return new MinusEqualToken($leading, $this->trailing());
3533 public function with_trailing(EditableSyntax
$trailing): MinusEqualToken
{
3534 return new MinusEqualToken($this->leading(), $trailing);
3537 final class DotEqualToken
extends EditableToken
{
3538 public function __construct(
3539 EditableSyntax
$leading,
3540 EditableSyntax
$trailing) {
3541 parent
::__construct('.=', $leading, $trailing, '.=');
3544 public function with_leading(EditableSyntax
$leading): DotEqualToken
{
3545 return new DotEqualToken($leading, $this->trailing());
3548 public function with_trailing(EditableSyntax
$trailing): DotEqualToken
{
3549 return new DotEqualToken($this->leading(), $trailing);
3552 final class LessThanLessThanEqualToken
extends EditableToken
{
3553 public function __construct(
3554 EditableSyntax
$leading,
3555 EditableSyntax
$trailing) {
3556 parent
::__construct('<<=', $leading, $trailing, '<<=');
3559 public function with_leading(EditableSyntax
$leading): LessThanLessThanEqualToken
{
3560 return new LessThanLessThanEqualToken($leading, $this->trailing());
3563 public function with_trailing(EditableSyntax
$trailing): LessThanLessThanEqualToken
{
3564 return new LessThanLessThanEqualToken($this->leading(), $trailing);
3567 final class GreaterThanGreaterThanEqualToken
extends EditableToken
{
3568 public function __construct(
3569 EditableSyntax
$leading,
3570 EditableSyntax
$trailing) {
3571 parent
::__construct('>>=', $leading, $trailing, '>>=');
3574 public function with_leading(EditableSyntax
$leading): GreaterThanGreaterThanEqualToken
{
3575 return new GreaterThanGreaterThanEqualToken($leading, $this->trailing());
3578 public function with_trailing(EditableSyntax
$trailing): GreaterThanGreaterThanEqualToken
{
3579 return new GreaterThanGreaterThanEqualToken($this->leading(), $trailing);
3582 final class AmpersandEqualToken
extends EditableToken
{
3583 public function __construct(
3584 EditableSyntax
$leading,
3585 EditableSyntax
$trailing) {
3586 parent
::__construct('&=', $leading, $trailing, '&=');
3589 public function with_leading(EditableSyntax
$leading): AmpersandEqualToken
{
3590 return new AmpersandEqualToken($leading, $this->trailing());
3593 public function with_trailing(EditableSyntax
$trailing): AmpersandEqualToken
{
3594 return new AmpersandEqualToken($this->leading(), $trailing);
3597 final class CaratEqualToken
extends EditableToken
{
3598 public function __construct(
3599 EditableSyntax
$leading,
3600 EditableSyntax
$trailing) {
3601 parent
::__construct('^=', $leading, $trailing, '^=');
3604 public function with_leading(EditableSyntax
$leading): CaratEqualToken
{
3605 return new CaratEqualToken($leading, $this->trailing());
3608 public function with_trailing(EditableSyntax
$trailing): CaratEqualToken
{
3609 return new CaratEqualToken($this->leading(), $trailing);
3612 final class BarEqualToken
extends EditableToken
{
3613 public function __construct(
3614 EditableSyntax
$leading,
3615 EditableSyntax
$trailing) {
3616 parent
::__construct('|=', $leading, $trailing, '|=');
3619 public function with_leading(EditableSyntax
$leading): BarEqualToken
{
3620 return new BarEqualToken($leading, $this->trailing());
3623 public function with_trailing(EditableSyntax
$trailing): BarEqualToken
{
3624 return new BarEqualToken($this->leading(), $trailing);
3627 final class CommaToken
extends EditableToken
{
3628 public function __construct(
3629 EditableSyntax
$leading,
3630 EditableSyntax
$trailing) {
3631 parent
::__construct(',', $leading, $trailing, ',');
3634 public function with_leading(EditableSyntax
$leading): CommaToken
{
3635 return new CommaToken($leading, $this->trailing());
3638 public function with_trailing(EditableSyntax
$trailing): CommaToken
{
3639 return new CommaToken($this->leading(), $trailing);
3642 final class AtToken
extends EditableToken
{
3643 public function __construct(
3644 EditableSyntax
$leading,
3645 EditableSyntax
$trailing) {
3646 parent
::__construct('@', $leading, $trailing, '@');
3649 public function with_leading(EditableSyntax
$leading): AtToken
{
3650 return new AtToken($leading, $this->trailing());
3653 public function with_trailing(EditableSyntax
$trailing): AtToken
{
3654 return new AtToken($this->leading(), $trailing);
3657 final class ColonColonToken
extends EditableToken
{
3658 public function __construct(
3659 EditableSyntax
$leading,
3660 EditableSyntax
$trailing) {
3661 parent
::__construct('::', $leading, $trailing, '::');
3664 public function with_leading(EditableSyntax
$leading): ColonColonToken
{
3665 return new ColonColonToken($leading, $this->trailing());
3668 public function with_trailing(EditableSyntax
$trailing): ColonColonToken
{
3669 return new ColonColonToken($this->leading(), $trailing);
3672 final class EqualGreaterThanToken
extends EditableToken
{
3673 public function __construct(
3674 EditableSyntax
$leading,
3675 EditableSyntax
$trailing) {
3676 parent
::__construct('=>', $leading, $trailing, '=>');
3679 public function with_leading(EditableSyntax
$leading): EqualGreaterThanToken
{
3680 return new EqualGreaterThanToken($leading, $this->trailing());
3683 public function with_trailing(EditableSyntax
$trailing): EqualGreaterThanToken
{
3684 return new EqualGreaterThanToken($this->leading(), $trailing);
3687 final class EqualEqualGreaterThanToken
extends EditableToken
{
3688 public function __construct(
3689 EditableSyntax
$leading,
3690 EditableSyntax
$trailing) {
3691 parent
::__construct('==>', $leading, $trailing, '==>');
3694 public function with_leading(EditableSyntax
$leading): EqualEqualGreaterThanToken
{
3695 return new EqualEqualGreaterThanToken($leading, $this->trailing());
3698 public function with_trailing(EditableSyntax
$trailing): EqualEqualGreaterThanToken
{
3699 return new EqualEqualGreaterThanToken($this->leading(), $trailing);
3702 final class QuestionMinusGreaterThanToken
extends EditableToken
{
3703 public function __construct(
3704 EditableSyntax
$leading,
3705 EditableSyntax
$trailing) {
3706 parent
::__construct('?->', $leading, $trailing, '?->');
3709 public function with_leading(EditableSyntax
$leading): QuestionMinusGreaterThanToken
{
3710 return new QuestionMinusGreaterThanToken($leading, $this->trailing());
3713 public function with_trailing(EditableSyntax
$trailing): QuestionMinusGreaterThanToken
{
3714 return new QuestionMinusGreaterThanToken($this->leading(), $trailing);
3717 final class DotDotDotToken
extends EditableToken
{
3718 public function __construct(
3719 EditableSyntax
$leading,
3720 EditableSyntax
$trailing) {
3721 parent
::__construct('...', $leading, $trailing, '...');
3724 public function with_leading(EditableSyntax
$leading): DotDotDotToken
{
3725 return new DotDotDotToken($leading, $this->trailing());
3728 public function with_trailing(EditableSyntax
$trailing): DotDotDotToken
{
3729 return new DotDotDotToken($this->leading(), $trailing);
3732 final class DollarDollarToken
extends EditableToken
{
3733 public function __construct(
3734 EditableSyntax
$leading,
3735 EditableSyntax
$trailing) {
3736 parent
::__construct('$$', $leading, $trailing, '$$');
3739 public function with_leading(EditableSyntax
$leading): DollarDollarToken
{
3740 return new DollarDollarToken($leading, $this->trailing());
3743 public function with_trailing(EditableSyntax
$trailing): DollarDollarToken
{
3744 return new DollarDollarToken($this->leading(), $trailing);
3747 final class BarGreaterThanToken
extends EditableToken
{
3748 public function __construct(
3749 EditableSyntax
$leading,
3750 EditableSyntax
$trailing) {
3751 parent
::__construct('|>', $leading, $trailing, '|>');
3754 public function with_leading(EditableSyntax
$leading): BarGreaterThanToken
{
3755 return new BarGreaterThanToken($leading, $this->trailing());
3758 public function with_trailing(EditableSyntax
$trailing): BarGreaterThanToken
{
3759 return new BarGreaterThanToken($this->leading(), $trailing);
3762 final class NullLiteralToken
extends EditableToken
{
3763 public function __construct(
3764 EditableSyntax
$leading,
3765 EditableSyntax
$trailing) {
3766 parent
::__construct('null', $leading, $trailing, 'null');
3769 public function with_leading(EditableSyntax
$leading): NullLiteralToken
{
3770 return new NullLiteralToken($leading, $this->trailing());
3773 public function with_trailing(EditableSyntax
$trailing): NullLiteralToken
{
3774 return new NullLiteralToken($this->leading(), $trailing);
3777 final class SlashGreaterThanToken
extends EditableToken
{
3778 public function __construct(
3779 EditableSyntax
$leading,
3780 EditableSyntax
$trailing) {
3781 parent
::__construct('/>', $leading, $trailing, '/>');
3784 public function with_leading(EditableSyntax
$leading): SlashGreaterThanToken
{
3785 return new SlashGreaterThanToken($leading, $this->trailing());
3788 public function with_trailing(EditableSyntax
$trailing): SlashGreaterThanToken
{
3789 return new SlashGreaterThanToken($this->leading(), $trailing);
3792 final class LessThanSlashToken
extends EditableToken
{
3793 public function __construct(
3794 EditableSyntax
$leading,
3795 EditableSyntax
$trailing) {
3796 parent
::__construct('</', $leading, $trailing, '</');
3799 public function with_leading(EditableSyntax
$leading): LessThanSlashToken
{
3800 return new LessThanSlashToken($leading, $this->trailing());
3803 public function with_trailing(EditableSyntax
$trailing): LessThanSlashToken
{
3804 return new LessThanSlashToken($this->leading(), $trailing);
3807 final class LessThanQuestionToken
extends EditableToken
{
3808 public function __construct(
3809 EditableSyntax
$leading,
3810 EditableSyntax
$trailing) {
3811 parent
::__construct('<?', $leading, $trailing, '<?');
3814 public function with_leading(EditableSyntax
$leading): LessThanQuestionToken
{
3815 return new LessThanQuestionToken($leading, $this->trailing());
3818 public function with_trailing(EditableSyntax
$trailing): LessThanQuestionToken
{
3819 return new LessThanQuestionToken($this->leading(), $trailing);
3822 final class QuestionGreaterThanToken
extends EditableToken
{
3823 public function __construct(
3824 EditableSyntax
$leading,
3825 EditableSyntax
$trailing) {
3826 parent
::__construct('?>', $leading, $trailing, '?>');
3829 public function with_leading(EditableSyntax
$leading): QuestionGreaterThanToken
{
3830 return new QuestionGreaterThanToken($leading, $this->trailing());
3833 public function with_trailing(EditableSyntax
$trailing): QuestionGreaterThanToken
{
3834 return new QuestionGreaterThanToken($this->leading(), $trailing);
3837 final class HaltCompilerToken
extends EditableToken
{
3838 public function __construct(
3839 EditableSyntax
$leading,
3840 EditableSyntax
$trailing) {
3841 parent
::__construct('__halt_compiler', $leading, $trailing, '__halt_compiler');
3844 public function with_leading(EditableSyntax
$leading): HaltCompilerToken
{
3845 return new HaltCompilerToken($leading, $this->trailing());
3848 public function with_trailing(EditableSyntax
$trailing): HaltCompilerToken
{
3849 return new HaltCompilerToken($this->leading(), $trailing);
3853 final class ErrorTokenToken
extends EditableToken
{
3854 public function __construct(
3855 EditableSyntax
$leading,
3856 EditableSyntax
$trailing,
3858 parent
::__construct('error_token', $leading, $trailing, $text);
3861 public function with_text(string $text): ErrorTokenToken
{
3862 return new ErrorTokenToken($this->leading(), $this->trailing(), $text);
3865 public function with_leading(EditableSyntax
$leading): ErrorTokenToken
{
3866 return new ErrorTokenToken($leading, $this->trailing(), $this->text());
3869 public function with_trailing(EditableSyntax
$trailing): ErrorTokenToken
{
3870 return new ErrorTokenToken($this->leading(), $trailing, $this->text());
3873 final class NameToken
extends EditableToken
{
3874 public function __construct(
3875 EditableSyntax
$leading,
3876 EditableSyntax
$trailing,
3878 parent
::__construct('name', $leading, $trailing, $text);
3881 public function with_text(string $text): NameToken
{
3882 return new NameToken($this->leading(), $this->trailing(), $text);
3885 public function with_leading(EditableSyntax
$leading): NameToken
{
3886 return new NameToken($leading, $this->trailing(), $this->text());
3889 public function with_trailing(EditableSyntax
$trailing): NameToken
{
3890 return new NameToken($this->leading(), $trailing, $this->text());
3893 final class QualifiedNameToken
extends EditableToken
{
3894 public function __construct(
3895 EditableSyntax
$leading,
3896 EditableSyntax
$trailing,
3898 parent
::__construct('qualified_name', $leading, $trailing, $text);
3901 public function with_text(string $text): QualifiedNameToken
{
3902 return new QualifiedNameToken($this->leading(), $this->trailing(), $text);
3905 public function with_leading(EditableSyntax
$leading): QualifiedNameToken
{
3906 return new QualifiedNameToken($leading, $this->trailing(), $this->text());
3909 public function with_trailing(EditableSyntax
$trailing): QualifiedNameToken
{
3910 return new QualifiedNameToken($this->leading(), $trailing, $this->text());
3913 final class VariableToken
extends EditableToken
{
3914 public function __construct(
3915 EditableSyntax
$leading,
3916 EditableSyntax
$trailing,
3918 parent
::__construct('variable', $leading, $trailing, $text);
3921 public function with_text(string $text): VariableToken
{
3922 return new VariableToken($this->leading(), $this->trailing(), $text);
3925 public function with_leading(EditableSyntax
$leading): VariableToken
{
3926 return new VariableToken($leading, $this->trailing(), $this->text());
3929 public function with_trailing(EditableSyntax
$trailing): VariableToken
{
3930 return new VariableToken($this->leading(), $trailing, $this->text());
3933 final class NamespacePrefixToken
extends EditableToken
{
3934 public function __construct(
3935 EditableSyntax
$leading,
3936 EditableSyntax
$trailing,
3938 parent
::__construct('namespace_prefix', $leading, $trailing, $text);
3941 public function with_text(string $text): NamespacePrefixToken
{
3942 return new NamespacePrefixToken($this->leading(), $this->trailing(), $text);
3945 public function with_leading(EditableSyntax
$leading): NamespacePrefixToken
{
3946 return new NamespacePrefixToken($leading, $this->trailing(), $this->text());
3949 public function with_trailing(EditableSyntax
$trailing): NamespacePrefixToken
{
3950 return new NamespacePrefixToken($this->leading(), $trailing, $this->text());
3953 final class DecimalLiteralToken
extends EditableToken
{
3954 public function __construct(
3955 EditableSyntax
$leading,
3956 EditableSyntax
$trailing,
3958 parent
::__construct('decimal_literal', $leading, $trailing, $text);
3961 public function with_text(string $text): DecimalLiteralToken
{
3962 return new DecimalLiteralToken($this->leading(), $this->trailing(), $text);
3965 public function with_leading(EditableSyntax
$leading): DecimalLiteralToken
{
3966 return new DecimalLiteralToken($leading, $this->trailing(), $this->text());
3969 public function with_trailing(EditableSyntax
$trailing): DecimalLiteralToken
{
3970 return new DecimalLiteralToken($this->leading(), $trailing, $this->text());
3973 final class OctalLiteralToken
extends EditableToken
{
3974 public function __construct(
3975 EditableSyntax
$leading,
3976 EditableSyntax
$trailing,
3978 parent
::__construct('octal_literal', $leading, $trailing, $text);
3981 public function with_text(string $text): OctalLiteralToken
{
3982 return new OctalLiteralToken($this->leading(), $this->trailing(), $text);
3985 public function with_leading(EditableSyntax
$leading): OctalLiteralToken
{
3986 return new OctalLiteralToken($leading, $this->trailing(), $this->text());
3989 public function with_trailing(EditableSyntax
$trailing): OctalLiteralToken
{
3990 return new OctalLiteralToken($this->leading(), $trailing, $this->text());
3993 final class HexadecimalLiteralToken
extends EditableToken
{
3994 public function __construct(
3995 EditableSyntax
$leading,
3996 EditableSyntax
$trailing,
3998 parent
::__construct('hexadecimal_literal', $leading, $trailing, $text);
4001 public function with_text(string $text): HexadecimalLiteralToken
{
4002 return new HexadecimalLiteralToken($this->leading(), $this->trailing(), $text);
4005 public function with_leading(EditableSyntax
$leading): HexadecimalLiteralToken
{
4006 return new HexadecimalLiteralToken($leading, $this->trailing(), $this->text());
4009 public function with_trailing(EditableSyntax
$trailing): HexadecimalLiteralToken
{
4010 return new HexadecimalLiteralToken($this->leading(), $trailing, $this->text());
4013 final class BinaryLiteralToken
extends EditableToken
{
4014 public function __construct(
4015 EditableSyntax
$leading,
4016 EditableSyntax
$trailing,
4018 parent
::__construct('binary_literal', $leading, $trailing, $text);
4021 public function with_text(string $text): BinaryLiteralToken
{
4022 return new BinaryLiteralToken($this->leading(), $this->trailing(), $text);
4025 public function with_leading(EditableSyntax
$leading): BinaryLiteralToken
{
4026 return new BinaryLiteralToken($leading, $this->trailing(), $this->text());
4029 public function with_trailing(EditableSyntax
$trailing): BinaryLiteralToken
{
4030 return new BinaryLiteralToken($this->leading(), $trailing, $this->text());
4033 final class FloatingLiteralToken
extends EditableToken
{
4034 public function __construct(
4035 EditableSyntax
$leading,
4036 EditableSyntax
$trailing,
4038 parent
::__construct('floating_literal', $leading, $trailing, $text);
4041 public function with_text(string $text): FloatingLiteralToken
{
4042 return new FloatingLiteralToken($this->leading(), $this->trailing(), $text);
4045 public function with_leading(EditableSyntax
$leading): FloatingLiteralToken
{
4046 return new FloatingLiteralToken($leading, $this->trailing(), $this->text());
4049 public function with_trailing(EditableSyntax
$trailing): FloatingLiteralToken
{
4050 return new FloatingLiteralToken($this->leading(), $trailing, $this->text());
4053 final class ExecutionStringLiteralToken
extends EditableToken
{
4054 public function __construct(
4055 EditableSyntax
$leading,
4056 EditableSyntax
$trailing,
4058 parent
::__construct('execution_string_literal', $leading, $trailing, $text);
4061 public function with_text(string $text): ExecutionStringLiteralToken
{
4062 return new ExecutionStringLiteralToken($this->leading(), $this->trailing(), $text);
4065 public function with_leading(EditableSyntax
$leading): ExecutionStringLiteralToken
{
4066 return new ExecutionStringLiteralToken($leading, $this->trailing(), $this->text());
4069 public function with_trailing(EditableSyntax
$trailing): ExecutionStringLiteralToken
{
4070 return new ExecutionStringLiteralToken($this->leading(), $trailing, $this->text());
4073 final class ExecutionStringLiteralHeadToken
extends EditableToken
{
4074 public function __construct(
4075 EditableSyntax
$leading,
4076 EditableSyntax
$trailing,
4078 parent
::__construct('execution_string_literal_head', $leading, $trailing, $text);
4081 public function with_text(string $text): ExecutionStringLiteralHeadToken
{
4082 return new ExecutionStringLiteralHeadToken($this->leading(), $this->trailing(), $text);
4085 public function with_leading(EditableSyntax
$leading): ExecutionStringLiteralHeadToken
{
4086 return new ExecutionStringLiteralHeadToken($leading, $this->trailing(), $this->text());
4089 public function with_trailing(EditableSyntax
$trailing): ExecutionStringLiteralHeadToken
{
4090 return new ExecutionStringLiteralHeadToken($this->leading(), $trailing, $this->text());
4093 final class ExecutionStringLiteralTailToken
extends EditableToken
{
4094 public function __construct(
4095 EditableSyntax
$leading,
4096 EditableSyntax
$trailing,
4098 parent
::__construct('execution_string_literal_tail', $leading, $trailing, $text);
4101 public function with_text(string $text): ExecutionStringLiteralTailToken
{
4102 return new ExecutionStringLiteralTailToken($this->leading(), $this->trailing(), $text);
4105 public function with_leading(EditableSyntax
$leading): ExecutionStringLiteralTailToken
{
4106 return new ExecutionStringLiteralTailToken($leading, $this->trailing(), $this->text());
4109 public function with_trailing(EditableSyntax
$trailing): ExecutionStringLiteralTailToken
{
4110 return new ExecutionStringLiteralTailToken($this->leading(), $trailing, $this->text());
4113 final class SingleQuotedStringLiteralToken
extends EditableToken
{
4114 public function __construct(
4115 EditableSyntax
$leading,
4116 EditableSyntax
$trailing,
4118 parent
::__construct('single_quoted_string_literal', $leading, $trailing, $text);
4121 public function with_text(string $text): SingleQuotedStringLiteralToken
{
4122 return new SingleQuotedStringLiteralToken($this->leading(), $this->trailing(), $text);
4125 public function with_leading(EditableSyntax
$leading): SingleQuotedStringLiteralToken
{
4126 return new SingleQuotedStringLiteralToken($leading, $this->trailing(), $this->text());
4129 public function with_trailing(EditableSyntax
$trailing): SingleQuotedStringLiteralToken
{
4130 return new SingleQuotedStringLiteralToken($this->leading(), $trailing, $this->text());
4133 final class DoubleQuotedStringLiteralToken
extends EditableToken
{
4134 public function __construct(
4135 EditableSyntax
$leading,
4136 EditableSyntax
$trailing,
4138 parent
::__construct('double_quoted_string_literal', $leading, $trailing, $text);
4141 public function with_text(string $text): DoubleQuotedStringLiteralToken
{
4142 return new DoubleQuotedStringLiteralToken($this->leading(), $this->trailing(), $text);
4145 public function with_leading(EditableSyntax
$leading): DoubleQuotedStringLiteralToken
{
4146 return new DoubleQuotedStringLiteralToken($leading, $this->trailing(), $this->text());
4149 public function with_trailing(EditableSyntax
$trailing): DoubleQuotedStringLiteralToken
{
4150 return new DoubleQuotedStringLiteralToken($this->leading(), $trailing, $this->text());
4153 final class DoubleQuotedStringLiteralHeadToken
extends EditableToken
{
4154 public function __construct(
4155 EditableSyntax
$leading,
4156 EditableSyntax
$trailing,
4158 parent
::__construct('double_quoted_string_literal_head', $leading, $trailing, $text);
4161 public function with_text(string $text): DoubleQuotedStringLiteralHeadToken
{
4162 return new DoubleQuotedStringLiteralHeadToken($this->leading(), $this->trailing(), $text);
4165 public function with_leading(EditableSyntax
$leading): DoubleQuotedStringLiteralHeadToken
{
4166 return new DoubleQuotedStringLiteralHeadToken($leading, $this->trailing(), $this->text());
4169 public function with_trailing(EditableSyntax
$trailing): DoubleQuotedStringLiteralHeadToken
{
4170 return new DoubleQuotedStringLiteralHeadToken($this->leading(), $trailing, $this->text());
4173 final class StringLiteralBodyToken
extends EditableToken
{
4174 public function __construct(
4175 EditableSyntax
$leading,
4176 EditableSyntax
$trailing,
4178 parent
::__construct('string_literal_body', $leading, $trailing, $text);
4181 public function with_text(string $text): StringLiteralBodyToken
{
4182 return new StringLiteralBodyToken($this->leading(), $this->trailing(), $text);
4185 public function with_leading(EditableSyntax
$leading): StringLiteralBodyToken
{
4186 return new StringLiteralBodyToken($leading, $this->trailing(), $this->text());
4189 public function with_trailing(EditableSyntax
$trailing): StringLiteralBodyToken
{
4190 return new StringLiteralBodyToken($this->leading(), $trailing, $this->text());
4193 final class DoubleQuotedStringLiteralTailToken
extends EditableToken
{
4194 public function __construct(
4195 EditableSyntax
$leading,
4196 EditableSyntax
$trailing,
4198 parent
::__construct('double_quoted_string_literal_tail', $leading, $trailing, $text);
4201 public function with_text(string $text): DoubleQuotedStringLiteralTailToken
{
4202 return new DoubleQuotedStringLiteralTailToken($this->leading(), $this->trailing(), $text);
4205 public function with_leading(EditableSyntax
$leading): DoubleQuotedStringLiteralTailToken
{
4206 return new DoubleQuotedStringLiteralTailToken($leading, $this->trailing(), $this->text());
4209 public function with_trailing(EditableSyntax
$trailing): DoubleQuotedStringLiteralTailToken
{
4210 return new DoubleQuotedStringLiteralTailToken($this->leading(), $trailing, $this->text());
4213 final class HeredocStringLiteralToken
extends EditableToken
{
4214 public function __construct(
4215 EditableSyntax
$leading,
4216 EditableSyntax
$trailing,
4218 parent
::__construct('heredoc_string_literal', $leading, $trailing, $text);
4221 public function with_text(string $text): HeredocStringLiteralToken
{
4222 return new HeredocStringLiteralToken($this->leading(), $this->trailing(), $text);
4225 public function with_leading(EditableSyntax
$leading): HeredocStringLiteralToken
{
4226 return new HeredocStringLiteralToken($leading, $this->trailing(), $this->text());
4229 public function with_trailing(EditableSyntax
$trailing): HeredocStringLiteralToken
{
4230 return new HeredocStringLiteralToken($this->leading(), $trailing, $this->text());
4233 final class HeredocStringLiteralHeadToken
extends EditableToken
{
4234 public function __construct(
4235 EditableSyntax
$leading,
4236 EditableSyntax
$trailing,
4238 parent
::__construct('heredoc_string_literal_head', $leading, $trailing, $text);
4241 public function with_text(string $text): HeredocStringLiteralHeadToken
{
4242 return new HeredocStringLiteralHeadToken($this->leading(), $this->trailing(), $text);
4245 public function with_leading(EditableSyntax
$leading): HeredocStringLiteralHeadToken
{
4246 return new HeredocStringLiteralHeadToken($leading, $this->trailing(), $this->text());
4249 public function with_trailing(EditableSyntax
$trailing): HeredocStringLiteralHeadToken
{
4250 return new HeredocStringLiteralHeadToken($this->leading(), $trailing, $this->text());
4253 final class HeredocStringLiteralTailToken
extends EditableToken
{
4254 public function __construct(
4255 EditableSyntax
$leading,
4256 EditableSyntax
$trailing,
4258 parent
::__construct('heredoc_string_literal_tail', $leading, $trailing, $text);
4261 public function with_text(string $text): HeredocStringLiteralTailToken
{
4262 return new HeredocStringLiteralTailToken($this->leading(), $this->trailing(), $text);
4265 public function with_leading(EditableSyntax
$leading): HeredocStringLiteralTailToken
{
4266 return new HeredocStringLiteralTailToken($leading, $this->trailing(), $this->text());
4269 public function with_trailing(EditableSyntax
$trailing): HeredocStringLiteralTailToken
{
4270 return new HeredocStringLiteralTailToken($this->leading(), $trailing, $this->text());
4273 final class NowdocStringLiteralToken
extends EditableToken
{
4274 public function __construct(
4275 EditableSyntax
$leading,
4276 EditableSyntax
$trailing,
4278 parent
::__construct('nowdoc_string_literal', $leading, $trailing, $text);
4281 public function with_text(string $text): NowdocStringLiteralToken
{
4282 return new NowdocStringLiteralToken($this->leading(), $this->trailing(), $text);
4285 public function with_leading(EditableSyntax
$leading): NowdocStringLiteralToken
{
4286 return new NowdocStringLiteralToken($leading, $this->trailing(), $this->text());
4289 public function with_trailing(EditableSyntax
$trailing): NowdocStringLiteralToken
{
4290 return new NowdocStringLiteralToken($this->leading(), $trailing, $this->text());
4293 final class BooleanLiteralToken
extends EditableToken
{
4294 public function __construct(
4295 EditableSyntax
$leading,
4296 EditableSyntax
$trailing,
4298 parent
::__construct('boolean_literal', $leading, $trailing, $text);
4301 public function with_text(string $text): BooleanLiteralToken
{
4302 return new BooleanLiteralToken($this->leading(), $this->trailing(), $text);
4305 public function with_leading(EditableSyntax
$leading): BooleanLiteralToken
{
4306 return new BooleanLiteralToken($leading, $this->trailing(), $this->text());
4309 public function with_trailing(EditableSyntax
$trailing): BooleanLiteralToken
{
4310 return new BooleanLiteralToken($this->leading(), $trailing, $this->text());
4313 final class XHPCategoryNameToken
extends EditableToken
{
4314 public function __construct(
4315 EditableSyntax
$leading,
4316 EditableSyntax
$trailing,
4318 parent
::__construct('XHP_category_name', $leading, $trailing, $text);
4321 public function with_text(string $text): XHPCategoryNameToken
{
4322 return new XHPCategoryNameToken($this->leading(), $this->trailing(), $text);
4325 public function with_leading(EditableSyntax
$leading): XHPCategoryNameToken
{
4326 return new XHPCategoryNameToken($leading, $this->trailing(), $this->text());
4329 public function with_trailing(EditableSyntax
$trailing): XHPCategoryNameToken
{
4330 return new XHPCategoryNameToken($this->leading(), $trailing, $this->text());
4333 final class XHPElementNameToken
extends EditableToken
{
4334 public function __construct(
4335 EditableSyntax
$leading,
4336 EditableSyntax
$trailing,
4338 parent
::__construct('XHP_element_name', $leading, $trailing, $text);
4341 public function with_text(string $text): XHPElementNameToken
{
4342 return new XHPElementNameToken($this->leading(), $this->trailing(), $text);
4345 public function with_leading(EditableSyntax
$leading): XHPElementNameToken
{
4346 return new XHPElementNameToken($leading, $this->trailing(), $this->text());
4349 public function with_trailing(EditableSyntax
$trailing): XHPElementNameToken
{
4350 return new XHPElementNameToken($this->leading(), $trailing, $this->text());
4353 final class XHPClassNameToken
extends EditableToken
{
4354 public function __construct(
4355 EditableSyntax
$leading,
4356 EditableSyntax
$trailing,
4358 parent
::__construct('XHP_class_name', $leading, $trailing, $text);
4361 public function with_text(string $text): XHPClassNameToken
{
4362 return new XHPClassNameToken($this->leading(), $this->trailing(), $text);
4365 public function with_leading(EditableSyntax
$leading): XHPClassNameToken
{
4366 return new XHPClassNameToken($leading, $this->trailing(), $this->text());
4369 public function with_trailing(EditableSyntax
$trailing): XHPClassNameToken
{
4370 return new XHPClassNameToken($this->leading(), $trailing, $this->text());
4373 final class XHPStringLiteralToken
extends EditableToken
{
4374 public function __construct(
4375 EditableSyntax
$leading,
4376 EditableSyntax
$trailing,
4378 parent
::__construct('XHP_string_literal', $leading, $trailing, $text);
4381 public function with_text(string $text): XHPStringLiteralToken
{
4382 return new XHPStringLiteralToken($this->leading(), $this->trailing(), $text);
4385 public function with_leading(EditableSyntax
$leading): XHPStringLiteralToken
{
4386 return new XHPStringLiteralToken($leading, $this->trailing(), $this->text());
4389 public function with_trailing(EditableSyntax
$trailing): XHPStringLiteralToken
{
4390 return new XHPStringLiteralToken($this->leading(), $trailing, $this->text());
4393 final class XHPBodyToken
extends EditableToken
{
4394 public function __construct(
4395 EditableSyntax
$leading,
4396 EditableSyntax
$trailing,
4398 parent
::__construct('XHP_body', $leading, $trailing, $text);
4401 public function with_text(string $text): XHPBodyToken
{
4402 return new XHPBodyToken($this->leading(), $this->trailing(), $text);
4405 public function with_leading(EditableSyntax
$leading): XHPBodyToken
{
4406 return new XHPBodyToken($leading, $this->trailing(), $this->text());
4409 public function with_trailing(EditableSyntax
$trailing): XHPBodyToken
{
4410 return new XHPBodyToken($this->leading(), $trailing, $this->text());
4413 final class XHPCommentToken
extends EditableToken
{
4414 public function __construct(
4415 EditableSyntax
$leading,
4416 EditableSyntax
$trailing,
4418 parent
::__construct('XHP_comment', $leading, $trailing, $text);
4421 public function with_text(string $text): XHPCommentToken
{
4422 return new XHPCommentToken($this->leading(), $this->trailing(), $text);
4425 public function with_leading(EditableSyntax
$leading): XHPCommentToken
{
4426 return new XHPCommentToken($leading, $this->trailing(), $this->text());
4429 public function with_trailing(EditableSyntax
$trailing): XHPCommentToken
{
4430 return new XHPCommentToken($this->leading(), $trailing, $this->text());
4433 final class MarkupToken
extends EditableToken
{
4434 public function __construct(
4435 EditableSyntax
$leading,
4436 EditableSyntax
$trailing,
4438 parent
::__construct('markup', $leading, $trailing, $text);
4441 public function with_text(string $text): MarkupToken
{
4442 return new MarkupToken($this->leading(), $this->trailing(), $text);
4445 public function with_leading(EditableSyntax
$leading): MarkupToken
{
4446 return new MarkupToken($leading, $this->trailing(), $this->text());
4449 public function with_trailing(EditableSyntax
$trailing): MarkupToken
{
4450 return new MarkupToken($this->leading(), $trailing, $this->text());
4455 abstract class EditableTrivia
extends EditableSyntax
{
4456 private string $_text;
4457 public function __construct(string $trivia_kind , string $text) {
4458 parent
::__construct($trivia_kind);
4459 $this->_text
= $text;
4462 public function text(): string {
4463 return $this->_text
;
4466 public function full_text() {
4467 return $this->_text
;
4470 public function width() {
4471 return strlen($this->_text
);
4474 public function is_trivia() {
4478 public function children(): Generator
<string, EditableSyntax
, void
> {
4482 public static function from_json(
4486 $trivia_text = substr($source, $position, $json->width
);
4487 switch($json->kind
) {
4489 return new WhiteSpace($trivia_text);
4491 return new EndOfLine($trivia_text);
4492 case 'delimited_comment':
4493 return new DelimitedComment($trivia_text);
4494 case 'single_line_comment':
4495 return new SingleLineComment($trivia_text);
4497 return new Unsafe($trivia_text);
4498 case 'unsafe_expression':
4499 return new UnsafeExpression($trivia_text);
4501 return new FixMe($trivia_text);
4502 case 'ignore_error':
4503 return new IgnoreError($trivia_text);
4504 case 'fall_through':
4505 return new FallThrough($trivia_text);
4506 case 'extra_token_error':
4507 return new ExtraTokenError($trivia_text);
4508 case 'after_halt_compiler':
4509 return new AfterHaltCompiler($trivia_text);
4512 throw new Exception('unexpected json kind: ' . $json->kind
);
4513 // TODO: Better error
4517 public function rewrite(
4519 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
4520 ?
array<EditableSyntax
> $parents = null): EditableSyntax
{
4521 return $rewriter($this, $parents ??
[]);
4525 class WhiteSpace
extends EditableTrivia
{
4526 public function __construct(string $text) {
4527 parent
::__construct('whitespace', $text);
4529 public function with_text(string $text): WhiteSpace
{
4530 return new WhiteSpace($text);
4534 class EndOfLine
extends EditableTrivia
{
4535 public function __construct(string $text) {
4536 parent
::__construct('end_of_line', $text);
4538 public function with_text(string $text): EndOfLine
{
4539 return new EndOfLine($text);
4543 class DelimitedComment
extends EditableTrivia
{
4544 public function __construct(string $text) {
4545 parent
::__construct('delimited_comment', $text);
4547 public function with_text(string $text): DelimitedComment
{
4548 return new DelimitedComment($text);
4552 class SingleLineComment
extends EditableTrivia
{
4553 public function __construct(string $text) {
4554 parent
::__construct('single_line_comment', $text);
4556 public function with_text(string $text): SingleLineComment
{
4557 return new SingleLineComment($text);
4561 class Unsafe
extends EditableTrivia
{
4562 public function __construct(string $text) {
4563 parent
::__construct('unsafe', $text);
4565 public function with_text(string $text): Unsafe
{
4566 return new Unsafe($text);
4570 class UnsafeExpression
extends EditableTrivia
{
4571 public function __construct(string $text) {
4572 parent
::__construct('unsafe_expression', $text);
4574 public function with_text(string $text): UnsafeExpression
{
4575 return new UnsafeExpression($text);
4579 class FixMe
extends EditableTrivia
{
4580 public function __construct(string $text) {
4581 parent
::__construct('fix_me', $text);
4583 public function with_text(string $text): FixMe
{
4584 return new FixMe($text);
4588 class IgnoreError
extends EditableTrivia
{
4589 public function __construct(string $text) {
4590 parent
::__construct('ignore_error', $text);
4592 public function with_text(string $text): IgnoreError
{
4593 return new IgnoreError($text);
4597 class FallThrough
extends EditableTrivia
{
4598 public function __construct(string $text) {
4599 parent
::__construct('fall_through', $text);
4601 public function with_text(string $text): FallThrough
{
4602 return new FallThrough($text);
4606 class ExtraTokenError
extends EditableTrivia
{
4607 public function __construct(string $text) {
4608 parent
::__construct('extra_token_error', $text);
4610 public function with_text(string $text): ExtraTokenError
{
4611 return new ExtraTokenError($text);
4615 class AfterHaltCompiler
extends EditableTrivia
{
4616 public function __construct(string $text) {
4617 parent
::__construct('after_halt_compiler', $text);
4619 public function with_text(string $text): AfterHaltCompiler
{
4620 return new AfterHaltCompiler($text);
4626 final class Missing
extends EditableSyntax
{
4627 private static ?Missing
$_missing = null;
4629 public function __construct() {
4630 parent
::__construct('missing');
4633 public function is_missing(): bool {
4637 public function children(): Generator
<string, EditableSyntax
, void
> {
4641 public static function missing(): Missing
{
4642 if (Missing
::$_missing === null) {
4644 Missing
::$_missing = $m;
4647 return Missing
::$_missing;
4651 public static function from_json(
4655 return Missing
::missing();
4658 public function rewrite(
4660 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
4661 ?
array<EditableSyntax
> $parents = null): EditableSyntax
{
4662 return $rewriter($this, $parents ??
[]);
4665 public function to_array(): array<EditableSyntax
> {
4670 final class EndOfFile
extends EditableSyntax
{
4671 private EditableSyntax
$_token;
4672 public function __construct(
4673 EditableSyntax
$token) {
4674 parent
::__construct('end_of_file');
4675 $this->_token
= $token;
4677 public function token(): EditableSyntax
{
4678 return $this->_token
;
4680 public function with_token(EditableSyntax
$token): EndOfFile
{
4681 return new EndOfFile(
4685 public function rewrite(
4687 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
4688 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
4689 $new_parents = $parents ??
[];
4690 array_push($new_parents, $this);
4691 $token = $this->token()->rewrite($rewriter, $new_parents);
4693 $token === $this->token()) {
4694 return $rewriter($this, $parents ??
[]);
4696 return $rewriter(new EndOfFile(
4697 $token), $parents ??
[]);
4701 public static function from_json(mixed $json, int $position, string $source) {
4702 $token = EditableSyntax
::from_json(
4703 $json->end_of_file_token
, $position, $source);
4704 $position +
= $token->width();
4705 return new EndOfFile(
4708 public function children(): Generator
<string, EditableSyntax
, void
> {
4709 yield
$this->_token
;
4713 final class Script
extends EditableSyntax
{
4714 private EditableSyntax
$_declarations;
4715 public function __construct(
4716 EditableSyntax
$declarations) {
4717 parent
::__construct('script');
4718 $this->_declarations
= $declarations;
4720 public function declarations(): EditableSyntax
{
4721 return $this->_declarations
;
4723 public function with_declarations(EditableSyntax
$declarations): Script
{
4728 public function rewrite(
4730 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
4731 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
4732 $new_parents = $parents ??
[];
4733 array_push($new_parents, $this);
4734 $declarations = $this->declarations()->rewrite($rewriter, $new_parents);
4736 $declarations === $this->declarations()) {
4737 return $rewriter($this, $parents ??
[]);
4739 return $rewriter(new Script(
4740 $declarations), $parents ??
[]);
4744 public static function from_json(mixed $json, int $position, string $source) {
4745 $declarations = EditableSyntax
::from_json(
4746 $json->script_declarations
, $position, $source);
4747 $position +
= $declarations->width();
4751 public function children(): Generator
<string, EditableSyntax
, void
> {
4752 yield
$this->_declarations
;
4756 final class SimpleTypeSpecifier
extends EditableSyntax
{
4757 private EditableSyntax
$_specifier;
4758 public function __construct(
4759 EditableSyntax
$specifier) {
4760 parent
::__construct('simple_type_specifier');
4761 $this->_specifier
= $specifier;
4763 public function specifier(): EditableSyntax
{
4764 return $this->_specifier
;
4766 public function with_specifier(EditableSyntax
$specifier): SimpleTypeSpecifier
{
4767 return new SimpleTypeSpecifier(
4771 public function rewrite(
4773 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
4774 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
4775 $new_parents = $parents ??
[];
4776 array_push($new_parents, $this);
4777 $specifier = $this->specifier()->rewrite($rewriter, $new_parents);
4779 $specifier === $this->specifier()) {
4780 return $rewriter($this, $parents ??
[]);
4782 return $rewriter(new SimpleTypeSpecifier(
4783 $specifier), $parents ??
[]);
4787 public static function from_json(mixed $json, int $position, string $source) {
4788 $specifier = EditableSyntax
::from_json(
4789 $json->simple_type_specifier
, $position, $source);
4790 $position +
= $specifier->width();
4791 return new SimpleTypeSpecifier(
4794 public function children(): Generator
<string, EditableSyntax
, void
> {
4795 yield
$this->_specifier
;
4799 final class LiteralExpression
extends EditableSyntax
{
4800 private EditableSyntax
$_expression;
4801 public function __construct(
4802 EditableSyntax
$expression) {
4803 parent
::__construct('literal');
4804 $this->_expression
= $expression;
4806 public function expression(): EditableSyntax
{
4807 return $this->_expression
;
4809 public function with_expression(EditableSyntax
$expression): LiteralExpression
{
4810 return new LiteralExpression(
4814 public function rewrite(
4816 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
4817 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
4818 $new_parents = $parents ??
[];
4819 array_push($new_parents, $this);
4820 $expression = $this->expression()->rewrite($rewriter, $new_parents);
4822 $expression === $this->expression()) {
4823 return $rewriter($this, $parents ??
[]);
4825 return $rewriter(new LiteralExpression(
4826 $expression), $parents ??
[]);
4830 public static function from_json(mixed $json, int $position, string $source) {
4831 $expression = EditableSyntax
::from_json(
4832 $json->literal_expression
, $position, $source);
4833 $position +
= $expression->width();
4834 return new LiteralExpression(
4837 public function children(): Generator
<string, EditableSyntax
, void
> {
4838 yield
$this->_expression
;
4842 final class VariableExpression
extends EditableSyntax
{
4843 private EditableSyntax
$_expression;
4844 public function __construct(
4845 EditableSyntax
$expression) {
4846 parent
::__construct('variable');
4847 $this->_expression
= $expression;
4849 public function expression(): EditableSyntax
{
4850 return $this->_expression
;
4852 public function with_expression(EditableSyntax
$expression): VariableExpression
{
4853 return new VariableExpression(
4857 public function rewrite(
4859 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
4860 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
4861 $new_parents = $parents ??
[];
4862 array_push($new_parents, $this);
4863 $expression = $this->expression()->rewrite($rewriter, $new_parents);
4865 $expression === $this->expression()) {
4866 return $rewriter($this, $parents ??
[]);
4868 return $rewriter(new VariableExpression(
4869 $expression), $parents ??
[]);
4873 public static function from_json(mixed $json, int $position, string $source) {
4874 $expression = EditableSyntax
::from_json(
4875 $json->variable_expression
, $position, $source);
4876 $position +
= $expression->width();
4877 return new VariableExpression(
4880 public function children(): Generator
<string, EditableSyntax
, void
> {
4881 yield
$this->_expression
;
4885 final class QualifiedNameExpression
extends EditableSyntax
{
4886 private EditableSyntax
$_expression;
4887 public function __construct(
4888 EditableSyntax
$expression) {
4889 parent
::__construct('qualified_name');
4890 $this->_expression
= $expression;
4892 public function expression(): EditableSyntax
{
4893 return $this->_expression
;
4895 public function with_expression(EditableSyntax
$expression): QualifiedNameExpression
{
4896 return new QualifiedNameExpression(
4900 public function rewrite(
4902 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
4903 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
4904 $new_parents = $parents ??
[];
4905 array_push($new_parents, $this);
4906 $expression = $this->expression()->rewrite($rewriter, $new_parents);
4908 $expression === $this->expression()) {
4909 return $rewriter($this, $parents ??
[]);
4911 return $rewriter(new QualifiedNameExpression(
4912 $expression), $parents ??
[]);
4916 public static function from_json(mixed $json, int $position, string $source) {
4917 $expression = EditableSyntax
::from_json(
4918 $json->qualified_name_expression
, $position, $source);
4919 $position +
= $expression->width();
4920 return new QualifiedNameExpression(
4923 public function children(): Generator
<string, EditableSyntax
, void
> {
4924 yield
$this->_expression
;
4928 final class PipeVariableExpression
extends EditableSyntax
{
4929 private EditableSyntax
$_expression;
4930 public function __construct(
4931 EditableSyntax
$expression) {
4932 parent
::__construct('pipe_variable');
4933 $this->_expression
= $expression;
4935 public function expression(): EditableSyntax
{
4936 return $this->_expression
;
4938 public function with_expression(EditableSyntax
$expression): PipeVariableExpression
{
4939 return new PipeVariableExpression(
4943 public function rewrite(
4945 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
4946 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
4947 $new_parents = $parents ??
[];
4948 array_push($new_parents, $this);
4949 $expression = $this->expression()->rewrite($rewriter, $new_parents);
4951 $expression === $this->expression()) {
4952 return $rewriter($this, $parents ??
[]);
4954 return $rewriter(new PipeVariableExpression(
4955 $expression), $parents ??
[]);
4959 public static function from_json(mixed $json, int $position, string $source) {
4960 $expression = EditableSyntax
::from_json(
4961 $json->pipe_variable_expression
, $position, $source);
4962 $position +
= $expression->width();
4963 return new PipeVariableExpression(
4966 public function children(): Generator
<string, EditableSyntax
, void
> {
4967 yield
$this->_expression
;
4971 final class EnumDeclaration
extends EditableSyntax
{
4972 private EditableSyntax
$_attribute_spec;
4973 private EditableSyntax
$_keyword;
4974 private EditableSyntax
$_name;
4975 private EditableSyntax
$_colon;
4976 private EditableSyntax
$_base;
4977 private EditableSyntax
$_type;
4978 private EditableSyntax
$_left_brace;
4979 private EditableSyntax
$_enumerators;
4980 private EditableSyntax
$_right_brace;
4981 public function __construct(
4982 EditableSyntax
$attribute_spec,
4983 EditableSyntax
$keyword,
4984 EditableSyntax
$name,
4985 EditableSyntax
$colon,
4986 EditableSyntax
$base,
4987 EditableSyntax
$type,
4988 EditableSyntax
$left_brace,
4989 EditableSyntax
$enumerators,
4990 EditableSyntax
$right_brace) {
4991 parent
::__construct('enum_declaration');
4992 $this->_attribute_spec
= $attribute_spec;
4993 $this->_keyword
= $keyword;
4994 $this->_name
= $name;
4995 $this->_colon
= $colon;
4996 $this->_base
= $base;
4997 $this->_type
= $type;
4998 $this->_left_brace
= $left_brace;
4999 $this->_enumerators
= $enumerators;
5000 $this->_right_brace
= $right_brace;
5002 public function attribute_spec(): EditableSyntax
{
5003 return $this->_attribute_spec
;
5005 public function keyword(): EditableSyntax
{
5006 return $this->_keyword
;
5008 public function name(): EditableSyntax
{
5009 return $this->_name
;
5011 public function colon(): EditableSyntax
{
5012 return $this->_colon
;
5014 public function base(): EditableSyntax
{
5015 return $this->_base
;
5017 public function type(): EditableSyntax
{
5018 return $this->_type
;
5020 public function left_brace(): EditableSyntax
{
5021 return $this->_left_brace
;
5023 public function enumerators(): EditableSyntax
{
5024 return $this->_enumerators
;
5026 public function right_brace(): EditableSyntax
{
5027 return $this->_right_brace
;
5029 public function with_attribute_spec(EditableSyntax
$attribute_spec): EnumDeclaration
{
5030 return new EnumDeclaration(
5038 $this->_enumerators
,
5039 $this->_right_brace
);
5041 public function with_keyword(EditableSyntax
$keyword): EnumDeclaration
{
5042 return new EnumDeclaration(
5043 $this->_attribute_spec
,
5050 $this->_enumerators
,
5051 $this->_right_brace
);
5053 public function with_name(EditableSyntax
$name): EnumDeclaration
{
5054 return new EnumDeclaration(
5055 $this->_attribute_spec
,
5062 $this->_enumerators
,
5063 $this->_right_brace
);
5065 public function with_colon(EditableSyntax
$colon): EnumDeclaration
{
5066 return new EnumDeclaration(
5067 $this->_attribute_spec
,
5074 $this->_enumerators
,
5075 $this->_right_brace
);
5077 public function with_base(EditableSyntax
$base): EnumDeclaration
{
5078 return new EnumDeclaration(
5079 $this->_attribute_spec
,
5086 $this->_enumerators
,
5087 $this->_right_brace
);
5089 public function with_type(EditableSyntax
$type): EnumDeclaration
{
5090 return new EnumDeclaration(
5091 $this->_attribute_spec
,
5098 $this->_enumerators
,
5099 $this->_right_brace
);
5101 public function with_left_brace(EditableSyntax
$left_brace): EnumDeclaration
{
5102 return new EnumDeclaration(
5103 $this->_attribute_spec
,
5110 $this->_enumerators
,
5111 $this->_right_brace
);
5113 public function with_enumerators(EditableSyntax
$enumerators): EnumDeclaration
{
5114 return new EnumDeclaration(
5115 $this->_attribute_spec
,
5123 $this->_right_brace
);
5125 public function with_right_brace(EditableSyntax
$right_brace): EnumDeclaration
{
5126 return new EnumDeclaration(
5127 $this->_attribute_spec
,
5134 $this->_enumerators
,
5138 public function rewrite(
5140 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
5141 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
5142 $new_parents = $parents ??
[];
5143 array_push($new_parents, $this);
5144 $attribute_spec = $this->attribute_spec()->rewrite($rewriter, $new_parents);
5145 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
5146 $name = $this->name()->rewrite($rewriter, $new_parents);
5147 $colon = $this->colon()->rewrite($rewriter, $new_parents);
5148 $base = $this->base()->rewrite($rewriter, $new_parents);
5149 $type = $this->type()->rewrite($rewriter, $new_parents);
5150 $left_brace = $this->left_brace()->rewrite($rewriter, $new_parents);
5151 $enumerators = $this->enumerators()->rewrite($rewriter, $new_parents);
5152 $right_brace = $this->right_brace()->rewrite($rewriter, $new_parents);
5154 $attribute_spec === $this->attribute_spec() &&
5155 $keyword === $this->keyword() &&
5156 $name === $this->name() &&
5157 $colon === $this->colon() &&
5158 $base === $this->base() &&
5159 $type === $this->type() &&
5160 $left_brace === $this->left_brace() &&
5161 $enumerators === $this->enumerators() &&
5162 $right_brace === $this->right_brace()) {
5163 return $rewriter($this, $parents ??
[]);
5165 return $rewriter(new EnumDeclaration(
5174 $right_brace), $parents ??
[]);
5178 public static function from_json(mixed $json, int $position, string $source) {
5179 $attribute_spec = EditableSyntax
::from_json(
5180 $json->enum_attribute_spec
, $position, $source);
5181 $position +
= $attribute_spec->width();
5182 $keyword = EditableSyntax
::from_json(
5183 $json->enum_keyword
, $position, $source);
5184 $position +
= $keyword->width();
5185 $name = EditableSyntax
::from_json(
5186 $json->enum_name
, $position, $source);
5187 $position +
= $name->width();
5188 $colon = EditableSyntax
::from_json(
5189 $json->enum_colon
, $position, $source);
5190 $position +
= $colon->width();
5191 $base = EditableSyntax
::from_json(
5192 $json->enum_base
, $position, $source);
5193 $position +
= $base->width();
5194 $type = EditableSyntax
::from_json(
5195 $json->enum_type
, $position, $source);
5196 $position +
= $type->width();
5197 $left_brace = EditableSyntax
::from_json(
5198 $json->enum_left_brace
, $position, $source);
5199 $position +
= $left_brace->width();
5200 $enumerators = EditableSyntax
::from_json(
5201 $json->enum_enumerators
, $position, $source);
5202 $position +
= $enumerators->width();
5203 $right_brace = EditableSyntax
::from_json(
5204 $json->enum_right_brace
, $position, $source);
5205 $position +
= $right_brace->width();
5206 return new EnumDeclaration(
5217 public function children(): Generator
<string, EditableSyntax
, void
> {
5218 yield
$this->_attribute_spec
;
5219 yield
$this->_keyword
;
5221 yield
$this->_colon
;
5224 yield
$this->_left_brace
;
5225 yield
$this->_enumerators
;
5226 yield
$this->_right_brace
;
5230 final class Enumerator
extends EditableSyntax
{
5231 private EditableSyntax
$_name;
5232 private EditableSyntax
$_equal;
5233 private EditableSyntax
$_value;
5234 private EditableSyntax
$_semicolon;
5235 public function __construct(
5236 EditableSyntax
$name,
5237 EditableSyntax
$equal,
5238 EditableSyntax
$value,
5239 EditableSyntax
$semicolon) {
5240 parent
::__construct('enumerator');
5241 $this->_name
= $name;
5242 $this->_equal
= $equal;
5243 $this->_value
= $value;
5244 $this->_semicolon
= $semicolon;
5246 public function name(): EditableSyntax
{
5247 return $this->_name
;
5249 public function equal(): EditableSyntax
{
5250 return $this->_equal
;
5252 public function value(): EditableSyntax
{
5253 return $this->_value
;
5255 public function semicolon(): EditableSyntax
{
5256 return $this->_semicolon
;
5258 public function with_name(EditableSyntax
$name): Enumerator
{
5259 return new Enumerator(
5265 public function with_equal(EditableSyntax
$equal): Enumerator
{
5266 return new Enumerator(
5272 public function with_value(EditableSyntax
$value): Enumerator
{
5273 return new Enumerator(
5279 public function with_semicolon(EditableSyntax
$semicolon): Enumerator
{
5280 return new Enumerator(
5287 public function rewrite(
5289 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
5290 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
5291 $new_parents = $parents ??
[];
5292 array_push($new_parents, $this);
5293 $name = $this->name()->rewrite($rewriter, $new_parents);
5294 $equal = $this->equal()->rewrite($rewriter, $new_parents);
5295 $value = $this->value()->rewrite($rewriter, $new_parents);
5296 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
5298 $name === $this->name() &&
5299 $equal === $this->equal() &&
5300 $value === $this->value() &&
5301 $semicolon === $this->semicolon()) {
5302 return $rewriter($this, $parents ??
[]);
5304 return $rewriter(new Enumerator(
5308 $semicolon), $parents ??
[]);
5312 public static function from_json(mixed $json, int $position, string $source) {
5313 $name = EditableSyntax
::from_json(
5314 $json->enumerator_name
, $position, $source);
5315 $position +
= $name->width();
5316 $equal = EditableSyntax
::from_json(
5317 $json->enumerator_equal
, $position, $source);
5318 $position +
= $equal->width();
5319 $value = EditableSyntax
::from_json(
5320 $json->enumerator_value
, $position, $source);
5321 $position +
= $value->width();
5322 $semicolon = EditableSyntax
::from_json(
5323 $json->enumerator_semicolon
, $position, $source);
5324 $position +
= $semicolon->width();
5325 return new Enumerator(
5331 public function children(): Generator
<string, EditableSyntax
, void
> {
5333 yield
$this->_equal
;
5334 yield
$this->_value
;
5335 yield
$this->_semicolon
;
5339 final class AliasDeclaration
extends EditableSyntax
{
5340 private EditableSyntax
$_attribute_spec;
5341 private EditableSyntax
$_keyword;
5342 private EditableSyntax
$_name;
5343 private EditableSyntax
$_generic_parameter;
5344 private EditableSyntax
$_constraint;
5345 private EditableSyntax
$_equal;
5346 private EditableSyntax
$_type;
5347 private EditableSyntax
$_semicolon;
5348 public function __construct(
5349 EditableSyntax
$attribute_spec,
5350 EditableSyntax
$keyword,
5351 EditableSyntax
$name,
5352 EditableSyntax
$generic_parameter,
5353 EditableSyntax
$constraint,
5354 EditableSyntax
$equal,
5355 EditableSyntax
$type,
5356 EditableSyntax
$semicolon) {
5357 parent
::__construct('alias_declaration');
5358 $this->_attribute_spec
= $attribute_spec;
5359 $this->_keyword
= $keyword;
5360 $this->_name
= $name;
5361 $this->_generic_parameter
= $generic_parameter;
5362 $this->_constraint
= $constraint;
5363 $this->_equal
= $equal;
5364 $this->_type
= $type;
5365 $this->_semicolon
= $semicolon;
5367 public function attribute_spec(): EditableSyntax
{
5368 return $this->_attribute_spec
;
5370 public function keyword(): EditableSyntax
{
5371 return $this->_keyword
;
5373 public function name(): EditableSyntax
{
5374 return $this->_name
;
5376 public function generic_parameter(): EditableSyntax
{
5377 return $this->_generic_parameter
;
5379 public function constraint(): EditableSyntax
{
5380 return $this->_constraint
;
5382 public function equal(): EditableSyntax
{
5383 return $this->_equal
;
5385 public function type(): EditableSyntax
{
5386 return $this->_type
;
5388 public function semicolon(): EditableSyntax
{
5389 return $this->_semicolon
;
5391 public function with_attribute_spec(EditableSyntax
$attribute_spec): AliasDeclaration
{
5392 return new AliasDeclaration(
5396 $this->_generic_parameter
,
5402 public function with_keyword(EditableSyntax
$keyword): AliasDeclaration
{
5403 return new AliasDeclaration(
5404 $this->_attribute_spec
,
5407 $this->_generic_parameter
,
5413 public function with_name(EditableSyntax
$name): AliasDeclaration
{
5414 return new AliasDeclaration(
5415 $this->_attribute_spec
,
5418 $this->_generic_parameter
,
5424 public function with_generic_parameter(EditableSyntax
$generic_parameter): AliasDeclaration
{
5425 return new AliasDeclaration(
5426 $this->_attribute_spec
,
5435 public function with_constraint(EditableSyntax
$constraint): AliasDeclaration
{
5436 return new AliasDeclaration(
5437 $this->_attribute_spec
,
5440 $this->_generic_parameter
,
5446 public function with_equal(EditableSyntax
$equal): AliasDeclaration
{
5447 return new AliasDeclaration(
5448 $this->_attribute_spec
,
5451 $this->_generic_parameter
,
5457 public function with_type(EditableSyntax
$type): AliasDeclaration
{
5458 return new AliasDeclaration(
5459 $this->_attribute_spec
,
5462 $this->_generic_parameter
,
5468 public function with_semicolon(EditableSyntax
$semicolon): AliasDeclaration
{
5469 return new AliasDeclaration(
5470 $this->_attribute_spec
,
5473 $this->_generic_parameter
,
5480 public function rewrite(
5482 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
5483 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
5484 $new_parents = $parents ??
[];
5485 array_push($new_parents, $this);
5486 $attribute_spec = $this->attribute_spec()->rewrite($rewriter, $new_parents);
5487 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
5488 $name = $this->name()->rewrite($rewriter, $new_parents);
5489 $generic_parameter = $this->generic_parameter()->rewrite($rewriter, $new_parents);
5490 $constraint = $this->constraint()->rewrite($rewriter, $new_parents);
5491 $equal = $this->equal()->rewrite($rewriter, $new_parents);
5492 $type = $this->type()->rewrite($rewriter, $new_parents);
5493 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
5495 $attribute_spec === $this->attribute_spec() &&
5496 $keyword === $this->keyword() &&
5497 $name === $this->name() &&
5498 $generic_parameter === $this->generic_parameter() &&
5499 $constraint === $this->constraint() &&
5500 $equal === $this->equal() &&
5501 $type === $this->type() &&
5502 $semicolon === $this->semicolon()) {
5503 return $rewriter($this, $parents ??
[]);
5505 return $rewriter(new AliasDeclaration(
5513 $semicolon), $parents ??
[]);
5517 public static function from_json(mixed $json, int $position, string $source) {
5518 $attribute_spec = EditableSyntax
::from_json(
5519 $json->alias_attribute_spec
, $position, $source);
5520 $position +
= $attribute_spec->width();
5521 $keyword = EditableSyntax
::from_json(
5522 $json->alias_keyword
, $position, $source);
5523 $position +
= $keyword->width();
5524 $name = EditableSyntax
::from_json(
5525 $json->alias_name
, $position, $source);
5526 $position +
= $name->width();
5527 $generic_parameter = EditableSyntax
::from_json(
5528 $json->alias_generic_parameter
, $position, $source);
5529 $position +
= $generic_parameter->width();
5530 $constraint = EditableSyntax
::from_json(
5531 $json->alias_constraint
, $position, $source);
5532 $position +
= $constraint->width();
5533 $equal = EditableSyntax
::from_json(
5534 $json->alias_equal
, $position, $source);
5535 $position +
= $equal->width();
5536 $type = EditableSyntax
::from_json(
5537 $json->alias_type
, $position, $source);
5538 $position +
= $type->width();
5539 $semicolon = EditableSyntax
::from_json(
5540 $json->alias_semicolon
, $position, $source);
5541 $position +
= $semicolon->width();
5542 return new AliasDeclaration(
5552 public function children(): Generator
<string, EditableSyntax
, void
> {
5553 yield
$this->_attribute_spec
;
5554 yield
$this->_keyword
;
5556 yield
$this->_generic_parameter
;
5557 yield
$this->_constraint
;
5558 yield
$this->_equal
;
5560 yield
$this->_semicolon
;
5564 final class PropertyDeclaration
extends EditableSyntax
{
5565 private EditableSyntax
$_modifiers;
5566 private EditableSyntax
$_type;
5567 private EditableSyntax
$_declarators;
5568 private EditableSyntax
$_semicolon;
5569 public function __construct(
5570 EditableSyntax
$modifiers,
5571 EditableSyntax
$type,
5572 EditableSyntax
$declarators,
5573 EditableSyntax
$semicolon) {
5574 parent
::__construct('property_declaration');
5575 $this->_modifiers
= $modifiers;
5576 $this->_type
= $type;
5577 $this->_declarators
= $declarators;
5578 $this->_semicolon
= $semicolon;
5580 public function modifiers(): EditableSyntax
{
5581 return $this->_modifiers
;
5583 public function type(): EditableSyntax
{
5584 return $this->_type
;
5586 public function declarators(): EditableSyntax
{
5587 return $this->_declarators
;
5589 public function semicolon(): EditableSyntax
{
5590 return $this->_semicolon
;
5592 public function with_modifiers(EditableSyntax
$modifiers): PropertyDeclaration
{
5593 return new PropertyDeclaration(
5596 $this->_declarators
,
5599 public function with_type(EditableSyntax
$type): PropertyDeclaration
{
5600 return new PropertyDeclaration(
5603 $this->_declarators
,
5606 public function with_declarators(EditableSyntax
$declarators): PropertyDeclaration
{
5607 return new PropertyDeclaration(
5613 public function with_semicolon(EditableSyntax
$semicolon): PropertyDeclaration
{
5614 return new PropertyDeclaration(
5617 $this->_declarators
,
5621 public function rewrite(
5623 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
5624 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
5625 $new_parents = $parents ??
[];
5626 array_push($new_parents, $this);
5627 $modifiers = $this->modifiers()->rewrite($rewriter, $new_parents);
5628 $type = $this->type()->rewrite($rewriter, $new_parents);
5629 $declarators = $this->declarators()->rewrite($rewriter, $new_parents);
5630 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
5632 $modifiers === $this->modifiers() &&
5633 $type === $this->type() &&
5634 $declarators === $this->declarators() &&
5635 $semicolon === $this->semicolon()) {
5636 return $rewriter($this, $parents ??
[]);
5638 return $rewriter(new PropertyDeclaration(
5642 $semicolon), $parents ??
[]);
5646 public static function from_json(mixed $json, int $position, string $source) {
5647 $modifiers = EditableSyntax
::from_json(
5648 $json->property_modifiers
, $position, $source);
5649 $position +
= $modifiers->width();
5650 $type = EditableSyntax
::from_json(
5651 $json->property_type
, $position, $source);
5652 $position +
= $type->width();
5653 $declarators = EditableSyntax
::from_json(
5654 $json->property_declarators
, $position, $source);
5655 $position +
= $declarators->width();
5656 $semicolon = EditableSyntax
::from_json(
5657 $json->property_semicolon
, $position, $source);
5658 $position +
= $semicolon->width();
5659 return new PropertyDeclaration(
5665 public function children(): Generator
<string, EditableSyntax
, void
> {
5666 yield
$this->_modifiers
;
5668 yield
$this->_declarators
;
5669 yield
$this->_semicolon
;
5673 final class PropertyDeclarator
extends EditableSyntax
{
5674 private EditableSyntax
$_name;
5675 private EditableSyntax
$_initializer;
5676 public function __construct(
5677 EditableSyntax
$name,
5678 EditableSyntax
$initializer) {
5679 parent
::__construct('property_declarator');
5680 $this->_name
= $name;
5681 $this->_initializer
= $initializer;
5683 public function name(): EditableSyntax
{
5684 return $this->_name
;
5686 public function initializer(): EditableSyntax
{
5687 return $this->_initializer
;
5689 public function with_name(EditableSyntax
$name): PropertyDeclarator
{
5690 return new PropertyDeclarator(
5692 $this->_initializer
);
5694 public function with_initializer(EditableSyntax
$initializer): PropertyDeclarator
{
5695 return new PropertyDeclarator(
5700 public function rewrite(
5702 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
5703 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
5704 $new_parents = $parents ??
[];
5705 array_push($new_parents, $this);
5706 $name = $this->name()->rewrite($rewriter, $new_parents);
5707 $initializer = $this->initializer()->rewrite($rewriter, $new_parents);
5709 $name === $this->name() &&
5710 $initializer === $this->initializer()) {
5711 return $rewriter($this, $parents ??
[]);
5713 return $rewriter(new PropertyDeclarator(
5715 $initializer), $parents ??
[]);
5719 public static function from_json(mixed $json, int $position, string $source) {
5720 $name = EditableSyntax
::from_json(
5721 $json->property_name
, $position, $source);
5722 $position +
= $name->width();
5723 $initializer = EditableSyntax
::from_json(
5724 $json->property_initializer
, $position, $source);
5725 $position +
= $initializer->width();
5726 return new PropertyDeclarator(
5730 public function children(): Generator
<string, EditableSyntax
, void
> {
5732 yield
$this->_initializer
;
5736 final class NamespaceDeclaration
extends EditableSyntax
{
5737 private EditableSyntax
$_keyword;
5738 private EditableSyntax
$_name;
5739 private EditableSyntax
$_body;
5740 public function __construct(
5741 EditableSyntax
$keyword,
5742 EditableSyntax
$name,
5743 EditableSyntax
$body) {
5744 parent
::__construct('namespace_declaration');
5745 $this->_keyword
= $keyword;
5746 $this->_name
= $name;
5747 $this->_body
= $body;
5749 public function keyword(): EditableSyntax
{
5750 return $this->_keyword
;
5752 public function name(): EditableSyntax
{
5753 return $this->_name
;
5755 public function body(): EditableSyntax
{
5756 return $this->_body
;
5758 public function with_keyword(EditableSyntax
$keyword): NamespaceDeclaration
{
5759 return new NamespaceDeclaration(
5764 public function with_name(EditableSyntax
$name): NamespaceDeclaration
{
5765 return new NamespaceDeclaration(
5770 public function with_body(EditableSyntax
$body): NamespaceDeclaration
{
5771 return new NamespaceDeclaration(
5777 public function rewrite(
5779 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
5780 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
5781 $new_parents = $parents ??
[];
5782 array_push($new_parents, $this);
5783 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
5784 $name = $this->name()->rewrite($rewriter, $new_parents);
5785 $body = $this->body()->rewrite($rewriter, $new_parents);
5787 $keyword === $this->keyword() &&
5788 $name === $this->name() &&
5789 $body === $this->body()) {
5790 return $rewriter($this, $parents ??
[]);
5792 return $rewriter(new NamespaceDeclaration(
5795 $body), $parents ??
[]);
5799 public static function from_json(mixed $json, int $position, string $source) {
5800 $keyword = EditableSyntax
::from_json(
5801 $json->namespace_keyword
, $position, $source);
5802 $position +
= $keyword->width();
5803 $name = EditableSyntax
::from_json(
5804 $json->namespace_name
, $position, $source);
5805 $position +
= $name->width();
5806 $body = EditableSyntax
::from_json(
5807 $json->namespace_body
, $position, $source);
5808 $position +
= $body->width();
5809 return new NamespaceDeclaration(
5814 public function children(): Generator
<string, EditableSyntax
, void
> {
5815 yield
$this->_keyword
;
5821 final class NamespaceBody
extends EditableSyntax
{
5822 private EditableSyntax
$_left_brace;
5823 private EditableSyntax
$_declarations;
5824 private EditableSyntax
$_right_brace;
5825 public function __construct(
5826 EditableSyntax
$left_brace,
5827 EditableSyntax
$declarations,
5828 EditableSyntax
$right_brace) {
5829 parent
::__construct('namespace_body');
5830 $this->_left_brace
= $left_brace;
5831 $this->_declarations
= $declarations;
5832 $this->_right_brace
= $right_brace;
5834 public function left_brace(): EditableSyntax
{
5835 return $this->_left_brace
;
5837 public function declarations(): EditableSyntax
{
5838 return $this->_declarations
;
5840 public function right_brace(): EditableSyntax
{
5841 return $this->_right_brace
;
5843 public function with_left_brace(EditableSyntax
$left_brace): NamespaceBody
{
5844 return new NamespaceBody(
5846 $this->_declarations
,
5847 $this->_right_brace
);
5849 public function with_declarations(EditableSyntax
$declarations): NamespaceBody
{
5850 return new NamespaceBody(
5853 $this->_right_brace
);
5855 public function with_right_brace(EditableSyntax
$right_brace): NamespaceBody
{
5856 return new NamespaceBody(
5858 $this->_declarations
,
5862 public function rewrite(
5864 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
5865 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
5866 $new_parents = $parents ??
[];
5867 array_push($new_parents, $this);
5868 $left_brace = $this->left_brace()->rewrite($rewriter, $new_parents);
5869 $declarations = $this->declarations()->rewrite($rewriter, $new_parents);
5870 $right_brace = $this->right_brace()->rewrite($rewriter, $new_parents);
5872 $left_brace === $this->left_brace() &&
5873 $declarations === $this->declarations() &&
5874 $right_brace === $this->right_brace()) {
5875 return $rewriter($this, $parents ??
[]);
5877 return $rewriter(new NamespaceBody(
5880 $right_brace), $parents ??
[]);
5884 public static function from_json(mixed $json, int $position, string $source) {
5885 $left_brace = EditableSyntax
::from_json(
5886 $json->namespace_left_brace
, $position, $source);
5887 $position +
= $left_brace->width();
5888 $declarations = EditableSyntax
::from_json(
5889 $json->namespace_declarations
, $position, $source);
5890 $position +
= $declarations->width();
5891 $right_brace = EditableSyntax
::from_json(
5892 $json->namespace_right_brace
, $position, $source);
5893 $position +
= $right_brace->width();
5894 return new NamespaceBody(
5899 public function children(): Generator
<string, EditableSyntax
, void
> {
5900 yield
$this->_left_brace
;
5901 yield
$this->_declarations
;
5902 yield
$this->_right_brace
;
5906 final class NamespaceEmptyBody
extends EditableSyntax
{
5907 private EditableSyntax
$_semicolon;
5908 public function __construct(
5909 EditableSyntax
$semicolon) {
5910 parent
::__construct('namespace_empty_body');
5911 $this->_semicolon
= $semicolon;
5913 public function semicolon(): EditableSyntax
{
5914 return $this->_semicolon
;
5916 public function with_semicolon(EditableSyntax
$semicolon): NamespaceEmptyBody
{
5917 return new NamespaceEmptyBody(
5921 public function rewrite(
5923 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
5924 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
5925 $new_parents = $parents ??
[];
5926 array_push($new_parents, $this);
5927 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
5929 $semicolon === $this->semicolon()) {
5930 return $rewriter($this, $parents ??
[]);
5932 return $rewriter(new NamespaceEmptyBody(
5933 $semicolon), $parents ??
[]);
5937 public static function from_json(mixed $json, int $position, string $source) {
5938 $semicolon = EditableSyntax
::from_json(
5939 $json->namespace_semicolon
, $position, $source);
5940 $position +
= $semicolon->width();
5941 return new NamespaceEmptyBody(
5944 public function children(): Generator
<string, EditableSyntax
, void
> {
5945 yield
$this->_semicolon
;
5949 final class NamespaceUseDeclaration
extends EditableSyntax
{
5950 private EditableSyntax
$_keyword;
5951 private EditableSyntax
$_kind;
5952 private EditableSyntax
$_clauses;
5953 private EditableSyntax
$_semicolon;
5954 public function __construct(
5955 EditableSyntax
$keyword,
5956 EditableSyntax
$kind,
5957 EditableSyntax
$clauses,
5958 EditableSyntax
$semicolon) {
5959 parent
::__construct('namespace_use_declaration');
5960 $this->_keyword
= $keyword;
5961 $this->_kind
= $kind;
5962 $this->_clauses
= $clauses;
5963 $this->_semicolon
= $semicolon;
5965 public function keyword(): EditableSyntax
{
5966 return $this->_keyword
;
5968 public function kind(): EditableSyntax
{
5969 return $this->_kind
;
5971 public function clauses(): EditableSyntax
{
5972 return $this->_clauses
;
5974 public function semicolon(): EditableSyntax
{
5975 return $this->_semicolon
;
5977 public function with_keyword(EditableSyntax
$keyword): NamespaceUseDeclaration
{
5978 return new NamespaceUseDeclaration(
5984 public function with_kind(EditableSyntax
$kind): NamespaceUseDeclaration
{
5985 return new NamespaceUseDeclaration(
5991 public function with_clauses(EditableSyntax
$clauses): NamespaceUseDeclaration
{
5992 return new NamespaceUseDeclaration(
5998 public function with_semicolon(EditableSyntax
$semicolon): NamespaceUseDeclaration
{
5999 return new NamespaceUseDeclaration(
6006 public function rewrite(
6008 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
6009 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
6010 $new_parents = $parents ??
[];
6011 array_push($new_parents, $this);
6012 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
6013 $kind = $this->kind()->rewrite($rewriter, $new_parents);
6014 $clauses = $this->clauses()->rewrite($rewriter, $new_parents);
6015 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
6017 $keyword === $this->keyword() &&
6018 $kind === $this->kind() &&
6019 $clauses === $this->clauses() &&
6020 $semicolon === $this->semicolon()) {
6021 return $rewriter($this, $parents ??
[]);
6023 return $rewriter(new NamespaceUseDeclaration(
6027 $semicolon), $parents ??
[]);
6031 public static function from_json(mixed $json, int $position, string $source) {
6032 $keyword = EditableSyntax
::from_json(
6033 $json->namespace_use_keyword
, $position, $source);
6034 $position +
= $keyword->width();
6035 $kind = EditableSyntax
::from_json(
6036 $json->namespace_use_kind
, $position, $source);
6037 $position +
= $kind->width();
6038 $clauses = EditableSyntax
::from_json(
6039 $json->namespace_use_clauses
, $position, $source);
6040 $position +
= $clauses->width();
6041 $semicolon = EditableSyntax
::from_json(
6042 $json->namespace_use_semicolon
, $position, $source);
6043 $position +
= $semicolon->width();
6044 return new NamespaceUseDeclaration(
6050 public function children(): Generator
<string, EditableSyntax
, void
> {
6051 yield
$this->_keyword
;
6053 yield
$this->_clauses
;
6054 yield
$this->_semicolon
;
6058 final class NamespaceGroupUseDeclaration
extends EditableSyntax
{
6059 private EditableSyntax
$_keyword;
6060 private EditableSyntax
$_kind;
6061 private EditableSyntax
$_prefix;
6062 private EditableSyntax
$_left_brace;
6063 private EditableSyntax
$_clauses;
6064 private EditableSyntax
$_right_brace;
6065 private EditableSyntax
$_semicolon;
6066 public function __construct(
6067 EditableSyntax
$keyword,
6068 EditableSyntax
$kind,
6069 EditableSyntax
$prefix,
6070 EditableSyntax
$left_brace,
6071 EditableSyntax
$clauses,
6072 EditableSyntax
$right_brace,
6073 EditableSyntax
$semicolon) {
6074 parent
::__construct('namespace_group_use_declaration');
6075 $this->_keyword
= $keyword;
6076 $this->_kind
= $kind;
6077 $this->_prefix
= $prefix;
6078 $this->_left_brace
= $left_brace;
6079 $this->_clauses
= $clauses;
6080 $this->_right_brace
= $right_brace;
6081 $this->_semicolon
= $semicolon;
6083 public function keyword(): EditableSyntax
{
6084 return $this->_keyword
;
6086 public function kind(): EditableSyntax
{
6087 return $this->_kind
;
6089 public function prefix(): EditableSyntax
{
6090 return $this->_prefix
;
6092 public function left_brace(): EditableSyntax
{
6093 return $this->_left_brace
;
6095 public function clauses(): EditableSyntax
{
6096 return $this->_clauses
;
6098 public function right_brace(): EditableSyntax
{
6099 return $this->_right_brace
;
6101 public function semicolon(): EditableSyntax
{
6102 return $this->_semicolon
;
6104 public function with_keyword(EditableSyntax
$keyword): NamespaceGroupUseDeclaration
{
6105 return new NamespaceGroupUseDeclaration(
6111 $this->_right_brace
,
6114 public function with_kind(EditableSyntax
$kind): NamespaceGroupUseDeclaration
{
6115 return new NamespaceGroupUseDeclaration(
6121 $this->_right_brace
,
6124 public function with_prefix(EditableSyntax
$prefix): NamespaceGroupUseDeclaration
{
6125 return new NamespaceGroupUseDeclaration(
6131 $this->_right_brace
,
6134 public function with_left_brace(EditableSyntax
$left_brace): NamespaceGroupUseDeclaration
{
6135 return new NamespaceGroupUseDeclaration(
6141 $this->_right_brace
,
6144 public function with_clauses(EditableSyntax
$clauses): NamespaceGroupUseDeclaration
{
6145 return new NamespaceGroupUseDeclaration(
6151 $this->_right_brace
,
6154 public function with_right_brace(EditableSyntax
$right_brace): NamespaceGroupUseDeclaration
{
6155 return new NamespaceGroupUseDeclaration(
6164 public function with_semicolon(EditableSyntax
$semicolon): NamespaceGroupUseDeclaration
{
6165 return new NamespaceGroupUseDeclaration(
6171 $this->_right_brace
,
6175 public function rewrite(
6177 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
6178 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
6179 $new_parents = $parents ??
[];
6180 array_push($new_parents, $this);
6181 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
6182 $kind = $this->kind()->rewrite($rewriter, $new_parents);
6183 $prefix = $this->prefix()->rewrite($rewriter, $new_parents);
6184 $left_brace = $this->left_brace()->rewrite($rewriter, $new_parents);
6185 $clauses = $this->clauses()->rewrite($rewriter, $new_parents);
6186 $right_brace = $this->right_brace()->rewrite($rewriter, $new_parents);
6187 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
6189 $keyword === $this->keyword() &&
6190 $kind === $this->kind() &&
6191 $prefix === $this->prefix() &&
6192 $left_brace === $this->left_brace() &&
6193 $clauses === $this->clauses() &&
6194 $right_brace === $this->right_brace() &&
6195 $semicolon === $this->semicolon()) {
6196 return $rewriter($this, $parents ??
[]);
6198 return $rewriter(new NamespaceGroupUseDeclaration(
6205 $semicolon), $parents ??
[]);
6209 public static function from_json(mixed $json, int $position, string $source) {
6210 $keyword = EditableSyntax
::from_json(
6211 $json->namespace_group_use_keyword
, $position, $source);
6212 $position +
= $keyword->width();
6213 $kind = EditableSyntax
::from_json(
6214 $json->namespace_group_use_kind
, $position, $source);
6215 $position +
= $kind->width();
6216 $prefix = EditableSyntax
::from_json(
6217 $json->namespace_group_use_prefix
, $position, $source);
6218 $position +
= $prefix->width();
6219 $left_brace = EditableSyntax
::from_json(
6220 $json->namespace_group_use_left_brace
, $position, $source);
6221 $position +
= $left_brace->width();
6222 $clauses = EditableSyntax
::from_json(
6223 $json->namespace_group_use_clauses
, $position, $source);
6224 $position +
= $clauses->width();
6225 $right_brace = EditableSyntax
::from_json(
6226 $json->namespace_group_use_right_brace
, $position, $source);
6227 $position +
= $right_brace->width();
6228 $semicolon = EditableSyntax
::from_json(
6229 $json->namespace_group_use_semicolon
, $position, $source);
6230 $position +
= $semicolon->width();
6231 return new NamespaceGroupUseDeclaration(
6240 public function children(): Generator
<string, EditableSyntax
, void
> {
6241 yield
$this->_keyword
;
6243 yield
$this->_prefix
;
6244 yield
$this->_left_brace
;
6245 yield
$this->_clauses
;
6246 yield
$this->_right_brace
;
6247 yield
$this->_semicolon
;
6251 final class NamespaceUseClause
extends EditableSyntax
{
6252 private EditableSyntax
$_clause_kind;
6253 private EditableSyntax
$_name;
6254 private EditableSyntax
$_as;
6255 private EditableSyntax
$_alias;
6256 public function __construct(
6257 EditableSyntax
$clause_kind,
6258 EditableSyntax
$name,
6260 EditableSyntax
$alias) {
6261 parent
::__construct('namespace_use_clause');
6262 $this->_clause_kind
= $clause_kind;
6263 $this->_name
= $name;
6265 $this->_alias
= $alias;
6267 public function clause_kind(): EditableSyntax
{
6268 return $this->_clause_kind
;
6270 public function name(): EditableSyntax
{
6271 return $this->_name
;
6273 public function as(): EditableSyntax
{
6276 public function alias(): EditableSyntax
{
6277 return $this->_alias
;
6279 public function with_clause_kind(EditableSyntax
$clause_kind): NamespaceUseClause
{
6280 return new NamespaceUseClause(
6286 public function with_name(EditableSyntax
$name): NamespaceUseClause
{
6287 return new NamespaceUseClause(
6288 $this->_clause_kind
,
6293 public function with_as(EditableSyntax
$as): NamespaceUseClause
{
6294 return new NamespaceUseClause(
6295 $this->_clause_kind
,
6300 public function with_alias(EditableSyntax
$alias): NamespaceUseClause
{
6301 return new NamespaceUseClause(
6302 $this->_clause_kind
,
6308 public function rewrite(
6310 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
6311 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
6312 $new_parents = $parents ??
[];
6313 array_push($new_parents, $this);
6314 $clause_kind = $this->clause_kind()->rewrite($rewriter, $new_parents);
6315 $name = $this->name()->rewrite($rewriter, $new_parents);
6316 $as = $this->as()->rewrite($rewriter, $new_parents);
6317 $alias = $this->alias()->rewrite($rewriter, $new_parents);
6319 $clause_kind === $this->clause_kind() &&
6320 $name === $this->name() &&
6321 $as === $this->as() &&
6322 $alias === $this->alias()) {
6323 return $rewriter($this, $parents ??
[]);
6325 return $rewriter(new NamespaceUseClause(
6329 $alias), $parents ??
[]);
6333 public static function from_json(mixed $json, int $position, string $source) {
6334 $clause_kind = EditableSyntax
::from_json(
6335 $json->namespace_use_clause_kind
, $position, $source);
6336 $position +
= $clause_kind->width();
6337 $name = EditableSyntax
::from_json(
6338 $json->namespace_use_name
, $position, $source);
6339 $position +
= $name->width();
6340 $as = EditableSyntax
::from_json(
6341 $json->namespace_use_as
, $position, $source);
6342 $position +
= $as->width();
6343 $alias = EditableSyntax
::from_json(
6344 $json->namespace_use_alias
, $position, $source);
6345 $position +
= $alias->width();
6346 return new NamespaceUseClause(
6352 public function children(): Generator
<string, EditableSyntax
, void
> {
6353 yield
$this->_clause_kind
;
6356 yield
$this->_alias
;
6360 final class FunctionDeclaration
extends EditableSyntax
{
6361 private EditableSyntax
$_attribute_spec;
6362 private EditableSyntax
$_declaration_header;
6363 private EditableSyntax
$_body;
6364 public function __construct(
6365 EditableSyntax
$attribute_spec,
6366 EditableSyntax
$declaration_header,
6367 EditableSyntax
$body) {
6368 parent
::__construct('function_declaration');
6369 $this->_attribute_spec
= $attribute_spec;
6370 $this->_declaration_header
= $declaration_header;
6371 $this->_body
= $body;
6373 public function attribute_spec(): EditableSyntax
{
6374 return $this->_attribute_spec
;
6376 public function declaration_header(): EditableSyntax
{
6377 return $this->_declaration_header
;
6379 public function body(): EditableSyntax
{
6380 return $this->_body
;
6382 public function with_attribute_spec(EditableSyntax
$attribute_spec): FunctionDeclaration
{
6383 return new FunctionDeclaration(
6385 $this->_declaration_header
,
6388 public function with_declaration_header(EditableSyntax
$declaration_header): FunctionDeclaration
{
6389 return new FunctionDeclaration(
6390 $this->_attribute_spec
,
6391 $declaration_header,
6394 public function with_body(EditableSyntax
$body): FunctionDeclaration
{
6395 return new FunctionDeclaration(
6396 $this->_attribute_spec
,
6397 $this->_declaration_header
,
6401 public function rewrite(
6403 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
6404 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
6405 $new_parents = $parents ??
[];
6406 array_push($new_parents, $this);
6407 $attribute_spec = $this->attribute_spec()->rewrite($rewriter, $new_parents);
6408 $declaration_header = $this->declaration_header()->rewrite($rewriter, $new_parents);
6409 $body = $this->body()->rewrite($rewriter, $new_parents);
6411 $attribute_spec === $this->attribute_spec() &&
6412 $declaration_header === $this->declaration_header() &&
6413 $body === $this->body()) {
6414 return $rewriter($this, $parents ??
[]);
6416 return $rewriter(new FunctionDeclaration(
6418 $declaration_header,
6419 $body), $parents ??
[]);
6423 public static function from_json(mixed $json, int $position, string $source) {
6424 $attribute_spec = EditableSyntax
::from_json(
6425 $json->function_attribute_spec
, $position, $source);
6426 $position +
= $attribute_spec->width();
6427 $declaration_header = EditableSyntax
::from_json(
6428 $json->function_declaration_header
, $position, $source);
6429 $position +
= $declaration_header->width();
6430 $body = EditableSyntax
::from_json(
6431 $json->function_body
, $position, $source);
6432 $position +
= $body->width();
6433 return new FunctionDeclaration(
6435 $declaration_header,
6438 public function children(): Generator
<string, EditableSyntax
, void
> {
6439 yield
$this->_attribute_spec
;
6440 yield
$this->_declaration_header
;
6445 final class FunctionDeclarationHeader
extends EditableSyntax
{
6446 private EditableSyntax
$_modifiers;
6447 private EditableSyntax
$_keyword;
6448 private EditableSyntax
$_ampersand;
6449 private EditableSyntax
$_name;
6450 private EditableSyntax
$_type_parameter_list;
6451 private EditableSyntax
$_left_paren;
6452 private EditableSyntax
$_parameter_list;
6453 private EditableSyntax
$_right_paren;
6454 private EditableSyntax
$_colon;
6455 private EditableSyntax
$_type;
6456 private EditableSyntax
$_where_clause;
6457 public function __construct(
6458 EditableSyntax
$modifiers,
6459 EditableSyntax
$keyword,
6460 EditableSyntax
$ampersand,
6461 EditableSyntax
$name,
6462 EditableSyntax
$type_parameter_list,
6463 EditableSyntax
$left_paren,
6464 EditableSyntax
$parameter_list,
6465 EditableSyntax
$right_paren,
6466 EditableSyntax
$colon,
6467 EditableSyntax
$type,
6468 EditableSyntax
$where_clause) {
6469 parent
::__construct('function_declaration_header');
6470 $this->_modifiers
= $modifiers;
6471 $this->_keyword
= $keyword;
6472 $this->_ampersand
= $ampersand;
6473 $this->_name
= $name;
6474 $this->_type_parameter_list
= $type_parameter_list;
6475 $this->_left_paren
= $left_paren;
6476 $this->_parameter_list
= $parameter_list;
6477 $this->_right_paren
= $right_paren;
6478 $this->_colon
= $colon;
6479 $this->_type
= $type;
6480 $this->_where_clause
= $where_clause;
6482 public function modifiers(): EditableSyntax
{
6483 return $this->_modifiers
;
6485 public function keyword(): EditableSyntax
{
6486 return $this->_keyword
;
6488 public function ampersand(): EditableSyntax
{
6489 return $this->_ampersand
;
6491 public function name(): EditableSyntax
{
6492 return $this->_name
;
6494 public function type_parameter_list(): EditableSyntax
{
6495 return $this->_type_parameter_list
;
6497 public function left_paren(): EditableSyntax
{
6498 return $this->_left_paren
;
6500 public function parameter_list(): EditableSyntax
{
6501 return $this->_parameter_list
;
6503 public function right_paren(): EditableSyntax
{
6504 return $this->_right_paren
;
6506 public function colon(): EditableSyntax
{
6507 return $this->_colon
;
6509 public function type(): EditableSyntax
{
6510 return $this->_type
;
6512 public function where_clause(): EditableSyntax
{
6513 return $this->_where_clause
;
6515 public function with_modifiers(EditableSyntax
$modifiers): FunctionDeclarationHeader
{
6516 return new FunctionDeclarationHeader(
6521 $this->_type_parameter_list
,
6523 $this->_parameter_list
,
6524 $this->_right_paren
,
6527 $this->_where_clause
);
6529 public function with_keyword(EditableSyntax
$keyword): FunctionDeclarationHeader
{
6530 return new FunctionDeclarationHeader(
6535 $this->_type_parameter_list
,
6537 $this->_parameter_list
,
6538 $this->_right_paren
,
6541 $this->_where_clause
);
6543 public function with_ampersand(EditableSyntax
$ampersand): FunctionDeclarationHeader
{
6544 return new FunctionDeclarationHeader(
6549 $this->_type_parameter_list
,
6551 $this->_parameter_list
,
6552 $this->_right_paren
,
6555 $this->_where_clause
);
6557 public function with_name(EditableSyntax
$name): FunctionDeclarationHeader
{
6558 return new FunctionDeclarationHeader(
6563 $this->_type_parameter_list
,
6565 $this->_parameter_list
,
6566 $this->_right_paren
,
6569 $this->_where_clause
);
6571 public function with_type_parameter_list(EditableSyntax
$type_parameter_list): FunctionDeclarationHeader
{
6572 return new FunctionDeclarationHeader(
6577 $type_parameter_list,
6579 $this->_parameter_list
,
6580 $this->_right_paren
,
6583 $this->_where_clause
);
6585 public function with_left_paren(EditableSyntax
$left_paren): FunctionDeclarationHeader
{
6586 return new FunctionDeclarationHeader(
6591 $this->_type_parameter_list
,
6593 $this->_parameter_list
,
6594 $this->_right_paren
,
6597 $this->_where_clause
);
6599 public function with_parameter_list(EditableSyntax
$parameter_list): FunctionDeclarationHeader
{
6600 return new FunctionDeclarationHeader(
6605 $this->_type_parameter_list
,
6608 $this->_right_paren
,
6611 $this->_where_clause
);
6613 public function with_right_paren(EditableSyntax
$right_paren): FunctionDeclarationHeader
{
6614 return new FunctionDeclarationHeader(
6619 $this->_type_parameter_list
,
6621 $this->_parameter_list
,
6625 $this->_where_clause
);
6627 public function with_colon(EditableSyntax
$colon): FunctionDeclarationHeader
{
6628 return new FunctionDeclarationHeader(
6633 $this->_type_parameter_list
,
6635 $this->_parameter_list
,
6636 $this->_right_paren
,
6639 $this->_where_clause
);
6641 public function with_type(EditableSyntax
$type): FunctionDeclarationHeader
{
6642 return new FunctionDeclarationHeader(
6647 $this->_type_parameter_list
,
6649 $this->_parameter_list
,
6650 $this->_right_paren
,
6653 $this->_where_clause
);
6655 public function with_where_clause(EditableSyntax
$where_clause): FunctionDeclarationHeader
{
6656 return new FunctionDeclarationHeader(
6661 $this->_type_parameter_list
,
6663 $this->_parameter_list
,
6664 $this->_right_paren
,
6670 public function rewrite(
6672 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
6673 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
6674 $new_parents = $parents ??
[];
6675 array_push($new_parents, $this);
6676 $modifiers = $this->modifiers()->rewrite($rewriter, $new_parents);
6677 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
6678 $ampersand = $this->ampersand()->rewrite($rewriter, $new_parents);
6679 $name = $this->name()->rewrite($rewriter, $new_parents);
6680 $type_parameter_list = $this->type_parameter_list()->rewrite($rewriter, $new_parents);
6681 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
6682 $parameter_list = $this->parameter_list()->rewrite($rewriter, $new_parents);
6683 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
6684 $colon = $this->colon()->rewrite($rewriter, $new_parents);
6685 $type = $this->type()->rewrite($rewriter, $new_parents);
6686 $where_clause = $this->where_clause()->rewrite($rewriter, $new_parents);
6688 $modifiers === $this->modifiers() &&
6689 $keyword === $this->keyword() &&
6690 $ampersand === $this->ampersand() &&
6691 $name === $this->name() &&
6692 $type_parameter_list === $this->type_parameter_list() &&
6693 $left_paren === $this->left_paren() &&
6694 $parameter_list === $this->parameter_list() &&
6695 $right_paren === $this->right_paren() &&
6696 $colon === $this->colon() &&
6697 $type === $this->type() &&
6698 $where_clause === $this->where_clause()) {
6699 return $rewriter($this, $parents ??
[]);
6701 return $rewriter(new FunctionDeclarationHeader(
6706 $type_parameter_list,
6712 $where_clause), $parents ??
[]);
6716 public static function from_json(mixed $json, int $position, string $source) {
6717 $modifiers = EditableSyntax
::from_json(
6718 $json->function_modifiers
, $position, $source);
6719 $position +
= $modifiers->width();
6720 $keyword = EditableSyntax
::from_json(
6721 $json->function_keyword
, $position, $source);
6722 $position +
= $keyword->width();
6723 $ampersand = EditableSyntax
::from_json(
6724 $json->function_ampersand
, $position, $source);
6725 $position +
= $ampersand->width();
6726 $name = EditableSyntax
::from_json(
6727 $json->function_name
, $position, $source);
6728 $position +
= $name->width();
6729 $type_parameter_list = EditableSyntax
::from_json(
6730 $json->function_type_parameter_list
, $position, $source);
6731 $position +
= $type_parameter_list->width();
6732 $left_paren = EditableSyntax
::from_json(
6733 $json->function_left_paren
, $position, $source);
6734 $position +
= $left_paren->width();
6735 $parameter_list = EditableSyntax
::from_json(
6736 $json->function_parameter_list
, $position, $source);
6737 $position +
= $parameter_list->width();
6738 $right_paren = EditableSyntax
::from_json(
6739 $json->function_right_paren
, $position, $source);
6740 $position +
= $right_paren->width();
6741 $colon = EditableSyntax
::from_json(
6742 $json->function_colon
, $position, $source);
6743 $position +
= $colon->width();
6744 $type = EditableSyntax
::from_json(
6745 $json->function_type
, $position, $source);
6746 $position +
= $type->width();
6747 $where_clause = EditableSyntax
::from_json(
6748 $json->function_where_clause
, $position, $source);
6749 $position +
= $where_clause->width();
6750 return new FunctionDeclarationHeader(
6755 $type_parameter_list,
6763 public function children(): Generator
<string, EditableSyntax
, void
> {
6764 yield
$this->_modifiers
;
6765 yield
$this->_keyword
;
6766 yield
$this->_ampersand
;
6768 yield
$this->_type_parameter_list
;
6769 yield
$this->_left_paren
;
6770 yield
$this->_parameter_list
;
6771 yield
$this->_right_paren
;
6772 yield
$this->_colon
;
6774 yield
$this->_where_clause
;
6778 final class WhereClause
extends EditableSyntax
{
6779 private EditableSyntax
$_keyword;
6780 private EditableSyntax
$_constraints;
6781 public function __construct(
6782 EditableSyntax
$keyword,
6783 EditableSyntax
$constraints) {
6784 parent
::__construct('where_clause');
6785 $this->_keyword
= $keyword;
6786 $this->_constraints
= $constraints;
6788 public function keyword(): EditableSyntax
{
6789 return $this->_keyword
;
6791 public function constraints(): EditableSyntax
{
6792 return $this->_constraints
;
6794 public function with_keyword(EditableSyntax
$keyword): WhereClause
{
6795 return new WhereClause(
6797 $this->_constraints
);
6799 public function with_constraints(EditableSyntax
$constraints): WhereClause
{
6800 return new WhereClause(
6805 public function rewrite(
6807 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
6808 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
6809 $new_parents = $parents ??
[];
6810 array_push($new_parents, $this);
6811 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
6812 $constraints = $this->constraints()->rewrite($rewriter, $new_parents);
6814 $keyword === $this->keyword() &&
6815 $constraints === $this->constraints()) {
6816 return $rewriter($this, $parents ??
[]);
6818 return $rewriter(new WhereClause(
6820 $constraints), $parents ??
[]);
6824 public static function from_json(mixed $json, int $position, string $source) {
6825 $keyword = EditableSyntax
::from_json(
6826 $json->where_clause_keyword
, $position, $source);
6827 $position +
= $keyword->width();
6828 $constraints = EditableSyntax
::from_json(
6829 $json->where_clause_constraints
, $position, $source);
6830 $position +
= $constraints->width();
6831 return new WhereClause(
6835 public function children(): Generator
<string, EditableSyntax
, void
> {
6836 yield
$this->_keyword
;
6837 yield
$this->_constraints
;
6841 final class WhereConstraint
extends EditableSyntax
{
6842 private EditableSyntax
$_left_type;
6843 private EditableSyntax
$_operator;
6844 private EditableSyntax
$_right_type;
6845 public function __construct(
6846 EditableSyntax
$left_type,
6847 EditableSyntax
$operator,
6848 EditableSyntax
$right_type) {
6849 parent
::__construct('where_constraint');
6850 $this->_left_type
= $left_type;
6851 $this->_operator
= $operator;
6852 $this->_right_type
= $right_type;
6854 public function left_type(): EditableSyntax
{
6855 return $this->_left_type
;
6857 public function operator(): EditableSyntax
{
6858 return $this->_operator
;
6860 public function right_type(): EditableSyntax
{
6861 return $this->_right_type
;
6863 public function with_left_type(EditableSyntax
$left_type): WhereConstraint
{
6864 return new WhereConstraint(
6867 $this->_right_type
);
6869 public function with_operator(EditableSyntax
$operator): WhereConstraint
{
6870 return new WhereConstraint(
6873 $this->_right_type
);
6875 public function with_right_type(EditableSyntax
$right_type): WhereConstraint
{
6876 return new WhereConstraint(
6882 public function rewrite(
6884 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
6885 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
6886 $new_parents = $parents ??
[];
6887 array_push($new_parents, $this);
6888 $left_type = $this->left_type()->rewrite($rewriter, $new_parents);
6889 $operator = $this->operator()->rewrite($rewriter, $new_parents);
6890 $right_type = $this->right_type()->rewrite($rewriter, $new_parents);
6892 $left_type === $this->left_type() &&
6893 $operator === $this->operator() &&
6894 $right_type === $this->right_type()) {
6895 return $rewriter($this, $parents ??
[]);
6897 return $rewriter(new WhereConstraint(
6900 $right_type), $parents ??
[]);
6904 public static function from_json(mixed $json, int $position, string $source) {
6905 $left_type = EditableSyntax
::from_json(
6906 $json->where_constraint_left_type
, $position, $source);
6907 $position +
= $left_type->width();
6908 $operator = EditableSyntax
::from_json(
6909 $json->where_constraint_operator
, $position, $source);
6910 $position +
= $operator->width();
6911 $right_type = EditableSyntax
::from_json(
6912 $json->where_constraint_right_type
, $position, $source);
6913 $position +
= $right_type->width();
6914 return new WhereConstraint(
6919 public function children(): Generator
<string, EditableSyntax
, void
> {
6920 yield
$this->_left_type
;
6921 yield
$this->_operator
;
6922 yield
$this->_right_type
;
6926 final class MethodishDeclaration
extends EditableSyntax
{
6927 private EditableSyntax
$_attribute;
6928 private EditableSyntax
$_function_decl_header;
6929 private EditableSyntax
$_function_body;
6930 private EditableSyntax
$_semicolon;
6931 public function __construct(
6932 EditableSyntax
$attribute,
6933 EditableSyntax
$function_decl_header,
6934 EditableSyntax
$function_body,
6935 EditableSyntax
$semicolon) {
6936 parent
::__construct('methodish_declaration');
6937 $this->_attribute
= $attribute;
6938 $this->_function_decl_header
= $function_decl_header;
6939 $this->_function_body
= $function_body;
6940 $this->_semicolon
= $semicolon;
6942 public function attribute(): EditableSyntax
{
6943 return $this->_attribute
;
6945 public function function_decl_header(): EditableSyntax
{
6946 return $this->_function_decl_header
;
6948 public function function_body(): EditableSyntax
{
6949 return $this->_function_body
;
6951 public function semicolon(): EditableSyntax
{
6952 return $this->_semicolon
;
6954 public function with_attribute(EditableSyntax
$attribute): MethodishDeclaration
{
6955 return new MethodishDeclaration(
6957 $this->_function_decl_header
,
6958 $this->_function_body
,
6961 public function with_function_decl_header(EditableSyntax
$function_decl_header): MethodishDeclaration
{
6962 return new MethodishDeclaration(
6964 $function_decl_header,
6965 $this->_function_body
,
6968 public function with_function_body(EditableSyntax
$function_body): MethodishDeclaration
{
6969 return new MethodishDeclaration(
6971 $this->_function_decl_header
,
6975 public function with_semicolon(EditableSyntax
$semicolon): MethodishDeclaration
{
6976 return new MethodishDeclaration(
6978 $this->_function_decl_header
,
6979 $this->_function_body
,
6983 public function rewrite(
6985 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
6986 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
6987 $new_parents = $parents ??
[];
6988 array_push($new_parents, $this);
6989 $attribute = $this->attribute()->rewrite($rewriter, $new_parents);
6990 $function_decl_header = $this->function_decl_header()->rewrite($rewriter, $new_parents);
6991 $function_body = $this->function_body()->rewrite($rewriter, $new_parents);
6992 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
6994 $attribute === $this->attribute() &&
6995 $function_decl_header === $this->function_decl_header() &&
6996 $function_body === $this->function_body() &&
6997 $semicolon === $this->semicolon()) {
6998 return $rewriter($this, $parents ??
[]);
7000 return $rewriter(new MethodishDeclaration(
7002 $function_decl_header,
7004 $semicolon), $parents ??
[]);
7008 public static function from_json(mixed $json, int $position, string $source) {
7009 $attribute = EditableSyntax
::from_json(
7010 $json->methodish_attribute
, $position, $source);
7011 $position +
= $attribute->width();
7012 $function_decl_header = EditableSyntax
::from_json(
7013 $json->methodish_function_decl_header
, $position, $source);
7014 $position +
= $function_decl_header->width();
7015 $function_body = EditableSyntax
::from_json(
7016 $json->methodish_function_body
, $position, $source);
7017 $position +
= $function_body->width();
7018 $semicolon = EditableSyntax
::from_json(
7019 $json->methodish_semicolon
, $position, $source);
7020 $position +
= $semicolon->width();
7021 return new MethodishDeclaration(
7023 $function_decl_header,
7027 public function children(): Generator
<string, EditableSyntax
, void
> {
7028 yield
$this->_attribute
;
7029 yield
$this->_function_decl_header
;
7030 yield
$this->_function_body
;
7031 yield
$this->_semicolon
;
7035 final class ClassishDeclaration
extends EditableSyntax
{
7036 private EditableSyntax
$_attribute;
7037 private EditableSyntax
$_modifiers;
7038 private EditableSyntax
$_keyword;
7039 private EditableSyntax
$_name;
7040 private EditableSyntax
$_type_parameters;
7041 private EditableSyntax
$_extends_keyword;
7042 private EditableSyntax
$_extends_list;
7043 private EditableSyntax
$_implements_keyword;
7044 private EditableSyntax
$_implements_list;
7045 private EditableSyntax
$_body;
7046 public function __construct(
7047 EditableSyntax
$attribute,
7048 EditableSyntax
$modifiers,
7049 EditableSyntax
$keyword,
7050 EditableSyntax
$name,
7051 EditableSyntax
$type_parameters,
7052 EditableSyntax
$extends_keyword,
7053 EditableSyntax
$extends_list,
7054 EditableSyntax
$implements_keyword,
7055 EditableSyntax
$implements_list,
7056 EditableSyntax
$body) {
7057 parent
::__construct('classish_declaration');
7058 $this->_attribute
= $attribute;
7059 $this->_modifiers
= $modifiers;
7060 $this->_keyword
= $keyword;
7061 $this->_name
= $name;
7062 $this->_type_parameters
= $type_parameters;
7063 $this->_extends_keyword
= $extends_keyword;
7064 $this->_extends_list
= $extends_list;
7065 $this->_implements_keyword
= $implements_keyword;
7066 $this->_implements_list
= $implements_list;
7067 $this->_body
= $body;
7069 public function attribute(): EditableSyntax
{
7070 return $this->_attribute
;
7072 public function modifiers(): EditableSyntax
{
7073 return $this->_modifiers
;
7075 public function keyword(): EditableSyntax
{
7076 return $this->_keyword
;
7078 public function name(): EditableSyntax
{
7079 return $this->_name
;
7081 public function type_parameters(): EditableSyntax
{
7082 return $this->_type_parameters
;
7084 public function extends_keyword(): EditableSyntax
{
7085 return $this->_extends_keyword
;
7087 public function extends_list(): EditableSyntax
{
7088 return $this->_extends_list
;
7090 public function implements_keyword(): EditableSyntax
{
7091 return $this->_implements_keyword
;
7093 public function implements_list(): EditableSyntax
{
7094 return $this->_implements_list
;
7096 public function body(): EditableSyntax
{
7097 return $this->_body
;
7099 public function with_attribute(EditableSyntax
$attribute): ClassishDeclaration
{
7100 return new ClassishDeclaration(
7105 $this->_type_parameters
,
7106 $this->_extends_keyword
,
7107 $this->_extends_list
,
7108 $this->_implements_keyword
,
7109 $this->_implements_list
,
7112 public function with_modifiers(EditableSyntax
$modifiers): ClassishDeclaration
{
7113 return new ClassishDeclaration(
7118 $this->_type_parameters
,
7119 $this->_extends_keyword
,
7120 $this->_extends_list
,
7121 $this->_implements_keyword
,
7122 $this->_implements_list
,
7125 public function with_keyword(EditableSyntax
$keyword): ClassishDeclaration
{
7126 return new ClassishDeclaration(
7131 $this->_type_parameters
,
7132 $this->_extends_keyword
,
7133 $this->_extends_list
,
7134 $this->_implements_keyword
,
7135 $this->_implements_list
,
7138 public function with_name(EditableSyntax
$name): ClassishDeclaration
{
7139 return new ClassishDeclaration(
7144 $this->_type_parameters
,
7145 $this->_extends_keyword
,
7146 $this->_extends_list
,
7147 $this->_implements_keyword
,
7148 $this->_implements_list
,
7151 public function with_type_parameters(EditableSyntax
$type_parameters): ClassishDeclaration
{
7152 return new ClassishDeclaration(
7158 $this->_extends_keyword
,
7159 $this->_extends_list
,
7160 $this->_implements_keyword
,
7161 $this->_implements_list
,
7164 public function with_extends_keyword(EditableSyntax
$extends_keyword): ClassishDeclaration
{
7165 return new ClassishDeclaration(
7170 $this->_type_parameters
,
7172 $this->_extends_list
,
7173 $this->_implements_keyword
,
7174 $this->_implements_list
,
7177 public function with_extends_list(EditableSyntax
$extends_list): ClassishDeclaration
{
7178 return new ClassishDeclaration(
7183 $this->_type_parameters
,
7184 $this->_extends_keyword
,
7186 $this->_implements_keyword
,
7187 $this->_implements_list
,
7190 public function with_implements_keyword(EditableSyntax
$implements_keyword): ClassishDeclaration
{
7191 return new ClassishDeclaration(
7196 $this->_type_parameters
,
7197 $this->_extends_keyword
,
7198 $this->_extends_list
,
7199 $implements_keyword,
7200 $this->_implements_list
,
7203 public function with_implements_list(EditableSyntax
$implements_list): ClassishDeclaration
{
7204 return new ClassishDeclaration(
7209 $this->_type_parameters
,
7210 $this->_extends_keyword
,
7211 $this->_extends_list
,
7212 $this->_implements_keyword
,
7216 public function with_body(EditableSyntax
$body): ClassishDeclaration
{
7217 return new ClassishDeclaration(
7222 $this->_type_parameters
,
7223 $this->_extends_keyword
,
7224 $this->_extends_list
,
7225 $this->_implements_keyword
,
7226 $this->_implements_list
,
7230 public function rewrite(
7232 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
7233 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
7234 $new_parents = $parents ??
[];
7235 array_push($new_parents, $this);
7236 $attribute = $this->attribute()->rewrite($rewriter, $new_parents);
7237 $modifiers = $this->modifiers()->rewrite($rewriter, $new_parents);
7238 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
7239 $name = $this->name()->rewrite($rewriter, $new_parents);
7240 $type_parameters = $this->type_parameters()->rewrite($rewriter, $new_parents);
7241 $extends_keyword = $this->extends_keyword()->rewrite($rewriter, $new_parents);
7242 $extends_list = $this->extends_list()->rewrite($rewriter, $new_parents);
7243 $implements_keyword = $this->implements_keyword()->rewrite($rewriter, $new_parents);
7244 $implements_list = $this->implements_list()->rewrite($rewriter, $new_parents);
7245 $body = $this->body()->rewrite($rewriter, $new_parents);
7247 $attribute === $this->attribute() &&
7248 $modifiers === $this->modifiers() &&
7249 $keyword === $this->keyword() &&
7250 $name === $this->name() &&
7251 $type_parameters === $this->type_parameters() &&
7252 $extends_keyword === $this->extends_keyword() &&
7253 $extends_list === $this->extends_list() &&
7254 $implements_keyword === $this->implements_keyword() &&
7255 $implements_list === $this->implements_list() &&
7256 $body === $this->body()) {
7257 return $rewriter($this, $parents ??
[]);
7259 return $rewriter(new ClassishDeclaration(
7267 $implements_keyword,
7269 $body), $parents ??
[]);
7273 public static function from_json(mixed $json, int $position, string $source) {
7274 $attribute = EditableSyntax
::from_json(
7275 $json->classish_attribute
, $position, $source);
7276 $position +
= $attribute->width();
7277 $modifiers = EditableSyntax
::from_json(
7278 $json->classish_modifiers
, $position, $source);
7279 $position +
= $modifiers->width();
7280 $keyword = EditableSyntax
::from_json(
7281 $json->classish_keyword
, $position, $source);
7282 $position +
= $keyword->width();
7283 $name = EditableSyntax
::from_json(
7284 $json->classish_name
, $position, $source);
7285 $position +
= $name->width();
7286 $type_parameters = EditableSyntax
::from_json(
7287 $json->classish_type_parameters
, $position, $source);
7288 $position +
= $type_parameters->width();
7289 $extends_keyword = EditableSyntax
::from_json(
7290 $json->classish_extends_keyword
, $position, $source);
7291 $position +
= $extends_keyword->width();
7292 $extends_list = EditableSyntax
::from_json(
7293 $json->classish_extends_list
, $position, $source);
7294 $position +
= $extends_list->width();
7295 $implements_keyword = EditableSyntax
::from_json(
7296 $json->classish_implements_keyword
, $position, $source);
7297 $position +
= $implements_keyword->width();
7298 $implements_list = EditableSyntax
::from_json(
7299 $json->classish_implements_list
, $position, $source);
7300 $position +
= $implements_list->width();
7301 $body = EditableSyntax
::from_json(
7302 $json->classish_body
, $position, $source);
7303 $position +
= $body->width();
7304 return new ClassishDeclaration(
7312 $implements_keyword,
7316 public function children(): Generator
<string, EditableSyntax
, void
> {
7317 yield
$this->_attribute
;
7318 yield
$this->_modifiers
;
7319 yield
$this->_keyword
;
7321 yield
$this->_type_parameters
;
7322 yield
$this->_extends_keyword
;
7323 yield
$this->_extends_list
;
7324 yield
$this->_implements_keyword
;
7325 yield
$this->_implements_list
;
7330 final class ClassishBody
extends EditableSyntax
{
7331 private EditableSyntax
$_left_brace;
7332 private EditableSyntax
$_elements;
7333 private EditableSyntax
$_right_brace;
7334 public function __construct(
7335 EditableSyntax
$left_brace,
7336 EditableSyntax
$elements,
7337 EditableSyntax
$right_brace) {
7338 parent
::__construct('classish_body');
7339 $this->_left_brace
= $left_brace;
7340 $this->_elements
= $elements;
7341 $this->_right_brace
= $right_brace;
7343 public function left_brace(): EditableSyntax
{
7344 return $this->_left_brace
;
7346 public function elements(): EditableSyntax
{
7347 return $this->_elements
;
7349 public function right_brace(): EditableSyntax
{
7350 return $this->_right_brace
;
7352 public function with_left_brace(EditableSyntax
$left_brace): ClassishBody
{
7353 return new ClassishBody(
7356 $this->_right_brace
);
7358 public function with_elements(EditableSyntax
$elements): ClassishBody
{
7359 return new ClassishBody(
7362 $this->_right_brace
);
7364 public function with_right_brace(EditableSyntax
$right_brace): ClassishBody
{
7365 return new ClassishBody(
7371 public function rewrite(
7373 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
7374 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
7375 $new_parents = $parents ??
[];
7376 array_push($new_parents, $this);
7377 $left_brace = $this->left_brace()->rewrite($rewriter, $new_parents);
7378 $elements = $this->elements()->rewrite($rewriter, $new_parents);
7379 $right_brace = $this->right_brace()->rewrite($rewriter, $new_parents);
7381 $left_brace === $this->left_brace() &&
7382 $elements === $this->elements() &&
7383 $right_brace === $this->right_brace()) {
7384 return $rewriter($this, $parents ??
[]);
7386 return $rewriter(new ClassishBody(
7389 $right_brace), $parents ??
[]);
7393 public static function from_json(mixed $json, int $position, string $source) {
7394 $left_brace = EditableSyntax
::from_json(
7395 $json->classish_body_left_brace
, $position, $source);
7396 $position +
= $left_brace->width();
7397 $elements = EditableSyntax
::from_json(
7398 $json->classish_body_elements
, $position, $source);
7399 $position +
= $elements->width();
7400 $right_brace = EditableSyntax
::from_json(
7401 $json->classish_body_right_brace
, $position, $source);
7402 $position +
= $right_brace->width();
7403 return new ClassishBody(
7408 public function children(): Generator
<string, EditableSyntax
, void
> {
7409 yield
$this->_left_brace
;
7410 yield
$this->_elements
;
7411 yield
$this->_right_brace
;
7415 final class TraitUsePrecedenceItem
extends EditableSyntax
{
7416 private EditableSyntax
$_name;
7417 private EditableSyntax
$_keyword;
7418 private EditableSyntax
$_removed_names;
7419 public function __construct(
7420 EditableSyntax
$name,
7421 EditableSyntax
$keyword,
7422 EditableSyntax
$removed_names) {
7423 parent
::__construct('trait_use_precedence_item');
7424 $this->_name
= $name;
7425 $this->_keyword
= $keyword;
7426 $this->_removed_names
= $removed_names;
7428 public function name(): EditableSyntax
{
7429 return $this->_name
;
7431 public function keyword(): EditableSyntax
{
7432 return $this->_keyword
;
7434 public function removed_names(): EditableSyntax
{
7435 return $this->_removed_names
;
7437 public function with_name(EditableSyntax
$name): TraitUsePrecedenceItem
{
7438 return new TraitUsePrecedenceItem(
7441 $this->_removed_names
);
7443 public function with_keyword(EditableSyntax
$keyword): TraitUsePrecedenceItem
{
7444 return new TraitUsePrecedenceItem(
7447 $this->_removed_names
);
7449 public function with_removed_names(EditableSyntax
$removed_names): TraitUsePrecedenceItem
{
7450 return new TraitUsePrecedenceItem(
7456 public function rewrite(
7458 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
7459 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
7460 $new_parents = $parents ??
[];
7461 array_push($new_parents, $this);
7462 $name = $this->name()->rewrite($rewriter, $new_parents);
7463 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
7464 $removed_names = $this->removed_names()->rewrite($rewriter, $new_parents);
7466 $name === $this->name() &&
7467 $keyword === $this->keyword() &&
7468 $removed_names === $this->removed_names()) {
7469 return $rewriter($this, $parents ??
[]);
7471 return $rewriter(new TraitUsePrecedenceItem(
7474 $removed_names), $parents ??
[]);
7478 public static function from_json(mixed $json, int $position, string $source) {
7479 $name = EditableSyntax
::from_json(
7480 $json->trait_use_precedence_item_name
, $position, $source);
7481 $position +
= $name->width();
7482 $keyword = EditableSyntax
::from_json(
7483 $json->trait_use_precedence_item_keyword
, $position, $source);
7484 $position +
= $keyword->width();
7485 $removed_names = EditableSyntax
::from_json(
7486 $json->trait_use_precedence_item_removed_names
, $position, $source);
7487 $position +
= $removed_names->width();
7488 return new TraitUsePrecedenceItem(
7493 public function children(): Generator
<string, EditableSyntax
, void
> {
7495 yield
$this->_keyword
;
7496 yield
$this->_removed_names
;
7500 final class TraitUseAliasItem
extends EditableSyntax
{
7501 private EditableSyntax
$_aliasing_name;
7502 private EditableSyntax
$_keyword;
7503 private EditableSyntax
$_modifiers;
7504 private EditableSyntax
$_aliased_name;
7505 public function __construct(
7506 EditableSyntax
$aliasing_name,
7507 EditableSyntax
$keyword,
7508 EditableSyntax
$modifiers,
7509 EditableSyntax
$aliased_name) {
7510 parent
::__construct('trait_use_alias_item');
7511 $this->_aliasing_name
= $aliasing_name;
7512 $this->_keyword
= $keyword;
7513 $this->_modifiers
= $modifiers;
7514 $this->_aliased_name
= $aliased_name;
7516 public function aliasing_name(): EditableSyntax
{
7517 return $this->_aliasing_name
;
7519 public function keyword(): EditableSyntax
{
7520 return $this->_keyword
;
7522 public function modifiers(): EditableSyntax
{
7523 return $this->_modifiers
;
7525 public function aliased_name(): EditableSyntax
{
7526 return $this->_aliased_name
;
7528 public function with_aliasing_name(EditableSyntax
$aliasing_name): TraitUseAliasItem
{
7529 return new TraitUseAliasItem(
7533 $this->_aliased_name
);
7535 public function with_keyword(EditableSyntax
$keyword): TraitUseAliasItem
{
7536 return new TraitUseAliasItem(
7537 $this->_aliasing_name
,
7540 $this->_aliased_name
);
7542 public function with_modifiers(EditableSyntax
$modifiers): TraitUseAliasItem
{
7543 return new TraitUseAliasItem(
7544 $this->_aliasing_name
,
7547 $this->_aliased_name
);
7549 public function with_aliased_name(EditableSyntax
$aliased_name): TraitUseAliasItem
{
7550 return new TraitUseAliasItem(
7551 $this->_aliasing_name
,
7557 public function rewrite(
7559 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
7560 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
7561 $new_parents = $parents ??
[];
7562 array_push($new_parents, $this);
7563 $aliasing_name = $this->aliasing_name()->rewrite($rewriter, $new_parents);
7564 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
7565 $modifiers = $this->modifiers()->rewrite($rewriter, $new_parents);
7566 $aliased_name = $this->aliased_name()->rewrite($rewriter, $new_parents);
7568 $aliasing_name === $this->aliasing_name() &&
7569 $keyword === $this->keyword() &&
7570 $modifiers === $this->modifiers() &&
7571 $aliased_name === $this->aliased_name()) {
7572 return $rewriter($this, $parents ??
[]);
7574 return $rewriter(new TraitUseAliasItem(
7578 $aliased_name), $parents ??
[]);
7582 public static function from_json(mixed $json, int $position, string $source) {
7583 $aliasing_name = EditableSyntax
::from_json(
7584 $json->trait_use_alias_item_aliasing_name
, $position, $source);
7585 $position +
= $aliasing_name->width();
7586 $keyword = EditableSyntax
::from_json(
7587 $json->trait_use_alias_item_keyword
, $position, $source);
7588 $position +
= $keyword->width();
7589 $modifiers = EditableSyntax
::from_json(
7590 $json->trait_use_alias_item_modifiers
, $position, $source);
7591 $position +
= $modifiers->width();
7592 $aliased_name = EditableSyntax
::from_json(
7593 $json->trait_use_alias_item_aliased_name
, $position, $source);
7594 $position +
= $aliased_name->width();
7595 return new TraitUseAliasItem(
7601 public function children(): Generator
<string, EditableSyntax
, void
> {
7602 yield
$this->_aliasing_name
;
7603 yield
$this->_keyword
;
7604 yield
$this->_modifiers
;
7605 yield
$this->_aliased_name
;
7609 final class TraitUseConflictResolution
extends EditableSyntax
{
7610 private EditableSyntax
$_keyword;
7611 private EditableSyntax
$_names;
7612 private EditableSyntax
$_left_brace;
7613 private EditableSyntax
$_clauses;
7614 private EditableSyntax
$_right_brace;
7615 public function __construct(
7616 EditableSyntax
$keyword,
7617 EditableSyntax
$names,
7618 EditableSyntax
$left_brace,
7619 EditableSyntax
$clauses,
7620 EditableSyntax
$right_brace) {
7621 parent
::__construct('trait_use_conflict_resolution');
7622 $this->_keyword
= $keyword;
7623 $this->_names
= $names;
7624 $this->_left_brace
= $left_brace;
7625 $this->_clauses
= $clauses;
7626 $this->_right_brace
= $right_brace;
7628 public function keyword(): EditableSyntax
{
7629 return $this->_keyword
;
7631 public function names(): EditableSyntax
{
7632 return $this->_names
;
7634 public function left_brace(): EditableSyntax
{
7635 return $this->_left_brace
;
7637 public function clauses(): EditableSyntax
{
7638 return $this->_clauses
;
7640 public function right_brace(): EditableSyntax
{
7641 return $this->_right_brace
;
7643 public function with_keyword(EditableSyntax
$keyword): TraitUseConflictResolution
{
7644 return new TraitUseConflictResolution(
7649 $this->_right_brace
);
7651 public function with_names(EditableSyntax
$names): TraitUseConflictResolution
{
7652 return new TraitUseConflictResolution(
7657 $this->_right_brace
);
7659 public function with_left_brace(EditableSyntax
$left_brace): TraitUseConflictResolution
{
7660 return new TraitUseConflictResolution(
7665 $this->_right_brace
);
7667 public function with_clauses(EditableSyntax
$clauses): TraitUseConflictResolution
{
7668 return new TraitUseConflictResolution(
7673 $this->_right_brace
);
7675 public function with_right_brace(EditableSyntax
$right_brace): TraitUseConflictResolution
{
7676 return new TraitUseConflictResolution(
7684 public function rewrite(
7686 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
7687 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
7688 $new_parents = $parents ??
[];
7689 array_push($new_parents, $this);
7690 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
7691 $names = $this->names()->rewrite($rewriter, $new_parents);
7692 $left_brace = $this->left_brace()->rewrite($rewriter, $new_parents);
7693 $clauses = $this->clauses()->rewrite($rewriter, $new_parents);
7694 $right_brace = $this->right_brace()->rewrite($rewriter, $new_parents);
7696 $keyword === $this->keyword() &&
7697 $names === $this->names() &&
7698 $left_brace === $this->left_brace() &&
7699 $clauses === $this->clauses() &&
7700 $right_brace === $this->right_brace()) {
7701 return $rewriter($this, $parents ??
[]);
7703 return $rewriter(new TraitUseConflictResolution(
7708 $right_brace), $parents ??
[]);
7712 public static function from_json(mixed $json, int $position, string $source) {
7713 $keyword = EditableSyntax
::from_json(
7714 $json->trait_use_conflict_resolution_keyword
, $position, $source);
7715 $position +
= $keyword->width();
7716 $names = EditableSyntax
::from_json(
7717 $json->trait_use_conflict_resolution_names
, $position, $source);
7718 $position +
= $names->width();
7719 $left_brace = EditableSyntax
::from_json(
7720 $json->trait_use_conflict_resolution_left_brace
, $position, $source);
7721 $position +
= $left_brace->width();
7722 $clauses = EditableSyntax
::from_json(
7723 $json->trait_use_conflict_resolution_clauses
, $position, $source);
7724 $position +
= $clauses->width();
7725 $right_brace = EditableSyntax
::from_json(
7726 $json->trait_use_conflict_resolution_right_brace
, $position, $source);
7727 $position +
= $right_brace->width();
7728 return new TraitUseConflictResolution(
7735 public function children(): Generator
<string, EditableSyntax
, void
> {
7736 yield
$this->_keyword
;
7737 yield
$this->_names
;
7738 yield
$this->_left_brace
;
7739 yield
$this->_clauses
;
7740 yield
$this->_right_brace
;
7744 final class TraitUse
extends EditableSyntax
{
7745 private EditableSyntax
$_keyword;
7746 private EditableSyntax
$_names;
7747 private EditableSyntax
$_semicolon;
7748 public function __construct(
7749 EditableSyntax
$keyword,
7750 EditableSyntax
$names,
7751 EditableSyntax
$semicolon) {
7752 parent
::__construct('trait_use');
7753 $this->_keyword
= $keyword;
7754 $this->_names
= $names;
7755 $this->_semicolon
= $semicolon;
7757 public function keyword(): EditableSyntax
{
7758 return $this->_keyword
;
7760 public function names(): EditableSyntax
{
7761 return $this->_names
;
7763 public function semicolon(): EditableSyntax
{
7764 return $this->_semicolon
;
7766 public function with_keyword(EditableSyntax
$keyword): TraitUse
{
7767 return new TraitUse(
7772 public function with_names(EditableSyntax
$names): TraitUse
{
7773 return new TraitUse(
7778 public function with_semicolon(EditableSyntax
$semicolon): TraitUse
{
7779 return new TraitUse(
7785 public function rewrite(
7787 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
7788 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
7789 $new_parents = $parents ??
[];
7790 array_push($new_parents, $this);
7791 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
7792 $names = $this->names()->rewrite($rewriter, $new_parents);
7793 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
7795 $keyword === $this->keyword() &&
7796 $names === $this->names() &&
7797 $semicolon === $this->semicolon()) {
7798 return $rewriter($this, $parents ??
[]);
7800 return $rewriter(new TraitUse(
7803 $semicolon), $parents ??
[]);
7807 public static function from_json(mixed $json, int $position, string $source) {
7808 $keyword = EditableSyntax
::from_json(
7809 $json->trait_use_keyword
, $position, $source);
7810 $position +
= $keyword->width();
7811 $names = EditableSyntax
::from_json(
7812 $json->trait_use_names
, $position, $source);
7813 $position +
= $names->width();
7814 $semicolon = EditableSyntax
::from_json(
7815 $json->trait_use_semicolon
, $position, $source);
7816 $position +
= $semicolon->width();
7817 return new TraitUse(
7822 public function children(): Generator
<string, EditableSyntax
, void
> {
7823 yield
$this->_keyword
;
7824 yield
$this->_names
;
7825 yield
$this->_semicolon
;
7829 final class RequireClause
extends EditableSyntax
{
7830 private EditableSyntax
$_keyword;
7831 private EditableSyntax
$_kind;
7832 private EditableSyntax
$_name;
7833 private EditableSyntax
$_semicolon;
7834 public function __construct(
7835 EditableSyntax
$keyword,
7836 EditableSyntax
$kind,
7837 EditableSyntax
$name,
7838 EditableSyntax
$semicolon) {
7839 parent
::__construct('require_clause');
7840 $this->_keyword
= $keyword;
7841 $this->_kind
= $kind;
7842 $this->_name
= $name;
7843 $this->_semicolon
= $semicolon;
7845 public function keyword(): EditableSyntax
{
7846 return $this->_keyword
;
7848 public function kind(): EditableSyntax
{
7849 return $this->_kind
;
7851 public function name(): EditableSyntax
{
7852 return $this->_name
;
7854 public function semicolon(): EditableSyntax
{
7855 return $this->_semicolon
;
7857 public function with_keyword(EditableSyntax
$keyword): RequireClause
{
7858 return new RequireClause(
7864 public function with_kind(EditableSyntax
$kind): RequireClause
{
7865 return new RequireClause(
7871 public function with_name(EditableSyntax
$name): RequireClause
{
7872 return new RequireClause(
7878 public function with_semicolon(EditableSyntax
$semicolon): RequireClause
{
7879 return new RequireClause(
7886 public function rewrite(
7888 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
7889 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
7890 $new_parents = $parents ??
[];
7891 array_push($new_parents, $this);
7892 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
7893 $kind = $this->kind()->rewrite($rewriter, $new_parents);
7894 $name = $this->name()->rewrite($rewriter, $new_parents);
7895 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
7897 $keyword === $this->keyword() &&
7898 $kind === $this->kind() &&
7899 $name === $this->name() &&
7900 $semicolon === $this->semicolon()) {
7901 return $rewriter($this, $parents ??
[]);
7903 return $rewriter(new RequireClause(
7907 $semicolon), $parents ??
[]);
7911 public static function from_json(mixed $json, int $position, string $source) {
7912 $keyword = EditableSyntax
::from_json(
7913 $json->require_keyword
, $position, $source);
7914 $position +
= $keyword->width();
7915 $kind = EditableSyntax
::from_json(
7916 $json->require_kind
, $position, $source);
7917 $position +
= $kind->width();
7918 $name = EditableSyntax
::from_json(
7919 $json->require_name
, $position, $source);
7920 $position +
= $name->width();
7921 $semicolon = EditableSyntax
::from_json(
7922 $json->require_semicolon
, $position, $source);
7923 $position +
= $semicolon->width();
7924 return new RequireClause(
7930 public function children(): Generator
<string, EditableSyntax
, void
> {
7931 yield
$this->_keyword
;
7934 yield
$this->_semicolon
;
7938 final class ConstDeclaration
extends EditableSyntax
{
7939 private EditableSyntax
$_abstract;
7940 private EditableSyntax
$_keyword;
7941 private EditableSyntax
$_type_specifier;
7942 private EditableSyntax
$_declarators;
7943 private EditableSyntax
$_semicolon;
7944 public function __construct(
7945 EditableSyntax
$abstract,
7946 EditableSyntax
$keyword,
7947 EditableSyntax
$type_specifier,
7948 EditableSyntax
$declarators,
7949 EditableSyntax
$semicolon) {
7950 parent
::__construct('const_declaration');
7951 $this->_abstract
= $abstract;
7952 $this->_keyword
= $keyword;
7953 $this->_type_specifier
= $type_specifier;
7954 $this->_declarators
= $declarators;
7955 $this->_semicolon
= $semicolon;
7957 public function abstract(): EditableSyntax
{
7958 return $this->_abstract
;
7960 public function keyword(): EditableSyntax
{
7961 return $this->_keyword
;
7963 public function type_specifier(): EditableSyntax
{
7964 return $this->_type_specifier
;
7966 public function declarators(): EditableSyntax
{
7967 return $this->_declarators
;
7969 public function semicolon(): EditableSyntax
{
7970 return $this->_semicolon
;
7972 public function with_abstract(EditableSyntax
$abstract): ConstDeclaration
{
7973 return new ConstDeclaration(
7976 $this->_type_specifier
,
7977 $this->_declarators
,
7980 public function with_keyword(EditableSyntax
$keyword): ConstDeclaration
{
7981 return new ConstDeclaration(
7984 $this->_type_specifier
,
7985 $this->_declarators
,
7988 public function with_type_specifier(EditableSyntax
$type_specifier): ConstDeclaration
{
7989 return new ConstDeclaration(
7993 $this->_declarators
,
7996 public function with_declarators(EditableSyntax
$declarators): ConstDeclaration
{
7997 return new ConstDeclaration(
8000 $this->_type_specifier
,
8004 public function with_semicolon(EditableSyntax
$semicolon): ConstDeclaration
{
8005 return new ConstDeclaration(
8008 $this->_type_specifier
,
8009 $this->_declarators
,
8013 public function rewrite(
8015 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
8016 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
8017 $new_parents = $parents ??
[];
8018 array_push($new_parents, $this);
8019 $abstract = $this->abstract()->rewrite($rewriter, $new_parents);
8020 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
8021 $type_specifier = $this->type_specifier()->rewrite($rewriter, $new_parents);
8022 $declarators = $this->declarators()->rewrite($rewriter, $new_parents);
8023 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
8025 $abstract === $this->abstract() &&
8026 $keyword === $this->keyword() &&
8027 $type_specifier === $this->type_specifier() &&
8028 $declarators === $this->declarators() &&
8029 $semicolon === $this->semicolon()) {
8030 return $rewriter($this, $parents ??
[]);
8032 return $rewriter(new ConstDeclaration(
8037 $semicolon), $parents ??
[]);
8041 public static function from_json(mixed $json, int $position, string $source) {
8042 $abstract = EditableSyntax
::from_json(
8043 $json->const_abstract
, $position, $source);
8044 $position +
= $abstract->width();
8045 $keyword = EditableSyntax
::from_json(
8046 $json->const_keyword
, $position, $source);
8047 $position +
= $keyword->width();
8048 $type_specifier = EditableSyntax
::from_json(
8049 $json->const_type_specifier
, $position, $source);
8050 $position +
= $type_specifier->width();
8051 $declarators = EditableSyntax
::from_json(
8052 $json->const_declarators
, $position, $source);
8053 $position +
= $declarators->width();
8054 $semicolon = EditableSyntax
::from_json(
8055 $json->const_semicolon
, $position, $source);
8056 $position +
= $semicolon->width();
8057 return new ConstDeclaration(
8064 public function children(): Generator
<string, EditableSyntax
, void
> {
8065 yield
$this->_abstract
;
8066 yield
$this->_keyword
;
8067 yield
$this->_type_specifier
;
8068 yield
$this->_declarators
;
8069 yield
$this->_semicolon
;
8073 final class ConstantDeclarator
extends EditableSyntax
{
8074 private EditableSyntax
$_name;
8075 private EditableSyntax
$_initializer;
8076 public function __construct(
8077 EditableSyntax
$name,
8078 EditableSyntax
$initializer) {
8079 parent
::__construct('constant_declarator');
8080 $this->_name
= $name;
8081 $this->_initializer
= $initializer;
8083 public function name(): EditableSyntax
{
8084 return $this->_name
;
8086 public function initializer(): EditableSyntax
{
8087 return $this->_initializer
;
8089 public function with_name(EditableSyntax
$name): ConstantDeclarator
{
8090 return new ConstantDeclarator(
8092 $this->_initializer
);
8094 public function with_initializer(EditableSyntax
$initializer): ConstantDeclarator
{
8095 return new ConstantDeclarator(
8100 public function rewrite(
8102 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
8103 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
8104 $new_parents = $parents ??
[];
8105 array_push($new_parents, $this);
8106 $name = $this->name()->rewrite($rewriter, $new_parents);
8107 $initializer = $this->initializer()->rewrite($rewriter, $new_parents);
8109 $name === $this->name() &&
8110 $initializer === $this->initializer()) {
8111 return $rewriter($this, $parents ??
[]);
8113 return $rewriter(new ConstantDeclarator(
8115 $initializer), $parents ??
[]);
8119 public static function from_json(mixed $json, int $position, string $source) {
8120 $name = EditableSyntax
::from_json(
8121 $json->constant_declarator_name
, $position, $source);
8122 $position +
= $name->width();
8123 $initializer = EditableSyntax
::from_json(
8124 $json->constant_declarator_initializer
, $position, $source);
8125 $position +
= $initializer->width();
8126 return new ConstantDeclarator(
8130 public function children(): Generator
<string, EditableSyntax
, void
> {
8132 yield
$this->_initializer
;
8136 final class TypeConstDeclaration
extends EditableSyntax
{
8137 private EditableSyntax
$_abstract;
8138 private EditableSyntax
$_keyword;
8139 private EditableSyntax
$_type_keyword;
8140 private EditableSyntax
$_name;
8141 private EditableSyntax
$_type_parameters;
8142 private EditableSyntax
$_type_constraint;
8143 private EditableSyntax
$_equal;
8144 private EditableSyntax
$_type_specifier;
8145 private EditableSyntax
$_semicolon;
8146 public function __construct(
8147 EditableSyntax
$abstract,
8148 EditableSyntax
$keyword,
8149 EditableSyntax
$type_keyword,
8150 EditableSyntax
$name,
8151 EditableSyntax
$type_parameters,
8152 EditableSyntax
$type_constraint,
8153 EditableSyntax
$equal,
8154 EditableSyntax
$type_specifier,
8155 EditableSyntax
$semicolon) {
8156 parent
::__construct('type_const_declaration');
8157 $this->_abstract
= $abstract;
8158 $this->_keyword
= $keyword;
8159 $this->_type_keyword
= $type_keyword;
8160 $this->_name
= $name;
8161 $this->_type_parameters
= $type_parameters;
8162 $this->_type_constraint
= $type_constraint;
8163 $this->_equal
= $equal;
8164 $this->_type_specifier
= $type_specifier;
8165 $this->_semicolon
= $semicolon;
8167 public function abstract(): EditableSyntax
{
8168 return $this->_abstract
;
8170 public function keyword(): EditableSyntax
{
8171 return $this->_keyword
;
8173 public function type_keyword(): EditableSyntax
{
8174 return $this->_type_keyword
;
8176 public function name(): EditableSyntax
{
8177 return $this->_name
;
8179 public function type_parameters(): EditableSyntax
{
8180 return $this->_type_parameters
;
8182 public function type_constraint(): EditableSyntax
{
8183 return $this->_type_constraint
;
8185 public function equal(): EditableSyntax
{
8186 return $this->_equal
;
8188 public function type_specifier(): EditableSyntax
{
8189 return $this->_type_specifier
;
8191 public function semicolon(): EditableSyntax
{
8192 return $this->_semicolon
;
8194 public function with_abstract(EditableSyntax
$abstract): TypeConstDeclaration
{
8195 return new TypeConstDeclaration(
8198 $this->_type_keyword
,
8200 $this->_type_parameters
,
8201 $this->_type_constraint
,
8203 $this->_type_specifier
,
8206 public function with_keyword(EditableSyntax
$keyword): TypeConstDeclaration
{
8207 return new TypeConstDeclaration(
8210 $this->_type_keyword
,
8212 $this->_type_parameters
,
8213 $this->_type_constraint
,
8215 $this->_type_specifier
,
8218 public function with_type_keyword(EditableSyntax
$type_keyword): TypeConstDeclaration
{
8219 return new TypeConstDeclaration(
8224 $this->_type_parameters
,
8225 $this->_type_constraint
,
8227 $this->_type_specifier
,
8230 public function with_name(EditableSyntax
$name): TypeConstDeclaration
{
8231 return new TypeConstDeclaration(
8234 $this->_type_keyword
,
8236 $this->_type_parameters
,
8237 $this->_type_constraint
,
8239 $this->_type_specifier
,
8242 public function with_type_parameters(EditableSyntax
$type_parameters): TypeConstDeclaration
{
8243 return new TypeConstDeclaration(
8246 $this->_type_keyword
,
8249 $this->_type_constraint
,
8251 $this->_type_specifier
,
8254 public function with_type_constraint(EditableSyntax
$type_constraint): TypeConstDeclaration
{
8255 return new TypeConstDeclaration(
8258 $this->_type_keyword
,
8260 $this->_type_parameters
,
8263 $this->_type_specifier
,
8266 public function with_equal(EditableSyntax
$equal): TypeConstDeclaration
{
8267 return new TypeConstDeclaration(
8270 $this->_type_keyword
,
8272 $this->_type_parameters
,
8273 $this->_type_constraint
,
8275 $this->_type_specifier
,
8278 public function with_type_specifier(EditableSyntax
$type_specifier): TypeConstDeclaration
{
8279 return new TypeConstDeclaration(
8282 $this->_type_keyword
,
8284 $this->_type_parameters
,
8285 $this->_type_constraint
,
8290 public function with_semicolon(EditableSyntax
$semicolon): TypeConstDeclaration
{
8291 return new TypeConstDeclaration(
8294 $this->_type_keyword
,
8296 $this->_type_parameters
,
8297 $this->_type_constraint
,
8299 $this->_type_specifier
,
8303 public function rewrite(
8305 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
8306 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
8307 $new_parents = $parents ??
[];
8308 array_push($new_parents, $this);
8309 $abstract = $this->abstract()->rewrite($rewriter, $new_parents);
8310 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
8311 $type_keyword = $this->type_keyword()->rewrite($rewriter, $new_parents);
8312 $name = $this->name()->rewrite($rewriter, $new_parents);
8313 $type_parameters = $this->type_parameters()->rewrite($rewriter, $new_parents);
8314 $type_constraint = $this->type_constraint()->rewrite($rewriter, $new_parents);
8315 $equal = $this->equal()->rewrite($rewriter, $new_parents);
8316 $type_specifier = $this->type_specifier()->rewrite($rewriter, $new_parents);
8317 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
8319 $abstract === $this->abstract() &&
8320 $keyword === $this->keyword() &&
8321 $type_keyword === $this->type_keyword() &&
8322 $name === $this->name() &&
8323 $type_parameters === $this->type_parameters() &&
8324 $type_constraint === $this->type_constraint() &&
8325 $equal === $this->equal() &&
8326 $type_specifier === $this->type_specifier() &&
8327 $semicolon === $this->semicolon()) {
8328 return $rewriter($this, $parents ??
[]);
8330 return $rewriter(new TypeConstDeclaration(
8339 $semicolon), $parents ??
[]);
8343 public static function from_json(mixed $json, int $position, string $source) {
8344 $abstract = EditableSyntax
::from_json(
8345 $json->type_const_abstract
, $position, $source);
8346 $position +
= $abstract->width();
8347 $keyword = EditableSyntax
::from_json(
8348 $json->type_const_keyword
, $position, $source);
8349 $position +
= $keyword->width();
8350 $type_keyword = EditableSyntax
::from_json(
8351 $json->type_const_type_keyword
, $position, $source);
8352 $position +
= $type_keyword->width();
8353 $name = EditableSyntax
::from_json(
8354 $json->type_const_name
, $position, $source);
8355 $position +
= $name->width();
8356 $type_parameters = EditableSyntax
::from_json(
8357 $json->type_const_type_parameters
, $position, $source);
8358 $position +
= $type_parameters->width();
8359 $type_constraint = EditableSyntax
::from_json(
8360 $json->type_const_type_constraint
, $position, $source);
8361 $position +
= $type_constraint->width();
8362 $equal = EditableSyntax
::from_json(
8363 $json->type_const_equal
, $position, $source);
8364 $position +
= $equal->width();
8365 $type_specifier = EditableSyntax
::from_json(
8366 $json->type_const_type_specifier
, $position, $source);
8367 $position +
= $type_specifier->width();
8368 $semicolon = EditableSyntax
::from_json(
8369 $json->type_const_semicolon
, $position, $source);
8370 $position +
= $semicolon->width();
8371 return new TypeConstDeclaration(
8382 public function children(): Generator
<string, EditableSyntax
, void
> {
8383 yield
$this->_abstract
;
8384 yield
$this->_keyword
;
8385 yield
$this->_type_keyword
;
8387 yield
$this->_type_parameters
;
8388 yield
$this->_type_constraint
;
8389 yield
$this->_equal
;
8390 yield
$this->_type_specifier
;
8391 yield
$this->_semicolon
;
8395 final class DecoratedExpression
extends EditableSyntax
{
8396 private EditableSyntax
$_decorator;
8397 private EditableSyntax
$_expression;
8398 public function __construct(
8399 EditableSyntax
$decorator,
8400 EditableSyntax
$expression) {
8401 parent
::__construct('decorated_expression');
8402 $this->_decorator
= $decorator;
8403 $this->_expression
= $expression;
8405 public function decorator(): EditableSyntax
{
8406 return $this->_decorator
;
8408 public function expression(): EditableSyntax
{
8409 return $this->_expression
;
8411 public function with_decorator(EditableSyntax
$decorator): DecoratedExpression
{
8412 return new DecoratedExpression(
8414 $this->_expression
);
8416 public function with_expression(EditableSyntax
$expression): DecoratedExpression
{
8417 return new DecoratedExpression(
8422 public function rewrite(
8424 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
8425 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
8426 $new_parents = $parents ??
[];
8427 array_push($new_parents, $this);
8428 $decorator = $this->decorator()->rewrite($rewriter, $new_parents);
8429 $expression = $this->expression()->rewrite($rewriter, $new_parents);
8431 $decorator === $this->decorator() &&
8432 $expression === $this->expression()) {
8433 return $rewriter($this, $parents ??
[]);
8435 return $rewriter(new DecoratedExpression(
8437 $expression), $parents ??
[]);
8441 public static function from_json(mixed $json, int $position, string $source) {
8442 $decorator = EditableSyntax
::from_json(
8443 $json->decorated_expression_decorator
, $position, $source);
8444 $position +
= $decorator->width();
8445 $expression = EditableSyntax
::from_json(
8446 $json->decorated_expression_expression
, $position, $source);
8447 $position +
= $expression->width();
8448 return new DecoratedExpression(
8452 public function children(): Generator
<string, EditableSyntax
, void
> {
8453 yield
$this->_decorator
;
8454 yield
$this->_expression
;
8458 final class ParameterDeclaration
extends EditableSyntax
{
8459 private EditableSyntax
$_attribute;
8460 private EditableSyntax
$_visibility;
8461 private EditableSyntax
$_call_convention;
8462 private EditableSyntax
$_type;
8463 private EditableSyntax
$_name;
8464 private EditableSyntax
$_default_value;
8465 public function __construct(
8466 EditableSyntax
$attribute,
8467 EditableSyntax
$visibility,
8468 EditableSyntax
$call_convention,
8469 EditableSyntax
$type,
8470 EditableSyntax
$name,
8471 EditableSyntax
$default_value) {
8472 parent
::__construct('parameter_declaration');
8473 $this->_attribute
= $attribute;
8474 $this->_visibility
= $visibility;
8475 $this->_call_convention
= $call_convention;
8476 $this->_type
= $type;
8477 $this->_name
= $name;
8478 $this->_default_value
= $default_value;
8480 public function attribute(): EditableSyntax
{
8481 return $this->_attribute
;
8483 public function visibility(): EditableSyntax
{
8484 return $this->_visibility
;
8486 public function call_convention(): EditableSyntax
{
8487 return $this->_call_convention
;
8489 public function type(): EditableSyntax
{
8490 return $this->_type
;
8492 public function name(): EditableSyntax
{
8493 return $this->_name
;
8495 public function default_value(): EditableSyntax
{
8496 return $this->_default_value
;
8498 public function with_attribute(EditableSyntax
$attribute): ParameterDeclaration
{
8499 return new ParameterDeclaration(
8502 $this->_call_convention
,
8505 $this->_default_value
);
8507 public function with_visibility(EditableSyntax
$visibility): ParameterDeclaration
{
8508 return new ParameterDeclaration(
8511 $this->_call_convention
,
8514 $this->_default_value
);
8516 public function with_call_convention(EditableSyntax
$call_convention): ParameterDeclaration
{
8517 return new ParameterDeclaration(
8523 $this->_default_value
);
8525 public function with_type(EditableSyntax
$type): ParameterDeclaration
{
8526 return new ParameterDeclaration(
8529 $this->_call_convention
,
8532 $this->_default_value
);
8534 public function with_name(EditableSyntax
$name): ParameterDeclaration
{
8535 return new ParameterDeclaration(
8538 $this->_call_convention
,
8541 $this->_default_value
);
8543 public function with_default_value(EditableSyntax
$default_value): ParameterDeclaration
{
8544 return new ParameterDeclaration(
8547 $this->_call_convention
,
8553 public function rewrite(
8555 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
8556 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
8557 $new_parents = $parents ??
[];
8558 array_push($new_parents, $this);
8559 $attribute = $this->attribute()->rewrite($rewriter, $new_parents);
8560 $visibility = $this->visibility()->rewrite($rewriter, $new_parents);
8561 $call_convention = $this->call_convention()->rewrite($rewriter, $new_parents);
8562 $type = $this->type()->rewrite($rewriter, $new_parents);
8563 $name = $this->name()->rewrite($rewriter, $new_parents);
8564 $default_value = $this->default_value()->rewrite($rewriter, $new_parents);
8566 $attribute === $this->attribute() &&
8567 $visibility === $this->visibility() &&
8568 $call_convention === $this->call_convention() &&
8569 $type === $this->type() &&
8570 $name === $this->name() &&
8571 $default_value === $this->default_value()) {
8572 return $rewriter($this, $parents ??
[]);
8574 return $rewriter(new ParameterDeclaration(
8580 $default_value), $parents ??
[]);
8584 public static function from_json(mixed $json, int $position, string $source) {
8585 $attribute = EditableSyntax
::from_json(
8586 $json->parameter_attribute
, $position, $source);
8587 $position +
= $attribute->width();
8588 $visibility = EditableSyntax
::from_json(
8589 $json->parameter_visibility
, $position, $source);
8590 $position +
= $visibility->width();
8591 $call_convention = EditableSyntax
::from_json(
8592 $json->parameter_call_convention
, $position, $source);
8593 $position +
= $call_convention->width();
8594 $type = EditableSyntax
::from_json(
8595 $json->parameter_type
, $position, $source);
8596 $position +
= $type->width();
8597 $name = EditableSyntax
::from_json(
8598 $json->parameter_name
, $position, $source);
8599 $position +
= $name->width();
8600 $default_value = EditableSyntax
::from_json(
8601 $json->parameter_default_value
, $position, $source);
8602 $position +
= $default_value->width();
8603 return new ParameterDeclaration(
8611 public function children(): Generator
<string, EditableSyntax
, void
> {
8612 yield
$this->_attribute
;
8613 yield
$this->_visibility
;
8614 yield
$this->_call_convention
;
8617 yield
$this->_default_value
;
8621 final class VariadicParameter
extends EditableSyntax
{
8622 private EditableSyntax
$_call_convention;
8623 private EditableSyntax
$_type;
8624 private EditableSyntax
$_ellipsis;
8625 public function __construct(
8626 EditableSyntax
$call_convention,
8627 EditableSyntax
$type,
8628 EditableSyntax
$ellipsis) {
8629 parent
::__construct('variadic_parameter');
8630 $this->_call_convention
= $call_convention;
8631 $this->_type
= $type;
8632 $this->_ellipsis
= $ellipsis;
8634 public function call_convention(): EditableSyntax
{
8635 return $this->_call_convention
;
8637 public function type(): EditableSyntax
{
8638 return $this->_type
;
8640 public function ellipsis(): EditableSyntax
{
8641 return $this->_ellipsis
;
8643 public function with_call_convention(EditableSyntax
$call_convention): VariadicParameter
{
8644 return new VariadicParameter(
8649 public function with_type(EditableSyntax
$type): VariadicParameter
{
8650 return new VariadicParameter(
8651 $this->_call_convention
,
8655 public function with_ellipsis(EditableSyntax
$ellipsis): VariadicParameter
{
8656 return new VariadicParameter(
8657 $this->_call_convention
,
8662 public function rewrite(
8664 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
8665 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
8666 $new_parents = $parents ??
[];
8667 array_push($new_parents, $this);
8668 $call_convention = $this->call_convention()->rewrite($rewriter, $new_parents);
8669 $type = $this->type()->rewrite($rewriter, $new_parents);
8670 $ellipsis = $this->ellipsis()->rewrite($rewriter, $new_parents);
8672 $call_convention === $this->call_convention() &&
8673 $type === $this->type() &&
8674 $ellipsis === $this->ellipsis()) {
8675 return $rewriter($this, $parents ??
[]);
8677 return $rewriter(new VariadicParameter(
8680 $ellipsis), $parents ??
[]);
8684 public static function from_json(mixed $json, int $position, string $source) {
8685 $call_convention = EditableSyntax
::from_json(
8686 $json->variadic_parameter_call_convention
, $position, $source);
8687 $position +
= $call_convention->width();
8688 $type = EditableSyntax
::from_json(
8689 $json->variadic_parameter_type
, $position, $source);
8690 $position +
= $type->width();
8691 $ellipsis = EditableSyntax
::from_json(
8692 $json->variadic_parameter_ellipsis
, $position, $source);
8693 $position +
= $ellipsis->width();
8694 return new VariadicParameter(
8699 public function children(): Generator
<string, EditableSyntax
, void
> {
8700 yield
$this->_call_convention
;
8702 yield
$this->_ellipsis
;
8706 final class AttributeSpecification
extends EditableSyntax
{
8707 private EditableSyntax
$_left_double_angle;
8708 private EditableSyntax
$_attributes;
8709 private EditableSyntax
$_right_double_angle;
8710 public function __construct(
8711 EditableSyntax
$left_double_angle,
8712 EditableSyntax
$attributes,
8713 EditableSyntax
$right_double_angle) {
8714 parent
::__construct('attribute_specification');
8715 $this->_left_double_angle
= $left_double_angle;
8716 $this->_attributes
= $attributes;
8717 $this->_right_double_angle
= $right_double_angle;
8719 public function left_double_angle(): EditableSyntax
{
8720 return $this->_left_double_angle
;
8722 public function attributes(): EditableSyntax
{
8723 return $this->_attributes
;
8725 public function right_double_angle(): EditableSyntax
{
8726 return $this->_right_double_angle
;
8728 public function with_left_double_angle(EditableSyntax
$left_double_angle): AttributeSpecification
{
8729 return new AttributeSpecification(
8732 $this->_right_double_angle
);
8734 public function with_attributes(EditableSyntax
$attributes): AttributeSpecification
{
8735 return new AttributeSpecification(
8736 $this->_left_double_angle
,
8738 $this->_right_double_angle
);
8740 public function with_right_double_angle(EditableSyntax
$right_double_angle): AttributeSpecification
{
8741 return new AttributeSpecification(
8742 $this->_left_double_angle
,
8744 $right_double_angle);
8747 public function rewrite(
8749 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
8750 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
8751 $new_parents = $parents ??
[];
8752 array_push($new_parents, $this);
8753 $left_double_angle = $this->left_double_angle()->rewrite($rewriter, $new_parents);
8754 $attributes = $this->attributes()->rewrite($rewriter, $new_parents);
8755 $right_double_angle = $this->right_double_angle()->rewrite($rewriter, $new_parents);
8757 $left_double_angle === $this->left_double_angle() &&
8758 $attributes === $this->attributes() &&
8759 $right_double_angle === $this->right_double_angle()) {
8760 return $rewriter($this, $parents ??
[]);
8762 return $rewriter(new AttributeSpecification(
8765 $right_double_angle), $parents ??
[]);
8769 public static function from_json(mixed $json, int $position, string $source) {
8770 $left_double_angle = EditableSyntax
::from_json(
8771 $json->attribute_specification_left_double_angle
, $position, $source);
8772 $position +
= $left_double_angle->width();
8773 $attributes = EditableSyntax
::from_json(
8774 $json->attribute_specification_attributes
, $position, $source);
8775 $position +
= $attributes->width();
8776 $right_double_angle = EditableSyntax
::from_json(
8777 $json->attribute_specification_right_double_angle
, $position, $source);
8778 $position +
= $right_double_angle->width();
8779 return new AttributeSpecification(
8782 $right_double_angle);
8784 public function children(): Generator
<string, EditableSyntax
, void
> {
8785 yield
$this->_left_double_angle
;
8786 yield
$this->_attributes
;
8787 yield
$this->_right_double_angle
;
8791 final class Attribute
extends EditableSyntax
{
8792 private EditableSyntax
$_name;
8793 private EditableSyntax
$_left_paren;
8794 private EditableSyntax
$_values;
8795 private EditableSyntax
$_right_paren;
8796 public function __construct(
8797 EditableSyntax
$name,
8798 EditableSyntax
$left_paren,
8799 EditableSyntax
$values,
8800 EditableSyntax
$right_paren) {
8801 parent
::__construct('attribute');
8802 $this->_name
= $name;
8803 $this->_left_paren
= $left_paren;
8804 $this->_values
= $values;
8805 $this->_right_paren
= $right_paren;
8807 public function name(): EditableSyntax
{
8808 return $this->_name
;
8810 public function left_paren(): EditableSyntax
{
8811 return $this->_left_paren
;
8813 public function values(): EditableSyntax
{
8814 return $this->_values
;
8816 public function right_paren(): EditableSyntax
{
8817 return $this->_right_paren
;
8819 public function with_name(EditableSyntax
$name): Attribute
{
8820 return new Attribute(
8824 $this->_right_paren
);
8826 public function with_left_paren(EditableSyntax
$left_paren): Attribute
{
8827 return new Attribute(
8831 $this->_right_paren
);
8833 public function with_values(EditableSyntax
$values): Attribute
{
8834 return new Attribute(
8838 $this->_right_paren
);
8840 public function with_right_paren(EditableSyntax
$right_paren): Attribute
{
8841 return new Attribute(
8848 public function rewrite(
8850 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
8851 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
8852 $new_parents = $parents ??
[];
8853 array_push($new_parents, $this);
8854 $name = $this->name()->rewrite($rewriter, $new_parents);
8855 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
8856 $values = $this->values()->rewrite($rewriter, $new_parents);
8857 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
8859 $name === $this->name() &&
8860 $left_paren === $this->left_paren() &&
8861 $values === $this->values() &&
8862 $right_paren === $this->right_paren()) {
8863 return $rewriter($this, $parents ??
[]);
8865 return $rewriter(new Attribute(
8869 $right_paren), $parents ??
[]);
8873 public static function from_json(mixed $json, int $position, string $source) {
8874 $name = EditableSyntax
::from_json(
8875 $json->attribute_name
, $position, $source);
8876 $position +
= $name->width();
8877 $left_paren = EditableSyntax
::from_json(
8878 $json->attribute_left_paren
, $position, $source);
8879 $position +
= $left_paren->width();
8880 $values = EditableSyntax
::from_json(
8881 $json->attribute_values
, $position, $source);
8882 $position +
= $values->width();
8883 $right_paren = EditableSyntax
::from_json(
8884 $json->attribute_right_paren
, $position, $source);
8885 $position +
= $right_paren->width();
8886 return new Attribute(
8892 public function children(): Generator
<string, EditableSyntax
, void
> {
8894 yield
$this->_left_paren
;
8895 yield
$this->_values
;
8896 yield
$this->_right_paren
;
8900 final class InclusionExpression
extends EditableSyntax
{
8901 private EditableSyntax
$_require;
8902 private EditableSyntax
$_filename;
8903 public function __construct(
8904 EditableSyntax
$require,
8905 EditableSyntax
$filename) {
8906 parent
::__construct('inclusion_expression');
8907 $this->_require
= $require;
8908 $this->_filename
= $filename;
8910 public function require(): EditableSyntax
{
8911 return $this->_require
;
8913 public function filename(): EditableSyntax
{
8914 return $this->_filename
;
8916 public function with_require(EditableSyntax
$require): InclusionExpression
{
8917 return new InclusionExpression(
8921 public function with_filename(EditableSyntax
$filename): InclusionExpression
{
8922 return new InclusionExpression(
8927 public function rewrite(
8929 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
8930 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
8931 $new_parents = $parents ??
[];
8932 array_push($new_parents, $this);
8933 $require = $this->require()->rewrite($rewriter, $new_parents);
8934 $filename = $this->filename()->rewrite($rewriter, $new_parents);
8936 $require === $this->require() &&
8937 $filename === $this->filename()) {
8938 return $rewriter($this, $parents ??
[]);
8940 return $rewriter(new InclusionExpression(
8942 $filename), $parents ??
[]);
8946 public static function from_json(mixed $json, int $position, string $source) {
8947 $require = EditableSyntax
::from_json(
8948 $json->inclusion_require
, $position, $source);
8949 $position +
= $require->width();
8950 $filename = EditableSyntax
::from_json(
8951 $json->inclusion_filename
, $position, $source);
8952 $position +
= $filename->width();
8953 return new InclusionExpression(
8957 public function children(): Generator
<string, EditableSyntax
, void
> {
8958 yield
$this->_require
;
8959 yield
$this->_filename
;
8963 final class InclusionDirective
extends EditableSyntax
{
8964 private EditableSyntax
$_expression;
8965 private EditableSyntax
$_semicolon;
8966 public function __construct(
8967 EditableSyntax
$expression,
8968 EditableSyntax
$semicolon) {
8969 parent
::__construct('inclusion_directive');
8970 $this->_expression
= $expression;
8971 $this->_semicolon
= $semicolon;
8973 public function expression(): EditableSyntax
{
8974 return $this->_expression
;
8976 public function semicolon(): EditableSyntax
{
8977 return $this->_semicolon
;
8979 public function with_expression(EditableSyntax
$expression): InclusionDirective
{
8980 return new InclusionDirective(
8984 public function with_semicolon(EditableSyntax
$semicolon): InclusionDirective
{
8985 return new InclusionDirective(
8990 public function rewrite(
8992 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
8993 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
8994 $new_parents = $parents ??
[];
8995 array_push($new_parents, $this);
8996 $expression = $this->expression()->rewrite($rewriter, $new_parents);
8997 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
8999 $expression === $this->expression() &&
9000 $semicolon === $this->semicolon()) {
9001 return $rewriter($this, $parents ??
[]);
9003 return $rewriter(new InclusionDirective(
9005 $semicolon), $parents ??
[]);
9009 public static function from_json(mixed $json, int $position, string $source) {
9010 $expression = EditableSyntax
::from_json(
9011 $json->inclusion_expression
, $position, $source);
9012 $position +
= $expression->width();
9013 $semicolon = EditableSyntax
::from_json(
9014 $json->inclusion_semicolon
, $position, $source);
9015 $position +
= $semicolon->width();
9016 return new InclusionDirective(
9020 public function children(): Generator
<string, EditableSyntax
, void
> {
9021 yield
$this->_expression
;
9022 yield
$this->_semicolon
;
9026 final class CompoundStatement
extends EditableSyntax
{
9027 private EditableSyntax
$_left_brace;
9028 private EditableSyntax
$_statements;
9029 private EditableSyntax
$_right_brace;
9030 public function __construct(
9031 EditableSyntax
$left_brace,
9032 EditableSyntax
$statements,
9033 EditableSyntax
$right_brace) {
9034 parent
::__construct('compound_statement');
9035 $this->_left_brace
= $left_brace;
9036 $this->_statements
= $statements;
9037 $this->_right_brace
= $right_brace;
9039 public function left_brace(): EditableSyntax
{
9040 return $this->_left_brace
;
9042 public function statements(): EditableSyntax
{
9043 return $this->_statements
;
9045 public function right_brace(): EditableSyntax
{
9046 return $this->_right_brace
;
9048 public function with_left_brace(EditableSyntax
$left_brace): CompoundStatement
{
9049 return new CompoundStatement(
9052 $this->_right_brace
);
9054 public function with_statements(EditableSyntax
$statements): CompoundStatement
{
9055 return new CompoundStatement(
9058 $this->_right_brace
);
9060 public function with_right_brace(EditableSyntax
$right_brace): CompoundStatement
{
9061 return new CompoundStatement(
9067 public function rewrite(
9069 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
9070 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
9071 $new_parents = $parents ??
[];
9072 array_push($new_parents, $this);
9073 $left_brace = $this->left_brace()->rewrite($rewriter, $new_parents);
9074 $statements = $this->statements()->rewrite($rewriter, $new_parents);
9075 $right_brace = $this->right_brace()->rewrite($rewriter, $new_parents);
9077 $left_brace === $this->left_brace() &&
9078 $statements === $this->statements() &&
9079 $right_brace === $this->right_brace()) {
9080 return $rewriter($this, $parents ??
[]);
9082 return $rewriter(new CompoundStatement(
9085 $right_brace), $parents ??
[]);
9089 public static function from_json(mixed $json, int $position, string $source) {
9090 $left_brace = EditableSyntax
::from_json(
9091 $json->compound_left_brace
, $position, $source);
9092 $position +
= $left_brace->width();
9093 $statements = EditableSyntax
::from_json(
9094 $json->compound_statements
, $position, $source);
9095 $position +
= $statements->width();
9096 $right_brace = EditableSyntax
::from_json(
9097 $json->compound_right_brace
, $position, $source);
9098 $position +
= $right_brace->width();
9099 return new CompoundStatement(
9104 public function children(): Generator
<string, EditableSyntax
, void
> {
9105 yield
$this->_left_brace
;
9106 yield
$this->_statements
;
9107 yield
$this->_right_brace
;
9111 final class ExpressionStatement
extends EditableSyntax
{
9112 private EditableSyntax
$_expression;
9113 private EditableSyntax
$_semicolon;
9114 public function __construct(
9115 EditableSyntax
$expression,
9116 EditableSyntax
$semicolon) {
9117 parent
::__construct('expression_statement');
9118 $this->_expression
= $expression;
9119 $this->_semicolon
= $semicolon;
9121 public function expression(): EditableSyntax
{
9122 return $this->_expression
;
9124 public function semicolon(): EditableSyntax
{
9125 return $this->_semicolon
;
9127 public function with_expression(EditableSyntax
$expression): ExpressionStatement
{
9128 return new ExpressionStatement(
9132 public function with_semicolon(EditableSyntax
$semicolon): ExpressionStatement
{
9133 return new ExpressionStatement(
9138 public function rewrite(
9140 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
9141 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
9142 $new_parents = $parents ??
[];
9143 array_push($new_parents, $this);
9144 $expression = $this->expression()->rewrite($rewriter, $new_parents);
9145 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
9147 $expression === $this->expression() &&
9148 $semicolon === $this->semicolon()) {
9149 return $rewriter($this, $parents ??
[]);
9151 return $rewriter(new ExpressionStatement(
9153 $semicolon), $parents ??
[]);
9157 public static function from_json(mixed $json, int $position, string $source) {
9158 $expression = EditableSyntax
::from_json(
9159 $json->expression_statement_expression
, $position, $source);
9160 $position +
= $expression->width();
9161 $semicolon = EditableSyntax
::from_json(
9162 $json->expression_statement_semicolon
, $position, $source);
9163 $position +
= $semicolon->width();
9164 return new ExpressionStatement(
9168 public function children(): Generator
<string, EditableSyntax
, void
> {
9169 yield
$this->_expression
;
9170 yield
$this->_semicolon
;
9174 final class MarkupSection
extends EditableSyntax
{
9175 private EditableSyntax
$_prefix;
9176 private EditableSyntax
$_text;
9177 private EditableSyntax
$_suffix;
9178 private EditableSyntax
$_expression;
9179 public function __construct(
9180 EditableSyntax
$prefix,
9181 EditableSyntax
$text,
9182 EditableSyntax
$suffix,
9183 EditableSyntax
$expression) {
9184 parent
::__construct('markup_section');
9185 $this->_prefix
= $prefix;
9186 $this->_text
= $text;
9187 $this->_suffix
= $suffix;
9188 $this->_expression
= $expression;
9190 public function prefix(): EditableSyntax
{
9191 return $this->_prefix
;
9193 public function text(): EditableSyntax
{
9194 return $this->_text
;
9196 public function suffix(): EditableSyntax
{
9197 return $this->_suffix
;
9199 public function expression(): EditableSyntax
{
9200 return $this->_expression
;
9202 public function with_prefix(EditableSyntax
$prefix): MarkupSection
{
9203 return new MarkupSection(
9207 $this->_expression
);
9209 public function with_text(EditableSyntax
$text): MarkupSection
{
9210 return new MarkupSection(
9214 $this->_expression
);
9216 public function with_suffix(EditableSyntax
$suffix): MarkupSection
{
9217 return new MarkupSection(
9221 $this->_expression
);
9223 public function with_expression(EditableSyntax
$expression): MarkupSection
{
9224 return new MarkupSection(
9231 public function rewrite(
9233 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
9234 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
9235 $new_parents = $parents ??
[];
9236 array_push($new_parents, $this);
9237 $prefix = $this->prefix()->rewrite($rewriter, $new_parents);
9238 $text = $this->text()->rewrite($rewriter, $new_parents);
9239 $suffix = $this->suffix()->rewrite($rewriter, $new_parents);
9240 $expression = $this->expression()->rewrite($rewriter, $new_parents);
9242 $prefix === $this->prefix() &&
9243 $text === $this->text() &&
9244 $suffix === $this->suffix() &&
9245 $expression === $this->expression()) {
9246 return $rewriter($this, $parents ??
[]);
9248 return $rewriter(new MarkupSection(
9252 $expression), $parents ??
[]);
9256 public static function from_json(mixed $json, int $position, string $source) {
9257 $prefix = EditableSyntax
::from_json(
9258 $json->markup_prefix
, $position, $source);
9259 $position +
= $prefix->width();
9260 $text = EditableSyntax
::from_json(
9261 $json->markup_text
, $position, $source);
9262 $position +
= $text->width();
9263 $suffix = EditableSyntax
::from_json(
9264 $json->markup_suffix
, $position, $source);
9265 $position +
= $suffix->width();
9266 $expression = EditableSyntax
::from_json(
9267 $json->markup_expression
, $position, $source);
9268 $position +
= $expression->width();
9269 return new MarkupSection(
9275 public function children(): Generator
<string, EditableSyntax
, void
> {
9276 yield
$this->_prefix
;
9278 yield
$this->_suffix
;
9279 yield
$this->_expression
;
9283 final class MarkupSuffix
extends EditableSyntax
{
9284 private EditableSyntax
$_less_than_question;
9285 private EditableSyntax
$_name;
9286 public function __construct(
9287 EditableSyntax
$less_than_question,
9288 EditableSyntax
$name) {
9289 parent
::__construct('markup_suffix');
9290 $this->_less_than_question
= $less_than_question;
9291 $this->_name
= $name;
9293 public function less_than_question(): EditableSyntax
{
9294 return $this->_less_than_question
;
9296 public function name(): EditableSyntax
{
9297 return $this->_name
;
9299 public function with_less_than_question(EditableSyntax
$less_than_question): MarkupSuffix
{
9300 return new MarkupSuffix(
9301 $less_than_question,
9304 public function with_name(EditableSyntax
$name): MarkupSuffix
{
9305 return new MarkupSuffix(
9306 $this->_less_than_question
,
9310 public function rewrite(
9312 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
9313 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
9314 $new_parents = $parents ??
[];
9315 array_push($new_parents, $this);
9316 $less_than_question = $this->less_than_question()->rewrite($rewriter, $new_parents);
9317 $name = $this->name()->rewrite($rewriter, $new_parents);
9319 $less_than_question === $this->less_than_question() &&
9320 $name === $this->name()) {
9321 return $rewriter($this, $parents ??
[]);
9323 return $rewriter(new MarkupSuffix(
9324 $less_than_question,
9325 $name), $parents ??
[]);
9329 public static function from_json(mixed $json, int $position, string $source) {
9330 $less_than_question = EditableSyntax
::from_json(
9331 $json->markup_suffix_less_than_question
, $position, $source);
9332 $position +
= $less_than_question->width();
9333 $name = EditableSyntax
::from_json(
9334 $json->markup_suffix_name
, $position, $source);
9335 $position +
= $name->width();
9336 return new MarkupSuffix(
9337 $less_than_question,
9340 public function children(): Generator
<string, EditableSyntax
, void
> {
9341 yield
$this->_less_than_question
;
9346 final class UnsetStatement
extends EditableSyntax
{
9347 private EditableSyntax
$_keyword;
9348 private EditableSyntax
$_left_paren;
9349 private EditableSyntax
$_variables;
9350 private EditableSyntax
$_right_paren;
9351 private EditableSyntax
$_semicolon;
9352 public function __construct(
9353 EditableSyntax
$keyword,
9354 EditableSyntax
$left_paren,
9355 EditableSyntax
$variables,
9356 EditableSyntax
$right_paren,
9357 EditableSyntax
$semicolon) {
9358 parent
::__construct('unset_statement');
9359 $this->_keyword
= $keyword;
9360 $this->_left_paren
= $left_paren;
9361 $this->_variables
= $variables;
9362 $this->_right_paren
= $right_paren;
9363 $this->_semicolon
= $semicolon;
9365 public function keyword(): EditableSyntax
{
9366 return $this->_keyword
;
9368 public function left_paren(): EditableSyntax
{
9369 return $this->_left_paren
;
9371 public function variables(): EditableSyntax
{
9372 return $this->_variables
;
9374 public function right_paren(): EditableSyntax
{
9375 return $this->_right_paren
;
9377 public function semicolon(): EditableSyntax
{
9378 return $this->_semicolon
;
9380 public function with_keyword(EditableSyntax
$keyword): UnsetStatement
{
9381 return new UnsetStatement(
9385 $this->_right_paren
,
9388 public function with_left_paren(EditableSyntax
$left_paren): UnsetStatement
{
9389 return new UnsetStatement(
9393 $this->_right_paren
,
9396 public function with_variables(EditableSyntax
$variables): UnsetStatement
{
9397 return new UnsetStatement(
9401 $this->_right_paren
,
9404 public function with_right_paren(EditableSyntax
$right_paren): UnsetStatement
{
9405 return new UnsetStatement(
9412 public function with_semicolon(EditableSyntax
$semicolon): UnsetStatement
{
9413 return new UnsetStatement(
9417 $this->_right_paren
,
9421 public function rewrite(
9423 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
9424 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
9425 $new_parents = $parents ??
[];
9426 array_push($new_parents, $this);
9427 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
9428 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
9429 $variables = $this->variables()->rewrite($rewriter, $new_parents);
9430 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
9431 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
9433 $keyword === $this->keyword() &&
9434 $left_paren === $this->left_paren() &&
9435 $variables === $this->variables() &&
9436 $right_paren === $this->right_paren() &&
9437 $semicolon === $this->semicolon()) {
9438 return $rewriter($this, $parents ??
[]);
9440 return $rewriter(new UnsetStatement(
9445 $semicolon), $parents ??
[]);
9449 public static function from_json(mixed $json, int $position, string $source) {
9450 $keyword = EditableSyntax
::from_json(
9451 $json->unset_keyword
, $position, $source);
9452 $position +
= $keyword->width();
9453 $left_paren = EditableSyntax
::from_json(
9454 $json->unset_left_paren
, $position, $source);
9455 $position +
= $left_paren->width();
9456 $variables = EditableSyntax
::from_json(
9457 $json->unset_variables
, $position, $source);
9458 $position +
= $variables->width();
9459 $right_paren = EditableSyntax
::from_json(
9460 $json->unset_right_paren
, $position, $source);
9461 $position +
= $right_paren->width();
9462 $semicolon = EditableSyntax
::from_json(
9463 $json->unset_semicolon
, $position, $source);
9464 $position +
= $semicolon->width();
9465 return new UnsetStatement(
9472 public function children(): Generator
<string, EditableSyntax
, void
> {
9473 yield
$this->_keyword
;
9474 yield
$this->_left_paren
;
9475 yield
$this->_variables
;
9476 yield
$this->_right_paren
;
9477 yield
$this->_semicolon
;
9481 final class UsingStatementBlockScoped
extends EditableSyntax
{
9482 private EditableSyntax
$_await_keyword;
9483 private EditableSyntax
$_using_keyword;
9484 private EditableSyntax
$_left_paren;
9485 private EditableSyntax
$_expressions;
9486 private EditableSyntax
$_right_paren;
9487 private EditableSyntax
$_body;
9488 public function __construct(
9489 EditableSyntax
$await_keyword,
9490 EditableSyntax
$using_keyword,
9491 EditableSyntax
$left_paren,
9492 EditableSyntax
$expressions,
9493 EditableSyntax
$right_paren,
9494 EditableSyntax
$body) {
9495 parent
::__construct('using_statement_block_scoped');
9496 $this->_await_keyword
= $await_keyword;
9497 $this->_using_keyword
= $using_keyword;
9498 $this->_left_paren
= $left_paren;
9499 $this->_expressions
= $expressions;
9500 $this->_right_paren
= $right_paren;
9501 $this->_body
= $body;
9503 public function await_keyword(): EditableSyntax
{
9504 return $this->_await_keyword
;
9506 public function using_keyword(): EditableSyntax
{
9507 return $this->_using_keyword
;
9509 public function left_paren(): EditableSyntax
{
9510 return $this->_left_paren
;
9512 public function expressions(): EditableSyntax
{
9513 return $this->_expressions
;
9515 public function right_paren(): EditableSyntax
{
9516 return $this->_right_paren
;
9518 public function body(): EditableSyntax
{
9519 return $this->_body
;
9521 public function with_await_keyword(EditableSyntax
$await_keyword): UsingStatementBlockScoped
{
9522 return new UsingStatementBlockScoped(
9524 $this->_using_keyword
,
9526 $this->_expressions
,
9527 $this->_right_paren
,
9530 public function with_using_keyword(EditableSyntax
$using_keyword): UsingStatementBlockScoped
{
9531 return new UsingStatementBlockScoped(
9532 $this->_await_keyword
,
9535 $this->_expressions
,
9536 $this->_right_paren
,
9539 public function with_left_paren(EditableSyntax
$left_paren): UsingStatementBlockScoped
{
9540 return new UsingStatementBlockScoped(
9541 $this->_await_keyword
,
9542 $this->_using_keyword
,
9544 $this->_expressions
,
9545 $this->_right_paren
,
9548 public function with_expressions(EditableSyntax
$expressions): UsingStatementBlockScoped
{
9549 return new UsingStatementBlockScoped(
9550 $this->_await_keyword
,
9551 $this->_using_keyword
,
9554 $this->_right_paren
,
9557 public function with_right_paren(EditableSyntax
$right_paren): UsingStatementBlockScoped
{
9558 return new UsingStatementBlockScoped(
9559 $this->_await_keyword
,
9560 $this->_using_keyword
,
9562 $this->_expressions
,
9566 public function with_body(EditableSyntax
$body): UsingStatementBlockScoped
{
9567 return new UsingStatementBlockScoped(
9568 $this->_await_keyword
,
9569 $this->_using_keyword
,
9571 $this->_expressions
,
9572 $this->_right_paren
,
9576 public function rewrite(
9578 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
9579 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
9580 $new_parents = $parents ??
[];
9581 array_push($new_parents, $this);
9582 $await_keyword = $this->await_keyword()->rewrite($rewriter, $new_parents);
9583 $using_keyword = $this->using_keyword()->rewrite($rewriter, $new_parents);
9584 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
9585 $expressions = $this->expressions()->rewrite($rewriter, $new_parents);
9586 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
9587 $body = $this->body()->rewrite($rewriter, $new_parents);
9589 $await_keyword === $this->await_keyword() &&
9590 $using_keyword === $this->using_keyword() &&
9591 $left_paren === $this->left_paren() &&
9592 $expressions === $this->expressions() &&
9593 $right_paren === $this->right_paren() &&
9594 $body === $this->body()) {
9595 return $rewriter($this, $parents ??
[]);
9597 return $rewriter(new UsingStatementBlockScoped(
9603 $body), $parents ??
[]);
9607 public static function from_json(mixed $json, int $position, string $source) {
9608 $await_keyword = EditableSyntax
::from_json(
9609 $json->using_block_await_keyword
, $position, $source);
9610 $position +
= $await_keyword->width();
9611 $using_keyword = EditableSyntax
::from_json(
9612 $json->using_block_using_keyword
, $position, $source);
9613 $position +
= $using_keyword->width();
9614 $left_paren = EditableSyntax
::from_json(
9615 $json->using_block_left_paren
, $position, $source);
9616 $position +
= $left_paren->width();
9617 $expressions = EditableSyntax
::from_json(
9618 $json->using_block_expressions
, $position, $source);
9619 $position +
= $expressions->width();
9620 $right_paren = EditableSyntax
::from_json(
9621 $json->using_block_right_paren
, $position, $source);
9622 $position +
= $right_paren->width();
9623 $body = EditableSyntax
::from_json(
9624 $json->using_block_body
, $position, $source);
9625 $position +
= $body->width();
9626 return new UsingStatementBlockScoped(
9634 public function children(): Generator
<string, EditableSyntax
, void
> {
9635 yield
$this->_await_keyword
;
9636 yield
$this->_using_keyword
;
9637 yield
$this->_left_paren
;
9638 yield
$this->_expressions
;
9639 yield
$this->_right_paren
;
9644 final class UsingStatementFunctionScoped
extends EditableSyntax
{
9645 private EditableSyntax
$_await_keyword;
9646 private EditableSyntax
$_using_keyword;
9647 private EditableSyntax
$_expression;
9648 private EditableSyntax
$_semicolon;
9649 public function __construct(
9650 EditableSyntax
$await_keyword,
9651 EditableSyntax
$using_keyword,
9652 EditableSyntax
$expression,
9653 EditableSyntax
$semicolon) {
9654 parent
::__construct('using_statement_function_scoped');
9655 $this->_await_keyword
= $await_keyword;
9656 $this->_using_keyword
= $using_keyword;
9657 $this->_expression
= $expression;
9658 $this->_semicolon
= $semicolon;
9660 public function await_keyword(): EditableSyntax
{
9661 return $this->_await_keyword
;
9663 public function using_keyword(): EditableSyntax
{
9664 return $this->_using_keyword
;
9666 public function expression(): EditableSyntax
{
9667 return $this->_expression
;
9669 public function semicolon(): EditableSyntax
{
9670 return $this->_semicolon
;
9672 public function with_await_keyword(EditableSyntax
$await_keyword): UsingStatementFunctionScoped
{
9673 return new UsingStatementFunctionScoped(
9675 $this->_using_keyword
,
9679 public function with_using_keyword(EditableSyntax
$using_keyword): UsingStatementFunctionScoped
{
9680 return new UsingStatementFunctionScoped(
9681 $this->_await_keyword
,
9686 public function with_expression(EditableSyntax
$expression): UsingStatementFunctionScoped
{
9687 return new UsingStatementFunctionScoped(
9688 $this->_await_keyword
,
9689 $this->_using_keyword
,
9693 public function with_semicolon(EditableSyntax
$semicolon): UsingStatementFunctionScoped
{
9694 return new UsingStatementFunctionScoped(
9695 $this->_await_keyword
,
9696 $this->_using_keyword
,
9701 public function rewrite(
9703 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
9704 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
9705 $new_parents = $parents ??
[];
9706 array_push($new_parents, $this);
9707 $await_keyword = $this->await_keyword()->rewrite($rewriter, $new_parents);
9708 $using_keyword = $this->using_keyword()->rewrite($rewriter, $new_parents);
9709 $expression = $this->expression()->rewrite($rewriter, $new_parents);
9710 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
9712 $await_keyword === $this->await_keyword() &&
9713 $using_keyword === $this->using_keyword() &&
9714 $expression === $this->expression() &&
9715 $semicolon === $this->semicolon()) {
9716 return $rewriter($this, $parents ??
[]);
9718 return $rewriter(new UsingStatementFunctionScoped(
9722 $semicolon), $parents ??
[]);
9726 public static function from_json(mixed $json, int $position, string $source) {
9727 $await_keyword = EditableSyntax
::from_json(
9728 $json->using_function_await_keyword
, $position, $source);
9729 $position +
= $await_keyword->width();
9730 $using_keyword = EditableSyntax
::from_json(
9731 $json->using_function_using_keyword
, $position, $source);
9732 $position +
= $using_keyword->width();
9733 $expression = EditableSyntax
::from_json(
9734 $json->using_function_expression
, $position, $source);
9735 $position +
= $expression->width();
9736 $semicolon = EditableSyntax
::from_json(
9737 $json->using_function_semicolon
, $position, $source);
9738 $position +
= $semicolon->width();
9739 return new UsingStatementFunctionScoped(
9745 public function children(): Generator
<string, EditableSyntax
, void
> {
9746 yield
$this->_await_keyword
;
9747 yield
$this->_using_keyword
;
9748 yield
$this->_expression
;
9749 yield
$this->_semicolon
;
9753 final class DeclareDirectiveStatement
extends EditableSyntax
{
9754 private EditableSyntax
$_keyword;
9755 private EditableSyntax
$_left_paren;
9756 private EditableSyntax
$_expression;
9757 private EditableSyntax
$_right_paren;
9758 private EditableSyntax
$_semicolon;
9759 public function __construct(
9760 EditableSyntax
$keyword,
9761 EditableSyntax
$left_paren,
9762 EditableSyntax
$expression,
9763 EditableSyntax
$right_paren,
9764 EditableSyntax
$semicolon) {
9765 parent
::__construct('declare_directive_statement');
9766 $this->_keyword
= $keyword;
9767 $this->_left_paren
= $left_paren;
9768 $this->_expression
= $expression;
9769 $this->_right_paren
= $right_paren;
9770 $this->_semicolon
= $semicolon;
9772 public function keyword(): EditableSyntax
{
9773 return $this->_keyword
;
9775 public function left_paren(): EditableSyntax
{
9776 return $this->_left_paren
;
9778 public function expression(): EditableSyntax
{
9779 return $this->_expression
;
9781 public function right_paren(): EditableSyntax
{
9782 return $this->_right_paren
;
9784 public function semicolon(): EditableSyntax
{
9785 return $this->_semicolon
;
9787 public function with_keyword(EditableSyntax
$keyword): DeclareDirectiveStatement
{
9788 return new DeclareDirectiveStatement(
9792 $this->_right_paren
,
9795 public function with_left_paren(EditableSyntax
$left_paren): DeclareDirectiveStatement
{
9796 return new DeclareDirectiveStatement(
9800 $this->_right_paren
,
9803 public function with_expression(EditableSyntax
$expression): DeclareDirectiveStatement
{
9804 return new DeclareDirectiveStatement(
9808 $this->_right_paren
,
9811 public function with_right_paren(EditableSyntax
$right_paren): DeclareDirectiveStatement
{
9812 return new DeclareDirectiveStatement(
9819 public function with_semicolon(EditableSyntax
$semicolon): DeclareDirectiveStatement
{
9820 return new DeclareDirectiveStatement(
9824 $this->_right_paren
,
9828 public function rewrite(
9830 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
9831 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
9832 $new_parents = $parents ??
[];
9833 array_push($new_parents, $this);
9834 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
9835 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
9836 $expression = $this->expression()->rewrite($rewriter, $new_parents);
9837 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
9838 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
9840 $keyword === $this->keyword() &&
9841 $left_paren === $this->left_paren() &&
9842 $expression === $this->expression() &&
9843 $right_paren === $this->right_paren() &&
9844 $semicolon === $this->semicolon()) {
9845 return $rewriter($this, $parents ??
[]);
9847 return $rewriter(new DeclareDirectiveStatement(
9852 $semicolon), $parents ??
[]);
9856 public static function from_json(mixed $json, int $position, string $source) {
9857 $keyword = EditableSyntax
::from_json(
9858 $json->declare_directive_keyword
, $position, $source);
9859 $position +
= $keyword->width();
9860 $left_paren = EditableSyntax
::from_json(
9861 $json->declare_directive_left_paren
, $position, $source);
9862 $position +
= $left_paren->width();
9863 $expression = EditableSyntax
::from_json(
9864 $json->declare_directive_expression
, $position, $source);
9865 $position +
= $expression->width();
9866 $right_paren = EditableSyntax
::from_json(
9867 $json->declare_directive_right_paren
, $position, $source);
9868 $position +
= $right_paren->width();
9869 $semicolon = EditableSyntax
::from_json(
9870 $json->declare_directive_semicolon
, $position, $source);
9871 $position +
= $semicolon->width();
9872 return new DeclareDirectiveStatement(
9879 public function children(): Generator
<string, EditableSyntax
, void
> {
9880 yield
$this->_keyword
;
9881 yield
$this->_left_paren
;
9882 yield
$this->_expression
;
9883 yield
$this->_right_paren
;
9884 yield
$this->_semicolon
;
9888 final class DeclareBlockStatement
extends EditableSyntax
{
9889 private EditableSyntax
$_keyword;
9890 private EditableSyntax
$_left_paren;
9891 private EditableSyntax
$_expression;
9892 private EditableSyntax
$_right_paren;
9893 private EditableSyntax
$_body;
9894 public function __construct(
9895 EditableSyntax
$keyword,
9896 EditableSyntax
$left_paren,
9897 EditableSyntax
$expression,
9898 EditableSyntax
$right_paren,
9899 EditableSyntax
$body) {
9900 parent
::__construct('declare_block_statement');
9901 $this->_keyword
= $keyword;
9902 $this->_left_paren
= $left_paren;
9903 $this->_expression
= $expression;
9904 $this->_right_paren
= $right_paren;
9905 $this->_body
= $body;
9907 public function keyword(): EditableSyntax
{
9908 return $this->_keyword
;
9910 public function left_paren(): EditableSyntax
{
9911 return $this->_left_paren
;
9913 public function expression(): EditableSyntax
{
9914 return $this->_expression
;
9916 public function right_paren(): EditableSyntax
{
9917 return $this->_right_paren
;
9919 public function body(): EditableSyntax
{
9920 return $this->_body
;
9922 public function with_keyword(EditableSyntax
$keyword): DeclareBlockStatement
{
9923 return new DeclareBlockStatement(
9927 $this->_right_paren
,
9930 public function with_left_paren(EditableSyntax
$left_paren): DeclareBlockStatement
{
9931 return new DeclareBlockStatement(
9935 $this->_right_paren
,
9938 public function with_expression(EditableSyntax
$expression): DeclareBlockStatement
{
9939 return new DeclareBlockStatement(
9943 $this->_right_paren
,
9946 public function with_right_paren(EditableSyntax
$right_paren): DeclareBlockStatement
{
9947 return new DeclareBlockStatement(
9954 public function with_body(EditableSyntax
$body): DeclareBlockStatement
{
9955 return new DeclareBlockStatement(
9959 $this->_right_paren
,
9963 public function rewrite(
9965 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
9966 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
9967 $new_parents = $parents ??
[];
9968 array_push($new_parents, $this);
9969 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
9970 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
9971 $expression = $this->expression()->rewrite($rewriter, $new_parents);
9972 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
9973 $body = $this->body()->rewrite($rewriter, $new_parents);
9975 $keyword === $this->keyword() &&
9976 $left_paren === $this->left_paren() &&
9977 $expression === $this->expression() &&
9978 $right_paren === $this->right_paren() &&
9979 $body === $this->body()) {
9980 return $rewriter($this, $parents ??
[]);
9982 return $rewriter(new DeclareBlockStatement(
9987 $body), $parents ??
[]);
9991 public static function from_json(mixed $json, int $position, string $source) {
9992 $keyword = EditableSyntax
::from_json(
9993 $json->declare_block_keyword
, $position, $source);
9994 $position +
= $keyword->width();
9995 $left_paren = EditableSyntax
::from_json(
9996 $json->declare_block_left_paren
, $position, $source);
9997 $position +
= $left_paren->width();
9998 $expression = EditableSyntax
::from_json(
9999 $json->declare_block_expression
, $position, $source);
10000 $position +
= $expression->width();
10001 $right_paren = EditableSyntax
::from_json(
10002 $json->declare_block_right_paren
, $position, $source);
10003 $position +
= $right_paren->width();
10004 $body = EditableSyntax
::from_json(
10005 $json->declare_block_body
, $position, $source);
10006 $position +
= $body->width();
10007 return new DeclareBlockStatement(
10014 public function children(): Generator
<string, EditableSyntax
, void
> {
10015 yield
$this->_keyword
;
10016 yield
$this->_left_paren
;
10017 yield
$this->_expression
;
10018 yield
$this->_right_paren
;
10019 yield
$this->_body
;
10023 final class WhileStatement
extends EditableSyntax
{
10024 private EditableSyntax
$_keyword;
10025 private EditableSyntax
$_left_paren;
10026 private EditableSyntax
$_condition;
10027 private EditableSyntax
$_right_paren;
10028 private EditableSyntax
$_body;
10029 public function __construct(
10030 EditableSyntax
$keyword,
10031 EditableSyntax
$left_paren,
10032 EditableSyntax
$condition,
10033 EditableSyntax
$right_paren,
10034 EditableSyntax
$body) {
10035 parent
::__construct('while_statement');
10036 $this->_keyword
= $keyword;
10037 $this->_left_paren
= $left_paren;
10038 $this->_condition
= $condition;
10039 $this->_right_paren
= $right_paren;
10040 $this->_body
= $body;
10042 public function keyword(): EditableSyntax
{
10043 return $this->_keyword
;
10045 public function left_paren(): EditableSyntax
{
10046 return $this->_left_paren
;
10048 public function condition(): EditableSyntax
{
10049 return $this->_condition
;
10051 public function right_paren(): EditableSyntax
{
10052 return $this->_right_paren
;
10054 public function body(): EditableSyntax
{
10055 return $this->_body
;
10057 public function with_keyword(EditableSyntax
$keyword): WhileStatement
{
10058 return new WhileStatement(
10060 $this->_left_paren
,
10062 $this->_right_paren
,
10065 public function with_left_paren(EditableSyntax
$left_paren): WhileStatement
{
10066 return new WhileStatement(
10070 $this->_right_paren
,
10073 public function with_condition(EditableSyntax
$condition): WhileStatement
{
10074 return new WhileStatement(
10076 $this->_left_paren
,
10078 $this->_right_paren
,
10081 public function with_right_paren(EditableSyntax
$right_paren): WhileStatement
{
10082 return new WhileStatement(
10084 $this->_left_paren
,
10089 public function with_body(EditableSyntax
$body): WhileStatement
{
10090 return new WhileStatement(
10092 $this->_left_paren
,
10094 $this->_right_paren
,
10098 public function rewrite(
10100 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
10101 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
10102 $new_parents = $parents ??
[];
10103 array_push($new_parents, $this);
10104 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
10105 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
10106 $condition = $this->condition()->rewrite($rewriter, $new_parents);
10107 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
10108 $body = $this->body()->rewrite($rewriter, $new_parents);
10110 $keyword === $this->keyword() &&
10111 $left_paren === $this->left_paren() &&
10112 $condition === $this->condition() &&
10113 $right_paren === $this->right_paren() &&
10114 $body === $this->body()) {
10115 return $rewriter($this, $parents ??
[]);
10117 return $rewriter(new WhileStatement(
10122 $body), $parents ??
[]);
10126 public static function from_json(mixed $json, int $position, string $source) {
10127 $keyword = EditableSyntax
::from_json(
10128 $json->while_keyword
, $position, $source);
10129 $position +
= $keyword->width();
10130 $left_paren = EditableSyntax
::from_json(
10131 $json->while_left_paren
, $position, $source);
10132 $position +
= $left_paren->width();
10133 $condition = EditableSyntax
::from_json(
10134 $json->while_condition
, $position, $source);
10135 $position +
= $condition->width();
10136 $right_paren = EditableSyntax
::from_json(
10137 $json->while_right_paren
, $position, $source);
10138 $position +
= $right_paren->width();
10139 $body = EditableSyntax
::from_json(
10140 $json->while_body
, $position, $source);
10141 $position +
= $body->width();
10142 return new WhileStatement(
10149 public function children(): Generator
<string, EditableSyntax
, void
> {
10150 yield
$this->_keyword
;
10151 yield
$this->_left_paren
;
10152 yield
$this->_condition
;
10153 yield
$this->_right_paren
;
10154 yield
$this->_body
;
10158 final class IfStatement
extends EditableSyntax
{
10159 private EditableSyntax
$_keyword;
10160 private EditableSyntax
$_left_paren;
10161 private EditableSyntax
$_condition;
10162 private EditableSyntax
$_right_paren;
10163 private EditableSyntax
$_statement;
10164 private EditableSyntax
$_elseif_clauses;
10165 private EditableSyntax
$_else_clause;
10166 public function __construct(
10167 EditableSyntax
$keyword,
10168 EditableSyntax
$left_paren,
10169 EditableSyntax
$condition,
10170 EditableSyntax
$right_paren,
10171 EditableSyntax
$statement,
10172 EditableSyntax
$elseif_clauses,
10173 EditableSyntax
$else_clause) {
10174 parent
::__construct('if_statement');
10175 $this->_keyword
= $keyword;
10176 $this->_left_paren
= $left_paren;
10177 $this->_condition
= $condition;
10178 $this->_right_paren
= $right_paren;
10179 $this->_statement
= $statement;
10180 $this->_elseif_clauses
= $elseif_clauses;
10181 $this->_else_clause
= $else_clause;
10183 public function keyword(): EditableSyntax
{
10184 return $this->_keyword
;
10186 public function left_paren(): EditableSyntax
{
10187 return $this->_left_paren
;
10189 public function condition(): EditableSyntax
{
10190 return $this->_condition
;
10192 public function right_paren(): EditableSyntax
{
10193 return $this->_right_paren
;
10195 public function statement(): EditableSyntax
{
10196 return $this->_statement
;
10198 public function elseif_clauses(): EditableSyntax
{
10199 return $this->_elseif_clauses
;
10201 public function else_clause(): EditableSyntax
{
10202 return $this->_else_clause
;
10204 public function with_keyword(EditableSyntax
$keyword): IfStatement
{
10205 return new IfStatement(
10207 $this->_left_paren
,
10209 $this->_right_paren
,
10211 $this->_elseif_clauses
,
10212 $this->_else_clause
);
10214 public function with_left_paren(EditableSyntax
$left_paren): IfStatement
{
10215 return new IfStatement(
10219 $this->_right_paren
,
10221 $this->_elseif_clauses
,
10222 $this->_else_clause
);
10224 public function with_condition(EditableSyntax
$condition): IfStatement
{
10225 return new IfStatement(
10227 $this->_left_paren
,
10229 $this->_right_paren
,
10231 $this->_elseif_clauses
,
10232 $this->_else_clause
);
10234 public function with_right_paren(EditableSyntax
$right_paren): IfStatement
{
10235 return new IfStatement(
10237 $this->_left_paren
,
10241 $this->_elseif_clauses
,
10242 $this->_else_clause
);
10244 public function with_statement(EditableSyntax
$statement): IfStatement
{
10245 return new IfStatement(
10247 $this->_left_paren
,
10249 $this->_right_paren
,
10251 $this->_elseif_clauses
,
10252 $this->_else_clause
);
10254 public function with_elseif_clauses(EditableSyntax
$elseif_clauses): IfStatement
{
10255 return new IfStatement(
10257 $this->_left_paren
,
10259 $this->_right_paren
,
10262 $this->_else_clause
);
10264 public function with_else_clause(EditableSyntax
$else_clause): IfStatement
{
10265 return new IfStatement(
10267 $this->_left_paren
,
10269 $this->_right_paren
,
10271 $this->_elseif_clauses
,
10275 public function rewrite(
10277 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
10278 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
10279 $new_parents = $parents ??
[];
10280 array_push($new_parents, $this);
10281 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
10282 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
10283 $condition = $this->condition()->rewrite($rewriter, $new_parents);
10284 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
10285 $statement = $this->statement()->rewrite($rewriter, $new_parents);
10286 $elseif_clauses = $this->elseif_clauses()->rewrite($rewriter, $new_parents);
10287 $else_clause = $this->else_clause()->rewrite($rewriter, $new_parents);
10289 $keyword === $this->keyword() &&
10290 $left_paren === $this->left_paren() &&
10291 $condition === $this->condition() &&
10292 $right_paren === $this->right_paren() &&
10293 $statement === $this->statement() &&
10294 $elseif_clauses === $this->elseif_clauses() &&
10295 $else_clause === $this->else_clause()) {
10296 return $rewriter($this, $parents ??
[]);
10298 return $rewriter(new IfStatement(
10305 $else_clause), $parents ??
[]);
10309 public static function from_json(mixed $json, int $position, string $source) {
10310 $keyword = EditableSyntax
::from_json(
10311 $json->if_keyword
, $position, $source);
10312 $position +
= $keyword->width();
10313 $left_paren = EditableSyntax
::from_json(
10314 $json->if_left_paren
, $position, $source);
10315 $position +
= $left_paren->width();
10316 $condition = EditableSyntax
::from_json(
10317 $json->if_condition
, $position, $source);
10318 $position +
= $condition->width();
10319 $right_paren = EditableSyntax
::from_json(
10320 $json->if_right_paren
, $position, $source);
10321 $position +
= $right_paren->width();
10322 $statement = EditableSyntax
::from_json(
10323 $json->if_statement
, $position, $source);
10324 $position +
= $statement->width();
10325 $elseif_clauses = EditableSyntax
::from_json(
10326 $json->if_elseif_clauses
, $position, $source);
10327 $position +
= $elseif_clauses->width();
10328 $else_clause = EditableSyntax
::from_json(
10329 $json->if_else_clause
, $position, $source);
10330 $position +
= $else_clause->width();
10331 return new IfStatement(
10340 public function children(): Generator
<string, EditableSyntax
, void
> {
10341 yield
$this->_keyword
;
10342 yield
$this->_left_paren
;
10343 yield
$this->_condition
;
10344 yield
$this->_right_paren
;
10345 yield
$this->_statement
;
10346 yield
$this->_elseif_clauses
;
10347 yield
$this->_else_clause
;
10351 final class ElseifClause
extends EditableSyntax
{
10352 private EditableSyntax
$_keyword;
10353 private EditableSyntax
$_left_paren;
10354 private EditableSyntax
$_condition;
10355 private EditableSyntax
$_right_paren;
10356 private EditableSyntax
$_statement;
10357 public function __construct(
10358 EditableSyntax
$keyword,
10359 EditableSyntax
$left_paren,
10360 EditableSyntax
$condition,
10361 EditableSyntax
$right_paren,
10362 EditableSyntax
$statement) {
10363 parent
::__construct('elseif_clause');
10364 $this->_keyword
= $keyword;
10365 $this->_left_paren
= $left_paren;
10366 $this->_condition
= $condition;
10367 $this->_right_paren
= $right_paren;
10368 $this->_statement
= $statement;
10370 public function keyword(): EditableSyntax
{
10371 return $this->_keyword
;
10373 public function left_paren(): EditableSyntax
{
10374 return $this->_left_paren
;
10376 public function condition(): EditableSyntax
{
10377 return $this->_condition
;
10379 public function right_paren(): EditableSyntax
{
10380 return $this->_right_paren
;
10382 public function statement(): EditableSyntax
{
10383 return $this->_statement
;
10385 public function with_keyword(EditableSyntax
$keyword): ElseifClause
{
10386 return new ElseifClause(
10388 $this->_left_paren
,
10390 $this->_right_paren
,
10391 $this->_statement
);
10393 public function with_left_paren(EditableSyntax
$left_paren): ElseifClause
{
10394 return new ElseifClause(
10398 $this->_right_paren
,
10399 $this->_statement
);
10401 public function with_condition(EditableSyntax
$condition): ElseifClause
{
10402 return new ElseifClause(
10404 $this->_left_paren
,
10406 $this->_right_paren
,
10407 $this->_statement
);
10409 public function with_right_paren(EditableSyntax
$right_paren): ElseifClause
{
10410 return new ElseifClause(
10412 $this->_left_paren
,
10415 $this->_statement
);
10417 public function with_statement(EditableSyntax
$statement): ElseifClause
{
10418 return new ElseifClause(
10420 $this->_left_paren
,
10422 $this->_right_paren
,
10426 public function rewrite(
10428 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
10429 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
10430 $new_parents = $parents ??
[];
10431 array_push($new_parents, $this);
10432 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
10433 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
10434 $condition = $this->condition()->rewrite($rewriter, $new_parents);
10435 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
10436 $statement = $this->statement()->rewrite($rewriter, $new_parents);
10438 $keyword === $this->keyword() &&
10439 $left_paren === $this->left_paren() &&
10440 $condition === $this->condition() &&
10441 $right_paren === $this->right_paren() &&
10442 $statement === $this->statement()) {
10443 return $rewriter($this, $parents ??
[]);
10445 return $rewriter(new ElseifClause(
10450 $statement), $parents ??
[]);
10454 public static function from_json(mixed $json, int $position, string $source) {
10455 $keyword = EditableSyntax
::from_json(
10456 $json->elseif_keyword
, $position, $source);
10457 $position +
= $keyword->width();
10458 $left_paren = EditableSyntax
::from_json(
10459 $json->elseif_left_paren
, $position, $source);
10460 $position +
= $left_paren->width();
10461 $condition = EditableSyntax
::from_json(
10462 $json->elseif_condition
, $position, $source);
10463 $position +
= $condition->width();
10464 $right_paren = EditableSyntax
::from_json(
10465 $json->elseif_right_paren
, $position, $source);
10466 $position +
= $right_paren->width();
10467 $statement = EditableSyntax
::from_json(
10468 $json->elseif_statement
, $position, $source);
10469 $position +
= $statement->width();
10470 return new ElseifClause(
10477 public function children(): Generator
<string, EditableSyntax
, void
> {
10478 yield
$this->_keyword
;
10479 yield
$this->_left_paren
;
10480 yield
$this->_condition
;
10481 yield
$this->_right_paren
;
10482 yield
$this->_statement
;
10486 final class ElseClause
extends EditableSyntax
{
10487 private EditableSyntax
$_keyword;
10488 private EditableSyntax
$_statement;
10489 public function __construct(
10490 EditableSyntax
$keyword,
10491 EditableSyntax
$statement) {
10492 parent
::__construct('else_clause');
10493 $this->_keyword
= $keyword;
10494 $this->_statement
= $statement;
10496 public function keyword(): EditableSyntax
{
10497 return $this->_keyword
;
10499 public function statement(): EditableSyntax
{
10500 return $this->_statement
;
10502 public function with_keyword(EditableSyntax
$keyword): ElseClause
{
10503 return new ElseClause(
10505 $this->_statement
);
10507 public function with_statement(EditableSyntax
$statement): ElseClause
{
10508 return new ElseClause(
10513 public function rewrite(
10515 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
10516 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
10517 $new_parents = $parents ??
[];
10518 array_push($new_parents, $this);
10519 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
10520 $statement = $this->statement()->rewrite($rewriter, $new_parents);
10522 $keyword === $this->keyword() &&
10523 $statement === $this->statement()) {
10524 return $rewriter($this, $parents ??
[]);
10526 return $rewriter(new ElseClause(
10528 $statement), $parents ??
[]);
10532 public static function from_json(mixed $json, int $position, string $source) {
10533 $keyword = EditableSyntax
::from_json(
10534 $json->else_keyword
, $position, $source);
10535 $position +
= $keyword->width();
10536 $statement = EditableSyntax
::from_json(
10537 $json->else_statement
, $position, $source);
10538 $position +
= $statement->width();
10539 return new ElseClause(
10543 public function children(): Generator
<string, EditableSyntax
, void
> {
10544 yield
$this->_keyword
;
10545 yield
$this->_statement
;
10549 final class IfEndIfStatement
extends EditableSyntax
{
10550 private EditableSyntax
$_keyword;
10551 private EditableSyntax
$_left_paren;
10552 private EditableSyntax
$_condition;
10553 private EditableSyntax
$_right_paren;
10554 private EditableSyntax
$_colon;
10555 private EditableSyntax
$_statement;
10556 private EditableSyntax
$_elseif_colon_clauses;
10557 private EditableSyntax
$_else_colon_clause;
10558 private EditableSyntax
$_endif_keyword;
10559 private EditableSyntax
$_semicolon;
10560 public function __construct(
10561 EditableSyntax
$keyword,
10562 EditableSyntax
$left_paren,
10563 EditableSyntax
$condition,
10564 EditableSyntax
$right_paren,
10565 EditableSyntax
$colon,
10566 EditableSyntax
$statement,
10567 EditableSyntax
$elseif_colon_clauses,
10568 EditableSyntax
$else_colon_clause,
10569 EditableSyntax
$endif_keyword,
10570 EditableSyntax
$semicolon) {
10571 parent
::__construct('if_endif_statement');
10572 $this->_keyword
= $keyword;
10573 $this->_left_paren
= $left_paren;
10574 $this->_condition
= $condition;
10575 $this->_right_paren
= $right_paren;
10576 $this->_colon
= $colon;
10577 $this->_statement
= $statement;
10578 $this->_elseif_colon_clauses
= $elseif_colon_clauses;
10579 $this->_else_colon_clause
= $else_colon_clause;
10580 $this->_endif_keyword
= $endif_keyword;
10581 $this->_semicolon
= $semicolon;
10583 public function keyword(): EditableSyntax
{
10584 return $this->_keyword
;
10586 public function left_paren(): EditableSyntax
{
10587 return $this->_left_paren
;
10589 public function condition(): EditableSyntax
{
10590 return $this->_condition
;
10592 public function right_paren(): EditableSyntax
{
10593 return $this->_right_paren
;
10595 public function colon(): EditableSyntax
{
10596 return $this->_colon
;
10598 public function statement(): EditableSyntax
{
10599 return $this->_statement
;
10601 public function elseif_colon_clauses(): EditableSyntax
{
10602 return $this->_elseif_colon_clauses
;
10604 public function else_colon_clause(): EditableSyntax
{
10605 return $this->_else_colon_clause
;
10607 public function endif_keyword(): EditableSyntax
{
10608 return $this->_endif_keyword
;
10610 public function semicolon(): EditableSyntax
{
10611 return $this->_semicolon
;
10613 public function with_keyword(EditableSyntax
$keyword): IfEndIfStatement
{
10614 return new IfEndIfStatement(
10616 $this->_left_paren
,
10618 $this->_right_paren
,
10621 $this->_elseif_colon_clauses
,
10622 $this->_else_colon_clause
,
10623 $this->_endif_keyword
,
10624 $this->_semicolon
);
10626 public function with_left_paren(EditableSyntax
$left_paren): IfEndIfStatement
{
10627 return new IfEndIfStatement(
10631 $this->_right_paren
,
10634 $this->_elseif_colon_clauses
,
10635 $this->_else_colon_clause
,
10636 $this->_endif_keyword
,
10637 $this->_semicolon
);
10639 public function with_condition(EditableSyntax
$condition): IfEndIfStatement
{
10640 return new IfEndIfStatement(
10642 $this->_left_paren
,
10644 $this->_right_paren
,
10647 $this->_elseif_colon_clauses
,
10648 $this->_else_colon_clause
,
10649 $this->_endif_keyword
,
10650 $this->_semicolon
);
10652 public function with_right_paren(EditableSyntax
$right_paren): IfEndIfStatement
{
10653 return new IfEndIfStatement(
10655 $this->_left_paren
,
10660 $this->_elseif_colon_clauses
,
10661 $this->_else_colon_clause
,
10662 $this->_endif_keyword
,
10663 $this->_semicolon
);
10665 public function with_colon(EditableSyntax
$colon): IfEndIfStatement
{
10666 return new IfEndIfStatement(
10668 $this->_left_paren
,
10670 $this->_right_paren
,
10673 $this->_elseif_colon_clauses
,
10674 $this->_else_colon_clause
,
10675 $this->_endif_keyword
,
10676 $this->_semicolon
);
10678 public function with_statement(EditableSyntax
$statement): IfEndIfStatement
{
10679 return new IfEndIfStatement(
10681 $this->_left_paren
,
10683 $this->_right_paren
,
10686 $this->_elseif_colon_clauses
,
10687 $this->_else_colon_clause
,
10688 $this->_endif_keyword
,
10689 $this->_semicolon
);
10691 public function with_elseif_colon_clauses(EditableSyntax
$elseif_colon_clauses): IfEndIfStatement
{
10692 return new IfEndIfStatement(
10694 $this->_left_paren
,
10696 $this->_right_paren
,
10699 $elseif_colon_clauses,
10700 $this->_else_colon_clause
,
10701 $this->_endif_keyword
,
10702 $this->_semicolon
);
10704 public function with_else_colon_clause(EditableSyntax
$else_colon_clause): IfEndIfStatement
{
10705 return new IfEndIfStatement(
10707 $this->_left_paren
,
10709 $this->_right_paren
,
10712 $this->_elseif_colon_clauses
,
10713 $else_colon_clause,
10714 $this->_endif_keyword
,
10715 $this->_semicolon
);
10717 public function with_endif_keyword(EditableSyntax
$endif_keyword): IfEndIfStatement
{
10718 return new IfEndIfStatement(
10720 $this->_left_paren
,
10722 $this->_right_paren
,
10725 $this->_elseif_colon_clauses
,
10726 $this->_else_colon_clause
,
10728 $this->_semicolon
);
10730 public function with_semicolon(EditableSyntax
$semicolon): IfEndIfStatement
{
10731 return new IfEndIfStatement(
10733 $this->_left_paren
,
10735 $this->_right_paren
,
10738 $this->_elseif_colon_clauses
,
10739 $this->_else_colon_clause
,
10740 $this->_endif_keyword
,
10744 public function rewrite(
10746 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
10747 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
10748 $new_parents = $parents ??
[];
10749 array_push($new_parents, $this);
10750 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
10751 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
10752 $condition = $this->condition()->rewrite($rewriter, $new_parents);
10753 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
10754 $colon = $this->colon()->rewrite($rewriter, $new_parents);
10755 $statement = $this->statement()->rewrite($rewriter, $new_parents);
10756 $elseif_colon_clauses = $this->elseif_colon_clauses()->rewrite($rewriter, $new_parents);
10757 $else_colon_clause = $this->else_colon_clause()->rewrite($rewriter, $new_parents);
10758 $endif_keyword = $this->endif_keyword()->rewrite($rewriter, $new_parents);
10759 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
10761 $keyword === $this->keyword() &&
10762 $left_paren === $this->left_paren() &&
10763 $condition === $this->condition() &&
10764 $right_paren === $this->right_paren() &&
10765 $colon === $this->colon() &&
10766 $statement === $this->statement() &&
10767 $elseif_colon_clauses === $this->elseif_colon_clauses() &&
10768 $else_colon_clause === $this->else_colon_clause() &&
10769 $endif_keyword === $this->endif_keyword() &&
10770 $semicolon === $this->semicolon()) {
10771 return $rewriter($this, $parents ??
[]);
10773 return $rewriter(new IfEndIfStatement(
10780 $elseif_colon_clauses,
10781 $else_colon_clause,
10783 $semicolon), $parents ??
[]);
10787 public static function from_json(mixed $json, int $position, string $source) {
10788 $keyword = EditableSyntax
::from_json(
10789 $json->if_endif_keyword
, $position, $source);
10790 $position +
= $keyword->width();
10791 $left_paren = EditableSyntax
::from_json(
10792 $json->if_endif_left_paren
, $position, $source);
10793 $position +
= $left_paren->width();
10794 $condition = EditableSyntax
::from_json(
10795 $json->if_endif_condition
, $position, $source);
10796 $position +
= $condition->width();
10797 $right_paren = EditableSyntax
::from_json(
10798 $json->if_endif_right_paren
, $position, $source);
10799 $position +
= $right_paren->width();
10800 $colon = EditableSyntax
::from_json(
10801 $json->if_endif_colon
, $position, $source);
10802 $position +
= $colon->width();
10803 $statement = EditableSyntax
::from_json(
10804 $json->if_endif_statement
, $position, $source);
10805 $position +
= $statement->width();
10806 $elseif_colon_clauses = EditableSyntax
::from_json(
10807 $json->if_endif_elseif_colon_clauses
, $position, $source);
10808 $position +
= $elseif_colon_clauses->width();
10809 $else_colon_clause = EditableSyntax
::from_json(
10810 $json->if_endif_else_colon_clause
, $position, $source);
10811 $position +
= $else_colon_clause->width();
10812 $endif_keyword = EditableSyntax
::from_json(
10813 $json->if_endif_endif_keyword
, $position, $source);
10814 $position +
= $endif_keyword->width();
10815 $semicolon = EditableSyntax
::from_json(
10816 $json->if_endif_semicolon
, $position, $source);
10817 $position +
= $semicolon->width();
10818 return new IfEndIfStatement(
10825 $elseif_colon_clauses,
10826 $else_colon_clause,
10830 public function children(): Generator
<string, EditableSyntax
, void
> {
10831 yield
$this->_keyword
;
10832 yield
$this->_left_paren
;
10833 yield
$this->_condition
;
10834 yield
$this->_right_paren
;
10835 yield
$this->_colon
;
10836 yield
$this->_statement
;
10837 yield
$this->_elseif_colon_clauses
;
10838 yield
$this->_else_colon_clause
;
10839 yield
$this->_endif_keyword
;
10840 yield
$this->_semicolon
;
10844 final class ElseifColonClause
extends EditableSyntax
{
10845 private EditableSyntax
$_keyword;
10846 private EditableSyntax
$_left_paren;
10847 private EditableSyntax
$_condition;
10848 private EditableSyntax
$_right_paren;
10849 private EditableSyntax
$_colon;
10850 private EditableSyntax
$_statement;
10851 public function __construct(
10852 EditableSyntax
$keyword,
10853 EditableSyntax
$left_paren,
10854 EditableSyntax
$condition,
10855 EditableSyntax
$right_paren,
10856 EditableSyntax
$colon,
10857 EditableSyntax
$statement) {
10858 parent
::__construct('elseif_colon_clause');
10859 $this->_keyword
= $keyword;
10860 $this->_left_paren
= $left_paren;
10861 $this->_condition
= $condition;
10862 $this->_right_paren
= $right_paren;
10863 $this->_colon
= $colon;
10864 $this->_statement
= $statement;
10866 public function keyword(): EditableSyntax
{
10867 return $this->_keyword
;
10869 public function left_paren(): EditableSyntax
{
10870 return $this->_left_paren
;
10872 public function condition(): EditableSyntax
{
10873 return $this->_condition
;
10875 public function right_paren(): EditableSyntax
{
10876 return $this->_right_paren
;
10878 public function colon(): EditableSyntax
{
10879 return $this->_colon
;
10881 public function statement(): EditableSyntax
{
10882 return $this->_statement
;
10884 public function with_keyword(EditableSyntax
$keyword): ElseifColonClause
{
10885 return new ElseifColonClause(
10887 $this->_left_paren
,
10889 $this->_right_paren
,
10891 $this->_statement
);
10893 public function with_left_paren(EditableSyntax
$left_paren): ElseifColonClause
{
10894 return new ElseifColonClause(
10898 $this->_right_paren
,
10900 $this->_statement
);
10902 public function with_condition(EditableSyntax
$condition): ElseifColonClause
{
10903 return new ElseifColonClause(
10905 $this->_left_paren
,
10907 $this->_right_paren
,
10909 $this->_statement
);
10911 public function with_right_paren(EditableSyntax
$right_paren): ElseifColonClause
{
10912 return new ElseifColonClause(
10914 $this->_left_paren
,
10918 $this->_statement
);
10920 public function with_colon(EditableSyntax
$colon): ElseifColonClause
{
10921 return new ElseifColonClause(
10923 $this->_left_paren
,
10925 $this->_right_paren
,
10927 $this->_statement
);
10929 public function with_statement(EditableSyntax
$statement): ElseifColonClause
{
10930 return new ElseifColonClause(
10932 $this->_left_paren
,
10934 $this->_right_paren
,
10939 public function rewrite(
10941 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
10942 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
10943 $new_parents = $parents ??
[];
10944 array_push($new_parents, $this);
10945 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
10946 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
10947 $condition = $this->condition()->rewrite($rewriter, $new_parents);
10948 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
10949 $colon = $this->colon()->rewrite($rewriter, $new_parents);
10950 $statement = $this->statement()->rewrite($rewriter, $new_parents);
10952 $keyword === $this->keyword() &&
10953 $left_paren === $this->left_paren() &&
10954 $condition === $this->condition() &&
10955 $right_paren === $this->right_paren() &&
10956 $colon === $this->colon() &&
10957 $statement === $this->statement()) {
10958 return $rewriter($this, $parents ??
[]);
10960 return $rewriter(new ElseifColonClause(
10966 $statement), $parents ??
[]);
10970 public static function from_json(mixed $json, int $position, string $source) {
10971 $keyword = EditableSyntax
::from_json(
10972 $json->elseif_colon_keyword
, $position, $source);
10973 $position +
= $keyword->width();
10974 $left_paren = EditableSyntax
::from_json(
10975 $json->elseif_colon_left_paren
, $position, $source);
10976 $position +
= $left_paren->width();
10977 $condition = EditableSyntax
::from_json(
10978 $json->elseif_colon_condition
, $position, $source);
10979 $position +
= $condition->width();
10980 $right_paren = EditableSyntax
::from_json(
10981 $json->elseif_colon_right_paren
, $position, $source);
10982 $position +
= $right_paren->width();
10983 $colon = EditableSyntax
::from_json(
10984 $json->elseif_colon_colon
, $position, $source);
10985 $position +
= $colon->width();
10986 $statement = EditableSyntax
::from_json(
10987 $json->elseif_colon_statement
, $position, $source);
10988 $position +
= $statement->width();
10989 return new ElseifColonClause(
10997 public function children(): Generator
<string, EditableSyntax
, void
> {
10998 yield
$this->_keyword
;
10999 yield
$this->_left_paren
;
11000 yield
$this->_condition
;
11001 yield
$this->_right_paren
;
11002 yield
$this->_colon
;
11003 yield
$this->_statement
;
11007 final class ElseColonClause
extends EditableSyntax
{
11008 private EditableSyntax
$_keyword;
11009 private EditableSyntax
$_colon;
11010 private EditableSyntax
$_statement;
11011 public function __construct(
11012 EditableSyntax
$keyword,
11013 EditableSyntax
$colon,
11014 EditableSyntax
$statement) {
11015 parent
::__construct('else_colon_clause');
11016 $this->_keyword
= $keyword;
11017 $this->_colon
= $colon;
11018 $this->_statement
= $statement;
11020 public function keyword(): EditableSyntax
{
11021 return $this->_keyword
;
11023 public function colon(): EditableSyntax
{
11024 return $this->_colon
;
11026 public function statement(): EditableSyntax
{
11027 return $this->_statement
;
11029 public function with_keyword(EditableSyntax
$keyword): ElseColonClause
{
11030 return new ElseColonClause(
11033 $this->_statement
);
11035 public function with_colon(EditableSyntax
$colon): ElseColonClause
{
11036 return new ElseColonClause(
11039 $this->_statement
);
11041 public function with_statement(EditableSyntax
$statement): ElseColonClause
{
11042 return new ElseColonClause(
11048 public function rewrite(
11050 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
11051 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
11052 $new_parents = $parents ??
[];
11053 array_push($new_parents, $this);
11054 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
11055 $colon = $this->colon()->rewrite($rewriter, $new_parents);
11056 $statement = $this->statement()->rewrite($rewriter, $new_parents);
11058 $keyword === $this->keyword() &&
11059 $colon === $this->colon() &&
11060 $statement === $this->statement()) {
11061 return $rewriter($this, $parents ??
[]);
11063 return $rewriter(new ElseColonClause(
11066 $statement), $parents ??
[]);
11070 public static function from_json(mixed $json, int $position, string $source) {
11071 $keyword = EditableSyntax
::from_json(
11072 $json->else_colon_keyword
, $position, $source);
11073 $position +
= $keyword->width();
11074 $colon = EditableSyntax
::from_json(
11075 $json->else_colon_colon
, $position, $source);
11076 $position +
= $colon->width();
11077 $statement = EditableSyntax
::from_json(
11078 $json->else_colon_statement
, $position, $source);
11079 $position +
= $statement->width();
11080 return new ElseColonClause(
11085 public function children(): Generator
<string, EditableSyntax
, void
> {
11086 yield
$this->_keyword
;
11087 yield
$this->_colon
;
11088 yield
$this->_statement
;
11092 final class TryStatement
extends EditableSyntax
{
11093 private EditableSyntax
$_keyword;
11094 private EditableSyntax
$_compound_statement;
11095 private EditableSyntax
$_catch_clauses;
11096 private EditableSyntax
$_finally_clause;
11097 public function __construct(
11098 EditableSyntax
$keyword,
11099 EditableSyntax
$compound_statement,
11100 EditableSyntax
$catch_clauses,
11101 EditableSyntax
$finally_clause) {
11102 parent
::__construct('try_statement');
11103 $this->_keyword
= $keyword;
11104 $this->_compound_statement
= $compound_statement;
11105 $this->_catch_clauses
= $catch_clauses;
11106 $this->_finally_clause
= $finally_clause;
11108 public function keyword(): EditableSyntax
{
11109 return $this->_keyword
;
11111 public function compound_statement(): EditableSyntax
{
11112 return $this->_compound_statement
;
11114 public function catch_clauses(): EditableSyntax
{
11115 return $this->_catch_clauses
;
11117 public function finally_clause(): EditableSyntax
{
11118 return $this->_finally_clause
;
11120 public function with_keyword(EditableSyntax
$keyword): TryStatement
{
11121 return new TryStatement(
11123 $this->_compound_statement
,
11124 $this->_catch_clauses
,
11125 $this->_finally_clause
);
11127 public function with_compound_statement(EditableSyntax
$compound_statement): TryStatement
{
11128 return new TryStatement(
11130 $compound_statement,
11131 $this->_catch_clauses
,
11132 $this->_finally_clause
);
11134 public function with_catch_clauses(EditableSyntax
$catch_clauses): TryStatement
{
11135 return new TryStatement(
11137 $this->_compound_statement
,
11139 $this->_finally_clause
);
11141 public function with_finally_clause(EditableSyntax
$finally_clause): TryStatement
{
11142 return new TryStatement(
11144 $this->_compound_statement
,
11145 $this->_catch_clauses
,
11149 public function rewrite(
11151 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
11152 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
11153 $new_parents = $parents ??
[];
11154 array_push($new_parents, $this);
11155 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
11156 $compound_statement = $this->compound_statement()->rewrite($rewriter, $new_parents);
11157 $catch_clauses = $this->catch_clauses()->rewrite($rewriter, $new_parents);
11158 $finally_clause = $this->finally_clause()->rewrite($rewriter, $new_parents);
11160 $keyword === $this->keyword() &&
11161 $compound_statement === $this->compound_statement() &&
11162 $catch_clauses === $this->catch_clauses() &&
11163 $finally_clause === $this->finally_clause()) {
11164 return $rewriter($this, $parents ??
[]);
11166 return $rewriter(new TryStatement(
11168 $compound_statement,
11170 $finally_clause), $parents ??
[]);
11174 public static function from_json(mixed $json, int $position, string $source) {
11175 $keyword = EditableSyntax
::from_json(
11176 $json->try_keyword
, $position, $source);
11177 $position +
= $keyword->width();
11178 $compound_statement = EditableSyntax
::from_json(
11179 $json->try_compound_statement
, $position, $source);
11180 $position +
= $compound_statement->width();
11181 $catch_clauses = EditableSyntax
::from_json(
11182 $json->try_catch_clauses
, $position, $source);
11183 $position +
= $catch_clauses->width();
11184 $finally_clause = EditableSyntax
::from_json(
11185 $json->try_finally_clause
, $position, $source);
11186 $position +
= $finally_clause->width();
11187 return new TryStatement(
11189 $compound_statement,
11193 public function children(): Generator
<string, EditableSyntax
, void
> {
11194 yield
$this->_keyword
;
11195 yield
$this->_compound_statement
;
11196 yield
$this->_catch_clauses
;
11197 yield
$this->_finally_clause
;
11201 final class CatchClause
extends EditableSyntax
{
11202 private EditableSyntax
$_keyword;
11203 private EditableSyntax
$_left_paren;
11204 private EditableSyntax
$_type;
11205 private EditableSyntax
$_variable;
11206 private EditableSyntax
$_right_paren;
11207 private EditableSyntax
$_body;
11208 public function __construct(
11209 EditableSyntax
$keyword,
11210 EditableSyntax
$left_paren,
11211 EditableSyntax
$type,
11212 EditableSyntax
$variable,
11213 EditableSyntax
$right_paren,
11214 EditableSyntax
$body) {
11215 parent
::__construct('catch_clause');
11216 $this->_keyword
= $keyword;
11217 $this->_left_paren
= $left_paren;
11218 $this->_type
= $type;
11219 $this->_variable
= $variable;
11220 $this->_right_paren
= $right_paren;
11221 $this->_body
= $body;
11223 public function keyword(): EditableSyntax
{
11224 return $this->_keyword
;
11226 public function left_paren(): EditableSyntax
{
11227 return $this->_left_paren
;
11229 public function type(): EditableSyntax
{
11230 return $this->_type
;
11232 public function variable(): EditableSyntax
{
11233 return $this->_variable
;
11235 public function right_paren(): EditableSyntax
{
11236 return $this->_right_paren
;
11238 public function body(): EditableSyntax
{
11239 return $this->_body
;
11241 public function with_keyword(EditableSyntax
$keyword): CatchClause
{
11242 return new CatchClause(
11244 $this->_left_paren
,
11247 $this->_right_paren
,
11250 public function with_left_paren(EditableSyntax
$left_paren): CatchClause
{
11251 return new CatchClause(
11256 $this->_right_paren
,
11259 public function with_type(EditableSyntax
$type): CatchClause
{
11260 return new CatchClause(
11262 $this->_left_paren
,
11265 $this->_right_paren
,
11268 public function with_variable(EditableSyntax
$variable): CatchClause
{
11269 return new CatchClause(
11271 $this->_left_paren
,
11274 $this->_right_paren
,
11277 public function with_right_paren(EditableSyntax
$right_paren): CatchClause
{
11278 return new CatchClause(
11280 $this->_left_paren
,
11286 public function with_body(EditableSyntax
$body): CatchClause
{
11287 return new CatchClause(
11289 $this->_left_paren
,
11292 $this->_right_paren
,
11296 public function rewrite(
11298 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
11299 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
11300 $new_parents = $parents ??
[];
11301 array_push($new_parents, $this);
11302 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
11303 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
11304 $type = $this->type()->rewrite($rewriter, $new_parents);
11305 $variable = $this->variable()->rewrite($rewriter, $new_parents);
11306 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
11307 $body = $this->body()->rewrite($rewriter, $new_parents);
11309 $keyword === $this->keyword() &&
11310 $left_paren === $this->left_paren() &&
11311 $type === $this->type() &&
11312 $variable === $this->variable() &&
11313 $right_paren === $this->right_paren() &&
11314 $body === $this->body()) {
11315 return $rewriter($this, $parents ??
[]);
11317 return $rewriter(new CatchClause(
11323 $body), $parents ??
[]);
11327 public static function from_json(mixed $json, int $position, string $source) {
11328 $keyword = EditableSyntax
::from_json(
11329 $json->catch_keyword
, $position, $source);
11330 $position +
= $keyword->width();
11331 $left_paren = EditableSyntax
::from_json(
11332 $json->catch_left_paren
, $position, $source);
11333 $position +
= $left_paren->width();
11334 $type = EditableSyntax
::from_json(
11335 $json->catch_type
, $position, $source);
11336 $position +
= $type->width();
11337 $variable = EditableSyntax
::from_json(
11338 $json->catch_variable
, $position, $source);
11339 $position +
= $variable->width();
11340 $right_paren = EditableSyntax
::from_json(
11341 $json->catch_right_paren
, $position, $source);
11342 $position +
= $right_paren->width();
11343 $body = EditableSyntax
::from_json(
11344 $json->catch_body
, $position, $source);
11345 $position +
= $body->width();
11346 return new CatchClause(
11354 public function children(): Generator
<string, EditableSyntax
, void
> {
11355 yield
$this->_keyword
;
11356 yield
$this->_left_paren
;
11357 yield
$this->_type
;
11358 yield
$this->_variable
;
11359 yield
$this->_right_paren
;
11360 yield
$this->_body
;
11364 final class FinallyClause
extends EditableSyntax
{
11365 private EditableSyntax
$_keyword;
11366 private EditableSyntax
$_body;
11367 public function __construct(
11368 EditableSyntax
$keyword,
11369 EditableSyntax
$body) {
11370 parent
::__construct('finally_clause');
11371 $this->_keyword
= $keyword;
11372 $this->_body
= $body;
11374 public function keyword(): EditableSyntax
{
11375 return $this->_keyword
;
11377 public function body(): EditableSyntax
{
11378 return $this->_body
;
11380 public function with_keyword(EditableSyntax
$keyword): FinallyClause
{
11381 return new FinallyClause(
11385 public function with_body(EditableSyntax
$body): FinallyClause
{
11386 return new FinallyClause(
11391 public function rewrite(
11393 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
11394 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
11395 $new_parents = $parents ??
[];
11396 array_push($new_parents, $this);
11397 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
11398 $body = $this->body()->rewrite($rewriter, $new_parents);
11400 $keyword === $this->keyword() &&
11401 $body === $this->body()) {
11402 return $rewriter($this, $parents ??
[]);
11404 return $rewriter(new FinallyClause(
11406 $body), $parents ??
[]);
11410 public static function from_json(mixed $json, int $position, string $source) {
11411 $keyword = EditableSyntax
::from_json(
11412 $json->finally_keyword
, $position, $source);
11413 $position +
= $keyword->width();
11414 $body = EditableSyntax
::from_json(
11415 $json->finally_body
, $position, $source);
11416 $position +
= $body->width();
11417 return new FinallyClause(
11421 public function children(): Generator
<string, EditableSyntax
, void
> {
11422 yield
$this->_keyword
;
11423 yield
$this->_body
;
11427 final class DoStatement
extends EditableSyntax
{
11428 private EditableSyntax
$_keyword;
11429 private EditableSyntax
$_body;
11430 private EditableSyntax
$_while_keyword;
11431 private EditableSyntax
$_left_paren;
11432 private EditableSyntax
$_condition;
11433 private EditableSyntax
$_right_paren;
11434 private EditableSyntax
$_semicolon;
11435 public function __construct(
11436 EditableSyntax
$keyword,
11437 EditableSyntax
$body,
11438 EditableSyntax
$while_keyword,
11439 EditableSyntax
$left_paren,
11440 EditableSyntax
$condition,
11441 EditableSyntax
$right_paren,
11442 EditableSyntax
$semicolon) {
11443 parent
::__construct('do_statement');
11444 $this->_keyword
= $keyword;
11445 $this->_body
= $body;
11446 $this->_while_keyword
= $while_keyword;
11447 $this->_left_paren
= $left_paren;
11448 $this->_condition
= $condition;
11449 $this->_right_paren
= $right_paren;
11450 $this->_semicolon
= $semicolon;
11452 public function keyword(): EditableSyntax
{
11453 return $this->_keyword
;
11455 public function body(): EditableSyntax
{
11456 return $this->_body
;
11458 public function while_keyword(): EditableSyntax
{
11459 return $this->_while_keyword
;
11461 public function left_paren(): EditableSyntax
{
11462 return $this->_left_paren
;
11464 public function condition(): EditableSyntax
{
11465 return $this->_condition
;
11467 public function right_paren(): EditableSyntax
{
11468 return $this->_right_paren
;
11470 public function semicolon(): EditableSyntax
{
11471 return $this->_semicolon
;
11473 public function with_keyword(EditableSyntax
$keyword): DoStatement
{
11474 return new DoStatement(
11477 $this->_while_keyword
,
11478 $this->_left_paren
,
11480 $this->_right_paren
,
11481 $this->_semicolon
);
11483 public function with_body(EditableSyntax
$body): DoStatement
{
11484 return new DoStatement(
11487 $this->_while_keyword
,
11488 $this->_left_paren
,
11490 $this->_right_paren
,
11491 $this->_semicolon
);
11493 public function with_while_keyword(EditableSyntax
$while_keyword): DoStatement
{
11494 return new DoStatement(
11498 $this->_left_paren
,
11500 $this->_right_paren
,
11501 $this->_semicolon
);
11503 public function with_left_paren(EditableSyntax
$left_paren): DoStatement
{
11504 return new DoStatement(
11507 $this->_while_keyword
,
11510 $this->_right_paren
,
11511 $this->_semicolon
);
11513 public function with_condition(EditableSyntax
$condition): DoStatement
{
11514 return new DoStatement(
11517 $this->_while_keyword
,
11518 $this->_left_paren
,
11520 $this->_right_paren
,
11521 $this->_semicolon
);
11523 public function with_right_paren(EditableSyntax
$right_paren): DoStatement
{
11524 return new DoStatement(
11527 $this->_while_keyword
,
11528 $this->_left_paren
,
11531 $this->_semicolon
);
11533 public function with_semicolon(EditableSyntax
$semicolon): DoStatement
{
11534 return new DoStatement(
11537 $this->_while_keyword
,
11538 $this->_left_paren
,
11540 $this->_right_paren
,
11544 public function rewrite(
11546 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
11547 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
11548 $new_parents = $parents ??
[];
11549 array_push($new_parents, $this);
11550 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
11551 $body = $this->body()->rewrite($rewriter, $new_parents);
11552 $while_keyword = $this->while_keyword()->rewrite($rewriter, $new_parents);
11553 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
11554 $condition = $this->condition()->rewrite($rewriter, $new_parents);
11555 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
11556 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
11558 $keyword === $this->keyword() &&
11559 $body === $this->body() &&
11560 $while_keyword === $this->while_keyword() &&
11561 $left_paren === $this->left_paren() &&
11562 $condition === $this->condition() &&
11563 $right_paren === $this->right_paren() &&
11564 $semicolon === $this->semicolon()) {
11565 return $rewriter($this, $parents ??
[]);
11567 return $rewriter(new DoStatement(
11574 $semicolon), $parents ??
[]);
11578 public static function from_json(mixed $json, int $position, string $source) {
11579 $keyword = EditableSyntax
::from_json(
11580 $json->do_keyword
, $position, $source);
11581 $position +
= $keyword->width();
11582 $body = EditableSyntax
::from_json(
11583 $json->do_body
, $position, $source);
11584 $position +
= $body->width();
11585 $while_keyword = EditableSyntax
::from_json(
11586 $json->do_while_keyword
, $position, $source);
11587 $position +
= $while_keyword->width();
11588 $left_paren = EditableSyntax
::from_json(
11589 $json->do_left_paren
, $position, $source);
11590 $position +
= $left_paren->width();
11591 $condition = EditableSyntax
::from_json(
11592 $json->do_condition
, $position, $source);
11593 $position +
= $condition->width();
11594 $right_paren = EditableSyntax
::from_json(
11595 $json->do_right_paren
, $position, $source);
11596 $position +
= $right_paren->width();
11597 $semicolon = EditableSyntax
::from_json(
11598 $json->do_semicolon
, $position, $source);
11599 $position +
= $semicolon->width();
11600 return new DoStatement(
11609 public function children(): Generator
<string, EditableSyntax
, void
> {
11610 yield
$this->_keyword
;
11611 yield
$this->_body
;
11612 yield
$this->_while_keyword
;
11613 yield
$this->_left_paren
;
11614 yield
$this->_condition
;
11615 yield
$this->_right_paren
;
11616 yield
$this->_semicolon
;
11620 final class ForStatement
extends EditableSyntax
{
11621 private EditableSyntax
$_keyword;
11622 private EditableSyntax
$_left_paren;
11623 private EditableSyntax
$_initializer;
11624 private EditableSyntax
$_first_semicolon;
11625 private EditableSyntax
$_control;
11626 private EditableSyntax
$_second_semicolon;
11627 private EditableSyntax
$_end_of_loop;
11628 private EditableSyntax
$_right_paren;
11629 private EditableSyntax
$_body;
11630 public function __construct(
11631 EditableSyntax
$keyword,
11632 EditableSyntax
$left_paren,
11633 EditableSyntax
$initializer,
11634 EditableSyntax
$first_semicolon,
11635 EditableSyntax
$control,
11636 EditableSyntax
$second_semicolon,
11637 EditableSyntax
$end_of_loop,
11638 EditableSyntax
$right_paren,
11639 EditableSyntax
$body) {
11640 parent
::__construct('for_statement');
11641 $this->_keyword
= $keyword;
11642 $this->_left_paren
= $left_paren;
11643 $this->_initializer
= $initializer;
11644 $this->_first_semicolon
= $first_semicolon;
11645 $this->_control
= $control;
11646 $this->_second_semicolon
= $second_semicolon;
11647 $this->_end_of_loop
= $end_of_loop;
11648 $this->_right_paren
= $right_paren;
11649 $this->_body
= $body;
11651 public function keyword(): EditableSyntax
{
11652 return $this->_keyword
;
11654 public function left_paren(): EditableSyntax
{
11655 return $this->_left_paren
;
11657 public function initializer(): EditableSyntax
{
11658 return $this->_initializer
;
11660 public function first_semicolon(): EditableSyntax
{
11661 return $this->_first_semicolon
;
11663 public function control(): EditableSyntax
{
11664 return $this->_control
;
11666 public function second_semicolon(): EditableSyntax
{
11667 return $this->_second_semicolon
;
11669 public function end_of_loop(): EditableSyntax
{
11670 return $this->_end_of_loop
;
11672 public function right_paren(): EditableSyntax
{
11673 return $this->_right_paren
;
11675 public function body(): EditableSyntax
{
11676 return $this->_body
;
11678 public function with_keyword(EditableSyntax
$keyword): ForStatement
{
11679 return new ForStatement(
11681 $this->_left_paren
,
11682 $this->_initializer
,
11683 $this->_first_semicolon
,
11685 $this->_second_semicolon
,
11686 $this->_end_of_loop
,
11687 $this->_right_paren
,
11690 public function with_left_paren(EditableSyntax
$left_paren): ForStatement
{
11691 return new ForStatement(
11694 $this->_initializer
,
11695 $this->_first_semicolon
,
11697 $this->_second_semicolon
,
11698 $this->_end_of_loop
,
11699 $this->_right_paren
,
11702 public function with_initializer(EditableSyntax
$initializer): ForStatement
{
11703 return new ForStatement(
11705 $this->_left_paren
,
11707 $this->_first_semicolon
,
11709 $this->_second_semicolon
,
11710 $this->_end_of_loop
,
11711 $this->_right_paren
,
11714 public function with_first_semicolon(EditableSyntax
$first_semicolon): ForStatement
{
11715 return new ForStatement(
11717 $this->_left_paren
,
11718 $this->_initializer
,
11721 $this->_second_semicolon
,
11722 $this->_end_of_loop
,
11723 $this->_right_paren
,
11726 public function with_control(EditableSyntax
$control): ForStatement
{
11727 return new ForStatement(
11729 $this->_left_paren
,
11730 $this->_initializer
,
11731 $this->_first_semicolon
,
11733 $this->_second_semicolon
,
11734 $this->_end_of_loop
,
11735 $this->_right_paren
,
11738 public function with_second_semicolon(EditableSyntax
$second_semicolon): ForStatement
{
11739 return new ForStatement(
11741 $this->_left_paren
,
11742 $this->_initializer
,
11743 $this->_first_semicolon
,
11746 $this->_end_of_loop
,
11747 $this->_right_paren
,
11750 public function with_end_of_loop(EditableSyntax
$end_of_loop): ForStatement
{
11751 return new ForStatement(
11753 $this->_left_paren
,
11754 $this->_initializer
,
11755 $this->_first_semicolon
,
11757 $this->_second_semicolon
,
11759 $this->_right_paren
,
11762 public function with_right_paren(EditableSyntax
$right_paren): ForStatement
{
11763 return new ForStatement(
11765 $this->_left_paren
,
11766 $this->_initializer
,
11767 $this->_first_semicolon
,
11769 $this->_second_semicolon
,
11770 $this->_end_of_loop
,
11774 public function with_body(EditableSyntax
$body): ForStatement
{
11775 return new ForStatement(
11777 $this->_left_paren
,
11778 $this->_initializer
,
11779 $this->_first_semicolon
,
11781 $this->_second_semicolon
,
11782 $this->_end_of_loop
,
11783 $this->_right_paren
,
11787 public function rewrite(
11789 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
11790 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
11791 $new_parents = $parents ??
[];
11792 array_push($new_parents, $this);
11793 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
11794 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
11795 $initializer = $this->initializer()->rewrite($rewriter, $new_parents);
11796 $first_semicolon = $this->first_semicolon()->rewrite($rewriter, $new_parents);
11797 $control = $this->control()->rewrite($rewriter, $new_parents);
11798 $second_semicolon = $this->second_semicolon()->rewrite($rewriter, $new_parents);
11799 $end_of_loop = $this->end_of_loop()->rewrite($rewriter, $new_parents);
11800 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
11801 $body = $this->body()->rewrite($rewriter, $new_parents);
11803 $keyword === $this->keyword() &&
11804 $left_paren === $this->left_paren() &&
11805 $initializer === $this->initializer() &&
11806 $first_semicolon === $this->first_semicolon() &&
11807 $control === $this->control() &&
11808 $second_semicolon === $this->second_semicolon() &&
11809 $end_of_loop === $this->end_of_loop() &&
11810 $right_paren === $this->right_paren() &&
11811 $body === $this->body()) {
11812 return $rewriter($this, $parents ??
[]);
11814 return $rewriter(new ForStatement(
11823 $body), $parents ??
[]);
11827 public static function from_json(mixed $json, int $position, string $source) {
11828 $keyword = EditableSyntax
::from_json(
11829 $json->for_keyword
, $position, $source);
11830 $position +
= $keyword->width();
11831 $left_paren = EditableSyntax
::from_json(
11832 $json->for_left_paren
, $position, $source);
11833 $position +
= $left_paren->width();
11834 $initializer = EditableSyntax
::from_json(
11835 $json->for_initializer
, $position, $source);
11836 $position +
= $initializer->width();
11837 $first_semicolon = EditableSyntax
::from_json(
11838 $json->for_first_semicolon
, $position, $source);
11839 $position +
= $first_semicolon->width();
11840 $control = EditableSyntax
::from_json(
11841 $json->for_control
, $position, $source);
11842 $position +
= $control->width();
11843 $second_semicolon = EditableSyntax
::from_json(
11844 $json->for_second_semicolon
, $position, $source);
11845 $position +
= $second_semicolon->width();
11846 $end_of_loop = EditableSyntax
::from_json(
11847 $json->for_end_of_loop
, $position, $source);
11848 $position +
= $end_of_loop->width();
11849 $right_paren = EditableSyntax
::from_json(
11850 $json->for_right_paren
, $position, $source);
11851 $position +
= $right_paren->width();
11852 $body = EditableSyntax
::from_json(
11853 $json->for_body
, $position, $source);
11854 $position +
= $body->width();
11855 return new ForStatement(
11866 public function children(): Generator
<string, EditableSyntax
, void
> {
11867 yield
$this->_keyword
;
11868 yield
$this->_left_paren
;
11869 yield
$this->_initializer
;
11870 yield
$this->_first_semicolon
;
11871 yield
$this->_control
;
11872 yield
$this->_second_semicolon
;
11873 yield
$this->_end_of_loop
;
11874 yield
$this->_right_paren
;
11875 yield
$this->_body
;
11879 final class ForeachStatement
extends EditableSyntax
{
11880 private EditableSyntax
$_keyword;
11881 private EditableSyntax
$_left_paren;
11882 private EditableSyntax
$_collection;
11883 private EditableSyntax
$_await_keyword;
11884 private EditableSyntax
$_as;
11885 private EditableSyntax
$_key;
11886 private EditableSyntax
$_arrow;
11887 private EditableSyntax
$_value;
11888 private EditableSyntax
$_right_paren;
11889 private EditableSyntax
$_body;
11890 public function __construct(
11891 EditableSyntax
$keyword,
11892 EditableSyntax
$left_paren,
11893 EditableSyntax
$collection,
11894 EditableSyntax
$await_keyword,
11895 EditableSyntax
$as,
11896 EditableSyntax
$key,
11897 EditableSyntax
$arrow,
11898 EditableSyntax
$value,
11899 EditableSyntax
$right_paren,
11900 EditableSyntax
$body) {
11901 parent
::__construct('foreach_statement');
11902 $this->_keyword
= $keyword;
11903 $this->_left_paren
= $left_paren;
11904 $this->_collection
= $collection;
11905 $this->_await_keyword
= $await_keyword;
11907 $this->_key
= $key;
11908 $this->_arrow
= $arrow;
11909 $this->_value
= $value;
11910 $this->_right_paren
= $right_paren;
11911 $this->_body
= $body;
11913 public function keyword(): EditableSyntax
{
11914 return $this->_keyword
;
11916 public function left_paren(): EditableSyntax
{
11917 return $this->_left_paren
;
11919 public function collection(): EditableSyntax
{
11920 return $this->_collection
;
11922 public function await_keyword(): EditableSyntax
{
11923 return $this->_await_keyword
;
11925 public function as(): EditableSyntax
{
11928 public function key(): EditableSyntax
{
11929 return $this->_key
;
11931 public function arrow(): EditableSyntax
{
11932 return $this->_arrow
;
11934 public function value(): EditableSyntax
{
11935 return $this->_value
;
11937 public function right_paren(): EditableSyntax
{
11938 return $this->_right_paren
;
11940 public function body(): EditableSyntax
{
11941 return $this->_body
;
11943 public function with_keyword(EditableSyntax
$keyword): ForeachStatement
{
11944 return new ForeachStatement(
11946 $this->_left_paren
,
11947 $this->_collection
,
11948 $this->_await_keyword
,
11953 $this->_right_paren
,
11956 public function with_left_paren(EditableSyntax
$left_paren): ForeachStatement
{
11957 return new ForeachStatement(
11960 $this->_collection
,
11961 $this->_await_keyword
,
11966 $this->_right_paren
,
11969 public function with_collection(EditableSyntax
$collection): ForeachStatement
{
11970 return new ForeachStatement(
11972 $this->_left_paren
,
11974 $this->_await_keyword
,
11979 $this->_right_paren
,
11982 public function with_await_keyword(EditableSyntax
$await_keyword): ForeachStatement
{
11983 return new ForeachStatement(
11985 $this->_left_paren
,
11986 $this->_collection
,
11992 $this->_right_paren
,
11995 public function with_as(EditableSyntax
$as): ForeachStatement
{
11996 return new ForeachStatement(
11998 $this->_left_paren
,
11999 $this->_collection
,
12000 $this->_await_keyword
,
12005 $this->_right_paren
,
12008 public function with_key(EditableSyntax
$key): ForeachStatement
{
12009 return new ForeachStatement(
12011 $this->_left_paren
,
12012 $this->_collection
,
12013 $this->_await_keyword
,
12018 $this->_right_paren
,
12021 public function with_arrow(EditableSyntax
$arrow): ForeachStatement
{
12022 return new ForeachStatement(
12024 $this->_left_paren
,
12025 $this->_collection
,
12026 $this->_await_keyword
,
12031 $this->_right_paren
,
12034 public function with_value(EditableSyntax
$value): ForeachStatement
{
12035 return new ForeachStatement(
12037 $this->_left_paren
,
12038 $this->_collection
,
12039 $this->_await_keyword
,
12044 $this->_right_paren
,
12047 public function with_right_paren(EditableSyntax
$right_paren): ForeachStatement
{
12048 return new ForeachStatement(
12050 $this->_left_paren
,
12051 $this->_collection
,
12052 $this->_await_keyword
,
12060 public function with_body(EditableSyntax
$body): ForeachStatement
{
12061 return new ForeachStatement(
12063 $this->_left_paren
,
12064 $this->_collection
,
12065 $this->_await_keyword
,
12070 $this->_right_paren
,
12074 public function rewrite(
12076 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
12077 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
12078 $new_parents = $parents ??
[];
12079 array_push($new_parents, $this);
12080 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
12081 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
12082 $collection = $this->collection()->rewrite($rewriter, $new_parents);
12083 $await_keyword = $this->await_keyword()->rewrite($rewriter, $new_parents);
12084 $as = $this->as()->rewrite($rewriter, $new_parents);
12085 $key = $this->key()->rewrite($rewriter, $new_parents);
12086 $arrow = $this->arrow()->rewrite($rewriter, $new_parents);
12087 $value = $this->value()->rewrite($rewriter, $new_parents);
12088 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
12089 $body = $this->body()->rewrite($rewriter, $new_parents);
12091 $keyword === $this->keyword() &&
12092 $left_paren === $this->left_paren() &&
12093 $collection === $this->collection() &&
12094 $await_keyword === $this->await_keyword() &&
12095 $as === $this->as() &&
12096 $key === $this->key() &&
12097 $arrow === $this->arrow() &&
12098 $value === $this->value() &&
12099 $right_paren === $this->right_paren() &&
12100 $body === $this->body()) {
12101 return $rewriter($this, $parents ??
[]);
12103 return $rewriter(new ForeachStatement(
12113 $body), $parents ??
[]);
12117 public static function from_json(mixed $json, int $position, string $source) {
12118 $keyword = EditableSyntax
::from_json(
12119 $json->foreach_keyword
, $position, $source);
12120 $position +
= $keyword->width();
12121 $left_paren = EditableSyntax
::from_json(
12122 $json->foreach_left_paren
, $position, $source);
12123 $position +
= $left_paren->width();
12124 $collection = EditableSyntax
::from_json(
12125 $json->foreach_collection
, $position, $source);
12126 $position +
= $collection->width();
12127 $await_keyword = EditableSyntax
::from_json(
12128 $json->foreach_await_keyword
, $position, $source);
12129 $position +
= $await_keyword->width();
12130 $as = EditableSyntax
::from_json(
12131 $json->foreach_as
, $position, $source);
12132 $position +
= $as->width();
12133 $key = EditableSyntax
::from_json(
12134 $json->foreach_key
, $position, $source);
12135 $position +
= $key->width();
12136 $arrow = EditableSyntax
::from_json(
12137 $json->foreach_arrow
, $position, $source);
12138 $position +
= $arrow->width();
12139 $value = EditableSyntax
::from_json(
12140 $json->foreach_value
, $position, $source);
12141 $position +
= $value->width();
12142 $right_paren = EditableSyntax
::from_json(
12143 $json->foreach_right_paren
, $position, $source);
12144 $position +
= $right_paren->width();
12145 $body = EditableSyntax
::from_json(
12146 $json->foreach_body
, $position, $source);
12147 $position +
= $body->width();
12148 return new ForeachStatement(
12160 public function children(): Generator
<string, EditableSyntax
, void
> {
12161 yield
$this->_keyword
;
12162 yield
$this->_left_paren
;
12163 yield
$this->_collection
;
12164 yield
$this->_await_keyword
;
12167 yield
$this->_arrow
;
12168 yield
$this->_value
;
12169 yield
$this->_right_paren
;
12170 yield
$this->_body
;
12174 final class SwitchStatement
extends EditableSyntax
{
12175 private EditableSyntax
$_keyword;
12176 private EditableSyntax
$_left_paren;
12177 private EditableSyntax
$_expression;
12178 private EditableSyntax
$_right_paren;
12179 private EditableSyntax
$_left_brace;
12180 private EditableSyntax
$_sections;
12181 private EditableSyntax
$_right_brace;
12182 public function __construct(
12183 EditableSyntax
$keyword,
12184 EditableSyntax
$left_paren,
12185 EditableSyntax
$expression,
12186 EditableSyntax
$right_paren,
12187 EditableSyntax
$left_brace,
12188 EditableSyntax
$sections,
12189 EditableSyntax
$right_brace) {
12190 parent
::__construct('switch_statement');
12191 $this->_keyword
= $keyword;
12192 $this->_left_paren
= $left_paren;
12193 $this->_expression
= $expression;
12194 $this->_right_paren
= $right_paren;
12195 $this->_left_brace
= $left_brace;
12196 $this->_sections
= $sections;
12197 $this->_right_brace
= $right_brace;
12199 public function keyword(): EditableSyntax
{
12200 return $this->_keyword
;
12202 public function left_paren(): EditableSyntax
{
12203 return $this->_left_paren
;
12205 public function expression(): EditableSyntax
{
12206 return $this->_expression
;
12208 public function right_paren(): EditableSyntax
{
12209 return $this->_right_paren
;
12211 public function left_brace(): EditableSyntax
{
12212 return $this->_left_brace
;
12214 public function sections(): EditableSyntax
{
12215 return $this->_sections
;
12217 public function right_brace(): EditableSyntax
{
12218 return $this->_right_brace
;
12220 public function with_keyword(EditableSyntax
$keyword): SwitchStatement
{
12221 return new SwitchStatement(
12223 $this->_left_paren
,
12224 $this->_expression
,
12225 $this->_right_paren
,
12226 $this->_left_brace
,
12228 $this->_right_brace
);
12230 public function with_left_paren(EditableSyntax
$left_paren): SwitchStatement
{
12231 return new SwitchStatement(
12234 $this->_expression
,
12235 $this->_right_paren
,
12236 $this->_left_brace
,
12238 $this->_right_brace
);
12240 public function with_expression(EditableSyntax
$expression): SwitchStatement
{
12241 return new SwitchStatement(
12243 $this->_left_paren
,
12245 $this->_right_paren
,
12246 $this->_left_brace
,
12248 $this->_right_brace
);
12250 public function with_right_paren(EditableSyntax
$right_paren): SwitchStatement
{
12251 return new SwitchStatement(
12253 $this->_left_paren
,
12254 $this->_expression
,
12256 $this->_left_brace
,
12258 $this->_right_brace
);
12260 public function with_left_brace(EditableSyntax
$left_brace): SwitchStatement
{
12261 return new SwitchStatement(
12263 $this->_left_paren
,
12264 $this->_expression
,
12265 $this->_right_paren
,
12268 $this->_right_brace
);
12270 public function with_sections(EditableSyntax
$sections): SwitchStatement
{
12271 return new SwitchStatement(
12273 $this->_left_paren
,
12274 $this->_expression
,
12275 $this->_right_paren
,
12276 $this->_left_brace
,
12278 $this->_right_brace
);
12280 public function with_right_brace(EditableSyntax
$right_brace): SwitchStatement
{
12281 return new SwitchStatement(
12283 $this->_left_paren
,
12284 $this->_expression
,
12285 $this->_right_paren
,
12286 $this->_left_brace
,
12291 public function rewrite(
12293 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
12294 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
12295 $new_parents = $parents ??
[];
12296 array_push($new_parents, $this);
12297 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
12298 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
12299 $expression = $this->expression()->rewrite($rewriter, $new_parents);
12300 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
12301 $left_brace = $this->left_brace()->rewrite($rewriter, $new_parents);
12302 $sections = $this->sections()->rewrite($rewriter, $new_parents);
12303 $right_brace = $this->right_brace()->rewrite($rewriter, $new_parents);
12305 $keyword === $this->keyword() &&
12306 $left_paren === $this->left_paren() &&
12307 $expression === $this->expression() &&
12308 $right_paren === $this->right_paren() &&
12309 $left_brace === $this->left_brace() &&
12310 $sections === $this->sections() &&
12311 $right_brace === $this->right_brace()) {
12312 return $rewriter($this, $parents ??
[]);
12314 return $rewriter(new SwitchStatement(
12321 $right_brace), $parents ??
[]);
12325 public static function from_json(mixed $json, int $position, string $source) {
12326 $keyword = EditableSyntax
::from_json(
12327 $json->switch_keyword
, $position, $source);
12328 $position +
= $keyword->width();
12329 $left_paren = EditableSyntax
::from_json(
12330 $json->switch_left_paren
, $position, $source);
12331 $position +
= $left_paren->width();
12332 $expression = EditableSyntax
::from_json(
12333 $json->switch_expression
, $position, $source);
12334 $position +
= $expression->width();
12335 $right_paren = EditableSyntax
::from_json(
12336 $json->switch_right_paren
, $position, $source);
12337 $position +
= $right_paren->width();
12338 $left_brace = EditableSyntax
::from_json(
12339 $json->switch_left_brace
, $position, $source);
12340 $position +
= $left_brace->width();
12341 $sections = EditableSyntax
::from_json(
12342 $json->switch_sections
, $position, $source);
12343 $position +
= $sections->width();
12344 $right_brace = EditableSyntax
::from_json(
12345 $json->switch_right_brace
, $position, $source);
12346 $position +
= $right_brace->width();
12347 return new SwitchStatement(
12356 public function children(): Generator
<string, EditableSyntax
, void
> {
12357 yield
$this->_keyword
;
12358 yield
$this->_left_paren
;
12359 yield
$this->_expression
;
12360 yield
$this->_right_paren
;
12361 yield
$this->_left_brace
;
12362 yield
$this->_sections
;
12363 yield
$this->_right_brace
;
12367 final class SwitchSection
extends EditableSyntax
{
12368 private EditableSyntax
$_labels;
12369 private EditableSyntax
$_statements;
12370 private EditableSyntax
$_fallthrough;
12371 public function __construct(
12372 EditableSyntax
$labels,
12373 EditableSyntax
$statements,
12374 EditableSyntax
$fallthrough) {
12375 parent
::__construct('switch_section');
12376 $this->_labels
= $labels;
12377 $this->_statements
= $statements;
12378 $this->_fallthrough
= $fallthrough;
12380 public function labels(): EditableSyntax
{
12381 return $this->_labels
;
12383 public function statements(): EditableSyntax
{
12384 return $this->_statements
;
12386 public function fallthrough(): EditableSyntax
{
12387 return $this->_fallthrough
;
12389 public function with_labels(EditableSyntax
$labels): SwitchSection
{
12390 return new SwitchSection(
12392 $this->_statements
,
12393 $this->_fallthrough
);
12395 public function with_statements(EditableSyntax
$statements): SwitchSection
{
12396 return new SwitchSection(
12399 $this->_fallthrough
);
12401 public function with_fallthrough(EditableSyntax
$fallthrough): SwitchSection
{
12402 return new SwitchSection(
12404 $this->_statements
,
12408 public function rewrite(
12410 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
12411 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
12412 $new_parents = $parents ??
[];
12413 array_push($new_parents, $this);
12414 $labels = $this->labels()->rewrite($rewriter, $new_parents);
12415 $statements = $this->statements()->rewrite($rewriter, $new_parents);
12416 $fallthrough = $this->fallthrough()->rewrite($rewriter, $new_parents);
12418 $labels === $this->labels() &&
12419 $statements === $this->statements() &&
12420 $fallthrough === $this->fallthrough()) {
12421 return $rewriter($this, $parents ??
[]);
12423 return $rewriter(new SwitchSection(
12426 $fallthrough), $parents ??
[]);
12430 public static function from_json(mixed $json, int $position, string $source) {
12431 $labels = EditableSyntax
::from_json(
12432 $json->switch_section_labels
, $position, $source);
12433 $position +
= $labels->width();
12434 $statements = EditableSyntax
::from_json(
12435 $json->switch_section_statements
, $position, $source);
12436 $position +
= $statements->width();
12437 $fallthrough = EditableSyntax
::from_json(
12438 $json->switch_section_fallthrough
, $position, $source);
12439 $position +
= $fallthrough->width();
12440 return new SwitchSection(
12445 public function children(): Generator
<string, EditableSyntax
, void
> {
12446 yield
$this->_labels
;
12447 yield
$this->_statements
;
12448 yield
$this->_fallthrough
;
12452 final class SwitchFallthrough
extends EditableSyntax
{
12453 private EditableSyntax
$_keyword;
12454 private EditableSyntax
$_semicolon;
12455 public function __construct(
12456 EditableSyntax
$keyword,
12457 EditableSyntax
$semicolon) {
12458 parent
::__construct('switch_fallthrough');
12459 $this->_keyword
= $keyword;
12460 $this->_semicolon
= $semicolon;
12462 public function keyword(): EditableSyntax
{
12463 return $this->_keyword
;
12465 public function semicolon(): EditableSyntax
{
12466 return $this->_semicolon
;
12468 public function with_keyword(EditableSyntax
$keyword): SwitchFallthrough
{
12469 return new SwitchFallthrough(
12471 $this->_semicolon
);
12473 public function with_semicolon(EditableSyntax
$semicolon): SwitchFallthrough
{
12474 return new SwitchFallthrough(
12479 public function rewrite(
12481 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
12482 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
12483 $new_parents = $parents ??
[];
12484 array_push($new_parents, $this);
12485 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
12486 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
12488 $keyword === $this->keyword() &&
12489 $semicolon === $this->semicolon()) {
12490 return $rewriter($this, $parents ??
[]);
12492 return $rewriter(new SwitchFallthrough(
12494 $semicolon), $parents ??
[]);
12498 public static function from_json(mixed $json, int $position, string $source) {
12499 $keyword = EditableSyntax
::from_json(
12500 $json->fallthrough_keyword
, $position, $source);
12501 $position +
= $keyword->width();
12502 $semicolon = EditableSyntax
::from_json(
12503 $json->fallthrough_semicolon
, $position, $source);
12504 $position +
= $semicolon->width();
12505 return new SwitchFallthrough(
12509 public function children(): Generator
<string, EditableSyntax
, void
> {
12510 yield
$this->_keyword
;
12511 yield
$this->_semicolon
;
12515 final class CaseLabel
extends EditableSyntax
{
12516 private EditableSyntax
$_keyword;
12517 private EditableSyntax
$_expression;
12518 private EditableSyntax
$_colon;
12519 public function __construct(
12520 EditableSyntax
$keyword,
12521 EditableSyntax
$expression,
12522 EditableSyntax
$colon) {
12523 parent
::__construct('case_label');
12524 $this->_keyword
= $keyword;
12525 $this->_expression
= $expression;
12526 $this->_colon
= $colon;
12528 public function keyword(): EditableSyntax
{
12529 return $this->_keyword
;
12531 public function expression(): EditableSyntax
{
12532 return $this->_expression
;
12534 public function colon(): EditableSyntax
{
12535 return $this->_colon
;
12537 public function with_keyword(EditableSyntax
$keyword): CaseLabel
{
12538 return new CaseLabel(
12540 $this->_expression
,
12543 public function with_expression(EditableSyntax
$expression): CaseLabel
{
12544 return new CaseLabel(
12549 public function with_colon(EditableSyntax
$colon): CaseLabel
{
12550 return new CaseLabel(
12552 $this->_expression
,
12556 public function rewrite(
12558 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
12559 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
12560 $new_parents = $parents ??
[];
12561 array_push($new_parents, $this);
12562 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
12563 $expression = $this->expression()->rewrite($rewriter, $new_parents);
12564 $colon = $this->colon()->rewrite($rewriter, $new_parents);
12566 $keyword === $this->keyword() &&
12567 $expression === $this->expression() &&
12568 $colon === $this->colon()) {
12569 return $rewriter($this, $parents ??
[]);
12571 return $rewriter(new CaseLabel(
12574 $colon), $parents ??
[]);
12578 public static function from_json(mixed $json, int $position, string $source) {
12579 $keyword = EditableSyntax
::from_json(
12580 $json->case_keyword
, $position, $source);
12581 $position +
= $keyword->width();
12582 $expression = EditableSyntax
::from_json(
12583 $json->case_expression
, $position, $source);
12584 $position +
= $expression->width();
12585 $colon = EditableSyntax
::from_json(
12586 $json->case_colon
, $position, $source);
12587 $position +
= $colon->width();
12588 return new CaseLabel(
12593 public function children(): Generator
<string, EditableSyntax
, void
> {
12594 yield
$this->_keyword
;
12595 yield
$this->_expression
;
12596 yield
$this->_colon
;
12600 final class DefaultLabel
extends EditableSyntax
{
12601 private EditableSyntax
$_keyword;
12602 private EditableSyntax
$_colon;
12603 public function __construct(
12604 EditableSyntax
$keyword,
12605 EditableSyntax
$colon) {
12606 parent
::__construct('default_label');
12607 $this->_keyword
= $keyword;
12608 $this->_colon
= $colon;
12610 public function keyword(): EditableSyntax
{
12611 return $this->_keyword
;
12613 public function colon(): EditableSyntax
{
12614 return $this->_colon
;
12616 public function with_keyword(EditableSyntax
$keyword): DefaultLabel
{
12617 return new DefaultLabel(
12621 public function with_colon(EditableSyntax
$colon): DefaultLabel
{
12622 return new DefaultLabel(
12627 public function rewrite(
12629 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
12630 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
12631 $new_parents = $parents ??
[];
12632 array_push($new_parents, $this);
12633 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
12634 $colon = $this->colon()->rewrite($rewriter, $new_parents);
12636 $keyword === $this->keyword() &&
12637 $colon === $this->colon()) {
12638 return $rewriter($this, $parents ??
[]);
12640 return $rewriter(new DefaultLabel(
12642 $colon), $parents ??
[]);
12646 public static function from_json(mixed $json, int $position, string $source) {
12647 $keyword = EditableSyntax
::from_json(
12648 $json->default_keyword
, $position, $source);
12649 $position +
= $keyword->width();
12650 $colon = EditableSyntax
::from_json(
12651 $json->default_colon
, $position, $source);
12652 $position +
= $colon->width();
12653 return new DefaultLabel(
12657 public function children(): Generator
<string, EditableSyntax
, void
> {
12658 yield
$this->_keyword
;
12659 yield
$this->_colon
;
12663 final class ReturnStatement
extends EditableSyntax
{
12664 private EditableSyntax
$_keyword;
12665 private EditableSyntax
$_expression;
12666 private EditableSyntax
$_semicolon;
12667 public function __construct(
12668 EditableSyntax
$keyword,
12669 EditableSyntax
$expression,
12670 EditableSyntax
$semicolon) {
12671 parent
::__construct('return_statement');
12672 $this->_keyword
= $keyword;
12673 $this->_expression
= $expression;
12674 $this->_semicolon
= $semicolon;
12676 public function keyword(): EditableSyntax
{
12677 return $this->_keyword
;
12679 public function expression(): EditableSyntax
{
12680 return $this->_expression
;
12682 public function semicolon(): EditableSyntax
{
12683 return $this->_semicolon
;
12685 public function with_keyword(EditableSyntax
$keyword): ReturnStatement
{
12686 return new ReturnStatement(
12688 $this->_expression
,
12689 $this->_semicolon
);
12691 public function with_expression(EditableSyntax
$expression): ReturnStatement
{
12692 return new ReturnStatement(
12695 $this->_semicolon
);
12697 public function with_semicolon(EditableSyntax
$semicolon): ReturnStatement
{
12698 return new ReturnStatement(
12700 $this->_expression
,
12704 public function rewrite(
12706 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
12707 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
12708 $new_parents = $parents ??
[];
12709 array_push($new_parents, $this);
12710 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
12711 $expression = $this->expression()->rewrite($rewriter, $new_parents);
12712 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
12714 $keyword === $this->keyword() &&
12715 $expression === $this->expression() &&
12716 $semicolon === $this->semicolon()) {
12717 return $rewriter($this, $parents ??
[]);
12719 return $rewriter(new ReturnStatement(
12722 $semicolon), $parents ??
[]);
12726 public static function from_json(mixed $json, int $position, string $source) {
12727 $keyword = EditableSyntax
::from_json(
12728 $json->return_keyword
, $position, $source);
12729 $position +
= $keyword->width();
12730 $expression = EditableSyntax
::from_json(
12731 $json->return_expression
, $position, $source);
12732 $position +
= $expression->width();
12733 $semicolon = EditableSyntax
::from_json(
12734 $json->return_semicolon
, $position, $source);
12735 $position +
= $semicolon->width();
12736 return new ReturnStatement(
12741 public function children(): Generator
<string, EditableSyntax
, void
> {
12742 yield
$this->_keyword
;
12743 yield
$this->_expression
;
12744 yield
$this->_semicolon
;
12748 final class GotoLabel
extends EditableSyntax
{
12749 private EditableSyntax
$_name;
12750 private EditableSyntax
$_colon;
12751 public function __construct(
12752 EditableSyntax
$name,
12753 EditableSyntax
$colon) {
12754 parent
::__construct('goto_label');
12755 $this->_name
= $name;
12756 $this->_colon
= $colon;
12758 public function name(): EditableSyntax
{
12759 return $this->_name
;
12761 public function colon(): EditableSyntax
{
12762 return $this->_colon
;
12764 public function with_name(EditableSyntax
$name): GotoLabel
{
12765 return new GotoLabel(
12769 public function with_colon(EditableSyntax
$colon): GotoLabel
{
12770 return new GotoLabel(
12775 public function rewrite(
12777 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
12778 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
12779 $new_parents = $parents ??
[];
12780 array_push($new_parents, $this);
12781 $name = $this->name()->rewrite($rewriter, $new_parents);
12782 $colon = $this->colon()->rewrite($rewriter, $new_parents);
12784 $name === $this->name() &&
12785 $colon === $this->colon()) {
12786 return $rewriter($this, $parents ??
[]);
12788 return $rewriter(new GotoLabel(
12790 $colon), $parents ??
[]);
12794 public static function from_json(mixed $json, int $position, string $source) {
12795 $name = EditableSyntax
::from_json(
12796 $json->goto_label_name
, $position, $source);
12797 $position +
= $name->width();
12798 $colon = EditableSyntax
::from_json(
12799 $json->goto_label_colon
, $position, $source);
12800 $position +
= $colon->width();
12801 return new GotoLabel(
12805 public function children(): Generator
<string, EditableSyntax
, void
> {
12806 yield
$this->_name
;
12807 yield
$this->_colon
;
12811 final class GotoStatement
extends EditableSyntax
{
12812 private EditableSyntax
$_keyword;
12813 private EditableSyntax
$_label_name;
12814 private EditableSyntax
$_semicolon;
12815 public function __construct(
12816 EditableSyntax
$keyword,
12817 EditableSyntax
$label_name,
12818 EditableSyntax
$semicolon) {
12819 parent
::__construct('goto_statement');
12820 $this->_keyword
= $keyword;
12821 $this->_label_name
= $label_name;
12822 $this->_semicolon
= $semicolon;
12824 public function keyword(): EditableSyntax
{
12825 return $this->_keyword
;
12827 public function label_name(): EditableSyntax
{
12828 return $this->_label_name
;
12830 public function semicolon(): EditableSyntax
{
12831 return $this->_semicolon
;
12833 public function with_keyword(EditableSyntax
$keyword): GotoStatement
{
12834 return new GotoStatement(
12836 $this->_label_name
,
12837 $this->_semicolon
);
12839 public function with_label_name(EditableSyntax
$label_name): GotoStatement
{
12840 return new GotoStatement(
12843 $this->_semicolon
);
12845 public function with_semicolon(EditableSyntax
$semicolon): GotoStatement
{
12846 return new GotoStatement(
12848 $this->_label_name
,
12852 public function rewrite(
12854 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
12855 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
12856 $new_parents = $parents ??
[];
12857 array_push($new_parents, $this);
12858 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
12859 $label_name = $this->label_name()->rewrite($rewriter, $new_parents);
12860 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
12862 $keyword === $this->keyword() &&
12863 $label_name === $this->label_name() &&
12864 $semicolon === $this->semicolon()) {
12865 return $rewriter($this, $parents ??
[]);
12867 return $rewriter(new GotoStatement(
12870 $semicolon), $parents ??
[]);
12874 public static function from_json(mixed $json, int $position, string $source) {
12875 $keyword = EditableSyntax
::from_json(
12876 $json->goto_statement_keyword
, $position, $source);
12877 $position +
= $keyword->width();
12878 $label_name = EditableSyntax
::from_json(
12879 $json->goto_statement_label_name
, $position, $source);
12880 $position +
= $label_name->width();
12881 $semicolon = EditableSyntax
::from_json(
12882 $json->goto_statement_semicolon
, $position, $source);
12883 $position +
= $semicolon->width();
12884 return new GotoStatement(
12889 public function children(): Generator
<string, EditableSyntax
, void
> {
12890 yield
$this->_keyword
;
12891 yield
$this->_label_name
;
12892 yield
$this->_semicolon
;
12896 final class ThrowStatement
extends EditableSyntax
{
12897 private EditableSyntax
$_keyword;
12898 private EditableSyntax
$_expression;
12899 private EditableSyntax
$_semicolon;
12900 public function __construct(
12901 EditableSyntax
$keyword,
12902 EditableSyntax
$expression,
12903 EditableSyntax
$semicolon) {
12904 parent
::__construct('throw_statement');
12905 $this->_keyword
= $keyword;
12906 $this->_expression
= $expression;
12907 $this->_semicolon
= $semicolon;
12909 public function keyword(): EditableSyntax
{
12910 return $this->_keyword
;
12912 public function expression(): EditableSyntax
{
12913 return $this->_expression
;
12915 public function semicolon(): EditableSyntax
{
12916 return $this->_semicolon
;
12918 public function with_keyword(EditableSyntax
$keyword): ThrowStatement
{
12919 return new ThrowStatement(
12921 $this->_expression
,
12922 $this->_semicolon
);
12924 public function with_expression(EditableSyntax
$expression): ThrowStatement
{
12925 return new ThrowStatement(
12928 $this->_semicolon
);
12930 public function with_semicolon(EditableSyntax
$semicolon): ThrowStatement
{
12931 return new ThrowStatement(
12933 $this->_expression
,
12937 public function rewrite(
12939 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
12940 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
12941 $new_parents = $parents ??
[];
12942 array_push($new_parents, $this);
12943 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
12944 $expression = $this->expression()->rewrite($rewriter, $new_parents);
12945 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
12947 $keyword === $this->keyword() &&
12948 $expression === $this->expression() &&
12949 $semicolon === $this->semicolon()) {
12950 return $rewriter($this, $parents ??
[]);
12952 return $rewriter(new ThrowStatement(
12955 $semicolon), $parents ??
[]);
12959 public static function from_json(mixed $json, int $position, string $source) {
12960 $keyword = EditableSyntax
::from_json(
12961 $json->throw_keyword
, $position, $source);
12962 $position +
= $keyword->width();
12963 $expression = EditableSyntax
::from_json(
12964 $json->throw_expression
, $position, $source);
12965 $position +
= $expression->width();
12966 $semicolon = EditableSyntax
::from_json(
12967 $json->throw_semicolon
, $position, $source);
12968 $position +
= $semicolon->width();
12969 return new ThrowStatement(
12974 public function children(): Generator
<string, EditableSyntax
, void
> {
12975 yield
$this->_keyword
;
12976 yield
$this->_expression
;
12977 yield
$this->_semicolon
;
12981 final class BreakStatement
extends EditableSyntax
{
12982 private EditableSyntax
$_keyword;
12983 private EditableSyntax
$_level;
12984 private EditableSyntax
$_semicolon;
12985 public function __construct(
12986 EditableSyntax
$keyword,
12987 EditableSyntax
$level,
12988 EditableSyntax
$semicolon) {
12989 parent
::__construct('break_statement');
12990 $this->_keyword
= $keyword;
12991 $this->_level
= $level;
12992 $this->_semicolon
= $semicolon;
12994 public function keyword(): EditableSyntax
{
12995 return $this->_keyword
;
12997 public function level(): EditableSyntax
{
12998 return $this->_level
;
13000 public function semicolon(): EditableSyntax
{
13001 return $this->_semicolon
;
13003 public function with_keyword(EditableSyntax
$keyword): BreakStatement
{
13004 return new BreakStatement(
13007 $this->_semicolon
);
13009 public function with_level(EditableSyntax
$level): BreakStatement
{
13010 return new BreakStatement(
13013 $this->_semicolon
);
13015 public function with_semicolon(EditableSyntax
$semicolon): BreakStatement
{
13016 return new BreakStatement(
13022 public function rewrite(
13024 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
13025 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
13026 $new_parents = $parents ??
[];
13027 array_push($new_parents, $this);
13028 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
13029 $level = $this->level()->rewrite($rewriter, $new_parents);
13030 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
13032 $keyword === $this->keyword() &&
13033 $level === $this->level() &&
13034 $semicolon === $this->semicolon()) {
13035 return $rewriter($this, $parents ??
[]);
13037 return $rewriter(new BreakStatement(
13040 $semicolon), $parents ??
[]);
13044 public static function from_json(mixed $json, int $position, string $source) {
13045 $keyword = EditableSyntax
::from_json(
13046 $json->break_keyword
, $position, $source);
13047 $position +
= $keyword->width();
13048 $level = EditableSyntax
::from_json(
13049 $json->break_level
, $position, $source);
13050 $position +
= $level->width();
13051 $semicolon = EditableSyntax
::from_json(
13052 $json->break_semicolon
, $position, $source);
13053 $position +
= $semicolon->width();
13054 return new BreakStatement(
13059 public function children(): Generator
<string, EditableSyntax
, void
> {
13060 yield
$this->_keyword
;
13061 yield
$this->_level
;
13062 yield
$this->_semicolon
;
13066 final class ContinueStatement
extends EditableSyntax
{
13067 private EditableSyntax
$_keyword;
13068 private EditableSyntax
$_level;
13069 private EditableSyntax
$_semicolon;
13070 public function __construct(
13071 EditableSyntax
$keyword,
13072 EditableSyntax
$level,
13073 EditableSyntax
$semicolon) {
13074 parent
::__construct('continue_statement');
13075 $this->_keyword
= $keyword;
13076 $this->_level
= $level;
13077 $this->_semicolon
= $semicolon;
13079 public function keyword(): EditableSyntax
{
13080 return $this->_keyword
;
13082 public function level(): EditableSyntax
{
13083 return $this->_level
;
13085 public function semicolon(): EditableSyntax
{
13086 return $this->_semicolon
;
13088 public function with_keyword(EditableSyntax
$keyword): ContinueStatement
{
13089 return new ContinueStatement(
13092 $this->_semicolon
);
13094 public function with_level(EditableSyntax
$level): ContinueStatement
{
13095 return new ContinueStatement(
13098 $this->_semicolon
);
13100 public function with_semicolon(EditableSyntax
$semicolon): ContinueStatement
{
13101 return new ContinueStatement(
13107 public function rewrite(
13109 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
13110 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
13111 $new_parents = $parents ??
[];
13112 array_push($new_parents, $this);
13113 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
13114 $level = $this->level()->rewrite($rewriter, $new_parents);
13115 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
13117 $keyword === $this->keyword() &&
13118 $level === $this->level() &&
13119 $semicolon === $this->semicolon()) {
13120 return $rewriter($this, $parents ??
[]);
13122 return $rewriter(new ContinueStatement(
13125 $semicolon), $parents ??
[]);
13129 public static function from_json(mixed $json, int $position, string $source) {
13130 $keyword = EditableSyntax
::from_json(
13131 $json->continue_keyword
, $position, $source);
13132 $position +
= $keyword->width();
13133 $level = EditableSyntax
::from_json(
13134 $json->continue_level
, $position, $source);
13135 $position +
= $level->width();
13136 $semicolon = EditableSyntax
::from_json(
13137 $json->continue_semicolon
, $position, $source);
13138 $position +
= $semicolon->width();
13139 return new ContinueStatement(
13144 public function children(): Generator
<string, EditableSyntax
, void
> {
13145 yield
$this->_keyword
;
13146 yield
$this->_level
;
13147 yield
$this->_semicolon
;
13151 final class FunctionStaticStatement
extends EditableSyntax
{
13152 private EditableSyntax
$_static_keyword;
13153 private EditableSyntax
$_declarations;
13154 private EditableSyntax
$_semicolon;
13155 public function __construct(
13156 EditableSyntax
$static_keyword,
13157 EditableSyntax
$declarations,
13158 EditableSyntax
$semicolon) {
13159 parent
::__construct('function_static_statement');
13160 $this->_static_keyword
= $static_keyword;
13161 $this->_declarations
= $declarations;
13162 $this->_semicolon
= $semicolon;
13164 public function static_keyword(): EditableSyntax
{
13165 return $this->_static_keyword
;
13167 public function declarations(): EditableSyntax
{
13168 return $this->_declarations
;
13170 public function semicolon(): EditableSyntax
{
13171 return $this->_semicolon
;
13173 public function with_static_keyword(EditableSyntax
$static_keyword): FunctionStaticStatement
{
13174 return new FunctionStaticStatement(
13176 $this->_declarations
,
13177 $this->_semicolon
);
13179 public function with_declarations(EditableSyntax
$declarations): FunctionStaticStatement
{
13180 return new FunctionStaticStatement(
13181 $this->_static_keyword
,
13183 $this->_semicolon
);
13185 public function with_semicolon(EditableSyntax
$semicolon): FunctionStaticStatement
{
13186 return new FunctionStaticStatement(
13187 $this->_static_keyword
,
13188 $this->_declarations
,
13192 public function rewrite(
13194 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
13195 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
13196 $new_parents = $parents ??
[];
13197 array_push($new_parents, $this);
13198 $static_keyword = $this->static_keyword()->rewrite($rewriter, $new_parents);
13199 $declarations = $this->declarations()->rewrite($rewriter, $new_parents);
13200 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
13202 $static_keyword === $this->static_keyword() &&
13203 $declarations === $this->declarations() &&
13204 $semicolon === $this->semicolon()) {
13205 return $rewriter($this, $parents ??
[]);
13207 return $rewriter(new FunctionStaticStatement(
13210 $semicolon), $parents ??
[]);
13214 public static function from_json(mixed $json, int $position, string $source) {
13215 $static_keyword = EditableSyntax
::from_json(
13216 $json->static_static_keyword
, $position, $source);
13217 $position +
= $static_keyword->width();
13218 $declarations = EditableSyntax
::from_json(
13219 $json->static_declarations
, $position, $source);
13220 $position +
= $declarations->width();
13221 $semicolon = EditableSyntax
::from_json(
13222 $json->static_semicolon
, $position, $source);
13223 $position +
= $semicolon->width();
13224 return new FunctionStaticStatement(
13229 public function children(): Generator
<string, EditableSyntax
, void
> {
13230 yield
$this->_static_keyword
;
13231 yield
$this->_declarations
;
13232 yield
$this->_semicolon
;
13236 final class StaticDeclarator
extends EditableSyntax
{
13237 private EditableSyntax
$_name;
13238 private EditableSyntax
$_initializer;
13239 public function __construct(
13240 EditableSyntax
$name,
13241 EditableSyntax
$initializer) {
13242 parent
::__construct('static_declarator');
13243 $this->_name
= $name;
13244 $this->_initializer
= $initializer;
13246 public function name(): EditableSyntax
{
13247 return $this->_name
;
13249 public function initializer(): EditableSyntax
{
13250 return $this->_initializer
;
13252 public function with_name(EditableSyntax
$name): StaticDeclarator
{
13253 return new StaticDeclarator(
13255 $this->_initializer
);
13257 public function with_initializer(EditableSyntax
$initializer): StaticDeclarator
{
13258 return new StaticDeclarator(
13263 public function rewrite(
13265 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
13266 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
13267 $new_parents = $parents ??
[];
13268 array_push($new_parents, $this);
13269 $name = $this->name()->rewrite($rewriter, $new_parents);
13270 $initializer = $this->initializer()->rewrite($rewriter, $new_parents);
13272 $name === $this->name() &&
13273 $initializer === $this->initializer()) {
13274 return $rewriter($this, $parents ??
[]);
13276 return $rewriter(new StaticDeclarator(
13278 $initializer), $parents ??
[]);
13282 public static function from_json(mixed $json, int $position, string $source) {
13283 $name = EditableSyntax
::from_json(
13284 $json->static_name
, $position, $source);
13285 $position +
= $name->width();
13286 $initializer = EditableSyntax
::from_json(
13287 $json->static_initializer
, $position, $source);
13288 $position +
= $initializer->width();
13289 return new StaticDeclarator(
13293 public function children(): Generator
<string, EditableSyntax
, void
> {
13294 yield
$this->_name
;
13295 yield
$this->_initializer
;
13299 final class EchoStatement
extends EditableSyntax
{
13300 private EditableSyntax
$_keyword;
13301 private EditableSyntax
$_expressions;
13302 private EditableSyntax
$_semicolon;
13303 public function __construct(
13304 EditableSyntax
$keyword,
13305 EditableSyntax
$expressions,
13306 EditableSyntax
$semicolon) {
13307 parent
::__construct('echo_statement');
13308 $this->_keyword
= $keyword;
13309 $this->_expressions
= $expressions;
13310 $this->_semicolon
= $semicolon;
13312 public function keyword(): EditableSyntax
{
13313 return $this->_keyword
;
13315 public function expressions(): EditableSyntax
{
13316 return $this->_expressions
;
13318 public function semicolon(): EditableSyntax
{
13319 return $this->_semicolon
;
13321 public function with_keyword(EditableSyntax
$keyword): EchoStatement
{
13322 return new EchoStatement(
13324 $this->_expressions
,
13325 $this->_semicolon
);
13327 public function with_expressions(EditableSyntax
$expressions): EchoStatement
{
13328 return new EchoStatement(
13331 $this->_semicolon
);
13333 public function with_semicolon(EditableSyntax
$semicolon): EchoStatement
{
13334 return new EchoStatement(
13336 $this->_expressions
,
13340 public function rewrite(
13342 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
13343 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
13344 $new_parents = $parents ??
[];
13345 array_push($new_parents, $this);
13346 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
13347 $expressions = $this->expressions()->rewrite($rewriter, $new_parents);
13348 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
13350 $keyword === $this->keyword() &&
13351 $expressions === $this->expressions() &&
13352 $semicolon === $this->semicolon()) {
13353 return $rewriter($this, $parents ??
[]);
13355 return $rewriter(new EchoStatement(
13358 $semicolon), $parents ??
[]);
13362 public static function from_json(mixed $json, int $position, string $source) {
13363 $keyword = EditableSyntax
::from_json(
13364 $json->echo_keyword
, $position, $source);
13365 $position +
= $keyword->width();
13366 $expressions = EditableSyntax
::from_json(
13367 $json->echo_expressions
, $position, $source);
13368 $position +
= $expressions->width();
13369 $semicolon = EditableSyntax
::from_json(
13370 $json->echo_semicolon
, $position, $source);
13371 $position +
= $semicolon->width();
13372 return new EchoStatement(
13377 public function children(): Generator
<string, EditableSyntax
, void
> {
13378 yield
$this->_keyword
;
13379 yield
$this->_expressions
;
13380 yield
$this->_semicolon
;
13384 final class GlobalStatement
extends EditableSyntax
{
13385 private EditableSyntax
$_keyword;
13386 private EditableSyntax
$_variables;
13387 private EditableSyntax
$_semicolon;
13388 public function __construct(
13389 EditableSyntax
$keyword,
13390 EditableSyntax
$variables,
13391 EditableSyntax
$semicolon) {
13392 parent
::__construct('global_statement');
13393 $this->_keyword
= $keyword;
13394 $this->_variables
= $variables;
13395 $this->_semicolon
= $semicolon;
13397 public function keyword(): EditableSyntax
{
13398 return $this->_keyword
;
13400 public function variables(): EditableSyntax
{
13401 return $this->_variables
;
13403 public function semicolon(): EditableSyntax
{
13404 return $this->_semicolon
;
13406 public function with_keyword(EditableSyntax
$keyword): GlobalStatement
{
13407 return new GlobalStatement(
13410 $this->_semicolon
);
13412 public function with_variables(EditableSyntax
$variables): GlobalStatement
{
13413 return new GlobalStatement(
13416 $this->_semicolon
);
13418 public function with_semicolon(EditableSyntax
$semicolon): GlobalStatement
{
13419 return new GlobalStatement(
13425 public function rewrite(
13427 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
13428 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
13429 $new_parents = $parents ??
[];
13430 array_push($new_parents, $this);
13431 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
13432 $variables = $this->variables()->rewrite($rewriter, $new_parents);
13433 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
13435 $keyword === $this->keyword() &&
13436 $variables === $this->variables() &&
13437 $semicolon === $this->semicolon()) {
13438 return $rewriter($this, $parents ??
[]);
13440 return $rewriter(new GlobalStatement(
13443 $semicolon), $parents ??
[]);
13447 public static function from_json(mixed $json, int $position, string $source) {
13448 $keyword = EditableSyntax
::from_json(
13449 $json->global_keyword
, $position, $source);
13450 $position +
= $keyword->width();
13451 $variables = EditableSyntax
::from_json(
13452 $json->global_variables
, $position, $source);
13453 $position +
= $variables->width();
13454 $semicolon = EditableSyntax
::from_json(
13455 $json->global_semicolon
, $position, $source);
13456 $position +
= $semicolon->width();
13457 return new GlobalStatement(
13462 public function children(): Generator
<string, EditableSyntax
, void
> {
13463 yield
$this->_keyword
;
13464 yield
$this->_variables
;
13465 yield
$this->_semicolon
;
13469 final class SimpleInitializer
extends EditableSyntax
{
13470 private EditableSyntax
$_equal;
13471 private EditableSyntax
$_value;
13472 public function __construct(
13473 EditableSyntax
$equal,
13474 EditableSyntax
$value) {
13475 parent
::__construct('simple_initializer');
13476 $this->_equal
= $equal;
13477 $this->_value
= $value;
13479 public function equal(): EditableSyntax
{
13480 return $this->_equal
;
13482 public function value(): EditableSyntax
{
13483 return $this->_value
;
13485 public function with_equal(EditableSyntax
$equal): SimpleInitializer
{
13486 return new SimpleInitializer(
13490 public function with_value(EditableSyntax
$value): SimpleInitializer
{
13491 return new SimpleInitializer(
13496 public function rewrite(
13498 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
13499 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
13500 $new_parents = $parents ??
[];
13501 array_push($new_parents, $this);
13502 $equal = $this->equal()->rewrite($rewriter, $new_parents);
13503 $value = $this->value()->rewrite($rewriter, $new_parents);
13505 $equal === $this->equal() &&
13506 $value === $this->value()) {
13507 return $rewriter($this, $parents ??
[]);
13509 return $rewriter(new SimpleInitializer(
13511 $value), $parents ??
[]);
13515 public static function from_json(mixed $json, int $position, string $source) {
13516 $equal = EditableSyntax
::from_json(
13517 $json->simple_initializer_equal
, $position, $source);
13518 $position +
= $equal->width();
13519 $value = EditableSyntax
::from_json(
13520 $json->simple_initializer_value
, $position, $source);
13521 $position +
= $value->width();
13522 return new SimpleInitializer(
13526 public function children(): Generator
<string, EditableSyntax
, void
> {
13527 yield
$this->_equal
;
13528 yield
$this->_value
;
13532 final class AnonymousClass
extends EditableSyntax
{
13533 private EditableSyntax
$_class_keyword;
13534 private EditableSyntax
$_left_paren;
13535 private EditableSyntax
$_argument_list;
13536 private EditableSyntax
$_right_paren;
13537 private EditableSyntax
$_extends_keyword;
13538 private EditableSyntax
$_extends_list;
13539 private EditableSyntax
$_implements_keyword;
13540 private EditableSyntax
$_implements_list;
13541 private EditableSyntax
$_body;
13542 public function __construct(
13543 EditableSyntax
$class_keyword,
13544 EditableSyntax
$left_paren,
13545 EditableSyntax
$argument_list,
13546 EditableSyntax
$right_paren,
13547 EditableSyntax
$extends_keyword,
13548 EditableSyntax
$extends_list,
13549 EditableSyntax
$implements_keyword,
13550 EditableSyntax
$implements_list,
13551 EditableSyntax
$body) {
13552 parent
::__construct('anonymous_class');
13553 $this->_class_keyword
= $class_keyword;
13554 $this->_left_paren
= $left_paren;
13555 $this->_argument_list
= $argument_list;
13556 $this->_right_paren
= $right_paren;
13557 $this->_extends_keyword
= $extends_keyword;
13558 $this->_extends_list
= $extends_list;
13559 $this->_implements_keyword
= $implements_keyword;
13560 $this->_implements_list
= $implements_list;
13561 $this->_body
= $body;
13563 public function class_keyword(): EditableSyntax
{
13564 return $this->_class_keyword
;
13566 public function left_paren(): EditableSyntax
{
13567 return $this->_left_paren
;
13569 public function argument_list(): EditableSyntax
{
13570 return $this->_argument_list
;
13572 public function right_paren(): EditableSyntax
{
13573 return $this->_right_paren
;
13575 public function extends_keyword(): EditableSyntax
{
13576 return $this->_extends_keyword
;
13578 public function extends_list(): EditableSyntax
{
13579 return $this->_extends_list
;
13581 public function implements_keyword(): EditableSyntax
{
13582 return $this->_implements_keyword
;
13584 public function implements_list(): EditableSyntax
{
13585 return $this->_implements_list
;
13587 public function body(): EditableSyntax
{
13588 return $this->_body
;
13590 public function with_class_keyword(EditableSyntax
$class_keyword): AnonymousClass
{
13591 return new AnonymousClass(
13593 $this->_left_paren
,
13594 $this->_argument_list
,
13595 $this->_right_paren
,
13596 $this->_extends_keyword
,
13597 $this->_extends_list
,
13598 $this->_implements_keyword
,
13599 $this->_implements_list
,
13602 public function with_left_paren(EditableSyntax
$left_paren): AnonymousClass
{
13603 return new AnonymousClass(
13604 $this->_class_keyword
,
13606 $this->_argument_list
,
13607 $this->_right_paren
,
13608 $this->_extends_keyword
,
13609 $this->_extends_list
,
13610 $this->_implements_keyword
,
13611 $this->_implements_list
,
13614 public function with_argument_list(EditableSyntax
$argument_list): AnonymousClass
{
13615 return new AnonymousClass(
13616 $this->_class_keyword
,
13617 $this->_left_paren
,
13619 $this->_right_paren
,
13620 $this->_extends_keyword
,
13621 $this->_extends_list
,
13622 $this->_implements_keyword
,
13623 $this->_implements_list
,
13626 public function with_right_paren(EditableSyntax
$right_paren): AnonymousClass
{
13627 return new AnonymousClass(
13628 $this->_class_keyword
,
13629 $this->_left_paren
,
13630 $this->_argument_list
,
13632 $this->_extends_keyword
,
13633 $this->_extends_list
,
13634 $this->_implements_keyword
,
13635 $this->_implements_list
,
13638 public function with_extends_keyword(EditableSyntax
$extends_keyword): AnonymousClass
{
13639 return new AnonymousClass(
13640 $this->_class_keyword
,
13641 $this->_left_paren
,
13642 $this->_argument_list
,
13643 $this->_right_paren
,
13645 $this->_extends_list
,
13646 $this->_implements_keyword
,
13647 $this->_implements_list
,
13650 public function with_extends_list(EditableSyntax
$extends_list): AnonymousClass
{
13651 return new AnonymousClass(
13652 $this->_class_keyword
,
13653 $this->_left_paren
,
13654 $this->_argument_list
,
13655 $this->_right_paren
,
13656 $this->_extends_keyword
,
13658 $this->_implements_keyword
,
13659 $this->_implements_list
,
13662 public function with_implements_keyword(EditableSyntax
$implements_keyword): AnonymousClass
{
13663 return new AnonymousClass(
13664 $this->_class_keyword
,
13665 $this->_left_paren
,
13666 $this->_argument_list
,
13667 $this->_right_paren
,
13668 $this->_extends_keyword
,
13669 $this->_extends_list
,
13670 $implements_keyword,
13671 $this->_implements_list
,
13674 public function with_implements_list(EditableSyntax
$implements_list): AnonymousClass
{
13675 return new AnonymousClass(
13676 $this->_class_keyword
,
13677 $this->_left_paren
,
13678 $this->_argument_list
,
13679 $this->_right_paren
,
13680 $this->_extends_keyword
,
13681 $this->_extends_list
,
13682 $this->_implements_keyword
,
13686 public function with_body(EditableSyntax
$body): AnonymousClass
{
13687 return new AnonymousClass(
13688 $this->_class_keyword
,
13689 $this->_left_paren
,
13690 $this->_argument_list
,
13691 $this->_right_paren
,
13692 $this->_extends_keyword
,
13693 $this->_extends_list
,
13694 $this->_implements_keyword
,
13695 $this->_implements_list
,
13699 public function rewrite(
13701 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
13702 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
13703 $new_parents = $parents ??
[];
13704 array_push($new_parents, $this);
13705 $class_keyword = $this->class_keyword()->rewrite($rewriter, $new_parents);
13706 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
13707 $argument_list = $this->argument_list()->rewrite($rewriter, $new_parents);
13708 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
13709 $extends_keyword = $this->extends_keyword()->rewrite($rewriter, $new_parents);
13710 $extends_list = $this->extends_list()->rewrite($rewriter, $new_parents);
13711 $implements_keyword = $this->implements_keyword()->rewrite($rewriter, $new_parents);
13712 $implements_list = $this->implements_list()->rewrite($rewriter, $new_parents);
13713 $body = $this->body()->rewrite($rewriter, $new_parents);
13715 $class_keyword === $this->class_keyword() &&
13716 $left_paren === $this->left_paren() &&
13717 $argument_list === $this->argument_list() &&
13718 $right_paren === $this->right_paren() &&
13719 $extends_keyword === $this->extends_keyword() &&
13720 $extends_list === $this->extends_list() &&
13721 $implements_keyword === $this->implements_keyword() &&
13722 $implements_list === $this->implements_list() &&
13723 $body === $this->body()) {
13724 return $rewriter($this, $parents ??
[]);
13726 return $rewriter(new AnonymousClass(
13733 $implements_keyword,
13735 $body), $parents ??
[]);
13739 public static function from_json(mixed $json, int $position, string $source) {
13740 $class_keyword = EditableSyntax
::from_json(
13741 $json->anonymous_class_class_keyword
, $position, $source);
13742 $position +
= $class_keyword->width();
13743 $left_paren = EditableSyntax
::from_json(
13744 $json->anonymous_class_left_paren
, $position, $source);
13745 $position +
= $left_paren->width();
13746 $argument_list = EditableSyntax
::from_json(
13747 $json->anonymous_class_argument_list
, $position, $source);
13748 $position +
= $argument_list->width();
13749 $right_paren = EditableSyntax
::from_json(
13750 $json->anonymous_class_right_paren
, $position, $source);
13751 $position +
= $right_paren->width();
13752 $extends_keyword = EditableSyntax
::from_json(
13753 $json->anonymous_class_extends_keyword
, $position, $source);
13754 $position +
= $extends_keyword->width();
13755 $extends_list = EditableSyntax
::from_json(
13756 $json->anonymous_class_extends_list
, $position, $source);
13757 $position +
= $extends_list->width();
13758 $implements_keyword = EditableSyntax
::from_json(
13759 $json->anonymous_class_implements_keyword
, $position, $source);
13760 $position +
= $implements_keyword->width();
13761 $implements_list = EditableSyntax
::from_json(
13762 $json->anonymous_class_implements_list
, $position, $source);
13763 $position +
= $implements_list->width();
13764 $body = EditableSyntax
::from_json(
13765 $json->anonymous_class_body
, $position, $source);
13766 $position +
= $body->width();
13767 return new AnonymousClass(
13774 $implements_keyword,
13778 public function children(): Generator
<string, EditableSyntax
, void
> {
13779 yield
$this->_class_keyword
;
13780 yield
$this->_left_paren
;
13781 yield
$this->_argument_list
;
13782 yield
$this->_right_paren
;
13783 yield
$this->_extends_keyword
;
13784 yield
$this->_extends_list
;
13785 yield
$this->_implements_keyword
;
13786 yield
$this->_implements_list
;
13787 yield
$this->_body
;
13791 final class AnonymousFunction
extends EditableSyntax
{
13792 private EditableSyntax
$_static_keyword;
13793 private EditableSyntax
$_async_keyword;
13794 private EditableSyntax
$_coroutine_keyword;
13795 private EditableSyntax
$_function_keyword;
13796 private EditableSyntax
$_left_paren;
13797 private EditableSyntax
$_parameters;
13798 private EditableSyntax
$_right_paren;
13799 private EditableSyntax
$_colon;
13800 private EditableSyntax
$_type;
13801 private EditableSyntax
$_use;
13802 private EditableSyntax
$_body;
13803 public function __construct(
13804 EditableSyntax
$static_keyword,
13805 EditableSyntax
$async_keyword,
13806 EditableSyntax
$coroutine_keyword,
13807 EditableSyntax
$function_keyword,
13808 EditableSyntax
$left_paren,
13809 EditableSyntax
$parameters,
13810 EditableSyntax
$right_paren,
13811 EditableSyntax
$colon,
13812 EditableSyntax
$type,
13813 EditableSyntax
$use,
13814 EditableSyntax
$body) {
13815 parent
::__construct('anonymous_function');
13816 $this->_static_keyword
= $static_keyword;
13817 $this->_async_keyword
= $async_keyword;
13818 $this->_coroutine_keyword
= $coroutine_keyword;
13819 $this->_function_keyword
= $function_keyword;
13820 $this->_left_paren
= $left_paren;
13821 $this->_parameters
= $parameters;
13822 $this->_right_paren
= $right_paren;
13823 $this->_colon
= $colon;
13824 $this->_type
= $type;
13825 $this->_use
= $use;
13826 $this->_body
= $body;
13828 public function static_keyword(): EditableSyntax
{
13829 return $this->_static_keyword
;
13831 public function async_keyword(): EditableSyntax
{
13832 return $this->_async_keyword
;
13834 public function coroutine_keyword(): EditableSyntax
{
13835 return $this->_coroutine_keyword
;
13837 public function function_keyword(): EditableSyntax
{
13838 return $this->_function_keyword
;
13840 public function left_paren(): EditableSyntax
{
13841 return $this->_left_paren
;
13843 public function parameters(): EditableSyntax
{
13844 return $this->_parameters
;
13846 public function right_paren(): EditableSyntax
{
13847 return $this->_right_paren
;
13849 public function colon(): EditableSyntax
{
13850 return $this->_colon
;
13852 public function type(): EditableSyntax
{
13853 return $this->_type
;
13855 public function use(): EditableSyntax
{
13856 return $this->_use
;
13858 public function body(): EditableSyntax
{
13859 return $this->_body
;
13861 public function with_static_keyword(EditableSyntax
$static_keyword): AnonymousFunction
{
13862 return new AnonymousFunction(
13864 $this->_async_keyword
,
13865 $this->_coroutine_keyword
,
13866 $this->_function_keyword
,
13867 $this->_left_paren
,
13868 $this->_parameters
,
13869 $this->_right_paren
,
13875 public function with_async_keyword(EditableSyntax
$async_keyword): AnonymousFunction
{
13876 return new AnonymousFunction(
13877 $this->_static_keyword
,
13879 $this->_coroutine_keyword
,
13880 $this->_function_keyword
,
13881 $this->_left_paren
,
13882 $this->_parameters
,
13883 $this->_right_paren
,
13889 public function with_coroutine_keyword(EditableSyntax
$coroutine_keyword): AnonymousFunction
{
13890 return new AnonymousFunction(
13891 $this->_static_keyword
,
13892 $this->_async_keyword
,
13893 $coroutine_keyword,
13894 $this->_function_keyword
,
13895 $this->_left_paren
,
13896 $this->_parameters
,
13897 $this->_right_paren
,
13903 public function with_function_keyword(EditableSyntax
$function_keyword): AnonymousFunction
{
13904 return new AnonymousFunction(
13905 $this->_static_keyword
,
13906 $this->_async_keyword
,
13907 $this->_coroutine_keyword
,
13909 $this->_left_paren
,
13910 $this->_parameters
,
13911 $this->_right_paren
,
13917 public function with_left_paren(EditableSyntax
$left_paren): AnonymousFunction
{
13918 return new AnonymousFunction(
13919 $this->_static_keyword
,
13920 $this->_async_keyword
,
13921 $this->_coroutine_keyword
,
13922 $this->_function_keyword
,
13924 $this->_parameters
,
13925 $this->_right_paren
,
13931 public function with_parameters(EditableSyntax
$parameters): AnonymousFunction
{
13932 return new AnonymousFunction(
13933 $this->_static_keyword
,
13934 $this->_async_keyword
,
13935 $this->_coroutine_keyword
,
13936 $this->_function_keyword
,
13937 $this->_left_paren
,
13939 $this->_right_paren
,
13945 public function with_right_paren(EditableSyntax
$right_paren): AnonymousFunction
{
13946 return new AnonymousFunction(
13947 $this->_static_keyword
,
13948 $this->_async_keyword
,
13949 $this->_coroutine_keyword
,
13950 $this->_function_keyword
,
13951 $this->_left_paren
,
13952 $this->_parameters
,
13959 public function with_colon(EditableSyntax
$colon): AnonymousFunction
{
13960 return new AnonymousFunction(
13961 $this->_static_keyword
,
13962 $this->_async_keyword
,
13963 $this->_coroutine_keyword
,
13964 $this->_function_keyword
,
13965 $this->_left_paren
,
13966 $this->_parameters
,
13967 $this->_right_paren
,
13973 public function with_type(EditableSyntax
$type): AnonymousFunction
{
13974 return new AnonymousFunction(
13975 $this->_static_keyword
,
13976 $this->_async_keyword
,
13977 $this->_coroutine_keyword
,
13978 $this->_function_keyword
,
13979 $this->_left_paren
,
13980 $this->_parameters
,
13981 $this->_right_paren
,
13987 public function with_use(EditableSyntax
$use): AnonymousFunction
{
13988 return new AnonymousFunction(
13989 $this->_static_keyword
,
13990 $this->_async_keyword
,
13991 $this->_coroutine_keyword
,
13992 $this->_function_keyword
,
13993 $this->_left_paren
,
13994 $this->_parameters
,
13995 $this->_right_paren
,
14001 public function with_body(EditableSyntax
$body): AnonymousFunction
{
14002 return new AnonymousFunction(
14003 $this->_static_keyword
,
14004 $this->_async_keyword
,
14005 $this->_coroutine_keyword
,
14006 $this->_function_keyword
,
14007 $this->_left_paren
,
14008 $this->_parameters
,
14009 $this->_right_paren
,
14016 public function rewrite(
14018 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
14019 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
14020 $new_parents = $parents ??
[];
14021 array_push($new_parents, $this);
14022 $static_keyword = $this->static_keyword()->rewrite($rewriter, $new_parents);
14023 $async_keyword = $this->async_keyword()->rewrite($rewriter, $new_parents);
14024 $coroutine_keyword = $this->coroutine_keyword()->rewrite($rewriter, $new_parents);
14025 $function_keyword = $this->function_keyword()->rewrite($rewriter, $new_parents);
14026 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
14027 $parameters = $this->parameters()->rewrite($rewriter, $new_parents);
14028 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
14029 $colon = $this->colon()->rewrite($rewriter, $new_parents);
14030 $type = $this->type()->rewrite($rewriter, $new_parents);
14031 $use = $this->use()->rewrite($rewriter, $new_parents);
14032 $body = $this->body()->rewrite($rewriter, $new_parents);
14034 $static_keyword === $this->static_keyword() &&
14035 $async_keyword === $this->async_keyword() &&
14036 $coroutine_keyword === $this->coroutine_keyword() &&
14037 $function_keyword === $this->function_keyword() &&
14038 $left_paren === $this->left_paren() &&
14039 $parameters === $this->parameters() &&
14040 $right_paren === $this->right_paren() &&
14041 $colon === $this->colon() &&
14042 $type === $this->type() &&
14043 $use === $this->use() &&
14044 $body === $this->body()) {
14045 return $rewriter($this, $parents ??
[]);
14047 return $rewriter(new AnonymousFunction(
14050 $coroutine_keyword,
14058 $body), $parents ??
[]);
14062 public static function from_json(mixed $json, int $position, string $source) {
14063 $static_keyword = EditableSyntax
::from_json(
14064 $json->anonymous_static_keyword
, $position, $source);
14065 $position +
= $static_keyword->width();
14066 $async_keyword = EditableSyntax
::from_json(
14067 $json->anonymous_async_keyword
, $position, $source);
14068 $position +
= $async_keyword->width();
14069 $coroutine_keyword = EditableSyntax
::from_json(
14070 $json->anonymous_coroutine_keyword
, $position, $source);
14071 $position +
= $coroutine_keyword->width();
14072 $function_keyword = EditableSyntax
::from_json(
14073 $json->anonymous_function_keyword
, $position, $source);
14074 $position +
= $function_keyword->width();
14075 $left_paren = EditableSyntax
::from_json(
14076 $json->anonymous_left_paren
, $position, $source);
14077 $position +
= $left_paren->width();
14078 $parameters = EditableSyntax
::from_json(
14079 $json->anonymous_parameters
, $position, $source);
14080 $position +
= $parameters->width();
14081 $right_paren = EditableSyntax
::from_json(
14082 $json->anonymous_right_paren
, $position, $source);
14083 $position +
= $right_paren->width();
14084 $colon = EditableSyntax
::from_json(
14085 $json->anonymous_colon
, $position, $source);
14086 $position +
= $colon->width();
14087 $type = EditableSyntax
::from_json(
14088 $json->anonymous_type
, $position, $source);
14089 $position +
= $type->width();
14090 $use = EditableSyntax
::from_json(
14091 $json->anonymous_use
, $position, $source);
14092 $position +
= $use->width();
14093 $body = EditableSyntax
::from_json(
14094 $json->anonymous_body
, $position, $source);
14095 $position +
= $body->width();
14096 return new AnonymousFunction(
14099 $coroutine_keyword,
14109 public function children(): Generator
<string, EditableSyntax
, void
> {
14110 yield
$this->_static_keyword
;
14111 yield
$this->_async_keyword
;
14112 yield
$this->_coroutine_keyword
;
14113 yield
$this->_function_keyword
;
14114 yield
$this->_left_paren
;
14115 yield
$this->_parameters
;
14116 yield
$this->_right_paren
;
14117 yield
$this->_colon
;
14118 yield
$this->_type
;
14120 yield
$this->_body
;
14124 final class Php7AnonymousFunction
extends EditableSyntax
{
14125 private EditableSyntax
$_static_keyword;
14126 private EditableSyntax
$_async_keyword;
14127 private EditableSyntax
$_coroutine_keyword;
14128 private EditableSyntax
$_function_keyword;
14129 private EditableSyntax
$_left_paren;
14130 private EditableSyntax
$_parameters;
14131 private EditableSyntax
$_right_paren;
14132 private EditableSyntax
$_use;
14133 private EditableSyntax
$_colon;
14134 private EditableSyntax
$_type;
14135 private EditableSyntax
$_body;
14136 public function __construct(
14137 EditableSyntax
$static_keyword,
14138 EditableSyntax
$async_keyword,
14139 EditableSyntax
$coroutine_keyword,
14140 EditableSyntax
$function_keyword,
14141 EditableSyntax
$left_paren,
14142 EditableSyntax
$parameters,
14143 EditableSyntax
$right_paren,
14144 EditableSyntax
$use,
14145 EditableSyntax
$colon,
14146 EditableSyntax
$type,
14147 EditableSyntax
$body) {
14148 parent
::__construct('php7_anonymous_function');
14149 $this->_static_keyword
= $static_keyword;
14150 $this->_async_keyword
= $async_keyword;
14151 $this->_coroutine_keyword
= $coroutine_keyword;
14152 $this->_function_keyword
= $function_keyword;
14153 $this->_left_paren
= $left_paren;
14154 $this->_parameters
= $parameters;
14155 $this->_right_paren
= $right_paren;
14156 $this->_use
= $use;
14157 $this->_colon
= $colon;
14158 $this->_type
= $type;
14159 $this->_body
= $body;
14161 public function static_keyword(): EditableSyntax
{
14162 return $this->_static_keyword
;
14164 public function async_keyword(): EditableSyntax
{
14165 return $this->_async_keyword
;
14167 public function coroutine_keyword(): EditableSyntax
{
14168 return $this->_coroutine_keyword
;
14170 public function function_keyword(): EditableSyntax
{
14171 return $this->_function_keyword
;
14173 public function left_paren(): EditableSyntax
{
14174 return $this->_left_paren
;
14176 public function parameters(): EditableSyntax
{
14177 return $this->_parameters
;
14179 public function right_paren(): EditableSyntax
{
14180 return $this->_right_paren
;
14182 public function use(): EditableSyntax
{
14183 return $this->_use
;
14185 public function colon(): EditableSyntax
{
14186 return $this->_colon
;
14188 public function type(): EditableSyntax
{
14189 return $this->_type
;
14191 public function body(): EditableSyntax
{
14192 return $this->_body
;
14194 public function with_static_keyword(EditableSyntax
$static_keyword): Php7AnonymousFunction
{
14195 return new Php7AnonymousFunction(
14197 $this->_async_keyword
,
14198 $this->_coroutine_keyword
,
14199 $this->_function_keyword
,
14200 $this->_left_paren
,
14201 $this->_parameters
,
14202 $this->_right_paren
,
14208 public function with_async_keyword(EditableSyntax
$async_keyword): Php7AnonymousFunction
{
14209 return new Php7AnonymousFunction(
14210 $this->_static_keyword
,
14212 $this->_coroutine_keyword
,
14213 $this->_function_keyword
,
14214 $this->_left_paren
,
14215 $this->_parameters
,
14216 $this->_right_paren
,
14222 public function with_coroutine_keyword(EditableSyntax
$coroutine_keyword): Php7AnonymousFunction
{
14223 return new Php7AnonymousFunction(
14224 $this->_static_keyword
,
14225 $this->_async_keyword
,
14226 $coroutine_keyword,
14227 $this->_function_keyword
,
14228 $this->_left_paren
,
14229 $this->_parameters
,
14230 $this->_right_paren
,
14236 public function with_function_keyword(EditableSyntax
$function_keyword): Php7AnonymousFunction
{
14237 return new Php7AnonymousFunction(
14238 $this->_static_keyword
,
14239 $this->_async_keyword
,
14240 $this->_coroutine_keyword
,
14242 $this->_left_paren
,
14243 $this->_parameters
,
14244 $this->_right_paren
,
14250 public function with_left_paren(EditableSyntax
$left_paren): Php7AnonymousFunction
{
14251 return new Php7AnonymousFunction(
14252 $this->_static_keyword
,
14253 $this->_async_keyword
,
14254 $this->_coroutine_keyword
,
14255 $this->_function_keyword
,
14257 $this->_parameters
,
14258 $this->_right_paren
,
14264 public function with_parameters(EditableSyntax
$parameters): Php7AnonymousFunction
{
14265 return new Php7AnonymousFunction(
14266 $this->_static_keyword
,
14267 $this->_async_keyword
,
14268 $this->_coroutine_keyword
,
14269 $this->_function_keyword
,
14270 $this->_left_paren
,
14272 $this->_right_paren
,
14278 public function with_right_paren(EditableSyntax
$right_paren): Php7AnonymousFunction
{
14279 return new Php7AnonymousFunction(
14280 $this->_static_keyword
,
14281 $this->_async_keyword
,
14282 $this->_coroutine_keyword
,
14283 $this->_function_keyword
,
14284 $this->_left_paren
,
14285 $this->_parameters
,
14292 public function with_use(EditableSyntax
$use): Php7AnonymousFunction
{
14293 return new Php7AnonymousFunction(
14294 $this->_static_keyword
,
14295 $this->_async_keyword
,
14296 $this->_coroutine_keyword
,
14297 $this->_function_keyword
,
14298 $this->_left_paren
,
14299 $this->_parameters
,
14300 $this->_right_paren
,
14306 public function with_colon(EditableSyntax
$colon): Php7AnonymousFunction
{
14307 return new Php7AnonymousFunction(
14308 $this->_static_keyword
,
14309 $this->_async_keyword
,
14310 $this->_coroutine_keyword
,
14311 $this->_function_keyword
,
14312 $this->_left_paren
,
14313 $this->_parameters
,
14314 $this->_right_paren
,
14320 public function with_type(EditableSyntax
$type): Php7AnonymousFunction
{
14321 return new Php7AnonymousFunction(
14322 $this->_static_keyword
,
14323 $this->_async_keyword
,
14324 $this->_coroutine_keyword
,
14325 $this->_function_keyword
,
14326 $this->_left_paren
,
14327 $this->_parameters
,
14328 $this->_right_paren
,
14334 public function with_body(EditableSyntax
$body): Php7AnonymousFunction
{
14335 return new Php7AnonymousFunction(
14336 $this->_static_keyword
,
14337 $this->_async_keyword
,
14338 $this->_coroutine_keyword
,
14339 $this->_function_keyword
,
14340 $this->_left_paren
,
14341 $this->_parameters
,
14342 $this->_right_paren
,
14349 public function rewrite(
14351 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
14352 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
14353 $new_parents = $parents ??
[];
14354 array_push($new_parents, $this);
14355 $static_keyword = $this->static_keyword()->rewrite($rewriter, $new_parents);
14356 $async_keyword = $this->async_keyword()->rewrite($rewriter, $new_parents);
14357 $coroutine_keyword = $this->coroutine_keyword()->rewrite($rewriter, $new_parents);
14358 $function_keyword = $this->function_keyword()->rewrite($rewriter, $new_parents);
14359 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
14360 $parameters = $this->parameters()->rewrite($rewriter, $new_parents);
14361 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
14362 $use = $this->use()->rewrite($rewriter, $new_parents);
14363 $colon = $this->colon()->rewrite($rewriter, $new_parents);
14364 $type = $this->type()->rewrite($rewriter, $new_parents);
14365 $body = $this->body()->rewrite($rewriter, $new_parents);
14367 $static_keyword === $this->static_keyword() &&
14368 $async_keyword === $this->async_keyword() &&
14369 $coroutine_keyword === $this->coroutine_keyword() &&
14370 $function_keyword === $this->function_keyword() &&
14371 $left_paren === $this->left_paren() &&
14372 $parameters === $this->parameters() &&
14373 $right_paren === $this->right_paren() &&
14374 $use === $this->use() &&
14375 $colon === $this->colon() &&
14376 $type === $this->type() &&
14377 $body === $this->body()) {
14378 return $rewriter($this, $parents ??
[]);
14380 return $rewriter(new Php7AnonymousFunction(
14383 $coroutine_keyword,
14391 $body), $parents ??
[]);
14395 public static function from_json(mixed $json, int $position, string $source) {
14396 $static_keyword = EditableSyntax
::from_json(
14397 $json->php7_anonymous_static_keyword
, $position, $source);
14398 $position +
= $static_keyword->width();
14399 $async_keyword = EditableSyntax
::from_json(
14400 $json->php7_anonymous_async_keyword
, $position, $source);
14401 $position +
= $async_keyword->width();
14402 $coroutine_keyword = EditableSyntax
::from_json(
14403 $json->php7_anonymous_coroutine_keyword
, $position, $source);
14404 $position +
= $coroutine_keyword->width();
14405 $function_keyword = EditableSyntax
::from_json(
14406 $json->php7_anonymous_function_keyword
, $position, $source);
14407 $position +
= $function_keyword->width();
14408 $left_paren = EditableSyntax
::from_json(
14409 $json->php7_anonymous_left_paren
, $position, $source);
14410 $position +
= $left_paren->width();
14411 $parameters = EditableSyntax
::from_json(
14412 $json->php7_anonymous_parameters
, $position, $source);
14413 $position +
= $parameters->width();
14414 $right_paren = EditableSyntax
::from_json(
14415 $json->php7_anonymous_right_paren
, $position, $source);
14416 $position +
= $right_paren->width();
14417 $use = EditableSyntax
::from_json(
14418 $json->php7_anonymous_use
, $position, $source);
14419 $position +
= $use->width();
14420 $colon = EditableSyntax
::from_json(
14421 $json->php7_anonymous_colon
, $position, $source);
14422 $position +
= $colon->width();
14423 $type = EditableSyntax
::from_json(
14424 $json->php7_anonymous_type
, $position, $source);
14425 $position +
= $type->width();
14426 $body = EditableSyntax
::from_json(
14427 $json->php7_anonymous_body
, $position, $source);
14428 $position +
= $body->width();
14429 return new Php7AnonymousFunction(
14432 $coroutine_keyword,
14442 public function children(): Generator
<string, EditableSyntax
, void
> {
14443 yield
$this->_static_keyword
;
14444 yield
$this->_async_keyword
;
14445 yield
$this->_coroutine_keyword
;
14446 yield
$this->_function_keyword
;
14447 yield
$this->_left_paren
;
14448 yield
$this->_parameters
;
14449 yield
$this->_right_paren
;
14451 yield
$this->_colon
;
14452 yield
$this->_type
;
14453 yield
$this->_body
;
14457 final class AnonymousFunctionUseClause
extends EditableSyntax
{
14458 private EditableSyntax
$_keyword;
14459 private EditableSyntax
$_left_paren;
14460 private EditableSyntax
$_variables;
14461 private EditableSyntax
$_right_paren;
14462 public function __construct(
14463 EditableSyntax
$keyword,
14464 EditableSyntax
$left_paren,
14465 EditableSyntax
$variables,
14466 EditableSyntax
$right_paren) {
14467 parent
::__construct('anonymous_function_use_clause');
14468 $this->_keyword
= $keyword;
14469 $this->_left_paren
= $left_paren;
14470 $this->_variables
= $variables;
14471 $this->_right_paren
= $right_paren;
14473 public function keyword(): EditableSyntax
{
14474 return $this->_keyword
;
14476 public function left_paren(): EditableSyntax
{
14477 return $this->_left_paren
;
14479 public function variables(): EditableSyntax
{
14480 return $this->_variables
;
14482 public function right_paren(): EditableSyntax
{
14483 return $this->_right_paren
;
14485 public function with_keyword(EditableSyntax
$keyword): AnonymousFunctionUseClause
{
14486 return new AnonymousFunctionUseClause(
14488 $this->_left_paren
,
14490 $this->_right_paren
);
14492 public function with_left_paren(EditableSyntax
$left_paren): AnonymousFunctionUseClause
{
14493 return new AnonymousFunctionUseClause(
14497 $this->_right_paren
);
14499 public function with_variables(EditableSyntax
$variables): AnonymousFunctionUseClause
{
14500 return new AnonymousFunctionUseClause(
14502 $this->_left_paren
,
14504 $this->_right_paren
);
14506 public function with_right_paren(EditableSyntax
$right_paren): AnonymousFunctionUseClause
{
14507 return new AnonymousFunctionUseClause(
14509 $this->_left_paren
,
14514 public function rewrite(
14516 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
14517 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
14518 $new_parents = $parents ??
[];
14519 array_push($new_parents, $this);
14520 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
14521 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
14522 $variables = $this->variables()->rewrite($rewriter, $new_parents);
14523 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
14525 $keyword === $this->keyword() &&
14526 $left_paren === $this->left_paren() &&
14527 $variables === $this->variables() &&
14528 $right_paren === $this->right_paren()) {
14529 return $rewriter($this, $parents ??
[]);
14531 return $rewriter(new AnonymousFunctionUseClause(
14535 $right_paren), $parents ??
[]);
14539 public static function from_json(mixed $json, int $position, string $source) {
14540 $keyword = EditableSyntax
::from_json(
14541 $json->anonymous_use_keyword
, $position, $source);
14542 $position +
= $keyword->width();
14543 $left_paren = EditableSyntax
::from_json(
14544 $json->anonymous_use_left_paren
, $position, $source);
14545 $position +
= $left_paren->width();
14546 $variables = EditableSyntax
::from_json(
14547 $json->anonymous_use_variables
, $position, $source);
14548 $position +
= $variables->width();
14549 $right_paren = EditableSyntax
::from_json(
14550 $json->anonymous_use_right_paren
, $position, $source);
14551 $position +
= $right_paren->width();
14552 return new AnonymousFunctionUseClause(
14558 public function children(): Generator
<string, EditableSyntax
, void
> {
14559 yield
$this->_keyword
;
14560 yield
$this->_left_paren
;
14561 yield
$this->_variables
;
14562 yield
$this->_right_paren
;
14566 final class LambdaExpression
extends EditableSyntax
{
14567 private EditableSyntax
$_async;
14568 private EditableSyntax
$_coroutine;
14569 private EditableSyntax
$_signature;
14570 private EditableSyntax
$_arrow;
14571 private EditableSyntax
$_body;
14572 public function __construct(
14573 EditableSyntax
$async,
14574 EditableSyntax
$coroutine,
14575 EditableSyntax
$signature,
14576 EditableSyntax
$arrow,
14577 EditableSyntax
$body) {
14578 parent
::__construct('lambda_expression');
14579 $this->_async
= $async;
14580 $this->_coroutine
= $coroutine;
14581 $this->_signature
= $signature;
14582 $this->_arrow
= $arrow;
14583 $this->_body
= $body;
14585 public function async(): EditableSyntax
{
14586 return $this->_async
;
14588 public function coroutine(): EditableSyntax
{
14589 return $this->_coroutine
;
14591 public function signature(): EditableSyntax
{
14592 return $this->_signature
;
14594 public function arrow(): EditableSyntax
{
14595 return $this->_arrow
;
14597 public function body(): EditableSyntax
{
14598 return $this->_body
;
14600 public function with_async(EditableSyntax
$async): LambdaExpression
{
14601 return new LambdaExpression(
14608 public function with_coroutine(EditableSyntax
$coroutine): LambdaExpression
{
14609 return new LambdaExpression(
14616 public function with_signature(EditableSyntax
$signature): LambdaExpression
{
14617 return new LambdaExpression(
14624 public function with_arrow(EditableSyntax
$arrow): LambdaExpression
{
14625 return new LambdaExpression(
14632 public function with_body(EditableSyntax
$body): LambdaExpression
{
14633 return new LambdaExpression(
14641 public function rewrite(
14643 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
14644 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
14645 $new_parents = $parents ??
[];
14646 array_push($new_parents, $this);
14647 $async = $this->async()->rewrite($rewriter, $new_parents);
14648 $coroutine = $this->coroutine()->rewrite($rewriter, $new_parents);
14649 $signature = $this->signature()->rewrite($rewriter, $new_parents);
14650 $arrow = $this->arrow()->rewrite($rewriter, $new_parents);
14651 $body = $this->body()->rewrite($rewriter, $new_parents);
14653 $async === $this->async() &&
14654 $coroutine === $this->coroutine() &&
14655 $signature === $this->signature() &&
14656 $arrow === $this->arrow() &&
14657 $body === $this->body()) {
14658 return $rewriter($this, $parents ??
[]);
14660 return $rewriter(new LambdaExpression(
14665 $body), $parents ??
[]);
14669 public static function from_json(mixed $json, int $position, string $source) {
14670 $async = EditableSyntax
::from_json(
14671 $json->lambda_async
, $position, $source);
14672 $position +
= $async->width();
14673 $coroutine = EditableSyntax
::from_json(
14674 $json->lambda_coroutine
, $position, $source);
14675 $position +
= $coroutine->width();
14676 $signature = EditableSyntax
::from_json(
14677 $json->lambda_signature
, $position, $source);
14678 $position +
= $signature->width();
14679 $arrow = EditableSyntax
::from_json(
14680 $json->lambda_arrow
, $position, $source);
14681 $position +
= $arrow->width();
14682 $body = EditableSyntax
::from_json(
14683 $json->lambda_body
, $position, $source);
14684 $position +
= $body->width();
14685 return new LambdaExpression(
14692 public function children(): Generator
<string, EditableSyntax
, void
> {
14693 yield
$this->_async
;
14694 yield
$this->_coroutine
;
14695 yield
$this->_signature
;
14696 yield
$this->_arrow
;
14697 yield
$this->_body
;
14701 final class LambdaSignature
extends EditableSyntax
{
14702 private EditableSyntax
$_left_paren;
14703 private EditableSyntax
$_parameters;
14704 private EditableSyntax
$_right_paren;
14705 private EditableSyntax
$_colon;
14706 private EditableSyntax
$_type;
14707 public function __construct(
14708 EditableSyntax
$left_paren,
14709 EditableSyntax
$parameters,
14710 EditableSyntax
$right_paren,
14711 EditableSyntax
$colon,
14712 EditableSyntax
$type) {
14713 parent
::__construct('lambda_signature');
14714 $this->_left_paren
= $left_paren;
14715 $this->_parameters
= $parameters;
14716 $this->_right_paren
= $right_paren;
14717 $this->_colon
= $colon;
14718 $this->_type
= $type;
14720 public function left_paren(): EditableSyntax
{
14721 return $this->_left_paren
;
14723 public function parameters(): EditableSyntax
{
14724 return $this->_parameters
;
14726 public function right_paren(): EditableSyntax
{
14727 return $this->_right_paren
;
14729 public function colon(): EditableSyntax
{
14730 return $this->_colon
;
14732 public function type(): EditableSyntax
{
14733 return $this->_type
;
14735 public function with_left_paren(EditableSyntax
$left_paren): LambdaSignature
{
14736 return new LambdaSignature(
14738 $this->_parameters
,
14739 $this->_right_paren
,
14743 public function with_parameters(EditableSyntax
$parameters): LambdaSignature
{
14744 return new LambdaSignature(
14745 $this->_left_paren
,
14747 $this->_right_paren
,
14751 public function with_right_paren(EditableSyntax
$right_paren): LambdaSignature
{
14752 return new LambdaSignature(
14753 $this->_left_paren
,
14754 $this->_parameters
,
14759 public function with_colon(EditableSyntax
$colon): LambdaSignature
{
14760 return new LambdaSignature(
14761 $this->_left_paren
,
14762 $this->_parameters
,
14763 $this->_right_paren
,
14767 public function with_type(EditableSyntax
$type): LambdaSignature
{
14768 return new LambdaSignature(
14769 $this->_left_paren
,
14770 $this->_parameters
,
14771 $this->_right_paren
,
14776 public function rewrite(
14778 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
14779 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
14780 $new_parents = $parents ??
[];
14781 array_push($new_parents, $this);
14782 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
14783 $parameters = $this->parameters()->rewrite($rewriter, $new_parents);
14784 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
14785 $colon = $this->colon()->rewrite($rewriter, $new_parents);
14786 $type = $this->type()->rewrite($rewriter, $new_parents);
14788 $left_paren === $this->left_paren() &&
14789 $parameters === $this->parameters() &&
14790 $right_paren === $this->right_paren() &&
14791 $colon === $this->colon() &&
14792 $type === $this->type()) {
14793 return $rewriter($this, $parents ??
[]);
14795 return $rewriter(new LambdaSignature(
14800 $type), $parents ??
[]);
14804 public static function from_json(mixed $json, int $position, string $source) {
14805 $left_paren = EditableSyntax
::from_json(
14806 $json->lambda_left_paren
, $position, $source);
14807 $position +
= $left_paren->width();
14808 $parameters = EditableSyntax
::from_json(
14809 $json->lambda_parameters
, $position, $source);
14810 $position +
= $parameters->width();
14811 $right_paren = EditableSyntax
::from_json(
14812 $json->lambda_right_paren
, $position, $source);
14813 $position +
= $right_paren->width();
14814 $colon = EditableSyntax
::from_json(
14815 $json->lambda_colon
, $position, $source);
14816 $position +
= $colon->width();
14817 $type = EditableSyntax
::from_json(
14818 $json->lambda_type
, $position, $source);
14819 $position +
= $type->width();
14820 return new LambdaSignature(
14827 public function children(): Generator
<string, EditableSyntax
, void
> {
14828 yield
$this->_left_paren
;
14829 yield
$this->_parameters
;
14830 yield
$this->_right_paren
;
14831 yield
$this->_colon
;
14832 yield
$this->_type
;
14836 final class CastExpression
extends EditableSyntax
{
14837 private EditableSyntax
$_left_paren;
14838 private EditableSyntax
$_type;
14839 private EditableSyntax
$_right_paren;
14840 private EditableSyntax
$_operand;
14841 public function __construct(
14842 EditableSyntax
$left_paren,
14843 EditableSyntax
$type,
14844 EditableSyntax
$right_paren,
14845 EditableSyntax
$operand) {
14846 parent
::__construct('cast_expression');
14847 $this->_left_paren
= $left_paren;
14848 $this->_type
= $type;
14849 $this->_right_paren
= $right_paren;
14850 $this->_operand
= $operand;
14852 public function left_paren(): EditableSyntax
{
14853 return $this->_left_paren
;
14855 public function type(): EditableSyntax
{
14856 return $this->_type
;
14858 public function right_paren(): EditableSyntax
{
14859 return $this->_right_paren
;
14861 public function operand(): EditableSyntax
{
14862 return $this->_operand
;
14864 public function with_left_paren(EditableSyntax
$left_paren): CastExpression
{
14865 return new CastExpression(
14868 $this->_right_paren
,
14871 public function with_type(EditableSyntax
$type): CastExpression
{
14872 return new CastExpression(
14873 $this->_left_paren
,
14875 $this->_right_paren
,
14878 public function with_right_paren(EditableSyntax
$right_paren): CastExpression
{
14879 return new CastExpression(
14880 $this->_left_paren
,
14885 public function with_operand(EditableSyntax
$operand): CastExpression
{
14886 return new CastExpression(
14887 $this->_left_paren
,
14889 $this->_right_paren
,
14893 public function rewrite(
14895 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
14896 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
14897 $new_parents = $parents ??
[];
14898 array_push($new_parents, $this);
14899 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
14900 $type = $this->type()->rewrite($rewriter, $new_parents);
14901 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
14902 $operand = $this->operand()->rewrite($rewriter, $new_parents);
14904 $left_paren === $this->left_paren() &&
14905 $type === $this->type() &&
14906 $right_paren === $this->right_paren() &&
14907 $operand === $this->operand()) {
14908 return $rewriter($this, $parents ??
[]);
14910 return $rewriter(new CastExpression(
14914 $operand), $parents ??
[]);
14918 public static function from_json(mixed $json, int $position, string $source) {
14919 $left_paren = EditableSyntax
::from_json(
14920 $json->cast_left_paren
, $position, $source);
14921 $position +
= $left_paren->width();
14922 $type = EditableSyntax
::from_json(
14923 $json->cast_type
, $position, $source);
14924 $position +
= $type->width();
14925 $right_paren = EditableSyntax
::from_json(
14926 $json->cast_right_paren
, $position, $source);
14927 $position +
= $right_paren->width();
14928 $operand = EditableSyntax
::from_json(
14929 $json->cast_operand
, $position, $source);
14930 $position +
= $operand->width();
14931 return new CastExpression(
14937 public function children(): Generator
<string, EditableSyntax
, void
> {
14938 yield
$this->_left_paren
;
14939 yield
$this->_type
;
14940 yield
$this->_right_paren
;
14941 yield
$this->_operand
;
14945 final class ScopeResolutionExpression
extends EditableSyntax
{
14946 private EditableSyntax
$_qualifier;
14947 private EditableSyntax
$_operator;
14948 private EditableSyntax
$_name;
14949 public function __construct(
14950 EditableSyntax
$qualifier,
14951 EditableSyntax
$operator,
14952 EditableSyntax
$name) {
14953 parent
::__construct('scope_resolution_expression');
14954 $this->_qualifier
= $qualifier;
14955 $this->_operator
= $operator;
14956 $this->_name
= $name;
14958 public function qualifier(): EditableSyntax
{
14959 return $this->_qualifier
;
14961 public function operator(): EditableSyntax
{
14962 return $this->_operator
;
14964 public function name(): EditableSyntax
{
14965 return $this->_name
;
14967 public function with_qualifier(EditableSyntax
$qualifier): ScopeResolutionExpression
{
14968 return new ScopeResolutionExpression(
14973 public function with_operator(EditableSyntax
$operator): ScopeResolutionExpression
{
14974 return new ScopeResolutionExpression(
14979 public function with_name(EditableSyntax
$name): ScopeResolutionExpression
{
14980 return new ScopeResolutionExpression(
14986 public function rewrite(
14988 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
14989 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
14990 $new_parents = $parents ??
[];
14991 array_push($new_parents, $this);
14992 $qualifier = $this->qualifier()->rewrite($rewriter, $new_parents);
14993 $operator = $this->operator()->rewrite($rewriter, $new_parents);
14994 $name = $this->name()->rewrite($rewriter, $new_parents);
14996 $qualifier === $this->qualifier() &&
14997 $operator === $this->operator() &&
14998 $name === $this->name()) {
14999 return $rewriter($this, $parents ??
[]);
15001 return $rewriter(new ScopeResolutionExpression(
15004 $name), $parents ??
[]);
15008 public static function from_json(mixed $json, int $position, string $source) {
15009 $qualifier = EditableSyntax
::from_json(
15010 $json->scope_resolution_qualifier
, $position, $source);
15011 $position +
= $qualifier->width();
15012 $operator = EditableSyntax
::from_json(
15013 $json->scope_resolution_operator
, $position, $source);
15014 $position +
= $operator->width();
15015 $name = EditableSyntax
::from_json(
15016 $json->scope_resolution_name
, $position, $source);
15017 $position +
= $name->width();
15018 return new ScopeResolutionExpression(
15023 public function children(): Generator
<string, EditableSyntax
, void
> {
15024 yield
$this->_qualifier
;
15025 yield
$this->_operator
;
15026 yield
$this->_name
;
15030 final class MemberSelectionExpression
extends EditableSyntax
{
15031 private EditableSyntax
$_object;
15032 private EditableSyntax
$_operator;
15033 private EditableSyntax
$_name;
15034 public function __construct(
15035 EditableSyntax
$object,
15036 EditableSyntax
$operator,
15037 EditableSyntax
$name) {
15038 parent
::__construct('member_selection_expression');
15039 $this->_object
= $object;
15040 $this->_operator
= $operator;
15041 $this->_name
= $name;
15043 public function object(): EditableSyntax
{
15044 return $this->_object
;
15046 public function operator(): EditableSyntax
{
15047 return $this->_operator
;
15049 public function name(): EditableSyntax
{
15050 return $this->_name
;
15052 public function with_object(EditableSyntax
$object): MemberSelectionExpression
{
15053 return new MemberSelectionExpression(
15058 public function with_operator(EditableSyntax
$operator): MemberSelectionExpression
{
15059 return new MemberSelectionExpression(
15064 public function with_name(EditableSyntax
$name): MemberSelectionExpression
{
15065 return new MemberSelectionExpression(
15071 public function rewrite(
15073 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
15074 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
15075 $new_parents = $parents ??
[];
15076 array_push($new_parents, $this);
15077 $object = $this->object()->rewrite($rewriter, $new_parents);
15078 $operator = $this->operator()->rewrite($rewriter, $new_parents);
15079 $name = $this->name()->rewrite($rewriter, $new_parents);
15081 $object === $this->object() &&
15082 $operator === $this->operator() &&
15083 $name === $this->name()) {
15084 return $rewriter($this, $parents ??
[]);
15086 return $rewriter(new MemberSelectionExpression(
15089 $name), $parents ??
[]);
15093 public static function from_json(mixed $json, int $position, string $source) {
15094 $object = EditableSyntax
::from_json(
15095 $json->member_object
, $position, $source);
15096 $position +
= $object->width();
15097 $operator = EditableSyntax
::from_json(
15098 $json->member_operator
, $position, $source);
15099 $position +
= $operator->width();
15100 $name = EditableSyntax
::from_json(
15101 $json->member_name
, $position, $source);
15102 $position +
= $name->width();
15103 return new MemberSelectionExpression(
15108 public function children(): Generator
<string, EditableSyntax
, void
> {
15109 yield
$this->_object
;
15110 yield
$this->_operator
;
15111 yield
$this->_name
;
15115 final class SafeMemberSelectionExpression
extends EditableSyntax
{
15116 private EditableSyntax
$_object;
15117 private EditableSyntax
$_operator;
15118 private EditableSyntax
$_name;
15119 public function __construct(
15120 EditableSyntax
$object,
15121 EditableSyntax
$operator,
15122 EditableSyntax
$name) {
15123 parent
::__construct('safe_member_selection_expression');
15124 $this->_object
= $object;
15125 $this->_operator
= $operator;
15126 $this->_name
= $name;
15128 public function object(): EditableSyntax
{
15129 return $this->_object
;
15131 public function operator(): EditableSyntax
{
15132 return $this->_operator
;
15134 public function name(): EditableSyntax
{
15135 return $this->_name
;
15137 public function with_object(EditableSyntax
$object): SafeMemberSelectionExpression
{
15138 return new SafeMemberSelectionExpression(
15143 public function with_operator(EditableSyntax
$operator): SafeMemberSelectionExpression
{
15144 return new SafeMemberSelectionExpression(
15149 public function with_name(EditableSyntax
$name): SafeMemberSelectionExpression
{
15150 return new SafeMemberSelectionExpression(
15156 public function rewrite(
15158 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
15159 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
15160 $new_parents = $parents ??
[];
15161 array_push($new_parents, $this);
15162 $object = $this->object()->rewrite($rewriter, $new_parents);
15163 $operator = $this->operator()->rewrite($rewriter, $new_parents);
15164 $name = $this->name()->rewrite($rewriter, $new_parents);
15166 $object === $this->object() &&
15167 $operator === $this->operator() &&
15168 $name === $this->name()) {
15169 return $rewriter($this, $parents ??
[]);
15171 return $rewriter(new SafeMemberSelectionExpression(
15174 $name), $parents ??
[]);
15178 public static function from_json(mixed $json, int $position, string $source) {
15179 $object = EditableSyntax
::from_json(
15180 $json->safe_member_object
, $position, $source);
15181 $position +
= $object->width();
15182 $operator = EditableSyntax
::from_json(
15183 $json->safe_member_operator
, $position, $source);
15184 $position +
= $operator->width();
15185 $name = EditableSyntax
::from_json(
15186 $json->safe_member_name
, $position, $source);
15187 $position +
= $name->width();
15188 return new SafeMemberSelectionExpression(
15193 public function children(): Generator
<string, EditableSyntax
, void
> {
15194 yield
$this->_object
;
15195 yield
$this->_operator
;
15196 yield
$this->_name
;
15200 final class EmbeddedMemberSelectionExpression
extends EditableSyntax
{
15201 private EditableSyntax
$_object;
15202 private EditableSyntax
$_operator;
15203 private EditableSyntax
$_name;
15204 public function __construct(
15205 EditableSyntax
$object,
15206 EditableSyntax
$operator,
15207 EditableSyntax
$name) {
15208 parent
::__construct('embedded_member_selection_expression');
15209 $this->_object
= $object;
15210 $this->_operator
= $operator;
15211 $this->_name
= $name;
15213 public function object(): EditableSyntax
{
15214 return $this->_object
;
15216 public function operator(): EditableSyntax
{
15217 return $this->_operator
;
15219 public function name(): EditableSyntax
{
15220 return $this->_name
;
15222 public function with_object(EditableSyntax
$object): EmbeddedMemberSelectionExpression
{
15223 return new EmbeddedMemberSelectionExpression(
15228 public function with_operator(EditableSyntax
$operator): EmbeddedMemberSelectionExpression
{
15229 return new EmbeddedMemberSelectionExpression(
15234 public function with_name(EditableSyntax
$name): EmbeddedMemberSelectionExpression
{
15235 return new EmbeddedMemberSelectionExpression(
15241 public function rewrite(
15243 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
15244 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
15245 $new_parents = $parents ??
[];
15246 array_push($new_parents, $this);
15247 $object = $this->object()->rewrite($rewriter, $new_parents);
15248 $operator = $this->operator()->rewrite($rewriter, $new_parents);
15249 $name = $this->name()->rewrite($rewriter, $new_parents);
15251 $object === $this->object() &&
15252 $operator === $this->operator() &&
15253 $name === $this->name()) {
15254 return $rewriter($this, $parents ??
[]);
15256 return $rewriter(new EmbeddedMemberSelectionExpression(
15259 $name), $parents ??
[]);
15263 public static function from_json(mixed $json, int $position, string $source) {
15264 $object = EditableSyntax
::from_json(
15265 $json->embedded_member_object
, $position, $source);
15266 $position +
= $object->width();
15267 $operator = EditableSyntax
::from_json(
15268 $json->embedded_member_operator
, $position, $source);
15269 $position +
= $operator->width();
15270 $name = EditableSyntax
::from_json(
15271 $json->embedded_member_name
, $position, $source);
15272 $position +
= $name->width();
15273 return new EmbeddedMemberSelectionExpression(
15278 public function children(): Generator
<string, EditableSyntax
, void
> {
15279 yield
$this->_object
;
15280 yield
$this->_operator
;
15281 yield
$this->_name
;
15285 final class YieldExpression
extends EditableSyntax
{
15286 private EditableSyntax
$_keyword;
15287 private EditableSyntax
$_operand;
15288 public function __construct(
15289 EditableSyntax
$keyword,
15290 EditableSyntax
$operand) {
15291 parent
::__construct('yield_expression');
15292 $this->_keyword
= $keyword;
15293 $this->_operand
= $operand;
15295 public function keyword(): EditableSyntax
{
15296 return $this->_keyword
;
15298 public function operand(): EditableSyntax
{
15299 return $this->_operand
;
15301 public function with_keyword(EditableSyntax
$keyword): YieldExpression
{
15302 return new YieldExpression(
15306 public function with_operand(EditableSyntax
$operand): YieldExpression
{
15307 return new YieldExpression(
15312 public function rewrite(
15314 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
15315 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
15316 $new_parents = $parents ??
[];
15317 array_push($new_parents, $this);
15318 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
15319 $operand = $this->operand()->rewrite($rewriter, $new_parents);
15321 $keyword === $this->keyword() &&
15322 $operand === $this->operand()) {
15323 return $rewriter($this, $parents ??
[]);
15325 return $rewriter(new YieldExpression(
15327 $operand), $parents ??
[]);
15331 public static function from_json(mixed $json, int $position, string $source) {
15332 $keyword = EditableSyntax
::from_json(
15333 $json->yield_keyword
, $position, $source);
15334 $position +
= $keyword->width();
15335 $operand = EditableSyntax
::from_json(
15336 $json->yield_operand
, $position, $source);
15337 $position +
= $operand->width();
15338 return new YieldExpression(
15342 public function children(): Generator
<string, EditableSyntax
, void
> {
15343 yield
$this->_keyword
;
15344 yield
$this->_operand
;
15348 final class YieldFromExpression
extends EditableSyntax
{
15349 private EditableSyntax
$_yield_keyword;
15350 private EditableSyntax
$_from_keyword;
15351 private EditableSyntax
$_operand;
15352 public function __construct(
15353 EditableSyntax
$yield_keyword,
15354 EditableSyntax
$from_keyword,
15355 EditableSyntax
$operand) {
15356 parent
::__construct('yield_from_expression');
15357 $this->_yield_keyword
= $yield_keyword;
15358 $this->_from_keyword
= $from_keyword;
15359 $this->_operand
= $operand;
15361 public function yield_keyword(): EditableSyntax
{
15362 return $this->_yield_keyword
;
15364 public function from_keyword(): EditableSyntax
{
15365 return $this->_from_keyword
;
15367 public function operand(): EditableSyntax
{
15368 return $this->_operand
;
15370 public function with_yield_keyword(EditableSyntax
$yield_keyword): YieldFromExpression
{
15371 return new YieldFromExpression(
15373 $this->_from_keyword
,
15376 public function with_from_keyword(EditableSyntax
$from_keyword): YieldFromExpression
{
15377 return new YieldFromExpression(
15378 $this->_yield_keyword
,
15382 public function with_operand(EditableSyntax
$operand): YieldFromExpression
{
15383 return new YieldFromExpression(
15384 $this->_yield_keyword
,
15385 $this->_from_keyword
,
15389 public function rewrite(
15391 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
15392 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
15393 $new_parents = $parents ??
[];
15394 array_push($new_parents, $this);
15395 $yield_keyword = $this->yield_keyword()->rewrite($rewriter, $new_parents);
15396 $from_keyword = $this->from_keyword()->rewrite($rewriter, $new_parents);
15397 $operand = $this->operand()->rewrite($rewriter, $new_parents);
15399 $yield_keyword === $this->yield_keyword() &&
15400 $from_keyword === $this->from_keyword() &&
15401 $operand === $this->operand()) {
15402 return $rewriter($this, $parents ??
[]);
15404 return $rewriter(new YieldFromExpression(
15407 $operand), $parents ??
[]);
15411 public static function from_json(mixed $json, int $position, string $source) {
15412 $yield_keyword = EditableSyntax
::from_json(
15413 $json->yield_from_yield_keyword
, $position, $source);
15414 $position +
= $yield_keyword->width();
15415 $from_keyword = EditableSyntax
::from_json(
15416 $json->yield_from_from_keyword
, $position, $source);
15417 $position +
= $from_keyword->width();
15418 $operand = EditableSyntax
::from_json(
15419 $json->yield_from_operand
, $position, $source);
15420 $position +
= $operand->width();
15421 return new YieldFromExpression(
15426 public function children(): Generator
<string, EditableSyntax
, void
> {
15427 yield
$this->_yield_keyword
;
15428 yield
$this->_from_keyword
;
15429 yield
$this->_operand
;
15433 final class PrefixUnaryExpression
extends EditableSyntax
{
15434 private EditableSyntax
$_operator;
15435 private EditableSyntax
$_operand;
15436 public function __construct(
15437 EditableSyntax
$operator,
15438 EditableSyntax
$operand) {
15439 parent
::__construct('prefix_unary_expression');
15440 $this->_operator
= $operator;
15441 $this->_operand
= $operand;
15443 public function operator(): EditableSyntax
{
15444 return $this->_operator
;
15446 public function operand(): EditableSyntax
{
15447 return $this->_operand
;
15449 public function with_operator(EditableSyntax
$operator): PrefixUnaryExpression
{
15450 return new PrefixUnaryExpression(
15454 public function with_operand(EditableSyntax
$operand): PrefixUnaryExpression
{
15455 return new PrefixUnaryExpression(
15460 public function rewrite(
15462 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
15463 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
15464 $new_parents = $parents ??
[];
15465 array_push($new_parents, $this);
15466 $operator = $this->operator()->rewrite($rewriter, $new_parents);
15467 $operand = $this->operand()->rewrite($rewriter, $new_parents);
15469 $operator === $this->operator() &&
15470 $operand === $this->operand()) {
15471 return $rewriter($this, $parents ??
[]);
15473 return $rewriter(new PrefixUnaryExpression(
15475 $operand), $parents ??
[]);
15479 public static function from_json(mixed $json, int $position, string $source) {
15480 $operator = EditableSyntax
::from_json(
15481 $json->prefix_unary_operator
, $position, $source);
15482 $position +
= $operator->width();
15483 $operand = EditableSyntax
::from_json(
15484 $json->prefix_unary_operand
, $position, $source);
15485 $position +
= $operand->width();
15486 return new PrefixUnaryExpression(
15490 public function children(): Generator
<string, EditableSyntax
, void
> {
15491 yield
$this->_operator
;
15492 yield
$this->_operand
;
15496 final class PostfixUnaryExpression
extends EditableSyntax
{
15497 private EditableSyntax
$_operand;
15498 private EditableSyntax
$_operator;
15499 public function __construct(
15500 EditableSyntax
$operand,
15501 EditableSyntax
$operator) {
15502 parent
::__construct('postfix_unary_expression');
15503 $this->_operand
= $operand;
15504 $this->_operator
= $operator;
15506 public function operand(): EditableSyntax
{
15507 return $this->_operand
;
15509 public function operator(): EditableSyntax
{
15510 return $this->_operator
;
15512 public function with_operand(EditableSyntax
$operand): PostfixUnaryExpression
{
15513 return new PostfixUnaryExpression(
15517 public function with_operator(EditableSyntax
$operator): PostfixUnaryExpression
{
15518 return new PostfixUnaryExpression(
15523 public function rewrite(
15525 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
15526 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
15527 $new_parents = $parents ??
[];
15528 array_push($new_parents, $this);
15529 $operand = $this->operand()->rewrite($rewriter, $new_parents);
15530 $operator = $this->operator()->rewrite($rewriter, $new_parents);
15532 $operand === $this->operand() &&
15533 $operator === $this->operator()) {
15534 return $rewriter($this, $parents ??
[]);
15536 return $rewriter(new PostfixUnaryExpression(
15538 $operator), $parents ??
[]);
15542 public static function from_json(mixed $json, int $position, string $source) {
15543 $operand = EditableSyntax
::from_json(
15544 $json->postfix_unary_operand
, $position, $source);
15545 $position +
= $operand->width();
15546 $operator = EditableSyntax
::from_json(
15547 $json->postfix_unary_operator
, $position, $source);
15548 $position +
= $operator->width();
15549 return new PostfixUnaryExpression(
15553 public function children(): Generator
<string, EditableSyntax
, void
> {
15554 yield
$this->_operand
;
15555 yield
$this->_operator
;
15559 final class BinaryExpression
extends EditableSyntax
{
15560 private EditableSyntax
$_left_operand;
15561 private EditableSyntax
$_operator;
15562 private EditableSyntax
$_right_operand;
15563 public function __construct(
15564 EditableSyntax
$left_operand,
15565 EditableSyntax
$operator,
15566 EditableSyntax
$right_operand) {
15567 parent
::__construct('binary_expression');
15568 $this->_left_operand
= $left_operand;
15569 $this->_operator
= $operator;
15570 $this->_right_operand
= $right_operand;
15572 public function left_operand(): EditableSyntax
{
15573 return $this->_left_operand
;
15575 public function operator(): EditableSyntax
{
15576 return $this->_operator
;
15578 public function right_operand(): EditableSyntax
{
15579 return $this->_right_operand
;
15581 public function with_left_operand(EditableSyntax
$left_operand): BinaryExpression
{
15582 return new BinaryExpression(
15585 $this->_right_operand
);
15587 public function with_operator(EditableSyntax
$operator): BinaryExpression
{
15588 return new BinaryExpression(
15589 $this->_left_operand
,
15591 $this->_right_operand
);
15593 public function with_right_operand(EditableSyntax
$right_operand): BinaryExpression
{
15594 return new BinaryExpression(
15595 $this->_left_operand
,
15600 public function rewrite(
15602 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
15603 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
15604 $new_parents = $parents ??
[];
15605 array_push($new_parents, $this);
15606 $left_operand = $this->left_operand()->rewrite($rewriter, $new_parents);
15607 $operator = $this->operator()->rewrite($rewriter, $new_parents);
15608 $right_operand = $this->right_operand()->rewrite($rewriter, $new_parents);
15610 $left_operand === $this->left_operand() &&
15611 $operator === $this->operator() &&
15612 $right_operand === $this->right_operand()) {
15613 return $rewriter($this, $parents ??
[]);
15615 return $rewriter(new BinaryExpression(
15618 $right_operand), $parents ??
[]);
15622 public static function from_json(mixed $json, int $position, string $source) {
15623 $left_operand = EditableSyntax
::from_json(
15624 $json->binary_left_operand
, $position, $source);
15625 $position +
= $left_operand->width();
15626 $operator = EditableSyntax
::from_json(
15627 $json->binary_operator
, $position, $source);
15628 $position +
= $operator->width();
15629 $right_operand = EditableSyntax
::from_json(
15630 $json->binary_right_operand
, $position, $source);
15631 $position +
= $right_operand->width();
15632 return new BinaryExpression(
15637 public function children(): Generator
<string, EditableSyntax
, void
> {
15638 yield
$this->_left_operand
;
15639 yield
$this->_operator
;
15640 yield
$this->_right_operand
;
15644 final class InstanceofExpression
extends EditableSyntax
{
15645 private EditableSyntax
$_left_operand;
15646 private EditableSyntax
$_operator;
15647 private EditableSyntax
$_right_operand;
15648 public function __construct(
15649 EditableSyntax
$left_operand,
15650 EditableSyntax
$operator,
15651 EditableSyntax
$right_operand) {
15652 parent
::__construct('instanceof_expression');
15653 $this->_left_operand
= $left_operand;
15654 $this->_operator
= $operator;
15655 $this->_right_operand
= $right_operand;
15657 public function left_operand(): EditableSyntax
{
15658 return $this->_left_operand
;
15660 public function operator(): EditableSyntax
{
15661 return $this->_operator
;
15663 public function right_operand(): EditableSyntax
{
15664 return $this->_right_operand
;
15666 public function with_left_operand(EditableSyntax
$left_operand): InstanceofExpression
{
15667 return new InstanceofExpression(
15670 $this->_right_operand
);
15672 public function with_operator(EditableSyntax
$operator): InstanceofExpression
{
15673 return new InstanceofExpression(
15674 $this->_left_operand
,
15676 $this->_right_operand
);
15678 public function with_right_operand(EditableSyntax
$right_operand): InstanceofExpression
{
15679 return new InstanceofExpression(
15680 $this->_left_operand
,
15685 public function rewrite(
15687 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
15688 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
15689 $new_parents = $parents ??
[];
15690 array_push($new_parents, $this);
15691 $left_operand = $this->left_operand()->rewrite($rewriter, $new_parents);
15692 $operator = $this->operator()->rewrite($rewriter, $new_parents);
15693 $right_operand = $this->right_operand()->rewrite($rewriter, $new_parents);
15695 $left_operand === $this->left_operand() &&
15696 $operator === $this->operator() &&
15697 $right_operand === $this->right_operand()) {
15698 return $rewriter($this, $parents ??
[]);
15700 return $rewriter(new InstanceofExpression(
15703 $right_operand), $parents ??
[]);
15707 public static function from_json(mixed $json, int $position, string $source) {
15708 $left_operand = EditableSyntax
::from_json(
15709 $json->instanceof_left_operand
, $position, $source);
15710 $position +
= $left_operand->width();
15711 $operator = EditableSyntax
::from_json(
15712 $json->instanceof_operator
, $position, $source);
15713 $position +
= $operator->width();
15714 $right_operand = EditableSyntax
::from_json(
15715 $json->instanceof_right_operand
, $position, $source);
15716 $position +
= $right_operand->width();
15717 return new InstanceofExpression(
15722 public function children(): Generator
<string, EditableSyntax
, void
> {
15723 yield
$this->_left_operand
;
15724 yield
$this->_operator
;
15725 yield
$this->_right_operand
;
15729 final class IsExpression
extends EditableSyntax
{
15730 private EditableSyntax
$_left_operand;
15731 private EditableSyntax
$_operator;
15732 private EditableSyntax
$_right_operand;
15733 public function __construct(
15734 EditableSyntax
$left_operand,
15735 EditableSyntax
$operator,
15736 EditableSyntax
$right_operand) {
15737 parent
::__construct('is_expression');
15738 $this->_left_operand
= $left_operand;
15739 $this->_operator
= $operator;
15740 $this->_right_operand
= $right_operand;
15742 public function left_operand(): EditableSyntax
{
15743 return $this->_left_operand
;
15745 public function operator(): EditableSyntax
{
15746 return $this->_operator
;
15748 public function right_operand(): EditableSyntax
{
15749 return $this->_right_operand
;
15751 public function with_left_operand(EditableSyntax
$left_operand): IsExpression
{
15752 return new IsExpression(
15755 $this->_right_operand
);
15757 public function with_operator(EditableSyntax
$operator): IsExpression
{
15758 return new IsExpression(
15759 $this->_left_operand
,
15761 $this->_right_operand
);
15763 public function with_right_operand(EditableSyntax
$right_operand): IsExpression
{
15764 return new IsExpression(
15765 $this->_left_operand
,
15770 public function rewrite(
15772 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
15773 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
15774 $new_parents = $parents ??
[];
15775 array_push($new_parents, $this);
15776 $left_operand = $this->left_operand()->rewrite($rewriter, $new_parents);
15777 $operator = $this->operator()->rewrite($rewriter, $new_parents);
15778 $right_operand = $this->right_operand()->rewrite($rewriter, $new_parents);
15780 $left_operand === $this->left_operand() &&
15781 $operator === $this->operator() &&
15782 $right_operand === $this->right_operand()) {
15783 return $rewriter($this, $parents ??
[]);
15785 return $rewriter(new IsExpression(
15788 $right_operand), $parents ??
[]);
15792 public static function from_json(mixed $json, int $position, string $source) {
15793 $left_operand = EditableSyntax
::from_json(
15794 $json->is_left_operand
, $position, $source);
15795 $position +
= $left_operand->width();
15796 $operator = EditableSyntax
::from_json(
15797 $json->is_operator
, $position, $source);
15798 $position +
= $operator->width();
15799 $right_operand = EditableSyntax
::from_json(
15800 $json->is_right_operand
, $position, $source);
15801 $position +
= $right_operand->width();
15802 return new IsExpression(
15807 public function children(): Generator
<string, EditableSyntax
, void
> {
15808 yield
$this->_left_operand
;
15809 yield
$this->_operator
;
15810 yield
$this->_right_operand
;
15814 final class ConditionalExpression
extends EditableSyntax
{
15815 private EditableSyntax
$_test;
15816 private EditableSyntax
$_question;
15817 private EditableSyntax
$_consequence;
15818 private EditableSyntax
$_colon;
15819 private EditableSyntax
$_alternative;
15820 public function __construct(
15821 EditableSyntax
$test,
15822 EditableSyntax
$question,
15823 EditableSyntax
$consequence,
15824 EditableSyntax
$colon,
15825 EditableSyntax
$alternative) {
15826 parent
::__construct('conditional_expression');
15827 $this->_test
= $test;
15828 $this->_question
= $question;
15829 $this->_consequence
= $consequence;
15830 $this->_colon
= $colon;
15831 $this->_alternative
= $alternative;
15833 public function test(): EditableSyntax
{
15834 return $this->_test
;
15836 public function question(): EditableSyntax
{
15837 return $this->_question
;
15839 public function consequence(): EditableSyntax
{
15840 return $this->_consequence
;
15842 public function colon(): EditableSyntax
{
15843 return $this->_colon
;
15845 public function alternative(): EditableSyntax
{
15846 return $this->_alternative
;
15848 public function with_test(EditableSyntax
$test): ConditionalExpression
{
15849 return new ConditionalExpression(
15852 $this->_consequence
,
15854 $this->_alternative
);
15856 public function with_question(EditableSyntax
$question): ConditionalExpression
{
15857 return new ConditionalExpression(
15860 $this->_consequence
,
15862 $this->_alternative
);
15864 public function with_consequence(EditableSyntax
$consequence): ConditionalExpression
{
15865 return new ConditionalExpression(
15870 $this->_alternative
);
15872 public function with_colon(EditableSyntax
$colon): ConditionalExpression
{
15873 return new ConditionalExpression(
15876 $this->_consequence
,
15878 $this->_alternative
);
15880 public function with_alternative(EditableSyntax
$alternative): ConditionalExpression
{
15881 return new ConditionalExpression(
15884 $this->_consequence
,
15889 public function rewrite(
15891 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
15892 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
15893 $new_parents = $parents ??
[];
15894 array_push($new_parents, $this);
15895 $test = $this->test()->rewrite($rewriter, $new_parents);
15896 $question = $this->question()->rewrite($rewriter, $new_parents);
15897 $consequence = $this->consequence()->rewrite($rewriter, $new_parents);
15898 $colon = $this->colon()->rewrite($rewriter, $new_parents);
15899 $alternative = $this->alternative()->rewrite($rewriter, $new_parents);
15901 $test === $this->test() &&
15902 $question === $this->question() &&
15903 $consequence === $this->consequence() &&
15904 $colon === $this->colon() &&
15905 $alternative === $this->alternative()) {
15906 return $rewriter($this, $parents ??
[]);
15908 return $rewriter(new ConditionalExpression(
15913 $alternative), $parents ??
[]);
15917 public static function from_json(mixed $json, int $position, string $source) {
15918 $test = EditableSyntax
::from_json(
15919 $json->conditional_test
, $position, $source);
15920 $position +
= $test->width();
15921 $question = EditableSyntax
::from_json(
15922 $json->conditional_question
, $position, $source);
15923 $position +
= $question->width();
15924 $consequence = EditableSyntax
::from_json(
15925 $json->conditional_consequence
, $position, $source);
15926 $position +
= $consequence->width();
15927 $colon = EditableSyntax
::from_json(
15928 $json->conditional_colon
, $position, $source);
15929 $position +
= $colon->width();
15930 $alternative = EditableSyntax
::from_json(
15931 $json->conditional_alternative
, $position, $source);
15932 $position +
= $alternative->width();
15933 return new ConditionalExpression(
15940 public function children(): Generator
<string, EditableSyntax
, void
> {
15941 yield
$this->_test
;
15942 yield
$this->_question
;
15943 yield
$this->_consequence
;
15944 yield
$this->_colon
;
15945 yield
$this->_alternative
;
15949 final class EvalExpression
extends EditableSyntax
{
15950 private EditableSyntax
$_keyword;
15951 private EditableSyntax
$_left_paren;
15952 private EditableSyntax
$_argument;
15953 private EditableSyntax
$_right_paren;
15954 public function __construct(
15955 EditableSyntax
$keyword,
15956 EditableSyntax
$left_paren,
15957 EditableSyntax
$argument,
15958 EditableSyntax
$right_paren) {
15959 parent
::__construct('eval_expression');
15960 $this->_keyword
= $keyword;
15961 $this->_left_paren
= $left_paren;
15962 $this->_argument
= $argument;
15963 $this->_right_paren
= $right_paren;
15965 public function keyword(): EditableSyntax
{
15966 return $this->_keyword
;
15968 public function left_paren(): EditableSyntax
{
15969 return $this->_left_paren
;
15971 public function argument(): EditableSyntax
{
15972 return $this->_argument
;
15974 public function right_paren(): EditableSyntax
{
15975 return $this->_right_paren
;
15977 public function with_keyword(EditableSyntax
$keyword): EvalExpression
{
15978 return new EvalExpression(
15980 $this->_left_paren
,
15982 $this->_right_paren
);
15984 public function with_left_paren(EditableSyntax
$left_paren): EvalExpression
{
15985 return new EvalExpression(
15989 $this->_right_paren
);
15991 public function with_argument(EditableSyntax
$argument): EvalExpression
{
15992 return new EvalExpression(
15994 $this->_left_paren
,
15996 $this->_right_paren
);
15998 public function with_right_paren(EditableSyntax
$right_paren): EvalExpression
{
15999 return new EvalExpression(
16001 $this->_left_paren
,
16006 public function rewrite(
16008 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
16009 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
16010 $new_parents = $parents ??
[];
16011 array_push($new_parents, $this);
16012 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
16013 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
16014 $argument = $this->argument()->rewrite($rewriter, $new_parents);
16015 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
16017 $keyword === $this->keyword() &&
16018 $left_paren === $this->left_paren() &&
16019 $argument === $this->argument() &&
16020 $right_paren === $this->right_paren()) {
16021 return $rewriter($this, $parents ??
[]);
16023 return $rewriter(new EvalExpression(
16027 $right_paren), $parents ??
[]);
16031 public static function from_json(mixed $json, int $position, string $source) {
16032 $keyword = EditableSyntax
::from_json(
16033 $json->eval_keyword
, $position, $source);
16034 $position +
= $keyword->width();
16035 $left_paren = EditableSyntax
::from_json(
16036 $json->eval_left_paren
, $position, $source);
16037 $position +
= $left_paren->width();
16038 $argument = EditableSyntax
::from_json(
16039 $json->eval_argument
, $position, $source);
16040 $position +
= $argument->width();
16041 $right_paren = EditableSyntax
::from_json(
16042 $json->eval_right_paren
, $position, $source);
16043 $position +
= $right_paren->width();
16044 return new EvalExpression(
16050 public function children(): Generator
<string, EditableSyntax
, void
> {
16051 yield
$this->_keyword
;
16052 yield
$this->_left_paren
;
16053 yield
$this->_argument
;
16054 yield
$this->_right_paren
;
16058 final class EmptyExpression
extends EditableSyntax
{
16059 private EditableSyntax
$_keyword;
16060 private EditableSyntax
$_left_paren;
16061 private EditableSyntax
$_argument;
16062 private EditableSyntax
$_right_paren;
16063 public function __construct(
16064 EditableSyntax
$keyword,
16065 EditableSyntax
$left_paren,
16066 EditableSyntax
$argument,
16067 EditableSyntax
$right_paren) {
16068 parent
::__construct('empty_expression');
16069 $this->_keyword
= $keyword;
16070 $this->_left_paren
= $left_paren;
16071 $this->_argument
= $argument;
16072 $this->_right_paren
= $right_paren;
16074 public function keyword(): EditableSyntax
{
16075 return $this->_keyword
;
16077 public function left_paren(): EditableSyntax
{
16078 return $this->_left_paren
;
16080 public function argument(): EditableSyntax
{
16081 return $this->_argument
;
16083 public function right_paren(): EditableSyntax
{
16084 return $this->_right_paren
;
16086 public function with_keyword(EditableSyntax
$keyword): EmptyExpression
{
16087 return new EmptyExpression(
16089 $this->_left_paren
,
16091 $this->_right_paren
);
16093 public function with_left_paren(EditableSyntax
$left_paren): EmptyExpression
{
16094 return new EmptyExpression(
16098 $this->_right_paren
);
16100 public function with_argument(EditableSyntax
$argument): EmptyExpression
{
16101 return new EmptyExpression(
16103 $this->_left_paren
,
16105 $this->_right_paren
);
16107 public function with_right_paren(EditableSyntax
$right_paren): EmptyExpression
{
16108 return new EmptyExpression(
16110 $this->_left_paren
,
16115 public function rewrite(
16117 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
16118 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
16119 $new_parents = $parents ??
[];
16120 array_push($new_parents, $this);
16121 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
16122 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
16123 $argument = $this->argument()->rewrite($rewriter, $new_parents);
16124 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
16126 $keyword === $this->keyword() &&
16127 $left_paren === $this->left_paren() &&
16128 $argument === $this->argument() &&
16129 $right_paren === $this->right_paren()) {
16130 return $rewriter($this, $parents ??
[]);
16132 return $rewriter(new EmptyExpression(
16136 $right_paren), $parents ??
[]);
16140 public static function from_json(mixed $json, int $position, string $source) {
16141 $keyword = EditableSyntax
::from_json(
16142 $json->empty_keyword
, $position, $source);
16143 $position +
= $keyword->width();
16144 $left_paren = EditableSyntax
::from_json(
16145 $json->empty_left_paren
, $position, $source);
16146 $position +
= $left_paren->width();
16147 $argument = EditableSyntax
::from_json(
16148 $json->empty_argument
, $position, $source);
16149 $position +
= $argument->width();
16150 $right_paren = EditableSyntax
::from_json(
16151 $json->empty_right_paren
, $position, $source);
16152 $position +
= $right_paren->width();
16153 return new EmptyExpression(
16159 public function children(): Generator
<string, EditableSyntax
, void
> {
16160 yield
$this->_keyword
;
16161 yield
$this->_left_paren
;
16162 yield
$this->_argument
;
16163 yield
$this->_right_paren
;
16167 final class DefineExpression
extends EditableSyntax
{
16168 private EditableSyntax
$_keyword;
16169 private EditableSyntax
$_left_paren;
16170 private EditableSyntax
$_argument_list;
16171 private EditableSyntax
$_right_paren;
16172 public function __construct(
16173 EditableSyntax
$keyword,
16174 EditableSyntax
$left_paren,
16175 EditableSyntax
$argument_list,
16176 EditableSyntax
$right_paren) {
16177 parent
::__construct('define_expression');
16178 $this->_keyword
= $keyword;
16179 $this->_left_paren
= $left_paren;
16180 $this->_argument_list
= $argument_list;
16181 $this->_right_paren
= $right_paren;
16183 public function keyword(): EditableSyntax
{
16184 return $this->_keyword
;
16186 public function left_paren(): EditableSyntax
{
16187 return $this->_left_paren
;
16189 public function argument_list(): EditableSyntax
{
16190 return $this->_argument_list
;
16192 public function right_paren(): EditableSyntax
{
16193 return $this->_right_paren
;
16195 public function with_keyword(EditableSyntax
$keyword): DefineExpression
{
16196 return new DefineExpression(
16198 $this->_left_paren
,
16199 $this->_argument_list
,
16200 $this->_right_paren
);
16202 public function with_left_paren(EditableSyntax
$left_paren): DefineExpression
{
16203 return new DefineExpression(
16206 $this->_argument_list
,
16207 $this->_right_paren
);
16209 public function with_argument_list(EditableSyntax
$argument_list): DefineExpression
{
16210 return new DefineExpression(
16212 $this->_left_paren
,
16214 $this->_right_paren
);
16216 public function with_right_paren(EditableSyntax
$right_paren): DefineExpression
{
16217 return new DefineExpression(
16219 $this->_left_paren
,
16220 $this->_argument_list
,
16224 public function rewrite(
16226 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
16227 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
16228 $new_parents = $parents ??
[];
16229 array_push($new_parents, $this);
16230 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
16231 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
16232 $argument_list = $this->argument_list()->rewrite($rewriter, $new_parents);
16233 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
16235 $keyword === $this->keyword() &&
16236 $left_paren === $this->left_paren() &&
16237 $argument_list === $this->argument_list() &&
16238 $right_paren === $this->right_paren()) {
16239 return $rewriter($this, $parents ??
[]);
16241 return $rewriter(new DefineExpression(
16245 $right_paren), $parents ??
[]);
16249 public static function from_json(mixed $json, int $position, string $source) {
16250 $keyword = EditableSyntax
::from_json(
16251 $json->define_keyword
, $position, $source);
16252 $position +
= $keyword->width();
16253 $left_paren = EditableSyntax
::from_json(
16254 $json->define_left_paren
, $position, $source);
16255 $position +
= $left_paren->width();
16256 $argument_list = EditableSyntax
::from_json(
16257 $json->define_argument_list
, $position, $source);
16258 $position +
= $argument_list->width();
16259 $right_paren = EditableSyntax
::from_json(
16260 $json->define_right_paren
, $position, $source);
16261 $position +
= $right_paren->width();
16262 return new DefineExpression(
16268 public function children(): Generator
<string, EditableSyntax
, void
> {
16269 yield
$this->_keyword
;
16270 yield
$this->_left_paren
;
16271 yield
$this->_argument_list
;
16272 yield
$this->_right_paren
;
16276 final class HaltCompilerExpression
extends EditableSyntax
{
16277 private EditableSyntax
$_keyword;
16278 private EditableSyntax
$_left_paren;
16279 private EditableSyntax
$_argument_list;
16280 private EditableSyntax
$_right_paren;
16281 public function __construct(
16282 EditableSyntax
$keyword,
16283 EditableSyntax
$left_paren,
16284 EditableSyntax
$argument_list,
16285 EditableSyntax
$right_paren) {
16286 parent
::__construct('halt_compiler_expression');
16287 $this->_keyword
= $keyword;
16288 $this->_left_paren
= $left_paren;
16289 $this->_argument_list
= $argument_list;
16290 $this->_right_paren
= $right_paren;
16292 public function keyword(): EditableSyntax
{
16293 return $this->_keyword
;
16295 public function left_paren(): EditableSyntax
{
16296 return $this->_left_paren
;
16298 public function argument_list(): EditableSyntax
{
16299 return $this->_argument_list
;
16301 public function right_paren(): EditableSyntax
{
16302 return $this->_right_paren
;
16304 public function with_keyword(EditableSyntax
$keyword): HaltCompilerExpression
{
16305 return new HaltCompilerExpression(
16307 $this->_left_paren
,
16308 $this->_argument_list
,
16309 $this->_right_paren
);
16311 public function with_left_paren(EditableSyntax
$left_paren): HaltCompilerExpression
{
16312 return new HaltCompilerExpression(
16315 $this->_argument_list
,
16316 $this->_right_paren
);
16318 public function with_argument_list(EditableSyntax
$argument_list): HaltCompilerExpression
{
16319 return new HaltCompilerExpression(
16321 $this->_left_paren
,
16323 $this->_right_paren
);
16325 public function with_right_paren(EditableSyntax
$right_paren): HaltCompilerExpression
{
16326 return new HaltCompilerExpression(
16328 $this->_left_paren
,
16329 $this->_argument_list
,
16333 public function rewrite(
16335 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
16336 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
16337 $new_parents = $parents ??
[];
16338 array_push($new_parents, $this);
16339 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
16340 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
16341 $argument_list = $this->argument_list()->rewrite($rewriter, $new_parents);
16342 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
16344 $keyword === $this->keyword() &&
16345 $left_paren === $this->left_paren() &&
16346 $argument_list === $this->argument_list() &&
16347 $right_paren === $this->right_paren()) {
16348 return $rewriter($this, $parents ??
[]);
16350 return $rewriter(new HaltCompilerExpression(
16354 $right_paren), $parents ??
[]);
16358 public static function from_json(mixed $json, int $position, string $source) {
16359 $keyword = EditableSyntax
::from_json(
16360 $json->halt_compiler_keyword
, $position, $source);
16361 $position +
= $keyword->width();
16362 $left_paren = EditableSyntax
::from_json(
16363 $json->halt_compiler_left_paren
, $position, $source);
16364 $position +
= $left_paren->width();
16365 $argument_list = EditableSyntax
::from_json(
16366 $json->halt_compiler_argument_list
, $position, $source);
16367 $position +
= $argument_list->width();
16368 $right_paren = EditableSyntax
::from_json(
16369 $json->halt_compiler_right_paren
, $position, $source);
16370 $position +
= $right_paren->width();
16371 return new HaltCompilerExpression(
16377 public function children(): Generator
<string, EditableSyntax
, void
> {
16378 yield
$this->_keyword
;
16379 yield
$this->_left_paren
;
16380 yield
$this->_argument_list
;
16381 yield
$this->_right_paren
;
16385 final class IssetExpression
extends EditableSyntax
{
16386 private EditableSyntax
$_keyword;
16387 private EditableSyntax
$_left_paren;
16388 private EditableSyntax
$_argument_list;
16389 private EditableSyntax
$_right_paren;
16390 public function __construct(
16391 EditableSyntax
$keyword,
16392 EditableSyntax
$left_paren,
16393 EditableSyntax
$argument_list,
16394 EditableSyntax
$right_paren) {
16395 parent
::__construct('isset_expression');
16396 $this->_keyword
= $keyword;
16397 $this->_left_paren
= $left_paren;
16398 $this->_argument_list
= $argument_list;
16399 $this->_right_paren
= $right_paren;
16401 public function keyword(): EditableSyntax
{
16402 return $this->_keyword
;
16404 public function left_paren(): EditableSyntax
{
16405 return $this->_left_paren
;
16407 public function argument_list(): EditableSyntax
{
16408 return $this->_argument_list
;
16410 public function right_paren(): EditableSyntax
{
16411 return $this->_right_paren
;
16413 public function with_keyword(EditableSyntax
$keyword): IssetExpression
{
16414 return new IssetExpression(
16416 $this->_left_paren
,
16417 $this->_argument_list
,
16418 $this->_right_paren
);
16420 public function with_left_paren(EditableSyntax
$left_paren): IssetExpression
{
16421 return new IssetExpression(
16424 $this->_argument_list
,
16425 $this->_right_paren
);
16427 public function with_argument_list(EditableSyntax
$argument_list): IssetExpression
{
16428 return new IssetExpression(
16430 $this->_left_paren
,
16432 $this->_right_paren
);
16434 public function with_right_paren(EditableSyntax
$right_paren): IssetExpression
{
16435 return new IssetExpression(
16437 $this->_left_paren
,
16438 $this->_argument_list
,
16442 public function rewrite(
16444 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
16445 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
16446 $new_parents = $parents ??
[];
16447 array_push($new_parents, $this);
16448 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
16449 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
16450 $argument_list = $this->argument_list()->rewrite($rewriter, $new_parents);
16451 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
16453 $keyword === $this->keyword() &&
16454 $left_paren === $this->left_paren() &&
16455 $argument_list === $this->argument_list() &&
16456 $right_paren === $this->right_paren()) {
16457 return $rewriter($this, $parents ??
[]);
16459 return $rewriter(new IssetExpression(
16463 $right_paren), $parents ??
[]);
16467 public static function from_json(mixed $json, int $position, string $source) {
16468 $keyword = EditableSyntax
::from_json(
16469 $json->isset_keyword
, $position, $source);
16470 $position +
= $keyword->width();
16471 $left_paren = EditableSyntax
::from_json(
16472 $json->isset_left_paren
, $position, $source);
16473 $position +
= $left_paren->width();
16474 $argument_list = EditableSyntax
::from_json(
16475 $json->isset_argument_list
, $position, $source);
16476 $position +
= $argument_list->width();
16477 $right_paren = EditableSyntax
::from_json(
16478 $json->isset_right_paren
, $position, $source);
16479 $position +
= $right_paren->width();
16480 return new IssetExpression(
16486 public function children(): Generator
<string, EditableSyntax
, void
> {
16487 yield
$this->_keyword
;
16488 yield
$this->_left_paren
;
16489 yield
$this->_argument_list
;
16490 yield
$this->_right_paren
;
16494 final class FunctionCallExpression
extends EditableSyntax
{
16495 private EditableSyntax
$_receiver;
16496 private EditableSyntax
$_left_paren;
16497 private EditableSyntax
$_argument_list;
16498 private EditableSyntax
$_right_paren;
16499 public function __construct(
16500 EditableSyntax
$receiver,
16501 EditableSyntax
$left_paren,
16502 EditableSyntax
$argument_list,
16503 EditableSyntax
$right_paren) {
16504 parent
::__construct('function_call_expression');
16505 $this->_receiver
= $receiver;
16506 $this->_left_paren
= $left_paren;
16507 $this->_argument_list
= $argument_list;
16508 $this->_right_paren
= $right_paren;
16510 public function receiver(): EditableSyntax
{
16511 return $this->_receiver
;
16513 public function left_paren(): EditableSyntax
{
16514 return $this->_left_paren
;
16516 public function argument_list(): EditableSyntax
{
16517 return $this->_argument_list
;
16519 public function right_paren(): EditableSyntax
{
16520 return $this->_right_paren
;
16522 public function with_receiver(EditableSyntax
$receiver): FunctionCallExpression
{
16523 return new FunctionCallExpression(
16525 $this->_left_paren
,
16526 $this->_argument_list
,
16527 $this->_right_paren
);
16529 public function with_left_paren(EditableSyntax
$left_paren): FunctionCallExpression
{
16530 return new FunctionCallExpression(
16533 $this->_argument_list
,
16534 $this->_right_paren
);
16536 public function with_argument_list(EditableSyntax
$argument_list): FunctionCallExpression
{
16537 return new FunctionCallExpression(
16539 $this->_left_paren
,
16541 $this->_right_paren
);
16543 public function with_right_paren(EditableSyntax
$right_paren): FunctionCallExpression
{
16544 return new FunctionCallExpression(
16546 $this->_left_paren
,
16547 $this->_argument_list
,
16551 public function rewrite(
16553 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
16554 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
16555 $new_parents = $parents ??
[];
16556 array_push($new_parents, $this);
16557 $receiver = $this->receiver()->rewrite($rewriter, $new_parents);
16558 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
16559 $argument_list = $this->argument_list()->rewrite($rewriter, $new_parents);
16560 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
16562 $receiver === $this->receiver() &&
16563 $left_paren === $this->left_paren() &&
16564 $argument_list === $this->argument_list() &&
16565 $right_paren === $this->right_paren()) {
16566 return $rewriter($this, $parents ??
[]);
16568 return $rewriter(new FunctionCallExpression(
16572 $right_paren), $parents ??
[]);
16576 public static function from_json(mixed $json, int $position, string $source) {
16577 $receiver = EditableSyntax
::from_json(
16578 $json->function_call_receiver
, $position, $source);
16579 $position +
= $receiver->width();
16580 $left_paren = EditableSyntax
::from_json(
16581 $json->function_call_left_paren
, $position, $source);
16582 $position +
= $left_paren->width();
16583 $argument_list = EditableSyntax
::from_json(
16584 $json->function_call_argument_list
, $position, $source);
16585 $position +
= $argument_list->width();
16586 $right_paren = EditableSyntax
::from_json(
16587 $json->function_call_right_paren
, $position, $source);
16588 $position +
= $right_paren->width();
16589 return new FunctionCallExpression(
16595 public function children(): Generator
<string, EditableSyntax
, void
> {
16596 yield
$this->_receiver
;
16597 yield
$this->_left_paren
;
16598 yield
$this->_argument_list
;
16599 yield
$this->_right_paren
;
16603 final class FunctionCallWithTypeArgumentsExpression
extends EditableSyntax
{
16604 private EditableSyntax
$_receiver;
16605 private EditableSyntax
$_type_args;
16606 private EditableSyntax
$_left_paren;
16607 private EditableSyntax
$_argument_list;
16608 private EditableSyntax
$_right_paren;
16609 public function __construct(
16610 EditableSyntax
$receiver,
16611 EditableSyntax
$type_args,
16612 EditableSyntax
$left_paren,
16613 EditableSyntax
$argument_list,
16614 EditableSyntax
$right_paren) {
16615 parent
::__construct('function_call_with_type_arguments_expression');
16616 $this->_receiver
= $receiver;
16617 $this->_type_args
= $type_args;
16618 $this->_left_paren
= $left_paren;
16619 $this->_argument_list
= $argument_list;
16620 $this->_right_paren
= $right_paren;
16622 public function receiver(): EditableSyntax
{
16623 return $this->_receiver
;
16625 public function type_args(): EditableSyntax
{
16626 return $this->_type_args
;
16628 public function left_paren(): EditableSyntax
{
16629 return $this->_left_paren
;
16631 public function argument_list(): EditableSyntax
{
16632 return $this->_argument_list
;
16634 public function right_paren(): EditableSyntax
{
16635 return $this->_right_paren
;
16637 public function with_receiver(EditableSyntax
$receiver): FunctionCallWithTypeArgumentsExpression
{
16638 return new FunctionCallWithTypeArgumentsExpression(
16641 $this->_left_paren
,
16642 $this->_argument_list
,
16643 $this->_right_paren
);
16645 public function with_type_args(EditableSyntax
$type_args): FunctionCallWithTypeArgumentsExpression
{
16646 return new FunctionCallWithTypeArgumentsExpression(
16649 $this->_left_paren
,
16650 $this->_argument_list
,
16651 $this->_right_paren
);
16653 public function with_left_paren(EditableSyntax
$left_paren): FunctionCallWithTypeArgumentsExpression
{
16654 return new FunctionCallWithTypeArgumentsExpression(
16658 $this->_argument_list
,
16659 $this->_right_paren
);
16661 public function with_argument_list(EditableSyntax
$argument_list): FunctionCallWithTypeArgumentsExpression
{
16662 return new FunctionCallWithTypeArgumentsExpression(
16665 $this->_left_paren
,
16667 $this->_right_paren
);
16669 public function with_right_paren(EditableSyntax
$right_paren): FunctionCallWithTypeArgumentsExpression
{
16670 return new FunctionCallWithTypeArgumentsExpression(
16673 $this->_left_paren
,
16674 $this->_argument_list
,
16678 public function rewrite(
16680 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
16681 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
16682 $new_parents = $parents ??
[];
16683 array_push($new_parents, $this);
16684 $receiver = $this->receiver()->rewrite($rewriter, $new_parents);
16685 $type_args = $this->type_args()->rewrite($rewriter, $new_parents);
16686 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
16687 $argument_list = $this->argument_list()->rewrite($rewriter, $new_parents);
16688 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
16690 $receiver === $this->receiver() &&
16691 $type_args === $this->type_args() &&
16692 $left_paren === $this->left_paren() &&
16693 $argument_list === $this->argument_list() &&
16694 $right_paren === $this->right_paren()) {
16695 return $rewriter($this, $parents ??
[]);
16697 return $rewriter(new FunctionCallWithTypeArgumentsExpression(
16702 $right_paren), $parents ??
[]);
16706 public static function from_json(mixed $json, int $position, string $source) {
16707 $receiver = EditableSyntax
::from_json(
16708 $json->function_call_with_type_arguments_receiver
, $position, $source);
16709 $position +
= $receiver->width();
16710 $type_args = EditableSyntax
::from_json(
16711 $json->function_call_with_type_arguments_type_args
, $position, $source);
16712 $position +
= $type_args->width();
16713 $left_paren = EditableSyntax
::from_json(
16714 $json->function_call_with_type_arguments_left_paren
, $position, $source);
16715 $position +
= $left_paren->width();
16716 $argument_list = EditableSyntax
::from_json(
16717 $json->function_call_with_type_arguments_argument_list
, $position, $source);
16718 $position +
= $argument_list->width();
16719 $right_paren = EditableSyntax
::from_json(
16720 $json->function_call_with_type_arguments_right_paren
, $position, $source);
16721 $position +
= $right_paren->width();
16722 return new FunctionCallWithTypeArgumentsExpression(
16729 public function children(): Generator
<string, EditableSyntax
, void
> {
16730 yield
$this->_receiver
;
16731 yield
$this->_type_args
;
16732 yield
$this->_left_paren
;
16733 yield
$this->_argument_list
;
16734 yield
$this->_right_paren
;
16738 final class ParenthesizedExpression
extends EditableSyntax
{
16739 private EditableSyntax
$_left_paren;
16740 private EditableSyntax
$_expression;
16741 private EditableSyntax
$_right_paren;
16742 public function __construct(
16743 EditableSyntax
$left_paren,
16744 EditableSyntax
$expression,
16745 EditableSyntax
$right_paren) {
16746 parent
::__construct('parenthesized_expression');
16747 $this->_left_paren
= $left_paren;
16748 $this->_expression
= $expression;
16749 $this->_right_paren
= $right_paren;
16751 public function left_paren(): EditableSyntax
{
16752 return $this->_left_paren
;
16754 public function expression(): EditableSyntax
{
16755 return $this->_expression
;
16757 public function right_paren(): EditableSyntax
{
16758 return $this->_right_paren
;
16760 public function with_left_paren(EditableSyntax
$left_paren): ParenthesizedExpression
{
16761 return new ParenthesizedExpression(
16763 $this->_expression
,
16764 $this->_right_paren
);
16766 public function with_expression(EditableSyntax
$expression): ParenthesizedExpression
{
16767 return new ParenthesizedExpression(
16768 $this->_left_paren
,
16770 $this->_right_paren
);
16772 public function with_right_paren(EditableSyntax
$right_paren): ParenthesizedExpression
{
16773 return new ParenthesizedExpression(
16774 $this->_left_paren
,
16775 $this->_expression
,
16779 public function rewrite(
16781 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
16782 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
16783 $new_parents = $parents ??
[];
16784 array_push($new_parents, $this);
16785 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
16786 $expression = $this->expression()->rewrite($rewriter, $new_parents);
16787 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
16789 $left_paren === $this->left_paren() &&
16790 $expression === $this->expression() &&
16791 $right_paren === $this->right_paren()) {
16792 return $rewriter($this, $parents ??
[]);
16794 return $rewriter(new ParenthesizedExpression(
16797 $right_paren), $parents ??
[]);
16801 public static function from_json(mixed $json, int $position, string $source) {
16802 $left_paren = EditableSyntax
::from_json(
16803 $json->parenthesized_expression_left_paren
, $position, $source);
16804 $position +
= $left_paren->width();
16805 $expression = EditableSyntax
::from_json(
16806 $json->parenthesized_expression_expression
, $position, $source);
16807 $position +
= $expression->width();
16808 $right_paren = EditableSyntax
::from_json(
16809 $json->parenthesized_expression_right_paren
, $position, $source);
16810 $position +
= $right_paren->width();
16811 return new ParenthesizedExpression(
16816 public function children(): Generator
<string, EditableSyntax
, void
> {
16817 yield
$this->_left_paren
;
16818 yield
$this->_expression
;
16819 yield
$this->_right_paren
;
16823 final class BracedExpression
extends EditableSyntax
{
16824 private EditableSyntax
$_left_brace;
16825 private EditableSyntax
$_expression;
16826 private EditableSyntax
$_right_brace;
16827 public function __construct(
16828 EditableSyntax
$left_brace,
16829 EditableSyntax
$expression,
16830 EditableSyntax
$right_brace) {
16831 parent
::__construct('braced_expression');
16832 $this->_left_brace
= $left_brace;
16833 $this->_expression
= $expression;
16834 $this->_right_brace
= $right_brace;
16836 public function left_brace(): EditableSyntax
{
16837 return $this->_left_brace
;
16839 public function expression(): EditableSyntax
{
16840 return $this->_expression
;
16842 public function right_brace(): EditableSyntax
{
16843 return $this->_right_brace
;
16845 public function with_left_brace(EditableSyntax
$left_brace): BracedExpression
{
16846 return new BracedExpression(
16848 $this->_expression
,
16849 $this->_right_brace
);
16851 public function with_expression(EditableSyntax
$expression): BracedExpression
{
16852 return new BracedExpression(
16853 $this->_left_brace
,
16855 $this->_right_brace
);
16857 public function with_right_brace(EditableSyntax
$right_brace): BracedExpression
{
16858 return new BracedExpression(
16859 $this->_left_brace
,
16860 $this->_expression
,
16864 public function rewrite(
16866 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
16867 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
16868 $new_parents = $parents ??
[];
16869 array_push($new_parents, $this);
16870 $left_brace = $this->left_brace()->rewrite($rewriter, $new_parents);
16871 $expression = $this->expression()->rewrite($rewriter, $new_parents);
16872 $right_brace = $this->right_brace()->rewrite($rewriter, $new_parents);
16874 $left_brace === $this->left_brace() &&
16875 $expression === $this->expression() &&
16876 $right_brace === $this->right_brace()) {
16877 return $rewriter($this, $parents ??
[]);
16879 return $rewriter(new BracedExpression(
16882 $right_brace), $parents ??
[]);
16886 public static function from_json(mixed $json, int $position, string $source) {
16887 $left_brace = EditableSyntax
::from_json(
16888 $json->braced_expression_left_brace
, $position, $source);
16889 $position +
= $left_brace->width();
16890 $expression = EditableSyntax
::from_json(
16891 $json->braced_expression_expression
, $position, $source);
16892 $position +
= $expression->width();
16893 $right_brace = EditableSyntax
::from_json(
16894 $json->braced_expression_right_brace
, $position, $source);
16895 $position +
= $right_brace->width();
16896 return new BracedExpression(
16901 public function children(): Generator
<string, EditableSyntax
, void
> {
16902 yield
$this->_left_brace
;
16903 yield
$this->_expression
;
16904 yield
$this->_right_brace
;
16908 final class EmbeddedBracedExpression
extends EditableSyntax
{
16909 private EditableSyntax
$_left_brace;
16910 private EditableSyntax
$_expression;
16911 private EditableSyntax
$_right_brace;
16912 public function __construct(
16913 EditableSyntax
$left_brace,
16914 EditableSyntax
$expression,
16915 EditableSyntax
$right_brace) {
16916 parent
::__construct('embedded_braced_expression');
16917 $this->_left_brace
= $left_brace;
16918 $this->_expression
= $expression;
16919 $this->_right_brace
= $right_brace;
16921 public function left_brace(): EditableSyntax
{
16922 return $this->_left_brace
;
16924 public function expression(): EditableSyntax
{
16925 return $this->_expression
;
16927 public function right_brace(): EditableSyntax
{
16928 return $this->_right_brace
;
16930 public function with_left_brace(EditableSyntax
$left_brace): EmbeddedBracedExpression
{
16931 return new EmbeddedBracedExpression(
16933 $this->_expression
,
16934 $this->_right_brace
);
16936 public function with_expression(EditableSyntax
$expression): EmbeddedBracedExpression
{
16937 return new EmbeddedBracedExpression(
16938 $this->_left_brace
,
16940 $this->_right_brace
);
16942 public function with_right_brace(EditableSyntax
$right_brace): EmbeddedBracedExpression
{
16943 return new EmbeddedBracedExpression(
16944 $this->_left_brace
,
16945 $this->_expression
,
16949 public function rewrite(
16951 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
16952 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
16953 $new_parents = $parents ??
[];
16954 array_push($new_parents, $this);
16955 $left_brace = $this->left_brace()->rewrite($rewriter, $new_parents);
16956 $expression = $this->expression()->rewrite($rewriter, $new_parents);
16957 $right_brace = $this->right_brace()->rewrite($rewriter, $new_parents);
16959 $left_brace === $this->left_brace() &&
16960 $expression === $this->expression() &&
16961 $right_brace === $this->right_brace()) {
16962 return $rewriter($this, $parents ??
[]);
16964 return $rewriter(new EmbeddedBracedExpression(
16967 $right_brace), $parents ??
[]);
16971 public static function from_json(mixed $json, int $position, string $source) {
16972 $left_brace = EditableSyntax
::from_json(
16973 $json->embedded_braced_expression_left_brace
, $position, $source);
16974 $position +
= $left_brace->width();
16975 $expression = EditableSyntax
::from_json(
16976 $json->embedded_braced_expression_expression
, $position, $source);
16977 $position +
= $expression->width();
16978 $right_brace = EditableSyntax
::from_json(
16979 $json->embedded_braced_expression_right_brace
, $position, $source);
16980 $position +
= $right_brace->width();
16981 return new EmbeddedBracedExpression(
16986 public function children(): Generator
<string, EditableSyntax
, void
> {
16987 yield
$this->_left_brace
;
16988 yield
$this->_expression
;
16989 yield
$this->_right_brace
;
16993 final class ListExpression
extends EditableSyntax
{
16994 private EditableSyntax
$_keyword;
16995 private EditableSyntax
$_left_paren;
16996 private EditableSyntax
$_members;
16997 private EditableSyntax
$_right_paren;
16998 public function __construct(
16999 EditableSyntax
$keyword,
17000 EditableSyntax
$left_paren,
17001 EditableSyntax
$members,
17002 EditableSyntax
$right_paren) {
17003 parent
::__construct('list_expression');
17004 $this->_keyword
= $keyword;
17005 $this->_left_paren
= $left_paren;
17006 $this->_members
= $members;
17007 $this->_right_paren
= $right_paren;
17009 public function keyword(): EditableSyntax
{
17010 return $this->_keyword
;
17012 public function left_paren(): EditableSyntax
{
17013 return $this->_left_paren
;
17015 public function members(): EditableSyntax
{
17016 return $this->_members
;
17018 public function right_paren(): EditableSyntax
{
17019 return $this->_right_paren
;
17021 public function with_keyword(EditableSyntax
$keyword): ListExpression
{
17022 return new ListExpression(
17024 $this->_left_paren
,
17026 $this->_right_paren
);
17028 public function with_left_paren(EditableSyntax
$left_paren): ListExpression
{
17029 return new ListExpression(
17033 $this->_right_paren
);
17035 public function with_members(EditableSyntax
$members): ListExpression
{
17036 return new ListExpression(
17038 $this->_left_paren
,
17040 $this->_right_paren
);
17042 public function with_right_paren(EditableSyntax
$right_paren): ListExpression
{
17043 return new ListExpression(
17045 $this->_left_paren
,
17050 public function rewrite(
17052 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
17053 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
17054 $new_parents = $parents ??
[];
17055 array_push($new_parents, $this);
17056 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
17057 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
17058 $members = $this->members()->rewrite($rewriter, $new_parents);
17059 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
17061 $keyword === $this->keyword() &&
17062 $left_paren === $this->left_paren() &&
17063 $members === $this->members() &&
17064 $right_paren === $this->right_paren()) {
17065 return $rewriter($this, $parents ??
[]);
17067 return $rewriter(new ListExpression(
17071 $right_paren), $parents ??
[]);
17075 public static function from_json(mixed $json, int $position, string $source) {
17076 $keyword = EditableSyntax
::from_json(
17077 $json->list_keyword
, $position, $source);
17078 $position +
= $keyword->width();
17079 $left_paren = EditableSyntax
::from_json(
17080 $json->list_left_paren
, $position, $source);
17081 $position +
= $left_paren->width();
17082 $members = EditableSyntax
::from_json(
17083 $json->list_members
, $position, $source);
17084 $position +
= $members->width();
17085 $right_paren = EditableSyntax
::from_json(
17086 $json->list_right_paren
, $position, $source);
17087 $position +
= $right_paren->width();
17088 return new ListExpression(
17094 public function children(): Generator
<string, EditableSyntax
, void
> {
17095 yield
$this->_keyword
;
17096 yield
$this->_left_paren
;
17097 yield
$this->_members
;
17098 yield
$this->_right_paren
;
17102 final class CollectionLiteralExpression
extends EditableSyntax
{
17103 private EditableSyntax
$_name;
17104 private EditableSyntax
$_left_brace;
17105 private EditableSyntax
$_initializers;
17106 private EditableSyntax
$_right_brace;
17107 public function __construct(
17108 EditableSyntax
$name,
17109 EditableSyntax
$left_brace,
17110 EditableSyntax
$initializers,
17111 EditableSyntax
$right_brace) {
17112 parent
::__construct('collection_literal_expression');
17113 $this->_name
= $name;
17114 $this->_left_brace
= $left_brace;
17115 $this->_initializers
= $initializers;
17116 $this->_right_brace
= $right_brace;
17118 public function name(): EditableSyntax
{
17119 return $this->_name
;
17121 public function left_brace(): EditableSyntax
{
17122 return $this->_left_brace
;
17124 public function initializers(): EditableSyntax
{
17125 return $this->_initializers
;
17127 public function right_brace(): EditableSyntax
{
17128 return $this->_right_brace
;
17130 public function with_name(EditableSyntax
$name): CollectionLiteralExpression
{
17131 return new CollectionLiteralExpression(
17133 $this->_left_brace
,
17134 $this->_initializers
,
17135 $this->_right_brace
);
17137 public function with_left_brace(EditableSyntax
$left_brace): CollectionLiteralExpression
{
17138 return new CollectionLiteralExpression(
17141 $this->_initializers
,
17142 $this->_right_brace
);
17144 public function with_initializers(EditableSyntax
$initializers): CollectionLiteralExpression
{
17145 return new CollectionLiteralExpression(
17147 $this->_left_brace
,
17149 $this->_right_brace
);
17151 public function with_right_brace(EditableSyntax
$right_brace): CollectionLiteralExpression
{
17152 return new CollectionLiteralExpression(
17154 $this->_left_brace
,
17155 $this->_initializers
,
17159 public function rewrite(
17161 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
17162 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
17163 $new_parents = $parents ??
[];
17164 array_push($new_parents, $this);
17165 $name = $this->name()->rewrite($rewriter, $new_parents);
17166 $left_brace = $this->left_brace()->rewrite($rewriter, $new_parents);
17167 $initializers = $this->initializers()->rewrite($rewriter, $new_parents);
17168 $right_brace = $this->right_brace()->rewrite($rewriter, $new_parents);
17170 $name === $this->name() &&
17171 $left_brace === $this->left_brace() &&
17172 $initializers === $this->initializers() &&
17173 $right_brace === $this->right_brace()) {
17174 return $rewriter($this, $parents ??
[]);
17176 return $rewriter(new CollectionLiteralExpression(
17180 $right_brace), $parents ??
[]);
17184 public static function from_json(mixed $json, int $position, string $source) {
17185 $name = EditableSyntax
::from_json(
17186 $json->collection_literal_name
, $position, $source);
17187 $position +
= $name->width();
17188 $left_brace = EditableSyntax
::from_json(
17189 $json->collection_literal_left_brace
, $position, $source);
17190 $position +
= $left_brace->width();
17191 $initializers = EditableSyntax
::from_json(
17192 $json->collection_literal_initializers
, $position, $source);
17193 $position +
= $initializers->width();
17194 $right_brace = EditableSyntax
::from_json(
17195 $json->collection_literal_right_brace
, $position, $source);
17196 $position +
= $right_brace->width();
17197 return new CollectionLiteralExpression(
17203 public function children(): Generator
<string, EditableSyntax
, void
> {
17204 yield
$this->_name
;
17205 yield
$this->_left_brace
;
17206 yield
$this->_initializers
;
17207 yield
$this->_right_brace
;
17211 final class ObjectCreationExpression
extends EditableSyntax
{
17212 private EditableSyntax
$_new_keyword;
17213 private EditableSyntax
$_object;
17214 public function __construct(
17215 EditableSyntax
$new_keyword,
17216 EditableSyntax
$object) {
17217 parent
::__construct('object_creation_expression');
17218 $this->_new_keyword
= $new_keyword;
17219 $this->_object
= $object;
17221 public function new_keyword(): EditableSyntax
{
17222 return $this->_new_keyword
;
17224 public function object(): EditableSyntax
{
17225 return $this->_object
;
17227 public function with_new_keyword(EditableSyntax
$new_keyword): ObjectCreationExpression
{
17228 return new ObjectCreationExpression(
17232 public function with_object(EditableSyntax
$object): ObjectCreationExpression
{
17233 return new ObjectCreationExpression(
17234 $this->_new_keyword
,
17238 public function rewrite(
17240 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
17241 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
17242 $new_parents = $parents ??
[];
17243 array_push($new_parents, $this);
17244 $new_keyword = $this->new_keyword()->rewrite($rewriter, $new_parents);
17245 $object = $this->object()->rewrite($rewriter, $new_parents);
17247 $new_keyword === $this->new_keyword() &&
17248 $object === $this->object()) {
17249 return $rewriter($this, $parents ??
[]);
17251 return $rewriter(new ObjectCreationExpression(
17253 $object), $parents ??
[]);
17257 public static function from_json(mixed $json, int $position, string $source) {
17258 $new_keyword = EditableSyntax
::from_json(
17259 $json->object_creation_new_keyword
, $position, $source);
17260 $position +
= $new_keyword->width();
17261 $object = EditableSyntax
::from_json(
17262 $json->object_creation_object
, $position, $source);
17263 $position +
= $object->width();
17264 return new ObjectCreationExpression(
17268 public function children(): Generator
<string, EditableSyntax
, void
> {
17269 yield
$this->_new_keyword
;
17270 yield
$this->_object
;
17274 final class ConstructorCall
extends EditableSyntax
{
17275 private EditableSyntax
$_type;
17276 private EditableSyntax
$_left_paren;
17277 private EditableSyntax
$_argument_list;
17278 private EditableSyntax
$_right_paren;
17279 public function __construct(
17280 EditableSyntax
$type,
17281 EditableSyntax
$left_paren,
17282 EditableSyntax
$argument_list,
17283 EditableSyntax
$right_paren) {
17284 parent
::__construct('constructor_call');
17285 $this->_type
= $type;
17286 $this->_left_paren
= $left_paren;
17287 $this->_argument_list
= $argument_list;
17288 $this->_right_paren
= $right_paren;
17290 public function type(): EditableSyntax
{
17291 return $this->_type
;
17293 public function left_paren(): EditableSyntax
{
17294 return $this->_left_paren
;
17296 public function argument_list(): EditableSyntax
{
17297 return $this->_argument_list
;
17299 public function right_paren(): EditableSyntax
{
17300 return $this->_right_paren
;
17302 public function with_type(EditableSyntax
$type): ConstructorCall
{
17303 return new ConstructorCall(
17305 $this->_left_paren
,
17306 $this->_argument_list
,
17307 $this->_right_paren
);
17309 public function with_left_paren(EditableSyntax
$left_paren): ConstructorCall
{
17310 return new ConstructorCall(
17313 $this->_argument_list
,
17314 $this->_right_paren
);
17316 public function with_argument_list(EditableSyntax
$argument_list): ConstructorCall
{
17317 return new ConstructorCall(
17319 $this->_left_paren
,
17321 $this->_right_paren
);
17323 public function with_right_paren(EditableSyntax
$right_paren): ConstructorCall
{
17324 return new ConstructorCall(
17326 $this->_left_paren
,
17327 $this->_argument_list
,
17331 public function rewrite(
17333 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
17334 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
17335 $new_parents = $parents ??
[];
17336 array_push($new_parents, $this);
17337 $type = $this->type()->rewrite($rewriter, $new_parents);
17338 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
17339 $argument_list = $this->argument_list()->rewrite($rewriter, $new_parents);
17340 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
17342 $type === $this->type() &&
17343 $left_paren === $this->left_paren() &&
17344 $argument_list === $this->argument_list() &&
17345 $right_paren === $this->right_paren()) {
17346 return $rewriter($this, $parents ??
[]);
17348 return $rewriter(new ConstructorCall(
17352 $right_paren), $parents ??
[]);
17356 public static function from_json(mixed $json, int $position, string $source) {
17357 $type = EditableSyntax
::from_json(
17358 $json->constructor_call_type
, $position, $source);
17359 $position +
= $type->width();
17360 $left_paren = EditableSyntax
::from_json(
17361 $json->constructor_call_left_paren
, $position, $source);
17362 $position +
= $left_paren->width();
17363 $argument_list = EditableSyntax
::from_json(
17364 $json->constructor_call_argument_list
, $position, $source);
17365 $position +
= $argument_list->width();
17366 $right_paren = EditableSyntax
::from_json(
17367 $json->constructor_call_right_paren
, $position, $source);
17368 $position +
= $right_paren->width();
17369 return new ConstructorCall(
17375 public function children(): Generator
<string, EditableSyntax
, void
> {
17376 yield
$this->_type
;
17377 yield
$this->_left_paren
;
17378 yield
$this->_argument_list
;
17379 yield
$this->_right_paren
;
17383 final class ArrayCreationExpression
extends EditableSyntax
{
17384 private EditableSyntax
$_left_bracket;
17385 private EditableSyntax
$_members;
17386 private EditableSyntax
$_right_bracket;
17387 public function __construct(
17388 EditableSyntax
$left_bracket,
17389 EditableSyntax
$members,
17390 EditableSyntax
$right_bracket) {
17391 parent
::__construct('array_creation_expression');
17392 $this->_left_bracket
= $left_bracket;
17393 $this->_members
= $members;
17394 $this->_right_bracket
= $right_bracket;
17396 public function left_bracket(): EditableSyntax
{
17397 return $this->_left_bracket
;
17399 public function members(): EditableSyntax
{
17400 return $this->_members
;
17402 public function right_bracket(): EditableSyntax
{
17403 return $this->_right_bracket
;
17405 public function with_left_bracket(EditableSyntax
$left_bracket): ArrayCreationExpression
{
17406 return new ArrayCreationExpression(
17409 $this->_right_bracket
);
17411 public function with_members(EditableSyntax
$members): ArrayCreationExpression
{
17412 return new ArrayCreationExpression(
17413 $this->_left_bracket
,
17415 $this->_right_bracket
);
17417 public function with_right_bracket(EditableSyntax
$right_bracket): ArrayCreationExpression
{
17418 return new ArrayCreationExpression(
17419 $this->_left_bracket
,
17424 public function rewrite(
17426 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
17427 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
17428 $new_parents = $parents ??
[];
17429 array_push($new_parents, $this);
17430 $left_bracket = $this->left_bracket()->rewrite($rewriter, $new_parents);
17431 $members = $this->members()->rewrite($rewriter, $new_parents);
17432 $right_bracket = $this->right_bracket()->rewrite($rewriter, $new_parents);
17434 $left_bracket === $this->left_bracket() &&
17435 $members === $this->members() &&
17436 $right_bracket === $this->right_bracket()) {
17437 return $rewriter($this, $parents ??
[]);
17439 return $rewriter(new ArrayCreationExpression(
17442 $right_bracket), $parents ??
[]);
17446 public static function from_json(mixed $json, int $position, string $source) {
17447 $left_bracket = EditableSyntax
::from_json(
17448 $json->array_creation_left_bracket
, $position, $source);
17449 $position +
= $left_bracket->width();
17450 $members = EditableSyntax
::from_json(
17451 $json->array_creation_members
, $position, $source);
17452 $position +
= $members->width();
17453 $right_bracket = EditableSyntax
::from_json(
17454 $json->array_creation_right_bracket
, $position, $source);
17455 $position +
= $right_bracket->width();
17456 return new ArrayCreationExpression(
17461 public function children(): Generator
<string, EditableSyntax
, void
> {
17462 yield
$this->_left_bracket
;
17463 yield
$this->_members
;
17464 yield
$this->_right_bracket
;
17468 final class ArrayIntrinsicExpression
extends EditableSyntax
{
17469 private EditableSyntax
$_keyword;
17470 private EditableSyntax
$_left_paren;
17471 private EditableSyntax
$_members;
17472 private EditableSyntax
$_right_paren;
17473 public function __construct(
17474 EditableSyntax
$keyword,
17475 EditableSyntax
$left_paren,
17476 EditableSyntax
$members,
17477 EditableSyntax
$right_paren) {
17478 parent
::__construct('array_intrinsic_expression');
17479 $this->_keyword
= $keyword;
17480 $this->_left_paren
= $left_paren;
17481 $this->_members
= $members;
17482 $this->_right_paren
= $right_paren;
17484 public function keyword(): EditableSyntax
{
17485 return $this->_keyword
;
17487 public function left_paren(): EditableSyntax
{
17488 return $this->_left_paren
;
17490 public function members(): EditableSyntax
{
17491 return $this->_members
;
17493 public function right_paren(): EditableSyntax
{
17494 return $this->_right_paren
;
17496 public function with_keyword(EditableSyntax
$keyword): ArrayIntrinsicExpression
{
17497 return new ArrayIntrinsicExpression(
17499 $this->_left_paren
,
17501 $this->_right_paren
);
17503 public function with_left_paren(EditableSyntax
$left_paren): ArrayIntrinsicExpression
{
17504 return new ArrayIntrinsicExpression(
17508 $this->_right_paren
);
17510 public function with_members(EditableSyntax
$members): ArrayIntrinsicExpression
{
17511 return new ArrayIntrinsicExpression(
17513 $this->_left_paren
,
17515 $this->_right_paren
);
17517 public function with_right_paren(EditableSyntax
$right_paren): ArrayIntrinsicExpression
{
17518 return new ArrayIntrinsicExpression(
17520 $this->_left_paren
,
17525 public function rewrite(
17527 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
17528 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
17529 $new_parents = $parents ??
[];
17530 array_push($new_parents, $this);
17531 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
17532 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
17533 $members = $this->members()->rewrite($rewriter, $new_parents);
17534 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
17536 $keyword === $this->keyword() &&
17537 $left_paren === $this->left_paren() &&
17538 $members === $this->members() &&
17539 $right_paren === $this->right_paren()) {
17540 return $rewriter($this, $parents ??
[]);
17542 return $rewriter(new ArrayIntrinsicExpression(
17546 $right_paren), $parents ??
[]);
17550 public static function from_json(mixed $json, int $position, string $source) {
17551 $keyword = EditableSyntax
::from_json(
17552 $json->array_intrinsic_keyword
, $position, $source);
17553 $position +
= $keyword->width();
17554 $left_paren = EditableSyntax
::from_json(
17555 $json->array_intrinsic_left_paren
, $position, $source);
17556 $position +
= $left_paren->width();
17557 $members = EditableSyntax
::from_json(
17558 $json->array_intrinsic_members
, $position, $source);
17559 $position +
= $members->width();
17560 $right_paren = EditableSyntax
::from_json(
17561 $json->array_intrinsic_right_paren
, $position, $source);
17562 $position +
= $right_paren->width();
17563 return new ArrayIntrinsicExpression(
17569 public function children(): Generator
<string, EditableSyntax
, void
> {
17570 yield
$this->_keyword
;
17571 yield
$this->_left_paren
;
17572 yield
$this->_members
;
17573 yield
$this->_right_paren
;
17577 final class DarrayIntrinsicExpression
extends EditableSyntax
{
17578 private EditableSyntax
$_keyword;
17579 private EditableSyntax
$_left_bracket;
17580 private EditableSyntax
$_members;
17581 private EditableSyntax
$_right_bracket;
17582 public function __construct(
17583 EditableSyntax
$keyword,
17584 EditableSyntax
$left_bracket,
17585 EditableSyntax
$members,
17586 EditableSyntax
$right_bracket) {
17587 parent
::__construct('darray_intrinsic_expression');
17588 $this->_keyword
= $keyword;
17589 $this->_left_bracket
= $left_bracket;
17590 $this->_members
= $members;
17591 $this->_right_bracket
= $right_bracket;
17593 public function keyword(): EditableSyntax
{
17594 return $this->_keyword
;
17596 public function left_bracket(): EditableSyntax
{
17597 return $this->_left_bracket
;
17599 public function members(): EditableSyntax
{
17600 return $this->_members
;
17602 public function right_bracket(): EditableSyntax
{
17603 return $this->_right_bracket
;
17605 public function with_keyword(EditableSyntax
$keyword): DarrayIntrinsicExpression
{
17606 return new DarrayIntrinsicExpression(
17608 $this->_left_bracket
,
17610 $this->_right_bracket
);
17612 public function with_left_bracket(EditableSyntax
$left_bracket): DarrayIntrinsicExpression
{
17613 return new DarrayIntrinsicExpression(
17617 $this->_right_bracket
);
17619 public function with_members(EditableSyntax
$members): DarrayIntrinsicExpression
{
17620 return new DarrayIntrinsicExpression(
17622 $this->_left_bracket
,
17624 $this->_right_bracket
);
17626 public function with_right_bracket(EditableSyntax
$right_bracket): DarrayIntrinsicExpression
{
17627 return new DarrayIntrinsicExpression(
17629 $this->_left_bracket
,
17634 public function rewrite(
17636 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
17637 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
17638 $new_parents = $parents ??
[];
17639 array_push($new_parents, $this);
17640 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
17641 $left_bracket = $this->left_bracket()->rewrite($rewriter, $new_parents);
17642 $members = $this->members()->rewrite($rewriter, $new_parents);
17643 $right_bracket = $this->right_bracket()->rewrite($rewriter, $new_parents);
17645 $keyword === $this->keyword() &&
17646 $left_bracket === $this->left_bracket() &&
17647 $members === $this->members() &&
17648 $right_bracket === $this->right_bracket()) {
17649 return $rewriter($this, $parents ??
[]);
17651 return $rewriter(new DarrayIntrinsicExpression(
17655 $right_bracket), $parents ??
[]);
17659 public static function from_json(mixed $json, int $position, string $source) {
17660 $keyword = EditableSyntax
::from_json(
17661 $json->darray_intrinsic_keyword
, $position, $source);
17662 $position +
= $keyword->width();
17663 $left_bracket = EditableSyntax
::from_json(
17664 $json->darray_intrinsic_left_bracket
, $position, $source);
17665 $position +
= $left_bracket->width();
17666 $members = EditableSyntax
::from_json(
17667 $json->darray_intrinsic_members
, $position, $source);
17668 $position +
= $members->width();
17669 $right_bracket = EditableSyntax
::from_json(
17670 $json->darray_intrinsic_right_bracket
, $position, $source);
17671 $position +
= $right_bracket->width();
17672 return new DarrayIntrinsicExpression(
17678 public function children(): Generator
<string, EditableSyntax
, void
> {
17679 yield
$this->_keyword
;
17680 yield
$this->_left_bracket
;
17681 yield
$this->_members
;
17682 yield
$this->_right_bracket
;
17686 final class DictionaryIntrinsicExpression
extends EditableSyntax
{
17687 private EditableSyntax
$_keyword;
17688 private EditableSyntax
$_left_bracket;
17689 private EditableSyntax
$_members;
17690 private EditableSyntax
$_right_bracket;
17691 public function __construct(
17692 EditableSyntax
$keyword,
17693 EditableSyntax
$left_bracket,
17694 EditableSyntax
$members,
17695 EditableSyntax
$right_bracket) {
17696 parent
::__construct('dictionary_intrinsic_expression');
17697 $this->_keyword
= $keyword;
17698 $this->_left_bracket
= $left_bracket;
17699 $this->_members
= $members;
17700 $this->_right_bracket
= $right_bracket;
17702 public function keyword(): EditableSyntax
{
17703 return $this->_keyword
;
17705 public function left_bracket(): EditableSyntax
{
17706 return $this->_left_bracket
;
17708 public function members(): EditableSyntax
{
17709 return $this->_members
;
17711 public function right_bracket(): EditableSyntax
{
17712 return $this->_right_bracket
;
17714 public function with_keyword(EditableSyntax
$keyword): DictionaryIntrinsicExpression
{
17715 return new DictionaryIntrinsicExpression(
17717 $this->_left_bracket
,
17719 $this->_right_bracket
);
17721 public function with_left_bracket(EditableSyntax
$left_bracket): DictionaryIntrinsicExpression
{
17722 return new DictionaryIntrinsicExpression(
17726 $this->_right_bracket
);
17728 public function with_members(EditableSyntax
$members): DictionaryIntrinsicExpression
{
17729 return new DictionaryIntrinsicExpression(
17731 $this->_left_bracket
,
17733 $this->_right_bracket
);
17735 public function with_right_bracket(EditableSyntax
$right_bracket): DictionaryIntrinsicExpression
{
17736 return new DictionaryIntrinsicExpression(
17738 $this->_left_bracket
,
17743 public function rewrite(
17745 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
17746 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
17747 $new_parents = $parents ??
[];
17748 array_push($new_parents, $this);
17749 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
17750 $left_bracket = $this->left_bracket()->rewrite($rewriter, $new_parents);
17751 $members = $this->members()->rewrite($rewriter, $new_parents);
17752 $right_bracket = $this->right_bracket()->rewrite($rewriter, $new_parents);
17754 $keyword === $this->keyword() &&
17755 $left_bracket === $this->left_bracket() &&
17756 $members === $this->members() &&
17757 $right_bracket === $this->right_bracket()) {
17758 return $rewriter($this, $parents ??
[]);
17760 return $rewriter(new DictionaryIntrinsicExpression(
17764 $right_bracket), $parents ??
[]);
17768 public static function from_json(mixed $json, int $position, string $source) {
17769 $keyword = EditableSyntax
::from_json(
17770 $json->dictionary_intrinsic_keyword
, $position, $source);
17771 $position +
= $keyword->width();
17772 $left_bracket = EditableSyntax
::from_json(
17773 $json->dictionary_intrinsic_left_bracket
, $position, $source);
17774 $position +
= $left_bracket->width();
17775 $members = EditableSyntax
::from_json(
17776 $json->dictionary_intrinsic_members
, $position, $source);
17777 $position +
= $members->width();
17778 $right_bracket = EditableSyntax
::from_json(
17779 $json->dictionary_intrinsic_right_bracket
, $position, $source);
17780 $position +
= $right_bracket->width();
17781 return new DictionaryIntrinsicExpression(
17787 public function children(): Generator
<string, EditableSyntax
, void
> {
17788 yield
$this->_keyword
;
17789 yield
$this->_left_bracket
;
17790 yield
$this->_members
;
17791 yield
$this->_right_bracket
;
17795 final class KeysetIntrinsicExpression
extends EditableSyntax
{
17796 private EditableSyntax
$_keyword;
17797 private EditableSyntax
$_left_bracket;
17798 private EditableSyntax
$_members;
17799 private EditableSyntax
$_right_bracket;
17800 public function __construct(
17801 EditableSyntax
$keyword,
17802 EditableSyntax
$left_bracket,
17803 EditableSyntax
$members,
17804 EditableSyntax
$right_bracket) {
17805 parent
::__construct('keyset_intrinsic_expression');
17806 $this->_keyword
= $keyword;
17807 $this->_left_bracket
= $left_bracket;
17808 $this->_members
= $members;
17809 $this->_right_bracket
= $right_bracket;
17811 public function keyword(): EditableSyntax
{
17812 return $this->_keyword
;
17814 public function left_bracket(): EditableSyntax
{
17815 return $this->_left_bracket
;
17817 public function members(): EditableSyntax
{
17818 return $this->_members
;
17820 public function right_bracket(): EditableSyntax
{
17821 return $this->_right_bracket
;
17823 public function with_keyword(EditableSyntax
$keyword): KeysetIntrinsicExpression
{
17824 return new KeysetIntrinsicExpression(
17826 $this->_left_bracket
,
17828 $this->_right_bracket
);
17830 public function with_left_bracket(EditableSyntax
$left_bracket): KeysetIntrinsicExpression
{
17831 return new KeysetIntrinsicExpression(
17835 $this->_right_bracket
);
17837 public function with_members(EditableSyntax
$members): KeysetIntrinsicExpression
{
17838 return new KeysetIntrinsicExpression(
17840 $this->_left_bracket
,
17842 $this->_right_bracket
);
17844 public function with_right_bracket(EditableSyntax
$right_bracket): KeysetIntrinsicExpression
{
17845 return new KeysetIntrinsicExpression(
17847 $this->_left_bracket
,
17852 public function rewrite(
17854 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
17855 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
17856 $new_parents = $parents ??
[];
17857 array_push($new_parents, $this);
17858 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
17859 $left_bracket = $this->left_bracket()->rewrite($rewriter, $new_parents);
17860 $members = $this->members()->rewrite($rewriter, $new_parents);
17861 $right_bracket = $this->right_bracket()->rewrite($rewriter, $new_parents);
17863 $keyword === $this->keyword() &&
17864 $left_bracket === $this->left_bracket() &&
17865 $members === $this->members() &&
17866 $right_bracket === $this->right_bracket()) {
17867 return $rewriter($this, $parents ??
[]);
17869 return $rewriter(new KeysetIntrinsicExpression(
17873 $right_bracket), $parents ??
[]);
17877 public static function from_json(mixed $json, int $position, string $source) {
17878 $keyword = EditableSyntax
::from_json(
17879 $json->keyset_intrinsic_keyword
, $position, $source);
17880 $position +
= $keyword->width();
17881 $left_bracket = EditableSyntax
::from_json(
17882 $json->keyset_intrinsic_left_bracket
, $position, $source);
17883 $position +
= $left_bracket->width();
17884 $members = EditableSyntax
::from_json(
17885 $json->keyset_intrinsic_members
, $position, $source);
17886 $position +
= $members->width();
17887 $right_bracket = EditableSyntax
::from_json(
17888 $json->keyset_intrinsic_right_bracket
, $position, $source);
17889 $position +
= $right_bracket->width();
17890 return new KeysetIntrinsicExpression(
17896 public function children(): Generator
<string, EditableSyntax
, void
> {
17897 yield
$this->_keyword
;
17898 yield
$this->_left_bracket
;
17899 yield
$this->_members
;
17900 yield
$this->_right_bracket
;
17904 final class VarrayIntrinsicExpression
extends EditableSyntax
{
17905 private EditableSyntax
$_keyword;
17906 private EditableSyntax
$_left_bracket;
17907 private EditableSyntax
$_members;
17908 private EditableSyntax
$_right_bracket;
17909 public function __construct(
17910 EditableSyntax
$keyword,
17911 EditableSyntax
$left_bracket,
17912 EditableSyntax
$members,
17913 EditableSyntax
$right_bracket) {
17914 parent
::__construct('varray_intrinsic_expression');
17915 $this->_keyword
= $keyword;
17916 $this->_left_bracket
= $left_bracket;
17917 $this->_members
= $members;
17918 $this->_right_bracket
= $right_bracket;
17920 public function keyword(): EditableSyntax
{
17921 return $this->_keyword
;
17923 public function left_bracket(): EditableSyntax
{
17924 return $this->_left_bracket
;
17926 public function members(): EditableSyntax
{
17927 return $this->_members
;
17929 public function right_bracket(): EditableSyntax
{
17930 return $this->_right_bracket
;
17932 public function with_keyword(EditableSyntax
$keyword): VarrayIntrinsicExpression
{
17933 return new VarrayIntrinsicExpression(
17935 $this->_left_bracket
,
17937 $this->_right_bracket
);
17939 public function with_left_bracket(EditableSyntax
$left_bracket): VarrayIntrinsicExpression
{
17940 return new VarrayIntrinsicExpression(
17944 $this->_right_bracket
);
17946 public function with_members(EditableSyntax
$members): VarrayIntrinsicExpression
{
17947 return new VarrayIntrinsicExpression(
17949 $this->_left_bracket
,
17951 $this->_right_bracket
);
17953 public function with_right_bracket(EditableSyntax
$right_bracket): VarrayIntrinsicExpression
{
17954 return new VarrayIntrinsicExpression(
17956 $this->_left_bracket
,
17961 public function rewrite(
17963 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
17964 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
17965 $new_parents = $parents ??
[];
17966 array_push($new_parents, $this);
17967 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
17968 $left_bracket = $this->left_bracket()->rewrite($rewriter, $new_parents);
17969 $members = $this->members()->rewrite($rewriter, $new_parents);
17970 $right_bracket = $this->right_bracket()->rewrite($rewriter, $new_parents);
17972 $keyword === $this->keyword() &&
17973 $left_bracket === $this->left_bracket() &&
17974 $members === $this->members() &&
17975 $right_bracket === $this->right_bracket()) {
17976 return $rewriter($this, $parents ??
[]);
17978 return $rewriter(new VarrayIntrinsicExpression(
17982 $right_bracket), $parents ??
[]);
17986 public static function from_json(mixed $json, int $position, string $source) {
17987 $keyword = EditableSyntax
::from_json(
17988 $json->varray_intrinsic_keyword
, $position, $source);
17989 $position +
= $keyword->width();
17990 $left_bracket = EditableSyntax
::from_json(
17991 $json->varray_intrinsic_left_bracket
, $position, $source);
17992 $position +
= $left_bracket->width();
17993 $members = EditableSyntax
::from_json(
17994 $json->varray_intrinsic_members
, $position, $source);
17995 $position +
= $members->width();
17996 $right_bracket = EditableSyntax
::from_json(
17997 $json->varray_intrinsic_right_bracket
, $position, $source);
17998 $position +
= $right_bracket->width();
17999 return new VarrayIntrinsicExpression(
18005 public function children(): Generator
<string, EditableSyntax
, void
> {
18006 yield
$this->_keyword
;
18007 yield
$this->_left_bracket
;
18008 yield
$this->_members
;
18009 yield
$this->_right_bracket
;
18013 final class VectorIntrinsicExpression
extends EditableSyntax
{
18014 private EditableSyntax
$_keyword;
18015 private EditableSyntax
$_left_bracket;
18016 private EditableSyntax
$_members;
18017 private EditableSyntax
$_right_bracket;
18018 public function __construct(
18019 EditableSyntax
$keyword,
18020 EditableSyntax
$left_bracket,
18021 EditableSyntax
$members,
18022 EditableSyntax
$right_bracket) {
18023 parent
::__construct('vector_intrinsic_expression');
18024 $this->_keyword
= $keyword;
18025 $this->_left_bracket
= $left_bracket;
18026 $this->_members
= $members;
18027 $this->_right_bracket
= $right_bracket;
18029 public function keyword(): EditableSyntax
{
18030 return $this->_keyword
;
18032 public function left_bracket(): EditableSyntax
{
18033 return $this->_left_bracket
;
18035 public function members(): EditableSyntax
{
18036 return $this->_members
;
18038 public function right_bracket(): EditableSyntax
{
18039 return $this->_right_bracket
;
18041 public function with_keyword(EditableSyntax
$keyword): VectorIntrinsicExpression
{
18042 return new VectorIntrinsicExpression(
18044 $this->_left_bracket
,
18046 $this->_right_bracket
);
18048 public function with_left_bracket(EditableSyntax
$left_bracket): VectorIntrinsicExpression
{
18049 return new VectorIntrinsicExpression(
18053 $this->_right_bracket
);
18055 public function with_members(EditableSyntax
$members): VectorIntrinsicExpression
{
18056 return new VectorIntrinsicExpression(
18058 $this->_left_bracket
,
18060 $this->_right_bracket
);
18062 public function with_right_bracket(EditableSyntax
$right_bracket): VectorIntrinsicExpression
{
18063 return new VectorIntrinsicExpression(
18065 $this->_left_bracket
,
18070 public function rewrite(
18072 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
18073 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
18074 $new_parents = $parents ??
[];
18075 array_push($new_parents, $this);
18076 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
18077 $left_bracket = $this->left_bracket()->rewrite($rewriter, $new_parents);
18078 $members = $this->members()->rewrite($rewriter, $new_parents);
18079 $right_bracket = $this->right_bracket()->rewrite($rewriter, $new_parents);
18081 $keyword === $this->keyword() &&
18082 $left_bracket === $this->left_bracket() &&
18083 $members === $this->members() &&
18084 $right_bracket === $this->right_bracket()) {
18085 return $rewriter($this, $parents ??
[]);
18087 return $rewriter(new VectorIntrinsicExpression(
18091 $right_bracket), $parents ??
[]);
18095 public static function from_json(mixed $json, int $position, string $source) {
18096 $keyword = EditableSyntax
::from_json(
18097 $json->vector_intrinsic_keyword
, $position, $source);
18098 $position +
= $keyword->width();
18099 $left_bracket = EditableSyntax
::from_json(
18100 $json->vector_intrinsic_left_bracket
, $position, $source);
18101 $position +
= $left_bracket->width();
18102 $members = EditableSyntax
::from_json(
18103 $json->vector_intrinsic_members
, $position, $source);
18104 $position +
= $members->width();
18105 $right_bracket = EditableSyntax
::from_json(
18106 $json->vector_intrinsic_right_bracket
, $position, $source);
18107 $position +
= $right_bracket->width();
18108 return new VectorIntrinsicExpression(
18114 public function children(): Generator
<string, EditableSyntax
, void
> {
18115 yield
$this->_keyword
;
18116 yield
$this->_left_bracket
;
18117 yield
$this->_members
;
18118 yield
$this->_right_bracket
;
18122 final class ElementInitializer
extends EditableSyntax
{
18123 private EditableSyntax
$_key;
18124 private EditableSyntax
$_arrow;
18125 private EditableSyntax
$_value;
18126 public function __construct(
18127 EditableSyntax
$key,
18128 EditableSyntax
$arrow,
18129 EditableSyntax
$value) {
18130 parent
::__construct('element_initializer');
18131 $this->_key
= $key;
18132 $this->_arrow
= $arrow;
18133 $this->_value
= $value;
18135 public function key(): EditableSyntax
{
18136 return $this->_key
;
18138 public function arrow(): EditableSyntax
{
18139 return $this->_arrow
;
18141 public function value(): EditableSyntax
{
18142 return $this->_value
;
18144 public function with_key(EditableSyntax
$key): ElementInitializer
{
18145 return new ElementInitializer(
18150 public function with_arrow(EditableSyntax
$arrow): ElementInitializer
{
18151 return new ElementInitializer(
18156 public function with_value(EditableSyntax
$value): ElementInitializer
{
18157 return new ElementInitializer(
18163 public function rewrite(
18165 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
18166 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
18167 $new_parents = $parents ??
[];
18168 array_push($new_parents, $this);
18169 $key = $this->key()->rewrite($rewriter, $new_parents);
18170 $arrow = $this->arrow()->rewrite($rewriter, $new_parents);
18171 $value = $this->value()->rewrite($rewriter, $new_parents);
18173 $key === $this->key() &&
18174 $arrow === $this->arrow() &&
18175 $value === $this->value()) {
18176 return $rewriter($this, $parents ??
[]);
18178 return $rewriter(new ElementInitializer(
18181 $value), $parents ??
[]);
18185 public static function from_json(mixed $json, int $position, string $source) {
18186 $key = EditableSyntax
::from_json(
18187 $json->element_key
, $position, $source);
18188 $position +
= $key->width();
18189 $arrow = EditableSyntax
::from_json(
18190 $json->element_arrow
, $position, $source);
18191 $position +
= $arrow->width();
18192 $value = EditableSyntax
::from_json(
18193 $json->element_value
, $position, $source);
18194 $position +
= $value->width();
18195 return new ElementInitializer(
18200 public function children(): Generator
<string, EditableSyntax
, void
> {
18202 yield
$this->_arrow
;
18203 yield
$this->_value
;
18207 final class SubscriptExpression
extends EditableSyntax
{
18208 private EditableSyntax
$_receiver;
18209 private EditableSyntax
$_left_bracket;
18210 private EditableSyntax
$_index;
18211 private EditableSyntax
$_right_bracket;
18212 public function __construct(
18213 EditableSyntax
$receiver,
18214 EditableSyntax
$left_bracket,
18215 EditableSyntax
$index,
18216 EditableSyntax
$right_bracket) {
18217 parent
::__construct('subscript_expression');
18218 $this->_receiver
= $receiver;
18219 $this->_left_bracket
= $left_bracket;
18220 $this->_index
= $index;
18221 $this->_right_bracket
= $right_bracket;
18223 public function receiver(): EditableSyntax
{
18224 return $this->_receiver
;
18226 public function left_bracket(): EditableSyntax
{
18227 return $this->_left_bracket
;
18229 public function index(): EditableSyntax
{
18230 return $this->_index
;
18232 public function right_bracket(): EditableSyntax
{
18233 return $this->_right_bracket
;
18235 public function with_receiver(EditableSyntax
$receiver): SubscriptExpression
{
18236 return new SubscriptExpression(
18238 $this->_left_bracket
,
18240 $this->_right_bracket
);
18242 public function with_left_bracket(EditableSyntax
$left_bracket): SubscriptExpression
{
18243 return new SubscriptExpression(
18247 $this->_right_bracket
);
18249 public function with_index(EditableSyntax
$index): SubscriptExpression
{
18250 return new SubscriptExpression(
18252 $this->_left_bracket
,
18254 $this->_right_bracket
);
18256 public function with_right_bracket(EditableSyntax
$right_bracket): SubscriptExpression
{
18257 return new SubscriptExpression(
18259 $this->_left_bracket
,
18264 public function rewrite(
18266 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
18267 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
18268 $new_parents = $parents ??
[];
18269 array_push($new_parents, $this);
18270 $receiver = $this->receiver()->rewrite($rewriter, $new_parents);
18271 $left_bracket = $this->left_bracket()->rewrite($rewriter, $new_parents);
18272 $index = $this->index()->rewrite($rewriter, $new_parents);
18273 $right_bracket = $this->right_bracket()->rewrite($rewriter, $new_parents);
18275 $receiver === $this->receiver() &&
18276 $left_bracket === $this->left_bracket() &&
18277 $index === $this->index() &&
18278 $right_bracket === $this->right_bracket()) {
18279 return $rewriter($this, $parents ??
[]);
18281 return $rewriter(new SubscriptExpression(
18285 $right_bracket), $parents ??
[]);
18289 public static function from_json(mixed $json, int $position, string $source) {
18290 $receiver = EditableSyntax
::from_json(
18291 $json->subscript_receiver
, $position, $source);
18292 $position +
= $receiver->width();
18293 $left_bracket = EditableSyntax
::from_json(
18294 $json->subscript_left_bracket
, $position, $source);
18295 $position +
= $left_bracket->width();
18296 $index = EditableSyntax
::from_json(
18297 $json->subscript_index
, $position, $source);
18298 $position +
= $index->width();
18299 $right_bracket = EditableSyntax
::from_json(
18300 $json->subscript_right_bracket
, $position, $source);
18301 $position +
= $right_bracket->width();
18302 return new SubscriptExpression(
18308 public function children(): Generator
<string, EditableSyntax
, void
> {
18309 yield
$this->_receiver
;
18310 yield
$this->_left_bracket
;
18311 yield
$this->_index
;
18312 yield
$this->_right_bracket
;
18316 final class EmbeddedSubscriptExpression
extends EditableSyntax
{
18317 private EditableSyntax
$_receiver;
18318 private EditableSyntax
$_left_bracket;
18319 private EditableSyntax
$_index;
18320 private EditableSyntax
$_right_bracket;
18321 public function __construct(
18322 EditableSyntax
$receiver,
18323 EditableSyntax
$left_bracket,
18324 EditableSyntax
$index,
18325 EditableSyntax
$right_bracket) {
18326 parent
::__construct('embedded_subscript_expression');
18327 $this->_receiver
= $receiver;
18328 $this->_left_bracket
= $left_bracket;
18329 $this->_index
= $index;
18330 $this->_right_bracket
= $right_bracket;
18332 public function receiver(): EditableSyntax
{
18333 return $this->_receiver
;
18335 public function left_bracket(): EditableSyntax
{
18336 return $this->_left_bracket
;
18338 public function index(): EditableSyntax
{
18339 return $this->_index
;
18341 public function right_bracket(): EditableSyntax
{
18342 return $this->_right_bracket
;
18344 public function with_receiver(EditableSyntax
$receiver): EmbeddedSubscriptExpression
{
18345 return new EmbeddedSubscriptExpression(
18347 $this->_left_bracket
,
18349 $this->_right_bracket
);
18351 public function with_left_bracket(EditableSyntax
$left_bracket): EmbeddedSubscriptExpression
{
18352 return new EmbeddedSubscriptExpression(
18356 $this->_right_bracket
);
18358 public function with_index(EditableSyntax
$index): EmbeddedSubscriptExpression
{
18359 return new EmbeddedSubscriptExpression(
18361 $this->_left_bracket
,
18363 $this->_right_bracket
);
18365 public function with_right_bracket(EditableSyntax
$right_bracket): EmbeddedSubscriptExpression
{
18366 return new EmbeddedSubscriptExpression(
18368 $this->_left_bracket
,
18373 public function rewrite(
18375 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
18376 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
18377 $new_parents = $parents ??
[];
18378 array_push($new_parents, $this);
18379 $receiver = $this->receiver()->rewrite($rewriter, $new_parents);
18380 $left_bracket = $this->left_bracket()->rewrite($rewriter, $new_parents);
18381 $index = $this->index()->rewrite($rewriter, $new_parents);
18382 $right_bracket = $this->right_bracket()->rewrite($rewriter, $new_parents);
18384 $receiver === $this->receiver() &&
18385 $left_bracket === $this->left_bracket() &&
18386 $index === $this->index() &&
18387 $right_bracket === $this->right_bracket()) {
18388 return $rewriter($this, $parents ??
[]);
18390 return $rewriter(new EmbeddedSubscriptExpression(
18394 $right_bracket), $parents ??
[]);
18398 public static function from_json(mixed $json, int $position, string $source) {
18399 $receiver = EditableSyntax
::from_json(
18400 $json->embedded_subscript_receiver
, $position, $source);
18401 $position +
= $receiver->width();
18402 $left_bracket = EditableSyntax
::from_json(
18403 $json->embedded_subscript_left_bracket
, $position, $source);
18404 $position +
= $left_bracket->width();
18405 $index = EditableSyntax
::from_json(
18406 $json->embedded_subscript_index
, $position, $source);
18407 $position +
= $index->width();
18408 $right_bracket = EditableSyntax
::from_json(
18409 $json->embedded_subscript_right_bracket
, $position, $source);
18410 $position +
= $right_bracket->width();
18411 return new EmbeddedSubscriptExpression(
18417 public function children(): Generator
<string, EditableSyntax
, void
> {
18418 yield
$this->_receiver
;
18419 yield
$this->_left_bracket
;
18420 yield
$this->_index
;
18421 yield
$this->_right_bracket
;
18425 final class AwaitableCreationExpression
extends EditableSyntax
{
18426 private EditableSyntax
$_async;
18427 private EditableSyntax
$_coroutine;
18428 private EditableSyntax
$_compound_statement;
18429 public function __construct(
18430 EditableSyntax
$async,
18431 EditableSyntax
$coroutine,
18432 EditableSyntax
$compound_statement) {
18433 parent
::__construct('awaitable_creation_expression');
18434 $this->_async
= $async;
18435 $this->_coroutine
= $coroutine;
18436 $this->_compound_statement
= $compound_statement;
18438 public function async(): EditableSyntax
{
18439 return $this->_async
;
18441 public function coroutine(): EditableSyntax
{
18442 return $this->_coroutine
;
18444 public function compound_statement(): EditableSyntax
{
18445 return $this->_compound_statement
;
18447 public function with_async(EditableSyntax
$async): AwaitableCreationExpression
{
18448 return new AwaitableCreationExpression(
18451 $this->_compound_statement
);
18453 public function with_coroutine(EditableSyntax
$coroutine): AwaitableCreationExpression
{
18454 return new AwaitableCreationExpression(
18457 $this->_compound_statement
);
18459 public function with_compound_statement(EditableSyntax
$compound_statement): AwaitableCreationExpression
{
18460 return new AwaitableCreationExpression(
18463 $compound_statement);
18466 public function rewrite(
18468 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
18469 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
18470 $new_parents = $parents ??
[];
18471 array_push($new_parents, $this);
18472 $async = $this->async()->rewrite($rewriter, $new_parents);
18473 $coroutine = $this->coroutine()->rewrite($rewriter, $new_parents);
18474 $compound_statement = $this->compound_statement()->rewrite($rewriter, $new_parents);
18476 $async === $this->async() &&
18477 $coroutine === $this->coroutine() &&
18478 $compound_statement === $this->compound_statement()) {
18479 return $rewriter($this, $parents ??
[]);
18481 return $rewriter(new AwaitableCreationExpression(
18484 $compound_statement), $parents ??
[]);
18488 public static function from_json(mixed $json, int $position, string $source) {
18489 $async = EditableSyntax
::from_json(
18490 $json->awaitable_async
, $position, $source);
18491 $position +
= $async->width();
18492 $coroutine = EditableSyntax
::from_json(
18493 $json->awaitable_coroutine
, $position, $source);
18494 $position +
= $coroutine->width();
18495 $compound_statement = EditableSyntax
::from_json(
18496 $json->awaitable_compound_statement
, $position, $source);
18497 $position +
= $compound_statement->width();
18498 return new AwaitableCreationExpression(
18501 $compound_statement);
18503 public function children(): Generator
<string, EditableSyntax
, void
> {
18504 yield
$this->_async
;
18505 yield
$this->_coroutine
;
18506 yield
$this->_compound_statement
;
18510 final class XHPChildrenDeclaration
extends EditableSyntax
{
18511 private EditableSyntax
$_keyword;
18512 private EditableSyntax
$_expression;
18513 private EditableSyntax
$_semicolon;
18514 public function __construct(
18515 EditableSyntax
$keyword,
18516 EditableSyntax
$expression,
18517 EditableSyntax
$semicolon) {
18518 parent
::__construct('xhp_children_declaration');
18519 $this->_keyword
= $keyword;
18520 $this->_expression
= $expression;
18521 $this->_semicolon
= $semicolon;
18523 public function keyword(): EditableSyntax
{
18524 return $this->_keyword
;
18526 public function expression(): EditableSyntax
{
18527 return $this->_expression
;
18529 public function semicolon(): EditableSyntax
{
18530 return $this->_semicolon
;
18532 public function with_keyword(EditableSyntax
$keyword): XHPChildrenDeclaration
{
18533 return new XHPChildrenDeclaration(
18535 $this->_expression
,
18536 $this->_semicolon
);
18538 public function with_expression(EditableSyntax
$expression): XHPChildrenDeclaration
{
18539 return new XHPChildrenDeclaration(
18542 $this->_semicolon
);
18544 public function with_semicolon(EditableSyntax
$semicolon): XHPChildrenDeclaration
{
18545 return new XHPChildrenDeclaration(
18547 $this->_expression
,
18551 public function rewrite(
18553 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
18554 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
18555 $new_parents = $parents ??
[];
18556 array_push($new_parents, $this);
18557 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
18558 $expression = $this->expression()->rewrite($rewriter, $new_parents);
18559 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
18561 $keyword === $this->keyword() &&
18562 $expression === $this->expression() &&
18563 $semicolon === $this->semicolon()) {
18564 return $rewriter($this, $parents ??
[]);
18566 return $rewriter(new XHPChildrenDeclaration(
18569 $semicolon), $parents ??
[]);
18573 public static function from_json(mixed $json, int $position, string $source) {
18574 $keyword = EditableSyntax
::from_json(
18575 $json->xhp_children_keyword
, $position, $source);
18576 $position +
= $keyword->width();
18577 $expression = EditableSyntax
::from_json(
18578 $json->xhp_children_expression
, $position, $source);
18579 $position +
= $expression->width();
18580 $semicolon = EditableSyntax
::from_json(
18581 $json->xhp_children_semicolon
, $position, $source);
18582 $position +
= $semicolon->width();
18583 return new XHPChildrenDeclaration(
18588 public function children(): Generator
<string, EditableSyntax
, void
> {
18589 yield
$this->_keyword
;
18590 yield
$this->_expression
;
18591 yield
$this->_semicolon
;
18595 final class XHPChildrenParenthesizedList
extends EditableSyntax
{
18596 private EditableSyntax
$_left_paren;
18597 private EditableSyntax
$_xhp_children;
18598 private EditableSyntax
$_right_paren;
18599 public function __construct(
18600 EditableSyntax
$left_paren,
18601 EditableSyntax
$xhp_children,
18602 EditableSyntax
$right_paren) {
18603 parent
::__construct('xhp_children_parenthesized_list');
18604 $this->_left_paren
= $left_paren;
18605 $this->_xhp_children
= $xhp_children;
18606 $this->_right_paren
= $right_paren;
18608 public function left_paren(): EditableSyntax
{
18609 return $this->_left_paren
;
18611 public function xhp_children(): EditableSyntax
{
18612 return $this->_xhp_children
;
18614 public function right_paren(): EditableSyntax
{
18615 return $this->_right_paren
;
18617 public function with_left_paren(EditableSyntax
$left_paren): XHPChildrenParenthesizedList
{
18618 return new XHPChildrenParenthesizedList(
18620 $this->_xhp_children
,
18621 $this->_right_paren
);
18623 public function with_xhp_children(EditableSyntax
$xhp_children): XHPChildrenParenthesizedList
{
18624 return new XHPChildrenParenthesizedList(
18625 $this->_left_paren
,
18627 $this->_right_paren
);
18629 public function with_right_paren(EditableSyntax
$right_paren): XHPChildrenParenthesizedList
{
18630 return new XHPChildrenParenthesizedList(
18631 $this->_left_paren
,
18632 $this->_xhp_children
,
18636 public function rewrite(
18638 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
18639 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
18640 $new_parents = $parents ??
[];
18641 array_push($new_parents, $this);
18642 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
18643 $xhp_children = $this->xhp_children()->rewrite($rewriter, $new_parents);
18644 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
18646 $left_paren === $this->left_paren() &&
18647 $xhp_children === $this->xhp_children() &&
18648 $right_paren === $this->right_paren()) {
18649 return $rewriter($this, $parents ??
[]);
18651 return $rewriter(new XHPChildrenParenthesizedList(
18654 $right_paren), $parents ??
[]);
18658 public static function from_json(mixed $json, int $position, string $source) {
18659 $left_paren = EditableSyntax
::from_json(
18660 $json->xhp_children_list_left_paren
, $position, $source);
18661 $position +
= $left_paren->width();
18662 $xhp_children = EditableSyntax
::from_json(
18663 $json->xhp_children_list_xhp_children
, $position, $source);
18664 $position +
= $xhp_children->width();
18665 $right_paren = EditableSyntax
::from_json(
18666 $json->xhp_children_list_right_paren
, $position, $source);
18667 $position +
= $right_paren->width();
18668 return new XHPChildrenParenthesizedList(
18673 public function children(): Generator
<string, EditableSyntax
, void
> {
18674 yield
$this->_left_paren
;
18675 yield
$this->_xhp_children
;
18676 yield
$this->_right_paren
;
18680 final class XHPCategoryDeclaration
extends EditableSyntax
{
18681 private EditableSyntax
$_keyword;
18682 private EditableSyntax
$_categories;
18683 private EditableSyntax
$_semicolon;
18684 public function __construct(
18685 EditableSyntax
$keyword,
18686 EditableSyntax
$categories,
18687 EditableSyntax
$semicolon) {
18688 parent
::__construct('xhp_category_declaration');
18689 $this->_keyword
= $keyword;
18690 $this->_categories
= $categories;
18691 $this->_semicolon
= $semicolon;
18693 public function keyword(): EditableSyntax
{
18694 return $this->_keyword
;
18696 public function categories(): EditableSyntax
{
18697 return $this->_categories
;
18699 public function semicolon(): EditableSyntax
{
18700 return $this->_semicolon
;
18702 public function with_keyword(EditableSyntax
$keyword): XHPCategoryDeclaration
{
18703 return new XHPCategoryDeclaration(
18705 $this->_categories
,
18706 $this->_semicolon
);
18708 public function with_categories(EditableSyntax
$categories): XHPCategoryDeclaration
{
18709 return new XHPCategoryDeclaration(
18712 $this->_semicolon
);
18714 public function with_semicolon(EditableSyntax
$semicolon): XHPCategoryDeclaration
{
18715 return new XHPCategoryDeclaration(
18717 $this->_categories
,
18721 public function rewrite(
18723 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
18724 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
18725 $new_parents = $parents ??
[];
18726 array_push($new_parents, $this);
18727 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
18728 $categories = $this->categories()->rewrite($rewriter, $new_parents);
18729 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
18731 $keyword === $this->keyword() &&
18732 $categories === $this->categories() &&
18733 $semicolon === $this->semicolon()) {
18734 return $rewriter($this, $parents ??
[]);
18736 return $rewriter(new XHPCategoryDeclaration(
18739 $semicolon), $parents ??
[]);
18743 public static function from_json(mixed $json, int $position, string $source) {
18744 $keyword = EditableSyntax
::from_json(
18745 $json->xhp_category_keyword
, $position, $source);
18746 $position +
= $keyword->width();
18747 $categories = EditableSyntax
::from_json(
18748 $json->xhp_category_categories
, $position, $source);
18749 $position +
= $categories->width();
18750 $semicolon = EditableSyntax
::from_json(
18751 $json->xhp_category_semicolon
, $position, $source);
18752 $position +
= $semicolon->width();
18753 return new XHPCategoryDeclaration(
18758 public function children(): Generator
<string, EditableSyntax
, void
> {
18759 yield
$this->_keyword
;
18760 yield
$this->_categories
;
18761 yield
$this->_semicolon
;
18765 final class XHPEnumType
extends EditableSyntax
{
18766 private EditableSyntax
$_optional;
18767 private EditableSyntax
$_keyword;
18768 private EditableSyntax
$_left_brace;
18769 private EditableSyntax
$_values;
18770 private EditableSyntax
$_right_brace;
18771 public function __construct(
18772 EditableSyntax
$optional,
18773 EditableSyntax
$keyword,
18774 EditableSyntax
$left_brace,
18775 EditableSyntax
$values,
18776 EditableSyntax
$right_brace) {
18777 parent
::__construct('xhp_enum_type');
18778 $this->_optional
= $optional;
18779 $this->_keyword
= $keyword;
18780 $this->_left_brace
= $left_brace;
18781 $this->_values
= $values;
18782 $this->_right_brace
= $right_brace;
18784 public function optional(): EditableSyntax
{
18785 return $this->_optional
;
18787 public function keyword(): EditableSyntax
{
18788 return $this->_keyword
;
18790 public function left_brace(): EditableSyntax
{
18791 return $this->_left_brace
;
18793 public function values(): EditableSyntax
{
18794 return $this->_values
;
18796 public function right_brace(): EditableSyntax
{
18797 return $this->_right_brace
;
18799 public function with_optional(EditableSyntax
$optional): XHPEnumType
{
18800 return new XHPEnumType(
18803 $this->_left_brace
,
18805 $this->_right_brace
);
18807 public function with_keyword(EditableSyntax
$keyword): XHPEnumType
{
18808 return new XHPEnumType(
18811 $this->_left_brace
,
18813 $this->_right_brace
);
18815 public function with_left_brace(EditableSyntax
$left_brace): XHPEnumType
{
18816 return new XHPEnumType(
18821 $this->_right_brace
);
18823 public function with_values(EditableSyntax
$values): XHPEnumType
{
18824 return new XHPEnumType(
18827 $this->_left_brace
,
18829 $this->_right_brace
);
18831 public function with_right_brace(EditableSyntax
$right_brace): XHPEnumType
{
18832 return new XHPEnumType(
18835 $this->_left_brace
,
18840 public function rewrite(
18842 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
18843 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
18844 $new_parents = $parents ??
[];
18845 array_push($new_parents, $this);
18846 $optional = $this->optional()->rewrite($rewriter, $new_parents);
18847 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
18848 $left_brace = $this->left_brace()->rewrite($rewriter, $new_parents);
18849 $values = $this->values()->rewrite($rewriter, $new_parents);
18850 $right_brace = $this->right_brace()->rewrite($rewriter, $new_parents);
18852 $optional === $this->optional() &&
18853 $keyword === $this->keyword() &&
18854 $left_brace === $this->left_brace() &&
18855 $values === $this->values() &&
18856 $right_brace === $this->right_brace()) {
18857 return $rewriter($this, $parents ??
[]);
18859 return $rewriter(new XHPEnumType(
18864 $right_brace), $parents ??
[]);
18868 public static function from_json(mixed $json, int $position, string $source) {
18869 $optional = EditableSyntax
::from_json(
18870 $json->xhp_enum_optional
, $position, $source);
18871 $position +
= $optional->width();
18872 $keyword = EditableSyntax
::from_json(
18873 $json->xhp_enum_keyword
, $position, $source);
18874 $position +
= $keyword->width();
18875 $left_brace = EditableSyntax
::from_json(
18876 $json->xhp_enum_left_brace
, $position, $source);
18877 $position +
= $left_brace->width();
18878 $values = EditableSyntax
::from_json(
18879 $json->xhp_enum_values
, $position, $source);
18880 $position +
= $values->width();
18881 $right_brace = EditableSyntax
::from_json(
18882 $json->xhp_enum_right_brace
, $position, $source);
18883 $position +
= $right_brace->width();
18884 return new XHPEnumType(
18891 public function children(): Generator
<string, EditableSyntax
, void
> {
18892 yield
$this->_optional
;
18893 yield
$this->_keyword
;
18894 yield
$this->_left_brace
;
18895 yield
$this->_values
;
18896 yield
$this->_right_brace
;
18900 final class XHPRequired
extends EditableSyntax
{
18901 private EditableSyntax
$_at;
18902 private EditableSyntax
$_keyword;
18903 public function __construct(
18904 EditableSyntax
$at,
18905 EditableSyntax
$keyword) {
18906 parent
::__construct('xhp_required');
18908 $this->_keyword
= $keyword;
18910 public function at(): EditableSyntax
{
18913 public function keyword(): EditableSyntax
{
18914 return $this->_keyword
;
18916 public function with_at(EditableSyntax
$at): XHPRequired
{
18917 return new XHPRequired(
18921 public function with_keyword(EditableSyntax
$keyword): XHPRequired
{
18922 return new XHPRequired(
18927 public function rewrite(
18929 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
18930 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
18931 $new_parents = $parents ??
[];
18932 array_push($new_parents, $this);
18933 $at = $this->at()->rewrite($rewriter, $new_parents);
18934 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
18936 $at === $this->at() &&
18937 $keyword === $this->keyword()) {
18938 return $rewriter($this, $parents ??
[]);
18940 return $rewriter(new XHPRequired(
18942 $keyword), $parents ??
[]);
18946 public static function from_json(mixed $json, int $position, string $source) {
18947 $at = EditableSyntax
::from_json(
18948 $json->xhp_required_at
, $position, $source);
18949 $position +
= $at->width();
18950 $keyword = EditableSyntax
::from_json(
18951 $json->xhp_required_keyword
, $position, $source);
18952 $position +
= $keyword->width();
18953 return new XHPRequired(
18957 public function children(): Generator
<string, EditableSyntax
, void
> {
18959 yield
$this->_keyword
;
18963 final class XHPClassAttributeDeclaration
extends EditableSyntax
{
18964 private EditableSyntax
$_keyword;
18965 private EditableSyntax
$_attributes;
18966 private EditableSyntax
$_semicolon;
18967 public function __construct(
18968 EditableSyntax
$keyword,
18969 EditableSyntax
$attributes,
18970 EditableSyntax
$semicolon) {
18971 parent
::__construct('xhp_class_attribute_declaration');
18972 $this->_keyword
= $keyword;
18973 $this->_attributes
= $attributes;
18974 $this->_semicolon
= $semicolon;
18976 public function keyword(): EditableSyntax
{
18977 return $this->_keyword
;
18979 public function attributes(): EditableSyntax
{
18980 return $this->_attributes
;
18982 public function semicolon(): EditableSyntax
{
18983 return $this->_semicolon
;
18985 public function with_keyword(EditableSyntax
$keyword): XHPClassAttributeDeclaration
{
18986 return new XHPClassAttributeDeclaration(
18988 $this->_attributes
,
18989 $this->_semicolon
);
18991 public function with_attributes(EditableSyntax
$attributes): XHPClassAttributeDeclaration
{
18992 return new XHPClassAttributeDeclaration(
18995 $this->_semicolon
);
18997 public function with_semicolon(EditableSyntax
$semicolon): XHPClassAttributeDeclaration
{
18998 return new XHPClassAttributeDeclaration(
19000 $this->_attributes
,
19004 public function rewrite(
19006 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
19007 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
19008 $new_parents = $parents ??
[];
19009 array_push($new_parents, $this);
19010 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
19011 $attributes = $this->attributes()->rewrite($rewriter, $new_parents);
19012 $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents);
19014 $keyword === $this->keyword() &&
19015 $attributes === $this->attributes() &&
19016 $semicolon === $this->semicolon()) {
19017 return $rewriter($this, $parents ??
[]);
19019 return $rewriter(new XHPClassAttributeDeclaration(
19022 $semicolon), $parents ??
[]);
19026 public static function from_json(mixed $json, int $position, string $source) {
19027 $keyword = EditableSyntax
::from_json(
19028 $json->xhp_attribute_keyword
, $position, $source);
19029 $position +
= $keyword->width();
19030 $attributes = EditableSyntax
::from_json(
19031 $json->xhp_attribute_attributes
, $position, $source);
19032 $position +
= $attributes->width();
19033 $semicolon = EditableSyntax
::from_json(
19034 $json->xhp_attribute_semicolon
, $position, $source);
19035 $position +
= $semicolon->width();
19036 return new XHPClassAttributeDeclaration(
19041 public function children(): Generator
<string, EditableSyntax
, void
> {
19042 yield
$this->_keyword
;
19043 yield
$this->_attributes
;
19044 yield
$this->_semicolon
;
19048 final class XHPClassAttribute
extends EditableSyntax
{
19049 private EditableSyntax
$_type;
19050 private EditableSyntax
$_name;
19051 private EditableSyntax
$_initializer;
19052 private EditableSyntax
$_required;
19053 public function __construct(
19054 EditableSyntax
$type,
19055 EditableSyntax
$name,
19056 EditableSyntax
$initializer,
19057 EditableSyntax
$required) {
19058 parent
::__construct('xhp_class_attribute');
19059 $this->_type
= $type;
19060 $this->_name
= $name;
19061 $this->_initializer
= $initializer;
19062 $this->_required
= $required;
19064 public function type(): EditableSyntax
{
19065 return $this->_type
;
19067 public function name(): EditableSyntax
{
19068 return $this->_name
;
19070 public function initializer(): EditableSyntax
{
19071 return $this->_initializer
;
19073 public function required(): EditableSyntax
{
19074 return $this->_required
;
19076 public function with_type(EditableSyntax
$type): XHPClassAttribute
{
19077 return new XHPClassAttribute(
19080 $this->_initializer
,
19083 public function with_name(EditableSyntax
$name): XHPClassAttribute
{
19084 return new XHPClassAttribute(
19087 $this->_initializer
,
19090 public function with_initializer(EditableSyntax
$initializer): XHPClassAttribute
{
19091 return new XHPClassAttribute(
19097 public function with_required(EditableSyntax
$required): XHPClassAttribute
{
19098 return new XHPClassAttribute(
19101 $this->_initializer
,
19105 public function rewrite(
19107 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
19108 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
19109 $new_parents = $parents ??
[];
19110 array_push($new_parents, $this);
19111 $type = $this->type()->rewrite($rewriter, $new_parents);
19112 $name = $this->name()->rewrite($rewriter, $new_parents);
19113 $initializer = $this->initializer()->rewrite($rewriter, $new_parents);
19114 $required = $this->required()->rewrite($rewriter, $new_parents);
19116 $type === $this->type() &&
19117 $name === $this->name() &&
19118 $initializer === $this->initializer() &&
19119 $required === $this->required()) {
19120 return $rewriter($this, $parents ??
[]);
19122 return $rewriter(new XHPClassAttribute(
19126 $required), $parents ??
[]);
19130 public static function from_json(mixed $json, int $position, string $source) {
19131 $type = EditableSyntax
::from_json(
19132 $json->xhp_attribute_decl_type
, $position, $source);
19133 $position +
= $type->width();
19134 $name = EditableSyntax
::from_json(
19135 $json->xhp_attribute_decl_name
, $position, $source);
19136 $position +
= $name->width();
19137 $initializer = EditableSyntax
::from_json(
19138 $json->xhp_attribute_decl_initializer
, $position, $source);
19139 $position +
= $initializer->width();
19140 $required = EditableSyntax
::from_json(
19141 $json->xhp_attribute_decl_required
, $position, $source);
19142 $position +
= $required->width();
19143 return new XHPClassAttribute(
19149 public function children(): Generator
<string, EditableSyntax
, void
> {
19150 yield
$this->_type
;
19151 yield
$this->_name
;
19152 yield
$this->_initializer
;
19153 yield
$this->_required
;
19157 final class XHPSimpleClassAttribute
extends EditableSyntax
{
19158 private EditableSyntax
$_type;
19159 public function __construct(
19160 EditableSyntax
$type) {
19161 parent
::__construct('xhp_simple_class_attribute');
19162 $this->_type
= $type;
19164 public function type(): EditableSyntax
{
19165 return $this->_type
;
19167 public function with_type(EditableSyntax
$type): XHPSimpleClassAttribute
{
19168 return new XHPSimpleClassAttribute(
19172 public function rewrite(
19174 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
19175 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
19176 $new_parents = $parents ??
[];
19177 array_push($new_parents, $this);
19178 $type = $this->type()->rewrite($rewriter, $new_parents);
19180 $type === $this->type()) {
19181 return $rewriter($this, $parents ??
[]);
19183 return $rewriter(new XHPSimpleClassAttribute(
19184 $type), $parents ??
[]);
19188 public static function from_json(mixed $json, int $position, string $source) {
19189 $type = EditableSyntax
::from_json(
19190 $json->xhp_simple_class_attribute_type
, $position, $source);
19191 $position +
= $type->width();
19192 return new XHPSimpleClassAttribute(
19195 public function children(): Generator
<string, EditableSyntax
, void
> {
19196 yield
$this->_type
;
19200 final class XHPSimpleAttribute
extends EditableSyntax
{
19201 private EditableSyntax
$_name;
19202 private EditableSyntax
$_equal;
19203 private EditableSyntax
$_expression;
19204 public function __construct(
19205 EditableSyntax
$name,
19206 EditableSyntax
$equal,
19207 EditableSyntax
$expression) {
19208 parent
::__construct('xhp_simple_attribute');
19209 $this->_name
= $name;
19210 $this->_equal
= $equal;
19211 $this->_expression
= $expression;
19213 public function name(): EditableSyntax
{
19214 return $this->_name
;
19216 public function equal(): EditableSyntax
{
19217 return $this->_equal
;
19219 public function expression(): EditableSyntax
{
19220 return $this->_expression
;
19222 public function with_name(EditableSyntax
$name): XHPSimpleAttribute
{
19223 return new XHPSimpleAttribute(
19226 $this->_expression
);
19228 public function with_equal(EditableSyntax
$equal): XHPSimpleAttribute
{
19229 return new XHPSimpleAttribute(
19232 $this->_expression
);
19234 public function with_expression(EditableSyntax
$expression): XHPSimpleAttribute
{
19235 return new XHPSimpleAttribute(
19241 public function rewrite(
19243 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
19244 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
19245 $new_parents = $parents ??
[];
19246 array_push($new_parents, $this);
19247 $name = $this->name()->rewrite($rewriter, $new_parents);
19248 $equal = $this->equal()->rewrite($rewriter, $new_parents);
19249 $expression = $this->expression()->rewrite($rewriter, $new_parents);
19251 $name === $this->name() &&
19252 $equal === $this->equal() &&
19253 $expression === $this->expression()) {
19254 return $rewriter($this, $parents ??
[]);
19256 return $rewriter(new XHPSimpleAttribute(
19259 $expression), $parents ??
[]);
19263 public static function from_json(mixed $json, int $position, string $source) {
19264 $name = EditableSyntax
::from_json(
19265 $json->xhp_simple_attribute_name
, $position, $source);
19266 $position +
= $name->width();
19267 $equal = EditableSyntax
::from_json(
19268 $json->xhp_simple_attribute_equal
, $position, $source);
19269 $position +
= $equal->width();
19270 $expression = EditableSyntax
::from_json(
19271 $json->xhp_simple_attribute_expression
, $position, $source);
19272 $position +
= $expression->width();
19273 return new XHPSimpleAttribute(
19278 public function children(): Generator
<string, EditableSyntax
, void
> {
19279 yield
$this->_name
;
19280 yield
$this->_equal
;
19281 yield
$this->_expression
;
19285 final class XHPSpreadAttribute
extends EditableSyntax
{
19286 private EditableSyntax
$_left_brace;
19287 private EditableSyntax
$_spread_operator;
19288 private EditableSyntax
$_expression;
19289 private EditableSyntax
$_right_brace;
19290 public function __construct(
19291 EditableSyntax
$left_brace,
19292 EditableSyntax
$spread_operator,
19293 EditableSyntax
$expression,
19294 EditableSyntax
$right_brace) {
19295 parent
::__construct('xhp_spread_attribute');
19296 $this->_left_brace
= $left_brace;
19297 $this->_spread_operator
= $spread_operator;
19298 $this->_expression
= $expression;
19299 $this->_right_brace
= $right_brace;
19301 public function left_brace(): EditableSyntax
{
19302 return $this->_left_brace
;
19304 public function spread_operator(): EditableSyntax
{
19305 return $this->_spread_operator
;
19307 public function expression(): EditableSyntax
{
19308 return $this->_expression
;
19310 public function right_brace(): EditableSyntax
{
19311 return $this->_right_brace
;
19313 public function with_left_brace(EditableSyntax
$left_brace): XHPSpreadAttribute
{
19314 return new XHPSpreadAttribute(
19316 $this->_spread_operator
,
19317 $this->_expression
,
19318 $this->_right_brace
);
19320 public function with_spread_operator(EditableSyntax
$spread_operator): XHPSpreadAttribute
{
19321 return new XHPSpreadAttribute(
19322 $this->_left_brace
,
19324 $this->_expression
,
19325 $this->_right_brace
);
19327 public function with_expression(EditableSyntax
$expression): XHPSpreadAttribute
{
19328 return new XHPSpreadAttribute(
19329 $this->_left_brace
,
19330 $this->_spread_operator
,
19332 $this->_right_brace
);
19334 public function with_right_brace(EditableSyntax
$right_brace): XHPSpreadAttribute
{
19335 return new XHPSpreadAttribute(
19336 $this->_left_brace
,
19337 $this->_spread_operator
,
19338 $this->_expression
,
19342 public function rewrite(
19344 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
19345 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
19346 $new_parents = $parents ??
[];
19347 array_push($new_parents, $this);
19348 $left_brace = $this->left_brace()->rewrite($rewriter, $new_parents);
19349 $spread_operator = $this->spread_operator()->rewrite($rewriter, $new_parents);
19350 $expression = $this->expression()->rewrite($rewriter, $new_parents);
19351 $right_brace = $this->right_brace()->rewrite($rewriter, $new_parents);
19353 $left_brace === $this->left_brace() &&
19354 $spread_operator === $this->spread_operator() &&
19355 $expression === $this->expression() &&
19356 $right_brace === $this->right_brace()) {
19357 return $rewriter($this, $parents ??
[]);
19359 return $rewriter(new XHPSpreadAttribute(
19363 $right_brace), $parents ??
[]);
19367 public static function from_json(mixed $json, int $position, string $source) {
19368 $left_brace = EditableSyntax
::from_json(
19369 $json->xhp_spread_attribute_left_brace
, $position, $source);
19370 $position +
= $left_brace->width();
19371 $spread_operator = EditableSyntax
::from_json(
19372 $json->xhp_spread_attribute_spread_operator
, $position, $source);
19373 $position +
= $spread_operator->width();
19374 $expression = EditableSyntax
::from_json(
19375 $json->xhp_spread_attribute_expression
, $position, $source);
19376 $position +
= $expression->width();
19377 $right_brace = EditableSyntax
::from_json(
19378 $json->xhp_spread_attribute_right_brace
, $position, $source);
19379 $position +
= $right_brace->width();
19380 return new XHPSpreadAttribute(
19386 public function children(): Generator
<string, EditableSyntax
, void
> {
19387 yield
$this->_left_brace
;
19388 yield
$this->_spread_operator
;
19389 yield
$this->_expression
;
19390 yield
$this->_right_brace
;
19394 final class XHPOpen
extends EditableSyntax
{
19395 private EditableSyntax
$_left_angle;
19396 private EditableSyntax
$_name;
19397 private EditableSyntax
$_attributes;
19398 private EditableSyntax
$_right_angle;
19399 public function __construct(
19400 EditableSyntax
$left_angle,
19401 EditableSyntax
$name,
19402 EditableSyntax
$attributes,
19403 EditableSyntax
$right_angle) {
19404 parent
::__construct('xhp_open');
19405 $this->_left_angle
= $left_angle;
19406 $this->_name
= $name;
19407 $this->_attributes
= $attributes;
19408 $this->_right_angle
= $right_angle;
19410 public function left_angle(): EditableSyntax
{
19411 return $this->_left_angle
;
19413 public function name(): EditableSyntax
{
19414 return $this->_name
;
19416 public function attributes(): EditableSyntax
{
19417 return $this->_attributes
;
19419 public function right_angle(): EditableSyntax
{
19420 return $this->_right_angle
;
19422 public function with_left_angle(EditableSyntax
$left_angle): XHPOpen
{
19423 return new XHPOpen(
19426 $this->_attributes
,
19427 $this->_right_angle
);
19429 public function with_name(EditableSyntax
$name): XHPOpen
{
19430 return new XHPOpen(
19431 $this->_left_angle
,
19433 $this->_attributes
,
19434 $this->_right_angle
);
19436 public function with_attributes(EditableSyntax
$attributes): XHPOpen
{
19437 return new XHPOpen(
19438 $this->_left_angle
,
19441 $this->_right_angle
);
19443 public function with_right_angle(EditableSyntax
$right_angle): XHPOpen
{
19444 return new XHPOpen(
19445 $this->_left_angle
,
19447 $this->_attributes
,
19451 public function rewrite(
19453 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
19454 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
19455 $new_parents = $parents ??
[];
19456 array_push($new_parents, $this);
19457 $left_angle = $this->left_angle()->rewrite($rewriter, $new_parents);
19458 $name = $this->name()->rewrite($rewriter, $new_parents);
19459 $attributes = $this->attributes()->rewrite($rewriter, $new_parents);
19460 $right_angle = $this->right_angle()->rewrite($rewriter, $new_parents);
19462 $left_angle === $this->left_angle() &&
19463 $name === $this->name() &&
19464 $attributes === $this->attributes() &&
19465 $right_angle === $this->right_angle()) {
19466 return $rewriter($this, $parents ??
[]);
19468 return $rewriter(new XHPOpen(
19472 $right_angle), $parents ??
[]);
19476 public static function from_json(mixed $json, int $position, string $source) {
19477 $left_angle = EditableSyntax
::from_json(
19478 $json->xhp_open_left_angle
, $position, $source);
19479 $position +
= $left_angle->width();
19480 $name = EditableSyntax
::from_json(
19481 $json->xhp_open_name
, $position, $source);
19482 $position +
= $name->width();
19483 $attributes = EditableSyntax
::from_json(
19484 $json->xhp_open_attributes
, $position, $source);
19485 $position +
= $attributes->width();
19486 $right_angle = EditableSyntax
::from_json(
19487 $json->xhp_open_right_angle
, $position, $source);
19488 $position +
= $right_angle->width();
19489 return new XHPOpen(
19495 public function children(): Generator
<string, EditableSyntax
, void
> {
19496 yield
$this->_left_angle
;
19497 yield
$this->_name
;
19498 yield
$this->_attributes
;
19499 yield
$this->_right_angle
;
19503 final class XHPExpression
extends EditableSyntax
{
19504 private EditableSyntax
$_open;
19505 private EditableSyntax
$_body;
19506 private EditableSyntax
$_close;
19507 public function __construct(
19508 EditableSyntax
$open,
19509 EditableSyntax
$body,
19510 EditableSyntax
$close) {
19511 parent
::__construct('xhp_expression');
19512 $this->_open
= $open;
19513 $this->_body
= $body;
19514 $this->_close
= $close;
19516 public function open(): EditableSyntax
{
19517 return $this->_open
;
19519 public function body(): EditableSyntax
{
19520 return $this->_body
;
19522 public function close(): EditableSyntax
{
19523 return $this->_close
;
19525 public function with_open(EditableSyntax
$open): XHPExpression
{
19526 return new XHPExpression(
19531 public function with_body(EditableSyntax
$body): XHPExpression
{
19532 return new XHPExpression(
19537 public function with_close(EditableSyntax
$close): XHPExpression
{
19538 return new XHPExpression(
19544 public function rewrite(
19546 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
19547 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
19548 $new_parents = $parents ??
[];
19549 array_push($new_parents, $this);
19550 $open = $this->open()->rewrite($rewriter, $new_parents);
19551 $body = $this->body()->rewrite($rewriter, $new_parents);
19552 $close = $this->close()->rewrite($rewriter, $new_parents);
19554 $open === $this->open() &&
19555 $body === $this->body() &&
19556 $close === $this->close()) {
19557 return $rewriter($this, $parents ??
[]);
19559 return $rewriter(new XHPExpression(
19562 $close), $parents ??
[]);
19566 public static function from_json(mixed $json, int $position, string $source) {
19567 $open = EditableSyntax
::from_json(
19568 $json->xhp_open
, $position, $source);
19569 $position +
= $open->width();
19570 $body = EditableSyntax
::from_json(
19571 $json->xhp_body
, $position, $source);
19572 $position +
= $body->width();
19573 $close = EditableSyntax
::from_json(
19574 $json->xhp_close
, $position, $source);
19575 $position +
= $close->width();
19576 return new XHPExpression(
19581 public function children(): Generator
<string, EditableSyntax
, void
> {
19582 yield
$this->_open
;
19583 yield
$this->_body
;
19584 yield
$this->_close
;
19588 final class XHPClose
extends EditableSyntax
{
19589 private EditableSyntax
$_left_angle;
19590 private EditableSyntax
$_name;
19591 private EditableSyntax
$_right_angle;
19592 public function __construct(
19593 EditableSyntax
$left_angle,
19594 EditableSyntax
$name,
19595 EditableSyntax
$right_angle) {
19596 parent
::__construct('xhp_close');
19597 $this->_left_angle
= $left_angle;
19598 $this->_name
= $name;
19599 $this->_right_angle
= $right_angle;
19601 public function left_angle(): EditableSyntax
{
19602 return $this->_left_angle
;
19604 public function name(): EditableSyntax
{
19605 return $this->_name
;
19607 public function right_angle(): EditableSyntax
{
19608 return $this->_right_angle
;
19610 public function with_left_angle(EditableSyntax
$left_angle): XHPClose
{
19611 return new XHPClose(
19614 $this->_right_angle
);
19616 public function with_name(EditableSyntax
$name): XHPClose
{
19617 return new XHPClose(
19618 $this->_left_angle
,
19620 $this->_right_angle
);
19622 public function with_right_angle(EditableSyntax
$right_angle): XHPClose
{
19623 return new XHPClose(
19624 $this->_left_angle
,
19629 public function rewrite(
19631 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
19632 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
19633 $new_parents = $parents ??
[];
19634 array_push($new_parents, $this);
19635 $left_angle = $this->left_angle()->rewrite($rewriter, $new_parents);
19636 $name = $this->name()->rewrite($rewriter, $new_parents);
19637 $right_angle = $this->right_angle()->rewrite($rewriter, $new_parents);
19639 $left_angle === $this->left_angle() &&
19640 $name === $this->name() &&
19641 $right_angle === $this->right_angle()) {
19642 return $rewriter($this, $parents ??
[]);
19644 return $rewriter(new XHPClose(
19647 $right_angle), $parents ??
[]);
19651 public static function from_json(mixed $json, int $position, string $source) {
19652 $left_angle = EditableSyntax
::from_json(
19653 $json->xhp_close_left_angle
, $position, $source);
19654 $position +
= $left_angle->width();
19655 $name = EditableSyntax
::from_json(
19656 $json->xhp_close_name
, $position, $source);
19657 $position +
= $name->width();
19658 $right_angle = EditableSyntax
::from_json(
19659 $json->xhp_close_right_angle
, $position, $source);
19660 $position +
= $right_angle->width();
19661 return new XHPClose(
19666 public function children(): Generator
<string, EditableSyntax
, void
> {
19667 yield
$this->_left_angle
;
19668 yield
$this->_name
;
19669 yield
$this->_right_angle
;
19673 final class TypeConstant
extends EditableSyntax
{
19674 private EditableSyntax
$_left_type;
19675 private EditableSyntax
$_separator;
19676 private EditableSyntax
$_right_type;
19677 public function __construct(
19678 EditableSyntax
$left_type,
19679 EditableSyntax
$separator,
19680 EditableSyntax
$right_type) {
19681 parent
::__construct('type_constant');
19682 $this->_left_type
= $left_type;
19683 $this->_separator
= $separator;
19684 $this->_right_type
= $right_type;
19686 public function left_type(): EditableSyntax
{
19687 return $this->_left_type
;
19689 public function separator(): EditableSyntax
{
19690 return $this->_separator
;
19692 public function right_type(): EditableSyntax
{
19693 return $this->_right_type
;
19695 public function with_left_type(EditableSyntax
$left_type): TypeConstant
{
19696 return new TypeConstant(
19699 $this->_right_type
);
19701 public function with_separator(EditableSyntax
$separator): TypeConstant
{
19702 return new TypeConstant(
19705 $this->_right_type
);
19707 public function with_right_type(EditableSyntax
$right_type): TypeConstant
{
19708 return new TypeConstant(
19714 public function rewrite(
19716 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
19717 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
19718 $new_parents = $parents ??
[];
19719 array_push($new_parents, $this);
19720 $left_type = $this->left_type()->rewrite($rewriter, $new_parents);
19721 $separator = $this->separator()->rewrite($rewriter, $new_parents);
19722 $right_type = $this->right_type()->rewrite($rewriter, $new_parents);
19724 $left_type === $this->left_type() &&
19725 $separator === $this->separator() &&
19726 $right_type === $this->right_type()) {
19727 return $rewriter($this, $parents ??
[]);
19729 return $rewriter(new TypeConstant(
19732 $right_type), $parents ??
[]);
19736 public static function from_json(mixed $json, int $position, string $source) {
19737 $left_type = EditableSyntax
::from_json(
19738 $json->type_constant_left_type
, $position, $source);
19739 $position +
= $left_type->width();
19740 $separator = EditableSyntax
::from_json(
19741 $json->type_constant_separator
, $position, $source);
19742 $position +
= $separator->width();
19743 $right_type = EditableSyntax
::from_json(
19744 $json->type_constant_right_type
, $position, $source);
19745 $position +
= $right_type->width();
19746 return new TypeConstant(
19751 public function children(): Generator
<string, EditableSyntax
, void
> {
19752 yield
$this->_left_type
;
19753 yield
$this->_separator
;
19754 yield
$this->_right_type
;
19758 final class VectorTypeSpecifier
extends EditableSyntax
{
19759 private EditableSyntax
$_keyword;
19760 private EditableSyntax
$_left_angle;
19761 private EditableSyntax
$_type;
19762 private EditableSyntax
$_trailing_comma;
19763 private EditableSyntax
$_right_angle;
19764 public function __construct(
19765 EditableSyntax
$keyword,
19766 EditableSyntax
$left_angle,
19767 EditableSyntax
$type,
19768 EditableSyntax
$trailing_comma,
19769 EditableSyntax
$right_angle) {
19770 parent
::__construct('vector_type_specifier');
19771 $this->_keyword
= $keyword;
19772 $this->_left_angle
= $left_angle;
19773 $this->_type
= $type;
19774 $this->_trailing_comma
= $trailing_comma;
19775 $this->_right_angle
= $right_angle;
19777 public function keyword(): EditableSyntax
{
19778 return $this->_keyword
;
19780 public function left_angle(): EditableSyntax
{
19781 return $this->_left_angle
;
19783 public function type(): EditableSyntax
{
19784 return $this->_type
;
19786 public function trailing_comma(): EditableSyntax
{
19787 return $this->_trailing_comma
;
19789 public function right_angle(): EditableSyntax
{
19790 return $this->_right_angle
;
19792 public function with_keyword(EditableSyntax
$keyword): VectorTypeSpecifier
{
19793 return new VectorTypeSpecifier(
19795 $this->_left_angle
,
19797 $this->_trailing_comma
,
19798 $this->_right_angle
);
19800 public function with_left_angle(EditableSyntax
$left_angle): VectorTypeSpecifier
{
19801 return new VectorTypeSpecifier(
19805 $this->_trailing_comma
,
19806 $this->_right_angle
);
19808 public function with_type(EditableSyntax
$type): VectorTypeSpecifier
{
19809 return new VectorTypeSpecifier(
19811 $this->_left_angle
,
19813 $this->_trailing_comma
,
19814 $this->_right_angle
);
19816 public function with_trailing_comma(EditableSyntax
$trailing_comma): VectorTypeSpecifier
{
19817 return new VectorTypeSpecifier(
19819 $this->_left_angle
,
19822 $this->_right_angle
);
19824 public function with_right_angle(EditableSyntax
$right_angle): VectorTypeSpecifier
{
19825 return new VectorTypeSpecifier(
19827 $this->_left_angle
,
19829 $this->_trailing_comma
,
19833 public function rewrite(
19835 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
19836 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
19837 $new_parents = $parents ??
[];
19838 array_push($new_parents, $this);
19839 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
19840 $left_angle = $this->left_angle()->rewrite($rewriter, $new_parents);
19841 $type = $this->type()->rewrite($rewriter, $new_parents);
19842 $trailing_comma = $this->trailing_comma()->rewrite($rewriter, $new_parents);
19843 $right_angle = $this->right_angle()->rewrite($rewriter, $new_parents);
19845 $keyword === $this->keyword() &&
19846 $left_angle === $this->left_angle() &&
19847 $type === $this->type() &&
19848 $trailing_comma === $this->trailing_comma() &&
19849 $right_angle === $this->right_angle()) {
19850 return $rewriter($this, $parents ??
[]);
19852 return $rewriter(new VectorTypeSpecifier(
19857 $right_angle), $parents ??
[]);
19861 public static function from_json(mixed $json, int $position, string $source) {
19862 $keyword = EditableSyntax
::from_json(
19863 $json->vector_type_keyword
, $position, $source);
19864 $position +
= $keyword->width();
19865 $left_angle = EditableSyntax
::from_json(
19866 $json->vector_type_left_angle
, $position, $source);
19867 $position +
= $left_angle->width();
19868 $type = EditableSyntax
::from_json(
19869 $json->vector_type_type
, $position, $source);
19870 $position +
= $type->width();
19871 $trailing_comma = EditableSyntax
::from_json(
19872 $json->vector_type_trailing_comma
, $position, $source);
19873 $position +
= $trailing_comma->width();
19874 $right_angle = EditableSyntax
::from_json(
19875 $json->vector_type_right_angle
, $position, $source);
19876 $position +
= $right_angle->width();
19877 return new VectorTypeSpecifier(
19884 public function children(): Generator
<string, EditableSyntax
, void
> {
19885 yield
$this->_keyword
;
19886 yield
$this->_left_angle
;
19887 yield
$this->_type
;
19888 yield
$this->_trailing_comma
;
19889 yield
$this->_right_angle
;
19893 final class KeysetTypeSpecifier
extends EditableSyntax
{
19894 private EditableSyntax
$_keyword;
19895 private EditableSyntax
$_left_angle;
19896 private EditableSyntax
$_type;
19897 private EditableSyntax
$_trailing_comma;
19898 private EditableSyntax
$_right_angle;
19899 public function __construct(
19900 EditableSyntax
$keyword,
19901 EditableSyntax
$left_angle,
19902 EditableSyntax
$type,
19903 EditableSyntax
$trailing_comma,
19904 EditableSyntax
$right_angle) {
19905 parent
::__construct('keyset_type_specifier');
19906 $this->_keyword
= $keyword;
19907 $this->_left_angle
= $left_angle;
19908 $this->_type
= $type;
19909 $this->_trailing_comma
= $trailing_comma;
19910 $this->_right_angle
= $right_angle;
19912 public function keyword(): EditableSyntax
{
19913 return $this->_keyword
;
19915 public function left_angle(): EditableSyntax
{
19916 return $this->_left_angle
;
19918 public function type(): EditableSyntax
{
19919 return $this->_type
;
19921 public function trailing_comma(): EditableSyntax
{
19922 return $this->_trailing_comma
;
19924 public function right_angle(): EditableSyntax
{
19925 return $this->_right_angle
;
19927 public function with_keyword(EditableSyntax
$keyword): KeysetTypeSpecifier
{
19928 return new KeysetTypeSpecifier(
19930 $this->_left_angle
,
19932 $this->_trailing_comma
,
19933 $this->_right_angle
);
19935 public function with_left_angle(EditableSyntax
$left_angle): KeysetTypeSpecifier
{
19936 return new KeysetTypeSpecifier(
19940 $this->_trailing_comma
,
19941 $this->_right_angle
);
19943 public function with_type(EditableSyntax
$type): KeysetTypeSpecifier
{
19944 return new KeysetTypeSpecifier(
19946 $this->_left_angle
,
19948 $this->_trailing_comma
,
19949 $this->_right_angle
);
19951 public function with_trailing_comma(EditableSyntax
$trailing_comma): KeysetTypeSpecifier
{
19952 return new KeysetTypeSpecifier(
19954 $this->_left_angle
,
19957 $this->_right_angle
);
19959 public function with_right_angle(EditableSyntax
$right_angle): KeysetTypeSpecifier
{
19960 return new KeysetTypeSpecifier(
19962 $this->_left_angle
,
19964 $this->_trailing_comma
,
19968 public function rewrite(
19970 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
19971 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
19972 $new_parents = $parents ??
[];
19973 array_push($new_parents, $this);
19974 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
19975 $left_angle = $this->left_angle()->rewrite($rewriter, $new_parents);
19976 $type = $this->type()->rewrite($rewriter, $new_parents);
19977 $trailing_comma = $this->trailing_comma()->rewrite($rewriter, $new_parents);
19978 $right_angle = $this->right_angle()->rewrite($rewriter, $new_parents);
19980 $keyword === $this->keyword() &&
19981 $left_angle === $this->left_angle() &&
19982 $type === $this->type() &&
19983 $trailing_comma === $this->trailing_comma() &&
19984 $right_angle === $this->right_angle()) {
19985 return $rewriter($this, $parents ??
[]);
19987 return $rewriter(new KeysetTypeSpecifier(
19992 $right_angle), $parents ??
[]);
19996 public static function from_json(mixed $json, int $position, string $source) {
19997 $keyword = EditableSyntax
::from_json(
19998 $json->keyset_type_keyword
, $position, $source);
19999 $position +
= $keyword->width();
20000 $left_angle = EditableSyntax
::from_json(
20001 $json->keyset_type_left_angle
, $position, $source);
20002 $position +
= $left_angle->width();
20003 $type = EditableSyntax
::from_json(
20004 $json->keyset_type_type
, $position, $source);
20005 $position +
= $type->width();
20006 $trailing_comma = EditableSyntax
::from_json(
20007 $json->keyset_type_trailing_comma
, $position, $source);
20008 $position +
= $trailing_comma->width();
20009 $right_angle = EditableSyntax
::from_json(
20010 $json->keyset_type_right_angle
, $position, $source);
20011 $position +
= $right_angle->width();
20012 return new KeysetTypeSpecifier(
20019 public function children(): Generator
<string, EditableSyntax
, void
> {
20020 yield
$this->_keyword
;
20021 yield
$this->_left_angle
;
20022 yield
$this->_type
;
20023 yield
$this->_trailing_comma
;
20024 yield
$this->_right_angle
;
20028 final class TupleTypeExplicitSpecifier
extends EditableSyntax
{
20029 private EditableSyntax
$_keyword;
20030 private EditableSyntax
$_left_angle;
20031 private EditableSyntax
$_types;
20032 private EditableSyntax
$_right_angle;
20033 public function __construct(
20034 EditableSyntax
$keyword,
20035 EditableSyntax
$left_angle,
20036 EditableSyntax
$types,
20037 EditableSyntax
$right_angle) {
20038 parent
::__construct('tuple_type_explicit_specifier');
20039 $this->_keyword
= $keyword;
20040 $this->_left_angle
= $left_angle;
20041 $this->_types
= $types;
20042 $this->_right_angle
= $right_angle;
20044 public function keyword(): EditableSyntax
{
20045 return $this->_keyword
;
20047 public function left_angle(): EditableSyntax
{
20048 return $this->_left_angle
;
20050 public function types(): EditableSyntax
{
20051 return $this->_types
;
20053 public function right_angle(): EditableSyntax
{
20054 return $this->_right_angle
;
20056 public function with_keyword(EditableSyntax
$keyword): TupleTypeExplicitSpecifier
{
20057 return new TupleTypeExplicitSpecifier(
20059 $this->_left_angle
,
20061 $this->_right_angle
);
20063 public function with_left_angle(EditableSyntax
$left_angle): TupleTypeExplicitSpecifier
{
20064 return new TupleTypeExplicitSpecifier(
20068 $this->_right_angle
);
20070 public function with_types(EditableSyntax
$types): TupleTypeExplicitSpecifier
{
20071 return new TupleTypeExplicitSpecifier(
20073 $this->_left_angle
,
20075 $this->_right_angle
);
20077 public function with_right_angle(EditableSyntax
$right_angle): TupleTypeExplicitSpecifier
{
20078 return new TupleTypeExplicitSpecifier(
20080 $this->_left_angle
,
20085 public function rewrite(
20087 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
20088 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
20089 $new_parents = $parents ??
[];
20090 array_push($new_parents, $this);
20091 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
20092 $left_angle = $this->left_angle()->rewrite($rewriter, $new_parents);
20093 $types = $this->types()->rewrite($rewriter, $new_parents);
20094 $right_angle = $this->right_angle()->rewrite($rewriter, $new_parents);
20096 $keyword === $this->keyword() &&
20097 $left_angle === $this->left_angle() &&
20098 $types === $this->types() &&
20099 $right_angle === $this->right_angle()) {
20100 return $rewriter($this, $parents ??
[]);
20102 return $rewriter(new TupleTypeExplicitSpecifier(
20106 $right_angle), $parents ??
[]);
20110 public static function from_json(mixed $json, int $position, string $source) {
20111 $keyword = EditableSyntax
::from_json(
20112 $json->tuple_type_keyword
, $position, $source);
20113 $position +
= $keyword->width();
20114 $left_angle = EditableSyntax
::from_json(
20115 $json->tuple_type_left_angle
, $position, $source);
20116 $position +
= $left_angle->width();
20117 $types = EditableSyntax
::from_json(
20118 $json->tuple_type_types
, $position, $source);
20119 $position +
= $types->width();
20120 $right_angle = EditableSyntax
::from_json(
20121 $json->tuple_type_right_angle
, $position, $source);
20122 $position +
= $right_angle->width();
20123 return new TupleTypeExplicitSpecifier(
20129 public function children(): Generator
<string, EditableSyntax
, void
> {
20130 yield
$this->_keyword
;
20131 yield
$this->_left_angle
;
20132 yield
$this->_types
;
20133 yield
$this->_right_angle
;
20137 final class VarrayTypeSpecifier
extends EditableSyntax
{
20138 private EditableSyntax
$_keyword;
20139 private EditableSyntax
$_left_angle;
20140 private EditableSyntax
$_type;
20141 private EditableSyntax
$_trailing_comma;
20142 private EditableSyntax
$_right_angle;
20143 public function __construct(
20144 EditableSyntax
$keyword,
20145 EditableSyntax
$left_angle,
20146 EditableSyntax
$type,
20147 EditableSyntax
$trailing_comma,
20148 EditableSyntax
$right_angle) {
20149 parent
::__construct('varray_type_specifier');
20150 $this->_keyword
= $keyword;
20151 $this->_left_angle
= $left_angle;
20152 $this->_type
= $type;
20153 $this->_trailing_comma
= $trailing_comma;
20154 $this->_right_angle
= $right_angle;
20156 public function keyword(): EditableSyntax
{
20157 return $this->_keyword
;
20159 public function left_angle(): EditableSyntax
{
20160 return $this->_left_angle
;
20162 public function type(): EditableSyntax
{
20163 return $this->_type
;
20165 public function trailing_comma(): EditableSyntax
{
20166 return $this->_trailing_comma
;
20168 public function right_angle(): EditableSyntax
{
20169 return $this->_right_angle
;
20171 public function with_keyword(EditableSyntax
$keyword): VarrayTypeSpecifier
{
20172 return new VarrayTypeSpecifier(
20174 $this->_left_angle
,
20176 $this->_trailing_comma
,
20177 $this->_right_angle
);
20179 public function with_left_angle(EditableSyntax
$left_angle): VarrayTypeSpecifier
{
20180 return new VarrayTypeSpecifier(
20184 $this->_trailing_comma
,
20185 $this->_right_angle
);
20187 public function with_type(EditableSyntax
$type): VarrayTypeSpecifier
{
20188 return new VarrayTypeSpecifier(
20190 $this->_left_angle
,
20192 $this->_trailing_comma
,
20193 $this->_right_angle
);
20195 public function with_trailing_comma(EditableSyntax
$trailing_comma): VarrayTypeSpecifier
{
20196 return new VarrayTypeSpecifier(
20198 $this->_left_angle
,
20201 $this->_right_angle
);
20203 public function with_right_angle(EditableSyntax
$right_angle): VarrayTypeSpecifier
{
20204 return new VarrayTypeSpecifier(
20206 $this->_left_angle
,
20208 $this->_trailing_comma
,
20212 public function rewrite(
20214 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
20215 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
20216 $new_parents = $parents ??
[];
20217 array_push($new_parents, $this);
20218 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
20219 $left_angle = $this->left_angle()->rewrite($rewriter, $new_parents);
20220 $type = $this->type()->rewrite($rewriter, $new_parents);
20221 $trailing_comma = $this->trailing_comma()->rewrite($rewriter, $new_parents);
20222 $right_angle = $this->right_angle()->rewrite($rewriter, $new_parents);
20224 $keyword === $this->keyword() &&
20225 $left_angle === $this->left_angle() &&
20226 $type === $this->type() &&
20227 $trailing_comma === $this->trailing_comma() &&
20228 $right_angle === $this->right_angle()) {
20229 return $rewriter($this, $parents ??
[]);
20231 return $rewriter(new VarrayTypeSpecifier(
20236 $right_angle), $parents ??
[]);
20240 public static function from_json(mixed $json, int $position, string $source) {
20241 $keyword = EditableSyntax
::from_json(
20242 $json->varray_keyword
, $position, $source);
20243 $position +
= $keyword->width();
20244 $left_angle = EditableSyntax
::from_json(
20245 $json->varray_left_angle
, $position, $source);
20246 $position +
= $left_angle->width();
20247 $type = EditableSyntax
::from_json(
20248 $json->varray_type
, $position, $source);
20249 $position +
= $type->width();
20250 $trailing_comma = EditableSyntax
::from_json(
20251 $json->varray_trailing_comma
, $position, $source);
20252 $position +
= $trailing_comma->width();
20253 $right_angle = EditableSyntax
::from_json(
20254 $json->varray_right_angle
, $position, $source);
20255 $position +
= $right_angle->width();
20256 return new VarrayTypeSpecifier(
20263 public function children(): Generator
<string, EditableSyntax
, void
> {
20264 yield
$this->_keyword
;
20265 yield
$this->_left_angle
;
20266 yield
$this->_type
;
20267 yield
$this->_trailing_comma
;
20268 yield
$this->_right_angle
;
20272 final class VectorArrayTypeSpecifier
extends EditableSyntax
{
20273 private EditableSyntax
$_keyword;
20274 private EditableSyntax
$_left_angle;
20275 private EditableSyntax
$_type;
20276 private EditableSyntax
$_right_angle;
20277 public function __construct(
20278 EditableSyntax
$keyword,
20279 EditableSyntax
$left_angle,
20280 EditableSyntax
$type,
20281 EditableSyntax
$right_angle) {
20282 parent
::__construct('vector_array_type_specifier');
20283 $this->_keyword
= $keyword;
20284 $this->_left_angle
= $left_angle;
20285 $this->_type
= $type;
20286 $this->_right_angle
= $right_angle;
20288 public function keyword(): EditableSyntax
{
20289 return $this->_keyword
;
20291 public function left_angle(): EditableSyntax
{
20292 return $this->_left_angle
;
20294 public function type(): EditableSyntax
{
20295 return $this->_type
;
20297 public function right_angle(): EditableSyntax
{
20298 return $this->_right_angle
;
20300 public function with_keyword(EditableSyntax
$keyword): VectorArrayTypeSpecifier
{
20301 return new VectorArrayTypeSpecifier(
20303 $this->_left_angle
,
20305 $this->_right_angle
);
20307 public function with_left_angle(EditableSyntax
$left_angle): VectorArrayTypeSpecifier
{
20308 return new VectorArrayTypeSpecifier(
20312 $this->_right_angle
);
20314 public function with_type(EditableSyntax
$type): VectorArrayTypeSpecifier
{
20315 return new VectorArrayTypeSpecifier(
20317 $this->_left_angle
,
20319 $this->_right_angle
);
20321 public function with_right_angle(EditableSyntax
$right_angle): VectorArrayTypeSpecifier
{
20322 return new VectorArrayTypeSpecifier(
20324 $this->_left_angle
,
20329 public function rewrite(
20331 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
20332 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
20333 $new_parents = $parents ??
[];
20334 array_push($new_parents, $this);
20335 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
20336 $left_angle = $this->left_angle()->rewrite($rewriter, $new_parents);
20337 $type = $this->type()->rewrite($rewriter, $new_parents);
20338 $right_angle = $this->right_angle()->rewrite($rewriter, $new_parents);
20340 $keyword === $this->keyword() &&
20341 $left_angle === $this->left_angle() &&
20342 $type === $this->type() &&
20343 $right_angle === $this->right_angle()) {
20344 return $rewriter($this, $parents ??
[]);
20346 return $rewriter(new VectorArrayTypeSpecifier(
20350 $right_angle), $parents ??
[]);
20354 public static function from_json(mixed $json, int $position, string $source) {
20355 $keyword = EditableSyntax
::from_json(
20356 $json->vector_array_keyword
, $position, $source);
20357 $position +
= $keyword->width();
20358 $left_angle = EditableSyntax
::from_json(
20359 $json->vector_array_left_angle
, $position, $source);
20360 $position +
= $left_angle->width();
20361 $type = EditableSyntax
::from_json(
20362 $json->vector_array_type
, $position, $source);
20363 $position +
= $type->width();
20364 $right_angle = EditableSyntax
::from_json(
20365 $json->vector_array_right_angle
, $position, $source);
20366 $position +
= $right_angle->width();
20367 return new VectorArrayTypeSpecifier(
20373 public function children(): Generator
<string, EditableSyntax
, void
> {
20374 yield
$this->_keyword
;
20375 yield
$this->_left_angle
;
20376 yield
$this->_type
;
20377 yield
$this->_right_angle
;
20381 final class TypeParameter
extends EditableSyntax
{
20382 private EditableSyntax
$_variance;
20383 private EditableSyntax
$_name;
20384 private EditableSyntax
$_constraints;
20385 public function __construct(
20386 EditableSyntax
$variance,
20387 EditableSyntax
$name,
20388 EditableSyntax
$constraints) {
20389 parent
::__construct('type_parameter');
20390 $this->_variance
= $variance;
20391 $this->_name
= $name;
20392 $this->_constraints
= $constraints;
20394 public function variance(): EditableSyntax
{
20395 return $this->_variance
;
20397 public function name(): EditableSyntax
{
20398 return $this->_name
;
20400 public function constraints(): EditableSyntax
{
20401 return $this->_constraints
;
20403 public function with_variance(EditableSyntax
$variance): TypeParameter
{
20404 return new TypeParameter(
20407 $this->_constraints
);
20409 public function with_name(EditableSyntax
$name): TypeParameter
{
20410 return new TypeParameter(
20413 $this->_constraints
);
20415 public function with_constraints(EditableSyntax
$constraints): TypeParameter
{
20416 return new TypeParameter(
20422 public function rewrite(
20424 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
20425 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
20426 $new_parents = $parents ??
[];
20427 array_push($new_parents, $this);
20428 $variance = $this->variance()->rewrite($rewriter, $new_parents);
20429 $name = $this->name()->rewrite($rewriter, $new_parents);
20430 $constraints = $this->constraints()->rewrite($rewriter, $new_parents);
20432 $variance === $this->variance() &&
20433 $name === $this->name() &&
20434 $constraints === $this->constraints()) {
20435 return $rewriter($this, $parents ??
[]);
20437 return $rewriter(new TypeParameter(
20440 $constraints), $parents ??
[]);
20444 public static function from_json(mixed $json, int $position, string $source) {
20445 $variance = EditableSyntax
::from_json(
20446 $json->type_variance
, $position, $source);
20447 $position +
= $variance->width();
20448 $name = EditableSyntax
::from_json(
20449 $json->type_name
, $position, $source);
20450 $position +
= $name->width();
20451 $constraints = EditableSyntax
::from_json(
20452 $json->type_constraints
, $position, $source);
20453 $position +
= $constraints->width();
20454 return new TypeParameter(
20459 public function children(): Generator
<string, EditableSyntax
, void
> {
20460 yield
$this->_variance
;
20461 yield
$this->_name
;
20462 yield
$this->_constraints
;
20466 final class TypeConstraint
extends EditableSyntax
{
20467 private EditableSyntax
$_keyword;
20468 private EditableSyntax
$_type;
20469 public function __construct(
20470 EditableSyntax
$keyword,
20471 EditableSyntax
$type) {
20472 parent
::__construct('type_constraint');
20473 $this->_keyword
= $keyword;
20474 $this->_type
= $type;
20476 public function keyword(): EditableSyntax
{
20477 return $this->_keyword
;
20479 public function type(): EditableSyntax
{
20480 return $this->_type
;
20482 public function with_keyword(EditableSyntax
$keyword): TypeConstraint
{
20483 return new TypeConstraint(
20487 public function with_type(EditableSyntax
$type): TypeConstraint
{
20488 return new TypeConstraint(
20493 public function rewrite(
20495 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
20496 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
20497 $new_parents = $parents ??
[];
20498 array_push($new_parents, $this);
20499 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
20500 $type = $this->type()->rewrite($rewriter, $new_parents);
20502 $keyword === $this->keyword() &&
20503 $type === $this->type()) {
20504 return $rewriter($this, $parents ??
[]);
20506 return $rewriter(new TypeConstraint(
20508 $type), $parents ??
[]);
20512 public static function from_json(mixed $json, int $position, string $source) {
20513 $keyword = EditableSyntax
::from_json(
20514 $json->constraint_keyword
, $position, $source);
20515 $position +
= $keyword->width();
20516 $type = EditableSyntax
::from_json(
20517 $json->constraint_type
, $position, $source);
20518 $position +
= $type->width();
20519 return new TypeConstraint(
20523 public function children(): Generator
<string, EditableSyntax
, void
> {
20524 yield
$this->_keyword
;
20525 yield
$this->_type
;
20529 final class DarrayTypeSpecifier
extends EditableSyntax
{
20530 private EditableSyntax
$_keyword;
20531 private EditableSyntax
$_left_angle;
20532 private EditableSyntax
$_key;
20533 private EditableSyntax
$_comma;
20534 private EditableSyntax
$_value;
20535 private EditableSyntax
$_trailing_comma;
20536 private EditableSyntax
$_right_angle;
20537 public function __construct(
20538 EditableSyntax
$keyword,
20539 EditableSyntax
$left_angle,
20540 EditableSyntax
$key,
20541 EditableSyntax
$comma,
20542 EditableSyntax
$value,
20543 EditableSyntax
$trailing_comma,
20544 EditableSyntax
$right_angle) {
20545 parent
::__construct('darray_type_specifier');
20546 $this->_keyword
= $keyword;
20547 $this->_left_angle
= $left_angle;
20548 $this->_key
= $key;
20549 $this->_comma
= $comma;
20550 $this->_value
= $value;
20551 $this->_trailing_comma
= $trailing_comma;
20552 $this->_right_angle
= $right_angle;
20554 public function keyword(): EditableSyntax
{
20555 return $this->_keyword
;
20557 public function left_angle(): EditableSyntax
{
20558 return $this->_left_angle
;
20560 public function key(): EditableSyntax
{
20561 return $this->_key
;
20563 public function comma(): EditableSyntax
{
20564 return $this->_comma
;
20566 public function value(): EditableSyntax
{
20567 return $this->_value
;
20569 public function trailing_comma(): EditableSyntax
{
20570 return $this->_trailing_comma
;
20572 public function right_angle(): EditableSyntax
{
20573 return $this->_right_angle
;
20575 public function with_keyword(EditableSyntax
$keyword): DarrayTypeSpecifier
{
20576 return new DarrayTypeSpecifier(
20578 $this->_left_angle
,
20582 $this->_trailing_comma
,
20583 $this->_right_angle
);
20585 public function with_left_angle(EditableSyntax
$left_angle): DarrayTypeSpecifier
{
20586 return new DarrayTypeSpecifier(
20592 $this->_trailing_comma
,
20593 $this->_right_angle
);
20595 public function with_key(EditableSyntax
$key): DarrayTypeSpecifier
{
20596 return new DarrayTypeSpecifier(
20598 $this->_left_angle
,
20602 $this->_trailing_comma
,
20603 $this->_right_angle
);
20605 public function with_comma(EditableSyntax
$comma): DarrayTypeSpecifier
{
20606 return new DarrayTypeSpecifier(
20608 $this->_left_angle
,
20612 $this->_trailing_comma
,
20613 $this->_right_angle
);
20615 public function with_value(EditableSyntax
$value): DarrayTypeSpecifier
{
20616 return new DarrayTypeSpecifier(
20618 $this->_left_angle
,
20622 $this->_trailing_comma
,
20623 $this->_right_angle
);
20625 public function with_trailing_comma(EditableSyntax
$trailing_comma): DarrayTypeSpecifier
{
20626 return new DarrayTypeSpecifier(
20628 $this->_left_angle
,
20633 $this->_right_angle
);
20635 public function with_right_angle(EditableSyntax
$right_angle): DarrayTypeSpecifier
{
20636 return new DarrayTypeSpecifier(
20638 $this->_left_angle
,
20642 $this->_trailing_comma
,
20646 public function rewrite(
20648 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
20649 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
20650 $new_parents = $parents ??
[];
20651 array_push($new_parents, $this);
20652 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
20653 $left_angle = $this->left_angle()->rewrite($rewriter, $new_parents);
20654 $key = $this->key()->rewrite($rewriter, $new_parents);
20655 $comma = $this->comma()->rewrite($rewriter, $new_parents);
20656 $value = $this->value()->rewrite($rewriter, $new_parents);
20657 $trailing_comma = $this->trailing_comma()->rewrite($rewriter, $new_parents);
20658 $right_angle = $this->right_angle()->rewrite($rewriter, $new_parents);
20660 $keyword === $this->keyword() &&
20661 $left_angle === $this->left_angle() &&
20662 $key === $this->key() &&
20663 $comma === $this->comma() &&
20664 $value === $this->value() &&
20665 $trailing_comma === $this->trailing_comma() &&
20666 $right_angle === $this->right_angle()) {
20667 return $rewriter($this, $parents ??
[]);
20669 return $rewriter(new DarrayTypeSpecifier(
20676 $right_angle), $parents ??
[]);
20680 public static function from_json(mixed $json, int $position, string $source) {
20681 $keyword = EditableSyntax
::from_json(
20682 $json->darray_keyword
, $position, $source);
20683 $position +
= $keyword->width();
20684 $left_angle = EditableSyntax
::from_json(
20685 $json->darray_left_angle
, $position, $source);
20686 $position +
= $left_angle->width();
20687 $key = EditableSyntax
::from_json(
20688 $json->darray_key
, $position, $source);
20689 $position +
= $key->width();
20690 $comma = EditableSyntax
::from_json(
20691 $json->darray_comma
, $position, $source);
20692 $position +
= $comma->width();
20693 $value = EditableSyntax
::from_json(
20694 $json->darray_value
, $position, $source);
20695 $position +
= $value->width();
20696 $trailing_comma = EditableSyntax
::from_json(
20697 $json->darray_trailing_comma
, $position, $source);
20698 $position +
= $trailing_comma->width();
20699 $right_angle = EditableSyntax
::from_json(
20700 $json->darray_right_angle
, $position, $source);
20701 $position +
= $right_angle->width();
20702 return new DarrayTypeSpecifier(
20711 public function children(): Generator
<string, EditableSyntax
, void
> {
20712 yield
$this->_keyword
;
20713 yield
$this->_left_angle
;
20715 yield
$this->_comma
;
20716 yield
$this->_value
;
20717 yield
$this->_trailing_comma
;
20718 yield
$this->_right_angle
;
20722 final class MapArrayTypeSpecifier
extends EditableSyntax
{
20723 private EditableSyntax
$_keyword;
20724 private EditableSyntax
$_left_angle;
20725 private EditableSyntax
$_key;
20726 private EditableSyntax
$_comma;
20727 private EditableSyntax
$_value;
20728 private EditableSyntax
$_right_angle;
20729 public function __construct(
20730 EditableSyntax
$keyword,
20731 EditableSyntax
$left_angle,
20732 EditableSyntax
$key,
20733 EditableSyntax
$comma,
20734 EditableSyntax
$value,
20735 EditableSyntax
$right_angle) {
20736 parent
::__construct('map_array_type_specifier');
20737 $this->_keyword
= $keyword;
20738 $this->_left_angle
= $left_angle;
20739 $this->_key
= $key;
20740 $this->_comma
= $comma;
20741 $this->_value
= $value;
20742 $this->_right_angle
= $right_angle;
20744 public function keyword(): EditableSyntax
{
20745 return $this->_keyword
;
20747 public function left_angle(): EditableSyntax
{
20748 return $this->_left_angle
;
20750 public function key(): EditableSyntax
{
20751 return $this->_key
;
20753 public function comma(): EditableSyntax
{
20754 return $this->_comma
;
20756 public function value(): EditableSyntax
{
20757 return $this->_value
;
20759 public function right_angle(): EditableSyntax
{
20760 return $this->_right_angle
;
20762 public function with_keyword(EditableSyntax
$keyword): MapArrayTypeSpecifier
{
20763 return new MapArrayTypeSpecifier(
20765 $this->_left_angle
,
20769 $this->_right_angle
);
20771 public function with_left_angle(EditableSyntax
$left_angle): MapArrayTypeSpecifier
{
20772 return new MapArrayTypeSpecifier(
20778 $this->_right_angle
);
20780 public function with_key(EditableSyntax
$key): MapArrayTypeSpecifier
{
20781 return new MapArrayTypeSpecifier(
20783 $this->_left_angle
,
20787 $this->_right_angle
);
20789 public function with_comma(EditableSyntax
$comma): MapArrayTypeSpecifier
{
20790 return new MapArrayTypeSpecifier(
20792 $this->_left_angle
,
20796 $this->_right_angle
);
20798 public function with_value(EditableSyntax
$value): MapArrayTypeSpecifier
{
20799 return new MapArrayTypeSpecifier(
20801 $this->_left_angle
,
20805 $this->_right_angle
);
20807 public function with_right_angle(EditableSyntax
$right_angle): MapArrayTypeSpecifier
{
20808 return new MapArrayTypeSpecifier(
20810 $this->_left_angle
,
20817 public function rewrite(
20819 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
20820 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
20821 $new_parents = $parents ??
[];
20822 array_push($new_parents, $this);
20823 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
20824 $left_angle = $this->left_angle()->rewrite($rewriter, $new_parents);
20825 $key = $this->key()->rewrite($rewriter, $new_parents);
20826 $comma = $this->comma()->rewrite($rewriter, $new_parents);
20827 $value = $this->value()->rewrite($rewriter, $new_parents);
20828 $right_angle = $this->right_angle()->rewrite($rewriter, $new_parents);
20830 $keyword === $this->keyword() &&
20831 $left_angle === $this->left_angle() &&
20832 $key === $this->key() &&
20833 $comma === $this->comma() &&
20834 $value === $this->value() &&
20835 $right_angle === $this->right_angle()) {
20836 return $rewriter($this, $parents ??
[]);
20838 return $rewriter(new MapArrayTypeSpecifier(
20844 $right_angle), $parents ??
[]);
20848 public static function from_json(mixed $json, int $position, string $source) {
20849 $keyword = EditableSyntax
::from_json(
20850 $json->map_array_keyword
, $position, $source);
20851 $position +
= $keyword->width();
20852 $left_angle = EditableSyntax
::from_json(
20853 $json->map_array_left_angle
, $position, $source);
20854 $position +
= $left_angle->width();
20855 $key = EditableSyntax
::from_json(
20856 $json->map_array_key
, $position, $source);
20857 $position +
= $key->width();
20858 $comma = EditableSyntax
::from_json(
20859 $json->map_array_comma
, $position, $source);
20860 $position +
= $comma->width();
20861 $value = EditableSyntax
::from_json(
20862 $json->map_array_value
, $position, $source);
20863 $position +
= $value->width();
20864 $right_angle = EditableSyntax
::from_json(
20865 $json->map_array_right_angle
, $position, $source);
20866 $position +
= $right_angle->width();
20867 return new MapArrayTypeSpecifier(
20875 public function children(): Generator
<string, EditableSyntax
, void
> {
20876 yield
$this->_keyword
;
20877 yield
$this->_left_angle
;
20879 yield
$this->_comma
;
20880 yield
$this->_value
;
20881 yield
$this->_right_angle
;
20885 final class DictionaryTypeSpecifier
extends EditableSyntax
{
20886 private EditableSyntax
$_keyword;
20887 private EditableSyntax
$_left_angle;
20888 private EditableSyntax
$_members;
20889 private EditableSyntax
$_right_angle;
20890 public function __construct(
20891 EditableSyntax
$keyword,
20892 EditableSyntax
$left_angle,
20893 EditableSyntax
$members,
20894 EditableSyntax
$right_angle) {
20895 parent
::__construct('dictionary_type_specifier');
20896 $this->_keyword
= $keyword;
20897 $this->_left_angle
= $left_angle;
20898 $this->_members
= $members;
20899 $this->_right_angle
= $right_angle;
20901 public function keyword(): EditableSyntax
{
20902 return $this->_keyword
;
20904 public function left_angle(): EditableSyntax
{
20905 return $this->_left_angle
;
20907 public function members(): EditableSyntax
{
20908 return $this->_members
;
20910 public function right_angle(): EditableSyntax
{
20911 return $this->_right_angle
;
20913 public function with_keyword(EditableSyntax
$keyword): DictionaryTypeSpecifier
{
20914 return new DictionaryTypeSpecifier(
20916 $this->_left_angle
,
20918 $this->_right_angle
);
20920 public function with_left_angle(EditableSyntax
$left_angle): DictionaryTypeSpecifier
{
20921 return new DictionaryTypeSpecifier(
20925 $this->_right_angle
);
20927 public function with_members(EditableSyntax
$members): DictionaryTypeSpecifier
{
20928 return new DictionaryTypeSpecifier(
20930 $this->_left_angle
,
20932 $this->_right_angle
);
20934 public function with_right_angle(EditableSyntax
$right_angle): DictionaryTypeSpecifier
{
20935 return new DictionaryTypeSpecifier(
20937 $this->_left_angle
,
20942 public function rewrite(
20944 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
20945 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
20946 $new_parents = $parents ??
[];
20947 array_push($new_parents, $this);
20948 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
20949 $left_angle = $this->left_angle()->rewrite($rewriter, $new_parents);
20950 $members = $this->members()->rewrite($rewriter, $new_parents);
20951 $right_angle = $this->right_angle()->rewrite($rewriter, $new_parents);
20953 $keyword === $this->keyword() &&
20954 $left_angle === $this->left_angle() &&
20955 $members === $this->members() &&
20956 $right_angle === $this->right_angle()) {
20957 return $rewriter($this, $parents ??
[]);
20959 return $rewriter(new DictionaryTypeSpecifier(
20963 $right_angle), $parents ??
[]);
20967 public static function from_json(mixed $json, int $position, string $source) {
20968 $keyword = EditableSyntax
::from_json(
20969 $json->dictionary_type_keyword
, $position, $source);
20970 $position +
= $keyword->width();
20971 $left_angle = EditableSyntax
::from_json(
20972 $json->dictionary_type_left_angle
, $position, $source);
20973 $position +
= $left_angle->width();
20974 $members = EditableSyntax
::from_json(
20975 $json->dictionary_type_members
, $position, $source);
20976 $position +
= $members->width();
20977 $right_angle = EditableSyntax
::from_json(
20978 $json->dictionary_type_right_angle
, $position, $source);
20979 $position +
= $right_angle->width();
20980 return new DictionaryTypeSpecifier(
20986 public function children(): Generator
<string, EditableSyntax
, void
> {
20987 yield
$this->_keyword
;
20988 yield
$this->_left_angle
;
20989 yield
$this->_members
;
20990 yield
$this->_right_angle
;
20994 final class ClosureTypeSpecifier
extends EditableSyntax
{
20995 private EditableSyntax
$_outer_left_paren;
20996 private EditableSyntax
$_coroutine;
20997 private EditableSyntax
$_function_keyword;
20998 private EditableSyntax
$_inner_left_paren;
20999 private EditableSyntax
$_parameter_list;
21000 private EditableSyntax
$_inner_right_paren;
21001 private EditableSyntax
$_colon;
21002 private EditableSyntax
$_return_type;
21003 private EditableSyntax
$_outer_right_paren;
21004 public function __construct(
21005 EditableSyntax
$outer_left_paren,
21006 EditableSyntax
$coroutine,
21007 EditableSyntax
$function_keyword,
21008 EditableSyntax
$inner_left_paren,
21009 EditableSyntax
$parameter_list,
21010 EditableSyntax
$inner_right_paren,
21011 EditableSyntax
$colon,
21012 EditableSyntax
$return_type,
21013 EditableSyntax
$outer_right_paren) {
21014 parent
::__construct('closure_type_specifier');
21015 $this->_outer_left_paren
= $outer_left_paren;
21016 $this->_coroutine
= $coroutine;
21017 $this->_function_keyword
= $function_keyword;
21018 $this->_inner_left_paren
= $inner_left_paren;
21019 $this->_parameter_list
= $parameter_list;
21020 $this->_inner_right_paren
= $inner_right_paren;
21021 $this->_colon
= $colon;
21022 $this->_return_type
= $return_type;
21023 $this->_outer_right_paren
= $outer_right_paren;
21025 public function outer_left_paren(): EditableSyntax
{
21026 return $this->_outer_left_paren
;
21028 public function coroutine(): EditableSyntax
{
21029 return $this->_coroutine
;
21031 public function function_keyword(): EditableSyntax
{
21032 return $this->_function_keyword
;
21034 public function inner_left_paren(): EditableSyntax
{
21035 return $this->_inner_left_paren
;
21037 public function parameter_list(): EditableSyntax
{
21038 return $this->_parameter_list
;
21040 public function inner_right_paren(): EditableSyntax
{
21041 return $this->_inner_right_paren
;
21043 public function colon(): EditableSyntax
{
21044 return $this->_colon
;
21046 public function return_type(): EditableSyntax
{
21047 return $this->_return_type
;
21049 public function outer_right_paren(): EditableSyntax
{
21050 return $this->_outer_right_paren
;
21052 public function with_outer_left_paren(EditableSyntax
$outer_left_paren): ClosureTypeSpecifier
{
21053 return new ClosureTypeSpecifier(
21056 $this->_function_keyword
,
21057 $this->_inner_left_paren
,
21058 $this->_parameter_list
,
21059 $this->_inner_right_paren
,
21061 $this->_return_type
,
21062 $this->_outer_right_paren
);
21064 public function with_coroutine(EditableSyntax
$coroutine): ClosureTypeSpecifier
{
21065 return new ClosureTypeSpecifier(
21066 $this->_outer_left_paren
,
21068 $this->_function_keyword
,
21069 $this->_inner_left_paren
,
21070 $this->_parameter_list
,
21071 $this->_inner_right_paren
,
21073 $this->_return_type
,
21074 $this->_outer_right_paren
);
21076 public function with_function_keyword(EditableSyntax
$function_keyword): ClosureTypeSpecifier
{
21077 return new ClosureTypeSpecifier(
21078 $this->_outer_left_paren
,
21081 $this->_inner_left_paren
,
21082 $this->_parameter_list
,
21083 $this->_inner_right_paren
,
21085 $this->_return_type
,
21086 $this->_outer_right_paren
);
21088 public function with_inner_left_paren(EditableSyntax
$inner_left_paren): ClosureTypeSpecifier
{
21089 return new ClosureTypeSpecifier(
21090 $this->_outer_left_paren
,
21092 $this->_function_keyword
,
21094 $this->_parameter_list
,
21095 $this->_inner_right_paren
,
21097 $this->_return_type
,
21098 $this->_outer_right_paren
);
21100 public function with_parameter_list(EditableSyntax
$parameter_list): ClosureTypeSpecifier
{
21101 return new ClosureTypeSpecifier(
21102 $this->_outer_left_paren
,
21104 $this->_function_keyword
,
21105 $this->_inner_left_paren
,
21107 $this->_inner_right_paren
,
21109 $this->_return_type
,
21110 $this->_outer_right_paren
);
21112 public function with_inner_right_paren(EditableSyntax
$inner_right_paren): ClosureTypeSpecifier
{
21113 return new ClosureTypeSpecifier(
21114 $this->_outer_left_paren
,
21116 $this->_function_keyword
,
21117 $this->_inner_left_paren
,
21118 $this->_parameter_list
,
21119 $inner_right_paren,
21121 $this->_return_type
,
21122 $this->_outer_right_paren
);
21124 public function with_colon(EditableSyntax
$colon): ClosureTypeSpecifier
{
21125 return new ClosureTypeSpecifier(
21126 $this->_outer_left_paren
,
21128 $this->_function_keyword
,
21129 $this->_inner_left_paren
,
21130 $this->_parameter_list
,
21131 $this->_inner_right_paren
,
21133 $this->_return_type
,
21134 $this->_outer_right_paren
);
21136 public function with_return_type(EditableSyntax
$return_type): ClosureTypeSpecifier
{
21137 return new ClosureTypeSpecifier(
21138 $this->_outer_left_paren
,
21140 $this->_function_keyword
,
21141 $this->_inner_left_paren
,
21142 $this->_parameter_list
,
21143 $this->_inner_right_paren
,
21146 $this->_outer_right_paren
);
21148 public function with_outer_right_paren(EditableSyntax
$outer_right_paren): ClosureTypeSpecifier
{
21149 return new ClosureTypeSpecifier(
21150 $this->_outer_left_paren
,
21152 $this->_function_keyword
,
21153 $this->_inner_left_paren
,
21154 $this->_parameter_list
,
21155 $this->_inner_right_paren
,
21157 $this->_return_type
,
21158 $outer_right_paren);
21161 public function rewrite(
21163 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
21164 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
21165 $new_parents = $parents ??
[];
21166 array_push($new_parents, $this);
21167 $outer_left_paren = $this->outer_left_paren()->rewrite($rewriter, $new_parents);
21168 $coroutine = $this->coroutine()->rewrite($rewriter, $new_parents);
21169 $function_keyword = $this->function_keyword()->rewrite($rewriter, $new_parents);
21170 $inner_left_paren = $this->inner_left_paren()->rewrite($rewriter, $new_parents);
21171 $parameter_list = $this->parameter_list()->rewrite($rewriter, $new_parents);
21172 $inner_right_paren = $this->inner_right_paren()->rewrite($rewriter, $new_parents);
21173 $colon = $this->colon()->rewrite($rewriter, $new_parents);
21174 $return_type = $this->return_type()->rewrite($rewriter, $new_parents);
21175 $outer_right_paren = $this->outer_right_paren()->rewrite($rewriter, $new_parents);
21177 $outer_left_paren === $this->outer_left_paren() &&
21178 $coroutine === $this->coroutine() &&
21179 $function_keyword === $this->function_keyword() &&
21180 $inner_left_paren === $this->inner_left_paren() &&
21181 $parameter_list === $this->parameter_list() &&
21182 $inner_right_paren === $this->inner_right_paren() &&
21183 $colon === $this->colon() &&
21184 $return_type === $this->return_type() &&
21185 $outer_right_paren === $this->outer_right_paren()) {
21186 return $rewriter($this, $parents ??
[]);
21188 return $rewriter(new ClosureTypeSpecifier(
21194 $inner_right_paren,
21197 $outer_right_paren), $parents ??
[]);
21201 public static function from_json(mixed $json, int $position, string $source) {
21202 $outer_left_paren = EditableSyntax
::from_json(
21203 $json->closure_outer_left_paren
, $position, $source);
21204 $position +
= $outer_left_paren->width();
21205 $coroutine = EditableSyntax
::from_json(
21206 $json->closure_coroutine
, $position, $source);
21207 $position +
= $coroutine->width();
21208 $function_keyword = EditableSyntax
::from_json(
21209 $json->closure_function_keyword
, $position, $source);
21210 $position +
= $function_keyword->width();
21211 $inner_left_paren = EditableSyntax
::from_json(
21212 $json->closure_inner_left_paren
, $position, $source);
21213 $position +
= $inner_left_paren->width();
21214 $parameter_list = EditableSyntax
::from_json(
21215 $json->closure_parameter_list
, $position, $source);
21216 $position +
= $parameter_list->width();
21217 $inner_right_paren = EditableSyntax
::from_json(
21218 $json->closure_inner_right_paren
, $position, $source);
21219 $position +
= $inner_right_paren->width();
21220 $colon = EditableSyntax
::from_json(
21221 $json->closure_colon
, $position, $source);
21222 $position +
= $colon->width();
21223 $return_type = EditableSyntax
::from_json(
21224 $json->closure_return_type
, $position, $source);
21225 $position +
= $return_type->width();
21226 $outer_right_paren = EditableSyntax
::from_json(
21227 $json->closure_outer_right_paren
, $position, $source);
21228 $position +
= $outer_right_paren->width();
21229 return new ClosureTypeSpecifier(
21235 $inner_right_paren,
21238 $outer_right_paren);
21240 public function children(): Generator
<string, EditableSyntax
, void
> {
21241 yield
$this->_outer_left_paren
;
21242 yield
$this->_coroutine
;
21243 yield
$this->_function_keyword
;
21244 yield
$this->_inner_left_paren
;
21245 yield
$this->_parameter_list
;
21246 yield
$this->_inner_right_paren
;
21247 yield
$this->_colon
;
21248 yield
$this->_return_type
;
21249 yield
$this->_outer_right_paren
;
21253 final class ClosureParameterTypeSpecifier
extends EditableSyntax
{
21254 private EditableSyntax
$_call_convention;
21255 private EditableSyntax
$_type;
21256 public function __construct(
21257 EditableSyntax
$call_convention,
21258 EditableSyntax
$type) {
21259 parent
::__construct('closure_parameter_type_specifier');
21260 $this->_call_convention
= $call_convention;
21261 $this->_type
= $type;
21263 public function call_convention(): EditableSyntax
{
21264 return $this->_call_convention
;
21266 public function type(): EditableSyntax
{
21267 return $this->_type
;
21269 public function with_call_convention(EditableSyntax
$call_convention): ClosureParameterTypeSpecifier
{
21270 return new ClosureParameterTypeSpecifier(
21274 public function with_type(EditableSyntax
$type): ClosureParameterTypeSpecifier
{
21275 return new ClosureParameterTypeSpecifier(
21276 $this->_call_convention
,
21280 public function rewrite(
21282 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
21283 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
21284 $new_parents = $parents ??
[];
21285 array_push($new_parents, $this);
21286 $call_convention = $this->call_convention()->rewrite($rewriter, $new_parents);
21287 $type = $this->type()->rewrite($rewriter, $new_parents);
21289 $call_convention === $this->call_convention() &&
21290 $type === $this->type()) {
21291 return $rewriter($this, $parents ??
[]);
21293 return $rewriter(new ClosureParameterTypeSpecifier(
21295 $type), $parents ??
[]);
21299 public static function from_json(mixed $json, int $position, string $source) {
21300 $call_convention = EditableSyntax
::from_json(
21301 $json->closure_parameter_call_convention
, $position, $source);
21302 $position +
= $call_convention->width();
21303 $type = EditableSyntax
::from_json(
21304 $json->closure_parameter_type
, $position, $source);
21305 $position +
= $type->width();
21306 return new ClosureParameterTypeSpecifier(
21310 public function children(): Generator
<string, EditableSyntax
, void
> {
21311 yield
$this->_call_convention
;
21312 yield
$this->_type
;
21316 final class ClassnameTypeSpecifier
extends EditableSyntax
{
21317 private EditableSyntax
$_keyword;
21318 private EditableSyntax
$_left_angle;
21319 private EditableSyntax
$_type;
21320 private EditableSyntax
$_trailing_comma;
21321 private EditableSyntax
$_right_angle;
21322 public function __construct(
21323 EditableSyntax
$keyword,
21324 EditableSyntax
$left_angle,
21325 EditableSyntax
$type,
21326 EditableSyntax
$trailing_comma,
21327 EditableSyntax
$right_angle) {
21328 parent
::__construct('classname_type_specifier');
21329 $this->_keyword
= $keyword;
21330 $this->_left_angle
= $left_angle;
21331 $this->_type
= $type;
21332 $this->_trailing_comma
= $trailing_comma;
21333 $this->_right_angle
= $right_angle;
21335 public function keyword(): EditableSyntax
{
21336 return $this->_keyword
;
21338 public function left_angle(): EditableSyntax
{
21339 return $this->_left_angle
;
21341 public function type(): EditableSyntax
{
21342 return $this->_type
;
21344 public function trailing_comma(): EditableSyntax
{
21345 return $this->_trailing_comma
;
21347 public function right_angle(): EditableSyntax
{
21348 return $this->_right_angle
;
21350 public function with_keyword(EditableSyntax
$keyword): ClassnameTypeSpecifier
{
21351 return new ClassnameTypeSpecifier(
21353 $this->_left_angle
,
21355 $this->_trailing_comma
,
21356 $this->_right_angle
);
21358 public function with_left_angle(EditableSyntax
$left_angle): ClassnameTypeSpecifier
{
21359 return new ClassnameTypeSpecifier(
21363 $this->_trailing_comma
,
21364 $this->_right_angle
);
21366 public function with_type(EditableSyntax
$type): ClassnameTypeSpecifier
{
21367 return new ClassnameTypeSpecifier(
21369 $this->_left_angle
,
21371 $this->_trailing_comma
,
21372 $this->_right_angle
);
21374 public function with_trailing_comma(EditableSyntax
$trailing_comma): ClassnameTypeSpecifier
{
21375 return new ClassnameTypeSpecifier(
21377 $this->_left_angle
,
21380 $this->_right_angle
);
21382 public function with_right_angle(EditableSyntax
$right_angle): ClassnameTypeSpecifier
{
21383 return new ClassnameTypeSpecifier(
21385 $this->_left_angle
,
21387 $this->_trailing_comma
,
21391 public function rewrite(
21393 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
21394 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
21395 $new_parents = $parents ??
[];
21396 array_push($new_parents, $this);
21397 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
21398 $left_angle = $this->left_angle()->rewrite($rewriter, $new_parents);
21399 $type = $this->type()->rewrite($rewriter, $new_parents);
21400 $trailing_comma = $this->trailing_comma()->rewrite($rewriter, $new_parents);
21401 $right_angle = $this->right_angle()->rewrite($rewriter, $new_parents);
21403 $keyword === $this->keyword() &&
21404 $left_angle === $this->left_angle() &&
21405 $type === $this->type() &&
21406 $trailing_comma === $this->trailing_comma() &&
21407 $right_angle === $this->right_angle()) {
21408 return $rewriter($this, $parents ??
[]);
21410 return $rewriter(new ClassnameTypeSpecifier(
21415 $right_angle), $parents ??
[]);
21419 public static function from_json(mixed $json, int $position, string $source) {
21420 $keyword = EditableSyntax
::from_json(
21421 $json->classname_keyword
, $position, $source);
21422 $position +
= $keyword->width();
21423 $left_angle = EditableSyntax
::from_json(
21424 $json->classname_left_angle
, $position, $source);
21425 $position +
= $left_angle->width();
21426 $type = EditableSyntax
::from_json(
21427 $json->classname_type
, $position, $source);
21428 $position +
= $type->width();
21429 $trailing_comma = EditableSyntax
::from_json(
21430 $json->classname_trailing_comma
, $position, $source);
21431 $position +
= $trailing_comma->width();
21432 $right_angle = EditableSyntax
::from_json(
21433 $json->classname_right_angle
, $position, $source);
21434 $position +
= $right_angle->width();
21435 return new ClassnameTypeSpecifier(
21442 public function children(): Generator
<string, EditableSyntax
, void
> {
21443 yield
$this->_keyword
;
21444 yield
$this->_left_angle
;
21445 yield
$this->_type
;
21446 yield
$this->_trailing_comma
;
21447 yield
$this->_right_angle
;
21451 final class FieldSpecifier
extends EditableSyntax
{
21452 private EditableSyntax
$_question;
21453 private EditableSyntax
$_name;
21454 private EditableSyntax
$_arrow;
21455 private EditableSyntax
$_type;
21456 public function __construct(
21457 EditableSyntax
$question,
21458 EditableSyntax
$name,
21459 EditableSyntax
$arrow,
21460 EditableSyntax
$type) {
21461 parent
::__construct('field_specifier');
21462 $this->_question
= $question;
21463 $this->_name
= $name;
21464 $this->_arrow
= $arrow;
21465 $this->_type
= $type;
21467 public function question(): EditableSyntax
{
21468 return $this->_question
;
21470 public function name(): EditableSyntax
{
21471 return $this->_name
;
21473 public function arrow(): EditableSyntax
{
21474 return $this->_arrow
;
21476 public function type(): EditableSyntax
{
21477 return $this->_type
;
21479 public function with_question(EditableSyntax
$question): FieldSpecifier
{
21480 return new FieldSpecifier(
21486 public function with_name(EditableSyntax
$name): FieldSpecifier
{
21487 return new FieldSpecifier(
21493 public function with_arrow(EditableSyntax
$arrow): FieldSpecifier
{
21494 return new FieldSpecifier(
21500 public function with_type(EditableSyntax
$type): FieldSpecifier
{
21501 return new FieldSpecifier(
21508 public function rewrite(
21510 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
21511 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
21512 $new_parents = $parents ??
[];
21513 array_push($new_parents, $this);
21514 $question = $this->question()->rewrite($rewriter, $new_parents);
21515 $name = $this->name()->rewrite($rewriter, $new_parents);
21516 $arrow = $this->arrow()->rewrite($rewriter, $new_parents);
21517 $type = $this->type()->rewrite($rewriter, $new_parents);
21519 $question === $this->question() &&
21520 $name === $this->name() &&
21521 $arrow === $this->arrow() &&
21522 $type === $this->type()) {
21523 return $rewriter($this, $parents ??
[]);
21525 return $rewriter(new FieldSpecifier(
21529 $type), $parents ??
[]);
21533 public static function from_json(mixed $json, int $position, string $source) {
21534 $question = EditableSyntax
::from_json(
21535 $json->field_question
, $position, $source);
21536 $position +
= $question->width();
21537 $name = EditableSyntax
::from_json(
21538 $json->field_name
, $position, $source);
21539 $position +
= $name->width();
21540 $arrow = EditableSyntax
::from_json(
21541 $json->field_arrow
, $position, $source);
21542 $position +
= $arrow->width();
21543 $type = EditableSyntax
::from_json(
21544 $json->field_type
, $position, $source);
21545 $position +
= $type->width();
21546 return new FieldSpecifier(
21552 public function children(): Generator
<string, EditableSyntax
, void
> {
21553 yield
$this->_question
;
21554 yield
$this->_name
;
21555 yield
$this->_arrow
;
21556 yield
$this->_type
;
21560 final class FieldInitializer
extends EditableSyntax
{
21561 private EditableSyntax
$_name;
21562 private EditableSyntax
$_arrow;
21563 private EditableSyntax
$_value;
21564 public function __construct(
21565 EditableSyntax
$name,
21566 EditableSyntax
$arrow,
21567 EditableSyntax
$value) {
21568 parent
::__construct('field_initializer');
21569 $this->_name
= $name;
21570 $this->_arrow
= $arrow;
21571 $this->_value
= $value;
21573 public function name(): EditableSyntax
{
21574 return $this->_name
;
21576 public function arrow(): EditableSyntax
{
21577 return $this->_arrow
;
21579 public function value(): EditableSyntax
{
21580 return $this->_value
;
21582 public function with_name(EditableSyntax
$name): FieldInitializer
{
21583 return new FieldInitializer(
21588 public function with_arrow(EditableSyntax
$arrow): FieldInitializer
{
21589 return new FieldInitializer(
21594 public function with_value(EditableSyntax
$value): FieldInitializer
{
21595 return new FieldInitializer(
21601 public function rewrite(
21603 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
21604 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
21605 $new_parents = $parents ??
[];
21606 array_push($new_parents, $this);
21607 $name = $this->name()->rewrite($rewriter, $new_parents);
21608 $arrow = $this->arrow()->rewrite($rewriter, $new_parents);
21609 $value = $this->value()->rewrite($rewriter, $new_parents);
21611 $name === $this->name() &&
21612 $arrow === $this->arrow() &&
21613 $value === $this->value()) {
21614 return $rewriter($this, $parents ??
[]);
21616 return $rewriter(new FieldInitializer(
21619 $value), $parents ??
[]);
21623 public static function from_json(mixed $json, int $position, string $source) {
21624 $name = EditableSyntax
::from_json(
21625 $json->field_initializer_name
, $position, $source);
21626 $position +
= $name->width();
21627 $arrow = EditableSyntax
::from_json(
21628 $json->field_initializer_arrow
, $position, $source);
21629 $position +
= $arrow->width();
21630 $value = EditableSyntax
::from_json(
21631 $json->field_initializer_value
, $position, $source);
21632 $position +
= $value->width();
21633 return new FieldInitializer(
21638 public function children(): Generator
<string, EditableSyntax
, void
> {
21639 yield
$this->_name
;
21640 yield
$this->_arrow
;
21641 yield
$this->_value
;
21645 final class ShapeTypeSpecifier
extends EditableSyntax
{
21646 private EditableSyntax
$_keyword;
21647 private EditableSyntax
$_left_paren;
21648 private EditableSyntax
$_fields;
21649 private EditableSyntax
$_ellipsis;
21650 private EditableSyntax
$_right_paren;
21651 public function __construct(
21652 EditableSyntax
$keyword,
21653 EditableSyntax
$left_paren,
21654 EditableSyntax
$fields,
21655 EditableSyntax
$ellipsis,
21656 EditableSyntax
$right_paren) {
21657 parent
::__construct('shape_type_specifier');
21658 $this->_keyword
= $keyword;
21659 $this->_left_paren
= $left_paren;
21660 $this->_fields
= $fields;
21661 $this->_ellipsis
= $ellipsis;
21662 $this->_right_paren
= $right_paren;
21664 public function keyword(): EditableSyntax
{
21665 return $this->_keyword
;
21667 public function left_paren(): EditableSyntax
{
21668 return $this->_left_paren
;
21670 public function fields(): EditableSyntax
{
21671 return $this->_fields
;
21673 public function ellipsis(): EditableSyntax
{
21674 return $this->_ellipsis
;
21676 public function right_paren(): EditableSyntax
{
21677 return $this->_right_paren
;
21679 public function with_keyword(EditableSyntax
$keyword): ShapeTypeSpecifier
{
21680 return new ShapeTypeSpecifier(
21682 $this->_left_paren
,
21685 $this->_right_paren
);
21687 public function with_left_paren(EditableSyntax
$left_paren): ShapeTypeSpecifier
{
21688 return new ShapeTypeSpecifier(
21693 $this->_right_paren
);
21695 public function with_fields(EditableSyntax
$fields): ShapeTypeSpecifier
{
21696 return new ShapeTypeSpecifier(
21698 $this->_left_paren
,
21701 $this->_right_paren
);
21703 public function with_ellipsis(EditableSyntax
$ellipsis): ShapeTypeSpecifier
{
21704 return new ShapeTypeSpecifier(
21706 $this->_left_paren
,
21709 $this->_right_paren
);
21711 public function with_right_paren(EditableSyntax
$right_paren): ShapeTypeSpecifier
{
21712 return new ShapeTypeSpecifier(
21714 $this->_left_paren
,
21720 public function rewrite(
21722 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
21723 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
21724 $new_parents = $parents ??
[];
21725 array_push($new_parents, $this);
21726 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
21727 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
21728 $fields = $this->fields()->rewrite($rewriter, $new_parents);
21729 $ellipsis = $this->ellipsis()->rewrite($rewriter, $new_parents);
21730 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
21732 $keyword === $this->keyword() &&
21733 $left_paren === $this->left_paren() &&
21734 $fields === $this->fields() &&
21735 $ellipsis === $this->ellipsis() &&
21736 $right_paren === $this->right_paren()) {
21737 return $rewriter($this, $parents ??
[]);
21739 return $rewriter(new ShapeTypeSpecifier(
21744 $right_paren), $parents ??
[]);
21748 public static function from_json(mixed $json, int $position, string $source) {
21749 $keyword = EditableSyntax
::from_json(
21750 $json->shape_type_keyword
, $position, $source);
21751 $position +
= $keyword->width();
21752 $left_paren = EditableSyntax
::from_json(
21753 $json->shape_type_left_paren
, $position, $source);
21754 $position +
= $left_paren->width();
21755 $fields = EditableSyntax
::from_json(
21756 $json->shape_type_fields
, $position, $source);
21757 $position +
= $fields->width();
21758 $ellipsis = EditableSyntax
::from_json(
21759 $json->shape_type_ellipsis
, $position, $source);
21760 $position +
= $ellipsis->width();
21761 $right_paren = EditableSyntax
::from_json(
21762 $json->shape_type_right_paren
, $position, $source);
21763 $position +
= $right_paren->width();
21764 return new ShapeTypeSpecifier(
21771 public function children(): Generator
<string, EditableSyntax
, void
> {
21772 yield
$this->_keyword
;
21773 yield
$this->_left_paren
;
21774 yield
$this->_fields
;
21775 yield
$this->_ellipsis
;
21776 yield
$this->_right_paren
;
21780 final class ShapeExpression
extends EditableSyntax
{
21781 private EditableSyntax
$_keyword;
21782 private EditableSyntax
$_left_paren;
21783 private EditableSyntax
$_fields;
21784 private EditableSyntax
$_right_paren;
21785 public function __construct(
21786 EditableSyntax
$keyword,
21787 EditableSyntax
$left_paren,
21788 EditableSyntax
$fields,
21789 EditableSyntax
$right_paren) {
21790 parent
::__construct('shape_expression');
21791 $this->_keyword
= $keyword;
21792 $this->_left_paren
= $left_paren;
21793 $this->_fields
= $fields;
21794 $this->_right_paren
= $right_paren;
21796 public function keyword(): EditableSyntax
{
21797 return $this->_keyword
;
21799 public function left_paren(): EditableSyntax
{
21800 return $this->_left_paren
;
21802 public function fields(): EditableSyntax
{
21803 return $this->_fields
;
21805 public function right_paren(): EditableSyntax
{
21806 return $this->_right_paren
;
21808 public function with_keyword(EditableSyntax
$keyword): ShapeExpression
{
21809 return new ShapeExpression(
21811 $this->_left_paren
,
21813 $this->_right_paren
);
21815 public function with_left_paren(EditableSyntax
$left_paren): ShapeExpression
{
21816 return new ShapeExpression(
21820 $this->_right_paren
);
21822 public function with_fields(EditableSyntax
$fields): ShapeExpression
{
21823 return new ShapeExpression(
21825 $this->_left_paren
,
21827 $this->_right_paren
);
21829 public function with_right_paren(EditableSyntax
$right_paren): ShapeExpression
{
21830 return new ShapeExpression(
21832 $this->_left_paren
,
21837 public function rewrite(
21839 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
21840 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
21841 $new_parents = $parents ??
[];
21842 array_push($new_parents, $this);
21843 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
21844 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
21845 $fields = $this->fields()->rewrite($rewriter, $new_parents);
21846 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
21848 $keyword === $this->keyword() &&
21849 $left_paren === $this->left_paren() &&
21850 $fields === $this->fields() &&
21851 $right_paren === $this->right_paren()) {
21852 return $rewriter($this, $parents ??
[]);
21854 return $rewriter(new ShapeExpression(
21858 $right_paren), $parents ??
[]);
21862 public static function from_json(mixed $json, int $position, string $source) {
21863 $keyword = EditableSyntax
::from_json(
21864 $json->shape_expression_keyword
, $position, $source);
21865 $position +
= $keyword->width();
21866 $left_paren = EditableSyntax
::from_json(
21867 $json->shape_expression_left_paren
, $position, $source);
21868 $position +
= $left_paren->width();
21869 $fields = EditableSyntax
::from_json(
21870 $json->shape_expression_fields
, $position, $source);
21871 $position +
= $fields->width();
21872 $right_paren = EditableSyntax
::from_json(
21873 $json->shape_expression_right_paren
, $position, $source);
21874 $position +
= $right_paren->width();
21875 return new ShapeExpression(
21881 public function children(): Generator
<string, EditableSyntax
, void
> {
21882 yield
$this->_keyword
;
21883 yield
$this->_left_paren
;
21884 yield
$this->_fields
;
21885 yield
$this->_right_paren
;
21889 final class TupleExpression
extends EditableSyntax
{
21890 private EditableSyntax
$_keyword;
21891 private EditableSyntax
$_left_paren;
21892 private EditableSyntax
$_items;
21893 private EditableSyntax
$_right_paren;
21894 public function __construct(
21895 EditableSyntax
$keyword,
21896 EditableSyntax
$left_paren,
21897 EditableSyntax
$items,
21898 EditableSyntax
$right_paren) {
21899 parent
::__construct('tuple_expression');
21900 $this->_keyword
= $keyword;
21901 $this->_left_paren
= $left_paren;
21902 $this->_items
= $items;
21903 $this->_right_paren
= $right_paren;
21905 public function keyword(): EditableSyntax
{
21906 return $this->_keyword
;
21908 public function left_paren(): EditableSyntax
{
21909 return $this->_left_paren
;
21911 public function items(): EditableSyntax
{
21912 return $this->_items
;
21914 public function right_paren(): EditableSyntax
{
21915 return $this->_right_paren
;
21917 public function with_keyword(EditableSyntax
$keyword): TupleExpression
{
21918 return new TupleExpression(
21920 $this->_left_paren
,
21922 $this->_right_paren
);
21924 public function with_left_paren(EditableSyntax
$left_paren): TupleExpression
{
21925 return new TupleExpression(
21929 $this->_right_paren
);
21931 public function with_items(EditableSyntax
$items): TupleExpression
{
21932 return new TupleExpression(
21934 $this->_left_paren
,
21936 $this->_right_paren
);
21938 public function with_right_paren(EditableSyntax
$right_paren): TupleExpression
{
21939 return new TupleExpression(
21941 $this->_left_paren
,
21946 public function rewrite(
21948 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
21949 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
21950 $new_parents = $parents ??
[];
21951 array_push($new_parents, $this);
21952 $keyword = $this->keyword()->rewrite($rewriter, $new_parents);
21953 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
21954 $items = $this->items()->rewrite($rewriter, $new_parents);
21955 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
21957 $keyword === $this->keyword() &&
21958 $left_paren === $this->left_paren() &&
21959 $items === $this->items() &&
21960 $right_paren === $this->right_paren()) {
21961 return $rewriter($this, $parents ??
[]);
21963 return $rewriter(new TupleExpression(
21967 $right_paren), $parents ??
[]);
21971 public static function from_json(mixed $json, int $position, string $source) {
21972 $keyword = EditableSyntax
::from_json(
21973 $json->tuple_expression_keyword
, $position, $source);
21974 $position +
= $keyword->width();
21975 $left_paren = EditableSyntax
::from_json(
21976 $json->tuple_expression_left_paren
, $position, $source);
21977 $position +
= $left_paren->width();
21978 $items = EditableSyntax
::from_json(
21979 $json->tuple_expression_items
, $position, $source);
21980 $position +
= $items->width();
21981 $right_paren = EditableSyntax
::from_json(
21982 $json->tuple_expression_right_paren
, $position, $source);
21983 $position +
= $right_paren->width();
21984 return new TupleExpression(
21990 public function children(): Generator
<string, EditableSyntax
, void
> {
21991 yield
$this->_keyword
;
21992 yield
$this->_left_paren
;
21993 yield
$this->_items
;
21994 yield
$this->_right_paren
;
21998 final class GenericTypeSpecifier
extends EditableSyntax
{
21999 private EditableSyntax
$_class_type;
22000 private EditableSyntax
$_argument_list;
22001 public function __construct(
22002 EditableSyntax
$class_type,
22003 EditableSyntax
$argument_list) {
22004 parent
::__construct('generic_type_specifier');
22005 $this->_class_type
= $class_type;
22006 $this->_argument_list
= $argument_list;
22008 public function class_type(): EditableSyntax
{
22009 return $this->_class_type
;
22011 public function argument_list(): EditableSyntax
{
22012 return $this->_argument_list
;
22014 public function with_class_type(EditableSyntax
$class_type): GenericTypeSpecifier
{
22015 return new GenericTypeSpecifier(
22017 $this->_argument_list
);
22019 public function with_argument_list(EditableSyntax
$argument_list): GenericTypeSpecifier
{
22020 return new GenericTypeSpecifier(
22021 $this->_class_type
,
22025 public function rewrite(
22027 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
22028 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
22029 $new_parents = $parents ??
[];
22030 array_push($new_parents, $this);
22031 $class_type = $this->class_type()->rewrite($rewriter, $new_parents);
22032 $argument_list = $this->argument_list()->rewrite($rewriter, $new_parents);
22034 $class_type === $this->class_type() &&
22035 $argument_list === $this->argument_list()) {
22036 return $rewriter($this, $parents ??
[]);
22038 return $rewriter(new GenericTypeSpecifier(
22040 $argument_list), $parents ??
[]);
22044 public static function from_json(mixed $json, int $position, string $source) {
22045 $class_type = EditableSyntax
::from_json(
22046 $json->generic_class_type
, $position, $source);
22047 $position +
= $class_type->width();
22048 $argument_list = EditableSyntax
::from_json(
22049 $json->generic_argument_list
, $position, $source);
22050 $position +
= $argument_list->width();
22051 return new GenericTypeSpecifier(
22055 public function children(): Generator
<string, EditableSyntax
, void
> {
22056 yield
$this->_class_type
;
22057 yield
$this->_argument_list
;
22061 final class NullableTypeSpecifier
extends EditableSyntax
{
22062 private EditableSyntax
$_question;
22063 private EditableSyntax
$_type;
22064 public function __construct(
22065 EditableSyntax
$question,
22066 EditableSyntax
$type) {
22067 parent
::__construct('nullable_type_specifier');
22068 $this->_question
= $question;
22069 $this->_type
= $type;
22071 public function question(): EditableSyntax
{
22072 return $this->_question
;
22074 public function type(): EditableSyntax
{
22075 return $this->_type
;
22077 public function with_question(EditableSyntax
$question): NullableTypeSpecifier
{
22078 return new NullableTypeSpecifier(
22082 public function with_type(EditableSyntax
$type): NullableTypeSpecifier
{
22083 return new NullableTypeSpecifier(
22088 public function rewrite(
22090 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
22091 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
22092 $new_parents = $parents ??
[];
22093 array_push($new_parents, $this);
22094 $question = $this->question()->rewrite($rewriter, $new_parents);
22095 $type = $this->type()->rewrite($rewriter, $new_parents);
22097 $question === $this->question() &&
22098 $type === $this->type()) {
22099 return $rewriter($this, $parents ??
[]);
22101 return $rewriter(new NullableTypeSpecifier(
22103 $type), $parents ??
[]);
22107 public static function from_json(mixed $json, int $position, string $source) {
22108 $question = EditableSyntax
::from_json(
22109 $json->nullable_question
, $position, $source);
22110 $position +
= $question->width();
22111 $type = EditableSyntax
::from_json(
22112 $json->nullable_type
, $position, $source);
22113 $position +
= $type->width();
22114 return new NullableTypeSpecifier(
22118 public function children(): Generator
<string, EditableSyntax
, void
> {
22119 yield
$this->_question
;
22120 yield
$this->_type
;
22124 final class SoftTypeSpecifier
extends EditableSyntax
{
22125 private EditableSyntax
$_at;
22126 private EditableSyntax
$_type;
22127 public function __construct(
22128 EditableSyntax
$at,
22129 EditableSyntax
$type) {
22130 parent
::__construct('soft_type_specifier');
22132 $this->_type
= $type;
22134 public function at(): EditableSyntax
{
22137 public function type(): EditableSyntax
{
22138 return $this->_type
;
22140 public function with_at(EditableSyntax
$at): SoftTypeSpecifier
{
22141 return new SoftTypeSpecifier(
22145 public function with_type(EditableSyntax
$type): SoftTypeSpecifier
{
22146 return new SoftTypeSpecifier(
22151 public function rewrite(
22153 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
22154 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
22155 $new_parents = $parents ??
[];
22156 array_push($new_parents, $this);
22157 $at = $this->at()->rewrite($rewriter, $new_parents);
22158 $type = $this->type()->rewrite($rewriter, $new_parents);
22160 $at === $this->at() &&
22161 $type === $this->type()) {
22162 return $rewriter($this, $parents ??
[]);
22164 return $rewriter(new SoftTypeSpecifier(
22166 $type), $parents ??
[]);
22170 public static function from_json(mixed $json, int $position, string $source) {
22171 $at = EditableSyntax
::from_json(
22172 $json->soft_at
, $position, $source);
22173 $position +
= $at->width();
22174 $type = EditableSyntax
::from_json(
22175 $json->soft_type
, $position, $source);
22176 $position +
= $type->width();
22177 return new SoftTypeSpecifier(
22181 public function children(): Generator
<string, EditableSyntax
, void
> {
22183 yield
$this->_type
;
22187 final class TypeArguments
extends EditableSyntax
{
22188 private EditableSyntax
$_left_angle;
22189 private EditableSyntax
$_types;
22190 private EditableSyntax
$_right_angle;
22191 public function __construct(
22192 EditableSyntax
$left_angle,
22193 EditableSyntax
$types,
22194 EditableSyntax
$right_angle) {
22195 parent
::__construct('type_arguments');
22196 $this->_left_angle
= $left_angle;
22197 $this->_types
= $types;
22198 $this->_right_angle
= $right_angle;
22200 public function left_angle(): EditableSyntax
{
22201 return $this->_left_angle
;
22203 public function types(): EditableSyntax
{
22204 return $this->_types
;
22206 public function right_angle(): EditableSyntax
{
22207 return $this->_right_angle
;
22209 public function with_left_angle(EditableSyntax
$left_angle): TypeArguments
{
22210 return new TypeArguments(
22213 $this->_right_angle
);
22215 public function with_types(EditableSyntax
$types): TypeArguments
{
22216 return new TypeArguments(
22217 $this->_left_angle
,
22219 $this->_right_angle
);
22221 public function with_right_angle(EditableSyntax
$right_angle): TypeArguments
{
22222 return new TypeArguments(
22223 $this->_left_angle
,
22228 public function rewrite(
22230 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
22231 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
22232 $new_parents = $parents ??
[];
22233 array_push($new_parents, $this);
22234 $left_angle = $this->left_angle()->rewrite($rewriter, $new_parents);
22235 $types = $this->types()->rewrite($rewriter, $new_parents);
22236 $right_angle = $this->right_angle()->rewrite($rewriter, $new_parents);
22238 $left_angle === $this->left_angle() &&
22239 $types === $this->types() &&
22240 $right_angle === $this->right_angle()) {
22241 return $rewriter($this, $parents ??
[]);
22243 return $rewriter(new TypeArguments(
22246 $right_angle), $parents ??
[]);
22250 public static function from_json(mixed $json, int $position, string $source) {
22251 $left_angle = EditableSyntax
::from_json(
22252 $json->type_arguments_left_angle
, $position, $source);
22253 $position +
= $left_angle->width();
22254 $types = EditableSyntax
::from_json(
22255 $json->type_arguments_types
, $position, $source);
22256 $position +
= $types->width();
22257 $right_angle = EditableSyntax
::from_json(
22258 $json->type_arguments_right_angle
, $position, $source);
22259 $position +
= $right_angle->width();
22260 return new TypeArguments(
22265 public function children(): Generator
<string, EditableSyntax
, void
> {
22266 yield
$this->_left_angle
;
22267 yield
$this->_types
;
22268 yield
$this->_right_angle
;
22272 final class TypeParameters
extends EditableSyntax
{
22273 private EditableSyntax
$_left_angle;
22274 private EditableSyntax
$_parameters;
22275 private EditableSyntax
$_right_angle;
22276 public function __construct(
22277 EditableSyntax
$left_angle,
22278 EditableSyntax
$parameters,
22279 EditableSyntax
$right_angle) {
22280 parent
::__construct('type_parameters');
22281 $this->_left_angle
= $left_angle;
22282 $this->_parameters
= $parameters;
22283 $this->_right_angle
= $right_angle;
22285 public function left_angle(): EditableSyntax
{
22286 return $this->_left_angle
;
22288 public function parameters(): EditableSyntax
{
22289 return $this->_parameters
;
22291 public function right_angle(): EditableSyntax
{
22292 return $this->_right_angle
;
22294 public function with_left_angle(EditableSyntax
$left_angle): TypeParameters
{
22295 return new TypeParameters(
22297 $this->_parameters
,
22298 $this->_right_angle
);
22300 public function with_parameters(EditableSyntax
$parameters): TypeParameters
{
22301 return new TypeParameters(
22302 $this->_left_angle
,
22304 $this->_right_angle
);
22306 public function with_right_angle(EditableSyntax
$right_angle): TypeParameters
{
22307 return new TypeParameters(
22308 $this->_left_angle
,
22309 $this->_parameters
,
22313 public function rewrite(
22315 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
22316 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
22317 $new_parents = $parents ??
[];
22318 array_push($new_parents, $this);
22319 $left_angle = $this->left_angle()->rewrite($rewriter, $new_parents);
22320 $parameters = $this->parameters()->rewrite($rewriter, $new_parents);
22321 $right_angle = $this->right_angle()->rewrite($rewriter, $new_parents);
22323 $left_angle === $this->left_angle() &&
22324 $parameters === $this->parameters() &&
22325 $right_angle === $this->right_angle()) {
22326 return $rewriter($this, $parents ??
[]);
22328 return $rewriter(new TypeParameters(
22331 $right_angle), $parents ??
[]);
22335 public static function from_json(mixed $json, int $position, string $source) {
22336 $left_angle = EditableSyntax
::from_json(
22337 $json->type_parameters_left_angle
, $position, $source);
22338 $position +
= $left_angle->width();
22339 $parameters = EditableSyntax
::from_json(
22340 $json->type_parameters_parameters
, $position, $source);
22341 $position +
= $parameters->width();
22342 $right_angle = EditableSyntax
::from_json(
22343 $json->type_parameters_right_angle
, $position, $source);
22344 $position +
= $right_angle->width();
22345 return new TypeParameters(
22350 public function children(): Generator
<string, EditableSyntax
, void
> {
22351 yield
$this->_left_angle
;
22352 yield
$this->_parameters
;
22353 yield
$this->_right_angle
;
22357 final class TupleTypeSpecifier
extends EditableSyntax
{
22358 private EditableSyntax
$_left_paren;
22359 private EditableSyntax
$_types;
22360 private EditableSyntax
$_right_paren;
22361 public function __construct(
22362 EditableSyntax
$left_paren,
22363 EditableSyntax
$types,
22364 EditableSyntax
$right_paren) {
22365 parent
::__construct('tuple_type_specifier');
22366 $this->_left_paren
= $left_paren;
22367 $this->_types
= $types;
22368 $this->_right_paren
= $right_paren;
22370 public function left_paren(): EditableSyntax
{
22371 return $this->_left_paren
;
22373 public function types(): EditableSyntax
{
22374 return $this->_types
;
22376 public function right_paren(): EditableSyntax
{
22377 return $this->_right_paren
;
22379 public function with_left_paren(EditableSyntax
$left_paren): TupleTypeSpecifier
{
22380 return new TupleTypeSpecifier(
22383 $this->_right_paren
);
22385 public function with_types(EditableSyntax
$types): TupleTypeSpecifier
{
22386 return new TupleTypeSpecifier(
22387 $this->_left_paren
,
22389 $this->_right_paren
);
22391 public function with_right_paren(EditableSyntax
$right_paren): TupleTypeSpecifier
{
22392 return new TupleTypeSpecifier(
22393 $this->_left_paren
,
22398 public function rewrite(
22400 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
22401 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
22402 $new_parents = $parents ??
[];
22403 array_push($new_parents, $this);
22404 $left_paren = $this->left_paren()->rewrite($rewriter, $new_parents);
22405 $types = $this->types()->rewrite($rewriter, $new_parents);
22406 $right_paren = $this->right_paren()->rewrite($rewriter, $new_parents);
22408 $left_paren === $this->left_paren() &&
22409 $types === $this->types() &&
22410 $right_paren === $this->right_paren()) {
22411 return $rewriter($this, $parents ??
[]);
22413 return $rewriter(new TupleTypeSpecifier(
22416 $right_paren), $parents ??
[]);
22420 public static function from_json(mixed $json, int $position, string $source) {
22421 $left_paren = EditableSyntax
::from_json(
22422 $json->tuple_left_paren
, $position, $source);
22423 $position +
= $left_paren->width();
22424 $types = EditableSyntax
::from_json(
22425 $json->tuple_types
, $position, $source);
22426 $position +
= $types->width();
22427 $right_paren = EditableSyntax
::from_json(
22428 $json->tuple_right_paren
, $position, $source);
22429 $position +
= $right_paren->width();
22430 return new TupleTypeSpecifier(
22435 public function children(): Generator
<string, EditableSyntax
, void
> {
22436 yield
$this->_left_paren
;
22437 yield
$this->_types
;
22438 yield
$this->_right_paren
;
22442 final class ErrorSyntax
extends EditableSyntax
{
22443 private EditableSyntax
$_error;
22444 public function __construct(
22445 EditableSyntax
$error) {
22446 parent
::__construct('error');
22447 $this->_error
= $error;
22449 public function error(): EditableSyntax
{
22450 return $this->_error
;
22452 public function with_error(EditableSyntax
$error): ErrorSyntax
{
22453 return new ErrorSyntax(
22457 public function rewrite(
22459 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
22460 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
22461 $new_parents = $parents ??
[];
22462 array_push($new_parents, $this);
22463 $error = $this->error()->rewrite($rewriter, $new_parents);
22465 $error === $this->error()) {
22466 return $rewriter($this, $parents ??
[]);
22468 return $rewriter(new ErrorSyntax(
22469 $error), $parents ??
[]);
22473 public static function from_json(mixed $json, int $position, string $source) {
22474 $error = EditableSyntax
::from_json(
22475 $json->error_error
, $position, $source);
22476 $position +
= $error->width();
22477 return new ErrorSyntax(
22480 public function children(): Generator
<string, EditableSyntax
, void
> {
22481 yield
$this->_error
;
22485 final class ListItem
extends EditableSyntax
{
22486 private EditableSyntax
$_item;
22487 private EditableSyntax
$_separator;
22488 public function __construct(
22489 EditableSyntax
$item,
22490 EditableSyntax
$separator) {
22491 parent
::__construct('list_item');
22492 $this->_item
= $item;
22493 $this->_separator
= $separator;
22495 public function item(): EditableSyntax
{
22496 return $this->_item
;
22498 public function separator(): EditableSyntax
{
22499 return $this->_separator
;
22501 public function with_item(EditableSyntax
$item): ListItem
{
22502 return new ListItem(
22504 $this->_separator
);
22506 public function with_separator(EditableSyntax
$separator): ListItem
{
22507 return new ListItem(
22512 public function rewrite(
22514 (EditableSyntax
, ?
array<EditableSyntax
>): ?EditableSyntax
) $rewriter,
22515 ?
array<EditableSyntax
> $parents = null): ?EditableSyntax
{
22516 $new_parents = $parents ??
[];
22517 array_push($new_parents, $this);
22518 $item = $this->item()->rewrite($rewriter, $new_parents);
22519 $separator = $this->separator()->rewrite($rewriter, $new_parents);
22521 $item === $this->item() &&
22522 $separator === $this->separator()) {
22523 return $rewriter($this, $parents ??
[]);
22525 return $rewriter(new ListItem(
22527 $separator), $parents ??
[]);
22531 public static function from_json(mixed $json, int $position, string $source) {
22532 $item = EditableSyntax
::from_json(
22533 $json->list_item
, $position, $source);
22534 $position +
= $item->width();
22535 $separator = EditableSyntax
::from_json(
22536 $json->list_separator
, $position, $source);
22537 $position +
= $separator->width();
22538 return new ListItem(
22542 public function children(): Generator
<string, EditableSyntax
, void
> {
22543 yield
$this->_item
;
22544 yield
$this->_separator
;
22550 function from_json(mixed $json): EditableSyntax
{
22551 return EditableSyntax
::from_json($json->parse_tree
, 0, $json->program_text
);
22553 /* End full_fidelity_editable.php */