Support every argument syntax for clone() (#1092)

See php/php-src#18938
This commit is contained in:
Tim Düsterhus
2025-07-02 22:09:49 +02:00
committed by GitHub
parent 8ab65b4adc
commit dc47765670
4 changed files with 2823 additions and 2217 deletions

View File

@@ -3,6 +3,18 @@ Declaring clone function stub
<?php
function clone(object $object, array $withProperties = []): object {}
clone $x;
clone($x);
clone($x, );
clone($x, [ "foo" => $foo, "bar" => $bar ]);
clone($x, $array);
clone($x, $array, $extraParameter, $trailingComma, );
clone(object: $x, withProperties: [ "foo" => $foo, "bar" => $bar ]);
clone($x, withProperties: [ "foo" => $foo, "bar" => $bar ]);
clone(object: $x);
clone(object: $x, [ "foo" => $foo, "bar" => $bar ]);
clone(...["object" => $x, "withProperties" => [ "foo" => $foo, "bar" => $bar ]]);
clone(...);
-----
array(
0: Stmt_Function(
@@ -55,4 +67,382 @@ array(
stmts: array(
)
)
1: Stmt_Expression(
expr: Expr_Clone(
expr: Expr_Variable(
name: x
)
)
)
2: Stmt_Expression(
expr: Expr_Clone(
expr: Expr_Variable(
name: x
)
)
)
3: Stmt_Expression(
expr: Expr_FuncCall(
name: Name(
name: clone
)
args: array(
0: Arg(
name: null
value: Expr_Variable(
name: x
)
byRef: false
unpack: false
)
)
)
)
4: Stmt_Expression(
expr: Expr_FuncCall(
name: Name(
name: clone
)
args: array(
0: Arg(
name: null
value: Expr_Variable(
name: x
)
byRef: false
unpack: false
)
1: Arg(
name: null
value: Expr_Array(
items: array(
0: ArrayItem(
key: Scalar_String(
value: foo
)
value: Expr_Variable(
name: foo
)
byRef: false
unpack: false
)
1: ArrayItem(
key: Scalar_String(
value: bar
)
value: Expr_Variable(
name: bar
)
byRef: false
unpack: false
)
)
)
byRef: false
unpack: false
)
)
)
)
5: Stmt_Expression(
expr: Expr_FuncCall(
name: Name(
name: clone
)
args: array(
0: Arg(
name: null
value: Expr_Variable(
name: x
)
byRef: false
unpack: false
)
1: Arg(
name: null
value: Expr_Variable(
name: array
)
byRef: false
unpack: false
)
)
)
)
6: Stmt_Expression(
expr: Expr_FuncCall(
name: Name(
name: clone
)
args: array(
0: Arg(
name: null
value: Expr_Variable(
name: x
)
byRef: false
unpack: false
)
1: Arg(
name: null
value: Expr_Variable(
name: array
)
byRef: false
unpack: false
)
2: Arg(
name: null
value: Expr_Variable(
name: extraParameter
)
byRef: false
unpack: false
)
3: Arg(
name: null
value: Expr_Variable(
name: trailingComma
)
byRef: false
unpack: false
)
)
)
)
7: Stmt_Expression(
expr: Expr_FuncCall(
name: Name(
name: clone
)
args: array(
0: Arg(
name: Identifier(
name: object
)
value: Expr_Variable(
name: x
)
byRef: false
unpack: false
)
1: Arg(
name: Identifier(
name: withProperties
)
value: Expr_Array(
items: array(
0: ArrayItem(
key: Scalar_String(
value: foo
)
value: Expr_Variable(
name: foo
)
byRef: false
unpack: false
)
1: ArrayItem(
key: Scalar_String(
value: bar
)
value: Expr_Variable(
name: bar
)
byRef: false
unpack: false
)
)
)
byRef: false
unpack: false
)
)
)
)
8: Stmt_Expression(
expr: Expr_FuncCall(
name: Name(
name: clone
)
args: array(
0: Arg(
name: null
value: Expr_Variable(
name: x
)
byRef: false
unpack: false
)
1: Arg(
name: Identifier(
name: withProperties
)
value: Expr_Array(
items: array(
0: ArrayItem(
key: Scalar_String(
value: foo
)
value: Expr_Variable(
name: foo
)
byRef: false
unpack: false
)
1: ArrayItem(
key: Scalar_String(
value: bar
)
value: Expr_Variable(
name: bar
)
byRef: false
unpack: false
)
)
)
byRef: false
unpack: false
)
)
)
)
9: Stmt_Expression(
expr: Expr_FuncCall(
name: Name(
name: clone
)
args: array(
0: Arg(
name: Identifier(
name: object
)
value: Expr_Variable(
name: x
)
byRef: false
unpack: false
)
)
)
)
10: Stmt_Expression(
expr: Expr_FuncCall(
name: Name(
name: clone
)
args: array(
0: Arg(
name: Identifier(
name: object
)
value: Expr_Variable(
name: x
)
byRef: false
unpack: false
)
1: Arg(
name: null
value: Expr_Array(
items: array(
0: ArrayItem(
key: Scalar_String(
value: foo
)
value: Expr_Variable(
name: foo
)
byRef: false
unpack: false
)
1: ArrayItem(
key: Scalar_String(
value: bar
)
value: Expr_Variable(
name: bar
)
byRef: false
unpack: false
)
)
)
byRef: false
unpack: false
)
)
)
)
11: Stmt_Expression(
expr: Expr_FuncCall(
name: Name(
name: clone
)
args: array(
0: Arg(
name: null
value: Expr_Array(
items: array(
0: ArrayItem(
key: Scalar_String(
value: object
)
value: Expr_Variable(
name: x
)
byRef: false
unpack: false
)
1: ArrayItem(
key: Scalar_String(
value: withProperties
)
value: Expr_Array(
items: array(
0: ArrayItem(
key: Scalar_String(
value: foo
)
value: Expr_Variable(
name: foo
)
byRef: false
unpack: false
)
1: ArrayItem(
key: Scalar_String(
value: bar
)
value: Expr_Variable(
name: bar
)
byRef: false
unpack: false
)
)
)
byRef: false
unpack: false
)
)
)
byRef: false
unpack: true
)
)
)
)
12: Stmt_Expression(
expr: Expr_FuncCall(
name: Name(
name: clone
)
args: array(
0: VariadicPlaceholder(
)
)
)
)
)