Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrectly positioned type assertion #521

Open
jishnub opened this issue Dec 14, 2023 · 0 comments
Open

Incorrectly positioned type assertion #521

jishnub opened this issue Dec 14, 2023 · 0 comments
Labels
bug Something isn't working TypedSyntax An issue or pull request relating to the TypedSyntax.jl subpackage

Comments

@jishnub
Copy link
Contributor

jishnub commented Dec 14, 2023

julia> @descend_code_warntype Base.print_matrix(stdout, rand(2,2))
[ Info: tracking Base
print_matrix(io::IO, X::AbstractVecOrMat) @ Base ~/packages/julias/julia-1.9/share/julia/base/arrayshow.jl:163
[ Info: This method only fills in default arguments; descend into the body method to see the full source.
163 function print_matrix(io::Base.TTY::IO, X::Matrix{Float64}::AbstractVecOrMat,
164                       pre::AbstractString = " ",  # pre-matrix string
165                       sep::AbstractString = "  ", # separator between elements
166                       post::AbstractString = "",  # post-matrix string
167                       hdots::AbstractString = "  \u2026  ",
168                       vdots::AbstractString = "\u22ee",
169                       ddots::AbstractString = "  \u22f1  ",
170                       hmod::Integer = 5, vmod::Integer = 5)::Core.Const(nothing)
Select a call to descend into or  to ascend. [q]uit. [b]ookmark.
Toggles: [w]arn, [h]ide type-stable statements, [t]ype annotations, [s]yntax highlight for Source/LLVM/Native, [j]ump to source always.
Show: [S]ource code, [A]ST, [T]yped code, [L]LVM IR, [N]ative code
Actions: [E]dit source code, [R]evise and redisplay
 • %1 = print_matrix(::Base.TTY,::Matrix{Float64},::String,::String,::String,::String,::String,::String,::Int64,::Int64)::Core.Const(nothing)
   
print_matrix(io::IO, X::AbstractVecOrMat, pre::AbstractString, sep::AbstractString, post::AbstractString, hdots::AbstractString, vdots::AbstractString, ddots::AbstractString, hmod::Integer, vmod::Integer) @ Base ~/packages/julias/julia-1.9/share/julia/base/arrayshow.jl:163
163 function print_matrix(io::Base.TTY::IO, X::Matrix{Float64}::AbstractVecOrMat,
164                       pre::String::AbstractString = " ",  # pre-matrix string
165                       sep::String::AbstractString = "  ", # separator between elements
166                       post::String::AbstractString = "",  # post-matrix string
167                       hdots::String::AbstractString = "  \u2026  ",
168                       vdots::String::AbstractString = "\u22ee",
169                       ddots::String::AbstractString = "  \u22f1  ",
170                       hmod::Int64::Integer = 5, vmod::Int64::Integer = 5)::Core.Const(nothing)
171     _print_matrix(io::Base.TTY, inferencebarrier(X::Matrix{Float64})::Any, pre::String, sep::String, post::String, hdots::String, vdots::String, ddots::String, hmod::Int64, vmod::Int64, unitrange(axes(X::Matrix{Float64},1)::Base.OneTo{Int64})::UnitRange{Int64}, unitrange(axes(X::Matrix{Float64},2)::Base.OneTo{Int64})::UnitRange{Int64})::Nothing
172 end
Select a call to descend into or  to ascend. [q]uit. [b]ookmark.
Toggles: [w]arn, [h]ide type-stable statements, [t]ype annotations, [s]yntax highlight for Source/LLVM/Native, [j]ump to source always.
Show: [S]ource code, [A]ST, [T]yped code, [L]LVM IR, [N]ative code
Actions: [E]dit source code, [R]evise and redisplay
   inferencebarrier(X::Matrix{Float64})
   axes(X::Matrix{Float64},1)
   unitrange(axes(X::Matrix{Float64},1)::Base.OneTo{Int64})
   axes(X::Matrix{Float64},2)
   unitrange(axes(X::Matrix{Float64},2)::Base.OneTo{Int64})
 • _print_matrix(io::Base.TTY, inferencebarrier(X::Matrix{Float64})::Any, pre::String, sep::String, post::String, hdots::String, vdots::String, ddots::String, hmo
   
_print_matrix(io, X::AbstractVecOrMat, pre, sep, post, hdots, vdots, ddots, hmod, vmod, rowsA, colsA) @ Base ~/packages/julias/julia-1.9/share/julia/base/arrayshow.jl:174
174 function _print_matrix(io::Base.TTY, @nospecialize(X::AbstractVecOrMat::AbstractVecOrMat), pre::String, sep::String, post::String, hdots::String, vdots::String, ddots::String, hmod::Int64, vmod::Int64, rowsA::UnitRange{Int64}, colsA::UnitRange{Int64})::Core.Const(nothing)
175     hmod::Int64, vmod::Int64 = (Int::Type{Int64}(hmod::Int64)::Int64::Int::Type{Int64})::Int64, (Int::Type{Int64}(vmod::Int64)::Int64::Int::Type{Int64})::Int64
176     ncols::Int64, idxlast::Int64 = length(colsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64, last(colsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64
177     if !((get(io::Base.TTY, :limit, false)::Bool::Bool)::Bool)
178         screenheight::Int64 = screenwidth::Int64 = typemax(Int::Type{Int64})::Int64
179     else
180         sz = displaysize(io)::Tuple{Int::Type{Int64},Int::Type{Int64}}
181         screenheight, screenwidth = sz[1] - 4, sz[2]
182     end
183     (screenwidth::Int64 -= ((length(pre::String)::Int64::Int::Type{Int64})::Int64 + (length(post::String)::Int64::Int::Type{Int64})::Int64)::Int64)::Int64
184     presp::String = repeat(" ", (length(pre::String)::Int64::Int::Type{Int64})::Int64)::String  # indent each row to match pre string
185     postsp::String = "::String"
186     @assert (textwidth(hdots::String)::Int64 == textwidth(ddots::String)::Int64)::Bool
187     sepsize::Int64 = (length(sep::String)::Int64::Int::Type{Int64})::Int64
188     m::Int64, n::Int64 = length(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64, length(colsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64
189     # To figure out alignments, only need to look at as many rows as could
190     # fit down screen. If screen has at least as many rows as A, look at A.
191     # If not, then we only need to look at the first and last chunks of A,
192     # each half a screen height in size.
193     halfheight::Core.Const(4611686018427387903) = div(screenheight::Int64,2)::Int64
194     if (m::Int64 > screenheight::Int64)::Bool
195         rowsA::Vector{Int64} = [rowsA[(((0:(halfheight::Int64-1)::Int64)::UnitRange{Int64}) .+ firstindex(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::UnitRange{Int64}]::UnitRange{Int64}; rowsA[(((end-div((screenheight::Int64-1)::Int64,2)::Int64)::Int64+1)::Int64):end]]::Vector{Int64}
196     else
197         rowsA = [rowsA;]
198     end
199     # Similarly for columns, only necessary to get alignments for as many
200     # columns as could conceivably fit across the screen
201     maxpossiblecols::Int64 = div(screenwidth::Int64, (1+sepsize::Int64)::Int64)::Int64
202     if (n::Int64 > maxpossiblecols::Int64)::Bool
203         colsA::Vector{Int64} = [colsA[(((0:(maxpossiblecols::Int64-1)::Int64)::UnitRange{Int64}) .+ firstindex(colsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::UnitRange{Int64}]::UnitRange{Int64}; colsA[((end-maxpossiblecols+1)::Int64):end]]::Vector{Int64}
204     else
205 	    colsA = [colsA;]
206     end
207     A::Vector{Tuple{Int64, Int64}} = alignment(io::Base.TTY, X::AbstractVecOrMat, rowsA::Union{UnitRange{Int64}, Vector{Int64}}, colsA::Union{UnitRange{Int64}, Vector{Int64}}, screenwidth::Int64, screenwidth::Int64, sepsize::Int64, ncols::Int64)::Vector{Tuple{Int64, Int64}}
208     # Nine-slicing is accomplished using print_matrix_row repeatedly
209     if (m::Int64 <= screenheight::Int64)::Bool # rows fit vertically on screen
210         if (n::Int64 <= length(A::Vector{Tuple{Int64, Int64}})::Int64)::Bool # rows and cols fit so just print whole matrix in one piece
211             for i::Int64 in rowsA::Vector{Int64}::Union{Nothing, Tuple{Int64, Int64}}
212                 print(io::Base.TTY, (i::Int64 == first(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::Bool ? pre::String : presp::String)
213                 print_matrix_row(io::Base.TTY, X::AbstractVecOrMat,A::Vector{Tuple{Int64, Int64}},i::Int64,colsA::Union{UnitRange{Int64}, Vector{Int64}},sep::String,idxlast::Int64)
214                 print(io::Base.TTY, (i::Int64 == last(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::Bool ? post::String : postsp::String)
215                 if i != last(rowsA); println(io::Base.TTY); end
216             end
217         else # rows fit down screen but cols don't, so need horizontal ellipsis
218             c::Int64 = (div(((screenwidth::Int64-(length(hdots::String)::Int64::Int::Type{Int64})::Int64)::Int64+1)::Int64,2)::Int64+1)::Int64  # what goes to right of ellipsis
219             Ralign::Vector{Tuple{Int64, Int64}} = reverse(alignment(io::Base.TTY, X::AbstractVecOrMat, rowsA::Vector{Int64}, reverse(colsA::Union{UnitRange{Int64}, Vector{Int64}})::Vector{Int64}, c, c, sepsize::Int64, ncols::Int64)::Vector{Tuple{Int64, Int64}})::Vector{Tuple{Int64, Int64}} # alignments for right
220             c::Int64 = (((screenwidth::Int64 - sum(map(sum,Ralign::Vector{Tuple{Int64, Int64}})::Vector{Int64})::Int64)::Int64 - (((length(Ralign::Vector{Tuple{Int64, Int64}})::Int64-1)::Int64)*sepsize::Int64)::Int64)::Int64 - (length(hdots::String)::Int64::Int::Type{Int64})::Int64)::Int64
221             Lalign::Vector{Tuple{Int64, Int64}} = alignment(io::Base.TTY, X::AbstractVecOrMat, rowsA::Union{UnitRange{Int64}, Vector{Int64}}, colsA::Union{UnitRange{Int64}, Vector{Int64}}, c::Int64, c::Int64, sepsize::Int64, ncols::Int64)::Vector{Tuple{Int64, Int64}} # alignments for left of ellipsis
222             for i::Int64 in rowsA::Vector{Int64}::Union{Nothing, Tuple{Int64, Int64}}
223                 print(io::Base.TTY, (i::Int64 == first(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::Bool ? pre::String : presp::String)
224                 print_matrix_row(io::Base.TTY, X::AbstractVecOrMat,Lalign,i::Int64,colsA::Vector{Int64}[(1:length(Lalign::Vector{Tuple{Int64, Int64}})::Int64)::UnitRange{Int64}]::Vector{Int64},sep::String,idxlast::Int64)
225                 print(io::Base.TTY,( (((i::Int64 - first(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::Int64) % hmod::Int64)::Int64 == 0)::Bool ? hdots : repeat(" ", (length(hdots::String)::Int64::Int::Type{Int64})::Int64)::String)
226                 print_matrix_row(io::Base.TTY, X::AbstractVecOrMat, Ralign, i::Int64, (((n::Int64 - length(Ralign::Vector{Tuple{Int64, Int64}})::Int64)::Int64) .+ colsA::Union{UnitRange{Int64}, Vector{Int64}})::Vector{Int64}, sep::String, idxlast::Int64)
227                 print(io::Base.TTY, (i::Int64 == last(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::Bool ? post::String : postsp::String)
228                 if i != last(rowsA); println(io::Base.TTY); end
229             end
230         end
231     else # rows don't fit so will need vertical ellipsis
232         if (n::Int64 <= length(A::Vector{Tuple{Int64, Int64}})::Int64)::Bool # rows don't fit, cols do, so only vertical ellipsis
233             for i::Int64 in rowsA::Vector{Int64}::Union{Nothing, Tuple{Int64, Int64}}
234                 print(io::Base.TTY, (i::Int64 == first(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::Bool ? pre::String : presp::String)
235                 print_matrix_row(io::Base.TTY, X::AbstractVecOrMat,A::Vector{Tuple{Int64, Int64}},i::Int64,colsA::Union{UnitRange{Int64}, Vector{Int64}},sep::String,idxlast::Int64)
236                 print(io::Base.TTY, (i::Int64 == last(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::Bool ? post::String : postsp::String)
237                 if i != rowsA[end] || i == rowsA[halfheight]; println(io::Base.TTY); end
238                 if (i::Int64 == rowsA::Union{UnitRange{Int64}, Vector{Int64}}[halfheight::Int64]::Int64)::Bool
239                     print(io::Base.TTY, (i::Int64 == first(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::Bool ? pre::String : presp::String)
240                     print_matrix_vdots(io::Base.TTY, vdots::String, A::Vector{Tuple{Int64, Int64}}, sep::String, vmod::Int64, 1, false)
241                     print(io::Base.TTY, (i::Int64 == last(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::Bool ? post::String : postsp * '\n')
242                 end
243             end
244         else # neither rows nor cols fit, so use all 3 kinds of dots
245             c::Int64 = (div(((screenwidth::Int64-(length(hdots::String)::Int64::Int::Type{Int64})::Int64)::Int64+1)::Int64,2)::Int64+1)::Int64
246             Ralign::Vector{Tuple{Int64, Int64}} = reverse(alignment(io::Base.TTY, X::AbstractVecOrMat, rowsA::Vector{Int64}, reverse(colsA::Union{UnitRange{Int64}, Vector{Int64}})::Vector{Int64}, c, c, sepsize::Int64, ncols::Int64)::Vector{Tuple{Int64, Int64}})::Vector{Tuple{Int64, Int64}}
247             c::Int64 = (((screenwidth::Int64 - sum(map(sum,Ralign::Vector{Tuple{Int64, Int64}})::Vector{Int64})::Int64)::Int64 - (((length(Ralign::Vector{Tuple{Int64, Int64}})::Int64-1)::Int64)*sepsize::Int64)::Int64)::Int64 - (length(hdots::String)::Int64::Int::Type{Int64})::Int64)::Int64
248             Lalign::Vector{Tuple{Int64, Int64}} = alignment(io::Base.TTY, X::AbstractVecOrMat, rowsA::Union{UnitRange{Int64}, Vector{Int64}}, colsA::Union{UnitRange{Int64}, Vector{Int64}}, c::Int64, c::Int64, sepsize::Int64, ncols::Int64)::Vector{Tuple{Int64, Int64}}
249             r::Int64 = mod((((length(Ralign::Vector{Tuple{Int64, Int64}})::Int64-n::Int64)::Int64+1)::Int64),vmod::Int64)::Int64 # where to put dots on right half
250             for i::Int64 in rowsA::Vector{Int64}::Union{Nothing, Tuple{Int64, Int64}}
251                 print(io::Base.TTY, (i::Int64 == first(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::Bool ? pre::String : presp::String)
252                 print_matrix_row(io::Base.TTY, X::AbstractVecOrMat,Lalign,i::Int64,colsA::Vector{Int64}[(1:length(Lalign::Vector{Tuple{Int64, Int64}})::Int64)::UnitRange{Int64}]::Vector{Int64},sep::String,idxlast::Int64)
253                 print(io::Base.TTY,( (((i::Int64 - first(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::Int64) % hmod::Int64)::Int64 == 0)::Bool ? hdots : repeat(" ", (length(hdots::String)::Int64::Int::Type{Int64})::Int64)::String)
254                 print_matrix_row(io::Base.TTY, X::AbstractVecOrMat,Ralign,i::Int64,(((n::Int64-length(Ralign::Vector{Tuple{Int64, Int64}})::Int64)::Int64).+colsA::Union{UnitRange{Int64}, Vector{Int64}})::Vector{Int64},sep::String,idxlast::Int64)
255                 print(io::Base.TTY, (i::Int64 == last(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::Bool ? post::String : postsp::String)
256                 if i != rowsA[end] || i == rowsA[halfheight]; println(io::Base.TTY); end
257                 if (i::Int64 == rowsA::Union{UnitRange{Int64}, Vector{Int64}}[halfheight::Int64]::Int64)::Bool
258                     print(io::Base.TTY, (i::Int64 == first(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::Bool ? pre::String : presp::String)
259                     print_matrix_vdots(io::Base.TTY, vdots::String, Lalign::Vector{Tuple{Int64, Int64}}, sep::String, vmod::Int64, 1, true)
260                     print(io::Base.TTY, ddots::String)
261                     print_matrix_vdots(io::Base.TTY, vdots::String, Ralign::Vector{Tuple{Int64, Int64}}, sep::String, vmod::Int64, r::Int64, false)
262                     print(io::Base.TTY, (i::Int64 == last(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64)::Bool ? post::String : postsp * '\n')
263                 end
264             end
265         end
266         if isempty(rowsA::Union{UnitRange{Int64}, Vector{Int64}})::Bool
267             print(io::Base.TTY, pre::String)
268             print(io::Base.TTY, vdots::String)
269             (length(colsA::Union{UnitRange{Int64}, Vector{Int64}})::Int64 > 1)::Bool && print(io::Base.TTY, "    ", ddots::String)
270             print(io::Base.TTY, post::String)::Nothing
271         end
272     end
273 end
Select a call to descend into or  to ascend. [q]uit. [b]ookmark.
Toggles: [w]arn, [h]ide type-stable statements, [t]ype annotations, [s]yntax highlight for Source/LLVM/Native, [j]ump to source always.
Show: [S]ource code, [A]ST, [T]yped code, [L]LVM IR, [N]ative code
Actions: [E]dit source code, [R]evise and redisplay
 • Int::Type{Int64}(hmod::Int64)
   Int::Type{Int64}(vmod::Int64)
   length(colsA)
   last(colsA)
   get(io::Base.TTY, :limit, false)
   %37 = < concrete eval > !(::Core.Const(false))::Core.Const(true)
   typemax(Int)
   length(pre::String)
   length(post::String)
v  (length(pre::String)::Int64::Int::Type{Int64})::Int64 + (length(post::String)::Int64::Int::Type{Int64})::Int64

On line 185, we see postsp::String = "::String", whereas this should probably read postsp::String = ""::String. The line reads postsp = "".

versions:

(@v1.9) pkg> st -m Cthulhu
Status `~/.julia/environments/v1.9/Manifest.toml`
  [f68482b8] Cthulhu v2.10.0

(@v1.9) pkg> st -m TypedSyntax
Status `~/.julia/environments/v1.9/Manifest.toml`
  [d265eb64] TypedSyntax v1.2.3

julia> VERSION
v"1.9.4"
@simeonschaub simeonschaub added TypedSyntax An issue or pull request relating to the TypedSyntax.jl subpackage bug Something isn't working labels Sep 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working TypedSyntax An issue or pull request relating to the TypedSyntax.jl subpackage
Projects
None yet
Development

No branches or pull requests

2 participants