@@ -452,6 +452,16 @@ private static function _init_handle_map() : array {
452
452
'PhpParser\Node\Expr\PropertyFetch ' => function (PhpParser \Node \Expr \PropertyFetch $ n , int $ startLine ) : ?\ast \Node {
453
453
return self ::_phpparser_propertyfetch_to_ast_prop ($ n , $ startLine );
454
454
},
455
+ 'PhpParser\Node\Expr\ShellExec ' => function (PhpParser \Node \Expr \ShellExec $ n , int $ startLine ) : \ast \Node {
456
+ $ parts = $ n ->parts ;
457
+ if (\count ($ parts ) === 1 && $ parts [0 ] instanceof PhpParser \Node \Scalar \EncapsedStringPart) {
458
+ $ value = $ parts [0 ]->value ;
459
+ } else {
460
+ $ value_inner = array_map (function (PhpParser \Node $ node ) { return self ::_phpparser_node_to_ast_node ($ node ); }, $ parts );
461
+ $ value = astnode (\ast \AST_ENCAPS_LIST , 0 , $ value_inner , $ startLine );
462
+ }
463
+ return astnode (\ast \AST_SHELL_EXEC , 0 , ['expr ' => $ value ], $ startLine );
464
+ },
455
465
'PhpParser\Node\Expr\StaticCall ' => function (PhpParser \Node \Expr \StaticCall $ n , int $ startLine ) : \ast \Node {
456
466
return self ::_ast_node_static_call (
457
467
self ::_phpparser_node_to_ast_node ($ n ->class ),
@@ -492,7 +502,7 @@ private static function _init_handle_map() : array {
492
502
'PhpParser\Node\Expr\Variable ' => function (PhpParser \Node \Expr \Variable $ n , int $ startLine ) : ?\ast \Node {
493
503
return self ::_ast_node_variable ($ n ->name , $ startLine );
494
504
},
495
- 'PhpParser\Node\Expr\Yield_ ' => function (PhpParser \Node \Expr \Yield_ $ n , int $ startLine ) : ? \ast \Node {
505
+ 'PhpParser\Node\Expr\Yield_ ' => function (PhpParser \Node \Expr \Yield_ $ n , int $ startLine ) : \ast \Node {
496
506
return astnode (
497
507
\ast \AST_YIELD ,
498
508
0 ,
@@ -503,6 +513,14 @@ private static function _init_handle_map() : array {
503
513
$ startLine
504
514
);
505
515
},
516
+ 'PhpParser\Node\Expr\YieldFrom ' => function (PhpParser \Node \Expr \YieldFrom $ n , int $ startLine ) : \ast \Node {
517
+ return astnode (
518
+ \ast \AST_YIELD_FROM ,
519
+ 0 ,
520
+ ['expr ' => self ::_phpparser_node_to_ast_node ($ n ->expr )],
521
+ $ startLine
522
+ );
523
+ },
506
524
'PhpParser\Node\Name ' => function (PhpParser \Node \Name $ n , int $ startLine ) : \ast \Node {
507
525
return self ::_ast_node_name (
508
526
self ::_phpparser_name_to_string ($ n ),
@@ -838,6 +856,18 @@ private static function _init_handle_map() : array {
838
856
'alias ' => $ n ->newName ,
839
857
], $ startLine );
840
858
},
859
+ 'PhpParser\Node\Stmt\TraitUseAdaptation\Precedence ' => function (PhpParser \Node \Stmt \TraitUseAdaptation \Precedence $ n , int $ startLine ) : \ast \Node {
860
+ $ old_class = $ n ->trait !== null ? self ::_phpparser_name_to_string ($ n ->trait ) : null ;
861
+ $ flags = ($ n ->trait instanceof PhpParser \Node \Name \FullyQualified) ? \ast \flags \NAME_FQ : \ast \flags \NAME_NOT_FQ ;
862
+ // TODO: flags for visibility
863
+ return astnode (\ast \AST_TRAIT_PRECEDENCE , 0 , [
864
+ 'method ' => astnode (\ast \AST_METHOD_REFERENCE , 0 , [
865
+ 'class ' => astnode (\ast \AST_NAME , $ flags , ['name ' => $ old_class ], $ startLine ),
866
+ 'method ' => $ n ->method ,
867
+ ], $ startLine ),
868
+ 'insteadof ' => self ::_phpparser_name_list_to_ast_name_list ($ n ->insteadof , $ startLine ),
869
+ ], $ startLine );
870
+ },
841
871
'PhpParser\Node\Stmt\TryCatch ' => function (PhpParser \Node \Stmt \TryCatch $ n , int $ startLine ) : \ast \Node {
842
872
if (!is_array ($ n ->catches )) {
843
873
throw new \Error (sprintf ("Unsupported type %s \n%s " , get_class ($ n ), var_export ($ n ->catches , true )));
0 commit comments