dmd.arrayop

Implement array operations, such as a[] = b[] + c[].

Specification: Array Operations

Authors

Walter Bright

Source: arrayop.d

  • Declaration

    bool isArrayOpValid(Expression e);

    Check that there are no uses of arrays without [].

  • Declaration

    Expression arrayOp(BinExp e, Scope* sc);
    Expression arrayOp(BinAssignExp e, Scope* sc);

    Construct the array operation expression, call object.arrayOp!(tiargs)(args).

    Discussion

    Encode operand types and operations into tiargs using reverse polish notation (RPN) to preserve precedence. Unary operations are prefixed with "u" (e.g. "u~"). Pass operand values (slices or scalars) as args.

    Scalar expression sub-trees of e are evaluated before calling into druntime to hoist them out of the loop. This is a valid evaluation order as the actual array operations have no side-effect.

  • Declaration

    bool isArrayOpImplicitCast(TypeDArray tfrom, TypeDArray tto);

    Some implicit casting can be performed by the arrayOp template.

    Parameters

    TypeDArray tfrom

    type converting from

    TypeDArray tto

    type converting to

    Return Value

    true if can be performed by arrayOp

  • Declaration

    bool isUnaArrayOp(TOK op);

    Test if expression is a unary array op.

  • Declaration

    bool isBinArrayOp(TOK op);

    Test if expression is a binary array op.

  • Declaration

    bool isBinAssignArrayOp(TOK op);

    Test if expression is a binary assignment array op.

  • Declaration

    bool isArrayOpOperand(Expression e);

    Test if operand is a valid array op operand.

  • Declaration

    ErrorExp arrayOpInvalidError(Expression e);

    Print error message about invalid array operation.

    Parameters

    Expression e

    expression with the invalid array operation

    Return Value

    instance of ErrorExp