ACTUALLY correctly limit numeric conversions
Don't mistakenly do rust-side conversions from integer <-> number
This commit is contained in:
parent
918edad1b2
commit
3ab3970c01
|
@ -1238,7 +1238,6 @@ impl Lua {
|
|||
pub fn coerce_integer(&self, v: LuaValue) -> LuaResult<LuaInteger> {
|
||||
match v {
|
||||
LuaValue::Integer(i) => Ok(i),
|
||||
LuaValue::Number(n) => Ok(n as LuaInteger),
|
||||
v => unsafe {
|
||||
stack_guard(self.state, 0, || {
|
||||
check_stack(self.state, 1)?;
|
||||
|
@ -1262,7 +1261,6 @@ impl Lua {
|
|||
/// manual for details.
|
||||
pub fn coerce_number(&self, v: LuaValue) -> LuaResult<LuaNumber> {
|
||||
match v {
|
||||
LuaValue::Integer(i) => Ok(i as LuaNumber),
|
||||
LuaValue::Number(n) => Ok(n),
|
||||
v => unsafe {
|
||||
stack_guard(self.state, 0, || {
|
||||
|
|
24
src/tests.rs
24
src/tests.rs
|
@ -730,13 +730,21 @@ fn test_num_conversion() {
|
|||
let lua = Lua::new();
|
||||
let globals = lua.globals().unwrap();
|
||||
|
||||
globals.set("a", "1.0").unwrap();
|
||||
assert_eq!(globals.get::<_, i64>("a").unwrap(), 1);
|
||||
assert_eq!(globals.get::<_, f64>("a").unwrap(), 1.0);
|
||||
assert_eq!(globals.get::<_, String>("a").unwrap(), "1.0");
|
||||
globals.set("n", "1.0").unwrap();
|
||||
assert_eq!(globals.get::<_, i64>("n").unwrap(), 1);
|
||||
assert_eq!(globals.get::<_, f64>("n").unwrap(), 1.0);
|
||||
assert_eq!(globals.get::<_, String>("n").unwrap(), "1.0");
|
||||
|
||||
globals.set("a", "1.5").unwrap();
|
||||
assert!(globals.get::<_, i64>("a").is_err());
|
||||
assert_eq!(globals.get::<_, f64>("a").unwrap(), 1.5);
|
||||
assert_eq!(globals.get::<_, String>("a").unwrap(), "1.5");
|
||||
globals.set("n", "1.5").unwrap();
|
||||
assert!(globals.get::<_, i64>("n").is_err());
|
||||
assert_eq!(globals.get::<_, f64>("n").unwrap(), 1.5);
|
||||
assert_eq!(globals.get::<_, String>("n").unwrap(), "1.5");
|
||||
|
||||
globals.set("n", 1.5).unwrap();
|
||||
assert!(globals.get::<_, i64>("n").is_err());
|
||||
assert_eq!(globals.get::<_, f64>("n").unwrap(), 1.5);
|
||||
assert_eq!(globals.get::<_, String>("n").unwrap(), "1.5");
|
||||
|
||||
lua.exec::<()>("a = math.huge", None).unwrap();
|
||||
assert!(globals.get::<_, i64>("n").is_err());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue