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
5 changes: 3 additions & 2 deletions src/Compiler/pars.fsy
Original file line number Diff line number Diff line change
Expand Up @@ -6570,8 +6570,9 @@ pathOp:
| ident DOT pathOp
{ prependIdentInLongIdentWithTrivia (SynIdent($1, None)) (rhs parseState 2) $3 }

| ident DOT error
{ (* silent recovery *) SynLongIdent([$1], [rhs parseState 2], [None]) }
| ident DOT ends_coming_soon_or_recover
{ if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsIdentifierExpected())
SynLongIdent([$1], [rhs parseState 2], [None]) }


/* nameop is identOrOp not used as part of a path */
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module Module

{ new T() with
override _.P1 = 1 }
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
ImplFile
(ParsedImplFileInput
("/root/Expression/Object - Class 01.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(ObjExpr
(LongIdent (SynLongIdent ([T], [], [None])),
Some (Const (Unit, (3,7--3,9)), None), Some (3,10--3,14), [],
[Member
(SynBinding
(None, Normal, false, false, [],
PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector),
SynValData
(Some { IsInstance = true
IsDispatchSlot = false
IsOverrideOrExplicitImpl = true
IsFinal = false
GetterOrSetterIsCompilerGenerated = false
MemberKind = Member },
SynValInfo
([[SynArgInfo ([], false, None)]; []],
SynArgInfo ([], false, None)), None, None),
LongIdent
(SynLongIdent ([_; P1], [(4,14--4,15)], [None; None]),
None, None, Pats [], None, (4,13--4,17)), None,
Const (Int32 1, (4,20--4,21)), (4,13--4,17),
NoneAtInvisible, { LeadingKeyword = Override (4,4--4,12)
InlineKeyword = None
EqualsRange = Some (4,18--4,19) }),
(4,4--4,21))], [], (3,2--3,9), (3,0--4,23)), (3,0--4,23))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--4,23), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module Module

{ new T() with
override _.P1 = 1

interface I with
member _.P2 = 2 }
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
ImplFile
(ParsedImplFileInput
("/root/Expression/Object - Class 02.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(ObjExpr
(LongIdent (SynLongIdent ([T], [], [None])),
Some (Const (Unit, (3,7--3,9)), None), Some (3,10--3,14), [],
[Member
(SynBinding
(None, Normal, false, false, [],
PreXmlDoc ((4,6), FSharp.Compiler.Xml.XmlDocCollector),
SynValData
(Some { IsInstance = true
IsDispatchSlot = false
IsOverrideOrExplicitImpl = true
IsFinal = false
GetterOrSetterIsCompilerGenerated = false
MemberKind = Member },
SynValInfo
([[SynArgInfo ([], false, None)]; []],
SynArgInfo ([], false, None)), None, None),
LongIdent
(SynLongIdent ([_; P1], [(4,16--4,17)], [None; None]),
None, None, Pats [], None, (4,15--4,19)), None,
Const (Int32 1, (4,22--4,23)), (4,15--4,19),
NoneAtInvisible, { LeadingKeyword = Override (4,6--4,14)
InlineKeyword = None
EqualsRange = Some (4,20--4,21) }),
(4,6--4,23))],
[SynInterfaceImpl
(LongIdent (SynLongIdent ([I], [], [None])),
Some (6,14--6,18), [],
[Member
(SynBinding
(None, Normal, false, false, [],
PreXmlDoc ((7,6), FSharp.Compiler.Xml.XmlDocCollector),
SynValData
(Some { IsInstance = true
IsDispatchSlot = false
IsOverrideOrExplicitImpl = true
IsFinal = false
GetterOrSetterIsCompilerGenerated = false
MemberKind = Member },
SynValInfo
([[SynArgInfo ([], false, None)]; []],
SynArgInfo ([], false, None)), None, None),
LongIdent
(SynLongIdent
([_; P2], [(7,14--7,15)], [None; None]), None,
None, Pats [], None, (7,13--7,17)), None,
Const (Int32 2, (7,20--7,21)), (7,13--7,17),
NoneAtInvisible,
{ LeadingKeyword = Member (7,6--7,12)
InlineKeyword = None
EqualsRange = Some (7,18--7,19) }), (7,6--7,21))],
(6,2--7,21))], (3,2--3,9), (3,0--7,23)), (3,0--7,23))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--7,23), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
10 changes: 10 additions & 0 deletions tests/service/data/SyntaxTree/Expression/Object - Class 03.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module Module

