#![expect(clippy::default_trait_access)]
use std::cell::Cell;
use oxc_allocator::{ArenaBox, ArenaVec, GetAllocator, IntoIn};
use oxc_str::{Ident, Str};
use oxc_syntax::{reference::ReferenceId, scope::ScopeId, symbol::SymbolId};
use crate::{
ast::*,
builder::{AstBuild, GetAstBuilder},
};
impl<'a> Program<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
source_type: SourceType,
source_text: &'a str,
comments: ArenaVec<'a, Comment>,
hashbang: Option<Hashbang<'a>>,
directives: ArenaVec<'a, Directive<'a>>,
body: ArenaVec<'a, Statement<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
Program {
node_id: Cell::new(builder.node_id()),
span,
source_type,
source_text,
comments,
hashbang,
directives,
body,
scope_id: Default::default(),
}
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
source_type: SourceType,
source_text: &'a str,
comments: ArenaVec<'a, Comment>,
hashbang: Option<Hashbang<'a>>,
directives: ArenaVec<'a, Directive<'a>>,
body: ArenaVec<'a, Statement<'a>>,
scope_id: ScopeId,
builder: &B,
) -> Self {
let builder = builder.builder();
Program {
node_id: Cell::new(builder.node_id()),
span,
source_type,
source_text,
comments,
hashbang,
directives,
body,
scope_id: Cell::new(Some(scope_id)),
}
}
}
impl<'a> Expression<'a> {
#[inline]
pub fn new_boolean_literal<B: GetAstBuilder<'a>>(span: Span, value: bool, builder: &B) -> Self {
Self::BooleanLiteral(BooleanLiteral::boxed(span, value, builder))
}
#[inline]
pub fn new_null_literal<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::NullLiteral(NullLiteral::boxed(span, builder))
}
#[inline]
pub fn new_numeric_literal<B: GetAstBuilder<'a>>(
span: Span,
value: f64,
raw: Option<Str<'a>>,
base: NumberBase,
builder: &B,
) -> Self {
Self::NumericLiteral(NumericLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_big_int_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
base: BigintBase,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::BigIntLiteral(BigIntLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_reg_exp_literal<B: GetAstBuilder<'a>>(
span: Span,
regex: RegExp<'a>,
raw: Option<Str<'a>>,
builder: &B,
) -> Self {
Self::RegExpLiteral(RegExpLiteral::boxed(span, regex, raw, builder))
}
#[inline]
pub fn new_string_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed(span, value, raw, builder))
}
#[inline]
pub fn new_string_literal_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed_with_lone_surrogates(
span,
value,
raw,
lone_surrogates,
builder,
))
}
#[inline]
pub fn new_template_literal<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::TemplateLiteral(TemplateLiteral::boxed(span, quasis, expressions, builder))
}
#[inline]
pub fn new_identifier<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_identifier_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_meta_property<B: GetAstBuilder<'a>>(
span: Span,
meta: IdentifierName<'a>,
property: IdentifierName<'a>,
builder: &B,
) -> Self {
Self::MetaProperty(MetaProperty::boxed(span, meta, property, builder))
}
#[inline]
pub fn new_super<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::Super(Super::boxed(span, builder))
}
#[inline]
pub fn new_array_expression<B: GetAstBuilder<'a>>(
span: Span,
elements: ArenaVec<'a, ArrayExpressionElement<'a>>,
builder: &B,
) -> Self {
Self::ArrayExpression(ArrayExpression::boxed(span, elements, builder))
}
#[inline]
pub fn new_arrow_function_expression<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
Self::ArrowFunctionExpression(ArrowFunctionExpression::boxed(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_arrow_function_expression_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
Self::ArrowFunctionExpression(
ArrowFunctionExpression::boxed_with_scope_id_and_pure_and_pife(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
),
)
}
#[inline]
pub fn new_assignment_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: AssignmentOperator,
left: AssignmentTarget<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::AssignmentExpression(AssignmentExpression::boxed(
span, operator, left, right, builder,
))
}
#[inline]
pub fn new_await_expression<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::AwaitExpression(AwaitExpression::boxed(span, argument, builder))
}
#[inline]
pub fn new_binary_expression<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: BinaryOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::BinaryExpression(BinaryExpression::boxed(span, left, operator, right, builder))
}
#[inline]
pub fn new_call_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed(
span,
callee,
type_arguments,
arguments,
optional,
builder,
))
}
#[inline]
pub fn new_call_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
optional,
pure,
builder,
))
}
#[inline]
pub fn new_chain_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: ChainElement<'a>,
builder: &B,
) -> Self {
Self::ChainExpression(ChainExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_class_expression<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassExpression(Class::boxed(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
builder,
))
}
#[inline]
pub fn new_class_expression_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassExpression(Class::boxed_with_scope_id(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_conditional_expression<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
consequent: Expression<'a>,
alternate: Expression<'a>,
builder: &B,
) -> Self {
Self::ConditionalExpression(ConditionalExpression::boxed(
span, test, consequent, alternate, builder,
))
}
#[inline]
pub fn new_function_expression<B: GetAstBuilder<'a>, T1, T2, T3, T4, T5>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionExpression(Function::boxed(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_function_expression_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
T5,
>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionExpression(Function::boxed_with_scope_id_and_pure_and_pife(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
))
}
#[inline]
pub fn new_import_expression<B: GetAstBuilder<'a>>(
span: Span,
source: Expression<'a>,
options: Option<Expression<'a>>,
phase: Option<ImportPhase>,
builder: &B,
) -> Self {
Self::ImportExpression(ImportExpression::boxed(span, source, options, phase, builder))
}
#[inline]
pub fn new_logical_expression<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: LogicalOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::LogicalExpression(LogicalExpression::boxed(span, left, operator, right, builder))
}
#[inline]
pub fn new_new_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::NewExpression(NewExpression::boxed(span, callee, type_arguments, arguments, builder))
}
#[inline]
pub fn new_new_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::NewExpression(NewExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
pure,
builder,
))
}
#[inline]
pub fn new_object_expression<B: GetAstBuilder<'a>>(
span: Span,
properties: ArenaVec<'a, ObjectPropertyKind<'a>>,
builder: &B,
) -> Self {
Self::ObjectExpression(ObjectExpression::boxed(span, properties, builder))
}
#[inline]
pub fn new_parenthesized_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::ParenthesizedExpression(ParenthesizedExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_sequence_expression<B: GetAstBuilder<'a>>(
span: Span,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::SequenceExpression(SequenceExpression::boxed(span, expressions, builder))
}
#[inline]
pub fn new_tagged_template_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
tag: Expression<'a>,
type_arguments: T1,
quasi: TemplateLiteral<'a>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::TaggedTemplateExpression(TaggedTemplateExpression::boxed(
span,
tag,
type_arguments,
quasi,
builder,
))
}
#[inline]
pub fn new_this_expression<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::ThisExpression(ThisExpression::boxed(span, builder))
}
#[inline]
pub fn new_unary_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UnaryOperator,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::UnaryExpression(UnaryExpression::boxed(span, operator, argument, builder))
}
#[inline]
pub fn new_update_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UpdateOperator,
prefix: bool,
argument: SimpleAssignmentTarget<'a>,
builder: &B,
) -> Self {
Self::UpdateExpression(UpdateExpression::boxed(span, operator, prefix, argument, builder))
}
#[inline]
pub fn new_yield_expression<B: GetAstBuilder<'a>>(
span: Span,
delegate: bool,
argument: Option<Expression<'a>>,
builder: &B,
) -> Self {
Self::YieldExpression(YieldExpression::boxed(span, delegate, argument, builder))
}
#[inline]
pub fn new_private_in_expression<B: GetAstBuilder<'a>>(
span: Span,
left: PrivateIdentifier<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::PrivateInExpression(PrivateInExpression::boxed(span, left, right, builder))
}
#[inline]
pub fn new_jsx_element<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
opening_element: T1,
children: ArenaVec<'a, JSXChild<'a>>,
closing_element: T2,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, JSXOpeningElement<'a>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, JSXClosingElement<'a>>>>,
{
Self::JSXElement(JSXElement::boxed(
span,
opening_element,
children,
closing_element,
builder,
))
}
#[inline]
pub fn new_jsx_fragment<B: GetAstBuilder<'a>>(
span: Span,
opening_fragment: JSXOpeningFragment,
children: ArenaVec<'a, JSXChild<'a>>,
closing_fragment: JSXClosingFragment,
builder: &B,
) -> Self {
Self::JSXFragment(JSXFragment::boxed(
span,
opening_fragment,
children,
closing_fragment,
builder,
))
}
#[inline]
pub fn new_ts_as_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSAsExpression(TSAsExpression::boxed(span, expression, type_annotation, builder))
}
#[inline]
pub fn new_ts_satisfies_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSSatisfiesExpression(TSSatisfiesExpression::boxed(
span,
expression,
type_annotation,
builder,
))
}
#[inline]
pub fn new_ts_type_assertion<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSTypeAssertion(TSTypeAssertion::boxed(span, type_annotation, expression, builder))
}
#[inline]
pub fn new_ts_non_null_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSNonNullExpression(TSNonNullExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_ts_instantiation_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
expression: Expression<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeParameterInstantiation<'a>>>,
{
Self::TSInstantiationExpression(TSInstantiationExpression::boxed(
span,
expression,
type_arguments,
builder,
))
}
#[inline]
pub fn new_v8_intrinsic_expression<B: GetAstBuilder<'a>>(
span: Span,
name: IdentifierName<'a>,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self {
Self::V8IntrinsicExpression(V8IntrinsicExpression::boxed(span, name, arguments, builder))
}
#[inline]
pub fn new_computed_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::ComputedMemberExpression(ComputedMemberExpression::boxed(
span, object, expression, optional, builder,
))
}
#[inline]
pub fn new_static_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::StaticMemberExpression(StaticMemberExpression::boxed(
span, object, property, optional, builder,
))
}
#[inline]
pub fn new_private_field_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::PrivateFieldExpression(PrivateFieldExpression::boxed(
span, object, field, optional, builder,
))
}
}
impl<'a> IdentifierName<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
let builder = builder.builder();
IdentifierName { node_id: Cell::new(builder.node_id()), span, name: name.into() }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> ArenaBox<'a, Self>
where
S1: Into<Ident<'a>>,
{
ArenaBox::new_in(Self::new(span, name, builder), builder.builder())
}
}
impl<'a> IdentifierReference<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
let builder = builder.builder();
IdentifierReference {
node_id: Cell::new(builder.node_id()),
span,
name: name.into(),
reference_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> ArenaBox<'a, Self>
where
S1: Into<Ident<'a>>,
{
ArenaBox::new_in(Self::new(span, name, builder), builder.builder())
}
#[inline]
pub fn new_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
let builder = builder.builder();
IdentifierReference {
node_id: Cell::new(builder.node_id()),
span,
name: name.into(),
reference_id: Cell::new(Some(reference_id)),
}
}
#[inline]
pub fn boxed_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> ArenaBox<'a, Self>
where
S1: Into<Ident<'a>>,
{
ArenaBox::new_in(
Self::new_with_reference_id(span, name, reference_id, builder),
builder.builder(),
)
}
}
impl<'a> BindingIdentifier<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
let builder = builder.builder();
BindingIdentifier {
node_id: Cell::new(builder.node_id()),
span,
name: name.into(),
symbol_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> ArenaBox<'a, Self>
where
S1: Into<Ident<'a>>,
{
ArenaBox::new_in(Self::new(span, name, builder), builder.builder())
}
#[inline]
pub fn new_with_symbol_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
symbol_id: SymbolId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
let builder = builder.builder();
BindingIdentifier {
node_id: Cell::new(builder.node_id()),
span,
name: name.into(),
symbol_id: Cell::new(Some(symbol_id)),
}
}
#[inline]
pub fn boxed_with_symbol_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
symbol_id: SymbolId,
builder: &B,
) -> ArenaBox<'a, Self>
where
S1: Into<Ident<'a>>,
{
ArenaBox::new_in(
Self::new_with_symbol_id(span, name, symbol_id, builder),
builder.builder(),
)
}
}
impl<'a> LabelIdentifier<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
let builder = builder.builder();
LabelIdentifier { node_id: Cell::new(builder.node_id()), span, name: name.into() }
}
}
impl ThisExpression {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
ThisExpression { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl<'a> ArrayExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
elements: ArenaVec<'a, ArrayExpressionElement<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
ArrayExpression { node_id: Cell::new(builder.node_id()), span, elements }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
elements: ArenaVec<'a, ArrayExpressionElement<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, elements, builder), builder.builder())
}
}
impl<'a> ArrayExpressionElement<'a> {
#[inline]
pub fn new_spread_element<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::SpreadElement(SpreadElement::boxed(span, argument, builder))
}
#[inline]
pub fn new_elision<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::Elision(Elision::boxed(span, builder))
}
#[inline]
pub fn new_boolean_literal<B: GetAstBuilder<'a>>(span: Span, value: bool, builder: &B) -> Self {
Self::BooleanLiteral(BooleanLiteral::boxed(span, value, builder))
}
#[inline]
pub fn new_null_literal<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::NullLiteral(NullLiteral::boxed(span, builder))
}
#[inline]
pub fn new_numeric_literal<B: GetAstBuilder<'a>>(
span: Span,
value: f64,
raw: Option<Str<'a>>,
base: NumberBase,
builder: &B,
) -> Self {
Self::NumericLiteral(NumericLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_big_int_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
base: BigintBase,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::BigIntLiteral(BigIntLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_reg_exp_literal<B: GetAstBuilder<'a>>(
span: Span,
regex: RegExp<'a>,
raw: Option<Str<'a>>,
builder: &B,
) -> Self {
Self::RegExpLiteral(RegExpLiteral::boxed(span, regex, raw, builder))
}
#[inline]
pub fn new_string_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed(span, value, raw, builder))
}
#[inline]
pub fn new_string_literal_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed_with_lone_surrogates(
span,
value,
raw,
lone_surrogates,
builder,
))
}
#[inline]
pub fn new_template_literal<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::TemplateLiteral(TemplateLiteral::boxed(span, quasis, expressions, builder))
}
#[inline]
pub fn new_identifier<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_identifier_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_meta_property<B: GetAstBuilder<'a>>(
span: Span,
meta: IdentifierName<'a>,
property: IdentifierName<'a>,
builder: &B,
) -> Self {
Self::MetaProperty(MetaProperty::boxed(span, meta, property, builder))
}
#[inline]
pub fn new_super<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::Super(Super::boxed(span, builder))
}
#[inline]
pub fn new_array_expression<B: GetAstBuilder<'a>>(
span: Span,
elements: ArenaVec<'a, ArrayExpressionElement<'a>>,
builder: &B,
) -> Self {
Self::ArrayExpression(ArrayExpression::boxed(span, elements, builder))
}
#[inline]
pub fn new_arrow_function_expression<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
Self::ArrowFunctionExpression(ArrowFunctionExpression::boxed(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_arrow_function_expression_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
Self::ArrowFunctionExpression(
ArrowFunctionExpression::boxed_with_scope_id_and_pure_and_pife(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
),
)
}
#[inline]
pub fn new_assignment_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: AssignmentOperator,
left: AssignmentTarget<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::AssignmentExpression(AssignmentExpression::boxed(
span, operator, left, right, builder,
))
}
#[inline]
pub fn new_await_expression<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::AwaitExpression(AwaitExpression::boxed(span, argument, builder))
}
#[inline]
pub fn new_binary_expression<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: BinaryOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::BinaryExpression(BinaryExpression::boxed(span, left, operator, right, builder))
}
#[inline]
pub fn new_call_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed(
span,
callee,
type_arguments,
arguments,
optional,
builder,
))
}
#[inline]
pub fn new_call_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
optional,
pure,
builder,
))
}
#[inline]
pub fn new_chain_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: ChainElement<'a>,
builder: &B,
) -> Self {
Self::ChainExpression(ChainExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_class_expression<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassExpression(Class::boxed(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
builder,
))
}
#[inline]
pub fn new_class_expression_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassExpression(Class::boxed_with_scope_id(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_conditional_expression<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
consequent: Expression<'a>,
alternate: Expression<'a>,
builder: &B,
) -> Self {
Self::ConditionalExpression(ConditionalExpression::boxed(
span, test, consequent, alternate, builder,
))
}
#[inline]
pub fn new_function_expression<B: GetAstBuilder<'a>, T1, T2, T3, T4, T5>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionExpression(Function::boxed(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_function_expression_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
T5,
>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionExpression(Function::boxed_with_scope_id_and_pure_and_pife(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
))
}
#[inline]
pub fn new_import_expression<B: GetAstBuilder<'a>>(
span: Span,
source: Expression<'a>,
options: Option<Expression<'a>>,
phase: Option<ImportPhase>,
builder: &B,
) -> Self {
Self::ImportExpression(ImportExpression::boxed(span, source, options, phase, builder))
}
#[inline]
pub fn new_logical_expression<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: LogicalOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::LogicalExpression(LogicalExpression::boxed(span, left, operator, right, builder))
}
#[inline]
pub fn new_new_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::NewExpression(NewExpression::boxed(span, callee, type_arguments, arguments, builder))
}
#[inline]
pub fn new_new_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::NewExpression(NewExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
pure,
builder,
))
}
#[inline]
pub fn new_object_expression<B: GetAstBuilder<'a>>(
span: Span,
properties: ArenaVec<'a, ObjectPropertyKind<'a>>,
builder: &B,
) -> Self {
Self::ObjectExpression(ObjectExpression::boxed(span, properties, builder))
}
#[inline]
pub fn new_parenthesized_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::ParenthesizedExpression(ParenthesizedExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_sequence_expression<B: GetAstBuilder<'a>>(
span: Span,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::SequenceExpression(SequenceExpression::boxed(span, expressions, builder))
}
#[inline]
pub fn new_tagged_template_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
tag: Expression<'a>,
type_arguments: T1,
quasi: TemplateLiteral<'a>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::TaggedTemplateExpression(TaggedTemplateExpression::boxed(
span,
tag,
type_arguments,
quasi,
builder,
))
}
#[inline]
pub fn new_this_expression<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::ThisExpression(ThisExpression::boxed(span, builder))
}
#[inline]
pub fn new_unary_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UnaryOperator,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::UnaryExpression(UnaryExpression::boxed(span, operator, argument, builder))
}
#[inline]
pub fn new_update_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UpdateOperator,
prefix: bool,
argument: SimpleAssignmentTarget<'a>,
builder: &B,
) -> Self {
Self::UpdateExpression(UpdateExpression::boxed(span, operator, prefix, argument, builder))
}
#[inline]
pub fn new_yield_expression<B: GetAstBuilder<'a>>(
span: Span,
delegate: bool,
argument: Option<Expression<'a>>,
builder: &B,
) -> Self {
Self::YieldExpression(YieldExpression::boxed(span, delegate, argument, builder))
}
#[inline]
pub fn new_private_in_expression<B: GetAstBuilder<'a>>(
span: Span,
left: PrivateIdentifier<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::PrivateInExpression(PrivateInExpression::boxed(span, left, right, builder))
}
#[inline]
pub fn new_jsx_element<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
opening_element: T1,
children: ArenaVec<'a, JSXChild<'a>>,
closing_element: T2,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, JSXOpeningElement<'a>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, JSXClosingElement<'a>>>>,
{
Self::JSXElement(JSXElement::boxed(
span,
opening_element,
children,
closing_element,
builder,
))
}
#[inline]
pub fn new_jsx_fragment<B: GetAstBuilder<'a>>(
span: Span,
opening_fragment: JSXOpeningFragment,
children: ArenaVec<'a, JSXChild<'a>>,
closing_fragment: JSXClosingFragment,
builder: &B,
) -> Self {
Self::JSXFragment(JSXFragment::boxed(
span,
opening_fragment,
children,
closing_fragment,
builder,
))
}
#[inline]
pub fn new_ts_as_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSAsExpression(TSAsExpression::boxed(span, expression, type_annotation, builder))
}
#[inline]
pub fn new_ts_satisfies_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSSatisfiesExpression(TSSatisfiesExpression::boxed(
span,
expression,
type_annotation,
builder,
))
}
#[inline]
pub fn new_ts_type_assertion<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSTypeAssertion(TSTypeAssertion::boxed(span, type_annotation, expression, builder))
}
#[inline]
pub fn new_ts_non_null_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSNonNullExpression(TSNonNullExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_ts_instantiation_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
expression: Expression<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeParameterInstantiation<'a>>>,
{
Self::TSInstantiationExpression(TSInstantiationExpression::boxed(
span,
expression,
type_arguments,
builder,
))
}
#[inline]
pub fn new_v8_intrinsic_expression<B: GetAstBuilder<'a>>(
span: Span,
name: IdentifierName<'a>,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self {
Self::V8IntrinsicExpression(V8IntrinsicExpression::boxed(span, name, arguments, builder))
}
#[inline]
pub fn new_computed_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::ComputedMemberExpression(ComputedMemberExpression::boxed(
span, object, expression, optional, builder,
))
}
#[inline]
pub fn new_static_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::StaticMemberExpression(StaticMemberExpression::boxed(
span, object, property, optional, builder,
))
}
#[inline]
pub fn new_private_field_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::PrivateFieldExpression(PrivateFieldExpression::boxed(
span, object, field, optional, builder,
))
}
}
impl Elision {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
Elision { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl<'a> ObjectExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
properties: ArenaVec<'a, ObjectPropertyKind<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
ObjectExpression { node_id: Cell::new(builder.node_id()), span, properties }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
properties: ArenaVec<'a, ObjectPropertyKind<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, properties, builder), builder.builder())
}
}
impl<'a> ObjectPropertyKind<'a> {
#[inline]
pub fn new_object_property<B: GetAstBuilder<'a>>(
span: Span,
kind: PropertyKind,
key: PropertyKey<'a>,
value: Expression<'a>,
method: bool,
shorthand: bool,
computed: bool,
builder: &B,
) -> Self {
Self::ObjectProperty(ObjectProperty::boxed(
span, kind, key, value, method, shorthand, computed, builder,
))
}
#[inline]
pub fn new_spread_property<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::SpreadProperty(SpreadElement::boxed(span, argument, builder))
}
}
impl<'a> ObjectProperty<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
kind: PropertyKind,
key: PropertyKey<'a>,
value: Expression<'a>,
method: bool,
shorthand: bool,
computed: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
ObjectProperty {
node_id: Cell::new(builder.node_id()),
span,
kind,
key,
value,
method,
shorthand,
computed,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
kind: PropertyKind,
key: PropertyKey<'a>,
value: Expression<'a>,
method: bool,
shorthand: bool,
computed: bool,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new(span, kind, key, value, method, shorthand, computed, builder),
builder.builder(),
)
}
}
impl<'a> PropertyKey<'a> {
#[inline]
pub fn new_static_identifier<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::StaticIdentifier(IdentifierName::boxed(span, name, builder))
}
#[inline]
pub fn new_private_identifier<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::PrivateIdentifier(PrivateIdentifier::boxed(span, name, builder))
}
#[inline]
pub fn new_boolean_literal<B: GetAstBuilder<'a>>(span: Span, value: bool, builder: &B) -> Self {
Self::BooleanLiteral(BooleanLiteral::boxed(span, value, builder))
}
#[inline]
pub fn new_null_literal<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::NullLiteral(NullLiteral::boxed(span, builder))
}
#[inline]
pub fn new_numeric_literal<B: GetAstBuilder<'a>>(
span: Span,
value: f64,
raw: Option<Str<'a>>,
base: NumberBase,
builder: &B,
) -> Self {
Self::NumericLiteral(NumericLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_big_int_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
base: BigintBase,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::BigIntLiteral(BigIntLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_reg_exp_literal<B: GetAstBuilder<'a>>(
span: Span,
regex: RegExp<'a>,
raw: Option<Str<'a>>,
builder: &B,
) -> Self {
Self::RegExpLiteral(RegExpLiteral::boxed(span, regex, raw, builder))
}
#[inline]
pub fn new_string_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed(span, value, raw, builder))
}
#[inline]
pub fn new_string_literal_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed_with_lone_surrogates(
span,
value,
raw,
lone_surrogates,
builder,
))
}
#[inline]
pub fn new_template_literal<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::TemplateLiteral(TemplateLiteral::boxed(span, quasis, expressions, builder))
}
#[inline]
pub fn new_identifier<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_identifier_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_meta_property<B: GetAstBuilder<'a>>(
span: Span,
meta: IdentifierName<'a>,
property: IdentifierName<'a>,
builder: &B,
) -> Self {
Self::MetaProperty(MetaProperty::boxed(span, meta, property, builder))
}
#[inline]
pub fn new_super<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::Super(Super::boxed(span, builder))
}
#[inline]
pub fn new_array_expression<B: GetAstBuilder<'a>>(
span: Span,
elements: ArenaVec<'a, ArrayExpressionElement<'a>>,
builder: &B,
) -> Self {
Self::ArrayExpression(ArrayExpression::boxed(span, elements, builder))
}
#[inline]
pub fn new_arrow_function_expression<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
Self::ArrowFunctionExpression(ArrowFunctionExpression::boxed(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_arrow_function_expression_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
Self::ArrowFunctionExpression(
ArrowFunctionExpression::boxed_with_scope_id_and_pure_and_pife(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
),
)
}
#[inline]
pub fn new_assignment_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: AssignmentOperator,
left: AssignmentTarget<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::AssignmentExpression(AssignmentExpression::boxed(
span, operator, left, right, builder,
))
}
#[inline]
pub fn new_await_expression<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::AwaitExpression(AwaitExpression::boxed(span, argument, builder))
}
#[inline]
pub fn new_binary_expression<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: BinaryOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::BinaryExpression(BinaryExpression::boxed(span, left, operator, right, builder))
}
#[inline]
pub fn new_call_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed(
span,
callee,
type_arguments,
arguments,
optional,
builder,
))
}
#[inline]
pub fn new_call_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
optional,
pure,
builder,
))
}
#[inline]
pub fn new_chain_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: ChainElement<'a>,
builder: &B,
) -> Self {
Self::ChainExpression(ChainExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_class_expression<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassExpression(Class::boxed(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
builder,
))
}
#[inline]
pub fn new_class_expression_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassExpression(Class::boxed_with_scope_id(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_conditional_expression<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
consequent: Expression<'a>,
alternate: Expression<'a>,
builder: &B,
) -> Self {
Self::ConditionalExpression(ConditionalExpression::boxed(
span, test, consequent, alternate, builder,
))
}
#[inline]
pub fn new_function_expression<B: GetAstBuilder<'a>, T1, T2, T3, T4, T5>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionExpression(Function::boxed(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_function_expression_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
T5,
>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionExpression(Function::boxed_with_scope_id_and_pure_and_pife(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
))
}
#[inline]
pub fn new_import_expression<B: GetAstBuilder<'a>>(
span: Span,
source: Expression<'a>,
options: Option<Expression<'a>>,
phase: Option<ImportPhase>,
builder: &B,
) -> Self {
Self::ImportExpression(ImportExpression::boxed(span, source, options, phase, builder))
}
#[inline]
pub fn new_logical_expression<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: LogicalOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::LogicalExpression(LogicalExpression::boxed(span, left, operator, right, builder))
}
#[inline]
pub fn new_new_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::NewExpression(NewExpression::boxed(span, callee, type_arguments, arguments, builder))
}
#[inline]
pub fn new_new_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::NewExpression(NewExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
pure,
builder,
))
}
#[inline]
pub fn new_object_expression<B: GetAstBuilder<'a>>(
span: Span,
properties: ArenaVec<'a, ObjectPropertyKind<'a>>,
builder: &B,
) -> Self {
Self::ObjectExpression(ObjectExpression::boxed(span, properties, builder))
}
#[inline]
pub fn new_parenthesized_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::ParenthesizedExpression(ParenthesizedExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_sequence_expression<B: GetAstBuilder<'a>>(
span: Span,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::SequenceExpression(SequenceExpression::boxed(span, expressions, builder))
}
#[inline]
pub fn new_tagged_template_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
tag: Expression<'a>,
type_arguments: T1,
quasi: TemplateLiteral<'a>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::TaggedTemplateExpression(TaggedTemplateExpression::boxed(
span,
tag,
type_arguments,
quasi,
builder,
))
}
#[inline]
pub fn new_this_expression<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::ThisExpression(ThisExpression::boxed(span, builder))
}
#[inline]
pub fn new_unary_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UnaryOperator,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::UnaryExpression(UnaryExpression::boxed(span, operator, argument, builder))
}
#[inline]
pub fn new_update_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UpdateOperator,
prefix: bool,
argument: SimpleAssignmentTarget<'a>,
builder: &B,
) -> Self {
Self::UpdateExpression(UpdateExpression::boxed(span, operator, prefix, argument, builder))
}
#[inline]
pub fn new_yield_expression<B: GetAstBuilder<'a>>(
span: Span,
delegate: bool,
argument: Option<Expression<'a>>,
builder: &B,
) -> Self {
Self::YieldExpression(YieldExpression::boxed(span, delegate, argument, builder))
}
#[inline]
pub fn new_private_in_expression<B: GetAstBuilder<'a>>(
span: Span,
left: PrivateIdentifier<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::PrivateInExpression(PrivateInExpression::boxed(span, left, right, builder))
}
#[inline]
pub fn new_jsx_element<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
opening_element: T1,
children: ArenaVec<'a, JSXChild<'a>>,
closing_element: T2,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, JSXOpeningElement<'a>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, JSXClosingElement<'a>>>>,
{
Self::JSXElement(JSXElement::boxed(
span,
opening_element,
children,
closing_element,
builder,
))
}
#[inline]
pub fn new_jsx_fragment<B: GetAstBuilder<'a>>(
span: Span,
opening_fragment: JSXOpeningFragment,
children: ArenaVec<'a, JSXChild<'a>>,
closing_fragment: JSXClosingFragment,
builder: &B,
) -> Self {
Self::JSXFragment(JSXFragment::boxed(
span,
opening_fragment,
children,
closing_fragment,
builder,
))
}
#[inline]
pub fn new_ts_as_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSAsExpression(TSAsExpression::boxed(span, expression, type_annotation, builder))
}
#[inline]
pub fn new_ts_satisfies_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSSatisfiesExpression(TSSatisfiesExpression::boxed(
span,
expression,
type_annotation,
builder,
))
}
#[inline]
pub fn new_ts_type_assertion<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSTypeAssertion(TSTypeAssertion::boxed(span, type_annotation, expression, builder))
}
#[inline]
pub fn new_ts_non_null_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSNonNullExpression(TSNonNullExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_ts_instantiation_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
expression: Expression<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeParameterInstantiation<'a>>>,
{
Self::TSInstantiationExpression(TSInstantiationExpression::boxed(
span,
expression,
type_arguments,
builder,
))
}
#[inline]
pub fn new_v8_intrinsic_expression<B: GetAstBuilder<'a>>(
span: Span,
name: IdentifierName<'a>,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self {
Self::V8IntrinsicExpression(V8IntrinsicExpression::boxed(span, name, arguments, builder))
}
#[inline]
pub fn new_computed_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::ComputedMemberExpression(ComputedMemberExpression::boxed(
span, object, expression, optional, builder,
))
}
#[inline]
pub fn new_static_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::StaticMemberExpression(StaticMemberExpression::boxed(
span, object, property, optional, builder,
))
}
#[inline]
pub fn new_private_field_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::PrivateFieldExpression(PrivateFieldExpression::boxed(
span, object, field, optional, builder,
))
}
}
impl<'a> TemplateLiteral<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
TemplateLiteral { node_id: Cell::new(builder.node_id()), span, quasis, expressions }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, quasis, expressions, builder), builder.builder())
}
}
impl<'a> TaggedTemplateExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
tag: Expression<'a>,
type_arguments: T1,
quasi: TemplateLiteral<'a>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
let builder = builder.builder();
TaggedTemplateExpression {
node_id: Cell::new(builder.node_id()),
span,
tag,
type_arguments: type_arguments.into_in(builder.allocator()),
quasi,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
tag: Expression<'a>,
type_arguments: T1,
quasi: TemplateLiteral<'a>,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
ArenaBox::new_in(Self::new(span, tag, type_arguments, quasi, builder), builder.builder())
}
}
impl<'a> TemplateElement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
value: TemplateElementValue<'a>,
tail: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
TemplateElement {
node_id: Cell::new(builder.node_id()),
span,
value,
tail,
lone_surrogates: Default::default(),
}
}
#[inline]
pub fn new_with_lone_surrogates<B: GetAstBuilder<'a>>(
span: Span,
value: TemplateElementValue<'a>,
tail: bool,
lone_surrogates: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
TemplateElement {
node_id: Cell::new(builder.node_id()),
span,
value,
tail,
lone_surrogates,
}
}
}
impl<'a> MemberExpression<'a> {
#[inline]
pub fn new_computed_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::ComputedMemberExpression(ComputedMemberExpression::boxed(
span, object, expression, optional, builder,
))
}
#[inline]
pub fn new_static_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::StaticMemberExpression(StaticMemberExpression::boxed(
span, object, property, optional, builder,
))
}
#[inline]
pub fn new_private_field_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::PrivateFieldExpression(PrivateFieldExpression::boxed(
span, object, field, optional, builder,
))
}
}
impl<'a> ComputedMemberExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
ComputedMemberExpression {
node_id: Cell::new(builder.node_id()),
span,
object,
expression,
optional,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, object, expression, optional, builder), builder.builder())
}
}
impl<'a> StaticMemberExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
StaticMemberExpression {
node_id: Cell::new(builder.node_id()),
span,
object,
property,
optional,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, object, property, optional, builder), builder.builder())
}
}
impl<'a> PrivateFieldExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
PrivateFieldExpression {
node_id: Cell::new(builder.node_id()),
span,
object,
field,
optional,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, object, field, optional, builder), builder.builder())
}
}
impl<'a> CallExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
let builder = builder.builder();
CallExpression {
node_id: Cell::new(builder.node_id()),
span,
callee,
type_arguments: type_arguments.into_in(builder.allocator()),
arguments,
optional,
pure: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
ArenaBox::new_in(
Self::new(span, callee, type_arguments, arguments, optional, builder),
builder.builder(),
)
}
#[inline]
pub fn new_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
let builder = builder.builder();
CallExpression {
node_id: Cell::new(builder.node_id()),
span,
callee,
type_arguments: type_arguments.into_in(builder.allocator()),
arguments,
optional,
pure,
}
}
#[inline]
pub fn boxed_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
pure: bool,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
ArenaBox::new_in(
Self::new_with_pure(span, callee, type_arguments, arguments, optional, pure, builder),
builder.builder(),
)
}
}
impl<'a> NewExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
let builder = builder.builder();
NewExpression {
node_id: Cell::new(builder.node_id()),
span,
callee,
type_arguments: type_arguments.into_in(builder.allocator()),
arguments,
pure: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
ArenaBox::new_in(
Self::new(span, callee, type_arguments, arguments, builder),
builder.builder(),
)
}
#[inline]
pub fn new_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
let builder = builder.builder();
NewExpression {
node_id: Cell::new(builder.node_id()),
span,
callee,
type_arguments: type_arguments.into_in(builder.allocator()),
arguments,
pure,
}
}
#[inline]
pub fn boxed_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
pure: bool,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
ArenaBox::new_in(
Self::new_with_pure(span, callee, type_arguments, arguments, pure, builder),
builder.builder(),
)
}
}
impl<'a> MetaProperty<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
meta: IdentifierName<'a>,
property: IdentifierName<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
MetaProperty { node_id: Cell::new(builder.node_id()), span, meta, property }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
meta: IdentifierName<'a>,
property: IdentifierName<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, meta, property, builder), builder.builder())
}
}
impl<'a> SpreadElement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, argument: Expression<'a>, builder: &B) -> Self {
let builder = builder.builder();
SpreadElement { node_id: Cell::new(builder.node_id()), span, argument }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, argument, builder), builder.builder())
}
}
impl<'a> Argument<'a> {
#[inline]
pub fn new_spread_element<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::SpreadElement(SpreadElement::boxed(span, argument, builder))
}
#[inline]
pub fn new_boolean_literal<B: GetAstBuilder<'a>>(span: Span, value: bool, builder: &B) -> Self {
Self::BooleanLiteral(BooleanLiteral::boxed(span, value, builder))
}
#[inline]
pub fn new_null_literal<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::NullLiteral(NullLiteral::boxed(span, builder))
}
#[inline]
pub fn new_numeric_literal<B: GetAstBuilder<'a>>(
span: Span,
value: f64,
raw: Option<Str<'a>>,
base: NumberBase,
builder: &B,
) -> Self {
Self::NumericLiteral(NumericLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_big_int_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
base: BigintBase,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::BigIntLiteral(BigIntLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_reg_exp_literal<B: GetAstBuilder<'a>>(
span: Span,
regex: RegExp<'a>,
raw: Option<Str<'a>>,
builder: &B,
) -> Self {
Self::RegExpLiteral(RegExpLiteral::boxed(span, regex, raw, builder))
}
#[inline]
pub fn new_string_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed(span, value, raw, builder))
}
#[inline]
pub fn new_string_literal_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed_with_lone_surrogates(
span,
value,
raw,
lone_surrogates,
builder,
))
}
#[inline]
pub fn new_template_literal<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::TemplateLiteral(TemplateLiteral::boxed(span, quasis, expressions, builder))
}
#[inline]
pub fn new_identifier<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_identifier_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_meta_property<B: GetAstBuilder<'a>>(
span: Span,
meta: IdentifierName<'a>,
property: IdentifierName<'a>,
builder: &B,
) -> Self {
Self::MetaProperty(MetaProperty::boxed(span, meta, property, builder))
}
#[inline]
pub fn new_super<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::Super(Super::boxed(span, builder))
}
#[inline]
pub fn new_array_expression<B: GetAstBuilder<'a>>(
span: Span,
elements: ArenaVec<'a, ArrayExpressionElement<'a>>,
builder: &B,
) -> Self {
Self::ArrayExpression(ArrayExpression::boxed(span, elements, builder))
}
#[inline]
pub fn new_arrow_function_expression<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
Self::ArrowFunctionExpression(ArrowFunctionExpression::boxed(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_arrow_function_expression_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
Self::ArrowFunctionExpression(
ArrowFunctionExpression::boxed_with_scope_id_and_pure_and_pife(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
),
)
}
#[inline]
pub fn new_assignment_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: AssignmentOperator,
left: AssignmentTarget<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::AssignmentExpression(AssignmentExpression::boxed(
span, operator, left, right, builder,
))
}
#[inline]
pub fn new_await_expression<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::AwaitExpression(AwaitExpression::boxed(span, argument, builder))
}
#[inline]
pub fn new_binary_expression<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: BinaryOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::BinaryExpression(BinaryExpression::boxed(span, left, operator, right, builder))
}
#[inline]
pub fn new_call_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed(
span,
callee,
type_arguments,
arguments,
optional,
builder,
))
}
#[inline]
pub fn new_call_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
optional,
pure,
builder,
))
}
#[inline]
pub fn new_chain_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: ChainElement<'a>,
builder: &B,
) -> Self {
Self::ChainExpression(ChainExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_class_expression<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassExpression(Class::boxed(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
builder,
))
}
#[inline]
pub fn new_class_expression_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassExpression(Class::boxed_with_scope_id(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_conditional_expression<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
consequent: Expression<'a>,
alternate: Expression<'a>,
builder: &B,
) -> Self {
Self::ConditionalExpression(ConditionalExpression::boxed(
span, test, consequent, alternate, builder,
))
}
#[inline]
pub fn new_function_expression<B: GetAstBuilder<'a>, T1, T2, T3, T4, T5>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionExpression(Function::boxed(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_function_expression_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
T5,
>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionExpression(Function::boxed_with_scope_id_and_pure_and_pife(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
))
}
#[inline]
pub fn new_import_expression<B: GetAstBuilder<'a>>(
span: Span,
source: Expression<'a>,
options: Option<Expression<'a>>,
phase: Option<ImportPhase>,
builder: &B,
) -> Self {
Self::ImportExpression(ImportExpression::boxed(span, source, options, phase, builder))
}
#[inline]
pub fn new_logical_expression<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: LogicalOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::LogicalExpression(LogicalExpression::boxed(span, left, operator, right, builder))
}
#[inline]
pub fn new_new_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::NewExpression(NewExpression::boxed(span, callee, type_arguments, arguments, builder))
}
#[inline]
pub fn new_new_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::NewExpression(NewExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
pure,
builder,
))
}
#[inline]
pub fn new_object_expression<B: GetAstBuilder<'a>>(
span: Span,
properties: ArenaVec<'a, ObjectPropertyKind<'a>>,
builder: &B,
) -> Self {
Self::ObjectExpression(ObjectExpression::boxed(span, properties, builder))
}
#[inline]
pub fn new_parenthesized_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::ParenthesizedExpression(ParenthesizedExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_sequence_expression<B: GetAstBuilder<'a>>(
span: Span,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::SequenceExpression(SequenceExpression::boxed(span, expressions, builder))
}
#[inline]
pub fn new_tagged_template_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
tag: Expression<'a>,
type_arguments: T1,
quasi: TemplateLiteral<'a>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::TaggedTemplateExpression(TaggedTemplateExpression::boxed(
span,
tag,
type_arguments,
quasi,
builder,
))
}
#[inline]
pub fn new_this_expression<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::ThisExpression(ThisExpression::boxed(span, builder))
}
#[inline]
pub fn new_unary_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UnaryOperator,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::UnaryExpression(UnaryExpression::boxed(span, operator, argument, builder))
}
#[inline]
pub fn new_update_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UpdateOperator,
prefix: bool,
argument: SimpleAssignmentTarget<'a>,
builder: &B,
) -> Self {
Self::UpdateExpression(UpdateExpression::boxed(span, operator, prefix, argument, builder))
}
#[inline]
pub fn new_yield_expression<B: GetAstBuilder<'a>>(
span: Span,
delegate: bool,
argument: Option<Expression<'a>>,
builder: &B,
) -> Self {
Self::YieldExpression(YieldExpression::boxed(span, delegate, argument, builder))
}
#[inline]
pub fn new_private_in_expression<B: GetAstBuilder<'a>>(
span: Span,
left: PrivateIdentifier<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::PrivateInExpression(PrivateInExpression::boxed(span, left, right, builder))
}
#[inline]
pub fn new_jsx_element<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
opening_element: T1,
children: ArenaVec<'a, JSXChild<'a>>,
closing_element: T2,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, JSXOpeningElement<'a>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, JSXClosingElement<'a>>>>,
{
Self::JSXElement(JSXElement::boxed(
span,
opening_element,
children,
closing_element,
builder,
))
}
#[inline]
pub fn new_jsx_fragment<B: GetAstBuilder<'a>>(
span: Span,
opening_fragment: JSXOpeningFragment,
children: ArenaVec<'a, JSXChild<'a>>,
closing_fragment: JSXClosingFragment,
builder: &B,
) -> Self {
Self::JSXFragment(JSXFragment::boxed(
span,
opening_fragment,
children,
closing_fragment,
builder,
))
}
#[inline]
pub fn new_ts_as_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSAsExpression(TSAsExpression::boxed(span, expression, type_annotation, builder))
}
#[inline]
pub fn new_ts_satisfies_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSSatisfiesExpression(TSSatisfiesExpression::boxed(
span,
expression,
type_annotation,
builder,
))
}
#[inline]
pub fn new_ts_type_assertion<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSTypeAssertion(TSTypeAssertion::boxed(span, type_annotation, expression, builder))
}
#[inline]
pub fn new_ts_non_null_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSNonNullExpression(TSNonNullExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_ts_instantiation_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
expression: Expression<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeParameterInstantiation<'a>>>,
{
Self::TSInstantiationExpression(TSInstantiationExpression::boxed(
span,
expression,
type_arguments,
builder,
))
}
#[inline]
pub fn new_v8_intrinsic_expression<B: GetAstBuilder<'a>>(
span: Span,
name: IdentifierName<'a>,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self {
Self::V8IntrinsicExpression(V8IntrinsicExpression::boxed(span, name, arguments, builder))
}
#[inline]
pub fn new_computed_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::ComputedMemberExpression(ComputedMemberExpression::boxed(
span, object, expression, optional, builder,
))
}
#[inline]
pub fn new_static_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::StaticMemberExpression(StaticMemberExpression::boxed(
span, object, property, optional, builder,
))
}
#[inline]
pub fn new_private_field_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::PrivateFieldExpression(PrivateFieldExpression::boxed(
span, object, field, optional, builder,
))
}
}
impl<'a> UpdateExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
operator: UpdateOperator,
prefix: bool,
argument: SimpleAssignmentTarget<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
UpdateExpression { node_id: Cell::new(builder.node_id()), span, operator, prefix, argument }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
operator: UpdateOperator,
prefix: bool,
argument: SimpleAssignmentTarget<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, operator, prefix, argument, builder), builder.builder())
}
}
impl<'a> UnaryExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
operator: UnaryOperator,
argument: Expression<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
UnaryExpression { node_id: Cell::new(builder.node_id()), span, operator, argument }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
operator: UnaryOperator,
argument: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, operator, argument, builder), builder.builder())
}
}
impl<'a> BinaryExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: BinaryOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
BinaryExpression { node_id: Cell::new(builder.node_id()), span, left, operator, right }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: BinaryOperator,
right: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, left, operator, right, builder), builder.builder())
}
}
impl<'a> PrivateInExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
left: PrivateIdentifier<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
PrivateInExpression { node_id: Cell::new(builder.node_id()), span, left, right }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
left: PrivateIdentifier<'a>,
right: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, left, right, builder), builder.builder())
}
}
impl<'a> LogicalExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: LogicalOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
LogicalExpression { node_id: Cell::new(builder.node_id()), span, left, operator, right }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: LogicalOperator,
right: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, left, operator, right, builder), builder.builder())
}
}
impl<'a> ConditionalExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
consequent: Expression<'a>,
alternate: Expression<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
ConditionalExpression {
node_id: Cell::new(builder.node_id()),
span,
test,
consequent,
alternate,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
consequent: Expression<'a>,
alternate: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, test, consequent, alternate, builder), builder.builder())
}
}
impl<'a> AssignmentExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
operator: AssignmentOperator,
left: AssignmentTarget<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
AssignmentExpression { node_id: Cell::new(builder.node_id()), span, operator, left, right }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
operator: AssignmentOperator,
left: AssignmentTarget<'a>,
right: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, operator, left, right, builder), builder.builder())
}
}
impl<'a> AssignmentTarget<'a> {
#[inline]
pub fn new_assignment_target_identifier<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::AssignmentTargetIdentifier(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_assignment_target_identifier_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::AssignmentTargetIdentifier(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_ts_as_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSAsExpression(TSAsExpression::boxed(span, expression, type_annotation, builder))
}
#[inline]
pub fn new_ts_satisfies_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSSatisfiesExpression(TSSatisfiesExpression::boxed(
span,
expression,
type_annotation,
builder,
))
}
#[inline]
pub fn new_ts_non_null_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSNonNullExpression(TSNonNullExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_ts_type_assertion<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSTypeAssertion(TSTypeAssertion::boxed(span, type_annotation, expression, builder))
}
#[inline]
pub fn new_computed_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::ComputedMemberExpression(ComputedMemberExpression::boxed(
span, object, expression, optional, builder,
))
}
#[inline]
pub fn new_static_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::StaticMemberExpression(StaticMemberExpression::boxed(
span, object, property, optional, builder,
))
}
#[inline]
pub fn new_private_field_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::PrivateFieldExpression(PrivateFieldExpression::boxed(
span, object, field, optional, builder,
))
}
#[inline]
pub fn new_array_assignment_target<B: GetAstBuilder<'a>, T1>(
span: Span,
elements: ArenaVec<'a, Option<AssignmentTargetMaybeDefault<'a>>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, AssignmentTargetRest<'a>>>>,
{
Self::ArrayAssignmentTarget(ArrayAssignmentTarget::boxed(span, elements, rest, builder))
}
#[inline]
pub fn new_object_assignment_target<B: GetAstBuilder<'a>, T1>(
span: Span,
properties: ArenaVec<'a, AssignmentTargetProperty<'a>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, AssignmentTargetRest<'a>>>>,
{
Self::ObjectAssignmentTarget(ObjectAssignmentTarget::boxed(span, properties, rest, builder))
}
}
impl<'a> SimpleAssignmentTarget<'a> {
#[inline]
pub fn new_assignment_target_identifier<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::AssignmentTargetIdentifier(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_assignment_target_identifier_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::AssignmentTargetIdentifier(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_ts_as_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSAsExpression(TSAsExpression::boxed(span, expression, type_annotation, builder))
}
#[inline]
pub fn new_ts_satisfies_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSSatisfiesExpression(TSSatisfiesExpression::boxed(
span,
expression,
type_annotation,
builder,
))
}
#[inline]
pub fn new_ts_non_null_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSNonNullExpression(TSNonNullExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_ts_type_assertion<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSTypeAssertion(TSTypeAssertion::boxed(span, type_annotation, expression, builder))
}
#[inline]
pub fn new_computed_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::ComputedMemberExpression(ComputedMemberExpression::boxed(
span, object, expression, optional, builder,
))
}
#[inline]
pub fn new_static_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::StaticMemberExpression(StaticMemberExpression::boxed(
span, object, property, optional, builder,
))
}
#[inline]
pub fn new_private_field_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::PrivateFieldExpression(PrivateFieldExpression::boxed(
span, object, field, optional, builder,
))
}
}
impl<'a> AssignmentTargetPattern<'a> {
#[inline]
pub fn new_array_assignment_target<B: GetAstBuilder<'a>, T1>(
span: Span,
elements: ArenaVec<'a, Option<AssignmentTargetMaybeDefault<'a>>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, AssignmentTargetRest<'a>>>>,
{
Self::ArrayAssignmentTarget(ArrayAssignmentTarget::boxed(span, elements, rest, builder))
}
#[inline]
pub fn new_object_assignment_target<B: GetAstBuilder<'a>, T1>(
span: Span,
properties: ArenaVec<'a, AssignmentTargetProperty<'a>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, AssignmentTargetRest<'a>>>>,
{
Self::ObjectAssignmentTarget(ObjectAssignmentTarget::boxed(span, properties, rest, builder))
}
}
impl<'a> ArrayAssignmentTarget<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
elements: ArenaVec<'a, Option<AssignmentTargetMaybeDefault<'a>>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, AssignmentTargetRest<'a>>>>,
{
let builder = builder.builder();
ArrayAssignmentTarget {
node_id: Cell::new(builder.node_id()),
span,
elements,
rest: rest.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
elements: ArenaVec<'a, Option<AssignmentTargetMaybeDefault<'a>>>,
rest: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, AssignmentTargetRest<'a>>>>,
{
ArenaBox::new_in(Self::new(span, elements, rest, builder), builder.builder())
}
}
impl<'a> ObjectAssignmentTarget<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
properties: ArenaVec<'a, AssignmentTargetProperty<'a>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, AssignmentTargetRest<'a>>>>,
{
let builder = builder.builder();
ObjectAssignmentTarget {
node_id: Cell::new(builder.node_id()),
span,
properties,
rest: rest.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
properties: ArenaVec<'a, AssignmentTargetProperty<'a>>,
rest: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, AssignmentTargetRest<'a>>>>,
{
ArenaBox::new_in(Self::new(span, properties, rest, builder), builder.builder())
}
}
impl<'a> AssignmentTargetRest<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
target: AssignmentTarget<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
AssignmentTargetRest { node_id: Cell::new(builder.node_id()), span, target }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
target: AssignmentTarget<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, target, builder), builder.builder())
}
}
impl<'a> AssignmentTargetMaybeDefault<'a> {
#[inline]
pub fn new_assignment_target_with_default<B: GetAstBuilder<'a>>(
span: Span,
binding: AssignmentTarget<'a>,
init: Expression<'a>,
builder: &B,
) -> Self {
Self::AssignmentTargetWithDefault(AssignmentTargetWithDefault::boxed(
span, binding, init, builder,
))
}
#[inline]
pub fn new_assignment_target_identifier<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::AssignmentTargetIdentifier(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_assignment_target_identifier_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::AssignmentTargetIdentifier(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_ts_as_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSAsExpression(TSAsExpression::boxed(span, expression, type_annotation, builder))
}
#[inline]
pub fn new_ts_satisfies_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSSatisfiesExpression(TSSatisfiesExpression::boxed(
span,
expression,
type_annotation,
builder,
))
}
#[inline]
pub fn new_ts_non_null_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSNonNullExpression(TSNonNullExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_ts_type_assertion<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSTypeAssertion(TSTypeAssertion::boxed(span, type_annotation, expression, builder))
}
#[inline]
pub fn new_computed_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::ComputedMemberExpression(ComputedMemberExpression::boxed(
span, object, expression, optional, builder,
))
}
#[inline]
pub fn new_static_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::StaticMemberExpression(StaticMemberExpression::boxed(
span, object, property, optional, builder,
))
}
#[inline]
pub fn new_private_field_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::PrivateFieldExpression(PrivateFieldExpression::boxed(
span, object, field, optional, builder,
))
}
#[inline]
pub fn new_array_assignment_target<B: GetAstBuilder<'a>, T1>(
span: Span,
elements: ArenaVec<'a, Option<AssignmentTargetMaybeDefault<'a>>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, AssignmentTargetRest<'a>>>>,
{
Self::ArrayAssignmentTarget(ArrayAssignmentTarget::boxed(span, elements, rest, builder))
}
#[inline]
pub fn new_object_assignment_target<B: GetAstBuilder<'a>, T1>(
span: Span,
properties: ArenaVec<'a, AssignmentTargetProperty<'a>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, AssignmentTargetRest<'a>>>>,
{
Self::ObjectAssignmentTarget(ObjectAssignmentTarget::boxed(span, properties, rest, builder))
}
}
impl<'a> AssignmentTargetWithDefault<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
binding: AssignmentTarget<'a>,
init: Expression<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
AssignmentTargetWithDefault { node_id: Cell::new(builder.node_id()), span, binding, init }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
binding: AssignmentTarget<'a>,
init: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, binding, init, builder), builder.builder())
}
}
impl<'a> AssignmentTargetProperty<'a> {
#[inline]
pub fn new_assignment_target_property_identifier<B: GetAstBuilder<'a>>(
span: Span,
binding: IdentifierReference<'a>,
init: Option<Expression<'a>>,
builder: &B,
) -> Self {
Self::AssignmentTargetPropertyIdentifier(AssignmentTargetPropertyIdentifier::boxed(
span, binding, init, builder,
))
}
#[inline]
pub fn new_assignment_target_property_property<B: GetAstBuilder<'a>>(
span: Span,
name: PropertyKey<'a>,
binding: AssignmentTargetMaybeDefault<'a>,
computed: bool,
builder: &B,
) -> Self {
Self::AssignmentTargetPropertyProperty(AssignmentTargetPropertyProperty::boxed(
span, name, binding, computed, builder,
))
}
}
impl<'a> AssignmentTargetPropertyIdentifier<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
binding: IdentifierReference<'a>,
init: Option<Expression<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
AssignmentTargetPropertyIdentifier {
node_id: Cell::new(builder.node_id()),
span,
binding,
init,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
binding: IdentifierReference<'a>,
init: Option<Expression<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, binding, init, builder), builder.builder())
}
}
impl<'a> AssignmentTargetPropertyProperty<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
name: PropertyKey<'a>,
binding: AssignmentTargetMaybeDefault<'a>,
computed: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
AssignmentTargetPropertyProperty {
node_id: Cell::new(builder.node_id()),
span,
name,
binding,
computed,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
name: PropertyKey<'a>,
binding: AssignmentTargetMaybeDefault<'a>,
computed: bool,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, name, binding, computed, builder), builder.builder())
}
}
impl<'a> SequenceExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
SequenceExpression { node_id: Cell::new(builder.node_id()), span, expressions }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, expressions, builder), builder.builder())
}
}
impl Super {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
Super { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl<'a> AwaitExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, argument: Expression<'a>, builder: &B) -> Self {
let builder = builder.builder();
AwaitExpression { node_id: Cell::new(builder.node_id()), span, argument }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, argument, builder), builder.builder())
}
}
impl<'a> ChainExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
expression: ChainElement<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
ChainExpression { node_id: Cell::new(builder.node_id()), span, expression }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
expression: ChainElement<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, expression, builder), builder.builder())
}
}
impl<'a> ChainElement<'a> {
#[inline]
pub fn new_call_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed(
span,
callee,
type_arguments,
arguments,
optional,
builder,
))
}
#[inline]
pub fn new_call_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
optional,
pure,
builder,
))
}
#[inline]
pub fn new_ts_non_null_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSNonNullExpression(TSNonNullExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_computed_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::ComputedMemberExpression(ComputedMemberExpression::boxed(
span, object, expression, optional, builder,
))
}
#[inline]
pub fn new_static_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::StaticMemberExpression(StaticMemberExpression::boxed(
span, object, property, optional, builder,
))
}
#[inline]
pub fn new_private_field_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::PrivateFieldExpression(PrivateFieldExpression::boxed(
span, object, field, optional, builder,
))
}
}
impl<'a> ParenthesizedExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, expression: Expression<'a>, builder: &B) -> Self {
let builder = builder.builder();
ParenthesizedExpression { node_id: Cell::new(builder.node_id()), span, expression }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, expression, builder), builder.builder())
}
}
impl<'a> Statement<'a> {
#[inline]
pub fn new_block_statement<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, Statement<'a>>,
builder: &B,
) -> Self {
Self::BlockStatement(BlockStatement::boxed(span, body, builder))
}
#[inline]
pub fn new_block_statement_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, Statement<'a>>,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::BlockStatement(BlockStatement::boxed_with_scope_id(span, body, scope_id, builder))
}
#[inline]
pub fn new_break_statement<B: GetAstBuilder<'a>>(
span: Span,
label: Option<LabelIdentifier<'a>>,
builder: &B,
) -> Self {
Self::BreakStatement(BreakStatement::boxed(span, label, builder))
}
#[inline]
pub fn new_continue_statement<B: GetAstBuilder<'a>>(
span: Span,
label: Option<LabelIdentifier<'a>>,
builder: &B,
) -> Self {
Self::ContinueStatement(ContinueStatement::boxed(span, label, builder))
}
#[inline]
pub fn new_debugger_statement<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::DebuggerStatement(DebuggerStatement::boxed(span, builder))
}
#[inline]
pub fn new_do_while_statement<B: GetAstBuilder<'a>>(
span: Span,
body: Statement<'a>,
test: Expression<'a>,
builder: &B,
) -> Self {
Self::DoWhileStatement(DoWhileStatement::boxed(span, body, test, builder))
}
#[inline]
pub fn new_empty_statement<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::EmptyStatement(EmptyStatement::boxed(span, builder))
}
#[inline]
pub fn new_expression_statement<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::ExpressionStatement(ExpressionStatement::boxed(span, expression, builder))
}
#[inline]
pub fn new_for_in_statement<B: GetAstBuilder<'a>>(
span: Span,
left: ForStatementLeft<'a>,
right: Expression<'a>,
body: Statement<'a>,
builder: &B,
) -> Self {
Self::ForInStatement(ForInStatement::boxed(span, left, right, body, builder))
}
#[inline]
pub fn new_for_in_statement_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
left: ForStatementLeft<'a>,
right: Expression<'a>,
body: Statement<'a>,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::ForInStatement(ForInStatement::boxed_with_scope_id(
span, left, right, body, scope_id, builder,
))
}
#[inline]
pub fn new_for_of_statement<B: GetAstBuilder<'a>>(
span: Span,
r#await: bool,
left: ForStatementLeft<'a>,
right: Expression<'a>,
body: Statement<'a>,
builder: &B,
) -> Self {
Self::ForOfStatement(ForOfStatement::boxed(span, r#await, left, right, body, builder))
}
#[inline]
pub fn new_for_of_statement_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
r#await: bool,
left: ForStatementLeft<'a>,
right: Expression<'a>,
body: Statement<'a>,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::ForOfStatement(ForOfStatement::boxed_with_scope_id(
span, r#await, left, right, body, scope_id, builder,
))
}
#[inline]
pub fn new_for_statement<B: GetAstBuilder<'a>>(
span: Span,
init: Option<ForStatementInit<'a>>,
test: Option<Expression<'a>>,
update: Option<Expression<'a>>,
body: Statement<'a>,
builder: &B,
) -> Self {
Self::ForStatement(ForStatement::boxed(span, init, test, update, body, builder))
}
#[inline]
pub fn new_for_statement_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
init: Option<ForStatementInit<'a>>,
test: Option<Expression<'a>>,
update: Option<Expression<'a>>,
body: Statement<'a>,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::ForStatement(ForStatement::boxed_with_scope_id(
span, init, test, update, body, scope_id, builder,
))
}
#[inline]
pub fn new_if_statement<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
consequent: Statement<'a>,
alternate: Option<Statement<'a>>,
builder: &B,
) -> Self {
Self::IfStatement(IfStatement::boxed(span, test, consequent, alternate, builder))
}
#[inline]
pub fn new_labeled_statement<B: GetAstBuilder<'a>>(
span: Span,
label: LabelIdentifier<'a>,
body: Statement<'a>,
builder: &B,
) -> Self {
Self::LabeledStatement(LabeledStatement::boxed(span, label, body, builder))
}
#[inline]
pub fn new_return_statement<B: GetAstBuilder<'a>>(
span: Span,
argument: Option<Expression<'a>>,
builder: &B,
) -> Self {
Self::ReturnStatement(ReturnStatement::boxed(span, argument, builder))
}
#[inline]
pub fn new_switch_statement<B: GetAstBuilder<'a>>(
span: Span,
discriminant: Expression<'a>,
cases: ArenaVec<'a, SwitchCase<'a>>,
builder: &B,
) -> Self {
Self::SwitchStatement(SwitchStatement::boxed(span, discriminant, cases, builder))
}
#[inline]
pub fn new_switch_statement_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
discriminant: Expression<'a>,
cases: ArenaVec<'a, SwitchCase<'a>>,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::SwitchStatement(SwitchStatement::boxed_with_scope_id(
span,
discriminant,
cases,
scope_id,
builder,
))
}
#[inline]
pub fn new_throw_statement<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::ThrowStatement(ThrowStatement::boxed(span, argument, builder))
}
#[inline]
pub fn new_try_statement<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
block: T1,
handler: T2,
finalizer: T3,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, BlockStatement<'a>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, CatchClause<'a>>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, BlockStatement<'a>>>>,
{
Self::TryStatement(TryStatement::boxed(span, block, handler, finalizer, builder))
}
#[inline]
pub fn new_while_statement<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
body: Statement<'a>,
builder: &B,
) -> Self {
Self::WhileStatement(WhileStatement::boxed(span, test, body, builder))
}
#[inline]
pub fn new_with_statement<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
body: Statement<'a>,
builder: &B,
) -> Self {
Self::WithStatement(WithStatement::boxed(span, object, body, builder))
}
#[inline]
pub fn new_with_statement_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
body: Statement<'a>,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::WithStatement(WithStatement::boxed_with_scope_id(
span, object, body, scope_id, builder,
))
}
#[inline]
pub fn new_variable_declaration<B: GetAstBuilder<'a>>(
span: Span,
kind: VariableDeclarationKind,
declarations: ArenaVec<'a, VariableDeclarator<'a>>,
declare: bool,
builder: &B,
) -> Self {
Self::VariableDeclaration(VariableDeclaration::boxed(
span,
kind,
declarations,
declare,
builder,
))
}
#[inline]
pub fn new_function_declaration<B: GetAstBuilder<'a>, T1, T2, T3, T4, T5>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionDeclaration(Function::boxed(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_function_declaration_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
T5,
>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionDeclaration(Function::boxed_with_scope_id_and_pure_and_pife(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
))
}
#[inline]
pub fn new_class_declaration<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassDeclaration(Class::boxed(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
builder,
))
}
#[inline]
pub fn new_class_declaration_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassDeclaration(Class::boxed_with_scope_id(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_type_alias_declaration<B: GetAstBuilder<'a>, T1>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
type_annotation: TSType<'a>,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
{
Self::TSTypeAliasDeclaration(TSTypeAliasDeclaration::boxed(
span,
id,
type_parameters,
type_annotation,
declare,
builder,
))
}
#[inline]
pub fn new_ts_type_alias_declaration_with_scope_id<B: GetAstBuilder<'a>, T1>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
type_annotation: TSType<'a>,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
{
Self::TSTypeAliasDeclaration(TSTypeAliasDeclaration::boxed_with_scope_id(
span,
id,
type_parameters,
type_annotation,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_interface_declaration<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
extends: ArenaVec<'a, TSInterfaceHeritage<'a>>,
body: T2,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, TSInterfaceBody<'a>>>,
{
Self::TSInterfaceDeclaration(TSInterfaceDeclaration::boxed(
span,
id,
type_parameters,
extends,
body,
declare,
builder,
))
}
#[inline]
pub fn new_ts_interface_declaration_with_scope_id<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
extends: ArenaVec<'a, TSInterfaceHeritage<'a>>,
body: T2,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, TSInterfaceBody<'a>>>,
{
Self::TSInterfaceDeclaration(TSInterfaceDeclaration::boxed_with_scope_id(
span,
id,
type_parameters,
extends,
body,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_enum_declaration<B: GetAstBuilder<'a>>(
span: Span,
id: BindingIdentifier<'a>,
body: TSEnumBody<'a>,
r#const: bool,
declare: bool,
builder: &B,
) -> Self {
Self::TSEnumDeclaration(TSEnumDeclaration::boxed(span, id, body, r#const, declare, builder))
}
#[inline]
pub fn new_ts_module_declaration<B: GetAstBuilder<'a>>(
span: Span,
id: TSModuleDeclarationName<'a>,
body: Option<TSModuleDeclarationBody<'a>>,
kind: TSModuleDeclarationKind,
declare: bool,
builder: &B,
) -> Self {
Self::TSModuleDeclaration(TSModuleDeclaration::boxed(
span, id, body, kind, declare, builder,
))
}
#[inline]
pub fn new_ts_module_declaration_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
id: TSModuleDeclarationName<'a>,
body: Option<TSModuleDeclarationBody<'a>>,
kind: TSModuleDeclarationKind,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::TSModuleDeclaration(TSModuleDeclaration::boxed_with_scope_id(
span, id, body, kind, declare, scope_id, builder,
))
}
#[inline]
pub fn new_ts_global_declaration<B: GetAstBuilder<'a>>(
span: Span,
global_span: Span,
body: TSModuleBlock<'a>,
declare: bool,
builder: &B,
) -> Self {
Self::TSGlobalDeclaration(TSGlobalDeclaration::boxed(
span,
global_span,
body,
declare,
builder,
))
}
#[inline]
pub fn new_ts_global_declaration_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
global_span: Span,
body: TSModuleBlock<'a>,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::TSGlobalDeclaration(TSGlobalDeclaration::boxed_with_scope_id(
span,
global_span,
body,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_import_equals_declaration<B: GetAstBuilder<'a>>(
span: Span,
id: BindingIdentifier<'a>,
module_reference: TSModuleReference<'a>,
import_kind: ImportOrExportKind,
builder: &B,
) -> Self {
Self::TSImportEqualsDeclaration(TSImportEqualsDeclaration::boxed(
span,
id,
module_reference,
import_kind,
builder,
))
}
#[inline]
pub fn new_import_declaration<B: GetAstBuilder<'a>, T1>(
span: Span,
specifiers: Option<ArenaVec<'a, ImportDeclarationSpecifier<'a>>>,
source: StringLiteral<'a>,
phase: Option<ImportPhase>,
with_clause: T1,
import_kind: ImportOrExportKind,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, WithClause<'a>>>>,
{
Self::ImportDeclaration(ImportDeclaration::boxed(
span,
specifiers,
source,
phase,
with_clause,
import_kind,
builder,
))
}
#[inline]
pub fn new_export_all_declaration<B: GetAstBuilder<'a>, T1>(
span: Span,
exported: Option<ModuleExportName<'a>>,
source: StringLiteral<'a>,
with_clause: T1,
export_kind: ImportOrExportKind,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, WithClause<'a>>>>,
{
Self::ExportAllDeclaration(ExportAllDeclaration::boxed(
span,
exported,
source,
with_clause,
export_kind,
builder,
))
}
#[inline]
pub fn new_export_default_declaration<B: GetAstBuilder<'a>>(
span: Span,
declaration: ExportDefaultDeclarationKind<'a>,
builder: &B,
) -> Self {
Self::ExportDefaultDeclaration(ExportDefaultDeclaration::boxed(span, declaration, builder))
}
#[inline]
pub fn new_export_named_declaration<B: GetAstBuilder<'a>, T1>(
span: Span,
declaration: Option<Declaration<'a>>,
specifiers: ArenaVec<'a, ExportSpecifier<'a>>,
source: Option<StringLiteral<'a>>,
export_kind: ImportOrExportKind,
with_clause: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, WithClause<'a>>>>,
{
Self::ExportNamedDeclaration(ExportNamedDeclaration::boxed(
span,
declaration,
specifiers,
source,
export_kind,
with_clause,
builder,
))
}
#[inline]
pub fn new_ts_export_assignment<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSExportAssignment(TSExportAssignment::boxed(span, expression, builder))
}
#[inline]
pub fn new_ts_namespace_export_declaration<B: GetAstBuilder<'a>>(
span: Span,
id: IdentifierName<'a>,
builder: &B,
) -> Self {
Self::TSNamespaceExportDeclaration(TSNamespaceExportDeclaration::boxed(span, id, builder))
}
}
impl<'a> Directive<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, S1>(
span: Span,
expression: StringLiteral<'a>,
directive: S1,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
let builder = builder.builder();
Directive {
node_id: Cell::new(builder.node_id()),
span,
expression,
directive: directive.into(),
}
}
}
impl<'a> Hashbang<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, S1>(span: Span, value: S1, builder: &B) -> Self
where
S1: Into<Str<'a>>,
{
let builder = builder.builder();
Hashbang { node_id: Cell::new(builder.node_id()), span, value: value.into() }
}
}
impl<'a> BlockStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, Statement<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
BlockStatement {
node_id: Cell::new(builder.node_id()),
span,
body,
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, Statement<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, body, builder), builder.builder())
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, Statement<'a>>,
scope_id: ScopeId,
builder: &B,
) -> Self {
let builder = builder.builder();
BlockStatement {
node_id: Cell::new(builder.node_id()),
span,
body,
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, Statement<'a>>,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new_with_scope_id(span, body, scope_id, builder), builder.builder())
}
}
impl<'a> Declaration<'a> {
#[inline]
pub fn new_variable_declaration<B: GetAstBuilder<'a>>(
span: Span,
kind: VariableDeclarationKind,
declarations: ArenaVec<'a, VariableDeclarator<'a>>,
declare: bool,
builder: &B,
) -> Self {
Self::VariableDeclaration(VariableDeclaration::boxed(
span,
kind,
declarations,
declare,
builder,
))
}
#[inline]
pub fn new_function_declaration<B: GetAstBuilder<'a>, T1, T2, T3, T4, T5>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionDeclaration(Function::boxed(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_function_declaration_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
T5,
>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionDeclaration(Function::boxed_with_scope_id_and_pure_and_pife(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
))
}
#[inline]
pub fn new_class_declaration<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassDeclaration(Class::boxed(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
builder,
))
}
#[inline]
pub fn new_class_declaration_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassDeclaration(Class::boxed_with_scope_id(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_type_alias_declaration<B: GetAstBuilder<'a>, T1>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
type_annotation: TSType<'a>,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
{
Self::TSTypeAliasDeclaration(TSTypeAliasDeclaration::boxed(
span,
id,
type_parameters,
type_annotation,
declare,
builder,
))
}
#[inline]
pub fn new_ts_type_alias_declaration_with_scope_id<B: GetAstBuilder<'a>, T1>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
type_annotation: TSType<'a>,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
{
Self::TSTypeAliasDeclaration(TSTypeAliasDeclaration::boxed_with_scope_id(
span,
id,
type_parameters,
type_annotation,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_interface_declaration<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
extends: ArenaVec<'a, TSInterfaceHeritage<'a>>,
body: T2,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, TSInterfaceBody<'a>>>,
{
Self::TSInterfaceDeclaration(TSInterfaceDeclaration::boxed(
span,
id,
type_parameters,
extends,
body,
declare,
builder,
))
}
#[inline]
pub fn new_ts_interface_declaration_with_scope_id<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
extends: ArenaVec<'a, TSInterfaceHeritage<'a>>,
body: T2,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, TSInterfaceBody<'a>>>,
{
Self::TSInterfaceDeclaration(TSInterfaceDeclaration::boxed_with_scope_id(
span,
id,
type_parameters,
extends,
body,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_enum_declaration<B: GetAstBuilder<'a>>(
span: Span,
id: BindingIdentifier<'a>,
body: TSEnumBody<'a>,
r#const: bool,
declare: bool,
builder: &B,
) -> Self {
Self::TSEnumDeclaration(TSEnumDeclaration::boxed(span, id, body, r#const, declare, builder))
}
#[inline]
pub fn new_ts_module_declaration<B: GetAstBuilder<'a>>(
span: Span,
id: TSModuleDeclarationName<'a>,
body: Option<TSModuleDeclarationBody<'a>>,
kind: TSModuleDeclarationKind,
declare: bool,
builder: &B,
) -> Self {
Self::TSModuleDeclaration(TSModuleDeclaration::boxed(
span, id, body, kind, declare, builder,
))
}
#[inline]
pub fn new_ts_module_declaration_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
id: TSModuleDeclarationName<'a>,
body: Option<TSModuleDeclarationBody<'a>>,
kind: TSModuleDeclarationKind,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::TSModuleDeclaration(TSModuleDeclaration::boxed_with_scope_id(
span, id, body, kind, declare, scope_id, builder,
))
}
#[inline]
pub fn new_ts_global_declaration<B: GetAstBuilder<'a>>(
span: Span,
global_span: Span,
body: TSModuleBlock<'a>,
declare: bool,
builder: &B,
) -> Self {
Self::TSGlobalDeclaration(TSGlobalDeclaration::boxed(
span,
global_span,
body,
declare,
builder,
))
}
#[inline]
pub fn new_ts_global_declaration_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
global_span: Span,
body: TSModuleBlock<'a>,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::TSGlobalDeclaration(TSGlobalDeclaration::boxed_with_scope_id(
span,
global_span,
body,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_import_equals_declaration<B: GetAstBuilder<'a>>(
span: Span,
id: BindingIdentifier<'a>,
module_reference: TSModuleReference<'a>,
import_kind: ImportOrExportKind,
builder: &B,
) -> Self {
Self::TSImportEqualsDeclaration(TSImportEqualsDeclaration::boxed(
span,
id,
module_reference,
import_kind,
builder,
))
}
}
impl<'a> VariableDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
kind: VariableDeclarationKind,
declarations: ArenaVec<'a, VariableDeclarator<'a>>,
declare: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
VariableDeclaration {
node_id: Cell::new(builder.node_id()),
span,
kind,
declarations,
declare,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
kind: VariableDeclarationKind,
declarations: ArenaVec<'a, VariableDeclarator<'a>>,
declare: bool,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, kind, declarations, declare, builder), builder.builder())
}
}
impl<'a> VariableDeclarator<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
kind: VariableDeclarationKind,
id: BindingPattern<'a>,
type_annotation: T1,
init: Option<Expression<'a>>,
definite: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
let builder = builder.builder();
VariableDeclarator {
node_id: Cell::new(builder.node_id()),
span,
kind,
id,
type_annotation: type_annotation.into_in(builder.allocator()),
init,
definite,
}
}
}
impl EmptyStatement {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
EmptyStatement { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl<'a> ExpressionStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, expression: Expression<'a>, builder: &B) -> Self {
let builder = builder.builder();
ExpressionStatement { node_id: Cell::new(builder.node_id()), span, expression }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, expression, builder), builder.builder())
}
}
impl<'a> IfStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
consequent: Statement<'a>,
alternate: Option<Statement<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
IfStatement { node_id: Cell::new(builder.node_id()), span, test, consequent, alternate }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
consequent: Statement<'a>,
alternate: Option<Statement<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, test, consequent, alternate, builder), builder.builder())
}
}
impl<'a> DoWhileStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
body: Statement<'a>,
test: Expression<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
DoWhileStatement { node_id: Cell::new(builder.node_id()), span, body, test }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
body: Statement<'a>,
test: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, body, test, builder), builder.builder())
}
}
impl<'a> WhileStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
body: Statement<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
WhileStatement { node_id: Cell::new(builder.node_id()), span, test, body }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
body: Statement<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, test, body, builder), builder.builder())
}
}
impl<'a> ForStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
init: Option<ForStatementInit<'a>>,
test: Option<Expression<'a>>,
update: Option<Expression<'a>>,
body: Statement<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
ForStatement {
node_id: Cell::new(builder.node_id()),
span,
init,
test,
update,
body,
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
init: Option<ForStatementInit<'a>>,
test: Option<Expression<'a>>,
update: Option<Expression<'a>>,
body: Statement<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, init, test, update, body, builder), builder.builder())
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
init: Option<ForStatementInit<'a>>,
test: Option<Expression<'a>>,
update: Option<Expression<'a>>,
body: Statement<'a>,
scope_id: ScopeId,
builder: &B,
) -> Self {
let builder = builder.builder();
ForStatement {
node_id: Cell::new(builder.node_id()),
span,
init,
test,
update,
body,
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
init: Option<ForStatementInit<'a>>,
test: Option<Expression<'a>>,
update: Option<Expression<'a>>,
body: Statement<'a>,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new_with_scope_id(span, init, test, update, body, scope_id, builder),
builder.builder(),
)
}
}
impl<'a> ForStatementInit<'a> {
#[inline]
pub fn new_variable_declaration<B: GetAstBuilder<'a>>(
span: Span,
kind: VariableDeclarationKind,
declarations: ArenaVec<'a, VariableDeclarator<'a>>,
declare: bool,
builder: &B,
) -> Self {
Self::VariableDeclaration(VariableDeclaration::boxed(
span,
kind,
declarations,
declare,
builder,
))
}
#[inline]
pub fn new_boolean_literal<B: GetAstBuilder<'a>>(span: Span, value: bool, builder: &B) -> Self {
Self::BooleanLiteral(BooleanLiteral::boxed(span, value, builder))
}
#[inline]
pub fn new_null_literal<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::NullLiteral(NullLiteral::boxed(span, builder))
}
#[inline]
pub fn new_numeric_literal<B: GetAstBuilder<'a>>(
span: Span,
value: f64,
raw: Option<Str<'a>>,
base: NumberBase,
builder: &B,
) -> Self {
Self::NumericLiteral(NumericLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_big_int_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
base: BigintBase,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::BigIntLiteral(BigIntLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_reg_exp_literal<B: GetAstBuilder<'a>>(
span: Span,
regex: RegExp<'a>,
raw: Option<Str<'a>>,
builder: &B,
) -> Self {
Self::RegExpLiteral(RegExpLiteral::boxed(span, regex, raw, builder))
}
#[inline]
pub fn new_string_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed(span, value, raw, builder))
}
#[inline]
pub fn new_string_literal_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed_with_lone_surrogates(
span,
value,
raw,
lone_surrogates,
builder,
))
}
#[inline]
pub fn new_template_literal<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::TemplateLiteral(TemplateLiteral::boxed(span, quasis, expressions, builder))
}
#[inline]
pub fn new_identifier<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_identifier_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_meta_property<B: GetAstBuilder<'a>>(
span: Span,
meta: IdentifierName<'a>,
property: IdentifierName<'a>,
builder: &B,
) -> Self {
Self::MetaProperty(MetaProperty::boxed(span, meta, property, builder))
}
#[inline]
pub fn new_super<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::Super(Super::boxed(span, builder))
}
#[inline]
pub fn new_array_expression<B: GetAstBuilder<'a>>(
span: Span,
elements: ArenaVec<'a, ArrayExpressionElement<'a>>,
builder: &B,
) -> Self {
Self::ArrayExpression(ArrayExpression::boxed(span, elements, builder))
}
#[inline]
pub fn new_arrow_function_expression<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
Self::ArrowFunctionExpression(ArrowFunctionExpression::boxed(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_arrow_function_expression_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
Self::ArrowFunctionExpression(
ArrowFunctionExpression::boxed_with_scope_id_and_pure_and_pife(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
),
)
}
#[inline]
pub fn new_assignment_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: AssignmentOperator,
left: AssignmentTarget<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::AssignmentExpression(AssignmentExpression::boxed(
span, operator, left, right, builder,
))
}
#[inline]
pub fn new_await_expression<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::AwaitExpression(AwaitExpression::boxed(span, argument, builder))
}
#[inline]
pub fn new_binary_expression<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: BinaryOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::BinaryExpression(BinaryExpression::boxed(span, left, operator, right, builder))
}
#[inline]
pub fn new_call_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed(
span,
callee,
type_arguments,
arguments,
optional,
builder,
))
}
#[inline]
pub fn new_call_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
optional,
pure,
builder,
))
}
#[inline]
pub fn new_chain_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: ChainElement<'a>,
builder: &B,
) -> Self {
Self::ChainExpression(ChainExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_class_expression<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassExpression(Class::boxed(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
builder,
))
}
#[inline]
pub fn new_class_expression_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassExpression(Class::boxed_with_scope_id(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_conditional_expression<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
consequent: Expression<'a>,
alternate: Expression<'a>,
builder: &B,
) -> Self {
Self::ConditionalExpression(ConditionalExpression::boxed(
span, test, consequent, alternate, builder,
))
}
#[inline]
pub fn new_function_expression<B: GetAstBuilder<'a>, T1, T2, T3, T4, T5>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionExpression(Function::boxed(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_function_expression_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
T5,
>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionExpression(Function::boxed_with_scope_id_and_pure_and_pife(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
))
}
#[inline]
pub fn new_import_expression<B: GetAstBuilder<'a>>(
span: Span,
source: Expression<'a>,
options: Option<Expression<'a>>,
phase: Option<ImportPhase>,
builder: &B,
) -> Self {
Self::ImportExpression(ImportExpression::boxed(span, source, options, phase, builder))
}
#[inline]
pub fn new_logical_expression<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: LogicalOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::LogicalExpression(LogicalExpression::boxed(span, left, operator, right, builder))
}
#[inline]
pub fn new_new_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::NewExpression(NewExpression::boxed(span, callee, type_arguments, arguments, builder))
}
#[inline]
pub fn new_new_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::NewExpression(NewExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
pure,
builder,
))
}
#[inline]
pub fn new_object_expression<B: GetAstBuilder<'a>>(
span: Span,
properties: ArenaVec<'a, ObjectPropertyKind<'a>>,
builder: &B,
) -> Self {
Self::ObjectExpression(ObjectExpression::boxed(span, properties, builder))
}
#[inline]
pub fn new_parenthesized_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::ParenthesizedExpression(ParenthesizedExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_sequence_expression<B: GetAstBuilder<'a>>(
span: Span,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::SequenceExpression(SequenceExpression::boxed(span, expressions, builder))
}
#[inline]
pub fn new_tagged_template_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
tag: Expression<'a>,
type_arguments: T1,
quasi: TemplateLiteral<'a>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::TaggedTemplateExpression(TaggedTemplateExpression::boxed(
span,
tag,
type_arguments,
quasi,
builder,
))
}
#[inline]
pub fn new_this_expression<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::ThisExpression(ThisExpression::boxed(span, builder))
}
#[inline]
pub fn new_unary_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UnaryOperator,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::UnaryExpression(UnaryExpression::boxed(span, operator, argument, builder))
}
#[inline]
pub fn new_update_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UpdateOperator,
prefix: bool,
argument: SimpleAssignmentTarget<'a>,
builder: &B,
) -> Self {
Self::UpdateExpression(UpdateExpression::boxed(span, operator, prefix, argument, builder))
}
#[inline]
pub fn new_yield_expression<B: GetAstBuilder<'a>>(
span: Span,
delegate: bool,
argument: Option<Expression<'a>>,
builder: &B,
) -> Self {
Self::YieldExpression(YieldExpression::boxed(span, delegate, argument, builder))
}
#[inline]
pub fn new_private_in_expression<B: GetAstBuilder<'a>>(
span: Span,
left: PrivateIdentifier<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::PrivateInExpression(PrivateInExpression::boxed(span, left, right, builder))
}
#[inline]
pub fn new_jsx_element<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
opening_element: T1,
children: ArenaVec<'a, JSXChild<'a>>,
closing_element: T2,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, JSXOpeningElement<'a>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, JSXClosingElement<'a>>>>,
{
Self::JSXElement(JSXElement::boxed(
span,
opening_element,
children,
closing_element,
builder,
))
}
#[inline]
pub fn new_jsx_fragment<B: GetAstBuilder<'a>>(
span: Span,
opening_fragment: JSXOpeningFragment,
children: ArenaVec<'a, JSXChild<'a>>,
closing_fragment: JSXClosingFragment,
builder: &B,
) -> Self {
Self::JSXFragment(JSXFragment::boxed(
span,
opening_fragment,
children,
closing_fragment,
builder,
))
}
#[inline]
pub fn new_ts_as_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSAsExpression(TSAsExpression::boxed(span, expression, type_annotation, builder))
}
#[inline]
pub fn new_ts_satisfies_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSSatisfiesExpression(TSSatisfiesExpression::boxed(
span,
expression,
type_annotation,
builder,
))
}
#[inline]
pub fn new_ts_type_assertion<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSTypeAssertion(TSTypeAssertion::boxed(span, type_annotation, expression, builder))
}
#[inline]
pub fn new_ts_non_null_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSNonNullExpression(TSNonNullExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_ts_instantiation_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
expression: Expression<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeParameterInstantiation<'a>>>,
{
Self::TSInstantiationExpression(TSInstantiationExpression::boxed(
span,
expression,
type_arguments,
builder,
))
}
#[inline]
pub fn new_v8_intrinsic_expression<B: GetAstBuilder<'a>>(
span: Span,
name: IdentifierName<'a>,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self {
Self::V8IntrinsicExpression(V8IntrinsicExpression::boxed(span, name, arguments, builder))
}
#[inline]
pub fn new_computed_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::ComputedMemberExpression(ComputedMemberExpression::boxed(
span, object, expression, optional, builder,
))
}
#[inline]
pub fn new_static_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::StaticMemberExpression(StaticMemberExpression::boxed(
span, object, property, optional, builder,
))
}
#[inline]
pub fn new_private_field_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::PrivateFieldExpression(PrivateFieldExpression::boxed(
span, object, field, optional, builder,
))
}
}
impl<'a> ForInStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
left: ForStatementLeft<'a>,
right: Expression<'a>,
body: Statement<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
ForInStatement {
node_id: Cell::new(builder.node_id()),
span,
left,
right,
body,
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
left: ForStatementLeft<'a>,
right: Expression<'a>,
body: Statement<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, left, right, body, builder), builder.builder())
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
left: ForStatementLeft<'a>,
right: Expression<'a>,
body: Statement<'a>,
scope_id: ScopeId,
builder: &B,
) -> Self {
let builder = builder.builder();
ForInStatement {
node_id: Cell::new(builder.node_id()),
span,
left,
right,
body,
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
left: ForStatementLeft<'a>,
right: Expression<'a>,
body: Statement<'a>,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new_with_scope_id(span, left, right, body, scope_id, builder),
builder.builder(),
)
}
}
impl<'a> ForStatementLeft<'a> {
#[inline]
pub fn new_variable_declaration<B: GetAstBuilder<'a>>(
span: Span,
kind: VariableDeclarationKind,
declarations: ArenaVec<'a, VariableDeclarator<'a>>,
declare: bool,
builder: &B,
) -> Self {
Self::VariableDeclaration(VariableDeclaration::boxed(
span,
kind,
declarations,
declare,
builder,
))
}
#[inline]
pub fn new_assignment_target_identifier<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::AssignmentTargetIdentifier(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_assignment_target_identifier_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::AssignmentTargetIdentifier(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_ts_as_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSAsExpression(TSAsExpression::boxed(span, expression, type_annotation, builder))
}
#[inline]
pub fn new_ts_satisfies_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSSatisfiesExpression(TSSatisfiesExpression::boxed(
span,
expression,
type_annotation,
builder,
))
}
#[inline]
pub fn new_ts_non_null_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSNonNullExpression(TSNonNullExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_ts_type_assertion<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSTypeAssertion(TSTypeAssertion::boxed(span, type_annotation, expression, builder))
}
#[inline]
pub fn new_computed_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::ComputedMemberExpression(ComputedMemberExpression::boxed(
span, object, expression, optional, builder,
))
}
#[inline]
pub fn new_static_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::StaticMemberExpression(StaticMemberExpression::boxed(
span, object, property, optional, builder,
))
}
#[inline]
pub fn new_private_field_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::PrivateFieldExpression(PrivateFieldExpression::boxed(
span, object, field, optional, builder,
))
}
#[inline]
pub fn new_array_assignment_target<B: GetAstBuilder<'a>, T1>(
span: Span,
elements: ArenaVec<'a, Option<AssignmentTargetMaybeDefault<'a>>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, AssignmentTargetRest<'a>>>>,
{
Self::ArrayAssignmentTarget(ArrayAssignmentTarget::boxed(span, elements, rest, builder))
}
#[inline]
pub fn new_object_assignment_target<B: GetAstBuilder<'a>, T1>(
span: Span,
properties: ArenaVec<'a, AssignmentTargetProperty<'a>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, AssignmentTargetRest<'a>>>>,
{
Self::ObjectAssignmentTarget(ObjectAssignmentTarget::boxed(span, properties, rest, builder))
}
}
impl<'a> ForOfStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
r#await: bool,
left: ForStatementLeft<'a>,
right: Expression<'a>,
body: Statement<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
ForOfStatement {
node_id: Cell::new(builder.node_id()),
span,
r#await,
left,
right,
body,
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
r#await: bool,
left: ForStatementLeft<'a>,
right: Expression<'a>,
body: Statement<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, r#await, left, right, body, builder), builder.builder())
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
r#await: bool,
left: ForStatementLeft<'a>,
right: Expression<'a>,
body: Statement<'a>,
scope_id: ScopeId,
builder: &B,
) -> Self {
let builder = builder.builder();
ForOfStatement {
node_id: Cell::new(builder.node_id()),
span,
r#await,
left,
right,
body,
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
r#await: bool,
left: ForStatementLeft<'a>,
right: Expression<'a>,
body: Statement<'a>,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new_with_scope_id(span, r#await, left, right, body, scope_id, builder),
builder.builder(),
)
}
}
impl<'a> ContinueStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
label: Option<LabelIdentifier<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
ContinueStatement { node_id: Cell::new(builder.node_id()), span, label }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
label: Option<LabelIdentifier<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, label, builder), builder.builder())
}
}
impl<'a> BreakStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
label: Option<LabelIdentifier<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
BreakStatement { node_id: Cell::new(builder.node_id()), span, label }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
label: Option<LabelIdentifier<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, label, builder), builder.builder())
}
}
impl<'a> ReturnStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
argument: Option<Expression<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
ReturnStatement { node_id: Cell::new(builder.node_id()), span, argument }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
argument: Option<Expression<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, argument, builder), builder.builder())
}
}
impl<'a> WithStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
body: Statement<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
WithStatement {
node_id: Cell::new(builder.node_id()),
span,
object,
body,
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
body: Statement<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, object, body, builder), builder.builder())
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
body: Statement<'a>,
scope_id: ScopeId,
builder: &B,
) -> Self {
let builder = builder.builder();
WithStatement {
node_id: Cell::new(builder.node_id()),
span,
object,
body,
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
body: Statement<'a>,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new_with_scope_id(span, object, body, scope_id, builder),
builder.builder(),
)
}
}
impl<'a> SwitchStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
discriminant: Expression<'a>,
cases: ArenaVec<'a, SwitchCase<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
SwitchStatement {
node_id: Cell::new(builder.node_id()),
span,
discriminant,
cases,
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
discriminant: Expression<'a>,
cases: ArenaVec<'a, SwitchCase<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, discriminant, cases, builder), builder.builder())
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
discriminant: Expression<'a>,
cases: ArenaVec<'a, SwitchCase<'a>>,
scope_id: ScopeId,
builder: &B,
) -> Self {
let builder = builder.builder();
SwitchStatement {
node_id: Cell::new(builder.node_id()),
span,
discriminant,
cases,
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
discriminant: Expression<'a>,
cases: ArenaVec<'a, SwitchCase<'a>>,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new_with_scope_id(span, discriminant, cases, scope_id, builder),
builder.builder(),
)
}
}
impl<'a> SwitchCase<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
test: Option<Expression<'a>>,
consequent: ArenaVec<'a, Statement<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
SwitchCase { node_id: Cell::new(builder.node_id()), span, test, consequent }
}
}
impl<'a> LabeledStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
label: LabelIdentifier<'a>,
body: Statement<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
LabeledStatement { node_id: Cell::new(builder.node_id()), span, label, body }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
label: LabelIdentifier<'a>,
body: Statement<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, label, body, builder), builder.builder())
}
}
impl<'a> ThrowStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, argument: Expression<'a>, builder: &B) -> Self {
let builder = builder.builder();
ThrowStatement { node_id: Cell::new(builder.node_id()), span, argument }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, argument, builder), builder.builder())
}
}
impl<'a> TryStatement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
block: T1,
handler: T2,
finalizer: T3,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, BlockStatement<'a>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, CatchClause<'a>>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, BlockStatement<'a>>>>,
{
let builder = builder.builder();
TryStatement {
node_id: Cell::new(builder.node_id()),
span,
block: block.into_in(builder.allocator()),
handler: handler.into_in(builder.allocator()),
finalizer: finalizer.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
block: T1,
handler: T2,
finalizer: T3,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, ArenaBox<'a, BlockStatement<'a>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, CatchClause<'a>>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, BlockStatement<'a>>>>,
{
ArenaBox::new_in(Self::new(span, block, handler, finalizer, builder), builder.builder())
}
}
impl<'a> CatchClause<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
param: Option<CatchParameter<'a>>,
body: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, BlockStatement<'a>>>,
{
let builder = builder.builder();
CatchClause {
node_id: Cell::new(builder.node_id()),
span,
param,
body: body.into_in(builder.allocator()),
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
param: Option<CatchParameter<'a>>,
body: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, ArenaBox<'a, BlockStatement<'a>>>,
{
ArenaBox::new_in(Self::new(span, param, body, builder), builder.builder())
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>, T1>(
span: Span,
param: Option<CatchParameter<'a>>,
body: T1,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, BlockStatement<'a>>>,
{
let builder = builder.builder();
CatchClause {
node_id: Cell::new(builder.node_id()),
span,
param,
body: body.into_in(builder.allocator()),
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>, T1>(
span: Span,
param: Option<CatchParameter<'a>>,
body: T1,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, ArenaBox<'a, BlockStatement<'a>>>,
{
ArenaBox::new_in(
Self::new_with_scope_id(span, param, body, scope_id, builder),
builder.builder(),
)
}
}
impl<'a> CatchParameter<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
pattern: BindingPattern<'a>,
type_annotation: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
let builder = builder.builder();
CatchParameter {
node_id: Cell::new(builder.node_id()),
span,
pattern,
type_annotation: type_annotation.into_in(builder.allocator()),
}
}
}
impl DebuggerStatement {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
DebuggerStatement { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl<'a> BindingPattern<'a> {
#[inline]
pub fn new_binding_identifier<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::BindingIdentifier(BindingIdentifier::boxed(span, name, builder))
}
#[inline]
pub fn new_binding_identifier_with_symbol_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
symbol_id: SymbolId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::BindingIdentifier(BindingIdentifier::boxed_with_symbol_id(
span, name, symbol_id, builder,
))
}
#[inline]
pub fn new_object_pattern<B: GetAstBuilder<'a>, T1>(
span: Span,
properties: ArenaVec<'a, BindingProperty<'a>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, BindingRestElement<'a>>>>,
{
Self::ObjectPattern(ObjectPattern::boxed(span, properties, rest, builder))
}
#[inline]
pub fn new_array_pattern<B: GetAstBuilder<'a>, T1>(
span: Span,
elements: ArenaVec<'a, Option<BindingPattern<'a>>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, BindingRestElement<'a>>>>,
{
Self::ArrayPattern(ArrayPattern::boxed(span, elements, rest, builder))
}
#[inline]
pub fn new_assignment_pattern<B: GetAstBuilder<'a>>(
span: Span,
left: BindingPattern<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::AssignmentPattern(AssignmentPattern::boxed(span, left, right, builder))
}
}
impl<'a> AssignmentPattern<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
left: BindingPattern<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
AssignmentPattern { node_id: Cell::new(builder.node_id()), span, left, right }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
left: BindingPattern<'a>,
right: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, left, right, builder), builder.builder())
}
}
impl<'a> ObjectPattern<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
properties: ArenaVec<'a, BindingProperty<'a>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, BindingRestElement<'a>>>>,
{
let builder = builder.builder();
ObjectPattern {
node_id: Cell::new(builder.node_id()),
span,
properties,
rest: rest.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
properties: ArenaVec<'a, BindingProperty<'a>>,
rest: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, BindingRestElement<'a>>>>,
{
ArenaBox::new_in(Self::new(span, properties, rest, builder), builder.builder())
}
}
impl<'a> BindingProperty<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
key: PropertyKey<'a>,
value: BindingPattern<'a>,
shorthand: bool,
computed: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
BindingProperty {
node_id: Cell::new(builder.node_id()),
span,
key,
value,
shorthand,
computed,
}
}
}
impl<'a> ArrayPattern<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
elements: ArenaVec<'a, Option<BindingPattern<'a>>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, BindingRestElement<'a>>>>,
{
let builder = builder.builder();
ArrayPattern {
node_id: Cell::new(builder.node_id()),
span,
elements,
rest: rest.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
elements: ArenaVec<'a, Option<BindingPattern<'a>>>,
rest: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, BindingRestElement<'a>>>>,
{
ArenaBox::new_in(Self::new(span, elements, rest, builder), builder.builder())
}
}
impl<'a> BindingRestElement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
argument: BindingPattern<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
BindingRestElement { node_id: Cell::new(builder.node_id()), span, argument }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
argument: BindingPattern<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, argument, builder), builder.builder())
}
}
impl<'a> Function<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1, T2, T3, T4, T5>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
let builder = builder.builder();
Function {
node_id: Cell::new(builder.node_id()),
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters: type_parameters.into_in(builder.allocator()),
this_param: this_param.into_in(builder.allocator()),
params: params.into_in(builder.allocator()),
return_type: return_type.into_in(builder.allocator()),
body: body.into_in(builder.allocator()),
scope_id: Default::default(),
pure: Default::default(),
pife: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1, T2, T3, T4, T5>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
ArenaBox::new_in(
Self::new(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
builder,
),
builder.builder(),
)
}
#[inline]
pub fn new_with_scope_id_and_pure_and_pife<B: GetAstBuilder<'a>, T1, T2, T3, T4, T5>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
let builder = builder.builder();
Function {
node_id: Cell::new(builder.node_id()),
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters: type_parameters.into_in(builder.allocator()),
this_param: this_param.into_in(builder.allocator()),
params: params.into_in(builder.allocator()),
return_type: return_type.into_in(builder.allocator()),
body: body.into_in(builder.allocator()),
scope_id: Cell::new(Some(scope_id)),
pure,
pife,
}
}
#[inline]
pub fn boxed_with_scope_id_and_pure_and_pife<B: GetAstBuilder<'a>, T1, T2, T3, T4, T5>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
ArenaBox::new_in(
Self::new_with_scope_id_and_pure_and_pife(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
),
builder.builder(),
)
}
}
impl<'a> FormalParameters<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
kind: FormalParameterKind,
items: ArenaVec<'a, FormalParameter<'a>>,
rest: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, FormalParameterRest<'a>>>>,
{
let builder = builder.builder();
FormalParameters {
node_id: Cell::new(builder.node_id()),
span,
kind,
items,
rest: rest.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
kind: FormalParameterKind,
items: ArenaVec<'a, FormalParameter<'a>>,
rest: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, FormalParameterRest<'a>>>>,
{
ArenaBox::new_in(Self::new(span, kind, items, rest, builder), builder.builder())
}
}
impl<'a> FormalParameter<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
decorators: ArenaVec<'a, Decorator<'a>>,
pattern: BindingPattern<'a>,
type_annotation: T1,
initializer: T2,
optional: bool,
accessibility: Option<TSAccessibility>,
readonly: bool,
r#override: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, Expression<'a>>>>,
{
let builder = builder.builder();
FormalParameter {
node_id: Cell::new(builder.node_id()),
span,
decorators,
pattern,
type_annotation: type_annotation.into_in(builder.allocator()),
initializer: initializer.into_in(builder.allocator()),
optional,
accessibility,
readonly,
r#override,
}
}
}
impl<'a> FormalParameterRest<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
decorators: ArenaVec<'a, Decorator<'a>>,
rest: BindingRestElement<'a>,
type_annotation: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
let builder = builder.builder();
FormalParameterRest {
node_id: Cell::new(builder.node_id()),
span,
decorators,
rest,
type_annotation: type_annotation.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
decorators: ArenaVec<'a, Decorator<'a>>,
rest: BindingRestElement<'a>,
type_annotation: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
ArenaBox::new_in(
Self::new(span, decorators, rest, type_annotation, builder),
builder.builder(),
)
}
}
impl<'a> FunctionBody<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
directives: ArenaVec<'a, Directive<'a>>,
statements: ArenaVec<'a, Statement<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
FunctionBody { node_id: Cell::new(builder.node_id()), span, directives, statements }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
directives: ArenaVec<'a, Directive<'a>>,
statements: ArenaVec<'a, Statement<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, directives, statements, builder), builder.builder())
}
}
impl<'a> ArrowFunctionExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
let builder = builder.builder();
ArrowFunctionExpression {
node_id: Cell::new(builder.node_id()),
span,
expression,
r#async,
type_parameters: type_parameters.into_in(builder.allocator()),
params: params.into_in(builder.allocator()),
return_type: return_type.into_in(builder.allocator()),
body: body.into_in(builder.allocator()),
scope_id: Default::default(),
pure: Default::default(),
pife: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
ArenaBox::new_in(
Self::new(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
builder,
),
builder.builder(),
)
}
#[inline]
pub fn new_with_scope_id_and_pure_and_pife<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
let builder = builder.builder();
ArrowFunctionExpression {
node_id: Cell::new(builder.node_id()),
span,
expression,
r#async,
type_parameters: type_parameters.into_in(builder.allocator()),
params: params.into_in(builder.allocator()),
return_type: return_type.into_in(builder.allocator()),
body: body.into_in(builder.allocator()),
scope_id: Cell::new(Some(scope_id)),
pure,
pife,
}
}
#[inline]
pub fn boxed_with_scope_id_and_pure_and_pife<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
ArenaBox::new_in(
Self::new_with_scope_id_and_pure_and_pife(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
),
builder.builder(),
)
}
}
impl<'a> YieldExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
delegate: bool,
argument: Option<Expression<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
YieldExpression { node_id: Cell::new(builder.node_id()), span, delegate, argument }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
delegate: bool,
argument: Option<Expression<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, delegate, argument, builder), builder.builder())
}
}
impl<'a> Class<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
let builder = builder.builder();
Class {
node_id: Cell::new(builder.node_id()),
span,
r#type,
decorators,
id,
type_parameters: type_parameters.into_in(builder.allocator()),
super_class,
super_type_arguments: super_type_arguments.into_in(builder.allocator()),
implements,
body: body.into_in(builder.allocator()),
r#abstract,
declare,
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
ArenaBox::new_in(
Self::new(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
builder,
),
builder.builder(),
)
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
let builder = builder.builder();
Class {
node_id: Cell::new(builder.node_id()),
span,
r#type,
decorators,
id,
type_parameters: type_parameters.into_in(builder.allocator()),
super_class,
super_type_arguments: super_type_arguments.into_in(builder.allocator()),
implements,
body: body.into_in(builder.allocator()),
r#abstract,
declare,
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
ArenaBox::new_in(
Self::new_with_scope_id(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
scope_id,
builder,
),
builder.builder(),
)
}
}
impl<'a> ClassBody<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, ClassElement<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
ClassBody { node_id: Cell::new(builder.node_id()), span, body }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, ClassElement<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, body, builder), builder.builder())
}
}
impl<'a> ClassElement<'a> {
#[inline]
pub fn new_static_block<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, Statement<'a>>,
builder: &B,
) -> Self {
Self::StaticBlock(StaticBlock::boxed(span, body, builder))
}
#[inline]
pub fn new_static_block_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, Statement<'a>>,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::StaticBlock(StaticBlock::boxed_with_scope_id(span, body, scope_id, builder))
}
#[inline]
pub fn new_method_definition<B: GetAstBuilder<'a>, T1>(
span: Span,
r#type: MethodDefinitionType,
decorators: ArenaVec<'a, Decorator<'a>>,
key: PropertyKey<'a>,
value: T1,
kind: MethodDefinitionKind,
computed: bool,
r#static: bool,
r#override: bool,
optional: bool,
accessibility: Option<TSAccessibility>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, Function<'a>>>,
{
Self::MethodDefinition(MethodDefinition::boxed(
span,
r#type,
decorators,
key,
value,
kind,
computed,
r#static,
r#override,
optional,
accessibility,
builder,
))
}
#[inline]
pub fn new_property_definition<B: GetAstBuilder<'a>, T1>(
span: Span,
r#type: PropertyDefinitionType,
decorators: ArenaVec<'a, Decorator<'a>>,
key: PropertyKey<'a>,
type_annotation: T1,
value: Option<Expression<'a>>,
computed: bool,
r#static: bool,
declare: bool,
r#override: bool,
optional: bool,
definite: bool,
readonly: bool,
accessibility: Option<TSAccessibility>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
Self::PropertyDefinition(PropertyDefinition::boxed(
span,
r#type,
decorators,
key,
type_annotation,
value,
computed,
r#static,
declare,
r#override,
optional,
definite,
readonly,
accessibility,
builder,
))
}
#[inline]
pub fn new_accessor_property<B: GetAstBuilder<'a>, T1>(
span: Span,
r#type: AccessorPropertyType,
decorators: ArenaVec<'a, Decorator<'a>>,
key: PropertyKey<'a>,
type_annotation: T1,
value: Option<Expression<'a>>,
computed: bool,
r#static: bool,
r#override: bool,
definite: bool,
accessibility: Option<TSAccessibility>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
Self::AccessorProperty(AccessorProperty::boxed(
span,
r#type,
decorators,
key,
type_annotation,
value,
computed,
r#static,
r#override,
definite,
accessibility,
builder,
))
}
#[inline]
pub fn new_ts_index_signature<B: GetAstBuilder<'a>, T1>(
span: Span,
parameters: ArenaVec<'a, TSIndexSignatureName<'a>>,
type_annotation: T1,
readonly: bool,
r#static: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
Self::TSIndexSignature(TSIndexSignature::boxed(
span,
parameters,
type_annotation,
readonly,
r#static,
builder,
))
}
}
impl<'a> MethodDefinition<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
r#type: MethodDefinitionType,
decorators: ArenaVec<'a, Decorator<'a>>,
key: PropertyKey<'a>,
value: T1,
kind: MethodDefinitionKind,
computed: bool,
r#static: bool,
r#override: bool,
optional: bool,
accessibility: Option<TSAccessibility>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, Function<'a>>>,
{
let builder = builder.builder();
MethodDefinition {
node_id: Cell::new(builder.node_id()),
span,
r#type,
decorators,
key,
value: value.into_in(builder.allocator()),
kind,
computed,
r#static,
r#override,
optional,
accessibility,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
r#type: MethodDefinitionType,
decorators: ArenaVec<'a, Decorator<'a>>,
key: PropertyKey<'a>,
value: T1,
kind: MethodDefinitionKind,
computed: bool,
r#static: bool,
r#override: bool,
optional: bool,
accessibility: Option<TSAccessibility>,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, ArenaBox<'a, Function<'a>>>,
{
ArenaBox::new_in(
Self::new(
span,
r#type,
decorators,
key,
value,
kind,
computed,
r#static,
r#override,
optional,
accessibility,
builder,
),
builder.builder(),
)
}
}
impl<'a> PropertyDefinition<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
r#type: PropertyDefinitionType,
decorators: ArenaVec<'a, Decorator<'a>>,
key: PropertyKey<'a>,
type_annotation: T1,
value: Option<Expression<'a>>,
computed: bool,
r#static: bool,
declare: bool,
r#override: bool,
optional: bool,
definite: bool,
readonly: bool,
accessibility: Option<TSAccessibility>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
let builder = builder.builder();
PropertyDefinition {
node_id: Cell::new(builder.node_id()),
span,
r#type,
decorators,
key,
type_annotation: type_annotation.into_in(builder.allocator()),
value,
computed,
r#static,
declare,
r#override,
optional,
definite,
readonly,
accessibility,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
r#type: PropertyDefinitionType,
decorators: ArenaVec<'a, Decorator<'a>>,
key: PropertyKey<'a>,
type_annotation: T1,
value: Option<Expression<'a>>,
computed: bool,
r#static: bool,
declare: bool,
r#override: bool,
optional: bool,
definite: bool,
readonly: bool,
accessibility: Option<TSAccessibility>,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
ArenaBox::new_in(
Self::new(
span,
r#type,
decorators,
key,
type_annotation,
value,
computed,
r#static,
declare,
r#override,
optional,
definite,
readonly,
accessibility,
builder,
),
builder.builder(),
)
}
}
impl<'a> PrivateIdentifier<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
let builder = builder.builder();
PrivateIdentifier { node_id: Cell::new(builder.node_id()), span, name: name.into() }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> ArenaBox<'a, Self>
where
S1: Into<Ident<'a>>,
{
ArenaBox::new_in(Self::new(span, name, builder), builder.builder())
}
}
impl<'a> StaticBlock<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, Statement<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
StaticBlock {
node_id: Cell::new(builder.node_id()),
span,
body,
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, Statement<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, body, builder), builder.builder())
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, Statement<'a>>,
scope_id: ScopeId,
builder: &B,
) -> Self {
let builder = builder.builder();
StaticBlock {
node_id: Cell::new(builder.node_id()),
span,
body,
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, Statement<'a>>,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new_with_scope_id(span, body, scope_id, builder), builder.builder())
}
}
impl<'a> ModuleDeclaration<'a> {
#[inline]
pub fn new_import_declaration<B: GetAstBuilder<'a>, T1>(
span: Span,
specifiers: Option<ArenaVec<'a, ImportDeclarationSpecifier<'a>>>,
source: StringLiteral<'a>,
phase: Option<ImportPhase>,
with_clause: T1,
import_kind: ImportOrExportKind,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, WithClause<'a>>>>,
{
Self::ImportDeclaration(ImportDeclaration::boxed(
span,
specifiers,
source,
phase,
with_clause,
import_kind,
builder,
))
}
#[inline]
pub fn new_export_all_declaration<B: GetAstBuilder<'a>, T1>(
span: Span,
exported: Option<ModuleExportName<'a>>,
source: StringLiteral<'a>,
with_clause: T1,
export_kind: ImportOrExportKind,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, WithClause<'a>>>>,
{
Self::ExportAllDeclaration(ExportAllDeclaration::boxed(
span,
exported,
source,
with_clause,
export_kind,
builder,
))
}
#[inline]
pub fn new_export_default_declaration<B: GetAstBuilder<'a>>(
span: Span,
declaration: ExportDefaultDeclarationKind<'a>,
builder: &B,
) -> Self {
Self::ExportDefaultDeclaration(ExportDefaultDeclaration::boxed(span, declaration, builder))
}
#[inline]
pub fn new_export_named_declaration<B: GetAstBuilder<'a>, T1>(
span: Span,
declaration: Option<Declaration<'a>>,
specifiers: ArenaVec<'a, ExportSpecifier<'a>>,
source: Option<StringLiteral<'a>>,
export_kind: ImportOrExportKind,
with_clause: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, WithClause<'a>>>>,
{
Self::ExportNamedDeclaration(ExportNamedDeclaration::boxed(
span,
declaration,
specifiers,
source,
export_kind,
with_clause,
builder,
))
}
#[inline]
pub fn new_ts_export_assignment<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSExportAssignment(TSExportAssignment::boxed(span, expression, builder))
}
#[inline]
pub fn new_ts_namespace_export_declaration<B: GetAstBuilder<'a>>(
span: Span,
id: IdentifierName<'a>,
builder: &B,
) -> Self {
Self::TSNamespaceExportDeclaration(TSNamespaceExportDeclaration::boxed(span, id, builder))
}
}
impl<'a> AccessorProperty<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
r#type: AccessorPropertyType,
decorators: ArenaVec<'a, Decorator<'a>>,
key: PropertyKey<'a>,
type_annotation: T1,
value: Option<Expression<'a>>,
computed: bool,
r#static: bool,
r#override: bool,
definite: bool,
accessibility: Option<TSAccessibility>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
let builder = builder.builder();
AccessorProperty {
node_id: Cell::new(builder.node_id()),
span,
r#type,
decorators,
key,
type_annotation: type_annotation.into_in(builder.allocator()),
value,
computed,
r#static,
r#override,
definite,
accessibility,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
r#type: AccessorPropertyType,
decorators: ArenaVec<'a, Decorator<'a>>,
key: PropertyKey<'a>,
type_annotation: T1,
value: Option<Expression<'a>>,
computed: bool,
r#static: bool,
r#override: bool,
definite: bool,
accessibility: Option<TSAccessibility>,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
ArenaBox::new_in(
Self::new(
span,
r#type,
decorators,
key,
type_annotation,
value,
computed,
r#static,
r#override,
definite,
accessibility,
builder,
),
builder.builder(),
)
}
}
impl<'a> ImportExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
source: Expression<'a>,
options: Option<Expression<'a>>,
phase: Option<ImportPhase>,
builder: &B,
) -> Self {
let builder = builder.builder();
ImportExpression { node_id: Cell::new(builder.node_id()), span, source, options, phase }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
source: Expression<'a>,
options: Option<Expression<'a>>,
phase: Option<ImportPhase>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, source, options, phase, builder), builder.builder())
}
}
impl<'a> ImportDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
specifiers: Option<ArenaVec<'a, ImportDeclarationSpecifier<'a>>>,
source: StringLiteral<'a>,
phase: Option<ImportPhase>,
with_clause: T1,
import_kind: ImportOrExportKind,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, WithClause<'a>>>>,
{
let builder = builder.builder();
ImportDeclaration {
node_id: Cell::new(builder.node_id()),
span,
specifiers,
source,
phase,
with_clause: with_clause.into_in(builder.allocator()),
import_kind,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
specifiers: Option<ArenaVec<'a, ImportDeclarationSpecifier<'a>>>,
source: StringLiteral<'a>,
phase: Option<ImportPhase>,
with_clause: T1,
import_kind: ImportOrExportKind,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, WithClause<'a>>>>,
{
ArenaBox::new_in(
Self::new(span, specifiers, source, phase, with_clause, import_kind, builder),
builder.builder(),
)
}
}
impl<'a> ImportDeclarationSpecifier<'a> {
#[inline]
pub fn new_import_specifier<B: GetAstBuilder<'a>>(
span: Span,
imported: ModuleExportName<'a>,
local: BindingIdentifier<'a>,
import_kind: ImportOrExportKind,
builder: &B,
) -> Self {
Self::ImportSpecifier(ImportSpecifier::boxed(span, imported, local, import_kind, builder))
}
#[inline]
pub fn new_import_default_specifier<B: GetAstBuilder<'a>>(
span: Span,
local: BindingIdentifier<'a>,
builder: &B,
) -> Self {
Self::ImportDefaultSpecifier(ImportDefaultSpecifier::boxed(span, local, builder))
}
#[inline]
pub fn new_import_namespace_specifier<B: GetAstBuilder<'a>>(
span: Span,
local: BindingIdentifier<'a>,
builder: &B,
) -> Self {
Self::ImportNamespaceSpecifier(ImportNamespaceSpecifier::boxed(span, local, builder))
}
}
impl<'a> ImportSpecifier<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
imported: ModuleExportName<'a>,
local: BindingIdentifier<'a>,
import_kind: ImportOrExportKind,
builder: &B,
) -> Self {
let builder = builder.builder();
ImportSpecifier {
node_id: Cell::new(builder.node_id()),
span,
imported,
local,
import_kind,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
imported: ModuleExportName<'a>,
local: BindingIdentifier<'a>,
import_kind: ImportOrExportKind,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, imported, local, import_kind, builder), builder.builder())
}
}
impl<'a> ImportDefaultSpecifier<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
local: BindingIdentifier<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
ImportDefaultSpecifier { node_id: Cell::new(builder.node_id()), span, local }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
local: BindingIdentifier<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, local, builder), builder.builder())
}
}
impl<'a> ImportNamespaceSpecifier<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
local: BindingIdentifier<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
ImportNamespaceSpecifier { node_id: Cell::new(builder.node_id()), span, local }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
local: BindingIdentifier<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, local, builder), builder.builder())
}
}
impl<'a> WithClause<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
keyword: WithClauseKeyword,
with_entries: ArenaVec<'a, ImportAttribute<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
WithClause { node_id: Cell::new(builder.node_id()), span, keyword, with_entries }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
keyword: WithClauseKeyword,
with_entries: ArenaVec<'a, ImportAttribute<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, keyword, with_entries, builder), builder.builder())
}
}
impl<'a> ImportAttribute<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
key: ImportAttributeKey<'a>,
value: StringLiteral<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
ImportAttribute { node_id: Cell::new(builder.node_id()), span, key, value }
}
}
impl<'a> ImportAttributeKey<'a> {
#[inline]
pub fn new_identifier<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierName::new(span, name, builder))
}
#[inline]
pub fn new_string_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::new(span, value, raw, builder))
}
#[inline]
pub fn new_string_literal_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::new_with_lone_surrogates(
span,
value,
raw,
lone_surrogates,
builder,
))
}
}
impl<'a> ExportNamedDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
declaration: Option<Declaration<'a>>,
specifiers: ArenaVec<'a, ExportSpecifier<'a>>,
source: Option<StringLiteral<'a>>,
export_kind: ImportOrExportKind,
with_clause: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, WithClause<'a>>>>,
{
let builder = builder.builder();
ExportNamedDeclaration {
node_id: Cell::new(builder.node_id()),
span,
declaration,
specifiers,
source,
export_kind,
with_clause: with_clause.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
declaration: Option<Declaration<'a>>,
specifiers: ArenaVec<'a, ExportSpecifier<'a>>,
source: Option<StringLiteral<'a>>,
export_kind: ImportOrExportKind,
with_clause: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, WithClause<'a>>>>,
{
ArenaBox::new_in(
Self::new(span, declaration, specifiers, source, export_kind, with_clause, builder),
builder.builder(),
)
}
}
impl<'a> ExportDefaultDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
declaration: ExportDefaultDeclarationKind<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
ExportDefaultDeclaration { node_id: Cell::new(builder.node_id()), span, declaration }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
declaration: ExportDefaultDeclarationKind<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, declaration, builder), builder.builder())
}
}
impl<'a> ExportAllDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
exported: Option<ModuleExportName<'a>>,
source: StringLiteral<'a>,
with_clause: T1,
export_kind: ImportOrExportKind,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, WithClause<'a>>>>,
{
let builder = builder.builder();
ExportAllDeclaration {
node_id: Cell::new(builder.node_id()),
span,
exported,
source,
with_clause: with_clause.into_in(builder.allocator()),
export_kind,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
exported: Option<ModuleExportName<'a>>,
source: StringLiteral<'a>,
with_clause: T1,
export_kind: ImportOrExportKind,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, WithClause<'a>>>>,
{
ArenaBox::new_in(
Self::new(span, exported, source, with_clause, export_kind, builder),
builder.builder(),
)
}
}
impl<'a> ExportSpecifier<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
local: ModuleExportName<'a>,
exported: ModuleExportName<'a>,
export_kind: ImportOrExportKind,
builder: &B,
) -> Self {
let builder = builder.builder();
ExportSpecifier {
node_id: Cell::new(builder.node_id()),
span,
local,
exported,
export_kind,
}
}
}
impl<'a> ExportDefaultDeclarationKind<'a> {
#[inline]
pub fn new_function_declaration<B: GetAstBuilder<'a>, T1, T2, T3, T4, T5>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionDeclaration(Function::boxed(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_function_declaration_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
T5,
>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionDeclaration(Function::boxed_with_scope_id_and_pure_and_pife(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
))
}
#[inline]
pub fn new_class_declaration<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassDeclaration(Class::boxed(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
builder,
))
}
#[inline]
pub fn new_class_declaration_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassDeclaration(Class::boxed_with_scope_id(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_interface_declaration<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
extends: ArenaVec<'a, TSInterfaceHeritage<'a>>,
body: T2,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, TSInterfaceBody<'a>>>,
{
Self::TSInterfaceDeclaration(TSInterfaceDeclaration::boxed(
span,
id,
type_parameters,
extends,
body,
declare,
builder,
))
}
#[inline]
pub fn new_ts_interface_declaration_with_scope_id<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
extends: ArenaVec<'a, TSInterfaceHeritage<'a>>,
body: T2,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, TSInterfaceBody<'a>>>,
{
Self::TSInterfaceDeclaration(TSInterfaceDeclaration::boxed_with_scope_id(
span,
id,
type_parameters,
extends,
body,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_boolean_literal<B: GetAstBuilder<'a>>(span: Span, value: bool, builder: &B) -> Self {
Self::BooleanLiteral(BooleanLiteral::boxed(span, value, builder))
}
#[inline]
pub fn new_null_literal<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::NullLiteral(NullLiteral::boxed(span, builder))
}
#[inline]
pub fn new_numeric_literal<B: GetAstBuilder<'a>>(
span: Span,
value: f64,
raw: Option<Str<'a>>,
base: NumberBase,
builder: &B,
) -> Self {
Self::NumericLiteral(NumericLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_big_int_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
base: BigintBase,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::BigIntLiteral(BigIntLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_reg_exp_literal<B: GetAstBuilder<'a>>(
span: Span,
regex: RegExp<'a>,
raw: Option<Str<'a>>,
builder: &B,
) -> Self {
Self::RegExpLiteral(RegExpLiteral::boxed(span, regex, raw, builder))
}
#[inline]
pub fn new_string_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed(span, value, raw, builder))
}
#[inline]
pub fn new_string_literal_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed_with_lone_surrogates(
span,
value,
raw,
lone_surrogates,
builder,
))
}
#[inline]
pub fn new_template_literal<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::TemplateLiteral(TemplateLiteral::boxed(span, quasis, expressions, builder))
}
#[inline]
pub fn new_identifier<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_identifier_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_meta_property<B: GetAstBuilder<'a>>(
span: Span,
meta: IdentifierName<'a>,
property: IdentifierName<'a>,
builder: &B,
) -> Self {
Self::MetaProperty(MetaProperty::boxed(span, meta, property, builder))
}
#[inline]
pub fn new_super<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::Super(Super::boxed(span, builder))
}
#[inline]
pub fn new_array_expression<B: GetAstBuilder<'a>>(
span: Span,
elements: ArenaVec<'a, ArrayExpressionElement<'a>>,
builder: &B,
) -> Self {
Self::ArrayExpression(ArrayExpression::boxed(span, elements, builder))
}
#[inline]
pub fn new_arrow_function_expression<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
Self::ArrowFunctionExpression(ArrowFunctionExpression::boxed(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_arrow_function_expression_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
Self::ArrowFunctionExpression(
ArrowFunctionExpression::boxed_with_scope_id_and_pure_and_pife(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
),
)
}
#[inline]
pub fn new_assignment_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: AssignmentOperator,
left: AssignmentTarget<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::AssignmentExpression(AssignmentExpression::boxed(
span, operator, left, right, builder,
))
}
#[inline]
pub fn new_await_expression<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::AwaitExpression(AwaitExpression::boxed(span, argument, builder))
}
#[inline]
pub fn new_binary_expression<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: BinaryOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::BinaryExpression(BinaryExpression::boxed(span, left, operator, right, builder))
}
#[inline]
pub fn new_call_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed(
span,
callee,
type_arguments,
arguments,
optional,
builder,
))
}
#[inline]
pub fn new_call_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
optional,
pure,
builder,
))
}
#[inline]
pub fn new_chain_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: ChainElement<'a>,
builder: &B,
) -> Self {
Self::ChainExpression(ChainExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_class_expression<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassExpression(Class::boxed(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
builder,
))
}
#[inline]
pub fn new_class_expression_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassExpression(Class::boxed_with_scope_id(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_conditional_expression<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
consequent: Expression<'a>,
alternate: Expression<'a>,
builder: &B,
) -> Self {
Self::ConditionalExpression(ConditionalExpression::boxed(
span, test, consequent, alternate, builder,
))
}
#[inline]
pub fn new_function_expression<B: GetAstBuilder<'a>, T1, T2, T3, T4, T5>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionExpression(Function::boxed(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_function_expression_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
T5,
>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionExpression(Function::boxed_with_scope_id_and_pure_and_pife(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
))
}
#[inline]
pub fn new_import_expression<B: GetAstBuilder<'a>>(
span: Span,
source: Expression<'a>,
options: Option<Expression<'a>>,
phase: Option<ImportPhase>,
builder: &B,
) -> Self {
Self::ImportExpression(ImportExpression::boxed(span, source, options, phase, builder))
}
#[inline]
pub fn new_logical_expression<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: LogicalOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::LogicalExpression(LogicalExpression::boxed(span, left, operator, right, builder))
}
#[inline]
pub fn new_new_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::NewExpression(NewExpression::boxed(span, callee, type_arguments, arguments, builder))
}
#[inline]
pub fn new_new_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::NewExpression(NewExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
pure,
builder,
))
}
#[inline]
pub fn new_object_expression<B: GetAstBuilder<'a>>(
span: Span,
properties: ArenaVec<'a, ObjectPropertyKind<'a>>,
builder: &B,
) -> Self {
Self::ObjectExpression(ObjectExpression::boxed(span, properties, builder))
}
#[inline]
pub fn new_parenthesized_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::ParenthesizedExpression(ParenthesizedExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_sequence_expression<B: GetAstBuilder<'a>>(
span: Span,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::SequenceExpression(SequenceExpression::boxed(span, expressions, builder))
}
#[inline]
pub fn new_tagged_template_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
tag: Expression<'a>,
type_arguments: T1,
quasi: TemplateLiteral<'a>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::TaggedTemplateExpression(TaggedTemplateExpression::boxed(
span,
tag,
type_arguments,
quasi,
builder,
))
}
#[inline]
pub fn new_this_expression<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::ThisExpression(ThisExpression::boxed(span, builder))
}
#[inline]
pub fn new_unary_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UnaryOperator,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::UnaryExpression(UnaryExpression::boxed(span, operator, argument, builder))
}
#[inline]
pub fn new_update_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UpdateOperator,
prefix: bool,
argument: SimpleAssignmentTarget<'a>,
builder: &B,
) -> Self {
Self::UpdateExpression(UpdateExpression::boxed(span, operator, prefix, argument, builder))
}
#[inline]
pub fn new_yield_expression<B: GetAstBuilder<'a>>(
span: Span,
delegate: bool,
argument: Option<Expression<'a>>,
builder: &B,
) -> Self {
Self::YieldExpression(YieldExpression::boxed(span, delegate, argument, builder))
}
#[inline]
pub fn new_private_in_expression<B: GetAstBuilder<'a>>(
span: Span,
left: PrivateIdentifier<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::PrivateInExpression(PrivateInExpression::boxed(span, left, right, builder))
}
#[inline]
pub fn new_jsx_element<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
opening_element: T1,
children: ArenaVec<'a, JSXChild<'a>>,
closing_element: T2,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, JSXOpeningElement<'a>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, JSXClosingElement<'a>>>>,
{
Self::JSXElement(JSXElement::boxed(
span,
opening_element,
children,
closing_element,
builder,
))
}
#[inline]
pub fn new_jsx_fragment<B: GetAstBuilder<'a>>(
span: Span,
opening_fragment: JSXOpeningFragment,
children: ArenaVec<'a, JSXChild<'a>>,
closing_fragment: JSXClosingFragment,
builder: &B,
) -> Self {
Self::JSXFragment(JSXFragment::boxed(
span,
opening_fragment,
children,
closing_fragment,
builder,
))
}
#[inline]
pub fn new_ts_as_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSAsExpression(TSAsExpression::boxed(span, expression, type_annotation, builder))
}
#[inline]
pub fn new_ts_satisfies_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSSatisfiesExpression(TSSatisfiesExpression::boxed(
span,
expression,
type_annotation,
builder,
))
}
#[inline]
pub fn new_ts_type_assertion<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSTypeAssertion(TSTypeAssertion::boxed(span, type_annotation, expression, builder))
}
#[inline]
pub fn new_ts_non_null_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSNonNullExpression(TSNonNullExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_ts_instantiation_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
expression: Expression<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeParameterInstantiation<'a>>>,
{
Self::TSInstantiationExpression(TSInstantiationExpression::boxed(
span,
expression,
type_arguments,
builder,
))
}
#[inline]
pub fn new_v8_intrinsic_expression<B: GetAstBuilder<'a>>(
span: Span,
name: IdentifierName<'a>,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self {
Self::V8IntrinsicExpression(V8IntrinsicExpression::boxed(span, name, arguments, builder))
}
#[inline]
pub fn new_computed_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::ComputedMemberExpression(ComputedMemberExpression::boxed(
span, object, expression, optional, builder,
))
}
#[inline]
pub fn new_static_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::StaticMemberExpression(StaticMemberExpression::boxed(
span, object, property, optional, builder,
))
}
#[inline]
pub fn new_private_field_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::PrivateFieldExpression(PrivateFieldExpression::boxed(
span, object, field, optional, builder,
))
}
}
impl<'a> ModuleExportName<'a> {
#[inline]
pub fn new_identifier_name<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
Self::IdentifierName(IdentifierName::new(span, name, builder))
}
#[inline]
pub fn new_identifier_reference<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::IdentifierReference(IdentifierReference::new(span, name, builder))
}
#[inline]
pub fn new_identifier_reference_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::IdentifierReference(IdentifierReference::new_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_string_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::new(span, value, raw, builder))
}
#[inline]
pub fn new_string_literal_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::new_with_lone_surrogates(
span,
value,
raw,
lone_surrogates,
builder,
))
}
}
impl<'a> V8IntrinsicExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
name: IdentifierName<'a>,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
V8IntrinsicExpression { node_id: Cell::new(builder.node_id()), span, name, arguments }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
name: IdentifierName<'a>,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, name, arguments, builder), builder.builder())
}
}
impl BooleanLiteral {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, value: bool, builder: &B) -> Self {
let builder = builder.builder();
BooleanLiteral { node_id: Cell::new(builder.node_id()), span, value }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(
span: Span,
value: bool,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, value, builder), builder.builder())
}
}
impl NullLiteral {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
NullLiteral { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl<'a> NumericLiteral<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
value: f64,
raw: Option<Str<'a>>,
base: NumberBase,
builder: &B,
) -> Self {
let builder = builder.builder();
NumericLiteral { node_id: Cell::new(builder.node_id()), span, value, raw, base }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
value: f64,
raw: Option<Str<'a>>,
base: NumberBase,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, value, raw, base, builder), builder.builder())
}
}
impl<'a> StringLiteral<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
let builder = builder.builder();
StringLiteral {
node_id: Cell::new(builder.node_id()),
span,
value: value.into(),
raw,
lone_surrogates: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> ArenaBox<'a, Self>
where
S1: Into<Str<'a>>,
{
ArenaBox::new_in(Self::new(span, value, raw, builder), builder.builder())
}
#[inline]
pub fn new_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
let builder = builder.builder();
StringLiteral {
node_id: Cell::new(builder.node_id()),
span,
value: value.into(),
raw,
lone_surrogates,
}
}
#[inline]
pub fn boxed_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> ArenaBox<'a, Self>
where
S1: Into<Str<'a>>,
{
ArenaBox::new_in(
Self::new_with_lone_surrogates(span, value, raw, lone_surrogates, builder),
builder.builder(),
)
}
}
impl<'a> BigIntLiteral<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
base: BigintBase,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
let builder = builder.builder();
BigIntLiteral {
node_id: Cell::new(builder.node_id()),
span,
value: value.into(),
raw,
base,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
base: BigintBase,
builder: &B,
) -> ArenaBox<'a, Self>
where
S1: Into<Str<'a>>,
{
ArenaBox::new_in(Self::new(span, value, raw, base, builder), builder.builder())
}
}
impl<'a> RegExpLiteral<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
regex: RegExp<'a>,
raw: Option<Str<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
RegExpLiteral { node_id: Cell::new(builder.node_id()), span, regex, raw }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
regex: RegExp<'a>,
raw: Option<Str<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, regex, raw, builder), builder.builder())
}
}
impl<'a> JSXElement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
opening_element: T1,
children: ArenaVec<'a, JSXChild<'a>>,
closing_element: T2,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, JSXOpeningElement<'a>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, JSXClosingElement<'a>>>>,
{
let builder = builder.builder();
JSXElement {
node_id: Cell::new(builder.node_id()),
span,
opening_element: opening_element.into_in(builder.allocator()),
children,
closing_element: closing_element.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
opening_element: T1,
children: ArenaVec<'a, JSXChild<'a>>,
closing_element: T2,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, ArenaBox<'a, JSXOpeningElement<'a>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, JSXClosingElement<'a>>>>,
{
ArenaBox::new_in(
Self::new(span, opening_element, children, closing_element, builder),
builder.builder(),
)
}
}
impl<'a> JSXOpeningElement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
name: JSXElementName<'a>,
type_arguments: T1,
attributes: ArenaVec<'a, JSXAttributeItem<'a>>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
let builder = builder.builder();
JSXOpeningElement {
node_id: Cell::new(builder.node_id()),
span,
name,
type_arguments: type_arguments.into_in(builder.allocator()),
attributes,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
name: JSXElementName<'a>,
type_arguments: T1,
attributes: ArenaVec<'a, JSXAttributeItem<'a>>,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
ArenaBox::new_in(
Self::new(span, name, type_arguments, attributes, builder),
builder.builder(),
)
}
}
impl<'a> JSXClosingElement<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, name: JSXElementName<'a>, builder: &B) -> Self {
let builder = builder.builder();
JSXClosingElement { node_id: Cell::new(builder.node_id()), span, name }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
name: JSXElementName<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, name, builder), builder.builder())
}
}
impl<'a> JSXFragment<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
opening_fragment: JSXOpeningFragment,
children: ArenaVec<'a, JSXChild<'a>>,
closing_fragment: JSXClosingFragment,
builder: &B,
) -> Self {
let builder = builder.builder();
JSXFragment {
node_id: Cell::new(builder.node_id()),
span,
opening_fragment,
children,
closing_fragment,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
opening_fragment: JSXOpeningFragment,
children: ArenaVec<'a, JSXChild<'a>>,
closing_fragment: JSXClosingFragment,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new(span, opening_fragment, children, closing_fragment, builder),
builder.builder(),
)
}
}
impl JSXOpeningFragment {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
JSXOpeningFragment { node_id: Cell::new(builder.node_id()), span }
}
}
impl JSXClosingFragment {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
JSXClosingFragment { node_id: Cell::new(builder.node_id()), span }
}
}
impl<'a> JSXElementName<'a> {
#[inline]
pub fn new_identifier<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Str<'a>>,
{
Self::Identifier(JSXIdentifier::boxed(span, name, builder))
}
#[inline]
pub fn new_identifier_reference<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::IdentifierReference(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_identifier_reference_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::IdentifierReference(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_namespaced_name<B: GetAstBuilder<'a>>(
span: Span,
namespace: JSXIdentifier<'a>,
name: JSXIdentifier<'a>,
builder: &B,
) -> Self {
Self::NamespacedName(JSXNamespacedName::boxed(span, namespace, name, builder))
}
#[inline]
pub fn new_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: JSXMemberExpressionObject<'a>,
property: JSXIdentifier<'a>,
builder: &B,
) -> Self {
Self::MemberExpression(JSXMemberExpression::boxed(span, object, property, builder))
}
#[inline]
pub fn new_this_expression<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::ThisExpression(ThisExpression::boxed(span, builder))
}
}
impl<'a> JSXNamespacedName<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
namespace: JSXIdentifier<'a>,
name: JSXIdentifier<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
JSXNamespacedName { node_id: Cell::new(builder.node_id()), span, namespace, name }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
namespace: JSXIdentifier<'a>,
name: JSXIdentifier<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, namespace, name, builder), builder.builder())
}
}
impl<'a> JSXMemberExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
object: JSXMemberExpressionObject<'a>,
property: JSXIdentifier<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
JSXMemberExpression { node_id: Cell::new(builder.node_id()), span, object, property }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
object: JSXMemberExpressionObject<'a>,
property: JSXIdentifier<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, object, property, builder), builder.builder())
}
}
impl<'a> JSXMemberExpressionObject<'a> {
#[inline]
pub fn new_identifier_reference<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::IdentifierReference(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_identifier_reference_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::IdentifierReference(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: JSXMemberExpressionObject<'a>,
property: JSXIdentifier<'a>,
builder: &B,
) -> Self {
Self::MemberExpression(JSXMemberExpression::boxed(span, object, property, builder))
}
#[inline]
pub fn new_this_expression<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::ThisExpression(ThisExpression::boxed(span, builder))
}
}
impl<'a> JSXExpressionContainer<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
expression: JSXExpression<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
JSXExpressionContainer { node_id: Cell::new(builder.node_id()), span, expression }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
expression: JSXExpression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, expression, builder), builder.builder())
}
}
impl<'a> JSXExpression<'a> {
#[inline]
pub fn new_empty_expression<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::EmptyExpression(JSXEmptyExpression::boxed(span, builder))
}
#[inline]
pub fn new_boolean_literal<B: GetAstBuilder<'a>>(span: Span, value: bool, builder: &B) -> Self {
Self::BooleanLiteral(BooleanLiteral::boxed(span, value, builder))
}
#[inline]
pub fn new_null_literal<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::NullLiteral(NullLiteral::boxed(span, builder))
}
#[inline]
pub fn new_numeric_literal<B: GetAstBuilder<'a>>(
span: Span,
value: f64,
raw: Option<Str<'a>>,
base: NumberBase,
builder: &B,
) -> Self {
Self::NumericLiteral(NumericLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_big_int_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
base: BigintBase,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::BigIntLiteral(BigIntLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_reg_exp_literal<B: GetAstBuilder<'a>>(
span: Span,
regex: RegExp<'a>,
raw: Option<Str<'a>>,
builder: &B,
) -> Self {
Self::RegExpLiteral(RegExpLiteral::boxed(span, regex, raw, builder))
}
#[inline]
pub fn new_string_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed(span, value, raw, builder))
}
#[inline]
pub fn new_string_literal_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed_with_lone_surrogates(
span,
value,
raw,
lone_surrogates,
builder,
))
}
#[inline]
pub fn new_template_literal<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::TemplateLiteral(TemplateLiteral::boxed(span, quasis, expressions, builder))
}
#[inline]
pub fn new_identifier<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_identifier_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_meta_property<B: GetAstBuilder<'a>>(
span: Span,
meta: IdentifierName<'a>,
property: IdentifierName<'a>,
builder: &B,
) -> Self {
Self::MetaProperty(MetaProperty::boxed(span, meta, property, builder))
}
#[inline]
pub fn new_super<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::Super(Super::boxed(span, builder))
}
#[inline]
pub fn new_array_expression<B: GetAstBuilder<'a>>(
span: Span,
elements: ArenaVec<'a, ArrayExpressionElement<'a>>,
builder: &B,
) -> Self {
Self::ArrayExpression(ArrayExpression::boxed(span, elements, builder))
}
#[inline]
pub fn new_arrow_function_expression<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
Self::ArrowFunctionExpression(ArrowFunctionExpression::boxed(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_arrow_function_expression_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
>(
span: Span,
expression: bool,
r#async: bool,
type_parameters: T1,
params: T2,
return_type: T3,
body: T4,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T4: IntoIn<'a, ArenaBox<'a, FunctionBody<'a>>>,
{
Self::ArrowFunctionExpression(
ArrowFunctionExpression::boxed_with_scope_id_and_pure_and_pife(
span,
expression,
r#async,
type_parameters,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
),
)
}
#[inline]
pub fn new_assignment_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: AssignmentOperator,
left: AssignmentTarget<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::AssignmentExpression(AssignmentExpression::boxed(
span, operator, left, right, builder,
))
}
#[inline]
pub fn new_await_expression<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::AwaitExpression(AwaitExpression::boxed(span, argument, builder))
}
#[inline]
pub fn new_binary_expression<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: BinaryOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::BinaryExpression(BinaryExpression::boxed(span, left, operator, right, builder))
}
#[inline]
pub fn new_call_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed(
span,
callee,
type_arguments,
arguments,
optional,
builder,
))
}
#[inline]
pub fn new_call_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
optional: bool,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::CallExpression(CallExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
optional,
pure,
builder,
))
}
#[inline]
pub fn new_chain_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: ChainElement<'a>,
builder: &B,
) -> Self {
Self::ChainExpression(ChainExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_class_expression<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassExpression(Class::boxed(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
builder,
))
}
#[inline]
pub fn new_class_expression_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#type: ClassType,
decorators: ArenaVec<'a, Decorator<'a>>,
id: Option<BindingIdentifier<'a>>,
type_parameters: T1,
super_class: Option<Expression<'a>>,
super_type_arguments: T2,
implements: ArenaVec<'a, TSClassImplements<'a>>,
body: T3,
r#abstract: bool,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, ClassBody<'a>>>,
{
Self::ClassExpression(Class::boxed_with_scope_id(
span,
r#type,
decorators,
id,
type_parameters,
super_class,
super_type_arguments,
implements,
body,
r#abstract,
declare,
scope_id,
builder,
))
}
#[inline]
pub fn new_conditional_expression<B: GetAstBuilder<'a>>(
span: Span,
test: Expression<'a>,
consequent: Expression<'a>,
alternate: Expression<'a>,
builder: &B,
) -> Self {
Self::ConditionalExpression(ConditionalExpression::boxed(
span, test, consequent, alternate, builder,
))
}
#[inline]
pub fn new_function_expression<B: GetAstBuilder<'a>, T1, T2, T3, T4, T5>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionExpression(Function::boxed(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
builder,
))
}
#[inline]
pub fn new_function_expression_with_scope_id_and_pure_and_pife<
B: GetAstBuilder<'a>,
T1,
T2,
T3,
T4,
T5,
>(
span: Span,
r#type: FunctionType,
id: Option<BindingIdentifier<'a>>,
generator: bool,
r#async: bool,
declare: bool,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
body: T5,
scope_id: ScopeId,
pure: bool,
pife: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
T5: IntoIn<'a, Option<ArenaBox<'a, FunctionBody<'a>>>>,
{
Self::FunctionExpression(Function::boxed_with_scope_id_and_pure_and_pife(
span,
r#type,
id,
generator,
r#async,
declare,
type_parameters,
this_param,
params,
return_type,
body,
scope_id,
pure,
pife,
builder,
))
}
#[inline]
pub fn new_import_expression<B: GetAstBuilder<'a>>(
span: Span,
source: Expression<'a>,
options: Option<Expression<'a>>,
phase: Option<ImportPhase>,
builder: &B,
) -> Self {
Self::ImportExpression(ImportExpression::boxed(span, source, options, phase, builder))
}
#[inline]
pub fn new_logical_expression<B: GetAstBuilder<'a>>(
span: Span,
left: Expression<'a>,
operator: LogicalOperator,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::LogicalExpression(LogicalExpression::boxed(span, left, operator, right, builder))
}
#[inline]
pub fn new_new_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::NewExpression(NewExpression::boxed(span, callee, type_arguments, arguments, builder))
}
#[inline]
pub fn new_new_expression_with_pure<B: GetAstBuilder<'a>, T1>(
span: Span,
callee: Expression<'a>,
type_arguments: T1,
arguments: ArenaVec<'a, Argument<'a>>,
pure: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::NewExpression(NewExpression::boxed_with_pure(
span,
callee,
type_arguments,
arguments,
pure,
builder,
))
}
#[inline]
pub fn new_object_expression<B: GetAstBuilder<'a>>(
span: Span,
properties: ArenaVec<'a, ObjectPropertyKind<'a>>,
builder: &B,
) -> Self {
Self::ObjectExpression(ObjectExpression::boxed(span, properties, builder))
}
#[inline]
pub fn new_parenthesized_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::ParenthesizedExpression(ParenthesizedExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_sequence_expression<B: GetAstBuilder<'a>>(
span: Span,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::SequenceExpression(SequenceExpression::boxed(span, expressions, builder))
}
#[inline]
pub fn new_tagged_template_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
tag: Expression<'a>,
type_arguments: T1,
quasi: TemplateLiteral<'a>,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::TaggedTemplateExpression(TaggedTemplateExpression::boxed(
span,
tag,
type_arguments,
quasi,
builder,
))
}
#[inline]
pub fn new_this_expression<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::ThisExpression(ThisExpression::boxed(span, builder))
}
#[inline]
pub fn new_unary_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UnaryOperator,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::UnaryExpression(UnaryExpression::boxed(span, operator, argument, builder))
}
#[inline]
pub fn new_update_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UpdateOperator,
prefix: bool,
argument: SimpleAssignmentTarget<'a>,
builder: &B,
) -> Self {
Self::UpdateExpression(UpdateExpression::boxed(span, operator, prefix, argument, builder))
}
#[inline]
pub fn new_yield_expression<B: GetAstBuilder<'a>>(
span: Span,
delegate: bool,
argument: Option<Expression<'a>>,
builder: &B,
) -> Self {
Self::YieldExpression(YieldExpression::boxed(span, delegate, argument, builder))
}
#[inline]
pub fn new_private_in_expression<B: GetAstBuilder<'a>>(
span: Span,
left: PrivateIdentifier<'a>,
right: Expression<'a>,
builder: &B,
) -> Self {
Self::PrivateInExpression(PrivateInExpression::boxed(span, left, right, builder))
}
#[inline]
pub fn new_jsx_element<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
opening_element: T1,
children: ArenaVec<'a, JSXChild<'a>>,
closing_element: T2,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, JSXOpeningElement<'a>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, JSXClosingElement<'a>>>>,
{
Self::JSXElement(JSXElement::boxed(
span,
opening_element,
children,
closing_element,
builder,
))
}
#[inline]
pub fn new_jsx_fragment<B: GetAstBuilder<'a>>(
span: Span,
opening_fragment: JSXOpeningFragment,
children: ArenaVec<'a, JSXChild<'a>>,
closing_fragment: JSXClosingFragment,
builder: &B,
) -> Self {
Self::JSXFragment(JSXFragment::boxed(
span,
opening_fragment,
children,
closing_fragment,
builder,
))
}
#[inline]
pub fn new_ts_as_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSAsExpression(TSAsExpression::boxed(span, expression, type_annotation, builder))
}
#[inline]
pub fn new_ts_satisfies_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSSatisfiesExpression(TSSatisfiesExpression::boxed(
span,
expression,
type_annotation,
builder,
))
}
#[inline]
pub fn new_ts_type_assertion<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSTypeAssertion(TSTypeAssertion::boxed(span, type_annotation, expression, builder))
}
#[inline]
pub fn new_ts_non_null_expression<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::TSNonNullExpression(TSNonNullExpression::boxed(span, expression, builder))
}
#[inline]
pub fn new_ts_instantiation_expression<B: GetAstBuilder<'a>, T1>(
span: Span,
expression: Expression<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeParameterInstantiation<'a>>>,
{
Self::TSInstantiationExpression(TSInstantiationExpression::boxed(
span,
expression,
type_arguments,
builder,
))
}
#[inline]
pub fn new_v8_intrinsic_expression<B: GetAstBuilder<'a>>(
span: Span,
name: IdentifierName<'a>,
arguments: ArenaVec<'a, Argument<'a>>,
builder: &B,
) -> Self {
Self::V8IntrinsicExpression(V8IntrinsicExpression::boxed(span, name, arguments, builder))
}
#[inline]
pub fn new_computed_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
expression: Expression<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::ComputedMemberExpression(ComputedMemberExpression::boxed(
span, object, expression, optional, builder,
))
}
#[inline]
pub fn new_static_member_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
property: IdentifierName<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::StaticMemberExpression(StaticMemberExpression::boxed(
span, object, property, optional, builder,
))
}
#[inline]
pub fn new_private_field_expression<B: GetAstBuilder<'a>>(
span: Span,
object: Expression<'a>,
field: PrivateIdentifier<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::PrivateFieldExpression(PrivateFieldExpression::boxed(
span, object, field, optional, builder,
))
}
}
impl JSXEmptyExpression {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
JSXEmptyExpression { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl<'a> JSXAttributeItem<'a> {
#[inline]
pub fn new_attribute<B: GetAstBuilder<'a>>(
span: Span,
name: JSXAttributeName<'a>,
value: Option<JSXAttributeValue<'a>>,
builder: &B,
) -> Self {
Self::Attribute(JSXAttribute::boxed(span, name, value, builder))
}
#[inline]
pub fn new_spread_attribute<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::SpreadAttribute(JSXSpreadAttribute::boxed(span, argument, builder))
}
}
impl<'a> JSXAttribute<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
name: JSXAttributeName<'a>,
value: Option<JSXAttributeValue<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
JSXAttribute { node_id: Cell::new(builder.node_id()), span, name, value }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
name: JSXAttributeName<'a>,
value: Option<JSXAttributeValue<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, name, value, builder), builder.builder())
}
}
impl<'a> JSXSpreadAttribute<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, argument: Expression<'a>, builder: &B) -> Self {
let builder = builder.builder();
JSXSpreadAttribute { node_id: Cell::new(builder.node_id()), span, argument }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
argument: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, argument, builder), builder.builder())
}
}
impl<'a> JSXAttributeName<'a> {
#[inline]
pub fn new_identifier<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Str<'a>>,
{
Self::Identifier(JSXIdentifier::boxed(span, name, builder))
}
#[inline]
pub fn new_namespaced_name<B: GetAstBuilder<'a>>(
span: Span,
namespace: JSXIdentifier<'a>,
name: JSXIdentifier<'a>,
builder: &B,
) -> Self {
Self::NamespacedName(JSXNamespacedName::boxed(span, namespace, name, builder))
}
}
impl<'a> JSXAttributeValue<'a> {
#[inline]
pub fn new_string_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed(span, value, raw, builder))
}
#[inline]
pub fn new_string_literal_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed_with_lone_surrogates(
span,
value,
raw,
lone_surrogates,
builder,
))
}
#[inline]
pub fn new_expression_container<B: GetAstBuilder<'a>>(
span: Span,
expression: JSXExpression<'a>,
builder: &B,
) -> Self {
Self::ExpressionContainer(JSXExpressionContainer::boxed(span, expression, builder))
}
#[inline]
pub fn new_element<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
opening_element: T1,
children: ArenaVec<'a, JSXChild<'a>>,
closing_element: T2,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, JSXOpeningElement<'a>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, JSXClosingElement<'a>>>>,
{
Self::Element(JSXElement::boxed(span, opening_element, children, closing_element, builder))
}
#[inline]
pub fn new_fragment<B: GetAstBuilder<'a>>(
span: Span,
opening_fragment: JSXOpeningFragment,
children: ArenaVec<'a, JSXChild<'a>>,
closing_fragment: JSXClosingFragment,
builder: &B,
) -> Self {
Self::Fragment(JSXFragment::boxed(
span,
opening_fragment,
children,
closing_fragment,
builder,
))
}
}
impl<'a> JSXIdentifier<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Str<'a>>,
{
let builder = builder.builder();
JSXIdentifier { node_id: Cell::new(builder.node_id()), span, name: name.into() }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> ArenaBox<'a, Self>
where
S1: Into<Str<'a>>,
{
ArenaBox::new_in(Self::new(span, name, builder), builder.builder())
}
}
impl<'a> JSXChild<'a> {
#[inline]
pub fn new_text<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::Text(JSXText::boxed(span, value, raw, builder))
}
#[inline]
pub fn new_element<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
opening_element: T1,
children: ArenaVec<'a, JSXChild<'a>>,
closing_element: T2,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, JSXOpeningElement<'a>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, JSXClosingElement<'a>>>>,
{
Self::Element(JSXElement::boxed(span, opening_element, children, closing_element, builder))
}
#[inline]
pub fn new_fragment<B: GetAstBuilder<'a>>(
span: Span,
opening_fragment: JSXOpeningFragment,
children: ArenaVec<'a, JSXChild<'a>>,
closing_fragment: JSXClosingFragment,
builder: &B,
) -> Self {
Self::Fragment(JSXFragment::boxed(
span,
opening_fragment,
children,
closing_fragment,
builder,
))
}
#[inline]
pub fn new_expression_container<B: GetAstBuilder<'a>>(
span: Span,
expression: JSXExpression<'a>,
builder: &B,
) -> Self {
Self::ExpressionContainer(JSXExpressionContainer::boxed(span, expression, builder))
}
#[inline]
pub fn new_spread<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> Self {
Self::Spread(JSXSpreadChild::boxed(span, expression, builder))
}
}
impl<'a> JSXSpreadChild<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, expression: Expression<'a>, builder: &B) -> Self {
let builder = builder.builder();
JSXSpreadChild { node_id: Cell::new(builder.node_id()), span, expression }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, expression, builder), builder.builder())
}
}
impl<'a> JSXText<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
let builder = builder.builder();
JSXText { node_id: Cell::new(builder.node_id()), span, value: value.into(), raw }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> ArenaBox<'a, Self>
where
S1: Into<Str<'a>>,
{
ArenaBox::new_in(Self::new(span, value, raw, builder), builder.builder())
}
}
impl<'a> TSThisParameter<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
this_span: Span,
type_annotation: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
let builder = builder.builder();
TSThisParameter {
node_id: Cell::new(builder.node_id()),
span,
this_span,
type_annotation: type_annotation.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
this_span: Span,
type_annotation: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
ArenaBox::new_in(Self::new(span, this_span, type_annotation, builder), builder.builder())
}
}
impl<'a> TSEnumDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
id: BindingIdentifier<'a>,
body: TSEnumBody<'a>,
r#const: bool,
declare: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
TSEnumDeclaration {
node_id: Cell::new(builder.node_id()),
span,
id,
body,
r#const,
declare,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
id: BindingIdentifier<'a>,
body: TSEnumBody<'a>,
r#const: bool,
declare: bool,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, id, body, r#const, declare, builder), builder.builder())
}
}
impl<'a> TSEnumBody<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
members: ArenaVec<'a, TSEnumMember<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSEnumBody {
node_id: Cell::new(builder.node_id()),
span,
members,
scope_id: Default::default(),
}
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
members: ArenaVec<'a, TSEnumMember<'a>>,
scope_id: ScopeId,
builder: &B,
) -> Self {
let builder = builder.builder();
TSEnumBody {
node_id: Cell::new(builder.node_id()),
span,
members,
scope_id: Cell::new(Some(scope_id)),
}
}
}
impl<'a> TSEnumMember<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
id: TSEnumMemberName<'a>,
initializer: Option<Expression<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSEnumMember { node_id: Cell::new(builder.node_id()), span, id, initializer }
}
}
impl<'a> TSEnumMemberName<'a> {
#[inline]
pub fn new_identifier<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierName::boxed(span, name, builder))
}
#[inline]
pub fn new_string<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::String(StringLiteral::boxed(span, value, raw, builder))
}
#[inline]
pub fn new_string_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::String(StringLiteral::boxed_with_lone_surrogates(
span,
value,
raw,
lone_surrogates,
builder,
))
}
#[inline]
pub fn new_computed_string<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::ComputedString(StringLiteral::boxed(span, value, raw, builder))
}
#[inline]
pub fn new_computed_string_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::ComputedString(StringLiteral::boxed_with_lone_surrogates(
span,
value,
raw,
lone_surrogates,
builder,
))
}
#[inline]
pub fn new_computed_template_string<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::ComputedTemplateString(TemplateLiteral::boxed(span, quasis, expressions, builder))
}
}
impl<'a> TSTypeAnnotation<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, type_annotation: TSType<'a>, builder: &B) -> Self {
let builder = builder.builder();
TSTypeAnnotation { node_id: Cell::new(builder.node_id()), span, type_annotation }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, type_annotation, builder), builder.builder())
}
}
impl<'a> TSLiteralType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, literal: TSLiteral<'a>, builder: &B) -> Self {
let builder = builder.builder();
TSLiteralType { node_id: Cell::new(builder.node_id()), span, literal }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
literal: TSLiteral<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, literal, builder), builder.builder())
}
}
impl<'a> TSLiteral<'a> {
#[inline]
pub fn new_boolean_literal<B: GetAstBuilder<'a>>(span: Span, value: bool, builder: &B) -> Self {
Self::BooleanLiteral(BooleanLiteral::boxed(span, value, builder))
}
#[inline]
pub fn new_numeric_literal<B: GetAstBuilder<'a>>(
span: Span,
value: f64,
raw: Option<Str<'a>>,
base: NumberBase,
builder: &B,
) -> Self {
Self::NumericLiteral(NumericLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_big_int_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
base: BigintBase,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::BigIntLiteral(BigIntLiteral::boxed(span, value, raw, base, builder))
}
#[inline]
pub fn new_string_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed(span, value, raw, builder))
}
#[inline]
pub fn new_string_literal_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::boxed_with_lone_surrogates(
span,
value,
raw,
lone_surrogates,
builder,
))
}
#[inline]
pub fn new_template_literal<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
expressions: ArenaVec<'a, Expression<'a>>,
builder: &B,
) -> Self {
Self::TemplateLiteral(TemplateLiteral::boxed(span, quasis, expressions, builder))
}
#[inline]
pub fn new_unary_expression<B: GetAstBuilder<'a>>(
span: Span,
operator: UnaryOperator,
argument: Expression<'a>,
builder: &B,
) -> Self {
Self::UnaryExpression(UnaryExpression::boxed(span, operator, argument, builder))
}
}
impl<'a> TSType<'a> {
#[inline]
pub fn new_ts_any_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSAnyKeyword(TSAnyKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_big_int_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSBigIntKeyword(TSBigIntKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_boolean_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSBooleanKeyword(TSBooleanKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_intrinsic_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSIntrinsicKeyword(TSIntrinsicKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_never_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSNeverKeyword(TSNeverKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_null_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSNullKeyword(TSNullKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_number_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSNumberKeyword(TSNumberKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_object_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSObjectKeyword(TSObjectKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_string_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSStringKeyword(TSStringKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_symbol_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSSymbolKeyword(TSSymbolKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_undefined_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSUndefinedKeyword(TSUndefinedKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_unknown_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSUnknownKeyword(TSUnknownKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_void_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSVoidKeyword(TSVoidKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_array_type<B: GetAstBuilder<'a>>(
span: Span,
element_type: TSType<'a>,
builder: &B,
) -> Self {
Self::TSArrayType(TSArrayType::boxed(span, element_type, builder))
}
#[inline]
pub fn new_ts_conditional_type<B: GetAstBuilder<'a>>(
span: Span,
check_type: TSType<'a>,
extends_type: TSType<'a>,
true_type: TSType<'a>,
false_type: TSType<'a>,
builder: &B,
) -> Self {
Self::TSConditionalType(TSConditionalType::boxed(
span,
check_type,
extends_type,
true_type,
false_type,
builder,
))
}
#[inline]
pub fn new_ts_conditional_type_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
check_type: TSType<'a>,
extends_type: TSType<'a>,
true_type: TSType<'a>,
false_type: TSType<'a>,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::TSConditionalType(TSConditionalType::boxed_with_scope_id(
span,
check_type,
extends_type,
true_type,
false_type,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_constructor_type<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#abstract: bool,
type_parameters: T1,
params: T2,
return_type: T3,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
Self::TSConstructorType(TSConstructorType::boxed(
span,
r#abstract,
type_parameters,
params,
return_type,
builder,
))
}
#[inline]
pub fn new_ts_constructor_type_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#abstract: bool,
type_parameters: T1,
params: T2,
return_type: T3,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
Self::TSConstructorType(TSConstructorType::boxed_with_scope_id(
span,
r#abstract,
type_parameters,
params,
return_type,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_function_type<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
Self::TSFunctionType(TSFunctionType::boxed(
span,
type_parameters,
this_param,
params,
return_type,
builder,
))
}
#[inline]
pub fn new_ts_function_type_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
Self::TSFunctionType(TSFunctionType::boxed_with_scope_id(
span,
type_parameters,
this_param,
params,
return_type,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_import_type<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
source: StringLiteral<'a>,
options: T1,
qualifier: Option<TSImportTypeQualifier<'a>>,
type_arguments: T2,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, ObjectExpression<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::TSImportType(TSImportType::boxed(
span,
source,
options,
qualifier,
type_arguments,
builder,
))
}
#[inline]
pub fn new_ts_indexed_access_type<B: GetAstBuilder<'a>>(
span: Span,
object_type: TSType<'a>,
index_type: TSType<'a>,
builder: &B,
) -> Self {
Self::TSIndexedAccessType(TSIndexedAccessType::boxed(
span,
object_type,
index_type,
builder,
))
}
#[inline]
pub fn new_ts_infer_type<B: GetAstBuilder<'a>, T1>(
span: Span,
type_parameter: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeParameter<'a>>>,
{
Self::TSInferType(TSInferType::boxed(span, type_parameter, builder))
}
#[inline]
pub fn new_ts_intersection_type<B: GetAstBuilder<'a>>(
span: Span,
types: ArenaVec<'a, TSType<'a>>,
builder: &B,
) -> Self {
Self::TSIntersectionType(TSIntersectionType::boxed(span, types, builder))
}
#[inline]
pub fn new_ts_literal_type<B: GetAstBuilder<'a>>(
span: Span,
literal: TSLiteral<'a>,
builder: &B,
) -> Self {
Self::TSLiteralType(TSLiteralType::boxed(span, literal, builder))
}
#[inline]
pub fn new_ts_mapped_type<B: GetAstBuilder<'a>>(
span: Span,
key: BindingIdentifier<'a>,
constraint: TSType<'a>,
name_type: Option<TSType<'a>>,
type_annotation: Option<TSType<'a>>,
optional: Option<TSMappedTypeModifierOperator>,
readonly: Option<TSMappedTypeModifierOperator>,
builder: &B,
) -> Self {
Self::TSMappedType(TSMappedType::boxed(
span,
key,
constraint,
name_type,
type_annotation,
optional,
readonly,
builder,
))
}
#[inline]
pub fn new_ts_mapped_type_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
key: BindingIdentifier<'a>,
constraint: TSType<'a>,
name_type: Option<TSType<'a>>,
type_annotation: Option<TSType<'a>>,
optional: Option<TSMappedTypeModifierOperator>,
readonly: Option<TSMappedTypeModifierOperator>,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::TSMappedType(TSMappedType::boxed_with_scope_id(
span,
key,
constraint,
name_type,
type_annotation,
optional,
readonly,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_named_tuple_member<B: GetAstBuilder<'a>>(
span: Span,
label: IdentifierName<'a>,
element_type: TSTupleElement<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::TSNamedTupleMember(TSNamedTupleMember::boxed(
span,
label,
element_type,
optional,
builder,
))
}
#[inline]
pub fn new_ts_template_literal_type<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
types: ArenaVec<'a, TSType<'a>>,
builder: &B,
) -> Self {
Self::TSTemplateLiteralType(TSTemplateLiteralType::boxed(span, quasis, types, builder))
}
#[inline]
pub fn new_ts_this_type<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSThisType(TSThisType::boxed(span, builder))
}
#[inline]
pub fn new_ts_tuple_type<B: GetAstBuilder<'a>>(
span: Span,
element_types: ArenaVec<'a, TSTupleElement<'a>>,
builder: &B,
) -> Self {
Self::TSTupleType(TSTupleType::boxed(span, element_types, builder))
}
#[inline]
pub fn new_ts_type_literal<B: GetAstBuilder<'a>>(
span: Span,
members: ArenaVec<'a, TSSignature<'a>>,
builder: &B,
) -> Self {
Self::TSTypeLiteral(TSTypeLiteral::boxed(span, members, builder))
}
#[inline]
pub fn new_ts_type_operator_type<B: GetAstBuilder<'a>>(
span: Span,
operator: TSTypeOperatorOperator,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSTypeOperatorType(TSTypeOperator::boxed(span, operator, type_annotation, builder))
}
#[inline]
pub fn new_ts_type_predicate<B: GetAstBuilder<'a>, T1>(
span: Span,
parameter_name: TSTypePredicateName<'a>,
asserts: bool,
type_annotation: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
Self::TSTypePredicate(TSTypePredicate::boxed(
span,
parameter_name,
asserts,
type_annotation,
builder,
))
}
#[inline]
pub fn new_ts_type_query<B: GetAstBuilder<'a>, T1>(
span: Span,
expr_name: TSTypeQueryExprName<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::TSTypeQuery(TSTypeQuery::boxed(span, expr_name, type_arguments, builder))
}
#[inline]
pub fn new_ts_type_reference<B: GetAstBuilder<'a>, T1>(
span: Span,
type_name: TSTypeName<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::TSTypeReference(TSTypeReference::boxed(span, type_name, type_arguments, builder))
}
#[inline]
pub fn new_ts_union_type<B: GetAstBuilder<'a>>(
span: Span,
types: ArenaVec<'a, TSType<'a>>,
builder: &B,
) -> Self {
Self::TSUnionType(TSUnionType::boxed(span, types, builder))
}
#[inline]
pub fn new_ts_parenthesized_type<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSParenthesizedType(TSParenthesizedType::boxed(span, type_annotation, builder))
}
#[inline]
pub fn new_js_doc_nullable_type<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
postfix: bool,
builder: &B,
) -> Self {
Self::JSDocNullableType(JSDocNullableType::boxed(span, type_annotation, postfix, builder))
}
#[inline]
pub fn new_js_doc_non_nullable_type<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
postfix: bool,
builder: &B,
) -> Self {
Self::JSDocNonNullableType(JSDocNonNullableType::boxed(
span,
type_annotation,
postfix,
builder,
))
}
#[inline]
pub fn new_js_doc_unknown_type<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::JSDocUnknownType(JSDocUnknownType::boxed(span, builder))
}
}
impl<'a> TSConditionalType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
check_type: TSType<'a>,
extends_type: TSType<'a>,
true_type: TSType<'a>,
false_type: TSType<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSConditionalType {
node_id: Cell::new(builder.node_id()),
span,
check_type,
extends_type,
true_type,
false_type,
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
check_type: TSType<'a>,
extends_type: TSType<'a>,
true_type: TSType<'a>,
false_type: TSType<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new(span, check_type, extends_type, true_type, false_type, builder),
builder.builder(),
)
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
check_type: TSType<'a>,
extends_type: TSType<'a>,
true_type: TSType<'a>,
false_type: TSType<'a>,
scope_id: ScopeId,
builder: &B,
) -> Self {
let builder = builder.builder();
TSConditionalType {
node_id: Cell::new(builder.node_id()),
span,
check_type,
extends_type,
true_type,
false_type,
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
check_type: TSType<'a>,
extends_type: TSType<'a>,
true_type: TSType<'a>,
false_type: TSType<'a>,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new_with_scope_id(
span,
check_type,
extends_type,
true_type,
false_type,
scope_id,
builder,
),
builder.builder(),
)
}
}
impl<'a> TSUnionType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
types: ArenaVec<'a, TSType<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSUnionType { node_id: Cell::new(builder.node_id()), span, types }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
types: ArenaVec<'a, TSType<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, types, builder), builder.builder())
}
}
impl<'a> TSIntersectionType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
types: ArenaVec<'a, TSType<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSIntersectionType { node_id: Cell::new(builder.node_id()), span, types }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
types: ArenaVec<'a, TSType<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, types, builder), builder.builder())
}
}
impl<'a> TSParenthesizedType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, type_annotation: TSType<'a>, builder: &B) -> Self {
let builder = builder.builder();
TSParenthesizedType { node_id: Cell::new(builder.node_id()), span, type_annotation }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, type_annotation, builder), builder.builder())
}
}
impl<'a> TSTypeOperator<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
operator: TSTypeOperatorOperator,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSTypeOperator { node_id: Cell::new(builder.node_id()), span, operator, type_annotation }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
operator: TSTypeOperatorOperator,
type_annotation: TSType<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, operator, type_annotation, builder), builder.builder())
}
}
impl<'a> TSArrayType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, element_type: TSType<'a>, builder: &B) -> Self {
let builder = builder.builder();
TSArrayType { node_id: Cell::new(builder.node_id()), span, element_type }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
element_type: TSType<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, element_type, builder), builder.builder())
}
}
impl<'a> TSIndexedAccessType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
object_type: TSType<'a>,
index_type: TSType<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSIndexedAccessType { node_id: Cell::new(builder.node_id()), span, object_type, index_type }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
object_type: TSType<'a>,
index_type: TSType<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, object_type, index_type, builder), builder.builder())
}
}
impl<'a> TSTupleType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
element_types: ArenaVec<'a, TSTupleElement<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSTupleType { node_id: Cell::new(builder.node_id()), span, element_types }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
element_types: ArenaVec<'a, TSTupleElement<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, element_types, builder), builder.builder())
}
}
impl<'a> TSNamedTupleMember<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
label: IdentifierName<'a>,
element_type: TSTupleElement<'a>,
optional: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
TSNamedTupleMember {
node_id: Cell::new(builder.node_id()),
span,
label,
element_type,
optional,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
label: IdentifierName<'a>,
element_type: TSTupleElement<'a>,
optional: bool,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, label, element_type, optional, builder), builder.builder())
}
}
impl<'a> TSOptionalType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, type_annotation: TSType<'a>, builder: &B) -> Self {
let builder = builder.builder();
TSOptionalType { node_id: Cell::new(builder.node_id()), span, type_annotation }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, type_annotation, builder), builder.builder())
}
}
impl<'a> TSRestType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, type_annotation: TSType<'a>, builder: &B) -> Self {
let builder = builder.builder();
TSRestType { node_id: Cell::new(builder.node_id()), span, type_annotation }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, type_annotation, builder), builder.builder())
}
}
impl<'a> TSTupleElement<'a> {
#[inline]
pub fn new_ts_optional_type<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSOptionalType(TSOptionalType::boxed(span, type_annotation, builder))
}
#[inline]
pub fn new_ts_rest_type<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSRestType(TSRestType::boxed(span, type_annotation, builder))
}
#[inline]
pub fn new_ts_any_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSAnyKeyword(TSAnyKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_big_int_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSBigIntKeyword(TSBigIntKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_boolean_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSBooleanKeyword(TSBooleanKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_intrinsic_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSIntrinsicKeyword(TSIntrinsicKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_never_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSNeverKeyword(TSNeverKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_null_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSNullKeyword(TSNullKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_number_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSNumberKeyword(TSNumberKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_object_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSObjectKeyword(TSObjectKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_string_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSStringKeyword(TSStringKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_symbol_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSSymbolKeyword(TSSymbolKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_undefined_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSUndefinedKeyword(TSUndefinedKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_unknown_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSUnknownKeyword(TSUnknownKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_void_keyword<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSVoidKeyword(TSVoidKeyword::boxed(span, builder))
}
#[inline]
pub fn new_ts_array_type<B: GetAstBuilder<'a>>(
span: Span,
element_type: TSType<'a>,
builder: &B,
) -> Self {
Self::TSArrayType(TSArrayType::boxed(span, element_type, builder))
}
#[inline]
pub fn new_ts_conditional_type<B: GetAstBuilder<'a>>(
span: Span,
check_type: TSType<'a>,
extends_type: TSType<'a>,
true_type: TSType<'a>,
false_type: TSType<'a>,
builder: &B,
) -> Self {
Self::TSConditionalType(TSConditionalType::boxed(
span,
check_type,
extends_type,
true_type,
false_type,
builder,
))
}
#[inline]
pub fn new_ts_conditional_type_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
check_type: TSType<'a>,
extends_type: TSType<'a>,
true_type: TSType<'a>,
false_type: TSType<'a>,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::TSConditionalType(TSConditionalType::boxed_with_scope_id(
span,
check_type,
extends_type,
true_type,
false_type,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_constructor_type<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#abstract: bool,
type_parameters: T1,
params: T2,
return_type: T3,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
Self::TSConstructorType(TSConstructorType::boxed(
span,
r#abstract,
type_parameters,
params,
return_type,
builder,
))
}
#[inline]
pub fn new_ts_constructor_type_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#abstract: bool,
type_parameters: T1,
params: T2,
return_type: T3,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
Self::TSConstructorType(TSConstructorType::boxed_with_scope_id(
span,
r#abstract,
type_parameters,
params,
return_type,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_function_type<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
Self::TSFunctionType(TSFunctionType::boxed(
span,
type_parameters,
this_param,
params,
return_type,
builder,
))
}
#[inline]
pub fn new_ts_function_type_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
Self::TSFunctionType(TSFunctionType::boxed_with_scope_id(
span,
type_parameters,
this_param,
params,
return_type,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_import_type<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
source: StringLiteral<'a>,
options: T1,
qualifier: Option<TSImportTypeQualifier<'a>>,
type_arguments: T2,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, ObjectExpression<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::TSImportType(TSImportType::boxed(
span,
source,
options,
qualifier,
type_arguments,
builder,
))
}
#[inline]
pub fn new_ts_indexed_access_type<B: GetAstBuilder<'a>>(
span: Span,
object_type: TSType<'a>,
index_type: TSType<'a>,
builder: &B,
) -> Self {
Self::TSIndexedAccessType(TSIndexedAccessType::boxed(
span,
object_type,
index_type,
builder,
))
}
#[inline]
pub fn new_ts_infer_type<B: GetAstBuilder<'a>, T1>(
span: Span,
type_parameter: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeParameter<'a>>>,
{
Self::TSInferType(TSInferType::boxed(span, type_parameter, builder))
}
#[inline]
pub fn new_ts_intersection_type<B: GetAstBuilder<'a>>(
span: Span,
types: ArenaVec<'a, TSType<'a>>,
builder: &B,
) -> Self {
Self::TSIntersectionType(TSIntersectionType::boxed(span, types, builder))
}
#[inline]
pub fn new_ts_literal_type<B: GetAstBuilder<'a>>(
span: Span,
literal: TSLiteral<'a>,
builder: &B,
) -> Self {
Self::TSLiteralType(TSLiteralType::boxed(span, literal, builder))
}
#[inline]
pub fn new_ts_mapped_type<B: GetAstBuilder<'a>>(
span: Span,
key: BindingIdentifier<'a>,
constraint: TSType<'a>,
name_type: Option<TSType<'a>>,
type_annotation: Option<TSType<'a>>,
optional: Option<TSMappedTypeModifierOperator>,
readonly: Option<TSMappedTypeModifierOperator>,
builder: &B,
) -> Self {
Self::TSMappedType(TSMappedType::boxed(
span,
key,
constraint,
name_type,
type_annotation,
optional,
readonly,
builder,
))
}
#[inline]
pub fn new_ts_mapped_type_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
key: BindingIdentifier<'a>,
constraint: TSType<'a>,
name_type: Option<TSType<'a>>,
type_annotation: Option<TSType<'a>>,
optional: Option<TSMappedTypeModifierOperator>,
readonly: Option<TSMappedTypeModifierOperator>,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::TSMappedType(TSMappedType::boxed_with_scope_id(
span,
key,
constraint,
name_type,
type_annotation,
optional,
readonly,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_named_tuple_member<B: GetAstBuilder<'a>>(
span: Span,
label: IdentifierName<'a>,
element_type: TSTupleElement<'a>,
optional: bool,
builder: &B,
) -> Self {
Self::TSNamedTupleMember(TSNamedTupleMember::boxed(
span,
label,
element_type,
optional,
builder,
))
}
#[inline]
pub fn new_ts_template_literal_type<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
types: ArenaVec<'a, TSType<'a>>,
builder: &B,
) -> Self {
Self::TSTemplateLiteralType(TSTemplateLiteralType::boxed(span, quasis, types, builder))
}
#[inline]
pub fn new_ts_this_type<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::TSThisType(TSThisType::boxed(span, builder))
}
#[inline]
pub fn new_ts_tuple_type<B: GetAstBuilder<'a>>(
span: Span,
element_types: ArenaVec<'a, TSTupleElement<'a>>,
builder: &B,
) -> Self {
Self::TSTupleType(TSTupleType::boxed(span, element_types, builder))
}
#[inline]
pub fn new_ts_type_literal<B: GetAstBuilder<'a>>(
span: Span,
members: ArenaVec<'a, TSSignature<'a>>,
builder: &B,
) -> Self {
Self::TSTypeLiteral(TSTypeLiteral::boxed(span, members, builder))
}
#[inline]
pub fn new_ts_type_operator_type<B: GetAstBuilder<'a>>(
span: Span,
operator: TSTypeOperatorOperator,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSTypeOperatorType(TSTypeOperator::boxed(span, operator, type_annotation, builder))
}
#[inline]
pub fn new_ts_type_predicate<B: GetAstBuilder<'a>, T1>(
span: Span,
parameter_name: TSTypePredicateName<'a>,
asserts: bool,
type_annotation: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
Self::TSTypePredicate(TSTypePredicate::boxed(
span,
parameter_name,
asserts,
type_annotation,
builder,
))
}
#[inline]
pub fn new_ts_type_query<B: GetAstBuilder<'a>, T1>(
span: Span,
expr_name: TSTypeQueryExprName<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::TSTypeQuery(TSTypeQuery::boxed(span, expr_name, type_arguments, builder))
}
#[inline]
pub fn new_ts_type_reference<B: GetAstBuilder<'a>, T1>(
span: Span,
type_name: TSTypeName<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::TSTypeReference(TSTypeReference::boxed(span, type_name, type_arguments, builder))
}
#[inline]
pub fn new_ts_union_type<B: GetAstBuilder<'a>>(
span: Span,
types: ArenaVec<'a, TSType<'a>>,
builder: &B,
) -> Self {
Self::TSUnionType(TSUnionType::boxed(span, types, builder))
}
#[inline]
pub fn new_ts_parenthesized_type<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
Self::TSParenthesizedType(TSParenthesizedType::boxed(span, type_annotation, builder))
}
#[inline]
pub fn new_js_doc_nullable_type<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
postfix: bool,
builder: &B,
) -> Self {
Self::JSDocNullableType(JSDocNullableType::boxed(span, type_annotation, postfix, builder))
}
#[inline]
pub fn new_js_doc_non_nullable_type<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
postfix: bool,
builder: &B,
) -> Self {
Self::JSDocNonNullableType(JSDocNonNullableType::boxed(
span,
type_annotation,
postfix,
builder,
))
}
#[inline]
pub fn new_js_doc_unknown_type<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::JSDocUnknownType(JSDocUnknownType::boxed(span, builder))
}
}
impl TSAnyKeyword {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
TSAnyKeyword { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl TSStringKeyword {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
TSStringKeyword { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl TSBooleanKeyword {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
TSBooleanKeyword { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl TSNumberKeyword {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
TSNumberKeyword { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl TSNeverKeyword {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
TSNeverKeyword { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl TSIntrinsicKeyword {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
TSIntrinsicKeyword { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl TSUnknownKeyword {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
TSUnknownKeyword { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl TSNullKeyword {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
TSNullKeyword { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl TSUndefinedKeyword {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
TSUndefinedKeyword { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl TSVoidKeyword {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
TSVoidKeyword { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl TSSymbolKeyword {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
TSSymbolKeyword { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl TSThisType {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
TSThisType { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl TSObjectKeyword {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
TSObjectKeyword { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl TSBigIntKeyword {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
TSBigIntKeyword { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}
impl<'a> TSTypeReference<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
type_name: TSTypeName<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
let builder = builder.builder();
TSTypeReference {
node_id: Cell::new(builder.node_id()),
span,
type_name,
type_arguments: type_arguments.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
type_name: TSTypeName<'a>,
type_arguments: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
ArenaBox::new_in(Self::new(span, type_name, type_arguments, builder), builder.builder())
}
}
impl<'a> TSTypeName<'a> {
#[inline]
pub fn new_identifier_reference<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::IdentifierReference(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_identifier_reference_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::IdentifierReference(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_qualified_name<B: GetAstBuilder<'a>>(
span: Span,
left: TSTypeName<'a>,
right: IdentifierName<'a>,
builder: &B,
) -> Self {
Self::QualifiedName(TSQualifiedName::boxed(span, left, right, builder))
}
#[inline]
pub fn new_this_expression<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::ThisExpression(ThisExpression::boxed(span, builder))
}
}
impl<'a> TSQualifiedName<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
left: TSTypeName<'a>,
right: IdentifierName<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSQualifiedName { node_id: Cell::new(builder.node_id()), span, left, right }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
left: TSTypeName<'a>,
right: IdentifierName<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, left, right, builder), builder.builder())
}
}
impl<'a> TSTypeParameterInstantiation<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
params: ArenaVec<'a, TSType<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSTypeParameterInstantiation { node_id: Cell::new(builder.node_id()), span, params }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
params: ArenaVec<'a, TSType<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, params, builder), builder.builder())
}
}
impl<'a> TSTypeParameter<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
name: BindingIdentifier<'a>,
constraint: Option<TSType<'a>>,
default: Option<TSType<'a>>,
r#in: bool,
out: bool,
r#const: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
TSTypeParameter {
node_id: Cell::new(builder.node_id()),
span,
name,
constraint,
default,
r#in,
out,
r#const,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
name: BindingIdentifier<'a>,
constraint: Option<TSType<'a>>,
default: Option<TSType<'a>>,
r#in: bool,
out: bool,
r#const: bool,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new(span, name, constraint, default, r#in, out, r#const, builder),
builder.builder(),
)
}
}
impl<'a> TSTypeParameterDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
params: ArenaVec<'a, TSTypeParameter<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSTypeParameterDeclaration { node_id: Cell::new(builder.node_id()), span, params }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
params: ArenaVec<'a, TSTypeParameter<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, params, builder), builder.builder())
}
}
impl<'a> TSTypeAliasDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
type_annotation: TSType<'a>,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
{
let builder = builder.builder();
TSTypeAliasDeclaration {
node_id: Cell::new(builder.node_id()),
span,
id,
type_parameters: type_parameters.into_in(builder.allocator()),
type_annotation,
declare,
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
type_annotation: TSType<'a>,
declare: bool,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
{
ArenaBox::new_in(
Self::new(span, id, type_parameters, type_annotation, declare, builder),
builder.builder(),
)
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>, T1>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
type_annotation: TSType<'a>,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
{
let builder = builder.builder();
TSTypeAliasDeclaration {
node_id: Cell::new(builder.node_id()),
span,
id,
type_parameters: type_parameters.into_in(builder.allocator()),
type_annotation,
declare,
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>, T1>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
type_annotation: TSType<'a>,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
{
ArenaBox::new_in(
Self::new_with_scope_id(
span,
id,
type_parameters,
type_annotation,
declare,
scope_id,
builder,
),
builder.builder(),
)
}
}
impl<'a> TSClassImplements<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
expression: TSTypeName<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
let builder = builder.builder();
TSClassImplements {
node_id: Cell::new(builder.node_id()),
span,
expression,
type_arguments: type_arguments.into_in(builder.allocator()),
}
}
}
impl<'a> TSInterfaceDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
extends: ArenaVec<'a, TSInterfaceHeritage<'a>>,
body: T2,
declare: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, TSInterfaceBody<'a>>>,
{
let builder = builder.builder();
TSInterfaceDeclaration {
node_id: Cell::new(builder.node_id()),
span,
id,
type_parameters: type_parameters.into_in(builder.allocator()),
extends,
body: body.into_in(builder.allocator()),
declare,
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
extends: ArenaVec<'a, TSInterfaceHeritage<'a>>,
body: T2,
declare: bool,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, TSInterfaceBody<'a>>>,
{
ArenaBox::new_in(
Self::new(span, id, type_parameters, extends, body, declare, builder),
builder.builder(),
)
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
extends: ArenaVec<'a, TSInterfaceHeritage<'a>>,
body: T2,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, TSInterfaceBody<'a>>>,
{
let builder = builder.builder();
TSInterfaceDeclaration {
node_id: Cell::new(builder.node_id()),
span,
id,
type_parameters: type_parameters.into_in(builder.allocator()),
extends,
body: body.into_in(builder.allocator()),
declare,
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
id: BindingIdentifier<'a>,
type_parameters: T1,
extends: ArenaVec<'a, TSInterfaceHeritage<'a>>,
body: T2,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, TSInterfaceBody<'a>>>,
{
ArenaBox::new_in(
Self::new_with_scope_id(
span,
id,
type_parameters,
extends,
body,
declare,
scope_id,
builder,
),
builder.builder(),
)
}
}
impl<'a> TSInterfaceBody<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, TSSignature<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSInterfaceBody { node_id: Cell::new(builder.node_id()), span, body }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
body: ArenaVec<'a, TSSignature<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, body, builder), builder.builder())
}
}
impl<'a> TSPropertySignature<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
computed: bool,
optional: bool,
readonly: bool,
key: PropertyKey<'a>,
type_annotation: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
let builder = builder.builder();
TSPropertySignature {
node_id: Cell::new(builder.node_id()),
span,
computed,
optional,
readonly,
key,
type_annotation: type_annotation.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
computed: bool,
optional: bool,
readonly: bool,
key: PropertyKey<'a>,
type_annotation: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
ArenaBox::new_in(
Self::new(span, computed, optional, readonly, key, type_annotation, builder),
builder.builder(),
)
}
}
impl<'a> TSSignature<'a> {
#[inline]
pub fn new_ts_index_signature<B: GetAstBuilder<'a>, T1>(
span: Span,
parameters: ArenaVec<'a, TSIndexSignatureName<'a>>,
type_annotation: T1,
readonly: bool,
r#static: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
Self::TSIndexSignature(TSIndexSignature::boxed(
span,
parameters,
type_annotation,
readonly,
r#static,
builder,
))
}
#[inline]
pub fn new_ts_property_signature<B: GetAstBuilder<'a>, T1>(
span: Span,
computed: bool,
optional: bool,
readonly: bool,
key: PropertyKey<'a>,
type_annotation: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
Self::TSPropertySignature(TSPropertySignature::boxed(
span,
computed,
optional,
readonly,
key,
type_annotation,
builder,
))
}
#[inline]
pub fn new_ts_call_signature_declaration<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
Self::TSCallSignatureDeclaration(TSCallSignatureDeclaration::boxed(
span,
type_parameters,
this_param,
params,
return_type,
builder,
))
}
#[inline]
pub fn new_ts_call_signature_declaration_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
Self::TSCallSignatureDeclaration(TSCallSignatureDeclaration::boxed_with_scope_id(
span,
type_parameters,
this_param,
params,
return_type,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_construct_signature_declaration<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
type_parameters: T1,
params: T2,
return_type: T3,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
Self::TSConstructSignatureDeclaration(TSConstructSignatureDeclaration::boxed(
span,
type_parameters,
params,
return_type,
builder,
))
}
#[inline]
pub fn new_ts_construct_signature_declaration_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
type_parameters: T1,
params: T2,
return_type: T3,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
Self::TSConstructSignatureDeclaration(TSConstructSignatureDeclaration::boxed_with_scope_id(
span,
type_parameters,
params,
return_type,
scope_id,
builder,
))
}
#[inline]
pub fn new_ts_method_signature<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
key: PropertyKey<'a>,
computed: bool,
optional: bool,
kind: TSMethodSignatureKind,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
Self::TSMethodSignature(TSMethodSignature::boxed(
span,
key,
computed,
optional,
kind,
type_parameters,
this_param,
params,
return_type,
builder,
))
}
#[inline]
pub fn new_ts_method_signature_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
key: PropertyKey<'a>,
computed: bool,
optional: bool,
kind: TSMethodSignatureKind,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
Self::TSMethodSignature(TSMethodSignature::boxed_with_scope_id(
span,
key,
computed,
optional,
kind,
type_parameters,
this_param,
params,
return_type,
scope_id,
builder,
))
}
}
impl<'a> TSIndexSignature<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
parameters: ArenaVec<'a, TSIndexSignatureName<'a>>,
type_annotation: T1,
readonly: bool,
r#static: bool,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
let builder = builder.builder();
TSIndexSignature {
node_id: Cell::new(builder.node_id()),
span,
parameters,
type_annotation: type_annotation.into_in(builder.allocator()),
readonly,
r#static,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
parameters: ArenaVec<'a, TSIndexSignatureName<'a>>,
type_annotation: T1,
readonly: bool,
r#static: bool,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
ArenaBox::new_in(
Self::new(span, parameters, type_annotation, readonly, r#static, builder),
builder.builder(),
)
}
}
impl<'a> TSCallSignatureDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
let builder = builder.builder();
TSCallSignatureDeclaration {
node_id: Cell::new(builder.node_id()),
span,
type_parameters: type_parameters.into_in(builder.allocator()),
this_param: this_param.into_in(builder.allocator()),
params: params.into_in(builder.allocator()),
return_type: return_type.into_in(builder.allocator()),
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
ArenaBox::new_in(
Self::new(span, type_parameters, this_param, params, return_type, builder),
builder.builder(),
)
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
let builder = builder.builder();
TSCallSignatureDeclaration {
node_id: Cell::new(builder.node_id()),
span,
type_parameters: type_parameters.into_in(builder.allocator()),
this_param: this_param.into_in(builder.allocator()),
params: params.into_in(builder.allocator()),
return_type: return_type.into_in(builder.allocator()),
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
ArenaBox::new_in(
Self::new_with_scope_id(
span,
type_parameters,
this_param,
params,
return_type,
scope_id,
builder,
),
builder.builder(),
)
}
}
impl<'a> TSMethodSignature<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
key: PropertyKey<'a>,
computed: bool,
optional: bool,
kind: TSMethodSignatureKind,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
let builder = builder.builder();
TSMethodSignature {
node_id: Cell::new(builder.node_id()),
span,
key,
computed,
optional,
kind,
type_parameters: type_parameters.into_in(builder.allocator()),
this_param: this_param.into_in(builder.allocator()),
params: params.into_in(builder.allocator()),
return_type: return_type.into_in(builder.allocator()),
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
key: PropertyKey<'a>,
computed: bool,
optional: bool,
kind: TSMethodSignatureKind,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
ArenaBox::new_in(
Self::new(
span,
key,
computed,
optional,
kind,
type_parameters,
this_param,
params,
return_type,
builder,
),
builder.builder(),
)
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
key: PropertyKey<'a>,
computed: bool,
optional: bool,
kind: TSMethodSignatureKind,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
let builder = builder.builder();
TSMethodSignature {
node_id: Cell::new(builder.node_id()),
span,
key,
computed,
optional,
kind,
type_parameters: type_parameters.into_in(builder.allocator()),
this_param: this_param.into_in(builder.allocator()),
params: params.into_in(builder.allocator()),
return_type: return_type.into_in(builder.allocator()),
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
key: PropertyKey<'a>,
computed: bool,
optional: bool,
kind: TSMethodSignatureKind,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
ArenaBox::new_in(
Self::new_with_scope_id(
span,
key,
computed,
optional,
kind,
type_parameters,
this_param,
params,
return_type,
scope_id,
builder,
),
builder.builder(),
)
}
}
impl<'a> TSConstructSignatureDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
type_parameters: T1,
params: T2,
return_type: T3,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
let builder = builder.builder();
TSConstructSignatureDeclaration {
node_id: Cell::new(builder.node_id()),
span,
type_parameters: type_parameters.into_in(builder.allocator()),
params: params.into_in(builder.allocator()),
return_type: return_type.into_in(builder.allocator()),
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
type_parameters: T1,
params: T2,
return_type: T3,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
ArenaBox::new_in(
Self::new(span, type_parameters, params, return_type, builder),
builder.builder(),
)
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
type_parameters: T1,
params: T2,
return_type: T3,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
let builder = builder.builder();
TSConstructSignatureDeclaration {
node_id: Cell::new(builder.node_id()),
span,
type_parameters: type_parameters.into_in(builder.allocator()),
params: params.into_in(builder.allocator()),
return_type: return_type.into_in(builder.allocator()),
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
type_parameters: T1,
params: T2,
return_type: T3,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
ArenaBox::new_in(
Self::new_with_scope_id(span, type_parameters, params, return_type, scope_id, builder),
builder.builder(),
)
}
}
impl<'a> TSIndexSignatureName<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, S1, T1>(
span: Span,
name: S1,
type_annotation: T1,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
T1: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
let builder = builder.builder();
TSIndexSignatureName {
node_id: Cell::new(builder.node_id()),
span,
name: name.into(),
type_annotation: type_annotation.into_in(builder.allocator()),
}
}
}
impl<'a> TSInterfaceHeritage<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
expression: Expression<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
let builder = builder.builder();
TSInterfaceHeritage {
node_id: Cell::new(builder.node_id()),
span,
expression,
type_arguments: type_arguments.into_in(builder.allocator()),
}
}
}
impl<'a> TSTypePredicate<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
parameter_name: TSTypePredicateName<'a>,
asserts: bool,
type_annotation: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
let builder = builder.builder();
TSTypePredicate {
node_id: Cell::new(builder.node_id()),
span,
parameter_name,
asserts,
type_annotation: type_annotation.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
parameter_name: TSTypePredicateName<'a>,
asserts: bool,
type_annotation: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeAnnotation<'a>>>>,
{
ArenaBox::new_in(
Self::new(span, parameter_name, asserts, type_annotation, builder),
builder.builder(),
)
}
}
impl<'a> TSTypePredicateName<'a> {
#[inline]
pub fn new_identifier<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierName::boxed(span, name, builder))
}
#[inline]
pub fn new_this<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::This(TSThisType::boxed(span, builder))
}
}
impl<'a> TSModuleDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
id: TSModuleDeclarationName<'a>,
body: Option<TSModuleDeclarationBody<'a>>,
kind: TSModuleDeclarationKind,
declare: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
TSModuleDeclaration {
node_id: Cell::new(builder.node_id()),
span,
id,
body,
kind,
declare,
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
id: TSModuleDeclarationName<'a>,
body: Option<TSModuleDeclarationBody<'a>>,
kind: TSModuleDeclarationKind,
declare: bool,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, id, body, kind, declare, builder), builder.builder())
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
id: TSModuleDeclarationName<'a>,
body: Option<TSModuleDeclarationBody<'a>>,
kind: TSModuleDeclarationKind,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self {
let builder = builder.builder();
TSModuleDeclaration {
node_id: Cell::new(builder.node_id()),
span,
id,
body,
kind,
declare,
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
id: TSModuleDeclarationName<'a>,
body: Option<TSModuleDeclarationBody<'a>>,
kind: TSModuleDeclarationKind,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new_with_scope_id(span, id, body, kind, declare, scope_id, builder),
builder.builder(),
)
}
}
impl<'a> TSModuleDeclarationName<'a> {
#[inline]
pub fn new_identifier<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(BindingIdentifier::new(span, name, builder))
}
#[inline]
pub fn new_identifier_with_symbol_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
symbol_id: SymbolId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(BindingIdentifier::new_with_symbol_id(span, name, symbol_id, builder))
}
#[inline]
pub fn new_string_literal<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::new(span, value, raw, builder))
}
#[inline]
pub fn new_string_literal_with_lone_surrogates<B: GetAstBuilder<'a>, S1>(
span: Span,
value: S1,
raw: Option<Str<'a>>,
lone_surrogates: bool,
builder: &B,
) -> Self
where
S1: Into<Str<'a>>,
{
Self::StringLiteral(StringLiteral::new_with_lone_surrogates(
span,
value,
raw,
lone_surrogates,
builder,
))
}
}
impl<'a> TSModuleDeclarationBody<'a> {
#[inline]
pub fn new_ts_module_declaration<B: GetAstBuilder<'a>>(
span: Span,
id: TSModuleDeclarationName<'a>,
body: Option<TSModuleDeclarationBody<'a>>,
kind: TSModuleDeclarationKind,
declare: bool,
builder: &B,
) -> Self {
Self::TSModuleDeclaration(TSModuleDeclaration::boxed(
span, id, body, kind, declare, builder,
))
}
#[inline]
pub fn new_ts_module_declaration_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
id: TSModuleDeclarationName<'a>,
body: Option<TSModuleDeclarationBody<'a>>,
kind: TSModuleDeclarationKind,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self {
Self::TSModuleDeclaration(TSModuleDeclaration::boxed_with_scope_id(
span, id, body, kind, declare, scope_id, builder,
))
}
#[inline]
pub fn new_ts_module_block<B: GetAstBuilder<'a>>(
span: Span,
directives: ArenaVec<'a, Directive<'a>>,
body: ArenaVec<'a, Statement<'a>>,
builder: &B,
) -> Self {
Self::TSModuleBlock(TSModuleBlock::boxed(span, directives, body, builder))
}
}
impl<'a> TSGlobalDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
global_span: Span,
body: TSModuleBlock<'a>,
declare: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
TSGlobalDeclaration {
node_id: Cell::new(builder.node_id()),
span,
global_span,
body,
declare,
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
global_span: Span,
body: TSModuleBlock<'a>,
declare: bool,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, global_span, body, declare, builder), builder.builder())
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
global_span: Span,
body: TSModuleBlock<'a>,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> Self {
let builder = builder.builder();
TSGlobalDeclaration {
node_id: Cell::new(builder.node_id()),
span,
global_span,
body,
declare,
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
global_span: Span,
body: TSModuleBlock<'a>,
declare: bool,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new_with_scope_id(span, global_span, body, declare, scope_id, builder),
builder.builder(),
)
}
}
impl<'a> TSModuleBlock<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
directives: ArenaVec<'a, Directive<'a>>,
body: ArenaVec<'a, Statement<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSModuleBlock { node_id: Cell::new(builder.node_id()), span, directives, body }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
directives: ArenaVec<'a, Directive<'a>>,
body: ArenaVec<'a, Statement<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, directives, body, builder), builder.builder())
}
}
impl<'a> TSTypeLiteral<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
members: ArenaVec<'a, TSSignature<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSTypeLiteral { node_id: Cell::new(builder.node_id()), span, members }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
members: ArenaVec<'a, TSSignature<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, members, builder), builder.builder())
}
}
impl<'a> TSInferType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(span: Span, type_parameter: T1, builder: &B) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeParameter<'a>>>,
{
let builder = builder.builder();
TSInferType {
node_id: Cell::new(builder.node_id()),
span,
type_parameter: type_parameter.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
type_parameter: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeParameter<'a>>>,
{
ArenaBox::new_in(Self::new(span, type_parameter, builder), builder.builder())
}
}
impl<'a> TSTypeQuery<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
expr_name: TSTypeQueryExprName<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
let builder = builder.builder();
TSTypeQuery {
node_id: Cell::new(builder.node_id()),
span,
expr_name,
type_arguments: type_arguments.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
expr_name: TSTypeQueryExprName<'a>,
type_arguments: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
ArenaBox::new_in(Self::new(span, expr_name, type_arguments, builder), builder.builder())
}
}
impl<'a> TSTypeQueryExprName<'a> {
#[inline]
pub fn new_ts_import_type<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
source: StringLiteral<'a>,
options: T1,
qualifier: Option<TSImportTypeQualifier<'a>>,
type_arguments: T2,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, ObjectExpression<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
Self::TSImportType(TSImportType::boxed(
span,
source,
options,
qualifier,
type_arguments,
builder,
))
}
#[inline]
pub fn new_identifier_reference<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::IdentifierReference(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_identifier_reference_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::IdentifierReference(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_qualified_name<B: GetAstBuilder<'a>>(
span: Span,
left: TSTypeName<'a>,
right: IdentifierName<'a>,
builder: &B,
) -> Self {
Self::QualifiedName(TSQualifiedName::boxed(span, left, right, builder))
}
#[inline]
pub fn new_this_expression<B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
Self::ThisExpression(ThisExpression::boxed(span, builder))
}
}
impl<'a> TSImportType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
source: StringLiteral<'a>,
options: T1,
qualifier: Option<TSImportTypeQualifier<'a>>,
type_arguments: T2,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, ObjectExpression<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
let builder = builder.builder();
TSImportType {
node_id: Cell::new(builder.node_id()),
span,
source,
options: options.into_in(builder.allocator()),
qualifier,
type_arguments: type_arguments.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1, T2>(
span: Span,
source: StringLiteral<'a>,
options: T1,
qualifier: Option<TSImportTypeQualifier<'a>>,
type_arguments: T2,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, ObjectExpression<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterInstantiation<'a>>>>,
{
ArenaBox::new_in(
Self::new(span, source, options, qualifier, type_arguments, builder),
builder.builder(),
)
}
}
impl<'a> TSImportTypeQualifier<'a> {
#[inline]
pub fn new_identifier<B: GetAstBuilder<'a>, S1>(span: Span, name: S1, builder: &B) -> Self
where
S1: Into<Ident<'a>>,
{
Self::Identifier(IdentifierName::boxed(span, name, builder))
}
#[inline]
pub fn new_qualified_name<B: GetAstBuilder<'a>>(
span: Span,
left: TSImportTypeQualifier<'a>,
right: IdentifierName<'a>,
builder: &B,
) -> Self {
Self::QualifiedName(TSImportTypeQualifiedName::boxed(span, left, right, builder))
}
}
impl<'a> TSImportTypeQualifiedName<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
left: TSImportTypeQualifier<'a>,
right: IdentifierName<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSImportTypeQualifiedName { node_id: Cell::new(builder.node_id()), span, left, right }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
left: TSImportTypeQualifier<'a>,
right: IdentifierName<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, left, right, builder), builder.builder())
}
}
impl<'a> TSFunctionType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
let builder = builder.builder();
TSFunctionType {
node_id: Cell::new(builder.node_id()),
span,
type_parameters: type_parameters.into_in(builder.allocator()),
this_param: this_param.into_in(builder.allocator()),
params: params.into_in(builder.allocator()),
return_type: return_type.into_in(builder.allocator()),
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
ArenaBox::new_in(
Self::new(span, type_parameters, this_param, params, return_type, builder),
builder.builder(),
)
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
let builder = builder.builder();
TSFunctionType {
node_id: Cell::new(builder.node_id()),
span,
type_parameters: type_parameters.into_in(builder.allocator()),
this_param: this_param.into_in(builder.allocator()),
params: params.into_in(builder.allocator()),
return_type: return_type.into_in(builder.allocator()),
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3, T4>(
span: Span,
type_parameters: T1,
this_param: T2,
params: T3,
return_type: T4,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, Option<ArenaBox<'a, TSThisParameter<'a>>>>,
T3: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T4: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
ArenaBox::new_in(
Self::new_with_scope_id(
span,
type_parameters,
this_param,
params,
return_type,
scope_id,
builder,
),
builder.builder(),
)
}
}
impl<'a> TSConstructorType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#abstract: bool,
type_parameters: T1,
params: T2,
return_type: T3,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
let builder = builder.builder();
TSConstructorType {
node_id: Cell::new(builder.node_id()),
span,
r#abstract,
type_parameters: type_parameters.into_in(builder.allocator()),
params: params.into_in(builder.allocator()),
return_type: return_type.into_in(builder.allocator()),
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#abstract: bool,
type_parameters: T1,
params: T2,
return_type: T3,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
ArenaBox::new_in(
Self::new(span, r#abstract, type_parameters, params, return_type, builder),
builder.builder(),
)
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#abstract: bool,
type_parameters: T1,
params: T2,
return_type: T3,
scope_id: ScopeId,
builder: &B,
) -> Self
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
let builder = builder.builder();
TSConstructorType {
node_id: Cell::new(builder.node_id()),
span,
r#abstract,
type_parameters: type_parameters.into_in(builder.allocator()),
params: params.into_in(builder.allocator()),
return_type: return_type.into_in(builder.allocator()),
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>, T1, T2, T3>(
span: Span,
r#abstract: bool,
type_parameters: T1,
params: T2,
return_type: T3,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, Option<ArenaBox<'a, TSTypeParameterDeclaration<'a>>>>,
T2: IntoIn<'a, ArenaBox<'a, FormalParameters<'a>>>,
T3: IntoIn<'a, ArenaBox<'a, TSTypeAnnotation<'a>>>,
{
ArenaBox::new_in(
Self::new_with_scope_id(
span,
r#abstract,
type_parameters,
params,
return_type,
scope_id,
builder,
),
builder.builder(),
)
}
}
impl<'a> TSMappedType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
key: BindingIdentifier<'a>,
constraint: TSType<'a>,
name_type: Option<TSType<'a>>,
type_annotation: Option<TSType<'a>>,
optional: Option<TSMappedTypeModifierOperator>,
readonly: Option<TSMappedTypeModifierOperator>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSMappedType {
node_id: Cell::new(builder.node_id()),
span,
key,
constraint,
name_type,
type_annotation,
optional,
readonly,
scope_id: Default::default(),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
key: BindingIdentifier<'a>,
constraint: TSType<'a>,
name_type: Option<TSType<'a>>,
type_annotation: Option<TSType<'a>>,
optional: Option<TSMappedTypeModifierOperator>,
readonly: Option<TSMappedTypeModifierOperator>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new(
span,
key,
constraint,
name_type,
type_annotation,
optional,
readonly,
builder,
),
builder.builder(),
)
}
#[inline]
pub fn new_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
key: BindingIdentifier<'a>,
constraint: TSType<'a>,
name_type: Option<TSType<'a>>,
type_annotation: Option<TSType<'a>>,
optional: Option<TSMappedTypeModifierOperator>,
readonly: Option<TSMappedTypeModifierOperator>,
scope_id: ScopeId,
builder: &B,
) -> Self {
let builder = builder.builder();
TSMappedType {
node_id: Cell::new(builder.node_id()),
span,
key,
constraint,
name_type,
type_annotation,
optional,
readonly,
scope_id: Cell::new(Some(scope_id)),
}
}
#[inline]
pub fn boxed_with_scope_id<B: GetAstBuilder<'a>>(
span: Span,
key: BindingIdentifier<'a>,
constraint: TSType<'a>,
name_type: Option<TSType<'a>>,
type_annotation: Option<TSType<'a>>,
optional: Option<TSMappedTypeModifierOperator>,
readonly: Option<TSMappedTypeModifierOperator>,
scope_id: ScopeId,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new_with_scope_id(
span,
key,
constraint,
name_type,
type_annotation,
optional,
readonly,
scope_id,
builder,
),
builder.builder(),
)
}
}
impl<'a> TSTemplateLiteralType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
types: ArenaVec<'a, TSType<'a>>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSTemplateLiteralType { node_id: Cell::new(builder.node_id()), span, quasis, types }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
quasis: ArenaVec<'a, TemplateElement<'a>>,
types: ArenaVec<'a, TSType<'a>>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, quasis, types, builder), builder.builder())
}
}
impl<'a> TSAsExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSAsExpression { node_id: Cell::new(builder.node_id()), span, expression, type_annotation }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, expression, type_annotation, builder), builder.builder())
}
}
impl<'a> TSSatisfiesExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSSatisfiesExpression {
node_id: Cell::new(builder.node_id()),
span,
expression,
type_annotation,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
type_annotation: TSType<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, expression, type_annotation, builder), builder.builder())
}
}
impl<'a> TSTypeAssertion<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
expression: Expression<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSTypeAssertion { node_id: Cell::new(builder.node_id()), span, type_annotation, expression }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
expression: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, type_annotation, expression, builder), builder.builder())
}
}
impl<'a> TSImportEqualsDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
id: BindingIdentifier<'a>,
module_reference: TSModuleReference<'a>,
import_kind: ImportOrExportKind,
builder: &B,
) -> Self {
let builder = builder.builder();
TSImportEqualsDeclaration {
node_id: Cell::new(builder.node_id()),
span,
id,
module_reference,
import_kind,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
id: BindingIdentifier<'a>,
module_reference: TSModuleReference<'a>,
import_kind: ImportOrExportKind,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(
Self::new(span, id, module_reference, import_kind, builder),
builder.builder(),
)
}
}
impl<'a> TSModuleReference<'a> {
#[inline]
pub fn new_external_module_reference<B: GetAstBuilder<'a>>(
span: Span,
expression: StringLiteral<'a>,
builder: &B,
) -> Self {
Self::ExternalModuleReference(TSExternalModuleReference::boxed(span, expression, builder))
}
#[inline]
pub fn new_identifier_reference<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::IdentifierReference(IdentifierReference::boxed(span, name, builder))
}
#[inline]
pub fn new_identifier_reference_with_reference_id<B: GetAstBuilder<'a>, S1>(
span: Span,
name: S1,
reference_id: ReferenceId,
builder: &B,
) -> Self
where
S1: Into<Ident<'a>>,
{
Self::IdentifierReference(IdentifierReference::boxed_with_reference_id(
span,
name,
reference_id,
builder,
))
}
#[inline]
pub fn new_qualified_name<B: GetAstBuilder<'a>>(
span: Span,
left: TSTypeName<'a>,
right: IdentifierName<'a>,
builder: &B,
) -> Self {
Self::QualifiedName(TSQualifiedName::boxed(span, left, right, builder))
}
}
impl<'a> TSExternalModuleReference<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
expression: StringLiteral<'a>,
builder: &B,
) -> Self {
let builder = builder.builder();
TSExternalModuleReference { node_id: Cell::new(builder.node_id()), span, expression }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
expression: StringLiteral<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, expression, builder), builder.builder())
}
}
impl<'a> TSNonNullExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, expression: Expression<'a>, builder: &B) -> Self {
let builder = builder.builder();
TSNonNullExpression { node_id: Cell::new(builder.node_id()), span, expression }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, expression, builder), builder.builder())
}
}
impl<'a> Decorator<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, expression: Expression<'a>, builder: &B) -> Self {
let builder = builder.builder();
Decorator { node_id: Cell::new(builder.node_id()), span, expression }
}
}
impl<'a> TSExportAssignment<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, expression: Expression<'a>, builder: &B) -> Self {
let builder = builder.builder();
TSExportAssignment { node_id: Cell::new(builder.node_id()), span, expression }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
expression: Expression<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, expression, builder), builder.builder())
}
}
impl<'a> TSNamespaceExportDeclaration<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(span: Span, id: IdentifierName<'a>, builder: &B) -> Self {
let builder = builder.builder();
TSNamespaceExportDeclaration { node_id: Cell::new(builder.node_id()), span, id }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
id: IdentifierName<'a>,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, id, builder), builder.builder())
}
}
impl<'a> TSInstantiationExpression<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>, T1>(
span: Span,
expression: Expression<'a>,
type_arguments: T1,
builder: &B,
) -> Self
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeParameterInstantiation<'a>>>,
{
let builder = builder.builder();
TSInstantiationExpression {
node_id: Cell::new(builder.node_id()),
span,
expression,
type_arguments: type_arguments.into_in(builder.allocator()),
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>, T1>(
span: Span,
expression: Expression<'a>,
type_arguments: T1,
builder: &B,
) -> ArenaBox<'a, Self>
where
T1: IntoIn<'a, ArenaBox<'a, TSTypeParameterInstantiation<'a>>>,
{
ArenaBox::new_in(Self::new(span, expression, type_arguments, builder), builder.builder())
}
}
impl<'a> JSDocNullableType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
postfix: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
JSDocNullableType { node_id: Cell::new(builder.node_id()), span, type_annotation, postfix }
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
postfix: bool,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, type_annotation, postfix, builder), builder.builder())
}
}
impl<'a> JSDocNonNullableType<'a> {
#[inline]
pub fn new<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
postfix: bool,
builder: &B,
) -> Self {
let builder = builder.builder();
JSDocNonNullableType {
node_id: Cell::new(builder.node_id()),
span,
type_annotation,
postfix,
}
}
#[inline]
pub fn boxed<B: GetAstBuilder<'a>>(
span: Span,
type_annotation: TSType<'a>,
postfix: bool,
builder: &B,
) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, type_annotation, postfix, builder), builder.builder())
}
}
impl JSDocUnknownType {
#[inline]
pub fn new<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> Self {
let builder = builder.builder();
JSDocUnknownType { node_id: Cell::new(builder.node_id()), span }
}
#[inline]
pub fn boxed<'a, B: GetAstBuilder<'a>>(span: Span, builder: &B) -> ArenaBox<'a, Self> {
ArenaBox::new_in(Self::new(span, builder), builder.builder())
}
}