Skip to content

Commit d1f1540

Browse files
committed
Switch to JuliaInterpreter 0.8
1 parent 79b1df2 commit d1f1540

File tree

9 files changed

+45
-48
lines changed

9 files changed

+45
-48
lines changed

.appveyor.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
environment:
22
matrix:
33
- julia_version: 1.0
4-
- julia_version: 1.1
5-
- julia_version: 1.2
6-
- julia_version: 1.3
74
- julia_version: 1
85
- julia_version: nightly
96

.travis.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ os:
66

77
julia:
88
- 1.0
9-
- 1.1
10-
- 1.2
11-
- 1.3
129
- 1
1310
- nightly
1411

@@ -25,7 +22,7 @@ codecov: true
2522
jobs:
2623
include:
2724
- stage: "Documentation"
28-
julia: 1.4
25+
julia: 1
2926
os: linux
3027
arch: x64
3128
script:

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
name = "LoweredCodeUtils"
22
uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b"
33
authors = ["Tim Holy <[email protected]>"]
4-
version = "1.1.3"
4+
version = "1.2.0"
55

66
[deps]
77
JuliaInterpreter = "aa1ae85d-cabe-5617-a682-6adf51b2e16a"
88

99
[compat]
10-
JuliaInterpreter = "0.7.23"
10+
JuliaInterpreter = "0.8"
1111
julia = "1"
1212

1313
[extras]

