anchor.diff:          | P.TypeTest(lhs, ty) -> //seems to be same as TypeTestGeneric
               applyParens OP.TypeTest (sprintf "%s :? %s" (decompile (OP.TypeTest,OP.Left) lhs) (ER.sprintSig ty))
           | EP.Range(startToken,endToken,a,b) -> //not sure about precedence for op ranges
  -            sprintf "%s%s..%s%s" startToken (decompile (OP(0),OP.Non) a) (decompile (OP(0),OP.Non) b) endToken
  +            sprintf "%s%s..%s%s" startToken (decompile CC.Zero a) (decompile CC.Zero b) endToken
           | EP.RangeStep(startToken,endToken,a,b,c) ->
  -            sprintf "%s%s..%s..%s%s" startToken (decompile (OP(0),OP.Non) a) (decompile (OP(0),OP.Non) b) (decompile (OP(0),OP.Non) c) endToken
  +            sprintf "%s%s..%s..%s%s" startToken (decompile CC.Zero a) (decompile CC.Zero b) (decompile CC.Zero c) endToken
           | P.Call(None, mi, target::[]) when mi.DeclaringType.Name = "IntrinsicFunctions" && mi.Name = "UnboxGeneric" -> //i.e. :?>
               let ty = mi.GetGenericArguments().[0]
               applyParens OP.DynamicCast (sprintf "%s :?> %s" (decompile (OP.DynamicCast,OP.Left) target) (ER.sprintSig ty))
           | P.Call(None, mi, target::args) when mi.DeclaringType.Name = "IntrinsicFunctions" -> //e.g. GetChar, GetArray, GetArray2D
  -            sprintf "%s.[%s]" (decompile (OP(22),OP.Non) target) (decompileTupledArgs args) //not sure what precedence is
  +            sprintf "%s.[%s]" (decompile CC.TwentyTwo target) (decompileTupledArgs args) //not sure what precedence is
           | P.Call(target, (ER.FunctionOrGenericValue(fOrGV) as mi), args) -> //instance or static call representing an F# function or generic value
               //if mi has generic args which can't be infered, need to sprint them.
               //if mi takes no arguments, then need to decompile "()", unless mi is an F# value, in which case we omit ()
  
positive.code:         decompileArgs (OP.Application,OP.Non) " "
      and decompileSequencedArgs =
          decompileArgs (OP.Semicolon,OP.Non) "; "
      decompile (OP(0),OP.Non) expr
  
  //-----operator precedence updated April 2011 with bitwise ops-----
  //see OperatorPrecedenceedence.xlsx, not yet implemented.
  
negative.code:         //we can't reduce any XXXSet expressions due to limitations of Expr.Eval()
          | P.VarSet(v, arg) ->
              //not sure what precedence should be, using precedence for < op
              applyParens OP.LessThanOp (sprintf "%s <- %s" v.Name (decompile CC.Zero arg)) 
          //extremely verbose
          | P.UnionCaseTest(target, uci) ->
              let ucMatch =
  