Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 16 additions & 35 deletions src/Compiler/Checking/CheckExpressions.fs
Original file line number Diff line number Diff line change
Expand Up @@ -4935,9 +4935,9 @@ and ConvSynPatToSynExpr synPat =
| SynPat.LongIdent (longDotId=SynLongIdent(longId, dotms, trivia) as synLongId; argPats=args; accessibility=None; range=m) ->
let args = match args with SynArgPats.Pats args -> args | _ -> failwith "impossible: active patterns can be used only with SynConstructorArgs.Pats"
let e =
if dotms.Length = longId.Length then
if not dotms.IsEmpty && dotms.Length = longId.Length then
let e = SynExpr.LongIdent (false, SynLongIdent(longId, List.truncate (dotms.Length - 1) dotms, trivia), None, m)
SynExpr.DiscardAfterMissingQualificationAfterDot (e, unionRanges e.Range (List.last dotms))
SynExpr.DiscardAfterMissingQualificationAfterDot (e, List.last dotms, unionRanges e.Range (List.last dotms))
else SynExpr.LongIdent (false, synLongId, None, m)
List.fold (fun f x -> mkSynApp1 f (ConvSynPatToSynExpr x) m) e args

Expand Down Expand Up @@ -5231,7 +5231,7 @@ and TcExprThen (cenv: cenv) overallTy env tpenv isArg synExpr delayed =
// etc.
| SynExpr.DotGet (expr1, _, SynLongIdent(longId, _, _), _) ->
TcNonControlFlowExpr env <| fun env ->
TcExprThen cenv overallTy env tpenv false expr1 ((DelayedDotLookup (longId, synExpr.RangeWithoutAnyExtraDot)) :: delayed)
TcExprThen cenv overallTy env tpenv false expr1 ((DelayedDotLookup (longId, synExpr.Range)) :: delayed)

