package php5_test import ( "testing" "github.com/z7zmey/php-parser/internal/php5" "github.com/z7zmey/php-parser/internal/scanner" ) func BenchmarkPhp5(b *testing.B) { src := `bar($a, ...$b); foo::bar($a, ...$b); $foo::bar($a, ...$b); new foo($a, ...$b); function foo(bar $bar=null, baz &...$baz) {} class foo {public function foo(bar $bar=null, baz &...$baz) {}} function(bar $bar=null, baz &...$baz) {}; static function(bar $bar=null, baz &...$baz) {}; "test"; "\$test"; " test "; '$test'; ' $test '; <<bar()"; "test ${foo}"; "test ${foo[0]}"; "test {$foo->bar()}"; if ($a) : endif; if ($a) : elseif ($b): endif; if ($a) : else: endif; if ($a) : elseif ($b): elseif ($c): else: endif; while (1) { break; } while (1) { break 2; } while (1) : break(3); endwhile; class foo{ const FOO = 1, BAR = 2; } class foo{ function bar() {} } class foo{ public static function &bar() {} } class foo{ final private function bar() {} protected function baz() {} } abstract class foo{ abstract public function bar(); } final class foo extends bar { } final class foo implements bar { } final class foo implements bar, baz { } const FOO = 1, BAR = 2; while (1) { continue; } while (1) { continue 2; } while (1) { continue(3); } declare(ticks=1); declare(ticks=1, strict_types=1) {} declare(ticks=1): enddeclare; do {} while(1); echo $a, 1; echo($a); for($i = 0; $i < 10; $i++, $i++) {} for(; $i < 10; $i++) : endfor; foreach ($a as $v) {} foreach ([] as $v) {} foreach ($a as $v) : endforeach; foreach ($a as $k => $v) {} foreach ([] as $k => $v) {} foreach ($a as $k => &$v) {} foreach ($a as $k => list($v)) {} function foo() {} function foo() { __halt_compiler(); function bar() {} class Baz {} return $a; } function foo(array $a, callable $b) {return;} function &foo() {return 1;} function &foo() {} global $a, $b, $$c, ${foo()}; a: goto a; __halt_compiler(); if ($a) {} if ($a) {} elseif ($b) {} if ($a) {} else {} if ($a) {} elseif ($b) {} elseif ($c) {} else {} if ($a) {} elseif ($b) {} else if ($c) {} else {} ?>
1, &$b,); array(3 =>&$b); array(&$b, 1=>1, 1, 3 =>&$b); ~$a; !$a; Foo::Bar; clone($a); clone $a; function(){}; function($a, $b) use ($c, &$d) {}; function($a, $b) use (&$c, $d) {}; function() {}; foo; namespace\foo; \foo; empty($a); empty(Foo); @$a; eval($a); exit; exit($a); die(); die($a); foo(); namespace\foo(&$a); \foo([]); $foo(yield $a); $a--; $a++; --$a; ++$a; include $a; include_once $a; require $a; require_once $a; $a instanceof Foo; $a instanceof namespace\Foo; $a instanceof \Foo; isset($a, $b); isset(Foo); list() = $b; list($a, $b) = $b; list($a[]) = $b; list(list($a)) = $b; $a->foo(); new Foo; new namespace\Foo(); new \Foo(); print($a); $a->foo; $a->foo[1]; $a->foo->bar->baz()->quux[0]; $a->foo()[1][1]; ` + "`cmd $a`;" + ` ` + "`cmd`;" + ` ` + "``;" + ` []; [1]; [1=>1, &$b,]; Foo::bar(); namespace\Foo::bar(); \Foo::bar(); Foo::$bar(); $foo::$bar(); Foo::$bar; namespace\Foo::$bar; \Foo::$bar; $a ? $b : $c; $a ? : $c; $a ? $b ? $c : $d : $e; $a ? $b : $c ? $d : $e; -$a; +$a; $$a; $$$a; yield; yield $a; yield $a => $b; yield Foo::class; yield $a => Foo::class; (array)$a; (boolean)$a; (bool)$a; (double)$a; (float)$a; (integer)$a; (int)$a; (object)$a; (string)$a; (unset)$a; $a & $b; $a | $b; $a ^ $b; $a && $b; $a || $b; $a . $b; $a / $b; $a == $b; $a >= $b; $a > $b; $a === $b; $a and $b; $a or $b; $a xor $b; $a - $b; $a % $b; $a * $b; $a != $b; $a !== $b; $a + $b; $a ** $b; $a << $b; $a >> $b; $a <= $b; $a < $b; $a =& $b; $a =& new Foo; $a =& new Foo($b); $a = $b; $a &= $b; $a |= $b; $a ^= $b; $a .= $b; $a /= $b; $a -= $b; $a %= $b; $a *= $b; $a += $b; $a **= $b; $a <<= $b; $a >>= $b; (new \Foo()); (new \Foo())->bar()->baz; (new \Foo())[0][0]; (new \Foo())[0]->bar(); array([0])[0][0]; "foo"[0]; foo[0]; static::foo; new $foo; new $foo::$bar; new $a->b[0]; new $a->b{$b ?: null}->$c->d[0];static $a = [1][0]; static $a = !1; static $a = ~1; static $a = +1; static $a = -1; static $a = (1); static $a = 1 ?: 2; static $a = 1 ? 2 : 3; static $a = 1 & 2; static $a = 1 | 2; static $a = 1 ^ 2; static $a = 1 && 2; static $a = 1 || 2; static $a = 1 . 2; static $a = 1 / 2; static $a = 1 == 2; static $a = 1 >= 2; static $a = 1 > 2; static $a = 1 === 2; static $a = 1 and 2; static $a = 1 or 2; static $a = 1 xor 2; static $a = 1 - 2; static $a = 1 % 2; static $a = 1 * 2; static $a = 1 != 2; static $a = 1 !== 2; static $a = 1 + 2; static $a = 1 ** 2; static $a = 1 << 2; static $a = 1 >> 2; static $a = 1 <= 2; static $a = 1 < 2; static $a = Foo::bar; static $a = Foo::class; static $a = __CLASS__; static $a = Foo; static $a = namespace\Foo; static $a = \Foo; static $a = array(); static $a = array(1 => 1, 2); static $a = [1, 2 => 2][0]; if (yield 1) {} Foo::$$bar; $foo(); $foo()[0][0]; $a{$b}; ${$a}; $foo::{$bar}(); $foo::bar; ` for n := 0; n < b.N; n++ { lexer := scanner.NewLexer([]byte(src), "5.6", false, nil) php5parser := php5.NewParser(lexer, false, nil) php5parser.Parse() } }