Lines Matching refs:self
60 def __init__(self, type, name_or_data, attrs = None, line = None, column = None):
62 self.type = type
63 self.name_or_data = name_or_data
64 self.attrs = attrs
65 self.line = line
66 self.column = column
68 def __str__(self):
69 if self.type == ELEMENT_START:
70 return '<' + self.name_or_data + ' ...>'
71 if self.type == ELEMENT_END:
72 return '</' + self.name_or_data + '>'
73 if self.type == CHARACTER_DATA:
74 return self.name_or_data
75 if self.type == EOF:
83 def __init__(self, fp, skip_ws = True):
84 self.fp = fp
85 self.tokens = []
86 self.index = 0
87 self.final = False
88 self.skip_ws = skip_ws
90 self.character_pos = 0, 0
91 self.character_data = []
93 self.parser = xpat.ParserCreate()
94 self.parser.StartElementHandler = self.handle_element_start
95 self.parser.EndElementHandler = self.handle_element_end
96 self.parser.CharacterDataHandler = self.handle_character_data
98 def handle_element_start(self, name, attributes):
99 self.finish_character_data()
100 line, column = self.pos()
102 self.tokens.append(token)
104 def handle_element_end(self, name):
105 self.finish_character_data()
106 line, column = self.pos()
108 self.tokens.append(token)
110 def handle_character_data(self, data):
111 if not self.character_data:
112 self.character_pos = self.pos()
113 self.character_data.append(data)
115 def finish_character_data(self):
116 if self.character_data:
117 character_data = ''.join(self.character_data)
118 if not self.skip_ws or not character_data.isspace():
119 line, column = self.character_pos
121 self.tokens.append(token)
122 self.character_data = []
124 def next(self):
126 while self.index >= len(self.tokens) and not self.final:
127 self.tokens = []
128 self.index = 0
129 data = self.fp.read(size)
130 self.final = len(data) < size
133 self.parser.Parse(data, self.final)
140 if self.index >= len(self.tokens):
141 line, column = self.pos()
144 token = self.tokens[self.index]
145 self.index += 1
148 def pos(self):
149 return self.parser.CurrentLineNumber, self.parser.CurrentColumnNumber
154 def __init__(self, expected, found):
155 self.expected = expected
156 self.found = found
158 def __str__(self):
159 return '%u:%u: %s expected, %s found' % (self.found.line, self.found.column, str(self.expected), str(self.found))
166 def __init__(self, fp):
167 self.tokenizer = XmlTokenizer(fp)
168 self.consume()
170 def consume(self):
171 self.token = self.tokenizer.next()
173 def match_element_start(self, name):
174 return self.token.type == ELEMENT_START and self.token.name_or_data == name
176 def match_element_end(self, name):
177 return self.token.type == ELEMENT_END and self.token.name_or_data == name
179 def element_start(self, name):
180 while self.token.type == CHARACTER_DATA:
181 self.consume()
182 if self.token.type != ELEMENT_START:
183 raise TokenMismatch(XmlToken(ELEMENT_START, name), self.token)
184 if self.token.name_or_data != name:
185 raise TokenMismatch(XmlToken(ELEMENT_START, name), self.token)
186 attrs = self.token.attrs
187 self.consume()
190 def element_end(self, name):
191 while self.token.type == CHARACTER_DATA:
192 self.consume()
193 if self.token.type != ELEMENT_END:
194 raise TokenMismatch(XmlToken(ELEMENT_END, name), self.token)
195 if self.token.name_or_data != name:
196 raise TokenMismatch(XmlToken(ELEMENT_END, name), self.token)
197 self.consume()
199 def character_data(self, strip = True):
201 while self.token.type == CHARACTER_DATA:
202 data += self.token.name_or_data
203 self.consume()
211 def __init__(self, fp, options, state):
212 XmlParser.__init__(self, fp)
213 self.last_call_no = 0
214 self.state = state
215 self.options = options
217 def parse(self):
218 self.element_start('trace')
219 while self.token.type not in (ELEMENT_END, EOF):
220 call = self.parse_call()
222 self.handle_call(call)
223 if self.token.type != EOF:
224 self.element_end('trace')
226 def parse_call(self):
227 attrs = self.element_start('call')
231 self.last_call_no += 1
232 no = self.last_call_no
234 self.last_call_no = no
240 while self.token.type == ELEMENT_START:
241 if self.token.name_or_data == 'arg':
242 arg = self.parse_arg()
244 elif self.token.name_or_data == 'ret':
245 ret = self.parse_ret()
246 elif self.token.name_or_data == 'call':
248 self.parse_call()
249 elif self.token.name_or_data == 'time':
250 time = self.parse_time()
252 raise TokenMismatch("<arg ...> or <ret ...>", self.token)
253 self.element_end('call')
257 def parse_arg(self):
258 attrs = self.element_start('arg')
260 value = self.parse_value(name)
261 self.element_end('arg')
265 def parse_ret(self):
266 attrs = self.element_start('ret')
267 value = self.parse_value('ret')
268 self.element_end('ret')
272 def parse_time(self):
273 attrs = self.element_start('time')
274 time = self.parse_value('time');
275 self.element_end('time')
278 def parse_value(self, name):
280 if self.token.type == ELEMENT_START:
281 if self.token.name_or_data in expected_tokens:
282 method = getattr(self, 'parse_' + self.token.name_or_data)
284 raise TokenMismatch(" or " .join(expected_tokens), self.token)
286 def parse_null(self, pname):
287 self.element_start('null')
288 self.element_end('null')
291 def parse_bool(self, pname):
292 self.element_start('bool')
293 value = int(self.character_data())
294 self.element_end('bool')
297 def parse_int(self, pname):
298 self.element_start('int')
299 value = int(self.character_data())
300 self.element_end('int')
303 def parse_uint(self, pname):
304 self.element_start('uint')
305 value = int(self.character_data())
306 self.element_end('uint')
309 def parse_float(self, pname):
310 self.element_start('float')
311 value = float(self.character_data())
312 self.element_end('float')
315 def parse_enum(self, pname):
316 self.element_start('enum')
317 name = self.character_data()
318 self.element_end('enum')
321 def parse_string(self, pname):
322 self.element_start('string')
323 value = self.character_data()
324 self.element_end('string')
327 def parse_bytes(self, pname):
328 self.element_start('bytes')
329 value = self.character_data()
330 self.element_end('bytes')
333 def parse_array(self, pname):
334 self.element_start('array')
336 while self.token.type != ELEMENT_END:
337 elems.append(self.parse_elem('array'))
338 self.element_end('array')
341 def parse_elem(self, pname):
342 self.element_start('elem')
343 value = self.parse_value('elem')
344 self.element_end('elem')
347 def parse_struct(self, pname):
348 attrs = self.element_start('struct')
351 while self.token.type != ELEMENT_END:
352 members.append(self.parse_member(name))
353 self.element_end('struct')
356 def parse_member(self, pname):
357 attrs = self.element_start('member')
359 value = self.parse_value(name)
360 self.element_end('member')
364 def parse_ptr(self, pname):
365 self.element_start('ptr')
366 address = self.character_data()
367 self.element_end('ptr')
369 return Pointer(self.state, address, pname)
371 def handle_call(self, call):
377 def __init__(self, fp, options, formatter, state):
378 TraceParser.__init__(self, fp, options, state)
379 self.options = options
380 self.formatter = formatter
381 self.pretty_printer = PrettyPrinter(self.formatter, options)
383 def handle_call(self, call):
384 if self.options.ignore_junk and call.is_junk:
387 call.visit(self.pretty_printer)
392 def __init__(self, fp, options, formatter, state):
393 SimpleTraceDumper.__init__(self, fp, options, formatter, state)
394 self.call_stack = []
396 def handle_call(self, call):
397 if self.options.ignore_junk and call.is_junk:
400 if self.options.named_ptrs:
401 self.call_stack.append(call)
403 call.visit(self.pretty_printer)
408 def __init__(self, args=None):
410 self.plain = False
411 self.ignore_junk = False
413 ModelOptions.__init__(self, args)
419 def __init__(self):
422 def main(self):
423 optparser = self.get_optparser()
425 options = self.make_options(args)
441 self.process_arg(stream, options)
443 def make_options(self, args):
446 def get_optparser(self):
481 def process_arg(self, stream, options):