/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 * 
 * File:   cfatemporalseqpass.h
 * Author: pgess
 *
 * Created on February 4, 2019, 4:43 PM
 */

/**
 *  \file cfatemporalseqpass.h
 *  \brief Code blocks execution order analysis
 */

#ifndef CFATEMPORALSEQPASS_H
#define CFATEMPORALSEQPASS_H

#include "xreatemanager.h"
#include "abstractpass.h"

namespace xreate{namespace cfa {

class TemporalSeqGraph;

/** \brief Code blocks execution order analysis. The results are stored in the \ref xreate::cfa::TemporalSeqGraph graph  */
class CFATemporalSeqPass: public AbstractPass<void>{
  typedef AbstractPass<void> Parent;
  
public:
  CFATemporalSeqPass(PassManager* manager);
  void processFnCall(ManagedFnPtr functionCallee, PassContext context) override;
  void processFnCallUncertain(const std::string& calleeName, const std::list<ManagedFnPtr>& candidates, PassContext context) override;
  void process(const Expression& expression, PassContext context, const std::string& varDecl="") override;
  void process(ManagedFnPtr function) override;
  
  const TemporalSeqGraph* getReport() const {return __graph; }
  void finish() override;
  
private:
  TemporalSeqGraph* __graph;
};

}} //end of namespace xreate::cfa

#endif /* CFATEMPORALSEQPASS_H */

