Add get/set/index_get/index_set parameters to rhai_fn.

This commit is contained in:
Stephen Chung
2020-08-17 00:13:52 +08:00
parent e75d91e9bf
commit 810514dd31
5 changed files with 53 additions and 15 deletions

View File

@@ -4,6 +4,32 @@ use crate::function::ExportedFn;
pub(crate) type ExportedConst = (String, syn::Expr);
pub(crate) fn get_register_name(function: &ExportedFn) -> String {
pub const FN_IDX_GET: &str = "index$get$";
pub const FN_IDX_SET: &str = "index$set$";
pub fn make_getter(id: &str) -> String {
format!("get${}", id)
}
pub fn make_setter(id: &str) -> String {
format!("set${}", id)
}
if let Some(ref name) = function.params.name {
name.clone()
} else if let Some(ref name) = function.params.get {
make_getter(name).clone()
} else if let Some(ref name) = function.params.set {
make_setter(name).clone()
} else if function.params.index_get {
FN_IDX_GET.to_string()
} else if function.params.index_set {
FN_IDX_SET.to_string()
} else {
function.name().to_string()
}
}
pub(crate) fn generate_body(
fns: &Vec<ExportedFn>,
consts: &Vec<ExportedConst>,
@@ -29,11 +55,7 @@ pub(crate) fn generate_body(
&format!("{}_token", function.name().to_string()),
function.name().span(),
);
let reg_name = if let Some(ref name) = function.params.name {
name.clone()
} else {
function.name().to_string()
};
let reg_name = get_register_name(function);
let fn_literal = syn::LitStr::new(&reg_name, proc_macro2::Span::call_site());
let fn_input_types: Vec<syn::Expr> = function
.arg_list()