{ new T() with
override _.P1 = 1

interface I1 with
member _.P2 = 2

interface I2 with
member _.P3 = 3 }
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
ImplFile
(ParsedImplFileInput
("/root/Expression/Object - Class 03.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(ObjExpr
(LongIdent (SynLongIdent ([T], [], [None])),
Some (Const (Unit, (3,7--3,9)), None), Some (3,10--3,14), [],
[Member
(SynBinding
(None, Normal, false, false, [],
PreXmlDoc ((4,6), FSharp.Compiler.Xml.XmlDocCollector),
SynValData
(Some { IsInstance = true
IsDispatchSlot = false
IsOverrideOrExplicitImpl = true
IsFinal = false
GetterOrSetterIsCompilerGenerated = false
MemberKind = Member },
SynValInfo
([[SynArgInfo ([], false, None)]; []],
SynArgInfo ([], false, None)), None, None),
LongIdent
(SynLongIdent ([_; P1], [(4,16--4,17)], [None; None]),
None, None, Pats [], None, (4,15--4,19)), None,
Const (Int32 1, (4,22--4,23)), (4,15--4,19),
NoneAtInvisible, { LeadingKeyword = Override (4,6--4,14)
InlineKeyword = None
EqualsRange = Some (4,20--4,21) }),
(4,6--4,23))],
[SynInterfaceImpl
(LongIdent (SynLongIdent ([I1], [], [None])),
Some (6,15--6,19), [],
[Member
(SynBinding
(None, Normal, false, false, [],
PreXmlDoc ((7,6), FSharp.Compiler.Xml.XmlDocCollector),
SynValData
(Some { IsInstance = true
IsDispatchSlot = false
IsOverrideOrExplicitImpl = true
IsFinal = false
GetterOrSetterIsCompilerGenerated = false
MemberKind = Member },
SynValInfo
([[SynArgInfo ([], false, None)]; []],
SynArgInfo ([], false, None)), None, None),
LongIdent
(SynLongIdent
([_; P2], [(7,14--7,15)], [None; None]), None,
None, Pats [], None, (7,13--7,17)), None,
Const (Int32 2, (7,20--7,21)), (7,13--7,17),
NoneAtInvisible,
{ LeadingKeyword = Member (7,6--7,12)
InlineKeyword = None
EqualsRange = Some (7,18--7,19) }), (7,6--7,21))],
(6,2--7,21));
SynInterfaceImpl
(LongIdent (SynLongIdent ([I2], [], [None])),
Some (9,15--9,19), [],
[Member
(SynBinding
(None, Normal, false, false, [],
PreXmlDoc ((10,6), FSharp.Compiler.Xml.XmlDocCollector),
SynValData
(Some { IsInstance = true
IsDispatchSlot = false
IsOverrideOrExplicitImpl = true
IsFinal = false
GetterOrSetterIsCompilerGenerated = false
MemberKind = Member },
SynValInfo
([[SynArgInfo ([], false, None)]; []],
SynArgInfo ([], false, None)), None, None),
LongIdent
(SynLongIdent
([_; P3], [(10,14--10,15)], [None; None]), None,
None, Pats [], None, (10,13--10,17)), None,
Const (Int32 3, (10,20--10,21)), (10,13--10,17),
NoneAtInvisible,
{ LeadingKeyword = Member (10,6--10,12)
InlineKeyword = None
EqualsRange = Some (10,18--10,19) }),
(10,6--10,21))], (9,2--10,21))], (3,2--3,9),
(3,0--10,23)), (3,0--10,23))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--10,23), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module Module

{ new T() with }

