diff --git a/js/ref/liveconnect/README.html b/js/ref/liveconnect/README.html
index efbe0ec6c06..727381c072c 100644
--- a/js/ref/liveconnect/README.html
+++ b/js/ref/liveconnect/README.html
@@ -7,20 +7,11 @@
-
-
-WARNING:
-
-
-
-This document is a skeleton, still
-very much under construction.
-
Introduction
This is the README file for the JavaScript LiveConnect implementation.
It consists of build conventions and instructions, source code conventions,
-a design walk-through, and a brief file-by-file description of the source.
+and a brief file-by-file description of the source.
This document assumes basic familiarity with JSRef, the reference implementation
of JavaScript, and with the LiveConnect technology (LiveConnect allows
@@ -39,6 +30,117 @@ Interface (JNI), as specified by JavaSoft. It then compiles a small
that can be used interactively and with test scripts.
Scott Furman, 4/8/98
+
+Compatibility
+Unlike this release, all previous versions of LiveConnect appeared only
+as a component of Netscape Navigator, not as a standalone module.
+The variants of LiveConnect that appeared in Navigator versions 3.x and
+4.x all behave much the same, modulo bugs. For brevity we refer to
+this classic version of LiveConnect as "LC1" and this most recent release
+as "LC2". The following incompatibilities with LC1 are known:
+
+-
+As in LC1, JavaScript objects appear to Java as instances of netscape.javascript.JSObject.
+In LC1, two JSObject's could be tested for equality, i.e. to see
+if they refer to the same instance, by using the `==' operator. Instead,
+developers must now use the equals()method of netscape.javascript.JSObject
+for comparison, a method that overrides java.lang.Object.equals().
+Using equals() instead of `==' should work the same on both LC1
+and LC2.
+
+It is not possible to replicate the identity behavior of the `==' operator
+that LC1 provides without the use of "weak" references, i.e. references
+that do not contribute to making a Java object reachable for purposes of
+garbage collection, but which nonetheless allow reference to an object
+as long as it is reachable by other means. The use of weak references
+is not portable, however. It is not part of the JNI or the JDK and
+it is not provided on all JVMs. The JDK1.2 release will include standard
+support for weak references.
+
+
+-
+It's possible that, in a set of overloaded Java methods, more than one
+is compatible with the types of the actual arguments in a call from JavaScript
+via LiveConnect. LC1 resolved these ambiguities in a simplistic manner,
+by simply invoking whatever method was enumerated first by the JVM.
+The enumeration order of reflected methods using java.lang.reflect
+is not specified by Sun and may differ among vendor's JVMs, i.e. enumeration
+could be in order of classfile appearance, hashtable order, etc.
+With the Netscape and Sun JVMs, it is possible to change the behavior of
+an LC1 program by changing the order that Java methods appear in a source
+file, thus changing the method enumeration order. Hence, the Java
+method chosen when there is more than one compatible method may vary depending
+on the JVM.
+
+A future release of LiveConnect will provide a new algorithm for overloaded
+Java method resolution that is both independent of the JVM used and more
+likely than LC1 to invoke the method that the developer expects.
+
+
+-
+There are several minor changes in error handling to make LiveConnect more
+conformant to ECMAScript. These include, for example, making any
+attempt to delete JavaObject, JavaClass or JavaPackage properties fail
+silently, rather than causing an error. Also, some error messages
+have been changed to be more informative. These changes should generally
+be backward-compatible with LC1 because few programs that use LiveConnect
+will depend on the exact behavior of LiveConnect when handling errors.
+
+
+
+New Features
+Several minor features have been added to this release of LiveConnect.
+These features were not available in the versions of LiveConnect that were
+integrated with Netscape Naviagtor versions 4.x and earlier.
+
+
+
+The Java methods of java.lang.Object are now invokeable methods
+of JavaArray objects, matching the behavior
+of arrays when accessed from Java. (Java arrays are a subclass
+of java.lang.Object.) For example, Java's getClass()
+and hashCode() methods can now be called
+on JavaArray objects. (In prior versions
+of LiveConnect, the methods of java.lang.Object were only inherited
+by non-array Java objects.)
+
+
+Note that this change has caused the string representation of JavaArray
+objects to change. Previously, the JavaArray toString() method always
+printed "[object JavaArray]" for all JavaArray's.
+Now, the Java java.lang.Object.toString()
+method is called to convert JavaArray objects to strings, just as with
+other, non-array Java objects that are accessible via LiveConnect.
+java.lang.Object.toString()is defined in
+the Java Language Specification to return the value of the following
+expression:
+
+
getClass().getName() + '@' + Integer.toHexString(hashCode())
+
+
+A one-character string is now an acceptable match for an argument to a
+Java method of type char. (In earlier
+versions of LiveConnect, the only acceptable match for a char
+had to be a JavaScript value that was convertible to a number.) For
+example, the following is now possible:
+
+
+c = new java.lang.Character("F")
+
+
+A JavaClass object is now an acceptable match for an argument to a Java
+method of type java.lang.Class. For example, you can now write:
+
+
+java.lang.reflect.Array.newInstance(java.lang.String,
+3)
+
+
instead of the more verbose:
+
+
jls = java.lang.Class.forName("java.lang.String")
+
java.lang.reflect.Array.newInstance(jls, 3)
+
+
Build conventions
Update your JVM's CLASSPATH to point to the
@@ -46,14 +148,17 @@ Update your JVM's CLASSPATH to point to the
you do not, LiveConnect will still operate but with the limitation that
JS objects may not be passed as arguments of Java methods and it will not
be possible to call from Java into JavaScript, i.e. the netscape.javascript.JSObject
-class will be inaccessible. If your CLASSPATH
+class will be inaccessible. Another downside of operating without
+these classes is that Java error messages will not include a Java stack
+trace, when one is available. If your CLASSPATH
is set improperly, you will see a message like, "initialization
error: Can't load class netscape/javascript/JSObject" when
starting a LiveConnect debug build.
-To enable multi-threaded execution, define the JS_THREADSAFE
-cpp macro and flesh out the stubs and required headers in jslock.c/.h.
-See the JS API docs for more. JSRef must also be built with JS_THREADSAFE.
+
By default, LiveConnect is not re-entrant. To enable multi-threaded
+execution, define the JS_THREADSAFE cpp macro
+and flesh out the stubs and required headers in jslock.c/.h. See
+the JS API docs for more. JSRef must also be built with JS_THREADSAFE.
Windows
@@ -87,54 +192,48 @@ in the JDK's bin directory.
-
Use any Java compiler to compile the java source files in the js/ref/liveconnect/classes/netscape/javascript
-directory.
+directory.
+
+
+Mac OS
+
+-
+Using CodeWarrior Pro 3 is recommended. With some modifications,
+the project files can be made to work with CodeWarrior Pro 2. The
+CodeWarrior project files are js/ref/liveconnect/macbuild/LiveConnect.mcp,
+js/ref/liveconnect/macbuild/LiveConnectShell.mcp,
+and js/ref/macbuild/JSRef.mcp.
+
+-
+Install Apple's JVM, MRJ 2.0 (or later), and the MRJ
+SDK v2.0.1ea4. Note: You do not need to install MRJ if you are
+running a recent version of MacOS 8, since it is shipped with the OS.
+
+-
+Copy the folders CIncludes & Libraries from the SDK's Interfaces&Libraries
+directory to js/ref/liveconnect/macbuild/JavaSession.
+
+-
+Build the JavaScript test application, JSRef,
+with js/ref/macbuild/JSRef.mcp.
+
+-
+Build the LiveConnect test application, LiveConnectShell,
+with js/ref/liveconnect/macbuild/LiveConnectShell.mcp.
+
+-
+Build liveconnect.jar with js/ref/liveconnect/macbuild/LiveConnect.mcp.
+
+-
+Make an alias to liveconnect.jar and place
+it in "{SystemFolder}Extensions:MRJ Libraries:MRJClasses".
-
- Mac OS
-
- - Using CodeWarrior Pro 3 is recommended. CodeWarrior
- Pro 2 should work but has not been tested. The
- CodeWarrior project files are js/ref/liveconnect/macbuild/LiveConnect.mcp,
- js/ref/liveconnect/macbuild/LiveConnectShell.mcp,
- and js/ref/macbuild/JSRef.mcp.
-
-
- Install Apple's JVM, MRJ 2.0 (or later),and the
- MRJ
- SDK v2.0.1ea4.
-
-
- Copy the folders CIncludes & Libraries from
- Interfaces&Libraries to js/ref/liveconnect/macbuild/JavaSession.
-
-
- Build the JavaScript test application, JSRef, with js/ref/macbuild/JSRef.mcp.
-
-
- Build the LiveConnect test application, LiveConnectShell, with js/ref/liveconnect/macbuild/LiveConnectShell.mcp.
-
-
- Build liveconnect.jar with
- js/ref/liveconnect/macbuild/LiveConnect.mcp.
-
-
- Make an alias to liveconnect.jar and place it in
- "{SystemFolder}Extensions:MRJ
- Libraries:MRJClasses".
-
-
-
-
-
-
Unix
-
-No Makefiles created yet
+No Makefiles have been completed yet. These
+notes are a work in progress.
-
Use vendor cc or gcc (ftp://prep.ai.mit.edu/pub/gnu) for compiling,
@@ -215,12 +314,9 @@ be used after the return type and before the function name).
The LiveConnect API
All public LiveConnect entry points and callbacks are documented in jsjava.h,
the header file that exports those functions.
-
-Design walk-through
-
-File walk-through
+File Walk-through