Move offset overflow fixing logic where it belongs
diff --git a/Lib/fontTools/ttLib/tables/otBase.py b/Lib/fontTools/ttLib/tables/otBase.py
index cac10f5..434abb4 100644
--- a/Lib/fontTools/ttLib/tables/otBase.py
+++ b/Lib/fontTools/ttLib/tables/otBase.py
@@ -77,10 +77,32 @@
 			def __init__(self, tableType):
 				self.tableType = tableType
 		globalState = GlobalState(tableType=self.tableTag)
-		writer = OTTableWriter(globalState)
-		writer.parent = None
-		self.table.compile(writer, font)
-		return writer.getAllData()
+		overflowRecord = None
+
+		while True:
+			try:
+				writer = OTTableWriter(globalState)
+				self.table.compile(writer, font)
+				return writer.getAllData()
+
+			except OTLOffsetOverflowError as e:
+
+				if overflowRecord == e.value:
+					raise # Oh well...
+
+				overflowRecord = e.value
+				print("Attempting to fix OTLOffsetOverflowError", e)
+				lastItem = overflowRecord
+
+				ok = 0
+				if overflowRecord.itemName is None:
+					from .otTables import fixLookupOverFlows
+					ok = fixLookupOverFlows(font, overflowRecord)
+				else:
+					from .otTables import fixSubTableOverFlows
+					ok = fixSubTableOverFlows(font, overflowRecord)
+				if not ok:
+					raise
 
 	def toXML(self, writer, font):
 		self.table.toXML2(writer, font)
@@ -174,6 +196,7 @@
 		self.pos = None
 		self.globalState = globalState
 		self.localState = localState
+		self.parent = None
 
 	def __setitem__(self, name, value):
 		state = self.localState.copy() if self.localState else dict()
diff --git a/Lib/fontTools/ttx.py b/Lib/fontTools/ttx.py
index 5690e7f..8618a46 100644
--- a/Lib/fontTools/ttx.py
+++ b/Lib/fontTools/ttx.py
@@ -69,8 +69,6 @@
 from __future__ import print_function, division
 from fontTools.misc.py23 import *
 from fontTools.ttLib import TTFont, TTLibError
-from fontTools.ttLib.tables.otBase import OTLOffsetOverflowError
-from fontTools.ttLib.tables.otTables import fixLookupOverFlows, fixSubTableOverFlows
 from fontTools.misc.macCreatorType import getMacCreatorAndType
 import os
 import sys
@@ -215,31 +213,7 @@
 			recalcBBoxes=options.recalcBBoxes,
 			verbose=options.verbose, allowVID=options.allowVID)
 	ttf.importXML(input, quiet=options.quiet)
-	try:
-		ttf.save(output)
-	except OTLOffsetOverflowError as e:
-		# XXX This shouldn't be here at all, it should be as close to the
-		# OTL code as possible.
-		overflowRecord = e.value
-		print("Attempting to fix OTLOffsetOverflowError", e)
-		lastItem = overflowRecord 
-		while True:
-			ok = 0
-			if overflowRecord.itemName is None:
-				ok = fixLookupOverFlows(ttf, overflowRecord)
-			else:
-				ok = fixSubTableOverFlows(ttf, overflowRecord)
-			if not ok:
-				raise
-
-			try:
-				ttf.save(output)
-				break
-			except OTLOffsetOverflowError as e:
-				print("Attempting to fix OTLOffsetOverflowError", e)
-				overflowRecord = e.value
-				if overflowRecord == lastItem:
-					raise
+	ttf.save(output)
 
 	if options.verbose:
 		import time