cfapass.h
No OneTemporary

File Metadata

Created
Mon, Aug 24, 12:29 PM

cfapass.h

/* 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/.
*
* Author: pgess <v.melnychenko@xreate.org>
*
* cfapass.cpp
* Control Flow Graph building pass
*/
#ifndef CFGPASS_H
#define CFGPASS_H
#include "xreatemanager.h"
#include "transcendlayer.h"
#include "abstractpass.h"
namespace xreate{namespace cfa {
class CFAGraph;
/** \brief Control Flow Analysis Pass(%CFA)*/
class CFAPassBasic : public AbstractPass<void>{
public:
void process(ManagedFnPtr function) override;
void processFnCall(ManagedFnPtr function, PassContext context) override;
void processFnCallUncertain(ManagedFnPtr function, PassContext context) override;
void process(CodeScope* scope, PassContext context, const std::string& hintBlockDecl="") override;
void process(const Expression& expression, PassContext context, const std::string& varDecl="") override;
CFAPassBasic(PassManager* manager);
void finish() override;
void run() override;
const CFAGraph* getReport() const {return __context.graph; }
protected:
struct {
CFAGraph* graph;
} __context;
std::multimap<Operator, Expression> __signatures; //CFA data for particular operators
void initSignatures();
};
class CFAPassDependenciesDecorator: public CFAPassBasic{
typedef CFAPassBasic Parent;
public:
CFAPassDependenciesDecorator(PassManager* manager): CFAPassBasic(manager) {}
void process(const Expression& expression, PassContext context, const std::string& varDecl) override;
void processFnCall(ManagedFnPtr function, PassContext context) override;
void processFnCallUncertain(ManagedFnPtr function, PassContext context) override;
void process(CodeScope* scope, PassContext context, const std::string& hintBlockDecl) override;
};
class CFAPass: public CFAPassDependenciesDecorator{
public:
CFAPass(PassManager* manager): CFAPassDependenciesDecorator(manager) {}
};
}} //end of namespace xreate::cfa
#endif // CFGPASS_H

Event Timeline