try using &'static str from function database instead of provided index str
This commit is contained in:
parent
a8236265fd
commit
fbe4b56c62
@ -1,4 +1,4 @@
|
||||
use std::collections::HashMap;
|
||||
use std::collections::{hash_map::Entry,HashMap};
|
||||
|
||||
use mlua::{IntoLua,IntoLuaMulti};
|
||||
use rbx_types::Ref;
|
||||
@ -264,39 +264,37 @@ impl mlua::UserData for Instance{
|
||||
//find a function with a matching name
|
||||
if let Some(ret)=class_functions_mut(lua,|cf|{
|
||||
let class_str=instance.class.as_str();
|
||||
Ok(match cf.classes.entry(class_str){
|
||||
std::collections::hash_map::Entry::Occupied(occupied_entry)=>{
|
||||
match occupied_entry.get().entry(index_str){
|
||||
std::collections::hash_map::Entry::Occupied(occupied_entry)=>{
|
||||
Some(occupied_entry.get())
|
||||
Ok(match CLASS_FUNCTION_DATABASE.get_entry(class_str){
|
||||
Some((&static_class_str,class_functions))=>{
|
||||
match cf.classes.entry(static_class_str){
|
||||
Entry::Occupied(occupied_entry)=>{
|
||||
match class_functions.get_entry(index_str){
|
||||
Some((&static_index_str,function_pointer))=>{
|
||||
match occupied_entry.get().entry(static_index_str){
|
||||
Entry::Occupied(occupied_entry)=>{
|
||||
Some(*occupied_entry.get())
|
||||
},
|
||||
Entry::Vacant(vacant_entry)=>{
|
||||
Some(*vacant_entry.insert(lua.create_function(function_pointer)?))
|
||||
},
|
||||
}
|
||||
},
|
||||
std::collections::hash_map::Entry::Vacant(vacant_entry)=>{
|
||||
match CLASS_FUNCTION_DATABASE.get(class_str)
|
||||
.and_then(|class_functions|
|
||||
class_functions.get(index_str)
|
||||
)
|
||||
{
|
||||
Some(f_pointer)=>Some(&*vacant_entry.insert(lua.create_function(f_pointer)?)),
|
||||
None=>None,
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
std::collections::hash_map::Entry::Vacant(vacant_entry)=>{
|
||||
match CLASS_FUNCTION_DATABASE.get(class_str)
|
||||
.and_then(|class_functions|
|
||||
class_functions.get(index_str)
|
||||
)
|
||||
{
|
||||
Some(f_pointer)=>{
|
||||
Entry::Vacant(vacant_entry)=>{
|
||||
match class_functions.get_entry(index_str){
|
||||
Some((&static_index_str,function_pointer))=>{
|
||||
let mut h=HashMap::new();
|
||||
let lua_f=h.entry(index_str).or_insert(lua.create_function(f_pointer)?);
|
||||
vacant_entry.insert(h);
|
||||
Some(&*lua_f)
|
||||
h.entry(static_index_str).or_insert(lua.create_function(function_pointer)?);
|
||||
vacant_entry.insert(h).get(static_index_str).map(|f|*f)
|
||||
},
|
||||
None=>None,
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
None=>None,
|
||||
})
|
||||
})?{
|
||||
return Ok(ret.into_lua(lua));
|
||||
|
Loading…
Reference in New Issue
Block a user