[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677
rjw
rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 08:18:48 UTC 2009
The following commit has been merged in the debian/unstable branch:
commit de6900ce79aff4a5d9aad66ba9af195ade282c10
Author: rjw <rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Sat Dec 13 01:37:13 2003 +0000
Added implementation of stubs in JSObject. All that
remains is a couple of simple conversion functions stubs and
we're done with LiveConnect. Also, changed string passing to
JS to use uchars instead of chars.
Reviewed by Maciej.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@5787 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
index 1f8d7ed..3b326be 100644
--- a/JavaScriptCore/ChangeLog
+++ b/JavaScriptCore/ChangeLog
@@ -1,5 +1,41 @@
2003-12-12 Richard Williamson <rjw at apple.com>
+ Added implementation of stubs in JSObject. All that
+ remains is a couple of simple conversion functions stubs and
+ we're done with LiveConnect. Also, changed string passing to
+ JS to use uchars instead of chars.
+
+ Reviewed by Maciej.
+
+ * bindings/jni/jni_runtime.h:
+ (Bindings::JavaString::JavaString):
+ (Bindings::JavaString::_commonInit):
+ (Bindings::JavaString::_commonCopy):
+ (Bindings::JavaString::_commonDelete):
+ (Bindings::JavaString::~JavaString):
+ (Bindings::JavaString::operator=):
+ (Bindings::JavaString::uchars):
+ (Bindings::JavaString::length):
+ (Bindings::JavaString::ustring):
+ * bindings/jni/jni_utility.cpp:
+ (getUCharactersFromJStringInEnv):
+ (releaseUCharactersForJStringInEnv):
+ (convertValueToJObject):
+ (convertJObjectToValue):
+ * bindings/jni/jni_utility.h:
+ * bindings/jni_jsobject.cpp:
+ (Bindings::JSObject::invoke):
+ (Bindings::JSObject::call):
+ (Bindings::JSObject::eval):
+ (Bindings::JSObject::getMember):
+ (Bindings::JSObject::setMember):
+ (Bindings::JSObject::removeMember):
+ (Bindings::JSObject::getSlot):
+ (Bindings::JSObject::setSlot):
+ * bindings/jni_jsobject.h:
+
+2003-12-12 Richard Williamson <rjw at apple.com>
+
Ensure that all calls from Java into JavaScript are
performed on a designated thread (the main thread).
diff --git a/JavaScriptCore/bindings/jni/jni_runtime.h b/JavaScriptCore/bindings/jni/jni_runtime.h
index 76e574d..b6110b2 100644
--- a/JavaScriptCore/bindings/jni/jni_runtime.h
+++ b/JavaScriptCore/bindings/jni/jni_runtime.h
@@ -30,6 +30,7 @@
#include <jni_utility.h>
#include <jni_instance.h>
#include <runtime.h>
+#include <ustring.h>
namespace KJS
{
@@ -42,28 +43,51 @@ namespace Bindings
class JavaString
{
public:
- JavaString () : _characters(0) {};
+ JavaString () : _characters(0), _uchars(0), _size(0) {};
- JavaString (JNIEnv *e, jstring s) {
+ void _commonInit (JNIEnv *e, jstring s)
+ {
+ // We could be more efficient: only create
+ // _characters from _uchars on demand.
+ _size = e->GetStringLength (s);
const char *c = getCharactersFromJStringInEnv (e, s);
_characters = strdup(c);
releaseCharactersForJStringInEnv (e, s, c);
+ const jchar *uc = getUCharactersFromJStringInEnv (e, s);
+ _uchars = (jchar *)malloc (sizeof(jchar)*_size);
+ memcpy (_uchars,uc,_size*sizeof(jchar));
+ releaseUCharactersForJStringInEnv (e, s, uc);
+ }
+
+ void _commonCopy(const JavaString &other)
+ {
+ _size = other._size;
+ _characters = strdup (other._characters);
+ _uchars = (jchar *)malloc (sizeof(jchar)*_size);
+ memcpy (_uchars,other._uchars,_size*sizeof(jchar));
+ }
+
+ void _commonDelete()
+ {
+ free ((void *)_characters);
+ free ((void *)_uchars);
+ }
+
+ JavaString (JNIEnv *e, jstring s) {
+ _commonInit (e, s);
}
JavaString (jstring s) {
- JNIEnv *e = getJNIEnv();
- const char *c = getCharactersFromJStringInEnv (e, s);
- _characters = strdup(c);
- releaseCharactersForJStringInEnv (e, s, c);
+ _commonInit (getJNIEnv(), s);
}
~JavaString () {
- free ((void *)_characters);
+ _commonDelete();
}
JavaString(const JavaString &other)
{
- _characters = strdup (other._characters);
+ _commonCopy(other);
}
JavaString &operator=(const JavaString &other)
@@ -71,16 +95,21 @@ public:
if (this == &other)
return *this;
- free ((void *)_characters);
- _characters = strdup (other._characters);
+ _commonDelete();
+ _commonCopy(other);
return *this;
}
const char *characters() const { return _characters; }
+ const jchar *uchars() const { return _uchars; }
+ int length() const { return _size; }
+ KJS::UString ustring() const { return KJS::UString ((const KJS::UChar *)uchars(),length()); }
private:
const char *_characters;
+ jchar *_uchars;
+ int _size;
};
diff --git a/JavaScriptCore/bindings/jni/jni_utility.cpp b/JavaScriptCore/bindings/jni/jni_utility.cpp
index 9209c0f..803a398 100644
--- a/JavaScriptCore/bindings/jni/jni_utility.cpp
+++ b/JavaScriptCore/bindings/jni/jni_utility.cpp
@@ -346,6 +346,22 @@ void releaseCharactersForJStringInEnv (JNIEnv *env, jstring aJString, const char
env->ReleaseStringUTFChars (aJString, s);
}
+const jchar *getUCharactersFromJStringInEnv (JNIEnv *env, jstring aJString)
+{
+ jboolean isCopy;
+ const jchar *s = env->GetStringChars((jstring)aJString, &isCopy);
+ if (!s) {
+ env->ExceptionDescribe();
+ env->ExceptionClear();
+ }
+ return s;
+}
+
+void releaseUCharactersForJStringInEnv (JNIEnv *env, jstring aJString, const jchar *s)
+{
+ env->ReleaseStringChars (aJString, s);
+}
+
JNIType JNITypeFromClassName(const char *name)
{
JNIType type;
@@ -607,6 +623,12 @@ jobject convertValueToJObject (KJS::ExecState *exec, KJS::Value value)
return 0;
}
+KJS::Value convertJObjectToValue (KJS::ExecState *exec, jobject)
+{
+ // FIXME: Implement!
+ return KJS::Undefined();
+}
+
KJS::List listFromJArray(jobjectArray jArray)
{
// FIXME: Implement!
diff --git a/JavaScriptCore/bindings/jni/jni_utility.h b/JavaScriptCore/bindings/jni/jni_utility.h
index 65a572e..120fb8d 100644
--- a/JavaScriptCore/bindings/jni/jni_utility.h
+++ b/JavaScriptCore/bindings/jni/jni_utility.h
@@ -54,6 +54,8 @@ void releaseCharactersForJString (jstring aJString, const char *s);
const char *getCharactersFromJStringInEnv (JNIEnv *env, jstring aJString);
void releaseCharactersForJStringInEnv (JNIEnv *env, jstring aJString, const char *s);
+const jchar *getUCharactersFromJStringInEnv (JNIEnv *env, jstring aJString);
+void releaseUCharactersForJStringInEnv (JNIEnv *env, jstring aJString, const jchar *s);
JNIType JNITypeFromClassName(const char *name);
JNIType JNITypeFromPrimitiveType(char type);
@@ -61,6 +63,7 @@ const char *signatureFromPrimitiveType(JNIType type);
jvalue convertValueToJValue (KJS::ExecState *exec, KJS::Value value, JNIType _JNIType, const char *javaClassName);
jobject convertValueToJObject (KJS::ExecState *exec, KJS::Value value);
+KJS::Value convertJObjectToValue (KJS::ExecState *exec, jobject);
jvalue getJNIField( jobject obj, JNIType type, const char *name, const char *signature);
diff --git a/JavaScriptCore/bindings/jni_jsobject.cpp b/JavaScriptCore/bindings/jni_jsobject.cpp
index 908f65f..eb9e077 100644
--- a/JavaScriptCore/bindings/jni_jsobject.cpp
+++ b/JavaScriptCore/bindings/jni_jsobject.cpp
@@ -358,27 +358,27 @@ jvalue JSObject::invoke (JSObjectCallContext *context)
}
case Call: {
- result.l = JSObject(nativeHandle).call(JavaString(context->string).characters(), context->args);
+ result.l = JSObject(nativeHandle).call(context->string, context->args);
break;
}
case Eval: {
- result.l = JSObject(nativeHandle).eval(JavaString(context->string).characters());
+ result.l = JSObject(nativeHandle).eval(context->string);
break;
}
case GetMember: {
- result.l = JSObject(nativeHandle).getMember(JavaString(context->string).characters());
+ result.l = JSObject(nativeHandle).getMember(context->string);
break;
}
case SetMember: {
- JSObject(nativeHandle).setMember(JavaString(context->string).characters(), context->value);
+ JSObject(nativeHandle).setMember(context->string, context->value);
break;
}
case RemoveMember: {
- JSObject(nativeHandle).removeMember(JavaString(context->string).characters());
+ JSObject(nativeHandle).removeMember(context->string);
break;
}
@@ -423,13 +423,13 @@ JSObject::JSObject(jlong nativeJSObject)
}
-jobject JSObject::call(const char *methodName, jobjectArray args) const
+jobject JSObject::call(jstring methodName, jobjectArray args) const
{
- JS_LOG ("methodName = %s\n", methodName);
+ JS_LOG ("methodName = %s\n", JavaString(methodName).characters());
// Lookup the function object.
ExecState *exec = _root->interpreter()->globalExec();
- Value func = _imp->get (exec, Identifier (methodName));
+ Value func = _imp->get (exec, Identifier (JavaString(methodName).ustring()));
if (func.isNull() || func.type() == UndefinedType) {
// Maybe throw an exception here?
return 0;
@@ -445,40 +445,61 @@ jobject JSObject::call(const char *methodName, jobjectArray args) const
return convertValueToJObject (exec, result);
}
-jobject JSObject::eval(const char *script) const
+jobject JSObject::eval(jstring script) const
{
- JS_LOG ("script = %s\n", script);
- return 0;
+ JS_LOG ("script = %s\n", JavaString(script).characters());
+
+ Object thisObj = Object(const_cast<ObjectImp*>(_imp));
+ KJS::Value result = _root->interpreter()->evaluate(JavaString(script).ustring(),thisObj).value();
+ ExecState *exec = _root->interpreter()->globalExec();
+
+ return convertValueToJObject (exec, result);
}
-jobject JSObject::getMember(const char *memberName) const
+jobject JSObject::getMember(jstring memberName) const
{
- JS_LOG ("memberName = %s\n", memberName);
- return 0;
+ JS_LOG ("memberName = %s\n", JavaString(memberName).characters());
+
+ ExecState *exec = _root->interpreter()->globalExec();
+ Value result = _imp->get (exec, Identifier (JavaString(memberName).ustring()));
+
+ return convertValueToJObject (exec, result);
}
-void JSObject::setMember(const char *memberName, jobject value) const
+void JSObject::setMember(jstring memberName, jobject value) const
{
- JS_LOG ("memberName = %s\n", memberName);
+ JS_LOG ("memberName = %s\n", JavaString(memberName).characters());
+ ExecState *exec = _root->interpreter()->globalExec();
+ _imp->put (exec, Identifier (JavaString(memberName).ustring()), convertJObjectToValue(exec, value));
}
-void JSObject::removeMember(const char *memberName) const
+void JSObject::removeMember(jstring memberName) const
{
- JS_LOG ("memberName = %s\n", memberName);
+ JS_LOG ("memberName = %s\n", JavaString(memberName).characters());
+
+ ExecState *exec = _root->interpreter()->globalExec();
+ _imp->deleteProperty (exec, Identifier (JavaString(memberName).ustring()));
}
jobject JSObject::getSlot(jint index) const
{
JS_LOG ("index = %d\n", index);
- return 0;
+
+ ExecState *exec = _root->interpreter()->globalExec();
+ Value result = _imp->get (exec, (unsigned)index);
+
+ return convertValueToJObject (exec, result);
}
void JSObject::setSlot(jint index, jobject value) const
{
JS_LOG ("index = %d, value = %p\n", index, value);
+
+ ExecState *exec = _root->interpreter()->globalExec();
+ _imp->put (exec, (unsigned)index, convertJObjectToValue(exec, value));
}
diff --git a/JavaScriptCore/bindings/jni_jsobject.h b/JavaScriptCore/bindings/jni_jsobject.h
index a05ab2c..07ab628 100644
--- a/JavaScriptCore/bindings/jni_jsobject.h
+++ b/JavaScriptCore/bindings/jni_jsobject.h
@@ -111,11 +111,11 @@ class JSObject
public:
JSObject(jlong nativeHandle);
- jobject call(const char *methodName, jobjectArray args) const;
- jobject eval(const char *script) const;
- jobject getMember(const char *memberName) const;
- void setMember(const char *memberName, jobject value) const;
- void removeMember(const char *memberName) const;
+ jobject call(jstring methodName, jobjectArray args) const;
+ jobject eval(jstring script) const;
+ jobject getMember(jstring memberName) const;
+ void setMember(jstring memberName, jobject value) const;
+ void removeMember(jstring memberName) const;
jobject getSlot(jint index) const;
void setSlot(jint index, jobject value) const;
jstring toString() const;
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list