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
1 change: 1 addition & 0 deletions src/Compiler/Driver/CompilerDiagnostics.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1468,6 +1468,7 @@ type Exception with
|> List.map Parser.tokenTagToTokenId
|> List.filter (function
| Parser.TOKEN_error
| Parser.TOKEN_OBLOCKSEP
| Parser.TOKEN_EOF -> false
| _ -> true)
|> List.map tokenIdToText
Expand Down
1 change: 1 addition & 0 deletions src/Compiler/FSComp.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1697,3 +1697,4 @@ featureEscapeBracesInFormattableString,"Escapes curly braces before calling Form
3565,parsExpectingType,"Expecting type"
featureInformationalObjInferenceDiagnostic,"Diagnostic 3559 (warn when obj inferred) at informational level, off by default"
3566,tcMultipleRecdTypeChoice,"Multiple type matches were found:\n%s\nThe type '%s' was used. Due to the overlapping field names\n%s\nconsider using type annotations or change the order of open statements."
3567,parsMissingMemberBody,"Expecting member body"
7 changes: 6 additions & 1 deletion src/Compiler/SyntaxTree/SyntaxTree.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1331,7 +1331,12 @@ type SynArgInfo =
type SynValTyparDecls = SynValTyparDecls of typars: SynTyparDecls option * canInfer: bool

[<NoEquality; NoComparison>]
type SynReturnInfo = SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range
type SynReturnInfo =
| SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range

member this.Range =
match this with
| SynReturnInfo (range = m) -> m

[<NoEquality; NoComparison>]
type SynExceptionDefnRepr =
Expand Down
5 changes: 4 additions & 1 deletion src/Compiler/SyntaxTree/SyntaxTree.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -1503,7 +1503,10 @@ type SynValTyparDecls = SynValTyparDecls of typars: SynTyparDecls option * canIn

/// Represents the syntactic elements associated with the "return" of a function or method.
[<NoEquality; NoComparison>]
type SynReturnInfo = SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range
type SynReturnInfo =
| SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range

member Range: range

/// Represents the right hand side of an exception declaration 'exception E = ... '
[<NoEquality; NoComparison>]
Expand Down
4 changes: 3 additions & 1 deletion src/Compiler/SyntaxTree/SyntaxTrivia.fs
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ type SynLeadingKeyword =
| OverrideVal of overrideRange: range * valRange: range
| Abstract of abstractRange: range
| AbstractMember of abstractRange: range * memberRange: range
| Static of staticRange: range
| StaticMember of staticRange: range * memberRange: range
| StaticMemberVal of staticRange: range * memberRange: range * valRange: range
| StaticAbstract of staticRange: range * abstractRange: range
Expand Down Expand Up @@ -206,7 +207,8 @@ type SynLeadingKeyword =
| Default m
| Val m
| New m
| Do m -> m
| Do m
| Static m -> m
| LetRec (m1, m2)
| UseRec (m1, m2)
| AbstractMember (m1, m2)
Expand Down
1 change: 1 addition & 0 deletions src/Compiler/SyntaxTree/SyntaxTrivia.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,7 @@ type SynLeadingKeyword =
| OverrideVal of overrideRange: range * valRange: range
| Abstract of abstractRange: range
| AbstractMember of abstractRange: range * memberRange: range
| Static of staticRange: range
| StaticMember of staticRange: range * memberRange: range
| StaticMemberVal of staticRange: range * memberRange: range * valRange: range
| StaticAbstract of staticRange: range * abstractRange: range
Expand Down
75 changes: 71 additions & 4 deletions src/Compiler/pars.fsy
Original file line number Diff line number Diff line change
Expand Up @@ -1499,16 +1499,24 @@ memberFlags:
| STATIC MEMBER
{ let mStatic = rhs parseState 1
let mMember = rhs parseState 2
StaticMemberFlags, (SynLeadingKeyword.StaticMember(mStatic, mMember)) }
StaticMemberFlags, SynLeadingKeyword.StaticMember(mStatic, mMember) }

| STATIC
{ let mStatic = rhs parseState 1
// todo: it should be possible to make it work better for both `abstract` and `member` in the type checker
StaticMemberFlags, SynLeadingKeyword.Static(mStatic) }

