in codegen/node_from_json.hack [9:224]
function node_from_json_unwrapped(
dict<arraykey, mixed> $json,
string $file,
int $offset,
string $source,
string $type_hint,
): ?HHAST\Node {
$kind = $json['kind'] as string;
if ($kind === 'missing') {
return null;
}
if ($kind === 'token') {
return HHAST\Token::fromJSON(
$json['token'] as dict<_, _>,
$file,
$offset,
$source,
$type_hint,
);
}
$kind_to_class = dict[
'list' => HHAST\NodeList::class,
'list_item' => HHAST\ListItem::class,
'delimited_comment' => HHAST\DelimitedComment::class,
'end_of_line' => HHAST\EndOfLine::class,
'extra_token_error' => HHAST\ExtraTokenError::class,
'fall_through' => HHAST\FallThrough::class,
'fix_me' => HHAST\FixMe::class,
'ignore_error' => HHAST\IgnoreError::class,
'single_line_comment' => HHAST\SingleLineComment::class,
'whitespace' => HHAST\WhiteSpace::class,
'alias_declaration' => HHAST\AliasDeclaration::class,
'anonymous_class' => HHAST\AnonymousClass::class,
'anonymous_function' => HHAST\AnonymousFunction::class,
'anonymous_function_use_clause' => HHAST\AnonymousFunctionUseClause::class,
'as_expression' => HHAST\AsExpression::class,
'attribute' => HHAST\Attribute::class,
'attribute_specification' => HHAST\AttributeSpecification::class,
'attributized_specifier' => HHAST\AttributizedSpecifier::class,
'awaitable_creation_expression' => HHAST\AwaitableCreationExpression::class,
'binary_expression' => HHAST\BinaryExpression::class,
'braced_expression' => HHAST\BracedExpression::class,
'break_statement' => HHAST\BreakStatement::class,
'case_label' => HHAST\CaseLabel::class,
'cast_expression' => HHAST\CastExpression::class,
'catch_clause' => HHAST\CatchClause::class,
'classish_body' => HHAST\ClassishBody::class,
'classish_declaration' => HHAST\ClassishDeclaration::class,
'classname_type_specifier' => HHAST\ClassnameTypeSpecifier::class,
'closure_parameter_type_specifier' =>
HHAST\ClosureParameterTypeSpecifier::class,
'closure_type_specifier' => HHAST\ClosureTypeSpecifier::class,
'collection_literal_expression' => HHAST\CollectionLiteralExpression::class,
'compound_statement' => HHAST\CompoundStatement::class,
'concurrent_statement' => HHAST\ConcurrentStatement::class,
'conditional_expression' => HHAST\ConditionalExpression::class,
'const_declaration' => HHAST\ConstDeclaration::class,
'constant_declarator' => HHAST\ConstantDeclarator::class,
'constructor_call' => HHAST\ConstructorCall::class,
'context_alias_declaration' => HHAST\ContextAliasDeclaration::class,
'context_const_declaration' => HHAST\ContextConstDeclaration::class,
'context_constraint' => HHAST\ContextConstraint::class,
'contexts' => HHAST\Contexts::class,
'continue_statement' => HHAST\ContinueStatement::class,
'darray_intrinsic_expression' => HHAST\DarrayIntrinsicExpression::class,
'darray_type_specifier' => HHAST\DarrayTypeSpecifier::class,
'decorated_expression' => HHAST\DecoratedExpression::class,
'default_label' => HHAST\DefaultLabel::class,
'dictionary_intrinsic_expression' =>
HHAST\DictionaryIntrinsicExpression::class,
'dictionary_type_specifier' => HHAST\DictionaryTypeSpecifier::class,
'do_statement' => HHAST\DoStatement::class,
'et_splice_expression' => HHAST\ETSpliceExpression::class,
'echo_statement' => HHAST\EchoStatement::class,
'element_initializer' => HHAST\ElementInitializer::class,
'else_clause' => HHAST\ElseClause::class,
'elseif_clause' => HHAST\ElseifClause::class,
'embedded_braced_expression' => HHAST\EmbeddedBracedExpression::class,
'embedded_member_selection_expression' =>
HHAST\EmbeddedMemberSelectionExpression::class,
'embedded_subscript_expression' => HHAST\EmbeddedSubscriptExpression::class,
'end_of_file' => HHAST\EndOfFile::class,
'enum_class_declaration' => HHAST\EnumClassDeclaration::class,
'enum_class_enumerator' => HHAST\EnumClassEnumerator::class,
'enum_class_label' => HHAST\EnumClassLabelExpression::class,
'enum_declaration' => HHAST\EnumDeclaration::class,
'enum_use' => HHAST\EnumUse::class,
'enumerator' => HHAST\Enumerator::class,
'error' => HHAST\ErrorSyntax::class,
'eval_expression' => HHAST\EvalExpression::class,
'expression_statement' => HHAST\ExpressionStatement::class,
'field_initializer' => HHAST\FieldInitializer::class,
'field_specifier' => HHAST\FieldSpecifier::class,
'file_attribute_specification' => HHAST\FileAttributeSpecification::class,
'finally_clause' => HHAST\FinallyClause::class,
'for_statement' => HHAST\ForStatement::class,
'foreach_statement' => HHAST\ForeachStatement::class,
'function_call_expression' => HHAST\FunctionCallExpression::class,
'function_ctx_type_specifier' => HHAST\FunctionCtxTypeSpecifier::class,
'function_declaration' => HHAST\FunctionDeclaration::class,
'function_declaration_header' => HHAST\FunctionDeclarationHeader::class,
'function_pointer_expression' => HHAST\FunctionPointerExpression::class,
'generic_type_specifier' => HHAST\GenericTypeSpecifier::class,
'if_statement' => HHAST\IfStatement::class,
'inclusion_directive' => HHAST\InclusionDirective::class,
'inclusion_expression' => HHAST\InclusionExpression::class,
'intersection_type_specifier' => HHAST\IntersectionTypeSpecifier::class,
'is_expression' => HHAST\IsExpression::class,
'isset_expression' => HHAST\IssetExpression::class,
'keyset_intrinsic_expression' => HHAST\KeysetIntrinsicExpression::class,
'keyset_type_specifier' => HHAST\KeysetTypeSpecifier::class,
'lambda_expression' => HHAST\LambdaExpression::class,
'lambda_signature' => HHAST\LambdaSignature::class,
'like_type_specifier' => HHAST\LikeTypeSpecifier::class,
'list_expression' => HHAST\ListExpression::class,
'literal' => HHAST\LiteralExpression::class,
'markup_section' => HHAST\MarkupSection::class,
'markup_suffix' => HHAST\MarkupSuffix::class,
'member_selection_expression' => HHAST\MemberSelectionExpression::class,
'methodish_declaration' => HHAST\MethodishDeclaration::class,
'methodish_trait_resolution' => HHAST\MethodishTraitResolution::class,
'module_declaration' => HHAST\ModuleDeclaration::class,
'namespace_body' => HHAST\NamespaceBody::class,
'namespace_declaration' => HHAST\NamespaceDeclaration::class,
'namespace_declaration_header' => HHAST\NamespaceDeclarationHeader::class,
'namespace_empty_body' => HHAST\NamespaceEmptyBody::class,
'namespace_group_use_declaration' =>
HHAST\NamespaceGroupUseDeclaration::class,
'namespace_use_clause' => HHAST\NamespaceUseClause::class,
'namespace_use_declaration' => HHAST\NamespaceUseDeclaration::class,
'nullable_as_expression' => HHAST\NullableAsExpression::class,
'nullable_type_specifier' => HHAST\NullableTypeSpecifier::class,
'object_creation_expression' => HHAST\ObjectCreationExpression::class,
'old_attribute_specification' => HHAST\OldAttributeSpecification::class,
'parameter_declaration' => HHAST\ParameterDeclaration::class,
'parenthesized_expression' => HHAST\ParenthesizedExpression::class,
'pipe_variable' => HHAST\PipeVariableExpression::class,
'postfix_unary_expression' => HHAST\PostfixUnaryExpression::class,
'prefix_unary_expression' => HHAST\PrefixUnaryExpression::class,
'prefixed_code' => HHAST\PrefixedCodeExpression::class,
'prefixed_string' => HHAST\PrefixedStringExpression::class,
'property_declaration' => HHAST\PropertyDeclaration::class,
'property_declarator' => HHAST\PropertyDeclarator::class,
'qualified_name' => HHAST\QualifiedName::class,
'reified_type_argument' => HHAST\ReifiedTypeArgument::class,
'require_clause' => HHAST\RequireClause::class,
'return_statement' => HHAST\ReturnStatement::class,
'safe_member_selection_expression' =>
HHAST\SafeMemberSelectionExpression::class,
'scope_resolution_expression' => HHAST\ScopeResolutionExpression::class,
'script' => HHAST\Script::class,
'shape_expression' => HHAST\ShapeExpression::class,
'shape_type_specifier' => HHAST\ShapeTypeSpecifier::class,
'simple_initializer' => HHAST\SimpleInitializer::class,
'simple_type_specifier' => HHAST\SimpleTypeSpecifier::class,
'soft_type_specifier' => HHAST\SoftTypeSpecifier::class,
'subscript_expression' => HHAST\SubscriptExpression::class,
'switch_fallthrough' => HHAST\SwitchFallthrough::class,
'switch_section' => HHAST\SwitchSection::class,
'switch_statement' => HHAST\SwitchStatement::class,
'throw_statement' => HHAST\ThrowStatement::class,
'trait_use' => HHAST\TraitUse::class,
'trait_use_alias_item' => HHAST\TraitUseAliasItem::class,
'trait_use_conflict_resolution' => HHAST\TraitUseConflictResolution::class,
'trait_use_precedence_item' => HHAST\TraitUsePrecedenceItem::class,
'try_statement' => HHAST\TryStatement::class,
'tuple_expression' => HHAST\TupleExpression::class,
'tuple_type_explicit_specifier' => HHAST\TupleTypeExplicitSpecifier::class,
'tuple_type_specifier' => HHAST\TupleTypeSpecifier::class,
'type_arguments' => HHAST\TypeArguments::class,
'type_const_declaration' => HHAST\TypeConstDeclaration::class,
'type_constant' => HHAST\TypeConstant::class,
'type_constraint' => HHAST\TypeConstraint::class,
'type_parameter' => HHAST\TypeParameter::class,
'type_parameters' => HHAST\TypeParameters::class,
'union_type_specifier' => HHAST\UnionTypeSpecifier::class,
'unset_statement' => HHAST\UnsetStatement::class,
'upcast_expression' => HHAST\UpcastExpression::class,
'using_statement_block_scoped' => HHAST\UsingStatementBlockScoped::class,
'using_statement_function_scoped' =>
HHAST\UsingStatementFunctionScoped::class,
'variable' => HHAST\VariableExpression::class,
'variadic_parameter' => HHAST\VariadicParameter::class,
'varray_intrinsic_expression' => HHAST\VarrayIntrinsicExpression::class,
'varray_type_specifier' => HHAST\VarrayTypeSpecifier::class,
'vector_intrinsic_expression' => HHAST\VectorIntrinsicExpression::class,
'vector_type_specifier' => HHAST\VectorTypeSpecifier::class,
'where_clause' => HHAST\WhereClause::class,
'where_constraint' => HHAST\WhereConstraint::class,
'while_statement' => HHAST\WhileStatement::class,
'xhp_category_declaration' => HHAST\XHPCategoryDeclaration::class,
'xhp_children_declaration' => HHAST\XHPChildrenDeclaration::class,
'xhp_children_parenthesized_list' =>
HHAST\XHPChildrenParenthesizedList::class,
'xhp_class_attribute' => HHAST\XHPClassAttribute::class,
'xhp_class_attribute_declaration' =>
HHAST\XHPClassAttributeDeclaration::class,
'xhp_close' => HHAST\XHPClose::class,
'xhp_enum_type' => HHAST\XHPEnumType::class,
'xhp_expression' => HHAST\XHPExpression::class,
'xhp_lateinit' => HHAST\XHPLateinit::class,
'xhp_open' => HHAST\XHPOpen::class,
'xhp_required' => HHAST\XHPRequired::class,
'xhp_simple_attribute' => HHAST\XHPSimpleAttribute::class,
'xhp_simple_class_attribute' => HHAST\XHPSimpleClassAttribute::class,
'xhp_spread_attribute' => HHAST\XHPSpreadAttribute::class,
'yield_break_statement' => HHAST\YieldBreakStatement::class,
'yield_expression' => HHAST\YieldExpression::class,
];
$class = $kind_to_class[$kind] ?? null;
if ($class is nonnull) {
return $class::fromJSON($json, $file, $offset, $source, $type_hint);
}
throw
new HHAST\UnsupportedASTNodeError($file, $offset, (string)$json['kind']);
}