buildframework/helium/external/python/lib/common/psyco-1.6-py2.5.egg/psyco/classes.py
changeset 179 d8ac696cc51f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/external/python/lib/common/psyco-1.6-py2.5.egg/psyco/classes.py	Wed Dec 23 19:29:07 2009 +0200
@@ -0,0 +1,42 @@
+###########################################################################
+# 
+#  Psyco class support module.
+#   Copyright (C) 2001-2002  Armin Rigo et.al.
+
+"""Psyco class support module.
+
+'psyco.classes.psyobj' is an alternate Psyco-optimized root for classes.
+Any class inheriting from it or using the metaclass '__metaclass__' might
+get optimized specifically for Psyco. It is equivalent to call
+psyco.bind() on the class object after its creation.
+
+Importing everything from psyco.classes in a module will import the
+'__metaclass__' name, so all classes defined after a
+
+       from psyco.classes import *
+
+will automatically use the Psyco-optimized metaclass.
+"""
+###########################################################################
+
+__all__ = ['psyobj', 'psymetaclass', '__metaclass__']
+
+
+from _psyco import compacttype
+import core
+from types import FunctionType
+
+class psymetaclass(compacttype):
+    "Psyco-optimized meta-class. Turns all methods into Psyco proxies."
+
+    def __new__(cls, name, bases, dict):
+        bindlist = dict.get('__psyco__bind__')
+        if bindlist is None:
+            bindlist = [key for key, value in dict.items()
+                        if isinstance(value, FunctionType)]
+        for attr in bindlist:
+            dict[attr] = core.proxy(dict[attr])
+        return super(psymetaclass, cls).__new__(cls, name, bases, dict)
+
+psyobj = psymetaclass("psyobj", (), {})
+__metaclass__ = psymetaclass