@@ -23,7 +23,7 @@ module.exports = {
2323 this . expect ( this . tok . T_NAMESPACE ) && this . next ( ) ;
2424 let name ;
2525
26- if ( this . token == "{" ) {
26+ if ( this . token === "{" ) {
2727 name = {
2828 name : [ "" ] ,
2929 } ;
@@ -32,12 +32,12 @@ module.exports = {
3232 }
3333 this . currentNamespace = name ;
3434
35- if ( this . token == ";" ) {
35+ if ( this . token === ";" ) {
3636 this . currentNamespace = name ;
3737 body = this . next ( ) . read_top_statements ( ) ;
3838 this . expect ( this . EOF ) ;
3939 return result ( name . name , body , false ) ;
40- } else if ( this . token == "{" ) {
40+ } else if ( this . token === "{" ) {
4141 this . currentNamespace = name ;
4242 body = this . next ( ) . read_top_statements ( ) ;
4343 this . expect ( "}" ) && this . next ( ) ;
@@ -49,12 +49,6 @@ module.exports = {
4949 body . push ( this . node ( "noop" ) ( ) ) ;
5050 }
5151 return result ( name . name , body , true ) ;
52- } else if ( this . token === "(" ) {
53- // @fixme after merging #478
54- name . resolution = this . ast . reference . RELATIVE_NAME ;
55- name . name = name . name . substring ( 1 ) ;
56- result . destroy ( ) ;
57- return this . node ( "call" ) ( name , this . read_argument_list ( ) ) ;
5852 } else {
5953 this . error ( [ "{" , ";" ] ) ;
6054 // graceful mode :
@@ -74,28 +68,38 @@ module.exports = {
7468 */
7569 read_namespace_name : function ( resolveReference ) {
7670 const result = this . node ( ) ;
77- let relative = false ;
78- if ( this . token === this . tok . T_NAMESPACE ) {
79- this . next ( ) . expect ( this . tok . T_NS_SEPARATOR ) && this . next ( ) ;
80- relative = true ;
71+ let resolution ;
72+ let name = this . text ( ) ;
73+ switch ( this . token ) {
74+ case this . tok . T_NAME_RELATIVE :
75+ resolution = this . ast . name . RELATIVE_NAME ;
76+ name = name . replace ( / ^ n a m e s p a c e \\ / , "" ) ;
77+ break ;
78+ case this . tok . T_NAME_QUALIFIED :
79+ resolution = this . ast . name . QUALIFIED_NAME ;
80+ break ;
81+ case this . tok . T_NAME_FULLY_QUALIFIED :
82+ resolution = this . ast . name . FULL_QUALIFIED_NAME ;
83+ break ;
84+ default :
85+ resolution = this . ast . name . UNQUALIFIED_NAME ;
86+ if ( ! this . expect ( this . tok . T_STRING ) ) {
87+ // graceful mode
88+ return result ( "name" , "" , this . ast . name . FULL_QUALIFIED_NAME ) ;
89+ }
8190 }
82- const names = this . read_list (
83- this . tok . T_STRING ,
84- this . tok . T_NS_SEPARATOR ,
85- true
86- ) ;
87- if (
88- ! relative &&
89- names . length === 1 &&
90- ( resolveReference || this . token !== "(" )
91- ) {
92- if ( names [ 0 ] . toLowerCase ( ) === "parent" ) {
93- return result ( "parentreference" , names [ 0 ] ) ;
94- } else if ( names [ 0 ] . toLowerCase ( ) === "self" ) {
95- return result ( "selfreference" , names [ 0 ] ) ;
91+
92+ this . next ( ) ;
93+
94+ if ( resolveReference || this . token !== "(" ) {
95+ if ( name . toLowerCase ( ) === "parent" ) {
96+ return result ( "parentreference" , name ) ;
97+ } else if ( name . toLowerCase ( ) === "self" ) {
98+ return result ( "selfreference" , name ) ;
9699 }
97100 }
98- return result ( "name" , names , relative ) ;
101+
102+ return result ( "name" , name , resolution ) ;
99103 } ,
100104 /*
101105 * Reads a use statement
@@ -172,6 +176,9 @@ module.exports = {
172176 break ;
173177 }
174178 } else if (
179+ this . token !== this . tok . T_NAME_RELATIVE &&
180+ this . token !== this . tok . T_NAME_QUALIFIED &&
181+ this . token !== this . tok . T_NAME_FULLY_QUALIFIED &&
175182 this . token !== this . tok . T_STRING &&
176183 this . token !== this . tok . T_NS_SEPARATOR
177184 ) {
0 commit comments