[PHP 7.4] Add array spread

This commit is contained in:
Tomas Votruba 2019-05-09 15:11:00 +02:00 committed by Nikita Popov
parent f3b19c19ef
commit 8012faea54
27 changed files with 1587 additions and 1020 deletions

View File

@ -988,6 +988,7 @@ array_pair:
| expr { $$ = Expr\ArrayItem[$1, null, false]; }
| expr T_DOUBLE_ARROW '&' variable { $$ = Expr\ArrayItem[$4, $1, true]; }
| '&' variable { $$ = Expr\ArrayItem[$2, null, true]; }
| T_ELLIPSIS expr { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; }
;
encaps_list:

View File

@ -983,6 +983,7 @@ array_pair:
| expr { $$ = Expr\ArrayItem[$1, null, false]; }
| expr T_DOUBLE_ARROW '&' variable { $$ = Expr\ArrayItem[$4, $1, true]; }
| '&' variable { $$ = Expr\ArrayItem[$2, null, true]; }
| T_ELLIPSIS expr { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; }
| /* empty */ { $$ = null; }
;

View File

@ -12,6 +12,8 @@ class ArrayItem extends Expr
public $value;
/** @var bool Whether to assign by reference */
public $byRef;
/** @var bool Whether to unpack the argument */
public $unpack;
/**
* Constructs an array item node.
@ -21,17 +23,18 @@ class ArrayItem extends Expr
* @param bool $byRef Whether to assign by reference
* @param array $attributes Additional attributes
*/
public function __construct(Expr $value, Expr $key = null, bool $byRef = false, array $attributes = []) {
public function __construct(Expr $value, Expr $key = null, bool $byRef = false, array $attributes = [], bool $unpack = false) {
parent::__construct($attributes);
$this->key = $key;
$this->value = $value;
$this->byRef = $byRef;
$this->unpack = $unpack;
}
public function getSubNodeNames() : array {
return ['key', 'value', 'byRef'];
return ['key', 'value', 'byRef', 'unpack'];
}
public function getType() : string {
return 'Expr_ArrayItem';
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -6,142 +6,141 @@ namespace PhpParser\Parser;
final class Tokens
{
const YYERRTOK = 256;
const T_ARROW_FUNCTION = 257;
const T_INCLUDE = 258;
const T_INCLUDE_ONCE = 259;
const T_EVAL = 260;
const T_REQUIRE = 261;
const T_REQUIRE_ONCE = 262;
const T_LOGICAL_OR = 263;
const T_LOGICAL_XOR = 264;
const T_LOGICAL_AND = 265;
const T_PRINT = 266;
const T_YIELD = 267;
const T_DOUBLE_ARROW = 268;
const T_YIELD_FROM = 269;
const T_PLUS_EQUAL = 270;
const T_MINUS_EQUAL = 271;
const T_MUL_EQUAL = 272;
const T_DIV_EQUAL = 273;
const T_CONCAT_EQUAL = 274;
const T_MOD_EQUAL = 275;
const T_AND_EQUAL = 276;
const T_OR_EQUAL = 277;
const T_XOR_EQUAL = 278;
const T_SL_EQUAL = 279;
const T_SR_EQUAL = 280;
const T_POW_EQUAL = 281;
const T_COALESCE_EQUAL = 282;
const T_COALESCE = 283;
const T_BOOLEAN_OR = 284;
const T_BOOLEAN_AND = 285;
const T_IS_EQUAL = 286;
const T_IS_NOT_EQUAL = 287;
const T_IS_IDENTICAL = 288;
const T_IS_NOT_IDENTICAL = 289;
const T_SPACESHIP = 290;
const T_IS_SMALLER_OR_EQUAL = 291;
const T_IS_GREATER_OR_EQUAL = 292;
const T_SL = 293;
const T_SR = 294;
const T_INSTANCEOF = 295;
const T_INC = 296;
const T_DEC = 297;
const T_INT_CAST = 298;
const T_DOUBLE_CAST = 299;
const T_STRING_CAST = 300;
const T_ARRAY_CAST = 301;
const T_OBJECT_CAST = 302;
const T_BOOL_CAST = 303;
const T_UNSET_CAST = 304;
const T_POW = 305;
const T_NEW = 306;
const T_CLONE = 307;
const T_EXIT = 308;
const T_IF = 309;
const T_ELSEIF = 310;
const T_ELSE = 311;
const T_ENDIF = 312;
const T_LNUMBER = 313;
const T_DNUMBER = 314;
const T_STRING = 315;
const T_STRING_VARNAME = 316;
const T_VARIABLE = 317;
const T_NUM_STRING = 318;
const T_INLINE_HTML = 319;
const T_CHARACTER = 320;
const T_BAD_CHARACTER = 321;
const T_ENCAPSED_AND_WHITESPACE = 322;
const T_CONSTANT_ENCAPSED_STRING = 323;
const T_ECHO = 324;
const T_DO = 325;
const T_WHILE = 326;
const T_ENDWHILE = 327;
const T_FOR = 328;
const T_ENDFOR = 329;
const T_FOREACH = 330;
const T_ENDFOREACH = 331;
const T_DECLARE = 332;
const T_ENDDECLARE = 333;
const T_AS = 334;
const T_SWITCH = 335;
const T_ENDSWITCH = 336;
const T_CASE = 337;
const T_DEFAULT = 338;
const T_BREAK = 339;
const T_CONTINUE = 340;
const T_GOTO = 341;
const T_FUNCTION = 342;
const T_FN = 343;
const T_CONST = 344;
const T_RETURN = 345;
const T_TRY = 346;
const T_CATCH = 347;
const T_FINALLY = 348;
const T_THROW = 349;
const T_USE = 350;
const T_INSTEADOF = 351;
const T_GLOBAL = 352;
const T_STATIC = 353;
const T_ABSTRACT = 354;
const T_FINAL = 355;
const T_PRIVATE = 356;
const T_PROTECTED = 357;
const T_PUBLIC = 358;
const T_VAR = 359;
const T_UNSET = 360;
const T_ISSET = 361;
const T_EMPTY = 362;
const T_HALT_COMPILER = 363;
const T_CLASS = 364;
const T_TRAIT = 365;
const T_INTERFACE = 366;
const T_EXTENDS = 367;
const T_IMPLEMENTS = 368;
const T_OBJECT_OPERATOR = 369;
const T_LIST = 370;
const T_ARRAY = 371;
const T_CALLABLE = 372;
const T_CLASS_C = 373;
const T_TRAIT_C = 374;
const T_METHOD_C = 375;
const T_FUNC_C = 376;
const T_LINE = 377;
const T_FILE = 378;
const T_COMMENT = 379;
const T_DOC_COMMENT = 380;
const T_OPEN_TAG = 381;
const T_OPEN_TAG_WITH_ECHO = 382;
const T_CLOSE_TAG = 383;
const T_WHITESPACE = 384;
const T_START_HEREDOC = 385;
const T_END_HEREDOC = 386;
const T_DOLLAR_OPEN_CURLY_BRACES = 387;
const T_CURLY_OPEN = 388;
const T_PAAMAYIM_NEKUDOTAYIM = 389;
const T_NAMESPACE = 390;
const T_NS_C = 391;
const T_DIR = 392;
const T_NS_SEPARATOR = 393;
const T_ELLIPSIS = 394;
const T_INCLUDE = 257;
const T_INCLUDE_ONCE = 258;
const T_EVAL = 259;
const T_REQUIRE = 260;
const T_REQUIRE_ONCE = 261;
const T_LOGICAL_OR = 262;
const T_LOGICAL_XOR = 263;
const T_LOGICAL_AND = 264;
const T_PRINT = 265;
const T_YIELD = 266;
const T_DOUBLE_ARROW = 267;
const T_YIELD_FROM = 268;
const T_PLUS_EQUAL = 269;
const T_MINUS_EQUAL = 270;
const T_MUL_EQUAL = 271;
const T_DIV_EQUAL = 272;
const T_CONCAT_EQUAL = 273;
const T_MOD_EQUAL = 274;
const T_AND_EQUAL = 275;
const T_OR_EQUAL = 276;
const T_XOR_EQUAL = 277;
const T_SL_EQUAL = 278;
const T_SR_EQUAL = 279;
const T_POW_EQUAL = 280;
const T_COALESCE_EQUAL = 281;
const T_COALESCE = 282;
const T_BOOLEAN_OR = 283;
const T_BOOLEAN_AND = 284;
const T_IS_EQUAL = 285;
const T_IS_NOT_EQUAL = 286;
const T_IS_IDENTICAL = 287;
const T_IS_NOT_IDENTICAL = 288;
const T_SPACESHIP = 289;
const T_IS_SMALLER_OR_EQUAL = 290;
const T_IS_GREATER_OR_EQUAL = 291;
const T_SL = 292;
const T_SR = 293;
const T_INSTANCEOF = 294;
const T_INC = 295;
const T_DEC = 296;
const T_INT_CAST = 297;
const T_DOUBLE_CAST = 298;
const T_STRING_CAST = 299;
const T_ARRAY_CAST = 300;
const T_OBJECT_CAST = 301;
const T_BOOL_CAST = 302;
const T_UNSET_CAST = 303;
const T_POW = 304;
const T_NEW = 305;
const T_CLONE = 306;
const T_EXIT = 307;
const T_IF = 308;
const T_ELSEIF = 309;
const T_ELSE = 310;
const T_ENDIF = 311;
const T_LNUMBER = 312;
const T_DNUMBER = 313;
const T_STRING = 314;
const T_STRING_VARNAME = 315;
const T_VARIABLE = 316;
const T_NUM_STRING = 317;
const T_INLINE_HTML = 318;
const T_CHARACTER = 319;
const T_BAD_CHARACTER = 320;
const T_ENCAPSED_AND_WHITESPACE = 321;
const T_CONSTANT_ENCAPSED_STRING = 322;
const T_ECHO = 323;
const T_DO = 324;
const T_WHILE = 325;
const T_ENDWHILE = 326;
const T_FOR = 327;
const T_ENDFOR = 328;
const T_FOREACH = 329;
const T_ENDFOREACH = 330;
const T_DECLARE = 331;
const T_ENDDECLARE = 332;
const T_AS = 333;
const T_SWITCH = 334;
const T_ENDSWITCH = 335;
const T_CASE = 336;
const T_DEFAULT = 337;
const T_BREAK = 338;
const T_CONTINUE = 339;
const T_GOTO = 340;
const T_FUNCTION = 341;
const T_FN = 342;
const T_CONST = 343;
const T_RETURN = 344;
const T_TRY = 345;
const T_CATCH = 346;
const T_FINALLY = 347;
const T_THROW = 348;
const T_USE = 349;
const T_INSTEADOF = 350;
const T_GLOBAL = 351;
const T_STATIC = 352;
const T_ABSTRACT = 353;
const T_FINAL = 354;
const T_PRIVATE = 355;
const T_PROTECTED = 356;
const T_PUBLIC = 357;
const T_VAR = 358;
const T_UNSET = 359;
const T_ISSET = 360;
const T_EMPTY = 361;
const T_HALT_COMPILER = 362;
const T_CLASS = 363;
const T_TRAIT = 364;
const T_INTERFACE = 365;
const T_EXTENDS = 366;
const T_IMPLEMENTS = 367;
const T_OBJECT_OPERATOR = 368;
const T_LIST = 369;
const T_ARRAY = 370;
const T_CALLABLE = 371;
const T_CLASS_C = 372;
const T_TRAIT_C = 373;
const T_METHOD_C = 374;
const T_FUNC_C = 375;
const T_LINE = 376;
const T_FILE = 377;
const T_COMMENT = 378;
const T_DOC_COMMENT = 379;
const T_OPEN_TAG = 380;
const T_OPEN_TAG_WITH_ECHO = 381;
const T_CLOSE_TAG = 382;
const T_WHITESPACE = 383;
const T_START_HEREDOC = 384;
const T_END_HEREDOC = 385;
const T_DOLLAR_OPEN_CURLY_BRACES = 386;
const T_CURLY_OPEN = 387;
const T_PAAMAYIM_NEKUDOTAYIM = 388;
const T_NAMESPACE = 389;
const T_NS_C = 390;
const T_DIR = 391;
const T_NS_SEPARATOR = 392;
const T_ELLIPSIS = 393;
}

View File

@ -545,7 +545,9 @@ class Standard extends PrettyPrinterAbstract
protected function pExpr_ArrayItem(Expr\ArrayItem $node) {
return (null !== $node->key ? $this->p($node->key) . ' => ' : '')
. ($node->byRef ? '&' : '') . $this->p($node->value);
. ($node->byRef ? '&' : '')
. ($node->unpack ? '...' : '')
. $this->p($node->value);
}
protected function pExpr_ArrayDimFetch(Expr\ArrayDimFetch $node) {

View File

@ -53,6 +53,7 @@ class NodeDumperTest extends \PHPUnit\Framework\TestCase
value: Foo
)
byRef: false
unpack: false
)
)
)'

