Skip to content

Commit 6eea60c

Browse files
committed
Parser: Update OBLOCKSEP token passing
1 parent c4001e5 commit 6eea60c

38 files changed

+118
-136
lines changed

src/Compiler/Checking/CheckRecordSyntaxHelpers.fs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,7 @@ let TransformAstForNestedUpdates (cenv: TcFileState) (env: TcEnv) overallTy (lid
9494
| SynExpr.Ident origId, (blockSep: BlockSeparator) ->
9595
let lid, rng = upToId blockSep.Range id (origId :: ids)
9696

97-
Some(
98-
SynExpr.LongIdent(false, LongIdentWithDots(lid, rng), None, totalRange origId id),
99-
BlockSeparator.Offside(blockSep.Range, None)
100-
)
97+
Some(SynExpr.LongIdent(false, LongIdentWithDots(lid, rng), None, totalRange origId id), blockSep)
10198
| _ -> None
10299

103100
let rec synExprRecd copyInfo (outerFieldId: Ident) innerFields exprBeingAssigned =

src/Compiler/Service/ServiceLexing.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ module internal TokenClassifications =
315315
| OASSERT
316316
| OLAZY
317317
| ODECLEND _
318-
| OBLOCKSEP
318+
| OBLOCKSEP _
319319
| OEND
320320
| OBLOCKBEGIN
321321
| ORIGHT_BLOCK_END _
@@ -1531,7 +1531,7 @@ type FSharpToken =
15311531
| ORIGHT_BLOCK_END _ -> FSharpTokenKind.OffsideRightBlockEnd
15321532
| ODECLEND _ -> FSharpTokenKind.OffsideDeclEnd
15331533
| OEND -> FSharpTokenKind.OffsideEnd
1534-
| OBLOCKSEP -> FSharpTokenKind.OffsideBlockSep
1534+
| OBLOCKSEP _ -> FSharpTokenKind.OffsideBlockSep
15351535
| OBLOCKBEGIN -> FSharpTokenKind.OffsideBlockBegin
15361536
| ORESET -> FSharpTokenKind.OffsideReset
15371537
| OFUN -> FSharpTokenKind.OffsideFun

src/Compiler/Service/ServiceParseTreeWalk.fs

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -466,19 +466,11 @@ module SyntaxTraversal =
466466

467467
| SynExpr.Record(baseInfo = inheritOpt; copyInfo = copyOpt; recordFields = fields) ->
468468
[
469-
let diveIntoSeparator offsideColumn scPosOpt copyOpt =
470-
match scPosOpt with
471-
| Some scPos ->
472-
if posGeq pos scPos then
473-
visitor.VisitRecordField(path, copyOpt, None) // empty field after the inherits
474-
else
475-
None
476-
| None ->
477-
//semicolon position is not available - use offside rule
478-
if pos.Column = offsideColumn then
479-
visitor.VisitRecordField(path, copyOpt, None) // empty field after the inherits
480-
else
481-
None
469+
let diveIntoSeparator scPos copyOpt =
470+
if posGeq pos scPos then
471+
visitor.VisitRecordField(path, copyOpt, None) // empty field after the inherits
472+
else
473+
None
482474

483475
match inheritOpt with
484476
| Some(_ty, expr, _range, sepOpt, inheritRange) ->
@@ -505,7 +497,7 @@ module SyntaxTraversal =
505497
// inherit A()
506498
// $
507499
// field1 = 5
508-
diveIntoSeparator inheritRange.StartColumn blockSep.Position None)
500+
diveIntoSeparator blockSep.Position None)
509501
| None -> ()
510502
| _ -> ()
511503

@@ -563,7 +555,7 @@ module SyntaxTraversal =
563555
// field1 = 5
564556
// $
565557
// field2 = 5
566-
diveIntoSeparator offsideColumn blockSep.Position copyOpt)
558+
diveIntoSeparator blockSep.Position copyOpt)
567559
| _ -> ()
568560

569561
]

