refactor(ty): call
This commit is contained in:
@@ -191,7 +191,7 @@ impl Value {
|
|||||||
env.enter_args(std::mem::take(old_args));
|
env.enter_args(std::mem::take(old_args));
|
||||||
let mut args = args.into_iter().peekable();
|
let mut args = args.into_iter().peekable();
|
||||||
env.enter_arg(args.next().unwrap());
|
env.enter_arg(args.next().unwrap());
|
||||||
let (ret, cache) = env.with_cache(std::mem::take(cache), |env| {
|
let (mut ret, cache) = env.with_cache(std::mem::take(cache), |env| {
|
||||||
engine.eval_func_deps(idx, env)?;
|
engine.eval_func_deps(idx, env)?;
|
||||||
let mut ret = engine.call_func(idx, env)?;
|
let mut ret = engine.call_func(idx, env)?;
|
||||||
while args.peek().is_some() {
|
while args.peek().is_some() {
|
||||||
@@ -217,21 +217,20 @@ impl Value {
|
|||||||
}
|
}
|
||||||
ret.ok()
|
ret.ok()
|
||||||
});
|
});
|
||||||
let mut ret = ret?;
|
|
||||||
let args = env.pop_args(len);
|
let args = env.pop_args(len);
|
||||||
if let Value::Func(idx) = ret {
|
if let Ok(Value::Func(idx)) = ret {
|
||||||
ret = PartialFunc(self::PartialFunc::new(idx, args, cache).into());
|
ret = PartialFunc(self::PartialFunc::new(idx, args, cache).into()).ok();
|
||||||
} else if let Value::PartialFunc(func) = &mut ret {
|
} else if let Ok(Value::PartialFunc(func)) = &mut ret {
|
||||||
Rc::make_mut(func).args.extend(args);
|
Rc::make_mut(func).args.extend(args);
|
||||||
}
|
}
|
||||||
ret.ok()
|
ret
|
||||||
}
|
}
|
||||||
&mut Func(idx) => {
|
&mut Func(idx) => {
|
||||||
let len = args.len();
|
let len = args.len();
|
||||||
let mut args = args.into_iter().peekable();
|
let mut args = args.into_iter().peekable();
|
||||||
env.reserve_args(len);
|
env.reserve_args(len);
|
||||||
env.enter_arg(args.next().unwrap());
|
env.enter_arg(args.next().unwrap());
|
||||||
let (ret, cache) = env.with_new_cache(|env| {
|
let (mut ret, cache) = env.with_new_cache(|env| {
|
||||||
engine.eval_func_deps(idx, env)?;
|
engine.eval_func_deps(idx, env)?;
|
||||||
let mut ret = engine.call_func(idx, env)?;
|
let mut ret = engine.call_func(idx, env)?;
|
||||||
ret.force(engine, env)?;
|
ret.force(engine, env)?;
|
||||||
@@ -258,14 +257,13 @@ impl Value {
|
|||||||
}
|
}
|
||||||
ret.ok()
|
ret.ok()
|
||||||
});
|
});
|
||||||
let mut ret = ret?;
|
|
||||||
let args = env.pop_args(len);
|
let args = env.pop_args(len);
|
||||||
if let Value::Func(idx) = ret {
|
if let Ok(Value::Func(idx)) = ret {
|
||||||
ret = Value::PartialFunc(self::PartialFunc::new(idx, args, cache).into())
|
ret = Value::PartialFunc(self::PartialFunc::new(idx, args, cache).into()).ok()
|
||||||
} else if let Value::PartialFunc(func) = &mut ret {
|
} else if let Ok(Value::PartialFunc(func)) = &mut ret {
|
||||||
Rc::make_mut(func).args.extend(args);
|
Rc::make_mut(func).args.extend(args);
|
||||||
}
|
}
|
||||||
ret.ok()
|
ret
|
||||||
}
|
}
|
||||||
Catchable(_) => return Ok(()),
|
Catchable(_) => return Ok(()),
|
||||||
other => todo!("{}", other.typename()),
|
other => todo!("{}", other.typename()),
|
||||||
|
|||||||
Reference in New Issue
Block a user