[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