@@ -23,7 +23,7 @@ class HLL::Compiler does HLL::Backend::Default {
23
23
@ ! stages := nqp :: split (' ' , ' start parse ast ' ~ $ ! backend . stages());
24
24
25
25
# Command options and usage.
26
- @ ! cmdoptions := nqp :: split (' ' , ' e=s help|h target=s trace|t=s encoding=s output|o=s source-name=s combine version|v show-config verbose-config|V stagestats=s? ll-exception rxtrace nqpevent=s profile=s? profile-compile=s? profile-filename=s' );
26
+ @ ! cmdoptions := nqp :: split (' ' , ' e=s help|h target=s trace|t=s encoding=s output|o=s source-name=s combine version|v show-config verbose-config|V stagestats=s? ll-exception rxtrace nqpevent=s profile=s? profile-compile=s? profile-filename=s profile-stage=s ' );
27
27
% ! config := nqp ::hash();
28
28
}
29
29
@@ -426,15 +426,23 @@ class HLL::Compiler does HLL::Backend::Default {
426
426
}
427
427
nqp ::printfh($ stderr , nqp :: sprintf (" Stage %-11s: " , [$ _ ])) if nqp :: defined ($ stagestats );
428
428
my $ timestamp := nqp ::time_n();
429
- if nqp :: can (self , $ _ ) {
430
- $ result := self . " $ _" ($ result , | % adverbs );
431
- }
432
- elsif nqp :: can ($ ! backend , $ _ ) {
433
- $ result := $ ! backend . " $ _" ($ result , | % adverbs );
434
- }
435
- else {
436
- nqp ::die(" Unknown compilation stage '$ _ '" );
429
+
430
+ my sub run () {
431
+ if nqp :: can (self , $ _ ) {
432
+ self . " $ _" ($ result , | % adverbs );
433
+ }
434
+ elsif nqp :: can ($ ! backend , $ _ ) {
435
+ $ ! backend . " $ _" ($ result , | % adverbs );
436
+ }
437
+ else {
438
+ nqp ::die(" Unknown compilation stage '$ _ '" );
439
+ }
437
440
}
441
+
442
+ $ result := % adverbs <profile-stage > eq $ _
443
+ ?? $ ! backend . run_profiled(& run , ' ' , % adverbs <profile-filename >)
444
+ !! run ();
445
+
438
446
my $ diff := nqp ::time_n() - $ timestamp ;
439
447
if nqp :: defined ($ stagestats ) {
440
448
nqp ::printfh($ stderr , nqp :: sprintf (" %7.3f" , [$ diff ]));
0 commit comments