From ded3cb47000b118600844991fdedcd32094d212b Mon Sep 17 00:00:00 2001 From: Quaternions Date: Fri, 18 Oct 2024 10:31:01 -0700 Subject: [PATCH] do not allocate strings for unused errors --- src/runner/instance/instance.rs | 38 ++++++++++++++++----------------- src/scheduler.rs | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/runner/instance/instance.rs b/src/runner/instance/instance.rs index 5c7f66c..7dc1f46 100644 --- a/src/runner/instance/instance.rs +++ b/src/runner/instance/instance.rs @@ -17,7 +17,7 @@ pub fn set_globals(lua:&mlua::Lua,globals:&mlua::Table)->Result<(),mlua::Error>{ instance_table.raw_set("new", lua.create_function(|lua,(class_name,parent):(mlua::String,Option)|{ let class_name_str=&*class_name.to_str()?; - let parent=parent.ok_or(mlua::Error::runtime("Nil Parent not yet supported"))?; + let parent=parent.ok_or_else(||mlua::Error::runtime("Nil Parent not yet supported"))?; dom_mut(lua,|dom|{ //TODO: Nil instances Ok(Instance::new(dom.insert(parent.referent,InstanceBuilder::new(class_name_str)))) @@ -32,7 +32,7 @@ pub fn set_globals(lua:&mlua::Lua,globals:&mlua::Table)->Result<(),mlua::Error>{ // LMAO look at this function! pub fn dom_mut(lua:&mlua::Lua,mut f:impl FnMut(&mut WeakDom)->mlua::Result)->mlua::Result{ - let mut dom=lua.app_data_mut::<&'static mut WeakDom>().ok_or(mlua::Error::runtime("DataModel missing"))?; + let mut dom=lua.app_data_mut::<&'static mut WeakDom>().ok_or_else(||mlua::Error::runtime("DataModel missing"))?; f(&mut *dom) } @@ -89,10 +89,10 @@ impl Instance{ Self{referent} } pub fn get<'a>(&self,dom:&'a WeakDom)->mlua::Result<&'a rbx_dom_weak::Instance>{ - dom.get_by_ref(self.referent).ok_or(mlua::Error::runtime("Instance missing")) + dom.get_by_ref(self.referent).ok_or_else(||mlua::Error::runtime("Instance missing")) } pub fn get_mut<'a>(&self,dom:&'a mut WeakDom)->mlua::Result<&'a mut rbx_dom_weak::Instance>{ - dom.get_by_ref_mut(self.referent).ok_or(mlua::Error::runtime("Instance missing")) + dom.get_by_ref_mut(self.referent).ok_or_else(||mlua::Error::runtime("Instance missing")) } } type_from_lua_userdata!(Instance); @@ -125,7 +125,7 @@ impl mlua::UserData for Instance{ }) }); fields.add_field_method_set("Parent",|lua,this,val:Option|{ - let parent=val.ok_or(mlua::Error::runtime("Nil Parent not yet supported"))?; + let parent=val.ok_or_else(||mlua::Error::runtime("Nil Parent not yet supported"))?; dom_mut(lua,|dom|{ dom.transfer_within(this.referent,parent.referent); Ok(()) @@ -231,7 +231,7 @@ impl mlua::UserData for Instance{ let instance=this.get(dom)?; //println!("__index t={} i={index:?}",instance.name); let db=rbx_reflection_database::get(); - let class=db.classes.get(instance.class.as_str()).ok_or(mlua::Error::runtime("Class missing"))?; + let class=db.classes.get(instance.class.as_str()).ok_or_else(||mlua::Error::runtime("Class missing"))?; //Find existing property match instance.properties.get(index_str) .cloned() @@ -295,19 +295,19 @@ impl mlua::UserData for Instance{ //println!("__newindex t={} i={index:?} v={value:?}",instance.name); let index_str=&*index.to_str()?; let db=rbx_reflection_database::get(); - let class=db.classes.get(instance.class.as_str()).ok_or(mlua::Error::runtime("Class missing"))?; + let class=db.classes.get(instance.class.as_str()).ok_or_else(||mlua::Error::runtime("Class missing"))?; let mut iter=SuperClassIter{ database:db, descriptor:Some(class), }; - let property=iter.find_map(|cls|cls.properties.get(index_str)).ok_or(mlua::Error::runtime(format!("Property '{index_str}' missing on class '{}'",class.name)))?; + let property=iter.find_map(|cls|cls.properties.get(index_str)).ok_or_else(||mlua::Error::runtime(format!("Property '{index_str}' missing on class '{}'",class.name)))?; match &property.data_type{ rbx_reflection::DataType::Value(rbx_types::VariantType::Vector3)=>{ - let typed_value:Vector3=*value.as_userdata().ok_or(mlua::Error::runtime("Expected Userdata"))?.borrow()?; + let typed_value:Vector3=*value.as_userdata().ok_or_else(||mlua::Error::runtime("Expected Userdata"))?.borrow()?; instance.properties.insert(index_str.to_owned(),rbx_types::Variant::Vector3(typed_value.into())); }, rbx_reflection::DataType::Value(rbx_types::VariantType::Float32)=>{ - let typed_value:f32=coerce_float32(&value).ok_or(mlua::Error::runtime("Expected f32"))?; + let typed_value:f32=coerce_float32(&value).ok_or_else(||mlua::Error::runtime("Expected f32"))?; instance.properties.insert(index_str.to_owned(),rbx_types::Variant::Float32(typed_value)); }, rbx_reflection::DataType::Enum(enum_name)=>{ @@ -315,8 +315,8 @@ impl mlua::UserData for Instance{ &mlua::Value::Integer(int)=>Ok(rbx_types::Enum::from_u32(int as u32)), &mlua::Value::Number(num)=>Ok(rbx_types::Enum::from_u32(num as u32)), mlua::Value::String(s)=>{ - let e=db.enums.get(enum_name).ok_or(mlua::Error::runtime("Database DataType Enum name does not exist"))?; - Ok(rbx_types::Enum::from_u32(*e.items.get(&*s.to_str()?).ok_or(mlua::Error::runtime("Invalid enum item"))?)) + let e=db.enums.get(enum_name).ok_or_else(||mlua::Error::runtime("Database DataType Enum name does not exist"))?; + Ok(rbx_types::Enum::from_u32(*e.items.get(&*s.to_str()?).ok_or_else(||mlua::Error::runtime("Invalid enum item"))?)) }, mlua::Value::UserData(any_user_data)=>{ let e:crate::runner::r#enum::Enum=*any_user_data.borrow()?; @@ -327,23 +327,23 @@ impl mlua::UserData for Instance{ instance.properties.insert(index_str.to_owned(),rbx_types::Variant::Enum(typed_value)); }, rbx_reflection::DataType::Value(rbx_types::VariantType::Color3)=>{ - let typed_value:crate::runner::color3::Color3=*value.as_userdata().ok_or(mlua::Error::runtime("Expected Color3"))?.borrow()?; + let typed_value:crate::runner::color3::Color3=*value.as_userdata().ok_or_else(||mlua::Error::runtime("Expected Color3"))?.borrow()?; instance.properties.insert(index_str.to_owned(),rbx_types::Variant::Color3(typed_value.into())); }, rbx_reflection::DataType::Value(rbx_types::VariantType::Bool)=>{ - let typed_value=value.as_boolean().ok_or(mlua::Error::runtime("Expected boolean"))?; + let typed_value=value.as_boolean().ok_or_else(||mlua::Error::runtime("Expected boolean"))?; instance.properties.insert(index_str.to_owned(),rbx_types::Variant::Bool(typed_value)); }, rbx_reflection::DataType::Value(rbx_types::VariantType::String)=>{ - let typed_value=value.as_str().ok_or(mlua::Error::runtime("Expected boolean"))?; + let typed_value=value.as_str().ok_or_else(||mlua::Error::runtime("Expected boolean"))?; instance.properties.insert(index_str.to_owned(),rbx_types::Variant::String(typed_value.to_owned())); }, rbx_reflection::DataType::Value(rbx_types::VariantType::NumberSequence)=>{ - let typed_value:crate::runner::number_sequence::NumberSequence=*value.as_userdata().ok_or(mlua::Error::runtime("Expected NumberSequence"))?.borrow()?; + let typed_value:crate::runner::number_sequence::NumberSequence=*value.as_userdata().ok_or_else(||mlua::Error::runtime("Expected NumberSequence"))?.borrow()?; instance.properties.insert(index_str.to_owned(),rbx_types::Variant::NumberSequence(typed_value.into())); }, rbx_reflection::DataType::Value(rbx_types::VariantType::ColorSequence)=>{ - let typed_value:crate::runner::color_sequence::ColorSequence=*value.as_userdata().ok_or(mlua::Error::runtime("Expected ColorSequence"))?.borrow()?; + let typed_value:crate::runner::color_sequence::ColorSequence=*value.as_userdata().ok_or_else(||mlua::Error::runtime("Expected ColorSequence"))?.borrow()?; instance.properties.insert(index_str.to_owned(),rbx_types::Variant::ColorSequence(typed_value.into())); }, other=>return Err(mlua::Error::runtime(format!("Unimplemented property type: {other:?}"))), @@ -443,7 +443,7 @@ impl ClassMethods<'_>{ } } fn class_methods_store_mut(lua:&mlua::Lua,mut f:impl FnMut(&mut ClassMethodsStore)->mlua::Result)->mlua::Result{ - let mut cf=lua.app_data_mut::().ok_or(mlua::Error::runtime("ClassMethodsStore missing"))?; + let mut cf=lua.app_data_mut::().ok_or_else(||mlua::Error::runtime("ClassMethodsStore missing"))?; f(&mut *cf) } @@ -552,6 +552,6 @@ impl InstanceValues<'_>{ } pub fn instance_value_store_mut(lua:&mlua::Lua,mut f:impl FnMut(&mut InstanceValueStore)->mlua::Result)->mlua::Result{ - let mut cf=lua.app_data_mut::().ok_or(mlua::Error::runtime("InstanceValueStore missing"))?; + let mut cf=lua.app_data_mut::().ok_or_else(||mlua::Error::runtime("InstanceValueStore missing"))?; f(&mut *cf) } diff --git a/src/scheduler.rs b/src/scheduler.rs index 53170d1..5a1488e 100644 --- a/src/scheduler.rs +++ b/src/scheduler.rs @@ -58,7 +58,7 @@ impl Scheduler{ } pub fn scheduler_mut(lua:&mlua::Lua,mut f:impl FnMut(&mut crate::scheduler::Scheduler)->mlua::Result)->mlua::Result{ - let mut scheduler=lua.app_data_mut::().ok_or(mlua::Error::runtime("Scheduler missing"))?; + let mut scheduler=lua.app_data_mut::().ok_or_else(||mlua::Error::runtime("Scheduler missing"))?; f(&mut *scheduler) }