sys.stderr.write "{hot_location} {self.class_name}: {message}\n{hot_location.colored_line("0;32")}\n"
end
+ # Is `self` a token or a pure-structural production like `AQId`?
+ fun is_structural: Bool do return false
+
# Write the subtree on stdout.
# See `ASTDump`
- fun dump_tree
+ fun dump_tree(display_structural: nullable Bool)
do
- var d = new ASTDump
+ var d = new ASTDump(display_structural or else true)
d.enter_visit(self)
d.write_to(sys.stdout)
end
# Is used to handle the initial node parent and workaround possible inconsistent `ANode::parent`
private var last_parent: nullable ANode = null
+ # Display tokens and structural production?
+ #
+ # Should tokens (and structural production like AQId) be displayed?
+ var display_structural: Bool
+
redef fun visit(n)
do
+ if not display_structural and n.is_structural then return
var p = last_parent
add(p, n)
last_parent = n
# See `blank_before` to get the whitespace that separate tokens.
var is_loose = false
+ redef fun is_structural do return true
+
# Loose tokens that precede `self`.
#
# These tokens start the line or belong to a line with only loose tokens.
super TokenKeyword
end
+# The keyword `catch`
+class TKwcatch
+ super TokenKeyword
+end
+
# The keyword `var`
class TKwvar
super TokenKeyword
# The final identifier
var n_id: TId is writable, noinit
+
+ redef fun is_structural do return true
end
# A potentially qualified class identifier `foo::bar::Baz`
# The final identifier
var n_id: TClassid is writable, noinit
+
+ redef fun is_structural do return true
end
# A signature in a method definition. eg `(x,y:X,z:Z):T`
# A `return` statement. eg `return x`
class AReturnExpr
- super AExpr
+ super AEscapeExpr
# The `return` keyword
var n_kwreturn: nullable TKwreturn = null is writable
-
- # The return value, if any
- var n_expr: nullable AExpr = null is writable
end
# A `yield` statement. eg `yield x`
# The list of statements of the `do`.
var n_block: nullable AExpr = null is writable
+
+ # The `catch` keyword
+ var n_kwcatch: nullable TKwcatch = null is writable
+
+ # The do catch block
+ var n_catch: nullable AExpr = null is writable
end
# A `if` statement