Skip to content

Commit 0eea46b

Browse files
authored
Merge pull request #15405 from dotnet/merges/main-to-release/net8
Merge main to release/net8
2 parents 369097c + d2441b0 commit 0eea46b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1498
-9
lines changed

src/Compiler/Driver/CompilerDiagnostics.fs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1468,6 +1468,7 @@ type Exception with
14681468
|> List.map Parser.tokenTagToTokenId
14691469
|> List.filter (function
14701470
| Parser.TOKEN_error
1471+
| Parser.TOKEN_OBLOCKSEP
14711472
| Parser.TOKEN_EOF -> false
14721473
| _ -> true)
14731474
|> List.map tokenIdToText

src/Compiler/FSComp.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1697,3 +1697,4 @@ featureEscapeBracesInFormattableString,"Escapes curly braces before calling Form
16971697
3565,parsExpectingType,"Expecting type"
16981698
featureInformationalObjInferenceDiagnostic,"Diagnostic 3559 (warn when obj inferred) at informational level, off by default"
16991699
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."
1700+
3567,parsMissingMemberBody,"Expecting member body"

src/Compiler/SyntaxTree/SyntaxTree.fs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1331,7 +1331,12 @@ type SynArgInfo =
13311331
type SynValTyparDecls = SynValTyparDecls of typars: SynTyparDecls option * canInfer: bool
13321332

13331333
[<NoEquality; NoComparison>]
1334-
type SynReturnInfo = SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range
1334+
type SynReturnInfo =
1335+
| SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range
1336+
1337+
member this.Range =
1338+
match this with
1339+
| SynReturnInfo (range = m) -> m
13351340

13361341
[<NoEquality; NoComparison>]
13371342
type SynExceptionDefnRepr =

src/Compiler/SyntaxTree/SyntaxTree.fsi

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1503,7 +1503,10 @@ type SynValTyparDecls = SynValTyparDecls of typars: SynTyparDecls option * canIn
15031503

15041504
/// Represents the syntactic elements associated with the "return" of a function or method.
15051505
[<NoEquality; NoComparison>]
1506-
type SynReturnInfo = SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range
1506+
type SynReturnInfo =
1507+
| SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range
1508+
1509+
member Range: range
15071510

15081511
/// Represents the right hand side of an exception declaration 'exception E = ... '
15091512
[<NoEquality; NoComparison>]

src/Compiler/SyntaxTree/SyntaxTrivia.fs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ type SynLeadingKeyword =
179179
| OverrideVal of overrideRange: range * valRange: range
180180
| Abstract of abstractRange: range
181181
| AbstractMember of abstractRange: range * memberRange: range
182+
| Static of staticRange: range
182183
| StaticMember of staticRange: range * memberRange: range
183184
| StaticMemberVal of staticRange: range * memberRange: range * valRange: range
184185
| StaticAbstract of staticRange: range * abstractRange: range
@@ -206,7 +207,8 @@ type SynLeadingKeyword =
206207
| Default m
207208
| Val m
208209
| New m
209-
| Do m -> m
210+
| Do m
211+
| Static m -> m
210212
| LetRec (m1, m2)
211213
| UseRec (m1, m2)
212214
| AbstractMember (m1, m2)

src/Compiler/SyntaxTree/SyntaxTrivia.fsi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ type SynLeadingKeyword =
271271
| OverrideVal of overrideRange: range * valRange: range
272272
| Abstract of abstractRange: range
273273
| AbstractMember of abstractRange: range * memberRange: range
274+
| Static of staticRange: range
274275
| StaticMember of staticRange: range * memberRange: range
275276
| StaticMemberVal of staticRange: range * memberRange: range * valRange: range
276277
| StaticAbstract of staticRange: range * abstractRange: range

src/Compiler/pars.fsy

