@@ -261,14 +261,14 @@ function maybe_step_through_kwprep!(@nospecialize(recurse), frame::Frame, istopl
261
261
stmt1 = src. code[pc+ 1 ]
262
262
# We deliberately check isexpr(stmt, :call) rather than is_call(stmt): if it's
263
263
# assigned to a local, it's *not* kwarg preparation.
264
- if isexpr (stmt1, :call ) && is_quotenode (stmt1. args[1 ], Core. apply_type) && is_quoted_type (stmt1. args[2 ], :NamedTuple )
264
+ if isexpr (stmt1, :call ) && is_quotenode_egal (stmt1. args[1 ], Core. apply_type) && is_quoted_type (stmt1. args[2 ], :NamedTuple )
265
265
stmt4, stmt5 = src. code[pc+ 4 ], src. code[pc+ 5 ]
266
- if isexpr (stmt4, :call ) && is_quotenode (stmt4. args[1 ], Core. kwfunc)
266
+ if isexpr (stmt4, :call ) && is_quotenode_egal (stmt4. args[1 ], Core. kwfunc)
267
267
while pc < pccall
268
268
pc = step_expr! (recurse, frame, istoplevel)
269
269
end
270
270
return frame
271
- elseif isexpr (stmt5, :call ) && is_quotenode (stmt5. args[1 ], Core. kwfunc) && pccall+ 1 <= n
271
+ elseif isexpr (stmt5, :call ) && is_quotenode_egal (stmt5. args[1 ], Core. kwfunc) && pccall+ 1 <= n
272
272
# This happens when the call is scoped by a module
273
273
pccall += 1
274
274
while pc < pccall
@@ -285,7 +285,7 @@ function maybe_step_through_kwprep!(@nospecialize(recurse), frame::Frame, istopl
285
285
stmt1 = src. code[pc+ 1 ]
286
286
if isexpr (stmt1, :call )
287
287
f = stmt1. args[1 ]
288
- if is_quotenode (f, Base. pairs)
288
+ if is_quotenode_egal (f, Base. pairs)
289
289
# No supplied kwargs
290
290
pcsplat = pc + 3
291
291
if pcsplat <= n
@@ -300,20 +300,22 @@ function maybe_step_through_kwprep!(@nospecialize(recurse), frame::Frame, istopl
300
300
pccall = pc + 2
301
301
if pccall <= n
302
302
stmt2 = src. code[pccall]
303
- if isexpr (stmt2, :call ) && length (stmt2. args) >= 3 && stmt2. args[2 ] == SSAValue (pc+ 1 ) && stmt2. args[3 ] == SlotNumber (1 )
304
- while pc < pccall
305
- pc = step_expr! (recurse, frame, istoplevel)
303
+ if isa (stmt2, Expr)
304
+ if stmt2. head === :call && length (stmt2. args) >= 3 && stmt2. args[2 ] === SSAValue (pc+ 1 ) && stmt2. args[3 ] === SlotNumber (1 )
305
+ while pc < pccall
306
+ pc = step_expr! (recurse, frame, istoplevel)
307
+ end
306
308
end
307
309
end
308
310
end
309
- elseif is_quotenode (f, Base. merge) && ((pccall = pc + 7 ) <= n)
311
+ elseif is_quotenode_egal (f, Base. merge) && ((pccall = pc + 7 ) <= n)
310
312
stmtk = src. code[pccall- 1 ]
311
- if isexpr (stmtk, :call ) && is_quotenode (stmtk. args[1 ], Core. kwfunc)
313
+ if isexpr (stmtk, :call ) && is_quotenode_egal (stmtk. args[1 ], Core. kwfunc)
312
314
for i = 1 : 4
313
315
pc = step_expr! (recurse, frame, istoplevel)
314
316
end
315
317
stmti = src. code[pc]
316
- if isexpr (stmti, :call ) && is_quotenode (stmti. args[1 ], Core. kwfunc)
318
+ if isexpr (stmti, :call ) && is_quotenode_egal (stmti. args[1 ], Core. kwfunc)
317
319
pc = step_expr! (recurse, frame, istoplevel)
318
320
end
319
321
end
0 commit comments