@@ -10,14 +10,14 @@ export @RuntimeGeneratedFunction
10
10
11
11
This type should be constructed via the macro @RuntimeGeneratedFunction.
12
12
"""
13
- struct RuntimeGeneratedFunction{moduletag,id,argnames }
13
+ struct RuntimeGeneratedFunction{argnames, moduletag,id}
14
14
body:: Expr
15
15
function RuntimeGeneratedFunction (moduletag, ex)
16
16
def = splitdef (ex)
17
17
args, body = normalize_args (def[:args ]), def[:body ]
18
- id = expr2bytes (body)
18
+ id = expr_to_id (body)
19
19
cached_body = _cache_body (moduletag, id, body)
20
- new {moduletag,id, Tuple(args)} (cached_body)
20
+ new {Tuple(args),moduletag,id } (cached_body)
21
21
end
22
22
end
23
23
@@ -59,7 +59,7 @@ macro RuntimeGeneratedFunction(ex)
59
59
end
60
60
end
61
61
62
- function Base. show (io:: IO , f:: RuntimeGeneratedFunction{moduletag, id, argnames } ) where {moduletag,id,argnames }
62
+ function Base. show (io:: IO , f:: RuntimeGeneratedFunction{argnames, moduletag, id } ) where {argnames, moduletag,id}
63
63
mod = parentmodule (moduletag)
64
64
func_expr = Expr (:-> , Expr (:tuple , argnames... ), f. body)
65
65
print (io, " RuntimeGeneratedFunction(#=in $mod =#, " , repr (func_expr), " )" )
71
71
# @RuntimeGeneratedFunction
72
72
function generated_callfunc end
73
73
74
- function generated_callfunc_body (moduletag, id, argnames , __args)
74
+ function generated_callfunc_body (argnames, moduletag, id , __args)
75
75
setup = (:($ (argnames[i]) = @inbounds __args[$ i]) for i in 1 : length (argnames))
76
76
body = _lookup_body (moduletag, id)
77
77
@assert body != = nothing
101
101
# @generated function.
102
102
_cache_lock = Threads. SpinLock ()
103
103
_cachename = Symbol (" #_RuntimeGeneratedFunctions_cache" )
104
- _tagname = Symbol (" #_RuntimeGeneratedFunctions_ModTag " )
104
+ _tagname = Symbol (" #_RGF_ModTag " )
105
105
106
106
function _cache_body (moduletag, id, body)
107
107
lock (_cache_lock) do
@@ -159,8 +159,8 @@ function init(mod)
159
159
# or so. See:
160
160
# https://github.com/JuliaLang/julia/pull/32902
161
161
# https://github.com/NHDaly/StagedFunctions.jl/blob/master/src/StagedFunctions.jl#L30
162
- @inline @generated function $RuntimeGeneratedFunctions. generated_callfunc (f:: $RuntimeGeneratedFunctions.RuntimeGeneratedFunction{$_tagname, id, argnames } , __args... ) where {id, argnames}
163
- $ RuntimeGeneratedFunctions. generated_callfunc_body ($ _tagname, id, argnames , __args)
162
+ @inline @generated function $RuntimeGeneratedFunctions. generated_callfunc (f:: $RuntimeGeneratedFunctions.RuntimeGeneratedFunction{argnames, $_tagname, id} , __args... ) where {argnames,id }
163
+ $ RuntimeGeneratedFunctions. generated_callfunc_body (argnames, $ _tagname, id, __args)
164
164
end
165
165
end )
166
166
end
@@ -177,10 +177,10 @@ function normalize_args(arg::Expr)
177
177
arg. args[1 ]
178
178
end
179
179
180
- function expr2bytes (ex)
180
+ function expr_to_id (ex)
181
181
io = IOBuffer ()
182
182
Serialization. serialize (io, ex)
183
- return Tuple (sha512 ( take! (io)))
183
+ return Tuple (reinterpret (UInt32, sha1 ( take! (io) )))
184
184
end
185
185
186
186
end
0 commit comments