Mercurial > pymonkey
diff context.cpp @ 104:00c1351b3e82
Added support for unicode property names in context.define_property().
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Sat, 15 Aug 2009 22:48:13 -0700 |
parents | b3cc704c035e |
children |
line wrap: on
line diff
--- a/context.cpp Sat Aug 15 17:38:03 2009 -0700 +++ b/context.cpp Sat Aug 15 22:48:13 2009 -0700 @@ -309,27 +309,38 @@ PYM_SANITY_CHECK(self->runtime); PYM_JSObject *object; PyObject *value; - const char *name; + char *name = NULL; + int namelen; - if (!PyArg_ParseTuple(args, "O!sO", &PYM_JSObjectType, &object, - &name, &value)) + if (!PyArg_ParseTuple(args, "O!es#O", &PYM_JSObjectType, &object, + "utf-16", &name, &namelen, &value)) return NULL; - PYM_ENSURE_RUNTIME_MATCH(self->runtime, object->runtime); + if (self->runtime != object->runtime) { + PyMem_Free(name); + PYM_ENSURE_RUNTIME_MATCH(self->runtime, object->runtime); + } + jsval jsValue; - if (PYM_pyObjectToJsval(self, value, &jsValue) == -1) + if (PYM_pyObjectToJsval(self, value, &jsValue) == -1) { + PyMem_Free(name); return NULL; + } - // TODO: Support unicode naming. - if (!JS_DefineProperty(self->cx, object->obj, name, jsValue, - NULL, NULL, JSPROP_ENUMERATE)) { + // Note that we're manipulating buffer and size here to get rid of + // the BOM. + if (!JS_DefineUCProperty(self->cx, object->obj, (jschar *) (name + 2), + (namelen / 2) - 1, jsValue, NULL, NULL, + JSPROP_ENUMERATE)) { // TODO: There's probably an exception pending on self->cx, // what should we do about it? + PyMem_Free(name); PyErr_SetString(PYM_error, "JS_DefineProperty() failed"); return NULL; } + PyMem_Free(name); Py_RETURN_NONE; }