Refactor the parsing and processing of configuration options ... just a bit ...
[hiphop-php.git] / hphp / test / slow / unpack_args / unpack_call.php
blob1ca8df41aea93f1140d5dd1cc36d2aca1e30d310
1 <?hh
3 function regular($a, $b, $c) {
4 echo '* ', __FUNCTION__, "\n";
5 var_dump($a, $b, $c);
8 function variadic($a, ...$args) {
9 echo '* ', __FUNCTION__, "\n";
10 var_dump($a, $args);
13 class C {
14 public function __construct($a, $b, $c) {
15 echo '* ', __METHOD__, "\n";
16 var_dump($a, $b, $c);
19 public static function __callStatic($name, $args) {
20 echo '* ', __METHOD__, ' for ', $name, "\n";
21 var_dump($args);
24 public function __call($name, $args) {
25 echo '* ', __METHOD__, ' for ', $name, "\n";
26 var_dump($args);
29 public static function stRegular($a, $b, $c) {
30 echo '* ', __METHOD__, "\n";
31 var_dump($a, $b, $c);
34 public function regular($a, $b, $c) {
35 echo '* ', __METHOD__, "\n";
36 var_dump($a, $b, $c);
39 public static function stVariadic($a, ...$args) {
40 echo '* ', __METHOD__, "\n";
41 var_dump($a, $args);
44 public function variadic($a, ...$args) {
45 echo '* ', __METHOD__, "\n";
46 var_dump($a, $args);
50 function test_call_array_equivalent($args) {
51 echo "= ", __FUNCTION__, " =", "\n";
52 var_dump($args);
53 echo "\n";
55 regular(...$args);
56 variadic(...$args);
57 C::stRegular(...$args);
58 C::stVariadic(...$args);
59 C::stMagic(...$args);
60 $inst = new C(...$args);
61 $inst->regular(...$args);
62 $inst->variadic(...$args);
63 $inst->magic(...$args);
64 echo "\n";
67 /* TODO(t4599363): support multiple unpacks
68 function test_call_array_equivalent_multi($args) {
69 echo "= ", __FUNCTION__, " =", "\n";
70 var_dump($args);
71 echo "\n";
73 regular(...$args, ...$args);
74 variadic(...$args, ...$args);
75 C::stRegular(...$args, ...$args);
76 C::stVariadic(...$args, ...$args);
77 $inst = new C(...$args, ...$args);
78 $inst->regular(...$args, ...$args);
79 $inst->variadic(...$args, ...$args);
80 echo "\n";
81 } */
83 function test_param_mix($args) {
84 echo "= ", __FUNCTION__, " =", "\n";
85 var_dump($args);
86 echo "\n";
88 $prefix = 'passed regularly';
89 regular($prefix, ...$args);
90 variadic($prefix, ...$args);
91 C::stRegular($prefix, ...$args);
92 C::stVariadic($prefix, ...$args);
93 C::stMagic($prefix, ...$args);
94 $inst = new C($prefix, ...$args);
95 $inst->regular($prefix, ...$args);
96 $inst->variadic($prefix, ...$args);
97 $inst->magic($prefix, ...$args);
98 echo "\n";
100 $prefix2 = 'also passed regularly';
101 variadic($prefix, $prefix2, ...$args);
102 regular($prefix, $prefix2, ...$args);
103 regular($prefix, $prefix2, ...$args);
104 variadic($prefix, $prefix2, ...$args);
105 C::stRegular($prefix, $prefix2, ...$args);
106 C::stVariadic($prefix, $prefix2, ...$args);
107 C::stMagic($prefix, $prefix2, ...$args);
108 $inst = new C($prefix, $prefix2, ...$args);
109 $inst->regular($prefix, $prefix2, ...$args);
110 $inst->variadic($prefix, $prefix2, ...$args);
111 $inst->magic($prefix, $prefix2, ...$args);
112 echo "\n";
115 function main() {
116 $a = array('a', 'b', 'c');
117 $v = Vector {'a', 'b', 'c'};
118 // TODO(t4599379): arbitrary traversables
119 // $t = new ArrayIterator(['a', 'b', 'c']);
121 test_call_array_equivalent($a);
122 test_call_array_equivalent($v);
123 // test_call_array_equivalent($t);
125 // TODO(t4599363): support multiple unpacks
126 // test_call_array_equivalent_twice($a);
127 // test_call_array_equivalent_twice($v);
129 test_param_mix($a);
130 test_param_mix($v);
131 // test_param_mix($t);
133 echo "Done\n";
136 main();