Reviewed by Adam.
authorandersca <andersca@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Jun 2007 22:31:46 +0000 (22:31 +0000)
committerandersca <andersca@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Jun 2007 22:31:46 +0000 (22:31 +0000)
        Don't use a JavaInstance to store the field when all we want to do is to keep the field
        from being garbage collected. Instead, use a JObjectWrapper.

        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_runtime.cpp:
        (JavaField::JavaField):
        (JavaField::dispatchValueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        * bindings/jni/jni_runtime.h:
        (KJS::Bindings::JavaField::JavaField):
        (KJS::Bindings::JavaField::operator=):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@22055 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/bindings/jni/jni_instance.h
JavaScriptCore/bindings/jni/jni_runtime.cpp
JavaScriptCore/bindings/jni/jni_runtime.h

index 15ecd85..85b42ed 100644 (file)
@@ -1,3 +1,19 @@
+2007-06-07  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Adam.
+
+        Don't use a JavaInstance to store the field when all we want to do is to keep the field
+        from being garbage collected. Instead, use a JObjectWrapper.
+        
+        * bindings/jni/jni_instance.h:
+        * bindings/jni/jni_runtime.cpp:
+        (JavaField::JavaField):
+        (JavaField::dispatchValueFromInstance):
+        (JavaField::dispatchSetValueToInstance):
+        * bindings/jni/jni_runtime.h:
+        (KJS::Bindings::JavaField::JavaField):
+        (KJS::Bindings::JavaField::operator=):
+
 2007-05-30  Alp Toker  <alp.toker@collabora.co.uk>
 
         Reviewed by Brady.
index 6f38b31..f6ea715 100644 (file)
@@ -42,6 +42,7 @@ class JObjectWrapper
 {
 friend class RefPtr<JObjectWrapper>;
 friend class JavaArray;
+friend class JavaField;
 friend class JavaInstance;
 friend class JavaMethod;
 
index ed1c2ee..796a85a 100644 (file)
@@ -65,7 +65,7 @@ JavaField::JavaField (JNIEnv *env, jobject aField)
     jstring fieldName = (jstring)callJNIObjectMethod (aField, "getName", "()Ljava/lang/String;");
     _name = JavaString(env, fieldName);
 
-    _field = new JavaInstance(aField);
+    _field = new JObjectWrapper(aField);
 }
 
 JSValue* JavaArray::convertJObjectToArray(ExecState* exec, jobject anObject, const char* type, PassRefPtr<RootObject> rootObject)
@@ -79,7 +79,7 @@ JSValue* JavaArray::convertJObjectToArray(ExecState* exec, jobject anObject, con
 jvalue JavaField::dispatchValueFromInstance(ExecState *exec, const JavaInstance *instance, const char *name, const char *sig, JNIType returnType) const
 {
     jobject jinstance = instance->javaInstance();
-    jobject fieldJInstance = _field->javaInstance();
+    jobject fieldJInstance = _field->_instance;
     JNIEnv *env = getJNIEnv();
     jvalue result;
 
@@ -163,7 +163,7 @@ JSValue *JavaField::valueFromInstance(ExecState *exec, const Instance *i) const
 void JavaField::dispatchSetValueToInstance(ExecState *exec, const JavaInstance *instance, jvalue javaValue, const char *name, const char *sig) const
 {
     jobject jinstance = instance->javaInstance();
-    jobject fieldJInstance = _field->javaInstance();
+    jobject fieldJInstance = _field->_instance;
     JNIEnv *env = getJNIEnv();
 
     jclass cls = env->GetObjectClass(fieldJInstance);
index 9d59862..b7acbe5 100644 (file)
@@ -171,20 +171,15 @@ class JavaField : public Field
 public:
     JavaField() : _field(0) {};
     JavaField (JNIEnv *env, jobject aField);
-    ~JavaField() {
-        delete _field;
-    };
 
     JavaField(const JavaField &other) : 
-        Field(), _name(other._name), _type(other._type), _field(other._field) {};
+        Field(), _name(other._name), _type(other._type) {};
 
     JavaField &operator=(const JavaField &other)
     {
         if (this == &other)
             return *this;
             
-        delete _field;
-        
         _name = other._name;
         _type = other._type;
         _field = other._field;
@@ -207,7 +202,7 @@ private:
     JavaString _name;
     JavaString _type;
     JNIType _JNIType;
-    JavaInstance *_field;
+    RefPtr<JObjectWrapper> _field;
 };