Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move nullable into separate files #8801

Merged
merged 6 commits into from
Mar 27, 2020
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
6 changes: 6 additions & 0 deletions src/fsharp/FSharp.Core/FSharp.Core.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,12 @@
<Compile Include="mailbox.fs">
<Link>MailboxProcessor/mailbox.fs</Link>
</Compile>
<Compile Include="Nullable.fsi">
<Link>Queries/Nullable.fsi</Link>
</Compile>
<Compile Include="Nullable.fs">
<Link>Queries/Nullable.fs</Link>
</Compile>
<Compile Include="Linq.fsi">
<Link>Queries/Linq.fsi</Link>
</Compile>
Expand Down
147 changes: 2 additions & 145 deletions src/fsharp/FSharp.Core/Linq.fs
Original file line number Diff line number Diff line change
@@ -1,150 +1,5 @@
// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.

#nowarn "1204"

namespace Microsoft.FSharp.Linq


open Microsoft.FSharp
open Microsoft.FSharp.Collections
open Microsoft.FSharp.Core
open Microsoft.FSharp.Core.Operators
open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators

module NullableOperators =
open System
let (?>=) (x : Nullable<'T>) (y: 'T) = x.HasValue && x.Value >= y

let (?>) (x : Nullable<'T>) (y: 'T) = x.HasValue && x.Value > y

let (?<=) (x : Nullable<'T>) (y: 'T) = x.HasValue && x.Value <= y

let (?<) (x : Nullable<'T>) (y: 'T) = x.HasValue && x.Value < y

let (?=) (x : Nullable<'T>) (y: 'T) = x.HasValue && x.Value = y

let (?<>) (x : Nullable<'T>) (y: 'T) = not (x ?= y)

let (>=?) (x : 'T) (y: Nullable<'T>) = y.HasValue && x >= y.Value

let (>?) (x : 'T) (y: Nullable<'T>) = y.HasValue && x > y.Value

let (<=?) (x : 'T) (y: Nullable<'T>) = y.HasValue && x <= y.Value

let (<?) (x : 'T) (y: Nullable<'T>) = y.HasValue && x < y.Value

let (=?) (x : 'T) (y: Nullable<'T>) = y.HasValue && x = y.Value

let (<>?) (x : 'T) (y: Nullable<'T>) = not (x =? y)

let (?>=?) (x : Nullable<'T>) (y: Nullable<'T>) = (x.HasValue && y.HasValue && x.Value >= y.Value)

let (?>?) (x : Nullable<'T>) (y: Nullable<'T>) = (x.HasValue && y.HasValue && x.Value > y.Value)

let (?<=?) (x : Nullable<'T>) (y: Nullable<'T>) = (x.HasValue && y.HasValue && x.Value <= y.Value)

let (?<?) (x : Nullable<'T>) (y: Nullable<'T>) = (x.HasValue && y.HasValue && x.Value < y.Value)

let (?=?) (x : Nullable<'T>) (y: Nullable<'T>) = (not x.HasValue && not y.HasValue) || (x.HasValue && y.HasValue && x.Value = y.Value)

let (?<>?) (x : Nullable<'T>) (y: Nullable<'T>) = not (x ?=? y)

let inline (?+) (x : Nullable<_>) y = if x.HasValue then Nullable(x.Value + y) else Nullable()

let inline (+?) x (y: Nullable<_>) = if y.HasValue then Nullable(x + y.Value) else Nullable()

let inline (?+?) (x : Nullable<_>) (y: Nullable<_>) = if x.HasValue && y.HasValue then Nullable(x.Value + y.Value) else Nullable()

let inline (?-) (x : Nullable<_>) y = if x.HasValue then Nullable(x.Value - y) else Nullable()

let inline (-?) x (y: Nullable<_>) = if y.HasValue then Nullable(x - y.Value) else Nullable()

let inline (?-?) (x : Nullable<_>) (y: Nullable<_>) = if x.HasValue && y.HasValue then Nullable(x.Value - y.Value) else Nullable()

let inline ( ?* ) (x : Nullable<_>) y = if x.HasValue then Nullable(x.Value * y) else Nullable()

let inline ( *? ) x (y: Nullable<_>) = if y.HasValue then Nullable(x * y.Value) else Nullable()

let inline ( ?*? ) (x : Nullable<_>) (y: Nullable<_>) = if x.HasValue && y.HasValue then Nullable(x.Value * y.Value) else Nullable()

let inline ( ?% ) (x : Nullable<_>) y = if x.HasValue then Nullable(x.Value % y) else Nullable()

