// add arguments
IScope mixinArguments = buildMixinsArguments(reference, callerScope, fullMixin);
mixinScope.getParent().add(mixinArguments);
IScope mixinWorkingScope = scopeManipulation.joinIfIndependent(callerScope, mixinScope);
MixinsGuardsValidator guardsValidator = new MixinsGuardsValidator(mixinWorkingScope, problemsHandler, configuration);
GuardValue guardValue = guardsValidator.evaluateGuards(mixin);
if (guardValue != GuardValue.DO_NOT_USE) {
//OPTIMIZATION POSSIBLE: there is no need to compile mixins at this point, some of them are not going to be
//used and create snapshot operation is cheap now. It should be done later on.
BodyCompilationResult compiled = resolveCalledBody(callerScope, fullMixin.getMixin(), mixinWorkingScope, ReturnMode.MIXINS_AND_VARIABLES);