Haanga_Compiler::check_expr PHP Method

check_expr() protected method

Check the current expr {{{
protected check_expr ( &$expr )
    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']);
                        }
                    }
                }
            }
        }
    }