@@ -255,11 +255,7 @@ function methods_by_execution!(@nospecialize(recurse), methodinfo, docexprs, fra
255
255
if isa (stmt, Expr)
256
256
head = stmt. head
257
257
if head === :toplevel
258
- local value
259
- for ex in stmt. args
260
- ex isa Expr || continue
261
- value = methods_by_execution! (recurse, methodinfo, docexprs, mod, ex; mode= mode, disablebp= false , skip_include= skip_include)
262
- end
258
+ value = handle_toplevel (recurse, methodinfo, docexprs, mod, stmt, mode, skip_include)
263
259
isassign (frame, pc) && assign_this! (frame, value)
264
260
pc = next_or_nothing! (frame)
265
261
# elseif head === :thunk && isanonymous_typedef(stmt.args[1])
@@ -385,7 +381,7 @@ function methods_by_execution!(@nospecialize(recurse), methodinfo, docexprs, fra
385
381
end
386
382
newex = unwrap (newex)
387
383
push_expr! (methodinfo, newmod, newex)
388
- value = methods_by_execution! (recurse, methodinfo, docexprs, newmod, newex; mode= mode , skip_include= skip_include, disablebp = false )
384
+ value = handle_eval (recurse, methodinfo, docexprs, newmod, newex, mode, skip_include)
389
385
pop_expr! (methodinfo)
390
386
end
391
387
assign_this! (frame, value)
@@ -443,3 +439,18 @@ function methods_by_execution!(@nospecialize(recurse), methodinfo, docexprs, fra
443
439
end
444
440
return isrequired[frame. pc] ? get_return (frame) : nothing
445
441
end
442
+
443
+ # These are separated out to limit the impact of LimitedAccuracy inference problems
444
+ # (moving them into short method bodies) which prevent serialization of the inferred code
445
+
446
+ @noinline function handle_toplevel (@nospecialize (recurse), methodinfo, docexprs, mod, stmt:: Expr , mode, skip_include)
447
+ local value
448
+ for ex in stmt. args
449
+ ex isa Expr || continue
450
+ value = Base. invoke_in_world (Base. get_world_counter (), methods_by_execution!, recurse, methodinfo, docexprs, mod, ex; mode, skip_include, disablebp= false )
451
+ end
452
+ return value
453
+ end
454
+
455
+ @noinline handle_eval (@nospecialize (recurse), methodinfo, docexprs, newmod, newex:: Expr , mode, skip_include) =
456
+ Base. invoke_in_world (Base. get_world_counter (), methods_by_execution!, recurse, methodinfo, docexprs, newmod, newex; mode, skip_include, disablebp= false )
0 commit comments