| 
					
				 | 
			
			
				@@ -61,6 +61,8 @@ else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Part of the public interface, but normally only used by message factories. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 GeneratedProtocolMessageType = message_impl.GeneratedProtocolMessageType 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+MESSAGE_CLASS_CACHE = {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 def ParseMessage(descriptor, byte_str): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   """Generate a new Message instance from this Descriptor and a byte string. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -104,11 +106,16 @@ def MakeClass(descriptor): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Returns: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     The Message class object described by the descriptor. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if descriptor in MESSAGE_CLASS_CACHE: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return MESSAGE_CLASS_CACHE[descriptor] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   attributes = {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for name, nested_type in descriptor.nested_types_by_name.items(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     attributes[name] = MakeClass(nested_type) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   attributes[GeneratedProtocolMessageType._DESCRIPTOR_KEY] = descriptor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return GeneratedProtocolMessageType(str(descriptor.name), (message.Message,), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  result = GeneratedProtocolMessageType(str(descriptor.name), (message.Message,), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                       attributes) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  MESSAGE_CLASS_CACHE[descriptor] = result 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return result 
			 |