Lines changed: 71 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1499,16 +1499,24 @@ memberFlags:
14991499
| STATIC MEMBER
15001500
{ let mStatic = rhs parseState 1
15011501
let mMember = rhs parseState 2
1502-
StaticMemberFlags, (SynLeadingKeyword.StaticMember(mStatic, mMember)) }
1502+
StaticMemberFlags, SynLeadingKeyword.StaticMember(mStatic, mMember) }
1503+
1504+
| STATIC
1505+
{ let mStatic = rhs parseState 1
1506+
// todo: it should be possible to make it work better for both `abstract` and `member` in the type checker
1507+
StaticMemberFlags, SynLeadingKeyword.Static(mStatic) }
1508+
15031509
| MEMBER
15041510
{ let mMember = rhs parseState 1
1505-
NonVirtualMemberFlags, (SynLeadingKeyword.Member mMember) }
1511+
NonVirtualMemberFlags, SynLeadingKeyword.Member mMember }
1512+
15061513
| OVERRIDE
15071514
{ let mOverride = rhs parseState 1
1508-
OverrideMemberFlags, (SynLeadingKeyword.Override mOverride) }
1515+
OverrideMemberFlags, SynLeadingKeyword.Override mOverride }
1516+
15091517
| DEFAULT
15101518
{ let mDefault = rhs parseState 1
1511-
OverrideMemberFlags, (SynLeadingKeyword.Default mDefault) }
1519+
OverrideMemberFlags, SynLeadingKeyword.Default mDefault }
15121520

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

1794+
| opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints OBLOCKSEP
1795+
{ let optReturnType = $3
1796+
let bindingPat, mBindLhs = $2
1797+
let mEnd =
1798+
match optReturnType with
1799+
| Some(_, ty) -> ty.Range.EndRange
1800+
| _ -> bindingPat.Range.EndRange
1801+
let expr = arbExpr ("memberCore1", mEnd)
1802+
errorR (Error(FSComp.SR.parsMissingMemberBody(), rhs parseState 4))
1803+
1804+
fun vis flagsBuilderAndLeadingKeyword attrs rangeStart ->
1805+
let xmlDoc = grabXmlDocAtRangeStart(parseState, attrs, rangeStart)
1806+
let memFlagsBuilder, leadingKeyword = flagsBuilderAndLeadingKeyword
1807+
let memberFlags = memFlagsBuilder SynMemberKind.Member
1808+
let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range)
1809+
let trivia: SynBindingTrivia = { LeadingKeyword = leadingKeyword; InlineKeyword = $1; EqualsRange = None }
1810+
let binding = mkSynBinding (xmlDoc, bindingPat) (vis, (Option.isSome $1), false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, expr, mEnd, [], attrs, Some memberFlags, trivia)
1811+
let memberRange = unionRanges rangeStart mEnd |> unionRangeWithXmlDoc xmlDoc
1812+
[ SynMemberDefn.Member (binding, memberRange) ] }
1813+
1814+
| opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints recover
1815+
{ let optReturnType = $3
1816+
let bindingPat, mBindLhs = $2
1817+
let mEnd =
1818+
match optReturnType with
1819+
| Some(_, ty) -> ty.Range.EndRange
1820+
| _ -> bindingPat.Range.EndRange
1821+
let expr = arbExpr ("memberCore2", mEnd)
1822+
1823+
fun vis flagsBuilderAndLeadingKeyword attrs rangeStart ->
1824+
let xmlDoc = grabXmlDocAtRangeStart(parseState, attrs, rangeStart)
1825+
let memFlagsBuilder, leadingKeyword = flagsBuilderAndLeadingKeyword
1826+
let memberFlags = memFlagsBuilder SynMemberKind.Member
1827+
let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range)
1828+
let trivia: SynBindingTrivia = { LeadingKeyword = leadingKeyword; InlineKeyword = $1; EqualsRange = None }
1829+
let binding = mkSynBinding (xmlDoc, bindingPat) (vis, (Option.isSome $1), false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, expr, mEnd, [], attrs, Some memberFlags, trivia)
1830+
let memberRange = unionRanges rangeStart mEnd |> unionRangeWithXmlDoc xmlDoc
1831+
[ SynMemberDefn.Member (binding, memberRange) ] }
1832+
17861833
/* Properties with explicit get/set, also indexer properties */
17871834
| opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints classDefnMemberGetSet
17881835
{ let mWith, (classDefnMemberGetSetElements, mAnd) = $4
@@ -1846,6 +1893,26 @@ classDefnMember:
18461893
let flags = $3
18471894
$4 $2 flags $1 rangeStart }
18481895

