Mercurial > lcfOS
view python/ir/module.py @ 157:8f3924b6076e
Added some code generator things
author | Windel Bouwman |
---|---|
date | Sun, 03 Mar 2013 18:14:35 +0100 |
parents | 1b4a85bdd99c |
children | 9683a4cd848f |
line wrap: on
line source
from .symboltable import SymbolTable # Types: class Type: def __init__(self): pass class IntegerType(Type): def __init__(self, bits): super().__init__() self.bits = bits class VoidType(Type): pass class FunctionType(Type): def __init__(self, resultType, parameterTypes): super().__init__() assert type(parameterTypes) is list self.resultType = resultType self.parameterTypes = parameterTypes # Default types: i8 = IntegerType(8) i16 = IntegerType(16) i32 = IntegerType(32) void = VoidType() # IR-Structures: 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.basicblocks = [] self.arguments = [] 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)