[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-cvs
Subject:    [PHP-CVS] com php-src: add tests for semi reserved words and remove obsolete ones: =?UTF-8?Q?Zend/te
From:       Bob Weinand <bwoebi () php ! net>
Date:       2015-04-30 6:03:29
Message-ID: php-mail-99c4449bf86cd370e4e893b5672e1fae853046908 () git ! php ! net
[Download RAW message or body]

Commit:    a54e1237ec7d51e063f8bbf7c94241245573dd9e
Author:    Márcio Almada <marcio3w@gmail.com>         Sat, 7 Mar 2015 02:29:16 -0300
Parents:   972e94a24d46ccabb0b78623c1598c4998c26a76
Branches:  master

Link:       http://git.php.net/?p=php-src.git;a=commitdiff;h=a54e1237ec7d51e063f8bbf7c94241245573dd9e

Log:
add tests for semi reserved words and remove obsolete ones

Changed paths:
  A  Zend/tests/grammar/regression_001.phpt
  A  Zend/tests/grammar/regression_002.phpt
  A  Zend/tests/grammar/regression_003.phpt
  A  Zend/tests/grammar/regression_004.phpt
  A  Zend/tests/grammar/regression_005.phpt
  A  Zend/tests/grammar/regression_006.phpt
  A  Zend/tests/grammar/regression_007.phpt
  A  Zend/tests/grammar/regression_008.phpt
  A  Zend/tests/grammar/regression_009.phpt
  A  Zend/tests/grammar/regression_010.phpt
  A  Zend/tests/grammar/regression_011.phpt
  A  Zend/tests/grammar/regression_012.phpt
  A  Zend/tests/grammar/regression_013.phpt
  A  Zend/tests/grammar/semi_reserved_001.phpt
  A  Zend/tests/grammar/semi_reserved_002.phpt
  A  Zend/tests/grammar/semi_reserved_003.phpt
  A  Zend/tests/grammar/semi_reserved_004.phpt
  A  Zend/tests/grammar/semi_reserved_005.phpt
  A  Zend/tests/grammar/semi_reserved_006.phpt
  A  Zend/tests/grammar/semi_reserved_007.phpt
  A  Zend/tests/grammar/semi_reserved_008.phpt
  A  Zend/tests/grammar/semi_reserved_009.phpt
  A  Zend/tests/grammar/semi_reserved_010.phpt
  D  tests/basic/bug51709_1.phpt
  D  tests/basic/bug51709_2.phpt


["diff_a54e1237ec7d51e063f8bbf7c94241245573dd9e.txt" (text/plain)]

diff --git a/Zend/tests/grammar/regression_001.phpt \
b/Zend/tests/grammar/regression_001.phpt new file mode 100644
index 0000000..73d5eac
--- /dev/null
+++ b/Zend/tests/grammar/regression_001.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test to check static method calls syntax regression
+--FILE--
+<?php
+
+class Foo {
+	public static function function(){ echo __METHOD__, PHP_EOL; }
+}
+
+Foo::function();
+
+Foo::
+function();
+
+Foo::
+	 function();
+
+
+Foo::
+	 function(
+
+);
+
+echo "\nDone\n";
+
+--EXPECTF--
+
+Foo::function
+Foo::function
+Foo::function
+Foo::function
+
+Done
diff --git a/Zend/tests/grammar/regression_002.phpt \
b/Zend/tests/grammar/regression_002.phpt new file mode 100644
index 0000000..dd307c9
--- /dev/null
+++ b/Zend/tests/grammar/regression_002.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Test to ensure ::class still works
+--FILE--
+<?php
+
+class Foo {}
+
+var_dump(Foo::class);
+
+var_dump(Foo:: class);
+
+var_dump(Foo::	 CLASS);
+
+var_dump(Foo::
+
+CLASS);
+
+--EXPECTF--
+string(3) "Foo"
+string(3) "Foo"
+string(3) "Foo"
+string(3) "Foo"
diff --git a/Zend/tests/grammar/regression_003.phpt \
b/Zend/tests/grammar/regression_003.phpt new file mode 100644
index 0000000..7213ca3
--- /dev/null
+++ b/Zend/tests/grammar/regression_003.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Test to ensure ::class is still reserved in obj scope
+--FILE--
+<?php
+
+class Obj
+{
+    const CLASS = 'class';
+}
+
+--EXPECTF--
+Parse error: syntax error, unexpected 'CLASS' (T_CLASS) in %s on line 5
diff --git a/Zend/tests/grammar/regression_004.phpt \
b/Zend/tests/grammar/regression_004.phpt new file mode 100644
index 0000000..e95674d
--- /dev/null
+++ b/Zend/tests/grammar/regression_004.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Test possible function naming regression on procedural scope
+--FILE--
+<?php
+
+class Obj
+{
+    function echo(){} // valid
+    function return(){} // valid
+}
+
+function echo(){} // not valid
+
+--EXPECTF--
+Parse error: syntax error, unexpected 'echo' (T_ECHO), expecting identifier \
                (T_STRING) or '(' in %s on line 9
diff --git a/Zend/tests/grammar/regression_005.phpt \
b/Zend/tests/grammar/regression_005.phpt new file mode 100644
index 0000000..7704375
--- /dev/null
+++ b/Zend/tests/grammar/regression_005.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Test possible constant naming regression on procedural scope
+--FILE--
+<?php
+
+class Obj
+{
+    const return = 'yep';
+}
+
+const return = 'nope';
+
+--EXPECTF--
+Parse error: syntax error, unexpected 'return' (T_RETURN), expecting identifier \
                (T_STRING) in %s on line 8
diff --git a/Zend/tests/grammar/regression_006.phpt \
b/Zend/tests/grammar/regression_006.phpt new file mode 100644
index 0000000..6aae0ba
--- /dev/null
+++ b/Zend/tests/grammar/regression_006.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test to ensure const list syntax declaration works
+--FILE--
+<?php
+
+class Obj
+{
+    const DECLARE = 'declare',
+          RETURN = 'return',
+          FUNCTION = 'function',
+          USE = 'use';
+}
+
+echo Obj::DECLARE, PHP_EOL;
+echo Obj::RETURN, PHP_EOL;
+echo Obj::FUNCTION, PHP_EOL;
+echo Obj::USE, PHP_EOL;
+echo Obj::
+
+    USE, PHP_EOL;
+echo "\nDone\n";
+
+--EXPECTF--
+declare
+return
+function
+use
+use
+
+Done
diff --git a/Zend/tests/grammar/regression_007.phpt \
b/Zend/tests/grammar/regression_007.phpt new file mode 100644
index 0000000..92b2253
--- /dev/null
+++ b/Zend/tests/grammar/regression_007.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test to ensure semi reserved words allow deference
+--FILE--
+<?php
+
+class Foo {
+    const use = 'yay';
+
+    public static function new() {
+        echo __METHOD__, PHP_EOL;
+        return new static();
+    }
+
+    public function self() {
+        echo __METHOD__, PHP_EOL;
+        return $this;
+    }
+}
+
+Foo::new()::new()::new();
+
+var_dump(
+    (new Foo)->self()::new()->self()->self()::use
+);
+
+Foo::{'new'}();
+
+var_dump(Foo::use);
+
+echo "\nDone\n";
+
+--EXPECTF--
+Foo::new
+Foo::new
+Foo::new
+Foo::self
+Foo::new
+Foo::self
+Foo::self
+string(3) "yay"
+Foo::new
+string(3) "yay"
+
+Done
diff --git a/Zend/tests/grammar/regression_008.phpt \
b/Zend/tests/grammar/regression_008.phpt new file mode 100644
index 0000000..7741ed0
--- /dev/null
+++ b/Zend/tests/grammar/regression_008.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Test to check regressions on string interpolation with class members access
+--FILE--
+<?php
+
+class Friday {
+    public $require = "fun";
+}
+
+$friday = new Friday;
+
+echo "$friday->require ($friday->require) {$friday->require}", PHP_EOL;
+
+echo "\nDone\n";
+
+
+--EXPECTF--
+
+fun (fun) fun
+
+Done
diff --git a/Zend/tests/grammar/regression_009.phpt \
b/Zend/tests/grammar/regression_009.phpt new file mode 100644
index 0000000..589d903
--- /dev/null
+++ b/Zend/tests/grammar/regression_009.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Test to check regressions on use statements and lexer state
+--FILE--
+<?php
+
+use A\B\C\D;
+
+class Foo
+{
+    private static $foo;
+
+}
+
+echo PHP_EOL, "Done", PHP_EOL;
+
+--EXPECTF--
+
+Done
diff --git a/Zend/tests/grammar/regression_010.phpt \
b/Zend/tests/grammar/regression_010.phpt new file mode 100644
index 0000000..5dc90f2
--- /dev/null
+++ b/Zend/tests/grammar/regression_010.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Test to check regressions on T_IMPLEMENTS followed by a T_NS_SEPARATOR
+--FILE--
+<?php
+
+interface A{}
+
+class B implements\A {}
+
+echo "Done", PHP_EOL;
+
+--EXPECTF--
+
+Done
diff --git a/Zend/tests/grammar/regression_011.phpt \
b/Zend/tests/grammar/regression_011.phpt new file mode 100644
index 0000000..c79c077
--- /dev/null
+++ b/Zend/tests/grammar/regression_011.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Testing instantiation using namespace:: prefix
+--FILE--
+<?php
+
+namespace foo;
+
+class bar {
+}
+
+class_alias('foo\bar', 'foo\baz');
+
+var_dump(new namespace\baz);
+
+?>
+--EXPECTF--
+object(foo\bar)#%d (0) {
+}
diff --git a/Zend/tests/grammar/regression_012.phpt \
b/Zend/tests/grammar/regression_012.phpt new file mode 100644
index 0000000..3b4925a
--- /dev/null
+++ b/Zend/tests/grammar/regression_012.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Testing for regression on const list syntax and arrays
+--FILE--
+<?php
+
+class A {
+    const A = [1, FOREACH];
+}
+
+?>
+--EXPECTF--
+
+Parse error: syntax error, unexpected 'FOREACH' (T_FOREACH), expecting ']' in %s on \
                line %d
