Author: Lars Wassermann <[email protected]>
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
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to