anchor.diff:    }
   
     @override
  -  Map<String, dynamic> get value {
  +  Map<String, dynamic> computeValue(Map<String, dynamic> variables) {
       if (fields.isEmpty) {
         return <String, dynamic>{};
       } else {
         return fields.fold<Map<String, dynamic>>(<String, dynamic>{},
             (map, field) {
  -        return map..[field.NAME.text] = field.value.value;
  +        return map..[field.NAME.text] = field.value.computeValue(variables);
         });
       }
     }
  
positive.code:   FileSpan get span => NULL.span;
  
    @override
    Null get value => null;
  }
  
  class EnumValueContext extends ValueContext<String> {
    final Token NAME;
  
    EnumValueContext(this.NAME);
  
negative.code:   FileSpan get span => NAME.span;
  
    @override
    String computeValue(Map<String, dynamic> variables) => NAME.span.text;
  }
  
  class ObjectValueContext extends InputValueContext<Map<String, dynamic>> {
    final Token LBRACE;
    final List<ObjectFieldContext> fields;
    final Token RBRACE;
  