function do_foreach($array, $value, $key, Haanga_AST $body) { foreach (array('array', 'value', 'key') as $var) { if (${$var} === NULL) { continue; } $var1 =& ${$var}; if (is_string($var1)) { $var1 = hvar($var1); } if (is_object($var1)) { $var1 = $var1->getArray(); } if (empty($var1['var'])) { throw new Exception("Can't iterate, apparently {$var} isn't a variable"); } $var1 = $var1['var']; } $def = array('op' => 'foreach', 'array' => $array, 'value' => $value); if ($key) { $def['key'] = $key; } $this->stack[] = $def; $this->stack = array_merge($this->stack, $body->getArray(TRUE)); $this->stack[] = array('op' => 'end_foreach'); return $this; }