From efe7ce96d70cc7163534ef97b2dc82d63cea6046 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 14 Mar 2025 17:24:02 -0400 Subject: [PATCH 1/3] remove no-op UB from FunctionConstructor --- src/functions.jl | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/functions.jl b/src/functions.jl index ee8d39d..68f724f 100644 --- a/src/functions.jl +++ b/src/functions.jl @@ -8,11 +8,10 @@ _isgensym(s::Symbol) = occursin("#", string(s)) @generated function (fc::FunctionConstructor{F})(args...) where F isempty(args) && return Expr(:new, F) - T = getfield(parentmodule(F), nameof(F)) # We assume all gensym names are anonymous functions - _isgensym(nameof(F)) || return :($T(args...)) + _isgensym(nameof(F)) || return :($F(args...)) # Define `new` for rebuilt function type that matches args - exp = Expr(:new, Expr(:curly, T, args...)) + exp = Expr(:new, Expr(:curly, F, args...)) for i in 1:length(args) push!(exp.args, :(args[$i])) end From 267a4a4220da0feb4e318a2586743259fb12b070 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 14 Mar 2025 17:27:59 -0400 Subject: [PATCH 2/3] fix --- src/functions.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/functions.jl b/src/functions.jl index 68f724f..70066c8 100644 --- a/src/functions.jl +++ b/src/functions.jl @@ -19,6 +19,6 @@ _isgensym(s::Symbol) = occursin("#", string(s)) end function ConstructionBase.constructorof(f::Type{F}) where F <: Function - FunctionConstructor{F}() + FunctionConstructor{typename(F).wrapper}() end From 0c3afd88c1ad3db2de17ab82e20f61318657d608 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 14 Mar 2025 17:31:33 -0400 Subject: [PATCH 3/3] Update functions.jl --- src/functions.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/functions.jl b/src/functions.jl index 70066c8..13577b9 100644 --- a/src/functions.jl +++ b/src/functions.jl @@ -19,6 +19,6 @@ _isgensym(s::Symbol) = occursin("#", string(s)) end function ConstructionBase.constructorof(f::Type{F}) where F <: Function - FunctionConstructor{typename(F).wrapper}() + FunctionConstructor{Base.typename(F).wrapper}() end