Computer Laboratory

Detailed Description

A function-related transition.

Definition at line 290 of file Transition.h.

#include "Transition.h"

+ Inheritance diagram for tesla::FnTransition:
+ Collaboration diagram for tesla::FnTransition:

Public Member Functions

bool IsRealisable () const
 Can this transition be captured by real instrumentation code? More...
 
std::string ShortLabel () const
 A short, human-readable label. More...
 
std::string DotLabel () const
 A label that can go in a .dot file (can use newline, Greek HTML codes...). More...
 
const FunctionEventFnEvent () const
 
const ReferenceVector Arguments () const
 Arguments referenced by this transition. More...
 
bool IsStrict () const
 This transition can only occur as described in an automaton. More...
 
bool EquivalentExpression (const Transition *Other) const
 
virtual TransitionKind getKind () const
 
- Public Member Functions inherited from tesla::Transition
virtual ~Transition ()
 
const StateSource () const
 
const StateDestination () const
 
bool RequiresInit () const
 This transition triggers initialisation of its TESLA automata class. More...
 
bool RequiresCleanup () const
 This transition triggers cleanup of its TESLA automata class. More...
 
llvm::SmallVector< const
Argument *, 4 > 
NewArguments () const
 Arguments newly referenced by this transition (unknown to previous state). More...
 
int NewArgMask () const
 A bitmask representing the arguments newly referenced by this transition. More...
 
void ReferencesThusFar (llvm::OwningArrayPtr< const Argument * > &Args, ReferenceVector &Ref) const
 The references known at the point this transition occurs. More...
 
virtual std::string String () const
 
bool InScope () const
 

Static Public Member Functions

static bool classof (const Transition *T)
 
- Static Public Member Functions inherited from tesla::Transition
static void Create (State &From, State &To, TransitionVector &Transitions, bool Init=false, bool Cleanup=false)
 Create an unconditional transition. More...
 
static void Create (State &From, State &To, const FunctionEvent &Ev, TransitionVector &, bool Init, bool Cleanup, bool OutOfScope=false)
 Create a FunctionEvent transition. More...
 
static void Create (State &From, State &To, const FieldAssignment &A, TransitionVector &, bool Init, bool Cleanup, bool OutOfScope=false)
 Create a FieldAssignment transition. More...
 
static void Create (State &From, State &To, const NowEvent &, const AutomatonDescription &, TransitionVector &, bool Init, bool Cleanup)
 
static void CreateSubAutomaton (State &From, State &To, const Identifier &, TransitionVector &)
 
static void Copy (State &From, State &To, const Transition *Other, TransitionVector &, bool OutOfScope=false)
 Creates a transition between the specified states, with the same transition type as the copied transition. More...
 
static void GroupClasses (const TransitionVector &, TransitionSets &)
 Group transitions into equivalence classes. More...
 

Protected Member Functions

virtual bool EquivalentTo (const Transition &T) const
 Does this transition consume and produce the same symbols as another? More...
 
- Protected Member Functions inherited from tesla::Transition
 Transition (const State &From, const State &To, bool Init, bool Cleanup, bool OutOfScope)
 

Friends

class Transition
 

Additional Inherited Members

- Public Types inherited from tesla::Transition
enum  TransitionKind {
  Null, Now, Fn, FieldAssign,
  SubAutomaton
}
 Information for LLVM's RTTI (isa<>, cast<>, etc.). More...
 
- Static Protected Member Functions inherited from tesla::Transition
static void Register (llvm::OwningPtr< Transition > &, State &From, State &To, TransitionVector &)
 
static void Append (const llvm::OwningPtr< Transition > &, TransitionSets &)
 
- Protected Attributes inherited from tesla::Transition
const StateFrom
 
const StateTo
 
bool Init
 This transition triggers initialisation. More...
 
bool Cleanup
 This transition triggers cleanup. More...
 
const bool OutOfScope
 

Member Function Documentation

const ReferenceVector tesla::FnTransition::Arguments ( ) const
virtual

Arguments referenced by this transition.

Implements tesla::Transition.

Definition at line 274 of file Transition.cpp.