View File

@ -0,0 +1,29 @@
Array spread
-----
<?php
$items = [
...$value
];
-----
$array = $stmts[0]->expr->expr;
$array->items[] = new Expr\ArrayItem(new Expr\Variable('b'));
-----
<?php
$items = [
...$value, $b
];
-----
<?php
$items =
[
... $value
];
-----
$array = $stmts[0]->expr->expr;
$array->items[] = new Expr\ArrayItem(new Expr\Variable('c'), null, false, [], true);
-----
<?php
$items =
[
... $value, ...$c
];

View File

@ -1304,6 +1304,7 @@ array(
)
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -1318,6 +1319,7 @@ array(
)
)
byRef: false
unpack: false
)
)
)
@ -1336,6 +1338,7 @@ array(
name: value
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -1343,6 +1346,7 @@ array(
name: oopsAnotherValue
)
byRef: false
unpack: false
)
)
)
@ -1363,6 +1367,7 @@ array(
name: value
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -1370,6 +1375,7 @@ array(
name: oopsAnotherValue
)
byRef: false
unpack: false
)
)
)

View File

@ -29,6 +29,7 @@ array(
value: a
)
byRef: false
unpack: false
)
)
)
@ -42,6 +43,7 @@ array(
value: a
)
byRef: false
unpack: false
)
)
)
@ -55,6 +57,7 @@ array(
value: a
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -62,6 +65,7 @@ array(
value: b
)
byRef: false
unpack: false
)
)
)
@ -75,6 +79,7 @@ array(
value: a
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -82,6 +87,7 @@ array(
name: b
)
byRef: true
unpack: false
)
2: Expr_ArrayItem(
key: Scalar_String(
@ -91,6 +97,7 @@ array(
value: d
)
byRef: false
unpack: false
)
3: Expr_ArrayItem(
key: Scalar_String(
@ -100,6 +107,7 @@ array(
name: f
)
byRef: true
unpack: false
)
)
)
@ -125,6 +133,7 @@ array(
value: 1
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -132,6 +141,7 @@ array(
value: 2
)
byRef: false
unpack: false
)
2: Expr_ArrayItem(
key: null
@ -139,6 +149,7 @@ array(
value: 3
)
byRef: false
unpack: false
)
)
)
@ -154,6 +165,7 @@ array(
value: b
)
byRef: false
unpack: false
)
)
)

