Various types of operators: OTbinary binary OTunary unary OTleaf leaf OTcommut commutative (e1 op e2) == (e2 op e1) (assoc == !=) OTassoc associative (e1 op (e2 op e3)) == ((e1 op e2) op e3) (also commutative) OTassign assignment = op= i++ i-- i=-i str= OTpost post inc or post dec operator OTeop0e if (e op 0) => e OTeop00 if (e op 0) => 0 OTeop1e if (e op 1) => e OTsideff there are side effects to the operator (assign call post ?: && ||) OTconv type conversion operator that could appear on lhs of assignment operator OTlogical logical operator (result is 0 or 1) OTwid high order bits of operation are irrelevant OTopeq an op= operator OTop an operator that has a corresponding op= OTcall function call OTrtol operators that evaluate right subtree first then left OTrel == != < <= > >= operators OTrel2 < <= > >= operators OTdef definition operator (assign call post asm) OTae potential common subexpression operator OTboolnop operation is a nop if boolean result is desired
Conversion operators. Convert from conversion operator to conversion index parallel array invconvtab[] in cgelem.c
Determine things about relational operators.
Swap relational operators (like if we swapped the leaves).
If operands are integral types
Logical negation
Operand swap
Determine the cost of evaluating an operator.
Determine properties of an elem. EBIN binary node? EUNA unary node? EOP operator node (unary or binary)? ERTOL right to left evaluation (left to right is default) Eunambig unambiguous definition elem?
Compiler implementation of the D programming language.