1 module pretty_instructions
4 import rich_instructions
6 redef class AnalysisManager
7 var opt_ast
= new OptionBool("Print the AST","--ast")
12 opts
.add_option
(opt_ast
)
15 redef fun build_ast
(filename
)
19 if ast
!= null and opt_ast
.value
then
20 var printer
= new ASTPrinter
21 printer
.enter_visit
(ast
)
35 redef fun visit
(n
) do n
.accept_ast_printer
(self)
39 fun accept_ast_printer
(v
: ASTPrinter) do visit_all
(v
)
43 redef fun to_s
do return text
44 redef fun accept_ast_printer
(v
: ASTPrinter) do v
.str
+= self.to_s
# + " "
48 redef fun accept_ast_printer
(v
: ASTPrinter)
50 var len
= self.to_s
.length
51 if len
< 6 and len
> 1 then
52 v
.str
+= self.to_s
+ " "*(6-len
)
59 redef class ANonEmptyLine
60 redef fun accept_ast_printer
(v
: ASTPrinter)
62 if n_label_decl
== null then v
.str
+= once
" "*10
67 redef class AInstruction
68 redef fun accept_ast_printer
(v
: ASTPrinter)
70 var pre_size
= v
.str
.length
72 var post_size
= v
.str
.length
73 var diff_size
= post_size
- pre_size
74 if diff_size
< 20 then v
.str
+= " "*(20-diff_size
)
78 redef class ALabelDecl
79 redef fun accept_ast_printer
(v
: ASTPrinter)
81 var text
= n_id
.text
+ ":"
82 v
.str
+= text
+ " "*(10-text
.length
)
89 var p
= new ASTPrinter