dmd.opover
Handles operator overloading.
Specification: Operator Overloading
License
Source: opover.d
Documentation: https://dlang.org/phobos/dmd_opover.html
-
Declaration
boolisCommutative(TOKop);Determine if operands of binary
opcan be reversed to fit operator overload. -
Declaration
Objects*opToArg(Scope*sc, TOKop);Helper function to turn operator into template argument list
-
Declaration
Expressionop_overload(Expressione, Scope*sc, TOK*pop= null);Operator overload. Check for operator overload, if so, replace with function call.
Parameters
Expressioneexpression with operator
Scope*sccontext
TOK*popif 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
nullif not an operator overload, otherwise the lowered expression -
Declaration
Expressionbuild_overload(ref const Locloc, Scope*sc, Expressionethis, Expressionearg, Dsymbold);Utility to build a function call out of this reference and argument.
-
Declaration
Dsymbolsearch_function(ScopeDsymbolad, Identifierfuncid);Search for function
funcidin aggregatead. -
Declaration
boolinferForeachAggregate(Scope*sc, boolisForeach, ref Expressionfeaggr, out Dsymbolsapply);Figure out what is being foreach'd over by looking at the ForeachAggregate.
Parameters
Scope*sccontext
boolisForeachtruefor foreach,falsefor foreach_reverseExpressionfeaggrForeachAggregate
Dsymbolsapplyset to function opApply/opApplyReverse, or delegate, or
null. Overload resolution is not done.Return Value
trueif successfully figured it out;feaggrupdated with semantic analysis.falsefor failed, which is an error. -
Declaration
boolinferApplyArgTypes(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
ForeachStatementfesthe foreach statement
Scope*sccontext
Dsymbolsapplynullor opApply or delegateReturn Value
falsefor errors