#ifndef NIX_IRC_EVALUATOR_H
#define NIX_IRC_EVALUATOR_H

#include "types.h"
#include <memory>
#include <vector>

namespace nix {
class EvalState;
class Value;
class PosIdx;
}

namespace nix_irc {

class IRValue;
class IREnvironment;

class Evaluator {
public:
    explicit Evaluator(nix::EvalState& state);
    ~Evaluator();

    void eval_to_nix(const std::shared_ptr<Node>& ir_node,
                     nix::Value& result,
                     IREnvironment* env = nullptr);

private:
    struct Impl;
    std::unique_ptr<Impl> pImpl;
};

}

#endif
