Mercurial > lcfOS
view python/ir/module.py @ 155:b28a11c01dbe
Simplified IR classes
author | Windel Bouwman |
---|---|
date | Sun, 03 Mar 2013 13:20:03 +0100 |
parents | 4e79484a9d47 |
children | 1b4a85bdd99c |
line wrap: on
line source
from .symboltable import SymbolTable class Module: """ Main container for a piece of code. Contains globals and functions. """ def __init__(self, name): self.name = name self.functions = [] # Do functions come out of symbol table? self.globals_ = [] # TODO: are globals in symbol table? self.symtable = SymbolTable() Globals = property(lambda self: self.globals_) Functions = property(lambda self: self.functions) Identifier = property(lambda self: self.identifier) class Argument: def __init__(self, argtype, name, function): self.t = argtype self.name = name self.function = function class Function: def __init__(self, functiontype, name, module): super().__init__() self.functiontype = functiontype self.name = name self.module = module self.module.Functions.append(self) self.basicblocks = [] self.arguments = [] # Construct formal arguments depending on function type BasicBlocks = property(lambda self: self.basicblocks) Arguments = property(lambda self: self.arguments) ReturnType = property(lambda self: self.functiontype.returnType) FunctionType = property(lambda self: self.functiontype) class BasicBlock: """ A basic block represents a sequence of instructions without jumps and branches. """ def __init__(self): super().__init__() self.instructions = [] self.name = None def getInstructions(self): return self.instructions Instructions = property(getInstructions)