9Box elvis( Scope&, ArgIterator arg, ArgIterator )
10{
return (*arg).
Call<FIsTrue>() ? *arg : *(arg + 1); }
14bool ElvisOperator::TryCompilation( CIBinaryOp& ciBinaryOp ) {
15 Box& lhs= * ciBinaryOp.ArgsBegin;
16 Box& rhs= *(ciBinaryOp.ArgsBegin + 1);
19 if( ciBinaryOp.Operator !=
A_CHAR(
"?:") || !lhs.IsSameType(rhs) )
22 ALIB_DBG( ciBinaryOp.DbgCallbackName =
"elvis"; )
25 if( ciBinaryOp.LhsIsConst ) {
26 if( lhs.Call<FIsTrue>() )
27 ciBinaryOp.TypeOrValue= lhs;
30 if( ciBinaryOp.RhsIsConst )
31 ciBinaryOp.TypeOrValue= rhs;
33 ciBinaryOp.NonConstArgIsResult= true;
39 ciBinaryOp.Callback = elvis;
40 ciBinaryOp.TypeOrValue= rhs;
decltype(std::declval< typename TFDecl::Signature >()(std::declval< Box & >(), std::declval< TArgs >()...)) Call(TArgs &&... args) const
boxing::Box Box
Type alias in namespace #"%alib".
expressions::Compiler Compiler
Type alias in namespace #"%alib".
expressions::CompilerPlugin CompilerPlugin
Type alias in namespace #"%alib".
ElvisOperator(Compiler &compiler)