diff --git a/Zend/tests/grammar/regression_013.phpt \
b/Zend/tests/grammar/regression_013.phpt new file mode 100644
index 0000000..1c60ffc
--- /dev/null
+++ b/Zend/tests/grammar/regression_013.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Testing for regression with encapsed variables in class declaration context
+--FILE--
+<?php
+
+class A { function foo() { "{${$a}}"; } function list() {} }
+
+echo "Done", PHP_EOL;
+
+?>
+--EXPECTF--
+
+Done
diff --git a/Zend/tests/grammar/semi_reserved_001.phpt \
b/Zend/tests/grammar/semi_reserved_001.phpt new file mode 100644
index 0000000..06b2532
--- /dev/null
+++ b/Zend/tests/grammar/semi_reserved_001.phpt
@@ -0,0 +1,188 @@
+--TEST--
+Test semi-reserved words as class methods
+--FILE--
+<?php
+
+class Obj
+{
+    function empty(){ echo __METHOD__, PHP_EOL; }
+    function callable(){ echo __METHOD__, PHP_EOL; }
+    function trait(){ echo __METHOD__, PHP_EOL; }
+    function extends(){ echo __METHOD__, PHP_EOL; }
+    function implements(){ echo __METHOD__, PHP_EOL; }
+    function const(){ echo __METHOD__, PHP_EOL; }
+    function enddeclare(){ echo __METHOD__, PHP_EOL; }
+    function endfor(){ echo __METHOD__, PHP_EOL; }
+    function endforeach(){ echo __METHOD__, PHP_EOL; }
+    function endif(){ echo __METHOD__, PHP_EOL; }
+    function endwhile(){ echo __METHOD__, PHP_EOL; }
+    function and(){ echo __METHOD__, PHP_EOL; }
+    function global(){ echo __METHOD__, PHP_EOL; }
+    function goto(){ echo __METHOD__, PHP_EOL; }
+    function instanceof(){ echo __METHOD__, PHP_EOL; }
+    function insteadof(){ echo __METHOD__, PHP_EOL; }
+    function interface(){ echo __METHOD__, PHP_EOL; }
+    function new(){ echo __METHOD__, PHP_EOL; }
+    function or(){ echo __METHOD__, PHP_EOL; }
+    function xor(){ echo __METHOD__, PHP_EOL; }
+    function try(){ echo __METHOD__, PHP_EOL; }
+    function use(){ echo __METHOD__, PHP_EOL; }
+    function var(){ echo __METHOD__, PHP_EOL; }
+    function exit(){ echo __METHOD__, PHP_EOL; }
+    function list(){ echo __METHOD__, PHP_EOL; }
+    function clone(){ echo __METHOD__, PHP_EOL; }
+    function include(){ echo __METHOD__, PHP_EOL; }
+    function include_once(){ echo __METHOD__, PHP_EOL; }
+    function throw(){ echo __METHOD__, PHP_EOL; }
+    function array(){ echo __METHOD__, PHP_EOL; }
+    function print(){ echo __METHOD__, PHP_EOL; }
+    function echo(){ echo __METHOD__, PHP_EOL; }
+    function require(){ echo __METHOD__, PHP_EOL; }
+    function require_once(){ echo __METHOD__, PHP_EOL; }
+    function return(){ echo __METHOD__, PHP_EOL; }
+    function else(){ echo __METHOD__, PHP_EOL; }
+    function elseif(){ echo __METHOD__, PHP_EOL; }
+    function default(){ echo __METHOD__, PHP_EOL; }
+    function break(){ echo __METHOD__, PHP_EOL; }
+    function continue(){ echo __METHOD__, PHP_EOL; }
+    function switch(){ echo __METHOD__, PHP_EOL; }
+    function yield(){ echo __METHOD__, PHP_EOL; }
+    function function(){ echo __METHOD__, PHP_EOL; }
+    function if(){ echo __METHOD__, PHP_EOL; }
+    function endswitch(){ echo __METHOD__, PHP_EOL; }
+    function finally(){ echo __METHOD__, PHP_EOL; }
+    function for(){ echo __METHOD__, PHP_EOL; }
+    function foreach(){ echo __METHOD__, PHP_EOL; }
+    function declare(){ echo __METHOD__, PHP_EOL; }
+    function case(){ echo __METHOD__, PHP_EOL; }
+    function do(){ echo __METHOD__, PHP_EOL; }
+    function while(){ echo __METHOD__, PHP_EOL; }
+    function as(){ echo __METHOD__, PHP_EOL; }
+    function catch(){ echo __METHOD__, PHP_EOL; }
+    function die(){ echo __METHOD__, PHP_EOL; }
+    function self(){ echo __METHOD__, PHP_EOL; }
+    function parent(){ echo __METHOD__, PHP_EOL; }
+}
+
+$obj = new Obj;
+
+$obj->empty();
+$obj->callable();
+$obj->trait();
+$obj->extends();
+$obj->implements();
+$obj->const();
+$obj->enddeclare();
+$obj->endfor();
+$obj->endforeach();
+$obj->endif();
+$obj->endwhile();
+$obj->and();
+$obj->global();
+$obj->goto();
+$obj->instanceof();
+$obj->insteadof();
+$obj->interface();
+$obj->new();
+$obj->or();
+$obj->xor();
+$obj->try();
+$obj->use();
+$obj->var();
+$obj->exit();
+$obj->list();
+$obj->clone();
+$obj->include();
+$obj->include_once();
+$obj->throw();
+$obj->array();
+$obj->print();
+$obj->echo();
+$obj->require();
+$obj->require_once();
+$obj->return();
+$obj->else();
+$obj->elseif();
+$obj->default();
+$obj->break();
+$obj->continue();
+$obj->switch();
+$obj->yield();
+$obj->function();
+$obj->if();
+$obj->endswitch();
+$obj->finally();
+$obj->for();
+$obj->foreach();
+$obj->declare();
+$obj->case();
+$obj->do();
+$obj->while();
+$obj->as();
+$obj->catch();
+$obj->die();
+$obj->self();
+$obj->parent();
+
+echo "\nDone\n";
+
+--EXPECTF--
+Obj::empty
+Obj::callable
+Obj::trait
+Obj::extends
+Obj::implements
+Obj::const
+Obj::enddeclare
+Obj::endfor
+Obj::endforeach
+Obj::endif
+Obj::endwhile
+Obj::and
+Obj::global
+Obj::goto
+Obj::instanceof
+Obj::insteadof
+Obj::interface
+Obj::new
+Obj::or
+Obj::xor
+Obj::try
+Obj::use
+Obj::var
+Obj::exit
+Obj::list
+Obj::clone
+Obj::include
+Obj::include_once
+Obj::throw
+Obj::array
+Obj::print
+Obj::echo
+Obj::require
+Obj::require_once
+Obj::return
+Obj::else
+Obj::elseif
+Obj::default
+Obj::break
+Obj::continue
+Obj::switch
+Obj::yield
+Obj::function
+Obj::if
+Obj::endswitch
+Obj::finally
+Obj::for
+Obj::foreach
+Obj::declare
+Obj::case
+Obj::do
+Obj::while
+Obj::as
+Obj::catch
+Obj::die
+Obj::self
+Obj::parent
+
+Done
diff --git a/Zend/tests/grammar/semi_reserved_002.phpt \
b/Zend/tests/grammar/semi_reserved_002.phpt new file mode 100644
index 0000000..e4c49cd
--- /dev/null
+++ b/Zend/tests/grammar/semi_reserved_002.phpt
@@ -0,0 +1,186 @@
+--TEST--
+Test semi-reserved words as static class methods
+--FILE--
+<?php
+
+class Obj
+{
+    static function empty(){ echo __METHOD__, PHP_EOL; }
+    static function callable(){ echo __METHOD__, PHP_EOL; }
+    static function trait(){ echo __METHOD__, PHP_EOL; }
+    static function extends(){ echo __METHOD__, PHP_EOL; }
+    static function implements(){ echo __METHOD__, PHP_EOL; }
+    static function const(){ echo __METHOD__, PHP_EOL; }
+    static function enddeclare(){ echo __METHOD__, PHP_EOL; }
+    static function endfor(){ echo __METHOD__, PHP_EOL; }
+    static function endforeach(){ echo __METHOD__, PHP_EOL; }
+    static function endif(){ echo __METHOD__, PHP_EOL; }
+    static function endwhile(){ echo __METHOD__, PHP_EOL; }
+    static function and(){ echo __METHOD__, PHP_EOL; }
+    static function global(){ echo __METHOD__, PHP_EOL; }
+    static function goto(){ echo __METHOD__, PHP_EOL; }
+    static function instanceof(){ echo __METHOD__, PHP_EOL; }
+    static function insteadof(){ echo __METHOD__, PHP_EOL; }
+    static function interface(){ echo __METHOD__, PHP_EOL; }
+    static function new(){ echo __METHOD__, PHP_EOL; }
+    static function or(){ echo __METHOD__, PHP_EOL; }
+    static function xor(){ echo __METHOD__, PHP_EOL; }
+    static function try(){ echo __METHOD__, PHP_EOL; }
+    static function use(){ echo __METHOD__, PHP_EOL; }
+    static function var(){ echo __METHOD__, PHP_EOL; }
+    static function exit(){ echo __METHOD__, PHP_EOL; }
+    static function list(){ echo __METHOD__, PHP_EOL; }
+    static function clone(){ echo __METHOD__, PHP_EOL; }
+    static function include(){ echo __METHOD__, PHP_EOL; }
+    static function include_once(){ echo __METHOD__, PHP_EOL; }
+    static function throw(){ echo __METHOD__, PHP_EOL; }
+    static function array(){ echo __METHOD__, PHP_EOL; }
+    static function print(){ echo __METHOD__, PHP_EOL; }
+    static function echo(){ echo __METHOD__, PHP_EOL; }
+    static function require(){ echo __METHOD__, PHP_EOL; }
+    static function require_once(){ echo __METHOD__, PHP_EOL; }
+    static function return(){ echo __METHOD__, PHP_EOL; }
+    static function else(){ echo __METHOD__, PHP_EOL; }
+    static function elseif(){ echo __METHOD__, PHP_EOL; }
+    static function default(){ echo __METHOD__, PHP_EOL; }
+    static function break(){ echo __METHOD__, PHP_EOL; }
+    static function continue(){ echo __METHOD__, PHP_EOL; }
+    static function switch(){ echo __METHOD__, PHP_EOL; }
+    static function yield(){ echo __METHOD__, PHP_EOL; }
+    static function function(){ echo __METHOD__, PHP_EOL; }
+    static function if(){ echo __METHOD__, PHP_EOL; }
+    static function endswitch(){ echo __METHOD__, PHP_EOL; }
+    static function finally(){ echo __METHOD__, PHP_EOL; }
+    static function for(){ echo __METHOD__, PHP_EOL; }
+    static function foreach(){ echo __METHOD__, PHP_EOL; }
+    static function declare(){ echo __METHOD__, PHP_EOL; }
+    static function case(){ echo __METHOD__, PHP_EOL; }
+    static function do(){ echo __METHOD__, PHP_EOL; }
+    static function while(){ echo __METHOD__, PHP_EOL; }
+    static function as(){ echo __METHOD__, PHP_EOL; }
+    static function catch(){ echo __METHOD__, PHP_EOL; }
+    static function die(){ echo __METHOD__, PHP_EOL; }
+    static function self(){ echo __METHOD__, PHP_EOL; }
+    static function parent(){ echo __METHOD__, PHP_EOL; }
+}
+
+Obj::empty();
+Obj::callable();
+Obj::trait();
+Obj::extends();
+Obj::implements();
+Obj::const();
+Obj::enddeclare();
+Obj::endfor();
+Obj::endforeach();
+Obj::endif();
+Obj::endwhile();
+Obj::and();
+Obj::global();
+Obj::goto();
+Obj::instanceof();
+Obj::insteadof();
+Obj::interface();
+Obj::new();
+Obj::or();
+Obj::xor();
+Obj::try();
+Obj::use();
+Obj::var();
+Obj::exit();
+Obj::list();
+Obj::clone();
+Obj::include();
+Obj::include_once();
+Obj::throw();
+Obj::array();
+Obj::print();
+Obj::echo();
+Obj::require();
+Obj::require_once();
+Obj::return();
+Obj::else();
+Obj::elseif();
+Obj::default();
+Obj::break();
+Obj::continue();
+Obj::switch();
+Obj::yield();
+Obj::function();
+Obj::if();
+Obj::endswitch();
+Obj::finally();
+Obj::for();
+Obj::foreach();
+Obj::declare();
+Obj::case();
+Obj::do();
+Obj::while();
+Obj::as();
+Obj::catch();
+Obj::die();
+Obj::self();
+Obj::parent();
+
+echo "\nDone\n";
+
+--EXPECTF--
+Obj::empty
+Obj::callable
+Obj::trait
+Obj::extends
+Obj::implements
+Obj::const
+Obj::enddeclare
+Obj::endfor
+Obj::endforeach
+Obj::endif
+Obj::endwhile
+Obj::and
+Obj::global
+Obj::goto
+Obj::instanceof
+Obj::insteadof
+Obj::interface
+Obj::new
+Obj::or
+Obj::xor
+Obj::try
+Obj::use
+Obj::var
+Obj::exit
+Obj::list
+Obj::clone
+Obj::include
+Obj::include_once
+Obj::throw
+Obj::array
+Obj::print
+Obj::echo
+Obj::require
+Obj::require_once
+Obj::return
+Obj::else
+Obj::elseif
+Obj::default
+Obj::break
+Obj::continue
+Obj::switch
+Obj::yield
+Obj::function
+Obj::if
+Obj::endswitch
+Obj::finally
+Obj::for
+Obj::foreach
+Obj::declare
+Obj::case
+Obj::do
+Obj::while
+Obj::as
+Obj::catch
+Obj::die
+Obj::self
+Obj::parent
+
+Done
diff --git a/Zend/tests/grammar/semi_reserved_003.phpt \
b/Zend/tests/grammar/semi_reserved_003.phpt new file mode 100644
index 0000000..fe2c44d
--- /dev/null
+++ b/Zend/tests/grammar/semi_reserved_003.phpt
@@ -0,0 +1,210 @@
+--TEST--
+Test semi-reserved words as class properties
+--FILE--
+<?php
+
+class Obj
+{
+    var $empty = 'empty';
+    var $callable = 'callable';
+    var $class = 'class';
+    var $trait = 'trait';
+    var $extends = 'extends';
+    var $implements = 'implements';
+    var $static = 'static';
+    var $abstract = 'abstract';
+    var $final = 'final';
+    var $public = 'public';
+    var $protected = 'protected';
+    var $private = 'private';
+    var $const = 'const';
+    var $enddeclare = 'enddeclare';
+    var $endfor = 'endfor';
+    var $endforeach = 'endforeach';
+    var $endif = 'endif';
+    var $endwhile = 'endwhile';
+    var $and = 'and';
+    var $global = 'global';
+    var $goto = 'goto';
+    var $instanceof = 'instanceof';
+    var $insteadof = 'insteadof';
+    var $interface = 'interface';
+    var $namespace = 'namespace';
+    var $new = 'new';
+    var $or = 'or';
+    var $xor = 'xor';
+    var $try = 'try';
+    var $use = 'use';
+    var $var = 'var';
+    var $exit = 'exit';
+    var $list = 'list';
+    var $clone = 'clone';
+    var $include = 'include';
+    var $include_once = 'include_once';
+    var $throw = 'throw';
+    var $array = 'array';
+    var $print = 'print';
+    var $echo = 'echo';
+    var $require = 'require';
+    var $require_once = 'require_once';
+    var $return = 'return';
+    var $else = 'else';
+    var $elseif = 'elseif';
+    var $default = 'default';
+    var $break = 'break';
+    var $continue = 'continue';
+    var $switch = 'switch';
+    var $yield = 'yield';
+    var $function = 'function';
+    var $if = 'if';
+    var $endswitch = 'endswitch';
+    var $finally = 'finally';
+    var $for = 'for';
+    var $foreach = 'foreach';
+    var $declare = 'declare';
+    var $case = 'case';
+    var $do = 'do';
+    var $while = 'while';
+    var $as = 'as';
+    var $catch = 'catch';
+    var $die = 'die';
+    var $self = 'self';
+}
+
+$obj = new Obj;
+
+echo $obj->empty, PHP_EOL;
+echo $obj->callable, PHP_EOL;
+echo $obj->class, PHP_EOL;
+echo $obj->trait, PHP_EOL;
+echo $obj->extends, PHP_EOL;
+echo $obj->implements, PHP_EOL;
+echo $obj->static, PHP_EOL;
+echo $obj->abstract, PHP_EOL;
+echo $obj->final, PHP_EOL;
+echo $obj->public, PHP_EOL;
+echo $obj->protected, PHP_EOL;
+echo $obj->private, PHP_EOL;
+echo $obj->const, PHP_EOL;
+echo $obj->enddeclare, PHP_EOL;
+echo $obj->endfor, PHP_EOL;
+echo $obj->endforeach, PHP_EOL;
+echo $obj->endif, PHP_EOL;
+echo $obj->endwhile, PHP_EOL;
+echo $obj->and, PHP_EOL;
+echo $obj->global, PHP_EOL;
+echo $obj->goto, PHP_EOL;
+echo $obj->instanceof, PHP_EOL;
+echo $obj->insteadof, PHP_EOL;
+echo $obj->interface, PHP_EOL;
+echo $obj->namespace, PHP_EOL;
+echo $obj->new, PHP_EOL;
+echo $obj->or, PHP_EOL;
+echo $obj->xor, PHP_EOL;
+echo $obj->try, PHP_EOL;
+echo $obj->use, PHP_EOL;
+echo $obj->var, PHP_EOL;
+echo $obj->exit, PHP_EOL;
+echo $obj->list, PHP_EOL;
+echo $obj->clone, PHP_EOL;
+echo $obj->include, PHP_EOL;
+echo $obj->include_once, PHP_EOL;
+echo $obj->throw, PHP_EOL;
+echo $obj->array, PHP_EOL;
+echo $obj->print, PHP_EOL;
+echo $obj->echo, PHP_EOL;
+echo $obj->require, PHP_EOL;
+echo $obj->require_once, PHP_EOL;
+echo $obj->return, PHP_EOL;
+echo $obj->else, PHP_EOL;
+echo $obj->elseif, PHP_EOL;
+echo $obj->default, PHP_EOL;
+echo $obj->break, PHP_EOL;
+echo $obj->continue, PHP_EOL;
+echo $obj->switch, PHP_EOL;
+echo $obj->yield, PHP_EOL;
+echo $obj->function, PHP_EOL;
+echo $obj->if, PHP_EOL;
+echo $obj->endswitch, PHP_EOL;
+echo $obj->finally, PHP_EOL;
+echo $obj->for, PHP_EOL;
+echo $obj->foreach, PHP_EOL;
+echo $obj->declare, PHP_EOL;
+echo $obj->case, PHP_EOL;
+echo $obj->do, PHP_EOL;
+echo $obj->while, PHP_EOL;
+echo $obj->as, PHP_EOL;
+echo $obj->catch, PHP_EOL;
+echo $obj->die, PHP_EOL;
+echo $obj->self, PHP_EOL;
+
+echo "\nDone\n";
+
+?>
+--EXPECTF--
+empty
+callable
+class
+trait
+extends
+implements
+static
+abstract
+final
+public
+protected
+private
+const
+enddeclare
+endfor
+endforeach
+endif
+endwhile
+and
+global
+goto
+instanceof
+insteadof
+interface
+namespace
+new
+or
+xor
+try
+use
+var
+exit
+list
+clone
+include
+include_once
+throw
+array
+print
+echo
+require
+require_once
+return
+else
+elseif
+default
+break
+continue
+switch
+yield
+function
+if
+endswitch
+finally
+for
+foreach
+declare
+case
+do
+while
+as
+catch
+die
+self
+
+Done
diff --git a/Zend/tests/grammar/semi_reserved_004.phpt \
b/Zend/tests/grammar/semi_reserved_004.phpt new file mode 100644
index 0000000..40c5df1
--- /dev/null
+++ b/Zend/tests/grammar/semi_reserved_004.phpt
@@ -0,0 +1,210 @@
+--TEST--
+Test semi-reserved words as static class properties
+--FILE--
+<?php
+
+class Obj
+{
+    static $empty = 'empty';
+    static $callable = 'callable';
+    static $class = 'class';
+    static $trait = 'trait';
+    static $extends = 'extends';
+    static $implements = 'implements';
+    static $static = 'static';
+    static $abstract = 'abstract';
+    static $final = 'final';
+    static $public = 'public';
+    static $protected = 'protected';
+    static $private = 'private';
+    static $const = 'const';
+    static $enddeclare = 'enddeclare';
+    static $endfor = 'endfor';
+    static $endforeach = 'endforeach';
+    static $endif = 'endif';
+    static $endwhile = 'endwhile';
+    static $and = 'and';
+    static $global = 'global';
+    static $goto = 'goto';
+    static $instanceof = 'instanceof';
+    static $insteadof = 'insteadof';
+    static $interface = 'interface';
+    static $namespace = 'namespace';
+    static $new = 'new';
+    static $or = 'or';
+    static $xor = 'xor';
+    static $try = 'try';
+    static $use = 'use';
+    static $var = 'var';
+    static $exit = 'exit';
+    static $list = 'list';
+    static $clone = 'clone';
+    static $include = 'include';
+    static $include_once = 'include_once';
+    static $throw = 'throw';
+    static $array = 'array';
+    static $print = 'print';
+    static $echo = 'echo';
+    static $require = 'require';
+    static $require_once = 'require_once';
+    static $return = 'return';
+    static $else = 'else';
+    static $elseif = 'elseif';
+    static $default = 'default';
+    static $break = 'break';
+    static $continue = 'continue';
+    static $switch = 'switch';
+    static $yield = 'yield';
+    static $function = 'function';
+    static $if = 'if';
+    static $endswitch = 'endswitch';
+    static $finally = 'finally';
+    static $for = 'for';
+    static $foreach = 'foreach';
+    static $declare = 'declare';
+    static $case = 'case';
+    static $do = 'do';
+    static $while = 'while';
+    static $as = 'as';
+    static $catch = 'catch';
+    static $die = 'die';
+    static $self = 'self';
+    static $parent = 'parent';
+}
+
+echo Obj::$empty, PHP_EOL;
+echo Obj::$callable, PHP_EOL;
+echo Obj::$class, PHP_EOL;
+echo Obj::$trait, PHP_EOL;
+echo Obj::$extends, PHP_EOL;
+echo Obj::$implements, PHP_EOL;
+echo Obj::$static, PHP_EOL;
+echo Obj::$abstract, PHP_EOL;
+echo Obj::$final, PHP_EOL;
+echo Obj::$public, PHP_EOL;
+echo Obj::$protected, PHP_EOL;
+echo Obj::$private, PHP_EOL;
+echo Obj::$const, PHP_EOL;
+echo Obj::$enddeclare, PHP_EOL;
+echo Obj::$endfor, PHP_EOL;
+echo Obj::$endforeach, PHP_EOL;
+echo Obj::$endif, PHP_EOL;
+echo Obj::$endwhile, PHP_EOL;
+echo Obj::$and, PHP_EOL;
+echo Obj::$global, PHP_EOL;
+echo Obj::$goto, PHP_EOL;
+echo Obj::$instanceof, PHP_EOL;
+echo Obj::$insteadof, PHP_EOL;
+echo Obj::$interface, PHP_EOL;
+echo Obj::$namespace, PHP_EOL;
+echo Obj::$new, PHP_EOL;
+echo Obj::$or, PHP_EOL;
+echo Obj::$xor, PHP_EOL;
+echo Obj::$try, PHP_EOL;
+echo Obj::$use, PHP_EOL;
+echo Obj::$var, PHP_EOL;
+echo Obj::$exit, PHP_EOL;
+echo Obj::$list, PHP_EOL;
+echo Obj::$clone, PHP_EOL;
+echo Obj::$include, PHP_EOL;
+echo Obj::$include_once, PHP_EOL;
+echo Obj::$throw, PHP_EOL;
+echo Obj::$array, PHP_EOL;
+echo Obj::$print, PHP_EOL;
+echo Obj::$echo, PHP_EOL;
+echo Obj::$require, PHP_EOL;
+echo Obj::$require_once, PHP_EOL;
+echo Obj::$return, PHP_EOL;
+echo Obj::$else, PHP_EOL;
+echo Obj::$elseif, PHP_EOL;
+echo Obj::$default, PHP_EOL;
+echo Obj::$break, PHP_EOL;
+echo Obj::$continue, PHP_EOL;
+echo Obj::$switch, PHP_EOL;
+echo Obj::$yield, PHP_EOL;
+echo Obj::$function, PHP_EOL;
+echo Obj::$if, PHP_EOL;
+echo Obj::$endswitch, PHP_EOL;
+echo Obj::$finally, PHP_EOL;
+echo Obj::$for, PHP_EOL;
+echo Obj::$foreach, PHP_EOL;
+echo Obj::$declare, PHP_EOL;
+echo Obj::$case, PHP_EOL;
+echo Obj::$do, PHP_EOL;
+echo Obj::$while, PHP_EOL;
+echo Obj::$as, PHP_EOL;
+echo Obj::$catch, PHP_EOL;
+echo Obj::$die, PHP_EOL;
+echo Obj::$self, PHP_EOL;
+echo Obj::$parent, PHP_EOL;
+
+echo "\nDone\n";
+
+--EXPECTF--
+empty
+callable
+class
+trait
+extends
+implements
+static
+abstract
+final
+public
+protected
+private
+const
+enddeclare
+endfor
+endforeach
+endif
+endwhile
+and
+global
+goto
+instanceof
+insteadof
+interface
+namespace
+new
+or
+xor
+try
+use
+var
+exit
+list
+clone
+include
+include_once
+throw
+array
+print
+echo
+require
+require_once
+return
+else
+elseif
+default
+break
+continue
+switch
+yield
+function
+if
+endswitch
+finally
+for
+foreach
+declare
+case
+do
+while
+as
+catch
+die
+self
+parent
+
+Done
diff --git a/Zend/tests/grammar/semi_reserved_005.phpt \
b/Zend/tests/grammar/semi_reserved_005.phpt new file mode 100644
index 0000000..dcd4018
--- /dev/null
+++ b/Zend/tests/grammar/semi_reserved_005.phpt
@@ -0,0 +1,189 @@
+--TEST--
+Test semi-reserved words as class constants
+--FILE--
+<?php
+
+class Obj
+{
+    const EMPTY = 'empty';
+    const CALLABLE = 'callable';
+    const TRAIT = 'trait';
+    const EXTENDS = 'extends';
+    const IMPLEMENTS = 'implements';
+    const CONST = 'const';
+    const ENDDECLARE = 'enddeclare';
+    const ENDFOR = 'endfor';
+    const ENDFOREACH = 'endforeach';
+    const ENDIF = 'endif';
+    const ENDWHILE = 'endwhile';
+    const AND = 'and';
+    const GLOBAL = 'global';
+    const GOTO = 'goto';
+    const INSTANCEOF = 'instanceof';
+    const INSTEADOF = 'insteadof';
+    const INTERFACE = 'interface';
+    const NAMESPACE = 'namespace';
+    const NEW = 'new';
+    const OR = 'or';
+    const XOR = 'xor';
+    const TRY = 'try';
+    const USE = 'use';
+    const VAR = 'var';
+    const EXIT = 'exit';
+    const LIST = 'list';
+    const CLONE = 'clone';
+    const INCLUDE = 'include';
+    const INCLUDE_ONCE = 'include_once';
+    const THROW = 'throw';
+    const ARRAY = 'array';
+    const PRINT = 'print';
+    const ECHO = 'echo';
+    const REQUIRE = 'require';
+    const REQUIRE_ONCE = 'require_once';
+    const RETURN = 'return';
+    const ELSE = 'else';
+    const ELSEIF = 'elseif';
+    const DEFAULT = 'default';
+    const BREAK = 'break';
+    const CONTINUE = 'continue';
+    const SWITCH = 'switch';
+    const YIELD = 'yield';
+    const FUNCTION = 'function';
+    const IF = 'if';
+    const ENDSWITCH = 'endswitch';
+    const FINALLY = 'finally';
+    const FOR = 'for';
+    const FOREACH = 'foreach';
+    const DECLARE = 'declare';
+    const CASE = 'case';
+    const DO = 'do';
+    const WHILE = 'while';
+    const AS = 'as';
+    const CATCH = 'catch';
+    const DIE = 'die';
+    const SELF = 'self';
+    const PARENT = 'parent';
+}
+
+echo Obj::EMPTY, PHP_EOL;
+echo Obj::CALLABLE, PHP_EOL;
+echo Obj::TRAIT, PHP_EOL;
+echo Obj::EXTENDS, PHP_EOL;
+echo Obj::IMPLEMENTS, PHP_EOL;
+echo Obj::CONST, PHP_EOL;
+echo Obj::ENDDECLARE, PHP_EOL;
+echo Obj::ENDFOR, PHP_EOL;
+echo Obj::ENDFOREACH, PHP_EOL;
+echo Obj::ENDIF, PHP_EOL;
+echo Obj::ENDWHILE, PHP_EOL;
+echo Obj::AND, PHP_EOL;
+echo Obj::GLOBAL, PHP_EOL;
+echo Obj::GOTO, PHP_EOL;
+echo Obj::INSTANCEOF, PHP_EOL;
+echo Obj::INSTEADOF, PHP_EOL;
+echo Obj::INTERFACE, PHP_EOL;
+echo Obj::NAMESPACE, PHP_EOL;
+echo Obj::NEW, PHP_EOL;
+echo Obj::OR, PHP_EOL;
+echo Obj::XOR, PHP_EOL;
+echo Obj::TRY, PHP_EOL;
+echo Obj::USE, PHP_EOL;
+echo Obj::VAR, PHP_EOL;
+echo Obj::EXIT, PHP_EOL;
+echo Obj::LIST, PHP_EOL;
+echo Obj::CLONE, PHP_EOL;
+echo Obj::INCLUDE, PHP_EOL;
+echo Obj::INCLUDE_ONCE, PHP_EOL;
+echo Obj::THROW, PHP_EOL;
+echo Obj::ARRAY, PHP_EOL;
+echo Obj::PRINT, PHP_EOL;
+echo Obj::ECHO, PHP_EOL;
+echo Obj::REQUIRE, PHP_EOL;
+echo Obj::REQUIRE_ONCE, PHP_EOL;
+echo Obj::RETURN, PHP_EOL;
+echo Obj::ELSE, PHP_EOL;
+echo Obj::ELSEIF, PHP_EOL;
+echo Obj::DEFAULT, PHP_EOL;
+echo Obj::BREAK, PHP_EOL;
+echo Obj::CONTINUE, PHP_EOL;
+echo Obj::SWITCH, PHP_EOL;
+echo Obj::YIELD, PHP_EOL;
+echo Obj::FUNCTION, PHP_EOL;
+echo Obj::IF, PHP_EOL;
+echo Obj::ENDSWITCH, PHP_EOL;
+echo Obj::FINALLY, PHP_EOL;
+echo Obj::FOR, PHP_EOL;
+echo Obj::FOREACH, PHP_EOL;
+echo Obj::DECLARE, PHP_EOL;
+echo Obj::CASE, PHP_EOL;
+echo Obj::DO, PHP_EOL;
+echo Obj::WHILE, PHP_EOL;
+echo Obj::AS, PHP_EOL;
+echo Obj::CATCH, PHP_EOL;
+echo Obj::DIE, PHP_EOL;
+echo Obj::SELF, PHP_EOL;
+echo Obj::PARENT, PHP_EOL;
+
+echo "\nDone\n";
+
+--EXPECTF--
+empty
+callable
+trait
+extends
+implements
+const
+enddeclare
+endfor
+endforeach
+endif
+endwhile
+and
+global
+goto
+instanceof
+insteadof
+interface
+namespace
+new
+or
+xor
+try
+use
+var
+exit
+list
+clone
+include
+include_once
+throw
+array
+print
+echo
+require
+require_once
+return
+else
+elseif
+default
+break
+continue
+switch
+yield
+function
+if
+endswitch
+finally
+for
+foreach
+declare
+case
+do
+while
+as
+catch
+die
+self
+parent
+
+Done
diff --git a/Zend/tests/grammar/semi_reserved_006.phpt \
b/Zend/tests/grammar/semi_reserved_006.phpt new file mode 100644
index 0000000..334d09a
--- /dev/null
+++ b/Zend/tests/grammar/semi_reserved_006.phpt
@@ -0,0 +1,80 @@
+--TEST--
+Test semi-reserved method and constant names and trait conflict resolution
+--FILE--
+<?php
+
+trait TraitA
+{
+    public function catch(){ echo __METHOD__, PHP_EOL; }
+    private function list(){ echo __METHOD__, PHP_EOL; }
+}
+
+trait TraitB
+{
+    static $list = ['a' => ['b' => ['c']]];
+
+    public static function catch(){ echo __METHOD__, PHP_EOL; }
+    private static function throw(){ echo __METHOD__, PHP_EOL; }
+    private static function self(){ echo __METHOD__, PHP_EOL; }
+}
+
+trait TraitC
+{
+    public static function exit(){ echo __METHOD__, PHP_EOL; }
+    protected static function try(){ echo __METHOD__, PHP_EOL; }
+}
+
+class Foo
+{
+    use TraitA, TraitB {
+        TraitA
+            ::
+            catch insteadof namespace\TraitB;
+        TraitA::list as public foreach;
+        TraitB::throw as public;
+        TraitB::self as public;
+    }
+
+    use TraitC {
+        try as public attempt;
+        exit as die;
+        \TraitC::exit as bye;
+        namespace\TraitC::exit as byebye;
+        TraitC
+            ::
+            exit as farewell;
+    }
+}
+
+(new Foo)->catch();
+(new Foo)->foreach();
+Foo::throw();
+Foo::self();
+var_dump(Foo::$list['a']);
+Foo::attempt();
+Foo::die();
+Foo::bye();
+Foo::byebye();
+Foo::farewell();
+
+echo "\nDone\n";
+
+--EXPECTF--
+TraitA::catch
+TraitA::list
+TraitB::throw
+TraitB::self
+array(1) {
+  ["b"]=>
+  array(1) {
+    [0]=>
+    string(1) "c"
+  }
+}
+TraitC::try
+TraitC::exit
+TraitC::exit
+TraitC::exit
+TraitC::exit
+
+Done
diff --git a/Zend/tests/grammar/semi_reserved_007.phpt \
b/Zend/tests/grammar/semi_reserved_007.phpt new file mode 100644
index 0000000..5105629
--- /dev/null
+++ b/Zend/tests/grammar/semi_reserved_007.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Edge case: self::self, self::parent, parent::self semi reserved constants access
+--FILE--
+<?php
+
+class Foo {
+    const self = "self";
+    const parent = "parent";
+    public function __construct() {
+        echo "From ", __METHOD__, ":", PHP_EOL;
+        echo self::self, PHP_EOL;
+        echo self::parent, PHP_EOL;
+    }
+}
+
+class Bar extends Foo {
+    public function __construct() {
+        parent::__construct();
+        echo "From ", __METHOD__, ":", PHP_EOL;
+        echo parent::self, PHP_EOL;
+        echo parent::parent, PHP_EOL;
+    }
+}
+
+new Bar;
+
+echo "\nDone\n";
+
+--EXPECTF--
+From Foo::__construct:
+self
+parent
+From Bar::__construct:
+self
+parent
+
+Done
\ No newline at end of file
diff --git a/Zend/tests/grammar/semi_reserved_008.phpt \
b/Zend/tests/grammar/semi_reserved_008.phpt new file mode 100644
index 0000000..43218b1
--- /dev/null
+++ b/Zend/tests/grammar/semi_reserved_008.phpt
@@ -0,0 +1,68 @@
+--TEST--
+Testing with comments around semi-reserved names (not intended to be legible)
+--FILE--
+<?php
+
+trait TraitA
+{
+    public static function list(){ echo __METHOD__, PHP_EOL; }
+    public static function /* comment */ catch(){ echo __METHOD__, PHP_EOL; }
+    private static function // comment
+        throw(){ echo __METHOD__, PHP_EOL; }
+    private static function
+    # comment
+    self(){ echo __METHOD__, PHP_EOL; }
+}
+
+trait TraitB
+{
+    public static function exit(){ echo __METHOD__, PHP_EOL; }
+    protected static function try(){ echo __METHOD__, PHP_EOL; }
+}
+
+class Foo
+{
+    use TraitA {
+        TraitA::
+            //
+            /** doc comment */
+            #
+        catch /* comment */ 
+            // comment
+            # comment
+        insteadof TraitB;
+
+        TraitA::list as public /**/ foreach;
+    }
+
+    use TraitB {
+        try /*comment*/ as public attempt;
+        exit // comment
+            as/*comment*/die; // non qualified
+        \TraitB::exit as bye; // full qualified
+        namespace\TraitB::exit #
+        as byebye; // even more full qualified
+        TraitB
+            ::
+            /**  */
+            exit as farewell; // full qualified with weird spacing
+    }
+}
+
+Foo /**/
+#
+//
+/**  */
+::
+/**/
+#
+//
+/**  */
+attempt();
+
+echo PHP_EOL, "Done", PHP_EOL;
+
+--EXPECTF--
+TraitB::try
+
+Done
diff --git a/Zend/tests/grammar/semi_reserved_009.phpt \
b/Zend/tests/grammar/semi_reserved_009.phpt new file mode 100644
index 0000000..1a7b0fc
--- /dev/null
+++ b/Zend/tests/grammar/semi_reserved_009.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Edge case: T_STRING<as> as T_STRING<?>
+--FILE--
+<?php
+
+trait TraitA
+{
+    public static function as(){ echo __METHOD__, PHP_EOL; }
+}
+
+class Foo
+{
+    use TraitA  {
+        as as try;
+    }
+}
+
+Foo::try();
+
+echo PHP_EOL, "Done", PHP_EOL;
+
+--EXPECTF--
+TraitA::as
+
+Done
diff --git a/Zend/tests/grammar/semi_reserved_010.phpt \
b/Zend/tests/grammar/semi_reserved_010.phpt new file mode 100644
index 0000000..508a786
--- /dev/null
+++ b/Zend/tests/grammar/semi_reserved_010.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Edge case: T_STRING<insteadof> insteadof T_STRING<?>
+--FILE--
+<?php
+
+trait TraitA
+{
+    public static function insteadof(){ echo __METHOD__, PHP_EOL; }
+}
+
+trait TraitB
+{
+    public static function insteadof(){ echo __METHOD__, PHP_EOL; }
+}
+
+class Foo
+{
+    use TraitA , TraitB {
+        TraitB::insteadof
+            insteadof TraitA;
+    }
+}
+
+Foo::insteadof();
+
+echo PHP_EOL, "Done", PHP_EOL;
+
+--EXPECTF--
+TraitB::insteadof
+
+Done
diff --git a/tests/basic/bug51709_1.phpt b/tests/basic/bug51709_1.phpt
deleted file mode 100644
index 3f2d544..0000000
--- a/tests/basic/bug51709_1.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-Bug #51709 (Can't use keywords as method names)
---FILE--
-<?php
-
-class foo {
-        static function for() {
-                echo "1";
-        }
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-Parse error: syntax error, unexpected %s, expecting %s in %sbug51709_1.php on line \
                %d
diff --git a/tests/basic/bug51709_2.phpt b/tests/basic/bug51709_2.phpt
deleted file mode 100644
index bb1f91c..0000000
--- a/tests/basic/bug51709_2.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-Bug #51709 (Can't use keywords as method names)
---FILE--
-<?php
-
-class foo {
-        static function goto() {
-                echo "1";
-        }
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-Parse error: syntax error, unexpected %s, expecting %s in %sbug51709_2.php on line \
%d



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic