PEBL 2.2
Psychology Experiment Building Language - Cross-platform psychological experiment development system
OpNode Class Reference

#include <PNode.h>

Inheritance diagram for OpNode:
PNode

Public Member Functions

 OpNode (int type, PNode *left, PNode *right, const std::string &filename, int linenumber)
 
 OpNode (const OpNode &)
 
virtual ~OpNode ()
 
OpNode operator= (const OpNode &op)
 
int GetOp () const
 
std::string GetOpName () const
 
PNodeGetLeft () const
 
PNodeGetRight () const
 
virtual void DestroyChildren ()
 
virtual void DestroyFunctionTree ()
 
- Public Member Functions inherited from PNode
 PNode ()
 The Standard constructor.
 
 PNode (const PNode &pn)
 
 PNode (const std::string &filename, int linenumber)
 
 PNode (PNODE_TYPE type, const std::string &filename, int linenumber)
 
virtual ~PNode ()
 The Standard destructor.
 
PNODE_TYPE GetType () const
 Access mType data.
 
void SetFileInfo (const std::string &filename, int linenumber)
 
std::string GetFilename () const
 
int GetLineNumber () const
 
void SetFunctionName (const std::string &funcname)
 
std::string GetFunctionName () const
 

Protected Member Functions

virtual std::ostream & SendToStream (std::ostream &out) const
 

Protected Attributes

int mOp
 
PNodemLeft
 A link to the left-child node.
 
PNodemRight
 A link to the right-child node.
 
- Protected Attributes inherited from PNode
PNODE_TYPE mType
 
int mTrace
 Whether to produce a trace.
 
std::string mSourceFile
 Source file of origin.
 
int mLineNumber
 Closest Line number of origin.
 
std::string mFunctName
 

Detailed Description

Definition at line 102 of file PNode.h.

Constructor & Destructor Documentation

◆ OpNode() [1/2]

OpNode::OpNode ( int  type,
PNode left,
PNode right,
const std::string &  filename,
int  linenumber 
)

Definition at line 139 of file PNode.cpp.

139 :
140 PNode(PEBL_OP_NODE,filename,linenumber),
141 mOp(op),
142 mLeft(left),
143 mRight(right)
144{
145
146#ifdef VERBOSE_PNODE_CONSTRUCTION_MESSAGES
147 cerr << "\tConstructing PNode of type [" << op << "]:[" << GetOpName() <<"]\n";
148#endif
149
150
151}
@ PEBL_OP_NODE
Definition PNode.h:35
PNode * mRight
A link to the right-child node.
Definition PNode.h:131
std::string GetOpName() const
Definition PNode.cpp:245
int mOp
Definition PNode.h:125
PNode * mLeft
A link to the left-child node.
Definition PNode.h:128
PNode()
The Standard constructor.
Definition PNode.cpp:53

References GetOpName().

◆ OpNode() [2/2]

OpNode::OpNode ( const OpNode op)

Definition at line 153 of file PNode.cpp.

153 :
154 PNode(op),
155 mOp(0),
156 mLeft(NULL),
157 mRight(NULL)
158{
159 mOp = op.GetOp();
160 mLeft = op.GetLeft();
161 mRight = op.GetRight();
162}
#define NULL
Definition BinReloc.cpp:317
PNode * GetRight() const
Definition PNode.h:115
int GetOp() const
Definition PNode.h:111
PNode * GetLeft() const
Definition PNode.h:114

References GetLeft(), GetOp(), GetRight(), mLeft, mOp, and mRight.

◆ ~OpNode()

OpNode::~OpNode ( )
virtual

Definition at line 237 of file PNode.cpp.

238{
239#ifdef VERBOSE_PNODE_CONSTRUCTION_MESSAGES
240 cout <<" deleting OpNode: " << *this << endl;
241#endif
242}

Member Function Documentation

◆ DestroyChildren()

void OpNode::DestroyChildren ( )
virtual

Reimplemented from PNode.

Definition at line 174 of file PNode.cpp.

175{
176 //cerr << "destroying children\n";
177 if(mLeft)
178 {
180 delete mLeft;
181 mLeft=NULL;
182 }
183 if(mRight)
184 {
186 delete mRight;
187 mRight=NULL;
188 }
189}
virtual void DestroyChildren()
Definition PNode.cpp:112

References PNode::DestroyChildren(), mLeft, mRight, and NULL.

◆ DestroyFunctionTree()

void OpNode::DestroyFunctionTree ( )
virtual

Definition at line 197 of file PNode.cpp.

