Move Constant to Value

This commit is contained in:
Sofia 2026-03-20 18:17:31 +02:00
parent 2710a43bb2
commit 56943d612a
4 changed files with 31 additions and 32 deletions

View File

@ -9,8 +9,8 @@ use crate::{
Literal, Node, Statement, UnaryOperator,
},
vm::{
Constant, Instruction, Prototype,
value::{LuaBool, LuaInteger},
Instruction, Prototype,
value::{Constant, LuaBool, LuaInteger},
},
};

View File

@ -56,7 +56,7 @@ pub enum CompilationError {
pub struct CompilationUnit {
pub instructions: Vec<vm::Instruction>,
pub state: compile::State,
pub constants: Vec<vm::Constant>,
pub constants: Vec<vm::value::Constant>,
}
impl Debug for CompilationUnit {

View File

@ -1,42 +1,15 @@
use thiserror::Error;
use std::{cell::RefCell, collections::HashMap, fmt::Debug, hash::Hash, rc::Rc};
use std::{cell::RefCell, collections::HashMap, fmt::Debug, rc::Rc};
use crate::{
CompilationUnit,
ast::{BinaryOperator, UnaryOperator},
vm::value::{IndexableValue, LuaBool, LuaInteger, VMFloat, Value},
vm::value::{Constant, IndexableValue, LuaInteger, Value},
};
pub mod value;
#[derive(Clone, Hash, PartialEq, Eq)]
pub enum Constant {
String(String),
Float(VMFloat),
Integer(LuaInteger),
Bool(LuaBool),
Nil,
}
impl From<&str> for Constant {
fn from(value: &str) -> Self {
Constant::String(value.to_owned())
}
}
impl Debug for Constant {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::String(arg0) => f.debug_tuple("String").field(arg0).finish(),
Self::Float(arg0) => f.debug_tuple("Float").field(&arg0.lua_number()).finish(),
Self::Integer(arg0) => f.debug_tuple("Integer").field(arg0).finish(),
Self::Bool(arg0) => f.debug_tuple("Boolean").field(arg0).finish(),
Self::Nil => f.debug_tuple("Nil").finish(),
}
}
}
#[derive(Clone, Copy)]
pub enum Instruction {
/// R(A) := R(B)

View File

@ -87,6 +87,32 @@ impl<T: RustFunction + 'static> From<T> for Value {
Self::RustFunction(Rc::new(RefCell::new(value)))
}
}
#[derive(Clone, Hash, PartialEq, Eq)]
pub enum Constant {
String(String),
Float(VMFloat),
Integer(LuaInteger),
Bool(LuaBool),
Nil,
}
impl From<&str> for Constant {
fn from(value: &str) -> Self {
Constant::String(value.to_owned())
}
}
impl Debug for Constant {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::String(arg0) => f.debug_tuple("String").field(arg0).finish(),
Self::Float(arg0) => f.debug_tuple("Float").field(&arg0.lua_number()).finish(),
Self::Integer(arg0) => f.debug_tuple("Integer").field(arg0).finish(),
Self::Bool(arg0) => f.debug_tuple("Boolean").field(arg0).finish(),
Self::Nil => f.debug_tuple("Nil").finish(),
}
}
}
#[derive(Clone)]
pub enum Value {