|
9 | 9 | # The parent method for memoryref was added in 1.12. In versions before that, |
10 | 10 | # it can be accessed by reaching into internals. |
11 | 11 | @static if VERSION < v"1.12" |
12 | | - Base.parent(v::MemoryView) = v.ref.mem |
| 12 | + Base.parent(@nospecialize(v::MemoryView)) = v.ref.mem |
13 | 13 | else |
14 | | - Base.parent(v::MemoryView) = parent(v.ref) |
| 14 | + Base.parent(@nospecialize(v::MemoryView)) = parent(v.ref) |
15 | 15 | end |
16 | 16 |
|
17 | | -Base.size(v::MemoryView) = (v.len,) |
18 | | -Base.IndexStyle(::Type{<:MemoryView}) = Base.IndexLinear() |
| 17 | +Base.size(@nospecialize(v::MemoryView)) = (v.len,) |
| 18 | +Base.IndexStyle(@nospecialize(T::Type{<:MemoryView})) = Base.IndexLinear() |
19 | 19 |
|
20 | 20 | function Base.iterate(x::MemoryView, i::Int = 1) |
21 | 21 | ((i - 1) % UInt) < (length(x) % UInt) || return nothing |
@@ -48,7 +48,7 @@ function Base.copy(x::MemoryView{T, M}) where {T, M} |
48 | 48 | return unsafe_new_memoryview(M, memoryref(newmem), x.len) |
49 | 49 | end |
50 | 50 |
|
51 | | -function Base.checkbounds(v::MemoryView, is...) |
| 51 | +function Base.checkbounds(@nospecialize(v::MemoryView), is...) |
52 | 52 | checkbounds_lightboundserror(v, is...) |
53 | 53 | end |
54 | 54 |
|
@@ -76,10 +76,10 @@ Base.unsafe_convert(::Type{Ptr{T}}, v::MemoryView{T}) where {T} = pointer(v) |
76 | 76 | Base.cconvert(::Type{<:Ptr{T}}, v::MemoryView{T}) where {T} = v.ref |
77 | 77 | Base.elsize(::Type{<:MemoryView{T}}) where {T} = Base.elsize(Memory{T}) |
78 | 78 | Base.sizeof(x::MemoryView) = Base.elsize(typeof(x)) * length(x) |
79 | | -Base.strides(::MemoryView) = (1,) |
| 79 | +Base.strides(@nospecialize(::MemoryView)) = (1,) |
80 | 80 |
|
81 | 81 | # For two distinct element types, they can't alias |
82 | | -Base.mightalias(::MemoryView, ::MemoryView) = false |
| 82 | +Base.mightalias(@nospecialize(::MemoryView), @nospecialize(::MemoryView)) = false |
83 | 83 |
|
84 | 84 | function Base.mightalias(a::MemoryView{T}, b::MemoryView{T}) where {T} |
85 | 85 | (isempty(a) | isempty(b)) && return false |
@@ -131,7 +131,7 @@ function Base.getindex(v::MemoryView{T, M}, idx::Base.OneTo) where {T, M} |
131 | 131 | return unsafe_new_memoryview(M, v.ref, last(idx)) |
132 | 132 | end |
133 | 133 |
|
134 | | -Base.getindex(v::MemoryView, ::Colon) = v |
| 134 | +Base.getindex(@nospecialize(v::MemoryView), ::Colon) = v |
135 | 135 | Base.@propagate_inbounds Base.view(v::MemoryView, idx::AbstractUnitRange) = v[idx] |
136 | 136 |
|
137 | 137 | # Efficient way to get `mem[1:include_last]`. |
|
392 | 392 | function Iterators.reverse(mem::MemoryView{T}) where {T} |
393 | 393 | return ReverseMemoryView{T}(ImmutableMemoryView(mem)) |
394 | 394 | end |
395 | | -Iterators.reverse(x::ReverseMemoryView) = x.mem |
| 395 | +Iterators.reverse(@nospecialize(x::ReverseMemoryView)) = x.mem |
396 | 396 |
|
397 | | -Base.length(x::ReverseMemoryView) = length(x.mem) |
| 397 | +Base.length(@nospecialize(x::ReverseMemoryView)) = length(x.mem) |
398 | 398 | Base.eltype(::Type{ReverseMemoryView{T}}) where {T} = T |
399 | 399 |
|
400 | 400 | function Base.iterate(x::ReverseMemoryView, state = length(x)) |
|
0 commit comments