[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