dmd.opover
Handles operator overloading.
Specification: Operator Overloading
License
Source: opover.d
Documentation: https://dlang.org/phobos/dmd_opover.html
-
Declaration
bool
isCommutative
(TOKop
);Determine if operands of binary
op
can be reversed to fit operator overload. -
Declaration
Objects*
opToArg
(Scope*sc
, TOKop
);Helper function to turn operator into template argument list
-
Declaration
Expression
op_overload
(Expressione
, Scope*sc
, TOK*pop
= null);Operator overload. Check for operator overload, if so, replace with function call.
Parameters
Expression
e
expression with operator
Scope*
sc
context
TOK*
pop
if not
null
, is set to the operator that was actually overloaded, which may not be
. Happens when operands are reversed to match an overloade
.opReturn Value
null
if not an operator overload, otherwise the lowered expression -
Declaration
Expression
build_overload
(ref const Locloc
, Scope*sc
, Expressionethis
, Expressionearg
, Dsymbold
);Utility to build a function call out of this reference and argument.
-
Declaration
Dsymbol
search_function
(ScopeDsymbolad
, Identifierfuncid
);Search for function
funcid
in aggregatead
. -
Declaration
bool
inferForeachAggregate
(Scope*sc
, boolisForeach
, ref Expressionfeaggr
, out Dsymbolsapply
);Figure out what is being foreach'd over by looking at the ForeachAggregate.
Parameters
Scope*
sc
context
bool
isForeach
true
for foreach,false
for foreach_reverseExpression
feaggr
ForeachAggregate
Dsymbol
sapply
set to function opApply/opApplyReverse, or delegate, or
null
. Overload resolution is not done.Return Value
true
if successfully figured it out;feaggr
updated with semantic analysis.false
for failed, which is an error. -
Declaration
bool
inferApplyArgTypes
(ForeachStatementfes
, Scope*sc
, ref Dsymbolsapply
);Given array of foreach parameters and an aggregate type, find best opApply overload, if any of the parameter types are missing, attempt to infer them from the aggregate type.
Parameters
ForeachStatement
fes
the foreach statement
Scope*
sc
context
Dsymbol
sapply
null
or opApply or delegateReturn Value
false
for errors