use crate::IntOrFloat;
use crate::Span;
use crate::Token;
use lua_tokenizer::TokenType;
#[derive(Clone, Copy, Debug)]
pub struct ExprNil {
pub span: Span,
}
impl ExprNil {
pub fn new(span: Span) -> Self {
Self { span }
}
pub fn span(&self) -> Span {
self.span
}
}
impl From<Token> for ExprNil {
fn from(t: Token) -> Self {
Self::new(t.span)
}
}
#[derive(Clone, Copy, Debug)]
pub struct ExprNumeric {
pub value: IntOrFloat,
pub span: Span,
}
impl ExprNumeric {
pub fn new(value: IntOrFloat, span: Span) -> Self {
Self { value, span }
}
pub fn span(&self) -> Span {
self.span
}
}
impl From<Token> for ExprNumeric {
fn from(t: Token) -> Self {
match t.token_type {
TokenType::Numeric(value) => Self::new(value.into(), t.span),
_ => unreachable!(),
}
}
}
#[derive(Clone, Debug)]
pub struct ExprString {
pub value: Vec<u8>,
pub span: Span,
}
impl ExprString {
pub fn new(value: Vec<u8>, span: Span) -> Self {
Self { value, span }
}
pub fn span(&self) -> Span {
self.span
}
}
impl From<Token> for ExprString {
fn from(t: Token) -> Self {
match t.token_type {
TokenType::String(s) => Self::new(s, t.span),
TokenType::Ident(s) => Self::new(s.into_bytes(), t.span),
_ => unreachable!(),
}
}
}
#[derive(Clone, Copy, Debug)]
pub struct ExprBool {
pub value: bool,
pub span: Span,
}
impl ExprBool {
pub fn new(value: bool, span: Span) -> Self {
Self { value, span }
}
pub fn span(&self) -> Span {
self.span
}
}
impl From<Token> for ExprBool {
fn from(t: Token) -> Self {
match t.token_type {
TokenType::Bool(value) => Self::new(value, t.span),
_ => unreachable!(),
}
}
}
#[derive(Clone, Copy, Debug)]
pub struct ExprVariadic {
pub span: Span,
}
impl ExprVariadic {
pub fn new(span: Span) -> Self {
Self { span }
}
pub fn span(&self) -> Span {
self.span
}
}
impl From<Token> for ExprVariadic {
fn from(t: Token) -> Self {
Self { span: t.span }
}
}