Make sure both shared and take can be called in both styles.

This commit is contained in:
Stephen Chung 2020-07-31 17:06:40 +08:00
parent e70e0ff4e2
commit df8587ac91

View File

@ -32,10 +32,10 @@ use crate::parser::FLOAT;
use crate::engine::{FN_IDX_GET, FN_IDX_SET}; use crate::engine::{FN_IDX_GET, FN_IDX_SET};
#[cfg(not(feature = "no_object"))] #[cfg(not(feature = "no_object"))]
use crate::engine::{Map, Target, FN_GET, FN_SET, KEYWORD_TAKE}; use crate::engine::{Map, Target, FN_GET, FN_SET};
#[cfg(not(feature = "no_shared"))] #[cfg(not(feature = "no_shared"))]
use crate::engine::KEYWORD_SHARED; use crate::engine::{KEYWORD_SHARED, KEYWORD_TAKE};
use crate::stdlib::{ use crate::stdlib::{
any::{type_name, TypeId}, any::{type_name, TypeId},
@ -659,9 +659,12 @@ impl Engine {
.into(), .into(),
false, false,
)) ))
} else if _fn_name == KEYWORD_TAKE { } else if _fn_name == KEYWORD_SHARED && idx.is_empty() {
// take call // take call
return Ok((obj.clone_inner_data::<Dynamic>().unwrap(), false)); Ok((obj.clone().into_shared(), false))
} else if _fn_name == KEYWORD_TAKE && idx.is_empty() {
// take call
Ok((obj.clone_inner_data::<Dynamic>().unwrap(), false))
} else { } else {
#[cfg(not(feature = "no_object"))] #[cfg(not(feature = "no_object"))]
let redirected; let redirected;
@ -782,6 +785,15 @@ impl Engine {
return Ok(value.into_shared()); return Ok(value.into_shared());
} }
// Handle take()
#[cfg(not(feature = "no_shared"))]
if name == KEYWORD_TAKE && args_expr.len() == 1 {
let expr = args_expr.get(0).unwrap();
let value = self.eval_expr(scope, mods, state, lib, this_ptr, expr, level)?;
return Ok(value.clone_inner_data::<Dynamic>().unwrap());
}
// Handle call() - Redirect function call // Handle call() - Redirect function call
let redirected; let redirected;
let mut args_expr = args_expr.as_ref(); let mut args_expr = args_expr.as_ref();