[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:11:36 UTC 2009
The following commit has been merged in the debian/unstable branch:
commit 0d7814d0711924d8f5a0237fc6dccfc24e347cf8
Author: rjw <rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Fri Nov 14 02:17:00 2003 +0000
JavaScriptCore:
More LiveConnect stuff. This checkin adds abstract classes to model
language runtimes and a JNI based set of concrete implementations for
Java.
Reviewed by Chris.
* JavaScriptCore.pbproj/project.pbxproj:
* Makefile.am:
* bindings/Makefile.am: Removed.
* bindings/jni/Makefile.am: Removed.
* bindings/jni/jni_runtime.cpp: Added.
(JavaField::JavaField):
(JavaConstructor::JavaConstructor):
(JavaMethod::JavaMethod):
(JavaClass::JavaClass):
* bindings/jni/jni_runtime.h: Added.
(Bindings::JavaString::JavaString):
(Bindings::JavaString::~JavaString):
(Bindings::JavaString::operator=):
(Bindings::JavaString::characters):
(Bindings::JavaParameter::JavaParameter):
(Bindings::JavaParameter::~JavaParameter):
(Bindings::JavaParameter::operator=):
(Bindings::JavaParameter::type):
(Bindings::JavaConstructor::JavaConstructor):
(Bindings::JavaConstructor::~JavaConstructor):
(Bindings::JavaConstructor::operator=):
(Bindings::JavaConstructor::parameterAt):
(Bindings::JavaConstructor::numParameters):
(Bindings::JavaField::JavaField):
(Bindings::JavaField::~JavaField):
(Bindings::JavaField::operator=):
(Bindings::JavaField::name):
(Bindings::JavaField::type):
(Bindings::JavaMethod::JavaMethod):
(Bindings::JavaMethod::_commonDelete):
(Bindings::JavaMethod::~JavaMethod):
(Bindings::JavaMethod::_commonCopy):
(Bindings::JavaMethod::operator=):
(Bindings::JavaMethod::name):
(Bindings::JavaMethod::returnType):
(Bindings::JavaMethod::parameterAt):
(Bindings::JavaMethod::numParameters):
(Bindings::JavaClass::_commonDelete):
(Bindings::JavaClass::~JavaClass):
(Bindings::JavaClass::_commonCopy):
(Bindings::JavaClass::JavaClass):
(Bindings::JavaClass::operator=):
(Bindings::JavaClass::name):
(Bindings::JavaClass::methodAt):
(Bindings::JavaClass::numMethods):
(Bindings::JavaClass::constructorAt):
(Bindings::JavaClass::numConstructors):
(Bindings::JavaClass::fieldAt):
(Bindings::JavaClass::numFields):
* bindings/jni/jni_utility.cpp:
(callJNIMethod):
(callJNIMethodA):
(callJNIObjectMethod):
(callJNIByteMethod):
(callJNICharMethod):
(callJNIShortMethod):
(callJNIIntMethod):
(callJNILongMethod):
(callJNIFloatMethod):
(callJNIDoubleMethod):
(callJNIVoidMethodA):
(callJNIObjectMethodA):
(callJNIByteMethodA):
(callJNICharMethodA):
(callJNIShortMethodA):
(callJNIIntMethodA):
(callJNILongMethodA):
(callJNIFloatMethodA):
(callJNIDoubleMethodA):
(getCharactersFromJString):
(releaseCharactersForJString):
* bindings/jni/jni_utility.h:
* bindings/objc/Makefile.am: Removed.
* bindings/runtime.h: Added.
(Bindings::Parameter::~Parameter):
(Bindings::Constructor::~Constructor):
(Bindings::Field::~Field):
(Bindings::Method::~Method):
(Bindings::Class::~Class):
Tests:
More tweaks to test new LiveConnect stuff.
* DumpJava/main.cpp:
(dumpClass):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@5485 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
index b958cea..092cb22 100644
--- a/JavaScriptCore/ChangeLog
+++ b/JavaScriptCore/ChangeLog
@@ -1,3 +1,91 @@
+2003-11-13 Richard Williamson <rjw at apple.com>
+
+ More LiveConnect stuff. This checkin adds abstract classes to model
+ language runtimes and a JNI based set of concrete implementations for
+ Java.
+
+ Reviewed by Chris.
+
+ * JavaScriptCore.pbproj/project.pbxproj:
+ * Makefile.am:
+ * bindings/Makefile.am: Removed.
+ * bindings/jni/Makefile.am: Removed.
+ * bindings/jni/jni_runtime.cpp: Added.
+ (JavaField::JavaField):
+ (JavaConstructor::JavaConstructor):
+ (JavaMethod::JavaMethod):
+ (JavaClass::JavaClass):
+ * bindings/jni/jni_runtime.h: Added.
+ (Bindings::JavaString::JavaString):
+ (Bindings::JavaString::~JavaString):
+ (Bindings::JavaString::operator=):
+ (Bindings::JavaString::characters):
+ (Bindings::JavaParameter::JavaParameter):
+ (Bindings::JavaParameter::~JavaParameter):
+ (Bindings::JavaParameter::operator=):
+ (Bindings::JavaParameter::type):
+ (Bindings::JavaConstructor::JavaConstructor):
+ (Bindings::JavaConstructor::~JavaConstructor):
+ (Bindings::JavaConstructor::operator=):
+ (Bindings::JavaConstructor::parameterAt):
+ (Bindings::JavaConstructor::numParameters):
+ (Bindings::JavaField::JavaField):
+ (Bindings::JavaField::~JavaField):
+ (Bindings::JavaField::operator=):
+ (Bindings::JavaField::name):
+ (Bindings::JavaField::type):
+ (Bindings::JavaMethod::JavaMethod):
+ (Bindings::JavaMethod::_commonDelete):
+ (Bindings::JavaMethod::~JavaMethod):
+ (Bindings::JavaMethod::_commonCopy):
+ (Bindings::JavaMethod::operator=):
+ (Bindings::JavaMethod::name):
+ (Bindings::JavaMethod::returnType):
+ (Bindings::JavaMethod::parameterAt):
+ (Bindings::JavaMethod::numParameters):
+ (Bindings::JavaClass::_commonDelete):
+ (Bindings::JavaClass::~JavaClass):
+ (Bindings::JavaClass::_commonCopy):
+ (Bindings::JavaClass::JavaClass):
+ (Bindings::JavaClass::operator=):
+ (Bindings::JavaClass::name):
+ (Bindings::JavaClass::methodAt):
+ (Bindings::JavaClass::numMethods):
+ (Bindings::JavaClass::constructorAt):
+ (Bindings::JavaClass::numConstructors):
+ (Bindings::JavaClass::fieldAt):
+ (Bindings::JavaClass::numFields):
+ * bindings/jni/jni_utility.cpp:
+ (callJNIMethod):
+ (callJNIMethodA):
+ (callJNIObjectMethod):
+ (callJNIByteMethod):
+ (callJNICharMethod):
+ (callJNIShortMethod):
+ (callJNIIntMethod):
+ (callJNILongMethod):
+ (callJNIFloatMethod):
+ (callJNIDoubleMethod):
+ (callJNIVoidMethodA):
+ (callJNIObjectMethodA):
+ (callJNIByteMethodA):
+ (callJNICharMethodA):
+ (callJNIShortMethodA):
+ (callJNIIntMethodA):
+ (callJNILongMethodA):
+ (callJNIFloatMethodA):
+ (callJNIDoubleMethodA):
+ (getCharactersFromJString):
+ (releaseCharactersForJString):
+ * bindings/jni/jni_utility.h:
+ * bindings/objc/Makefile.am: Removed.
+ * bindings/runtime.h: Added.
+ (Bindings::Parameter::~Parameter):
+ (Bindings::Constructor::~Constructor):
+ (Bindings::Field::~Field):
+ (Bindings::Method::~Method):
+ (Bindings::Class::~Class):
+
2003-11-13 Maciej Stachowiak <mjs at apple.com>
Reviewed by John.
diff --git a/JavaScriptCore/JavaScriptCore.pbproj/project.pbxproj b/JavaScriptCore/JavaScriptCore.pbproj/project.pbxproj
index a9c1e9a..aa6e4ae 100644
--- a/JavaScriptCore/JavaScriptCore.pbproj/project.pbxproj
+++ b/JavaScriptCore/JavaScriptCore.pbproj/project.pbxproj
@@ -235,6 +235,8 @@
65417219039E0B390058BFEB,
937F4F25048E5B9900CA2AC4,
51856D920562EE95008B9D83,
+ 511B0871056468730080E486,
+ 511B0878056468BB0080E486,
);
isa = PBXHeadersBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
@@ -288,6 +290,7 @@
6541720D039E02E70058BFEB,
9364B274045B7D6C00A9CAC1,
51856D910562EE95008B9D83,
+ 511B0879056468BB0080E486,
);
isa = PBXSourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
@@ -422,6 +425,51 @@
//512
//513
//514
+ 511B0870056468730080E486 = {
+ expectedFileType = sourcecode.c.h;
+ fileEncoding = 4;
+ isa = PBXFileReference;
+ name = runtime.h;
+ path = bindings/runtime.h;
+ refType = 4;
+ sourceTree = "<group>";
+ };
+ 511B0871056468730080E486 = {
+ fileRef = 511B0870056468730080E486;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 511B0876056468BB0080E486 = {
+ expectedFileType = sourcecode.c.h;
+ fileEncoding = 4;
+ isa = PBXFileReference;
+ name = jni_runtime.h;
+ path = bindings/jni/jni_runtime.h;
+ refType = 4;
+ sourceTree = "<group>";
+ };
+ 511B0877056468BB0080E486 = {
+ expectedFileType = sourcecode.cpp.cpp;
+ fileEncoding = 4;
+ isa = PBXFileReference;
+ name = jni_runtime.cpp;
+ path = bindings/jni/jni_runtime.cpp;
+ refType = 4;
+ sourceTree = "<group>";
+ };
+ 511B0878056468BB0080E486 = {
+ fileRef = 511B0876056468BB0080E486;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 511B0879056468BB0080E486 = {
+ fileRef = 511B0877056468BB0080E486;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
51856D8F0562EE95008B9D83 = {
expectedFileType = sourcecode.cpp.cpp;
fileEncoding = 30;
@@ -454,6 +502,9 @@
};
51856D950562EE9C008B9D83 = {
children = (
+ 511B0870056468730080E486,
+ 511B0877056468BB0080E486,
+ 511B0876056468BB0080E486,
51856D8F0562EE95008B9D83,
51856D900562EE95008B9D83,
);
diff --git a/JavaScriptCore/Makefile.am b/JavaScriptCore/Makefile.am
index abec09f..c676cf5 100644
--- a/JavaScriptCore/Makefile.am
+++ b/JavaScriptCore/Makefile.am
@@ -9,7 +9,7 @@ kjs_testkjs_DEPENDENCIES = JavaScriptCore-stamp
kjs_testkjs_LDFLAGS = -F$(SYMROOTS) -framework JavaScriptCore
all-am: JavaScriptCore-stamp
-JavaScriptCore-stamp: kjs/*.cpp kjs/*.h pcre/*.c pcre/*.h bindings/jni/*.cpp bindings/jni/*.h
+JavaScriptCore-stamp: kjs/*.cpp kjs/*.h pcre/*.c pcre/*.h bindings/*.h bindings/jni/*.cpp bindings/jni/*.h
pbxbuild -buildstyle $(BUILDSTYLE) OBJROOT=$(SYMROOTS) SYMROOT=$(SYMROOTS) DSTROOT=$(SYMROOTS) && touch $@
clean-am:
pbxbuild clean OBJROOT=$(SYMROOTS) SYMROOT=$(SYMROOTS) DSTROOT=$(SYMROOTS)
diff --git a/JavaScriptCore/bindings/Makefile.am b/JavaScriptCore/bindings/Makefile.am
deleted file mode 100644
index fbf356b..0000000
--- a/JavaScriptCore/bindings/Makefile.am
+++ /dev/null
@@ -1,3 +0,0 @@
-SUBDIRS = jni objc
-
-INCLUDES = -I $(top_srcdir)/JavaScriptCore/kjs
diff --git a/JavaScriptCore/bindings/jni/Makefile.am b/JavaScriptCore/bindings/jni/Makefile.am
deleted file mode 100644
index 29ffbef..0000000
--- a/JavaScriptCore/bindings/jni/Makefile.am
+++ /dev/null
@@ -1 +0,0 @@
-INCLUDES = -I $(top_srcdir)/JavaScriptCore/kjs
diff --git a/JavaScriptCore/bindings/jni/jni_runtime.cpp b/JavaScriptCore/bindings/jni/jni_runtime.cpp
new file mode 100644
index 0000000..8058ec8
--- /dev/null
+++ b/JavaScriptCore/bindings/jni/jni_runtime.cpp
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <jni_utility.h>
+#include <jni_runtime.h>
+
+using namespace Bindings;
+
+JavaField::JavaField (JNIEnv *env, jobject aField)
+{
+ // Get field type
+ jobject fieldType = callJNIObjectMethod (aField, "getType", "()Ljava/lang/Class;");
+ jstring fieldTypeName = (jstring)callJNIObjectMethod (fieldType, "toString", "()Ljava/lang/String;");
+ _type = new JavaString(env, fieldTypeName);
+
+ // Get field name
+ jstring fieldName = (jstring)callJNIObjectMethod (aField, "getName", "()Ljava/lang/String;");
+ _name = new JavaString(env, fieldName);
+}
+
+JavaConstructor::JavaConstructor (JNIEnv *env, jobject aConstructor)
+{
+ // Get parameters
+ jarray jparameters = (jarray)callJNIObjectMethod (aConstructor, "getParameterTypes", "()[Ljava/lang/Class;");
+ _numParameters = env->GetArrayLength (jparameters);
+ _parameters = new JavaParameter[_numParameters];
+
+ int i;
+ for (i = 0; i < _numParameters; i++) {
+ jobject aParameter = env->GetObjectArrayElement ((jobjectArray)jparameters, i);
+ jstring parameterName = (jstring)callJNIObjectMethod (aParameter, "getName", "()Ljava/lang/String;");
+ _parameters[i] = JavaParameter(env, parameterName);
+ }
+}
+
+JavaMethod::JavaMethod (JNIEnv *env, jobject aMethod)
+{
+ // Get parameters
+ jarray jparameters = (jarray)callJNIObjectMethod (aMethod, "getParameterTypes", "()[Ljava/lang/Class;");
+ _numParameters = env->GetArrayLength (jparameters);
+ _parameters = new JavaParameter[_numParameters];
+
+ int i;
+ for (i = 0; i < _numParameters; i++) {
+ jobject aParameter = env->GetObjectArrayElement ((jobjectArray)jparameters, i);
+ jstring parameterName = (jstring)callJNIObjectMethod (aParameter, "getName", "()Ljava/lang/String;");
+ _parameters[i] = JavaParameter(env, parameterName);
+ }
+
+ // Get return type
+ jobject returnType = callJNIObjectMethod (aMethod, "getReturnType", "()Ljava/lang/Class;");
+ jstring returnTypeName = (jstring)callJNIObjectMethod (returnType, "getName", "()Ljava/lang/String;");
+ _returnType = new JavaString (env, returnTypeName);
+
+ // Get method name
+ jstring methodName = (jstring)callJNIObjectMethod (aMethod, "getName", "()Ljava/lang/String;");
+ _name = new JavaString (env, methodName);
+}
+
+JavaClass::JavaClass (JNIEnv *env, const char *className)
+{
+ long i;
+
+ _name = strdup (className);
+
+ // Get the class
+ jclass aClass = env->FindClass(_name);
+ if (!aClass){
+ fprintf (stderr, "%s: unable to find class %s\n", __PRETTY_FUNCTION__, _name);
+ return;
+ }
+
+ // Get the fields
+ jarray fields = (jarray)callJNIObjectMethod (aClass, "getFields", "()[Ljava/lang/reflect/Field;");
+ _numFields = env->GetArrayLength (fields);
+ _fields = new JavaField[_numFields];
+ for (i = 0; i < _numFields; i++) {
+ jobject aField = env->GetObjectArrayElement ((jobjectArray)fields, i);
+ _fields[i] = JavaField (env, aField);
+ }
+
+ // Get the methods
+ jarray methods = (jarray)callJNIObjectMethod (aClass, "getMethods", "()[Ljava/lang/reflect/Method;");
+ _numMethods = env->GetArrayLength (methods);
+ _methods = new JavaMethod[_numMethods];
+ for (i = 0; i < _numMethods; i++) {
+ jobject aMethod = env->GetObjectArrayElement ((jobjectArray)methods, i);
+ _methods[i] = JavaMethod (env, aMethod);
+ }
+
+ // Get the constructors
+ jarray constructors = (jarray)callJNIObjectMethod (aClass, "getConstructors", "()[Ljava/lang/reflect/Constructor;");
+ _numConstructors = env->GetArrayLength (constructors);
+ _constructors = new JavaConstructor[_numConstructors];
+ for (i = 0; i < _numConstructors; i++) {
+ jobject aConstructor = env->GetObjectArrayElement ((jobjectArray)constructors, i);
+ _constructors[i] = JavaConstructor (env, aConstructor);
+ }
+}
diff --git a/JavaScriptCore/bindings/jni/jni_runtime.h b/JavaScriptCore/bindings/jni/jni_runtime.h
new file mode 100644
index 0000000..68b0284
--- /dev/null
+++ b/JavaScriptCore/bindings/jni/jni_runtime.h
@@ -0,0 +1,330 @@
+/*
+ * Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "../runtime.h"
+
+namespace Bindings
+{
+
+class JavaString
+{
+public:
+ JavaString () : _env(0), _characters(0), _jString(0) {};
+
+ JavaString (JNIEnv *e, jstring s) : _env(e), _jString(s) {
+ _characters = getCharactersFromJString (_env, s);
+ }
+
+ ~JavaString () {
+ releaseCharactersForJString (_env, _jString, _characters);
+ }
+
+ JavaString(const JavaString &other) : _env(other._env), _jString (other._jString)
+ {
+ _characters = getCharactersFromJString (_env, _jString);
+ }
+
+ JavaString &operator=(const JavaString &other)
+ {
+ if (this == &other)
+ return *this;
+
+ releaseCharactersForJString (_env, _jString, _characters);
+
+ _env = other._env;
+ _jString = other._jString;
+ _characters = getCharactersFromJString (_env, _jString);
+
+ return *this;
+ }
+
+ const char *characters() { return _characters; }
+
+private:
+ JNIEnv *_env;
+ const char *_characters;
+ jstring _jString;
+};
+
+
+class JavaParameter : public Parameter
+{
+public:
+ JavaParameter () : _type (0) {};
+
+ JavaParameter (JNIEnv *env, jstring type) {
+ _type = new JavaString (env, type);
+ };
+
+ ~JavaParameter() {
+ delete _type;
+ };
+
+ JavaParameter(const JavaParameter &other) : Parameter() {
+ _type = other._type;
+ };
+
+ JavaParameter &operator=(const JavaParameter &other)
+ {
+ if (this == &other)
+ return *this;
+
+ delete _type;
+
+ _type = other._type;
+
+ return *this;
+ }
+
+ virtual RuntimeType type() const { return _type->characters(); }
+
+private:
+ JavaString *_type;
+};
+
+
+class JavaConstructor : public Constructor
+{
+public:
+ JavaConstructor() : _parameters (0), _numParameters(0) {};
+
+ JavaConstructor (JNIEnv *e, jobject aConstructor);
+
+ ~JavaConstructor() {
+ delete _parameters;
+ };
+
+ JavaConstructor(const JavaConstructor &other) : Constructor() {
+ _numParameters = other._numParameters;
+ _parameters = new JavaParameter[_numParameters];
+ long i;
+ for (i = 0; i < _numParameters; i++) {
+ _parameters[i] = other._parameters[i];
+ }
+ };
+
+ JavaConstructor &operator=(const JavaConstructor &other)
+ {
+ if (this == &other)
+ return *this;
+
+ delete _parameters;
+
+ _numParameters = other._numParameters;
+ _parameters = new JavaParameter[_numParameters];
+ long i;
+ for (i = 0; i < _numParameters; i++) {
+ _parameters[i] = other._parameters[i];
+ }
+
+ return *this;
+ }
+
+ virtual Parameter *parameterAt(long i) const { return &_parameters[i]; };
+ virtual long numParameters() const { return _numParameters; };
+
+private:
+ JavaParameter *_parameters;
+ long _numParameters;
+};
+
+
+class JavaField : public Field
+{
+public:
+ JavaField() : _name(0), _type(0) {};
+ JavaField (JNIEnv *env, jobject aField);
+ ~JavaField() {
+ delete _name;
+ delete _type;
+ };
+
+ JavaField(const JavaField &other) : Field(), _name(other._name), _type(other._type) {};
+
+ JavaField &operator=(const JavaField &other)
+ {
+ if (this == &other)
+ return *this;
+
+ delete _name;
+ delete _type;
+
+ _name = other._name;
+ _type = other._type;
+
+ return *this;
+ }
+
+ virtual const char *name() const { return _name->characters(); }
+ virtual const char *type() const { return _type->characters(); }
+
+private:
+ JavaString *_name;
+ JavaString *_type;
+};
+
+
+class JavaMethod : public Method
+{
+public:
+ JavaMethod() : Method(), _name(0), _returnType(0) {};
+
+ JavaMethod (JNIEnv *env, jobject aMethod);
+
+ void _commonDelete() {
+ delete _name;
+ delete _returnType;
+ delete _parameters;
+ };
+
+ ~JavaMethod () {
+ _commonDelete();
+ };
+
+ void _commonCopy(const JavaMethod &other) {
+ _name = other._name;
+ _returnType = other._returnType;
+
+ _numParameters = other._numParameters;
+ _parameters = new JavaParameter[_numParameters];
+ long i;
+ for (i = 0; i < _numParameters; i++) {
+ _parameters[i] = other._parameters[i];
+ }
+ };
+
+ JavaMethod(const JavaMethod &other) : Method() {
+ _commonCopy(other);
+ };
+
+ JavaMethod &operator=(const JavaMethod &other)
+ {
+ if (this == &other)
+ return *this;
+
+ _commonDelete();
+ _commonCopy(other);
+
+ return *this;
+ };
+
+ virtual const char *name() const { return _name->characters(); };
+ virtual RuntimeType returnType() const { return _returnType->characters(); };
+ virtual Parameter *parameterAt(long i) const { return &_parameters[i]; };
+ virtual long numParameters() const { return _numParameters; };
+
+private:
+ JavaParameter *_parameters;
+ long _numParameters;
+ JavaString *_name;
+ JavaString *_returnType;
+};
+
+class JavaClass : public Class
+{
+public:
+ JavaClass (JNIEnv *env, const char *name);
+
+ void _commonDelete() {
+ free((void *)_name);
+ delete _fields;
+ delete _constructors;
+ delete _methods;
+ }
+
+ ~JavaClass () {
+ _commonDelete();
+ }
+
+ void _commonCopy(const JavaClass &other) {
+ long i;
+
+ _name = strdup (other._name);
+
+ _numFields = other._numFields;
+ _fields = new JavaField[_numFields];
+ for (i = 0; i < _numFields; i++) {
+ _fields[i] = other._fields[i];
+ }
+
+ _numMethods = other._numMethods;
+ _methods = new JavaMethod[_numMethods];
+ for (i = 0; i < _numMethods; i++) {
+ _methods[i] = other._methods[i];
+ }
+
+ _numConstructors = other._numConstructors;
+ _constructors = new JavaConstructor[_numConstructors];
+ for (i = 0; i < _numConstructors; i++) {
+ _constructors[i] = other._constructors[i];
+ }
+ }
+
+ JavaClass (const JavaClass &other)
+ : Class() {
+ _commonCopy (other);
+ };
+
+ JavaClass &operator=(const JavaClass &other)
+ {
+ if (this == &other)
+ return *this;
+
+ _commonDelete();
+ _commonCopy (other);
+
+ return *this;
+ }
+
+ virtual const char *name() const { return _name; };
+
+ virtual Method *methodAt(long i) const {
+ return &_methods[i];
+ };
+
+ virtual long numMethods() const { return _numMethods; };
+
+ virtual Constructor *constructorAt(long i) const {
+ return &_constructors[i];
+ };
+
+ virtual long numConstructors() const { return _numConstructors; };
+
+ virtual Field *fieldAt(long i) const {
+ return &_fields[i];
+ };
+
+ virtual long numFields() const { return _numFields; }
+
+private:
+ const char *_name;
+ JavaField *_fields;
+ long _numFields;
+ JavaConstructor *_constructors;
+ long _numConstructors;
+ JavaMethod *_methods;
+ long _numMethods;
+};
+
+}
\ No newline at end of file
diff --git a/JavaScriptCore/bindings/jni/jni_utility.cpp b/JavaScriptCore/bindings/jni/jni_utility.cpp
index 3ef3f9c..367ddc5 100644
--- a/JavaScriptCore/bindings/jni/jni_utility.cpp
+++ b/JavaScriptCore/bindings/jni/jni_utility.cpp
@@ -1,3 +1,28 @@
+/*
+ * Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
#include "jni_utility.h"
@@ -32,19 +57,6 @@ static bool attachToJavaVM(JavaVM **jvm, JNIEnv **env)
return attached;
}
-typedef union {
- jobject _object;
- jboolean _boolean;
- jbyte _byte;
- jchar _char;
- jshort _short;
- jint _int;
- jlong _long;
- jfloat _float;
- jdouble _double;
- bool _error;
-} jresult;
-
typedef enum {
void_function,
object_function,
@@ -59,13 +71,80 @@ typedef enum {
} JNIFunctionType;
-jresult callJNIMethod( JNIFunctionType type, jobject obj, const char *name, const char *sig, va_list argList)
+static jvalue callJNIMethod( JNIFunctionType type, jobject obj, const char *name, const char *sig, va_list args)
{
JavaVM *jvm = NULL;
JNIEnv *env = NULL;
- jresult result;
+ jvalue result;
- result._error = false;
+ if ( obj != NULL ) {
+ if ( attachToJavaVM(&jvm, &env) ) {
+ jclass cls = env->GetObjectClass(obj);
+ if ( cls != NULL ) {
+ jmethodID mid = env->GetMethodID(cls, name, sig);
+ if ( mid != NULL )
+ {
+ switch (type) {
+ case void_function:
+ env->functions->CallVoidMethodV(env, obj, mid, args);
+ break;
+ case object_function:
+ result.l = env->functions->CallObjectMethodV(env, obj, mid, args);
+ break;
+ case boolean_function:
+ result.z = env->functions->CallBooleanMethodV(env, obj, mid, args);
+ break;
+ case byte_function:
+ result.b = env->functions->CallByteMethodV(env, obj, mid, args);
+ break;
+ case char_function:
+ result.c = env->functions->CallCharMethodV(env, obj, mid, args);
+ break;
+ case short_function:
+ result.s = env->functions->CallShortMethodV(env, obj, mid, args);
+ break;
+ case int_function:
+ result.i = env->functions->CallIntMethodV(env, obj, mid, args);
+ break;
+ case long_function:
+ result.j = env->functions->CallLongMethodV(env, obj, mid, args);
+ break;
+ case float_function:
+ result.f = env->functions->CallFloatMethodV(env, obj, mid, args);
+ break;
+ case double_function:
+ result.d = env->functions->CallDoubleMethodV(env, obj, mid, args);
+ break;
+ default:
+ fprintf(stderr, "%s: invalid function type (%d)", __PRETTY_FUNCTION__, (int)type);
+ }
+ }
+ else
+ {
+ fprintf(stderr, "%s: Could not find method: %s!", __PRETTY_FUNCTION__, name);
+ env->ExceptionDescribe();
+ env->ExceptionClear();
+ }
+
+ env->DeleteLocalRef(cls);
+ }
+ else {
+ fprintf(stderr, "%s: Could not find class for object!", __PRETTY_FUNCTION__);
+ }
+ }
+ else {
+ fprintf(stderr, "%s: Could not attach to the VM!", __PRETTY_FUNCTION__);
+ }
+ }
+
+ return result;
+}
+
+static jvalue callJNIMethodA( JNIFunctionType type, jobject obj, const char *name, const char *sig, jvalue *args)
+{
+ JavaVM *jvm = NULL;
+ JNIEnv *env = NULL;
+ jvalue result;
if ( obj != NULL ) {
if ( attachToJavaVM(&jvm, &env) ) {
@@ -76,37 +155,37 @@ jresult callJNIMethod( JNIFunctionType type, jobject obj, const char *name, cons
{
switch (type) {
case void_function:
- env->functions->CallVoidMethodV(env, obj, mid, argList);
+ env->functions->CallVoidMethodA(env, obj, mid, args);
break;
case object_function:
- result._object = env->functions->CallObjectMethodV(env, obj, mid, argList);
+ result.l = env->functions->CallObjectMethodA(env, obj, mid, args);
break;
case boolean_function:
- result._boolean = env->functions->CallBooleanMethodV(env, obj, mid, argList);
+ result.z = env->functions->CallBooleanMethodA(env, obj, mid, args);
break;
case byte_function:
- result._byte = env->functions->CallByteMethodV(env, obj, mid, argList);
+ result.b = env->functions->CallByteMethodA(env, obj, mid, args);
break;
case char_function:
- result._char = env->functions->CallCharMethodV(env, obj, mid, argList);
+ result.c = env->functions->CallCharMethodA(env, obj, mid, args);
break;
case short_function:
- result._short = env->functions->CallShortMethodV(env, obj, mid, argList);
+ result.s = env->functions->CallShortMethodA(env, obj, mid, args);
break;
case int_function:
- result._int = env->functions->CallIntMethodV(env, obj, mid, argList);
+ result.i = env->functions->CallIntMethodA(env, obj, mid, args);
break;
case long_function:
- result._long = env->functions->CallLongMethodV(env, obj, mid, argList);
+ result.j = env->functions->CallLongMethodA(env, obj, mid, args);
break;
case float_function:
- result._float = env->functions->CallFloatMethodV(env, obj, mid, argList);
+ result.f = env->functions->CallFloatMethodA(env, obj, mid, args);
break;
case double_function:
- result._double = env->functions->CallDoubleMethodV(env, obj, mid, argList);
+ result.d = env->functions->CallDoubleMethodA(env, obj, mid, args);
break;
default:
- result._error = true;
+ fprintf(stderr, "%s: invalid function type (%d)", __PRETTY_FUNCTION__, (int)type);
}
}
else
@@ -114,19 +193,16 @@ jresult callJNIMethod( JNIFunctionType type, jobject obj, const char *name, cons
fprintf(stderr, "%s: Could not find method: %s!", __PRETTY_FUNCTION__, name);
env->ExceptionDescribe();
env->ExceptionClear();
- result._error = true;
}
env->DeleteLocalRef(cls);
}
else {
fprintf(stderr, "%s: Could not find class for object!", __PRETTY_FUNCTION__);
- result._error = true;
}
}
else {
fprintf(stderr, "%s: Could not attach to the VM!", __PRETTY_FUNCTION__);
- result._error = true;
}
}
@@ -137,7 +213,7 @@ jresult callJNIMethod( JNIFunctionType type, jobject obj, const char *name, cons
va_list args;\
va_start (args, sig);\
\
- jresult result = callJNIMethod(function_type, obj, name, sig, args);\
+ jvalue result = callJNIMethod(function_type, obj, name, sig, args);\
\
va_end (args);
@@ -149,48 +225,116 @@ void callJNIVoidMethod (jobject obj, const char *name, const char *sig, ... )
jobject callJNIObjectMethod (jobject obj, const char *name, const char *sig, ... )
{
CALL_JNI_METHOD (object_function, obj, name, sig);
- return result._object;
+ return result.l;
}
jbyte callJNIByteMethod( jobject obj, const char *name, const char *sig, ... )
{
CALL_JNI_METHOD (byte_function, obj, name, sig);
- return result._byte;
+ return result.b;
}
jchar callJNICharMethod (jobject obj, const char *name, const char *sig, ... )
{
CALL_JNI_METHOD (char_function, obj, name, sig);
- return result._char;
+ return result.c;
}
jshort callJNIShortMethod (jobject obj, const char *name, const char *sig, ... )
{
CALL_JNI_METHOD (short_function, obj, name, sig);
- return result._short;
+ return result.s;
}
jint callJNIIntMethod (jobject obj, const char *name, const char *sig, ... )
{
CALL_JNI_METHOD (int_function, obj, name, sig);
- return result._int;
+ return result.i;
}
jlong callJNILongMethod (jobject obj, const char *name, const char *sig, ... )
{
CALL_JNI_METHOD (long_function, obj, name, sig);
- return result._long;
+ return result.j;
}
jfloat callJNIFloatMethod (jobject obj, const char *name, const char *sig, ... )
{
CALL_JNI_METHOD (float_function, obj, name, sig);
- return result._float;
+ return result.f;
}
jdouble callJNIDoubleMethod (jobject obj, const char *name, const char *sig, ... )
{
CALL_JNI_METHOD (double_function, obj, name, sig);
- return result._double;
+ return result.d;
+}
+
+void callJNIVoidMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
+{
+ jvalue result = callJNIMethodA (void_function, obj, name, sig, args);
+}
+
+jobject callJNIObjectMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
+{
+ jvalue result = callJNIMethodA (object_function, obj, name, sig, args);
+ return result.l;
+}
+
+jbyte callJNIByteMethodA ( jobject obj, const char *name, const char *sig, jvalue *args)
+{
+ jvalue result = callJNIMethodA (byte_function, obj, name, sig, args);
+ return result.b;
+}
+
+jchar callJNICharMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
+{
+ jvalue result = callJNIMethodA (char_function, obj, name, sig, args);
+ return result.c;
+}
+
+jshort callJNIShortMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
+{
+ jvalue result = callJNIMethodA (short_function, obj, name, sig, args);
+ return result.s;
+}
+
+jint callJNIIntMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
+{
+ jvalue result = callJNIMethodA (int_function, obj, name, sig, args);
+ return result.i;
+}
+
+jlong callJNILongMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
+{
+ jvalue result = callJNIMethodA (long_function, obj, name, sig, args);
+ return result.j;
+}
+
+jfloat callJNIFloatMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
+{
+ jvalue result = callJNIMethodA (float_function, obj, name, sig, args);
+ return result.f;
+}
+
+jdouble callJNIDoubleMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
+{
+ jvalue result = callJNIMethodA (double_function, obj, name, sig, args);
+ return result.d;
}
+const char *getCharactersFromJString (JNIEnv *env, jstring aJString)
+{
+ jboolean isCopy;
+ const char *s = env->GetStringUTFChars((jstring)aJString, &isCopy);
+ if (!s) {
+ env->ExceptionDescribe();
+ env->ExceptionClear();
+ }
+ return s;
+}
+
+void releaseCharactersForJString (JNIEnv *env, jstring aJString, const char *s)
+{
+ env->ReleaseStringUTFChars (aJString, s);
+}
diff --git a/JavaScriptCore/bindings/jni/jni_utility.h b/JavaScriptCore/bindings/jni/jni_utility.h
index 80b3546..92bb357 100644
--- a/JavaScriptCore/bindings/jni/jni_utility.h
+++ b/JavaScriptCore/bindings/jni/jni_utility.h
@@ -1,5 +1,32 @@
+/*
+ * Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
#include <JavaVM/jni.h>
+const char *getCharactersFromJString (JNIEnv *env, jstring aJString);
+void releaseCharactersForJString (JNIEnv *env, jstring aJString, const char *s);
+
jobject callJNIObjectMethod( jobject obj, const char *name, const char *sig, ... );
void callJNIVoidMethod( jobject obj, const char *name, const char *sig, ... );
jboolean callJNIBooleanMethod( jobject obj, const char *name, const char *sig, ... );
@@ -10,3 +37,14 @@ jint callJNIIntMethod( jobject obj, const char *name, const char *sig, ... );
jlong callJNILongMethod( jobject obj, const char *name, const char *sig, ... );
jfloat callJNIFloatMethod( jobject obj, const char *name, const char *sig, ... );
jdouble callJNIDoubleMethod( jobject obj, const char *name, const char *sig, ... );
+
+jobject callJNIObjectMethodA( jobject obj, const char *name, const char *sig, jvalue *args);
+void callJNIVoidMethodA( jobject obj, const char *name, const char *sig, jvalue *args);
+jboolean callJNIBooleanMethodA( jobject obj, const char *name, const char *sig, jvalue *args);
+jbyte callJNIByteMethodA( jobject obj, const char *name, const char *sig, jvalue *args);
+jchar callJNICharMethodA( jobject obj, const char *name, const char *sig, jvalue *args);
+jshort callJNIShortMethodA( jobject obj, const char *name, const char *sig, jvalue *args);
+jint callJNIIntMethodA( jobject obj, const char *name, const char *sig, jvalue *args);
+jlong callJNILongMethodA( jobject obj, const char *name, const char *sig, jvalue *args);
+jfloat callJNIFloatMethodA( jobject obj, const char *name, const char *sig, jvalue *args);
+jdouble callJNIDoubleMethodA( jobject obj, const char *name, const char *sig, jvalue *args);
diff --git a/JavaScriptCore/bindings/objc/Makefile.am b/JavaScriptCore/bindings/objc/Makefile.am
deleted file mode 100644
index 29ffbef..0000000
--- a/JavaScriptCore/bindings/objc/Makefile.am
+++ /dev/null
@@ -1 +0,0 @@
-INCLUDES = -I $(top_srcdir)/JavaScriptCore/kjs
diff --git a/WebCore/kwq/KWQGuardedPtr.h b/JavaScriptCore/bindings/runtime.h
similarity index 56%
copy from WebCore/kwq/KWQGuardedPtr.h
copy to JavaScriptCore/bindings/runtime.h
index c7bd5a1..846ed23 100644
--- a/WebCore/kwq/KWQGuardedPtr.h
+++ b/JavaScriptCore/bindings/runtime.h
@@ -22,33 +22,59 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+namespace Bindings
+{
-#ifndef QGUARDEDPTR_H_
-#define QGUARDEDPTR_H_
+// For now just use Java style type descriptors.
+typedef const char * RuntimeType;
-#include "KWQPtrList.h"
+class Parameter
+{
+public:
+ virtual RuntimeType type() const = 0;
+ virtual ~Parameter() {};
+};
-class QObject;
+class Constructor
+{
+public:
+ virtual Parameter *parameterAt(long i) const = 0;
+ virtual long numParameters() const = 0;
+ virtual ~Constructor() {};
+};
-class KWQGuardedPtrBase {
+class Field
+{
public:
- KWQGuardedPtrBase(QObject* = 0);
-
- QObject* pointer() const { return iterator.current(); }
- bool isNull() const { return pointer() == 0; }
-
-private:
- QPtrListIterator<QObject> iterator;
+ virtual const char *name() const = 0;
+ virtual const char *type() const = 0;
+ virtual ~Field() {};
};
-template <class T> class QGuardedPtr : public KWQGuardedPtrBase {
+class Method
+{
public:
- QGuardedPtr() { }
- QGuardedPtr(T* p) : KWQGuardedPtrBase(p) { }
+ virtual const char *name() const = 0;
+ virtual RuntimeType returnType() const = 0;
+ virtual Parameter *parameterAt(long i) const = 0;
+ virtual long numParameters() const = 0;
+ virtual ~Method() {};
+};
- T& operator*() const { return *(T*)pointer(); }
- operator T*() const { return (T*)pointer(); }
- T* operator->() const { return (T*)pointer(); }
+class Class
+{
+public:
+ virtual const char *name() const = 0;
+
+ virtual Method *methodAt(long i) const = 0;
+ virtual long numMethods() const = 0;
+
+ virtual Constructor *constructorAt(long i) const = 0;
+ virtual long numConstructors() const = 0;
+
+ virtual Field *fieldAt(long i) const = 0;
+ virtual long numFields() const = 0 ;
+ virtual ~Class() {};
};
-#endif
+}
\ No newline at end of file
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list