-
Notifications
You must be signed in to change notification settings - Fork 9
Open
Description
When JuliaLang/julia#23273 is merged, these changes will be needed:
diff --git a/base/nullable.jl b/base/nullable.jl
index bb30755..3d08709 100644
--- a/base/nullable.jl
+++ b/base/nullable.jl
@@ -51,21 +51,11 @@ Nullable() = Nullable{Union{}}()
eltype(::Type{Nullable{T}}) where {T} = T
-convert(::Type{Nullable{T}}, x::Nullable{T}) where {T} = x
-convert(::Type{Nullable }, x::Nullable ) = x
+convert(::Type{T}, x::T) where {T<:Nullable} = x
+convert(::Type{Nullable}, x::Nullable) = x
-convert(t::Type{Nullable{T}}, x::Any) where {T} = convert(t, convert(T, x))
-
-function convert(::Type{Nullable{T}}, x::Nullable) where T
- return isnull(x) ? Nullable{T}() : Nullable{T}(convert(T, get(x)))
-end
-
-convert(::Type{Nullable{T}}, x::T) where {T<:Nullable} = Nullable{T}(x)
-convert(::Type{Nullable{T}}, x::T) where {T} = Nullable{T}(x)
-convert(::Type{Nullable }, x::T) where {T} = Nullable{T}(x)
-
-convert(::Type{Nullable{T}}, ::Void) where {T} = Nullable{T}()
-convert(::Type{Nullable }, ::Void) = Nullable{Union{}}()
+convert(::Type{T}, x::Any ) where {T<:Nullable} = T(x)
+convert(::Type{T}, x::Void) where {T<:Nullable} = T()
promote_rule(::Type{Nullable{S}}, ::Type{T}) where {S,T} = Nullable{promote_type(S, T)}
promote_rule(::Type{Nullable{S}}, ::Type{Nullable{T}}) where {S,T} = Nullable{promote_type(S, T)}
diff --git a/base/nullabletype.jl b/base/nullabletype.jl
index 8c1c9c3..c09b2a0 100644
--- a/base/nullabletype.jl
+++ b/base/nullabletype.jl
@@ -5,5 +5,8 @@ struct Nullable{T}
value::T
Nullable{T}() where {T} = new(false)
- Nullable{T}(value::T, hasvalue::Bool=true) where {T} = new(hasvalue, value)
+ Nullable{T}(value, hasvalue::Bool=true) where {T} = new(hasvalue, value)
+ Nullable{T}(::Void) where {T} = Nullable{T}()
+ (::Type{Nullable{Void}})(::Void) = new{Void}(true, nothing)
+ Nullable{T}(x::Nullable) where {T} = isnull(x) ? Nullable{T}() : Nullable{T}(convert(T, get(x)))
endmindboundararslan
Metadata
Metadata
Assignees
Labels
No labels