docs/src/edges.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ We can test this with the following:
251251
```julia
252252
julia> using JuliaInterpreter
253253

254-
julia> frame = JuliaInterpreter.prepare_thunk(Main, lwr)
254+
julia> frame = Frame(Main, lwr.args[1])
255255
Frame for Main
256256
1 2 1 ─ s = 0
257257
2 3 │ k = 5

docs/src/signatures.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ We can also rename these methods, if we first turn it into a `frame`:
140140
```julia
141141
julia> using JuliaInterpreter
142142
143-
julia> frame = JuliaInterpreter.prepare_thunk(Main, lwr)
143+
julia> frame = Frame(Main, lwr.args[1])
144144
Frame for Main
145145
1 0 1 ─ $(Expr(:thunk, CodeInfo(
146146
2 0 1return $(Expr(:method, :f))

src/packagedef.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,13 @@ if ccall(:jl_generating_output, Cint, ()) == 1
3232
@assert precompile(Tuple{typeof(f), Any, ct, Frame})
3333
@assert precompile(Tuple{Core.kwftype(typeof(f)), kwdefine, typeof(f), Function, ct, Frame})
3434
end
35+
@assert precompile(Tuple{typeof(rename_framemethods!), Any, Frame, Dict{Symbol,MethodInfo},
36+
Vector{SelfCall}, Dict{Symbol,Union{Nothing, Bool, Symbol}}})
3537
@assert precompile(Tuple{typeof(rename_framemethods!), Any, Frame, Dict{Symbol,MethodInfo},
3638
Vector{NamedTuple{(:linetop, :linebody, :callee, :caller),Tuple{Int64,Int64,Symbol,Union{Bool, Symbol}}}},
3739
Dict{Symbol,Union{Bool, Symbol}}})
3840
@assert precompile(Tuple{typeof(identify_framemethod_calls), Frame})
41+
@assert precompile(Tuple{typeof(callchain), Vector{SelfCall}})
3942
@assert precompile(Tuple{typeof(callchain), Vector{NamedTuple{(:linetop, :linebody, :callee, :caller),Tuple{Int64,Int64,Symbol,Union{Bool, Symbol}}}}})
4043

4144
@assert precompile(CodeEdges, (CodeInfo,))

src/signatures.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ struct SelfCall
110110
linetop::Int
111111
linebody::Int
112112
callee::Symbol
113-
caller::Union{Symbol,Bool}
113+
caller::Union{Symbol,Bool,Nothing}
114114
end
115115

116116
"""
@@ -169,7 +169,7 @@ function identify_framemethod_calls(frame)
169169
end
170170
msrc = stmt.args[3]
171171
if msrc isa CodeInfo
172-
key = key::Union{Symbol,Bool}
172+
key = key::Union{Symbol,Bool,Nothing}
173173
for (j, mstmt) in enumerate(msrc.code)
174174
isa(mstmt, Expr) || continue
175175
if mstmt.head === :call
@@ -209,7 +209,7 @@ function identify_framemethod_calls(frame)
209209
end
210210

211211
function callchain(selfcalls)
212-
calledby = Dict{Symbol,Union{Symbol,Bool}}()
212+
calledby = Dict{Symbol,Union{Symbol,Bool,Nothing}}()
213213
for sc in selfcalls
214214
startswith(String(sc.callee), '#') || continue
215215
caller = get(calledby, sc.callee, nothing)

test/codeedges.jl

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ end
5959
k = rand()
6060
b = 2*a + 5
6161
end
62-
frame = JuliaInterpreter.prepare_thunk(ModSelective, ex)
62+
frame = Frame(ModSelective, ex)
6363
src = frame.framecode.src
6464
edges = CodeEdges(src)
6565
# Check that the result of direct evaluation agrees with selective evaluation
@@ -98,7 +98,7 @@ end
9898
a2 = 2
9999
end
100100
end
101-
frame = JuliaInterpreter.prepare_thunk(ModSelective, ex)
101+
frame = Frame(ModSelective, ex)
102102
src = frame.framecode.src
103103
edges = CodeEdges(src)
104104
isrequired = lines_required(:a2, src, edges)
@@ -119,7 +119,7 @@ end
119119
y3 = 7
120120
end
121121
end
122-
frame = JuliaInterpreter.prepare_thunk(ModSelective, ex)
122+
frame = Frame(ModSelective, ex)
123123
src = frame.framecode.src
124124
edges = CodeEdges(src)
125125
isrequired = lines_required(:a3, src, edges)
@@ -140,7 +140,7 @@ end
140140
Core.eval(ModEval, ex)
141141
@test ModEval.foo() == 0
142142
@test ModEval.bar() == 1
143-
frame = JuliaInterpreter.prepare_thunk(ModSelective, ex)
143+
frame = Frame(ModSelective, ex)
144144
src = frame.framecode.src
145145
edges = CodeEdges(src)
146146
# Mark just the load of Core.eval
@@ -167,7 +167,7 @@ end
167167
k11 += i
168168
end
169169
end
170-
frame = JuliaInterpreter.prepare_thunk(ModSelective, ex)
170+
frame = Frame(ModSelective, ex)
171171
JuliaInterpreter.finish_and_return!(frame, true)
172172
@test ModSelective.k11 == 11
173173
@test 3 <= ModSelective.s11 <= 15
@@ -180,7 +180,7 @@ end
180180

181181
# Control-flow in an abstract type definition
182182
ex = :(abstract type StructParent{T, N} <: AbstractArray{T, N} end)
183-
frame = JuliaInterpreter.prepare_thunk(ModSelective, ex)
183+
frame = Frame(ModSelective, ex)
184184
src = frame.framecode.src
185185
edges = CodeEdges(src)
186186
# Check that the StructParent name is discovered everywhere it is used
@@ -191,7 +191,7 @@ end
191191
@test supertype(ModSelective.StructParent) === AbstractArray
192192
# Also check redefinition (it's OK when the definition doesn't change)
193193
Core.eval(ModEval, ex)
194-
frame = JuliaInterpreter.prepare_thunk(ModEval, ex)
194+
frame = Frame(ModEval, ex)
195195
src = frame.framecode.src
196196
edges = CodeEdges(src)
197197
isrequired = minimal_evaluation(hastrackedexpr, src, edges)
@@ -201,7 +201,7 @@ end
201201
# Finding all dependencies in a struct definition
202202
# Nonparametric
203203
ex = :(struct NoParam end)
204-
frame = JuliaInterpreter.prepare_thunk(ModSelective, ex)
204+
frame = Frame(ModSelective, ex)
205205
src = frame.framecode.src
206206
edges = CodeEdges(src)
207207
isrequired = minimal_evaluation(stmt->(LoweredCodeUtils.ismethod3(stmt)&&stmt.args[1]===:NoParam,false), src, edges) # initially mark only the constructor
@@ -213,7 +213,7 @@ end
213213
x::Vector{T}
214214
end
215215
end
216-
frame = JuliaInterpreter.prepare_thunk(ModSelective, ex)
216+
frame = Frame(ModSelective, ex)
217217
src = frame.framecode.src
218218
edges = CodeEdges(src)
219219
isrequired = minimal_evaluation(stmt->(LoweredCodeUtils.ismethod3(stmt)&&stmt.args[1]===:Struct,false), src, edges) # initially mark only the constructor
@@ -230,7 +230,7 @@ end
230230
end
231231
end
232232
end
233-
frame = JuliaInterpreter.prepare_thunk(ModSelective, ex)
233+
frame = Frame(ModSelective, ex)
234234
src = frame.framecode.src
235235
edges = CodeEdges(src)
236236
isrequired = minimal_evaluation(stmt->(LoweredCodeUtils.ismethod3(stmt),false), src, edges) # initially mark only the constructor
@@ -240,7 +240,7 @@ end
240240

241241
# Anonymous functions
242242
ex = :(max_values(T::Union{map(X -> Type{X}, Base.BitIntegerSmall_types)...}) = 1 << (8*sizeof(T)))
243-
frame = JuliaInterpreter.prepare_thunk(ModSelective, ex)
243+
frame = Frame(ModSelective, ex)
244244
src = frame.framecode.src
245245
edges = CodeEdges(src)
246246
isrequired = fill(false, length(src.code))
@@ -259,7 +259,7 @@ end
259259
end
260260
end
261261
Core.eval(ModEval, ex)
262-
frame = JuliaInterpreter.prepare_thunk(ModEval, ex)
262+
frame = Frame(ModEval, ex)
263263
src = frame.framecode.src
264264
edges = CodeEdges(src)
265265
isrequired = minimal_evaluation(stmt->(LoweredCodeUtils.ismethod3(stmt),false), src, edges; exclude_named_typedefs=true) # initially mark only the constructor
@@ -325,7 +325,7 @@ end
325325
@test occursin("No IR statement printer", str)
326326
end
327327
# Works with Frames too
328-
frame = JuliaInterpreter.prepare_thunk(ModSelective, ex)
328+
frame = Frame(ModSelective, ex)
329329
edges = CodeEdges(frame.framecode.src)
330330
LoweredCodeUtils.print_with_code(io, frame, edges)
331331
str = String(take!(io))

test/signatures.jl

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ bodymethtest5(x, y=Dict(1=>2)) = 5
8787
:((::Caller)(x::String) = length(x)),
8888
)
8989
Core.eval(Lowering, ex)
90-
frame = JuliaInterpreter.prepare_thunk(Lowering, ex)
90+
frame = Frame(Lowering, ex)
9191
rename_framemethods!(frame)
9292
pc = methoddefs!(signatures, frame; define=false)
9393
push!(newcode, frame.framecode.src)
@@ -145,25 +145,25 @@ bodymethtest5(x, y=Dict(1=>2)) = 5
145145
end
146146
end
147147
Core.eval(Lowering, ex)
148-
frame = JuliaInterpreter.prepare_thunk(Lowering, ex)
148+
frame = Frame(Lowering, ex)
149149
rename_framemethods!(frame)
150150
methoddefs!(signatures, frame; define=false)
151151
@test length(signatures) == 1
152152
@test LoweredCodeUtils.whichtt(signatures[1]) == first(methods(Lowering.fouter))
153153

154154
# Check output of methoddef!
155-
frame = JuliaInterpreter.prepare_thunk(Lowering, :(function nomethod end))
155+
frame = Frame(Lowering, :(function nomethod end))
156156
ret = methoddef!(empty!(signatures), frame; define=true)
157157
@test isempty(signatures)
158158
@test ret === nothing
159-
frame = JuliaInterpreter.prepare_thunk(Lowering, :(function amethod() nothing end))
159+
frame = Frame(Lowering, :(function amethod() nothing end))
160160
ret = methoddef!(empty!(signatures), frame; define=true)
161161
@test !isempty(signatures)
162162
@test isa(ret, NTuple{2,Int})
163163

164164
# Anonymous functions in method signatures
165165
ex = :(max_values(T::Union{map(X -> Type{X}, Base.BitIntegerSmall_types)...}) = 1 << (8*sizeof(T))) # base/abstractset.jl
166-
frame = JuliaInterpreter.prepare_thunk(Base, ex)
166+
frame = Frame(Base, ex)
167167
rename_framemethods!(frame)
168168
signatures = Set{Any}()
169169
methoddef!(signatures, frame; define=false)
@@ -172,11 +172,11 @@ bodymethtest5(x, y=Dict(1=>2)) = 5
172172

173173
# define
174174
ex = :(fdefine(x) = 1)
175-
frame = JuliaInterpreter.prepare_thunk(Lowering, ex)
175+
frame = Frame(Lowering, ex)
176176
empty!(signatures)
177177
methoddefs!(signatures, frame; define=false)
178178
@test_throws MethodError Lowering.fdefine(0)
179-
frame = JuliaInterpreter.prepare_thunk(Lowering, ex)
179+
frame = Frame(Lowering, ex)
180180
empty!(signatures)
181181
methoddefs!(signatures, frame; define=true)
182182
@test Lowering.fdefine(0) == 1
@@ -191,7 +191,7 @@ bodymethtest5(x, y=Dict(1=>2)) = 5
191191
return ex
192192
end
193193
end
194-
frame = JuliaInterpreter.prepare_thunk(Lowering, ex)
194+
frame = Frame(Lowering, ex)
195195
rename_framemethods!(frame)
196196
empty!(signatures)
197197
methoddefs!(signatures, frame; define=true)
@@ -200,14 +200,14 @@ bodymethtest5(x, y=Dict(1=>2)) = 5
200200
ex = quote
201201
another_kwdef(x, y=1; z="hello") = 333
202202
end
203-
frame = JuliaInterpreter.prepare_thunk(Lowering, ex)
203+
frame = Frame(Lowering, ex)
204204
rename_framemethods!(frame)
205205
empty!(signatures)
206206
methoddefs!(signatures, frame; define=true)
207207
@test length(signatures) == 5
208208
@test Lowering.another_kwdef(0) == 333
209209
ex = :(@generated genkw2(; b=2) = nothing) # https://github.com/timholy/Revise.jl/issues/290
210-
frame = JuliaInterpreter.prepare_thunk(Lowering, ex)
210+
frame = Frame(Lowering, ex)
211211
# rename_framemethods!(frame)
212212
empty!(signatures)
213213
methoddefs!(signatures, frame; define=true)
@@ -229,7 +229,7 @@ bodymethtest5(x, y=Dict(1=>2)) = 5
229229
end
230230
end
231231
end
232-
frame = JuliaInterpreter.prepare_thunk(Base, ex)
232+
frame = Frame(Base, ex)
233233
rename_framemethods!(frame)
234234
empty!(signatures)
235235
stmt = JuliaInterpreter.pc_expr(frame)
@@ -242,7 +242,7 @@ bodymethtest5(x, y=Dict(1=>2)) = 5
242242

243243
# With anonymous functions in signatures
244244
ex = :(const BitIntegerType = Union{map(T->Type{T}, Base.BitInteger_types)...})
245-
frame = JuliaInterpreter.prepare_thunk(Lowering, ex)
245+
frame = Frame(Lowering, ex)
246246
rename_framemethods!(frame)
247247
empty!(signatures)
248248
methoddefs!(signatures, frame; define=false)
@@ -275,17 +275,17 @@ bodymethtest5(x, y=Dict(1=>2)) = 5
275275
end
276276
end
277277
end
278-
frame = JuliaInterpreter.prepare_thunk(Base, ex)
278+
frame = Frame(Base, ex)
279279
rename_framemethods!(frame)
280280
empty!(signatures)
281281
methoddefs!(signatures, frame; define=false)
282282
@test length(signatures) >= 3
283283

284284
ex = :(typedsig(x) = 1)
285-
frame = JuliaInterpreter.prepare_thunk(Lowering, ex)
285+
frame = Frame(Lowering, ex)
286286
methoddefs!(signatures, frame; define=true)
287287
ex = :(typedsig(x::Int) = 2)
288-
frame = JuliaInterpreter.prepare_thunk(Lowering, ex)
288+
frame = Frame(Lowering, ex)
289289
JuliaInterpreter.next_until!(LoweredCodeUtils.ismethod3, frame, true)
290290
empty!(signatures)
291291
methoddefs!(signatures, frame; define=true)
@@ -299,7 +299,7 @@ bodymethtest5(x, y=Dict(1=>2)) = 5
299299
keywrd3(x; kwarg=:stuff) = 3
300300
end
301301
Core.eval(Lowering, ex)
302-
frame = JuliaInterpreter.prepare_thunk(Lowering, ex)
302+
frame = Frame(Lowering, ex)
303303
rename_framemethods!(frame)
304304
empty!(signatures)
305305
pc, pc3 = methoddef!(signatures, frame; define=false)
@@ -312,7 +312,7 @@ bodymethtest5(x, y=Dict(1=>2)) = 5
312312

313313
# Module-scoping
314314
ex = :(Base.@irrational π 3.14159265358979323846 pi)
315-
frame = JuliaInterpreter.prepare_thunk(Base.MathConstants, ex)
315+
frame = Frame(Base.MathConstants, ex)
316316
rename_framemethods!(frame)
317317
empty!(signatures)
318318
methoddefs!(signatures, frame; define=false)
@@ -330,7 +330,7 @@ bodymethtest5(x, y=Dict(1=>2)) = 5
330330
end
331331
end
332332
Core.eval(Lowering, ex)
333-
frame = JuliaInterpreter.prepare_thunk(Lowering, ex)
333+
frame = Frame(Lowering, ex)
334334
rename_framemethods!(frame)
335335
empty!(signatures)
336336
methoddefs!(signatures, frame; define=false)
@@ -344,7 +344,7 @@ bodymethtest5(x, y=Dict(1=>2)) = 5
344344
end
345345
end
346346
Core.eval(Lowering, ex)
347-
frame = JuliaInterpreter.prepare_thunk(Lowering, ex)
347+
frame = Frame(Lowering, ex)
348348
dct = rename_framemethods!(frame)
349349
ks = collect(filter(k->startswith(String(k), "#Items#"), keys(dct)))
350350
@test length(ks) == 2
@@ -364,7 +364,7 @@ bodymethtest5(x, y=Dict(1=>2)) = 5
364364
end)
365365
empty!(signatures)
366366
Core.eval(Lowering422, ex)
367-
frame = JuliaInterpreter.prepare_thunk(Lowering422, ex)
367+
frame = Frame(Lowering422, ex)
368368
rename_framemethods!(frame)
369369
pc = methoddefs!(signatures, frame; define=false)
370370
@test typeof(Lowering422.fneg) Set(Base.unwrap_unionall(sig).parameters[1] for sig in signatures)
@@ -384,6 +384,6 @@ bodymethtest5(x, y=Dict(1=>2)) = 5
384384
end
385385
end
386386
end
387-
frame = JuliaInterpreter.prepare_thunk(Lowering, ex)
387+
frame = Frame(Lowering, ex)
388388
rename_framemethods!(frame)
389389
end

0 commit comments

Comments
 (0)