Handles operator overloading.
@safe bool
isCommutative(EXP
op);
Determine if operands of binary op can be reversed to fit operator overload.
Objects*
opToArg(Scope*
sc, EXP
op);
Helper function to turn operator into template argument list
Expression
opOverloadCast(CastExp
e, Scope*
sc, Type
att = null);
This is mostly the same as opOverloadUnary but has a different rewrite.
bool
suggestBinaryOverloads(BinExp
e, Scope*
sc);
If applicable, print an error relating to implementing / fixingopBinary functions.
Parameters:BinExpe | binary operation |
Scope*sc | scope to tryopBinary!"" semantic in for error messages |
Returns:true when an error related toopBinary was printed
bool
suggestOpOpAssign(BinAssignExp
exp, Scope*
sc, Expression
parent);
If applicable, print an error relating to implementing / fixingopOpAssign oropUnary functions.
Parameters:BinAssignExpexp | binary operation |
Scope*sc | scope to tryopOpAssign!"" semantic in for error messages |
Expressionparent | ifexp was lowered from thisPreExp orPostExp, mentionopUnary as well |
Returns:true when an error related toopOpAssign was printed
Expression
opOverloadBinaryAssign(BinAssignExp
e, Scope*
sc, Type[2]
aliasThisStop);
Operator overloading for op=
Expression
build_overload(Loc
loc, Scope*
sc, Expression
ethis, Expression
earg, Dsymbol
d);
Utility to build a function call out of this reference and argument.
Dsymbol
search_function(ScopeDsymbol
ad, Identifier
funcid);
Search for function funcid in aggregate ad.
bool
inferForeachAggregate(Scope*
sc, bool
isForeach, ref Expression
feaggr, out Dsymbol
sapply);
Figure out what is being foreach'd over by looking at the ForeachAggregate.
Parameters:Scope*sc | context |
boolisForeach | true for foreach, false for foreach_reverse |
Expressionfeaggr | ForeachAggregate |
Dsymbolsapply | set to function opApply/opApplyReverse, or delegate, or null. Overload resolution is not done. |
Returns:true if successfully figured it out; feaggr updated with semantic analysis. false for failed, which is an error.
bool
inferApplyArgTypes(ForeachStatement
fes, Scope*
sc, ref Dsymbol
sapply);
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:ForeachStatementfes | the foreach statement |
Scope*sc | context |
Dsymbolsapply | null or opApply or delegate, overload resolution has not been done. Do overload resolution on sapply. |