#!/usr/bin/env python """Compiles C into assembly for the practicum processor (PP2) All rights reserved, you may not redistribute or use this program without prior permission from Peter Wu or Xander Houtman. Use of this program is entirely your own risk. In no circumstances can the authors of this program be held responsible for any damage including, but not limited to, financial damage or data loss. Modification of this program is not allowed without prior permission. The generated output (assembly and messages) are not subject to this license. """ __author__ = "Peter Wu" __copyright__ = "Copyright 2011, Peter Wu" __credits__ = ["Peter Wu"] __license__ = "Proprietary" __version__ = "1.0" __maintainer__ = "Peter Wu" __email__ = "uwretep@gmail.com" class Function(object): def __init__(self, node): self.name = node.decl.name self.node = node self.reserved_stack = 0 def labelBegin(self): """Returns a label pointing to the begin of a function""" return "fn_" + self.name def labelEnd(self): """Returns a label pointing to the end of a function""" return "fne_" + self.name def allocStack(self, count=1): """Reserve some memory (for local variables and params) on the stack and return the begin of the allocated memory Keyword arguments: count -- The number of words to be allocated which should be at least 1 """ assert count > 0, "The stack allocation count must be at least 1" begin_address = self.reserved_stack + 1 self.reserved_stack += count return begin_address