Skip to content

Commit

Permalink
Use ast\get_metadata() in AST dumper
Browse files Browse the repository at this point in the history
  • Loading branch information
nikic committed Jul 29, 2017
1 parent 8f4a033 commit a37c132
Showing 1 changed file with 15 additions and 131 deletions.
146 changes: 15 additions & 131 deletions util.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,139 +10,23 @@ function get_flag_info() : array {
return [$exclusive, $combinable];
}

$modifiers = [
flags\MODIFIER_PUBLIC => 'MODIFIER_PUBLIC',
flags\MODIFIER_PROTECTED => 'MODIFIER_PROTECTED',
flags\MODIFIER_PRIVATE => 'MODIFIER_PRIVATE',
flags\MODIFIER_STATIC => 'MODIFIER_STATIC',
flags\MODIFIER_ABSTRACT => 'MODIFIER_ABSTRACT',
flags\MODIFIER_FINAL => 'MODIFIER_FINAL',
flags\FUNC_RETURNS_REF => 'FUNC_RETURNS_REF',
flags\FUNC_GENERATOR => 'FUNC_GENERATOR',
];
$types = [
flags\TYPE_NULL => 'TYPE_NULL',
flags\TYPE_BOOL => 'TYPE_BOOL',
flags\TYPE_LONG => 'TYPE_LONG',
flags\TYPE_DOUBLE => 'TYPE_DOUBLE',
flags\TYPE_STRING => 'TYPE_STRING',
flags\TYPE_ARRAY => 'TYPE_ARRAY',
flags\TYPE_OBJECT => 'TYPE_OBJECT',
flags\TYPE_CALLABLE => 'TYPE_CALLABLE',
flags\TYPE_VOID => 'TYPE_VOID',
flags\TYPE_ITERABLE => 'TYPE_ITERABLE',
];
$useTypes = [
flags\USE_NORMAL => 'USE_NORMAL',
flags\USE_FUNCTION => 'USE_FUNCTION',
flags\USE_CONST => 'USE_CONST',
];
$sharedBinaryOps = [
flags\BINARY_BITWISE_OR => 'BINARY_BITWISE_OR',
flags\BINARY_BITWISE_AND => 'BINARY_BITWISE_AND',
flags\BINARY_BITWISE_XOR => 'BINARY_BITWISE_XOR',
flags\BINARY_CONCAT => 'BINARY_CONCAT',
flags\BINARY_ADD => 'BINARY_ADD',
flags\BINARY_SUB => 'BINARY_SUB',
flags\BINARY_MUL => 'BINARY_MUL',
flags\BINARY_DIV => 'BINARY_DIV',
flags\BINARY_MOD => 'BINARY_MOD',
flags\BINARY_POW => 'BINARY_POW',
flags\BINARY_SHIFT_LEFT => 'BINARY_SHIFT_LEFT',
flags\BINARY_SHIFT_RIGHT => 'BINARY_SHIFT_RIGHT',
];
foreach (ast\get_metadata() as $data) {
if (empty($data['flags'])) {
continue;
}

$exclusive = [
ast\AST_NAME => [
flags\NAME_FQ => 'NAME_FQ',
flags\NAME_NOT_FQ => 'NAME_NOT_FQ',
flags\NAME_RELATIVE => 'NAME_RELATIVE',
],
ast\AST_CLASS => [
flags\CLASS_ABSTRACT => 'CLASS_ABSTRACT',
flags\CLASS_FINAL => 'CLASS_FINAL',
flags\CLASS_TRAIT => 'CLASS_TRAIT',
flags\CLASS_INTERFACE => 'CLASS_INTERFACE',
flags\CLASS_ANONYMOUS => 'CLASS_ANONYMOUS',
],
ast\AST_TYPE => $types,
ast\AST_CAST => $types,
ast\AST_UNARY_OP => [
flags\UNARY_BOOL_NOT => 'UNARY_BOOL_NOT',
flags\UNARY_BITWISE_NOT => 'UNARY_BITWISE_NOT',
flags\UNARY_MINUS => 'UNARY_MINUS',
flags\UNARY_PLUS => 'UNARY_PLUS',
flags\UNARY_SILENCE => 'UNARY_SILENCE',
],
ast\AST_BINARY_OP => $sharedBinaryOps + [
flags\BINARY_BOOL_AND => 'BINARY_BOOL_AND',
flags\BINARY_BOOL_OR => 'BINARY_BOOL_OR',
flags\BINARY_BOOL_XOR => 'BINARY_BOOL_XOR',
flags\BINARY_IS_IDENTICAL => 'BINARY_IS_IDENTICAL',
flags\BINARY_IS_NOT_IDENTICAL => 'BINARY_IS_NOT_IDENTICAL',
flags\BINARY_IS_EQUAL => 'BINARY_IS_EQUAL',
flags\BINARY_IS_NOT_EQUAL => 'BINARY_IS_NOT_EQUAL',
flags\BINARY_IS_SMALLER => 'BINARY_IS_SMALLER',
flags\BINARY_IS_SMALLER_OR_EQUAL => 'BINARY_IS_SMALLER_OR_EQUAL',
flags\BINARY_IS_GREATER => 'BINARY_IS_GREATER',
flags\BINARY_IS_GREATER_OR_EQUAL => 'BINARY_IS_GREATER_OR_EQUAL',
flags\BINARY_SPACESHIP => 'BINARY_SPACESHIP',
flags\BINARY_COALESCE => 'BINARY_COALESCE',
],
ast\AST_ASSIGN_OP => $sharedBinaryOps + [
// Old version 10 flags
flags\ASSIGN_BITWISE_OR => 'ASSIGN_BITWISE_OR',
flags\ASSIGN_BITWISE_AND => 'ASSIGN_BITWISE_AND',
flags\ASSIGN_BITWISE_XOR => 'ASSIGN_BITWISE_XOR',
flags\ASSIGN_CONCAT => 'ASSIGN_CONCAT',
flags\ASSIGN_ADD => 'ASSIGN_ADD',
flags\ASSIGN_SUB => 'ASSIGN_SUB',
flags\ASSIGN_MUL => 'ASSIGN_MUL',
flags\ASSIGN_DIV => 'ASSIGN_DIV',
flags\ASSIGN_MOD => 'ASSIGN_MOD',
flags\ASSIGN_POW => 'ASSIGN_POW',
flags\ASSIGN_SHIFT_LEFT => 'ASSIGN_SHIFT_LEFT',
flags\ASSIGN_SHIFT_RIGHT => 'ASSIGN_SHIFT_RIGHT',
],
ast\AST_MAGIC_CONST => [
flags\MAGIC_LINE => 'MAGIC_LINE',
flags\MAGIC_FILE => 'MAGIC_FILE',
flags\MAGIC_DIR => 'MAGIC_DIR',
flags\MAGIC_NAMESPACE => 'MAGIC_NAMESPACE',
flags\MAGIC_FUNCTION => 'MAGIC_FUNCTION',
flags\MAGIC_METHOD => 'MAGIC_METHOD',
flags\MAGIC_CLASS => 'MAGIC_CLASS',
flags\MAGIC_TRAIT => 'MAGIC_TRAIT',
],
ast\AST_USE => $useTypes,
ast\AST_GROUP_USE => $useTypes,
ast\AST_USE_ELEM => $useTypes,
ast\AST_INCLUDE_OR_EVAL => [
flags\EXEC_EVAL => 'EXEC_EVAL',
flags\EXEC_INCLUDE => 'EXEC_INCLUDE',
flags\EXEC_INCLUDE_ONCE => 'EXEC_INCLUDE_ONCE',
flags\EXEC_REQUIRE => 'EXEC_REQUIRE',
flags\EXEC_REQUIRE_ONCE => 'EXEC_REQUIRE_ONCE',
],
ast\AST_ARRAY => [
flags\ARRAY_SYNTAX_LIST => 'ARRAY_SYNTAX_LIST',
flags\ARRAY_SYNTAX_LONG => 'ARRAY_SYNTAX_LONG',
flags\ARRAY_SYNTAX_SHORT => 'ARRAY_SYNTAX_SHORT',
],
ast\AST_CLOSURE_VAR => [
flags\CLOSURE_USE_REF => 'CLOSURE_USE_REF',
],
];
$flagMap = [];
foreach ($data['flags'] as $fullName) {
$shortName = substr($fullName, strrpos($fullName, '\\') + 1);
$flagMap[constant($fullName)] = $shortName;
}

$combinable = [
ast\AST_PARAM => [
flags\PARAM_REF => 'PARAM_REF',
flags\PARAM_VARIADIC => 'PARAM_VARIADIC',
],
];
$combinable[ast\AST_METHOD] = $combinable[ast\AST_FUNC_DECL] = $combinable[ast\AST_CLOSURE]
= $combinable[ast\AST_PROP_DECL] = $combinable[ast\AST_CLASS_CONST_DECL]
= $combinable[ast\AST_TRAIT_ALIAS] = $modifiers;
if ($data['flagsCombinable']) {
$combinable[$data['kind']] = $flagMap;
} else {
$exclusive[$data['kind']] = $flagMap;
}
}

return [$exclusive, $combinable];
}
Expand Down

0 comments on commit a37c132

Please sign in to comment.