// expr1.[expr2]
// expr1.[e21, ..., e2n]
Expand Down Expand Up @@ -5602,7 +5602,7 @@ and TcExprUndelayed (cenv: cenv) (overallTy: OverallTy) env tpenv (synExpr: SynE
//SolveTypeAsError cenv env.DisplayEnv m overallTy
mkDefault(m, overallTy.Commit), tpenv

| SynExpr.DiscardAfterMissingQualificationAfterDot (expr1, m) ->
| SynExpr.DiscardAfterMissingQualificationAfterDot (expr1, _, m) ->
let _, _, tpenv = suppressErrorReporting (fun () -> TcExprOfUnknownTypeThen cenv env tpenv expr1 [DelayedDot])
mkDefault(m, overallTy.Commit), tpenv

Expand Down Expand Up @@ -6007,45 +6007,26 @@ and TcExprStaticOptimization (cenv: cenv) overallTy env tpenv (constraints, synE
/// synExpr1.longId <- synExpr2
and TcExprDotSet (cenv: cenv) overallTy env tpenv (synExpr1, synLongId, synExpr2, mStmt) =
let (SynLongIdent(longId, _, _)) = synLongId

if synLongId.ThereIsAnExtraDotAtTheEnd then
// just drop rhs on the floor
let mExprAndDotLookup = unionRanges synExpr1.Range (rangeOfLid longId)
TcExprThen cenv overallTy env tpenv false synExpr1 [DelayedDotLookup(longId, mExprAndDotLookup)]
else
let mExprAndDotLookup = unionRanges synExpr1.Range (rangeOfLid longId)
TcExprThen cenv overallTy env tpenv false synExpr1 [DelayedDotLookup(longId, mExprAndDotLookup); MakeDelayedSet(synExpr2, mStmt)]
let mExprAndDotLookup = unionRanges synExpr1.Range (rangeOfLid longId)
TcExprThen cenv overallTy env tpenv false synExpr1 [DelayedDotLookup(longId, mExprAndDotLookup); MakeDelayedSet(synExpr2, mStmt)]

/// synExpr1.longId(synExpr2) <- expr3, very rarely used named property setters
and TcExprDotNamedIndexedPropertySet (cenv: cenv) overallTy env tpenv (synExpr1, synLongId, synExpr2, expr3, mStmt) =
let (SynLongIdent(longId, _, _)) = synLongId
if synLongId.ThereIsAnExtraDotAtTheEnd then
// just drop rhs on the floor
let mExprAndDotLookup = unionRanges synExpr1.Range (rangeOfLid longId)
TcExprThen cenv overallTy env tpenv false synExpr1 [DelayedDotLookup(longId, mExprAndDotLookup)]
else
let mExprAndDotLookup = unionRanges synExpr1.Range (rangeOfLid longId)
TcExprThen cenv overallTy env tpenv false synExpr1
[ DelayedDotLookup(longId, mExprAndDotLookup);
DelayedApp(ExprAtomicFlag.Atomic, false, None, synExpr2, mStmt)
MakeDelayedSet(expr3, mStmt)]
let mExprAndDotLookup = unionRanges synExpr1.Range (rangeOfLid longId)
TcExprThen cenv overallTy env tpenv false synExpr1
[ DelayedDotLookup(longId, mExprAndDotLookup);
DelayedApp(ExprAtomicFlag.Atomic, false, None, synExpr2, mStmt)
MakeDelayedSet(expr3, mStmt)]

and TcExprLongIdentSet (cenv: cenv) overallTy env tpenv (synLongId, synExpr2, m) =
if synLongId.ThereIsAnExtraDotAtTheEnd then
// just drop rhs on the floor
TcLongIdentThen cenv overallTy env tpenv synLongId [ ]
else
TcLongIdentThen cenv overallTy env tpenv synLongId [ MakeDelayedSet(synExpr2, m) ]
TcLongIdentThen cenv overallTy env tpenv synLongId [ MakeDelayedSet(synExpr2, m) ]

// Type.Items(synExpr1) <- synExpr2
and TcExprNamedIndexPropertySet (cenv: cenv) overallTy env tpenv (synLongId, synExpr1, synExpr2, mStmt) =
if synLongId.ThereIsAnExtraDotAtTheEnd then
// just drop rhs on the floor
TcLongIdentThen cenv overallTy env tpenv synLongId [ ]
else
TcLongIdentThen cenv overallTy env tpenv synLongId
[ DelayedApp(ExprAtomicFlag.Atomic, false, None, synExpr1, mStmt)
MakeDelayedSet(synExpr2, mStmt) ]
TcLongIdentThen cenv overallTy env tpenv synLongId
[ DelayedApp(ExprAtomicFlag.Atomic, false, None, synExpr1, mStmt)
MakeDelayedSet(synExpr2, mStmt) ]

and TcExprTraitCall (cenv: cenv) overallTy env tpenv (synTypes, synMemberSig, arg, m) =
let g = cenv.g
Expand Down Expand Up @@ -8018,7 +7999,7 @@ and TcNameOfExpr (cenv: cenv) env tpenv (synArg: SynExpr) =
// expr.ID allowed
| SynExpr.DotGet (hd, _, SynLongIdent(longId, _, _), _) ->
let result = defaultArg resultOpt (List.last longId)
check overallTyOpt (Some result) hd ((DelayedDotLookup (longId, expr.RangeWithoutAnyExtraDot)) :: delayed)
check overallTyOpt (Some result) hd ((DelayedDotLookup (longId, expr.Range)) :: delayed)

// "(expr)" allowed with no subsequent qualifications
| SynExpr.Paren(expr, _, _, _) when delayed.IsEmpty && overallTyOpt.IsNone ->
Expand Down
2 changes: 1 addition & 1 deletion src/Compiler/Service/FSharpParseFileResults.fs
Original file line number Diff line number Diff line change
Expand Up @@ -622,7 +622,7 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput,
| SynExpr.ArrayOrListComputed (_, e, _)
| SynExpr.Typed (e, _, _)
| SynExpr.FromParseError (e, _)
| SynExpr.DiscardAfterMissingQualificationAfterDot (e, _)
| SynExpr.DiscardAfterMissingQualificationAfterDot (e, _, _)
| SynExpr.Do (e, _)
| SynExpr.Assert (e, _)
| SynExpr.Fixed (e, _)
Expand Down
2 changes: 1 addition & 1 deletion src/Compiler/Service/ServiceInterfaceStubGenerator.fs
Original file line number Diff line number Diff line change
Expand Up @@ -969,7 +969,7 @@ module InterfaceStubGenerator =
| SynExpr.ArbitraryAfterError (_debugStr, _range) -> None

| SynExpr.FromParseError (synExpr, _range)
| SynExpr.DiscardAfterMissingQualificationAfterDot (synExpr, _range) -> walkExpr synExpr
| SynExpr.DiscardAfterMissingQualificationAfterDot (synExpr, _, _range) -> walkExpr synExpr

| _ -> None

Expand Down
5 changes: 2 additions & 3 deletions src/Compiler/Service/ServiceParseTreeWalk.fs
Original file line number Diff line number Diff line change
Expand Up @@ -547,8 +547,7 @@ module SyntaxTraversal =

let ok =
match isPartOfArrayOrList, synExpr with
| false, SynExpr.Ident ident -> visitor.VisitRecordField(path, None, Some(SynLongIdent([ ident ], [], [ None ])))
| false, SynExpr.LongIdent (false, lidwd, _, _) -> visitor.VisitRecordField(path, None, Some lidwd)
| false, LongOrSingleIdent (_, lid, _, _) -> visitor.VisitRecordField(path, None, Some lid)
| _ -> None

if ok.IsSome then ok else traverseSynExpr synExpr
Expand Down Expand Up @@ -783,7 +782,7 @@ module SyntaxTraversal =

| SynExpr.FromParseError (synExpr, _range) -> traverseSynExpr synExpr

| SynExpr.DiscardAfterMissingQualificationAfterDot (synExpr, _range) -> traverseSynExpr synExpr
| SynExpr.DiscardAfterMissingQualificationAfterDot (synExpr, _, _range) -> traverseSynExpr synExpr

visitor.VisitExpr(origPath, traverseSynExpr origPath, defaultTraverse, expr)

Expand Down
6 changes: 3 additions & 3 deletions src/Compiler/Service/ServiceParsedInputOps.fs
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ module ParsedInput =
Some(unionRanges synExpr.Range r)

// get this for e.g. "bar()."
| SynExpr.DiscardAfterMissingQualificationAfterDot (synExpr, _) ->
| SynExpr.DiscardAfterMissingQualificationAfterDot (synExpr, _, _) ->
if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then
traverseSynExpr synExpr
else
Expand Down Expand Up @@ -466,7 +466,7 @@ module ParsedInput =

if not (rangeContainsPos expr.Range pos) then
match expr with
| SynExpr.DiscardAfterMissingQualificationAfterDot (e, _m) ->
| SynExpr.DiscardAfterMissingQualificationAfterDot (e, _, _m) ->
// This happens with e.g. "f(x) . $" when you bring up a completion list a few spaces after a dot. The cursor is not 'in the parse tree',
// but the dive algorithm will dive down into this node, and this is the one case where we do want to give a result despite the cursor
// not properly being in a node.
Expand Down Expand Up @@ -540,7 +540,7 @@ module ParsedInput =
// the cursor is left of the dot
None

| SynExpr.DiscardAfterMissingQualificationAfterDot (e, m) ->
| SynExpr.DiscardAfterMissingQualificationAfterDot (e, _, m) ->
match traverseSynExpr e with
| None ->
if posEq m.End pos then
Expand Down
10 changes: 2 additions & 8 deletions src/Compiler/SyntaxTree/SyntaxTree.fs
Original file line number Diff line number Diff line change
Expand Up @@ -701,7 +701,7 @@ type SynExpr =

| FromParseError of expr: SynExpr * range: range

| DiscardAfterMissingQualificationAfterDot of expr: SynExpr * range: range
| DiscardAfterMissingQualificationAfterDot of expr: SynExpr * dotRange: range * range: range

| Fixed of expr: SynExpr * range: range

Expand Down Expand Up @@ -787,13 +787,7 @@ type SynExpr =

member e.RangeWithoutAnyExtraDot =
match e with
| SynExpr.DotGet (expr, _, lidwd, m) ->
if lidwd.ThereIsAnExtraDotAtTheEnd then
unionRanges expr.Range lidwd.RangeWithoutAnyExtraDot
else
m
| SynExpr.LongIdent (_, lidwd, _, _) -> lidwd.RangeWithoutAnyExtraDot
| SynExpr.DiscardAfterMissingQualificationAfterDot (expr, _) -> expr.Range
| SynExpr.DiscardAfterMissingQualificationAfterDot (expr, _, _) -> expr.Range
| _ -> e.Range

member e.RangeOfFirstPortion =
Expand Down
2 changes: 1 addition & 1 deletion src/Compiler/SyntaxTree/SyntaxTree.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -905,7 +905,7 @@ type SynExpr =
| FromParseError of expr: SynExpr * range: range

/// Inserted for error recovery when there is "expr." and missing tokens or error recovery after the dot
| DiscardAfterMissingQualificationAfterDot of expr: SynExpr * range: range
| DiscardAfterMissingQualificationAfterDot of expr: SynExpr * dotRange: range * range: range

/// 'use x = fixed expr'
| Fixed of expr: SynExpr * range: range
Expand Down
18 changes: 10 additions & 8 deletions src/Compiler/SyntaxTree/SyntaxTreeOps.fs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,14 @@ let (|LongOrSingleIdent|_|) inp =
match inp with
| SynExpr.LongIdent (isOpt, lidwd, altId, _m) -> Some(isOpt, lidwd, altId, lidwd.RangeWithoutAnyExtraDot)
| SynExpr.Ident id -> Some(false, SynLongIdent([ id ], [], [ None ]), None, id.idRange)

| SynExpr.DiscardAfterMissingQualificationAfterDot (synExpr, dotRange, _) ->
match synExpr with
| SynExpr.Ident ident -> Some(false, SynLongIdent([ ident ], [ dotRange ], [ None ]), None, ident.idRange)
| SynExpr.LongIdent (false, SynLongIdent (idents, dotRanges, trivia), _, range) ->
Some(false, SynLongIdent(idents, dotRanges @ [ dotRange ], trivia), None, range)
| _ -> None

| _ -> None

let (|SingleIdent|_|) inp =
Expand Down Expand Up @@ -463,14 +471,8 @@ let mkSynDot mDot m l (SynIdent (r, rTrivia)) =
SynExpr.DotGet(e, dm, SynLongIdent(lid @ [ r ], dots @ [ mDot ], trivia @ [ rTrivia ]), m)
| expr -> SynExpr.DotGet(expr, mDot, SynLongIdent([ r ], [], [ rTrivia ]), m)

let mkSynDotMissing mDot m l =
match l with
| SynExpr.LongIdent (isOpt, SynLongIdent (lid, dots, trivia), None, _) ->
// REVIEW: MEMORY PERFORMANCE: This list operation is memory intensive (we create a lot of these list nodes)
SynExpr.LongIdent(isOpt, SynLongIdent(lid, dots @ [ mDot ], trivia), None, m)
| SynExpr.Ident id -> SynExpr.LongIdent(false, SynLongIdent([ id ], [ mDot ], [ None ]), None, m)
| SynExpr.DotGet (e, dm, SynLongIdent (lid, dots, trivia), _) -> SynExpr.DotGet(e, dm, SynLongIdent(lid, dots @ [ mDot ], trivia), m) // REVIEW: MEMORY PERFORMANCE: This is memory intensive (we create a lot of these list nodes)
| expr -> SynExpr.DiscardAfterMissingQualificationAfterDot(expr, m)
let mkSynDotMissing (mDot: range) (m: range) (expr: SynExpr) =
SynExpr.DiscardAfterMissingQualificationAfterDot(expr, mDot, unionRanges mDot m)

let mkSynFunMatchLambdas synArgNameGenerator isMember wholem ps arrow e =
let _, e = PushCurriedPatternsToExpr synArgNameGenerator wholem isMember ps arrow e
Expand Down
2 changes: 1 addition & 1 deletion src/Compiler/SyntaxTree/SyntaxTreeOps.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ val mkSynAssign: l: SynExpr -> r: SynExpr -> SynExpr

val mkSynDot: mDot: range -> m: range -> l: SynExpr -> r: SynIdent -> SynExpr

val mkSynDotMissing: mDot: range -> m: range -> l: SynExpr -> SynExpr
val mkSynDotMissing: mDot: range -> m: range -> expr: SynExpr -> SynExpr

val mkSynFunMatchLambdas:
synArgNameGenerator: SynArgNameGenerator ->
Expand Down
8 changes: 4 additions & 4 deletions src/Compiler/pars.fsy
Original file line number Diff line number Diff line change
Expand Up @@ -4378,12 +4378,12 @@ atomicExprQualification:
reportParseErrorAt mDot (FSComp.SR.parsMissingQualificationAfterDot())
let fixedLhsm = mkRange mLhs.FileName mLhs.Start mDot.End // previous mLhs is wrong after 'recover'
mkSynDotMissing mDot fixedLhsm e) }
| recover
{ (fun e mLhs mDot ->
reportParseErrorAt mDot (FSComp.SR.parsMissingQualificationAfterDot())
| recover
{ (fun e mLhs mDot ->
reportParseErrorAt mDot (FSComp.SR.parsMissingQualificationAfterDot())
let fixedLhsm = mkRange mLhs.FileName mLhs.Start mDot.End // previous mLhs is wrong after 'recover'
// Include 'e' in the returned expression but throw it away
SynExpr.DiscardAfterMissingQualificationAfterDot (e, fixedLhsm)) }
mkSynDotMissing mDot fixedLhsm e) }
| LPAREN COLON_COLON rparen DOT INT32
{ (fun e mLhs mDot ->
if parseState.LexBuffer.ReportLibraryOnlyFeatures then libraryOnlyError(lhs parseState)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6218,6 +6218,8 @@ FSharp.Compiler.Syntax.SynExpr+DebugPoint: FSharp.Compiler.Syntax.SynExpr get_in
FSharp.Compiler.Syntax.SynExpr+DebugPoint: FSharp.Compiler.Syntax.SynExpr innerExpr
FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Syntax.SynExpr expr
FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Syntax.SynExpr get_expr()
FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Text.Range dotRange
FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Text.Range get_dotRange()
FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Text.Range get_range()
FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Text.Range range
FSharp.Compiler.Syntax.SynExpr+Do: FSharp.Compiler.Syntax.SynExpr expr
Expand Down Expand Up @@ -6912,7 +6914,7 @@ FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewAssert(FSharp.
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewComputationExpr(Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewConst(FSharp.Compiler.Syntax.SynConst, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDebugPoint(FSharp.Compiler.Syntax.DebugPointAtLeafExpr, Boolean, FSharp.Compiler.Syntax.SynExpr)
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDiscardAfterMissingQualificationAfterDot(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDiscardAfterMissingQualificationAfterDot(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDo(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDoBang(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDotGet(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.SynLongIdent, FSharp.Compiler.Text.Range)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6218,6 +6218,8 @@ FSharp.Compiler.Syntax.SynExpr+DebugPoint: FSharp.Compiler.Syntax.SynExpr get_in
FSharp.Compiler.Syntax.SynExpr+DebugPoint: FSharp.Compiler.Syntax.SynExpr innerExpr
FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Syntax.SynExpr expr
FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Syntax.SynExpr get_expr()
FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Text.Range dotRange
FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Text.Range get_dotRange()
FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Text.Range get_range()
FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Text.Range range
FSharp.Compiler.Syntax.SynExpr+Do: FSharp.Compiler.Syntax.SynExpr expr
Expand Down Expand Up @@ -6912,7 +6914,7 @@ FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewAssert(FSharp.
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewComputationExpr(Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewConst(FSharp.Compiler.Syntax.SynConst, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDebugPoint(FSharp.Compiler.Syntax.DebugPointAtLeafExpr, Boolean, FSharp.Compiler.Syntax.SynExpr)
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDiscardAfterMissingQualificationAfterDot(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDiscardAfterMissingQualificationAfterDot(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDo(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDoBang(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDotGet(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.SynLongIdent, FSharp.Compiler.Text.Range)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{| A = 1 |}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
ImplFile
(ParsedImplFileInput
("/root/Expression/Record - Anon - Field 01.fs", false,
QualifiedNameOfFile Record - Anon - Field 01, [], [],
[SynModuleOrNamespace
([Record - Anon - Field 01], false, AnonModule,
[Expr
(AnonRecd
(false, None,
[(A, Some (1,5--1,6), Const (Int32 1, (1,7--1,8)))],
(1,0--1,11), { OpeningBraceRange = (1,0--1,2) }), (1,0--1,11))],
PreXmlDocEmpty, [], None, (1,0--1,11), { LeadingKeyword = None })],
(true, false), { ConditionalDirectives = []
CodeComments = [] }, set []))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{| A = |}
Loading