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> {
|
pub fn coerce_integer(&self, v: LuaValue) -> LuaResult<LuaInteger> {
|
||||||
match v {
|
match v {
|
||||||
LuaValue::Integer(i) => Ok(i),
|
LuaValue::Integer(i) => Ok(i),
|
||||||
LuaValue::Number(n) => Ok(n as LuaInteger),
|
|
||||||
v => unsafe {
|
v => unsafe {
|
||||||
stack_guard(self.state, 0, || {
|
stack_guard(self.state, 0, || {
|
||||||
check_stack(self.state, 1)?;
|
check_stack(self.state, 1)?;
|
||||||
|
@ -1262,7 +1261,6 @@ impl Lua {
|
||||||
/// manual for details.
|
/// manual for details.
|
||||||
pub fn coerce_number(&self, v: LuaValue) -> LuaResult<LuaNumber> {
|
pub fn coerce_number(&self, v: LuaValue) -> LuaResult<LuaNumber> {
|
||||||
match v {
|
match v {
|
||||||
LuaValue::Integer(i) => Ok(i as LuaNumber),
|
|
||||||
LuaValue::Number(n) => Ok(n),
|
LuaValue::Number(n) => Ok(n),
|
||||||
v => unsafe {
|
v => unsafe {
|
||||||
stack_guard(self.state, 0, || {
|
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 lua = Lua::new();
|
||||||
let globals = lua.globals().unwrap();
|
let globals = lua.globals().unwrap();
|
||||||
|
|
||||||
globals.set("a", "1.0").unwrap();
|
globals.set("n", "1.0").unwrap();
|
||||||
assert_eq!(globals.get::<_, i64>("a").unwrap(), 1);
|
assert_eq!(globals.get::<_, i64>("n").unwrap(), 1);
|
||||||
assert_eq!(globals.get::<_, f64>("a").unwrap(), 1.0);
|
assert_eq!(globals.get::<_, f64>("n").unwrap(), 1.0);
|
||||||
assert_eq!(globals.get::<_, String>("a").unwrap(), "1.0");
|
assert_eq!(globals.get::<_, String>("n").unwrap(), "1.0");
|
||||||
|
|
||||||
globals.set("a", "1.5").unwrap();
|
globals.set("n", "1.5").unwrap();
|
||||||
assert!(globals.get::<_, i64>("a").is_err());
|
assert!(globals.get::<_, i64>("n").is_err());
|
||||||
assert_eq!(globals.get::<_, f64>("a").unwrap(), 1.5);
|
assert_eq!(globals.get::<_, f64>("n").unwrap(), 1.5);
|
||||||
assert_eq!(globals.get::<_, String>("a").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