@@ -20,21 +20,27 @@ convert(::Type{Ptr{Uint8}}, s::ByteString) = convert(Ptr{Uint8}, s.data)
20
20
21
21
pointer {T} (:: Type{T} , x:: Uint ) = convert (Ptr{T}, x)
22
22
pointer {T} (:: Type{T} , x:: Ptr ) = convert (Ptr{T}, x)
23
+ pointer (:: Type{Any} , x:: Uint ) = convert (Ptr{Ptr{Any}}, x)
24
+ pointer (:: Type{Any} , x:: Ptr ) = convert (Ptr{Ptr{Any}}, x)
23
25
# note: these definitions don't mean any AbstractArray is convertible to
24
26
# pointer. they just map the array element type to the pointer type for
25
27
# convenience in cases that work.
26
28
pointer {T} (x:: AbstractArray{T} ) = convert (Ptr{T},x)
29
+ pointer (x:: AbstractArray{Any} ) = convert (Ptr{Ptr{Any}},x)
27
30
pointer {T} (x:: AbstractArray{T} , i:: Int ) = convert (Ptr{T},x) + (i- 1 )* sizeof (T)
31
+ pointer {T} (x:: AbstractArray{Any} , i:: Int ) = convert (Ptr{Ptr{Any}},x) + (i- 1 )* sizeof (T)
28
32
29
33
# unsafe pointer to array conversions
30
34
pointer_to_array (p, dims) = pointer_to_array (p, dims, false )
31
35
function pointer_to_array {T,N} (p:: Ptr{T} , dims:: NTuple{N,Int} , own:: Bool )
32
36
ccall (:jl_ptr_to_array , Array{T,N}, (Any, Ptr{T}, Any, Int32),
33
37
Array{T,N}, p, dims, own)
34
38
end
35
- unsafe_ref (p:: Ptr ,i:: Integer ) = pointerref (p, int (i))
39
+ unsafe_ref (p:: Ptr , i:: Integer ) = pointerref (p, int (i))
40
+ unsafe_ref (p:: Ptr{Ptr{Any}} , i:: Integer ) = pointerref (pointerref (p, int (i)), 1 )
36
41
unsafe_ref (p:: Ptr ) = unsafe_ref (p, 1 )
37
- unsafe_assign (p:: Ptr{Any} , x:: ANY , i:: Integer ) = pointerset (p, x, int (i))
42
+ unsafe_assign (p:: Ptr{Any} , x, i:: Integer ) = error (" cannot unsafe_assign to contents of type Any" )
43
+ unsafe_assign (p:: Ptr{Ptr{Any}} , x:: ANY , i:: Integer ) = pointerset (convert (Ptr{Any},p), x, int (i))
38
44
unsafe_assign {T} (p:: Ptr{T} , x, i:: Integer ) = pointerset (p, convert (T, x), int (i))
39
45
unsafe_assign {T} (p:: Ptr{T} , x) = unsafe_assign (p, convert (T,x), 1 )
40
46
0 commit comments