| MEMBER
{ let mMember = rhs parseState 1
NonVirtualMemberFlags, (SynLeadingKeyword.Member mMember) }
NonVirtualMemberFlags, SynLeadingKeyword.Member mMember }

| OVERRIDE
{ let mOverride = rhs parseState 1
OverrideMemberFlags, (SynLeadingKeyword.Override mOverride) }
OverrideMemberFlags, SynLeadingKeyword.Override mOverride }

| DEFAULT
{ let mDefault = rhs parseState 1
OverrideMemberFlags, (SynLeadingKeyword.Default mDefault) }
OverrideMemberFlags, SynLeadingKeyword.Default mDefault }

/* The name of a type in a signature or implementation, possibly with type parameters and constraints */
typeNameInfo:
Expand Down Expand Up @@ -1783,6 +1791,45 @@ memberCore:
let memberRange = unionRanges rangeStart mRhs |> unionRangeWithXmlDoc xmlDoc
[ SynMemberDefn.Member(binding, memberRange) ]) }

| opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints OBLOCKSEP
{ let optReturnType = $3
let bindingPat, mBindLhs = $2
let mEnd =
match optReturnType with
| Some(_, ty) -> ty.Range.EndRange
| _ -> bindingPat.Range.EndRange
let expr = arbExpr ("memberCore1", mEnd)
errorR (Error(FSComp.SR.parsMissingMemberBody(), rhs parseState 4))

fun vis flagsBuilderAndLeadingKeyword attrs rangeStart ->
let xmlDoc = grabXmlDocAtRangeStart(parseState, attrs, rangeStart)
let memFlagsBuilder, leadingKeyword = flagsBuilderAndLeadingKeyword
let memberFlags = memFlagsBuilder SynMemberKind.Member
let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range)
let trivia: SynBindingTrivia = { LeadingKeyword = leadingKeyword; InlineKeyword = $1; EqualsRange = None }
let binding = mkSynBinding (xmlDoc, bindingPat) (vis, (Option.isSome $1), false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, expr, mEnd, [], attrs, Some memberFlags, trivia)
let memberRange = unionRanges rangeStart mEnd |> unionRangeWithXmlDoc xmlDoc
[ SynMemberDefn.Member (binding, memberRange) ] }

| opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints recover
{ let optReturnType = $3
let bindingPat, mBindLhs = $2
let mEnd =
match optReturnType with
| Some(_, ty) -> ty.Range.EndRange
| _ -> bindingPat.Range.EndRange
let expr = arbExpr ("memberCore2", mEnd)

fun vis flagsBuilderAndLeadingKeyword attrs rangeStart ->
let xmlDoc = grabXmlDocAtRangeStart(parseState, attrs, rangeStart)
let memFlagsBuilder, leadingKeyword = flagsBuilderAndLeadingKeyword
let memberFlags = memFlagsBuilder SynMemberKind.Member
let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range)
let trivia: SynBindingTrivia = { LeadingKeyword = leadingKeyword; InlineKeyword = $1; EqualsRange = None }
let binding = mkSynBinding (xmlDoc, bindingPat) (vis, (Option.isSome $1), false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, expr, mEnd, [], attrs, Some memberFlags, trivia)
let memberRange = unionRanges rangeStart mEnd |> unionRangeWithXmlDoc xmlDoc
[ SynMemberDefn.Member (binding, memberRange) ] }

/* Properties with explicit get/set, also indexer properties */
| opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints classDefnMemberGetSet
{ let mWith, (classDefnMemberGetSetElements, mAnd) = $4
Expand Down Expand Up @@ -1846,6 +1893,26 @@ classDefnMember:
let flags = $3
$4 $2 flags $1 rangeStart }

| opt_attributes opt_access memberFlags recover
{ let rangeStart = rhs parseState 1
if Option.isSome $2 then
errorR (Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier (), rhs parseState 2))
let memFlagsBuilder, leadingKeyword = $3
let flags = Some(memFlagsBuilder SynMemberKind.Member)
let xmlDoc = grabXmlDocAtRangeStart (parseState, $1, rangeStart)
let trivia = { LeadingKeyword = leadingKeyword; InlineKeyword = None; EqualsRange = None }
let mMember = rhs parseState 3
let mEnd = mMember.EndRange
let bindingPat = patFromParseError (SynPat.Wild(mEnd))
let expr = arbExpr ("classDefnMember1", mEnd)
let mWhole = rhs2 parseState 1 3
let binding =
mkSynBinding
(xmlDoc, bindingPat)
($2, (Option.isSome $2), false, mWhole, DebugPointAtBinding.NoneAtInvisible, None, expr, mEnd, [], $1, flags, trivia)

