Skip to content

Commit 7e8ef65

Browse files
authored
Merge pull request #15247 from dotnet/merges/main-to-release/net8
Merge main to release/net8
2 parents 2341436 + b0802c4 commit 7e8ef65

File tree

16 files changed

+206
-12
lines changed

16 files changed

+206
-12
lines changed

src/Compiler/pars.fsy

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3732,22 +3732,22 @@ declExpr:
37323732
$3 $2 mIf false }
37333733

37343734
| IF declExpr recover %prec expr_if
3735-
{ reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsIncompleteIf())
3736-
// Produce an approximate expression during error recovery.
3737-
// Include expressions to make sure they get type checked in case that generates useful results for intellisense.
3738-
// Generate a throwAway for the expression so it isn't forced to have a type 'bool'
3739-
// from the context it is used in.
3740-
exprFromParseError $2 }
3735+
{ errorR (Error(FSComp.SR.parsIncompleteIf (), rhs parseState 1))
3736+
let ifExpr = $2
3737+
let mIf = rhs parseState 1
3738+
let mThen = ifExpr.Range.EndRange
3739+
let m = unionRanges mIf mThen
3740+
let spIfToThen = DebugPointAtBinding.Yes m
3741+
let trivia = { IfKeyword = mIf; IsElif = false; ThenKeyword = mThen; ElseKeyword = None; IfToThenRange = m }
3742+
SynExpr.IfThenElse($2, arbExpr ("if1", mThen), None, spIfToThen, true, m, trivia) }
37413743

37423744
| IF recover %prec expr_if
3743-
{ reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsIncompleteIf())
3744-
// Produce an approximate expression during error recovery. There can still be value in doing this even
3745-
// for this pathological case.
3745+
{ errorR (Error(FSComp.SR.parsIncompleteIf (), rhs parseState 1))
37463746
let m = rhs parseState 1
37473747
let mEnd = m.EndRange
37483748
let spIfToThen = DebugPointAtBinding.Yes mEnd
37493749
let trivia = { IfKeyword = m; IsElif = false; ThenKeyword = m; ElseKeyword = None; IfToThenRange = m }
3750-
exprFromParseError (SynExpr.IfThenElse(arbExpr ("ifGuard1", mEnd), arbExpr ("thenBody1", mEnd), None, spIfToThen, true, m, trivia)) }
3750+
SynExpr.IfThenElse(arbExpr ("if2", mEnd), arbExpr ("if3", mEnd), None, spIfToThen, true, m, trivia) }
37513751

37523752
| LAZY declExpr %prec expr_lazy
37533753
{ SynExpr.Lazy($2, unionRanges (rhs parseState 1) $2.Range) }
@@ -4318,13 +4318,25 @@ ifExprThen:
43184318
| THEN declExpr %prec prec_then_if
43194319
{ $2, rhs parseState 1 }
43204320

4321+
| THEN recover %prec prec_then_if
4322+
{ let mThen = rhs parseState 1
4323+
arbExpr ("ifThen1", mThen.EndRange), mThen }
4324+
43214325
| OTHEN OBLOCKBEGIN typedSequentialExpr oblockend %prec prec_then_if
43224326
{ $3, rhs parseState 1 }
43234327

43244328
| OTHEN OBLOCKBEGIN typedSequentialExpr recover %prec prec_then_if
43254329
{ if not $4 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileThen())
43264330
exprFromParseError $3, rhs parseState 1 }
43274331

4332+
| OTHEN recover %prec prec_then_if
4333+
{ let mThen = rhs parseState 1
4334+
arbExpr ("ifThen2", mThen.EndRange), mThen }
4335+
4336+
| OTHEN OBLOCKBEGIN recover %prec prec_then_if
4337+
{ let mThen = rhs parseState 1
4338+
arbExpr ("ifThen3", mThen.EndRange), mThen }
4339+
43284340
ifExprElifs:
43294341
| /* EMPTY */
43304342
{ None, None }

src/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,12 @@
3434
<Compile Include="fsiaux.fs" />
3535
</ItemGroup>
3636

37-
<ItemGroup>
38-
<ProjectReference Include="..\FSharp.Core\FSharp.Core.fsproj" />
37+
<ItemGroup Condition="'$(FSHARPCORE_USE_PACKAGE)' != 'true'">
38+
<ProjectReference Include="$(FSharpSourcesRoot)\FSharp.Core\FSharp.Core.fsproj" />
39+
</ItemGroup>
40+
41+
<ItemGroup Condition="'$(FSHARPCORE_USE_PACKAGE)' == 'true'">
42+
<PackageReference Include="FSharp.Core" Version="$(FSharpCoreShippedPackageVersionValue)" />
3943
</ItemGroup>
4044

