#pragma once

#include <cmath>

#include "nasal_ast.h"
#include "ast_visitor.h"

namespace nasal {

// experimental optimizer for constant calculation
class optimizer: public ast_visitor {
private:
    void const_string(binary_operator*, string_literal*, string_literal*);
    void const_number(binary_operator*, number_literal*, number_literal*);
    void const_number(unary_operator*, number_literal*);

public:
    bool visit_binary_operator(binary_operator*) override;
    bool visit_unary_operator(unary_operator*) override;

public:
    void do_optimization(code_block*);
};

}