src/Compiler/SyntaxTree/LexFilter.fs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1531,7 +1531,7 @@ type LexFilterImpl (
15311531
Some (ORIGHT_BLOCK_END(getLastTokenEndRange ()))
15321532

15331533
| CtxtModuleHead(isNested = true) ->
1534-
Some OBLOCKSEP
1534+
Some (OBLOCKSEP(getLastTokenEndRange (), true))
15351535

15361536
| _ ->
15371537
None
@@ -1785,7 +1785,11 @@ type LexFilterImpl (
17851785
// and we've encountered declarations below
17861786
if debug then dprintf "CtxtModuleHead: not start of file, popping CtxtModuleHead\n"
17871787
popCtxt()
1788-
insertTokenFromPrevPosToCurrentPos OBLOCKSEP
1788+
let lastTokenPos =
1789+
let pos = tokenTup.LastTokenPos
1790+
pos.ShiftColumnBy 1
1791+
let range = mkSynRange lastTokenPos tokenTup.LexbufState.StartPos
1792+
insertTokenFromPrevPosToCurrentPos (OBLOCKSEP(range, true))
17891793

17901794
// Offside rule for SeqBlock.
17911795
// f x
@@ -1913,7 +1917,11 @@ type LexFilterImpl (
19131917
if debug then dprintf "offside at column %d matches start of block(%a)! delaying token, returning OBLOCKSEP\n" tokenStartCol outputPos offsidePos
19141918
replaceCtxt tokenTup (CtxtSeqBlock (FirstInSeqBlock, offsidePos, addBlockEnd))
19151919
// No change to offside stack: another statement block starts...
1916-
insertTokenFromPrevPosToCurrentPos OBLOCKSEP
1920+
let lastTokenPos =
1921+
let pos = tokenTup.LastTokenPos
1922+
pos.ShiftColumnBy 1
1923+
let range = mkSynRange lastTokenPos tokenTup.LexbufState.StartPos
1924+
insertTokenFromPrevPosToCurrentPos (OBLOCKSEP(range, true))
19171925

19181926
// Offside rule for CtxtLetDecl
19191927
// let .... =

src/Compiler/SyntaxTree/LexHelpers.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ module Keywords =
397397
FSHARP, "yield", YIELD(true)
398398
ALWAYS, "_", UNDERSCORE
399399
(*------- for prototyping and explaining offside rule *)
400-
FSHARP, "__token_OBLOCKSEP", OBLOCKSEP
400+
FSHARP, "__token_OBLOCKSEP", OBLOCKSEP(range0, true)
401401
FSHARP, "__token_OWITH", OWITH
402402
FSHARP, "__token_ODECLEND", ODECLEND range0
403403
FSHARP, "__token_OTHEN", OTHEN

src/Compiler/SyntaxTree/SyntaxTree.fs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -308,21 +308,18 @@ type SeqExprOnly = SeqExprOnly of bool
308308

309309
[<NoEquality; NoComparison; RequireQualifiedAccess>]
310310
type BlockSeparator =
311-
| Semicolon of range: range * position: pos option
312-
| Comma of range: range * position: pos option
313-
| Offside of range: range * position: pos option
311+
| Semicolon of range: range * position: pos
312+
| Comma of range: range * position: pos
314313

315314
member this.Range =
316315
match this with
317316
| Semicolon(range = m)
318-
| Comma(range = m)
319-
| Offside(range = m) -> m
317+
| Comma(range = m) -> m
320318

321319
member this.Position =
322320
match this with
323-
| Semicolon(position = p)
324-
| Comma(position = p)
325-
| Offside(position = p) -> p
321+
| Semicolon(position = p) -> p
322+
| Comma(position = p) -> p
326323

327324
type RecordFieldName = SynLongIdent * bool
328325

src/Compiler/SyntaxTree/SyntaxTree.fsi

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -359,21 +359,16 @@ type SeqExprOnly =
359359
type BlockSeparator =
360360
/// A separator consisting of a semicolon ';'
361361
/// range is the range of the semicolon
362-
/// position is the position of the semicolon (if available)
363-
| Semicolon of range: range * position: pos option
362+
/// position is the position of the semicolon
363+
| Semicolon of range: range * position: pos
364364
/// A separator consisting of a comma ','
365365
/// range is the range of the comma
366-
/// position is the position of the comma (if available)
367-
| Comma of range: range * position: pos option
368-
369-
// A separator consisting of a newline
370-
/// range is the range of the newline
371-
/// position is the position of the newline (if available)
372-
| Offside of range: range * position: pos option
366+
/// position is the position of the comma
367+
| Comma of range: range * position: pos
373368

374369
member Range: range
375370

376-
member Position: pos option
371+
member Position: pos
377372

378373
/// Represents a record field name plus a flag indicating if given record field name is syntactically
379374
/// correct and can be used in name resolution.

src/Compiler/pars.fsy

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ let parse_error_rich = Some(fun (ctxt: ParseErrorContext<_>) ->
136136
- just after '->' in any context
137137
- when opening CtxtNamespaceHead, CtxtModuleHead
138138
*/
139-
%token OBLOCKSEP /* LexFilter #light inserts when transforming CtxtSeqBlock(NotFirstInSeqBlock, _, AddBlockEnd) to CtxtSeqBlock(FirstInSeqBlock, _, AddBlockEnd) on exact alignment */
139+
%token <range * bool> OBLOCKSEP /* LexFilter #light inserts when transforming CtxtSeqBlock(NotFirstInSeqBlock, _, AddBlockEnd) to CtxtSeqBlock(FirstInSeqBlock, _, AddBlockEnd) on exact alignment - bool indicates if implicit (true) */
140140

141141
/* LexFilter #light inserts these tokens when closing offside contexts */
142142
%token OEND // CtxtFun, CtxtMatchClauses, CtxtWithAsLet _
@@ -3668,14 +3668,13 @@ namePatPairs:
36683668
{ let (id: Ident), mEq, (pat: SynPat) = $1
36693669
let m = unionRanges id.idRange pat.Range
36703670
let lid = SynLongIdent([id], [], [None])
3671-
NamePatPairField(lid, mEq, m, pat, Some $2) :: $3 }
3671+
NamePatPairField(lid, mEq, m, pat, $2) :: $3 }
36723672

36733673
| namePatPair seps_block seps_block namePatPairs
3674-
{ reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsExpectingPattern ())
3675-
let (id: Ident), mEq, (pat: SynPat) = $1
3674+
{ let (id: Ident), mEq, (pat: SynPat) = $1
36763675
let m = unionRanges id.idRange pat.Range
36773676
let lid = SynLongIdent([id], [], [None])
3678-
NamePatPairField(lid, mEq, m, pat, Some $2) :: $4 }
3677+
NamePatPairField(lid, mEq, m, pat, $2) :: $4 }
36793678

36803679
namePatPair:
36813680
| ident EQUALS parenPattern
@@ -4016,13 +4015,13 @@ recordPatternElementsAux:
40164015
| recordPatternElement seps_block recordPatternElementsAux
40174016
{ let (lid: SynLongIdent), mEq, (pat: SynPat) = $1
40184017
let m = unionRanges lid.Range pat.Range
4019-
NamePatPairField(lid, mEq, m, pat, Some $2) :: $3 }
4018+
NamePatPairField(lid, mEq, m, pat, $2) :: $3 }
40204019

40214020
| recordPatternElement seps_block seps_block recordPatternElementsAux
40224021
{ reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsExpectingPattern ())
40234022
let (lid: SynLongIdent), mEq, (pat: SynPat) = $1
40244023
let m = unionRanges lid.Range pat.Range
4025-
NamePatPairField(lid, mEq, m, pat, Some $2) :: $4 }
4024+
NamePatPairField(lid, mEq, m, pat, $2) :: $4 }
40264025

