php-parser/test/code/parser/semiReserved.test
Nikita Popov a6846e3b71 Always use Identifier nodes
The parser will now always generate Identifier nodes (for
non-namespaced identifiers). This obsoletes the useIdentifierNodes
parser option.

Node constructors still accepts strings and will implicitly create
an Identifier wrapper. Identifier implement __toString(), so that
outside of strict-mode many things continue to work without changes.
2017-04-28 20:57:32 +02:00

483 lines
13 KiB
Plaintext

Valid usages of reserved keywords as identifiers
-----
<?php
class Test {
function array() {}
function public() {}
static function list() {}
static function protected() {}
public $class;
public $private;
const TRAIT = 3, FINAL = 4;
const __CLASS__ = 1, __TRAIT__ = 2, __FUNCTION__ = 3, __METHOD__ = 4, __LINE__ = 5,
__FILE__ = 6, __DIR__ = 7, __NAMESPACE__ = 8;
// __halt_compiler does not work
}
$t = new Test;
$t->array();
$t->public();
Test::list();
Test::protected();
$t->class;
$t->private;
Test::TRAIT;
Test::FINAL;
class Foo {
use TraitA, TraitB {
TraitA::catch insteadof namespace\TraitB;
TraitA::list as foreach;
TraitB::throw as protected public;
TraitB::self as protected;
exit as die;
\TraitC::exit as bye;
namespace\TraitC::exit as byebye;
TraitA::
//
/** doc comment */
#
catch /* comment */
// comment
# comment
insteadof TraitB;
}
}
-----
array(
0: Stmt_Class(
flags: 0
name: Identifier(
name: Test
)
extends: null
implements: array(
)
stmts: array(
0: Stmt_ClassMethod(
flags: 0
byRef: false
name: Identifier(
name: array
)
params: array(
)
returnType: null
stmts: array(
)
)
1: Stmt_ClassMethod(
flags: 0
byRef: false
name: Identifier(
name: public
)
params: array(
)
returnType: null
stmts: array(
)
)
2: Stmt_ClassMethod(
flags: MODIFIER_STATIC (8)
byRef: false
name: Identifier(
name: list
)
params: array(
)
returnType: null
stmts: array(
)
)
3: Stmt_ClassMethod(
flags: MODIFIER_STATIC (8)
byRef: false
name: Identifier(
name: protected
)
params: array(
)
returnType: null
stmts: array(
)
)
4: Stmt_Property(
flags: MODIFIER_PUBLIC (1)
props: array(
0: Stmt_PropertyProperty(
name: VarLikeIdentifier(
name: class
)
default: null
)
)
)
5: Stmt_Property(
flags: MODIFIER_PUBLIC (1)
props: array(
0: Stmt_PropertyProperty(
name: VarLikeIdentifier(
name: private
)
default: null
)
)
)
6: Stmt_ClassConst(
flags: 0
consts: array(
0: Const(
name: Identifier(
name: TRAIT
)
value: Scalar_LNumber(
value: 3
)
)
1: Const(
name: Identifier(
name: FINAL
)
value: Scalar_LNumber(
value: 4
)
)
)
)
7: Stmt_ClassConst(
flags: 0
consts: array(
0: Const(
name: Identifier(
name: __CLASS__
)
value: Scalar_LNumber(
value: 1
)
)
1: Const(
name: Identifier(
name: __TRAIT__
)
value: Scalar_LNumber(
value: 2
)
)
2: Const(
name: Identifier(
name: __FUNCTION__
)
value: Scalar_LNumber(
value: 3
)
)
3: Const(
name: Identifier(
name: __METHOD__
)
value: Scalar_LNumber(
value: 4
)
)
4: Const(
name: Identifier(
name: __LINE__
)
value: Scalar_LNumber(
value: 5
)
)
5: Const(
name: Identifier(
name: __FILE__
)
value: Scalar_LNumber(
value: 6
)
)
6: Const(
name: Identifier(
name: __DIR__
)
value: Scalar_LNumber(
value: 7
)
)
7: Const(
name: Identifier(
name: __NAMESPACE__
)
value: Scalar_LNumber(
value: 8
)
)
)
)
)
)
1: Stmt_Expression(
expr: Expr_Assign(
var: Expr_Variable(
name: t
)
expr: Expr_New(
class: Name(
parts: array(
0: Test
)
)
args: array(
)
)
)
)
2: Stmt_Expression(
expr: Expr_MethodCall(
var: Expr_Variable(
name: t
)
name: Identifier(
name: array
)
args: array(
)
)
)
3: Stmt_Expression(
expr: Expr_MethodCall(
var: Expr_Variable(
name: t
)
name: Identifier(
name: public
)
args: array(
)
)
)
4: Stmt_Expression(
expr: Expr_StaticCall(
class: Name(
parts: array(
0: Test
)
)
name: Identifier(
name: list
)
args: array(
)
)
)
5: Stmt_Expression(
expr: Expr_StaticCall(
class: Name(
parts: array(
0: Test
)
)
name: Identifier(
name: protected
)
args: array(
)
)
)
6: Stmt_Expression(
expr: Expr_PropertyFetch(
var: Expr_Variable(
name: t
)
name: Identifier(
name: class
)
)
)
7: Stmt_Expression(
expr: Expr_PropertyFetch(
var: Expr_Variable(
name: t
)
name: Identifier(
name: private
)
)
)
8: Stmt_Expression(
expr: Expr_ClassConstFetch(
class: Name(
parts: array(
0: Test
)
)
name: Identifier(
name: TRAIT
)
)
)
9: Stmt_Expression(
expr: Expr_ClassConstFetch(
class: Name(
parts: array(
0: Test
)
)
name: Identifier(
name: FINAL
)
)
)
10: Stmt_Class(
flags: 0
name: Identifier(
name: Foo
)
extends: null
implements: array(
)
stmts: array(
0: Stmt_TraitUse(
traits: array(
0: Name(
parts: array(
0: TraitA
)
)
1: Name(
parts: array(
0: TraitB
)
)
)
adaptations: array(
0: Stmt_TraitUseAdaptation_Precedence(
trait: Name(
parts: array(
0: TraitA
)
)
method: Identifier(
name: catch
)
insteadof: array(
0: Name_Relative(
parts: array(
0: TraitB
)
)
)
)
1: Stmt_TraitUseAdaptation_Alias(
trait: Name(
parts: array(
0: TraitA
)
)
method: Identifier(
name: list
)
newModifier: null
newName: Identifier(
name: foreach
)
)
2: Stmt_TraitUseAdaptation_Alias(
trait: Name(
parts: array(
0: TraitB
)
)
method: Identifier(
name: throw
)
newModifier: MODIFIER_PROTECTED (2)
newName: Identifier(
name: public
)
)
3: Stmt_TraitUseAdaptation_Alias(
trait: Name(
parts: array(
0: TraitB
)
)
method: Identifier(
name: self
)
newModifier: MODIFIER_PROTECTED (2)
newName: null
)
4: Stmt_TraitUseAdaptation_Alias(
trait: null
method: Identifier(
name: exit
)
newModifier: null
newName: Identifier(
name: die
)
)
5: Stmt_TraitUseAdaptation_Alias(
trait: Name_FullyQualified(
parts: array(
0: TraitC
)
)
method: Identifier(
name: exit
)
newModifier: null
newName: Identifier(
name: bye
)
)
6: Stmt_TraitUseAdaptation_Alias(
trait: Name_Relative(
parts: array(
0: TraitC
)
)
method: Identifier(
name: exit
)
newModifier: null
newName: Identifier(
name: byebye
)
)
7: Stmt_TraitUseAdaptation_Precedence(
trait: Name(
parts: array(
0: TraitA
)
)
method: Identifier(
name: catch
comments: array(
0: //
1: /** doc comment */
2: #
)
)
insteadof: array(
0: Name(
parts: array(
0: TraitB
)
)
)
)
)
)
)
)
)