utils/ABITest: Factor out type naming code slightly.

llvm-svn: 114867
This commit is contained in:
Daniel Dunbar
2010-09-27 20:13:24 +00:00
parent 1998651529
commit 32f1b54b69
2 changed files with 24 additions and 10 deletions

View File

@@ -23,6 +23,7 @@ class TypePrinter:
self.testValues = {}
self.testReturnValues = {}
self.layoutTests = []
self.declarations = set()
if info:
for f in (self.output,self.outputHeader,self.outputTests,self.outputDriver):
@@ -64,21 +65,25 @@ class TypePrinter:
print >>self.outputDriver, ' return 0;'
print >>self.outputDriver, '}'
def addDeclaration(self, decl):
if decl in self.declarations:
return False
self.declarations.add(decl)
if self.outputHeader:
print >>self.outputHeader, decl
else:
print >>self.output, decl
if self.outputTests:
print >>self.outputTests, decl
return True
def getTypeName(self, T):
if isinstance(T,BuiltinType):
return T.name
name = self.types.get(T)
if name is None:
name = 'T%d'%(len(self.types),)
# Reserve slot
self.types[T] = None
if self.outputHeader:
print >>self.outputHeader,T.getTypedefDef(name, self)
else:
print >>self.output,T.getTypedefDef(name, self)
if self.outputTests:
print >>self.outputTests,T.getTypedefDef(name, self)
self.types[T] = name
self.types[T] = name = T.getTypeName(self)
return name
def writeLayoutTest(self, i, ty):

View File

@@ -24,6 +24,12 @@ class Type:
def isPaddingBitField(self):
return False
def getTypeName(self, printer):
name = 'T%d' % len(printer.types)
typedef = self.getTypedefDef(name, printer)
printer.addDeclaration(typedef)
return name
class BuiltinType(Type):
def __init__(self, name, size, bitFieldSize=None):
self.name = name
@@ -40,6 +46,9 @@ class BuiltinType(Type):
assert self.isBitField()
return self.bitFieldSize
def getTypeName(self, printer):
return self.name
def sizeof(self):
return self.size