@@ -22,6 +22,14 @@ pub struct CompileParameters {
22
22
#[ clap( short, long, global = true , name = "output-file" , help = "Write output to <output-file>" ) ]
23
23
pub output : Option < String > ,
24
24
25
+ #[ clap(
26
+ long = "ast" ,
27
+ group = "format" ,
28
+ global = true ,
29
+ help = "Emit AST (Abstract Syntax Tree) as output"
30
+ ) ]
31
+ pub output_ast : bool ,
32
+
25
33
#[ clap(
26
34
long = "ir" ,
27
35
group = "format" ,
@@ -637,6 +645,16 @@ mod cli_tests {
637
645
fn valid_output_formats ( ) {
638
646
let parameters = CompileParameters :: parse ( vec_of_strings ! ( "input.st" , "--ir" ) ) . unwrap ( ) ;
639
647
assert ! ( parameters. output_ir) ;
648
+ assert ! ( !parameters. output_ast) ;
649
+ assert ! ( !parameters. output_bit_code) ;
650
+ assert ! ( !parameters. output_obj_code) ;
651
+ assert ! ( !parameters. output_pic_obj) ;
652
+ assert ! ( !parameters. output_shared_obj) ;
653
+ assert ! ( !parameters. output_reloc_code) ;
654
+
655
+ let parameters = CompileParameters :: parse ( vec_of_strings ! ( "input.st" , "--ast" ) ) . unwrap ( ) ;
656
+ assert ! ( !parameters. output_ir) ;
657
+ assert ! ( parameters. output_ast) ;
640
658
assert ! ( !parameters. output_bit_code) ;
641
659
assert ! ( !parameters. output_obj_code) ;
642
660
assert ! ( !parameters. output_pic_obj) ;
@@ -645,6 +663,7 @@ mod cli_tests {
645
663
646
664
let parameters = CompileParameters :: parse ( vec_of_strings ! ( "input.st" , "--bc" ) ) . unwrap ( ) ;
647
665
assert ! ( !parameters. output_ir) ;
666
+ assert ! ( !parameters. output_ast) ;
648
667
assert ! ( parameters. output_bit_code) ;
649
668
assert ! ( !parameters. output_obj_code) ;
650
669
assert ! ( !parameters. output_pic_obj) ;
@@ -653,6 +672,7 @@ mod cli_tests {
653
672
654
673
let parameters = CompileParameters :: parse ( vec_of_strings ! ( "input.st" , "--static" ) ) . unwrap ( ) ;
655
674
assert ! ( !parameters. output_ir) ;
675
+ assert ! ( !parameters. output_ast) ;
656
676
assert ! ( !parameters. output_bit_code) ;
657
677
assert ! ( parameters. output_obj_code) ;
658
678
assert ! ( !parameters. output_pic_obj) ;
@@ -661,6 +681,7 @@ mod cli_tests {
661
681
662
682
let parameters = CompileParameters :: parse ( vec_of_strings ! ( "input.st" , "--pic" ) ) . unwrap ( ) ;
663
683
assert ! ( !parameters. output_ir) ;
684
+ assert ! ( !parameters. output_ast) ;
664
685
assert ! ( !parameters. output_bit_code) ;
665
686
assert ! ( !parameters. output_obj_code) ;
666
687
assert ! ( parameters. output_pic_obj) ;
@@ -669,6 +690,7 @@ mod cli_tests {
669
690
670
691
let parameters = CompileParameters :: parse ( vec_of_strings ! ( "input.st" , "--shared" ) ) . unwrap ( ) ;
671
692
assert ! ( !parameters. output_ir) ;
693
+ assert ! ( !parameters. output_ast) ;
672
694
assert ! ( !parameters. output_bit_code) ;
673
695
assert ! ( !parameters. output_obj_code) ;
674
696
assert ! ( !parameters. output_pic_obj) ;
@@ -677,6 +699,7 @@ mod cli_tests {
677
699
678
700
let parameters = CompileParameters :: parse ( vec_of_strings ! ( "input.st" , "--relocatable" ) ) . unwrap ( ) ;
679
701
assert ! ( !parameters. output_ir) ;
702
+ assert ! ( !parameters. output_ast) ;
680
703
assert ! ( !parameters. output_bit_code) ;
681
704
assert ! ( !parameters. output_obj_code) ;
682
705
assert ! ( !parameters. output_pic_obj) ;
@@ -685,6 +708,7 @@ mod cli_tests {
685
708
686
709
let parameters = CompileParameters :: parse ( vec_of_strings ! ( "input.st" ) ) . unwrap ( ) ;
687
710
assert ! ( !parameters. output_ir) ;
711
+ assert ! ( !parameters. output_ast) ;
688
712
assert ! ( !parameters. output_bit_code) ;
689
713
assert ! ( !parameters. output_obj_code) ;
690
714
assert ! ( !parameters. output_pic_obj) ;
0 commit comments