198{
199
200 if(GetOp() == PEBL_FUNCTION)
201 {
202 //This is a function node, which means we should remove
203 //the datanode on the left. The right node is a lambda function, which
204 //gets taken over by the function map.
205 if(mLeft)
206 {
207 delete mLeft;
208 mLeft = NULL;
209 }
210 }
211 else if(GetOp() == PEBL_FUNCTIONS)
212 {
213 //This is a PEBL_FUNCTIONS node; it contains links to other PEBL_FUNCTIONS
214 //as well as PEBL_FUNCTION nodes. Destroy them as well.
215
216 if(mLeft)
217 {
218 ((OpNode*)mLeft)->DestroyFunctionTree();
219 delete mLeft;
220 mLeft = NULL;
221 }
222 if(mRight)
223 {
224 ((OpNode*)mRight)->DestroyFunctionTree();
225 delete mRight;
226 mRight = NULL;
227 }
228
229 }
230
231}

References GetOp(), mLeft, mRight, and NULL.

◆ GetLeft()

PNode * OpNode::GetLeft ( ) const
inline

◆ GetOp()

int OpNode::GetOp ( ) const
inline

◆ GetOpName()

std::string OpNode::GetOpName ( ) const

Definition at line 245 of file PNode.cpp.

246{
247 switch(GetOp())
248 {
249
250 case PEBL_ADD: return "PEBL_ADD";
251 case PEBL_AND: return "PEBL_AND";
252 case PEBL_ARGLIST: return "PEBL_ARGLIST";
253 case PEBL_ASSIGN: return "PEBL_ASSIGN";
254 case PEBL_BREAK: return "PEBL_BREAK";
255 case PEBL_COMMA: return "PEBL_COMMA";
256 case PEBL_DIVIDE: return "PEBL_DIVIDE";
257 case PEBL_DEFINE: return "PEBL_DEFINE";
258 case PEBL_DOT: return "PEBL_DOT";
259 case PEBL_ELSE: return "PEBL_ELSE";
260 case PEBL_END: return "PEBL_END";
261 case PEBL_EQ: return "PEBL_EQ";
262 case PEBL_FUNCTION: return "PEBL_FUNCTION";
263 case PEBL_FUNCTIONS: return "PEBL_FUNCTIONS";
264 case PEBL_GE: return "PEBL_GE";
265 case PEBL_GT: return "PEBL_GT";
266 case PEBL_IF: return "PEBL_IF";
267 case PEBL_IFELSE: return "PEBL_IFELSE";
268 case PEBL_LAMBDAFUNCTION: return "PEBL_LAMBDAFUNCTION";
269 case PEBL_LBRACE: return "PEBL_LBRACE";
270 case PEBL_LBRACKET: return "PEBL_LBRACKET";
271 case PEBL_LIBRARYFUNCTION: return "PEBL_LIBRARYFUNCTION";
272 case PEBL_LISTHEAD: return "PEBL_LISTHEAD";
273 case PEBL_LISTITEM: return "PEBL_LISTITEM";
274 case PEBL_LE: return "PEBL_LE";
275 case PEBL_LOOP: return "PEBL_LOOP";
276 case PEBL_LPAREN: return "PEBL_LPAREN";
277 case PEBL_LT: return "PEBL_LT";
278 case PEBL_MULTIPLY: return "PEBL_MULTIPLY";
279 case PEBL_NE: return "PEBL_NE";
280 case PEBL_NEWLINE: return "PEBL_NEWLINE";
281 case PEBL_NOT: return "PEBL_NOT";
282 case PEBL_OR: return "PEBL_OR";
283 case PEBL_POWER: return "PEBL_POWER";
284 case PEBL_RBRACE: return "PEBL_RBRACE";
285 case PEBL_RBRACKET: return "PEBL_RBRACKET";
286 case PEBL_RETURN: return "PEBL_RETURN";
287 case PEBL_RPAREN: return "PEBL_RPAREN";
288 case PEBL_SEMI: return "PEBL_SEMI";
289 case PEBL_START: return "PEBL_START";
290 case PEBL_STATEMENTS: return "PEBL_STATEMENTS";
291 case PEBL_SUBTRACT: return "PEBL_SUBTRACT";
292 case PEBL_UMINUS: return "PEBL_UMINUS";
293 case PEBL_VARLIST: return "PEBL_VARLIST";
294 case PEBL_VARIABLEDATUM: return "PEBL_VARIABLEDATUM";
295 case PEBL_WHILE: return "PEBL_WHILE";
296
297 case PEBL_FLOAT: return "PEBL_FLOAT";
298 case PEBL_INTEGER: return "PEBL_INTEGER";
299 case PEBL_STRING: return "PEBL_STRING";
300 case PEBL_SYMBOL: return "PEBL_SYMBOL";
301 case PEBL_FUNCTIONNAME: return "PEBL_FUNCTIONNAME";
302
303
304
305 case PEBL_AND_TAIL: return "PEBL_AND_TAIL";
306 case PEBL_ADD_TAIL: return "PEBL_ADD_TAIL";
307 case PEBL_ASSIGN_TAIL: return "PEBL_ASSIGN_TAIL";
308 case PEBL_BREAK_TAIL : return "PEBL_BREAK_TAIL";
309 case PEBL_DIVIDE_TAIL : return "PEBL_DIVIDE_TAIL";
310 case PEBL_EQ_TAIL: return "PEBL_EQ_TAIL";
311 case PEBL_GE_TAIL : return "PEBL_GE_TAIL";
312 case PEBL_GT_TAIL : return "PEBL_GT_TAIL";
313 case PEBL_IF_TAIL : return "PEBL_IF_TAIL";
314 case PEBL_IF_TAIL2 : return "PEBL_IF_TAIL2";
315 case PEBL_ELSE_TAIL : return "PEBL_ELSE_TAIL";
316 case PEBL_LE_TAIL : return "PEBL_LE_TAIL";
317 case PEBL_LISTITEM_TAIL : return "PEBL_LISTITEM_TAIL";
318 case PEBL_LOOP_TAIL1 : return "PEBL_LOOP_TAIL1";
319 case PEBL_LOOP_TAIL2: return "PEBL_LOOP_TAIL2";
320 case PEBL_LT_TAIL: return "PEBL_LT_TAIL";
321 case PEBL_MULTIPLY_TAIL: return "PEBL_MULTIPLY_TAIL";
322 case PEBL_NE_TAIL: return "PEBL_NE_TAIL";
323 case PEBL_NOT_TAIL: return "PEBL_NOT_TAIL";
324 case PEBL_OR_TAIL: return "PEBL_OR_TAIL";
325 case PEBL_POWER_TAIL: return "PEBL_POWER_TAIL";
326 case PEBL_RETURN_TAIL: return "PEBL_RETURN_TAIL";
327 case PEBL_SUBTRACT_TAIL: return "PEBL_SUBTRACT_TAIL";
328 case PEBL_STATEMENTS_TAIL1: return "PEBL_STATEMENTS_TAIL1";
329 case PEBL_STATEMENTS_TAIL2: return "PEBL_STATEMENTS_TAIL2";
330 case PEBL_WHILE_TAIL: return "PEBL_WHILE_TAIL";
331 case PEBL_WHILE_TAIL2: return "PEBL_WHILE_TAIL2";
332 case PEBL_FUNCTION_TAIL1: return "PEBL_FUNCTION_TAIL1";
333 case PEBL_FUNCTION_TAIL2: return "PEBL_FUNCTION_TAIL2";
334 case PEBL_FUNCTION_TAIL_LIBFUNCTION: return "PEBL_FUNCTION_TAIL_LIBFUNCTION";
335
336
337 default: return "UNKNOWN PEBL OPERATION";
338
339 }
340}

