static int TimesNumAndResetOriginal(BasicValue& aValue, int aNum) { int tag = aValue.GetTag(); aValue.SetTag(1); return tag * aNum; }
static int TimesTwoAndResetOriginal(BasicValue& aValue) { int tag = aValue.GetTag(); aValue.SetTag(1); return tag * 2; }
int operator()(BasicValue& aValue) { return aValue.GetTag() * mBy.GetTag(); }
static int TimesTwo(const BasicValue& aValue) { return aValue.GetTag() * 2; }
void operator()(BasicValue& aValue) { aValue.SetTag(aValue.GetTag() + mBy.GetTag()); }
static void IncrementTag(BasicValue& aValue) { gFunctionWasApplied = true; aValue.SetTag(aValue.GetTag() + 1); }
int operator()(BasicValue& aValue, BasicValue&& aArg) { mArgMoved = true; return aValue.GetTag() * aArg.GetTag(); }
int operator()(BasicValue& aValue, const BasicValue& aArg) { mArgMoved = false; return aValue.GetTag() * aArg.GetTag(); }
static int TimesNum(const BasicValue& aValue, int aNum) { return aValue.GetTag() * aNum; }
void operator()(BasicValue& aValue, BasicValue&& aArg) { mArgMoved = true; aValue.SetTag(aValue.GetTag() + aArg.GetTag()); }
void operator()(BasicValue& aValue, const BasicValue& aArg) { mArgMoved = false; aValue.SetTag(aValue.GetTag() + aArg.GetTag()); }
static void IncrementTagBy(BasicValue& aValue, int aAmount) { gFunctionWasApplied = true; aValue.SetTag(aValue.GetTag() + aAmount); }