CMS 3D CMS Logo

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