Mercurial > pymonkey
changeset 122:5eda03c8e756
context.evaluate_script() can now take unicode code strings.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Wed, 19 Aug 2009 00:47:46 -0700 |
parents | edce6af83ee2 |
children | 08a012e96f62 |
files | src/context.cpp tests/test_pymonkey.py |
diffstat | 2 files changed, 17 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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;
--- 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)