# print AST in an human form
module astprinter
-import typing
-import phase
+import semantize
intrude import parser
-import literal
+private import literal
private class ASTPrinterVisitor
super Visitor
has_eol = true
end
- var last_current: nullable ANode
+ var last_current: nullable ANode = null
fun write(s: String)
do
if last_current != current_node then
last_current = current_node
- var l = current_node._location
- if l != null then
- eol
- out.add(s)
- out.add("\t# {l.colored_line("0;32").split_with('\n').first}")
- has_eol = false
- eol
- return
- end
end
out.add(s)
has_eol = false
end
end
+redef class AByteExpr
+ redef fun accept_printer(v)
+ do
+ v.write(value.to_s)
+ end
+end
+
redef class ANewExpr
redef fun accept_printer(v)
do
- v.write("new {mtype.as(not null)}.{mproperty.as(not null)}")
+ v.write("new {mtype.as(not null)}.{callsite.mproperty}")
if not n_args.n_exprs.is_empty then
v.write("(")
v.indent
redef fun accept_printer(v)
do
v.enter_visit(n_expr)
- v.write(".{mproperty.name}")
+ v.write(".{callsite.mproperty.name}")
if not raw_arguments.is_empty then
v.write("(")
v.indent
var is_first = true
- for a in raw_arguments.as(not null) do
+ for a in raw_arguments do
if is_first then is_first = false else v.write(",")
v.enter_visit(a)
end