40274026
recordPatternElement:
40284027
| path EQUALS parenPattern
@@ -5709,7 +5708,11 @@ recdExprCore:
57095708
| appExpr
57105709
{ let mExpr = rhs parseState 1
57115710
reportParseErrorAt mExpr (FSComp.SR.parsFieldBinding ())
5712-
Some($1, BlockSeparator.Offside(mExpr.EndRange, None)), [] }
5711+
// Today SynExpr.Record requires copyInfo: (SynExpr * BlockSeparator) option.
5712+
// In this error-recovery branch we want to indicate “this looked like a copy-and-update base expression,
5713+
// but there was no WITH and no fields. The dummy BlockSeparator is the smallest way to keep the AST well-formed.
5714+
let dummySep = BlockSeparator.Semicolon(mExpr.EndRange, mExpr.EndRange.End)
5715+
(Some($1, dummySep), []) }
57135716

57145717
/*
57155718
handles cases when identifier can start from the underscore
@@ -5743,36 +5746,46 @@ recdExprCore:
57435746
| appExpr WITH recdBinding recdExprBindings opt_seps_block
57445747
{ let l = List.rev $4
57455748
let l = rebindRanges $3 l $5
5746-
(Some($1, BlockSeparator.Offside(rhs parseState 2, None)), l) }
5749+
// Use WITH token range for the separator (convention for copy-and-update)
5750+
let withSep = BlockSeparator.Semicolon(rhs parseState 2, (rhs parseState 2).End)
5751+
(Some($1, withSep), l) }
57475752

57485753
| appExpr OWITH opt_seps_block OEND
5749-
{ (Some($1, BlockSeparator.Offside(rhs parseState 2, None)), []) }
5754+
{ // Use OWITH token range for the separator (convention for copy-and-update)
5755+
let withSep = BlockSeparator.Semicolon(rhs parseState 2, (rhs parseState 2).End)
5756+
(Some($1, withSep), []) }
57505757

57515758
| appExpr OWITH recdBinding recdExprBindings opt_seps_block OEND
57525759
{ let l = List.rev $4
57535760
let l = rebindRanges $3 l $5
5754-
(Some($1, BlockSeparator.Offside(rhs parseState 2, None)), l) }
5761+
// Use OWITH token range for the separator (convention for copy-and-update)
5762+
let withSep = BlockSeparator.Semicolon(rhs parseState 2, (rhs parseState 2).End)
5763+
(Some($1, withSep), l) }
57555764

57565765
opt_seps_block:
57575766
| seps_block
5758-
{ Some $1 }
5767+
{ $1 }
57595768

57605769
| /* EMPTY */
57615770
{ None }
57625771

