protected function check_expr(&$expr)
{
if (Haanga_AST::is_expr($expr)) {
if ($expr['op_expr'] == 'in') {
for ($id = 0; $id < 2; $id++) {
if ($this->is_var_filter($expr[$id])) {
$expr[$id] = $this->get_filtered_var($expr[$id]['var_filter'], $var);
}
}
if (Haanga_AST::is_str($expr[1])) {
$expr = hexpr(hexec('strpos', $expr[1], $expr[0]), '!==', FALSE);
} else {
$expr = hexpr(hexpr_cond(hexec('is_array', $expr[1]), hexec('array_search', $expr[0], $expr[1]), hexec('strpos', $expr[1], $expr[0])), '!==', FALSE);
}
}
if (is_object($expr)) {
$expr = $expr->getArray();
}
$this->check_expr($expr[0]);
$this->check_expr($expr[1]);
} else {
if (is_array($expr)) {
if ($this->is_var_filter($expr)) {
$expr = $this->get_filtered_var($expr['var_filter'], $var);
} else {
if (isset($expr['args'])) {
/* check every arguments */
foreach ($expr['args'] as &$v) {
$this->check_expr($v);
}
unset($v);
} else {
if (isset($expr['expr_cond'])) {
/* Check expr conditions */
$this->check_expr($expr['expr_cond']);
$this->check_expr($expr['true']);
$this->check_expr($expr['false']);
}
}
}
}
}
}