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
15 changes: 11 additions & 4 deletions src/Compiler/pars.fsy
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ let parse_error_rich = Some(fun (ctxt: ParseErrorContext<_>) ->
%type <SynExpr> argExpr
%type <SynExpr> declExprBlock
%type <SynPat> headBindingPattern
%type <SynType> atomTypeNonAtomicDeprecated
%type <SynExpr> atomicExprAfterType
%type <SynExpr> typedSequentialExprBlock
%type <SynExpr * bool> atomicExpr
Expand Down Expand Up @@ -973,8 +974,14 @@ classMemberSpfn:
SynMemberSig.Interface($4, unionRanges (rhs parseState 3) ($4).Range) }

| opt_attributes opt_access INHERIT appType
{ if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2))
SynMemberSig.Inherit($4, unionRanges (rhs parseState 3) ($4).Range) }
{ if Option.isSome $2 then errorR (Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier (), rhs parseState 2))
SynMemberSig.Inherit($4, unionRanges (rhs parseState 1) $4.Range) }

| opt_attributes opt_access INHERIT recover
{ if Option.isSome $2 then errorR (Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier (), rhs parseState 2))
let mInherit = rhs parseState 3
let ty = SynType.FromParseError(mInherit.EndRange)
SynMemberSig.Inherit(ty, unionRanges (rhs parseState 1) mInherit) }

