Skip to content

Commit d5bd13b

Browse files
authored
Merge pull request #9318 from dotnet/merges/master-to-release/dev16.7
Merge master to release/dev16.7
2 parents 09be04c + 8586323 commit d5bd13b

6 files changed

Lines changed: 44 additions & 39 deletions

File tree

src/fsharp/ConstraintSolver.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1316,7 +1316,7 @@ and SolveMemberConstraint (csenv: ConstraintSolverEnv) ignoreUnresolvedOverload
13161316
// We pretend for uniformity that the numeric types have a static property called Zero and One
13171317
// As with constants, only zero is polymorphic in its units
13181318
| [], [ty], false, "get_Zero", []
1319-
when IsNumericType g ty ->
1319+
when IsNumericType g ty || isCharTy g ty ->
13201320
do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty ty
13211321
return TTraitBuiltIn
13221322

src/fsharp/DotNetFrameworkDependencies.fs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,13 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies
2828
// Use the location of this dll
2929
location
3030

31+
let inline ifEmptyUse alternative filename = if String.IsNullOrWhiteSpace filename then alternative else filename
32+
3133
let getFSharpCoreLibraryName = "FSharp.Core"
3234
let getFsiLibraryName = "FSharp.Compiler.Interactive.Settings"
3335
let getDefaultFSharpCoreLocation = Path.Combine(fSharpCompilerLocation, getFSharpCoreLibraryName + ".dll")
3436
let getDefaultFsiLibraryLocation = Path.Combine(fSharpCompilerLocation, getFsiLibraryName + ".dll")
35-
let implementationAssemblyDir = Path.GetDirectoryName(typeof<obj>.Assembly.Location)
37+
let implementationAssemblyDir = Path.GetDirectoryName(typeof<obj>.Assembly.Location) |> ifEmptyUse fSharpCompilerLocation
3638

3739
// Use the ValueTuple that is executing with the compiler if it is from System.ValueTuple
3840
// or the System.ValueTuple.dll that sits alongside the compiler. (Note we always ship one with the compiler)

src/fsharp/FSharp.Core/prim-types.fs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2369,6 +2369,7 @@ namespace Microsoft.FSharp.Core
23692369
elif aty.Equals(typeof<nativeint>) then unboxPrim<'T> (box 0n)
23702370
elif aty.Equals(typeof<byte>) then unboxPrim<'T> (box 0uy)
23712371
elif aty.Equals(typeof<uint16>) then unboxPrim<'T> (box 0us)
2372+
elif aty.Equals(typeof<char>) then unboxPrim<'T> (box '\000')
23722373
elif aty.Equals(typeof<uint32>) then unboxPrim<'T> (box 0u)
23732374
elif aty.Equals(typeof<uint64>) then unboxPrim<'T> (box 0UL)
23742375
elif aty.Equals(typeof<unativeint>) then unboxPrim<'T> (box 0un)
@@ -2392,7 +2393,7 @@ namespace Microsoft.FSharp.Core
23922393
elif aty.Equals(typeof<nativeint>) then unboxPrim<'T> (box 1n)
23932394
elif aty.Equals(typeof<byte>) then unboxPrim<'T> (box 1uy)
23942395
elif aty.Equals(typeof<uint16>) then unboxPrim<'T> (box 1us)
2395-
elif aty.Equals(typeof<char>) then unboxPrim<'T> (box (retype 1us : char))
2396+
elif aty.Equals(typeof<char>) then unboxPrim<'T> (box '\001')
23962397
elif aty.Equals(typeof<uint32>) then unboxPrim<'T> (box 1u)
23972398
elif aty.Equals(typeof<uint64>) then unboxPrim<'T> (box 1UL)
23982399
elif aty.Equals(typeof<unativeint>) then unboxPrim<'T> (box 1un)
@@ -2420,6 +2421,7 @@ namespace Microsoft.FSharp.Core
24202421
when ^T : unativeint = 0un
24212422
when ^T : int16 = 0s
24222423
when ^T : uint16 = 0us
2424+
when ^T : char = '\000'
24232425
when ^T : sbyte = 0y
24242426
when ^T : byte = 0uy
24252427
when ^T : decimal = 0M
@@ -2440,7 +2442,7 @@ namespace Microsoft.FSharp.Core
24402442
when ^T : unativeint = 1un
24412443
when ^T : int16 = 1s
24422444
when ^T : uint16 = 1us
2443-
when ^T : char = (retype 1us : char)
2445+
when ^T : char = '\001'
24442446
when ^T : sbyte = 1y
24452447
when ^T : byte = 1uy
24462448
when ^T : decimal = 1M

