Mercurial > lcfOS
view python/ir/module.py @ 156:1b4a85bdd99c
change types
author | Windel Bouwman |
---|---|
date | Sun, 03 Mar 2013 15:50:34 +0100 |
parents | b28a11c01dbe |
children | 8f3924b6076e |
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, name, functiontype): super().__init__() self.name = name self.functiontype = functiontype 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)