Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 1 | import types |
Jeremy Hylton | 9605c11 | 2000-02-08 18:57:32 +0000 | [diff] [blame] | 2 | from consts import CO_VARARGS, CO_VARKEYWORDS |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 3 | |
| 4 | nodes = {} |
| 5 | |
| 6 | def 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 | |
| 19 | def 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 | |
| 33 | class 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 | |
| 52 | class EmptyNode(Node): |
| 53 | def __init__(self): |
| 54 | self.lineno = None |
| 55 | |
| 56 | class 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 | |
| 67 | class 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 | |
| 77 | class 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 Hylton | 9605c11 | 2000-02-08 18:57:32 +0000 | [diff] [blame] | 89 | 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 Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 95 | |
| 96 | def __repr__(self): |
| 97 | return "Function(%s,%s,%s,%s,%s,%s)" % self._children[1:] |
| 98 | |
| 99 | class 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 Hylton | 7708d69 | 2000-02-17 22:06:20 +0000 | [diff] [blame^] | 108 | self.varargs = self.kwargs = None |
| 109 | if flags & CO_VARARGS: |
| 110 | self.varargs = 1 |
| 111 | if flags & CO_VARKEYWORDS: |
| 112 | self.kwargs = 1 |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 113 | |
| 114 | def __repr__(self): |
| 115 | return "Lambda(%s,%s,%s,%s)" % self._children[1:] |
| 116 | |
| 117 | class Classdef(Node): |
| 118 | nodes['classdef'] = 'Classdef' |
| 119 | |
| 120 | def __init__(self, name, bases, doc, code): |
| 121 | self.name = name |
| 122 | self.bases = bases |
| 123 | self.doc = doc |
| 124 | self.code = code |
| 125 | self._children = ('classdef', name, bases, doc, code) |
| 126 | |
| 127 | def __repr__(self): |
| 128 | return "Classdef(%s,%s,%s,%s)" % self._children[1:] |
| 129 | |
| 130 | class Pass(EmptyNode): |
| 131 | nodes['pass'] = 'Pass' |
| 132 | _children = ('pass',) |
| 133 | def __repr__(self): |
| 134 | return "Pass()" |
| 135 | |
| 136 | class Break(EmptyNode): |
| 137 | nodes['break'] = 'Break' |
| 138 | _children = ('break',) |
| 139 | def __repr__(self): |
| 140 | return "Break()" |
| 141 | |
| 142 | class Continue(EmptyNode): |
| 143 | nodes['continue'] = 'Continue' |
| 144 | _children = ('continue',) |
| 145 | def __repr__(self): |
| 146 | return "Continue()" |
| 147 | |
| 148 | class 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 | |
| 161 | class 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 | |
| 173 | class 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 | |
| 185 | class Exec(Node): |
| 186 | nodes['exec'] = 'Exec' |
| 187 | |
Jeremy Hylton | bf6267e | 2000-02-14 18:34:11 +0000 | [diff] [blame] | 188 | 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 Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 193 | |
| 194 | def __repr__(self): |
| 195 | return "Exec(%s,%s,%s)" % self._children[1:] |
| 196 | |
| 197 | class 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 | |
| 208 | class 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 | |
| 218 | class 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 Hylton | ca1ad18 | 2000-02-15 21:30:00 +0000 | [diff] [blame] | 230 | class TryFinally(Node): |
| 231 | nodes['tryfinally'] = 'TryFinally' |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 232 | |
Jeremy Hylton | ca1ad18 | 2000-02-15 21:30:00 +0000 | [diff] [blame] | 233 | def __init__(self, body, final): |
| 234 | self.body = body |
| 235 | self.final = final |
| 236 | self._children = ('tryfinally', body, final) |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 237 | |
| 238 | def __repr__(self): |
Jeremy Hylton | ca1ad18 | 2000-02-15 21:30:00 +0000 | [diff] [blame] | 239 | return "TryFinally(%s,%s)" % self._children[1:] |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 240 | |
Jeremy Hylton | ca1ad18 | 2000-02-15 21:30:00 +0000 | [diff] [blame] | 241 | class TryExcept(Node): |
| 242 | """Try/Except body and handlers |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 243 | |
Jeremy Hylton | ca1ad18 | 2000-02-15 21:30:00 +0000 | [diff] [blame] | 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. |
| 247 | """ |
| 248 | nodes['tryexcept'] = 'TryExcept' |
| 249 | |
| 250 | def __init__(self, body, handlers, else_): |
| 251 | self.body = body |
| 252 | self.handlers = handlers |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 253 | self.else_ = else_ |
Jeremy Hylton | ca1ad18 | 2000-02-15 21:30:00 +0000 | [diff] [blame] | 254 | self._children = ('tryexcept', body, handlers, else_) |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 255 | |
| 256 | def __repr__(self): |
Jeremy Hylton | ca1ad18 | 2000-02-15 21:30:00 +0000 | [diff] [blame] | 257 | return "TryExcept(%s,%s,%s)" % self._children[1:] |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 258 | |
| 259 | class 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 | |
| 269 | class 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 | |
| 279 | class Print(Node): |
| 280 | nodes['print'] = 'Print' |
| 281 | |
| 282 | def __init__(self, nodes): |
| 283 | self.nodes = nodes |
| 284 | self._children = ('print', nodes) |
| 285 | |
| 286 | def __repr__(self): |
| 287 | return "Print(%s)" % self._children[1:] |
| 288 | |
| 289 | class Printnl(Node): |
| 290 | nodes['printnl'] = 'Printnl' |
| 291 | |
| 292 | def __init__(self, nodes): |
| 293 | self.nodes = nodes |
| 294 | self._children = ('printnl', nodes) |
| 295 | |
| 296 | def __repr__(self): |
| 297 | return "Printnl(%s)" % self._children[1:] |
| 298 | |
| 299 | class Discard(Node): |
| 300 | nodes['discard'] = 'Discard' |
| 301 | |
| 302 | def __init__(self, expr): |
| 303 | self.expr = expr |
| 304 | self._children = ('discard', expr) |
| 305 | |
| 306 | def __repr__(self): |
| 307 | return "Discard(%s)" % self._children[1:] |
| 308 | |
| 309 | class Assign(Node): |
| 310 | nodes['assign'] = 'Assign' |
| 311 | |
| 312 | def __init__(self, nodes, expr): |
| 313 | self.nodes = nodes |
| 314 | self.expr = expr |
| 315 | self._children = ('assign', nodes, expr) |
| 316 | |
| 317 | def __repr__(self): |
| 318 | return "Assign(%s,%s)" % self._children[1:] |
| 319 | |
| 320 | class AssTuple(Node): |
| 321 | nodes['ass_tuple'] = 'AssTuple' |
| 322 | |
| 323 | def __init__(self, nodes): |
| 324 | self.nodes = nodes |
| 325 | self._children = ('ass_tuple', nodes) |
| 326 | |
| 327 | def __repr__(self): |
| 328 | return "AssTuple(%s)" % self._children[1:] |
| 329 | |
| 330 | class AssList(Node): |
| 331 | nodes['ass_list'] = 'AssList' |
| 332 | |
| 333 | def __init__(self, nodes): |
| 334 | self.nodes = nodes |
| 335 | self._children = ('ass_list', nodes) |
| 336 | |
| 337 | def __repr__(self): |
| 338 | return "AssList(%s)" % self._children[1:] |
| 339 | |
| 340 | class AssName(Node): |
| 341 | nodes['ass_name'] = 'AssName' |
| 342 | |
| 343 | def __init__(self, name, flags): |
| 344 | self.name = name |
| 345 | self.flags = flags |
| 346 | self._children = ('ass_name', name, flags) |
| 347 | |
| 348 | def __repr__(self): |
| 349 | return "AssName(%s,%s)" % self._children[1:] |
| 350 | |
| 351 | class AssAttr(Node): |
| 352 | nodes['ass_attr'] = 'AssAttr' |
| 353 | |
| 354 | def __init__(self, expr, attrname, flags): |
| 355 | self.expr = expr |
| 356 | self.attrname = attrname |
| 357 | self.flags = flags |
| 358 | self._children = ('ass_attr', expr, attrname, flags) |
| 359 | |
| 360 | def __repr__(self): |
| 361 | return "AssAttr(%s,%s,%s)" % self._children[1:] |
| 362 | |
| 363 | class List(Node): |
| 364 | nodes['list'] = 'List' |
| 365 | |
| 366 | def __init__(self, nodes): |
| 367 | self.nodes = nodes |
| 368 | self._children = ('list', nodes) |
| 369 | |
| 370 | def __repr__(self): |
| 371 | return "List(%s)" % self._children[1:] |
| 372 | |
| 373 | class Dict(Node): |
| 374 | nodes['dict'] = 'Dict' |
| 375 | |
Jeremy Hylton | bf6267e | 2000-02-14 18:34:11 +0000 | [diff] [blame] | 376 | def __init__(self, items): |
| 377 | self.items = items |
| 378 | self._children = ('dict', items) |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 379 | |
| 380 | def __repr__(self): |
| 381 | return "Dict(%s)" % self._children[1:] |
| 382 | |
| 383 | class Not(Node): |
| 384 | nodes['not'] = 'Not' |
| 385 | |
| 386 | def __init__(self, expr): |
| 387 | self.expr = expr |
| 388 | self._children = ('not', expr) |
| 389 | |
| 390 | def __repr__(self): |
| 391 | return "Not(%s)" % self._children[1:] |
| 392 | |
| 393 | class Compare(Node): |
| 394 | nodes['compare'] = 'Compare' |
| 395 | |
| 396 | def __init__(self, expr, ops): |
| 397 | self.expr = expr |
| 398 | self.ops = ops |
| 399 | self._children = ('compare', expr, ops) |
| 400 | |
| 401 | def __repr__(self): |
| 402 | return "Compare(%s,%s)" % self._children[1:] |
| 403 | |
| 404 | class Name(Node): |
| 405 | nodes['name'] = 'Name' |
| 406 | |
| 407 | def __init__(self, name): |
| 408 | self.name = name |
| 409 | self._children = ('name', name) |
| 410 | |
| 411 | def __repr__(self): |
| 412 | return "Name(%s)" % self._children[1:] |
| 413 | |
| 414 | class Global(Node): |
| 415 | nodes['global'] = 'Global' |
| 416 | |
| 417 | def __init__(self, names): |
| 418 | self.names = names |
| 419 | self._children = ('global', names) |
| 420 | |
| 421 | def __repr__(self): |
| 422 | return "Global(%s)" % self._children[1:] |
| 423 | |
| 424 | class Backquote(Node): |
| 425 | nodes['backquote'] = 'Backquote' |
| 426 | |
| 427 | def __init__(self, node): |
Jeremy Hylton | 156a975 | 2000-02-08 21:06:19 +0000 | [diff] [blame] | 428 | self.expr = node |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 429 | self._children = ('backquote', node) |
| 430 | |
| 431 | def __repr__(self): |
| 432 | return "Backquote(%s)" % self._children[1:] |
| 433 | |
| 434 | class Getattr(Node): |
| 435 | nodes['getattr'] = 'Getattr' |
| 436 | |
| 437 | def __init__(self, expr, attrname): |
| 438 | self.expr = expr |
| 439 | self.attrname = attrname |
| 440 | self._children = ('getattr', expr, attrname) |
| 441 | |
| 442 | def __repr__(self): |
| 443 | return "Getattr(%s,%s)" % self._children[1:] |
| 444 | |
| 445 | class CallFunc(Node): |
| 446 | nodes['call_func'] = 'CallFunc' |
| 447 | |
| 448 | def __init__(self, node, args): |
| 449 | self.node = node |
| 450 | self.args = args |
| 451 | self._children = ('call_func', node, args) |
| 452 | |
| 453 | def __repr__(self): |
| 454 | return "CallFunc(%s,%s)" % self._children[1:] |
| 455 | |
| 456 | class Keyword(Node): |
| 457 | nodes['keyword'] = 'Keyword' |
| 458 | |
| 459 | def __init__(self, name, expr): |
| 460 | self.name = name |
| 461 | self.expr = expr |
| 462 | self._children = ('keyword', name, expr) |
| 463 | |
| 464 | def __repr__(self): |
| 465 | return "Keyword(%s,%s)" % self._children[1:] |
| 466 | |
| 467 | class Subscript(Node): |
| 468 | nodes['subscript'] = 'Subscript' |
| 469 | |
| 470 | def __init__(self, expr, flags, subs): |
| 471 | self.expr = expr |
| 472 | self.flags = flags |
| 473 | self.subs = subs |
| 474 | self._children = ('subscript', expr, flags, subs) |
| 475 | |
| 476 | def __repr__(self): |
| 477 | return "Subscript(%s,%s,%s)" % self._children[1:] |
| 478 | |
| 479 | class Ellipsis(EmptyNode): |
| 480 | nodes['ellipsis'] = 'Ellipsis' |
| 481 | _children = ('ellipsis',) |
| 482 | def __repr__(self): |
| 483 | return "Ellipsis()" |
| 484 | |
| 485 | class Sliceobj(Node): |
| 486 | nodes['sliceobj'] = 'Sliceobj' |
| 487 | |
| 488 | def __init__(self, nodes): |
| 489 | self.nodes = nodes |
| 490 | self._children = ('sliceobj', nodes) |
| 491 | |
| 492 | def __repr__(self): |
| 493 | return "Sliceobj(%s)" % self._children[1:] |
| 494 | |
| 495 | class Slice(Node): |
| 496 | nodes['slice'] = 'Slice' |
| 497 | |
| 498 | def __init__(self, expr, flags, lower, upper): |
| 499 | self.expr = expr |
| 500 | self.flags = flags |
| 501 | self.lower = lower |
| 502 | self.upper = upper |
| 503 | self._children = ('slice', expr, flags, lower, upper) |
| 504 | |
| 505 | def __repr__(self): |
| 506 | return "Slice(%s,%s,%s,%s)" % self._children[1:] |
| 507 | |
| 508 | class Assert(Node): |
| 509 | nodes['assert'] = 'Assert' |
| 510 | |
Jeremy Hylton | bf6267e | 2000-02-14 18:34:11 +0000 | [diff] [blame] | 511 | def __init__(self, test, fail): |
| 512 | self.test = test |
| 513 | self.fail = fail |
| 514 | self._children = ('assert', test, fail) |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 515 | |
| 516 | def __repr__(self): |
| 517 | return "Assert(%s,%s)" % self._children[1:] |
| 518 | |
| 519 | class Tuple(Node): |
| 520 | nodes['tuple'] = 'Tuple' |
| 521 | |
| 522 | def __init__(self, nodes): |
| 523 | self.nodes = nodes |
| 524 | self._children = ('tuple', nodes) |
| 525 | |
| 526 | def __repr__(self): |
| 527 | return "Tuple(%s)" % self._children[1:] |
| 528 | |
| 529 | class Or(Node): |
| 530 | nodes['or'] = 'Or' |
| 531 | |
| 532 | def __init__(self, nodes): |
| 533 | self.nodes = nodes |
| 534 | self._children = ('or', nodes) |
| 535 | |
| 536 | def __repr__(self): |
| 537 | return "Or(%s)" % self._children[1:] |
| 538 | |
| 539 | class And(Node): |
| 540 | nodes['and'] = 'And' |
| 541 | |
| 542 | def __init__(self, nodes): |
| 543 | self.nodes = nodes |
| 544 | self._children = ('and', nodes) |
| 545 | |
| 546 | def __repr__(self): |
| 547 | return "And(%s)" % self._children[1:] |
| 548 | |
| 549 | class Bitor(Node): |
| 550 | nodes['bitor'] = 'Bitor' |
| 551 | |
| 552 | def __init__(self, nodes): |
| 553 | self.nodes = nodes |
| 554 | self._children = ('bitor', nodes) |
| 555 | |
| 556 | def __repr__(self): |
| 557 | return "Bitor(%s)" % self._children[1:] |
| 558 | |
| 559 | class Bitxor(Node): |
| 560 | nodes['bitxor'] = 'Bitxor' |
| 561 | |
| 562 | def __init__(self, nodes): |
| 563 | self.nodes = nodes |
| 564 | self._children = ('bitxor', nodes) |
| 565 | |
| 566 | def __repr__(self): |
| 567 | return "Bitxor(%s)" % self._children[1:] |
| 568 | |
| 569 | class Bitand(Node): |
| 570 | nodes['bitand'] = 'Bitand' |
| 571 | |
| 572 | def __init__(self, nodes): |
| 573 | self.nodes = nodes |
| 574 | self._children = ('bitand', nodes) |
| 575 | |
| 576 | def __repr__(self): |
| 577 | return "Bitand(%s)" % self._children[1:] |
| 578 | |
| 579 | class LeftShift(Node): |
| 580 | nodes['<<'] = 'LeftShift' |
| 581 | |
Jeremy Hylton | 17988d2 | 2000-02-14 21:32:42 +0000 | [diff] [blame] | 582 | def __init__(self, (left, right)): |
| 583 | self.left = left |
| 584 | self.right = right |
| 585 | self._children = ('<<', (left, right)) |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 586 | |
| 587 | def __repr__(self): |
Jeremy Hylton | 17988d2 | 2000-02-14 21:32:42 +0000 | [diff] [blame] | 588 | return "LeftShift(%s)" % self._children[1:] |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 589 | |
| 590 | class RightShift(Node): |
| 591 | nodes['>>'] = 'RightShift' |
| 592 | |
Jeremy Hylton | 17988d2 | 2000-02-14 21:32:42 +0000 | [diff] [blame] | 593 | def __init__(self, (left, right)): |
| 594 | self.left = left |
| 595 | self.right = right |
| 596 | self._children = ('>>', (left, right)) |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 597 | |
| 598 | def __repr__(self): |
Jeremy Hylton | 17988d2 | 2000-02-14 21:32:42 +0000 | [diff] [blame] | 599 | return "RightShift(%s)" % self._children[1:] |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 600 | |
| 601 | class Add(Node): |
| 602 | nodes['+'] = 'Add' |
| 603 | |
| 604 | def __init__(self, (left, right)): |
| 605 | self.left = left |
| 606 | self.right = right |
| 607 | self._children = ('+', (left, right)) |
| 608 | |
| 609 | def __repr__(self): |
| 610 | return "Add(%s)" % self._children[1:] |
| 611 | |
| 612 | class Sub(Node): |
| 613 | nodes['-'] = 'Sub' |
| 614 | |
| 615 | def __init__(self, (left, right)): |
| 616 | self.left = left |
| 617 | self.right = right |
| 618 | self._children = ('-', (left, right)) |
| 619 | |
| 620 | def __repr__(self): |
| 621 | return "Sub(%s)" % self._children[1:] |
| 622 | |
| 623 | class Mul(Node): |
| 624 | nodes['*'] = 'Mul' |
| 625 | |
| 626 | def __init__(self, (left, right)): |
| 627 | self.left = left |
| 628 | self.right = right |
| 629 | self._children = ('*', (left, right)) |
| 630 | |
| 631 | def __repr__(self): |
| 632 | return "Mul(%s)" % self._children[1:] |
| 633 | |
| 634 | class Div(Node): |
| 635 | nodes['/'] = 'Div' |
| 636 | |
| 637 | def __init__(self, (left, right)): |
| 638 | self.left = left |
| 639 | self.right = right |
| 640 | self._children = ('/', (left, right)) |
| 641 | |
| 642 | def __repr__(self): |
| 643 | return "Div(%s)" % self._children[1:] |
| 644 | |
| 645 | class Mod(Node): |
| 646 | nodes['%'] = 'Mod' |
| 647 | |
| 648 | def __init__(self, (left, right)): |
| 649 | self.left = left |
| 650 | self.right = right |
| 651 | self._children = ('%', (left, right)) |
| 652 | |
| 653 | def __repr__(self): |
| 654 | return "Mod(%s)" % self._children[1:] |
| 655 | |
| 656 | class Power(Node): |
| 657 | nodes['power'] = 'Power' |
| 658 | |
| 659 | def __init__(self, (left, right)): |
| 660 | self.left = left |
| 661 | self.right = right |
| 662 | self._children = ('power', (left, right)) |
| 663 | |
| 664 | def __repr__(self): |
| 665 | return "Power(%s)" % self._children[1:] |
| 666 | |
| 667 | class UnaryAdd(Node): |
| 668 | nodes['unary+'] = 'UnaryAdd' |
| 669 | |
| 670 | def __init__(self, node): |
Jeremy Hylton | 156a975 | 2000-02-08 21:06:19 +0000 | [diff] [blame] | 671 | self.expr = node |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 672 | self._children = ('unary+', node) |
| 673 | |
| 674 | def __repr__(self): |
| 675 | return "UnaryAdd(%s)" % self._children[1:] |
| 676 | |
| 677 | class UnarySub(Node): |
| 678 | nodes['unary-'] = 'UnarySub' |
| 679 | |
| 680 | def __init__(self, node): |
Jeremy Hylton | 156a975 | 2000-02-08 21:06:19 +0000 | [diff] [blame] | 681 | self.expr = node |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 682 | self._children = ('unary-', node) |
| 683 | |
| 684 | def __repr__(self): |
| 685 | return "UnarySub(%s)" % self._children[1:] |
| 686 | |
| 687 | class Invert(Node): |
| 688 | nodes['invert'] = 'Invert' |
| 689 | |
| 690 | def __init__(self, node): |
Jeremy Hylton | 156a975 | 2000-02-08 21:06:19 +0000 | [diff] [blame] | 691 | self.expr = node |
Jeremy Hylton | f968e85 | 2000-02-04 00:25:23 +0000 | [diff] [blame] | 692 | self._children = ('invert', node) |
| 693 | |
| 694 | def __repr__(self): |
| 695 | return "Invert(%s)" % self._children[1:] |
| 696 | |
| 697 | # now clean up the nodes dictionary |
| 698 | klasses = globals() |
| 699 | for k in nodes.keys(): |
| 700 | nodes[k] = klasses[nodes[k]] |
| 701 | |
| 702 | # Local Variables: |
| 703 | # mode:python |
| 704 | # indent-tabs-mode: nil |
| 705 | # py-indent-offset: 2 |
| 706 | # py-smart-indentation: nil |
| 707 | # End: |