anchor.diff:      var getterFn = getter(field);
       return new Expression(
           (self) => getterFn(object.eval(self)),
  -        (self, value) => setterFn(object.eval(self), value));
  +        (self, value) => setterFn(object.eval(self), value))
  +            ..fieldHolder = object
  +            ..fieldName = field;
     }
   
     Expression object(keyValues) =>
  
positive.code:     };
    }
  
    _op(opKey) => OPERATORS[opKey];
  
    Expression ternaryFn(Expression cond, Expression _true, Expression _false) =>
  
negative.code:         return value;
        });
  
    Expression functionCall(fn, fnName, argsFn, evalError) {
      if (fn.isFieldAccess) {
        Symbol key = new Symbol(fn.fieldName);
        return new Expression((self) {
          List args = evalList(argsFn, self);
          var holder = fn.fieldHolder.eval(self);
          InstanceMirror instanceMirror = reflect(holder);
          return instanceMirror.invoke(key, args).reflectee;
        });
      } else {
        return new Expression((self) {
          List args = evalList(argsFn, self);
          var userFn = safeFunctionCall(fn.eval(self), fnName, evalError);
          return relaxFnApply(userFn, args);
        });
      }
    }
  
    Expression arrayDeclaration(elementFns) =>
        new Expression((self){
  