Aseba  1.5.5
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
Aseba::BinaryArithmeticNode Struct Reference

Node for binary arithmetic. More...

#include <tree.h>

Inheritance diagram for Aseba::BinaryArithmeticNode:
Aseba::Node

Public Member Functions

 BinaryArithmeticNode (const SourcePos &sourcePos)
 
 BinaryArithmeticNode (const SourcePos &sourcePos, AsebaBinaryOperator op, Node *left, Node *right)
 Constructor.
 
virtual BinaryArithmeticNodeshallowCopy ()
 Return a shallow copy of the object (children point to the same objects)
 
void deMorganNotRemoval ()
 Recursively apply de Morgan law as long as nodes are logic operations, and then invert comparisons.
 
virtual ReturnType typeCheck (Compiler *compiler)
 Typecheck this node, throw an exception if there is any type violation.
 
virtual Nodeoptimize (std::wostream *dump)
 Optimize this node, return the optimized node.
 
virtual unsigned getStackDepth () const
 Return the stack depth requirement for this node and its children.
 
virtual void emit (PreLinkBytecode &bytecodes) const
 Generate bytecode.
 
virtual std::wstring toWString () const
 Return a string representation of this node.
 
virtual std::wstring toNodeName () const
 Return a string representation of the name of this node.
 
- Public Member Functions inherited from Aseba::Node
 Node (const SourcePos &sourcePos)
 Constructor.
 
virtual ~Node ()
 Destructor, delete all children.
 
virtual NodedeepCopy ()
 Return a deep copy of the object (children are also copied)
 
virtual void checkVectorSize () const
 Check the consistency in vectors' size.
 
virtual NodeexpandAbstractNodes (std::wostream *dump)
 Second pass to expand "abstract" nodes into more concrete ones. More...
 
virtual NodeexpandVectorialNodes (std::wostream *dump, Compiler *compiler=0, unsigned int index=0)
 Third pass to expand vectorial operations into mutliple scalar ones. More...
 
virtual void dump (std::wostream &dest, unsigned &indent) const
 Dump this node and the rest of the tree.
 
std::wstring typeName (const Node::ReturnType &type) const
 Return the name of a type.
 
void expectType (const Node::ReturnType &expected, const Node::ReturnType &type) const
 Check for a specific type, throw an exception otherwise.
 
virtual unsigned getVectorAddr () const
 return the address of the left-most operand, or E_NOVAL if none
 
virtual unsigned getVectorSize () const
 return the children's size, check for equal size, or E_NOVAL if no child
 

Static Public Member Functions

static BinaryArithmeticNodefromComparison (const SourcePos &sourcePos, Compiler::Token::Type op, Node *left, Node *right)
 Create a binary arithmetic node for comparaison operation op.
 
static BinaryArithmeticNodefromShiftExpression (const SourcePos &sourcePos, Compiler::Token::Type op, Node *left, Node *right)
 Create a binary arithmetic node for shift operation op.
 
static BinaryArithmeticNodefromAddExpression (const SourcePos &sourcePos, Compiler::Token::Type op, Node *left, Node *right)
 Create a binary arithmetic node for add/sub operation op.
 
static BinaryArithmeticNodefromMultExpression (const SourcePos &sourcePos, Compiler::Token::Type op, Node *left, Node *right)
 Create a binary arithmetic node for mult/div/mod operation op.
 
static BinaryArithmeticNodefromBinaryExpression (const SourcePos &sourcePos, Compiler::Token::Type op, Node *left, Node *right)
 Create a binary arithmetic node for or/xor/and operation op.
 

Public Attributes

AsebaBinaryOperator op
 operator
 
- Public Attributes inherited from Aseba::Node
NodesVector children
 children of this node
 
SourcePos sourcePos
 position is source
 

Additional Inherited Members

- Public Types inherited from Aseba::Node
enum  ReturnType { TYPE_UNIT = 0, TYPE_BOOL, TYPE_INT }
 A type a node can return.
 
enum  MemoryErrorCode { E_NOVAL = UINT_MAX }
 
typedef std::vector< Node * > NodesVector
 Vector for children of a node.
 

Detailed Description

Node for binary arithmetic.

children[0] is left expression children[1] is right expression


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