|
Aseba
1.5.5
|
Node for binary arithmetic. More...
#include <tree.h>
Public Member Functions | |
| BinaryArithmeticNode (const SourcePos &sourcePos) | |
| BinaryArithmeticNode (const SourcePos &sourcePos, AsebaBinaryOperator op, Node *left, Node *right) | |
| Constructor. | |
| virtual BinaryArithmeticNode * | shallowCopy () |
| 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 Node * | optimize (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 Node * | deepCopy () |
| Return a deep copy of the object (children are also copied) | |
| virtual void | checkVectorSize () const |
| Check the consistency in vectors' size. | |
| virtual Node * | expandAbstractNodes (std::wostream *dump) |
| Second pass to expand "abstract" nodes into more concrete ones. More... | |
| virtual Node * | expandVectorialNodes (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 BinaryArithmeticNode * | fromComparison (const SourcePos &sourcePos, Compiler::Token::Type op, Node *left, Node *right) |
| Create a binary arithmetic node for comparaison operation op. | |
| static BinaryArithmeticNode * | fromShiftExpression (const SourcePos &sourcePos, Compiler::Token::Type op, Node *left, Node *right) |
| Create a binary arithmetic node for shift operation op. | |
| static BinaryArithmeticNode * | fromAddExpression (const SourcePos &sourcePos, Compiler::Token::Type op, Node *left, Node *right) |
| Create a binary arithmetic node for add/sub operation op. | |
| static BinaryArithmeticNode * | fromMultExpression (const SourcePos &sourcePos, Compiler::Token::Type op, Node *left, Node *right) |
| Create a binary arithmetic node for mult/div/mod operation op. | |
| static BinaryArithmeticNode * | fromBinaryExpression (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. | |
Node for binary arithmetic.
children[0] is left expression children[1] is right expression
1.8.11