@@ -36,9 +36,6 @@ let debugPrint s = ignore s
3636
3737let exprFromParseError (e:SynExpr) = SynExpr.FromParseError (e, e.Range)
3838
39- let unitExprFromRange m = SynExpr.Const (SynConst.Unit, m)
40- let unitExprFromParseError m = unitExprFromRange m |> exprFromParseError
41-
4239let patFromParseError (e:SynPat) = SynPat.FromParseError(e, e.Range)
4340
4441// record bindings returned by the recdExprBindings rule has shape:
@@ -319,7 +316,8 @@ let rangeOfLongIdent(lid:LongIdent) =
319316%type <Ident> ident
320317%type <SynType> typ typEOF
321318%type <SynTypeDefnSig list> tyconSpfnList
322- %type <SynArgPats> atomicPatsOrNamePatPairs
319+ %type <SynArgPats * Range> atomicPatsOrNamePatPairs
320+ %type <SynPat list> atomicPatterns
323321%type <Range * SynExpr> patternResult
324322%type <SynExpr> declExpr
325323%type <SynExpr> minusExpr
@@ -3106,33 +3104,39 @@ constrPattern:
31063104
31073105 | atomicPatternLongIdent explicitValTyparDecls atomicPatsOrNamePatPairs %prec pat_app
31083106 { let vis, lid = $1
3109- let m = (rhs2 parseState 1 2, $3.Patterns) ||> unionRangeWithListBy (fun p -> p.Range)
3110- SynPat.LongIdent (lid, None, Some $2, $3, vis, m) }
3107+ let args, argsM = $3
3108+ let m = unionRanges (rhs2 parseState 1 2) argsM
3109+ SynPat.LongIdent (lid, None, Some $2, args, vis, m) }
31113110
31123111 | atomicPatternLongIdent explicitValTyparDecls HIGH_PRECEDENCE_PAREN_APP atomicPatsOrNamePatPairs
31133112 { let vis, lid = $1
3114- let m = (rhs2 parseState 1 2, $4.Patterns) ||> unionRangeWithListBy (fun p -> p.Range)
3115- SynPat.LongIdent (lid, None, Some $2, $4, vis, m) }
3113+ let args, argsM = $4
3114+ let m = unionRanges (rhs2 parseState 1 2) argsM
3115+ SynPat.LongIdent (lid, None, Some $2, args, vis, m) }
31163116
31173117 | atomicPatternLongIdent explicitValTyparDecls HIGH_PRECEDENCE_BRACK_APP atomicPatsOrNamePatPairs
31183118 { let vis, lid = $1
3119- let m = (rhs2 parseState 1 2, $4.Patterns) ||> unionRangeWithListBy (fun p -> p.Range)
3120- SynPat.LongIdent (lid, None, Some $2, $4, vis, m) }
3119+ let args, argsM = $4
3120+ let m = unionRanges (rhs2 parseState 1 2) argsM
3121+ SynPat.LongIdent (lid, None, Some $2, args, vis, m) }
31213122
31223123 | atomicPatternLongIdent atomicPatsOrNamePatPairs %prec pat_app
31233124 { let vis, lid = $1
3124- let m = (rhs parseState 1, $2.Patterns) ||> unionRangeWithListBy (fun p -> p.Range)
3125- SynPat.LongIdent (lid, None, None, $2, vis, m) }
3125+ let args, argsM = $2
3126+ let m = unionRanges (rhs parseState 1) argsM
3127+ SynPat.LongIdent (lid, None, None, args, vis, m) }
31263128
31273129 | atomicPatternLongIdent HIGH_PRECEDENCE_PAREN_APP atomicPatsOrNamePatPairs
31283130 { let vis, lid = $1
3129- let m = (rhs parseState 1, $3.Patterns) ||> unionRangeWithListBy (fun p -> p.Range)
3130- SynPat.LongIdent (lid, None, None, $3, vis, m) }
3131+ let args, argsM = $3
3132+ let m = unionRanges (rhs parseState 1) argsM
3133+ SynPat.LongIdent (lid, None, None, args, vis, m) }
31313134
31323135 | atomicPatternLongIdent HIGH_PRECEDENCE_BRACK_APP atomicPatsOrNamePatPairs
31333136 { let vis, lid = $1
3134- let m = (rhs parseState 1, $3.Patterns) ||> unionRangeWithListBy (fun p -> p.Range)
3135- SynPat.LongIdent (lid, None, None, $3, vis, m) }
3137+ let args, argsM = $3
3138+ let m = unionRanges (rhs parseState 1) argsM
3139+ SynPat.LongIdent (lid, None, None, args, vis, m) }
31363140
31373141 | COLON_QMARK atomTypeOrAnonRecdType %prec pat_isinst
31383142 { SynPat.IsInst($2, lhs parseState) }
@@ -3142,10 +3146,13 @@ constrPattern:
31423146
31433147atomicPatsOrNamePatPairs:
31443148 | LPAREN namePatPairs rparen
3145- { SynArgPats.NamePatPairs $2 }
3149+ { let m = rhs2 parseState 1 3
3150+ SynArgPats.NamePatPairs $2, m }
31463151
31473152 | atomicPatterns
3148- { SynArgPats.Pats $1 }
3153+ { let mWhole = rhs parseState 1
3154+ let m = (mWhole.StartRange, $1) ||> unionRangeWithListBy (fun p -> p.Range)
3155+ SynArgPats.Pats $1, m }
31493156
31503157atomicPatterns:
31513158 | atomicPattern atomicPatterns %prec pat_args
@@ -3993,7 +4000,7 @@ patternClauses:
39934000 { let pat, guard, patm = $1
39944001 let clauses, mLast = $4
39954002 let m = guard |> Option.map (fun e -> unionRanges patm e.Range) |> Option.defaultValue patm
3996- (SynMatchClause(pat, guard, None, unitExprFromParseError m.EndRange, m, DebugPointAtTarget.Yes) :: clauses), mLast }
4003+ (SynMatchClause(pat, guard, None, arbExpr ("patternClauses1", m.EndRange) , m, DebugPointAtTarget.Yes) :: clauses), mLast }
39974004
39984005 | patternAndGuard patternResult BAR error
39994006 { let pat, guard, patm = $1
@@ -4016,7 +4023,7 @@ patternClauses:
40164023 let mLast = rhs parseState 2
40174024 let m = guard |> Option.map (fun e -> unionRanges patm e.Range) |> Option.defaultValue patm
40184025 // silent recovery
4019- [SynMatchClause(pat, guard, None, unitExprFromParseError m.EndRange, m, DebugPointAtTarget.Yes)], mLast }
4026+ [SynMatchClause(pat, guard, None, arbExpr ("patternClauses2", m.EndRange) , m, DebugPointAtTarget.Yes)], mLast }
40204027
40214028patternGuard:
40224029 | WHEN declExpr
0 commit comments