| opt_attributes opt_access VAL fieldDecl
{ let mWhole = rhs2 parseState 1 4
Expand Down Expand Up @@ -2133,7 +2140,7 @@ opt_classDefn:
/* An 'inherits' definition in an object type definition */
inheritsDefn:
| INHERIT atomTypeNonAtomicDeprecated optBaseSpec
{ let mDecl = unionRanges (rhs parseState 1) (($2): SynType).Range
{ let mDecl = unionRanges (rhs parseState 1) $2.Range
SynMemberDefn.Inherit($2, $3, mDecl) }

| INHERIT atomTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP atomicExprAfterType optBaseSpec
Expand All @@ -2142,7 +2149,7 @@ inheritsDefn:

| INHERIT ends_coming_soon_or_recover
{ let mDecl = (rhs parseState 1)
if not $2 then errorR(Error(FSComp.SR.parsTypeNameCannotBeEmpty(), mDecl))
if not $2 then errorR (Error(FSComp.SR.parsTypeNameCannotBeEmpty (), mDecl))
SynMemberDefn.Inherit(SynType.LongIdent(SynLongIdent([], [], [])), None, mDecl) }

optAsSpec:
Expand Down
4 changes: 4 additions & 0 deletions tests/service/data/SyntaxTree/Member/Inherit 01.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module Module

type T =
inherit I
23 changes: 23 additions & 0 deletions tests/service/data/SyntaxTree/Member/Inherit 01.fs.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
ImplFile
(ParsedImplFileInput
("/root/Member/Inherit 01.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Types
([SynTypeDefn
(SynComponentInfo
([], None, [], [T],
PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector),
false, None, (3,5--3,6)),
ObjectModel
(Unspecified,
[Inherit
(LongIdent (SynLongIdent ([I], [], [None])), None,
(4,4--4,13))], (4,4--4,13)), [], None, (3,5--4,13),
{ LeadingKeyword = Type (3,0--3,4)
EqualsRange = Some (3,7--3,8)
WithKeyword = None })], (3,0--4,13))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--4,13), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
4 changes: 4 additions & 0 deletions tests/service/data/SyntaxTree/Member/Inherit 02.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module Module

type T1 =
inherit T2()
24 changes: 24 additions & 0 deletions tests/service/data/SyntaxTree/Member/Inherit 02.fs.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
ImplFile
(ParsedImplFileInput
("/root/Member/Inherit 02.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Types
([SynTypeDefn
(SynComponentInfo
([], None, [], [T1],
PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector),
false, None, (3,5--3,7)),
ObjectModel
(Unspecified,
[ImplicitInherit
(LongIdent (SynLongIdent ([T2], [], [None])),
Const (Unit, (4,14--4,16)), None, (4,4--4,16))],
(4,4--4,16)), [], None, (3,5--4,16),
{ LeadingKeyword = Type (3,0--3,4)
EqualsRange = Some (3,8--3,9)
WithKeyword = None })], (3,0--4,16))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--4,16), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
4 changes: 4 additions & 0 deletions tests/service/data/SyntaxTree/Member/Inherit 03.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module Module

type T =
inherit
25 changes: 25 additions & 0 deletions tests/service/data/SyntaxTree/Member/Inherit 03.fs.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
ImplFile
(ParsedImplFileInput
("/root/Member/Inherit 03.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Types
([SynTypeDefn
(SynComponentInfo
([], None, [], [T],
PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector),
false, None, (3,5--3,6)),
ObjectModel
(Unspecified,
[Inherit
(LongIdent (SynLongIdent ([], [], [])), None,
(4,4--4,11))], (4,4--4,11)), [], None, (3,5--4,11),
{ LeadingKeyword = Type (3,0--3,4)
EqualsRange = Some (3,7--3,8)
WithKeyword = None })], (3,0--4,11))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--4,11), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(4,4)-(4,11) parse error Type name cannot be empty.
6 changes: 6 additions & 0 deletions tests/service/data/SyntaxTree/Member/Inherit 04.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module Module

type T =
inherit

I
26 changes: 26 additions & 0 deletions tests/service/data/SyntaxTree/Member/Inherit 04.fs.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
ImplFile
(ParsedImplFileInput
("/root/Member/Inherit 04.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Types
([SynTypeDefn
(SynComponentInfo
([], None, [], [T],
PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector),
false, None, (3,5--3,6)),
ObjectModel
(Unspecified,
[Inherit
(LongIdent (SynLongIdent ([], [], [])), None,
(4,4--4,11))], (4,4--4,11)), [], None, (3,5--4,11),
{ LeadingKeyword = Type (3,0--3,4)
EqualsRange = Some (3,7--3,8)
WithKeyword = None })], (3,0--4,11));
Expr (Ident I, (6,0--6,1))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--6,1), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(4,4)-(4,11) parse error Type name cannot be empty.
6 changes: 6 additions & 0 deletions tests/service/data/SyntaxTree/Member/Inherit 05.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module Module

type T =
inherit

member this.P = 1
49 changes: 49 additions & 0 deletions tests/service/data/SyntaxTree/Member/Inherit 05.fs.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
ImplFile
(ParsedImplFileInput
("/root/Member/Inherit 05.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Types
([SynTypeDefn
(SynComponentInfo
([], None, [], [T],
PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector),
false, None, (3,5--3,6)),
ObjectModel
(Unspecified,
[Inherit
(LongIdent (SynLongIdent ([], [], [])), None,
(4,4--4,11));
Member
(SynBinding
(None, Normal, false, false, [],
PreXmlDoc ((6,4), FSharp.Compiler.Xml.XmlDocCollector),
SynValData
(Some { IsInstance = true
IsDispatchSlot = false
IsOverrideOrExplicitImpl = false
IsFinal = false
GetterOrSetterIsCompilerGenerated = false
MemberKind = Member },
SynValInfo
([[SynArgInfo ([], false, None)]; []],
SynArgInfo ([], false, None)), None),
LongIdent
(SynLongIdent
([this; P], [(6,15--6,16)], [None; None]), None,
None, Pats [], None, (6,11--6,17)), None,
Const (Int32 1, (6,20--6,21)), (6,11--6,17),
NoneAtInvisible,
{ LeadingKeyword = Member (6,4--6,10)
InlineKeyword = None
EqualsRange = Some (6,18--6,19) }), (6,4--6,21))],
(4,4--6,21)), [], None, (3,5--6,21),
{ LeadingKeyword = Type (3,0--3,4)
EqualsRange = Some (3,7--3,8)
WithKeyword = None })], (3,0--6,21))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--6,21), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(4,12)-(6,4) parse error Incomplete structured construct at or before this point in type definition
4 changes: 4 additions & 0 deletions tests/service/data/SyntaxTree/Member/Inherit 06.fsi
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module Module

type T =
inherit
24 changes: 24 additions & 0 deletions tests/service/data/SyntaxTree/Member/Inherit 06.fsi.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
SigFile
(ParsedSigFileInput
("/root/Member/Inherit 06.fsi", QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespaceSig
([Module], false, NamedModule,
[Types
([SynTypeDefnSig
(SynComponentInfo
([], None, [], [T],
PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector),
false, None, (3,5--3,6)),
ObjectModel
(Unspecified,
[Inherit (FromParseError (4,11--4,11), (4,4--4,11))],
(4,4--4,11)), [], (3,5--4,11),
{ LeadingKeyword = Type (3,0--3,4)
EqualsRange = Some (3,7--3,8)
WithKeyword = None })], (3,0--4,11))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--4,11), { LeadingKeyword = Module (1,0--1,6) })],
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(5,0)-(5,0) parse error Incomplete structured construct at or before this point in member signature
6 changes: 6 additions & 0 deletions tests/service/data/SyntaxTree/Member/Inherit 07.fsi
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module Module

type T =
inherit

member P: int
43 changes: 43 additions & 0 deletions tests/service/data/SyntaxTree/Member/Inherit 07.fsi.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
SigFile
(ParsedSigFileInput
("/root/Member/Inherit 07.fsi", QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespaceSig
([Module], false, NamedModule,
[Types
([SynTypeDefnSig
(SynComponentInfo
([], None, [], [T],
PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector),
false, None, (3,5--3,6)),
ObjectModel
(Unspecified,
[Inherit (FromParseError (4,11--4,11), (4,4--4,11));
Member
(SynValSig
([], SynIdent (P, None),
SynValTyparDecls (None, true),
LongIdent (SynLongIdent ([int], [], [None])),
SynValInfo ([], SynArgInfo ([], false, None)), false,
false,
PreXmlDoc ((6,4), FSharp.Compiler.Xml.XmlDocCollector),
None, None, (6,4--6,17),
{ LeadingKeyword = Member (6,4--6,10)
InlineKeyword = None
WithKeyword = None
EqualsRange = None }),
{ IsInstance = true
IsDispatchSlot = false
IsOverrideOrExplicitImpl = false
IsFinal = false
GetterOrSetterIsCompilerGenerated = false
MemberKind = PropertyGet }, (6,4--6,17),
{ GetSetKeywords = None })], (4,4--6,17)), [],
(3,5--6,17), { LeadingKeyword = Type (3,0--3,4)
EqualsRange = Some (3,7--3,8)
WithKeyword = None })], (3,0--6,17))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--6,17), { LeadingKeyword = Module (1,0--1,6) })],
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(4,12)-(6,4) parse error Incomplete structured construct at or before this point in member signature