1
0
mirror of https://github.com/danog/PHP-Parser.git synced 2024-12-11 17:09:41 +01:00

Represent builtin types using Identifier as well

This commit is contained in:
Nikita Popov 2016-12-22 22:23:30 +01:00
parent 6bcc6c31dd
commit 122f449960
6 changed files with 58 additions and 11 deletions

View File

@ -380,8 +380,8 @@ parameter:
type: type:
name { $$ = $1; } name { $$ = $1; }
| T_ARRAY { $$ = 'array'; } | T_ARRAY { $$ = makeIdent('array'); }
| T_CALLABLE { $$ = 'callable'; } | T_CALLABLE { $$ = makeIdent('callable'); }
; ;
optional_param_type: optional_param_type:

View File

@ -387,8 +387,8 @@ type_expr:
type: type:
name { $$ = $this->handleBuiltinTypes($1); } name { $$ = $this->handleBuiltinTypes($1); }
| T_ARRAY { $$ = 'array'; } | T_ARRAY { $$ = makeIdent('array'); }
| T_CALLABLE { $$ = 'callable'; } | T_CALLABLE { $$ = makeIdent('callable'); }
; ;
optional_param_type: optional_param_type:

View File

@ -1819,11 +1819,11 @@ class Php5 extends \PhpParser\ParserAbstract
} }
protected function reduceRule227() { protected function reduceRule227() {
$this->semValue = 'array'; $this->semValue = ($this->useIdentifierNodes ? new Node\Identifier('array', $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes) : 'array');
} }
protected function reduceRule228() { protected function reduceRule228() {
$this->semValue = 'callable'; $this->semValue = ($this->useIdentifierNodes ? new Node\Identifier('callable', $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes) : 'callable');
} }
protected function reduceRule229() { protected function reduceRule229() {

View File

@ -1726,11 +1726,11 @@ class Php7 extends \PhpParser\ParserAbstract
} }
protected function reduceRule228() { protected function reduceRule228() {
$this->semValue = 'array'; $this->semValue = ($this->useIdentifierNodes ? new Node\Identifier('array', $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes) : 'array');
} }
protected function reduceRule229() { protected function reduceRule229() {
$this->semValue = 'callable'; $this->semValue = ($this->useIdentifierNodes ? new Node\Identifier('callable', $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes) : 'callable');
} }
protected function reduceRule230() { protected function reduceRule230() {

View File

@ -539,7 +539,13 @@ abstract class ParserAbstract implements Parser
} }
$lowerName = strtolower($name->toString()); $lowerName = strtolower($name->toString());
return isset($scalarTypes[$lowerName]) ? $lowerName : $name; if (!isset($scalarTypes[$lowerName])) {
return $name;
}
return $this->useIdentifierNodes
? new Node\Identifier($lowerName, $name->getAttributes())
: $lowerName;
} }
protected static $specialNames = array( protected static $specialNames = array(

View File

@ -16,7 +16,7 @@ class Foo {
interface Bar {} interface Bar {}
trait Baz {} trait Baz {}
function foo() {} function foo(array $x) : callable {}
const FOO = 1; const FOO = 1;
@ -148,8 +148,19 @@ array(
name: foo name: foo
) )
params: array( params: array(
0: Param(
type: Identifier(
name: array
)
byRef: false
variadic: false
name: x
default: null
)
)
returnType: Identifier(
name: callable
) )
returnType: null
stmts: array( stmts: array(
) )
) )
@ -244,3 +255,33 @@ array(
name: foo name: foo
) )
) )
-----
<?php
function foo(int $bar) : bool {}
-----
!!php7,ident
array(
0: Stmt_Function(
byRef: false
name: Identifier(
name: foo
)
params: array(
0: Param(
type: Identifier(
name: int
)
byRef: false
variadic: false
name: bar
default: null
)
)
returnType: Identifier(
name: bool
)
stmts: array(
)
)
)