From 1d0a0e26eced0588b9bf6379187db74452964304 Mon Sep 17 00:00:00 2001 From: Eliot Quon Date: Wed, 1 Apr 2026 11:43:42 -0600 Subject: [PATCH] Fix eval-in-__init__ breaking Julia 1.12 incremental compilation Move the method definition for `default_output_attributes(::SeaIceModel)` from `__init__()` with `@eval` to top-level extension scope. Julia 1.12 rejects `eval` into a closed module during `__init__`, causing precompilation to fail with: "Evaluation into the closed module ClimaSeaIceNCDatasetsExt breaks incremental compilation because the side effects will not be permanent." The method is now defined at extension load time, which is both correct and compatible with Julia 1.12's stricter compilation model. Co-Authored-By: Claude Opus 4.6 (1M context) --- ext/ClimaSeaIceNCDatasetsExt.jl | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/ext/ClimaSeaIceNCDatasetsExt.jl b/ext/ClimaSeaIceNCDatasetsExt.jl index 58d76c4e..226c5e35 100644 --- a/ext/ClimaSeaIceNCDatasetsExt.jl +++ b/ext/ClimaSeaIceNCDatasetsExt.jl @@ -28,16 +28,12 @@ default_sea_ice_attributes() = Dict( "ℵ" => Dict("long_name" => "Sea ice concentration.", "units" => "-") ) -function __init__() - OCNE = Base.get_extension(Oceananigans, :OceananigansNCDatasetsExt) - if !isnothing(OCNE) - @eval begin - function $OCNE.default_output_attributes(model::SeaIceModel) - velocity_attrs = default_horizontal_velocity_attributes(model.grid) - tracer_attrs = default_sea_ice_attributes() - return merge(velocity_attrs, tracer_attrs) - end - end +OCNE = Base.get_extension(Oceananigans, :OceananigansNCDatasetsExt) +if !isnothing(OCNE) + function OCNE.default_output_attributes(model::SeaIceModel) + velocity_attrs = default_horizontal_velocity_attributes(model.grid) + tracer_attrs = default_sea_ice_attributes() + return merge(velocity_attrs, tracer_attrs) end end