From 6225ea415ad9f968ef97586eca9a3810c41d095b Mon Sep 17 00:00:00 2001 From: Helge Eichhorn Date: Wed, 28 Jul 2021 18:48:43 +0200 Subject: [PATCH 1/2] Remove unnecessary `preserve` calls --- src/g.jl | 26 +++++++++++++------------- src/u.jl | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/g.jl b/src/g.jl index 26ac8b0..1d99b59 100644 --- a/src/g.jl +++ b/src/g.jl @@ -326,14 +326,14 @@ function gfevnt(udstep, udrefn, gquant, qpnams, qcpars, qdpars, qipars, qlpars, _qipars = SpiceInt.(qipars) _qlpars = SpiceBoolean.(qlpars) function _udstep(et::SpiceDouble, step::Ptr{SpiceDouble}) - _step = GC.@preserve step unsafe_wrap(Array{SpiceDouble}, step, 1) + _step = unsafe_wrap(Array{SpiceDouble}, step, 1) _step[1] = udstep(et) nothing end udstep_ptr = @cfunction($_udstep, Cvoid, (SpiceDouble, Ptr{SpiceDouble})) function _udrefn(t1::SpiceDouble, t2::SpiceDouble, s1::SpiceBoolean, s2::SpiceBoolean, t::Ptr{SpiceDouble}) - _t = GC.@preserve t unsafe_wrap(Array{SpiceDouble}, t, 1) + _t = unsafe_wrap(Array{SpiceDouble}, t, 1) _t[1] = udrefn(t1, t2, s1, s2) nothing end @@ -342,7 +342,7 @@ function gfevnt(udstep, udrefn, gquant, qpnams, qcpars, qdpars, qipars, qlpars, Ptr{SpiceDouble})) udrepf_ptr = @cfunction($udrepf, Cvoid, ()) function _udrepi(window::Ptr{Cell{SpiceDouble}}, begmss::Cstring, endmss::Cstring) - _window = GC.@preserve window unsafe_load(window, 1) + _window = unsafe_load(window, 1) udrepi(_window, begmss, endmss) end udrepi_ptr = @cfunction($_udrepi, Cvoid, (Ptr{Cell{SpiceDouble}}, Cstring, Cstring)) @@ -400,14 +400,14 @@ function gffove!(inst, tshape, raydir, target, tframe, abcorr, obsrvr, tol, udst rpt, udrepi, udrepu, udrepf, cnfine, result) @checkdims 3 raydir function _udstep(et::SpiceDouble, step::Ptr{SpiceDouble}) - _step = GC.@preserve step unsafe_wrap(Array{SpiceDouble}, step, 1) + _step = unsafe_wrap(Array{SpiceDouble}, step, 1) _step[1] = udstep(et) nothing end udstep_ptr = @cfunction($_udstep, Cvoid, (SpiceDouble, Ptr{SpiceDouble})) function _udrefn(t1::SpiceDouble, t2::SpiceDouble, s1::SpiceBoolean, s2::SpiceBoolean, t::Ptr{SpiceDouble}) - _t = GC.@preserve t unsafe_wrap(Array{SpiceDouble}, t, 1) + _t = unsafe_wrap(Array{SpiceDouble}, t, 1) _t[1] = udrefn(t1, t2, s1, s2) nothing end @@ -416,7 +416,7 @@ function gffove!(inst, tshape, raydir, target, tframe, abcorr, obsrvr, tol, udst Ptr{SpiceDouble})) udrepf_ptr = @cfunction($udrepf, Cvoid, ()) function _udrepi(window::Ptr{Cell{SpiceDouble}}, begmss::Cstring, endmss::Cstring) - _window = GC.@preserve window unsafe_load(window, 1) + _window = unsafe_load(window, 1) udrepi(_window, begmss, endmss) end udrepi_ptr = @cfunction($_udrepi, Cvoid, (Ptr{Cell{SpiceDouble}}, Cstring, Cstring)) @@ -517,14 +517,14 @@ Returns `result`. """ function gfocce!(occtyp, front, fshape, fframe, back, bshape, bframe, abcorr, obsrvr, tol, udstep, udrefn, rpt, udrepi, udrepu, udrepf, cnfine, result) function _udstep(et::SpiceDouble, step::Ptr{SpiceDouble}) - _step = GC.@preserve step unsafe_wrap(Array{SpiceDouble}, step, 1) + _step = unsafe_wrap(Array{SpiceDouble}, step, 1) _step[1] = udstep(et) nothing end udstep_ptr = @cfunction($_udstep, Cvoid, (SpiceDouble, Ptr{SpiceDouble})) function _udrefn(t1::SpiceDouble, t2::SpiceDouble, s1::SpiceBoolean, s2::SpiceBoolean, t::Ptr{SpiceDouble}) - _t = GC.@preserve t unsafe_wrap(Array{SpiceDouble}, t, 1) + _t = unsafe_wrap(Array{SpiceDouble}, t, 1) _t[1] = udrefn(t1, t2, s1, s2) nothing end @@ -533,7 +533,7 @@ function gfocce!(occtyp, front, fshape, fframe, back, bshape, bframe, abcorr, ob Ptr{SpiceDouble})) udrepf_ptr = @cfunction($udrepf, Cvoid, ()) function _udrepi(window::Ptr{Cell{SpiceDouble}}, begmss::Cstring, endmss::Cstring) - _window = GC.@preserve window unsafe_load(window, 1) + _window = unsafe_load(window, 1) udrepi(_window, begmss, endmss) end udrepi_ptr = @cfunction($_udrepi, Cvoid, (Ptr{Cell{SpiceDouble}}, Cstring, Cstring)) @@ -1094,13 +1094,13 @@ Returns `result`. """ function gfudb!(udfuns, udfunb, step, cnfine, result) function _udfuns(et::SpiceDouble, value::Ptr{SpiceDouble}) - _value = GC.@preserve value unsafe_wrap(Array{SpiceDouble}, value, 1) + _value = unsafe_wrap(Array{SpiceDouble}, value, 1) _value[1] = udfuns(et) nothing end udfuns_ptr = @cfunction($_udfuns, Cvoid, (SpiceDouble, Ptr{SpiceDouble})) function _udfunb(_::Ptr{Cvoid}, et::SpiceDouble, value::Ptr{SpiceBoolean}) - _value = GC.@preserve value unsafe_wrap(Array{SpiceBoolean}, value, 1) + _value = unsafe_wrap(Array{SpiceBoolean}, value, 1) _value[1] = udfunb(udfuns, et) nothing end @@ -1139,13 +1139,13 @@ Returns `result`. """ function gfuds!(udfuns, udqdec, relate, refval, adjust, step, nintvls, cnfine, result) function _udfuns(et::SpiceDouble, value::Ptr{SpiceDouble}) - _value = GC.@preserve value unsafe_wrap(Array{SpiceDouble}, value, 1) + _value = unsafe_wrap(Array{SpiceDouble}, value, 1) _value[1] = udfuns(et) nothing end udfuns_ptr = @cfunction($_udfuns, Cvoid, (SpiceDouble, Ptr{SpiceDouble})) function _udqdec(_::Ptr{Cvoid}, et::SpiceDouble, value::Ptr{SpiceBoolean}) - _value = GC.@preserve value unsafe_wrap(Array{SpiceBoolean}, value, 1) + _value = unsafe_wrap(Array{SpiceBoolean}, value, 1) _value[1] = udqdec(udfuns, et) nothing end diff --git a/src/u.jl b/src/u.jl index 1517c6a..e82d7dc 100644 --- a/src/u.jl +++ b/src/u.jl @@ -69,7 +69,7 @@ Returns the approximate derivative of `udfunc` at `x`. """ function uddf(udfunc, x, dx) function _udfunc(et::SpiceDouble, value::Ptr{SpiceDouble}) - value_ = GC.@preserve value unsafe_wrap(Array{SpiceDouble}, value, 1) + value_ = unsafe_wrap(Array{SpiceDouble}, value, 1) value_[1] = udfunc(et) nothing end From ee92451c34bfd6e037ad11fa800071bbd0581aec Mon Sep 17 00:00:00 2001 From: Helge Eichhorn Date: Wed, 28 Jul 2021 23:25:35 +0200 Subject: [PATCH 2/2] Remove remaining uses of `GC.@preserve` --- src/cells.jl | 8 ++++---- src/t.jl | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/cells.jl b/src/cells.jl index 4437981..1e84b6a 100644 --- a/src/cells.jl +++ b/src/cells.jl @@ -35,8 +35,8 @@ len(::Type{SpiceChar}, length) = length += 1 dim(::Type{T}) where {T} = 1 dim(::Type{SpiceChar}) = 2 -data_ptr(::Type{SpiceChar}, data, length) = GC.@preserve data pointer(data, CTRLSZ * length + 1) -data_ptr(::Type{T}, data, _) where {T} = GC.@preserve data pointer(data, CTRLSZ + 1) +data_ptr(::Type{SpiceChar}, data, length) = pointer(data, CTRLSZ * length + 1) +data_ptr(::Type{T}, data, _) where {T} = pointer(data, CTRLSZ + 1) mutable struct SpiceCell{S, T, N} <: AbstractArray{T, 1} data::Array{S, N} @@ -47,7 +47,7 @@ mutable struct SpiceCell{S, T, N} <: AbstractArray{T, 1} cell = Cell{T}(length, size) data = init_data(T, size, length) self = new{T, itertype(T), dim(T)}(data, cell) - self.cell.base = GC.@preserve self pointer(self.data, 1) + self.cell.base = pointer(self.data, 1) self.cell.data = data_ptr(T, self.data, length) self end @@ -179,7 +179,7 @@ Duplicate the SpiceCell `cell`. """ function Base.copy(cell::SpiceCell{T}) where {T} cell_copy = deepcopy(cell) - cell_copy.cell.base = GC.@preserve cell_copy pointer(cell_copy.data, 1) + cell_copy.cell.base = pointer(cell_copy.data, 1) cell_copy.cell.data = data_ptr(T, cell_copy.data, length) cell_copy end diff --git a/src/t.jl b/src/t.jl index 36e7600..fab118d 100644 --- a/src/t.jl +++ b/src/t.jl @@ -229,7 +229,7 @@ version string. """ function tkvrsn(item=:TOOLKIT) out = ccall((:tkvrsn_c, libcspice), Cstring, (Cstring,), string(item)) - GC.@preserve out unsafe_string(pointer(out)) + return unsafe_string(out) end """