summaryrefslogtreecommitdiff
path: root/libs/python/pyste/src/Pyste/EnumExporter.py
diff options
context:
space:
mode:
Diffstat (limited to 'libs/python/pyste/src/Pyste/EnumExporter.py')
-rw-r--r--libs/python/pyste/src/Pyste/EnumExporter.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/libs/python/pyste/src/Pyste/EnumExporter.py b/libs/python/pyste/src/Pyste/EnumExporter.py
new file mode 100644
index 000000000..0107fbee3
--- /dev/null
+++ b/libs/python/pyste/src/Pyste/EnumExporter.py
@@ -0,0 +1,58 @@
+# Copyright Bruno da Silva de Oliveira 2003. Use, modification and
+# distribution is subject to the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+from Exporter import Exporter
+from settings import *
+import utils
+
+#==============================================================================
+# EnumExporter
+#==============================================================================
+class EnumExporter(Exporter):
+ 'Exports enumerators'
+
+ def __init__(self, info):
+ Exporter.__init__(self, info)
+
+
+ def SetDeclarations(self, declarations):
+ Exporter.SetDeclarations(self, declarations)
+ if self.declarations:
+ self.enum = self.GetDeclaration(self.info.name)
+ else:
+ self.enum = None
+
+ def Export(self, codeunit, exported_names):
+ if self.info.exclude:
+ return
+ indent = self.INDENT
+ in_indent = self.INDENT*2
+ rename = self.info.rename or self.enum.name
+ full_name = self.enum.FullName()
+ unnamed_enum = False
+ if rename.startswith('$_') or rename.startswith('._'):
+ unnamed_enum = True
+ code = ''
+ if not unnamed_enum:
+ code += indent + namespaces.python
+ code += 'enum_< %s >("%s")\n' % (full_name, rename)
+ for name in self.enum.values:
+ rename = self.info[name].rename or name
+ value_fullname = self.enum.ValueFullName(name)
+ if not unnamed_enum:
+ code += in_indent + '.value("%s", %s)\n' % (rename, value_fullname)
+ else:
+ code += indent + namespaces.python
+ code += 'scope().attr("%s") = (int)%s;\n' % (rename, value_fullname )
+ if self.info.export_values and not unnamed_enum:
+ code += in_indent + '.export_values()\n'
+ if not unnamed_enum:
+ code += indent + ';\n'
+ code += '\n'
+ codeunit.Write('module', code)
+ exported_names[self.enum.FullName()] = 1
+
+ def Name(self):
+ return self.info.name