CMS 3D CMS Logo

ExpressionVarSetter.cc
Go to the documentation of this file.
5 #include <string>
6 using namespace reco::parser;
7 using namespace std;
8 
9 void ExpressionVarSetter::operator()(const char *begin, const char *end) const {
10  //std::cerr << "ExpressionVarSetter: Pushed [" << std::string(begin,end) << "]" << std::endl;
11  if (!methStack_.empty())
12  push(begin, end);
13  else if (!lazyMethStack_.empty())
14  lazyPush(begin, end);
15  else
16  throw Exception(begin) << " Expression didn't parse neither hastily nor lazyly. This must not happen.\n";
17 }
18 
19 void ExpressionVarSetter::push(const char *begin, const char *end) const {
20  edm::TypeWithDict type = typeStack_.back();
22  if (retType == method::invalid) {
23  throw Exception(begin) << "member \"" << methStack_.back().methodName() << "\" has an invalid return type: \""
24  << methStack_.back().returnTypeName() << "\"";
25  }
26  if (!ExpressionVar::isValidReturnType(retType)) {
27  throw Exception(begin) << "member \"" << methStack_.back().methodName() << "\" return type is \""
28  << methStack_.back().returnTypeName() << "\" which is not convertible to double.";
29  }
30 
31  exprStack_.push_back(std::shared_ptr<ExpressionBase>(new ExpressionVar(methStack_, retType)));
32  methStack_.clear();
33  typeStack_.resize(1);
34 }
35 
36 void ExpressionVarSetter::lazyPush(const char *begin, const char *end) const {
37  exprStack_.push_back(std::shared_ptr<ExpressionBase>(new ExpressionLazyVar(lazyMethStack_)));
38  lazyMethStack_.clear();
39  typeStack_.resize(1);
40 }
reco::parser::ExpressionVarSetter::push
void push(const char *, const char *) const
Definition: ExpressionVarSetter.cc:19
end
#define end
Definition: vmac.h:39
Exception.h
ExpressionVarSetter.h
reco::typeCode
TypeCode typeCode(const edm::TypeWithDict &t)
Definition: returnType.cc:39
edm::TypeWithDict
Definition: TypeWithDict.h:38
reco::parser::ExpressionVar
Evaluate an object's method or datamember (or chain of them) to get a number.
Definition: ExpressionVar.h:23
reco::method::TypeCode
TypeCode
Definition: TypeCode.h:13
returnType.h
reco::parser
Definition: cutParser.h:9
type
type
Definition: HCALResponse.h:21
reco::parser::ExpressionLazyVar
Definition: ExpressionVar.h:58
std
Definition: JetResolutionObject.h:76
reco::method::invalid
Definition: TypeCode.h:26
ExpressionVar.h
Exception
Definition: hltDiff.cc:246
reco::parser::ExpressionVarSetter::operator()
void operator()(const char *, const char *) const
Definition: ExpressionVarSetter.cc:9
reco::parser::ExpressionVarSetter::lazyPush
void lazyPush(const char *, const char *) const
Definition: ExpressionVarSetter.cc:36
reco::parser::ExpressionVar::isValidReturnType
static bool isValidReturnType(method::TypeCode)
Definition: ExpressionVar.cc:78
begin
#define begin
Definition: vmac.h:32