430
430
@compile f(args...)
431
431
"""
432
432
macro compile (args... )
433
- return esc (compile_call_expr (__module__, args... ))
433
+ return esc (first ( compile_call_expr (__module__, args... ) ))
434
434
end
435
435
436
436
"""
@@ -439,12 +439,12 @@ end
439
439
Run @compile f(args..) then immediately execute it
440
440
"""
441
441
macro jit (args... )
442
- compile_expr = compile_call_expr (__module__, args... )
442
+ compile_expr, (; f, args) = compile_call_expr (__module__, args... )
443
443
# ! format: off
444
444
return esc (
445
445
:(
446
446
$ (compile_expr);
447
- fn ( args... )
447
+ $ (f)( $ ( args) . .. )
448
448
)
449
449
)
450
450
# ! format: on
@@ -463,6 +463,9 @@ function compile_call_expr(mod, args...)
463
463
end
464
464
end
465
465
call = only (args)
466
+ f_symbol = gensym (:f )
467
+ args_symbol = gensym (:args )
468
+ f_compiled_symbol = gensym (:f_compiled )
466
469
if Meta. isexpr (call, :call )
467
470
bcast, fname, fname_full = correct_maybe_bcast_call (call. args[1 ])
468
471
fname = if bcast
@@ -477,18 +480,28 @@ function compile_call_expr(mod, args...)
477
480
:($ (fname))
478
481
end
479
482
return quote
480
- options = (; optimize= $ (options[:optimize ]), sync= $ (options[:sync ]))
481
- f = $ (fname)
482
- args = $ (Expr (:tuple , call. args[2 : end ]. .. ))
483
- fn = $ (compile)(f, args; options. optimize, options. sync)
484
- end
483
+ $ (f_symbol) = $ (fname)
484
+ $ (args_symbol) = $ (Expr (:tuple , call. args[2 : end ]. .. ))
485
+ $ (f_compiled_symbol) = $ (compile)(
486
+ $ (f_symbol),
487
+ $ (args_symbol);
488
+ optimize= $ (options[:optimize ]),
489
+ sync= $ (options[:sync ]),
490
+ )
491
+ end ,
492
+ (; f= f_compiled_symbol, args= args_symbol)
485
493
elseif Meta. isexpr (call, :(.), 2 ) && Meta. isexpr (call. args[2 ], :tuple )
486
494
return quote
487
- options = (; optimize= $ (options[:optimize ]), sync= $ (options[:sync ]))
488
- f = Base. Broadcast. BroadcastFunction ($ (call. args[1 ]))
489
- args = $ (call. args[2 : end ]. .. )
490
- fn = $ (compile)(f, args; options. optimize, options. sync)
491
- end
495
+ $ (f_symbol) = Base. Broadcast. BroadcastFunction ($ (call. args[1 ]))
496
+ $ (args_symbol) = $ (call. args[2 : end ]. .. )
497
+ $ (f_compiled_symbol) = $ (compile)(
498
+ $ (f_symbol),
499
+ $ (args_symbol);
500
+ optimize= $ (options[:optimize ]),
501
+ sync= $ (options[:sync ]),
502
+ )
503
+ end ,
504
+ (; f= f_compiled_symbol, args= args_symbol)
492
505
else
493
506
error (" Invalid function call: $(call) " )
494
507
end
0 commit comments