blob: 5b0a06addd15d495490281b87815bb0b9efcd106 [file] [log] [blame]
Jeremy Hyltonf968e852000-02-04 00:25:23 +00001import types
Jeremy Hylton9605c112000-02-08 18:57:32 +00002from consts import CO_VARARGS, CO_VARKEYWORDS
Jeremy Hyltonf968e852000-02-04 00:25:23 +00003
4nodes = {}
5
6def flatten(list):
7 l = []
8 for elt in list:
9 if type(elt) is types.TupleType:
10 for elt2 in flatten(elt):
11 l.append(elt2)
12 elif type(elt) is types.ListType:
13 for elt2 in flatten(elt):
14 l.append(elt2)
15 else:
16 l.append(elt)
17 return l
18
19def asList(nodes):
20 l = []
21 for item in nodes:
22 if hasattr(item, "asList"):
23 l.append(item.asList())
24 else:
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))
29 else:
30 l.append(item)
31 return l
32
33class Node:
34 def __init__(self, *args):
35 self._children = args
36 self.lineno = None
37 def __getitem__(self, index):
38 return self._children[index]
39 def __repr__(self):
40 return "<Node %s>" % self._children[0]
41 def __len__(self):
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:]))
47 def getType(self):
48 return self._children[0]
49 def asList(self):
50 return tuple(asList(self._children))
51
52class EmptyNode(Node):
53 def __init__(self):
54 self.lineno = None
55
56class Module(Node):
57 nodes['module'] = 'Module'
58
59 def __init__(self, doc, node):
60 self.doc = doc
61 self.node = node
62 self._children = ('module', doc, node)
63
64 def __repr__(self):
65 return "Module(%s,%s)" % self._children[1:]
66
67class Stmt(Node):
68 nodes['stmt'] = 'Stmt'
69
70 def __init__(self, nodes):
71 self.nodes = nodes
72 self._children = ('stmt', nodes)
73
74 def __repr__(self):
75 return "Stmt(%s)" % self._children[1:]
76
77class Function(Node):
78 nodes['function'] = 'Function'
79
80 def __init__(self, name, argnames, defaults, flags, doc, code):
81 self.name = name
82 self.argnames = argnames
83 self.defaults = defaults
84 self.flags = flags
85 self.doc = doc
86 self.code = code
87 self._children = ('function',
88 name, argnames, defaults, flags, doc, code)
Jeremy Hylton9605c112000-02-08 18:57:32 +000089 self.varargs = self.kwargs = None
90 if flags & CO_VARARGS:
91 self.varargs = 1
92 if flags & CO_VARKEYWORDS:
93 self.kwargs = 1
94
Jeremy Hyltonf968e852000-02-04 00:25:23 +000095
96 def __repr__(self):
97 return "Function(%s,%s,%s,%s,%s,%s)" % self._children[1:]
98
99class Lambda(Node):
100 nodes['lambda'] = 'Lambda'
101
102 def __init__(self, argnames, defaults, flags, code):
103 self.argnames = argnames
104 self.defaults = defaults
105 self.flags = flags
106 self.code = code
107 self._children = ('lambda', argnames, defaults, flags, code)
Jeremy Hylton7708d692000-02-17 22:06:20 +0000108 self.varargs = self.kwargs = None
109 if flags & CO_VARARGS:
110 self.varargs = 1
111 if flags & CO_VARKEYWORDS:
112 self.kwargs = 1
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000113
114 def __repr__(self):
115 return "Lambda(%s,%s,%s,%s)" % self._children[1:]
116
Jeremy Hyltonfa974a92000-03-06 18:50:48 +0000117class Class(Node):
118 nodes['class'] = 'Class'
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000119
120 def __init__(self, name, bases, doc, code):
121 self.name = name
122 self.bases = bases
123 self.doc = doc
124 self.code = code
Jeremy Hyltonfa974a92000-03-06 18:50:48 +0000125 self._children = ('class', name, bases, doc, code)
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000126
127 def __repr__(self):
Jeremy Hyltonfa974a92000-03-06 18:50:48 +0000128 return "Class(%s,%s,%s,%s)" % self._children[1:]
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000129
130class Pass(EmptyNode):
131 nodes['pass'] = 'Pass'
132 _children = ('pass',)
133 def __repr__(self):
134 return "Pass()"
135
136class Break(EmptyNode):
137 nodes['break'] = 'Break'
138 _children = ('break',)
139 def __repr__(self):
140 return "Break()"
141
142class Continue(EmptyNode):
143 nodes['continue'] = 'Continue'
144 _children = ('continue',)
145 def __repr__(self):
146 return "Continue()"
147
148class For(Node):
149 nodes['for'] = 'For'
150
151 def __init__(self, assign, list, body, else_):
152 self.assign = assign
153 self.list = list
154 self.body = body
155 self.else_ = else_
156 self._children = ('for', assign, list, body, else_)
157
158 def __repr__(self):
159 return "For(%s,%s,%s,%s)" % self._children[1:]
160
161class While(Node):
162 nodes['while'] = 'While'
163
164 def __init__(self, test, body, else_):
165 self.test = test
166 self.body = body
167 self.else_ = else_
168 self._children = ('while', test, body, else_)
169
170 def __repr__(self):
171 return "While(%s,%s,%s)" % self._children[1:]
172
173class If(Node):
174 """if: [ (testNode, suiteNode), ...], elseNode"""
175 nodes['if'] = 'If'
176
177 def __init__(self, tests, else_):
178 self.tests = tests
179 self.else_ = else_
180 self._children = ('if', tests, else_)
181
182 def __repr__(self):
183 return "If(%s,%s)" % self._children[1:]
184
185class Exec(Node):
186 nodes['exec'] = 'Exec'
187
Jeremy Hyltonbf6267e2000-02-14 18:34:11 +0000188 def __init__(self, expr, locals, globals):
189 self.expr = expr
190 self.locals = locals
191 self.globals = globals
192 self._children = ('exec', expr, locals, globals)
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000193
194 def __repr__(self):
195 return "Exec(%s,%s,%s)" % self._children[1:]
196
197class From(Node):
198 nodes['from'] = 'From'
199
200 def __init__(self, modname, names):
201 self.modname = modname
202 self.names = names
203 self._children = ('from', modname, names)
204
205 def __repr__(self):
206 return "From(%s,%s)" % self._children[1:]
207
208class Import(Node):
209 nodes['import'] = 'Import'
210
211 def __init__(self, names):
212 self.names = names
213 self._children = ('import', names)
214
215 def __repr__(self):
216 return "Import(%s)" % self._children[1:]
217
218class Raise(Node):
219 nodes['raise'] = 'Raise'
220
221 def __init__(self, expr1, expr2, expr3):
222 self.expr1 = expr1
223 self.expr2 = expr2
224 self.expr3 = expr3
225 self._children = ('raise', expr1, expr2, expr3)
226
227 def __repr__(self):
228 return "Raise(%s,%s,%s)" % self._children[1:]
229
Jeremy Hyltonca1ad182000-02-15 21:30:00 +0000230class TryFinally(Node):
231 nodes['tryfinally'] = 'TryFinally'
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000232
Jeremy Hyltonca1ad182000-02-15 21:30:00 +0000233 def __init__(self, body, final):
234 self.body = body
235 self.final = final
236 self._children = ('tryfinally', body, final)
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000237
238 def __repr__(self):
Jeremy Hyltonca1ad182000-02-15 21:30:00 +0000239 return "TryFinally(%s,%s)" % self._children[1:]
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000240
Jeremy Hyltonca1ad182000-02-15 21:30:00 +0000241class TryExcept(Node):
242 """Try/Except body and handlers
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000243
Jeremy Hyltonca1ad182000-02-15 21:30:00 +0000244 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.
247 """
248 nodes['tryexcept'] = 'TryExcept'
249
250 def __init__(self, body, handlers, else_):
251 self.body = body
252 self.handlers = handlers
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000253 self.else_ = else_
Jeremy Hyltonca1ad182000-02-15 21:30:00 +0000254 self._children = ('tryexcept', body, handlers, else_)
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000255
256 def __repr__(self):
Jeremy Hyltonca1ad182000-02-15 21:30:00 +0000257 return "TryExcept(%s,%s,%s)" % self._children[1:]
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000258
259class Return(Node):
260 nodes['return'] = 'Return'
261
262 def __init__(self, value):
263 self.value = value
264 self._children = ('return', value)
265
266 def __repr__(self):
267 return "Return(%s)" % self._children[1:]
268
269class Const(Node):
270 nodes['const'] = 'Const'
271
272 def __init__(self, value):
273 self.value = value
274 self._children = ('const', value)
275
276 def __repr__(self):
277 return "Const(%s)" % self._children[1:]
278
279class Print(Node):
280 nodes['print'] = 'Print'
281
Jeremy Hylton9c048f92000-10-13 21:58:13 +0000282 def __init__(self, nodes, dest):
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000283 self.nodes = nodes
Jeremy Hylton9c048f92000-10-13 21:58:13 +0000284 self.dest = dest
285 self._children = ('print', nodes, dest)
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000286
287 def __repr__(self):
Jeremy Hylton9c048f92000-10-13 21:58:13 +0000288 return "Print(%s, %s)" % (self._children[1:-1], self._children[-1])
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000289
290class Printnl(Node):
291 nodes['printnl'] = 'Printnl'
292
Jeremy Hylton9c048f92000-10-13 21:58:13 +0000293 def __init__(self, nodes, dest):
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000294 self.nodes = nodes
Jeremy Hylton9c048f92000-10-13 21:58:13 +0000295 self.dest = dest
296 self._children = ('printnl', nodes, dest)
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000297
298 def __repr__(self):
Jeremy Hylton9c048f92000-10-13 21:58:13 +0000299 return "Printnl(%s, %s)" % (self._children[1:-1], self._children[-1])
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000300
301class Discard(Node):
302 nodes['discard'] = 'Discard'
303
304 def __init__(self, expr):
305 self.expr = expr
306 self._children = ('discard', expr)
307
308 def __repr__(self):
309 return "Discard(%s)" % self._children[1:]
310
Jeremy Hylton9c048f92000-10-13 21:58:13 +0000311class AugAssign(Node):
312 nodes['augassign'] = 'AugAssign'
313
314 def __init__(self, node, op, expr):
315 self.node = node
316 self.op = op
317 self.expr = expr
318 self._children = ('augassign', node, op, expr)
319
320 def __repr__(self):
321 return "AugAssign(%s)" % str(self._children[1:])
322
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000323class Assign(Node):
324 nodes['assign'] = 'Assign'
325
326 def __init__(self, nodes, expr):
327 self.nodes = nodes
328 self.expr = expr
329 self._children = ('assign', nodes, expr)
330
331 def __repr__(self):
332 return "Assign(%s,%s)" % self._children[1:]
333
334class AssTuple(Node):
335 nodes['ass_tuple'] = 'AssTuple'
336
337 def __init__(self, nodes):
338 self.nodes = nodes
339 self._children = ('ass_tuple', nodes)
340
341 def __repr__(self):
342 return "AssTuple(%s)" % self._children[1:]
343
344class AssList(Node):
345 nodes['ass_list'] = 'AssList'
346
347 def __init__(self, nodes):
348 self.nodes = nodes
349 self._children = ('ass_list', nodes)
350
351 def __repr__(self):
352 return "AssList(%s)" % self._children[1:]
353
354class AssName(Node):
355 nodes['ass_name'] = 'AssName'
356
357 def __init__(self, name, flags):
358 self.name = name
359 self.flags = flags
360 self._children = ('ass_name', name, flags)
361
362 def __repr__(self):
363 return "AssName(%s,%s)" % self._children[1:]
364
365class AssAttr(Node):
366 nodes['ass_attr'] = 'AssAttr'
367
368 def __init__(self, expr, attrname, flags):
369 self.expr = expr
370 self.attrname = attrname
371 self.flags = flags
372 self._children = ('ass_attr', expr, attrname, flags)
373
374 def __repr__(self):
375 return "AssAttr(%s,%s,%s)" % self._children[1:]
376
Jeremy Hylton9c048f92000-10-13 21:58:13 +0000377class ListComp(Node):
378 nodes['listcomp'] = 'ListComp'
379
380 def __init__(self, expr, quals):
381 self.expr = expr
382 self.quals = quals
383 self._children = ('listcomp', expr, quals)
384
385 def __repr__(self):
386 return "ListComp(%s, %s)" % self._children[1:]
387
388class ListCompFor(Node):
389 nodes['listcomp_for'] = 'ListCompFor'
390
391 # transformer fills in ifs after node is created
392
393 def __init__(self, assign, list, ifs):
394 self.assign = assign
395 self.list = list
396 self.ifs = ifs
397 self._children = ('listcomp_for', assign, list, ifs)
398
399 def __repr__(self):
400 return "ListCompFor(%s, %s, %s)" % self._children[1:]
401
402class ListCompIf(Node):
403 nodes['listcomp_if'] = 'ListCompIf'
404
405 def __init__(self, test):
406 self.test = test
407 self._children = ('listcomp_if', test)
408
409 def __repr__(self):
410 return "ListCompIf(%s)" % self._children[1:]
411
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000412class List(Node):
413 nodes['list'] = 'List'
414
415 def __init__(self, nodes):
416 self.nodes = nodes
417 self._children = ('list', nodes)
418
419 def __repr__(self):
420 return "List(%s)" % self._children[1:]
421
422class Dict(Node):
423 nodes['dict'] = 'Dict'
424
Jeremy Hyltonbf6267e2000-02-14 18:34:11 +0000425 def __init__(self, items):
426 self.items = items
427 self._children = ('dict', items)
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000428
429 def __repr__(self):
430 return "Dict(%s)" % self._children[1:]
431
432class Not(Node):
433 nodes['not'] = 'Not'
434
435 def __init__(self, expr):
436 self.expr = expr
437 self._children = ('not', expr)
438
439 def __repr__(self):
440 return "Not(%s)" % self._children[1:]
441
442class Compare(Node):
443 nodes['compare'] = 'Compare'
444
445 def __init__(self, expr, ops):
446 self.expr = expr
447 self.ops = ops
448 self._children = ('compare', expr, ops)
449
450 def __repr__(self):
451 return "Compare(%s,%s)" % self._children[1:]
452
453class Name(Node):
454 nodes['name'] = 'Name'
455
456 def __init__(self, name):
457 self.name = name
458 self._children = ('name', name)
459
460 def __repr__(self):
461 return "Name(%s)" % self._children[1:]
462
463class Global(Node):
464 nodes['global'] = 'Global'
465
466 def __init__(self, names):
467 self.names = names
468 self._children = ('global', names)
469
470 def __repr__(self):
471 return "Global(%s)" % self._children[1:]
472
473class Backquote(Node):
474 nodes['backquote'] = 'Backquote'
475
476 def __init__(self, node):
Jeremy Hylton156a9752000-02-08 21:06:19 +0000477 self.expr = node
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000478 self._children = ('backquote', node)
479
480 def __repr__(self):
481 return "Backquote(%s)" % self._children[1:]
482
483class Getattr(Node):
484 nodes['getattr'] = 'Getattr'
485
486 def __init__(self, expr, attrname):
487 self.expr = expr
488 self.attrname = attrname
489 self._children = ('getattr', expr, attrname)
490
491 def __repr__(self):
492 return "Getattr(%s,%s)" % self._children[1:]
493
494class CallFunc(Node):
495 nodes['call_func'] = 'CallFunc'
496
Jeremy Hyltonbe317e62000-05-02 22:32:59 +0000497 def __init__(self, node, args, star_args = None, dstar_args = None):
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000498 self.node = node
499 self.args = args
Jeremy Hyltonbe317e62000-05-02 22:32:59 +0000500 self.star_args = star_args
501 self.dstar_args = dstar_args
502 self._children = ('call_func', node, args, star_args, dstar_args)
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000503
504 def __repr__(self):
Jeremy Hyltonbe317e62000-05-02 22:32:59 +0000505 return "CallFunc(%s,%s,*%s, **%s)" % self._children[1:]
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000506
507class Keyword(Node):
508 nodes['keyword'] = 'Keyword'
509
510 def __init__(self, name, expr):
511 self.name = name
512 self.expr = expr
513 self._children = ('keyword', name, expr)
514
515 def __repr__(self):
516 return "Keyword(%s,%s)" % self._children[1:]
517
518class Subscript(Node):
519 nodes['subscript'] = 'Subscript'
520
521 def __init__(self, expr, flags, subs):
522 self.expr = expr
523 self.flags = flags
524 self.subs = subs
525 self._children = ('subscript', expr, flags, subs)
526
527 def __repr__(self):
528 return "Subscript(%s,%s,%s)" % self._children[1:]
529
530class Ellipsis(EmptyNode):
531 nodes['ellipsis'] = 'Ellipsis'
532 _children = ('ellipsis',)
533 def __repr__(self):
534 return "Ellipsis()"
535
536class Sliceobj(Node):
537 nodes['sliceobj'] = 'Sliceobj'
538
539 def __init__(self, nodes):
540 self.nodes = nodes
541 self._children = ('sliceobj', nodes)
542
543 def __repr__(self):
544 return "Sliceobj(%s)" % self._children[1:]
545
546class Slice(Node):
547 nodes['slice'] = 'Slice'
548
549 def __init__(self, expr, flags, lower, upper):
550 self.expr = expr
551 self.flags = flags
552 self.lower = lower
553 self.upper = upper
554 self._children = ('slice', expr, flags, lower, upper)
555
556 def __repr__(self):
557 return "Slice(%s,%s,%s,%s)" % self._children[1:]
558
559class Assert(Node):
560 nodes['assert'] = 'Assert'
561
Jeremy Hyltonbf6267e2000-02-14 18:34:11 +0000562 def __init__(self, test, fail):
563 self.test = test
564 self.fail = fail
565 self._children = ('assert', test, fail)
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000566
567 def __repr__(self):
568 return "Assert(%s,%s)" % self._children[1:]
569
570class Tuple(Node):
571 nodes['tuple'] = 'Tuple'
572
573 def __init__(self, nodes):
574 self.nodes = nodes
575 self._children = ('tuple', nodes)
576
577 def __repr__(self):
578 return "Tuple(%s)" % self._children[1:]
579
580class Or(Node):
581 nodes['or'] = 'Or'
582
583 def __init__(self, nodes):
584 self.nodes = nodes
585 self._children = ('or', nodes)
586
587 def __repr__(self):
588 return "Or(%s)" % self._children[1:]
589
590class And(Node):
591 nodes['and'] = 'And'
592
593 def __init__(self, nodes):
594 self.nodes = nodes
595 self._children = ('and', nodes)
596
597 def __repr__(self):
598 return "And(%s)" % self._children[1:]
599
600class Bitor(Node):
601 nodes['bitor'] = 'Bitor'
602
603 def __init__(self, nodes):
604 self.nodes = nodes
605 self._children = ('bitor', nodes)
606
607 def __repr__(self):
608 return "Bitor(%s)" % self._children[1:]
609
610class Bitxor(Node):
611 nodes['bitxor'] = 'Bitxor'
612
613 def __init__(self, nodes):
614 self.nodes = nodes
615 self._children = ('bitxor', nodes)
616
617 def __repr__(self):
618 return "Bitxor(%s)" % self._children[1:]
619
620class Bitand(Node):
621 nodes['bitand'] = 'Bitand'
622
623 def __init__(self, nodes):
624 self.nodes = nodes
625 self._children = ('bitand', nodes)
626
627 def __repr__(self):
628 return "Bitand(%s)" % self._children[1:]
629
630class LeftShift(Node):
631 nodes['<<'] = 'LeftShift'
632
Jeremy Hylton17988d22000-02-14 21:32:42 +0000633 def __init__(self, (left, right)):
634 self.left = left
635 self.right = right
636 self._children = ('<<', (left, right))
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000637
638 def __repr__(self):
Jeremy Hylton17988d22000-02-14 21:32:42 +0000639 return "LeftShift(%s)" % self._children[1:]
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000640
641class RightShift(Node):
642 nodes['>>'] = 'RightShift'
643
Jeremy Hylton17988d22000-02-14 21:32:42 +0000644 def __init__(self, (left, right)):
645 self.left = left
646 self.right = right
647 self._children = ('>>', (left, right))
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000648
649 def __repr__(self):
Jeremy Hylton17988d22000-02-14 21:32:42 +0000650 return "RightShift(%s)" % self._children[1:]
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000651
652class Add(Node):
653 nodes['+'] = 'Add'
654
655 def __init__(self, (left, right)):
656 self.left = left
657 self.right = right
658 self._children = ('+', (left, right))
659
660 def __repr__(self):
661 return "Add(%s)" % self._children[1:]
662
663class Sub(Node):
664 nodes['-'] = 'Sub'
665
666 def __init__(self, (left, right)):
667 self.left = left
668 self.right = right
669 self._children = ('-', (left, right))
670
671 def __repr__(self):
672 return "Sub(%s)" % self._children[1:]
673
674class Mul(Node):
675 nodes['*'] = 'Mul'
676
677 def __init__(self, (left, right)):
678 self.left = left
679 self.right = right
680 self._children = ('*', (left, right))
681
682 def __repr__(self):
683 return "Mul(%s)" % self._children[1:]
684
685class Div(Node):
686 nodes['/'] = 'Div'
687
688 def __init__(self, (left, right)):
689 self.left = left
690 self.right = right
691 self._children = ('/', (left, right))
692
693 def __repr__(self):
694 return "Div(%s)" % self._children[1:]
695
696class Mod(Node):
697 nodes['%'] = 'Mod'
698
699 def __init__(self, (left, right)):
700 self.left = left
701 self.right = right
702 self._children = ('%', (left, right))
703
704 def __repr__(self):
705 return "Mod(%s)" % self._children[1:]
706
707class Power(Node):
708 nodes['power'] = 'Power'
709
710 def __init__(self, (left, right)):
711 self.left = left
712 self.right = right
713 self._children = ('power', (left, right))
714
715 def __repr__(self):
716 return "Power(%s)" % self._children[1:]
717
718class UnaryAdd(Node):
719 nodes['unary+'] = 'UnaryAdd'
720
721 def __init__(self, node):
Jeremy Hylton156a9752000-02-08 21:06:19 +0000722 self.expr = node
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000723 self._children = ('unary+', node)
724
725 def __repr__(self):
726 return "UnaryAdd(%s)" % self._children[1:]
727
728class UnarySub(Node):
729 nodes['unary-'] = 'UnarySub'
730
731 def __init__(self, node):
Jeremy Hylton156a9752000-02-08 21:06:19 +0000732 self.expr = node
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000733 self._children = ('unary-', node)
734
735 def __repr__(self):
736 return "UnarySub(%s)" % self._children[1:]
737
738class Invert(Node):
739 nodes['invert'] = 'Invert'
740
741 def __init__(self, node):
Jeremy Hylton156a9752000-02-08 21:06:19 +0000742 self.expr = node
Jeremy Hyltonf968e852000-02-04 00:25:23 +0000743 self._children = ('invert', node)
744
745 def __repr__(self):
746 return "Invert(%s)" % self._children[1:]
747
748# now clean up the nodes dictionary
749klasses = globals()
750for k in nodes.keys():
751 nodes[k] = klasses[nodes[k]]
752
753# Local Variables:
754# mode:python
755# indent-tabs-mode: nil
756# py-indent-offset: 2
757# py-smart-indentation: nil
758# End: