# HG changeset patch # User Atul Varma # Date 1250668066 25200 # Node ID 5eda03c8e756d4ff09f995074c5652672fc0b57c # Parent edce6af83ee21dab4710df814db4e1a82d5b6f2b context.evaluate_script() can now take unicode code strings. diff -r edce6af83ee2 -r 5eda03c8e756 src/context.cpp --- a/src/context.cpp Mon Aug 17 23:44:06 2009 -0700 +++ b/src/context.cpp Wed Aug 19 00:47:46 2009 -0700 @@ -276,24 +276,31 @@ { PYM_SANITY_CHECK(self->runtime); PYM_JSObject *object; - const char *source; + char *source = NULL; int sourceLen; const char *filename; int lineNo; - if (!PyArg_ParseTuple(args, "O!s#si", &PYM_JSObjectType, &object, - &source, &sourceLen, &filename, &lineNo)) + if (!PyArg_ParseTuple(args, "O!es#si", &PYM_JSObjectType, &object, + "utf-16", &source, &sourceLen, &filename, &lineNo)) return NULL; - PYM_ENSURE_RUNTIME_MATCH(self->runtime, object->runtime); + if (self->runtime != object->runtime) { + PyMem_Free(source); + PYM_ENSURE_RUNTIME_MATCH(self->runtime, object->runtime); + } jsval rval; JSBool result; Py_BEGIN_ALLOW_THREADS; - result = JS_EvaluateScript(self->cx, object->obj, source, sourceLen, - filename, lineNo, &rval); + // Note that we're manipulating buffer and size here to get rid of + // the BOM. + result = JS_EvaluateUCScript(self->cx, object->obj, (jschar *) (source + 2), + (sourceLen / 2) - 1, filename, lineNo, &rval); Py_END_ALLOW_THREADS; + PyMem_Free(source); + if (!result) { PYM_jsExceptionToPython(self); return NULL; diff -r edce6af83ee2 -r 5eda03c8e756 tests/test_pymonkey.py --- a/tests/test_pymonkey.py Mon Aug 17 23:44:06 2009 -0700 +++ b/tests/test_pymonkey.py Wed Aug 19 00:47:46 2009 -0700 @@ -451,6 +451,10 @@ self.last_exception.args[0]), 'ReferenceError: hai2u is not defined') + def testEvaluateTakesUnicodeCode(self): + self.assertEqual(self._evaljs(u"'foo\u2026'"), + u"foo\u2026") + def testEvaluateReturnsUndefined(self): retval = self._evaljs("") self.assertTrue(retval is pymonkey.undefined)