An expression node may correspond to a complete temporary array constructed at run-time, or through some process of interpretation (akin to interpretation of the mooted of forall scripts) it may simply correspond to a scalar temporary inside a loop in some ``node code''.
The classes for expressions parallel the classes for arrays:
ExprInt, ExprFloat, ExprDouble, ...
b.plus(c)corresponds to the array expression
b + cThe shape of the result is the union of the shape of the addend and the argument. The operation is illegal if this union contains any non-orthogonal range pairs.
Certain arithmetic coercions can be defined by overloading
ExprInt ExprInt :: plus(ExprInt) ; ExprFloat ExprInt :: plus(ExprFloat) ; ExprFloat ExprFloat :: plus(ExprFloat) ; ExprFloat ExprFloat :: plus(ExprInt) ;Other analogous members (
if, and so on) are provided.