Skip to content

Commit

Permalink
Add function-first finalizers (#416)
Browse files Browse the repository at this point in the history
  • Loading branch information
ararslan authored Nov 30, 2017
1 parent 47a5a7a commit 5ab47d1
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 1 deletion.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,9 @@ Currently, the `@compat` macro supports the following syntaxes:

* `Uninitialized` and `uninitialized` with corresponding `Array` constructors ([#24652]).

* `finalizer` accepts the finalizer to run as the first argument and the object to be finalized
as the second ([#24605])

## Renaming


Expand Down Expand Up @@ -363,5 +366,6 @@ includes this fix. Find the minimum version from there.
[#24282]: https://github.com/JuliaLang/julia/issues/24282
[#24372]: https://github.com/JuliaLang/julia/issues/24372
[#24459]: https://github.com/JuliaLang/julia/issues/24459
[#24605]: https://github.com/JuliaLang/julia/issues/24605
[#24652]: https://github.com/JuliaLang/julia/issues/24652
[#24657]: https://github.com/JuliaLang/julia/issues/24657
8 changes: 8 additions & 0 deletions src/Compat.jl
Original file line number Diff line number Diff line change
Expand Up @@ -818,6 +818,14 @@ end
export Uninitialized, uninitialized
end

if VERSION < v"0.7.0-DEV.2562"
import Base: finalizer
finalizer(f::Function, o) = finalizer(o, f)
finalizer(f::Ptr{Void}, o) = finalizer(o, f)
finalizer(f::Ptr{Void}, o::Ptr{Void}) = invoke(finalizer, Tuple{Ptr{Void}, Any}, f, o)
finalizer(f::Ptr{Void}, o::Function) = invoke(finalizer, Tuple{Ptr{Void}, Any}, f, o)
end

include("deprecated.jl")

end # module Compat
12 changes: 11 additions & 1 deletion test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -900,7 +900,6 @@ let a = [1 0 0; 0 1 0; 0 0 1]
@test SparseMatrixCSC{Complex128,Int8}(I, 3, 2)::SparseMatrixCSC{Complex128,Int8} == a[:,1:2]
end


# 0.7.0-DEV.2581
@test isa(Vector(uninitialized, 2), Vector{Any})
@test isa(Vector{Float64}(uninitialized, 2), Vector{Float64})
Expand All @@ -909,6 +908,17 @@ end
@test isa(Array{Float64}(uninitialized, 2, 2), Matrix{Float64})
@test isa(Array{Float64,3}(uninitialized, 2, 2, 2), Array{Float64,3})

# 0.7
let A = [1]
local x = 0
finalizer(a->(x+=1), A)
finalize(A)
@test x == 1
A = 0
gc(); gc()
@test x == 1
end

if VERSION < v"0.6.0"
include("deprecated.jl")
end
Expand Down

0 comments on commit 5ab47d1

Please sign in to comment.