anchor.diff:      else
           SynExpr.DotIndexedGet(arr,argslist,mDot,m)
   
  -let mkSynDotParenGet lhsm dotm a b   = 
  +let mkSynDotParenGet lhsm dotm a b   =
       match b with
       | SynExpr.Tuple ([_;_],_,_)   -> errorR(Deprecated(FSComp.SR.astDeprecatedIndexerNotation(),lhsm)) ; SynExpr.Const(SynConst.Unit,lhsm)
       | SynExpr.Tuple ([_;_;_],_,_) -> errorR(Deprecated(FSComp.SR.astDeprecatedIndexerNotation(),lhsm)) ; SynExpr.Const(SynConst.Unit,lhsm)
  
positive.code: [<System.Diagnostics.DebuggerDisplay("{idText}")>]
  [<Sealed>]
  [<NoEquality; NoComparison>]
  type Ident (text,range) = 
       member x.idText = text
       member x.idRange = range
       override x.ToString() = text
  
  type LongIdent = Ident list
  type LongIdentWithDots =
      /// LongIdentWithDots(lid, dotms)   
      /// Typically dotms.Length = lid.Length-1, but they may be same if (incomplete) code ends in a dot, e.g. "Foo.Bar."
      /// The dots mostly matter for parsing, and are typically ignored by the typechecker, but 
      /// if dotms.Length = lid.Length, then the parser must have reported an error, so the typechecker is allowed
      /// more freedom about typechecking these expressions.
      /// LongIdent can be empty list - it is used to denote that name of some AST element is absent (i.e. empty type name in inherit)
      | LongIdentWithDots of LongIdent * range list
      with member this.Range =
              match this with
              | LongIdentWithDots([],_) -> failwith "rangeOfLidwd"
  
negative.code:     ///
      /// Indicates a simple pattern variable.
      ///
      ///   altNameRefCell
      ///     Normally 'None' except for some compiler-generated variables in desugaring pattern matching.
      ///     Pattern processing sets this reference for hidden variable introduced by desugaring pattern matching in arguments.
      ///     The info indicates an alternative (compiler generated) identifier to be used because the name of the identifier is already bound.
      ///     See Product Studio FSharp 1.0, bug 6389.
      ///
      ///   isCompilerGenerated : true if a compiler generated name
      ///   isThisVar: true if 'this' variable in member
      ///   isOptArg: true if a '?' is in front of the name
      | Id of  ident:Ident * altNameRefCell:SynSimplePatAlternativeIdInfo ref option * isCompilerGenerated:bool * isThisVar:bool *  isOptArg:bool * range:range
  
      | Typed of  SynSimplePat * SynType * range:range
      | Attrib of  SynSimplePat * SynAttributes * range:range
  
  
  and SynSimplePatAlternativeIdInfo =
      /// We have not decided to use an alternative name in tha pattern and related expression
      | Undecided of Ident
      /// We have decided to use an alternative name in tha pattern and related expression
      | Decided of Ident
  
  and
      [<NoEquality; NoComparison>]
      SynStaticOptimizationConstraint =
      | WhenTyparTyconEqualsTycon of SynTypar *  SynType * range:range
      | WhenTyparIsStruct of SynTypar * range:range
  
  and
      [<NoEquality; NoComparison;RequireQualifiedAccess>]
      /// Represents a simple set of variable bindings a, (a,b) or (a:Type,b:Type) at a lambda,
      /// function definition or other binding point, after the elimination of pattern matching
      /// from the construct, e.g. after changing a "function pat1 -> rule1 | ..." to a
      /// "fun v -> match v with ..."
      SynSimplePats =
      | SimplePats of SynSimplePat list * range:range
      | Typed of  SynSimplePats * SynType * range:range
  
  and SynConstructorArgs =
      | Pats of SynPat list
      | NamePatPairs of (Ident * SynPat) list * range:range
  and
      [<NoEquality; NoComparison;RequireQualifiedAccess>]
      SynPat =
      | Const of SynConst * range:range
      | Wild of range:range
      | Named of SynPat * Ident *  isSelfIdentifier:bool (* true if 'this' variable *)  * accessibility:SynAccess option * range:range
      | Typed of SynPat * SynType * range:range
      | Attrib of SynPat * SynAttributes * range:range
      | Or of SynPat * SynPat * range:range
      | Ands of SynPat list * range:range
      | LongIdent of longDotId:LongIdentWithDots * (* holds additional ident for tooling *) Ident option * SynValTyparDecls option (* usually None: temporary used to parse "f<'a> x = x"*) * SynConstructorArgs  * accessibility:SynAccess option * range:range
      | Tuple of SynPat list * range:range
      | StructTuple of SynPat list * range:range
      | Paren of SynPat * range:range
      | ArrayOrList of bool * SynPat list * range:range
      | Record of ((LongIdent * Ident) * SynPat) list * range:range
      /// 'null'
      | Null of range:range
      /// '?id' -- for optional argument names
      | OptionalVal of Ident * range:range
      /// ':? type '
      | IsInst of SynType * range:range
      /// &lt;@ expr @&gt;, used for active pattern arguments
      | QuoteExpr of SynExpr * range:range
  
      /// Deprecated character range:ranges
      | DeprecatedCharRange of char * char * range:range
      /// Used internally in the type checker
      | InstanceMember of  Ident * Ident * (* holds additional ident for tooling *) Ident option * accessibility:SynAccess option * range:range (* adhoc overloaded method/property *)
  
      /// A pattern arising from a parse error
      | FromParseError of SynPat * range:range
  
      member p.Range =
        match p with
        | SynPat.Const (range=m)
        | SynPat.Wild (range=m)
        | SynPat.Named (range=m)
        | SynPat.Or (range=m)
        | SynPat.Ands (range=m)
        | SynPat.LongIdent (range=m)
        | SynPat.ArrayOrList (range=m)
        | SynPat.Tuple (range=m)
        | SynPat.StructTuple (range=m)
        | SynPat.Typed (range=m)
        | SynPat.Attrib (range=m)
        | SynPat.Record (range=m)
        | SynPat.DeprecatedCharRange (range=m)
        | SynPat.Null (range=m)
        | SynPat.IsInst (range=m)
        | SynPat.QuoteExpr (range=m)
        | SynPat.InstanceMember (range=m)
        | SynPat.OptionalVal (range=m)
        | SynPat.Paren (range=m)
        | SynPat.FromParseError (range=m) -> m
  
  and
      [<NoEquality; NoComparison>]
      SynInterfaceImpl =
      | InterfaceImpl of SynType * SynBinding list * range:range
  
  and
      [<NoEquality; NoComparison>]
      SynMatchClause =
      | Clause of SynPat * SynExpr option *  SynExpr * range:range * SequencePointInfoForTarget
      member this.RangeOfGuardAndRhs =
          match this with
          | Clause(_,eo,e,_,_) ->
  