@@ -20,8 +20,12 @@ function get_call_framecode(fargs::Vector{Any}, parentframe::FrameCode, idx::Int
20
20
sig = d_meth. sig. parameters:: SimpleVector
21
21
if length (sig) == nargs
22
22
# If this is generated, match only if `enter_generated` also matches
23
- fi = d_meth. frameinstance:: FrameInstance
24
- matches = ! is_generated (scopeof (fi. framecode)) || enter_generated == fi. enter_generated
23
+ fi = d_meth. frameinstance
24
+ if fi isa FrameInstance
25
+ matches = ! is_generated (scopeof (fi. framecode)) || enter_generated == fi. enter_generated
26
+ else
27
+ matches = ! enter_generated
28
+ end
25
29
if matches
26
30
for i = 1 : nargs
27
31
if ! isa (fargs[i], sig[i])
@@ -38,7 +42,11 @@ function get_call_framecode(fargs::Vector{Any}, parentframe::FrameCode, idx::Int
38
42
d_methprev. next = d_meth. next
39
43
d_meth. next = d_meth1
40
44
end
41
- return fi. framecode, fi. sparam_vals
45
+ if fi isa Compiled
46
+ return Compiled (), nothing
47
+ else
48
+ return fi. framecode, fi. sparam_vals
49
+ end
42
50
end
43
51
end
44
52
depth += 1
@@ -52,11 +60,16 @@ function get_call_framecode(fargs::Vector{Any}, parentframe::FrameCode, idx::Int
52
60
fargs[1 ] = f = to_function (fargs[1 ])
53
61
ret = prepare_call (f, fargs; enter_generated= enter_generated)
54
62
ret === nothing && return f (fargs[2 : end ]. .. ), nothing
55
- isa (ret, Compiled) && return ret, nothing
56
- framecode, args, env, argtypes = ret
57
- # Store the results of the method lookup in the local method table
58
- fi = FrameInstance (framecode, env, is_generated (scopeof (framecode)) && enter_generated)
59
- d_meth = DispatchableMethod (nothing , fi, argtypes)
63
+ is_compiled = isa (ret[1 ], Compiled)
64
+ local framecode
65
+ if is_compiled
66
+ d_meth = DispatchableMethod (nothing , Compiled (), ret[2 ])
67
+ else
68
+ framecode, args, env, argtypes = ret
69
+ # Store the results of the method lookup in the local method table
70
+ fi = FrameInstance (framecode, env, is_generated (scopeof (framecode)) && enter_generated)
71
+ d_meth = DispatchableMethod (nothing , fi, argtypes)
72
+ end
60
73
if isassigned (parentframe. methodtables, idx)
61
74
d_meth. next = parentframe. methodtables[idx]
62
75
# Drop the oldest d_meth, if necessary
@@ -74,5 +87,9 @@ function get_call_framecode(fargs::Vector{Any}, parentframe::FrameCode, idx::Int
74
87
d_meth. next = nothing
75
88
end
76
89
parentframe. methodtables[idx] = d_meth
77
- return framecode, env
90
+ if is_compiled
91
+ return Compiled (), nothing
92
+ else
93
+ return framecode, env
94
+ end
78
95
end
0 commit comments