()
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
ImplFile
(ParsedImplFileInput
("/root/Expression/Object - Class 04.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(ObjExpr
(LongIdent (SynLongIdent ([T], [], [None])),
Some (Const (Unit, (3,7--3,9)), None), Some (3,10--3,14), [],
[], [], (3,2--3,9), (3,0--3,16)), (3,0--3,16));
Expr (Const (Unit, (5,0--5,2)), (5,0--5,2))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--5,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(3,15)-(3,16) parse error Incomplete structured construct at or before this point in binding
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module Module

{ new T() with
}

()
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
ImplFile
(ParsedImplFileInput
("/root/Expression/Object - Class 05.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(ObjExpr
(LongIdent (SynLongIdent ([T], [], [None])),
Some (Const (Unit, (3,7--3,9)), None), Some (3,10--3,14), [],
[], [], (3,2--3,9), (3,0--4,6)), (3,0--4,6));
Expr (Const (Unit, (6,0--6,2)), (6,0--6,2))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--6,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(4,5)-(4,6) parse error Incomplete structured construct at or before this point in binding
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module Module

{ new T() with
member }

()
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
ImplFile
(ParsedImplFileInput
("/root/Expression/Object - Class 06.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(ObjExpr
(LongIdent (SynLongIdent ([T], [], [None])),
Some (Const (Unit, (3,7--3,9)), None), Some (3,10--3,14), [],
[], [], (3,2--3,9), (3,0--4,13)), (3,0--4,13));
Expr (Const (Unit, (6,0--6,2)), (6,0--6,2))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--6,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(4,12)-(4,13) parse error Incomplete structured construct at or before this point in object expression
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module Module

{ new T() with
member this }

()
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
ImplFile
(ParsedImplFileInput
("/root/Expression/Object - Class 07.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(ObjExpr
(LongIdent (SynLongIdent ([T], [], [None])),
Some (Const (Unit, (3,7--3,9)), None), Some (3,10--3,14), [],
[Member
(SynBinding
(None, Normal, false, false, [],
PreXmlDoc ((4,5), FSharp.Compiler.Xml.XmlDocCollector),
SynValData
(Some { IsInstance = true
IsDispatchSlot = false
IsOverrideOrExplicitImpl = true
IsFinal = false
GetterOrSetterIsCompilerGenerated = false
MemberKind = Member },
SynValInfo
([[SynArgInfo ([], false, None)]; []],
SynArgInfo ([], false, None)), None, None),
Named (SynIdent (this, None), false, None, (4,12--4,16)),
None, ArbitraryAfterError ("memberCore2", (4,16--4,16)),
(4,12--4,16), NoneAtInvisible,
{ LeadingKeyword = Member (4,5--4,11)
InlineKeyword = None
EqualsRange = None }), (4,5--4,16))], [], (3,2--3,9),
(3,0--4,18)), (3,0--4,18));
Expr (Const (Unit, (6,0--6,2)), (6,0--6,2))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--6,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(4,17)-(4,18) parse error Incomplete structured construct at or before this point in object expression. Expected 'with', '=' or other token.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module Module

{ new T() with
member this. }

()
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
ImplFile
(ParsedImplFileInput
("/root/Expression/Object - Class 08.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(ObjExpr
(LongIdent (SynLongIdent ([T], [], [None])),
Some (Const (Unit, (3,7--3,9)), None), Some (3,10--3,14), [],
[Member
(SynBinding
(None, Normal, false, false, [],
PreXmlDoc ((4,5), FSharp.Compiler.Xml.XmlDocCollector),
SynValData
(Some { IsInstance = true
IsDispatchSlot = false
IsOverrideOrExplicitImpl = true
IsFinal = false
GetterOrSetterIsCompilerGenerated = false
MemberKind = Member },
SynValInfo
([[SynArgInfo ([], false, None)]; []],
SynArgInfo ([], false, None)), None, None),
Named (SynIdent (this, None), false, None, (4,12--4,16)),
None, ArbitraryAfterError ("memberCore2", (4,16--4,16)),
(4,12--4,19), NoneAtInvisible,
{ LeadingKeyword = Member (4,5--4,11)
InlineKeyword = None
EqualsRange = None }), (4,5--4,16))], [], (3,2--3,9),
(3,0--4,19)), (3,0--4,19));
Expr (Const (Unit, (6,0--6,2)), (6,0--6,2))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--6,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(4,18)-(4,19) parse error Identifier expected
(4,18)-(4,19) parse error Incomplete structured construct at or before this point in object expression. Expected 'with', '=' or other token.
Loading