let inline ( %? ) x (y: Nullable<_>) = if y.HasValue then Nullable(x % y.Value) else Nullable()

let inline ( ?%? ) (x : Nullable<_>) (y: Nullable<_>) = if x.HasValue && y.HasValue then Nullable(x.Value % y.Value) else Nullable()

let inline ( ?/ ) (x : Nullable<_>) y = if x.HasValue then Nullable(x.Value / y) else Nullable()

let inline ( /? ) x (y: Nullable<_>) = if y.HasValue then Nullable(x / y.Value) else Nullable()

let inline ( ?/? ) (x : Nullable<_>) (y: Nullable<_>) = if x.HasValue && y.HasValue then Nullable(x.Value / y.Value) else Nullable()

[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
[<RequireQualifiedAccess>]
module Nullable =

open System

[<CompiledName("ToUInt8")>]
let inline uint8 (value:Nullable<_>) = if value.HasValue then Nullable(Operators.byte value.Value) else Nullable()

[<CompiledName("ToInt8")>]
let inline int8 (value:Nullable<_>) = if value.HasValue then Nullable(Operators.sbyte value.Value) else Nullable()

[<CompiledName("ToByte")>]
let inline byte (value:Nullable<_>) = if value.HasValue then Nullable(Operators.byte value.Value) else Nullable()

[<CompiledName("ToSByte")>]
let inline sbyte (value:Nullable<_>) = if value.HasValue then Nullable(Operators.sbyte value.Value) else Nullable()

[<CompiledName("ToInt16")>]
let inline int16 (value:Nullable<_>) = if value.HasValue then Nullable(Operators.int16 value.Value) else Nullable()

[<CompiledName("ToUInt16")>]
let inline uint16 (value:Nullable<_>) = if value.HasValue then Nullable(Operators.uint16 value.Value) else Nullable()

[<CompiledName("ToInt")>]
let inline int (value:Nullable<_>) = if value.HasValue then Nullable(Operators.int value.Value) else Nullable()

[<CompiledName("ToEnum")>]
let inline enum (value:Nullable< int32 >) = if value.HasValue then Nullable(Operators.enum value.Value) else Nullable()

[<CompiledName("ToInt32")>]
let inline int32 (value:Nullable<_>) = if value.HasValue then Nullable(Operators.int32 value.Value) else Nullable()

[<CompiledName("ToUInt32")>]
let inline uint32 (value:Nullable<_>) = if value.HasValue then Nullable(Operators.uint32 value.Value) else Nullable()

[<CompiledName("ToInt64")>]
let inline int64 (value:Nullable<_>) = if value.HasValue then Nullable(Operators.int64 value.Value) else Nullable()

[<CompiledName("ToUInt64")>]
let inline uint64 (value:Nullable<_>) = if value.HasValue then Nullable(Operators.uint64 value.Value) else Nullable()

[<CompiledName("ToFloat32")>]
let inline float32 (value:Nullable<_>) = if value.HasValue then Nullable(Operators.float32 value.Value) else Nullable()

[<CompiledName("ToFloat")>]
let inline float (value:Nullable<_>) = if value.HasValue then Nullable(Operators.float value.Value) else Nullable()

[<CompiledName("ToSingle")>]
let inline single (value:Nullable<_>) = if value.HasValue then Nullable(Operators.float32 value.Value) else Nullable()

[<CompiledName("ToDouble")>]
let inline double (value:Nullable<_>) = if value.HasValue then Nullable(Operators.float value.Value) else Nullable()

[<CompiledName("ToIntPtr")>]
let inline nativeint (value:Nullable<_>) = if value.HasValue then Nullable(Operators.nativeint value.Value) else Nullable()

[<CompiledName("ToUIntPtr")>]
let inline unativeint (value:Nullable<_>) = if value.HasValue then Nullable(Operators.unativeint value.Value) else Nullable()

[<CompiledName("ToDecimal")>]
let inline decimal (value:Nullable<_>) = if value.HasValue then Nullable(Operators.decimal value.Value) else Nullable()

[<CompiledName("ToChar")>]
let inline char (value:Nullable<_>) = if value.HasValue then Nullable(Operators.char value.Value) else Nullable()

namespace Microsoft.FSharp.Linq.RuntimeHelpers

open System
Expand All @@ -162,6 +17,8 @@ open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Quotations.Patterns
open Microsoft.FSharp.Quotations.DerivedPatterns

#nowarn "1204"

module LeafExpressionConverter =

// The following is recognized as a LINQ 'member initialization pattern' in a quotation.
Expand Down
Loading