[SynMemberDefn.Member(binding, mWhole)] }

| opt_attributes opt_access interfaceMember appType opt_interfaceImplDefn
{ if not (isNil $1) then errorR(Error(FSComp.SR.parsAttributesAreNotPermittedOnInterfaceImplementations(), rhs parseState 1))
if Option.isSome $2 then errorR(Error(FSComp.SR.parsInterfacesHaveSameVisibilityAsEnclosingType(), rhs parseState 3))
Expand Down
5 changes: 5 additions & 0 deletions src/Compiler/xlf/FSComp.txt.cs.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,11 @@
<target state="translated">Neúplný výraz operátoru (například^b) nebo volání kvalifikovaného typu (příklad: ^T.Name)</target>
<note />
</trans-unit>
<trans-unit id="parsMissingMemberBody">
<source>Expecting member body</source>
<target state="new">Expecting member body</target>
<note />
</trans-unit>
<trans-unit id="parsMissingUnionCaseName">
<source>Missing union case name</source>
<target state="new">Missing union case name</target>
Expand Down
5 changes: 5 additions & 0 deletions src/Compiler/xlf/FSComp.txt.de.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,11 @@
<target state="translated">Unvollständiger Operatorausdruck (Beispiel: a^b) oder qualifizierter Typaufruf (Beispiel: ^T.Name)</target>
<note />
</trans-unit>
<trans-unit id="parsMissingMemberBody">
<source>Expecting member body</source>
<target state="new">Expecting member body</target>
<note />
</trans-unit>
<trans-unit id="parsMissingUnionCaseName">
<source>Missing union case name</source>
<target state="new">Missing union case name</target>
Expand Down
5 changes: 5 additions & 0 deletions src/Compiler/xlf/FSComp.txt.es.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,11 @@
<target state="translated">Expresión de operador incompleta (ejemplo, a^b) o invocación de tipo calificada (ejemplo: ^T.Name)</target>
<note />
</trans-unit>
<trans-unit id="parsMissingMemberBody">
<source>Expecting member body</source>
<target state="new">Expecting member body</target>
<note />
</trans-unit>
<trans-unit id="parsMissingUnionCaseName">
<source>Missing union case name</source>
<target state="new">Missing union case name</target>
Expand Down
5 changes: 5 additions & 0 deletions src/Compiler/xlf/FSComp.txt.fr.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,11 @@
<target state="translated">Expression d’opérateur incomplète (exemple a^b) ou appel de type qualifié (exemple : ^T.Name)</target>
<note />
</trans-unit>
<trans-unit id="parsMissingMemberBody">
<source>Expecting member body</source>
<target state="new">Expecting member body</target>
<note />
</trans-unit>
<trans-unit id="parsMissingUnionCaseName">
<source>Missing union case name</source>
<target state="new">Missing union case name</target>
Expand Down
5 changes: 5 additions & 0 deletions src/Compiler/xlf/FSComp.txt.it.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,11 @@
<target state="translated">Espressione operatore incompleta (ad esempio a^b) o chiamata di tipo qualificato (ad esempio: ^T.Name)</target>
<note />
</trans-unit>
<trans-unit id="parsMissingMemberBody">
<source>Expecting member body</source>
<target state="new">Expecting member body</target>
<note />
</trans-unit>
<trans-unit id="parsMissingUnionCaseName">
<source>Missing union case name</source>
<target state="new">Missing union case name</target>
Expand Down
5 changes: 5 additions & 0 deletions src/Compiler/xlf/FSComp.txt.ja.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,11 @@
<target state="translated">不完全な演算子式 (例 a^b) または修飾型の呼び出し (例: ^T.Name)</target>
<note />
</trans-unit>
<trans-unit id="parsMissingMemberBody">
<source>Expecting member body</source>
<target state="new">Expecting member body</target>
<note />
</trans-unit>
<trans-unit id="parsMissingUnionCaseName">
<source>Missing union case name</source>
<target state="new">Missing union case name</target>
Expand Down
5 changes: 5 additions & 0 deletions src/Compiler/xlf/FSComp.txt.ko.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,11 @@
<target state="translated">불완전한 연산자 식(예: a^b) 또는 정규화된 형식 호출(예: ^T.Name)</target>
<note />
</trans-unit>
<trans-unit id="parsMissingMemberBody">
<source>Expecting member body</source>
<target state="new">Expecting member body</target>
<note />
</trans-unit>
<trans-unit id="parsMissingUnionCaseName">
<source>Missing union case name</source>
<target state="new">Missing union case name</target>
Expand Down
5 changes: 5 additions & 0 deletions src/Compiler/xlf/FSComp.txt.pl.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,11 @@
<target state="translated">Niekompletne wyrażenie operatora (na przykład a^b) lub wywołanie typu kwalifikowanego (przykład: ^T.Name)</target>
<note />
</trans-unit>
<trans-unit id="parsMissingMemberBody">
<source>Expecting member body</source>
<target state="new">Expecting member body</target>
<note />
</trans-unit>
<trans-unit id="parsMissingUnionCaseName">
<source>Missing union case name</source>
<target state="new">Missing union case name</target>
Expand Down
5 changes: 5 additions & 0 deletions src/Compiler/xlf/FSComp.txt.pt-BR.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,11 @@
<target state="translated">Expressão de operador incompleta (exemplo a^b) ou invocação de tipo qualificado (exemplo: ^T.Name)</target>
<note />
</trans-unit>
<trans-unit id="parsMissingMemberBody">
<source>Expecting member body</source>
<target state="new">Expecting member body</target>
<note />
</trans-unit>
<trans-unit id="parsMissingUnionCaseName">
<source>Missing union case name</source>
<target state="new">Missing union case name</target>
Expand Down
5 changes: 5 additions & 0 deletions src/Compiler/xlf/FSComp.txt.ru.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,11 @@
<target state="translated">Неполное выражение оператора (например, a^b) или вызов квалифицированного типа (например, ^T.Name)</target>
<note />
</trans-unit>
<trans-unit id="parsMissingMemberBody">
<source>Expecting member body</source>
<target state="new">Expecting member body</target>
<note />
</trans-unit>
<trans-unit id="parsMissingUnionCaseName">
<source>Missing union case name</source>
<target state="new">Missing union case name</target>
Expand Down
5 changes: 5 additions & 0 deletions src/Compiler/xlf/FSComp.txt.tr.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,11 @@
<target state="translated">Eksik işleç ifadesi (örnek a^b) veya tam tür çağrısı (örnek: ^T.Name)</target>
<note />
</trans-unit>
<trans-unit id="parsMissingMemberBody">
<source>Expecting member body</source>
<target state="new">Expecting member body</target>
<note />
</trans-unit>
<trans-unit id="parsMissingUnionCaseName">
<source>Missing union case name</source>
<target state="new">Missing union case name</target>
Expand Down
5 changes: 5 additions & 0 deletions src/Compiler/xlf/FSComp.txt.zh-Hans.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,11 @@
<target state="translated">运算符表达式不完整(示例: a^b)或限定类型调用(示例: ^T.Name)</target>
<note />
</trans-unit>
<trans-unit id="parsMissingMemberBody">
<source>Expecting member body</source>
<target state="new">Expecting member body</target>
<note />
</trans-unit>
<trans-unit id="parsMissingUnionCaseName">
<source>Missing union case name</source>
<target state="new">Missing union case name</target>
Expand Down
5 changes: 5 additions & 0 deletions src/Compiler/xlf/FSComp.txt.zh-Hant.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,11 @@
<target state="translated">不完整的運算子運算式 (範例 a^b) 或限定類型調用 (範例: ^T.Name)</target>
<note />
</trans-unit>
<trans-unit id="parsMissingMemberBody">
<source>Expecting member body</source>
<target state="new">Expecting member body</target>
<note />
</trans-unit>
<trans-unit id="parsMissingUnionCaseName">
<source>Missing union case name</source>
<target state="new">Missing union case name</target>
Expand Down
Loading