src/utils/CompilerLocationUtils.fs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,10 @@ module internal FSharpEnvironment =
189189
// Check for an app.config setting to redirect the default compiler location
190190
// Like fsharp-compiler-location
191191
try
192+
// We let you set FSHARP_COMPILER_BIN. I've rarely seen this used and its not documented in the install instructions.
193+
match Environment.GetEnvironmentVariable("FSHARP_COMPILER_BIN") with
194+
| result when not (String.IsNullOrWhiteSpace result) -> Some result
195+
|_->
192196
// FSharp.Compiler support setting an appKey for compiler location. I've never seen this used.
193197
let result = tryAppConfig "fsharp-compiler-location"
194198
match result with
@@ -201,11 +205,6 @@ module internal FSharpEnvironment =
201205
match probePoint with
202206
| Some p when safeExists (Path.Combine(p,"FSharp.Core.dll")) -> Some p
203207
| _ ->
204-
// We let you set FSHARP_COMPILER_BIN. I've rarely seen this used and its not documented in the install instructions.
205-
let result = Environment.GetEnvironmentVariable("FSHARP_COMPILER_BIN")
206-
if not (String.IsNullOrEmpty(result)) then
207-
Some result
208-
else
209208
// For the prototype compiler, we can just use the current domain
210209
tryCurrentDomain()
211210
with e -> None

tests/fsharp/core/members/basics/test.fs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3038,6 +3038,7 @@ module ContraintTest = begin
30383038
open System.Numerics
30393039
let check s p = printf "Test %s: %s\n" s (if p then "pass" else "fail")
30403040
do check "d3oc001" (LanguagePrimitives.GenericZero<BigInteger> = 0I)
3041+
do check "d3oc002" (LanguagePrimitives.GenericZero<char> = '\000')
30413042
do check "d3oc003a" (LanguagePrimitives.GenericZero<int> = 0)
30423043
do check "d3oc003b" (LanguagePrimitives.GenericZero<unativeint> = 0un)
30433044
do check "d3oc003c" (LanguagePrimitives.GenericZero<uint64> = 0UL)
@@ -3051,7 +3052,8 @@ module ContraintTest = begin
30513052
do check "d3oc003k" (LanguagePrimitives.GenericZero<sbyte> = 0y)
30523053
do check "d3oc003l" (LanguagePrimitives.GenericZero<decimal> = 0M)
30533054

3054-
do check "d3oc001q" (LanguagePrimitives.GenericOne<BigInteger> = 1I)
3055+
do check "d3oc113q" (LanguagePrimitives.GenericOne<BigInteger> = 1I)
3056+
do check "d3oc113w" (LanguagePrimitives.GenericOne<char> = '\001')
30553057
do check "d3oc113e" (LanguagePrimitives.GenericOne<int> = 1)
30563058
do check "d3oc113r" (LanguagePrimitives.GenericOne<unativeint> = 1un)
30573059
do check "d3oc113t" (LanguagePrimitives.GenericOne<uint64> = 1UL)

tests/fsharp/tools/eval/test.fsx

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1193,35 +1193,35 @@ module EvaluationTests =
11931193

11941194
module InlinedOperationsStillDynamicallyAvailableTests =
11951195

