walk the class tree, return the first function found
This commit is contained in:
parent
c96d9b7aef
commit
c47f30054f
@ -226,25 +226,34 @@ impl mlua::UserData for Instance{
|
|||||||
let index_str=&*index.to_str()?;
|
let index_str=&*index.to_str()?;
|
||||||
dom_mut(lua,|dom|{
|
dom_mut(lua,|dom|{
|
||||||
let instance=this.get(dom)?;
|
let instance=this.get(dom)?;
|
||||||
|
let db=rbx_reflection_database::get();
|
||||||
|
let class=db.classes.get(instance.class.as_str()).ok_or(mlua::Error::runtime("Class missing"))?;
|
||||||
//Find existing property
|
//Find existing property
|
||||||
match instance.properties.get(index_str)
|
match instance.properties.get(index_str)
|
||||||
//Find default value
|
//Find default value
|
||||||
.or_else(||{
|
.or_else(||db.find_default_property(class,index_str))
|
||||||
let db=rbx_reflection_database::get();
|
|
||||||
db.classes.get(instance.class.as_str()).and_then(|cd|
|
|
||||||
db.find_default_property(cd,index_str)
|
|
||||||
)
|
|
||||||
})
|
|
||||||
{
|
{
|
||||||
Some(&rbx_types::Variant::CFrame(cf))=>return Ok(Into::<super::cframe::CFrame>::into(cf).into_lua(lua)),
|
Some(&rbx_types::Variant::CFrame(cf))=>return Ok(Into::<super::cframe::CFrame>::into(cf).into_lua(lua)),
|
||||||
Some(&rbx_types::Variant::Vector3(v))=>return Ok(Into::<super::vector3::Vector3>::into(v).into_lua(lua)),
|
Some(&rbx_types::Variant::Vector3(v))=>return Ok(Into::<super::vector3::Vector3>::into(v).into_lua(lua)),
|
||||||
_=>(),
|
_=>(),
|
||||||
}
|
}
|
||||||
//find a function with a matching name
|
//find a function with a matching name
|
||||||
if let Some(ret)=class_functions_mut(lua,|cf|
|
if let Some(function)=class_functions_mut(lua,|cf|{
|
||||||
cf.get_or_create_class_function(lua,instance.class.as_str(),index_str)
|
let mut iter=SuperClassIter{
|
||||||
)?{
|
database:db,
|
||||||
return Ok(ret.into_lua(lua));
|
descriptor:Some(class),
|
||||||
|
};
|
||||||
|
Ok(loop{
|
||||||
|
match iter.next(){
|
||||||
|
Some(class)=>match cf.get_or_create_class_function(lua,&class.name,index_str)?{
|
||||||
|
Some(function)=>break Some(function),
|
||||||
|
None=>(),
|
||||||
|
},
|
||||||
|
None=>break None,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})?{
|
||||||
|
return Ok(function.into_lua(lua));
|
||||||
}
|
}
|
||||||
//find a child with a matching name
|
//find a child with a matching name
|
||||||
Ok(
|
Ok(
|
||||||
|
Loading…
Reference in New Issue
Block a user