@@ -255,11 +255,7 @@ function methods_by_execution!(@nospecialize(recurse), methodinfo, docexprs, fra
255255 if isa (stmt, Expr)
256256 head = stmt. head
257257 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)
263259 isassign (frame, pc) && assign_this! (frame, value)
264260 pc = next_or_nothing! (frame)
265261 # elseif head === :thunk && isanonymous_typedef(stmt.args[1])
@@ -385,7 +381,7 @@ function methods_by_execution!(@nospecialize(recurse), methodinfo, docexprs, fra
385381 end
386382 newex = unwrap (newex)
387383 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)
389385 pop_expr! (methodinfo)
390386 end
391387 assign_this! (frame, value)
@@ -443,3 +439,18 @@ function methods_by_execution!(@nospecialize(recurse), methodinfo, docexprs, fra
443439 end
444440 return isrequired[frame. pc] ? get_return (frame) : nothing
445441end
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