View File

@ -19,6 +19,7 @@ array(
name: a
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -26,6 +27,7 @@ array(
name: b
)
byRef: false
unpack: false
)
)
)
@ -37,6 +39,7 @@ array(
name: c
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -44,6 +47,7 @@ array(
name: d
)
byRef: false
unpack: false
)
)
)
@ -60,6 +64,7 @@ array(
name: a
)
byRef: false
unpack: false
)
2: null
3: null
@ -69,6 +74,7 @@ array(
name: b
)
byRef: false
unpack: false
)
5: null
)
@ -97,14 +103,17 @@ array(
name: a
)
byRef: false
unpack: false
)
)
)
byRef: false
unpack: false
)
)
)
byRef: false
unpack: false
)
2: Expr_ArrayItem(
key: null
@ -112,6 +121,7 @@ array(
name: b
)
byRef: false
unpack: false
)
)
)
@ -132,6 +142,7 @@ array(
name: b
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: Scalar_String(
@ -141,6 +152,7 @@ array(
name: a
)
byRef: false
unpack: false
)
)
)

View File

@ -0,0 +1,432 @@
Spread array
-----
<?php
$array = [1, 2, 3];
function getArr() {
return [4, 5];
}
function arrGen() {
for($i = 11; $i < 15; $i++) {
yield $i;
}
}
[...[]];
[...[1, 2, 3]];
[...$array];
[...getArr()];
[...arrGen()];
[...new ArrayIterator(['a', 'b', 'c'])];
[0, ...$array, ...getArr(), 6, 7, 8, 9, 10, ...arrGen()];
[0, ...$array, ...$array, 'end'];
-----
array(
0: Stmt_Expression(
expr: Expr_Assign(
var: Expr_Variable(
name: array
)
expr: Expr_Array(
items: array(
0: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 1
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 2
)
byRef: false
unpack: false
)
2: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 3
)
byRef: false
unpack: false
)
)
)
)
)
1: Stmt_Function(
byRef: false
name: Identifier(
name: getArr
)
params: array(
)
returnType: null
stmts: array(
0: Stmt_Return(
expr: Expr_Array(
items: array(
0: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 4
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 5
)
byRef: false
unpack: false
)
)
)
)
)
)
2: Stmt_Function(
byRef: false
name: Identifier(
name: arrGen
)
params: array(
)
returnType: null
stmts: array(
0: Stmt_For(
init: array(
0: Expr_Assign(
var: Expr_Variable(
name: i
)
expr: Scalar_LNumber(
value: 11
)
)
)
cond: array(
0: Expr_BinaryOp_Smaller(
left: Expr_Variable(
name: i
)
right: Scalar_LNumber(
value: 15
)
)
)
loop: array(
0: Expr_PostInc(
var: Expr_Variable(
name: i
)
)
)
stmts: array(
0: Stmt_Expression(
expr: Expr_Yield(
key: null
value: Expr_Variable(
name: i
)
)
)
)
)
)
)
3: Stmt_Expression(
expr: Expr_Array(
items: array(
0: Expr_ArrayItem(
key: null
value: Expr_Array(
items: array(
)
)
byRef: false
unpack: true
)
)
)
)
4: Stmt_Expression(
expr: Expr_Array(
items: array(
0: Expr_ArrayItem(
key: null
value: Expr_Array(
items: array(
0: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 1
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 2
)
byRef: false
unpack: false
)
2: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 3
)
byRef: false
unpack: false
)
)
)
byRef: false
unpack: true
)
)
)
)
5: Stmt_Expression(
expr: Expr_Array(
items: array(
0: Expr_ArrayItem(
key: null
value: Expr_Variable(
name: array
)
byRef: false
unpack: true
)
)
)
)
6: Stmt_Expression(
expr: Expr_Array(
items: array(
0: Expr_ArrayItem(
key: null
value: Expr_FuncCall(
name: Name(
parts: array(
0: getArr
)
)
args: array(
)
)
byRef: false
unpack: true
)
)
)
)
7: Stmt_Expression(
expr: Expr_Array(
items: array(
0: Expr_ArrayItem(
key: null
value: Expr_FuncCall(
name: Name(
parts: array(
0: arrGen
)
)
args: array(
)
)
byRef: false
unpack: true
)
)
)
)
8: Stmt_Expression(
expr: Expr_Array(
items: array(
0: Expr_ArrayItem(
key: null
value: Expr_New(
class: Name(
parts: array(
0: ArrayIterator
)
)
args: array(
0: Arg(
value: Expr_Array(
items: array(
0: Expr_ArrayItem(
key: null
value: Scalar_String(
value: a
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
value: Scalar_String(
value: b
)
byRef: false
unpack: false
)
2: Expr_ArrayItem(
key: null
value: Scalar_String(
value: c
)
byRef: false
unpack: false
)
)
)
byRef: false
unpack: false
)
)
)
byRef: false
unpack: true
)
)
)
)
9: Stmt_Expression(
expr: Expr_Array(
items: array(
0: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 0
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
value: Expr_Variable(
name: array
)
byRef: false
unpack: true
)
2: Expr_ArrayItem(
key: null
value: Expr_FuncCall(
name: Name(
parts: array(
0: getArr
)
)
args: array(
)
)
byRef: false
unpack: true
)
3: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 6
)
byRef: false
unpack: false
)
4: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 7
)
byRef: false
unpack: false
)
5: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 8
)
byRef: false
unpack: false
)
6: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 9
)
byRef: false
unpack: false
)
7: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 10
)
byRef: false
unpack: false
)
8: Expr_ArrayItem(
key: null
value: Expr_FuncCall(
name: Name(
parts: array(
0: arrGen
)
)
args: array(
)
)
byRef: false
unpack: true
)
)
)
)
10: Stmt_Expression(
expr: Expr_Array(
items: array(
0: Expr_ArrayItem(
key: null
value: Scalar_LNumber(
value: 0
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
value: Expr_Variable(
name: array
)
byRef: false
unpack: true
)
2: Expr_ArrayItem(
key: null
value: Expr_Variable(
name: array
)
byRef: false
unpack: true
)
3: Expr_ArrayItem(
key: null
value: Scalar_String(
value: end
)
byRef: false
unpack: false
)
)
)
)
)

