dmd.arrayop
Implement array operations, such as a[] = b[] + c[]
.
Specification: Array Operations
License
Source: arrayop.d
Documentation: https://dlang.org/phobos/dmd_arrayop.html
-
Declaration
bool
isArrayOpValid
(Expressione
);Check that there are no uses of arrays without [].
-
Declaration
Expression
arrayOp
(BinExpe
, Scope*sc
);
ExpressionarrayOp
(BinAssignExpe
, 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
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.e
-
Declaration
bool
isArrayOpImplicitCast
(TypeDArraytfrom
, TypeDArraytto
);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
(EXPop
);Test if expression is a unary array
op
. -
Declaration
bool
isBinArrayOp
(EXPop
);Test if expression is a binary array
op
. -
Declaration
bool
isBinAssignArrayOp
(EXPop
);Test if expression is a binary assignment array
op
. -
Declaration
bool
isArrayOpOperand
(Expressione
);Test if operand is a valid array op operand.
-
Declaration
ErrorExp
arrayOpInvalidError
(Expressione
);Print error message about invalid array operation.
Parameters
Expression
e
expression with the invalid array operation
Return Value
instance of ErrorExp