⭐ add integers
parent
e87265373c
commit
8d80ebc052
10
src/state.rs
10
src/state.rs
|
@ -76,6 +76,7 @@ pub enum Value {
|
||||||
Nil,
|
Nil,
|
||||||
Boolean (bool),
|
Boolean (bool),
|
||||||
Float (f64),
|
Float (f64),
|
||||||
|
Integer (i64),
|
||||||
String (Rc <String>),
|
String (Rc <String>),
|
||||||
|
|
||||||
// These are all bogus, I haven't figured out how to implement
|
// These are all bogus, I haven't figured out how to implement
|
||||||
|
@ -107,7 +108,7 @@ impl From <&str> for Value {
|
||||||
|
|
||||||
impl From <i32> for Value {
|
impl From <i32> for Value {
|
||||||
fn from (x: i32) -> Self {
|
fn from (x: i32) -> Self {
|
||||||
Self::Float (f64::try_from (x).unwrap ())
|
Self::Integer (i64::try_from (x).unwrap ())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,6 +122,8 @@ impl Value {
|
||||||
fn as_float (&self) -> Option <f64> {
|
fn as_float (&self) -> Option <f64> {
|
||||||
match self {
|
match self {
|
||||||
Self::Float (x) => Some (*x),
|
Self::Float (x) => Some (*x),
|
||||||
|
// FloatToInt isn't stable yet, so only ints in i32 space can practically be used for now
|
||||||
|
Self::Integer (x) => f64::try_from (i32::try_from (*x).ok ()?).ok (),
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -319,7 +322,8 @@ impl State {
|
||||||
Value::Nil => println! ("nil"),
|
Value::Nil => println! ("nil"),
|
||||||
Value::Boolean (false) => println! ("false"),
|
Value::Boolean (false) => println! ("false"),
|
||||||
Value::Boolean (true) => println! ("true"),
|
Value::Boolean (true) => println! ("true"),
|
||||||
Value::Float (x) => println! ("{}", x),
|
Value::Float (x) => println! ("{:?}", x),
|
||||||
|
Value::Integer (x) => println! ("{}", x),
|
||||||
Value::String (s) => println! ("{}", s),
|
Value::String (s) => println! ("{}", s),
|
||||||
_ => unimplemented! (),
|
_ => unimplemented! (),
|
||||||
};
|
};
|
||||||
|
@ -419,7 +423,7 @@ impl State {
|
||||||
Instruction::LoadI (a, sbx) => {
|
Instruction::LoadI (a, sbx) => {
|
||||||
let a = usize::try_from (*a).unwrap ();
|
let a = usize::try_from (*a).unwrap ();
|
||||||
|
|
||||||
self.register_window_mut ()[a] = (*sbx).into ();
|
self.register_window_mut ()[a] = Value::Integer (*sbx as i64);
|
||||||
},
|
},
|
||||||
Instruction::LoadK (a, bx) => {
|
Instruction::LoadK (a, bx) => {
|
||||||
let a = usize::try_from (*a).unwrap ();
|
let a = usize::try_from (*a).unwrap ();
|
||||||
|
|
|
@ -91,8 +91,8 @@ fn closure () {
|
||||||
|
|
||||||
for (arg, expected) in [
|
for (arg, expected) in [
|
||||||
// Run the same test twice so clippy won't complain about a vec of 1 element
|
// Run the same test twice so clippy won't complain about a vec of 1 element
|
||||||
(vec! ["_exe_name"], vec! [23.into ()]),
|
(vec! ["_exe_name"], vec! [23.0.into ()]),
|
||||||
(vec! ["_exe_name"], vec! [23.into ()]),
|
(vec! ["_exe_name"], vec! [23.0.into ()]),
|
||||||
] {
|
] {
|
||||||
let mut vm = State::default ();
|
let mut vm = State::default ();
|
||||||
let upvalues = State::upvalues_from_args (arg.into_iter ().map (|s| s.to_string ()));
|
let upvalues = State::upvalues_from_args (arg.into_iter ().map (|s| s.to_string ()));
|
||||||
|
|
|
@ -2,5 +2,5 @@ print (nil)
|
||||||
print (false)
|
print (false)
|
||||||
print (true)
|
print (true)
|
||||||
print (1993)
|
print (1993)
|
||||||
print (1993.0)
|
print (1993.00)
|
||||||
print "Hello."
|
print "Hello."
|
||||||
|
|
Loading…
Reference in New Issue