View File

@ -253,6 +253,7 @@ array(
name: a
)
byRef: false
unpack: false
)
)
comments: array(
@ -280,6 +281,7 @@ array(
name: a
)
byRef: false
unpack: false
)
1: null
2: Expr_ArrayItem(
@ -288,6 +290,7 @@ array(
name: b
)
byRef: false
unpack: false
)
)
)
@ -306,6 +309,7 @@ array(
name: a
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -318,10 +322,12 @@ array(
name: c
)
byRef: false
unpack: false
)
)
)
byRef: false
unpack: false
)
2: Expr_ArrayItem(
key: null
@ -329,6 +335,7 @@ array(
name: d
)
byRef: false
unpack: false
)
)
)

View File

@ -544,6 +544,7 @@ array(
value: 1
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -551,6 +552,7 @@ array(
value: 2
)
byRef: false
unpack: false
)
2: Expr_ArrayItem(
key: null
@ -558,6 +560,7 @@ array(
value: 3
)
byRef: false
unpack: false
)
)
)

View File

@ -56,6 +56,7 @@ array(
value: 1
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -63,6 +64,7 @@ array(
value: 2
)
byRef: false
unpack: false
)
2: Expr_ArrayItem(
key: null
@ -70,6 +72,7 @@ array(
value: 3
)
byRef: false
unpack: false
)
)
)
@ -90,6 +93,7 @@ array(
value: 1
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -97,6 +101,7 @@ array(
value: 2
)
byRef: false
unpack: false
)
2: Expr_ArrayItem(
key: null
@ -104,6 +109,7 @@ array(
value: 3
)
byRef: false
unpack: false
)
)
)
@ -130,6 +136,7 @@ array(
value: 1
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -137,6 +144,7 @@ array(
value: 2
)
byRef: false
unpack: false
)
2: Expr_ArrayItem(
key: null
@ -144,6 +152,7 @@ array(
value: 3
)
byRef: false
unpack: false
)
)
)
@ -164,6 +173,7 @@ array(
value: 1
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -171,6 +181,7 @@ array(
value: 2
)
byRef: false
unpack: false
)
2: Expr_ArrayItem(
key: null
@ -178,6 +189,7 @@ array(
value: 3
)
byRef: false
unpack: false
)
)
)

