@@ -30,8 +30,8 @@ class HLL::Compiler {
30
30
31
31
method BUILD () {
32
32
# Default stages.
33
- @ ! stages := nqp :: split (' ' , ' start parse past post pir packfile ' );
34
-
33
+ @ ! stages := nqp :: split (' ' , ' start parse past post pir pbc init ' );
34
+
35
35
# Command options and usage.
36
36
@ ! cmdoptions := nqp :: split (' ' , ' e=s help|h target=s dumper=s trace|t=s encoding=s output|o=s combine version|v show-config verbose-config|V stagestats=s? ll-exception rxtrace nqpevent=s profile profile-compile' );
37
37
$ ! usage := " This compiler is based on HLL::Compiler.\n\n Options:\n " ;
@@ -224,8 +224,9 @@ class HLL::Compiler {
224
224
225
225
% adverbs . update(% opts );
226
226
self . usage($ program-name ) if % adverbs <help > || % adverbs <h >;
227
-
228
- if ! nqp ::existskey(% adverbs , ' precomp' ) && % adverbs <target > eq ' pir' {
227
+
228
+ if ! nqp ::existskey(% adverbs , ' precomp' )
229
+ && (% adverbs <target > eq ' pir' || % adverbs <target > eq ' pbc' ) {
229
230
% adverbs <precomp > := 1 ;
230
231
}
231
232
@@ -430,19 +431,32 @@ class HLL::Compiler {
430
431
~ " .include 'datatypes.pasm'\n "
431
432
~ " .include 'libpaths.pasm'\n "
432
433
}
433
-
434
+
434
435
method pir ($ source , * % adverbs ) {
435
436
self . pirbegin() ~ $ source . pir()
436
437
}
437
438
438
- method packfile ($ source , * % adverbs ) {
439
- my $ compiler := pir::compreg__Ps(' PIR' );
440
- my $ packfile := $ compiler . compile($ source );
439
+ method pbc ($ source , * % adverbs ) {
440
+ my $ packfile := pir::compreg__Ps(' PIR' ). compile($ source );
441
+ my $ output := % adverbs <output > || % adverbs <o >;
442
+ $ packfile . write_to_file($ output ) if $ output ;
443
+ $ packfile
444
+ }
445
+
446
+ method init ($ source , * % adverbs ) {
447
+ self . init_packfile($ source )
448
+ }
449
+
450
+ method init_packfile ($ packfile ) {
441
451
for $ packfile . subs_by_tag(' init' ) -> $ sub { $ sub (); }
442
452
$ packfile . mark_initialized(' init' );
443
453
$ packfile
444
454
}
445
455
456
+ method compile_and_init ($ source ) {
457
+ self . init_packfile(pir::compreg__Ps(' PIR' ). compile($ source ))
458
+ }
459
+
446
460
method dumper ($ obj , $ name , * % options ) {
447
461
if nqp :: can ($ obj , ' dump' ) {
448
462
nqp :: print ($ obj . dump());
0 commit comments