1 #ifndef REACHING_DEFINITION_H
2 #define REACHING_DEFINITION_H
7 #include "BitVectorRepr.h"
8 #include "AnalysisInterface.h"
9 #include "StmtInfoCollect.h"
10 #include "AstInterface.h"
15 :
private BitVectorReprBase<std::string, std::pair<AstNodePtr, AstNodePtr> >
20 void collect_refs ( AstInterface& fa,
const AstNodePtr& h,
21 FunctionSideEffectInterface* a=0,
22 AstInterface::AstNodeList*
in = 0);
23 void add_ref(
const std::string&
name,
const AstNodePtr& scope,
const std::pair<AstNodePtr,AstNodePtr>& def);
25 { add_data(
"unknown", def); }
26 void finalize() { BitVectorReprBase<std::string, std::pair<AstNodePtr, AstNodePtr> >
::finalize(); }
28 {
return BitVectorReprBase<std::string, std::pair<AstNodePtr, AstNodePtr> >
::begin();}
30 {
return BitVectorReprBase<std::string, std::pair<AstNodePtr, AstNodePtr> >
::end();}
32 {
return BitVectorReprBase<std::string, std::pair<AstNodePtr, AstNodePtr> >::get_data(p); }
39 :
private BitVectorReprGenerator<std::string, std::pair<AstNodePtr,AstNodePtr> >
44 : BitVectorReprGenerator<std::string, std::pair<AstNodePtr,AstNodePtr> >(b), scopemap(b.scopemap) {}
46 const std::pair<AstNodePtr,AstNodePtr>& def)
const
47 { add_member( gen,
"unknown", def); }
48 void add_def(
ReachingDefinitions& repr,
const std::string& varname,
const AstNodePtr& scope,
49 const std::pair<AstNodePtr,AstNodePtr>& def)
const;
53 {
return get_data_set(
"unknown" ); }
55 {
return BitVectorReprGenerator<std::string, std::pair<AstNodePtr,AstNodePtr> >::get_empty_set(); }
56 ReachingDefinitions get_def_set(
const std::string& varname,
const AstNodePtr& scope)
const;
59 CollectObject< std::pair<AstNodePtr,AstNodePtr> >& collect)
const
60 { BitVectorReprGenerator<std::string, std::pair<AstNodePtr,AstNodePtr> >::collect_member(repr, collect); }
64 (BitVectorReprGenerator<std::string, std::pair<AstNodePtr,AstNodePtr> >::get_base()); }
101 FunctionSideEffectInterface*
a;
102 AstInterface::AstNodeList
pars;
105 {
return g->get_empty_set(); }
121 void operator() ( AstInterface& fa,
const AstNodePtr& h,
122 FunctionSideEffectInterface* anal = 0);
124 CollectObject< std::pair<AstNodePtr, AstNodePtr> >& collect);