View File

@ -63,6 +63,7 @@ array(
value: 1
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -70,6 +71,7 @@ array(
value: 2
)
byRef: false
unpack: false
)
2: Expr_ArrayItem(
key: null
@ -77,6 +79,7 @@ array(
value: 3
)
byRef: false
unpack: false
)
)
)

View File

@ -19,6 +19,7 @@ array(
name: v
)
byRef: true
unpack: false
)
)
)
@ -39,6 +40,7 @@ array(
name: v
)
byRef: true
unpack: false
)
)
)
@ -57,6 +59,7 @@ array(
name: v
)
byRef: true
unpack: false
)
)
)
@ -77,6 +80,7 @@ array(
name: v
)
byRef: true
unpack: false
)
)
)

View File

@ -19,6 +19,7 @@ array(
name: b
)
byRef: false
unpack: false
)
)
)
@ -32,6 +33,7 @@ array(
value: b
)
byRef: false
unpack: false
)
)
)
@ -55,10 +57,12 @@ array(
name: c
)
byRef: false
unpack: false
)
)
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: Scalar_String(
@ -68,6 +72,7 @@ array(
name: e
)
byRef: false
unpack: false
)
)
)

View File

@ -144,6 +144,7 @@ array(
value: udef
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -151,6 +152,7 @@ array(
value: id
)
byRef: false
unpack: false
)
)
)
@ -345,6 +347,7 @@ array(
name: obj
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -352,6 +355,7 @@ array(
value: id
)
byRef: false
unpack: false
)
)
)

