// Data Flow Graph determination pass

#ifndef DFGPASS_H
#define DFGPASS_H

#include "abstractpass.h"
#include "clasplayer.h"

namespace xreate {

class DFGPass: public AbstractPass {
public:
    void process(const Expression& expression, PassContext context, const std::string& varDecl="");
    SymbolPacked processExpression(const Expression& expression, PassContext context, const std::string& decl="");

    DFGPass(PassManager* manager);
    unsigned int hash(const CodeScope* scope);

    void init();
    void run();
    void finish();
private:
    struct
    {
        DFGraph graph;
    } __context;

    std::map<Operator, Expression> __schemes;
};
};

#endif