def parse_enum(self, cenum):
		name = metaname.EnumName()
		name.from_camel_case(cenum.publicName, namespace=self.namespace.name)
		enum = Enum(name)
		enum.briefDescription = cenum.briefDoc
		enum.detailedDescription = cenum.detailedDoc
		self.namespace.addenum(enum)
		
		for cEnumValue in cenum.values:
			valueName = metaname.EnumeratorName()
			valueName.from_camel_case(cEnumValue.name, namespace=name)
			aEnumValue = Enumerator(valueName)
			aEnumValue.briefDescription = cEnumValue.briefDoc
			aEnumValue.detailedDescription = cEnumValue.detailedDoc
			if cEnumValue.value is not None:
				try:
					aEnumValue.value_from_string(cEnumValue.value)
				except ValueError:
					reason = '{0} enum value has an invalid definition ({1})'.format(cEnumValue.name, cEnumValue.value)
					context = metaname.EnumeratorName()
					context.from_camel_case(cEnumValue.name)
					raise ParsingError(reason, context)
			enum.add_enumerator(aEnumValue)
		
		self.enumsIndex[cenum.publicName] = enum
		if cenum.publicName in self.enum_relocations:
			self._pending_enums.append(enum)
		return enum
	def parse_enum(self, cenum):
		if 'associatedTypedef' in dir(cenum):
			nameStr = cenum.associatedTypedef.name
		else:
			nameStr = cenum.name
		
		name = metaname.EnumName()
		name.from_camel_case(nameStr, namespace=self.namespace.name)
		enum = Enum(name)
		enum.briefDescription = cenum.briefDoc
		enum.detailedDescription = cenum.detailedDoc
		self.namespace.add_child(enum)
		
		for cEnumValue in cenum.values:
			valueName = metaname.EnumeratorName()
			valueName.from_camel_case(cEnumValue.name, namespace=name)
			aEnumValue = Enumerator(valueName)
			aEnumValue.briefDescription = cEnumValue.briefDoc
			aEnumValue.detailedDescription = cEnumValue.detailedDoc
			if cEnumValue.value is not None:
				try:
					aEnumValue.value_from_string(cEnumValue.value)
				except ValueError:
					raise Error('{0} enum value has an invalid definition ({1})'.format(cEnumValue.name, cEnumValue.value))
			enum.add_enumerator(aEnumValue)
		
		self.enumsIndex[nameStr] = enum
		self.enums.append(enum)
		return enum
	def set_from_c(self, cEnum, namespace=None):
		Object.set_from_c(self, cEnum, namespace=namespace)
		
		if 'associatedTypedef' in dir(cEnum):
			name = cEnum.associatedTypedef.name
		else:
			name = cEnum.name
		
		self.name = metaname.EnumName()
		self.name.prev = None if namespace is None else namespace.name
		self.name.set_from_c(name)
		
		for cEnumValue in cEnum.values:
			aEnumValue = Enumerator()
			aEnumValue.set_from_c(cEnumValue, namespace=self)
			self.add_enumerator(aEnumValue)