Class: Mirah::Parser::AstPrinter
- Inherits:
-
NodeScanner
- Object
- NodeScanner
- Mirah::Parser::AstPrinter
- Defined in:
- lib/mirah/parser.rb
Instance Method Summary collapse
- #dedent ⇒ Object
- #enterBlockArgument(node, arg) ⇒ Object
- #enterDefault(node, arg) ⇒ Object
- #enterLoop(node, arg) ⇒ Object
- #enterNodeList(node, arg) ⇒ Object
- #enterNullChild(obj) ⇒ Object
- #enterSimpleString(node, arg) ⇒ Object
- #enterTypeRefImpl(node, arg) ⇒ Object
- #enterUnquote(node, arg) ⇒ Object
- #exitDefault(node, arg) ⇒ Object
- #exitFieldAccess(node, arg) ⇒ Object (also: #exitFieldAssign)
- #exitSimpleString(node, arg) ⇒ Object
- #indent ⇒ Object
-
#initialize ⇒ AstPrinter
constructor
A new instance of AstPrinter.
- #print(*args) ⇒ Object
- #puts(*args) ⇒ Object
- #startNode(node) ⇒ Object
Constructor Details
#initialize ⇒ AstPrinter
Returns a new instance of AstPrinter.
94 95 96 97 98 |
# File 'lib/mirah/parser.rb', line 94 def initialize @out = "" @indent = 0 @newline = true end |
Instance Method Details
#dedent ⇒ Object
113 114 115 |
# File 'lib/mirah/parser.rb', line 113 def dedent @indent -= 2 end |
#enterBlockArgument(node, arg) ⇒ Object
184 185 186 187 188 |
# File 'lib/mirah/parser.rb', line 184 def enterBlockArgument(node, arg) enterDefault(node, arg) puts "optional" if node.optional true end |
#enterDefault(node, arg) ⇒ Object
125 126 127 128 129 |
# File 'lib/mirah/parser.rb', line 125 def enterDefault(node, arg) startNode(node) puts true end |
#enterLoop(node, arg) ⇒ Object
190 191 192 193 194 195 |
# File 'lib/mirah/parser.rb', line 190 def enterLoop(node, arg) enterDefault(node, arg) puts "skipFirstCheck" if node.skipFirstCheck puts "negative" if node.negative true end |
#enterNodeList(node, arg) ⇒ Object
178 179 180 181 182 |
# File 'lib/mirah/parser.rb', line 178 def enterNodeList(node, arg) puts "[" indent true end |
#enterNullChild(obj) ⇒ Object
116 117 118 |
# File 'lib/mirah/parser.rb', line 116 def enterNullChild(obj) puts("nil") end |
#enterSimpleString(node, arg) ⇒ Object
156 157 158 159 160 161 162 163 164 |
# File 'lib/mirah/parser.rb', line 156 def enterSimpleString(node, arg) first_child = @out.rindex(/[\]\n]/, -2) < @out.rindex("[") if first_child @newline = false @out[-1,1] = " " end print '"', node.value true end |
#enterTypeRefImpl(node, arg) ⇒ Object
170 171 172 173 174 175 176 |
# File 'lib/mirah/parser.rb', line 170 def enterTypeRefImpl(node, arg) startNode(node) print " #{node.name}" print " array" if node.isArray print " static" if node.isStatic true end |
#enterUnquote(node, arg) ⇒ Object
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'lib/mirah/parser.rb', line 203 def enterUnquote(node, arg) enterDefault(node, arg) object = node.object if object if object.kind_of?(Node) scan(object, arg) elsif object.kind_of?(java.util.List) && object.all? {|i| i.kind_of?(Node)} object.each {|o| scan(o, arg)} else str = if node.object.respond_to?(:toString) node.object.toString else node.object.inspect end puts "<", str, ">" end end object.nil? end |
#exitDefault(node, arg) ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/mirah/parser.rb', line 131 def exitDefault(node, arg) dedent if @out[-2,2] =~ /^[\[\]"]\n/ @out[-1,0] = "]" @out else no_children = @out.rindex(/[\]\n]/, -2) < @out.rindex("[") if no_children @out[-1,0] = "]" else puts("]") end end end |
#exitFieldAccess(node, arg) ⇒ Object Also known as: exitFieldAssign
197 198 199 200 |
# File 'lib/mirah/parser.rb', line 197 def exitFieldAccess(node, arg) puts "static" if node.isStatic exitDefault(node, arg) end |
#exitSimpleString(node, arg) ⇒ Object
166 167 168 |
# File 'lib/mirah/parser.rb', line 166 def exitSimpleString(node, arg) puts '"' end |
#indent ⇒ Object
110 111 112 |
# File 'lib/mirah/parser.rb', line 110 def indent @indent += 2 end |
#print(*args) ⇒ Object
104 105 106 107 108 109 |
# File 'lib/mirah/parser.rb', line 104 def print(*args) @out << (" " * @indent) if @newline args.each {|arg| @out << arg} @newline = false @out end |
#puts(*args) ⇒ Object
99 100 101 102 103 |
# File 'lib/mirah/parser.rb', line 99 def puts(*args) print(*args) @newline = true @out << "\n" end |
#startNode(node) ⇒ Object
120 121 122 123 |
# File 'lib/mirah/parser.rb', line 120 def startNode(node) print("[#{node.java_class.simple_name}") indent end |