anchor.diff:      return _memoizeArray(_fnTypeTypeMap, keys, create);
     }
   
  +  /// Returns the function arguments.
  +  ///
  +  /// If an argument is provided with annotations (encoded as a JS array where
  +  /// the first element is the argument, and the rest are annotations) the
  +  /// annotations are extracted and saved in [metadata].
     List _process(List array) {
       var result = [];
       for (var i = 0; JS<bool>('!', '# < #.length', i, array); ++i) {
  
positive.code:   FunctionType(this.returnType, this.args, this.optionals, this.named) {
      this.args = _process(this.args);
      this.optionals = _process(this.optionals);
      // TODO(vsm): Add named arguments.
    }
  
    toString() => name;
  
negative.code: })()''');
  
  class FunctionType extends AbstractFunctionType {
    final Type returnType;
    List args;
    List optionals;
    // Named arguments native JS Object of the form { namedArgName: namedArgType }
    final named;
    // TODO(vsm): This is just parameter metadata for now.
    // Suspected but not confirmed: Only used by mirrors for pageloader2 support.
    // The metadata is represented as a list of JS arrays, one for each argument
    // that contains the annotations for that argument or an empty array if there
    // are no annotations.
    List metadata = [];
    String _stringValue;
  
  