View File

@ -21,6 +21,7 @@ array(
value: 0
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -28,6 +29,7 @@ array(
value: 1
)
byRef: false
unpack: false
)
)
)
@ -57,6 +59,7 @@ array(
value: b
)
byRef: false
unpack: false
)
)
)

View File

@ -105,6 +105,7 @@ array(
value: 0
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -112,6 +113,7 @@ array(
value: 1
)
byRef: false
unpack: false
)
)
)

View File

@ -123,6 +123,7 @@ array(
value: Test
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -130,6 +131,7 @@ array(
value: Test
)
byRef: false
unpack: false
)
)
)

View File

@ -130,6 +130,7 @@ array(
value: foo
)
byRef: false
unpack: false
)
)
)
@ -149,6 +150,7 @@ array(
value: foo
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: Scalar_String(
@ -158,6 +160,7 @@ array(
value: baz
)
byRef: false
unpack: false
)
)
)

View File

@ -108,6 +108,7 @@ array(
)
)
byRef: false
unpack: false
)
)
)
@ -195,6 +196,7 @@ array(
)
)
byRef: false
unpack: false
)
)
)
@ -236,6 +238,7 @@ array(
)
)
byRef: false
unpack: false
)
)
)

View File

@ -87,6 +87,7 @@ array(
name: a
)
byRef: false
unpack: false
)
1: Expr_ArrayItem(
key: null
@ -94,6 +95,7 @@ array(
name: b
)
byRef: false
unpack: false
)
)
)
@ -116,6 +118,7 @@ array(
name: b
)
byRef: false
unpack: false
)
1: null
2: Expr_ArrayItem(
@ -124,6 +127,7 @@ array(
name: c
)
byRef: false
unpack: false
)
)
)

View File

@ -0,0 +1,8 @@
Array spread
-----
<?php
[$a, $b] = [...$c, ...$d];
-----
!!php7
[$a, $b] = [...$c, ...$d];