Class: Mirah::Parser::AstPrinter

Inherits:
NodeScanner
  • Object
show all
Defined in:
lib/mirah/parser.rb

Instance Method Summary collapse

Constructor Details

#initializeAstPrinter

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

#dedentObject



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

#indentObject



110
111
112
# File 'lib/mirah/parser.rb', line 110

def indent
  @indent += 2
end


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