use crate::syntax::ast::Node;
use boa_interner::{Interner, Sym, ToInternedString};
#[cfg(feature = "deser")]
use serde::{Deserialize, Serialize};
#[cfg(test)]
mod tests;
#[cfg_attr(feature = "deser", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Break {
label: Option<Sym>,
}
impl Break {
pub fn new<L>(label: L) -> Self
where
L: Into<Option<Sym>>,
{
Self {
label: label.into(),
}
}
pub fn label(&self) -> Option<Sym> {
self.label
}
}
impl ToInternedString for Break {
fn to_interned_string(&self, interner: &Interner) -> String {
if let Some(label) = self.label {
format!("break {}", interner.resolve_expect(label))
} else {
"break".to_owned()
}
}
}
impl From<Break> for Node {
fn from(break_smt: Break) -> Self {
Self::Break(break_smt)
}
}