2 from consts
import CO_VARARGS
, CO_VARKEYWORDS
9 if type(elt
) is types
.TupleType
:
10 for elt2
in flatten(elt
):
12 elif type(elt
) is types
.ListType
:
13 for elt2
in flatten(elt
):
22 if hasattr(item
, "asList"):
23 l
.append(item
.asList())
25 if type(item
) is types
.TupleType
:
26 l
.append(tuple(asList(item
)))
27 elif type(item
) is types
.ListType
:
28 l
.append(asList(item
))
34 def __init__(self
, *args
):
37 def __getitem__(self
, index
):
38 return self
._children
[index
]
40 return "<Node %s>" % self
._children
[0]
42 return len(self
._children
)
43 def __getslice__(self
, low
, high
):
44 return self
._children
[low
:high
]
45 def getChildren(self
):
46 return tuple(flatten(self
._children
[1:]))
48 return self
._children
[0]
50 return tuple(asList(self
._children
))
52 class EmptyNode(Node
):
57 nodes
['module'] = 'Module'
59 def __init__(self
, doc
, node
):
62 self
._children
= ('module', doc
, node
)
65 return "Module(%s,%s)" % self
._children
[1:]
68 nodes
['stmt'] = 'Stmt'
70 def __init__(self
, nodes
):
72 self
._children
= ('stmt', nodes
)
75 return "Stmt(%s)" % self
._children
[1:]
78 nodes
['function'] = 'Function'
80 def __init__(self
, name
, argnames
, defaults
, flags
, doc
, code
):
82 self
.argnames
= argnames
83 self
.defaults
= defaults
87 self
._children
= ('function',
88 name
, argnames
, defaults
, flags
, doc
, code
)
89 self
.varargs
= self
.kwargs
= None
90 if flags
& CO_VARARGS
:
92 if flags
& CO_VARKEYWORDS
:
97 return "Function(%s,%s,%s,%s,%s,%s)" % self
._children
[1:]
100 nodes
['lambda'] = 'Lambda'
102 def __init__(self
, argnames
, defaults
, flags
, code
):
103 self
.argnames
= argnames
104 self
.defaults
= defaults
107 self
._children
= ('lambda', argnames
, defaults
, flags
, code
)
108 self
.varargs
= self
.kwargs
= None
109 if flags
& CO_VARARGS
:
111 if flags
& CO_VARKEYWORDS
:
115 return "Lambda(%s,%s,%s,%s)" % self
._children
[1:]
118 nodes
['class'] = 'Class'
120 def __init__(self
, name
, bases
, doc
, code
):
125 self
._children
= ('class', name
, bases
, doc
, code
)
128 return "Class(%s,%s,%s,%s)" % self
._children
[1:]
130 class Pass(EmptyNode
):
131 nodes
['pass'] = 'Pass'
132 _children
= ('pass',)
136 class Break(EmptyNode
):
137 nodes
['break'] = 'Break'
138 _children
= ('break',)
142 class Continue(EmptyNode
):
143 nodes
['continue'] = 'Continue'
144 _children
= ('continue',)
151 def __init__(self
, assign
, list, body
, else_
):
156 self
._children
= ('for', assign
, list, body
, else_
)
159 return "For(%s,%s,%s,%s)" % self
._children
[1:]
162 nodes
['while'] = 'While'
164 def __init__(self
, test
, body
, else_
):
168 self
._children
= ('while', test
, body
, else_
)
171 return "While(%s,%s,%s)" % self
._children
[1:]
174 """if: [ (testNode, suiteNode), ...], elseNode"""
177 def __init__(self
, tests
, else_
):
180 self
._children
= ('if', tests
, else_
)
183 return "If(%s,%s)" % self
._children
[1:]
186 nodes
['exec'] = 'Exec'
188 def __init__(self
, expr
, locals, globals):
191 self
.globals = globals
192 self
._children
= ('exec', expr
, locals, globals)
195 return "Exec(%s,%s,%s)" % self
._children
[1:]
198 nodes
['from'] = 'From'
200 def __init__(self
, modname
, names
):
201 self
.modname
= modname
203 self
._children
= ('from', modname
, names
)
206 return "From(%s,%s)" % self
._children
[1:]
209 nodes
['import'] = 'Import'
211 def __init__(self
, names
):
213 self
._children
= ('import', names
)
216 return "Import(%s)" % self
._children
[1:]
219 nodes
['raise'] = 'Raise'
221 def __init__(self
, expr1
, expr2
, expr3
):
225 self
._children
= ('raise', expr1
, expr2
, expr3
)
228 return "Raise(%s,%s,%s)" % self
._children
[1:]
230 class TryFinally(Node
):
231 nodes
['tryfinally'] = 'TryFinally'
233 def __init__(self
, body
, final
):
236 self
._children
= ('tryfinally', body
, final
)
239 return "TryFinally(%s,%s)" % self
._children
[1:]
241 class TryExcept(Node
):
242 """Try/Except body and handlers
244 The handlers attribute is a sequence of tuples. The elements of the
245 tuple are the exception name, the name to bind the exception to, and
246 the body of the except clause.
248 nodes
['tryexcept'] = 'TryExcept'
250 def __init__(self
, body
, handlers
, else_
):
252 self
.handlers
= handlers
254 self
._children
= ('tryexcept', body
, handlers
, else_
)
257 return "TryExcept(%s,%s,%s)" % self
._children
[1:]
260 nodes
['return'] = 'Return'
262 def __init__(self
, value
):
264 self
._children
= ('return', value
)
267 return "Return(%s)" % self
._children
[1:]
270 nodes
['const'] = 'Const'
272 def __init__(self
, value
):
274 self
._children
= ('const', value
)
277 return "Const(%s)" % self
._children
[1:]
280 nodes
['print'] = 'Print'
282 def __init__(self
, nodes
):
284 self
._children
= ('print', nodes
)
287 return "Print(%s)" % self
._children
[1:]
290 nodes
['printnl'] = 'Printnl'
292 def __init__(self
, nodes
):
294 self
._children
= ('printnl', nodes
)
297 return "Printnl(%s)" % self
._children
[1:]
300 nodes
['discard'] = 'Discard'
302 def __init__(self
, expr
):
304 self
._children
= ('discard', expr
)
307 return "Discard(%s)" % self
._children
[1:]
310 nodes
['assign'] = 'Assign'
312 def __init__(self
, nodes
, expr
):
315 self
._children
= ('assign', nodes
, expr
)
318 return "Assign(%s,%s)" % self
._children
[1:]
320 class AssTuple(Node
):
321 nodes
['ass_tuple'] = 'AssTuple'
323 def __init__(self
, nodes
):
325 self
._children
= ('ass_tuple', nodes
)
328 return "AssTuple(%s)" % self
._children
[1:]
331 nodes
['ass_list'] = 'AssList'
333 def __init__(self
, nodes
):
335 self
._children
= ('ass_list', nodes
)
338 return "AssList(%s)" % self
._children
[1:]
341 nodes
['ass_name'] = 'AssName'
343 def __init__(self
, name
, flags
):
346 self
._children
= ('ass_name', name
, flags
)
349 return "AssName(%s,%s)" % self
._children
[1:]
352 nodes
['ass_attr'] = 'AssAttr'
354 def __init__(self
, expr
, attrname
, flags
):
356 self
.attrname
= attrname
358 self
._children
= ('ass_attr', expr
, attrname
, flags
)
361 return "AssAttr(%s,%s,%s)" % self
._children
[1:]
364 nodes
['list'] = 'List'
366 def __init__(self
, nodes
):
368 self
._children
= ('list', nodes
)
371 return "List(%s)" % self
._children
[1:]
374 nodes
['dict'] = 'Dict'
376 def __init__(self
, items
):
378 self
._children
= ('dict', items
)
381 return "Dict(%s)" % self
._children
[1:]
386 def __init__(self
, expr
):
388 self
._children
= ('not', expr
)
391 return "Not(%s)" % self
._children
[1:]
394 nodes
['compare'] = 'Compare'
396 def __init__(self
, expr
, ops
):
399 self
._children
= ('compare', expr
, ops
)
402 return "Compare(%s,%s)" % self
._children
[1:]
405 nodes
['name'] = 'Name'
407 def __init__(self
, name
):
409 self
._children
= ('name', name
)
412 return "Name(%s)" % self
._children
[1:]
415 nodes
['global'] = 'Global'
417 def __init__(self
, names
):
419 self
._children
= ('global', names
)
422 return "Global(%s)" % self
._children
[1:]
424 class Backquote(Node
):
425 nodes
['backquote'] = 'Backquote'
427 def __init__(self
, node
):
429 self
._children
= ('backquote', node
)
432 return "Backquote(%s)" % self
._children
[1:]
435 nodes
['getattr'] = 'Getattr'
437 def __init__(self
, expr
, attrname
):
439 self
.attrname
= attrname
440 self
._children
= ('getattr', expr
, attrname
)
443 return "Getattr(%s,%s)" % self
._children
[1:]
445 class CallFunc(Node
):
446 nodes
['call_func'] = 'CallFunc'
448 def __init__(self
, node
, args
, star_args
= None, dstar_args
= None):
451 self
.star_args
= star_args
452 self
.dstar_args
= dstar_args
453 self
._children
= ('call_func', node
, args
, star_args
, dstar_args
)
456 return "CallFunc(%s,%s,*%s, **%s)" % self
._children
[1:]
459 nodes
['keyword'] = 'Keyword'
461 def __init__(self
, name
, expr
):
464 self
._children
= ('keyword', name
, expr
)
467 return "Keyword(%s,%s)" % self
._children
[1:]
469 class Subscript(Node
):
470 nodes
['subscript'] = 'Subscript'
472 def __init__(self
, expr
, flags
, subs
):
476 self
._children
= ('subscript', expr
, flags
, subs
)
479 return "Subscript(%s,%s,%s)" % self
._children
[1:]
481 class Ellipsis(EmptyNode
):
482 nodes
['ellipsis'] = 'Ellipsis'
483 _children
= ('ellipsis',)
487 class Sliceobj(Node
):
488 nodes
['sliceobj'] = 'Sliceobj'
490 def __init__(self
, nodes
):
492 self
._children
= ('sliceobj', nodes
)
495 return "Sliceobj(%s)" % self
._children
[1:]
498 nodes
['slice'] = 'Slice'
500 def __init__(self
, expr
, flags
, lower
, upper
):
505 self
._children
= ('slice', expr
, flags
, lower
, upper
)
508 return "Slice(%s,%s,%s,%s)" % self
._children
[1:]
511 nodes
['assert'] = 'Assert'
513 def __init__(self
, test
, fail
):
516 self
._children
= ('assert', test
, fail
)
519 return "Assert(%s,%s)" % self
._children
[1:]
522 nodes
['tuple'] = 'Tuple'
524 def __init__(self
, nodes
):
526 self
._children
= ('tuple', nodes
)
529 return "Tuple(%s)" % self
._children
[1:]
534 def __init__(self
, nodes
):
536 self
._children
= ('or', nodes
)
539 return "Or(%s)" % self
._children
[1:]
544 def __init__(self
, nodes
):
546 self
._children
= ('and', nodes
)
549 return "And(%s)" % self
._children
[1:]
552 nodes
['bitor'] = 'Bitor'
554 def __init__(self
, nodes
):
556 self
._children
= ('bitor', nodes
)
559 return "Bitor(%s)" % self
._children
[1:]
562 nodes
['bitxor'] = 'Bitxor'
564 def __init__(self
, nodes
):
566 self
._children
= ('bitxor', nodes
)
569 return "Bitxor(%s)" % self
._children
[1:]
572 nodes
['bitand'] = 'Bitand'
574 def __init__(self
, nodes
):
576 self
._children
= ('bitand', nodes
)
579 return "Bitand(%s)" % self
._children
[1:]
581 class LeftShift(Node
):
582 nodes
['<<'] = 'LeftShift'
584 def __init__(self
, (left
, right
)):
587 self
._children
= ('<<', (left
, right
))
590 return "LeftShift(%s)" % self
._children
[1:]
592 class RightShift(Node
):
593 nodes
['>>'] = 'RightShift'
595 def __init__(self
, (left
, right
)):
598 self
._children
= ('>>', (left
, right
))
601 return "RightShift(%s)" % self
._children
[1:]
606 def __init__(self
, (left
, right
)):
609 self
._children
= ('+', (left
, right
))
612 return "Add(%s)" % self
._children
[1:]
617 def __init__(self
, (left
, right
)):
620 self
._children
= ('-', (left
, right
))
623 return "Sub(%s)" % self
._children
[1:]
628 def __init__(self
, (left
, right
)):
631 self
._children
= ('*', (left
, right
))
634 return "Mul(%s)" % self
._children
[1:]
639 def __init__(self
, (left
, right
)):
642 self
._children
= ('/', (left
, right
))
645 return "Div(%s)" % self
._children
[1:]
650 def __init__(self
, (left
, right
)):
653 self
._children
= ('%', (left
, right
))
656 return "Mod(%s)" % self
._children
[1:]
659 nodes
['power'] = 'Power'
661 def __init__(self
, (left
, right
)):
664 self
._children
= ('power', (left
, right
))
667 return "Power(%s)" % self
._children
[1:]
669 class UnaryAdd(Node
):
670 nodes
['unary+'] = 'UnaryAdd'
672 def __init__(self
, node
):
674 self
._children
= ('unary+', node
)
677 return "UnaryAdd(%s)" % self
._children
[1:]
679 class UnarySub(Node
):
680 nodes
['unary-'] = 'UnarySub'
682 def __init__(self
, node
):
684 self
._children
= ('unary-', node
)
687 return "UnarySub(%s)" % self
._children
[1:]
690 nodes
['invert'] = 'Invert'
692 def __init__(self
, node
):
694 self
._children
= ('invert', node
)
697 return "Invert(%s)" % self
._children
[1:]
699 # now clean up the nodes dictionary
701 for k
in nodes
.keys():
702 nodes
[k
] = klasses
[nodes
[k
]]
706 # indent-tabs-mode: nil
707 # py-indent-offset: 2
708 # py-smart-indentation: nil