274  {
275  const Argument* const *Args = Ev.argument().data();
276  size_t Len = Ev.argument_size();
277 
278  return ReferenceVector(Args, Len);
279 }
static bool tesla::FnTransition::classof ( const Transition T)
inlinestatic

Definition at line 307 of file Transition.h.

References tesla::Transition::Fn, and tesla::Transition::getKind().

307  {
308  return T->getKind() == Fn;
309  }

+ Here is the call graph for this function:

string tesla::FnTransition::DotLabel ( ) const
virtual

A label that can go in a .dot file (can use newline, Greek HTML codes...).

Implements tesla::Transition.

Definition at line 301 of file Transition.cpp.

References tesla::DotName().

301  {
302  std::stringstream ss;
303  ss << Ev.function().name() << "(";
304 
305  for (int i = 0; i < Ev.argument_size(); i++)
306  ss
307  << DotName(&Ev.argument(i))
308  << ((i < Ev.argument_size() - 1) ? "," : "");
309 
310  ss << ")";
311 
312  if (Ev.has_expectedreturnvalue()) {
313  assert(Ev.direction() == FunctionEvent::Exit);
314  ss << " == " << DotName(&Ev.expectedreturnvalue());
315  } else
316  ss << "\\n("
317  << FunctionEvent::Direction_Name(Ev.direction())
318  << ")"
319  ;
320 
321  return ss.str();
322 }

+ Here is the call graph for this function:

bool tesla::FnTransition::EquivalentExpression ( const Transition Other) const
inline

Definition at line 300 of file Transition.h.

300  {
301  auto *T = llvm::dyn_cast<FnTransition>(Other);
302  if (!T) return false;
303 
304  return T->Ev == Ev;
305  }
virtual bool tesla::FnTransition::EquivalentTo ( const Transition T) const
inlineprotectedvirtual

Does this transition consume and produce the same symbols as another?

Implements tesla::Transition.

Definition at line 314 of file Transition.h.

References tesla::Transition::Fn, and tesla::Transition::getKind().

314  {
315  return (T.getKind() == Fn) &&
316  (Ev == llvm::cast<FnTransition>(&T)->FnEvent());
317  }

+ Here is the call graph for this function:

const FunctionEvent& tesla::FnTransition::FnEvent ( ) const
inline

Definition at line 296 of file Transition.h.

Referenced by tesla::FnCallerInstrumenter::doInitialization(), and tesla::FnCalleeInstrumenter::runOnModule().

296 { return Ev; }

+ Here is the caller graph for this function:

virtual TransitionKind tesla::FnTransition::getKind ( ) const
inlinevirtual

Implements tesla::Transition.

Definition at line 311 of file Transition.h.

References tesla::Transition::Fn.

311 { return Fn; };
bool tesla::FnTransition::IsRealisable ( ) const
inlinevirtual

Can this transition be captured by real instrumentation code?

Implements tesla::Transition.

Definition at line 292 of file Transition.h.

292 { return true; }
bool tesla::FnTransition::IsStrict ( ) const
inlinevirtual

This transition can only occur as described in an automaton.

Reimplemented from tesla::Transition.

Definition at line 298 of file Transition.h.

References tesla::FunctionEvent::strict.

298 { return Ev.strict(); }
string tesla::FnTransition::ShortLabel ( ) const
virtual

A short, human-readable label.

Implements tesla::Transition.

Definition at line 281 of file Transition.cpp.

References tesla::ShortName().

281  {
282  std::stringstream ss;
283  ss << Ev.function().name() << "(";
284 
285  for (int i = 0; i < Ev.argument_size(); i++)
286  ss
287  << ShortName(&Ev.argument(i))
288  << ((i < Ev.argument_size() - 1) ? "," : "");
289 
290  ss << ")";
291 
292  if (Ev.has_expectedreturnvalue()) {
293  assert(Ev.direction() == FunctionEvent::Exit);
294  ss << " == " << ShortName(&Ev.expectedreturnvalue());
295  } else
296  ss << ": " << FunctionEvent::Direction_Name(Ev.direction());
297 
298  return ss.str();
299 }

+ Here is the call graph for this function:

Friends And Related Function Documentation

friend class Transition
friend

Definition at line 326 of file Transition.h.


The documentation for this class was generated from the following files: