use crate::syntax::ast::node::{join_nodes, Node};
use boa_interner::{Interner, ToInternedString};
#[cfg(feature = "deser")]
use serde::{Deserialize, Serialize};
#[cfg(test)]
mod tests;
#[cfg_attr(feature = "deser", derive(Serialize, Deserialize))]
#[derive(Clone, Debug, PartialEq)]
pub struct Call {
expr: Box<Node>,
args: Box<[Node]>,
}
impl Call {
pub fn new<E, A>(expr: E, args: A) -> Self
where
E: Into<Node>,
A: Into<Box<[Node]>>,
{
Self {
expr: Box::new(expr.into()),
args: args.into(),
}
}
pub fn expr(&self) -> &Node {
&self.expr
}
pub fn args(&self) -> &[Node] {
&self.args
}
}
impl ToInternedString for Call {
fn to_interned_string(&self, interner: &Interner) -> String {
format!(
"{}({})",
self.expr.to_interned_string(interner),
join_nodes(interner, &self.args)
)
}
}
impl From<Call> for Node {
fn from(call: Call) -> Self {
Self::Call(call)
}
}