37 #include <llvm/ADT/APInt.h>
38 #include <llvm/ADT/OwningPtr.h>
71 typedef std::vector<const clang::ValueDecl*>
RefVector;
90 bool Parse(llvm::OwningPtr<AutomatonDescription>& Descrip,
91 llvm::OwningPtr<Usage>&
Usage);
98 FunctionEvent::CallContext FnInstrContext;
112 clang::Expr* Begin = NULL, clang::Expr* End = NULL,
113 clang::Stmt *Root = NULL, Flags InitialFlags = Flags())
114 : Ctx(Ctx), ID(ID), TeslaContext(C), Beginning(Begin), End(End),
115 Root(Root), RootFlags(InitialFlags)
119 bool Parse(Location*, clang::Expr*, clang::Expr*, clang::Expr*);
122 bool Parse(Expression*,
const clang::CompoundStmt*, Flags);
123 bool Parse(Expression*,
const clang::Expr*, Flags);
124 bool Parse(Expression*,
const clang::BinaryOperator*, Flags);
125 bool Parse(Expression*,
const clang::CallExpr*, Flags);
126 bool Parse(Expression*,
const clang::DeclRefExpr*, Flags);
127 bool Parse(Expression*,
const clang::UnaryOperator*, Flags);
129 bool Parse(FunctionRef*,
const clang::FunctionDecl*, Flags);
130 bool Parse(Argument*,
const clang::Expr*, Flags);
131 bool Parse(Argument*,
const clang::ValueDecl*,
bool AllowAny, Flags);
133 bool ParseStructField(StructField*,
const clang::MemberExpr*, Flags);
134 bool ParseSubAutomaton(Expression*,
const clang::CallExpr*, Flags);
135 bool ParsePredicate(Expression*,
const clang::CallExpr*, Flags);
139 typedef bool (Parser::*CallParser)(Expression*,
const clang::CallExpr*,
142 bool ParseFunctionCall(Expression*,
const clang::CallExpr*, Flags);
143 bool ParseFunctionReturn(Expression*,
const clang::CallExpr*, Flags);
144 bool ParseCallee(Expression*,
const clang::CallExpr*, Flags);
145 bool ParseCaller(Expression*,
const clang::CallExpr*, Flags);
146 bool ParseStrictMode(Expression*,
const clang::CallExpr*, Flags);
147 bool ParseConditional(Expression*,
const clang::CallExpr*, Flags);
148 bool ParseOptional(Expression*,
const clang::CallExpr*, Flags);
149 bool ParseSequence(Expression*,
const clang::CallExpr*, Flags);
152 bool ParseFunctionPredicate(FunctionEvent*,
const clang::CallExpr*,
153 bool ParseRetVal, Flags);
156 bool ParseFunctionCall(Expression*,
const clang::BinaryOperator*, Flags);
159 bool ParseFieldAssign(Expression*,
const clang::BinaryOperator*, Flags);
163 bool CheckIgnore(
const clang::Expr*);
166 bool CheckAssignmentKind(
const clang::ValueDecl*,
const clang::Expr*);
169 std::string ParseStringLiteral(
const clang::Expr*);
172 llvm::APInt ParseIntegerLiteral(
const clang::Expr*);
176 size_t ReferenceIndex(
const clang::ValueDecl*);
180 void ReportError(llvm::StringRef Message,
const clang::Decl*);
181 void ReportError(llvm::StringRef Message,
const clang::Stmt*);
182 void ReportError(llvm::StringRef Message,
const clang::SourceLocation&,
183 const clang::SourceRange&);
187 clang::ASTContext& Ctx;
191 const clang::Expr *Beginning;
192 const clang::Expr *End;
193 const clang::Stmt *Root;
194 const Flags RootFlags;
196 std::map<const clang::ValueDecl*, const clang::Expr*> FieldAssignments;