57635772
seps_block:
57645773
| OBLOCKSEP
5765-
{ BlockSeparator.Offside((rhs parseState 1), None) }
5774+
{
5775+
// OBLOCKSEP is purely syntactic: do not produce a BlockSeparator value
5776+
// Treat it as absence of an explicit separator
5777+
None
5778+
}
57665779

57675780
| SEMICOLON
57685781
{ let m = (rhs parseState 1)
5769-
BlockSeparator.Semicolon(m, Some m.End) }
5782+
Some (BlockSeparator.Semicolon(m, m.End)) }
57705783

57715784
| SEMICOLON OBLOCKSEP
5772-
{ BlockSeparator.Semicolon((rhs2 parseState 1 2), Some (rhs parseState 1).End) }
5785+
{ Some (BlockSeparator.Semicolon((rhs2 parseState 1 2), (rhs parseState 1).End)) }
57735786

57745787
| OBLOCKSEP SEMICOLON
5775-
{ BlockSeparator.Semicolon((rhs2 parseState 1 2), Some (rhs parseState 2).End) }
5788+
{ Some (BlockSeparator.Semicolon((rhs2 parseState 1 2), (rhs parseState 2).End)) }
57765789

57775790

57785791
/* identifier can start from the underscore */
@@ -5787,7 +5800,7 @@ pathOrUnderscore :
57875800

57885801
recdExprBindings:
57895802
| recdExprBindings seps_block recdBinding
5790-
{ ($3, Some $2) :: $1 }
5803+
{ ($3, $2) :: $1 }
57915804

57925805
| /* EMPTY */
57935806
{ [] }

tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.bsl

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2081,8 +2081,8 @@ FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Text.Range[
20812081
FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.CodeAnalysis.FSharpSymbolUse] GetSymbolUsesAtLocation(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String])
20822082
FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.CodeAnalysis.FSharpSymbolUse]] GetDeclarationListSymbols(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults], Int32, System.String, FSharp.Compiler.EditorServices.PartialLongName, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.AssemblySymbol]]], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean])
20832083
FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpSymbolUse] GetSymbolUseAtLocation(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String])
2084-
FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpDisplayContext] TryGetCapturedDisplayContext(FSharp.Compiler.Text.Range)
20852084
FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpDisplayContext] GetDisplayContextForPos(FSharp.Compiler.Text.Position)
2085+
FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpDisplayContext] TryGetCapturedDisplayContext(FSharp.Compiler.Text.Range)
20862086
FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpImplementationFileContents] ImplementationFile
20872087
FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpImplementationFileContents] get_ImplementationFile()
20882088
FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] TryGetCapturedType(FSharp.Compiler.Text.Range)
@@ -5919,40 +5919,31 @@ FSharp.Compiler.Symbols.FSharpXmlDoc: Int32 GetHashCode(System.Collections.IEqua
59195919
FSharp.Compiler.Symbols.FSharpXmlDoc: Int32 Tag
59205920
FSharp.Compiler.Symbols.FSharpXmlDoc: Int32 get_Tag()
59215921
FSharp.Compiler.Symbols.FSharpXmlDoc: System.String ToString()
5922+
FSharp.Compiler.Syntax.BlockSeparator+Comma: FSharp.Compiler.Text.Position get_position()
5923+
FSharp.Compiler.Syntax.BlockSeparator+Comma: FSharp.Compiler.Text.Position position
59225924
FSharp.Compiler.Syntax.BlockSeparator+Comma: FSharp.Compiler.Text.Range get_range()
59235925
FSharp.Compiler.Syntax.BlockSeparator+Comma: FSharp.Compiler.Text.Range range
5924-
FSharp.Compiler.Syntax.BlockSeparator+Comma: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position] get_position()
5925-
FSharp.Compiler.Syntax.BlockSeparator+Comma: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position] position
5926-
FSharp.Compiler.Syntax.BlockSeparator+Offside: FSharp.Compiler.Text.Range get_range()
5927-
FSharp.Compiler.Syntax.BlockSeparator+Offside: FSharp.Compiler.Text.Range range
5928-
FSharp.Compiler.Syntax.BlockSeparator+Offside: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position] get_position()
5929-
FSharp.Compiler.Syntax.BlockSeparator+Offside: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position] position
5926+
FSharp.Compiler.Syntax.BlockSeparator+Semicolon: FSharp.Compiler.Text.Position get_position()
5927+
FSharp.Compiler.Syntax.BlockSeparator+Semicolon: FSharp.Compiler.Text.Position position
59305928
FSharp.Compiler.Syntax.BlockSeparator+Semicolon: FSharp.Compiler.Text.Range get_range()
59315929
FSharp.Compiler.Syntax.BlockSeparator+Semicolon: FSharp.Compiler.Text.Range range
5932-
FSharp.Compiler.Syntax.BlockSeparator+Semicolon: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position] get_position()
5933-
FSharp.Compiler.Syntax.BlockSeparator+Semicolon: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position] position
59345930
FSharp.Compiler.Syntax.BlockSeparator+Tags: Int32 Comma
5935-
FSharp.Compiler.Syntax.BlockSeparator+Tags: Int32 Offside
59365931
FSharp.Compiler.Syntax.BlockSeparator+Tags: Int32 Semicolon
59375932
FSharp.Compiler.Syntax.BlockSeparator: Boolean IsComma
5938-
FSharp.Compiler.Syntax.BlockSeparator: Boolean IsOffside
59395933
FSharp.Compiler.Syntax.BlockSeparator: Boolean IsSemicolon
59405934
FSharp.Compiler.Syntax.BlockSeparator: Boolean get_IsComma()
5941-
FSharp.Compiler.Syntax.BlockSeparator: Boolean get_IsOffside()
59425935
FSharp.Compiler.Syntax.BlockSeparator: Boolean get_IsSemicolon()
5943-
FSharp.Compiler.Syntax.BlockSeparator: FSharp.Compiler.Syntax.BlockSeparator NewComma(FSharp.Compiler.Text.Range, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position])
5944-
FSharp.Compiler.Syntax.BlockSeparator: FSharp.Compiler.Syntax.BlockSeparator NewOffside(FSharp.Compiler.Text.Range, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position])
5945-
FSharp.Compiler.Syntax.BlockSeparator: FSharp.Compiler.Syntax.BlockSeparator NewSemicolon(FSharp.Compiler.Text.Range, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position])
5936+
FSharp.Compiler.Syntax.BlockSeparator: FSharp.Compiler.Syntax.BlockSeparator NewComma(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Position)
5937+
FSharp.Compiler.Syntax.BlockSeparator: FSharp.Compiler.Syntax.BlockSeparator NewSemicolon(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Position)
59465938
FSharp.Compiler.Syntax.BlockSeparator: FSharp.Compiler.Syntax.BlockSeparator+Comma
5947-
FSharp.Compiler.Syntax.BlockSeparator: FSharp.Compiler.Syntax.BlockSeparator+Offside
59485939
FSharp.Compiler.Syntax.BlockSeparator: FSharp.Compiler.Syntax.BlockSeparator+Semicolon
59495940
FSharp.Compiler.Syntax.BlockSeparator: FSharp.Compiler.Syntax.BlockSeparator+Tags
5941+
FSharp.Compiler.Syntax.BlockSeparator: FSharp.Compiler.Text.Position Position
5942+
FSharp.Compiler.Syntax.BlockSeparator: FSharp.Compiler.Text.Position get_Position()
59505943
FSharp.Compiler.Syntax.BlockSeparator: FSharp.Compiler.Text.Range Range
59515944
FSharp.Compiler.Syntax.BlockSeparator: FSharp.Compiler.Text.Range get_Range()
59525945
FSharp.Compiler.Syntax.BlockSeparator: Int32 Tag
59535946
FSharp.Compiler.Syntax.BlockSeparator: Int32 get_Tag()
5954-
FSharp.Compiler.Syntax.BlockSeparator: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position] Position
5955-
FSharp.Compiler.Syntax.BlockSeparator: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position] get_Position()
59565947
FSharp.Compiler.Syntax.BlockSeparator: System.String ToString()
59575948
FSharp.Compiler.Syntax.DebugPointAtBinding+Tags: Int32 NoneAtDo
59585949
FSharp.Compiler.Syntax.DebugPointAtBinding+Tags: Int32 NoneAtInvisible

0 commit comments

Comments
 (0)