# File kwartz.rb, line 1206
        def exec_expr(expr_node, str, level)
            token = expr_node.token
            left  = expr_node.left
            right = expr_node.right
            cond  = expr_node.condition
            #
            str << '  ' * level
            case token
            when :string
                str << left.inspect << "\n"
            when :variable, :number
                str << left << "\n"
            when '[:]', '.'
                str << token << "\n"
                exec(left, str, level+1)
                str << '  ' * (level+1) << right << "\n"
            when :true, :false, :null
                str << token.id2name << "\n"
            when :function
                str << left << "()\n"
                exec(right, str, level+1) if right
            else
                str << (token.is_a?(Symbol) ? token.inspect : token)
                str << "\n"
                Kwartz::assert() unless !cond  || cond.is_a?(ExprNode)
                Kwartz::assert() unless !left  || left.is_a?(ExprNode)
                Kwartz::assert() unless !right || right.is_a?(ExprNode)
                exec(cond,  str, level+1) if cond
                exec(left,  str, level+1) if left
                exec(right, str, level+1) if right
            end
            return str
        end