# HG changeset patch # User Atul Varma # Date 1251086691 25200 # Node ID 9157e7c9cb81c76e9ab1c65131a3b8f4d644ff34 # Parent 0c81cb18c935cf56590550da9abdab1a217cc702 Refactored a new function, PYM_findJSObject(), out of PYM_newJSObject(). diff -r 0c81cb18c935 -r 9157e7c9cb81 src/object.cpp --- 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"); diff -r 0c81cb18c935 -r 9157e7c9cb81 src/object.h --- 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);