1896+
| opt_attributes opt_access memberFlags recover
1897+
{ let rangeStart = rhs parseState 1
1898+
if Option.isSome $2 then
1899+
errorR (Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier (), rhs parseState 2))
1900+
let memFlagsBuilder, leadingKeyword = $3
1901+
let flags = Some(memFlagsBuilder SynMemberKind.Member)
1902+
let xmlDoc = grabXmlDocAtRangeStart (parseState, $1, rangeStart)
1903+
let trivia = { LeadingKeyword = leadingKeyword; InlineKeyword = None; EqualsRange = None }
1904+
let mMember = rhs parseState 3
1905+
let mEnd = mMember.EndRange
1906+
let bindingPat = patFromParseError (SynPat.Wild(mEnd))
1907+
let expr = arbExpr ("classDefnMember1", mEnd)
1908+
let mWhole = rhs2 parseState 1 3
1909+
let binding =
1910+
mkSynBinding
1911+
(xmlDoc, bindingPat)
1912+
($2, (Option.isSome $2), false, mWhole, DebugPointAtBinding.NoneAtInvisible, None, expr, mEnd, [], $1, flags, trivia)
1913+
1914+
[SynMemberDefn.Member(binding, mWhole)] }
1915+
18491916
| opt_attributes opt_access interfaceMember appType opt_interfaceImplDefn
18501917
{ if not (isNil $1) then errorR(Error(FSComp.SR.parsAttributesAreNotPermittedOnInterfaceImplementations(), rhs parseState 1))
18511918
if Option.isSome $2 then errorR(Error(FSComp.SR.parsInterfacesHaveSameVisibilityAsEnclosingType(), rhs parseState 3))

src/Compiler/xlf/FSComp.txt.cs.xlf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,11 @@
822822
<target state="translated">Neúplný výraz operátoru (například^b) nebo volání kvalifikovaného typu (příklad: ^T.Name)</target>
823823
<note />
824824
</trans-unit>
825+
<trans-unit id="parsMissingMemberBody">
826+
<source>Expecting member body</source>
827+
<target state="new">Expecting member body</target>
828+
<note />
829+
</trans-unit>
825830
<trans-unit id="parsMissingUnionCaseName">
826831
<source>Missing union case name</source>
827832
<target state="new">Missing union case name</target>

src/Compiler/xlf/FSComp.txt.de.xlf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,11 @@
822822
<target state="translated">Unvollständiger Operatorausdruck (Beispiel: a^b) oder qualifizierter Typaufruf (Beispiel: ^T.Name)</target>
823823
<note />
824824
</trans-unit>
825+
<trans-unit id="parsMissingMemberBody">
826+
<source>Expecting member body</source>
827+
<target state="new">Expecting member body</target>
828+
<note />
829+
</trans-unit>
825830
<trans-unit id="parsMissingUnionCaseName">
826831
<source>Missing union case name</source>
827832
<target state="new">Missing union case name</target>

src/Compiler/xlf/FSComp.txt.es.xlf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,11 @@
822822
<target state="translated">Expresión de operador incompleta (ejemplo, a^b) o invocación de tipo calificada (ejemplo: ^T.Name)</target>
823823
<note />
824824
</trans-unit>
825+
<trans-unit id="parsMissingMemberBody">
826+
<source>Expecting member body</source>
827+
<target state="new">Expecting member body</target>
828+
<note />
829+
</trans-unit>
825830
<trans-unit id="parsMissingUnionCaseName">
826831
<source>Missing union case name</source>
827832
<target state="new">Missing union case name</target>

0 commit comments

Comments
 (0)