def run (autoTester):		
	class A:
		class B:
			class C:
				def __init__ (self, x):
					self.x = x
					
				def tell (self):
					autoTester.check (self.x)
					autoTester.check (self.e)
					
				# Limitation: no destructuring assignment inside nested classes
				e = 3
				
			def __init__ (self, x):
				self.x = x
				
			def tell (self):
				autoTester.check (self.x)
				autoTester.check (self.d)
				
			d = 2
				
		c = 1

		def __init__ (self, x):
			self.x = x
			
		def tell (self):
			autoTester.check (self.x)
			autoTester.check (self.c)
			
	def f (x):
		class G:
			class H:
				def __init__ (self, x):
					self.x = x
					
				def tell (self):
					autoTester.check (self.x)
					autoTester.check (self.i)
					
				i = 5
		
			def __init__ (self, x):
				self.x = x
				
			def tell (self):
				autoTester.check (self.x)
				
			k = 4
			
		g = G (6)
		g.tell ()
		autoTester.check (g.k)
		
		h = G.H (7)
		h.tell ()
		autoTester.check (h.i)
		
		class P (A.B):
			pass
			
		p = P (7)
		p.tell ()
		autoTester.check (p.d)
				
	a = A (8)
	b = a.B (9)
	c = b.C (10)

	a.tell ()
	b.tell ()
	c.tell ()

	autoTester.check (a.c)
	autoTester.check (b.d)

	f (7)