1196-
checkEval "vroievr093" (<@ LanguagePrimitives.GenericZero<sbyte> @>) 0y
1197-
checkEval "vroievr091" (<@ LanguagePrimitives.GenericZero<int16> @>) 0s
1198-
checkEval "vroievr091" (<@ LanguagePrimitives.GenericZero<int32> @>) 0
1199-
checkEval "vroievr091" (<@ LanguagePrimitives.GenericZero<int64> @>) 0L
1200-
checkEval "vroievr091" (<@ LanguagePrimitives.GenericZero<nativeint> @>) 0n
1201-
checkEval "vroievr093" (<@ LanguagePrimitives.GenericZero<byte> @>) 0uy
1202-
checkEval "vroievr091" (<@ LanguagePrimitives.GenericZero<uint16> @>) 0us
1203-
checkEval "vroievr091" (<@ LanguagePrimitives.GenericZero<uint32> @>) 0u
1204-
checkEval "vroievr091" (<@ LanguagePrimitives.GenericZero<uint64> @>) 0UL
1205-
checkEval "vroievr091" (<@ LanguagePrimitives.GenericZero<unativeint> @>) 0un
1206-
checkEval "vroievr091" (<@ LanguagePrimitives.GenericZero<float> @>) 0.0
1207-
checkEval "vroievr091" (<@ LanguagePrimitives.GenericZero<float32> @>) 0.0f
1208-
checkEval "vroievr092" (<@ LanguagePrimitives.GenericZero<decimal> @>) 0M
1209-
1210-
1211-
1212-
checkEval "vroievr093" (<@ LanguagePrimitives.GenericOne<sbyte> @>) 1y
1213-
checkEval "vroievr191" (<@ LanguagePrimitives.GenericOne<int16> @>) 1s
1214-
checkEval "vroievr191" (<@ LanguagePrimitives.GenericOne<int32> @>) 1
1215-
checkEval "vroievr191" (<@ LanguagePrimitives.GenericOne<int64> @>) 1L
1216-
checkEval "vroievr191" (<@ LanguagePrimitives.GenericOne<nativeint> @>) 1n
1217-
checkEval "vroievr193" (<@ LanguagePrimitives.GenericOne<byte> @>) 1uy
1218-
checkEval "vroievr191" (<@ LanguagePrimitives.GenericOne<uint16> @>) 1us
1219-
checkEval "vroievr191" (<@ LanguagePrimitives.GenericOne<uint32> @>) 1u
1220-
checkEval "vroievr191" (<@ LanguagePrimitives.GenericOne<uint64> @>) 1UL
1221-
checkEval "vroievr191" (<@ LanguagePrimitives.GenericOne<unativeint> @>) 1un
1222-
checkEval "vroievr191" (<@ LanguagePrimitives.GenericOne<float> @>) 1.0
1223-
checkEval "vroievr191" (<@ LanguagePrimitives.GenericOne<float32> @>) 1.0f
1224-
checkEval "vroievr192" (<@ LanguagePrimitives.GenericOne<decimal> @>) 1M
1196+
checkEval "vroievr091a" (<@ LanguagePrimitives.GenericZero<char> @>) '\000'
1197+
checkEval "vroievr091b" (<@ LanguagePrimitives.GenericZero<sbyte> @>) 0y
1198+
checkEval "vroievr091c" (<@ LanguagePrimitives.GenericZero<int16> @>) 0s
1199+
checkEval "vroievr091d" (<@ LanguagePrimitives.GenericZero<int32> @>) 0
1200+
checkEval "vroievr091e" (<@ LanguagePrimitives.GenericZero<int64> @>) 0L
1201+
checkEval "vroievr091f" (<@ LanguagePrimitives.GenericZero<nativeint> @>) 0n
1202+
checkEval "vroievr091g" (<@ LanguagePrimitives.GenericZero<byte> @>) 0uy
1203+
checkEval "vroievr091h" (<@ LanguagePrimitives.GenericZero<uint16> @>) 0us
1204+
checkEval "vroievr091i" (<@ LanguagePrimitives.GenericZero<uint32> @>) 0u
1205+
checkEval "vroievr091j" (<@ LanguagePrimitives.GenericZero<uint64> @>) 0UL
1206+
checkEval "vroievr091k" (<@ LanguagePrimitives.GenericZero<unativeint> @>) 0un
1207+
checkEval "vroievr091l" (<@ LanguagePrimitives.GenericZero<float> @>) 0.0
1208+
checkEval "vroievr091m" (<@ LanguagePrimitives.GenericZero<float32> @>) 0.0f
1209+
checkEval "vroievr091n" (<@ LanguagePrimitives.GenericZero<decimal> @>) 0M
1210+
1211+
checkEval "vroievr092a" (<@ LanguagePrimitives.GenericOne<char> @>) '\001'
1212+
checkEval "vroievr092b" (<@ LanguagePrimitives.GenericOne<sbyte> @>) 1y
1213+
checkEval "vroievr092c" (<@ LanguagePrimitives.GenericOne<int16> @>) 1s
1214+
checkEval "vroievr092d" (<@ LanguagePrimitives.GenericOne<int32> @>) 1
1215+
checkEval "vroievr092e" (<@ LanguagePrimitives.GenericOne<int64> @>) 1L
1216+
checkEval "vroievr092f" (<@ LanguagePrimitives.GenericOne<nativeint> @>) 1n
1217+
checkEval "vroievr092g" (<@ LanguagePrimitives.GenericOne<byte> @>) 1uy
1218+
checkEval "vroievr092h" (<@ LanguagePrimitives.GenericOne<uint16> @>) 1us
1219+
checkEval "vroievr092i" (<@ LanguagePrimitives.GenericOne<uint32> @>) 1u
1220+
checkEval "vroievr092j" (<@ LanguagePrimitives.GenericOne<uint64> @>) 1UL
1221+
checkEval "vroievr092k" (<@ LanguagePrimitives.GenericOne<unativeint> @>) 1un
1222+
checkEval "vroievr092l" (<@ LanguagePrimitives.GenericOne<float> @>) 1.0
1223+
checkEval "vroievr092m" (<@ LanguagePrimitives.GenericOne<float32> @>) 1.0f
1224+
checkEval "vroievr092n" (<@ LanguagePrimitives.GenericOne<decimal> @>) 1M
12251225

12261226
check "vroievr0971" (LanguagePrimitives.AdditionDynamic 3y 4y) 7y
12271227
check "vroievr0972" (LanguagePrimitives.AdditionDynamic 3s 4s) 7s

0 commit comments

Comments
 (0)