@@ -10,7 +10,7 @@ function find_return(stmt)
1010end
1111
1212# XXX : Proper errors
13- function __kernel (expr, generate_cpu = true , force_inbounds = false , unsafe_indices = false , generated = false )
13+ function __kernel (__module__, expr, generate_cpu = true , force_inbounds = false , unsafe_indices = false , generated = false )
1414 def = splitdef (expr)
1515 name = def[:name ]
1616 args = def[:args ]
@@ -42,7 +42,9 @@ function __kernel(expr, generate_cpu = true, force_inbounds = false, unsafe_indi
4242 def_cpu[:name ] = cpu_name
4343 transform_cpu! (def_cpu, constargs, force_inbounds)
4444 if generated
45- def_cpu[:body ] = Expr (:if , Expr (:generated ), Expr (:copyast , QuoteNode (def_cpu[:body ])), Expr (:meta , :generated_only ))
45+ # Use macroexpand to perform the annoying work of interpolating `$` exprs
46+ body = macroexpand (__module__, Expr (:quote , def_cpu[:body ]), recursive = false )
47+ def_cpu[:body ] = Expr (:if , Expr (:generated ), body, Expr (:meta , :generated_only ))
4648 end
4749 cpu_function = combinedef (def_cpu)
4850 end
@@ -51,7 +53,9 @@ function __kernel(expr, generate_cpu = true, force_inbounds = false, unsafe_indi
5153 def_gpu[:name ] = gpu_name = Symbol (:gpu_ , name)
5254 transform_gpu! (def_gpu, constargs, force_inbounds, unsafe_indices)
5355 if generated
54- def_gpu[:body ] = Expr (:if , Expr (:generated ), Expr (:copyast , QuoteNode (def_gpu[:body ])), Expr (:meta , :generated_only ))
56+ # Use macroexpand to perform the annoying work of interpolating `$` exprs
57+ body = macroexpand (__module__, Expr (:quote , def_gpu[:body ]), recursive = false )
58+ def_gpu[:body ] = Expr (:if , Expr (:generated ), body, Expr (:meta , :generated_only ))
5559 end
5660 gpu_function = combinedef (def_gpu)
5761
0 commit comments