view python/ir/builder.py @ 171:3eb9b9e2958d

Improved IR code
author Windel Bouwman
date Wed, 03 Apr 2013 22:20:20 +0200
parents
children 5a7d37d615ee
line wrap: on
line source

from . import Value, BasicBlock

class NameGenerator:
   def __init__(self, prefix):
      self.prefix = prefix
      def NumGen():
         a = 0
         while True:
            yield a
            a = a + 1
      self.nums = NumGen()
   def gen(self):
      return '{0}{1}'.format(self.prefix, self.nums.__next__())

class ValueGenerator(NameGenerator):
   def __init__(self):
      super().__init__('t')
   def gen(self):
      v = Value(super().gen())
      return v

class BBGenerator(NameGenerator):
   def __init__(self):
      super().__init__('lab')
   def gen(self):
      v = BasicBlock(super().gen())
      return v

class Builder:
   def __init__(self):
      self.newTmp = ValueGenerator().gen
      self.newBBint = BBGenerator().gen
      self.bb = None
      self.m = None

   # Helpers:
   def newBB(self):
      bb = self.newBBint()
      self.m.addBB(bb)
      return bb
   def setModule(self, m):
      self.m = m
   def setBB(self, bb):
      self.bb = bb
   def addIns(self, i):
      self.bb.addIns(i)