[pypy-commit] lang-smalltalk default: added caching for dlsym function names to speed up dynamically loaded named primitives

lwassermann noreply at buildbot.pypy.org
Fri Jul 19 13:57:05 CEST 2013


Author: Lars Wassermann <lars.wassermann at gmail.com>
Branch: 
Changeset: r506:231c592b8c33
Date: 2013-07-19 11:53 +0000
http://bitbucket.org/pypy/lang-smalltalk/changeset/231c592b8c33/

Log:	added caching for dlsym function names to speed up dynamically
	loaded named primitives

diff --git a/spyvm/interpreter_proxy.py b/spyvm/interpreter_proxy.py
--- a/spyvm/interpreter_proxy.py
+++ b/spyvm/interpreter_proxy.py
@@ -1031,12 +1031,16 @@
         else:
             module = self.loaded_modules[module_name]
 
-        try:
-            _external_function = dlsym(module, function_name)
-        except KeyError:
-            raise ProxyFunctionFailed
+        if function_name in module[1]:
+            return module[1][function_name]
         else:
-            return _external_function
+            try:
+                _external_function = dlsym(module[0], function_name)
+            except KeyError:
+                raise ProxyFunctionFailed
+            else:
+                module[1][function_name] = _external_function
+                return _external_function
 
 
     def initialize_from_call(self, signature, interp, s_frame, argcount, s_method):
@@ -1130,8 +1134,9 @@
                     print "Failed initialization of: %s" % module_name
                     raise error.PrimitiveFailedError
 
-            self.loaded_modules[module_name] = module
-            return module
+            module_tuple = (module, {})
+            self.loaded_modules[module_name] = module_tuple
+            return module_tuple
         except error.PrimitiveFailedError:
             dlclose(module)
             raise


More information about the pypy-commit mailing list