use super::{Expr, Function, Ident, PropertyKey, Stmt};
use crate::common::Span;
use alloc::boxed::Box;
use alloc::vec::Vec;
#[derive(Clone, Debug, PartialEq)]
pub struct Class {
pub id: Option<Ident>,
pub super_class: Option<Box<Expr>>,
pub body: Vec<ClassMember>,
pub span: Span,
}
#[derive(Clone, Debug, PartialEq)]
#[allow(missing_docs)]
pub enum ClassMember {
Method(ClassMethod),
Field(ClassField),
StaticBlock { body: Vec<Stmt>, span: Span },
}
#[derive(Clone, Debug, PartialEq)]
pub struct ClassMethod {
pub key: PropertyKey,
pub kind: MethodKind,
pub value: Function,
pub is_static: bool,
pub span: Span,
}
#[derive(Clone, Debug, PartialEq)]
pub struct ClassField {
pub key: PropertyKey,
pub value: Option<Expr>,
pub is_static: bool,
pub span: Span,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[allow(missing_docs)]
pub enum MethodKind {
Method,
Get,
Set,
Constructor,
}