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

Remove second internal ValueOption #5717

Merged
merged 3 commits into from
Oct 2, 2018
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
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="FSharp.Core" Version="4.2.3" />
<PackageReference Include="FSharp.Core" Version="4.5.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.6.0" />
<PackageReference Include="NUnit" Version="3.9.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.9.0" />
Expand Down
4 changes: 2 additions & 2 deletions fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<FSharpSourcesRoot>$(MSBuildProjectDirectory)\..\..\src</FSharpSourcesRoot>
</PropertyGroup>
Expand Down Expand Up @@ -635,7 +635,7 @@
</Compile>
</ItemGroup>
<ItemGroup>
<PackageReference Include="FSharp.Core" Version="4.1.18" />
<PackageReference Include="FSharp.Core" Version="4.5.2" />
<PackageReference Include="System.Collections.Immutable" Version="1.5.0" />
<PackageReference Include="System.Reflection.Metadata" Version="1.6.0" />
</ItemGroup>
Expand Down
10 changes: 2 additions & 8 deletions src/absil/illib.fs
Original file line number Diff line number Diff line change
Expand Up @@ -432,18 +432,12 @@ module List =
let existsSquared f xss = xss |> List.exists (fun xs -> xs |> List.exists (fun x -> f x))
let mapiFoldSquared f z xss = mapFoldSquared f z (xss |> mapiSquared (fun i j x -> (i,j,x)))

[<Struct>]
type ValueOption<'T> =
| ValueSome of 'T
| ValueNone
member x.IsSome = match x with ValueSome _ -> true | ValueNone -> false
member x.IsNone = match x with ValueSome _ -> false | ValueNone -> true
member x.Value = match x with ValueSome r -> r | ValueNone -> failwith "ValueOption.Value: value is None"

