changeset 135:9157e7c9cb81

Refactored a new function, PYM_findJSObject(), out of PYM_newJSObject().
author Atul Varma <varmaa@toolness.com>
date Sun, 23 Aug 2009 21:04:51 -0700
parents 0c81cb18c935
children b4e216d06e83
files src/object.cpp src/object.h
diffstat 2 files changed, 23 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/object.cpp	Sun Aug 23 19:19:51 2009 -0700
+++ b/src/object.cpp	Sun Aug 23 21:04:51 2009 -0700
@@ -179,12 +179,10 @@
   0,                           /* tp_new */
 };
 
-PYM_JSObject *PYM_newJSObject(PYM_JSContextObject *context,
-                              JSObject *obj,
-                              PYM_JSObject *subclass) {
-  PYM_JSRuntimeObject *runtime = context->runtime;
+PYM_JSObject *PYM_findJSObject(PYM_JSContextObject *context, JSObject *obj)
+{
   PYM_HashEntry *cached = (PYM_HashEntry *) JS_DHashTableOperate(
-    &runtime->objects,
+    &context->runtime->objects,
     (void *) obj,
     JS_DHASH_LOOKUP
     );
@@ -194,6 +192,17 @@
     return (PYM_JSObject *) cached->value;
   }
 
+  return NULL;
+}
+
+PYM_JSObject *PYM_newJSObject(PYM_JSContextObject *context,
+                              JSObject *obj,
+                              PYM_JSObject *subclass)
+{
+  PYM_JSObject *cachedObject = PYM_findJSObject(context, obj);
+  if (cachedObject)
+    return cachedObject;
+
   PYM_JSObject *object;
 
   if (subclass)
@@ -214,9 +223,12 @@
   object->runtime = NULL;
   object->obj = NULL;
 
-  cached = (PYM_HashEntry *) JS_DHashTableOperate(&runtime->objects,
-                                                  (void *) obj,
-                                                  JS_DHASH_ADD);
+  PYM_HashEntry *cached = (PYM_HashEntry *) JS_DHashTableOperate(
+    &context->runtime->objects,
+    (void *) obj,
+    JS_DHASH_ADD
+    );
+
   if (cached == NULL) {
     Py_DECREF(object);
     PyErr_SetString(PYM_error, "JS_DHashTableOperate() failed");
--- a/src/object.h	Sun Aug 23 19:19:51 2009 -0700
+++ b/src/object.h	Sun Aug 23 21:04:51 2009 -0700
@@ -62,6 +62,9 @@
 extern PyTypeObject PYM_JSObjectType;
 
 extern PYM_JSObject *
+PYM_findJSObject(PYM_JSContextObject *context, JSObject *obj);
+
+extern PYM_JSObject *
 PYM_newJSObject(PYM_JSContextObject *context, JSObject *obj,
                 PYM_JSObject *subclass);