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
)
110 return "Lambda(%s,%s,%s,%s)" % self
._children
[1:]
112 class Classdef(Node
):
113 nodes
['classdef'] = 'Classdef'
115 def __init__(self
, name
, bases
, doc
, code
):
120 self
._children
= ('classdef', name
, bases
, doc
, code
)
123 return "Classdef(%s,%s,%s,%s)" % self
._children
[1:]
125 class Pass(EmptyNode
):
126 nodes
['pass'] = 'Pass'
127 _children
= ('pass',)
131 class Break(EmptyNode
):
132 nodes
['break'] = 'Break'
133 _children
= ('break',)
137 class Continue(EmptyNode
):
138 nodes
['continue'] = 'Continue'
139 _children
= ('continue',)
146 def __init__(self
, assign
, list, body
, else_
):
151 self
._children
= ('for', assign
, list, body
, else_
)
154 return "For(%s,%s,%s,%s)" % self
._children
[1:]
157 nodes
['while'] = 'While'
159 def __init__(self
, test
, body
, else_
):
163 self
._children
= ('while', test
, body
, else_
)
166 return "While(%s,%s,%s)" % self
._children
[1:]
169 """if: [ (testNode, suiteNode), ...], elseNode"""
172 def __init__(self
, tests
, else_
):
175 self
._children
= ('if', tests
, else_
)
178 return "If(%s,%s)" % self
._children
[1:]
181 nodes
['exec'] = 'Exec'
183 def __init__(self
, expr
, locals, globals):
186 self
.globals = globals
187 self
._children
= ('exec', expr
, locals, globals)
190 return "Exec(%s,%s,%s)" % self
._children
[1:]
193 nodes
['from'] = 'From'
195 def __init__(self
, modname
, names
):
196 self
.modname
= modname
198 self
._children
= ('from', modname
, names
)
201 return "From(%s,%s)" % self
._children
[1:]
204 nodes
['import'] = 'Import'
206 def __init__(self
, names
):
208 self
._children
= ('import', names
)
211 return "Import(%s)" % self
._children
[1:]
214 nodes
['raise'] = 'Raise'
216 def __init__(self
, expr1
, expr2
, expr3
):
220 self
._children
= ('raise', expr1
, expr2
, expr3
)
223 return "Raise(%s,%s,%s)" % self
._children
[1:]
225 class TryFinally(Node
):
226 nodes
['tryfinally'] = 'TryFinally'
228 def __init__(self
, body
, final
):
231 self
._children
= ('tryfinally', body
, final
)
234 return "TryFinally(%s,%s)" % self
._children
[1:]
236 class TryExcept(Node
):
237 """Try/Except body and handlers
239 The handlers attribute is a sequence of tuples. The elements of the
240 tuple are the exception name, the name to bind the exception to, and
241 the body of the except clause.
243 nodes
['tryexcept'] = 'TryExcept'
245 def __init__(self
, body
, handlers
, else_
):
247 self
.handlers
= handlers
249 self
._children
= ('tryexcept', body
, handlers
, else_
)
252 return "TryExcept(%s,%s,%s)" % self
._children
[1:]
255 nodes
['return'] = 'Return'
257 def __init__(self
, value
):
259 self
._children
= ('return', value
)
262 return "Return(%s)" % self
._children
[1:]
265 nodes
['const'] = 'Const'
267 def __init__(self
, value
):
269 self
._children
= ('const', value
)
272 return "Const(%s)" % self
._children
[1:]
275 nodes
['print'] = 'Print'
277 def __init__(self
, nodes
):
279 self
._children
= ('print', nodes
)
282 return "Print(%s)" % self
._children
[1:]
285 nodes
['printnl'] = 'Printnl'
287 def __init__(self
, nodes
):
289 self
._children
= ('printnl', nodes
)
292 return "Printnl(%s)" % self
._children
[1:]
295 nodes
['discard'] = 'Discard'
297 def __init__(self
, expr
):
299 self
._children
= ('discard', expr
)
302 return "Discard(%s)" % self
._children
[1:]
305 nodes
['assign'] = 'Assign'
307 def __init__(self
, nodes
, expr
):
310 self
._children
= ('assign', nodes
, expr
)
313 return "Assign(%s,%s)" % self
._children
[1:]
315 class AssTuple(Node
):
316 nodes
['ass_tuple'] = 'AssTuple'
318 def __init__(self
, nodes
):
320 self
._children
= ('ass_tuple', nodes
)
323 return "AssTuple(%s)" % self
._children
[1:]
326 nodes
['ass_list'] = 'AssList'
328 def __init__(self
, nodes
):
330 self
._children
= ('ass_list', nodes
)
333 return "AssList(%s)" % self
._children
[1:]
336 nodes
['ass_name'] = 'AssName'
338 def __init__(self
, name
, flags
):
341 self
._children
= ('ass_name', name
, flags
)
344 return "AssName(%s,%s)" % self
._children
[1:]
347 nodes
['ass_attr'] = 'AssAttr'
349 def __init__(self
, expr
, attrname
, flags
):
351 self
.attrname
= attrname
353 self
._children
= ('ass_attr', expr
, attrname
, flags
)
356 return "AssAttr(%s,%s,%s)" % self
._children
[1:]
359 nodes
['list'] = 'List'
361 def __init__(self
, nodes
):
363 self
._children
= ('list', nodes
)
366 return "List(%s)" % self
._children
[1:]
369 nodes
['dict'] = 'Dict'
371 def __init__(self
, items
):
373 self
._children
= ('dict', items
)
376 return "Dict(%s)" % self
._children
[1:]
381 def __init__(self
, expr
):
383 self
._children
= ('not', expr
)
386 return "Not(%s)" % self
._children
[1:]
389 nodes
['compare'] = 'Compare'
391 def __init__(self
, expr
, ops
):
394 self
._children
= ('compare', expr
, ops
)
397 return "Compare(%s,%s)" % self
._children
[1:]
400 nodes
['name'] = 'Name'
402 def __init__(self
, name
):
404 self
._children
= ('name', name
)
407 return "Name(%s)" % self
._children
[1:]
410 nodes
['global'] = 'Global'
412 def __init__(self
, names
):
414 self
._children
= ('global', names
)
417 return "Global(%s)" % self
._children
[1:]
419 class Backquote(Node
):
420 nodes
['backquote'] = 'Backquote'
422 def __init__(self
, node
):
424 self
._children
= ('backquote', node
)
427 return "Backquote(%s)" % self
._children
[1:]
430 nodes
['getattr'] = 'Getattr'
432 def __init__(self
, expr
, attrname
):
434 self
.attrname
= attrname
435 self
._children
= ('getattr', expr
, attrname
)
438 return "Getattr(%s,%s)" % self
._children
[1:]
440 class CallFunc(Node
):
441 nodes
['call_func'] = 'CallFunc'
443 def __init__(self
, node
, args
):
446 self
._children
= ('call_func', node
, args
)
449 return "CallFunc(%s,%s)" % self
._children
[1:]
452 nodes
['keyword'] = 'Keyword'
454 def __init__(self
, name
, expr
):
457 self
._children
= ('keyword', name
, expr
)
460 return "Keyword(%s,%s)" % self
._children
[1:]
462 class Subscript(Node
):
463 nodes
['subscript'] = 'Subscript'
465 def __init__(self
, expr
, flags
, subs
):
469 self
._children
= ('subscript', expr
, flags
, subs
)
472 return "Subscript(%s,%s,%s)" % self
._children
[1:]
474 class Ellipsis(EmptyNode
):
475 nodes
['ellipsis'] = 'Ellipsis'
476 _children
= ('ellipsis',)
480 class Sliceobj(Node
):
481 nodes
['sliceobj'] = 'Sliceobj'
483 def __init__(self
, nodes
):
485 self
._children
= ('sliceobj', nodes
)
488 return "Sliceobj(%s)" % self
._children
[1:]
491 nodes
['slice'] = 'Slice'
493 def __init__(self
, expr
, flags
, lower
, upper
):
498 self
._children
= ('slice', expr
, flags
, lower
, upper
)
501 return "Slice(%s,%s,%s,%s)" % self
._children
[1:]
504 nodes
['assert'] = 'Assert'
506 def __init__(self
, test
, fail
):
509 self
._children
= ('assert', test
, fail
)
512 return "Assert(%s,%s)" % self
._children
[1:]
515 nodes
['tuple'] = 'Tuple'
517 def __init__(self
, nodes
):
519 self
._children
= ('tuple', nodes
)
522 return "Tuple(%s)" % self
._children
[1:]
527 def __init__(self
, nodes
):
529 self
._children
= ('or', nodes
)
532 return "Or(%s)" % self
._children
[1:]
537 def __init__(self
, nodes
):
539 self
._children
= ('and', nodes
)
542 return "And(%s)" % self
._children
[1:]
545 nodes
['bitor'] = 'Bitor'
547 def __init__(self
, nodes
):
549 self
._children
= ('bitor', nodes
)
552 return "Bitor(%s)" % self
._children
[1:]
555 nodes
['bitxor'] = 'Bitxor'
557 def __init__(self
, nodes
):
559 self
._children
= ('bitxor', nodes
)
562 return "Bitxor(%s)" % self
._children
[1:]
565 nodes
['bitand'] = 'Bitand'
567 def __init__(self
, nodes
):
569 self
._children
= ('bitand', nodes
)
572 return "Bitand(%s)" % self
._children
[1:]
574 class LeftShift(Node
):
575 nodes
['<<'] = 'LeftShift'
577 def __init__(self
, (left
, right
)):
580 self
._children
= ('<<', (left
, right
))
583 return "LeftShift(%s)" % self
._children
[1:]
585 class RightShift(Node
):
586 nodes
['>>'] = 'RightShift'
588 def __init__(self
, (left
, right
)):
591 self
._children
= ('>>', (left
, right
))
594 return "RightShift(%s)" % self
._children
[1:]
599 def __init__(self
, (left
, right
)):
602 self
._children
= ('+', (left
, right
))
605 return "Add(%s)" % self
._children
[1:]
610 def __init__(self
, (left
, right
)):
613 self
._children
= ('-', (left
, right
))
616 return "Sub(%s)" % self
._children
[1:]
621 def __init__(self
, (left
, right
)):
624 self
._children
= ('*', (left
, right
))
627 return "Mul(%s)" % self
._children
[1:]
632 def __init__(self
, (left
, right
)):
635 self
._children
= ('/', (left
, right
))
638 return "Div(%s)" % self
._children
[1:]
643 def __init__(self
, (left
, right
)):
646 self
._children
= ('%', (left
, right
))
649 return "Mod(%s)" % self
._children
[1:]
652 nodes
['power'] = 'Power'
654 def __init__(self
, (left
, right
)):
657 self
._children
= ('power', (left
, right
))
660 return "Power(%s)" % self
._children
[1:]
662 class UnaryAdd(Node
):
663 nodes
['unary+'] = 'UnaryAdd'
665 def __init__(self
, node
):
667 self
._children
= ('unary+', node
)
670 return "UnaryAdd(%s)" % self
._children
[1:]
672 class UnarySub(Node
):
673 nodes
['unary-'] = 'UnarySub'
675 def __init__(self
, node
):
677 self
._children
= ('unary-', node
)
680 return "UnarySub(%s)" % self
._children
[1:]
683 nodes
['invert'] = 'Invert'
685 def __init__(self
, node
):
687 self
._children
= ('invert', node
)
690 return "Invert(%s)" % self
._children
[1:]
692 # now clean up the nodes dictionary
694 for k
in nodes
.keys():
695 nodes
[k
] = klasses
[nodes
[k
]]
699 # indent-tabs-mode: nil
700 # py-indent-offset: 2
701 # py-smart-indentation: nil