borrow args

This commit is contained in:
Robin Appelman 2019-03-25 01:06:31 +01:00
commit 43f4228408

View file

@ -40,29 +40,31 @@ impl ExecuteData {
} }
} }
pub fn args(&self) -> ArgIterator { pub fn args<'a>(&'a self) -> ArgIterator<'a> {
ArgIterator { ArgIterator {
base: self.get_arg_base(), base: self.get_arg_base(),
count: self.num_args(), count: self.num_args(),
item: 0, item: 0,
lifetime: &()
} }
} }
} }
pub struct ArgIterator { pub struct ArgIterator<'a> {
base: *const ZVal, base: *const ZVal,
count: u32, count: u32,
item: u32, item: u32,
lifetime: &'a ()
} }
impl Iterator for ArgIterator { impl<'a> Iterator for ArgIterator<'a> {
type Item = ZVal; type Item = &'a ZVal;
fn next(&mut self) -> Option<Self::Item> { fn next(&mut self) -> Option<Self::Item> {
if self.item < self.count { if self.item < self.count {
let val = unsafe { &*(self.base.add(self.item as usize)) }; let val = unsafe { &*(self.base.add(self.item as usize)) };
self.item += 1; self.item += 1;
Some((*val).clone()) Some(val)
} else { } else {
None None
} }