1--TEST-- 2AST metadata 3--FILE-- 4<?php 5 6$metadata = ast\get_metadata(); 7foreach ($metadata as $data) { 8 $flags = []; 9 foreach ($data->flags as $flag) { 10 $flags[] = substr($flag, strrpos($flag, '\\') + 1); 11 } 12 $metadataHasFlags = count($flags) > 0; 13 $kindUsesFlags = ast\kind_uses_flags($data->kind); 14 if ($metadataHasFlags != $kindUsesFlags) { 15 echo "kind_uses_flags for $data->name is unexpectedly " . var_export($kindUsesFlags, true) . "\n"; 16 } 17 18 echo "$data->name: "; 19 if ($data->flagsCombinable) { 20 echo "(combinable) "; 21 } 22 echo "[", implode(", ", $flags), "]\n"; 23} 24 25// NOTE: AST_PARAM has overlapping flag values for MODIFIER_PUBLIC and PARAM_REF in php 7.4. 26// To work around this, MODIFIER_* were omitted from get_metadata in 7.4 and older. 27?> 28--EXPECT-- 29AST_ARG_LIST: [] 30AST_LIST: [] 31AST_ARRAY: [ARRAY_SYNTAX_LIST, ARRAY_SYNTAX_LONG, ARRAY_SYNTAX_SHORT] 32AST_ENCAPS_LIST: [] 33AST_EXPR_LIST: [] 34AST_STMT_LIST: [] 35AST_IF: [] 36AST_SWITCH_LIST: [] 37AST_CATCH_LIST: [] 38AST_PARAM_LIST: [] 39AST_CLOSURE_USES: [] 40AST_PROP_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY] 41AST_CONST_DECL: [] 42AST_CLASS_CONST_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY] 43AST_NAME_LIST: [] 44AST_TRAIT_ADAPTATIONS: [] 45AST_USE: [USE_NORMAL, USE_FUNCTION, USE_CONST] 46AST_TYPE_UNION: [] 47AST_TYPE_INTERSECTION: [] 48AST_ATTRIBUTE_LIST: [] 49AST_ATTRIBUTE_GROUP: [] 50AST_MATCH_ARM_LIST: [] 51AST_NAME: [NAME_FQ, NAME_NOT_FQ, NAME_RELATIVE] 52AST_CLOSURE_VAR: [CLOSURE_USE_REF] 53AST_NULLABLE_TYPE: [] 54AST_FUNC_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR] 55AST_CLOSURE: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR] 56AST_METHOD: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR] 57AST_ARROW_FUNC: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR] 58AST_CLASS: (combinable) [CLASS_ABSTRACT, CLASS_FINAL, CLASS_TRAIT, CLASS_INTERFACE, CLASS_ANONYMOUS, CLASS_ENUM, CLASS_READONLY] 59AST_MAGIC_CONST: [MAGIC_LINE, MAGIC_FILE, MAGIC_DIR, MAGIC_NAMESPACE, MAGIC_FUNCTION, MAGIC_METHOD, MAGIC_CLASS, MAGIC_TRAIT] 60AST_TYPE: [TYPE_NULL, TYPE_FALSE, TYPE_TRUE, TYPE_BOOL, TYPE_LONG, TYPE_DOUBLE, TYPE_STRING, TYPE_ARRAY, TYPE_OBJECT, TYPE_CALLABLE, TYPE_VOID, TYPE_ITERABLE, TYPE_STATIC, TYPE_MIXED, TYPE_NEVER] 61AST_CALLABLE_CONVERT: [] 62AST_VAR: (combinable) [ENCAPS_VAR_DOLLAR_CURLY_VAR_VAR, ENCAPS_VAR_DOLLAR_CURLY] 63AST_CONST: [] 64AST_UNPACK: [] 65AST_CAST: [TYPE_NULL, TYPE_FALSE, TYPE_TRUE, TYPE_BOOL, TYPE_LONG, TYPE_DOUBLE, TYPE_STRING, TYPE_ARRAY, TYPE_OBJECT, TYPE_CALLABLE, TYPE_VOID, TYPE_ITERABLE, TYPE_STATIC, TYPE_MIXED, TYPE_NEVER] 66AST_EMPTY: [] 67AST_ISSET: [] 68AST_SHELL_EXEC: [] 69AST_CLONE: [] 70AST_EXIT: [] 71AST_PRINT: [] 72AST_INCLUDE_OR_EVAL: [EXEC_EVAL, EXEC_INCLUDE, EXEC_INCLUDE_ONCE, EXEC_REQUIRE, EXEC_REQUIRE_ONCE] 73AST_UNARY_OP: [UNARY_BOOL_NOT, UNARY_BITWISE_NOT, UNARY_MINUS, UNARY_PLUS, UNARY_SILENCE] 74AST_PRE_INC: [] 75AST_PRE_DEC: [] 76AST_POST_INC: [] 77AST_POST_DEC: [] 78AST_YIELD_FROM: [] 79AST_GLOBAL: [] 80AST_UNSET: [] 81AST_RETURN: [] 82AST_LABEL: [] 83AST_REF: [] 84AST_HALT_COMPILER: [] 85AST_ECHO: [] 86AST_THROW: [] 87AST_GOTO: [] 88AST_BREAK: [] 89AST_CONTINUE: [] 90AST_CLASS_NAME: [] 91AST_CLASS_CONST_GROUP: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY] 92AST_DIM: (combinable) [DIM_ALTERNATIVE_SYNTAX, ENCAPS_VAR_DOLLAR_CURLY] 93AST_PROP: [] 94AST_NULLSAFE_PROP: [] 95AST_STATIC_PROP: [] 96AST_CALL: [] 97AST_CLASS_CONST: [] 98AST_ASSIGN: [] 99AST_ASSIGN_REF: [] 100AST_ASSIGN_OP: [BINARY_BITWISE_OR, BINARY_BITWISE_AND, BINARY_BITWISE_XOR, BINARY_CONCAT, BINARY_ADD, BINARY_SUB, BINARY_MUL, BINARY_DIV, BINARY_MOD, BINARY_POW, BINARY_SHIFT_LEFT, BINARY_SHIFT_RIGHT, BINARY_COALESCE] 101AST_BINARY_OP: [BINARY_BITWISE_OR, BINARY_BITWISE_AND, BINARY_BITWISE_XOR, BINARY_CONCAT, BINARY_ADD, BINARY_SUB, BINARY_MUL, BINARY_DIV, BINARY_MOD, BINARY_POW, BINARY_SHIFT_LEFT, BINARY_SHIFT_RIGHT, BINARY_COALESCE, BINARY_BOOL_AND, BINARY_BOOL_OR, BINARY_BOOL_XOR, BINARY_IS_IDENTICAL, BINARY_IS_NOT_IDENTICAL, BINARY_IS_EQUAL, BINARY_IS_NOT_EQUAL, BINARY_IS_SMALLER, BINARY_IS_SMALLER_OR_EQUAL, BINARY_IS_GREATER, BINARY_IS_GREATER_OR_EQUAL, BINARY_SPACESHIP] 102AST_ARRAY_ELEM: [ARRAY_ELEM_REF] 103AST_NEW: [] 104AST_INSTANCEOF: [] 105AST_YIELD: [] 106AST_STATIC: [] 107AST_WHILE: [] 108AST_DO_WHILE: [] 109AST_IF_ELEM: [] 110AST_SWITCH: [] 111AST_SWITCH_CASE: [] 112AST_DECLARE: [] 113AST_PROP_ELEM: [] 114AST_PROP_GROUP: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY] 115AST_CONST_ELEM: [] 116AST_USE_TRAIT: [] 117AST_TRAIT_PRECEDENCE: [] 118AST_METHOD_REFERENCE: [] 119AST_NAMESPACE: [] 120AST_USE_ELEM: [USE_NORMAL, USE_FUNCTION, USE_CONST] 121AST_TRAIT_ALIAS: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY] 122AST_GROUP_USE: [USE_NORMAL, USE_FUNCTION, USE_CONST] 123AST_ATTRIBUTE: [] 124AST_MATCH: [] 125AST_MATCH_ARM: [] 126AST_NAMED_ARG: [] 127AST_METHOD_CALL: [] 128AST_NULLSAFE_METHOD_CALL: [] 129AST_STATIC_CALL: [] 130AST_CONDITIONAL: (combinable) [PARENTHESIZED_CONDITIONAL] 131AST_TRY: [] 132AST_CATCH: [] 133AST_FOR: [] 134AST_FOREACH: [] 135AST_ENUM_CASE: [] 136AST_PARAM: (combinable) [PARAM_REF, PARAM_VARIADIC, PARAM_MODIFIER_PUBLIC, PARAM_MODIFIER_PROTECTED, PARAM_MODIFIER_PRIVATE]