From: Daniel Dunbar Date: Mon, 27 Sep 2010 20:13:24 +0000 (+0000) Subject: utils/ABITest: Factor out type naming code slightly. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7b1ab134383b0ecb1a3c9042e5da227e94c111ca;p=clang utils/ABITest: Factor out type naming code slightly. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114867 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/utils/ABITest/ABITestGen.py b/utils/ABITest/ABITestGen.py index e3f6476c48..62925e7ade 100755 --- a/utils/ABITest/ABITestGen.py +++ b/utils/ABITest/ABITestGen.py @@ -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): diff --git a/utils/ABITest/TypeGen.py b/utils/ABITest/TypeGen.py index 40ea791eb5..7a99d628cd 100644 --- a/utils/ABITest/TypeGen.py +++ b/utils/ABITest/TypeGen.py @@ -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