[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
module ValueOption =
let inline ofOption x = match x with Some x -> ValueSome x | None -> ValueNone
let inline bind f x = match x with ValueSome x -> f x | ValueNone -> ValueNone
let inline isSome x = match x with ValueSome _ -> true | ValueNone -> false
let inline isNone x = match x with ValueSome _ -> false | ValueNone -> true

type String with
member inline x.StartsWithOrdinal(value) =
Expand Down
2 changes: 1 addition & 1 deletion src/fsharp/NameResolution.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1100,7 +1100,7 @@ let AddEntityForProvidedType (amap: Import.ImportMap, modref: ModuleOrNamespaceR
let tycon = Construct.NewProvidedTycon(resolutionEnvironment, st, importProvidedType, isSuppressRelocate, m)
modref.ModuleOrNamespaceType.AddProvidedTypeEntity(tycon)
let tcref = modref.NestedTyconRef tycon
System.Diagnostics.Debug.Assert modref.TryDeref.IsSome
System.Diagnostics.Debug.Assert(ValueOption.isSome modref.TryDeref)
tcref


Expand Down
2 changes: 1 addition & 1 deletion src/fsharp/Optimizer.fs
Original file line number Diff line number Diff line change
Expand Up @@ -3090,7 +3090,7 @@ and OptimizeBinding cenv isRec env (TBind(vref, expr, spBind)) =
| None -> false
| Some mbrTyconRef ->
// Check we can deref system_MarshalByRefObject_tcref. When compiling against the Silverlight mscorlib we can't
if mbrTyconRef.TryDeref.IsSome then
if ValueOption.isSome mbrTyconRef.TryDeref then
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please, we should have defined an .IsSome property on ValueOption before accepting this change.

Part of the whole point of property syntax is that it creates far less churn when changing type.

// Check if this is a subtype of MarshalByRefObject
assert (cenv.g.system_MarshalByRefObject_ty.IsSome)
ExistsSameHeadTypeInHierarchy cenv.g cenv.amap vref.Range (generalizedTyconRef tcref) cenv.g.system_MarshalByRefObject_ty.Value
Expand Down
2 changes: 1 addition & 1 deletion src/fsharp/QuotationTranslator.fs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ type QuotationGenerationScope =

static member ComputeQuotationFormat g =
let deserializeExValRef = ValRefForIntrinsic g.deserialize_quoted_FSharp_40_plus_info
if deserializeExValRef.TryDeref.IsSome then
if ValueOption.isSome deserializeExValRef.TryDeref then
QuotationSerializationFormat.FSharp_40_Plus
else
QuotationSerializationFormat.FSharp_20_Plus
Expand Down
16 changes: 8 additions & 8 deletions src/fsharp/symbols/Symbols.fs
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ module Impl =
let entityIsUnresolved(entity:EntityRef) =
match entity with
| ERefNonLocal(NonLocalEntityRef(ccu, _)) ->
ccu.IsUnresolvedReference && entity.TryDeref.IsNone
ccu.IsUnresolvedReference && ValueOption.isNone entity.TryDeref
| _ -> false

let checkEntityIsResolved(entity:EntityRef) =
Expand Down Expand Up @@ -754,10 +754,10 @@ and FSharpUnionCase(cenv, v: UnionCaseRef) =


let isUnresolved() =
entityIsUnresolved v.TyconRef || v.TryUnionCase.IsNone
entityIsUnresolved v.TyconRef || ValueOption.isNone v.TryUnionCase
let checkIsResolved() =
checkEntityIsResolved v.TyconRef
if v.TryUnionCase.IsNone then
if ValueOption.isNone v.TryUnionCase then
invalidOp (sprintf "The union case '%s' could not be found in the target type" v.CaseName)

member __.IsUnresolved =
Expand Down Expand Up @@ -854,18 +854,18 @@ and FSharpField(cenv: SymbolEnv, d: FSharpFieldData) =
let isUnresolved() =
entityIsUnresolved d.DeclaringTyconRef ||
match d with
| RecdOrClass v -> v.TryRecdField.IsNone
| Union (v, _) -> v.TryUnionCase.IsNone
| RecdOrClass v -> ValueOption.isNone v.TryRecdField
| Union (v, _) -> ValueOption.isNone v.TryUnionCase
| ILField _ -> false

let checkIsResolved() =
checkEntityIsResolved d.DeclaringTyconRef
match d with
| RecdOrClass v ->
if v.TryRecdField.IsNone then
if ValueOption.isNone v.TryRecdField then
invalidOp (sprintf "The record field '%s' could not be found in the target type" v.FieldName)
| Union (v, _) ->
if v.TryUnionCase.IsNone then
if ValueOption.isNone v.TryUnionCase then
invalidOp (sprintf "The union case '%s' could not be found in the target type" v.CaseName)
| ILField _ -> ()

Expand Down Expand Up @@ -1331,7 +1331,7 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
let isUnresolved() =
match fsharpInfo() with
| None -> false
| Some v -> v.TryDeref.IsNone
| Some v -> ValueOption.isNone v.TryDeref

let checkIsResolved() =
if isUnresolved() then
Expand Down
16 changes: 8 additions & 8 deletions src/fsharp/tast.fs
Original file line number Diff line number Diff line change
Expand Up @@ -3261,7 +3261,7 @@ and
ValueSome tcr.binding

/// Is the destination assembly available?
member tcr.CanDeref = tcr.TryDeref.IsSome
member tcr.CanDeref = ValueOption.isSome tcr.TryDeref

/// Gets the data indicating the compiled representation of a type or module in terms of Abstract IL data structures.
member x.CompiledRepresentation = x.Deref.CompiledRepresentation
Expand Down Expand Up @@ -3812,7 +3812,7 @@ and
| None -> error(InternalError(sprintf "union case %s not found in type %s" x.CaseName x.TyconRef.LogicalName, x.TyconRef.Range))

/// Try to dereference the reference
member x.TryUnionCase = x.TyconRef.TryDeref |> ValueOption.bind (fun tcref -> tcref.GetUnionCaseByName x.CaseName |> ValueOption.ofOption)
member x.TryUnionCase = x.TyconRef.TryDeref |> ValueOption.bind (fun tcref -> tcref.GetUnionCaseByName x.CaseName |> ValueOption.ofOption)

/// Get the attributes associated with the union case
member x.Attribs = x.UnionCase.Attribs
Expand Down Expand Up @@ -5447,9 +5447,9 @@ let primEntityRefEq compilingFslib fslibCcu (x : EntityRef) (y : EntityRef) =
// The tcrefs may have forwarders. If they may possibly be equal then resolve them to get their canonical references
// and compare those using pointer equality.
(not (nonLocalRefDefinitelyNotEq x.nlr y.nlr) &&
let v1 = x.TryDeref
let v2 = y.TryDeref
v1.IsSome && v2.IsSome && v1.Value === v2.Value)) then
match x.TryDeref with
| ValueSome v1 -> match y.TryDeref with ValueSome v2 -> v1 === v2 | _ -> false
| _ -> match y.TryDeref with ValueNone -> true | _ -> false)) then
true
else
compilingFslib && fslibEntityRefEq fslibCcu x y
Expand All @@ -5473,9 +5473,9 @@ let primValRefEq compilingFslib fslibCcu (x : ValRef) (y : ValRef) =
else
(// Use TryDeref to guard against the platforms/times when certain F# language features aren't available,
// e.g. CompactFramework doesn't have support for quotations.
let v1 = x.TryDeref
let v2 = y.TryDeref
v1.IsSome && v2.IsSome && v1.Value === v2.Value)
match x.TryDeref with
| ValueSome v1 -> match y.TryDeref with ValueSome v2 -> v1 === v2 | _ -> false
| _ -> match y.TryDeref with ValueNone -> true | _ -> false)
|| (if compilingFslib then fslibValRefEq fslibCcu x y else false)

//---------------------------------------------------------------------------
Expand Down