References GetOp().

Referenced by Evaluator::Evaluate(), Evaluator::Evaluate1(), OpNode(), and SendToStream().

◆ GetRight()

PNode * OpNode::GetRight ( ) const
inline

◆ operator=()

OpNode OpNode::operator= ( const OpNode op)

Definition at line 164 of file PNode.cpp.

165{
166
167 mOp = op.GetOp();
168 mLeft = op.GetLeft();
169 mRight = op.GetRight();
170 return *this;
171}

References GetLeft(), GetOp(), GetRight(), mLeft, mOp, and mRight.

◆ SendToStream()

ostream & OpNode::SendToStream ( std::ostream &  out) const
protectedvirtual

Reimplemented from PNode.

Definition at line 346 of file PNode.cpp.

347{
348
349 out << "<OpNode of Type: " << GetOpName() << ">" <<flush;
350 return out;
351
352}

References GetOpName().

Member Data Documentation

◆ mLeft

PNode* OpNode::mLeft
protected

A link to the left-child node.

Definition at line 128 of file PNode.h.

Referenced by DestroyChildren(), DestroyFunctionTree(), GetLeft(), operator=(), and OpNode().

◆ mOp

int OpNode::mOp
protected

Definition at line 125 of file PNode.h.

Referenced by GetOp(), operator=(), and OpNode().

◆ mRight

PNode* OpNode::mRight
protected

A link to the right-child node.

Definition at line 131 of file PNode.h.

Referenced by DestroyChildren(), DestroyFunctionTree(), GetRight(), operator=(), and OpNode().


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