4145
</Project>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module Module
2+
3+
if true then ()
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
ImplFile
2+
(ParsedImplFileInput
3+
("/root/Expression/If 01.fs", false, QualifiedNameOfFile Module, [], [],
4+
[SynModuleOrNamespace
5+
([Module], false, NamedModule,
6+
[Expr
7+
(IfThenElse
8+
(Const (Bool true, (3,3--3,7)), Const (Unit, (3,13--3,15)), None,
9+
Yes (3,0--3,12), false, (3,0--3,15),
10+
{ IfKeyword = (3,0--3,2)
11+
IsElif = false
12+
ThenKeyword = (3,8--3,12)
13+
ElseKeyword = None
14+
IfToThenRange = (3,0--3,12) }), (3,0--3,15))],
15+
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
16+
(1,0--3,15), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
17+
{ ConditionalDirectives = []
18+
CodeComments = [] }, set []))
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module Module
2+
3+
if true then () else ()
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
ImplFile
2+
(ParsedImplFileInput
3+
("/root/Expression/If 02.fs", false, QualifiedNameOfFile Module, [], [],
4+
[SynModuleOrNamespace
5+
([Module], false, NamedModule,
6+
[Expr
7+
(IfThenElse
8+
(Const (Bool true, (3,3--3,7)), Const (Unit, (3,13--3,15)),
9+
Some (Const (Unit, (3,21--3,23))), Yes (3,0--3,12), false,
10+
(3,0--3,23), { IfKeyword = (3,0--3,2)
11+
IsElif = false
12+
ThenKeyword = (3,8--3,12)
13+
ElseKeyword = Some (3,16--3,20)
14+
IfToThenRange = (3,0--3,12) }), (3,0--3,23))],
15+
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
16+
(1,0--3,23), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
17+
{ ConditionalDirectives = []
18+
CodeComments = [] }, set []))
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module Module
2+
3+
if true
4+
5+
()
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
ImplFile
2+
(ParsedImplFileInput
3+
("/root/Expression/If 03.fs", false, QualifiedNameOfFile Module, [], [],
4+
[SynModuleOrNamespace
5+
([Module], false, NamedModule,
6+
[Expr
7+
(IfThenElse
8+
(Const (Bool true, (3,3--3,7)),
9+
ArbitraryAfterError ("if1", (3,7--3,7)), None, Yes (3,0--3,7),
10+
true, (3,0--3,7), { IfKeyword = (3,0--3,2)
11+
IsElif = false
12+
ThenKeyword = (3,7--3,7)
13+
ElseKeyword = None
14+
IfToThenRange = (3,0--3,7) }), (3,0--3,7));
15+
Expr (Const (Unit, (5,0--5,2)), (5,0--5,2))],
16+
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
17+
(1,0--5,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
18+
{ ConditionalDirectives = []
19+
CodeComments = [] }, set []))
20+
21+
(3,8)-(5,0) parse error Incomplete structured construct at or before this point in expression
22+
(3,0)-(3,2) parse error Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module Module
2+
3+
if
4+
5+
()
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
ImplFile
2+
(ParsedImplFileInput
3+
("/root/Expression/If 04.fs", false, QualifiedNameOfFile Module, [], [],
4+
[SynModuleOrNamespace
5+
([Module], false, NamedModule,
6+
[Expr
7+
(IfThenElse
8+
(ArbitraryAfterError ("if2", (3,2--3,2)),
9+
ArbitraryAfterError ("if3", (3,2--3,2)), None, Yes (3,2--3,2),
10+
true, (3,0--3,2), { IfKeyword = (3,0--3,2)
11+
IsElif = false
12+
ThenKeyword = (3,0--3,2)
13+
ElseKeyword = None
14+
IfToThenRange = (3,0--3,2) }), (3,0--3,2));
15+
Expr (Const (Unit, (5,0--5,2)), (5,0--5,2))],
16+
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
17+
(1,0--5,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
18+
{ ConditionalDirectives = []
19+
CodeComments = [] }, set []))
20+
21+
(3,3)-(5,0) parse error Incomplete structured construct at or before this point in expression
22+
(3,0)-(3,2) parse error Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.

0 commit comments

Comments
 (0)