Compare commits

..

267 Commits

Author SHA1 Message Date
darin%meer.net
e7cf80820d remove |#ifdef AI_ADDRCONFIG| block since AI_ADDRCONFIG may be defined
for use with getipnodebyname, but have no meaning when used with
getaddrinfo.  (patch suggested by wtc)


git-svn-id: svn://10.0.0.236/branches/NSPR_GETADDRINFO_BRANCH@145985 18797224-902f-48f8-a5cc-f745e15eee43
2003-08-13 23:55:21 +00:00
darin%meer.net
912ef908fb interface changes:
1- make PR_GetAddrInfoByName return PRAddrInfo*
2- make PR_GetAddrInfoByName require af=PR_AF_UNSPEC and flags=PR_AI_ADDRCONFIG
3- define PR_AF_UNSPEC


git-svn-id: svn://10.0.0.236/branches/NSPR_GETADDRINFO_BRANCH@145382 18797224-902f-48f8-a5cc-f745e15eee43
2003-07-30 17:34:08 +00:00
darin%meer.net
0a953304d9 fixing build bustage that occurs when _PR_HAVE_GETADDRINFO is not defined.
git-svn-id: svn://10.0.0.236/branches/NSPR_GETADDRINFO_BRANCH@145197 18797224-902f-48f8-a5cc-f745e15eee43
2003-07-25 16:03:27 +00:00
wtc%netscape.com
ac8cfc7610 Bugzilla bug 211501: added definitions of the addrinfo structure and
AI_CANONNAME macro for OSF1.
Tag: NSPR_GETADDRINFO_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPR_GETADDRINFO_BRANCH@145152 18797224-902f-48f8-a5cc-f745e15eee43
2003-07-24 15:32:28 +00:00
wtc%netscape.com
d1bc99bfd4 Bugzilla bug 211501: created NSPR_GETADDRINFO_BRANCH.
git-svn-id: svn://10.0.0.236/branches/NSPR_GETADDRINFO_BRANCH@145131 18797224-902f-48f8-a5cc-f745e15eee43
2003-07-24 00:13:28 +00:00
(no author)
69edf3c2a6 This commit was manufactured by cvs2svn to create branch
'NSPR_GETADDRINFO_BRANCH'.

git-svn-id: svn://10.0.0.236/branches/NSPR_GETADDRINFO_BRANCH@144929 18797224-902f-48f8-a5cc-f745e15eee43
2003-07-17 23:13:40 +00:00
seawood%netscape.com
40237764dc Avoid pulling in libdl on OSX.
Thanks to Josh Soref <timeless@bemail.org> for the patch.
Bug #212708 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@144928 18797224-902f-48f8-a5cc-f745e15eee43
2003-07-17 23:13:39 +00:00
wtc%netscape.com
75f7e3bfad Bug 212566: _pr_ipv6_v6only_on_by_default needs to be defined for DARWIN
under all cases, not just when _PR_INET6_PROBE is defined, because
_PR_INET6_PROBE is only defined when Mac OS X deployment target is 10.1.
Bug 211512: defined IPV6_V6ONLY if it's not defined so that we can build on
Mac OS X 10.1, where this macro is not defined.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@144855 18797224-902f-48f8-a5cc-f745e15eee43
2003-07-14 21:59:47 +00:00
wtc%netscape.com
019261e16d Bug 126937: implement PR_GetSysfdTableMax and PR_SetSysfdTableSize for
OS/2.  The patch is contributed by Michael Kaply <mkaply@us.ibm.com>.
r=pedemont.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@144627 18797224-902f-48f8-a5cc-f745e15eee43
2003-07-09 04:53:36 +00:00
wtc%netscape.com
dfe8b15f81 Bug 211512: worked around Mac OS X Panther Beta's bug that the IPV6_V6ONLY
socket option is turned on by default.  r=bryner.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@144619 18797224-902f-48f8-a5cc-f745e15eee43
2003-07-09 03:37:46 +00:00
seawood%netscape.com
ffc1bab3b9 Use standard __declspec keyword instead of _declspec.
Bug #202826 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@144149 18797224-902f-48f8-a5cc-f745e15eee43
2003-06-25 14:49:44 +00:00
wtc%netscape.com
2b68314308 Bug 207614: fixed the way prcpucfg.h is created on OpenVMS so that its
modified time doesn't get updated whenever we do "gmake export".
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@143406 18797224-902f-48f8-a5cc-f745e15eee43
2003-06-06 21:30:55 +00:00
wtc%netscape.com
082af0c094 Bug 207421: use /Op to disable some floating-point optimizations of MSVC
6.0 Processor Pack because they make the floating-point calculations in
prdtoa.c produce incorrect results.  r=cls.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@143378 18797224-902f-48f8-a5cc-f745e15eee43
2003-06-06 03:09:17 +00:00
wtc%netscape.com
d11519dcbc Bug 206815: fixed a benign UMR in the PR_Poll implementations based on
poll().  We should initialize the events field of the pollfd structure
when we set the fd field to -1 even though the events field is ignored
if the fd field is negative.
Modified Files: ptio.c uxpoll.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@142872 18797224-902f-48f8-a5cc-f745e15eee43
2003-05-23 22:42:21 +00:00
wtc%netscape.com
60455a4e55 Bug 204092: build NSPR on Solaris with -xO4 optimization. a=dbaron for
mozilla 1.4 final.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@142617 18797224-902f-48f8-a5cc-f745e15eee43
2003-05-19 19:05:48 +00:00
wtc%netscape.com
69f0d3eaa8 Bug 205582: map EHOSTUNREACH to PR_HOST_UNREACHABLE_ERROR on Unix. r=darin.
a=asa (on behalf of drivers) for checkin to mozilla 1.4.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@142450 18797224-902f-48f8-a5cc-f745e15eee43
2003-05-14 21:44:13 +00:00
wtc%netscape.com
d516d9cf76 Bug 200335: need to cast pthread_t (which could be a pointer) to an
unsigned type (PRUptrdiff).  The patch is contributed by Nelson Bolyard.
(This code path is not used by Mozilla.)
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@142449 18797224-902f-48f8-a5cc-f745e15eee43
2003-05-14 21:43:04 +00:00
wtc%netscape.com
0227aec339 Set NSPR version to 4.4 Beta.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@142448 18797224-902f-48f8-a5cc-f745e15eee43
2003-05-14 21:42:04 +00:00
wtc%netscape.com
dbf8087d0a Explain how the GOLDEN_RATIO constant was calculated. (Added a comment.)
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@142447 18797224-902f-48f8-a5cc-f745e15eee43
2003-05-14 21:41:24 +00:00
wtc%netscape.com
08bd123549 Use NSPR_4_3_RTM instead of NSPR_4_3_RELEASE. I decided to follow NSS's
cvs tag naming convention.  (This file is not used by the Mozilla client.)
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@142446 18797224-902f-48f8-a5cc-f745e15eee43
2003-05-14 21:39:35 +00:00
wtc%netscape.com
9ef1f352e5 Bug 203317: getipnodebyxxx routines are not thread-safe on OpenVMS, so we
need to lock around them.  The patch is contributed by Colin Blake
<colin@theblakes.com>.  r=wtc. a=dbaron for mozilla 1.4b.
Modified Files: configure configure.in prnetdb.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@141955 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-30 00:36:39 +00:00
seawood%netscape.com
10c00e4718 Change mksnt* checks to mks*
Bug #202598 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@141430 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-19 01:30:11 +00:00
seawood%netscape.com
620270ca62 Fix x86 checks so that they work for xeon processors
Bug #199343 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@141402 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-18 19:10:26 +00:00
wtc%netscape.com
6d5f7408b2 Bug 104529: on OS/2, when writing to the command-line console, we must
write \r\n to go to a new line. So we need to translate \n to \r\n. The
patch is contributed by Julien Pierre.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@141385 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-18 14:00:56 +00:00
seawood%netscape.com
1cc5b0a657 Sync config.guess & config.sub with official GNU copies.
Bug #199343


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@141371 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-18 10:20:22 +00:00
mkaply%us.ibm.com
6dc81e054c #201555
r=seawood
OS/2 only - don't put debug info in files when linking


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@141230 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-16 03:04:28 +00:00
wtc%netscape.com
78195ea2b8 Bug 105271: compile source files with absolute pathnames so that the
debuggers can find them automatically.  Currently enabled on Windows and
OS/2 only.  The patch is contributed by Julien Pierre.  r=wtc.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@141218 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-16 01:16:42 +00:00
wtc%netscape.com
40d4f067a8 Added an empty comment line to cause the mapfile to get rebuilt. This is
to help us debug an OS2VACPP tinderbox problem.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140981 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-10 18:17:12 +00:00
wtc%netscape.com
79d797ca58 Bug 126932: make runtests.{sh,ksh} work on OS/2. Include the header for
getcwd in thrpool_server.c.
Modified Files: runtests.ksh runtests.sh thrpool_server.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140940 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-09 22:29:02 +00:00
wtc%netscape.com
10c097faf1 Bug 190538: checked in again the change that was backed out.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140934 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-09 21:49:39 +00:00
wtc%netscape.com
235237b4b0 Bugzilla 190538: backed out the previous checkin because it broke the OS/2
VACPP tinderbox for Mozilla.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140897 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-09 02:47:59 +00:00
wtc%netscape.com
0e6ccc7865 Bug 200561: cite the bug number in the comment.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140895 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-09 02:19:09 +00:00
wtc%netscape.com
4164dc6a54 Bug 200561: do not include <string.h> in optimized builds for AIX so that
memcpy continued to be exported.  This is to be "bug compatible" with old
libnspr4.so binaries that exported memcpy by accident because we did not
include <string.h> in optimized builds.


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140894 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-09 02:14:27 +00:00
wtc%netscape.com
bb84221bd4 Forced Mozilla trunk's tinderboxes to rebuild.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140893 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-09 01:47:46 +00:00
wtc%netscape.com
f0e54aa68a Bug 190538: use the cross-platform syntax of the *.def files (copied from
NSS) so that they can be used on platforms other than Solaris, and use the
*.def files on OS/2.
Modified Files: rules.mk lib/ds/Makefile.in plds.def
lib/libc/src/Makefile.in plc.def pr/src/Makefile.in nspr.def
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140892 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-09 01:45:55 +00:00
wtc%netscape.com
f6323e7739 Bug 198634: we need to implement PR_DetachThread on the platforms that
don't have a way to detach the foreign threads automatically when they
terminate (e.g., OS/2).  The patch is contributed by Michael Kaply
<mkaply@us.ibm.com>.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140890 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-09 01:34:44 +00:00
wtc%netscape.com
cc3f3e3255 Removed the OS/2 compiler flag /Gx+, which is a C++ only flag.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140736 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-05 01:44:54 +00:00
seawood%netscape.com
b14684f905 Add PR_GetPathSeparator function.
Bug #171883 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140674 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-04 04:49:02 +00:00
seawood%netscape.com
cc1269f52f Third time's a charge.
Thanks to danm@netscape.com for the patch.
Bug #158920


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140607 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-02 23:22:41 +00:00
seawood%netscape.com
0782d90451 'mount -p' can return multiple mount points. Use the first one.
Bug #158920 r=sspitzer


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140595 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-02 20:48:13 +00:00
seawood%netscape.com
096dcdef3f Use 'mount -' to get cygdrive mountpoint rather than assuming /cygdrive.
Bug #158920 r=bryner


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140566 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-02 06:23:01 +00:00
seawood%netscape.com
3f82d3744f Turn off optimizations for prprf.c on OS/2 to avoid PR_snprintf problem.
Thanks to Michael Kaply <mkaply@us.ibm.com> for the patch.
Bug #199901 r=wtc a=asa


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140476 18797224-902f-48f8-a5cc-f745e15eee43
2003-04-01 04:06:17 +00:00
wtc%netscape.com
bf2f181728 Bug 188246: support OS/2.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140321 18797224-902f-48f8-a5cc-f745e15eee43
2003-03-26 01:46:52 +00:00
wtc%netscape.com
9366bffc3c Bug 188246: support building NSPR with gcc 3.x on OS/2. also fixed the
tests.  The patch is contributed by Javier Pedemonte <pedemont@us.ibm.com>.
Modified Files: configure configure.in rules.mk lib/ds/Makefile.in
lib/libc/src/Makefile.in _os2.h pr/src/Makefile.in prlink.c
pr/src/md/os2/Makefile.in pr/src/md/os2/objs.mk os2cv.c os2misc.c
os2poll.c os2sock.c os2thred.c pr/tests/Makefile.in attach.c runtests.sh
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH
Added Files: os2emx.s


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140318 18797224-902f-48f8-a5cc-f745e15eee43
2003-03-26 01:36:20 +00:00
wtc%netscape.com
906d727edb Cause Mozilla trunk Tinderboxes to rebuild.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140079 18797224-902f-48f8-a5cc-f745e15eee43
2003-03-22 19:27:59 +00:00
wtc%netscape.com
1d634dce4c Bug 196004: support building with gcc on Solaris better, whether gcc uses
the GNU ld or Solaris ld. Do not pass -B/usr/ccs/bin/ to gcc.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH
Modified files: configure configure.in autoconf.mk.in
	lib/ds/Makefile.in lib/libc/src/Makefile.in pr/src/Makefile.in


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140065 18797224-902f-48f8-a5cc-f745e15eee43
2003-03-22 15:28:58 +00:00
wtc%netscape.com
8122c1051b Bug 198634: fixes to OS/2 threading code. The patch is contributed by
Javier Pedemonte <pedemont@us.ibm.com>. r=mkaply. r=wtc.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH
Modified files: _os2.h primpl.h os2thred.c


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140061 18797224-902f-48f8-a5cc-f745e15eee43
2003-03-22 14:55:26 +00:00
wtc%netscape.com
e893d35bcf Do not use cygwin-wrapper if we are using MKS Korn Shell. We determine
whether we are using MKS Korn shell by searching for semicolons (;) in the
PATH.  Actually cygwin-wrapper works under MKS Korn shell, but it suddenly
stopped working on our Windows NT build machine recently, and I can't
figure out why.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@140006 18797224-902f-48f8-a5cc-f745e15eee43
2003-03-22 01:10:13 +00:00
wtc%netscape.com
041be16a63 Bug 195411: added the LL_MaxUint function and the LL_MAXUINT macro.
Modified Files: prlong.h nspr.def nspr_symvec.opt openvms.c prlong.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138830 18797224-902f-48f8-a5cc-f745e15eee43
2003-03-04 02:10:13 +00:00
wtc%netscape.com
9af1b56c99 Bug 192797: improved the implementation of PR_Poll for Win32. Increase
FD_SETSIZE from the default 64 to 1024.  Make PR_Poll fail with
PR_INVALID_ARGUMENT_ERROR if we try to add more than FD_SETSIZE fd's to a
fd_set.  Do not pass an empty fd_set to select, and do not call select if
all three fd_sets are empty.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138682 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-28 03:45:27 +00:00
wtc%netscape.com
29fc2c4ab0 Bug 164841: use high performance timers (again) on OS/2.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138675 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-28 02:44:25 +00:00
wtc%netscape.com
cd38ae7657 Added a comment.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138670 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-28 02:23:15 +00:00
wtc%netscape.com
6f0aa11d91 Renamed MOD_REVISION_VERSION to MOD_PATCH_VERSION.
Modified Files: configure configure.in autoconf.mk.in nspr-config.in
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138669 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-28 01:52:53 +00:00
wtc%netscape.com
65752586a8 Removed obsolete PR_CLIENT_BUILD and PR_CLIENT_BUILD_UNIX make variables.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138595 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-27 04:11:09 +00:00
wtc%netscape.com
c79b2f00b5 Removed unused file module.df.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138594 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-27 03:30:51 +00:00
wtc%netscape.com
5c4c7fcea4 Bug 191948: a better implementation of PR_GetLibraryFilePathname for 32-bit
HP-UX.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138592 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-27 03:23:00 +00:00
wtc%netscape.com
107927eed1 Bug 191703: if struct tm has the nonstandard tm_zone and tm_gmtoff fields,
set them to the appropriate values.  Calling mktime is not really correct
(it assumes the local time zone) and does not work on NetBSD.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138562 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-27 00:01:02 +00:00
wtc%netscape.com
12fbcdc731 Bug 191270: added the ability to load a dynamic shared library (.dylib) on
Mac OS X. passed the XXX_RETURN_ON_ERROR flags to several Mac OS X
linker functions.  Correctly handle the return value of NSUnLinkModule.
Pass NSADDIMAGE_OPTION_WITH_SEARCHING to NSAddImage.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138561 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-26 23:57:47 +00:00
wtc%netscape.com
1b14acdf07 Sync up the NSPRPUB_PRE_4_2_CLIENT_BRANCH with the trunk.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138558 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-26 23:53:44 +00:00
wtc%netscape.com
e488c9e989 Backed out the previous checkin. Just noticed that the Mozilla trunk is
closed right now.


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138543 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-26 15:21:16 +00:00
wtc%netscape.com
18122b96e4 Sync up the NSPRPUB_PRE_4_2_CLIENT_BRANCH with the trunk.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138540 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-26 15:10:16 +00:00
wtc%netscape.com
10c9729981 Added to NSPRPUB_PRE_4_2_CLIENT_BRANCH.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138518 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-26 06:17:32 +00:00
wtc%netscape.com
fe37f9da99 Bug 193380: added IPv6 support on HP-UX 11i or later. Cleaned up the
detection of HP-UX B.11.* in configure.in.
Modified Files: configure.in configure _hpux.h
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138516 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-26 06:09:20 +00:00
seawood%netscape.com
4714f9ce6d Only force the use of absolute symlinks on Darwin when building Mozilla.
Bug #193164 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138487 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-26 00:48:56 +00:00
wtc%netscape.com
5c09a21158 Bug 192015: implemented the PR_GetLibraryFilePathname function for OpenVMS.
The patch is contributed by Colin Blakes <colin@theblakes.com>.
NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138455 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-25 15:47:29 +00:00
wtc%netscape.com
bfd8ebf042 Bug 191823: implement the PR_GetLibraryFilePathname function for OS/2. The
patch is contributed by Julien Pierre <jpierre@netscape.com>.
NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138453 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-25 15:41:01 +00:00
wtc%netscape.com
b976bf1590 Bug 193007: export PR_CreateThread and PR_SetError and new NSPR 4.3
symbols.  Added stubs so that PR_CreateThread ended up in its old position.
The patch is contributed by Colin Blakes <colin@theblakes.com>.
Modified Files: nspr_symvec.opt md/unix/openvms.c
NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138449 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-25 15:21:14 +00:00
wtc%netscape.com
b7006c1c72 Bug 186745: Use the BSD getifaddrs() function to query the presence of
IPv4 and IPv6 network interfaces on NetBSD.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138447 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-25 15:08:45 +00:00
wtc%netscape.com
d58a5a025a Bug 194298: inherit from the shell instead of the parent. The patch is
contributed by Michael Kaply <mkaply@us.ibm.com>.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138389 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-24 22:48:22 +00:00
seawood%netscape.com
ed03fa0b40 Default to using absolute symlinks when building on Darwin.
Bug #193164 r=ccarlen


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138296 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-23 15:54:21 +00:00
wtc%netscape.com
a252d5100e Backed out the previous checkin. Mozilla Tinderbox is failing a test. I
just wanted to rule out the previous checkin as a possible cause.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138257 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-23 02:38:14 +00:00
wtc%netscape.com
3c53b48888 Bug 191270: added the ability to load a dynamic shared library (.dylib) on
Mac OS X.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138247 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-23 00:30:35 +00:00
wtc%netscape.com
634c38511a Bug 186745: on FreeBSD, use the getifaddrs function to query the presence
of IPv4 and IPv6 network interfaces.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138239 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-22 22:50:13 +00:00
wtc%netscape.com
a831031ce8 Bug 192589: added a comment explaining what the bug fix does.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138231 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-22 20:30:57 +00:00
wtc%netscape.com
832b5c951b Bug 192589: keep querying the presence of IPv4 and IPv6 interfaces until
at least one is up.  This allows us to detect the local machine going from
offline to online.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138227 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-22 20:09:40 +00:00
wtc%netscape.com
296789b515 Cause Mozilla trunk Tinderboxes to rebuild.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138190 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-22 15:09:28 +00:00
wtc%netscape.com
bbc917ac2c Bug 193969: implemented atomic routines for Darwin PPC in assembly.
Changed old name "Rhapsody" to new name "Darwin".
Modified files: configure configure.in _darwin.h darwin.c
Added file: os_Darwin_ppc.s
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138189 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-22 15:08:29 +00:00
(no author)
062ca8ed3b This commit was manufactured by cvs2svn to create branch
'NSPRPUB_PRE_4_2_CLIENT_BRANCH'.

git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138188 18797224-902f-48f8-a5cc-f745e15eee43
2003-02-22 15:00:14 +00:00
wtc%netscape.com
62cf5416ed Removed the temporary fix in the previous checkin.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136708 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-21 02:02:21 +00:00
wtc%netscape.com
b35deed636 Temporary fix for Mozilla trunk tinderbox build bustage on Linux. Will
remove this temporary fix after I figure out how to cause
pr/src/linking/Makefile to be regenerated.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136700 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-20 21:26:01 +00:00
wtc%netscape.com
a6d5401310 Bug 188439: fixed a bug in the PR_Poll implementation for
_PR_POLL_WITH_SELECT.  We could still call FD_SET if the osfd was larger
than FD_SETSIZE.  Fixed the bug that _PR_POLL_WITH_SELECT was defined after
the system header files had been included.  Need to define it on the
compile command line.  Define _USE_BIG_FDS on HP-UX.  Because that macro
increases the size of fd_set to about 7500 bytes and PR_Poll allocates 3
fd_sets on the stack, also increased the minimum thread stack size to 128KB
on HP-UX.
Modified Files: configure configure.in _hpux.h _osf1.h ptio.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136697 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-20 20:50:00 +00:00
wtc%netscape.com
8f30a69328 Forced the Mozilla trunk tinderboxes to rebuild.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136695 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-20 20:14:09 +00:00
wtc%netscape.com
c5778af528 Bug 185687: added PR_CallOnceWithArg, a version of PR_CallOnce that allows
the callers to pass an argument to the call-once function.
Modified files: prinit.h nspr.def prinit.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136694 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-20 20:13:09 +00:00
wtc%netscape.com
31556c8c66 Bug 189332: Implemented the new function PR_GetLibraryFilePathname for
AIX, HP-UX, Linux, Mac OS X, OSF1, Solaris, and Windows.  Added the new
error code PR_LIBRARY_NOT_LOADED_ERROR for the error condition that the
library specified by "name" and "addr" is not loaded.  Added a new test,
libfilename.c.  Extended the PR_GetLibraryName function to not prepend any
directory if the first argument "dir" is NULL.  The OSF1 implementation was
contributed by Steve Streeter <Stephen.Streeter@hp.com>.
Modified files: prerr.h prlink.h nspr.def pr/src/linking/Makefile.in
prlink.c compile-et.pl prerr.c prerr.et prerr.properties
pr/tests/Makefile.in runtests.ksh runtests.sh
Added file: pr/tests/libfilename.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136693 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-20 20:10:39 +00:00
wtc%netscape.com
f1caca8f28 Bug 80082: need to install libnspr_flt4.so in dist/bin too, for the Mozilla
client.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136683 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-20 16:32:06 +00:00
wtc%netscape.com
b68777bb04 Forced the Mozilla trunk tinderboxes to rebuild.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136677 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-20 16:02:42 +00:00
wtc%netscape.com
b7222a640f Bug 134113: make NSPR build on Win32 using MinGW gcc. The patch is
contributed by Chris Seawood <seawood@cls.org> and Dan Mosedale
<dmose@mozilla.org>. r=wtc.
Modified files: configure configure.in config/Makefile.in autoconf.mk.in
now.c rules.mk lib/ds/Makefile.in lib/libc/src/Makefile.in
lib/msgc/src/Makefile.in prtypes.h _winnt.h pr/src/Makefile.in prmapopt.c
pr/src/md/windows/Makefile.in ntio.c ntmisc.c pr/tests/Makefile.in
runtests.ksh pr/tests/dll/Makefile.in
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136676 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-20 16:01:40 +00:00
(no author)
83b20196fd This commit was manufactured by cvs2svn to create branch
'NSPRPUB_PRE_4_2_CLIENT_BRANCH'.

git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136466 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-17 01:03:48 +00:00
wtc%netscape.com
0e5e179ac0 Forced the Mozilla trunk tinderbox to rebuild.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136463 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-17 00:47:58 +00:00
wtc%netscape.com
aa0d3878b0 Bug 168228: added IPv6 support for Darwin (Mac OS X). Added two new
feature macros _PR_HAVE_INET_NTOP and _PR_GHBA_DISALLOW_V4MAPPED to
handle the differences of Darwin's IPv6 sockets implementation and
other platforms' implementations.
Modified files: _aix.h _bsdi.h _darwin.h _freebsd.h _irix.h _linux.h
_netbsd.h _openvms.h _osf1.h _solaris.h prnetdb.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136452 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-16 23:09:16 +00:00
wtc%netscape.com
ff918e3023 MACOS_DEPLOYMENT_TARGET only needs to be defined if we are building on
Mac OS X.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136353 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-15 01:45:37 +00:00
wtc%netscape.com
eff44aeb09 Bug 185034: updated the OpenVMS symbol vector tables for NSPR 4.3.
The patch is contributed by Colin Blake <colin@theblakes.com>.
Modified Files: nspr_symvec.opt plds_symvec.opt plc_symvec.opt
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136346 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-14 23:59:31 +00:00
wtc%netscape.com
2b3edd51c5 Bug 186599: 1. added support for relative paths to PR_LoadLibrary on
Mac OS X. 2. Reordered the Mac code in pr_LoadLibraryByPathName to try
loading various kinds of shared libraries in the order of most likely
success.  The patch is contributed by Conrad Carlen <ccarlen@netscape.com>.
r=wtc. sr=sfraser.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136341 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-14 23:27:27 +00:00
wtc%netscape.com
e802099f75 Bug 188396: don't use ftime because its 32-bit timestamp will overflow
around year 2038.  Use GetSystemTimeAsFileTime instead.  The patch is
contributed by timeless@bemail.org.
Modified files: config/now.c _win95.h _winnt.h ntio.c ntmisc.c w95io.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136306 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-14 13:24:12 +00:00
wtc%netscape.com
b4911cc67f Bug 188976: avoid calculating the difference of two unsigned integer if
the difference is really a negative number.  Thanks to Rick Swift for the
patch.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136283 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-14 02:08:09 +00:00
wtc%netscape.com
5476ffbf2e 1. Use $(CC) (the compiler) to build shared libraries on Solaris. Added
the -z defs linker flag back.
Modified files: configure configure.in lib/ds/Makefile.in
lib/libc/src/Makefile.in pr/src/Makefile.in
2. Let pr/src/md/unix/Makefile.in be responsible for removing the
pr/src/cpu directory because it creates that directory.  Note that the
'clean' target does not remove the directory because it doesn't remove
the .so's either.
Modified files: pr/src/Makefile.in, pr/src/md/unix/Makefile.in
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@136042 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-09 01:16:01 +00:00
wtc%netscape.com
420220bbfc Forced Mozilla trunk tinderbox to rebuild.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135973 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-08 03:34:09 +00:00
wtc%netscape.com
4d70379b09 The PTDebug type doesn't need to be defined in optimized builds.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135972 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-08 03:31:24 +00:00
wtc%netscape.com
e51927c7f5 A temporary fix for the Solaris gcc build. Removed the -z defs linker flag
because gcc-compiled objects reference symbols not defined in -lc.  The
correct fix is to use gcc to build the shared libraries, as we do on Linux.
Modified Files: configure.in configure
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135939 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-07 20:27:07 +00:00
seawood%netscape.com
c1a35027d0 Use quotes instead of angle brackets to fix classic mac bustage.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135937 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-07 19:18:08 +00:00
wtc%netscape.com
b4677c70b5 Forced the Mozilla trunk Tinderboxes to rebuild.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135935 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-07 15:33:51 +00:00
wtc%netscape.com
b759dc460d Brought the NSPRPUB_PRE_4_2_CLIENT_BRANCH in synch with the NSPR trunk.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135934 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-07 15:30:26 +00:00
(no author)
384a921bde This commit was manufactured by cvs2svn to create branch
'NSPRPUB_PRE_4_2_CLIENT_BRANCH'.

git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135928 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-07 04:52:26 +00:00
wtc%netscape.com
cb99c9a0ac Bug 183907: increase the default and minimum thread stack size to 128K on
AIX because bos.rte.libc 4.3.3.88 includes a fix for a security bug that
greatly increases the amount of stack space used when calling functions
like gethostbyname.  Thanks to Philip K. Warren <pkw@us.ibm.com> for the
fix.  Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH.


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135903 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-06 22:16:19 +00:00
wtc%netscape.com
a44c1e9128 Bug 176881: we should also look at the high 32 bits of the performance
counter frequency.  Ignoring the high part of the frequency will cause
our interval timer code to malfunction if the high part is not zero.
Also took the opportunity to simplify the arithmetics.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135171 18797224-902f-48f8-a5cc-f745e15eee43
2002-12-12 14:55:55 +00:00
wtc%netscape.com
aa4dc0f434 Bug 180293: moved the OpenVMS build from the POSIX subsystem to native VMS
(GNV).  The patch is contributed by Colin Blakes <colin@theblakes.com>.
Modified Files: configure configure.in rules.mk pr/include/md/Makefile
        openvms.c
Added Files: plds_symvec.opt plc_symvec.opt nspr_symvec.opt
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135158 18797224-902f-48f8-a5cc-f745e15eee43
2002-12-12 01:47:51 +00:00
(no author)
fbb4e7e5b8 This commit was manufactured by cvs2svn to create branch
'NSPRPUB_PRE_4_2_CLIENT_BRANCH'.

git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135157 18797224-902f-48f8-a5cc-f745e15eee43
2002-12-12 01:41:32 +00:00
wtc%netscape.com
1aec53be0d Bug 180293: ported nsinstall.c to native VMS (GNV) environment. The patch
is contributed by Colin Blakes <colin@theblakes.com>. r=brendan.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135152 18797224-902f-48f8-a5cc-f745e15eee43
2002-12-12 00:29:08 +00:00
wtc%netscape.com
f137052ff5 Bug 175423: fixed the problems pointed out by gcc's -pedantic-errors flag.
Modified files: prwin16.h unix.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135149 18797224-902f-48f8-a5cc-f745e15eee43
2002-12-12 00:19:57 +00:00
seawood%netscape.com
5d97bbe8b3 Add $(LDFLAGS) to the local nsinstall link command.
Bug #88283 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135147 18797224-902f-48f8-a5cc-f745e15eee43
2002-12-12 00:13:46 +00:00
seawood%netscape.com
ad99147281 Fix CFData memory leak.
Bug #131306 r=beard


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@135110 18797224-902f-48f8-a5cc-f745e15eee43
2002-12-11 05:05:42 +00:00
wtc%netscape.com
4e48c1131c Bug 162358: added NSPR file I/O functions that take UTF16 pathnames. The
patch is contributed by Roy Yokoyama <yokoyama@netscape.com>.
Modified Files: config/config.mk prio.h prtypes.h _win95.h primpl.h
                prdir.c prfile.c w95io.c ptio.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@134522 18797224-902f-48f8-a5cc-f745e15eee43
2002-11-27 03:08:35 +00:00
seawood%netscape.com
659b8e4810 Fix egrep syntax.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@134364 18797224-902f-48f8-a5cc-f745e15eee43
2002-11-23 09:43:37 +00:00
seawood%netscape.com
ff10d201e1 Properly detect OS_ARCH when building on Win32 ME.
Bug #180822 r=dmose,wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@134360 18797224-902f-48f8-a5cc-f745e15eee43
2002-11-23 05:57:40 +00:00
seawood%netscape.com
5ceeac481a Remove $(CONFIG) from real_install target. It was a typo anyway.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@133467 18797224-902f-48f8-a5cc-f745e15eee43
2002-11-09 09:23:31 +00:00
seawood%netscape.com
3167cff0e0 Add CFM, CFBundle and mach-o library loading support to OSX NSPR. Support is only available if the carbon toolkit is detected at build time.
Original patch by Patrick Beard <beard@netscape.com> with modifications by Wan-Teh Chang <wtc@netscape.com>.
Bug #131306 r=cls


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@133051 18797224-902f-48f8-a5cc-f745e15eee43
2002-11-06 00:54:56 +00:00
wtc%netscape.com
3e1cfd4175 Bug 176543: handle the case of invoking a program wit no arguments. The
command line should be an empty string in that case.  Initialize newEnvp.
The patch is contributed by Michael Kaply <mkaply@us.ibm.com>.
a=roc+moz for NSPRPUB_PRE_4_2_CLIENT_BRANCH.


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@132761 18797224-902f-48f8-a5cc-f745e15eee43
2002-10-31 05:02:05 +00:00
wtc%netscape.com
d91128ff88 Bug 168831: fixed the bug that PR_Poll was ignoring out_flags reported by
the poll methods of I/O layers on the Mac.  This patch was written by
jgmyers and reviewed by sfraser and wtc. a=dbaron for
NSPRPUB_PRE_4_2_CLIENT_BRANCH checkin.


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@132524 18797224-902f-48f8-a5cc-f745e15eee43
2002-10-25 12:41:00 +00:00
wtc%netscape.com
b2644e4cae Bug 165602: checked in Brian Ryner's changes to allow Mac OS X 10.2 builds
to run on 10.1.  r=wtc.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH
Modified files: configure configure.in pr/src/misc/prdtoa.c


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@130522 18797224-902f-48f8-a5cc-f745e15eee43
2002-09-26 12:46:29 +00:00
wtc%netscape.com
13b3cd07c5 Bug 168993: PR_Poll should clear out_flags for null fd's. r=jgmyers.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH
Modified files: bfile.c os2poll.c uxpoll.c w32poll.c ptio.c


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@130352 18797224-902f-48f8-a5cc-f745e15eee43
2002-09-24 14:21:06 +00:00
wtc%netscape.com
8d382c566d Bug 169569: always use the Solaris ld (/usr/ccs/bin/ld) to link NSPR
shared libraries.  r=cls.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@129982 18797224-902f-48f8-a5cc-f745e15eee43
2002-09-19 00:14:30 +00:00
wtc%netscape.com
29f81d6eb2 Bug 72100: added macros for the maximum and minimum values of PRInt8,
PRUint8, PRInt16, PRUint16, PRInt32, and PRUint32. r=jkeiser.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@129901 18797224-902f-48f8-a5cc-f745e15eee43
2002-09-18 14:20:01 +00:00
wtc%netscape.com
9dcbad4848 Bug 167375: configuration changes needed for building on BSD/OS 5.0.
This patch is contributed by lidl@pix.net.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH
Modified files: configure.in configure _bsdi.h


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@129349 18797224-902f-48f8-a5cc-f745e15eee43
2002-09-12 14:53:38 +00:00
wtc%netscape.com
51d87ad4ea Bug 166716: do not assert in the unimplemented memory-mapped file
functions.  It is sufficient for them to fail with the not implemented
error.
Modified Files: bmmap.c macio.c os2misc.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@128931 18797224-902f-48f8-a5cc-f745e15eee43
2002-09-06 01:42:09 +00:00
wtc%netscape.com
68fcb7b043 Dummy change to force the Mozilla tinderbox to rebuild.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@128344 18797224-902f-48f8-a5cc-f745e15eee43
2002-08-28 14:44:18 +00:00
wtc%netscape.com
bec171cbcd Sync'ed up with the tip.
Modified files: repackage.sh plarena.c prio.h prthread.h _solaris.h
_solaris32.cfg _solaris64.cfg _winnt.h primpl.h prmem.c uxshm.c ntthread.c
prinit.c prnetdb.c prtpool.c ptthread.c prucpu.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@128343 18797224-902f-48f8-a5cc-f745e15eee43
2002-08-28 14:42:54 +00:00
wtc%netscape.com
d9d45c3ab8 1. Checked in the fix for bug 157241 to enable debugging with gcc/gdb on
Linux with compiler optimizations on.
2. Cleaned up the fix for bug 137059. Replaced MOZ_DEBUG_ENABLE_DEFS by
DEFINES.
3. Backed out portions of the fix for bug 161461 that broke the build under
MKS toolkit.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@127922 18797224-902f-48f8-a5cc-f745e15eee43
2002-08-23 03:13:49 +00:00
seawood%netscape.com
8101327e39 Fix build problem caused by having spaces in the username.
Bug #137059 r=dmose r=mcs


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@126987 18797224-902f-48f8-a5cc-f745e15eee43
2002-08-10 09:02:49 +00:00
seawood%netscape.com
aaada61daa Add compiler test for +Olit=all support for hpux cc.
Bug #146426 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@126929 18797224-902f-48f8-a5cc-f745e15eee43
2002-08-10 01:06:52 +00:00
wtc%netscape.com
8d05252a15 Merged the fix for bug 158396 from the tip (rev. 3.27 and rev. 3.28) to
NSPRPUB_PRE_4_2_CLIENT_BRANCH.


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@126860 18797224-902f-48f8-a5cc-f745e15eee43
2002-08-09 01:46:31 +00:00
seawood%netscape.com
6e948e2fd2 Misc build cleanup v1:
Cleanup win32 configure output. Remove EMACS
Bug #161461 r=bryner


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@126802 18797224-902f-48f8-a5cc-f745e15eee43
2002-08-08 21:35:45 +00:00
seawood%netscape.com
6f966da13d Remove explicitly linking against -lc on linux as it could break backwards binary compatibility. Linking using gcc/g++ should automatically link against libc.
Thanks to Franz.Sirl-kernel@lauterbach.com for the patch.
Bug #72766 r=wtc,cls


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@126659 18797224-902f-48f8-a5cc-f745e15eee43
2002-08-07 11:34:44 +00:00
seawood%netscape.com
7da07a105c Remove explicitly linking against -lc on linux as it could break backwards binary compatibility. Linking using gcc/g++ should automatically link against libc.
Thanks to Franz.Sirl-kernel@lauterbach.com for the patch.
Bug #72766 r=wtc,cls


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@126658 18797224-902f-48f8-a5cc-f745e15eee43
2002-08-07 11:11:39 +00:00
wtc%netscape.com
e962ef5ac7 Bug 149195: added IPv6 support for IRIX. The patch is contributed by
nickb@adacel.com.au (Nick Blievers).
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@126562 18797224-902f-48f8-a5cc-f745e15eee43
2002-08-07 00:18:01 +00:00
sfraser%netscape.com
462511e1a2 Fix bug 158927 -- controls not drawing correctly in QuickTime plugin. The problem was that the thread scheduling Timer Task would call WakeUpProcess() every time when we are blocked and not servicing NSPR threads (for example when tracking plugin controls). A side effect of this is to prevent Mac OS X from flushing the window back buffers, hence the drawing issues. Fix is to only call WakeUpProcess() if we've been through the scheduler since the last time. r=sdaglye, wtc. a=asa.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@125920 18797224-902f-48f8-a5cc-f745e15eee43
2002-07-27 00:56:25 +00:00
wtc%netscape.com
1552e34dcb Dummy white space change to cause Tinderbox to rebuild.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@125678 18797224-902f-48f8-a5cc-f745e15eee43
2002-07-24 05:07:16 +00:00
wtc%netscape.com
fb703b99e4 Bug 153525: backed out the previous checkin because sfraser checked in a
better fix (in ptthread.c).
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@125677 18797224-902f-48f8-a5cc-f745e15eee43
2002-07-24 05:04:58 +00:00
sfraser%netscape.com
5e5c30547e Tidy up the whitespace from the last checkin. Ooops.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@125674 18797224-902f-48f8-a5cc-f745e15eee43
2002-07-24 04:06:42 +00:00
sfraser%netscape.com
98b0e85fc5 Fixing the MachO (DARWIN) build, which broke when wtc checked in a patch in bug 153525. r=bryner.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@125673 18797224-902f-48f8-a5cc-f745e15eee43
2002-07-24 04:06:07 +00:00
wtc%netscape.com
ba6f5bd230 Dummy white space change to cause Tinderbox to rebuild.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@125670 18797224-902f-48f8-a5cc-f745e15eee43
2002-07-24 03:47:54 +00:00
wtc%netscape.com
de533a4e7a Bug 153525: fixed build breakage caused by the previous checkin.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@125668 18797224-902f-48f8-a5cc-f745e15eee43
2002-07-24 03:45:36 +00:00
wtc%netscape.com
0d6b62cf32 Dummy white space change to force the Tinderbox to rebuild.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@125656 18797224-902f-48f8-a5cc-f745e15eee43
2002-07-24 00:03:32 +00:00
wtc%netscape.com
5cc0d15670 Bug 153525: fixed build problems under gcc2 on Mac OS X. r=bryner.
Modified files: _pth.h darwin.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@125654 18797224-902f-48f8-a5cc-f745e15eee43
2002-07-24 00:00:39 +00:00
wtc%netscape.com
9aa705fc68 Bug 141614: restored Matthew Zahorik's net_server nonblocking connect
logic, which accidentally got deleted when the BONE changes were checked
in. This patch was contributed by Arougthopher
<arougthopher@lizardland.net>. r=wtc. a=scc.
Modified Files: bfile.c bmisc.c bnet.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@125451 18797224-902f-48f8-a5cc-f745e15eee43
2002-07-18 06:38:56 +00:00
seawood%netscape.com
3cd0d7d092 Remove DARWIN define from osx builds as it cripples the feature set provided by OSX headers.
Bug #154232 r=wtc sr=scc a=scc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@125440 18797224-902f-48f8-a5cc-f745e15eee43
2002-07-18 04:09:30 +00:00
wtc%netscape.com
55a14aa84e Merged the fix for bug 157347 from the tip (rev. 3.15) to
NSPRPUB_PRE_4_2_CLIENT_BRANCH. r=wtc. a=asa.


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@125354 18797224-902f-48f8-a5cc-f745e15eee43
2002-07-17 01:47:10 +00:00
sfraser%netscape.com
1b4d41ebff Fix for bug 139802; slow certificate authentication on Mac OS X. This was caused by the application spending lots of time in WaitNextEvent, called from its main event loop (which is a good thing, in terms of CPU usage). The problem is that NSPR threads then don't get enough time. This patch give the process scheduler a kick in the pants when NSPR is going to switch to another of its threads. r=wtc, r=sdagley
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@124920 18797224-902f-48f8-a5cc-f745e15eee43
2002-07-10 01:14:23 +00:00
wtc%netscape.com
0ec0c5689c Merged the fix for bug 119098 from the trunk (rev. 1.38).
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@124783 18797224-902f-48f8-a5cc-f745e15eee43
2002-07-09 00:11:38 +00:00
wtc%netscape.com
44888d293d Set NSPR version to 4.2.1.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@124336 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-29 00:34:36 +00:00
wtc%netscape.com
5b89afc11e Merged the fix for bug 150157 from the tip (rev. 3.13).
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123871 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-22 14:42:30 +00:00
seawood%netscape.com
fac3f266cb Explicitly use sh when calling the cygwin-wrapper script as some developers are reporting that their shell can't call the script directly.
Fallout from bug #141834


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123527 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-18 21:36:45 +00:00
seawood%netscape.com
f46f21240c Fixing win32 gmake builds lack of debugging information problem by working around a combination MSVC & cygwin make deficiencies:
* We must use the full path to the source file when calling MSVC so that debugging information shows up in the object files.
* Because of cygwin's use of /cygdrive when using full paths, we must use a cygwin-wrapper script in some cases to allow native win32 programs to use a fully qualified cygwin path.
* We have to call configure using the full path so that $(srcdir) contains the
full path in the Makefiles. The rules have been changed for win32 so that it
always use $(srcdir)/$*.{c,cpp} as the sourcefile name even when the file is in
the cwd.  This works around both the /cygdrive issue and the msvc's path info
optimization.
* We still use the wrapper when calling rc.exe & nsinstall.  nsinstall
frequently takes multiple args and is called all over the tree so changing each
calling site is going to be expensive.	(I'll have to check  the logs again but
I think the rc wrapping can go.)
* nspr & ldap still use the wrappers for all native win32 progs.  Neither nspr
nor ldap uses the acoutput-fast.pl script to speed up the substitution of
@srcdir@ into their Makefiles so, makefile substitution will break if we use
dos-paths.
* In the handful of directories where we copy srcfiles from another directory
in lieu of using VPATHs, we have to now copy those files to $(srcdir) so that
the default rules can find them.
Bug #141834 r=leaf,wtc,dmose,mcs


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123447 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-17 18:13:35 +00:00
seawood%netscape.com
934fd83b5a Fixing win32 gmake builds lack of debugging information problem by working around a combination MSVC & cygwin make deficiencies:
* We must use the full path to the source file when calling MSVC so that debugging information shows up in the object files.
* Because of cygwin's use of /cygdrive when using full paths, we must use a cygwin-wrapper script in some cases to allow native win32 programs to use a fully qualified cygwin path.
* We have to call configure using the full path so that $(srcdir) contains the
full path in the Makefiles. The rules have been changed for win32 so that it
always use $(srcdir)/$*.{c,cpp} as the sourcefile name even when the file is in
the cwd.  This works around both the /cygdrive issue and the msvc's path info
optimization.
* We still use the wrapper when calling rc.exe & nsinstall.  nsinstall
frequently takes multiple args and is called all over the tree so changing each
calling site is going to be expensive.	(I'll have to check  the logs again but
I think the rc wrapping can go.)
* nspr & ldap still use the wrappers for all native win32 progs.  Neither nspr
nor ldap uses the acoutput-fast.pl script to speed up the substitution of
@srcdir@ into their Makefiles so, makefile substitution will break if we use
dos-paths.
* In the handful of directories where we copy srcfiles from another directory
in lieu of using VPATHs, we have to now copy those files to $(srcdir) so that
the default rules can find them.
Bug #141834 r=leaf,wtc,dmose,mcs


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123440 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-17 17:09:57 +00:00
seawood%netscape.com
30fcb986ac Fixing win32 gmake builds lack of debugging information problem by working around a combination MSVC & cygwin make deficiencies:
* We must use the full path to the source file when calling MSVC so that debugging information shows up in the object files.
* Because of cygwin's use of /cygdrive when using full paths, we must use a cygwin-wrapper script in some cases to allow native win32 programs to use a fully qualified cygwin path.
* We have to call configure using the full path so that $(srcdir) contains the
full path in the Makefiles. The rules have been changed for win32 so that it
always use $(srcdir)/$*.{c,cpp} as the sourcefile name even when the file is in
the cwd.  This works around both the /cygdrive issue and the msvc's path info
optimization.
* We still use the wrapper when calling rc.exe & nsinstall.  nsinstall
frequently takes multiple args and is called all over the tree so changing each
calling site is going to be expensive.	(I'll have to check  the logs again but
I think the rc wrapping can go.)
* nspr & ldap still use the wrappers for all native win32 progs.  Neither nspr
nor ldap uses the acoutput-fast.pl script to speed up the substitution of
@srcdir@ into their Makefiles so, makefile substitution will break if we use
dos-paths.
* In the handful of directories where we copy srcfiles from another directory
in lieu of using VPATHs, we have to now copy those files to $(srcdir) so that
the default rules can find them.
Bug #141834 r=leaf,wtc,dmose,mcs


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123439 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-17 17:07:17 +00:00
wtc%netscape.com
242040f50f The previous checkin didn't work. Backed it out.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123304 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-14 05:36:42 +00:00
wtc%netscape.com
5b3fa140c2 Bug 151711: gcc on OSF1 needs to use the -mieee flag.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123303 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-14 05:32:42 +00:00
wtc%netscape.com
ae92dd97e1 Bug 151722: addr is in shared memory and is modified by another process, so
it needs to be declared volatile.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123301 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-14 05:27:15 +00:00
wtc%netscape.com
8807f72717 Bug 125819: fixed problems compiling using gcc on OSF1. The patch is
contributed by Chris Seawood <seawood@netscape.com>.
Modified Files: configure configure.in unix.c uxrng.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123292 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-14 03:22:14 +00:00
wtc%netscape.com
1ec85ef2b7 Cause Tinderbox to rebuild.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123269 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-13 22:37:02 +00:00
wtc%netscape.com
0f4e0256e7 Use +DD64 instead of +DA2.0W. +DD64 works for both PA-RISC and IA-64.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123268 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-13 22:36:20 +00:00
wtc%netscape.com
1a17e61a8c Bugzilla bug 142345: fixed mistakes in _MD_OpenSharedMemory and
_MD_CloseSharedMemory.  Thanks to Vladimir Golitsin
<vgolitsin@mindspring.com> for the bug report and bug fix.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123267 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-13 22:34:35 +00:00
wtc%netscape.com
a9314e8206 Bugzilla bug 135008: fixed the bug that PL_Base64Decode may step before
the buffer if the source string length is 0.  Thanks to Roger Chickering
<rogc@netscape.com> for the bug fix.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123266 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-13 22:33:39 +00:00
wtc%netscape.com
22484e0f16 Synch up with the tip.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123265 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-13 22:32:41 +00:00
wtc%netscape.com
441e5f0afc Updated the vercheck.c test for NSPR 4.2.1.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123264 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-13 22:32:03 +00:00
wtc%netscape.com
e2cf2a89cc Set NSPR version to 4.2.1 Beta.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123263 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-13 22:31:23 +00:00
wtc%netscape.com
3389286c4f Bug 136458: removed the old -O workaround and use -m68020-60. The patch is
contributed by Richard Zidlicky <rz@linux-m68k.org>.  r=wtc.
Modified Files: configure.in configure Linux.mk
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123254 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-13 22:02:27 +00:00
wtc%netscape.com
646252ef8d Bug 144886: On platforms with gethostbyname2, add the infrastructure for
PR_GetIPNodeByName to implement PR_AI_ADDRCONFIG correctly.  Right now
only AIX implements the function to determine if the system has any IPv4
or IPv6 source address configured.  On other platforms PR_GetIPNodeByName
still behaves as if the system had both IPv4 and IPv6 source addresses
configured.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123239 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-13 20:50:23 +00:00
wtc%netscape.com
c8ee1542b5 Bug 97475: the new 'af' field needs to be moved to the end of the
PRFilePrivate structure because the OJI code in Sun Java 2 1.3-1
distribution is reading the 'md.osfd' field of this private structure.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123232 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-13 20:28:31 +00:00
wtc%netscape.com
00d985f770 Bug 97475: some platforms, such as OpenVMS, require us to pass the exact
socket address length to socket functions like accept.  Just fixed enough
of this problem for OJI to work with Mozilla on OpenVMS.
Modified Files: _openvms.h primpl.h ptio.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123226 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-13 17:59:21 +00:00
seawood%netscape.com
76c6977ab1 Fix real_install rules so that headers are still installed correctly if includedir is overridden on the commandline.
Bug #149483 r=blizzard


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123212 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-13 09:01:48 +00:00
wtc%netscape.com
45721b22e9 Bugzilla bug 142677: made --disable-ipv6 work on AIX. Removed the obsolete
file _aix32in6.cfg.
Modified files: configure.in configure _aix32.cfg
Removed file: _aix32in6.cfg
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123114 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-12 00:09:09 +00:00
wtc%netscape.com
80b3c89ef6 Bug 134099: Worked around two BeOS bugs. 1. connect does not implicitly
bind the socket. 2. accept does not return the peer's address.
Modified files: _beos.h prsocket.c bnet.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@123053 18797224-902f-48f8-a5cc-f745e15eee43
2002-06-11 20:08:10 +00:00
wtc%netscape.com
b8b9faae56 Bug 92516: _MD_gethostname returns the host's IP address on Mac so the
code that converts the fully qualified hostname to the unqualified hostname
is invalid for Mac.  Thanks to Roger D <rogerd@netscape.com> for the fix.
Modified Files: _macos.h prsystem.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@122420 18797224-902f-48f8-a5cc-f745e15eee43
2002-05-31 14:37:50 +00:00
seawood%netscape.com
0895b70225 Fix typo that was causing pthreads to be selected by default on OpenBSD even though we default to NSPR threads on that platform.
Bug #145560 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@122256 18797224-902f-48f8-a5cc-f745e15eee43
2002-05-29 08:01:42 +00:00
wtc%netscape.com
d5fae215bd Bugzilla bug 137736: Use "return 0" instead of exit(0) in the main()
functions of the configure test programs.  Miscellaneous changes to fix
compiler warnings about the configure test programs.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@120705 18797224-902f-48f8-a5cc-f745e15eee43
2002-05-03 17:41:26 +00:00
seawood%netscape.com
31c07f0a38 Restoring unlabelled 'MozillaHack's. Fixing Netscape uname bustage.
Bug #140869


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@120686 18797224-902f-48f8-a5cc-f745e15eee43
2002-05-03 10:02:09 +00:00
seawood%netscape.com
d12ded7de7 Sync config.guess & config.sub with official GNU copies.
Bug #140869 r=bryner


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@120684 18797224-902f-48f8-a5cc-f745e15eee43
2002-05-03 08:29:00 +00:00
wtc%netscape.com
2a79837d2e Bugzilla bug 141820: don't quote parameters when calling DosStart.
The patch is contributed by Michael Kaply <mkaply@us.ibm.com>.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@120576 18797224-902f-48f8-a5cc-f745e15eee43
2002-05-02 21:14:57 +00:00
wtc%netscape.com
3e481ed8a9 Force tinderbox to rebuild.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@120089 18797224-902f-48f8-a5cc-f745e15eee43
2002-04-27 05:05:15 +00:00
wtc%netscape.com
be5eb4d1b0 Backed out the fix for bug 121975. It doesn't work on Windows 95.
Modified Files: configure configure.in WIN32.mk _win95.h w95dllmain.c
w95thred.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@120087 18797224-902f-48f8-a5cc-f745e15eee43
2002-04-27 05:04:41 +00:00
seawood%netscape.com
da4d3cd5d7 Remove high performance timers from OS/2 and revert to default millisecond timer.
Thanks to Michael Kaply <mkaply@us.ibm.com> for the patch.
Bug #136958 r=cls


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@119613 18797224-902f-48f8-a5cc-f745e15eee43
2002-04-23 14:11:31 +00:00
wtc%netscape.com
ff7ace4326 Bugzilla bug 135448: removed a level of code to make semaphores faster.
This patch is contributed by Michael Kaply <mkaply@us.ibm.com>.
Modified files: _os2 os2cv.c os2vacpp.asm
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@118796 18797224-902f-48f8-a5cc-f745e15eee43
2002-04-11 21:50:00 +00:00
wtc%netscape.com
a3d19ae713 Bug 135450: OS/2 only - don't set priority if it is the default.
The patch is contributed by Michael Kaply <mkaply@us.ibm.com>. r=wtc.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@118795 18797224-902f-48f8-a5cc-f745e15eee43
2002-04-11 21:48:31 +00:00
wtc%netscape.com
1485ed52e2 Deleted a printf statement in the Neutrino builds. Bug 135692.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@118794 18797224-902f-48f8-a5cc-f745e15eee43
2002-04-11 21:47:29 +00:00
wtc%netscape.com
c2474c50d9 Merged the fixes for bug 136251 and bug 135119 on the
NSPRPUB_PRE_4_2_CLIENT_BRANCH.


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@118793 18797224-902f-48f8-a5cc-f745e15eee43
2002-04-11 21:46:14 +00:00
wtc%netscape.com
1de1f137f6 Force a rebuild of Tinderbox.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@117799 18797224-902f-48f8-a5cc-f745e15eee43
2002-03-31 17:24:26 +00:00
wtc%netscape.com
48912d8064 Force a rebuild of Tinderbox.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@117798 18797224-902f-48f8-a5cc-f745e15eee43
2002-03-31 17:18:43 +00:00
wtc%netscape.com
a1e3bba76d Bugzilla bug 133659: Merged the latest NSPR fixes from the tip into the
NSPRPUB_PRE_4_2_CLIENT_BRANCH.  a=asa (on behalf of drivers) for checkin
to the mozilla 1.0 trunk.


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@117797 18797224-902f-48f8-a5cc-f745e15eee43
2002-03-31 17:17:49 +00:00
sfraser%netscape.com
68ad5f8df6 Bug 133412: need to #include <Files.h> before <OpenTransport.h> for the buggy Universal Headers 3.4.1. Also change the GetDiskFragment param from the file name to the fragment name, for better debugging and Talkback. Changes to allow for upgrading to CodeWarrior Pro 7.2 tools. r=wtc, sr=scc, a=asa
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@117588 18797224-902f-48f8-a5cc-f745e15eee43
2002-03-27 04:08:30 +00:00
wtc%netscape.com
4c6ef885bb Force a recompile of NSPR in the SeaMonkey tinderboxes.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@116594 18797224-902f-48f8-a5cc-f745e15eee43
2002-03-14 23:25:20 +00:00
wtc%netscape.com
d5ec276d46 Bugzilla bug 129902: sync up the NSPR_PRE_4_2_CLIENT_BRANCH with the NSPR
tip.  a=dbaron on behalf of drivers@mozilla.org.


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@116593 18797224-902f-48f8-a5cc-f745e15eee43
2002-03-14 23:21:20 +00:00
seawood%netscape.com
50fdf0e9f4 Temporarily force NSPR to use -j1 to work around -j bug in pr/src/Makefile.in.
Bug #123423 r=cls a=asa


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@116586 18797224-902f-48f8-a5cc-f745e15eee43
2002-03-14 22:51:40 +00:00
wtc%netscape.com
8e59675eb9 Bugzilla bug 129633: changed default select for OS/2 to BSD_SELECT.
The patch is contributed by Michael Kaply <mkaply@us.ibm.com>.
r=wtc. a=brendan on behalf of drivers for mozilla 1.0.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@116312 18797224-902f-48f8-a5cc-f745e15eee43
2002-03-11 00:41:04 +00:00
sfraser%netscape.com
52a2279fbd Fix for bug 129364. Eliminate a window of time in which notifiers could fire when we hadn't set up the polling thread on the poll descriptors, which could cause lost notifications and FTP stalls. Also revert to PR_FAST_INTSON() from PR_INTSON(), which seems to fix a permanent stall issue on Mac OS X. r=wtc, a=asa
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@116254 18797224-902f-48f8-a5cc-f745e15eee43
2002-03-09 03:00:07 +00:00
sfraser%netscape.com
99794f3753 Workaround fix for a stall on launch on dual CPU OS X machines, that is caused by a race condition entering the critical section. Bug 99561. r=wtc, a=dbaron
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@115777 18797224-902f-48f8-a5cc-f745e15eee43
2002-03-05 00:54:27 +00:00
seawood%netscape.com
20342a469f Add -lrt/-lposix4 to OS_LIBS on Solaris so that Purify doesn't complain about the missing library when instrumenting libnspr.
Bug #124493 r=bryner a=asa


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@115369 18797224-902f-48f8-a5cc-f745e15eee43
2002-02-26 10:19:08 +00:00
seawood%netscape.com
40bf0afe64 Create shared libraries using $(CC) for FreeBSD.
Use -pthread as a linker flag instead of a compile flag on FreeBSD.
Thanks to Jeremy Lea <reg@shale.csir.co.za> for the patch.
bug #125857 r=wtc/cls a=asa


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@115366 18797224-902f-48f8-a5cc-f745e15eee43
2002-02-26 09:44:34 +00:00
seawood%netscape.com
bb73fa05f2 For nonblocking connections, wait for socket io if errno == EINTR, not EINPROGRESS.
Thanks to Paul Ashford <arougthopher@lizardland.net> for the patch.
Bug #70217 r=cls a=shaver


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@115211 18797224-902f-48f8-a5cc-f745e15eee43
2002-02-22 06:43:31 +00:00
sfraser%netscape.com
f4b5dcde31 Fix for bug 121951 -- make PR_Poll on Mac work with layered file descriptors. r=wtc, r=gordon
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@114857 18797224-902f-48f8-a5cc-f745e15eee43
2002-02-19 01:35:48 +00:00
sfraser%netscape.com
778860b285 Fix for bug 121952 -- make PR_ConnectContinue work on Mac, re-enabling non-blocking connects. r=wtc
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@114854 18797224-902f-48f8-a5cc-f745e15eee43
2002-02-19 01:10:06 +00:00
wtc%netscape.com
a299f2d06d Bugzilla bug 124981: Enable IPv6 support for FreeBSD.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@114674 18797224-902f-48f8-a5cc-f745e15eee43
2002-02-16 07:16:16 +00:00
seawood%netscape.com
da30c46fc1 Add "fast RAM semaphore" support.
Thanks to Mike Kaply <mkaply@us.ibm.com> for the patch.
Bug #125123 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@114648 18797224-902f-48f8-a5cc-f745e15eee43
2002-02-16 02:25:51 +00:00
seawood%netscape.com
399c2a3f45 Fix problem of "invisible" helper apps on OS/2.
Thanks to Mike Kaply <mkaply@us.ibm.com> for the patch.
Bug #125183 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@114645 18797224-902f-48f8-a5cc-f745e15eee43
2002-02-16 02:17:58 +00:00
seawood%netscape.com
19c2e24e10 Add workaround for missing addrlen in PRNetAddr & BONE failing getsockopt.
Thanks to Paul Ashford <arougthopher@lizardland.net> for the patch.
Bug #122364 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@114172 18797224-902f-48f8-a5cc-f745e15eee43
2002-02-10 21:37:07 +00:00
seawood%netscape.com
a54ea5e595 Add support for inheritable fds on BeOS.
Bug #96331 r=arougthopher@lizardland.net


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@114168 18797224-902f-48f8-a5cc-f745e15eee43
2002-02-10 20:55:14 +00:00
seawood%netscape.com
e383647c36 Implement MD process functions for BeOS.
Bug #96331 r=arougthopher@lizardland.net


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@114167 18797224-902f-48f8-a5cc-f745e15eee43
2002-02-10 20:52:29 +00:00
wtc%netscape.com
837aeae085 Bugzilla bug 117479: add the PR_ABS macro to NSPRPUB_PRE_4_2_CLIENT_BRANCH.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@113868 18797224-902f-48f8-a5cc-f745e15eee43
2002-02-07 03:15:11 +00:00
seawood%netscape.com
83c4a47dfc Remove check against fd->secret->md.connectionReturnValue as it always returns 0. Fixing page not loading due to nonblocking connection problem.
Bug #121327 r=arougthopher@lizardland.net


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@113306 18797224-902f-48f8-a5cc-f745e15eee43
2002-01-31 07:43:22 +00:00
sfraser%netscape.com
4c8204b07c Fix blocker bug 121326 (any SSL transaction causes Mac to freeze) by checking in temporary patch from bug 106188; this reverts Mac to using blocking connects. r=wtc.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@113058 18797224-902f-48f8-a5cc-f745e15eee43
2002-01-28 23:14:42 +00:00
wtc%netscape.com
c061e61274 Bugzilla bug 119834: checked the fix into NSPRPUB_PRE_4_2_CLIENT_BRANCH.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@112982 18797224-902f-48f8-a5cc-f745e15eee43
2002-01-27 03:55:21 +00:00
sfraser%netscape.com
14ae559e96 Removing obsolete .toc file (supplanted by XML projects)
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@112771 18797224-902f-48f8-a5cc-f745e15eee43
2002-01-24 23:48:31 +00:00
sfraser%netscape.com
94730cea7a Fixing bug 119329 -- make NSPR use tree-wide prefix files on Mac, so that we get the same traceback table and other compiler settings as the other projects. r=pinkerton, r/a=wtc
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@112768 18797224-902f-48f8-a5cc-f745e15eee43
2002-01-24 23:40:48 +00:00
sdagley%netscape.com
4385a6e2e6 Fix #99561. Use MPSemaphore calls rather than WaitNextEvent to pause CPU under Mac OS X - fixes thread deadlock and improves performance. r=wtc,sr=sfraser,a=dbaron
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@112532 18797224-902f-48f8-a5cc-f745e15eee43
2002-01-22 22:11:48 +00:00
wtc%netscape.com
b1099528c0 Bugzilla bug 100776: Merged the fix onto the NSPRPUB_PRE_4_2_CLIENT_BRANCH.
Modified files: configure configure.in _os2.h _os2_errors.h prsocket.c
os2_errors.c os2poll.c os2sock.c


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@112529 18797224-902f-48f8-a5cc-f745e15eee43
2002-01-22 21:57:42 +00:00
wtc%netscape.com
27b3baf4bb Checked in the fix for bug 118631 on the NSPRPUB_PRE_4_2_CLIENT_BRANCH.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@111993 18797224-902f-48f8-a5cc-f745e15eee43
2002-01-12 01:06:32 +00:00
wtc%netscape.com
d827d854f6 Bugzilla bug 119406: checked in the fix on the
NSPRPUB_PRE_4_2_CLIENT_BRANCH.


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@111936 18797224-902f-48f8-a5cc-f745e15eee43
2002-01-11 05:37:49 +00:00
seawood%netscape.com
3277a5aed9 Landing BeOS BONE support.
Thanks to Matthew Zahorik <maz@albany.net> & Paul Ashford <arougthopher@lizardland.net> for the patch.
Bug #71697 r=wtc/cls


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@111802 18797224-902f-48f8-a5cc-f745e15eee43
2002-01-10 09:50:36 +00:00
wtc%netscape.com
b9a8b1efbc Bugzilla bug 112987: correctly detect the FreeBSD versions in which poll()
was added to libc and libc_r.  Thanks to Jeremy Lea for pointing me to the
FreeBSD Porter's Handbook.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@111392 18797224-902f-48f8-a5cc-f745e15eee43
2002-01-05 01:43:00 +00:00
wtc%netscape.com
03d86176f2 Define IS_64 for FreeBSD/alpha.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@111284 18797224-902f-48f8-a5cc-f745e15eee43
2002-01-03 02:38:25 +00:00
wtc%netscape.com
44dc5f47ec Make building for Darwin/x86 work. The patch is from Matt Watson.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@111283 18797224-902f-48f8-a5cc-f745e15eee43
2002-01-03 02:34:05 +00:00
seawood%netscape.com
bb131c9b07 Recent versions of freebsd have a threadsafe poll.
Use sched_get_priority_* to get actual priority min & max rather than hardcoding defaults.
Patches from freebsd ports system.
Bug #112987 r=rjesup@wgate.com


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@111206 18797224-902f-48f8-a5cc-f745e15eee43
2002-01-01 00:44:07 +00:00
(no author)
97b86da472 This commit was manufactured by cvs2svn to create branch
'NSPRPUB_PRE_4_2_CLIENT_BRANCH'.

git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@111099 18797224-902f-48f8-a5cc-f745e15eee43
2001-12-27 02:32:35 +00:00
wtc%netscape.com
867fda21a7 Bugzilla bug 48308: checked in part of the patch to bring NSPR up to
OpenUNIX8 build with pthreads.  The patch is contributed by
Hiram Clawson <hiramc@caldera.com>.
Modified files: _pth.h ptio.c ptthread.c pr/tests/Makefile.in
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@111094 18797224-902f-48f8-a5cc-f745e15eee43
2001-12-26 23:24:29 +00:00
wtc%netscape.com
f55b28bc7d Bugzilla bug 115149: clean up threads properly on non-emx platforms.
Increased the default thread stack size to 64K.  The patch is contributed
by aaronr@us.ibm.com and Michael Kaply <mkaply@us.ibm.com>.
Modified files: _os2.h os2cv.c os2io.c os2thred.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@110861 18797224-902f-48f8-a5cc-f745e15eee43
2001-12-20 05:27:08 +00:00
wtc%netscape.com
2b22ed66f2 Bugzilla bug 97485: added the zone allocator (implemented by Nelson
Bolyard).
Modified files: primpl.h prmem.c prinit.c ptthread.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@110855 18797224-902f-48f8-a5cc-f745e15eee43
2001-12-20 04:15:24 +00:00
sfraser%netscape.com
95d34682eb Landing NSPR changes for the Mac Pro 7 landing
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@110184 18797224-902f-48f8-a5cc-f745e15eee43
2001-12-10 22:27:32 +00:00
sfraser%netscape.com
e6f8fff6af New XML project file for Pro 7 landing
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@110168 18797224-902f-48f8-a5cc-f745e15eee43
2001-12-10 20:04:24 +00:00
sfraser%netscape.com
3dbcff2efe Fix bug 106999 -- implement Mac atomic operations using Open Transport routines for speed. r=wtc.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@110046 18797224-902f-48f8-a5cc-f745e15eee43
2001-12-07 23:59:35 +00:00
wtc%netscape.com
074777cf38 Bugzilla bug 113740: do not use the 32-bit SPARC assembly implementation of
PRStack because it may cause starvation of the lock owner, leaving the
other threads spinning trying to acquire the lock.
Modified files: configure configure.in
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@109959 18797224-902f-48f8-a5cc-f745e15eee43
2001-12-07 02:19:55 +00:00
(no author)
837d01b43f This commit was manufactured by cvs2svn to create branch
'NSPRPUB_PRE_4_2_CLIENT_BRANCH'.

git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@109956 18797224-902f-48f8-a5cc-f745e15eee43
2001-12-07 02:10:11 +00:00
seawood%netscape.com
dab08fd377 Do not build NSPR optimized if MOZ_TRACE_MALLOC is set.
Thanks to Garrett Blythe <blythe@netscape.com> for the patch.
Bug #112953 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@109801 18797224-902f-48f8-a5cc-f745e15eee43
2001-12-06 03:39:05 +00:00
seawood%netscape.com
48ec9b869c Remove --disable-gcc-pipe option.
Bug #81031


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@109494 18797224-902f-48f8-a5cc-f745e15eee43
2001-12-02 21:56:19 +00:00
seawood%netscape.com
1c3b473b22 Revert to using standard config.sub & config.guess entries for OS/2.
Thanks to pedemont@us.ibm.com (Javier Pedemonte) for the patch.
Bug #112244 r=cls


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@109466 18797224-902f-48f8-a5cc-f745e15eee43
2001-12-01 18:54:41 +00:00
seawood%netscape.com
c91e56fc7c Add check for -pipe feature for gcc variants rather than hardcoding it for some platforms.
Bug #81031 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@108146 18797224-902f-48f8-a5cc-f745e15eee43
2001-11-15 05:03:52 +00:00
seawood%netscape.com
4005e8642d Use -no-cpp-precomp instead of -traditional-cpp for darwin.
Bug #106617


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@108010 18797224-902f-48f8-a5cc-f745e15eee43
2001-11-14 03:59:59 +00:00
seawood%netscape.com
af66a34eb1 Tell BSD strip to just strip local & debug symbols rather than all symbols.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@107226 18797224-902f-48f8-a5cc-f745e15eee43
2001-11-03 05:57:04 +00:00
seawood%netscape.com
f35b850294 Move darwin section to proper platform location
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@107201 18797224-902f-48f8-a5cc-f745e15eee43
2001-11-03 03:51:32 +00:00
seawood%netscape.com
af468edb3e Add comment explaining why we use -traditional-cpp for Darwin.
Bug #106617


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@107197 18797224-902f-48f8-a5cc-f745e15eee43
2001-11-03 03:20:46 +00:00
sfraser%netscape.com
b53e6bb4be Adding strtok.c per bug 106372
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@106889 18797224-902f-48f8-a5cc-f745e15eee43
2001-11-01 00:14:33 +00:00
wtc%netscape.com
fdd27d83c2 Added lib/tests/Makefile to the list of makefiles to be generated by
configure.
Modified files: configure configure.in
Bugzilla bug 106372: added new function PL_strtok_r.  The function was
implemented by Roland Mainz <Roland.Mainz@informatik.med.uni-giessen.de>.
Modified files: lib/libc/include/plstr.h lib/libc/src/Makefile.in
    lib/tests/string.c
Added file: lib/libc/src/strtok.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@106882 18797224-902f-48f8-a5cc-f745e15eee43
2001-11-01 00:03:48 +00:00
(no author)
43b465bf6e This commit was manufactured by cvs2svn to create branch
'NSPRPUB_PRE_4_2_CLIENT_BRANCH'.

git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@106873 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-31 23:49:53 +00:00
wtc%netscape.com
3f2acb6f93 Bugzilla bug 106771: support building on HP-UX 11.11. The patch is from
Jim Dunn <jdunn@netscape.com>.
Modified files: configure configure.in
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@106395 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-26 21:08:02 +00:00
seawood%netscape.com
11101f5c41 Add -traditional-cpp & -install_name for Mac OSX builds.
Bug #106617


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@106384 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-26 20:22:53 +00:00
seawood%netscape.com
5ade228aba Convert all rhapsody (pre-beta-macosx) references to darwin.
Bug #106617 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@106330 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-26 04:55:58 +00:00
seawood%netscape.com
a82ef34a24 Drop rhapsody for darwin.
Bug #106617


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@106286 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-25 21:30:56 +00:00
wtc%netscape.com
6fe4a9ff56 Merged the fixes for bugs 104286, 104269, and 77188 on the
NSPRPUB_PRE_4_2_CLIENT_BRANCH.
Modified Files:
	configure configure.in build/autoconf/config.guess
	config/autoconf.mk.in


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@105663 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-18 04:37:32 +00:00
wtc%netscape.com
f30774fa80 Bugzilla bug 92085: checked in a Neutrino patch from
briane@qnx.com (Brian Edmond).  r=wtc.
Modified files: _nto.h protypes.h
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@105662 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-18 04:25:51 +00:00
wtc%netscape.com
5154c4e124 Bugzilla bug 71179: Neutrino needs the RTLD_GROUP flag to load Netscape
plugins.  The fix is contributed by timeless@bemail.org.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@105660 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-18 04:23:04 +00:00
wtc%netscape.com
b30cce9e5c Bugzilla bug 77197: use spawn in Neutrino because fork & exec does not
work in multithreaded programs in Neutrino.  The patch is contributed
by dinglis@qnx.com (Dave Inglis), reviewed and modified by wtc.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@105659 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-18 04:20:34 +00:00
wtc%netscape.com
1370352739 Bugzilla bug 105154: fixed a timing problem in OS/2's implementation of
condition variables.  Thanks to Aaron Read <aaronr@us.ibm.com> for the
patch.  r=wtc.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@105564 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-16 23:52:53 +00:00
seawood%netscape.com
73304bc538 Install *.cfg files used for cross-compiling
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@105364 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-13 06:02:48 +00:00
seawood%netscape.com
1d10bc32f4 Add support for mips*el
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@105363 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-13 06:00:00 +00:00
sfraser%netscape.com
fa57e9bb4a Fix for 100353 -- handle polling for read and write on different threads, and properly deal with sending to a socket that has flow control restrictions. Fixes a problem saving to IMAP server sent messages with attachments. r=gordon, wtc.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@104854 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-08 22:41:28 +00:00
seawood%netscape.com
b9fde4ee45 Updating config.guess & config.sub with 2001-10-07 changes from the GNU master c
opy at :pserver:anoncvs@subversions.gnu.org:/cvs /config .


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@104777 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-07 23:08:14 +00:00
seawood%netscape.com
07962ac747 Solaris 7 has deprecated the use of libposix4 in favor of librt. Check the OS_RE
LEASE and use the appropriate library.
Bug #96986 r=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@104449 18797224-902f-48f8-a5cc-f745e15eee43
2001-10-02 22:21:53 +00:00
sfraser%netscape.com
02f181250e More fixing for 71718. MPEnter/LeaveCriticalRegion don't work under Mac OS 10.0.x, so we need to use some hand-rolled critical sections that are just an MPSemaphore and a counter (which is all that MP critical sections are under the hood, I bet). Added a new file, mdcriticalregions.c, to the project. r=wtc/sdagley
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@103792 18797224-902f-48f8-a5cc-f745e15eee43
2001-09-26 02:34:20 +00:00
cls%seawood.org
67dc250790 Remove commented out references to mozilla xp_*.h files.
Thanks to Brian Ryner <bryner@netscape.com> for the patch.
Bug #38061 r=cls


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@103532 18797224-902f-48f8-a5cc-f745e15eee43
2001-09-22 01:42:48 +00:00
sfraser%netscape.com
00479da414 Fix for bug 71718. Make Mac NSPR work on dual CPU Mac OS X macines by using MP critical regions to fix threading synchronization problems. r=gordon, wtc.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@103266 18797224-902f-48f8-a5cc-f745e15eee43
2001-09-20 03:42:34 +00:00
sfraser%netscape.com
80d937bbfa Fix for bug 97866. Fixes async file I/O to ensure that we always call WaitOnThisThread if we're doing an async call (which does not wait if the notifier has already fired). Also don't bother checking return values from PBRead/WriteAsync, since they never fail, but do check the return value of the PBReadSync call. Fixes synchronization problems on Mac OS X. r=gordon, a=wtc.
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@103237 18797224-902f-48f8-a5cc-f745e15eee43
2001-09-20 00:08:36 +00:00
sdagley%netscape.com
078b061369 Fix #99556. Account for change in Mac epoch time as of MSL 6. r=wtc/sfraser
git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@103038 18797224-902f-48f8-a5cc-f745e15eee43
2001-09-17 23:42:12 +00:00
wtc%netscape.com
d0dff4dc20 Bugzilla bug 97456: fixed build error on BSD/OS 4.3 (beta3). The patch
is contributed by lidl@pix.net.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@102019 18797224-902f-48f8-a5cc-f745e15eee43
2001-08-30 05:30:39 +00:00
cls%seawood.org
92c80d99a5 Escape ^ when calling grep as some shells interpret ^ instead of passing it to grep.
Thanks to dave@arsdigita.com (Drazen Kacar) for the patch.
Bug #96997 r=cls sr=wtc


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@101881 18797224-902f-48f8-a5cc-f745e15eee43
2001-08-28 07:51:34 +00:00
wtc%netscape.com
51d3b633c3 Bugzilla bug 84035: improved comments.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@101511 18797224-902f-48f8-a5cc-f745e15eee43
2001-08-21 15:26:17 +00:00
wtc%netscape.com
5c9558feb0 Force Tinderbox to recompile.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@101507 18797224-902f-48f8-a5cc-f745e15eee43
2001-08-21 14:31:55 +00:00
wtc%netscape.com
496c343716 Bugzilla bug 84035: backed out the changes to the PRMonitor functions
because some of the Mozilla client code depends on the property that
PR_EnterMonitor and PR_ExitMonitor do not call malloc, calloc, and free.
Modified Files: _pth.h, primpl.h, ptsynch.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@101506 18797224-902f-48f8-a5cc-f745e15eee43
2001-08-21 14:30:48 +00:00
cls%seawood.org
c89c27007d Bugzilla bug 95744: handle the case that ENOTEMPTY and EEXIST have the
same value. (They do on AIX 4.3.)


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@101306 18797224-902f-48f8-a5cc-f745e15eee43
2001-08-17 13:56:22 +00:00
(no author)
27617bcd00 This commit was manufactured by cvs2svn to create branch
'NSPRPUB_PRE_4_2_CLIENT_BRANCH'.

git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@101103 18797224-902f-48f8-a5cc-f745e15eee43
2001-08-15 14:30:45 +00:00
920 changed files with 232266 additions and 72385 deletions

View File

@@ -1,222 +0,0 @@
#! gmake
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is Rhino code, released
# May 6, 1998.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1999 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
#
# Alternatively, the contents of this file may be used under the
# terms of the GNU Public License (the "GPL"), in which case the
# provisions of the GPL are applicable instead of those above.
# If you wish to allow use of your version of this file only
# under the terms of the GPL and not to allow others to use your
# version of this file under the NPL, indicate your decision by
# deleting the provisions above and replace them with the notice
# and other provisions required by the GPL. If you do not delete
# the provisions above, a recipient may use your version of this
# file under either the NPL or the GPL.
#
# Makefile for javascript in java.
#
# This makefile is intended for packaging releases, and probably isn't
# suitable for production use - it doesn't attempt to do understand
# java dependencies beyond the package level.
#
# The makefiles for the subdirectories included in this package are
# intended to be called by this makefile with the proper CLASSDIR,
# PATH_PREFIX etc. variables. Makefiles in subdirectories are
# actually executed in the toplevel directory, with the PATH_PREFIX
# variable set to the subdirectory where the makefile is located.
#
# Initial version courtesy Mike Ang.
# Next version by Mike McCabe
# Don't include SHELL define (per GNU manual recommendation) because it
# breaks WinNT (with GNU make) builds.
# SHELL = /bin/sh
# Some things we might want to tweek.
CLASSDIR = classes
PACKAGE_NAME = org.mozilla.javascript
PACKAGE_PATH = org/mozilla/javascript
# jar filenames and the directories that build them.
JS_JAR = js.jar
JS_DIR = $(PACKAGE_PATH)
JSTOOLS_JAR = jstools.jar
JSTOOLS_DIR = $(PACKAGE_PATH)/tools
JARS = $(JS_JAR) $(JSTOOLS_JAR)
# It's not polite to store toplevel files in a tarball or zip files.
# What is the name of the toplevel directory to store files in?
# XXX we should probably add versioning to this.
DIST_DIR = jsjava
# XXX test this with sj
# JAVAC = mgcj
JAVAC=javac
# We don't define JFLAGS but we do export it to child
# builds in case it's defined by the environment.
# To build optimized (with javac) say 'make JFLAGS=-O'
GZIP = gzip
ZIP = zip
UNZIP = unzip
# JFLAGS="-O -g:none"
# Shouldn't need to change anything below here.
# For Windows NT builds (under GNU make).
ifeq ($(OS_TARGET), WINNT)
CLASSPATHSEP = '\\;'
else
CLASSPATHSEP = :
endif
# Make compatibility - use these instead of gmake 'export VARIABLE'
EXPORTS = CLASSDIR=$(CLASSDIR) JAVAC=$(JAVAC) JFLAGS=$(JFLAGS) SHELL=$(SHELL) \
PACKAGE_PATH=$(PACKAGE_PATH) PACKAGE_NAME=$(PACKAGE_NAME)
helpmessage : FORCE
@echo 'Targets include:'
@echo ' all - make jars, examples'
@echo ' jars - make js.jar, jstools.jar'
@echo ' fast - quick-and-dirty "make jars", for development'
@echo ' examples - build the .class files in the examples directory'
@echo ' check - perform checks on the source.'
@echo ' clean - remove intermediate files'
@echo ' clobber - make clean, and remove .jar files'
@echo ' zip - make a distribution .zip file'
@echo ' zip-source - make a distribution .zip file, with source'
@echo ' tar - make a distribution .tar.gz file'
@echo ' tar-source - make a distribution .tar.gz, with source'
@echo
@echo 'Define OS_TARGET to "WINNT" to build on Windows NT with GNU make.'
@echo
@echo 'The make-based build system does not include graphical'
@echo 'debugger or Bean Scripting Framework support. To build with'
@echo 'these, use the Ant build tool.'
@echo
@echo 'Ant is available at http://jakarta.apache.org/ant/'
all : jars examples
jars : $(JARS)
fast : fast_$(JS_JAR) $(JSTOOLS_JAR)
# Always call the sub-Makefile - which may decide that the jar is up to date.
$(JS_JAR) : FORCE
$(MAKE) -f $(JS_DIR)/Makefile JAR=$(@) $(EXPORTS) \
PATH_PREFIX=$(JS_DIR) \
CLASSPATH=.
fast_$(JS_JAR) :
$(MAKE) -f $(JS_DIR)/Makefile JAR=$(JS_JAR) $(EXPORTS) \
PATH_PREFIX=$(JS_DIR) \
CLASSPATH=. \
fast
$(JSTOOLS_JAR) : $(JS_JAR) FORCE
$(MAKE) -f $(JSTOOLS_DIR)/Makefile JAR=$(@) $(EXPORTS) \
PATH_PREFIX=$(JSTOOLS_DIR) \
CLASSPATH=./$(JS_JAR)$(CLASSPATHSEP).
examples : $(JS_JAR) FORCE
$(MAKE) -f examples/Makefile $(EXPORTS) \
PATH_PREFIX=examples \
CLASSPATH=./$(JS_JAR)
# We ask the subdirs to update their MANIFESTs
MANIFEST : FORCE
$(MAKE) -f $(JS_DIR)/Makefile JAR=$(JS_JAR) $(EXPORTS) \
PATH_PREFIX=$(JS_DIR) $(JS_DIR)/MANIFEST
$(MAKE) -f $(JSTOOLS_DIR)/Makefile JAR=$(JSTOOLS_JAR) $(EXPORTS) \
PATH_PREFIX=$(JSTOOLS_DIR) $(JSTOOLS_DIR)/MANIFEST
$(MAKE) -f examples/Makefile $(EXPORTS) \
PATH_PREFIX=examples examples/MANIFEST
# so ls below always has something to work on
touch MANIFEST
# examples/Makefile doesn't get included in the
# MANIFEST file, (which is used to create the non-source distribution) so
# we include it here.
cat examples/MANIFEST $(JS_DIR)/MANIFEST \
$(JSTOOLS_DIR)/MANIFEST \
| xargs ls MANIFEST README.html \
$(JARS) \
Makefile examples/Makefile \
> $(@)
# Make a MANIFEST file containing only the binaries and documentation.
# This could be abstracted further...
MANIFEST_binonly : MANIFEST
cat examples/MANIFEST \
| xargs ls $(JARS) README.html MANIFEST > MANIFEST
# A subroutine - not intended to be called from outside the makefile.
do_zip :
# Make sure we get a fresh one
- rm -r $(DIST_DIR)
- mkdir $(DIST_DIR)
- rm $(DIST_DIR).zip
cat MANIFEST | xargs $(ZIP) -0 -q $(DIST_DIR).zip
mv $(DIST_DIR).zip $(DIST_DIR)
cd $(DIST_DIR) ; \
$(UNZIP) -q $(DIST_DIR).zip ; \
rm $(DIST_DIR).zip
$(ZIP) -r -9 -q $(DIST_DIR).zip $(DIST_DIR)
- rm -r $(DIST_DIR)
zip : check jars examples MANIFEST_binonly do_zip
zip-source : check jars examples MANIFEST do_zip
# A subroutine - not intended to be called from outside the makefile.
do_tar :
- rm -r $(DIST_DIR)
- mkdir $(DIST_DIR)
- rm $(DIST_DIR).tar $(DIST_DIR).tar.gz
cat MANIFEST | xargs tar cf $(DIST_DIR).tar
mv $(DIST_DIR).tar $(DIST_DIR)
cd $(DIST_DIR) ; \
tar xf $(DIST_DIR).tar ; \
rm $(DIST_DIR).tar
tar cf $(DIST_DIR).tar $(DIST_DIR)
- rm -r $(DIST_DIR)
$(GZIP) -9 $(DIST_DIR).tar
tar: check jars examples MANIFEST_binonly do_tar
tar-source : check jars examples MANIFEST do_tar
# These commands just get passed to the respective sub-Makefiles.
clean clobber check:
$(MAKE) -f $(JS_DIR)/Makefile $(EXPORTS) JAR=$(JS_JAR) \
PATH_PREFIX=$(JS_DIR) $(@)
$(MAKE) -f $(JSTOOLS_DIR)/Makefile $(EXPORTS) JAR=$(JSTOOLS_JAR) \
PATH_PREFIX=$(JSTOOLS_DIR) $(@)
$(MAKE) -f examples/Makefile $(EXPORTS) PATH_PREFIX=examples $(@)
#emulate .PHONY
FORCE :

View File

@@ -1,46 +0,0 @@
<html>
<!--
- The contents of this file are subject to the Netscape Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/NPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is Rhino code, released
- May 6, 1999.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corporation. Portions created by Netscape are
- Copyright (C) 1998-1999 Netscape Communications Corporation. All
- Rights Reserved.
-
- Contributor(s):
- Norris Boyd
-
- Alternatively, the contents of this file may be used under the
- terms of the GNU Public License (the "GPL"), in which case the
- provisions of the GPL are applicable instead of those above.
- If you wish to allow use of your version of this file only
- under the terms of the GPL and not to allow others to use your
- version of this file under the NPL, indicate your decision by
- deleting the provisions above and replace them with the notice
- and other provisions required by the GPL. If you do not delete
- the provisions above, a recipient may use your version of this
- file under either the NPL or the GPL.
-->
<body>
<h1>
<span CLASS=LXRSHORTDESC>
Rhino: JavaScript in Java<p>
</span>
</h1>
<span CLASS=LXRLONGDESC>
Rhino is an implementation of JavaScript in Java. Documentation can be found
<a href="http://www.mozilla.org/js/rhino/rhino.html">here</a>.
</span>
</body>
</html>

View File

@@ -1,22 +0,0 @@
apiClasses=\
src/org/mozilla/javascript/ClassDefinitionException.java,\
src/org/mozilla/javascript/ClassOutput.java,\
src/org/mozilla/javascript/Context.java,\
src/org/mozilla/javascript/ContextListener.java,\
src/org/mozilla/javascript/EcmaError.java,\
src/org/mozilla/javascript/ErrorReporter.java,\
src/org/mozilla/javascript/Function.java,\
src/org/mozilla/javascript/FunctionObject.java,\
src/org/mozilla/javascript/ImporterTopLevel.java,\
src/org/mozilla/javascript/JavaScriptException.java,\
src/org/mozilla/javascript/NotAFunctionException.java,\
src/org/mozilla/javascript/PropertyException.java,\
src/org/mozilla/javascript/Script.java,\
src/org/mozilla/javascript/Scriptable.java,\
src/org/mozilla/javascript/ScriptableObject.java,\
src/org/mozilla/javascript/SecuritySupport.java,\
src/org/mozilla/javascript/WrapHandler.java,\
src/org/mozilla/javascript/Wrapper.java,\
src/org/mozilla/javascript/Synchronizer.java,\
src/org/mozilla/javascript/serialize/ScriptableInputStream.java,\
src/org/mozilla/javascript/serialize/ScriptableOutputStream.java

View File

@@ -1 +0,0 @@
This version was built on @datestamp@.

View File

@@ -1,131 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Build file for Rhino using Ant (see http://jakarta.apache.org/ant/index.html)
Requires Ant version 1.2 or later
-->
<project name="Rhino" default="default" basedir=".">
<target name="properties">
<property name="name" value="rhino"/>
<property name="Name" value="Rhino"/>
<property name="version" value="1_5R4pre"/>
<property name="rhino.jar" value="js.jar"/>
<property name="debug" value="off"/>
<property name="src.dir" value="src"/>
<property name="toolsrc.dir" value="toolsrc"/>
<property name="src.examples" value="examples"/>
<property name="build.dir" value="./build"/>
<property name="build.dest" value="${build.dir}/classes"/>
<property name="dist.name" value="rhino${version}"/>
<property name="dist.dir" value="${build.dir}/${dist.name}"/>
<property name="dist.src" value="${dist.dir}/src"/>
<property name="dist.toolsrc" value="${dist.dir}/toolsrc"/>
<property name="dist.examples" value="${dist.dir}/examples"/>
<property name="dist.docs" value="${dist.dir}/docs"/>
<property name="dist.apidocs" value="${dist.docs}/apidocs"/>
<property name="dist.file" value="rhino${version}.zip"/>
<property file="apiClasses.properties"/>
<property name="docsrc.dir" value="docs"/>
<property name="dist.docsrc.dir" value="${src.dir}/docs"/>
</target>
<target name="init" depends="properties">
</target>
<target name="prepare" depends="init">
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.dest}"/>
<mkdir dir="${dist.dir}"/>
<mkdir dir="${dist.src}"/>
<mkdir dir="${dist.toolsrc}"/>
<mkdir dir="${dist.examples}"/>
<mkdir dir="${dist.docs}"/>
<mkdir dir="${dist.apidocs}"/>
</target>
<target name="compile-src" depends="prepare">
<ant dir="${src.dir}"/>
</target>
<target name="compile-toolsrc" depends="prepare">
<ant dir="${toolsrc.dir}"/>
</target>
<target name="compile" depends="compile-src,compile-toolsrc"/>
<target name="jar" depends="compile">
<jar jarfile="${dist.dir}/${rhino.jar}"
basedir="${build.dest}"
manifest="${src.dir}/manifest" />
</target>
<target name="jar-src" depends="compile-src">
<jar jarfile="${dist.dir}/${rhino.jar}"
basedir="${build.dest}"
manifest="${src.dir}/manifest" />
</target>
<target name="copy-examples" depends="prepare">
<copy todir="${dist.examples}">
<fileset dir="${src.examples}" includes="*.java,*.js,*.html" />
</copy>
</target>
<target name="copy-misc" depends="prepare">
<tstamp/>
<filter token="datestamp" value="${TODAY}"/>
<copy todir="${dist.dir}" filtering="yes">
<fileset dir=".">
<patternset>
<include name="build.xml"/>
<include name="apiClasses.properties"/>
<include name="build-date"/>
</patternset>
</fileset>
</copy>
</target>
<target name="copy-all" depends="copy-examples,copy-misc">
</target>
<target name="copy-docs" depends="prepare">
<echo message="copy from ${docsrc.dir}"/>
<copy todir="${dist.docs}">
<fileset dir="${docsrc.dir}"
includes="**/*.html,**/*.jpg,**/*.gif" />
</copy>
</target>
<target name="javadoc" depends="compile,copy-docs">
<javadoc sourcefiles="${apiClasses}"
sourcepath="${src.dir}"
destdir="${dist.apidocs}"
overview="${dist.docs}/api.html"
version="true"
author="true"
public="true"
windowtitle="${Name}" />
</target>
<target name="dist" depends="copy-all,javadoc,jar">
<delete file="${dist.file}" />
<zip zipfile="${dist.file}"
basedir="${build.dir}"
includes="**"
excludes="classes/**" />
</target>
<target name="default">
<echo>
**** Building core only; for full distribution build, try "ant dist".
</echo>
<antcall target="jar-src"/>
</target>
</project>

View File

@@ -1,161 +0,0 @@
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>1</TITLE>
</HEAD>
<BODY>
<OL>
<B><FONT FACE="Arial" SIZE=5 COLOR="#000080"><LI>Using the Rhino JavaScript Debugger</LI>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">The Mozilla Rhino JavaScript engine includes a source-level debugger for debugging JavaScript scripts. The debugger is itself a Java program which you may run as</P>
</FONT><FONT FACE="Arial" SIZE=2><P ALIGN="JUSTIFY">java org.mozilla.javascript.tools.debugger.JSDebugger [options] [filename.js] [script-arguments]</P>
</FONT><FONT SIZE=2><P ALIGN="JUSTIFY">where the options are the same as the shell.</P>
<OL>
<LI><A NAME="_Toc502165108"></FONT><B><FONT FACE="Arial" SIZE=4 COLOR="#000080">Features</A></LI>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">The Rhino JavaScript Debugger can debug scripts running in multiple threads and provides facilities to set and clear breakpoints, control execution, view variables, and evaluate arbitrary JavaScript code in the current scope of an executing script.</P>
<OL>
<LI><A NAME="_Toc502165109"></FONT><B><FONT FACE="Arial" COLOR="#000080">Console Window</A></LI>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">The debugger redirects the </FONT><FONT FACE="Arial" SIZE=2>System.out</FONT><FONT SIZE=2>, </FONT><FONT FACE="Arial" SIZE=2>System.in</FONT><FONT SIZE=2>, and </FONT><FONT FACE="Arial" SIZE=2>System.err</FONT><FONT SIZE=2> streams to an internal JavaScript console window which provides an editable command line for you to enter JavaScript code and view system output. The console window maintains a history of the commands you have entered. You may move backward and forward through the history list by pressing the Up/Down arrow keys on the keyboard.</P>
<LI><A NAME="_Toc502165110"></FONT><B><FONT FACE="Arial" COLOR="#000080">Opening Scripts</A></LI>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">You may select the <B><I>File-&gt;Open</B></I> menu item on the menu bar to load JavaScript scripts contained in files. This action will display a file-selection dialog box prompting you for the location of a script to load. The selected file will be compiled and displayed in a new window.</P>
</FONT><B><FONT FACE="Arial" COLOR="#000080"><LI>Running Scripts</LI>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">You may select the <B><I>File-&gt;Run</B></I> menu item on the menu bar to execute JavaScript scripts contained in files. This action will display a file-selection dialog box prompting you for the location of a script to execute. The loaded script will be run in a new thread and control will be given to the debugger on its first instruction.</P>
<LI><A NAME="_Toc502165111"></FONT><B><FONT FACE="Arial" COLOR="#000080">Controlling Execution</A></LI>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">The debugger provides the following facilities for you to control the execution of scripts you are debugging:</P>
<OL>
</FONT><B><FONT FACE="Arial" COLOR="#000080"><LI>Step Into</LI></OL>
</OL>
</OL>
</OL>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">To single step entering any function calls, you may do any of the following:</P>
<UL>
<P ALIGN="JUSTIFY"><LI>Select the <B><I>Debug-&gt;Step Into </B></I>menu item on the menu bar</LI></P>
<P ALIGN="JUSTIFY"><LI>Press the <B><I>Step Into</B></I> button on the toolbar</LI></P>
<P ALIGN="JUSTIFY"><LI>Press the F11 key on the keyboard</LI></P></UL>
<P ALIGN="JUSTIFY">Execution will resume. If the current line in the script contains a function call control will return to the debugger upon entry into the function. Otherwise control will return to the debugger at the next line in the current function.</P>
<OL>
<OL>
<OL>
<OL>
</FONT><B><FONT FACE="Arial" COLOR="#000080"><LI>Step Over</LI></OL>
</OL>
</OL>
</OL>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">To single step to the next line in the current function, you may do any of the following:</P>
<UL>
<P ALIGN="JUSTIFY"><LI>Select the <B><I>Debug-&gt;Step Over</B></I> menu item on the menu bar</LI></P>
<P ALIGN="JUSTIFY"><LI>Press the <B><I>Step Over</B></I> button on the toolbar</LI></P>
<P ALIGN="JUSTIFY"><LI>Press the F7 key on the keyboard</LI></P></UL>
<P ALIGN="JUSTIFY">Execution will resume but control will return to the debugger at the next line in the current function or top-level script.</P>
<OL>
<OL>
<OL>
<OL>
</FONT><B><FONT FACE="Arial" COLOR="#000080"><LI>Step Out</LI></OL>
</OL>
</OL>
</OL>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">To continue execution until the current function returns you may do any of the following:</P>
<UL>
<P ALIGN="JUSTIFY"><LI>Select the <B><I>Debug-&gt;Step Out</B></I> menu item on the menu bar</LI></P>
<P ALIGN="JUSTIFY"><LI>Press the <B><I>Step Out</B></I> button on the toolbar</LI></P>
<P ALIGN="JUSTIFY"><LI>Press the F8 key on the keyboard</LI></P></UL>
<P ALIGN="JUSTIFY">Execution will resume until the current function returns or a breakpoint is hit.</P>
<OL>
<OL>
<OL>
<OL>
</FONT><B><FONT FACE="Arial" COLOR="#000080"><LI>Go</LI></OL>
</OL>
</OL>
</OL>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">To resume execution of a script you may do any of the following:</P>
<UL>
<P ALIGN="JUSTIFY"><LI>Select the <B><I>Debug-&gt;Go</B></I> menu item on the menu bar</LI></P>
<P ALIGN="JUSTIFY"><LI>Press the <B><I>Go</B></I> button on the toolbar</LI></P>
<P ALIGN="JUSTIFY"><LI>Press the F5 key on the keyboard</LI></P></UL>
<P ALIGN="JUSTIFY">Execution will resume until a breakpoint is hit or the script completes.</P>
<P ALIGN="JUSTIFY">&nbsp;</P>
<OL>
<OL>
<OL>
<OL>
</FONT><B><FONT FACE="Arial" COLOR="#000080"><LI>Break</LI></OL>
</OL>
</OL>
</OL>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">To stop all running scripts and give control to the debugger you may do any of the following:</P>
<UL>
<P ALIGN="JUSTIFY"><LI>Select the <B><I>Debug-&gt;Break</B></I> menu item on the menu bar</LI></P>
<P ALIGN="JUSTIFY"><LI>Press the <B><I>Break</B></I> button on the toolbar</LI></P>
<P ALIGN="JUSTIFY"><LI>Press the Pause/Break key on the keyboard</LI></P></UL>
<OL>
<OL>
<OL>
<LI><A NAME="_Toc502165112"></FONT><B><FONT FACE="Arial" COLOR="#000080">Moving Up and Down the Stack</A></LI>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">The lower-left (dockable) pane in the debugger main window contains a combo-box labeled &quot;Context:&quot; which displays the current stack of the executing script. You may move up and down the stack by selecting an entry in the combo-box. When you select a stack frame the variables and watch windows are updated to reflect the names and values of the variables visible at that scope.</P>
<LI><A NAME="_Toc502165113"></FONT><B><FONT FACE="Arial" COLOR="#000080">Setting and Clearing Breakpoints</A></LI></OL>
</OL>
</OL>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">The main desktop of the debugger contains file windows which display the contents of each script you are debugging. You may set a breakpoint in a script by doing one of the following:</P>
<UL>
<P ALIGN="JUSTIFY"><LI>Place the cursor on the line at which you want to set a breakpoint and right-click with the mouse. This action will display a pop-up menu. Select the <B><I>Set Breakpoint</B></I> menu item. </LI></P>
<P ALIGN="JUSTIFY"><LI>Simply single-click on the line number of the line at which you want to set a breakpoint.</LI></P></UL>
<P ALIGN="JUSTIFY">If the selected line contains executable code a red dot will appear next to the line number and a breakpoint will be set at that location.</P>
<P ALIGN="JUSTIFY">You may set clear breakpoint in a script by doing one of the following:</P>
<UL>
<P ALIGN="JUSTIFY"><LI>Place the cursor on the line at which you want to clear a breakpoint and right-click with the mouse. This action will display a pop-up menu. Select the <B><I>Clear Breakpoint</B></I> menu item. </LI></P>
<P ALIGN="JUSTIFY"><LI>Simply single-click on the red dot or the line number of the line at which you want to clear a breakpoint.</LI></P></UL>
<P ALIGN="JUSTIFY">The red dot will disappear and the breakpoint at that location will be cleared.</P>
<OL>
<OL>
<OL>
<LI><A NAME="_Toc502165114"></FONT><B><FONT FACE="Arial" COLOR="#000080">Viewing Variables</A></LI>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">The lower-left (dockable) pane in the debugger main window contains a tab-pane with two tabs, labeled &quot;this&quot; and &quot;Locals&quot;. Each pane contains a tree-table which displays the properties of the current object and currently visible local variables, respectively. </P>
<OL>
</FONT><B><FONT FACE="Arial" COLOR="#000080"><LI>This</LI></OL>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">The properties of the current object are displayed in the <B><I>this</B></I> table. If a property is itself a JavaScript object the property may be expanded to show its sub-properties. The <B><I>this</B></I> table is updated each time control returns to the debugger or when you change the stack location in the <B><I>Context:</B></I> window.</P>
<LI><A NAME="_Toc502165115"></FONT><B><FONT FACE="Arial" COLOR="#000080">Locals</A></LI>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">The local variables of the current function are displayed in the <B><I>Locals</B></I> table. If a variable is itself a JavaScript object the variable may be expanded to show its sub-properties. The <B><I>Locals</B></I> table is updated each time control returns to the debugger or when you change the stack location in the <B><I>Context:</B></I> window</P>
<LI><A NAME="_Toc502165116"></FONT><B><FONT FACE="Arial" COLOR="#000080">Watch Window</A></LI>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">You may enter arbitrary JavaScript expressions in the <B><I>Watch:</B></I> table located in the lower-right (dockable) pane in the debugger main window. The expressions you enter are reevaluated in the current scope and their current values displayed each time control returns to the debugger or when you change the stack location in the <B><I>Context:</B></I> window.</P>
<LI><A NAME="_Toc502165117"></FONT><B><FONT FACE="Arial" COLOR="#000080">Evaluation Window</A></LI></OL>
</OL>
</OL>
</B></FONT><FONT SIZE=2><P ALIGN="JUSTIFY">The <B><I>Evaluate</B></I> pane located in the lower-right (dockable) pane in the debugger main window contains an editable command line where you may enter arbitrary JavaScript code. The code is evaluated in the context of the current stack frame. The window maintains a history of the commands you have entered. You may move backward or forward through the history by pressing the Up/Down arrow keys on the keyboard. </P>
</FONT></BODY>
</HTML>

View File

@@ -1,137 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; U) [Netscape]">
<title>JavaScript API</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<h1>
Rhino API Reference.</h1></center>
<h4>
The Control API</h4>
These APIs provide methods for controlling the actions of JavaScript in
a host environment.
<ul>
<li>
<a href="org/mozilla/javascript/Context.html">Context</a> - Represents
the runtime context of an executing script. Has methods to associate the
JavaScript evaluation engine with a Java thread, set attributes of the
engine, and compile and evaluate scripts.</li>
<li>
<a href="org/mozilla/javascript/ContextListener.html">ContextListener</a>
- Allows embeddings to be notified of the creation, entering, exiting,
and releasing of Contexts. </li>
<li>
<a href="org/mozilla/javascript/Script.html">Script</a> - The result of
compiling a JavaScript script. Also encapsulates script execution.</li>
<li>
<a href="org/mozilla/javascript/ErrorReporter.html">ErrorReporter</a> -
This interface can be implemented to control the actions the JavaScript
engine takes when it encounters errors.</li>
<li>
<a href="org/mozilla/javascript/SecuritySupport.html">SecuritySupport</a>
- Optional support routines that must be provided by embeddings implementing
security controls on scripts.</li>
<li>
<a href="org/mozilla/javascript/Wrapper.html">Wrapper</a> - Interface implemented
by objects wrapping other objects. Provides a method for recovering the
wrapped value.</li>
<li>
<a href="org/mozilla/javascript/WrapHandler.html">WrapHandler</a> - Interface
embedders can implement in order to control the way Java objects are wrapped
for use by JavaScript.</li>
<li>
<a href="org/mozilla/javascript/ClassOutput.html">ClassOutput</a> - Interface
embedders can implement in order to control the placement of generated
class bytecodes.</li>
<li>
<a href="org/mozilla/javascript/serialize/ScriptableOutputStream.html">ScriptableOutputStream</a> - This stream can be used to serialize JavaScript objects and functions.
</li>
<li>
<a href="org/mozilla/javascript/serialize/ScriptableInputStream.html">ScriptableInputStream</a> - This stream can be used to deserialize JavaScript objects and functions.
</li>
</ul>
<h4>
The Host Object API</h4>
These APIs provide support for adding objects specific to a particular
embedding of JavaScript in a host environment. Note that if you just want
to script existing Java classes, you should just use <a href="http://developer.netscape.com/library/documentation/communicator/jsguide4/livecon.htm">LiveConnect</a>.
It is also helpful to understand some of the implementation of the <a href="runtime.html">runtime</a>.
<ul>
<li>
<a href="org/mozilla/javascript/Scriptable.html">Scriptable</a> - All JavaScript
objects must implement this interface. Provides methods to access properties
and attributes of those properties, as well as other services required
of JavaScript objects.</li>
<li>
<a href="org/mozilla/javascript/Function.html">Function</a> - All JavaScript
functions must implement this interface. Extends Scriptable, adding methods
to support invocation.</li>
<li>
<a href="org/mozilla/javascript/ScriptableObject.html">ScriptableObject</a>
- A default implementation of Scriptable that may be extended. Implements
property and attribute storage and lookup and other default JavaScript
object behavior.</li>
<li>
<a href="org/mozilla/javascript/FunctionObject.html">FunctionObject</a>
- An implementation of Function that allows Java methods and constructors
to be used as JavaScript function objects.</li>
<li>
<a href="org/mozilla/javascript/ImporterTopLevel.html">ImporterTopLevel</a>
- Allows embeddings to use the importClass and importPackage functions.</li>
</ul>
<h4>
Exceptions</h4>
These exceptions are thrown by JavaScript.
<ul>
<li>
<a href="org/mozilla/javascript/JavaScriptException.html">JavaScriptException</a>
- Thrown from within JavaScript by the JavaScript 'throw' statement, or
by LiveConnect calls from JavaScript into Java. Wraps a JavaScript value.</li>
<li>
<a href="org/mozilla/javascript/ClassDefinitionException.html">ClassDefinitionException</a>
- Thrown if errors are detected while attempting to define a host object
from a Java class.</li>
<li>
<a href="org/mozilla/javascript/PropertyException.html">PropertyException</a>
- Thrown if errors are detected while attempting to define a property of
a host object from a Java class or method, or if a property is not found.</li>
<li>
<a href="org/mozilla/javascript/NotAFunctionException.html">NotAFunctionException</a>
- Thrown when attempting to call an object that is not a function.</li>
<li>
<a href="org/mozilla/javascript/EvaluatorException.html">EvaluatorException</a>
- An exception thrown when an error is detected during the execution of
a script. The default error reporter will throw EvaluatorExceptions when
an error is encountered.</li>
</ul>
<hr WIDTH="100%">
<br><a href="overview-summary.html">back to top</a>
</body>
</html>

View File

@@ -1,43 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
<meta name="KeyWords" content="Rhino, JavaScript, Java, BSF, Apache">
<title>Rhino and BSF</title>
</head>
<body bgcolor="#FFFFFF">
<script src="owner.js"></script>
<center>
<h1>
Using Rhino with BSF and Apache</h1></center>
<script>document.write(owner());</script>
<br><script>
var d = new Date(document.lastModified);
document.write((d.getMonth()+1)+"/"+d.getDate()+"/"+d.getFullYear());
document.write('<br>');
</script>
<hr WIDTH="100%">
<br>The <a href="http://oss.software.ibm.com/developerworks/projects/bsf">Bean
Scripting Framework</a> (or BSF) was originally developed by IBM and now
published as open source. It provides a framework for using a number of
scripting languages with Java. Rhino is one of the supported languages.
<p>This framework has been embedded in a number of open source projects,
including the XSL processor <a href="http://xml.apache.org/xalan/index.html">Xalan</a>
and the XML/Java build tool <a href="http://jakarta.apache.org/ant/index.html">Ant</a>.
<p>You can download a version of <tt>bsf.jar</tt> from <a href="http://oss.software.ibm.com/developerworks/projects/bsf">http://oss.software.ibm.com/developerworks/projects/bsf</a>
that includes the <tt>com.ibm.bsf.engines.javascript.JavaScriptEngine</tt>
class. The current version is 2.2 release candidate at the time of this
writing. This version thus supports JavaScript through Rhino when used
with the <tt>js.jar</tt> file from either <tt>rhino15R1.zip</tt> or <tt>rhinoTip.zip</tt>.
<p>See <a href="http://xml.apache.org/xalan/extensions.html#ex-basic">Xalan-Java
Extensions</a> for more information on adding JavaScript to XSL and the
<a href="http://jakarta.apache.org/ant/jakarta-ant/docs/#script">Script
task</a> for using scripting in Ant build files.
<p><a href="index.html">back to top</a>
</body>
</html>

View File

@@ -1,24 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]">
<meta name="KeyWords" content="Rhino, JavaScript, Java">
<title>Change Log</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<h1>
Change Log for Significant Rhino Changes</h1></center>
This is a log of significant changes since the release of Rhino 1.5 Release
3.
<p><i>None yet!</i>
<h3>
<hr WIDTH="100%"><br>
<a href="index.html">back to top</a></h3>
</body>
</html>

View File

@@ -1,98 +0,0 @@
<html>
<head>
<title>Debugger API for Rhino</title>
</head>
<body bgcolor="#FFFFFF">
<h1><center>Debugger API for Rhino</center></h1>
<p>
<font color="red"><center>This release of the Debugger API should be considered to be of Beta quality.</center></font>
<p>
The Debugger API for Rhino consists of a set of Java interfaces
which describes a high level debugger API and a default implementation of that
API.
<p>
Most of the API is in the <code>com.netscape.javascript.debug</code> package. It is built
upon low-level support built into the core engine in <code>com.netscape.javascript</code>.
<p>
The <code>com.netscape.javascript.debug</code> package includes an implementation of the Debugger API
interfaces outlined below. The class <code>com.netscape.javascript.debug.DebugManager.java</code>
implements the <a href="com/netscape/javascript/debug/IDebugManager.html">IDebugManager</a>
interface and <code>com.netscape.javascript.debug.SourceTextManagerImpl.java</code> implements
the <a href="com/netscape/javascript/SourceTextManager.html">SourceTextManager</a> interface.
<p>
The class <code>com.netscape.javascript.tools.shell.Main.java</code> provides an
example which invokes the Debugger API.
<p>
<hr>
<p>
The core interface of the API is <a href="com/netscape/javascript/debug/IDebugManager.html">IDebugManager</a>.
This interface provide the central point for interacting with the debug system.
It supports the setting of the following hooks:
<ul>
<li><a href="com/netscape/javascript/debug/IInterruptHook.html">IInterruptHook</a> for immediate interrupt.
<li><a href="com/netscape/javascript/debug/IInstructionHook.html">IInstructionHook</a> for breakpoints.
<li><a href="com/netscape/javascript/debug/IDebugBreakHook.html">IDebugBreakHook</a> for breaking on errors.
<li><a href="com/netscape/javascript/debug/IErrorReporter.html">IErrorReporter</a> for hooking into the error reporter system.
<li><a href="com/netscape/javascript/debug/IScriptHook.html">IScriptHook</a> for notification of script and function load and unload.
</ul>
Customers of the Debugger API can provide implementations of these hook
interfaces which can be passed to the <i>IDebugManager</i> in order receive
notification of the various events within the core JavaScript engine.
<p>
When hooks are called they are passed appropriate objects which are implemented
by the Debugger API to describe such things as <i>stack frames</i>,
<i> program counter locations</i>, etc. The interfaces for these objects are:
<ul>
<li><a href="com/netscape/javascript/debug/IThreadState.html">IThreadState</a> representing the state of the stopped thread.
<li><a href="com/netscape/javascript/debug/IStackFrame.html">IStackFrame</a> representing a stack frame.
<li><a href="com/netscape/javascript/debug/IPC.html">IPC</a> representing a program counter location.
<li><a href="com/netscape/javascript/debug/IScript.html">IScript</a> representing a compiled JavaScript script or function.
<li><a href="com/netscape/javascript/debug/ISourceLocation.html">ISourceLocation</a> representing a location in the souce code.
</ul>
<p>
<hr>
<p>
<a href="com/netscape/javascript/SourceTextManager.html">SourceTextManager</a>
is an interface used to supply a centralized location from which a debugger
client can access JavaScript source. It supports capturing source as it is
parsed by <i>Rhino</i>. Alternately, source can be fed to it by the
embedding; e.g. in a browser embedding where the JavaScript code is just a
part of the html source the browser can feed the entire source to the
<i>SourceTextManager</i> so that a debugger can 'see' the whole source and
not just the part that is fed to the JavaScript compiler.
<p>
<a href="com/netscape/javascript/SourceTextItem.html">SourceTextItem</a> is an
interface representing a single 'block' of source code text (typically this
is an entire source file). This may be pure JavaScript source, or may include
JavaScript source embedded in html or whatever. The point is that this is the
text that a debugger should show to a user while debugging the JavaScript code.
This interface supports incrementally updated content. This is specifically
useful in browser embeddings where text is received in blocks. In fact, in a
browser it is possible that some of the source on a page may be compiled
and run even before the entire content of the page has been received from a
server.
<p>
<hr>
<p>
<a href="com/netscape/javascript/debug/ILaunchableDebugger.html">ILaunchableDebugger</a>
is an interface that abstractly represents a debugger user interface. It is
defined to allow an embedding to request that a debugger be launched without
requiring that the embedding be coupled at compile time to a particular debugger
implementation.
<p>
<hr>
<h3>Limitations and unimplemented features</h3>
<ul>
<li>Data Watchpoints are not implemented.
<li>Catching exceptions thrown in JavaScript code is not implemented.
<li>Per context hooking is not implemented.
<li>Setting the debug level to any non-zero value forces the optimization level to zero.
<li>Tracking of calls to plain Java methods from JavaScript is not implemented.
<li>Running at debug level >= 6 causes JIT errors with the Symantec JVM (but no other JVMs)
<li>The Debug API has not been rigorously tested.
</ul>
<p>
<hr WIDTH="100%">
<br><A HREF="overview-summary.html">back to top</A>
</body>
</html>

View File

@@ -1,241 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; I) [Netscape]">
<meta name="KeyWords" content="Rhino, JavaScript, Java, Debugger">
<title>Rhino Debugger</title>
</head>
<body bgcolor="#FFFFFF">
<script src="owner.js">
</script>
<center>
<h1>
Rhino JavaScript Debugger</h1></center>
Christopher Oliver
<br><script>document.write(owner());</script>
<br>6/28/2001
<center>
<hr WIDTH="100%"></center>
The Rhino JavaScript debugger is a GUI that allows debugging of interpreted
JavaScript scripts run in Rhino. Note that this debugger <i>will not</i>
work with JavaScript scripts run in the mozilla browser since Rhino is
not the engine used in such environments.
<p><img SRC="jsdebug.jpg" height=460 width=600>
<p>Current limitations:
<ul>
<li>
Requires JDK 1.2 or greater</li>
<li>
Requires js.jar from rhinoTip.zip</li>
<li>
No breakpoint menu</li>
</ul>
<b><font face="Arial"><font color="#000080"><font size=+2>Using the Rhino
JavaScript Debugger</font></font></font></b>
<p><font size=-1>The Mozilla Rhino JavaScript engine includes a source-level
debugger for debugging JavaScript scripts. The debugger is itself a Java
program which you may run as</font>
<ol><font face="Arial"><font size=-1>java org.mozilla.javascript.tools.debugger.Main
[options] [filename.js] [script-arguments]</font></font></ol>
<font size=-1>where the options are the same as the shell.</font>
<p><font size=-1>The Rhino JavaScript Debugger can debug scripts running
in multiple threads and provides facilities to set and clear breakpoints,
control execution, view variables, and evaluate arbitrary JavaScript code
in the current scope of an executing script.</font>
<p><a NAME="_Toc502165109"></a><b><font face="Arial"><font color="#000080"><font size=-1>Console
Window</font></font></font></b>
<br><font size=-1>The debugger redirects the <font face="Arial">System.out</font>,
<font face="Arial">System.in</font>,
and <font face="Arial">System.err</font> streams to an internal JavaScript
console window which provides an editable command line for you to enter
JavaScript code and view system output. The console window maintains a
history of the commands you have entered. You may move backward and forward
through the history list by pressing the Up/Down arrow keys on the keyboard.</font>
<br><a NAME="_Toc502165110"></a><b><font face="Arial"><font color="#000080"><font size=-1>Opening
Scripts</font></font></font></b>
<br><font size=-1>You may select the <b><i>File->Open</i></b> menu item
on the menu bar to load JavaScript scripts contained in files. This action
will display a file-selection dialog box prompting you for the location
of a script to load. The selected file will be compiled and displayed in
a new window.</font>
<br><a NAME="_RunningScripts"></a><b><font face="Arial"><font color="#000080"><font size=-1>Running
Scripts</font></font></font></b>
<br><font size=-1>You may select the <b><i>File->Run</i></b> menu item
on the menu bar to execute JavaScript scripts contained in files. This
action will display a file-selection dialog box prompting you for the location
of a script to execute. The loaded script will be run in a new thread and
control will be given to the debugger on its first instruction.</font>
<p><a NAME="_Toc502165111"></a><b><font face="Arial"><font color="#000080"><font size=+1>Controlling
Execution</font></font></font></b>
<br><font size=-1>The debugger provides the following facilities for you
to control the execution of scripts you are debugging:</font>
<p><b><font face="Arial"><font color="#000080">Step Into</font></font></b>
<br><font size=-1>To single step entering any function calls, you may do
any of the following:</font>
<ul>
<li>
<font size=-1>Select the <b><i>Debug->Step Into </i></b>menu item on the
menu bar</font></li>
<li>
<font size=-1>Press the <b><i>Step Into</i></b> button on the toolbar</font></li>
<li>
<font size=-1>Press the F11 key on the keyboard</font></li>
</ul>
<font size=-1>Execution will resume. If the current line in the script
contains a function call control will return to the debugger upon entry
into the function. Otherwise control will return to the debugger at the
next line in the current function.</font>
<p><b><font face="Arial"><font color="#000080">Step Over</font></font></b>
<br><font size=-1>To single step to the next line in the current function,
you may do any of the following:</font>
<ul>
<li>
<font size=-1>Select the <b><i>Debug->Step Over</i></b> menu item on the
menu bar</font></li>
<li>
<font size=-1>Press the <b><i>Step Over</i></b> button on the toolbar</font></li>
<li>
<font size=-1>Press the F7 key on the keyboard</font></li>
</ul>
<font size=-1>Execution will resume but control will return to the debugger
at the next line in the current function or top-level script.</font>
<p><b><font face="Arial"><font color="#000080">Step Out</font></font></b>
<br><font size=-1>To continue execution until the current function returns
you may do any of the following:</font>
<ul>
<li>
<font size=-1>Select the <b><i>Debug->Step Out</i></b> menu item on the
menu bar</font></li>
<li>
<font size=-1>Press the <b><i>Step Out</i></b> button on the toolbar</font></li>
<li>
<font size=-1>Press the F8 key on the keyboard</font></li>
</ul>
<font size=-1>Execution will resume until the current function returns
or a breakpoint is hit.</font>
<p><b><font face="Arial"><font color="#000080">Go</font></font></b>
<br><font size=-1>To resume execution of a script you may do any of the
following:</font>
<ul>
<li>
<font size=-1>Select the <b><i>Debug->Go</i></b> menu item on the menu
bar</font></li>
<li>
<font size=-1>Press the <b><i>Go</i></b> button on the toolbar</font></li>
<li>
<font size=-1>Press the F5 key on the keyboard</font></li>
</ul>
<font size=-1>Execution will resume until a breakpoint is hit or the script
completes.</font>
<p><b><font face="Arial"><font color="#000080">Break</font></font></b>
<br><font size=-1>To stop all running scripts and give control to the debugger
you may do any of the following:</font>
<ul>
<li>
<font size=-1>Select the <b><i>Debug->Break</i></b> menu item on the menu
bar</font></li>
<li>
<font size=-1>Press the <b><i>Break</i></b> button on the toolbar</font></li>
<li>
<font size=-1>Press the Pause/Break key on the keyboard</font></li>
</ul>
<a NAME="_RunningScripts"></a><b><font face="Arial"><font color="#000080"><font size=-1>Break
on Exceptions</font></font></font></b>
<br><font size=-1>To give control to the debugger whenever a JavaScript
is exception is thrown select the <b><i>Debug->Break on Exceptions</i></b>
checkbox from the menu bar.&nbsp; Whenever a JavaScript exception is thrown
by a script a message dialog will be displayed and control will be given
to the debugger at the location the exception is raised.</font>
<p><a NAME="_Toc502165112"></a><b><font face="Arial"><font color="#000080">Moving
Up and Down the Stack</font></font></b>
<br><font size=-1>The lower-left (dockable) pane in the debugger main window
contains a combo-box labeled "Context:" which displays the current stack
of the executing script. You may move up and down the stack by selecting
an entry in the combo-box. When you select a stack frame the variables
and watch windows are updated to reflect the names and values of the variables
visible at that scope.</font>
<p><a NAME="_Toc502165113"></a><b><font face="Arial"><font color="#000080">Setting
and Clearing Breakpoints</font></font></b>
<br><font size=-1>The main desktop of the debugger contains file windows
which display the contents of each script you are debugging. You may set
a breakpoint in a script by doing one of the following:</font>
<ul>
<li>
<font size=-1>Place the cursor on the line at which you want to set a breakpoint
and right-click with the mouse. This action will display a pop-up menu.
Select the <b><i>Set Breakpoint</i></b> menu item.</font></li>
<li>
<font size=-1>Simply single-click on the line number of the line at which
you want to set a breakpoint.</font></li>
</ul>
<font size=-1>If the selected line contains executable code a red dot will
appear next to the line number and a breakpoint will be set at that location.</font>
<p><font size=-1>You may clear breakpoint in a script by doing one of the
following:</font>
<ul>
<li>
<font size=-1>Place the cursor on the line at which you want to clear a
breakpoint and right-click with the mouse. This action will display a pop-up
menu. Select the <b><i>Clear Breakpoint</i></b> menu item.</font></li>
<li>
<font size=-1>Simply single-click on the red dot or the line number of
the line at which you want to clear a breakpoint.</font></li>
</ul>
<font size=-1>The red dot will disappear and the breakpoint at that location
will be cleared.</font>
<p><a NAME="_Toc502165114"></a><b><font face="Arial"><font color="#000080"><font size=+1>Viewing
Variables</font></font></font></b>
<br><font size=-1>The lower-left (dockable) pane in the debugger main window
contains a tab-pane with two tabs, labeled "this" and "Locals". Each pane
contains a tree-table which displays the properties of the current object
and currently visible local variables, respectively.</font>
<p><b><font face="Arial"><font color="#000080">This</font></font></b>
<br><font size=-1>The properties of the current object are displayed in
the
<b><i>this</i></b> table. If a property is itself a JavaScript object
the property may be expanded to show its sub-properties. The <b><i>this</i></b>
table is updated each time control returns to the debugger or when you
change the stack location in the <b><i>Context:</i></b> window.</font>
<p><b><font face="Arial"><font color="#000080">Locals</font></font></b>
<br><font size=-1>The local variables of the current function are displayed
in the <b><i>Locals</i></b> table. If a variable is itself a JavaScript
object the variable may be expanded to show its sub-properties. The <b><i>Locals</i></b>
table is updated each time control returns to the debugger or when you
change the stack location in the <b><i>Context:</i></b> window</font>
<p><a NAME="_Toc502165116"></a><b><font face="Arial"><font color="#000080">Watch
Window</font></font></b>
<br><font size=-1>You may enter arbitrary JavaScript expressions in the
<b><i>Watch:</i></b>
table located in the lower-right (dockable) pane in the debugger main window.
The expressions you enter are re-evaluated in the current scope and their
current values displayed each time control returns to the debugger or when
you change the stack location in the <b><i>Context:</i></b> window.</font>
<p><a NAME="_Toc502165117"></a><b><font face="Arial"><font color="#000080">Evaluation
Window</font></font></b>
<br><font size=-1>The <b><i>Evaluate</i></b> pane located in the lower-right
(dockable) pane in the debugger main window contains an editable command
line where you may enter arbitrary JavaScript code. The code is evaluated
in the context of the current stack frame. The window maintains a history
of the commands you have entered. You may move backward or forward through
the history by pressing the Up/Down arrow keys on the keyboard.</font>
</body>
</html>

View File

@@ -1,166 +0,0 @@
<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]">
<meta name="KeyWords" content="Rhino, JavaScript, Java">
<title>Rhino Documentation</title>
</head>
<body bgcolor="#ffffff">
<center>
<h1> Rhino Documentation</h1>
</center>
<b><i><font size="+1">General</font></i></b>
<table width="100%">
<tbody>
<tr>
<td><a href="overview.html">Overview</a>
</td>
<td>An overview of the JavaScript language and of Rhino.</td>
</tr>
<tr>
<td><a href="limits.html">Requirements and Limitations</a>
</td>
<td>What you must have to run Rhino; what Rhino cannot do.</td>
</tr>
<tr>
<td><a href="rhino15R3.html">What's new in 1.5R3</a>
</td>
<td>Changes since 1.5R2.</td>
</tr>
<tr>
<td><a href="debugger.html">Rhino Debugger</a>
</td>
<td>A debugger for debugging JavaScript running in Rhino.</td>
</tr>
<tr>
<td><a href="opt.html">Optimization</a>
</td>
<td>Details on the various optimization levels.</td>
</tr>
<tr>
<td><a href="http://sourceforge.net/projects/jscorba">JS/CORBA Adapter</a>
</td>
<td>Provides a mechanism for arbitrary JavaScript objects to interact
with each other transparently in a distributed JavaScript system using CORBA.</td>
</tr>
<tr>
<td><a href="bsf.html">Using Rhino with BSF and Apache</a>
</td>
<td>How to use Rhino with apps that support BSF.</td>
</tr>
<tr>
<td><a href="changes.html">Recent Changes</a>
</td>
<td>Describes recent changes to Rhino.</td>
</tr>
<tr>
<td><a href="faq.html">FAQ</a>
</td>
<td>Answers to frequently asked questions about Rhino.</td>
</tr>
<tr>
<td><a href="http://industry.java.sun.com/javaone/99/event/0,1768,629,00.html">
1999 JavaOne session on Rhino</a>
</td>
<td>A talk on Rhino with slides. Also see the <a href="javaone.html">followup</a>
.</td>
</tr>
<tr>
<td valign="Top"><a href="http://www.ociweb.com/jnb/archive/jnbMar2001.html">
Scripting Languages for Java</a>
<br>
</td>
<td valign="Top">An article comparing and contrasting Rhino and Jython.<br>
</td>
</tr>
</tbody>
</table>
<p><b><i><font size="+1">Writing Scripts</font></i></b>
<table width="100%">
<tbody>
<tr>
<td><a href="scriptjava.html">Scripting Java</a>
</td>
<td>How to use Rhino to script Java classes.</td>
</tr>
<tr>
<td><a href="perf.html">Performance Hints</a>
</td>
<td>Some tips on writing faster JavaScript code.</td>
</tr>
<tr>
<td><a href="tools.html">Tools</a>
</td>
<td>Some tools for developing JavaScript scripts.</td>
</tr>
</tbody>
</table>
</p>
<p><b><i><font size="+1">Embedding Rhino</font></i></b>
<table width="100%">
<tbody>
<tr>
<td><a href="tutorial.html">Embedding tutorial</a>
</td>
<td>A short tutorial on how to embed Rhino into your application.</td>
</tr>
<tr>
<td><a href="apidocs/index.html">API javadoc Reference</a>
</td>
<td>An annotated outline of the programming interface to Rhino (tip only).</td>
</tr>
<tr>
<td><a href="scopes.html">Scopes and Contexts</a>
</td>
<td>Describes how to use scopes and contexts for the best performance
and flexibility, with an eye toward multithreaded environments.</td>
</tr>
<tr>
<td><a href="serialization.html">Serialization</a>
</td>
<td>How to serialize JavaScript objects and functions in Rhino.</td>
</tr>
<tr>
<td><a href="runtime.html">Runtime</a>
</td>
<td>A brief description of the JavaScript runtime.</td>
</tr>
<tr>
<td><a href="footprint.html">Small Footprint</a>
</td>
<td>Hints for those interested in small-footprint embeddings.</td>
</tr>
<tr>
<td><a href="examples.html">Examples</a>
</td>
<td>A set of examples showing how to control the JavaScript engine and
build JavaScript host objects.</td>
</tr>
<tr>
<td><font color="#000000"><a href="http://www.mozilla.org/js/tests/library.html">
Testing</a>
</font></td>
<td>How to run the JavaScript test suite.</td>
</tr>
</tbody>
</table>
</p>
<h3>
<hr width="100%"><a href="index.html">back to top</a>
</h3>
</body>
</html>

View File

@@ -1,88 +0,0 @@
<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]">
<title>Rhino Downloads</title>
</head>
<body>
<center><b><font size="+3">Rhino Downloads</font></b></center>
<p>Rhino is available for download both in source and compiled form. </p>
<h3> Binaries</h3>
You can download binaries (JAR files) from <a href="ftp://ftp.mozilla.org/pub/js/">
ftp://ftp.mozilla.org/pub/js/</a>
. Rhino 1.5 Release 2 is the last qualified release. It is also possible to
download the latest rhino build that reflects newer features and bug fixes,
but has not been fully qualified. These zip files also include the source.
<p>If you are looking for <tt>js.jar</tt> for XSLT or for IBM's Bean Scripting
Framework (BSF), download one of the zip files below and unzip it. </p>
<ul>
<li> <a href="ftp://ftp.mozilla.org/pub/js/rhino15R3-rc2.zip">Rhino 1.5R3
(release candidate 2).</a>
</li>
<ul>
<li> <i><font size="-1"><a href="rhino15R3.html">Description of changes
from 1.5R2</a>
</font></i>.</li>
</ul>
<li> <a href="ftp://ftp.mozilla.org/pub/js/rhino15R2.zip">Rhino 1.5R2.</a>
</li>
<ul>
<li> <i><font size="-1"><a href="rhino15R2.html">Description of changes
from 1.5R1</a>
</font></i>.</li>
</ul>
<li> <a href="ftp://ftp.mozilla.org/pub/js/rhino15R1.zip">Rhino 1.5R1.</a>
</li>
<ul>
<li> <i><font size="-1"><a href="rhino15R1.html">Description of changes
from 1.4R3</a>
</font></i>.</li>
</ul>
<li> <a href="ftp://ftp.mozilla.org/pub/js/rhino14R3.zip">Rhino 1.4 Release
3</a>
.</li>
<li> <a href="ftp://ftp.mozilla.org/pub/js/rhinoLatest.zip">Latest Rhino
builds</a>
.</li>
<ul>
<li> <i><font size="-1"><a href="changes.html">Description of changes from
1.5R3</a>
</font></i>.</li>
</ul>
</ul>
<h3> Source</h3>
The source code for Rhino is available under <a href="http://www.mozilla.org/NPL/">
NPL 1.1</a>
. In addition to getting the source from the zip files above, the source
code for Rhino can be found in the CVS tree at mozilla/js/rhino. See&nbsp;
<a href="http://www.mozilla.org/cvs.html">source code via cvs</a>
for details on how to set up CVS, define your CVSROOT, and login. Once you've
done that, just execute the command
<pre>&nbsp;&nbsp;&nbsp; cvs co mozilla/js/rhino</pre>
to get the tip source.
<p>The current tip can also be viewed using LXR at <a href="http://lxr.mozilla.org/mozilla/source/js/rhino/">
http://lxr.mozilla.org/mozilla/source/js/rhino/</a>
. </p>
<p> </p>
<hr width="100%"><a href="index.html">back to top</a>
<br>
&nbsp;
</body>
</html>

View File

@@ -1,278 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Word 97">
<meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; U) [Netscape]">
<title>Embedding Scripting Host in Business Applications</title>
</head>
<body link="#0000FF">
<b><font face="Arial"><font size=-1>Embedding
Scripting Host in Business Applications</font></font></b>
<p><b><font face="Arial"><font size=-1>Madhukumar Seshadri, <a href="http://www.cognizant.com)/">www.cognizant.com</a></font></font></b>
<br>&nbsp;
<br>&nbsp;
<p><font face="Arial"><font size=-1>With web browsers, continuing to rule
the human interface for applications, creating value by being ubiquitous,
few adoptions of rich technology thats getting brewed underneath, will
help designing business applications even though most of the current ones
are made with birds eye of the underlying technologies.</font></font>
<p><font face="Arial"><font size=-1>JavaScript is a scripting language
invented and developed by Netscape. The language was primarily designed
for creating lightweight programming for web browser extensions by exposing
the Document Object Model of an HTML page to the scripts. JavaScript is
becoming object oriented and getting adopted for server-side scripting.</font></font>
<p><font face="Arial"><font size=-1>JavaScript is also becoming a standard
in the scripting world as Netscape is working closely with ECMA (European
Computer Manufacturers Association) to make it as a standard scripting
language for the script world. The standards are published as ECMA Script.</font></font>
<p><font face="Arial"><font size=-1>JavaScript originally designed for
exposing the DOM (Document Object Model) standardized by World Wide Web
consortium (W3C), to help web page designers to control and manipulate
the pages dynamically. JavaScript engines were embedded in the browsers
and they execute those portions of the code embedded in the HTML pages.</font></font>
<p><font face="Arial"><font size=-1>In short, JavaScript engine embedded
in the browser allowed extensions or manipulations for DOM Object run time
for the HTML page by executing the scripts associated with them. In other
words, browser exposes its DOM object for the page to scripts for extensions
and dynamic manipulations of the same, using a language that the script
interpreter understands.</font></font>
<p><font face="Arial"><font size=-1>Can I do the same for my application
by exposing my custom business objects written in my middle-tier? Can I
allow user to my write JavaScript extensions for my objects and also be
host for executing those scripts?</font></font>
<p><font face="Arial"><font size=-1>JavaScript host runs times are available
as binaries written in major languages. Check out <a href="http://www.mozilla.org/js">www.mozilla.org/js</a>.
Spider Monkey and Rhino are open source JavaScripting engines available
from mozilla.</font></font>
<p><font face="Arial"><font size=-1>Microsoft implementation of ECMA Script
(ECMA Script is based on core JavaScript, created by Netscape) is called
JScript. Microsoft binaries of jscript engine can be downloaded from http://msdn.microsoft.com/scripting/.</font></font>
<p><font face="Arial"><font size=-1>This document doesnt explain the JavaScript
language in detail but explains how these scripting engines can be used
as host to expose business objects in the middle-tier and how the user
of these applications can extend it if needed using JavaScript.</font></font>
<p><font face="Arial"><font size=-1>The scripting engine Rhino (<a href="http://www.mozilla.org/js)">www.mozilla.org/rhino)</a>,
a javascript engine purely written in Java is one that I am going to use
for the testing the above.</font></font>
<p><font face="Arial"><font size=-1>Let us set some simple goals,</font></font>
<ul>
<li>
<font face="Arial"><font size=-1>Execute a plain JavaScript code and
use static Java object</font></font></li>
<li>
<font face="Arial"><font size=-1>Instantiate external objects (written
in Java) from the script and use them within the script</font></font></li>
</ul>
<br>&nbsp;
<br>&nbsp;
<p><font face="Arial"><font size=-1>Let us write a simple Javscript to
test the above set goals,</font></font>
<p><font face="Arial"><font size=-1><b>Fig 1</b> jshosttest.js</font></font>
<p><b><i><font face="Arial"><font size=-1>/* Test 1 */</font></font></i></b>
<br><b><i><font face="Arial"><font size=-1>/* Use a static Java Object
in the script */</font></font></i></b>
<p><font face="Arial"><font size=-1>function test1() {</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; var str;</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; str = '"Hello World";</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; return str;</font></font>
<br><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>var str = test1( );</font></font>
<br><font face="Arial"><font size=-1>//out is expected to be Java Object
exposed to the script scope</font></font>
<br><font face="Arial"><font size=-1>out.println ("JavaScript - Test 1
- " + str);</font></font>
<p><b><i><font face="Arial"><font size=-1>/* Test 2 */</font></font></i></b>
<p><b><i><font face="Arial"><font size=-1>/* Instantiate a Javaobject for
this scope and use it */</font></font></i></b>
<p><font face="Arial"><font size=-1>function test2(){</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; // create a Java
string buffer object from JavaScript and use its java instance</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; // This uses an
another Java object created for creating new objects within Java and</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; // brings the same
for JavaScript execution scope</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; // Refer _create.java
for more information</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; create.getInstance("java.lang.StringBuffer","buffer");</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; //JavaScript refers
the java object instance as buffer</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; out.println(buffer.toString());</font></font>
<br>&nbsp;&nbsp;&nbsp; <font face="Arial"><font size=-1>buffer.append("I
am a javaobject dynamically created and executed in JavaScript");</font></font>
<br>&nbsp;&nbsp;&nbsp; <font face="Arial"><font size=-1>return buffer.toString();</font></font>
<br><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>var str = test2();</font></font>
<br><font face="Arial"><font size=-1>out.println("From JavaScript - Test
2 " + str);</font></font>
<p><font face="Arial"><font size=-1>Let us write a simple Javahost Object
using the Rhino engine to execute the above script,</font></font>
<p><b><font face="Arial"><font size=-1>Fig 2.1 - JSHost.java</font></font></b>
<p><font face="Arial"><font size=-1>/**</font></font>
<br><font face="Arial"><font size=-1>* @author Madhukumar Seshadri</font></font>
<br><font face="Arial"><font size=-1>* @version</font></font>
<br><font face="Arial"><font size=-1>*/</font></font>
<p><font face="Arial"><font size=-1>import org.mozilla.javascript.*;</font></font>
<br><font face="Arial"><font size=-1>import java.io.*;</font></font>
<br><font face="Arial"><font size=-1>import java.lang.*;</font></font>
<br><i><font face="Arial"><font size=-1>// import com.xxx.xxx.*;</font></font></i>
<p><font face="Arial"><font size=-1>public class JSHost extends Object
{</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; /** Creates new
JSHost */</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; public JSHost()
{</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; }</font></font>
<p><i><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; /*** Executes
.js file ***/</font></font></i>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; public Object executeJS
(String jsfname){</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; //You can also
use evaluateReader</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; File fp = new File(jsfname);</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; String str_buff
=null;</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; try {</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
FileReader fr = new FileReader(jsfname);</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
int length = (int) fp.length();</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
char cbuff[] = new char[(char)length];</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
fr.read(cbuff);</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
str_buff = new String(cbuff);</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; } catch(Exception
e) {</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
e.printStackTrace();</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; }</font></font>
<p><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; //Execute the .js
file content</font></font>
<br><font face="Arial"><font size=-1>&nbsp;&nbsp;&nbsp; return executeJSSource(str_buff);</font></font>
<br><font face="Arial"><font size=-1>}</font></font>
<p><i><font face="Arial"><font size=-1>/*** Executes javascript source
***/</font></font></i>
<br><font face="Arial"><font size=-1>public Object executeJSSource (String
jsbuff){</font></font>
<br><font face="Arial"><font size=-1>Object any=null;</font></font>
<br><font face="Arial"><font size=-1>try{</font></font>
<br><i><font face="Arial"><font size=-1>//Enter the Context</font></font></i>
<br><font face="Arial"><font size=-1><i>// Refer </i><u><font color="#0000FF">http://www.mozilla.org/js/rhino/tutorial.html</font></u></font></font>
<br><font face="Arial"><font size=-1>Context context = Context.enter();</font></font>
<br><i><font face="Arial"><font size=-1>// Get the execution scope</font></font></i>
<br><font face="Arial"><font size=-1>Scriptable scope = context.initStandardObjects(null);</font></font>
<p><i><font face="Arial"><font size=-1>//----------- For Test 1 - Get System.out
in scope</font></font></i>
<br><font face="Arial"><font size=-1>//Scriptable jObj1 = Context.toObject(System.out,
scope);</font></font>
<br><font face="Arial"><font size=-1>scope.put("out", scope, jObj1);</font></font>
<p><i><font face="Arial"><font size=-1>//------------ For Test 2 - Instantiate
Create Object and get that in scope</font></font></i>
<br><i><font face="Arial"><font size=-1>//Allow JScript to create Java
Objects</font></font></i>
<br><i><font face="Arial"><font size=-1>//Bring the _create object to context</font></font></i>
<br><font face="Arial"><font size=-1>_create create = new _create( );</font></font>
<br><i><font face="Arial"><font size=-1>//Register this context and scope
to this create object instance</font></font></i>
<br><font face="Arial"><font size=-1>create.registerContext(context,scope);</font></font>
<br><font face="Arial"><font size=-1>//Scriptable jObj2 = Context.toObject(_create,
scope);</font></font>
<br><font face="Arial"><font size=-1>scope.put("create",scope,create);</font></font>
<br><i><font face="Arial"><font size=-1>//Evaluate (or execute js)</font></font></i>
<br><font face="Arial"><font size=-1><i>//Refer </i><u><font color="#0000FF">http://www.mozilla.org/js/rhino/tutorial.html</font></u></font></font>
<br><font face="Arial"><font size=-1>any = context.evaluateString(scope,
jsbuff, "", 1, null);</font></font>
<br><i><font face="Arial"><font size=-1>//Exit the Context</font></font></i>
<br><font face="Arial"><font size=-1>context.exit( );</font></font>
<br><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>catch ( JavaScriptException jse) {</font></font>
<br><font face="Arial"><font size=-1>jse.printStackTrace();</font></font>
<br><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>return any;</font></font>
<p><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>}</font></font>
<br>&nbsp;
<br>&nbsp;
<p><font face="Arial"><font size=-1>Let us write a class for creating new
Java objects and bringing them to this script execution scope,</font></font>
<p><b><font face="Arial"><font size=-1>Fig 2.2 _create.java</font></font></b>
<p><i><font face="Arial"><font size=-1>/**</font></font></i>
<p><i><font face="Arial"><font size=-1>* @author Madhukumar</font></font></i>
<p><i><font face="Arial"><font size=-1>*/</font></font></i>
<p><font face="Arial"><font size=-1>import java.lang.Class;</font></font>
<p><font face="Arial"><font size=-1>import org.mozilla.javascript.*;</font></font>
<p><font face="Arial"><font size=-1>public class _create extends Object
{</font></font>
<p><font face="Arial"><font size=-1>static Context ptr = null;</font></font>
<p><font face="Arial"><font size=-1>static Scriptable scope =null;</font></font>
<p><font face="Arial"><font size=-1>public _create () { }</font></font>
<p><font face="Arial"><font size=-1>public void registerContext(Context
cptr, Scriptable sc){</font></font>
<p><font face="Arial"><font size=-1>ptr = cptr;</font></font>
<p><font face="Arial"><font size=-1>scope = sc;</font></font>
<p><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>public void getInstance(String classname,String
jsclassname) {</font></font>
<p><font face="Arial"><font size=-1>Object any=null;</font></font>
<p><font face="Arial"><font size=-1>try {</font></font>
<p><font face="Arial"><font size=-1>Class thisclass = Class.forName(classname);</font></font>
<p><font face="Arial"><font size=-1>any = thisclass.newInstance();</font></font>
<p><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>catch(Exception e){</font></font>
<p><font face="Arial"><font size=-1>e.printStackTrace();</font></font>
<p><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>if( ptr != null) {</font></font>
<p><font face="Arial"><font size=-1>if (scope !=null) {</font></font>
<p><i><font face="Arial"><font size=-1>//register created object for this
execution scope</font></font></i>
<p><font face="Arial"><font size=-1>scope.put(jsclassname,scope,any);</font></font>
<p><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>}</font></font>
<br>&nbsp;
<br>&nbsp;
<p><font face="Arial"><font size=-1>It is time to test the code, so let
us write a small object that will use the JSHost object,</font></font>
<p><b><font face="Arial"><font size=-1>Fig 3 - JSHosttest.java</font></font></b>
<p><font face="Arial"><font size=-1>/**</font></font>
<p><font face="Arial"><font size=-1>* @author Madhukumar</font></font>
<p><font face="Arial"><font size=-1>* @version</font></font>
<p><font face="Arial"><font size=-1>*/</font></font>
<p><font face="Arial"><font size=-1>public class JSHosttest extends Object
{</font></font>
<p><font face="Arial"><font size=-1>/** Creates new JSHostTest*/</font></font>
<p><font face="Arial"><font size=-1>public JSHosttest() {</font></font>
<p><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>public static void main (String args[]){</font></font>
<p><font face="Arial"><font size=-1>if (args.length &lt; 1) {</font></font>
<p><font face="Arial"><font size=-1>System.out.println("Usage - Java JSHosttest.class
&lt;js source file>");</font></font>
<p><font face="Arial"><font size=-1>return;</font></font>
<p><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>JSHost jsh = new JSHost();</font></font>
<p><font face="Arial"><font size=-1>System.out.println("Executing JavaScript
file - " + args[0]);</font></font>
<p><font face="Arial"><font size=-1>Object result = jsh.executeJS(args[0]);</font></font>
<p><font face="Arial"><font size=-1>if (result instanceof String){</font></font>
<p><font face="Arial"><font size=-1>System.out.println("Results - " + result);</font></font>
<p><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>}</font></font>
<p><font face="Arial"><font size=-1>}</font></font>
<br>&nbsp;
<br>&nbsp;
<p><font face="Arial"><font size=-1>For more explanations on the code execution,
please refer embedding tutorial <a href="http://www.mozilla.org/js/rhino/tutorial.html">http://www.mozilla.org/js/rhino/tutorial.html</a>
and for all documentation and examples on Rhino visit <a href="http://www.mozilla.org/rhino/doc.html">http://www.mozilla.org/rhino/doc.html</a>.</font></font>
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
</body>
</html>

View File

@@ -1,89 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
<title>Rhino Examples</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<h1>
Rhino Examples</h1></center>
Examples have been provided that show how to control the JavaScript engine
and to implement scriptable host objects. All the examples are in the cvs
tree at <tt><a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/">mozilla/js/rhino/examples</a></tt>.
<br>&nbsp;
<h2>
Sample Scripts</h2>
The <tt><a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/unique.js">unique.js</a></tt>
script allows printing unique lines from a file.
<p>The <tt><a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/liveConnect.js">liveConnect.js</a></tt>
script shows a sample usage of LiveConnect (Java-to-JavaScript connectivity).
<p>The <tt><a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/jsdoc.js">jsdoc.js</a></tt>
script is a JavaScript analog to Java's <tt>javadoc</tt>. It makes heavy
use of regular expressions.
<p>The <tt><a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/checkParam.js">checkParam.js</a></tt>
script is a useful tool to check that <tt>@param</tt> tags in Java documentation
comments match the parameters in the corresponding Java method.
<p>The <tt><a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/enum.js">enum.js</a></tt>
script is a good example of using a JavaAdapter to implement a Java interface
using a JavaScript object.
<p>The <a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/NervousText.js">NervousText.js</a>
script is a JavaScript implementation of the famous NervousText applet
using JavaScript compiled to Java classes using <a href="jsc.html">jsc</a>.
It can be run in the HTML page <a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/NervousText.html">NervousText.html</a>.
<br>&nbsp;
<h2>
Controlling the JavaScript Engine</h2>
<h4>
The RunScript class</h4>
<tt><a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/RunScript.java">RunScript.java</a></tt>
is a simple program that executes a script from the command line.
<h4>
The Control class</h4>
<tt><a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/Control.java">Control.java</a></tt>
is a program that executes a simple script and then manipulates the result.
<h4>
JavaScript Shell</h4>
<tt><a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/Shell.java">Shell.java</a></tt>
is a program that executes JavaScript programs; it is a simplified version
of the shell in the <tt>tools</tt> package. The programs may be specified
as files on the command line or by typing interactively while the shell
is running.
<h4>
<b>Multithreaded Script Execution</b></h4>
<tt><a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/DynamicScopes.java">DynamicScopes.java</a></tt>
is a program that creates a single global scope object and then shares
it across multiple threads. Sharing the global scope allows both information
to be shared across threads, and amortizes the cost of Context.initStandardObjects
by only performing that expensive operation once.
<br>&nbsp;
<h2>
Implementing Host Objects</h2>
First check out the <a href="http://www.mozilla.org/rhino/tutorial.html">tutorial</a>
if you haven't already.
<h4>
The Foo class - Extending ScriptableObject</h4>
<tt><a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/Foo.java">Foo.java</a></tt>
is a simple JavaScript host object that includes a property with an associated
action and a variable argument method.
<br>&nbsp;
<h4>
The Matrix class - Implementing Scriptable</h4>
<tt><a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/Matrix.java">Matrix.java</a></tt>
provides a simple multidimensional array by implementing the Scriptable
interface.
<br>&nbsp;
<h4>
The File class - An advanced example</h4>
<tt><a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/File.java">File.java</a></tt>
extends ScriptableObject to provide a means of reading and writing files
from JavaScript. A more involved example of host object definition.
<p>
<hr WIDTH="100%">
<br><a href="index.html">back to top</a>
</body>
</html>

View File

@@ -1,52 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]">
<meta name="KeyWords" content="Rhino, JavaScript, Java">
<title>Rhino FAQ</title>
</head>
<body bgcolor="#FFFFFF">
<script src="owner.js"></script>
<center>
<h1>
Frequently Asked Questions about Rhino</h1></center>
<script>document.write(owner());</script>
<br><script>
var d = new Date(document.lastModified);
document.write((d.getMonth()+1)+"/"+d.getDate()+"/"+d.getFullYear());
document.write('<br>');
</script>
<center>
<hr WIDTH="100%"></center>
<p><b><font size=+2>Q</font>.</b> <i>How do I create a Java array from
JavaScript?</i>
<p><b><font size=+2>A.</font></b> You must use Java reflection. For instance,
to create an array of java.lang.String of length five, do
<blockquote><tt>var stringArray = java.lang.reflect.Array.newInstance(java.lang.String,
5);</tt></blockquote>
Then if you wish to assign the string "hi" to the first element, simply
execute <tt>stringArray[0] = "hi"</tt>.
<p>Creating arrays of primitive types is slightly different: you must use
the TYPE field. For example, creating an array of seven ints can be done
with the code
<blockquote><tt>var intArray = java.lang.reflect.Array.newInstance(java.lang.Integer.TYPE,
7);</tt></blockquote>
<p><br><b><font size=+2>Q</font>.</b> <i>When I try to execute a script
I get the exception </i><tt>Required security context missing</tt><i>.
What's going on?</i>
<p><b><font size=+2>A.</font></b> You've likely missed placing the <tt>Security.properties</tt>
file in your class path at <tt>org.mozilla.javascript.resources</tt>.
<h3>
<hr WIDTH="100%"><br>
<a href="index.html">back to top</a></h3>
</body>
</html>

View File

@@ -1,48 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.51 [en] (WinNT; U) [Netscape]">
<title>Small Footprint</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<h1>
Small Footprint</h1></center>
A few changes can be made to reduce the footprint of Rhino for embeddings
where space is at a premium. On a recent build, Rhino consumed 355,883
bytes of space for uncompressed class files. With various changes that
number can be reduced to 281,455 bytes.
<br>&nbsp;
<h3>
Tools</h3>
Most embeddings won't need any of the classes in <tt>org.mozilla.javascript.tools</tt>
or any of its subpackages.
<br>&nbsp;
<h3>
Regular Expressions</h3>
The package <tt>org.mozilla.javascript.regexp</tt> can be removed. Rhino
will continue to run, although it will not be able to execute any regular
expression matches. This change saves 37,792 bytes of class files.
<br>&nbsp;
<h3>
JavaAdapter</h3>
Implementing the JavaAdapter functionality requires the ability to generate
classes on the fly. Removing <tt>org.mozilla.javascript.JavaAdapter</tt> and all
the classes in package <tt>org.mozilla.classfile</tt> will disable this
functionality, but Rhino will otherwise run correctly. These changes save
36,636 bytes.
<br>&nbsp;
<h3>
Optimizer</h3>
It is possible to run Rhino with interpreter mode only, allowing you to remove
classes for classfile generation. Remove the classes in packages
<tt>org.mozilla.classfile</tt> and <tt>org.mozilla.javascript.optimizer</tt>.
<br>&nbsp;
<p>
<hr WIDTH="100%">
<br><a href="index.html">back to top</a>
</body>
</html>

View File

@@ -1,44 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]">
<title>Help with Rhino</title>
</head>
<body>
<center><b><font size=+3>Help with Rhino</font></b></center>
<script src="owner.js"></script>
<p>Have a question that you can't find answer to in the <a href="doc.html">documentation</a>?
Here are some additional resources for help:
<br>&nbsp;
<h3>
<font size=+1>Newsgroup and Mail Gateway</font></h3>
The <a href="news:netscape.public.mozilla.jseng">netscape.public.mozilla.jseng</a>
newsgroup answers questions about both Rhino and the C implementation of
JavaScript. You can get to the newsgroup through a mail gateway. Send a
message with the subject "subscribe" to <a href="mailto:mozilla-jseng-request@mozilla.org?subject=subscribe">mozilla-jseng-request@mozilla.org</a>.
To post messages, send mail to <a href="mailto:mozilla-jseng@mozilla.org">mozilla-jseng@mozilla.org</a>.
To unsubscribe, mail with "unsubscribe" in the subject to <a href="mailto:mozilla-jseng-request@mozilla.org?subject=unsubscribe">mozilla-jseng-request@mozilla.org</a>.
<p>
To view archived messages, try <a href="http://groups.google.com/groups?q=netscape.public.mozilla.jseng&hl=en&lr=&safe=off&site=groups">Google groups</a> or
other newsgroup services.
<h3>
Bug System</h3>
Use <a href="http://bugzilla.mozilla.org/enter_bug.cgi?product=Rhino">Bugzilla</a>
to enter bugs against Rhino. Note that Rhino has its own product category.
<br>&nbsp;
<h3>
Module Owner</h3>
The module owner,&nbsp;<script>document.write(owner());</script>
, can
be mailed for help as well, although he may copy his response to the newsgroup
to help others.
<p>
<hr WIDTH="100%"><a href="index.html">back to top</a>
<br>&nbsp;
<br>&nbsp;
</body>
</html>

View File

@@ -1,45 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.72 [en]C-NSCP (WinNT; U) [Netscape]">
<title>Rhino History</title>
</head>
<body>
<center><b><font size=+3>Rhino History</font></b></center>
<p>Rhino gets its name from the animal on the cover of the <a href="http://www.ora.com/">O'Reilly</a>
book about JavaScript.
<p>The Rhino project was started at Netscape in Fall 1997. At the time,
Netscape was planning to produce a version of Navigator written entirely
in Java and so it needed an implementation of JavaScript written in Java.
When Netscape stopped work on "Javagator", as it was called, somehow Rhino
escaped the axe (rumor had it that the executives "forgot" it existed).
Since then, a couple of major companies (including Sun) have licensed Rhino
for use in their products and paid Netscape to do so, allowing us to continue
work on it. Now Rhino is planned to be part of several server products
from Netscape as well.
<p>Originally, Rhino compiled all JavaScript code to Java bytecodes in
generated classfiles. This produced the best performance (often beating
the C implementation of JavaScript when run on a JIT), but suffered from
two faults. First, compilation time was long since generating Java bytecodes
and loading the generated classes was a heavyweight process. Also, the
implementation effectively leaked memory since most JVMs don't really collect
unused classes or the strings that are interned as a result of loading
a class file.
<p>So in Fall of 1998, Rhino added an interpretive mode. The classfile
generation code was moved to an optional, dynamically-loaded package. Compilation
is faster and when scripts are no longer in use they can be collected like
any other Java object.
<p>Rhino was released to mozilla.org in April of 1998. Originally Rhino
classfile generation had been held back from release. However the licensees
of Rhino have now agreed to release all of Rhino to open source, including
class file generation. Since its release to open source, Rhino has found
a variety of <a href="users.html">uses</a> and an increasing
number of people have contributed to the code.
<p>
<hr WIDTH="100%"><a href="index.html">back to top</a>
</body>
</html>

View File

@@ -1,75 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; U) [Netscape]">
<meta name="KeyWords" content="Rhino, JavaScript, Java, Mozilla">
<title>Rhino - JavaScript for Java</title>
</head>
<body>
<center>
<h1>
Rhino: JavaScript for Java</h1></center>
<center><img SRC="rhino50.jpg" height=200 width=398></center>
<hr WIDTH="100%">Rhino is an open-source implementation of JavaScript written
entirely in Java. It is typically embedded into Java applications to provide
scripting to end users.
<table WIDTH="100%" >
<tr>
<td>
<div align=right><b><a href="download.html">Downloads</a></b></div>
</td>
<td>How to get source and binaries.</td>
</tr>
<tr>
<td>
<div align=right><b><a href="doc.html">Documentation</a></b></div>
</td>
<td>Information on Rhino for script writers and embedders.</td>
</tr>
<!--
<tr>
<td>
<div align=right><b><a href="users.html">Users</a></b></div>
</td>
<td>How people are using Rhino.</td>
</tr>
-->
<tr>
<td>
<div align=right><b><a href="history.html">History</a></b></div>
</td>
<td>The ancestry of the beast.</td>
</tr>
<tr>
<td>
<div align=right><b><a href="help.html">Help</a></b></div>
</td>
<td>Some resources if you get stuck.</td>
</tr>
</table>
<hr WIDTH="100%"><font size=-1>Module owner&nbsp;</font><script src="owner.js"></script>
<script>document.write(owner());</script>
<br><font size=-1>Rhino image courtesy of Paul Houle.</font><!---
Add reference to
http://www.javaworld.com/jw-08-1999/jw-08-howto.html
and
http://www.javaworld.com/javaworld/jw-09-1999/jw-09-howto.html
--->
</body>
</html>

View File

@@ -1,66 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.6 [en] (WinNT; U) [Netscape]">
<meta name="KeyWords" content="Rhino, JavaScript, Java">
<title>Followup to JavaOne</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<h1>
Followup to JavaOne session on Rhino</h1></center>
This page is intended to follow up on the <a href="http://www.javasoft.com/javaone/">JavaOne</a>
session on <a href="http://industry.java.sun.com/javaone/99/event/0,1768,629,00.html">"Rhino:
JavaScript for the Java Platform"</a>. I hope it will be useful whether
or not you actually attended the talk.
<br>&nbsp;
<h2>
Slides</h2>
<a href="http://industry.java.sun.com/javaone/99/pdfs/e629.pdf">Slides</a>
(PDF file, 1112246 bytes)&nbsp; can be downloaded from Sun's site.
<br>&nbsp;
<br>&nbsp;
<h2>
More on Q &amp; A</h2>
Following the talk there was an excellent question and answer session where
many attendees asked good questions and offered useful suggestions. I'll
follow up on some of those here. I'll start a thread on the newsgroup <a href="news://news.mozilla.org/netscape.public.mozilla.jseng">netscape.public.mozilla.jseng</a>
so people can ask addition questions or comments there.
<h3>
Java classes visible to scripts</h3>
One attendee raised the point that many embeddings may not want scripts
to be able to access all Java classes. This is an excellent point, and
I've implemented an addition to the <a href="../js/rhino/org/mozilla/javascript/SecuritySupport.html">SecuritySupport</a>
class that allows embedders to choose which classes are exposed to scripts.
<h3>
Easier "importing" of Java classes</h3>
Another attendee suggested that the current method of referring to Java
classes (like <tt>java.lang.String</tt> or <tt>Packages.org.mozilla.javascript.Context</tt>)
could be improved. I've implemented a set of changes that make importing
easier, but I'm not convinced that adding them is the right thing to do
due to some drawbacks.
<p>To see what I've done, take a look at the javadoc for the <a href="../js/rhino/org/mozilla/javascript/ImporterTopLevel.html">ImporterTopLevel</a>
class. You'll see that it's now possible to make function calls to "import"
Java classes so that they can be referred to without qualification. I didn't
use the word "import" because that's a keyword in JavaScript.
<p>There are a few drawbacks to this implemenation. First, there is a runtime
cost associated with every lookup of a top-level variable. The problem
is that it's not possible to use the Java runtime to determine the set
of classes from a given package. Instead, importing the package "java.util"
saves the package name in a special list and every access to the global
scope that fails to find a matching variable causes the runtime to see
if there is a class by that name in the "java.util" package. Even for lookups
that succeed there is an additional method call.
<p>Another drawback to this implementation is namespace pollution: now
"importClass" and "importPackage" have special meaning. It's still possible
to substitute your own variables for these functions, but it's still possible
that program behavior could change.
<p>So I'm interested in people's opinion: Is this benefit worth the costs?
<p>
<hr WIDTH="100%">
<br><a href="index.html">back to top</a>
</body>
</html>

View File

@@ -1,82 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; U) [Netscape]">
<title>JavaScript Compiler</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<h1>
JavaScript Compiler</h1></center>
The JavaScript compiler translates JavaScript source into Java class files.
The resulting Java class files can then be loaded and executed at another
time, providing a convenient method for transfering JavaScript, and for
avoiding translation cost.
<p>Note that the top-level functions available to the shell (such as <tt>print</tt>)
are <i>not</i> available to compiled scripts when they are run outside
the shell.
<br>&nbsp;
<h2>
Invoking the Compiler</h2>
<tt>java org.mozilla.javascript.tools.jsc.Main</tt> [<i>options</i>] <i>file1</i><tt>.js</tt>
[<i>file2</i><tt>.js</tt>...]
<p>where <i>options</i> are:
<p><tt>-extends <i>java-class-name</i></tt>
<blockquote>Specifies that a java class extending the Java class <i>java-class-name</i>
should be generated from the incoming JavaScript source file. Each global
function in the source file is made a method of the generated class, overriding
any methods in the base class by the same name.</blockquote>
<tt>-implements <i>java-intf-name</i></tt>
<blockquote>Specifies that a java class implementing the Java interface
<i><tt>java-intf-name</tt></i>
should be generated from the incoming JavaScript source file. Each global
function in the source file is made a method of the generated class, implementing
any methods in the interface by the same name.</blockquote>
<tt>-debug</tt>
<br><tt>-g</tt>
<ul>Specifies that debug information should be generated. May not be combined
with optimization at an <i>optLevel</i> greater than zero.</ul>
<tt>-nosource</tt>
<ul>Does not save the source in the class file. Functions and scripts compiled
this way cannot be decompiled. This option can be used to avoid distributing
source or simply to save space in the resulting class file.</ul>
<tt>-o </tt><i>outputFile</i>
<ul>Writes the class file to the given file (which should end in <tt>.class</tt>).
The string <i>outputFile</i> must be a writable filename.</ul>
<tt>-opt </tt><i>optLevel</i>
<br><tt>-O</tt> <i>optLevel</i>
<ul>Optimizes at level <i>optLevel</i>, which must be an integer between
-1 and 9. See <a href="opt.html">Optimization</a> for more details. If
<i>optLevel</i>
is greater than zero, <tt>-debug</tt> may not be specified.</ul>
<tt>-package</tt> <i>packageName</i>
<ul>Specifies the package to generate the class into. The string <i>packageName</i>
must be composed of valid identifier characters optionally separated by
periods.</ul>
<tt>-version </tt><i>versionNumber</i>
<ul>Specifies the language version to compile with. The string <i>versionNumber</i>
must be one of <tt>100</tt>, <tt>110</tt>, <tt>120</tt>, <tt>130</tt>,
or <tt>140</tt>. See <a href="overview.html#versions">JavaScript Language
Versions</a> for more information on language versions.</ul>
<h2>
Examples</h2>
<tt>$ cat test.js</tt>
<br><tt>java.lang.System.out.println("hi, mom!");</tt>
<br><tt>$ java org.mozilla.javascript.tools.jsc.Main test.js</tt>
<br><tt>$ ls *.class</tt>
<br><tt>test.class</tt>
<br><tt>$ java test</tt>
<br><tt>hi, mom!</tt>
<p><tt>$ java org.mozilla.javascript.tools.jsc.Main -extends java.applet.Applet
\</tt>
<br><tt>&nbsp;&nbsp;&nbsp; -implements java.lang.Runnable NervousText.js</tt>
<br>&nbsp;
<p>
<hr WIDTH="100%">
<br><a href="index.html">back to top</a>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

View File

@@ -1,86 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.72 [en]C-NSCP (WinNT; U) [Netscape]">
<title>JavaScript Requirements and Limitations</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<h1>
Requirements and Limitations</h1></center>
<h2>
<b>Requirements</b></h2>
Rhino requires version 1.1 or greater of Java.
<p>To use the JavaAdapter feature or an optimization level of 0 or greater,
Rhino must be running under a security manager that allows the definition
of class loaders.
<p>
<hr WIDTH="100%">
<h2>
<b>Limitations</b></h2>
<h3>
<b>Platforms and </b>JITs</h3>
Many platforms and JREs have problems converting decimal numbers to and
from strings. These errors are usually boundary case errors and will show
up as test failures in section 7.7.3.
<p>Windows versions of the Symantec JIT prior to 3.00.029(i) will report
internal errors for some generated class files.
<p>On the Symantec JIT and the AIX JVM, accessing a static field of a class
that has not yet loaded may not give the correct value of the field. For
example, accessing
<tt>java.io.File.separatorChar</tt> before <tt>java.io.File</tt>
has been loaded will return a value of 0. (This is a bug in the JIT; accessing
the field should cause the class to be loaded.)
<p>The AIX Java version "JDK 1.1.6 IBM build a116-19980924 (JIT enabled:
jitc)" core dumps running several classes generated by Rhino. It also has
errors in java.lang.Math.pow that are reflected as failures in the JavaScript
Math object's pow method.
<p>IBM Java for Linux version "JDK 1.1.8 IBM build l118-19991013 (JIT enabled:
jitc)" has errors in java.lang.Math.pow that are reflected as test failures
in the JavaScript Math object's pow method.
<p>Solaris JDK 1.1.6 has errors in java.lang.Math.atan2 that are reflected
as test failures in the JavaScript Math object's atan2 method.
<br>&nbsp;
<h3>
<b>LiveConnect</b></h3>
If a JavaObject's field's name collides with that of a method, the value
of that field is retrieved lazily, and can be counter-intuitively affected
by later assignments:
<blockquote><tt>javaObj.fieldAndMethod = 5;</tt>
<br><tt>var field = javaObj.fieldAndMethod;</tt>
<br><tt>javaObj.fieldAndMethod = 7;</tt>
<br><tt>// now, field == 7</tt></blockquote>
You can work around this by forcing the field value to be converted to
a JavaScript type when you take its value:
<blockquote><tt>javaObj.fieldAndMethod = 5;</tt>
<br><tt>var field = javaObj.fieldAndMethod + 0; // force conversion now</tt>
<br><tt>javaObj.fieldAndMethod = 7;</tt>
<br><tt>// now, field == 5</tt></blockquote>
<h3>
<b>JSObject</b></h3>
Rhino does NOT support the <tt>netscape.javascript.JSObject</tt> class.
<br>&nbsp;
<h3>
<b>Date object</b></h3>
The JavaScript Date object depends on time facilities of the underlying
Java runtime to determine daylight savings time dates. Earlier JRE versions
may report a date for the daylight savings changeover that is a week off.
JRE 1.1.6 reports the correct date.
<p>Under the 1.1.6 JRE, evaluating <tt>(new Date(1998, 9, 25, 2)).toString()</tt>
returns:
<pre>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sun Oct 25 02:00:00 GMT-0800 (PST) 1998</pre>
Earlier versions may return:
<pre>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sun Oct 25 02:00:00 GMT-0700 (PDT) 1998</pre>
(the JRE doesn't report the changeover until Nov. 1.)
<p>The Microsoft SDK 3.1 for Java also exhibits this problem.
<p>
<hr WIDTH="100%">
<br><a href="rhino.html">back to top</a>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -1,68 +0,0 @@
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Author" CONTENT="Norris Boyd">
<META NAME="GENERATOR" CONTENT="Mozilla/4.05 [en] (WinNT; U) [Netscape]">
<TITLE>Optimization</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<H1>
Optimization</H1></CENTER>
<H2>
Optimization settings</H2>
<P>The currently supported optimization settings are:</P>
<P><B>-1</B>
<P><B></B>Interpretive mode is always
used. The compilation time is minimized at the expense of runtime performance.
No class files are generated, which may improve memory usage depending on your
system.
<p>
If the optimization package is not available, then optimization acts as if it is always -1.
</P>
<P><B>0</B>
<P><B></B>No optimizations are
performed. The bytecode compiler runs fastest in this mode, but the generated byte code
is less efficient.</P>
<P><B>1-9</B>
<P>All optimizations are performed. Simple data &amp; type
flow analysis is performed to determine which JavaScript variables can be
allocated to Java VM registers, and which variables are used only as Numbers.
Local common sub-expressions are collapsed (currently this only happens for
property lookup, but in the future more expressions may be optimized). All local
variables and parameters are allocated to Java VM registers. Function call
targets are speculatively pre-cached (based on the name used in the source) so
that dispatching can be direct, pending runtime confirmation of the actual
target. Arguments are passed as Object/Number pairs to reduce conversion
overhead.</P>
<P>Note:
<OL>
<LI>
Some language features (indirect calls to eval, use
of the arguments property of function objects) were previously not supported
in higher optimization levels. These features have been removed from the
language in ECMA, so higher optimization levels are now conformant.
<LI>
Future versions may allocate more aggressive
optimizations to higher optimization levels. For compatibility with future
versions, use level 1. For maximal optimization, use level 9, but retest
your application when upgrading to new versions.</LI>
</OL>
<P>
<HR WIDTH="100%">
<BR><A HREF="index.html">back to top</A>
<br>
</BODY>
</HTML>

View File

@@ -1,149 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.72 [en]C-NSCP (WinNT; U) [Netscape]">
<title>JavaScript Overview</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<h1>
Rhino Overview</h1></center>
<h3>
Overview of Rhino</h3>
Most people who have used JavaScript before have done so by adding scripts
to their HTML web pages. However, Rhino is an implementation of the core
language only and doesn't contain objects or methods for manipulating HTML
documents.
<p>Rhino contains
<ul>
<li>
All the features of JavaScript 1.5</li>
<li>
<a href="http://developer.netscape.com/library/documentation/communicator/jsguide4/livecon.htm">LiveConnect</a>
-- allows direct scripting of Java</li>
<li>
A JavaScript shell for executing JavaScript scripts</li>
<li>
A JavaScript compiler to transform JavaScript source files into Java class
files</li>
</ul>
<h3>
Language</h3>
The JavaScript language itself is standardized by Standard ECMA-262 <i>ECMAScript:
A general purpose, cross-platform programming language</i>. Rhino 1.5 implements
JavaScript 1.5, which conforms to Edition 3 of the Standard. The Standard
may be <a href="http://www.ecma.ch/stand/ecma-262.htm">downloaded</a> or
obtained by mail from ECMA, 114 Rue du Rh&ocirc;ne, CH1204 Geneva, Switzerland.
<p>In addition, Rhino has implemented JavaAdapters, which allows JavaScript
to implement any Java interface or extend any Java class with a JavaScript
object. See the <tt>enum.js</tt> example for more information.
<p>Numerous books and tutorials on JavaScript are available.
<br>&nbsp;
<br>&nbsp;
<h3>
Deprecated Language Features</h3>
Several language features introduced in JavaScript 1.2 are now deprecated.
These features allow "computational reflection": that is, the ability for
a script to determine and influence aspects of the way it is evaluated.
These features are generally not broadly useful, yet they impose significant
constraints on implementations that hamper or prevent optimization. The
deprecated features are the <tt>__proto__</tt> and <tt>__parent__</tt>
properties, and the constructors <tt>With</tt>, <tt>Closure</tt>, and <tt>Call</tt>.
Attempts to invoke these constructors with the language version 1.4 will
result in an error. For other versions, a warning will be generated.
<br>&nbsp;
<br>&nbsp;
<h3>
Internationalization</h3>
The messages reported by the JavaScript engine are by default retrieved
from the property file <tt>org/mozilla/javascript/resources/Messages.properties</tt>.
If other properties files with extensions corresponding to the current
locale exist, they will be used instead.
<br>&nbsp;
<br>&nbsp;
<h3>
<a NAME="versions"></a>JavaScript Language Versions</h3>
Some behavior in the JavaScript engine is dependent on the language version.
In browser embeddings, this language version is selected using the LANGUAGE
attribute of the SCRIPT tag with values such as "JavaScript1.2".
<p>Version 1.3 and greater are ECMA conformant.
<p><b>Operators <tt>==</tt> and <tt>!=</tt></b>
<p>Version 1.2 only uses strict equality for the == and != operators. In
version 1.3 and greater, == and != have the same meanings as ECMA. The
operators === and !== use strict equality in all versions.
<p><b>ToBoolean</b>
<p><tt>Boolean(new Boolean(false))</tt> is false for all versions before
1.3. It is true (and thus ECMA conformant) for version 1.3 and greater.
<p><b>Array.prototype.toString and Object.prototype.toString</b>
<p>Version 1.2 only returns array or object literal notation ("[1,2,3]"
or "{a:1, b:2}" for example). In version 1.3 and greater these functions
are ECMA conformant.
<p><b>Array constructor</b>
<p><tt>Array(i)</tt> for a number argument <tt>i</tt> constructs an array
with a single element equal to <tt>i</tt> for version 1.2 only. Otherwise
the ECMA conformant version is used (an array is constructed with no elements
but with length property equal to <tt>i</tt>).
<p><b>String.prototype.substring</b>
<p>For version 1.2 only, the two arguments are not swapped if the first
argument is less than the second one. All other versions are ECMA compliant.
<p><b>String.prototype.split</b>
<p>For version 1.2 only, split performs the Perl4 special case when given
a single space character as an argument (skips leading whitespace, and
splits on whitespace). All other versions split on the space character
proper as specified by ECMA.
<br>&nbsp;
<br>&nbsp;
<h3>
Security</h3>
The security features in Rhino provide the ability to track the origin
of a piece of code (and any pieces of code that it may in turn generate).
These features allow for the implementation of a traditional URL-based
security policy for JavaScript as in Netscape Navigator. Embeddings that
trust the JavaScript code they execute may ignore the security features.
<p>Embeddings that run untrusted JavaScript code must do two things to
enable the security features. First, every <tt>Context</tt> that is created
must be supplied an instance of an object that implements the <tt>SecuritySupport</tt>
interface. This will provide Rhino the support functionality it needs to
perform security-related tasks.
<p>Second, the value of the property <tt>security.requireSecurityDomain</tt>
should be changed to <tt>true</tt> in the resource bundle <tt>org.mozilla.javascript.resources.Security</tt>.
The value of this property can be determined at runtime by calling the
<tt>isSecurityDomainRequired</tt>
method of <tt>Context</tt>. Setting this property to true requires that
any calls that compile or evaluate JavaScript must supply a security domain
object of any object type that will be used to identify JavaScript code.
In a typical client embedding, this object might be a string with the URL
of the server that supplied the script, or an object that contains a representation
of the signers of a piece of code for certificate-based security policies.
<p>When JavaScript code attempts a restricted action, the security domain
can be retrieved in the following manner. The class context should be obtained
from the security manager (see <tt>java.lang.SecurityManager.getClassContext()</tt>).
Then, the class of the code that called to request the restricted action
can be obtained by looking an appropriate index into the class context
array. If the caller is JavaScript the class obtained may be one of two
types. First, it may be the class of the interpreter if interpretive mode
is in effect. Second, it may be a generated class if classfile generation
is supported. An embedding can distinguish the two cases by calling <tt>isInterpreterClass()</tt>
in the <tt>Context</tt> class. If it is the interpreter class, call the
getInterpreterSecurityDomain() method of Context to obtain the security
domain of the currently executing interpreted script or function. Otherwise,
it must be a generated class, and an embedding can call <tt>getSecurityDomain()</tt>
in the class implementing
<tt>SecuritySupport</tt>. When the class was
defined and loaded, the appropriate security domain was associated with
it, and can be retrieved by calling this method. Once the security domain
has been determined, an embedding can perform whatever checks are appropriate
to determine whether access should be allowed.
<p>
<hr WIDTH="100%">
<br><a href="index.html">back to top</a>
</body>
</html>

View File

@@ -1,3 +0,0 @@
function owner() {
return '<a href="mailto:nboyd'+'@'+ 'atg.com">Norris Boyd</a>'
}

View File

@@ -1,83 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.5 [en]C-NSCP (WinNT; I) [Netscape]">
<title>Performance Hints</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<h1>
Performance Hints</h1></center>&nbsp;
<h3>
<tt>var</tt> Statements</h3>Use <tt>var</tt> statements when possible. Not only is it good
programming practice, it can speed up your code by allowing the compiler to
generate special code to access the variables. For example, you could rewrite
<p><tt>function sum(a) {</tt>
<br><tt>&nbsp;&nbsp;&nbsp; result = 0;</tt>
<br><tt>&nbsp;&nbsp;&nbsp; for (i=0; i &lt;
a.length; i++)</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result += a[i];</tt>
<br><tt>&nbsp;&nbsp;&nbsp; return result;</tt>
<br><tt>}</tt>
<p>as
<p><tt>function sum(a) {</tt>
<br><tt>&nbsp;&nbsp;&nbsp; var result = 0;</tt>
<br><tt>&nbsp;&nbsp;&nbsp; for (var i=0; i
&lt; a.length; i++)</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result += a[i];</tt>
<br><tt>&nbsp;&nbsp;&nbsp; return result;</tt>
<br><tt>}</tt>
<p>This is not equivalent code because the second version does
not modify global variables <tt>result</tt> and <tt>i</tt>. However, if you don't intend for any other function to
access these variables, then storing them globally is probably wrong anyway
(what if you called another function that had a loop like the one in <tt>sum</tt>!).
<br>&nbsp;
<h3>
Arrays</h3>Use the forms of the Array constructor that
specify a size or take a list of initial elements. For example, the code
<p><tt>var a = new Array();</tt>
<br><tt>for (var i=0; i &lt; n; i++)</tt>
<br><tt>&nbsp;&nbsp;&nbsp; a[i] = i;</tt>
<p>could be sped up by changing the constructor call to <tt>new Array(n)</tt>. A constructor call like that indicates to
the runtime that a Java array should be used for the first <i>n</i> entries of the array. Similarly,
<tt>new
Array(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;)</tt> or <tt>[&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]</tt> will cause a 3-element
Java array to be allocated to hold the contents of the JavaScript array.
<br>&nbsp;
<br>&nbsp;
<h3>
<tt>eval</tt> and <tt>new Function</tt></h3>Avoid calling <tt>eval</tt> when
possible. Calls to <tt>eval</tt> are slow because the script
being executed must be compiled. Constructing a new function object can be slow
for the same reason, while function expressions are more efficient because the
function can be compiled. For example, the code
<p><tt>function MyObject(a) {</tt>
<br><tt>&nbsp;&nbsp;&nbsp; this.s = a;</tt>
<br><tt>&nbsp;&nbsp;&nbsp; this.toString = new
Function(&quot;return this.s&quot;);</tt>
<br><tt>}</tt>
<p>could be written more efficiently as
<p><tt>function MyObject(a) {</tt>
<br><tt>&nbsp;&nbsp;&nbsp; this.s = a;</tt>
<br><tt>&nbsp;&nbsp;&nbsp; this.toString =
function () { return this.s }</tt>
<br><tt>}</tt>
<p>Beginning with Rhino 1.4 Release 2, code
passed to eval and new Function will be interpreted rather than compiled to
class files.
<br>&nbsp;</p>
<h3>
with</h3>Using the <tt>with</tt>
statement prevents the compiler from generating code for fast access to local
variables. You're probably better off explicitly accessing any properties of the
object.
<br>&nbsp;
<p>
<hr WIDTH="100%">
<br><a href="index.html">back to top</a>
<br>
</body>
</html>

View File

@@ -1,162 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]">
<meta name="KeyWords" content="Rhino, JavaScript, Java">
<title>What's New in Rhino 1.5</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<h1>
What's New in Rhino 1.5 Release 1</h1></center>
<h2>
ECMA 262 Edition 3 Conformance</h2>
Rhino 1.5 implements JavaScript 1.5, which conforms to ECMA 262 Edition
3 (sometimes referred to as "ECMAScript"). Edition 3 standardized several
features of JavaScript that were present in JavaScript 1.4, including:
<ul>
<li>
regular expressions</li>
<li>
<tt>switch</tt> statements</li>
<li>
<tt>do</tt>...<tt>while</tt> loops</li>
<li>
statement labels and labelled <tt>break</tt> and <tt>continue</tt></li>
<li>
object literals</li>
<li>
nested functions</li>
<li>
exception handling</li>
<li>
the <tt>instanceof</tt> operator</li>
<li>
the <tt>in</tt> operator</li>
</ul>
In addition, new features were added to Edition 3 and JavaScript 1.5, including:
<ul>
<li>
Perl 5 regular expressions, including operators like greedy quantifiers</li>
<li>
errors as exceptions</li>
<li>
number formatting (<tt>Number.prototype.toFixed</tt>, <tt>Number.prototype.toExponential</tt>,
and <tt>Number.prototype.toGeneral</tt>)</li>
</ul>
<h2>
Changes since Rhino 1.4 Release 3</h2>
Other significant changes to Rhino since the initial release to open source
(1.4 Release 3) are listed below. Bug fixes won't be mentioned here, just
API changes or significant functionality changes.
<h3>
Compilation mode</h3>
Rhino has two modes of execution available. Interpretive mode has an interpreter
loop implemented in Java. Compilation mode compiles JavaScript code to
Java bytecodes in class files. This compilation can be done as part of
script evaluation using the same APIs already available for the interpreter,
or in a separate compile-time step. The code for the interpreter is located
in the <tt>org.mozilla.javascript.optimizer</tt> package.
<br>&nbsp;
<h3>
JavaScript Compiler</h3>
The distribution now contains an extra class that can be invoked from the
command line. This is <tt>jsc</tt>, the JavaScript compiler. This tool
can be used to create Java classes from JavaScript. Options exist to allow
creation of Java classes that implement arbitrary interfaces and extend
arbitrary base classes, allowing JavaScript scripts to implement important
protocols like applets and servlets. See <a href="http://www.mozilla.org/rhino/jsc.html">http://www.mozilla.org/rhino/jsc.html</a>.
<br>&nbsp;
<h3>
LiveConnect 3</h3>
Rhino now supports the LiveConnect 3 specification, or LC3. The most notable
change is support for overloaded method resolution. See <a href="http://www.mozilla.org/js/liveconnect/lc3_proposal.html">LiveConnect
Release 3 Goals/Features</a>.
<br>&nbsp;
<h3>
JavaBeans properties reflected as Java properties</h3>
Java classes with getFoo/setFoo methods will have a "foo" property in the
JavaScript reflection. Boolean methods are also reflected.
<br>&nbsp;
<h3>
Dynamic scope support</h3>
Rhino 1.5 implements support for dynamic scopes, which are particularly
useful for multithreaded environments like server embeddings.
<br>&nbsp;
<h3>
New semantics for <tt>ScriptableObject.defineClass</tt></h3>
The old rules for defining JavaScript objects using a Java class were getting
baroque. Those rules are still supported, but a cleaner definition is now
supported. See the <a href="http://www.mozilla.org/js/rhino/org/mozilla/javascript/ScriptableObject.html#defineClass(org.mozilla.javascript.Scriptable, java.lang.Class)">javadoc</a>
for details.
<br>&nbsp;
<h3>
Support for the Java 2 <tt>-jar</tt> option</h3>
It's now possible to start the shell using the new <tt>-jar</tt> option
in Java 2.
<br>&nbsp;
<h3>
Shell changes</h3>
Two changes here: addition of the "environment" and "history" top-level
variables.
<br>&nbsp;
<h3>
Java classes visible to scripts</h3>
An attendee at JavaOne raised the point that many embeddings may not want
scripts to be able to access all Java classes. This is an excellent point,
and I've implemented an addition to the <a href="../js/rhino/org/mozilla/javascript/SecuritySupport.html">SecuritySupport</a>
interface that allows embedders to choose which classes are exposed to
scripts.
<br>&nbsp;
<h3>
SecuritySupport and JavaAdapter</h3>
Andrew Wason pointed a problem with the new JavaAdapter feature (which
allows JavaScript objects to implement arbitrary Java interfaces by generating
class files). It didn't support the <a href="../js/rhino/org/mozilla/javascript/SecuritySupport.html">SecuritySupport</a>
interface, which allows Rhino to delegate the creation of classes from
byte arrays to a routine provided by the embedding. This ability is important
from a security standpoint because class creation is considered a privileged
action.
<p>I've checked in changes that fix this problem. If a SecuritySupport
class is specified when a Context is created, uses of JavaAdapter will
will delegate class creation to the SecuritySupport class.
<br>&nbsp;
<h3>
Context.exit()</h3>
Context.exit() has been changed from an instance method to a static method.
This makes it match the Context.enter() method, which is also static. See
the <a href="http://www.mozilla.org/js/rhino/org/mozilla/javascript/Context.html#exit()">javadoc</a>
for more information on its operation.
<br>&nbsp;
<h3>
Context.enter(Context)</h3>
A new overloaded form of Context.enter has been added. Without the addition
of this method it was not possible to attach an existing context to a thread.
See the <a href="http://www.mozilla.org/js/rhino/org/mozilla/javascript/Context.html#enter(org.mozilla.javascript.Context)">javadoc</a>
for more information on its operation.
<br>&nbsp;
<h3>
Listeners for Context</h3>
Context now supports property change listeners for a couple of its properties.
<h3>
<hr WIDTH="100%"><br>
<a href="index.html">back to top</a></h3>
</body>
</html>

View File

@@ -1,84 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]">
<meta name="KeyWords" content="Rhino, JavaScript, Java">
<title>Rhino 1.5 Release 2</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<h1>
What's New in Rhino 1.5 Release 2</h1></center>
This is a log of significant changes since the release of Rhino 1.5 Release
1.
<br>&nbsp;
<h2>
Graphical debugger</h2>
Thanks to a contribution by Christopher Oliver, Rhino now has a graphical
debugger. See <a href="debugger.html">Rhino Debugger</a> for more details.
<br>&nbsp;
<h2>
Footprint reductions</h2>
Igor Bukanov has provided a wealth of changes to reduce the number and
size of objects required by Rhino. In particular, he introduced a new way
to represent the built-in objects like Date and RegExp that reduces the
amount of memory required and speeds up <tt>Context.initStandardObjects</tt>.
<br>&nbsp;
<h2>
Interpreted mode performance improvements</h2>
Igor Bukanov also made a number of improvements to interpreter mode performance.
<br>&nbsp;
<h2>
JS/CORBA Adapter</h2>
Matthias Radestock wrote a module that allows JavaScript code to interact
with CORBA. See <a href="http://sourceforge.net/projects/jscorba">http://sourceforge.net/projects/jscorba</a>
for more details.
<br>&nbsp;
<h2>
Directory restructuring and Ant buildfile</h2>
I've restructured the the Rhino directory and written an <a href="http://jakarta.apache.org/ant/index.html">Ant</a>
buildfile. This should make building easier and more consistent with other
open source Java projects.
<br>&nbsp;
<h2>
FlattenedObject deprecated</h2>
I wrote FlattenedObject to provide a means for dealing with JavaScript
<br>objects in prototype chains. Where Scriptable defines the primitive
<br>operations, FlattenedObject defines the aggregate operations of
<br>manipulating properties that may be defined in an object or in an object
<br>reachable by a succession of getPrototype calls.
<p>However, I now believe that I designed FlattenedObject poorly. Perhaps
<br>it should have been a clue that I was never satisfied with the name:
if
<br>it's hard to express the name of the object it may mean the function
the
<br>object is supposed to fulfill is not well defined either. The problem
is
<br>that it is inefficient since it requires an extra object creation,
and
<br>balky because of that extra level of wrapping.
<p>So I've checked in changes that deprecate FlattenedObject. I've
<br>introduced new static methods in ScriptableObject (thanks to
<br>beard@netscape.com for the idea) that replace the functionality. These
<br>methods perform the get, put, and delete operations on a Scriptable
<br>object passed in without the overhead of creating a new object.
<h2>
WrapHandler interface</h2>
Embeddings that wish to provide their own custom wrappings for Java objects
may implement this interface and
<br>call Context.setWrapHandler. See WrapHandler javadoc.
<br>&nbsp;
<h2>
ClassOutput interface</h2>
An interface embedders can implement in order to control the placement
of generated class bytecodes. See the javadoc.
<h3>
<hr WIDTH="100%"><br>
<a href="index.html">back to top</a></h3>
</body>
</html>

View File

@@ -1,63 +0,0 @@
<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]">
<meta name="KeyWords" content="Rhino, JavaScript, Java">
<title>Change Log</title>
</head>
<body bgcolor="#ffffff">
<center>
<h1> Change Log for Significant Rhino Changes</h1>
</center>
This is a log of significant changes since the release of Rhino 1.5 Release
2.
<p> </p>
<h3> </h3>
<h3>Serialization</h3>
See the <a href="serialization.html">serialization documentation</a>
.<br>
<br>
<h3>Class writer API changes</h3>
Courtesy of Kemal Bayram.<br>
<br>
"The biggest change I've made is the replacement of ClassOutput with<br>
ClassRepository that has the single method:<br>
<br>
&nbsp;&nbsp;&nbsp; public boolean storeClass(String className, byte[] classBytes,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
boolean isTopLevel) throws IOException;<br>
<br>
This interface allows any arbitary storage method, such as a<br>
Hashtable/Map. In addition it also allows you to specify whether a<br>
class should be loaded, via returning true or false.&nbsp; You can still
use<br>
ClassOutput as I've coded an internal wrapper.<br>
<br>
With this interface it has also been possible to strip out the file<br>
saving code from Codegen and OptClassNameHelper.&nbsp; The file<br>
saving code is now an inner class FileClassRepository in Context. As<br>
a consequence of this&nbsp; I've stripped out some methods from ClassNameHelper.<br>
The resulting code is much more cleaner then before hand and everything<br>
still works as per usual.<br>
<br>
Other small additions are:<br>
&nbsp; o&nbsp; Annonymous functions are now named class$1 instead of class1<br>
&nbsp; o&nbsp; get/setClassName added to ClassNameHelper exposed in Context.
"<br>
<br>
<h3>Bunches of bug fixes and optimizations from Igor Bukanov and others</h3>
See the CVS logs<br>
<h3>
<hr width="100%"><br>
<a href="index.html">back to top</a>
</h3>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

View File

@@ -1,138 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
<title>JavaScript Runtime</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<h1>
The JavaScript Runtime</h1></center>
<h3>
Interpretation</h3>
Beginning with Rhino 1.4 Release 2, an interpretive mode is supported.
When scripts are compiled in interpretive mode, an internal representation
of the compiled form is created and stored rather than generating a Java
class. Execution proceeds by evaluating this compiled form using support
routines in Rhino.
<h3>
Compilation to Java Bytecodes</h3>
For improved performance, Rhino may compile JavaScript scripts to Java
bytecodes. The generated bytecodes in turn depend upon runtime support
routines. Each JavaScript script or function is compiled to a separate
class.
<p>Compilation of JavaScript source to class files is supported. It is
possible to specify the class files as well as the packages to generate
into.
<h3>
Types and Values</h3>
There are six fundamental types in JavaScript. These types are implemented
with the following Java types and values:
<br>&nbsp;
<br>&nbsp;
<center><table BORDER COLS=2 WIDTH="75%" >
<tr>
<td><i>JavaScript fundamental type</i></td>
<td><i>Java type</i></td>
</tr>
<tr>
<td>Undefined</td>
<td>A singleton object defined by <tt>Context.getUndefinedType()</tt></td>
</tr>
<tr>
<td>Null</td>
<td><tt>null</tt></td>
</tr>
<tr>
<td>Boolean</td>
<td><tt>java.lang.Boolean</tt></td>
</tr>
<tr>
<td>Number</td>
<td><tt>java.lang.Number</tt>, that is, any of <tt>java.lang.Byte</tt>,<tt>
java.lang.Short</tt>,<tt> java.lang.Integer</tt>,<tt> java.lang.Float</tt>,
or <tt>java.lang.Double. Not java.lang.Long, since a double representation
of a long may lose precision.</tt></td>
</tr>
<tr>
<td>String</td>
<td><tt>java.lang.String</tt></td>
</tr>
<tr>
<td>Object</td>
<td><tt>org.mozilla.javascript.Scriptable</tt></td>
</tr>
</table></center>
<p>In addition, ECMA refers to objects that implement [[Call]] as functions.
These object types are represented by implementing the Function interface.
<p>Since JavaScript is a dynamically typed language, the static Java type
of a JavaScript value is <tt>java.lang.Object</tt>.
<p>The behavior of the JavaScript engine is undefined if a value of any
type other than the ones described above is introduced into JavaScript.
(This caveat does not apply to scripts that use LiveConnect; the Java values
are wrapped and unwrapped as appropriate to conform to the above type constraints.)
<br>&nbsp;
<h3>
Property Access</h3>
Properties in JavaScript objects may be accessed using either string or
numeric identifiers. Conceptually, all accessors are converted to strings
in order to perform the lookup of the property in the object. However,
this is not the implementation used in practice because a number to string
conversion is too expensive to be performed on every array access.
<p>Instead, every property accessor method in <a href="org/mozilla/javascript/Scriptable.html">Scriptable</a>
(<tt>has</tt>, <tt>get</tt>, <tt>set</tt>, <tt>remove</tt>, <tt>getAttributes</tt>,
and <tt>setAttributes</tt>) has overloaded forms that take either a <tt>String</tt>
or an <tt>int</tt> argument. It is the responsibility of the caller to
invoke the appropriate overloaded form. For example, evaluating the expression
<tt>obj["3"]</tt>
will invoke the get(int, Scriptable) method even though the property name
was presented in the script as a string. Similarly, values of numbers that
do not fix in integers (like 1.1 and 0x100000000) must be converted to
strings.
<br>&nbsp;
<h3>
Defining Host Objects</h3>
Host objects are JavaScript objects that provide special access to the
host environment. For example, in a browser environment, the Window and
Document objects are host objects.
<p>The easiest way to define new host objects is by using <a href="org/mozilla/javascript/ScriptableObject.html#defineClass(org.mozilla.javascript.Scriptable, java.lang.Class)">ScriptableObject.defineClass()</a>.
This method defines a set of JavaScript objects using a Java class. Several
of the <a href="examples.html">examples</a> define host objects this way.
<p>If the services provided by defineClass are insufficient, try other
methods of
<a href="org/mozilla/javascript/ScriptableObject.html">ScriptableObject</a>
and
<a href="org/mozilla/javascript/FunctionObject.html">FunctionObject</a>,
such as <tt>defineProperty</tt> and <tt>defineFunctionProperties</tt>.
<br>&nbsp;
<br>&nbsp;
<h3>
Contexts and Threads</h3>
Every thread that executes JavaScript must have an associated Context.
Multiple threads (with multiple associated Contexts) may act upon the same
set of objects. Any host objects that are defined are responsible for any
sychronization required to run safely from multiple threads.
<br>&nbsp;
<p>
<hr WIDTH="100%">
<br><a href="index.html">back to top</a>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

View File

@@ -1,176 +0,0 @@
<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.72 [en]C-NSCP (WinNT; U) [Netscape]">
<meta name="KeyWords" content="Rhino, JavaScript, Java">
<title>Scopes and Contexts</title>
</head>
<body bgcolor="#ffffff">
<script src="owner.js"></script>
<center>
<h1> Scopes and Contexts</h1>
</center>
<script>document.write(owner());</script> <br>
<script>
var d = new Date(document.lastModified);
document.write((d.getMonth()+1)+"/"+d.getDate()+"/"+d.getFullYear());
document.write('<br>');
</script>
<center>
<hr width="100%"></center>
<p>Before using Rhino in a concurrent environment, it is important to understand
the distinction between Contexts and scopes. Both are required to execute
scripts, but they play different roles. Simple embeddings of Rhino probably
won't need any of the information here, but more complicated embeddings can
gain performance and flexibility from the techniques described below. <br>
&nbsp; </p>
<h2> Contexts</h2>
The Rhino Context object is used to store thread-specific information about
the execution environment. There should be one and only one Context associated
with each thread that will be executing JavaScript.
<p>To associate the current thread with a Context, simply call the <tt>enter</tt>
method of Context: </p>
<pre>&nbsp;&nbsp;&nbsp; Context cx = Context.enter();</pre>
Once you are done with execution, simply exit the Context:
<pre>&nbsp;&nbsp;&nbsp; Context.exit();</pre>
These calls will work properly even if there is already a Context associated
with the current thread. That context will be returned and an internal counter
incremented. Only when the counter reaches zero will it be disassociated from
the thread.
<p>Remember to put the <tt>exit()</tt> call in a <tt>finally</tt> block if
you're executing code that could throw an exception. <br>
&nbsp; </p>
<h2> Scopes</h2>
A scope is a set of JavaScript objects. Execution of scripts requires a scope
for top-level script variable storage as well as a place to find standard
objects like <tt>Function</tt> and <tt>Object</tt>.
<p>It's important to understand that a scope is independent of the Context
that created it. You can create a scope using one Context and then evaluate
a script using that scope and another Context (either by exiting the current
context and entering another, or by executing on a different thread). You
can even execute scripts on multiple threads simultaneously in the same scope.
Rhino guarantees that accesses to properties of JavaScript objects are atomic
across threads, but doesn't make any more guarantees for scripts executing
in the same scope at the same time. If two scripts use the same scope simultaneously,
the scripts are responsible for coordinating any accesses to shared variables.
</p>
<p>A top-level scope is created by calling <tt>Context.initStandardObjects</tt>
to create all the standard objects: </p>
<pre>&nbsp;&nbsp;&nbsp; Scriptable scope = cx.initStandardObjects(null);</pre>
The easiest way to embed Rhino is just to create a new scope this way whenever
you need one. However, <tt>initStandardObjects</tt> is an expensive method
to call and it allocates a fair amount of memory. We'll see below that there
are ways to share a scope created this way among multiple scopes and threads.
<br>
&nbsp;
<h2> Name Lookup</h2>
So how are scopes used to look up names? In general, variables are looked
up by starting at the current variable object (which is different depending
on what code is being executed in the program), traversing its prototype chain,
and then traversing the parent chain. In the diagram below, the order in
which the six objects are traversed is indicated.
<center>
<p><img src="lookup.gif" height="194" width="500">
<br>
<i><font size="-1">Order of lookups in a two-deep scope chain with prototypes.</font></i></p>
</center>
<p>For a more concrete example, let's consider the following script: </p>
<blockquote><tt>var g = 7;</tt> <br>
<tt>function f(a) {</tt> <br>
<tt>&nbsp;&nbsp;&nbsp; var v = 8;</tt> <br>
<tt>&nbsp;&nbsp;&nbsp; x = v + a;</tt> <br>
<tt>}</tt> <br>
<tt>f(6);</tt></blockquote>
We have a top-level variable <tt>g</tt>, and the call to <tt>f</tt> will
create a new top-level variable <tt>x</tt>. All top-level variables are properties
of the scope object. When we start executing <tt>f</tt>, the scope chain
will start with the function's activation object and will end with the top-level
scope (see diagram below). The activation object has two properties, 'a'
for the argument, and 'v' for the variable. The top-level scope has properties
for the variable <tt>g</tt> and the function <tt>f</tt>.
<center>
<p><img src="scopes.gif" height="496" width="820">
<br>
<i><font size="-1">An example scope chain for a simple script.</font></i></p>
</center>
<p>When the statement <tt>x = v + a;</tt> is executed, the scope chain is
traversed looking for a 'x' property. When none is found, a new property 'x'
is created in the top-level scope. </p>
<h2> Sharing Scopes</h2>
JavaScript is a language that uses delegation rather than traditional class-based
inheritance. This is a large topic in itself, but for our purposes it gives
us an easy way to share a set of read-only variables across multiple scopes.
To do this we set an object's prototype. When accessing a property of an object
in JavaScript, the object is first searched for a property with the given
name. If none is found, the object's prototype is searched. This continues
until either the object is found or the end of the prototype chain is reached.
<p>So to share information across multiple scopes, we first create the object
we wish to share. Typically this object will have been created with <tt>initStandardObjects</tt>
and may also have additional objects specific to the embedding. Then all
we need to do is create a new object and call its <tt>setPrototype</tt> method
to set the prototype to the shared object, and the parent of the new scope
to null: </p>
<pre>&nbsp;&nbsp;&nbsp; Scriptable newScope = cx.newObject(sharedScope);<br>&nbsp;&nbsp;&nbsp; newScope.setPrototype(sharedScope);<br>&nbsp;&nbsp;&nbsp; newScope.setParentScope(null);<br></pre>
The call to <tt>newObject</tt> simply creates a new JavaScript object with
no properties. It uses the <tt>sharedScope</tt> passed in to initialize the
prototype with the standard <tt>Object.prototype</tt> value.
<p>We can now use <tt>newScope</tt> as a scope for calls to evaluate scripts.
Let's call this scope the <i>instance scope</i>. Any top-level functions or
variables defined in the script will end up as properties of the instance
scope. Uses of standard objects like <tt>Function</tt>, <tt>String</tt>, or
<tt>RegExp</tt> will find the definitions in the shared scope. Multiple
instance scopes can be defined and have their own variables for scripts yet
share the definitions in the shared scope. These multiple instance scopes
can be used concurrently. <br>
&nbsp; </p>
<h2> Dynamic Scopes</h2>
There's one problem with the setup outlined above. Calls to functions in
JavaScript use <i>static scope</i>, which means that variables are first looked
up in the function and then, if not found there, in the lexically enclosing
scope. This causes problems if functions you define in your shared scope
need access to variables you define in your instance scope.
<p>With Rhino 1.5, it is possible to compile functions to use <i>dynamic
scope</i>. With dynamic scope, functions look at the top-level scope of the
calling function rather than their lexical scope. So we can store information
that varies across scopes in the instance scope yet still share functions
that manipulate that information reside in the shared scope. </p>
<p>The <a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/DynamicScopes.java">
DynamicScopes example</a>
illustrates all the points discussed above. <br>
&nbsp; <br>
&nbsp; </p>
<h2> More on Scopes</h2>
The key things to determine in setting up scopes for your application are
<br>
(1) What scope should global variables be created in when your script executes
an assignment to an undefined variable, and <br>
(2) What variables should your script have access to when it references a
variable?
<p>The answer to (1) determines which scope should be the ultimate parent
scope: Rhino follows the parent chain up to the top and places the variable
there. After you've constructed your parent scope chain, the answer to question
(2) may indicate that there are additional scopes that need to be searched
that are not in your parent scope chain. You can add these as prototypes
of scopes in your parent scope chain. When Rhino looks up a variable, it
starts in the current scope, walks the prototype chain, then goes to the
parent scope and its prototype chain, until there are no more parent scopes
left. <br>
&nbsp; </p>
<h3>
<hr width="100%"><br>
<a href="index.html">back to top</a>
</h3>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 B

View File

@@ -1,199 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; U) [Netscape]">
<meta name="KeyWords" content="Rhino, JavaScript, Java">
<title>Scripting Java</title>
</head>
<body bgcolor="#FFFFFF">
<script src="owner.js"></script>
<center>
<h1>
Scripting Java</h1></center>
<script>document.write(owner());</script>
<br><script>
var d = new Date(document.lastModified);
document.write((d.getMonth()+1)+"/"+d.getDate()+"/"+d.getFullYear());
document.write('<br>');
</script>
<center>
<hr WIDTH="100%"></center>
<p>It's possible to use Rhino just for scripting Java. You don't have to
write any additional Java code; just use the existing Rhino shell and then
make calls into Java.
<br>&nbsp;
<h2>
Rhino Shell</h2>
The Rhino shell allows you to run scripts from files or interactively at
a command line.
<p>If you download the zip file for rhino, it will contain a single JAR
file, <tt>js.jar</tt>. If you add the JAR file to your class path, you
can start the Rhino shell using the command
<pre>&nbsp;&nbsp;&nbsp; java org.mozilla.javascript.tools.shell.Main</pre>
or if you have Java 2 (JDK 1.2), you can avoid changing your classpath
and simply use the command
<pre>&nbsp;&nbsp;&nbsp; java -jar js.jar</pre>
Unfortunately the <tt>-jar</tt> option to <tt>java</tt> will overwrite
your existing classpath. The shell's interactive mode is a good way to
begin exploring Rhino.
<p><i>Note: Earlier versions of Rhino have two JAR files, js.jar and jstools.jar,
and don't support the -jar option. Both JAR files must be added to the
class path to start the shell</i>.
<p>You can execute a JavaScript file by putting the file name as an argument
to the shell class:
<pre>&nbsp;&nbsp;&nbsp; java org.mozilla.javascript.tools.shell.Main myScript.js</pre>
There are a number of options for evaluating scripts using the shell. See
the <a href="http://www.mozilla.org/rhino/shell.html">command description</a>
for more information.
<br>&nbsp;
<h2>
LiveConnect: Communicating with Java from JavaScript</h2>
If you are planning to script Java using Rhino, you'll want to use LiveConnect,
which allows you to create Java classes and call Java methods from within
JavaScript. For example, here's a log from an interactive session. If you
type it in, you'll see a window with a button filling it.
<center>
<p><img SRC="scriptjavaframe.jpg" height=100 width=200>
<br><i><font size=-1>A Java frame created from the Rhino shell.</font></i></center>
<pre>$ java org.mozilla.javascript.tools.shell.Main
js> importPackage(java.awt);
js> frame = new Frame("JavaScript")
java.awt.Frame[frame0,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout,resizable,title=JavaScript]
js> frame.show()
js> frame.setSize(new Dimension(200,100))
js> button = new Button("OK")
java.awt.Button[button0,0,0,0x0,invalid,label=OK]
js> frame.add(button)
java.awt.Button[button0,0,0,0x0,invalid,label=OK]
js> frame.show()
js> quit()
$</pre>
If you wish to load classes from JavaScript that aren't in the <tt>java</tt>
package, you'll need to prefix the package name with "<tt>Packages.</tt>".
For example:
<pre>$ java org.mozilla.javascript.tools.shell.Main
js> cx = Packages.org.mozilla.javascript.Context.enter()
org.mozilla.javascript.Context@25980b44
js> cx.evaluateString(this, "3+2", null, 0, null)
5.0
js> quit()
$</pre>
<h2>
Accessing JavaBean Properties</h2>
Java classes can define JavaBean properties using getter and setter methods.
For example, the following class defines two properties:
<p><tt>public class Me {</tt>
<br><tt>&nbsp;&nbsp;&nbsp; public int getAge() { return age; }</tt>
<br><tt>&nbsp;&nbsp;&nbsp; public void setAge(int anAge) { age = anAge;
}</tt>
<br><tt>&nbsp;&nbsp;&nbsp; public String getSex() { return "male"; }</tt>
<br><tt>&nbsp;&nbsp;&nbsp; private int age;</tt>
<br><tt>};</tt>
<p>The two properties defined are <i>age</i> and <i>sex</i>. The <i>sex</i>
property is read-only: it has no setter.
<p>Using Rhino we can access the bean properties as if they where JavaScript
properties. We can also continue to call the methods that define the property.
<p><tt>js> me = new Packages.Me();</tt>
<br><tt>Me@93</tt>
<br><tt>js> me.getSex()</tt>
<br><tt>male</tt>
<br><tt>js> me.sex</tt>
<br><tt>male</tt>
<br><tt>js> me.age = 33;</tt>
<br><tt>33</tt>
<br><tt>js> me.age</tt>
<br><tt>33</tt>
<br><tt>js> me.getAge()</tt>
<br><tt>33</tt>
<br><tt>js></tt>
<p>Since the <i>sex</i> property is read-only, we are not allowed to write
to it.
<p><i>Note: JavaBean reflection is not available in versions of Rhino before
1.5.</i>
<br><tt></tt>&nbsp;
<h2>
Importing Java Classes and Packages</h2>
Above we saw the use of the <tt>importPackage</tt> function to import all
the classes from a particular Java package. There is also <tt>importClass</tt>,
which imports a single class:
<pre>$ java org.mozilla.javascript.tools.shell.Main
js> importClass(Packages.org.mozilla.javascript.Context)
js> cx = Context.enter()
org.mozilla.javascript.Context@25980d62
js> cx.evaluateString(this, "3+2", null, 0, null)
5.0
js> quit()
$</pre>
<h2>
Extending Java Classes and Implementing Java Interfaces with JavaScript</h2>
Starting from the example above of creating a Java frame using JavaScript,
we can add a listener for the button. Once we call <tt>addActionListener</tt>
we can then click on the button to get the current date printed out:
<pre>$ java org.mozilla.javascript.tools.shell.Main
js> importPackage(java.awt);
js> frame = new Frame("JavaScript")
java.awt.Frame[frame0,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout,resizable,title=JavaScript]
js> button = new Button("OK")
java.awt.Button[button0,0,0,0x0,invalid,label=OK]
js> frame.setSize(new Dimension(200,100))
js> frame.add(button)
java.awt.Button[button0,0,0,0x0,invalid,label=OK]
js> frame.show()
js> function printDate() { print(new Date()) }
js> printDate()
Wed Mar 15 15:42:20 GMT-0800 (PST) 2000
js> o = { actionPerformed: printDate }
[object Object]
js> o.actionPerformed()
Wed Mar 15 15:42:39 GMT-0800 (PST) 2000
js> buttonListener = java.awt.event.ActionListener(o)
adapter0@6acc0f66
js>&nbsp; button.addActionListener(buttonListener)
js> Wed Mar 15 15:43:05 GMT-0800 (PST) 2000
Wed Mar 15 15:43:05 GMT-0800 (PST) 2000
Wed Mar 15 15:43:08 GMT-0800 (PST) 2000
quit()
$</pre>
When we type <tt>buttonListener = java.awt.event.ActionListener(o)</tt>,
Rhino actually creates a new Java class that implements <tt>ActionListener</tt>
and forwards calls from that class to the JavaScript object. So when you
click on the button, the <tt>printDate</tt> method is called.
<br>&nbsp;
<h2>
JavaAdapter constructor</h2>
Another way to create a JavaAdapter is to call the JavaAdapter constructor
explicitly. Using the JavaAdapter constructor gives you additional features
that cannot be had by "constructing" a Java interface as was done above.
<p>Instead of writing
<pre>&nbsp;&nbsp;&nbsp; buttonListener = java.awt.event.ActionListener(o)</pre>
above we can also write
<pre>&nbsp;&nbsp;&nbsp; buttonListener = new JavaAdapter(java.awt.event.ActionListener, o)</pre>
which is equivalent. If we also wanted to extend class <tt>Foo</tt>, while
also implementing <tt>java.lang.Runnable</tt>, we would write
<pre>&nbsp;&nbsp;&nbsp; buttonListener = new JavaAdapter(Packages.Foo,&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.awt.event.ActionListener,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.lang.Runnable, o)</pre>
In general the syntax is
<p>&nbsp;&nbsp;&nbsp; <tt>new JavaAdapter(</tt><i>java-class</i>, [<i>java-class</i>,
...] <i>javascript-object</i><tt>)</tt>
<p>where at most one <i>java-class</i> is a Java class and the remaining
<i>java-class</i>es
are interfaces. The result will be a Java adapter that extends any specified
Java class, implements the Java interfaces, and forwards any calls to the
methods of the <i>javascript-object</i>.
<h3>
<hr WIDTH="100%"><br>
<a href="index.html">back to top</a></h3>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -1,122 +0,0 @@
<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.72 [en]C-NSCP (WinNT; U) [Netscape]">
<meta name="KeyWords" content="Rhino, JavaScript, Java">
<title>Serialization</title>
</head>
<body bgcolor="#ffffff">
<script src="owner.js"></script>
<center>
<h1>Serialization</h1>
</center>
<script>document.write(owner());</script> <br>
<script>
var d = new Date(document.lastModified);
document.write((d.getMonth()+1)+"/"+d.getDate()+"/"+d.getFullYear());
document.write('<br>');
</script>
<center>
<hr width="100%"></center>
<p>Beginning with Rhino 1.5 Release 3 it is possible to serialize JavaScript
objects, including functions and scripts. However, &nbsp;serialization of
code in compilation mode has some significant limitations.. Serialization
provides a way to save the state of an object and write it out to a file
or send it across a network connection. <br>
&nbsp; </p>
<h2>Simple serialization example</h2>
The Rhino shell has two new top-level functions, serialize and deserialize.
They're intended mainly as examples of the use of serialization:<br>
<pre>$&nbsp;java org.mozilla.javascript.tools.shell.Main<br>js&gt; function f() { return 3; }<br>js&gt; serialize(f, "f.ser")<br>js&gt; quit()<br><br>$&nbsp;java org.mozilla.javascript.tools.shell.Main<br>js&gt; f = deserialize("f.ser")<br><br>function f() {<br> return 3;<br>}<br><br>js&gt; f()<br>3<br>js&gt;</pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
Here we see a simple case of a function being serialized to a file and then
read into a new instance of Rhino and called. <br>
<br>
<h2>Rhino serialization APIs</h2>
Two new classes, ScriptableOutputStream and ScriptableInputStream, were introduced
to handle serialization of Rhino classes. These classes extend ObjectOutputStream
and ObjectInputStream respectively. Writing an object to a file can be done
in a few lines of Java code:<br>
<pre>FileOutputStream fos = new FileOutputStream(filename);<br>ScriptableOutputStream out = new ScriptableOutputStream(fos, scope);<br>out.writeObject(obj);<br>out.close();</pre>
<p>Here filename is the file to write to, obj is the object or function to
write, and scope is the top-level scope containing obj.&nbsp;</p>
<p>Reading the serialized object back into memory is similarly simple:</p>
<pre>FileInputStream fis = new FileInputStream(filename);<br>ObjectInputStream in = new ScriptableInputStream(fis, scope);<br>Object deserialized = in.readObject();<br>in.close();<br></pre>
<p>Again, we need the scope to create our serialization stream class. </p>
<p>So why do we need these specialized stream classes instead of simply using
ObjectOutputStream and ObjectInputStream? To understand the answer we must
know what goes on behind the scenes when Rhino serializes objects. </p>
<h2>How Rhino serialization works</h2>
By default, Java serialization of an object also serializes objects that
are referred to by that object. Upon deserialization the initial object and
the objects it refers to are all created and the references between the objects
are resolved. <br>
<br>
However, for JavaScript this creates a problem. JavaScript objects contain
references to prototypes and to parent scopes. Default serialization would
serialize the object or function we desired but would also serialize Object.prototype
or even possibly the entire top-level scope and everything it refers to!
We want to be able to serialize a JavaScript object and then deserialize
it into a new scope and have all of the references from the deserialized
object to prototypes and parent scopes resolved correctly to refer to objects
in the new scope. <br>
<br>
ScriptableOutputStream takes a scope as a parameter to its constructor. If
in the process of serialization it encounters a reference to the scope it
will serialize a marker that will be resolved to the new scope upon deserialization.
It is also possible to add names of objects to a list in the ScriptableOutputStream
object. These objects will also be saved as markers upon serialization and
resolved in the new scope upon deserialization. Use the addExcludedName method
of ScriptableOutputStream to add new names. By default, ScriptableOutputStream
excludes all the names defined using Context.initStandardObjects.<br>
<br>
If you are using Rhino serialization in an environment where you always define,
say, a constructor "Foo", you should add the following code before calling
writeObject:<br>
<pre>out.addExcludedName("Foo");<br>out.addExcludedName("Foo.prototype");<br></pre>
This code will prevent Foo and Foo.prototype from being serialized and will
cause references to Foo or Foo.prototype to be resolved to the objects in
the new scope upon deserialization. Exceptions will be thrown if Foo or Foo.prototype
cannot be found the scopes used in either ScriptableOutputStream or ScriptableInputStream.<br>
<br>
<h2>Rhino serialization in compilation mode</h2>
Serialization works well with objects and with functions and scripts in
interpretive mode. However, you can run into problems with serialization
of compiled functions and scripts:<br>
<pre>$&nbsp;cat test.js<br>function f() { return 3; }<br>serialize(f, "f.ser");<br>g = deserialize("f.ser");<br>print(g());<br>$&nbsp;java&nbsp;org.mozilla.javascript.tools.shell.Main -opt -1 test.js<br>3<br>$&nbsp;java&nbsp;org.mozilla.javascript.tools.shell.Main test.js<br>js: uncaught JavaScript exception: java.lang.ClassNotFoundException: c1<br></pre>
<p>The problem is that Java serialization has no built-in way to serialize
Java classes themselves. (It might be possible to save the Java bytecodes
in an array and then load the class upon deserialization, but at best that
would eat up a lot of memory for just this feature.) One way around this
is to compile the functions using the jsc tool: </p>
<pre>$&nbsp;cat f.js<br>function f() { return 3; }<br>$&nbsp;java -classpath js.jar org.mozilla.javascript.tools.jsc.Main f.js<br>$&nbsp;cat test2.js<br>loadClass("f");<br>serialize(f, "f.ser");<br>g = deserialize("f.ser");<br>print(g());<br>$&nbsp;java -classpath 'js.jar;.' org.mozilla.javascript.tools.shell.Main test2.js<br>3<br></pre>
<p>&nbsp;Now the function f is compiled to a Java class, but that class is
then made available in the classpath so serialization works. This isn't that
interesting an example since compiling a function to a class and then loading
it accomplishes the same as serializing an interpreted function, but it becomes
more relevant if you wish to serialize JavaScript objects that have references
to compiled functions. </p>
<h3>
<hr width="100%"><br>
<a href="index.html">back to top</a>
</h3>
</body>
</html>

View File

@@ -1,128 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.7 [en]C-NSCP (WinNT; U) [Netscape]">
<title>JavaScript Shell</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<h1>
JavaScript Shell</h1></center>
The JavaScript shell provides a simple way to run scripts in batch mode
or an interactive environment for exploratory programming.
<h2>
Invoking the Shell</h2>
<tt>java org.mozilla.javascript.tools.shell.Main</tt> [<i>options</i>]
<i>file</i><tt>.js
[<i>script-arguments</i>]</tt>
<p>where <i>options</i> are:
<p><tt>-e </tt><i>script-source</i>
<blockquote>Executes <i>script-source</i> as a JavaScript script.</blockquote>
<tt>-f </tt><i>script-filename</i>
<blockquote>Reads filename specified by <i>script-filename</i> and executes
it as a JavaScript script.</blockquote>
<tt>-opt </tt><i>optLevel</i>
<br><tt>-O</tt> <i>optLevel</i>
<ul>Optimizes at level <i>optLevel</i>, which must be an integer between
0 and 9. See <a href="opt.html">Optimization</a> for more details.</ul>
<tt>-version </tt><i>versionNumber</i>
<ul>Specifies the language version to compile with. The string <i>versionNumber</i>
must be one of <tt>100</tt>, <tt>110</tt>, <tt>120</tt>, <tt>130</tt>,
or <tt>140</tt>. See <a href="overview.html#versions">JavaScript Language
Versions</a> for more information on language versions.</ul>
<h2>
Predefined Properties</h2>
Scripts executing in the shell have access to some additional properties
of the top-level object.
<br>&nbsp;
<h4>
arguments</h4>
<blockquote>The <tt>arguments</tt> object is an array containing the strings
of all the arguments given at the command line when the shell was invoked.</blockquote>
<h4>
help()</h4>
<blockquote>Executing the help function will print usage and help messages.</blockquote>
<h4>
defineClass(<i>className</i>)</h4>
<blockquote>Define an extension using the Java class named with the string
argument <i>className</i>. Uses ScriptableObject.defineClass() to define
the extension.</blockquote>
<h4>
load([<i>filename</i>, ...])</h4>
<blockquote>Load JavaScript source files named by string arguments. If
multiple arguments are given, each file is read in and executed in turn.</blockquote>
<h4>
loadClass(<i>className</i>)</h4>
<blockquote>Load and execute the class named by the string argument <i>className</i>.
The class must be a class that implements the Script interface, as will
any script compiled by <a href="jsc.html">jsc</a>.</blockquote>
<h4>
print([<i>expr</i> ...])</h4>
<blockquote>Evaluate and print expressions. Evaluates each expression,
converts the result to a string, and prints it.</blockquote>
<h4>
quit()</h4>
<blockquote>Quit shell. The shell will also quit in interactive mode if
an end-of-file character is typed at the prompt.</blockquote>
<h4>
version([<i>number</i>])</h4>
<blockquote>Get or set JavaScript version number. If no argument is supplied,
the current version number is returned. If an argument is supplied, it
is expected to be one of <tt>100</tt>, <tt>110</tt>, <tt>120</tt>, <tt>130,</tt>
or <tt>140</tt> to indicate JavaScript version 1.0, 1.1, 1.2, 1.3, or 1.4
respectively.</blockquote>
<h2>
Example</h2>
Here the shell is invoked three times from the command line. (The system
command prompt is shown as <tt>$</tt>.) The first invocation executes a
script specified on the command line itself. The next invocation has no
arguments, so the shell goes into interactive mode, reading and evaluating
each line as it is typed in. Finally, the last invocation executes a script
from a file and accesses arguments to the script itself.
<p><tt>$ java org.mozilla.javascript.tools.shell.Main -e print('hi')</tt>
<p><tt>hi</tt>
<p><tt>$ java org.mozilla.javascript.tools.shell.Main</tt>
<p><tt>js> print('hi')</tt>
<br><tt>hi</tt>
<br><tt>js> 6*7</tt>
<br><tt>42</tt>
<br><tt>js> function f() {</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a;</tt>
<br><tt>}</tt>
<br><tt>js> var a = 34;</tt>
<br><tt>js> f()</tt>
<br><tt>34</tt>
<br><tt>js> quit()</tt>
<p><tt>$ cat echo.js</tt>
<br><tt>for (i in arguments) {</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print(arguments[i])</tt>
<br><tt>}</tt>
<br><tt>$ java org.mozilla.javascript.tools.shell.Main echo.js foo bar</tt>
<p><tt>foo</tt>
<br><tt>bar</tt>
<p><tt>$</tt>
<p>
<hr WIDTH="100%">
<br><a href="index.html">back to top</a>
</body>
</html>

View File

@@ -1,31 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.7 [en]C-NSCP (WinNT; U) [Netscape]">
<title>JavaScript Tools</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<h1>
JavaScript Tools</h1></center>
<h2>
JavaScript shell</h2>
The <a href="shell.html">JavaScript shell</a> allows for interactive and
batch execution of JavaScript scripts.
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<h2>
JavaScript compiler</h2>
The <a href="jsc.html">JavaScript compiler</a> translates JavaScript source
into Java class files.
<br>&nbsp;
<p>
<hr WIDTH="100%">
<br><a href="index.html">back to top</a>
</body>
</html>

View File

@@ -1,336 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Word 97">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
<title>Embedding Rhino</title>
</head>
<body>
<center><font size=+4>Tutorial: Embedding Rhino</font></center>
<p>Embedding Rhino can be done simply with good results. With more effort
on the part of the embedder, the objects exposed to scripts can be customized
further.
<p>This tutorial leads you through the steps from a simple embedding to
more customized, complex embeddings. Fully compilable examples are provided
along the way.
<p>The examples live in the <tt>rhino/examples</tt> directory in the distribution
and in <tt>mozilla/js/rhino/examples</tt> in cvs. This document will link
to them using <a href="http://lxr.mozilla.org/">lxr</a>.
<p>In this document, JavaScript code will be in <font color="#006600">green</font>,
Java code will be in <font color="#006600">green</font>, and shell logs
will be in <font color="#663366">purple</font>.
<h3>
<font size=+3>Contents</font></h3>
<ul>
<li>
<font size=+1><a href="#RunScript">RunScript: A simple embedding</a></font></li>
<ul>
<li>
<font size=+1><a href="#EnteringContext">Entering a Context</a></font></li>
<li>
<font size=+1><a href="#initializing">Initializing standard objects</a></font></li>
<li>
<font size=+1><a href="#Collecting">Collecting the arguments</a></font></li>
<li>
<font size=+1><a href="#Evaluating">Evaluating a script</a></font></li>
<li>
<font size=+1><a href="#Print">Print the result</a></font></li>
<li>
<font size=+1><a href="#Exit">Exit the Context</a></font></li>
</ul>
<li>
<font size=+1><a href="#Expose">Expose Java APIs</a></font></li>
<ul>
<li>
<font size=+1><a href="#UseJava">Use Java APIs</a></font></li>
<li>
<font size=+1><a href="#ImplementingInterfaces">Implementing interfaces</a></font></li>
<li>
<font size=+1><a href="#AddJava">Add Java objects</a></font></li>
</ul>
<li>
<font size=+1><a href="#UsingJSObjs">Using JavaScript objects from Java</a></font></li>
<ul>
<li>
<font size=+1><a href="#UsingJSvars">Using JavaScript variables</a></font></li>
<li>
<font size=+1><a href="#CallingJSfuns">Calling JavaScript functions</a></font></li>
</ul>
<li>
<font size=+1><a href="#JavaScriptHostObjects">JavaScript host objects</a></font></li>
<ul>
<li>
<font size=+1><a href="#DefiningHostObjects">Defining Host Objects</a></font></li>
<li>
<font size=+1><a href="#Counter">Counter example</a></font></li>
<ul>
<li>
<font size=+1><a href="#CounterCtors">Counter's constructors</a></font></li>
<li>
<font size=+1><a href="#classname">Class name</a></font></li>
<li>
<font size=+1><a href="#Dynamic">Dynamic properties</a></font></li>
<li>
<font size=+1><a href="#DefiningMethods">Defining JavaScript "methods"</a></font></li>
<li>
<font size=+1><a href="#AddingCounter">Adding Counter to RunScript</a></font></li>
</ul>
</ul>
</ul>
<hr WIDTH="100%">
<br><a NAME="RunScript"></a><font size=+3>RunScript: A simple embedding</font>
<p>About the simplest embedding of Rhino possible is the <a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/RunScript.java">RunScript
example</a>. All it does it read a script from the command line, execute
it, and print a result.
<p>Here's an example use of RunScript from a shell command line:
<blockquote>
<pre><font color="#663366">$ java RunScript 'Math.cos(Math.PI)'
-1
$ java RunScript 'function f(x){return x+1} f(7)'
8</font></pre>
</blockquote>
Note that you'll have to have both the Rhino classes and the RunScript
example class file in the classpath. Let's step through the body of <tt>main</tt>
one line at time.
<p><a NAME="EnteringContext"></a><font size=+2>Entering a Context</font>
<p>The code
<blockquote>
<pre><font color="#006600">Context cx = Context.enter();</font></pre>
</blockquote>
Creates and enters a <tt>Context. </tt>A <tt>Context</tt> stores information
about the execution environment of a script.
<br>&nbsp;
<p><a NAME="initializing"></a><font size=+2>Initializing standard objects</font>
<p>The code
<blockquote>
<pre><font color="#006600">Scriptable scope = cx.initStandardObjects(null);</font></pre>
</blockquote>
Initializes the standard objects (<tt>Object</tt>,
<tt>Function</tt>, etc.)
This must be done before scripts can be executed. The <tt>null</tt> parameter
tells <tt>initStandardObjects</tt> to create and return a scope object
that we use in later calls.
<p><a NAME="Collecting"></a><font size=+2>Collecting the arguments</font>
<p>This code is standard Java and not specific to Rhino. It just collects
all the arguments and concatenates them together.
<blockquote><tt><font color="#006600">String s = "";</font></tt>
<br><tt><font color="#006600">for (int i=0; i &lt; args.length; i++)</font></tt>
<br><tt><font color="#006600">&nbsp;&nbsp;&nbsp; s += args[i];</font></tt></blockquote>
<p><br><a NAME="Evaluating"></a><font size=+2>Evaluating a script</font>
<p>The code
<blockquote>
<pre><font color="#006600">Object result = cx.evaluateString(scope, s, "&lt;cmd>", 1, null);</font></pre>
</blockquote>
uses the Context <tt>cx</tt> to evaluate a string. Evaluation of the script
looks up variables in <tt>scope</tt>, and errors will be reported with
the filename <tt>&lt;cmd></tt> and line number 1.
<br>&nbsp;
<p><a NAME="Print"></a><font size=+2>Print the result</font>
<p>The code
<blockquote>
<pre><font color="#006600">System.out.println(cx.toString(result));</font></pre>
</blockquote>
prints the result of evaluating the script (contained in the variable <tt>result</tt>).
<tt>result</tt>
could be a string, JavaScript object, or other values..The
<tt>toString</tt>
method converts any JavaScript value to a string.
<br>&nbsp;
<p><a NAME="Exit"></a><font size=+2>Exit the Context</font>
<p>The code
<blockquote>
<pre><font color="#006600">Context.exit();</font></pre>
</blockquote>
exits the Context. This removes the association between the Context and
the current thread and is an essential cleanup action. There should be
a call to <tt>exit</tt> for every call to <tt>enter</tt>.
<br>&nbsp;
<dir>&nbsp;</dir>
<a NAME="Expose"></a><font size=+3>Expose Java APIs</font>
<p><a NAME="UseJava"></a><font size=+2>Use Java APIs</font>
<p>No additional code in the embedding needed! The JavaScript feature called
<i>LiveConnect</i>
allows JavaScript programs to interact with Java objects:
<dir><tt><font color="#663366">$ java RunScript 'java.lang.System.out.println(3)'</font></tt>
<br><tt><font color="#663366">3.0</font></tt>
<br><tt><font color="#663366">undefined</font></tt></dir>
<a NAME="ImplementingInterfaces"></a><font size=+2>Implementing interfaces</font>
<p>Using Rhino, JavaScript objects can implement arbitrary Java interfaces.
There's no Java code to write--it's part of Rhino's LiveConnect implementation.
For example, we can see how to implement java.lang.Runnable in a Rhino
shell session:
<blockquote>
<pre><font color="#663366">js> obj = { run: function() { print('hi'); } }
[object Object]
js> obj.run()
hi
js> r = new java.lang.Runnable(obj);
[object Object]
js> t = new java.lang.Thread(r)
Thread[Thread-0,5,main]
js> t.start()
hi</font></pre>
</blockquote>
<a NAME="AddJava"></a><font size=+2>Add Java objects</font>
<p>The next example is <a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/RunScript2.java">RunScript2</a>.
This is the same as RunScript, but with the addition of two extra lines
of code:
<dir><tt><font color="#006600">Scriptable jsArgs = Context.toObject(System.out,
scope);</font></tt>
<br><tt><font color="#006600">scope.put("out", scope, jsArgs);</font></tt></dir>
These lines add a global variable <tt>out</tt> that is a JavaScript reflection
of the <tt>System.out</tt> variable:
<dir><tt><font color="#663366">$ java RunScript2 'out.println(42)'</font></tt>
<br><tt><font color="#663366">42.0</font></tt>
<br><tt><font color="#663366">undefined</font></tt></dir>
<p><br><a NAME="UsingJSObjs"></a><font size=+3>Using JavaScript objects
from Java</font>
<p>After evaluating a script it's possible to query the scope for variables
and functions, extracting values and calling JavaScript functions. This
is illustrated in the <a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/RunScript3.java">RunScript3</a>
example. This example adds the ability to print the value of variable <tt>x</tt>
and the result of calling function <tt>f</tt>. Both <tt>x</tt> and <tt>f</tt>
are expected to be defined by the evaluated script. For example,
<blockquote><tt><font color="#663366">$ java RunScript3 'x = 7'</font></tt>
<br><tt><font color="#663366">x = 7</font></tt>
<br><tt><font color="#663366">f is undefined or not a function.</font></tt>
<br><tt><font color="#663366">$ java RunScript3 'function f(a) { return
a; }'</font></tt>
<br><tt><font color="#663366">x is not defined.</font></tt>
<br><tt><font color="#663366">f('my args') = my arg</font></tt>
<br><tt><font color="#663366"></font></tt>&nbsp;</blockquote>
<a NAME="UsingJSvars"></a><font size=+2>Using JavaScript variables</font>
<p>To print out the value of <tt>x</tt>, we add the following code.
<dir><tt><font color="#006600">Object x = scope.get("x", scope);</font></tt>
<br><tt><font color="#006600">if (x == Scriptable.NOT_FOUND)</font></tt>
<br><tt><font color="#006600">&nbsp;&nbsp;&nbsp; System.out.println("x
is not defined.");</font></tt>
<br><tt><font color="#006600">else</font></tt>
<br><tt><font color="#006600">&nbsp;&nbsp;&nbsp; System.out.println("x
= " + Context.toString(x));</font></tt>
<br><tt><font color="#006600"></font></tt>&nbsp;</dir>
<a NAME="CallingJSfuns"></a><font size=+2>Calling JavaScript functions</font>
<p>To get the function <tt>f</tt>, call it, and print the result, we add
this code:
<dir><tt><font color="#006600">Object f = scope.get("f", scope);</font></tt>
<br><tt><font color="#006600">if (!(f instanceof Function))</font></tt>
<br><tt><font color="#006600">&nbsp;&nbsp;&nbsp; System.out.println("f
is undefined or not a function.");</font></tt>
<br><tt><font color="#006600">else {</font></tt>
<br><tt><font color="#006600">&nbsp;&nbsp;&nbsp; Object functionArgs[]
= { "my arg" };</font></tt>
<br><tt><font color="#006600">&nbsp;&nbsp;&nbsp; Object result = ((Function)
f).call(cx, scope, scope, functionArgs);</font></tt>
<br><tt><font color="#006600">&nbsp;&nbsp;&nbsp; System.out.println("f('my
args') = " + Context.toString(result));</font></tt>
<br><tt><font color="#006600">}</font></tt></dir>
<p><br><a NAME="JavaScriptHostObjects"></a><font size=+3>JavaScript host
objects</font>
<p><a NAME="DefiningHostObjects"></a><font size=+2>Defining Host Objects</font>
<p>Custom host objects can implement special JavaScript features like dynamic
properties.
<p><a NAME="Counter"></a><font size=+2>Counter example</font>
<p>The <a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/Counter.java">Counter
example</a> is a simple host object. We'll go through it method by method
below.
<p>It's easy to try out new host object classes in the shell using its
built-in <tt>defineClass</tt> function. We'll see how to add it to RunScript
later. (Note that because the <tt>java -jar</tt> option preempts the rest
of the classpath, we can't use that and access the <tt>Counter</tt> class.)
<blockquote>
<pre><font color="#663366">$ java -cp 'js.jar;examples' org.mozilla.javascript.tools.shell.Main
js> defineClass("Counter")
js> c = new Counter(7)
[object Counter]
js> c.count
7
js> c.count
8
js> c.count
9
js> c.resetCount()
js> c.count
0</font></pre>
</blockquote>
<a NAME="CounterCtors"></a><font size=+2>Counter's constructors</font>
<p>The zero-argument constructor is used by Rhino runtime to create instances.
For the counter example, no initialization work is needed, so the implementation
is empty.
<dir><tt><font color="#006600">public Counter () { }</font></tt></dir>
The method <tt>jsConstructor</tt> defines the JavaScript constructor that
was called with the expression <tt>new Counter(7)</tt> in the JavaScript
code above.
<dir><tt><font color="#006600">public void jsConstructor(int a) { count
= a; }</font></tt></dir>
<a NAME="classname"></a><font size=+2>Class name</font>
<p>The class name is defined by the <tt>getClassName</tt> method. This
is used to determine the name of the constructor.
<dir><tt><font color="#006600">public String getClassName() { return "Counter";
}</font></tt></dir>
<a NAME="Dynamic"></a><font size=+2>Dynamic properties</font>
<p>Dynamic properties are defined by methods beginning with <tt>jsGet_</tt>
or <tt>jsSet_</tt>. The method <tt>jsGet_count</tt> defines the <i>count</i>
property.
<dir><tt><font color="#006600">public int jsGet_count() { return count++;
}</font></tt></dir>
The expression <tt>c.count</tt> in the JavaScript code above results in
a call to this method.
<p><a NAME="DefiningMethods"></a><font size=+2>Defining JavaScript "methods"</font>
<p>Methods can be defined using the <tt>jsFunction_ prefix</tt>. Here we
define <tt>resetCount</tt> for JavaScript.
<dir><tt><font color="#006600">public void jsFunction_resetCount() { count
= 0; }</font></tt></dir>
The call <tt>c.resetCount()</tt> above calls this method.
<p><a NAME="AddingCounter"></a><font size=+2>Adding Counter to RunScript</font>
<p>Now take a look at the <a href="http://lxr.mozilla.org/mozilla/source/js/rhino/examples/RunScript4.java">RunScript4
example</a>. It's the same as RunScript except for two additions. The method
<tt>ScriptableObject.defineClass</tt>
uses a Java class to define the Counter "class" in the top-level scope:
<dir><tt><font color="#006600">ScriptableObject.defineClass(scope, Counter.class);</font></tt></dir>
Now we can reference the <tt>Counter</tt> object from our script:
<dir><tt><font color="#663366">$ java RunScript4 'c = new Counter(3); c.count;
c.count;'</font></tt>
<br><tt><font color="#663366">4</font></tt></dir>
It also creates a new instance of the <tt>Counter</tt> object from within
our Java code, constructing it with the value 7, and assigning it to the
top-level variable <tt>myCounter</tt>:
<dir><tt><font color="#006600">Object[] arg = { new Integer(7) };</font></tt>
<br><tt><font color="#006600">Scriptable myCounter = cx.newObject(scope,
"Counter", arg);</font></tt>
<br><tt><font color="#006600">scope.put("myCounter", scope, myCounter);</font></tt></dir>
Now we can reference the <tt>myCounter</tt> object from our script:
<dir><tt><font color="#663366">$ java RunScript3 'RunScript4 'myCounter.count;
myCounter.count'</font></tt>
<br><tt><font color="#663366">8</font></tt></dir>
</body>
</html>

View File

@@ -1,78 +0,0 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Norris Boyd">
<meta name="GENERATOR" content="Mozilla/4.72 [en]C-NSCP (WinNT; U) [Netscape]">
<meta name="KeyWords" content="Rhino, JavaScript, Java">
<title>Using Rhino</title>
</head>
<body bgcolor="#FFFFFF">
<script src="owner.js"></script>
<center>
<h1>
How are people using Rhino?</h1></center>
Here's a partial list of the ways people are using Rhino in their projects.
The initial list was collected by Netscape marketing, so Rhino is referred
to as Netscape Java-based JavaScript. We'd love to hear how you're using
Rhino--just mail&nbsp;<script>document.write(owner());</script>
.
<p><a href="http://www.attachmate.com">Attachmate</a>
<br>"Netscape JavaScript 1.5 with Java implementation was a perfect solution
for developing our MacroRecorder because it made our development process
faster and better, and our customers get a more efficient, reliable, and
standards based product as a result," said Rob Clark, Director of Product
Development at Attachmate. Attachmate integrates Netscape's Java-based
JavaScript 1.5 Interpreter into its 100% Pure Java certified web-to-host
thin clients, called e-Vantage Viewers. The Netscape Java-based JavaScript
interpreter is used in a MacroRecorder feature that allows browser-based
users to efficiently navigate host applications on mainframe and midrange
systems.
<p><a href="http://www.bristowhill.com/">Bristow Hill Software</a>
<br>"We thought it would require lots of work to add scripting capability
to Bristow Hill Server Pages, but we were delighted to find that Netscape
JavaScript 1.5 with Java implementation fit right in with only a couple
of lines of initialization code and one line of code to export our standard
objects by name. Also, we were pleased to find we could take embedded scripting
and compile it down to Java classes which could be used directly for greater
speed in production. Netscape's JavaScript engine is rock solid and standards
compliant, and my only regret is that we didn't start using it sooner,"
said Don Anderson, President of Bristow Hill Software.
<p><a href="http://www.icesoft.no/">ICEsoft</a>
<br>ICEsoft adds JavaScript support to their <a href="http://www.icesoft.no/ICEBrowser/">ICE
Browser</a> using Rhino.
<p><a href="http://www.vmeng.com/beard/JShell/Release_Notes.html">JShell</a>
<br>Rhino is used as the scripting language for the open source command
shell JShell written by Patrick Beard.
<p><a href="http://www.softcom.com">Softcom</a>
<br>The tight integration of Netscape's Java-based JavaScript 1.5 with
Softcom's Java-based RealPlayer plugin, RJ, enables Softcom to quickly
produce dynamic interactive video applications for our media/entertainment,
retail and professional education clients, helping us to synchronize the
full interactivity of the Web and e-commerce with streaming video, said
Chris O'Brien, president and COO of Softcom. For the enhanced Oscarcast
recently produced for E! Online during the Academy Awards, Softcom used
RJ to embed Netscape's JavaScript 1.5 in the RealPlayer, successfully integrating
interactive chat and Java games, along with streaming video, within the
RealPlayer.
<p><a href="http://www.tdiinc.com/">Technology Deployment International</a>
<br>"Technology Deployment International selected the Java-based Netscape
JavaScript engine to incorporate into the workflow module of our eBusiness
Management System (eBMS) allowing our customers to integrate business logic
into any workstep of their application," said Dr. Kelvin Liu, VP eBMS Development,
Technology Deployment International. "It has been easy to embed, the support
we received from the engineering team has been outstanding, and the performance
of the JavaScript code is almost identical to the equivalent Java."
<p><a href="http://www.xypoint.com/">XYPOINT</a>
<br>XYPOINT uses Rhino for automating test cases of their Java classes
used in their service <a href="http://www.webwirelessnow.com/">WebWirelessNow</a>.
Abraham Backus says that he's happy with Rhino because "I've always wanted
this kind of JavaScript support."
<h3>
<hr WIDTH="100%"><br>
<a href="index.html">back to top</a></h3>
</body>
</html>

View File

@@ -1,105 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
import org.mozilla.javascript.*;
/**
* Example of controlling the JavaScript execution engine.
*
* We evaluate a script and then manipulate the result.
*
*/
public class Control {
/**
* Main entry point.
*
* Process arguments as would a normal Java program. Also
* create a new Context and associate it with the current thread.
* Then set up the execution environment and begin to
* execute scripts.
*/
public static void main(String[] args) {
Context cx = Context.enter();
// Set version to JavaScript1.2 so that we get object-literal style
// printing instead of "[object Object]"
cx.setLanguageVersion(Context.VERSION_1_2);
// Initialize the standard objects (Object, Function, etc.)
// This must be done before scripts can be executed.
Scriptable scope = cx.initStandardObjects(null);
// Now we can evaluate a script. Let's create a new object
// using the object literal notation.
Object result = null;
try {
result = cx.evaluateString(scope, "obj = {a:1, b:['x','y']}",
"MySource", 1, null);
}
catch (JavaScriptException jse) {
// ignore
}
Scriptable obj = (Scriptable) scope.get("obj", scope);
// Should print "obj == result" (Since the result of an assignment
// expression is the value that was assigned)
System.out.println("obj " + (obj == result ? "==" : "!=") +
" result");
// Should print "obj.a == 1"
System.out.println("obj.a == " + obj.get("a", obj));
Scriptable b = (Scriptable) obj.get("b", obj);
// Should print "obj.b[0] == x"
System.out.println("obj.b[0] == " + b.get(0, b));
// Should print "obj.b[1] == y"
System.out.println("obj.b[1] == " + b.get(1, b));
try {
// Should print {a:1, b:["x", "y"]}
Function fn = (Function) ScriptableObject.getProperty(obj, "toString");
System.out.println(fn.call(cx, scope, obj, new Object[0]));
} catch (JavaScriptException e) {
// ignore
}
cx.exit();
}
}

View File

@@ -1,56 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
import org.mozilla.javascript.*;
public class Counter extends ScriptableObject {
// The zero-argument constructor used by Rhino runtime to create instances
public Counter() { }
// Method jsConstructor defines the JavaScript constructor
public void jsConstructor(int a) { count = a; }
// The class name is defined by the getClassName method
public String getClassName() { return "Counter"; }
// The method jsGet_count defines the count property.
public int jsGet_count() { return count++; }
// Methods can be defined using the jsFunction_ prefix. Here we define
// resetCount for JavaScript.
public void jsFunction_resetCount() { count = 0; }
private int count;
}

View File

@@ -1,75 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
import org.mozilla.javascript.*;
/**
* An example illustrating how to create a JavaScript object and retrieve
* properties and call methods.
* <p>
* Output should be:
* <pre>
* count = 0
* count = 1
* resetCount
* count = 0
* </pre>
*/
public class CounterTest {
public static void main(String[] args) throws Exception
{
Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects(null);
ScriptableObject.defineClass(scope, Counter.class);
Scriptable testCounter = cx.newObject(scope, "Counter");
Object count = ScriptableObject.getProperty(testCounter, "count");
System.out.println("count = " + count);
count = ScriptableObject.getProperty(testCounter, "count");
System.out.println("count = " + count);
ScriptableObject.callMethod(testCounter, "resetCount", new Object[0]);
System.out.println("resetCount");
count = ScriptableObject.getProperty(testCounter, "count");
System.out.println("count = " + count);
Context.exit();
}
}

View File

@@ -1,178 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-2000 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
import org.mozilla.javascript.*;
/**
* Example of controlling the JavaScript with multiple scopes and threads.
*/
public class DynamicScopes {
/**
* Main entry point.
*
* Set up the shared scope and then spawn new threads that execute
* relative to that shared scope. Try compiling functions with and
* without dynamic scope to see the effect.
*
* The expected output is
* <pre>
* sharedScope
* sharedScope
* sharedScope
* thread0
* thread1
* thread2
* </pre>
* The final three lines may be permuted in any order depending on
* thread scheduling.
*/
public static void main(String[] args)
throws JavaScriptException
{
Context cx = Context.enter();
try {
cx.setCompileFunctionsWithDynamicScope(false);
runScripts(cx);
cx.setCompileFunctionsWithDynamicScope(true);
runScripts(cx);
} finally {
cx.exit();
}
}
static void runScripts(Context cx)
throws JavaScriptException
{
// Initialize the standard objects (Object, Function, etc.)
// This must be done before scripts can be executed. The call
// returns a new scope that we will share.
Scriptable scope = cx.initStandardObjects(null);
// Now we can evaluate a script and functions will be compiled to
// use dynamic scope if the Context is so initialized.
String source = "var x = 'sharedScope';" +
"function f() { return x; }";
cx.evaluateString(scope, source, "MySource", 1, null);
// Now we spawn some threads that execute a script that calls the
// function 'f'. The scope chain looks like this:
// <pre>
// ------------------
// | shared scope |
// ------------------
// ^
// |
// ------------------
// | per-thread scope |
// ------------------
// ^
// |
// ------------------
// | f's activation |
// ------------------
// </pre>
// Both the shared scope and the per-thread scope have variables 'x'
// defined in them. If 'f' is compiled with dynamic scope enabled,
// the 'x' from the per-thread scope will be used. Otherwise, the 'x'
// from the shared scope will be used. The 'x' defined in 'g' (which
// calls 'f') should not be seen by 'f'.
final int threadCount = 3;
Thread[] t = new Thread[threadCount];
for (int i=0; i < threadCount; i++) {
String script = "function g() { var x = 'local'; return f(); }" +
"java.lang.System.out.println(g());";
t[i] = new Thread(new PerThread(scope, script,
"thread" + i));
}
for (int i=0; i < threadCount; i++)
t[i].start();
// Don't return in this thread until all the spawned threads have
// completed.
for (int i=0; i < threadCount; i++) {
try {
t[i].join();
} catch (InterruptedException e) {
}
}
}
static class PerThread implements Runnable {
PerThread(Scriptable scope, String script, String x) {
this.scope = scope;
this.script = script;
this.x = x;
}
public void run() {
// We need a new Context for this thread.
Context cx = Context.enter();
try {
// We can share the scope.
Scriptable threadScope = cx.newObject(scope);
threadScope.setPrototype(scope);
// We want "threadScope" to be a new top-level
// scope, so set its parent scope to null. This
// means that any variables created by assignments
// will be properties of "threadScope".
threadScope.setParentScope(null);
// Create a JavaScript property of the thread scope named
// 'x' and save a value for it.
threadScope.put("x", threadScope, x);
cx.evaluateString(threadScope, script, "threadScript", 1, null);
}
catch (NotAFunctionException jse) {
// ignore
}
catch (PropertyException jse) {
// ignore
}
catch (JavaScriptException jse) {
// ignore
}
finally {
Context.exit();
}
}
private Scriptable scope;
private String script;
private String x;
}
}

View File

@@ -1,356 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-2000 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
import org.mozilla.javascript.*;
import java.io.*;
import java.util.Vector;
/**
* Define a simple JavaScript File object.
*
* This isn't intended to be any sort of definitive attempt at a
* standard File object for JavaScript, but instead is an example
* of a more involved definition of a host object.
*
* Example of use of the File object:
* <pre>
* js> defineClass("File")
* js> file = new File("myfile.txt");
* [object File]
* js> file.writeLine("one"); <i>only now is file actually opened</i>
* js> file.writeLine("two");
* js> file.writeLine("thr", "ee");
* js> file.close(); <i>must close file before we can reopen for reading</i>
* js> var a = file.readLines(); <i>creates and fills an array with the contents of the file</i>
* js> a;
* one,two,three
* js>
* </pre>
*
*
* File errors or end-of-file signaled by thrown Java exceptions will
* be wrapped as JavaScript exceptions when called from JavaScript,
* and may be caught within JavaScript.
*
* @author Norris Boyd
*/
public class File extends ScriptableObject {
/**
* The zero-parameter constructor.
*
* When Context.defineClass is called with this class, it will
* construct File.prototype using this constructor.
*/
public File() {
}
/**
* The Java method defining the JavaScript File constructor.
*
* If the constructor has one or more arguments, and the
* first argument is not undefined, the argument is converted
* to a string as used as the filename.<p>
*
* Otherwise System.in or System.out is assumed as appropriate
* to the use.
*/
public static Scriptable jsConstructor(Context cx, Object[] args,
Function ctorObj,
boolean inNewExpr)
{
File result = new File();
if (args.length == 0 || args[0] == Context.getUndefinedValue()) {
result.name = "";
result.file = null;
} else {
result.name = Context.toString(args[0]);
result.file = new java.io.File(result.name);
}
return result;
}
/**
* Returns the name of this JavaScript class, "File".
*/
public String getClassName() {
return "File";
}
/**
* Get the name of the file.
*
* Used to define the "name" property.
*/
public String jsGet_name() {
return name;
}
/**
* Read the remaining lines in the file and return them in an array.
*
* Implements a JavaScript function.<p>
*
* This is a good example of creating a new array and setting
* elements in that array.
*
* @exception IOException if an error occurred while accessing the file
* associated with this object
* @exception JavaScriptException if a JavaScript exception occurred
* while creating the result array
*/
public Object jsFunction_readLines()
throws IOException, JavaScriptException
{
Vector v = new Vector();
String s;
while ((s = jsFunction_readLine()) != null) {
v.addElement(s);
}
Object[] lines = new Object[v.size()];
v.copyInto(lines);
Scriptable scope = ScriptableObject.getTopLevelScope(this);
Scriptable result;
try {
Context cx = Context.getCurrentContext();
result = cx.newObject(scope, "Array", lines);
} catch (PropertyException e) {
throw Context.reportRuntimeError(e.getMessage());
} catch (NotAFunctionException e) {
throw Context.reportRuntimeError(e.getMessage());
}
return result;
}
/**
* Read a line.
*
* Implements a JavaScript function.
* @exception IOException if an error occurred while accessing the file
* associated with this object, or EOFException if the object
* reached the end of the file
*/
public String jsFunction_readLine() throws IOException {
return getReader().readLine();
}
/**
* Read a character.
*
* @exception IOException if an error occurred while accessing the file
* associated with this object, or EOFException if the object
* reached the end of the file
*/
public String jsFunction_readChar() throws IOException {
int i = getReader().read();
if (i == -1)
return null;
char[] charArray = { (char) i };
return new String(charArray);
}
/**
* Write strings.
*
* Implements a JavaScript function. <p>
*
* This function takes a variable number of arguments, converts
* each argument to a string, and writes that string to the file.
* @exception IOException if an error occurred while accessing the file
* associated with this object
*/
public static void jsFunction_write(Context cx, Scriptable thisObj,
Object[] args, Function funObj)
throws IOException
{
write0(thisObj, args, false);
}
/**
* Write strings and a newline.
*
* Implements a JavaScript function.
* @exception IOException if an error occurred while accessing the file
* associated with this object
*
*/
public static void jsFunction_writeLine(Context cx, Scriptable thisObj,
Object[] args, Function funObj)
throws IOException
{
write0(thisObj, args, true);
}
public int jsGet_lineNumber()
throws FileNotFoundException
{
return getReader().getLineNumber();
}
/**
* Close the file. It may be reopened.
*
* Implements a JavaScript function.
* @exception IOException if an error occurred while accessing the file
* associated with this object
*/
public void jsFunction_close() throws IOException {
if (reader != null) {
reader.close();
reader = null;
} else if (writer != null) {
writer.close();
writer = null;
}
}
/**
* Finalizer.
*
* Close the file when this object is collected.
*/
public void finalize() {
try {
jsFunction_close();
}
catch (IOException e) {
}
}
/**
* Get the Java reader.
*/
public Object jsFunction_getReader() {
if (reader == null)
return null;
// Here we use toObject() to "wrap" the BufferedReader object
// in a Scriptable object so that it can be manipulated by
// JavaScript.
Scriptable parent = ScriptableObject.getTopLevelScope(this);
return Context.toObject(reader, parent);
}
/**
* Get the Java writer.
*
* @see File#jsFunction_getReader
*
*/
public Object jsFunction_getWriter() {
if (writer == null)
return null;
Scriptable parent = ScriptableObject.getTopLevelScope(this);
return Context.toObject(writer, parent);
}
/**
* Get the reader, checking that we're not already writing this file.
*/
private LineNumberReader getReader() throws FileNotFoundException {
if (writer != null) {
throw Context.reportRuntimeError("already writing file \""
+ name
+ "\"");
}
if (reader == null)
reader = new LineNumberReader(file == null
? new InputStreamReader(System.in)
: new FileReader(file));
return reader;
}
/**
* Perform the guts of write and writeLine.
*
* Since the two functions differ only in whether they write a
* newline character, move the code into a common subroutine.
*
*/
private static void write0(Scriptable thisObj, Object[] args, boolean eol)
throws IOException
{
File thisFile = checkInstance(thisObj);
if (thisFile.reader != null) {
throw Context.reportRuntimeError("already writing file \""
+ thisFile.name
+ "\"");
}
if (thisFile.writer == null)
thisFile.writer = new BufferedWriter(
thisFile.file == null ? new OutputStreamWriter(System.out)
: new FileWriter(thisFile.file));
for (int i=0; i < args.length; i++) {
String s = Context.toString(args[i]);
thisFile.writer.write(s, 0, s.length());
}
if (eol)
thisFile.writer.newLine();
}
/**
* Perform the instanceof check and return the downcasted File object.
*
* This is necessary since methods may reside in the File.prototype
* object and scripts can dynamically alter prototype chains. For example:
* <pre>
* js> defineClass("File");
* js> o = {};
* [object Object]
* js> o.__proto__ = File.prototype;
* [object File]
* js> o.write("hi");
* js: called on incompatible object
* </pre>
* The runtime will take care of such checks when non-static Java methods
* are defined as JavaScript functions.
*/
private static File checkInstance(Scriptable obj) {
if (obj == null || !(obj instanceof File)) {
throw Context.reportRuntimeError("called on incompatible object");
}
return (File) obj;
}
/**
* Some private data for this class.
*/
private String name;
private java.io.File file; // may be null, meaning to use System.out or .in
private LineNumberReader reader;
private BufferedWriter writer;
}

View File

@@ -1,168 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
import org.mozilla.javascript.*;
/**
* An example host object class.
*
* Here's a shell session showing the Foo object in action:
* <pre>
* js> defineClass("Foo")
* js> foo = new Foo(); <i>A constructor call, see <a href="#Foo">Foo</a> below.</i>
* [object Foo] <i>The "Foo" here comes from <a href"#getClassName">getClassName</a>.</i>
* js> foo.counter; <i>The counter property is defined by the <code>defineProperty</code></i>
* 0 <i>call below and implemented by the <a href="#getCounter">getCounter</a></i>
* js> foo.counter; <i>method below.</i>
* 1
* js> foo.counter;
* 2
* js> foo.resetCounter(); <i>Results in a call to <a href="#resetCounter">resetCounter</a>.</i>
* js> foo.counter; <i>Now the counter has been reset.</i>
* 0
* js> foo.counter;
* 1
* js> bar = new Foo(37); <i>Create a new instance.</i>
* [object Foo]
* js> bar.counter; <i>This instance's counter is distinct from</i>
* 37 <i>the other instance's counter.</i>
* js> foo.varargs(3, "hi"); <i>Calls <a href="#varargs">varargs</a>.</i>
* this = [object Foo]; args = [3, hi]
* js> foo[7] = 34; <i>Since we extended ScriptableObject, we get</i>
* 34 <i>all the behavior of a JavaScript object</i>
* js> foo.a = 23; <i>for free.</i>
* 23
* js> foo.a + foo[7];
* 57
* js>
* </pre>
*
* @see org.mozilla.javascript.Context
* @see org.mozilla.javascript.Scriptable
* @see org.mozilla.javascript.ScriptableObject
*
* @author Norris Boyd
*/
public class Foo extends ScriptableObject {
/**
* The zero-parameter constructor.
*
* When Context.defineClass is called with this class, it will
* construct Foo.prototype using this constructor.
*/
public Foo() {
}
/**
* The Java method defining the JavaScript Foo constructor.
*
* Takes an initial value for the counter property.
* Note that in the example Shell session above, we didn't
* supply a argument to the Foo constructor. This means that
* the Undefined value is used as the value of the argument,
* and when the argument is converted to an integer, Undefined
* becomes 0.
*/
public Foo(int counterStart) {
counter = counterStart;
}
/**
* Returns the name of this JavaScript class, "Foo".
*/
public String getClassName() {
return "Foo";
}
/**
* The Java method defining the JavaScript resetCounter function.
*
* Resets the counter to 0.
*/
public void jsFunction_resetCounter() {
counter = 0;
}
/**
* The Java method implementing the getter for the counter property.
* <p>
* If "setCounter" had been defined in this class, the runtime would
* call the setter when the property is assigned to.
*/
public int jsGet_counter() {
return counter++;
}
/**
* An example of a variable-arguments method.
*
* All variable arguments methods must have the same number and
* types of parameters, and must be static. <p>
* @param cx the Context of the current thread
* @param thisObj the JavaScript 'this' value.
* @param args the array of arguments for this call
* @param funObj the function object of the invoked JavaScript function
* This value is useful to compute a scope using
* Context.getTopLevelScope().
* @return computes the string values and types of 'this' and
* of each of the supplied arguments and returns them in a string.
*
* @exception ThreadAssociationException if the current
* thread is not associated with a Context
* @see org.mozilla.javascript.ScriptableObject#getTopLevelScope
*/
public static Object jsFunction_varargs(Context cx, Scriptable thisObj,
Object[] args, Function funObj)
{
StringBuffer buf = new StringBuffer();
buf.append("this = ");
buf.append(Context.toString(thisObj));
buf.append("; args = [");
for (int i=0; i < args.length; i++) {
buf.append(Context.toString(args[i]));
if (i+1 != args.length)
buf.append(", ");
}
buf.append("]");
return buf.toString();
}
/**
* A piece of private data for this class.
*/
private int counter;
}

View File

@@ -1,59 +0,0 @@
#! gmake
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is Rhino code, released
# May 6, 1998.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1999 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
#
# Alternatively, the contents of this file may be used under the
# terms of the GNU Public License (the "GPL"), in which case the
# provisions of the GPL are applicable instead of those above.
# If you wish to allow use of your version of this file only
# under the terms of the GPL and not to allow others to use your
# version of this file under the NPL, indicate your decision by
# deleting the provisions above and replace them with the notice
# and other provisions required by the GPL. If you do not delete
# the provisions above, a recipient may use your version of this
# file under either the NPL or the GPL.
#
# Makefile for the examples directory.
#
# This Makefile just calls $(JAVAC) on all the .java files. This
# Makefile is intended to be called from the toplevel Makefile.
#
JSFILES = $(PATH_PREFIX)/*.js
SOURCES = $(PATH_PREFIX)/*.java
CLASSES = $(PATH_PREFIX)/*.class
$(CLASSES) : $(SOURCES)
$(JAVAC) $(JFLAGS) $(SOURCES)
clean :
- rm $(CLASSES) $(PATH_PREFIX)/MANIFEST
clobber : clean
check :
$(PATH_PREFIX)/MANIFEST : $(SOURCES) $(CLASSES) $(JSFILES)
ls $(SOURCES) $(CLASSES) $(JSFILES) \
> $(@)
# Emulate .PHONY
FORCE :

View File

@@ -1,276 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
import org.mozilla.javascript.*;
import java.util.Vector;
/**
* Matrix: An example host object class that implements the Scriptable interface.
*
* Built-in JavaScript arrays don't handle multiple dimensions gracefully: the
* script writer must create every array in an array of arrays. The Matrix class
* takes care of that by automatically allocating arrays for every index that
* is accessed. What's more, the Matrix constructor takes a integer argument
* that specifies the dimension of the Matrix. If m is a Matrix with dimension 3,
* then m[0] will be a Matrix with dimension 1, and m[0][0] will be an Array.
*
* Here's a shell session showing the Matrix object in action:
* <pre>
* js> defineClass("Matrix")
* js> m = new Matrix(2); <i>A constructor call, see <a href="#Matrix">Matrix</a> below.</i>
* [object Matrix] <i>The "Matrix" here comes from <a href"#getClassName">getClassName</a>.</i>
* js> version(120); <i>switch to JavaScript1.2 to see arrays better</i>
* 0
* js> m[0][0] = 3;
* 3
* js> m[0]; <i>an array was created automatically!</i>
* [3]
* js> m[1]; <i>array is created even if we don't set a value</i>
* []
* js> m.dim; <i>we can access the "dim" property</i>
* 2
* js> m.dim = 3;
* 3
* js> m.dim; <i>but not modify it</i>
* 2
* </pre>
*
* @see org.mozilla.javascript.Context
* @see org.mozilla.javascript.Scriptable
*
* @author Norris Boyd
*/
public class Matrix implements Scriptable {
/**
* The zero-parameter constructor.
*
* When ScriptableObject.defineClass is called with this class, it will
* construct Matrix.prototype using this constructor.
*/
public Matrix() {
}
/**
* The Java constructor, also used to define the JavaScript constructor.
*/
public Matrix(int dimension) {
if (dimension <= 0) {
throw Context.reportRuntimeError(
"Dimension of Matrix must be greater than zero");
}
dim = dimension;
v = new Vector();
}
/**
* Returns the name of this JavaScript class, "Matrix".
*/
public String getClassName() {
return "Matrix";
}
/**
* Defines the "dim" property by returning true if name is
* equal to "dim".
* <p>
* Defines no other properties, i.e., returns false for
* all other names.
*
* @param name the name of the property
* @param start the object where lookup began
*/
public boolean has(String name, Scriptable start) {
return name.equals("dim");
}
/**
* Defines all numeric properties by returning true.
*
* @param index the index of the property
* @param start the object where lookup began
*/
public boolean has(int index, Scriptable start) {
return true;
}
/**
* Get the named property.
* <p>
* Handles the "dim" property and returns NOT_FOUND for all
* other names.
* @param name the property name
* @param start the object where the lookup began
*/
public Object get(String name, Scriptable start) {
if (name.equals("dim"))
return new Integer(dim);
return NOT_FOUND;
}
/**
* Get the indexed property.
* <p>
* Look up the element in the associated vector and return
* it if it exists. If it doesn't exist, create it.<p>
* @param index the index of the integral property
* @param start the object where the lookup began
*/
public Object get(int index, Scriptable start) {
if (index >= v.size())
v.setSize(index+1);
Object result = v.elementAt(index);
if (result != null)
return result;
if (dim > 2) {
Matrix m = new Matrix(dim-1);
m.setParentScope(getParentScope());
m.setPrototype(getPrototype());
result = m;
} else {
Context cx = Context.getCurrentContext();
Scriptable scope = ScriptableObject.getTopLevelScope(start);
result = cx.newArray(scope, 0);
}
v.setElementAt(result, index);
return result;
}
/**
* Set a named property.
*
* We do nothing here, so all properties are effectively read-only.
*/
public void put(String name, Scriptable start, Object value) {
}
/**
* Set an indexed property.
*
* We do nothing here, so all properties are effectively read-only.
*/
public void put(int index, Scriptable start, Object value) {
}
/**
* Remove a named property.
*
* This method shouldn't even be called since we define all properties
* as PERMANENT.
*/
public void delete(String id) {
}
/**
* Remove an indexed property.
*
* This method shouldn't even be called since we define all properties
* as PERMANENT.
*/
public void delete(int index) {
}
/**
* Get prototype.
*/
public Scriptable getPrototype() {
return prototype;
}
/**
* Set prototype.
*/
public void setPrototype(Scriptable prototype) {
this.prototype = prototype;
}
/**
* Get parent.
*/
public Scriptable getParentScope() {
return parent;
}
/**
* Set parent.
*/
public void setParentScope(Scriptable parent) {
this.parent = parent;
}
/**
* Get properties.
*
* We return an empty array since we define all properties to be DONTENUM.
*/
public Object[] getIds() {
return new Object[0];
}
/**
* Default value.
*
* Use the convenience method from Context that takes care of calling
* toString, etc.
*/
public Object getDefaultValue(Class typeHint) {
return "[object Matrix]";
}
/**
* instanceof operator.
*
* We mimick the normal JavaScript instanceof semantics, returning
* true if <code>this</code> appears in <code>value</code>'s prototype
* chain.
*/
public boolean hasInstance(Scriptable value) {
Scriptable proto = value.getPrototype();
while (proto != null) {
if (proto.equals(this))
return true;
proto = proto.getPrototype();
}
return false;
}
/**
* Some private data for this class.
*/
private int dim;
private Vector v;
private Scriptable prototype, parent;
}

View File

@@ -1,7 +0,0 @@
<html>
<body>
This is the NervousText applet in javascript:
<applet code=NervousText.class width=200 height=50 >
</applet>
</body>
</html>

View File

@@ -1,75 +0,0 @@
// The Java "NervousText" example ported to JavaScript.
// Compile using java org.mozilla.javascript.tools.jsc.Main -extends java.applet.Applet -implements java.lang.Runnable NervousText.js
/*
Adapted from Java code by
Daniel Wyszynski
Center for Applied Large-Scale Computing (CALC)
04-12-95
Test of text animation.
kwalrath: Changed string; added thread suspension. 5-9-95
*/
var Font = java.awt.Font;
var Thread = java.lang.Thread;
var separated;
var s = null;
var killme = null;
var i;
var x_coord = 0, y_coord = 0;
var num;
var speed=35;
var counter =0;
var threadSuspended = false; //added by kwalrath
function init() {
this.resize(150,50);
this.setFont(new Font("TimesRoman",Font.BOLD,36));
s = this.getParameter("text");
if (s == null) {
s = "Rhino";
}
separated = s.split('');
}
function start() {
if(killme == null)
{
killme = new java.lang.Thread(java.lang.Runnable(this));
killme.start();
}
}
function stop() {
killme = null;
}
function run() {
while (killme != null) {
try {Thread.sleep(100);} catch (e){}
this.repaint();
}
killme = null;
}
function paint(g) {
for(i=0;i<separated.length;i++)
{
x_coord = Math.random()*10+15*i;
y_coord = Math.random()*10+36;
g.drawChars(separated, i,1,x_coord,y_coord);
}
}
/* Added by kwalrath. */
function mouseDown(evt, x, y) {
if (threadSuspended) {
killme.resume();
}
else {
killme.suspend();
}
threadSuspended = !threadSuspended;
return true;
}

View File

@@ -1,73 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
import org.mozilla.javascript.*;
/**
* RunScript: simplest example of controlling execution of Rhino.
*
* Collects its arguments from the command line, executes the
* script, and prints the result.
*
* @author Norris Boyd
*/
public class RunScript {
public static void main(String args[])
throws JavaScriptException
{
// Creates and enters a Context. The Context stores information
// about the execution environment of a script.
Context cx = Context.enter();
// Initialize the standard objects (Object, Function, etc.)
// This must be done before scripts can be executed. Returns
// a scope object that we use in later calls.
Scriptable scope = cx.initStandardObjects(null);
// Collect the arguments into a single string.
String s = "";
for (int i=0; i < args.length; i++)
s += args[i];
// Now evaluate the string we've colected.
Object result = cx.evaluateString(scope, s, "<cmd>", 1, null);
// Convert the result to a string and print it.
System.err.println(cx.toString(result));
// Exit from the context.
Context.exit();
}
}

View File

@@ -1,63 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
import org.mozilla.javascript.*;
/**
* RunScript2: Like RunScript, but reflects the System.out into JavaScript.
*
* @author Norris Boyd
*/
public class RunScript2 {
public static void main(String args[])
throws JavaScriptException
{
Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects(null);
// Add a global variable "out" that is a JavaScript reflection
// of System.out
Scriptable jsArgs = Context.toObject(System.out, scope);
scope.put("out", scope, jsArgs);
String s = "";
for (int i=0; i < args.length; i++)
s += args[i];
Object result = cx.evaluateString(scope, s, "<cmd>", 1, null);
System.err.println(cx.toString(result));
Context.exit();
}
}

View File

@@ -1,80 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
import org.mozilla.javascript.*;
/**
* RunScript3: Example of using JavaScript objects
*
* Collects its arguments from the command line, executes the
* script, and then ...
*
* @author Norris Boyd
*/
public class RunScript3 {
public static void main(String args[])
throws JavaScriptException
{
Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects(null);
// Collect the arguments into a single string.
String s = "";
for (int i=0; i < args.length; i++)
s += args[i];
// Now evaluate the string we've colected. We'll ignore the result.
cx.evaluateString(scope, s, "<cmd>", 1, null);
// Print the value of variable "x"
Object x = scope.get("x", scope);
if (x == Scriptable.NOT_FOUND)
System.out.println("x is not defined.");
else
System.out.println("x = " + Context.toString(x));
// Call function "f('my arg')" and print its result.
Object f = scope.get("f", scope);
if (!(f instanceof Function))
System.out.println("f is undefined or not a function.");
else {
Object functionArgs[] = { "my arg" };
Object result = ((Function) f).call(cx, scope, scope, functionArgs);
System.out.println("f('my args') = " + Context.toString(result));
}
Context.exit();
}
}

View File

@@ -1,71 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
import org.mozilla.javascript.*;
/**
* RunScript4: Execute scripts in an environment that includes the
* example Counter class.
*
* @author Norris Boyd
*/
public class RunScript4 {
public static void main(String args[])
throws Exception
{
Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects(null);
// Use the Counter class to define a Counter constructor
// and prototype in JavaScript.
ScriptableObject.defineClass(scope, Counter.class);
// Create an instance of Counter and assign it to
// the top-level variable "myCounter". This is
// equivalent to the JavaScript code
// myCounter = new Counter(7);
Object[] arg = { new Integer(7) };
Scriptable myCounter = cx.newObject(scope, "Counter", arg);
scope.put("myCounter", scope, myCounter);
String s = "";
for (int i=0; i < args.length; i++)
s += args[i];
Object result = cx.evaluateString(scope, s, "<cmd>", 1, null);
System.err.println(cx.toString(result));
Context.exit();
}
}

View File

@@ -1,352 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
import org.mozilla.javascript.*;
import java.io.*;
/**
* The shell program.
*
* Can execute scripts interactively or in batch mode at the command line.
* An example of controlling the JavaScript engine.
*
* @author Norris Boyd
*/
public class Shell extends ScriptableObject {
/**
* Main entry point.
*
* Process arguments as would a normal Java program. Also
* create a new Context and associate it with the current thread.
* Then set up the execution environment and begin to
* execute scripts.
*/
public static void main(String args[]) {
// Associate a new Context with this thread
Context cx = Context.enter();
// A bit of shorthand: since Shell extends ScriptableObject,
// we can make it the global object.
global = new Shell();
// Initialize the standard objects (Object, Function, etc.)
// This must be done before scripts can be executed.
cx.initStandardObjects(global);
// Define some global functions particular to the shell. Note
// that these functions are not part of ECMA.
String[] names = { "print", "quit", "version", "load", "help" };
try {
global.defineFunctionProperties(names, Shell.class,
ScriptableObject.DONTENUM);
} catch (PropertyException e) {
throw new Error(e.getMessage());
}
args = processOptions(cx, args);
// Set up "arguments" in the global scope to contain the command
// line arguments after the name of the script to execute
Object[] array = args;
if (args.length > 0) {
int length = args.length - 1;
array = new Object[length];
System.arraycopy(args, 1, array, 0, length);
}
Scriptable argsObj = cx.newArray(global, array);
global.defineProperty("arguments", argsObj,
ScriptableObject.DONTENUM);
processSource(cx, args.length == 0 ? null : args[0]);
cx.exit();
}
/**
* Parse arguments.
*/
public static String[] processOptions(Context cx, String args[]) {
for (int i=0; i < args.length; i++) {
String arg = args[i];
if (!arg.startsWith("-")) {
String[] result = new String[args.length - i];
for (int j=i; j < args.length; j++)
result[j-i] = args[j];
return result;
}
if (arg.equals("-version")) {
if (++i == args.length)
usage(arg);
double d = cx.toNumber(args[i]);
if (d != d)
usage(arg);
cx.setLanguageVersion((int) d);
continue;
}
usage(arg);
}
return new String[0];
}
/**
* Return name of this class, the global object.
*
* This method must be implemented in all concrete classes
* extending ScriptableObject.
*
* @see org.mozilla.javascript.Scriptable#getClassName
*/
public String getClassName() {
return "global";
}
/**
* Print a usage message.
*/
public static void usage(String s) {
p("Didn't understand \"" + s + "\".");
p("Valid arguments are:");
p("-version 100|110|120|130");
System.exit(1);
}
/**
* Print a help message.
*
* This method is defined as a JavaScript function.
*/
public static void help(String s) {
p("");
p("Command Description");
p("======= ===========");
p("help() Display usage and help messages. ");
p("defineClass(className) Define an extension using the Java class");
p(" named with the string argument. ");
p(" Uses ScriptableObject.defineClass(). ");
p("load(['foo.js', ...]) Load JavaScript source files named by ");
p(" string arguments. ");
p("loadClass(className) Load a class named by a string argument.");
p(" The class must be a script compiled to a");
p(" class file. ");
p("print([expr ...]) Evaluate and print expressions. ");
p("quit() Quit the shell. ");
p("version([number]) Get or set the JavaScript version number.");
p("");
}
/**
* Print the string values of its arguments.
*
* This method is defined as a JavaScript function.
* Note that its arguments are of the "varargs" form, which
* allows it to handle an arbitrary number of arguments
* supplied to the JavaScript function.
*
*/
public static void print(Context cx, Scriptable thisObj,
Object[] args, Function funObj)
{
for (int i=0; i < args.length; i++) {
if (i > 0)
System.out.print(" ");
// Convert the arbitrary JavaScript value into a string form.
String s = Context.toString(args[i]);
System.out.print(s);
}
System.out.println();
}
/**
* Quit the shell.
*
* This only affects the interactive mode.
*
* This method is defined as a JavaScript function.
*/
public static void quit() {
quitting = true;
}
/**
* Get and set the language version.
*
* This method is defined as a JavaScript function.
*/
public static double version(Context cx, Scriptable thisObj,
Object[] args, Function funObj)
{
double result = (double) cx.getLanguageVersion();
if (args.length > 0) {
double d = cx.toNumber(args[0]);
cx.setLanguageVersion((int) d);
}
return result;
}
/**
* Load and execute a set of JavaScript source files.
*
* This method is defined as a JavaScript function.
*
*/
public static void load(Context cx, Scriptable thisObj,
Object[] args, Function funObj)
{
for (int i=0; i < args.length; i++) {
processSource(cx, cx.toString(args[i]));
}
}
/**
* Evaluate JavaScript source.
*
* @param cx the current context
* @param filename the name of the file to compile, or null
* for interactive mode.
*/
public static void processSource(Context cx, String filename) {
if (filename == null) {
BufferedReader in = new BufferedReader
(new InputStreamReader(System.in));
String sourceName = "<stdin>";
int lineno = 1;
boolean hitEOF = false;
do {
int startline = lineno;
System.err.print("js> ");
System.err.flush();
try {
String source = "";
// Collect lines of source to compile.
while(true) {
String newline;
newline = in.readLine();
if (newline == null) {
hitEOF = true;
break;
}
source = source + newline + "\n";
lineno++;
// Continue collecting as long as more lines
// are needed to complete the current
// statement. stringIsCompilableUnit is also
// true if the source statement will result in
// any error other than one that might be
// resolved by appending more source.
if (cx.stringIsCompilableUnit(source))
break;
}
Object result = cx.evaluateString(global, source,
sourceName, startline,
null);
if (result != cx.getUndefinedValue()) {
System.err.println(cx.toString(result));
}
}
catch (WrappedException we) {
// Some form of exception was caught by JavaScript and
// propagated up.
System.err.println(we.getWrappedException().toString());
we.printStackTrace();
}
catch (EvaluatorException ee) {
// Some form of JavaScript error.
System.err.println("js: " + ee.getMessage());
}
catch (JavaScriptException jse) {
// Some form of JavaScript error.
System.err.println("js: " + jse.getMessage());
}
catch (IOException ioe) {
System.err.println(ioe.toString());
}
if (quitting) {
// The user executed the quit() function.
break;
}
} while (!hitEOF);
System.err.println();
} else {
FileReader in = null;
try {
in = new FileReader(filename);
}
catch (FileNotFoundException ex) {
Context.reportError("Couldn't open file \"" + filename + "\".");
return;
}
try {
// Here we evalute the entire contents of the file as
// a script. Text is printed only if the print() function
// is called.
cx.evaluateReader(global, in, filename, 1, null);
}
catch (WrappedException we) {
System.err.println(we.getWrappedException().toString());
we.printStackTrace();
}
catch (EvaluatorException ee) {
System.err.println("js: " + ee.getMessage());
}
catch (JavaScriptException jse) {
System.err.println("js: " + jse.getMessage());
}
catch (IOException ioe) {
System.err.println(ioe.toString());
}
finally {
try {
in.close();
}
catch (IOException ioe) {
System.err.println(ioe.toString());
}
}
}
System.gc();
}
private static void p(String s) {
System.out.println(s);
}
static Shell global;
static boolean quitting;
}

View File

@@ -1,63 +0,0 @@
/*
* SwingApplication.js - a translation into JavaScript of
* SwingApplication.java, a java.sun.com Swing example.
*
* @author Roger E Critchlow, Jr.
*/
importPackage(Packages.javax.swing);
importPackage(Packages.java.awt);
importPackage(Packages.java.awt.event);
function createComponents() {
var labelPrefix = "Number of button clicks: ";
var numClicks = 0;
var label = new JLabel(labelPrefix + numClicks);
var button = new JButton("I'm a Swing button!");
button.setMnemonic(KeyEvent.VK_I);
button.addActionListener(new ActionListener({
actionPerformed : function() {
numClicks += 1;
label.setText(labelPrefix + numClicks);
}
}));
label.setLabelFor(button);
/*
* An easy way to put space between a top-level container
* and its contents is to put the contents in a JPanel
* that has an "empty" border.
*/
var pane = new JPanel();
pane.setBorder(BorderFactory.createEmptyBorder(
30, //top
30, //left
10, //bottom
30) //right
);
pane.setLayout(new GridLayout(0, 1));
pane.add(button);
pane.add(label);
return pane;
}
try {
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
} catch (e) { }
//Create the top-level container and add contents to it.
var frame = new JFrame("SwingApplication");
frame.getContentPane().add(createComponents(), BorderLayout.CENTER);
//Finish setting up the frame, and show it.
frame.addWindowListener(new WindowAdapter({
windowClosing : function() {
java.lang.System.exit(0);
}
}) );
frame.pack();
frame.setVisible(true);

View File

@@ -1,134 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
/**
* checkParam.js
*
* The files given as arguments on the command line are assumed to be
* Java source code files. This program checks to see that the @param
* tags in the documentation comments match with the parameters for
* the associated Java methods.
* <p>
* Any errors found are reported.
*
*/
defineClass("File")
// Return true if "str" ends with "suffix".
function stringEndsWith(str, suffix) {
return str.substring(str.length - suffix.length) == suffix;
}
/**
* Perform processing once the end of a documentation comment is seen.
*
* Look for a parameter list following the end of the comment and
* collect the parameters and compare to the @param entries.
* Report any discrepancies.
* @param f the current file
* @param a an array of parameters from @param comments
* @param line the string containing the comment end (in case the
* parameters are on the same line)
*/
function processCommentEnd(f, a, line) {
while (line != null && !line.match(/\(/))
line = f.readLine();
while (line != null && !line.match(/\)/))
line += f.readLine();
if (line === null)
return;
var m = line.match(/\(([^\)]+)\)/);
var args = m ? m[1].split(",") : [];
if (a.length != args.length) {
print('"' + f.name +
'"; line ' + f.lineNumber +
' mismatch: had a different number' +
' of @param entries and parameters.');
} else {
for (var i=0; i < a.length; i++) {
if (!stringEndsWith(args[i], a[i])) {
print('"' + f.name +
'"; line ' + f.lineNumber +
' mismatch: had "' + a[i] +
'" and "' + args[i] + '".');
break;
}
}
}
}
/**
* Process the given file, looking for mismatched @param lists and
* parameter lists.
* @param f the file to process
*/
function processFile(f) {
var line;
var m;
var i = 0;
var a = [];
outer:
while ((line = f.readLine()) != null) {
if (line.match(/@param/)) {
while (m = line.match(/@param[ ]+([^ ]+)/)) {
a[i++] = m[1];
line = f.readLine();
if (line == null)
break outer;
}
}
if (i != 0 && line.match(/\*\//)) {
processCommentEnd(f, a, line);
i = 0;
a = [];
}
}
if (i != 0) {
print('"' + f.name +
'"; line ' + f.lineNumber +
' missing parameters at end of file.');
}
}
// main script: process each file in arguments list
for (var i=0; i < arguments.length; i++) {
var filename = String(arguments[i]);
print("Checking " + filename + "...");
var f = new File(filename);
processFile(f);
}
print("done.");

View File

@@ -1,70 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Patrick Beard
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
/*
enum.js
Implementing the interface java.util.Enumeration using the new syntax.
Note that this syntax is experimental only, and hasn't been approved
by ECMA.
The same functionality can be had without the new syntax using the
uglier syntax:
var elements = new JavaAdapter(java.util.Enumeration, {
index: 0, elements: array,
hasMoreElements: function ...
nextElement: function ...
});
by Patrick C. Beard.
*/
// an array to enumerate.
var array = [0, 1, 2];
// create an array enumeration.
var elements = new java.util.Enumeration() {
index: 0, elements: array,
hasMoreElements: function() {
return (this.index < this.elements.length);
},
nextElement: function() {
return this.elements[this.index++];
}
};
// now print out the array by enumerating through the Enumeration
while (elements.hasMoreElements())
print(elements.nextElement());

View File

@@ -1,553 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
* Roland Pennings
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
/**
* Process a JavaScript source file and process special comments
* to produce an HTML file of documentation, similar to javadoc.
* @author Norris Boyd
* @see rhinotip.jar
* @lastmodified xx
* @version 1.2 Roland Pennings: Allow multiple files for a function.
* @version 1.3 Roland Pennings: Removes ../.. from the input directory name
*/
defineClass("File")
var functionDocArray = [];
var inputDirName = "";
var indexFileArray = [];
var indexFile = "";
var indexFileName = "index_files";
var indexFunctionArray = [];
var indexFunction = "";
var indexFunctionName = "index_functions";
var FileList = [];
var DirList = [];
var outputdir = null;
var debug = 0;
/**
* Process JavaScript source file <code>f</code>, writing jsdoc to
* file <code>out</code>.
* @param f input file
* @param fname name of the input file (without the path)
* @param inputdir directory of the input file
* @param out output file
*/
function processFile(f, fname, inputdir, out) {
var s;
var firstLine = true;
indexFileArray[fname] = "";
// write the header of the output file
out.writeLine('<HTML><HEADER><TITLE>' + fname + '</TITLE><BODY>');
if (inputdir != null) {
outstr = '<a name=\"_top_\"></a><pre><a href=\"' + indexFile + '\">Index Files</a> ';
outstr += '<a href=\"' + indexFunction + '\">Index Functions</a></pre><hr>';
out.writeLine(outstr);
}
// process the input file
var comment = "";
while ((s = f.readLine()) != null) {
var m = s.match(/\/\*\*(.*)/);
if (m != null) {
// Found a comment start.
s = "*" + m[1];
do {
m = s.match(/(.*)\*\//);
if (m != null) {
// Found end of comment.
comment += m[1];
break;
}
// Strip leading whitespace and "*".
comment += s.replace(/^\s*\*/, "");
s = f.readLine();
} while (s != null);
if (debug)
print("Found comment " + comment);
if (firstLine) {
// We have a comment for the whole file.
out.writeLine('<H1>File ' + fname + '</H1>');
out.writeLine(processComment(comment,firstLine,fname));
out.writeLine('<HR>');
firstLine = false;
comment = "";
continue;
}
}
// match the beginning of the function
// NB we also match functions without a comment!
// if we have two comments one after another only the last one will be taken
m = s.match(/^\s*function\s+((\w+)|(\w+)(\s+))\(([^)]*)\)/);
if (m != null)
{
// Found a function start
var htmlText = processFunction(m[1], m[5], comment); // sjm changed from 2nd to 5th arg
// Save the text in a global variable, so we
// can write out a table of contents first.
functionDocArray[functionDocArray.length] = {name:m[1], text:htmlText};
// Store the function also in the indexFunctionArray
// so we can have a seperate file with the function table of contents
if (indexFunctionArray[m[1]]) {
// print("ERROR: function: " + m[1] + " is defined more than once!");
// Allow multiple files for a function
with (indexFunctionArray[m[1]]) {
filename = filename + "|" + fname;
// print("filename = " + filename);
}
}
else {
indexFunctionArray[m[1]] = {filename:fname};
}
//reset comment
comment = "";
}
// match a method being bound to a prototype
m = s.match(/^\s*(\w*)\.prototype\.(\w*)\s*=\s*function\s*\(([^)]*)\)/);
if (m != null)
{
// Found a method being bound to a prototype.
var htmlText = processPrototypeMethod(m[1], m[2], m[3], comment);
// Save the text in a global variable, so we
// can write out a table of contents first.
functionDocArray[functionDocArray.length] = {name:m[1]+".prototype."+m[2], text:htmlText};
// Store the function also in the indexFunctionArray
// so we can have a seperate file with the function table of contents
if (indexFunctionArray[m[1]]) {
// print("ERROR: function: " + m[1] + " is defined more than once!");
// Allow multiple files for a function
with (indexFunctionArray[m[1]]) {
filename = filename + "|" + fname;
// print("filename = " + filename);
}
}
else {
indexFunctionArray[m[1]] = {filename:fname};
}
//reset comment
comment = "";
}
firstLine = false;
}
// Write table of contents.
for (var i=0; i < functionDocArray.length; i++) {
with (functionDocArray[i]) {
out.writeLine('function <A HREF=#' + name +
'>' + name + '</A><BR>');
}
}
out.writeLine('<HR>');
// Now write the saved function documentation.
for (i=0; i < functionDocArray.length; i++) {
with (functionDocArray[i]) {
out.writeLine('<A NAME=' + name + '>');
out.writeLine(text);
}
}
out.writeLine('</BODY></HTML>');
// Now clean up the doc array
functionDocArray = [];
}
/**
* Process function and associated comment.
* @param name the name of the function
* @param args the args of the function as a single string
* @param comment the text of the comment
* @return a string for the HTML text of the documentation
*/
function processFunction(name, args, comment) {
if (debug)
print("Processing " + name + " " + args + " " + comment);
return "<H2>Function " + name + "</H2>" +
"<PRE>" +
"function " + name + "(" + args + ")" +
"</PRE>" +
processComment(comment,0,name) +
"<P><BR><BR>";
}
/**
* Process a method being bound to a prototype.
* @param proto the name of the prototype
* @param name the name of the function
* @param args the args of the function as a single string
* @param comment the text of the comment
* @return a string for the HTML text of the documentation
*/
function processPrototypeMethod(proto, name, args, comment) {
if (debug)
print("Processing " + proto + ".prototype." + name + " " + args + " " + comment);
return "<H2> Method " + proto + ".prototype." + name + "</H2>" +
"<PRE>" +
proto + ".prototype." + name + " = function(" + args + ")" +
"</PRE>" +
processComment(comment,0,name) +
"<P><BR><BR>";
}
/**
* Process comment.
* @param comment the text of the comment
* @param firstLine shows if comment is at the beginning of the file
* @param fname name of the file (without path)
* @return a string for the HTML text of the documentation
*/
function processComment(comment,firstLine,fname) {
var tags = {};
// Use the "lambda" form of regular expression replace,
// where the replacement object is a function rather
// than a string. The function is called with the
// matched text and any parenthetical matches as
// arguments, and the result of the function used as the
// replacement text.
// Here we use the function to build up the "tags" object,
// which has a property for each "@" tag that is the name
// of the tag, and whose value is an array of the
// text following that tag.
comment = comment.replace(/@(\w+)\s+([^@]*)/g,
function (s, name, text) {
var a = tags[name] || [];
a.push(text);
tags[name] = a;
return "";
});
// if we have a comment at the beginning of a file
// store the comment for the index file
if (firstLine) {
indexFileArray[fname] = comment;
}
var out = comment + '<P>';
if (tags["param"]) {
// Create a table of parameters and their descriptions.
var array = tags["param"];
var params = "";
for (var i=0; i < array.length; i++) {
var m = array[i].match(/(\w+)\s+(.*)/);
params += '<TR><TD><I>'+m[1]+'</I></TD>' +
'<TD>'+m[2]+'</TD></TR>';
}
out += '<TABLE WIDTH="90%" BORDER=1>';
out += '<TR BGCOLOR=0xdddddddd>';
out += '<TD><B>Parameter</B></TD>';
out += '<TD><B>Description</B></TD></TR>';
out += params;
out += '</TABLE><P>';
}
if (tags["return"]) {
out += "<DT><B>Returns:</B><DD>";
out += tags["return"][0] + "</DL><P>";
}
if (tags["author"]) {
// List the authors together, separated by commas.
out += '<DT><B>Author:</B><DD>';
var array = tags["author"];
for (var i=0; i < array.length; i++) {
out += array[i];
if (i+1 < array.length)
out += ", ";
}
out += '</DL><P>';
}
if (tags["version"]) {
// Show the version.
out += '<DT><B>Version:</B><DD>';
var array = tags["version"];
for (var i=0; i < array.length; i++) {
out += array[i];
if (i+1 < array.length)
out += "<BR><DD>";
}
out += '</DL><P>';
}
if (tags["see"]) {
// List the see modules together, separated by <BR>.
out += '<DT><B>Dependencies:</B><DD>';
var array = tags["see"];
for (var i=0; i < array.length; i++) {
out += array[i];
if (i+1 < array.length)
out += "<BR><DD>";
}
out += '</DL><P>';
}
if (tags["lastmodified"]) {
// Shows a last modified description with client-side js.
out += '<DT><B>Last modified:</B><DD>';
out += '<script><!--\n';
out += 'document.writeln(document.lastModified);\n';
out += '// ---></script>\n';
out += '</DL><P>';
}
// additional tags can be added here (i.e., "if (tags["see"])...")
return out;
}
/**
* Create an html output file
* @param outputdir directory to put the file
* @param htmlfile name of the file
*/
function CreateOutputFile(outputdir,htmlfile)
{
if (outputdir==null)
{
var outname = htmlfile;
}
else
{
var separator = Packages.java.io.File.separator;
var outname = outputdir + separator + htmlfile.substring(htmlfile.lastIndexOf(separator),htmlfile.length);
}
print("output file: " + outname);
return new File(outname);
}
/**
* Process a javascript file. Puts the generated HTML file in the outdir
* @param filename name of the javascript file
* @inputdir input directory of the file (default null)
*/
function processJSFile(filename,inputdir)
{
if (debug) print("filename = " + filename + " inputdir = " + inputdir);
if (!filename.match(/\.js$/)) {
print("Expected filename to end in '.js'; had instead " +
filename + ". I don't treat the file.");
} else {
if (inputdir==null)
{
var inname = filename;
}
else
{
var separator = Packages.java.io.File.separator;
var inname = inputdir + separator + filename;
}
print("Processing file " + inname);
var f = new File(inname);
// create the output file
var htmlfile = filename.replace(/\.js$/, ".html");
var out = CreateOutputFile(outputdir,htmlfile);
processFile(f, filename, inputdir, out);
out.close();
}
}
/**
* Generate index files containing links to the processed javascript files
* and the generated functions
*/
function GenerateIndex(dirname)
{
// construct the files index file
var out = CreateOutputFile(outputdir,indexFile);
// write the beginning of the file
out.writeLine('<HTML><HEADER><TITLE>File Index - directory: ' + dirname + '</TITLE><BODY>');
out.writeLine('<H1>File Index - directory: ' + dirname + '</H1>\n');
out.writeLine('<TABLE WIDTH="90%" BORDER=1>');
out.writeLine('<TR BGCOLOR=0xdddddddd>');
out.writeLine('<TD><B>File</B></TD>');
out.writeLine('<TD><B>Description</B></TD></TR>');
var separator = Packages.java.io.File.separator;
// sort the index file array
var SortedFileArray = [];
for (var fname in indexFileArray)
SortedFileArray.push(fname);
SortedFileArray.sort();
for (var i=0; i < SortedFileArray.length; i++) {
var fname = SortedFileArray[i];
var htmlfile = fname.replace(/\.js$/, ".html");
out.writeLine('<TR><TD><A HREF=\"' + htmlfile + '\">' + fname + '</A></TD></TD><TD>');
if (indexFileArray[fname])
out.writeLine(indexFileArray[fname]);
else
out.writeLine('No comments');
out.writeLine('</TD></TR>\n');
}
out.writeLine('</TABLE></BODY></HTML>');
out.close();
// construct the functions index file
var out = CreateOutputFile(outputdir,indexFunction);
// write the beginning of the file
out.writeLine('<HTML><HEADER><TITLE>Function Index - directory: ' + dirname + '</TITLE><BODY>');
out.writeLine('<H1>Function Index - directory: ' + dirname + '</H1>\n');
out.writeLine('<TABLE WIDTH="90%" BORDER=1>');
out.writeLine('<TR BGCOLOR=0xdddddddd>');
out.writeLine('<TD><B>Function</B></TD>');
out.writeLine('<TD><B>Files</B></TD></TR>');
// sort the function array
var SortedFunctionArray = [];
for (var functionname in indexFunctionArray)
SortedFunctionArray.push(functionname);
SortedFunctionArray.sort();
for (var j=0; j < SortedFunctionArray.length; j++) {
var funcname = SortedFunctionArray[j];
with (indexFunctionArray[funcname]) {
var outstr = '<TR><TD>' + funcname + '</TD><TD>';
var filelst = filename.split("|");
for (var i in filelst) {
var htmlfile = filelst[i].replace(/\.js$/, ".html");
outstr += '<A HREF=\"' + htmlfile + '#' + funcname + '\">' + filelst[i] + '</A>&nbsp;';
}
outstr += '</TD></TR>';
out.writeLine(outstr);
}
}
out.writeLine('</TABLE></BODY></HTML>');
out.close();
}
/**
* prints the options for JSDoc
*/
function PrintOptions()
{
print("You can use the following options:\n");
print("-d: specify an output directory for the generated html files\n");
print("-i: processes all files in an input directory (you can specify several directories)\n");
quit();
}
// Main Script
// first read the arguments
if (! arguments)
PrintOptions();
for (var i=0; i < arguments.length; i++) {
if (debug) print("argument: + \'" + arguments[i] + "\'");
if (arguments[i].match(/^\-/)) {
if (String(arguments[i])=="-d"){
// output directory for the generated html files
outputdir = String(arguments[i+1]);
if (debug) print("outputdir: + \'" + outputdir + "\'");
i++;
}
else if (String(arguments[i])=="-i"){
// process all files in an input directory
DirList.push(String(arguments[i+1]));
if (debug) print("inputdir: + \'" + arguments[i+1] + "\'");
i++;
}
else {
print("Unknown option: " + arguments[i] + "\n");
PrintOptions();
}
}
else
{
// we have a single file
if (debug) print("file: + \'" + arguments[i] + "\'");
FileList.push(String(arguments[i]));
}
}
// first handle the single files
for (var i in FileList)
processJSFile(FileList[i],null);
// then handle the input directories
for (var j in DirList) {
var inputdir = String(DirList[j]);
print("Process input directory: " + inputdir);
// clean up index arrays
var indexFileArray = [];
var indexFunctionArray = [];
// for the directory name get rid of ../../ or ..\..\
inputDirName = inputdir.replace(/\.\.\/|\.\.\\/g,"");
indexFile = indexFileName + "_" + inputDirName + ".html";
indexFunction = indexFunctionName + "_" + inputDirName + ".html";
print("indexFile = " + indexFile);
print("indexFunction = " + indexFunction);
// read the files in the directory
var DirFile = new java.io.File(inputdir);
var lst = DirFile.list();
var separator = Packages.java.io.File.separator;
for (var i=0; i < lst.length; i++)
{
processJSFile(String(lst[i]),inputdir);
}
// generate the index files for the input directory
GenerateIndex(inputDirName);
}

View File

@@ -1,54 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
/**
* liveConnect.js: a simple demonstration of JavaScript-to-Java connectivity
*/
// Create a new StringBuffer. Note that the class name must be fully qualified
// by its package. Packages other than "java" must start with "Packages", i.e.,
// "Packages.javax.servlet...".
var sb = new java.lang.StringBuffer();
// Now add some stuff to the buffer.
sb.append("hi, mom");
sb.append(3); // this will add "3.0" to the buffer since all JS numbers
// are doubles by default
sb.append(true);
// Now print it out. (The toString() method of sb is automatically called
// to convert the buffer to a string.)
// Should print "hi, mom3.0true".
print(sb);

View File

@@ -1,53 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
// unique.js: read the contents of a file and print out the unique lines
defineClass("File")
// "arguments[0]" refers to the first argument at the command line to the
// script, if present. If not present, "arguments[0]" will be undefined,
// which will cause f to read from System.in.
var f = new File(arguments[0]);
var o = {}
var line;
while ((line = f.readLine()) != null) {
// Use JavaScript objects' inherent nature as an associative
// array to provide uniqueness
o[line] = true;
}
for (i in o) {
print(i);
}

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -1,37 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Build file for Rhino using Ant (see http://jakarta.apache.org/ant/index.html)
Requires Ant version 1.2
-->
<project name="src" default="build" basedir=".">
<target name="properties">
<property name="nest" value=".."/>
</target>
<target name="compile" depends="properties">
<javac srcdir="."
destdir="${nest}/${build.dest}"
includes="org/**/*.java"
deprecation="on"
debug="${debug}">
</javac>
</target>
<target name="copy-properties">
<copy todir="${nest}/${build.dest}">
<fileset dir="." includes="org/**/*.properties" />
</copy>
</target>
<target name="copy-source">
<copy todir="${nest}/${dist.src}">
<fileset dir="."
includes="org/**/*.java,org/**/*.properties,build.xml,manifest"/>
</copy>
</target>
<target name="build" depends="compile,copy-properties,copy-source"/>
</project>

View File

@@ -1,2 +0,0 @@
Manifest-Version: 1.0
Main-Class: org.mozilla.javascript.tools.shell.Main

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,107 +0,0 @@
/*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
* Roger Lawrence
* Patrick Beard
* Igor Bukanov
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
package org.mozilla.classfile;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
/**
* Load generated classes.
*
* @author Norris Boyd
*/
public class DefiningClassLoader extends ClassLoader {
public static ClassLoader getContextClassLoader() {
try {
if (getContextClassLoaderMethod != null) {
return (ClassLoader) getContextClassLoaderMethod.invoke(
Thread.currentThread(),
new Object[0]);
}
} catch (IllegalAccessException e) {
// fall through...
} catch (InvocationTargetException e) {
// fall through...
}
return DefiningClassLoader.class.getClassLoader();
}
public Class defineClass(String name, byte data[]) {
return super.defineClass(name, data, 0, data.length);
}
public Class loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
Class clazz = findLoadedClass(name);
if (clazz == null) {
ClassLoader loader = getContextClassLoader();
if (loader != null) {
clazz = loader.loadClass(name);
} else {
clazz = findSystemClass(name);
}
}
if (resolve)
resolveClass(clazz);
return clazz;
}
private static Method getContextClassLoaderMethod;
static {
try {
// Don't use "Thread.class": that performs the lookup
// in the class initializer, which doesn't allow us to
// catch possible security exceptions.
Class threadClass = Class.forName("java.lang.Thread");
// We'd like to use "getContextClassLoader", but
// that's only available on Java2.
getContextClassLoaderMethod =
threadClass.getDeclaredMethod("getContextClassLoader",
new Class[0]);
} catch (ClassNotFoundException e) {
// ignore exceptions; we'll use Class.forName instead.
} catch (NoSuchMethodException e) {
// ignore exceptions; we'll use Class.forName instead.
} catch (SecurityException e) {
// ignore exceptions; we'll use Class.forName instead.
}
}
}

View File

@@ -1,140 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
package org.mozilla.javascript;
/**
* This class implements the "arguments" object.
*
* See ECMA 10.1.8
*
* @see org.mozilla.javascript.NativeCall
* @author Norris Boyd
*/
class Arguments extends ScriptableObject {
public Arguments(NativeCall activation) {
this.activation = activation;
Scriptable parent = activation.getParentScope();
setParentScope(parent);
setPrototype(ScriptableObject.getObjectPrototype(parent));
args = activation.getOriginalArguments();
int length = args.length;
Object callee = activation.funObj;
defineProperty("length", new Integer(length),
ScriptableObject.DONTENUM);
defineProperty("callee", callee, ScriptableObject.DONTENUM);
hasCaller = (activation.funObj.version <= Context.VERSION_1_3 &&
activation.funObj.version != Context.VERSION_DEFAULT);
}
public String getClassName() {
return "Arguments";
}
public boolean has(String name, Scriptable start) {
return (hasCaller && name.equals("caller")) || super.has(name, start);
}
public boolean has(int index, Scriptable start) {
Object[] args = activation.getOriginalArguments();
return (0 <= index && index < args.length) || super.has(index, start);
}
public Object get(String name, Scriptable start) {
if (hasCaller && name.equals("caller")) {
NativeCall caller = activation.caller;
if (caller == null || caller.originalArgs == null)
return null;
return caller.get("arguments", caller);
}
return super.get(name, start);
}
public Object get(int index, Scriptable start) {
if (0 <= index && index < args.length) {
NativeFunction f = activation.funObj;
if (index < f.argCount)
return activation.get(f.argNames[index], activation);
return args[index];
}
return super.get(index, start);
}
public void put(String name, Scriptable start, Object value) {
if (name.equals("caller")) {
// Set "hasCaller" to false so that we won't look up a
// computed value.
hasCaller = false;
}
super.put(name, start, value);
}
public void put(int index, Scriptable start, Object value) {
if (0 <= index && index < args.length) {
NativeFunction f = activation.funObj;
if (index < f.argCount)
activation.put(f.argNames[index], activation, value);
else
args[index] = value;
return;
}
super.put(index, start, value);
}
public void delete(String name) {
if (name.equals("caller"))
hasCaller = false;
super.delete(name);
}
public void delete(int index) {
if (0 <= index && index < args.length) {
NativeFunction f = activation.funObj;
if (index < f.argCount)
activation.delete(f.argNames[index]);
else
args[index] = Undefined.instance;
}
}
private NativeCall activation;
private Object[] args;
private boolean hasCaller;
}

View File

@@ -1,521 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
* Igor Bukanov
* Roger Lawrence
* Mike McCabe
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
package org.mozilla.javascript;
/**
* The base class for Function objects
* See ECMA 15.3.
* @author Norris Boyd
*/
public class BaseFunction extends IdScriptable implements Function {
static void init(Context cx, Scriptable scope, boolean sealed) {
BaseFunction obj = new BaseFunction();
obj.prototypeFlag = true;
obj.functionName = "";
obj.prototypePropertyAttrs = DONTENUM | READONLY | PERMANENT;
obj.addAsPrototype(MAX_PROTOTYPE_ID, cx, scope, sealed);
}
protected void fillConstructorProperties
(Context cx, IdFunction ctor, boolean sealed)
{
// Fix up bootstrapping problem: getPrototype of the IdFunction
// can not return Function.prototype because Function object is not
// yet defined.
ctor.setPrototype(this);
}
public String getClassName() {
return "Function";
}
/**
* Implements the instanceof operator for JavaScript Function objects.
* <p>
* <code>
* foo = new Foo();<br>
* foo instanceof Foo; // true<br>
* </code>
*
* @param instance The value that appeared on the LHS of the instanceof
* operator
* @return true if the "prototype" property of "this" appears in
* value's prototype chain
*
*/
public boolean hasInstance(Scriptable instance) {
Object protoProp = ScriptableObject.getProperty(this, "prototype");
if (protoProp instanceof Scriptable && protoProp != Undefined.instance)
{
return ScriptRuntime.jsDelegatesTo(instance, (Scriptable)protoProp);
}
throw NativeGlobal.typeError1
("msg.instanceof.bad.prototype", functionName, instance);
}
protected int getIdDefaultAttributes(int id) {
switch (id) {
case Id_length:
case Id_arity:
case Id_name:
return DONTENUM | READONLY | PERMANENT;
case Id_prototype:
return prototypePropertyAttrs;
case Id_arguments:
return EMPTY;
}
return super.getIdDefaultAttributes(id);
}
protected boolean hasIdValue(int id) {
if (id == Id_prototype) {
return prototypeProperty != NOT_FOUND;
}
else if (id == Id_arguments) {
// Should after delete Function.arguments its activation still
// be available during Function call?
// This code assumes it should not: after default set/deleteIdValue
// hasIdValue/getIdValue would not be called again
// To handle the opposite case, set/deleteIdValue should be
// overwritten as well
return null != getActivation(Context.getContext());
}
return super.hasIdValue(id);
}
protected Object getIdValue(int id) {
switch (id) {
case Id_length: return wrap_int(getLength());
case Id_arity: return wrap_int(getArity());
case Id_name: return getFunctionName();
case Id_prototype: return getPrototypeProperty();
case Id_arguments: return getArguments();
}
return super.getIdValue(id);
}
protected void setIdValue(int id, Object value) {
if (id == Id_prototype) {
prototypeProperty = (value != null) ? value : NULL_TAG;
return;
}
super.setIdValue(id, value);
}
protected void deleteIdValue(int id) {
if (id == Id_prototype) {
prototypeProperty = NOT_FOUND;
return;
}
super.deleteIdValue(id);
}
public int methodArity(int methodId) {
if (prototypeFlag) {
switch (methodId) {
case Id_constructor:
case Id_toString:
case Id_apply:
case Id_call:
return 1;
}
}
return super.methodArity(methodId);
}
public Object execMethod(int methodId, IdFunction f, Context cx,
Scriptable scope, Scriptable thisObj,
Object[] args)
throws JavaScriptException
{
if (prototypeFlag) {
switch (methodId) {
case Id_constructor:
return jsConstructor(cx, scope, args);
case Id_toString:
return jsFunction_toString(cx, thisObj, args);
case Id_apply:
return jsFunction_apply(cx, scope, thisObj, args);
case Id_call:
return jsFunction_call(cx, scope, thisObj, args);
}
}
return super.execMethod(methodId, f, cx, scope, thisObj, args);
}
/**
* Make value as DontEnum, DontDelete, ReadOnly
* prototype property of this Function object
*/
public void setImmunePrototypeProperty(Object value) {
prototypeProperty = (value != null) ? value : NULL_TAG;
prototypePropertyAttrs = DONTENUM | READONLY | PERMANENT;
}
protected Scriptable getClassPrototype() {
Object protoVal = getPrototypeProperty();
if (protoVal == null
|| !(protoVal instanceof Scriptable)
|| (protoVal == Undefined.instance))
protoVal = getClassPrototype(this, "Object");
return (Scriptable) protoVal;
}
/**
* Should be overridden.
*/
public Object call(Context cx, Scriptable scope, Scriptable thisObj,
Object[] args)
throws JavaScriptException
{
return Undefined.instance;
}
public Scriptable construct(Context cx, Scriptable scope, Object[] args)
throws JavaScriptException
{
Scriptable newInstance = new NativeObject();
newInstance.setPrototype(getClassPrototype());
newInstance.setParentScope(getParentScope());
Object val = call(cx, scope, newInstance, args);
if (val instanceof Scriptable && val != Undefined.instance) {
return (Scriptable) val;
}
return newInstance;
}
/**
* Decompile the source information associated with this js
* function/script back into a string.
*
* @param cx Current context
*
* @param indent How much to indent the decompiled result
*
* @param justbody Whether the decompilation should omit the
* function header and trailing brace.
*/
public String decompile(Context cx, int indent, boolean justbody) {
StringBuffer sb = new StringBuffer();
if (!justbody) {
sb.append("function ");
sb.append(getFunctionName());
sb.append("() {\n\t");
}
sb.append("[native code, arity=");
sb.append(getArity());
sb.append("]\n");
if (!justbody) {
sb.append("}\n");
}
return sb.toString();
}
public int getArity() { return 0; }
public int getLength() { return 0; }
public String getFunctionName() {
if (functionName == null)
return "";
if (functionName.equals("anonymous")) {
Context cx = Context.getCurrentContext();
if (cx != null && cx.getLanguageVersion() == Context.VERSION_1_2)
return "";
}
return functionName;
}
private Object getPrototypeProperty() {
Object result = prototypeProperty;
if (result == null) {
synchronized (this) {
result = prototypeProperty;
if (result == null) {
setupDefaultPrototype();
result = prototypeProperty;
}
}
}
else if (result == NULL_TAG) { result = null; }
return result;
}
private void setupDefaultPrototype() {
NativeObject obj = new NativeObject();
final int attr = ScriptableObject.DONTENUM |
ScriptableObject.READONLY |
ScriptableObject.PERMANENT;
obj.defineProperty("constructor", this, attr);
// put the prototype property into the object now, then in the
// wacky case of a user defining a function Object(), we don't
// get an infinite loop trying to find the prototype.
prototypeProperty = obj;
Scriptable proto = getObjectPrototype(this);
if (proto != obj) {
// not the one we just made, it must remain grounded
obj.setPrototype(proto);
}
}
private Object getArguments() {
// <Function name>.arguments is deprecated, so we use a slow
// way of getting it that doesn't add to the invocation cost.
// TODO: add warning, error based on version
NativeCall activation = getActivation(Context.getContext());
return activation == null
? null
: activation.get("arguments", activation);
}
NativeCall getActivation(Context cx) {
NativeCall activation = cx.currentActivation;
while (activation != null) {
if (activation.getFunctionObject() == this)
return activation;
activation = activation.caller;
}
return null;
}
private static Object jsConstructor(Context cx, Scriptable scope,
Object[] args)
{
int arglen = args.length;
StringBuffer funArgs = new StringBuffer();
/* Collect the arguments into a string. */
int i;
for (i = 0; i < arglen - 1; i++) {
if (i > 0)
funArgs.append(',');
funArgs.append(ScriptRuntime.toString(args[i]));
}
String funBody = arglen == 0 ? "" : ScriptRuntime.toString(args[i]);
String source = "function (" + funArgs.toString() + ") {" +
funBody + "}";
int[] linep = { 0 };
String filename = Context.getSourcePositionFromStack(linep);
if (filename == null) {
filename = "<eval'ed string>";
linep[0] = 1;
}
Object securityDomain = cx.getSecurityDomainForStackDepth(4);
Scriptable global = ScriptableObject.getTopLevelScope(scope);
// Compile the function with opt level of -1 to force interpreter
// mode.
int oldOptLevel = cx.getOptimizationLevel();
cx.setOptimizationLevel(-1);
NativeFunction fn;
try {
fn = (NativeFunction) cx.compileFunction(global, source,
filename, linep[0],
securityDomain);
}
finally { cx.setOptimizationLevel(oldOptLevel); }
fn.functionName = "anonymous";
fn.setPrototype(getFunctionPrototype(global));
fn.setParentScope(global);
return fn;
}
private static Object jsFunction_toString(Context cx, Scriptable thisObj,
Object[] args)
{
int indent = ScriptRuntime.toInt32(args, 0);
Object val = thisObj.getDefaultValue(ScriptRuntime.FunctionClass);
if (val instanceof BaseFunction) {
return ((BaseFunction)val).decompile(cx, indent, false);
}
throw NativeGlobal.typeError1("msg.incompat.call", "toString", thisObj);
}
/**
* Function.prototype.apply
*
* A proposed ECMA extension for round 2.
*/
private static Object jsFunction_apply(Context cx, Scriptable scope,
Scriptable thisObj, Object[] args)
throws JavaScriptException
{
if (args.length != 2)
return jsFunction_call(cx, scope, thisObj, args);
Object val = thisObj.getDefaultValue(ScriptRuntime.FunctionClass);
Scriptable newThis = args[0] == null
? ScriptableObject.getTopLevelScope(thisObj)
: ScriptRuntime.toObject(scope, args[0]);
Object[] newArgs;
if (args.length > 1) {
if ((args[1] instanceof NativeArray)
|| (args[1] instanceof Arguments))
newArgs = cx.getElements((Scriptable) args[1]);
else
throw NativeGlobal.typeError0("msg.arg.isnt.array", thisObj);
}
else
newArgs = ScriptRuntime.emptyArgs;
return ScriptRuntime.call(cx, val, newThis, newArgs, newThis);
}
/**
* Function.prototype.call
*
* A proposed ECMA extension for round 2.
*/
private static Object jsFunction_call(Context cx, Scriptable scope,
Scriptable thisObj, Object[] args)
throws JavaScriptException
{
Object val = thisObj.getDefaultValue(ScriptRuntime.FunctionClass);
if (args.length == 0) {
Scriptable s = ScriptRuntime.toObject(scope, val);
Scriptable topScope = s.getParentScope();
return ScriptRuntime.call(cx, val,
topScope, ScriptRuntime.emptyArgs,
topScope);
} else {
Scriptable newThis = args[0] == null
? ScriptableObject.getTopLevelScope(thisObj)
: ScriptRuntime.toObject(scope, args[0]);
Object[] newArgs = new Object[args.length - 1];
System.arraycopy(args, 1, newArgs, 0, newArgs.length);
return ScriptRuntime.call(cx, val, newThis, newArgs, newThis);
}
}
protected int maxInstanceId() { return MAX_INSTANCE_ID; }
protected String getIdName(int id) {
switch (id) {
case Id_length: return "length";
case Id_arity: return "arity";
case Id_name: return "name";
case Id_prototype: return "prototype";
case Id_arguments: return "arguments";
}
if (prototypeFlag) {
switch (id) {
case Id_constructor: return "constructor";
case Id_toString: return "toString";
case Id_apply: return "apply";
case Id_call: return "call";
}
}
return null;
}
// #string_id_map#
private static final int
Id_length = 1,
Id_arity = 2,
Id_name = 3,
Id_prototype = 4,
Id_arguments = 5,
MAX_INSTANCE_ID = 5;
protected int mapNameToId(String s) {
int id;
// #generated# Last update: 2001-05-20 00:12:12 GMT+02:00
L0: { id = 0; String X = null; int c;
L: switch (s.length()) {
case 4: X="name";id=Id_name; break L;
case 5: X="arity";id=Id_arity; break L;
case 6: X="length";id=Id_length; break L;
case 9: c=s.charAt(0);
if (c=='a') { X="arguments";id=Id_arguments; }
else if (c=='p') { X="prototype";id=Id_prototype; }
break L;
}
if (X!=null && X!=s && !X.equals(s)) id = 0;
}
// #/generated#
// #/string_id_map#
if (id != 0 || !prototypeFlag) { return id; }
// #string_id_map#
// #generated# Last update: 2001-05-20 00:12:12 GMT+02:00
L0: { id = 0; String X = null;
L: switch (s.length()) {
case 4: X="call";id=Id_call; break L;
case 5: X="apply";id=Id_apply; break L;
case 8: X="toString";id=Id_toString; break L;
case 11: X="constructor";id=Id_constructor; break L;
}
if (X!=null && X!=s && !X.equals(s)) id = 0;
}
// #/generated#
return id;
}
private static final int
Id_constructor = MAX_INSTANCE_ID + 1,
Id_toString = MAX_INSTANCE_ID + 2,
Id_apply = MAX_INSTANCE_ID + 3,
Id_call = MAX_INSTANCE_ID + 4,
MAX_PROTOTYPE_ID = MAX_INSTANCE_ID + 4;
// #/string_id_map#
protected String functionName;
private Object prototypeProperty;
private int prototypePropertyAttrs = DONTENUM;
private boolean prototypeFlag;
}

View File

@@ -1,75 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Waldemar Horwat
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
package org.mozilla.javascript;
final class BinaryDigitReader {
int lgBase; // Logarithm of base of number
int digit; // Current digit value in radix given by base
int digitPos; // Bit position of last bit extracted from digit
String digits; // String containing the digits
int start; // Index of the first remaining digit
int end; // Index past the last remaining digit
BinaryDigitReader(int base, String digits, int start, int end) {
lgBase = 0;
while (base != 1) {
lgBase++;
base >>= 1;
}
digitPos = 0;
this.digits = digits;
this.start = start;
this.end = end;
}
/* Return the next binary digit from the number or -1 if done */
int getNextBinaryDigit()
{
if (digitPos == 0) {
if (start == end)
return -1;
char c = digits.charAt(start++);
if ('0' <= c && c <= '9')
digit = c - '0';
else if ('a' <= c && c <= 'z')
digit = c - 'a' + 10;
else digit = c - 'A' + 10;
digitPos = lgBase;
}
return digit >> --digitPos & 1;
}
}

View File

@@ -1,48 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
// API class
package org.mozilla.javascript;
/**
* Thrown if errors are detected while attempting to define a host object
* from a Java class.
*/
public class ClassDefinitionException extends Exception {
public ClassDefinitionException(String detail) {
super(detail);
}
}

View File

@@ -1,60 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
* Roger Lawrence
* Andi Vajda
* Kemal Bayram
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
package org.mozilla.javascript;
public interface ClassNameHelper {
public String getTargetPackage();
public void setTargetPackage(String targetPackage);
public void setTargetExtends(Class extendsClass);
public void setTargetImplements(Class[] implementsClasses);
public ClassRepository getClassRepository();
public void setClassRepository(ClassRepository repository);
public String getClassName();
public void setClassName(String initialName);
public void reset();
}

View File

@@ -1,57 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-2000 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Andi Vajda
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
package org.mozilla.javascript;
// API class
import java.io.*;
/**
* This interface is implemented by classes interested in the bytecode
* generated by the rhino compiler for script objects.
*
* @see Context
* @author Andi Vajda
*/
public interface ClassOutput {
/**
* @param className the name of the class for which bytecode is ready.
* @param isTopLevel if true, represents the top-level script being compiled
* @return a stream into which to write bytecode.
* @since 1.5 Release 2
*/
public OutputStream getOutputStream(String className, boolean isTopLevel)
throws IOException;

View File

@@ -1,55 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-2000 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Kemal Bayram
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
package org.mozilla.javascript;
import java.io.*;
/**
* This interface provides a means to store generated class and to
* allow selective class loading.
*
* @see Context
* @author Kemal Bayram
*/
public interface ClassRepository {
/**
* @param className the name of the class.
* @param classBytes a byte array of the generated class.
* @param isTopLevel if true, represents the top-level script being compiled.
* @return true if the class should be loaded, false otherwise.
*/
public boolean storeClass(String className, byte[] classBytes,
boolean isTopLevel) throws IOException;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,53 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-2000 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
// API class
package org.mozilla.javascript;
/**
* Embeddings that wish to
* @see org.mozilla.javascript.Context#addContextListener
*/
public interface ContextListener {
public void contextCreated(Context cx);
public void contextEntered(Context cx);
public void contextExited(Context cx);
public void contextReleased(Context cx);
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,111 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-2000 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
// API class
package org.mozilla.javascript;
import org.mozilla.javascript.debug.*;
public class DebuggableEngineImpl implements DebuggableEngine {
public DebuggableEngineImpl(Context cx) {
this.cx = cx;
}
/**
* Set whether the engine should break when it encounters
* the next line.
* <p>
* The engine will call the attached debugger's handleBreakpointHit
* method on the next line it executes if isLineStep is true.
* May be used from another thread to interrupt execution.
*
* @param isLineStep if true, break next line
*/
public void setBreakNextLine(boolean isLineStep) {
cx.inLineStepMode = isLineStep;
}
/**
* Return the value of the breakNextLine flag.
* @return true if the engine will break on execution of the
* next line.
*/
public boolean getBreakNextLine() {
return cx.inLineStepMode;
}
/**
* Set the associated debugger.
* @param debugger the debugger to be used on callbacks from
* the engine.
*/
public void setDebugger(Debugger debugger) {
cx.debugger = debugger;
}
/**
* Return the current debugger.
* @return the debugger, or null if none is attached.
*/
public Debugger getDebugger() {
return cx.debugger;
}
/**
* Return the number of frames in current execution.
* @return the count of current frames
*/
public int getFrameCount() {
return cx.frameStack == null ? 0 : cx.frameStack.size();
}
/**
* Return a frame from the current execution.
* Frames are numbered starting from 0 for the innermost
* frame.
* @param frameNumber the number of the frame in the range
* [0,frameCount-1]
* @return the relevant DebugFrame, or null if frameNumber is out
* of range or the engine isn't currently saving
* frames
*/
public DebugFrame getFrame(int frameNumber) {
return (DebugFrame) cx.frameStack.elementAt(cx.frameStack.size() - frameNumber - 1);
}
private Context cx;
}

View File

@@ -1,63 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
package org.mozilla.javascript;
/**
* This is the default error reporter for JavaScript.
*
* @author Norris Boyd
*/
class DefaultErrorReporter implements ErrorReporter {
public void warning(String message, String sourceName, int line,
String lineSource, int lineOffset)
{
// do nothing
}
public void error(String message, String sourceName, int line,
String lineSource, int lineOffset)
{
throw new EvaluatorException(message);
}
public EvaluatorException runtimeError(String message, String sourceName,
int line, String lineSource,
int lineOffset)
{
return new EvaluatorException(message);
}
}

View File

@@ -1,250 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is Delegator.java, released Sep 27, 2000.
*
* The Initial Developer of the Original Code is Matthias Radestock.
* <matthias@sorted.org>. Portions created by Matthias Radestock are
* Copyright (C) 2000 Matthias Radestock. All Rights Reserved.
*
* Contributor(s):
* Redfig Ltd (http://www.redfig.com)
* LShift Ltd (http://www.lshift.net)
*
* Alternatively, the contents of this file may be used under the terms
* of the GNU Public License (the "GPL License"), in which case the
* provisions of the GPL License are applicable instead of those
* above. If you wish to allow use of your version of this file only
* under the terms of the GPL License and not to allow others to use
* your version of this file under the MPL, indicate your decision by
* deleting the provisions above and replace them with the notice and
* other provisions required by the GPL License. If you do not delete
* the provisions above, a recipient may use your version of this file
* under either the MPL or the GPL License.
*/
// API class
package org.mozilla.javascript;
/**
* This is a helper class for implementing wrappers around Scriptable
* objects. It implements the Function interface and delegates all
* invocations to a delegee Scriptable object. The normal use of this
* class involves creating a sub-class and overriding one or more of
* the methods.
*
* A useful application is the implementation of interceptors,
* pre/post conditions, debugging.
*
* @see Function
* @see Scriptable
* @author Matthias Radestock
*/
public class Delegator implements Function {
protected Scriptable obj = null;
/**
* Create a Delegator prototype.
*
* This constructor should only be used for creating prototype
* objects of Delegator.
*
* @see org.mozilla.javascript.Delegator#construct
*/
public Delegator() {
}
/**
* Create a new Delegator that forwards requests to a delegee
* Scriptable object.
*
* @param obj the delegee
* @see org.mozilla.javascript.Scriptable
*/
public Delegator(Scriptable obj) {
this.obj = obj;
}
/**
* Retrieve the delegee.
*
* @return the delegee
*/
public Scriptable getDelegee() {
return obj;
}
/**
* Set the delegee.
*
* @param obj the delegee
* @see org.mozilla.javascript.Scriptable
*/
public void setDelegee(Scriptable obj) {
this.obj = obj;
}
/**
* @see org.mozilla.javascript.Scriptable#getClassName
*/
public String getClassName() {
return obj.getClassName();
}
/**
* @see org.mozilla.javascript.Scriptable#get
*/
public Object get(String name, Scriptable start) {
return obj.get(name,start);
}
/**
* @see org.mozilla.javascript.Scriptable#get
*/
public Object get(int index, Scriptable start) {
return obj.get(index,start);
}
/**
* @see org.mozilla.javascript.Scriptable#has
*/
public boolean has(String name, Scriptable start) {
return obj.has(name,start);
}
/**
* @see org.mozilla.javascript.Scriptable#has
*/
public boolean has(int index, Scriptable start) {
return obj.has(index,start);
}
/**
* @see org.mozilla.javascript.Scriptable#put
*/
public void put(String name, Scriptable start, Object value) {
obj.put(name,start,value);
}
/**
* @see org.mozilla.javascript.Scriptable#put
*/
public void put(int index, Scriptable start, Object value) {
obj.put(index,start,value);
}
/**
* @see org.mozilla.javascript.Scriptable#delete
*/
public void delete(String name) {
obj.delete(name);
}
/**
* @see org.mozilla.javascript.Scriptable#delete
*/
public void delete(int index) {
obj.delete(index);
}
/**
* @see org.mozilla.javascript.Scriptable#getPrototype
*/
public Scriptable getPrototype() {
return obj.getPrototype();
}
/**
* @see org.mozilla.javascript.Scriptable#setPrototype
*/
public void setPrototype(Scriptable prototype) {
obj.setPrototype(prototype);
}
/**
* @see org.mozilla.javascript.Scriptable#getParentScope
*/
public Scriptable getParentScope() {
return obj.getParentScope();
}
/**
* @see org.mozilla.javascript.Scriptable#setParentScope
*/
public void setParentScope(Scriptable parent) {
obj.setParentScope(parent);
}
/**
* @see org.mozilla.javascript.Scriptable#getIds
*/
public Object[] getIds() {
return obj.getIds();
}
/**
* Note that this method does not get forwarded to the delegee if
* the <code>hint</code> parameter is null,
* <code>ScriptRuntime.ScriptableClass</code> or
* <code>ScriptRuntime.FunctionClass</code>. Instead the object
* itself is returned.
*
* @param hint the type hint
* @return the default value
*
* @see org.mozilla.javascript.Scriptable#getDefaultValue
*/
public Object getDefaultValue(Class hint) {
return (hint == null ||
hint == ScriptRuntime.ScriptableClass ||
hint == ScriptRuntime.FunctionClass) ?
this : obj.getDefaultValue(hint);
}
/**
* @see org.mozilla.javascript.Scriptable#hasInstance
*/
public boolean hasInstance(Scriptable instance) {
return obj.hasInstance(instance);
}
/**
* @see org.mozilla.javascript.Function#call
*/
public Object call(Context cx, Scriptable scope, Scriptable thisObj,
Object[] args)
throws JavaScriptException {
return ((Function)obj).call(cx,scope,thisObj,args);
}
/**
* Note that if the <code>delegee</code> is <code>null</code>,
* this method creates a new instance of the Delegator itself
* rathert than forwarding the call to the
* <code>delegee</code>. This permits the use of Delegator
* prototypes.
*
* @param cx the current Context for this thread
* @param scope an enclosing scope of the caller except
* when the function is called from a closure.
* @param args the array of arguments
* @return the allocated object
* @exception JavaScriptException if an uncaught exception
* occurred while executing the constructor
*
* @see org.mozilla.javascript.Function#construct
*/
public Scriptable construct(Context cx, Scriptable scope, Object[] args)
throws JavaScriptException {
if (obj == null) {
//this little trick allows us to declare prototype objects for
//Delegators
try {
Delegator n = (Delegator)this.getClass().newInstance();
n.setDelegee((Scriptable)args[0]);
return n;
}
catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
return null;
}
else {
return ((Function)obj).construct(cx,scope,args);
}
}
}

View File

@@ -1,162 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Roger Lawrence
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
// API class
package org.mozilla.javascript;
/**
* The class of exceptions raised by the engine as described in
* ECMA edition 3. See section 15.11.6 in particular.
*/
public class EcmaError extends RuntimeException {
/**
* Create an exception with the specified detail message.
*
* Errors internal to the JavaScript engine will simply throw a
* RuntimeException.
*
* @param nativeError the NativeError object constructed for this error
* @param sourceName the name of the source reponsible for the error
* @param lineNumber the line number of the source
* @param columnNumber the columnNumber of the source (may be zero if
* unknown)
* @param lineSource the source of the line containing the error (may be
* null if unknown)
*/
public EcmaError(NativeError nativeError, String sourceName,
int lineNumber, int columnNumber, String lineSource)
{
super("EcmaError");
errorObject = nativeError;
this.sourceName = sourceName;
this.lineNumber = lineNumber;
this.columnNumber = columnNumber;
this.lineSource = lineSource;
}
/**
* Return a string representation of the error, which currently consists
* of the name of the error together with the message.
*/
public String toString() {
if (sourceName == null && lineNumber <= 0)
return errorObject.toString();
StringBuffer buf = new StringBuffer();
buf.append(errorObject.toString());
buf.append(" (");
if (sourceName != null) {
buf.append(sourceName);
buf.append("; ");
}
if (lineNumber > 0) {
buf.append("line ");
buf.append(lineNumber);
}
buf.append(')');
return buf.toString();
}
/**
* Gets the name of the error.
*
* ECMA edition 3 defines the following
* errors: EvalError, RangeError, ReferenceError,
* SyntaxError, TypeError, and URIError. Additional error names
* may be added in the future.
*
* See ECMA edition 3, 15.11.7.9.
*
* @return the name of the error.
*/
public String getName() {
return errorObject.getName();
}
/**
* Gets the message corresponding to the error.
*
* See ECMA edition 3, 15.11.7.10.
*
* @return an implemenation-defined string describing the error.
*/
public String getMessage() {
return errorObject.getMessage();
}
/**
* Get the name of the source containing the error, or null
* if that information is not available.
*/
public String getSourceName() {
return sourceName;
}
/**
* Returns the line number of the statement causing the error,
* or zero if not available.
*/
public int getLineNumber() {
return lineNumber;
}
/**
* Get the error object corresponding to this exception.
*/
public Scriptable getErrorObject() {
return errorObject;
}
/**
* The column number of the location of the error, or zero if unknown.
*/
public int getColumnNumber() {
return columnNumber;
}
/**
* The source of the line causing the error, or zero if unknown.
*/
public String getLineSource() {
return lineSource;
}
private NativeError errorObject;
private String sourceName;
private int lineNumber;
private int columnNumber;
private String lineSource;
}

View File

@@ -1,103 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
// API class
package org.mozilla.javascript;
/**
* This is interface defines a protocol for the reporting of
* errors during JavaScript translation or execution.
*
* @author Norris Boyd
*/
public interface ErrorReporter {
/**
* Report a warning.
*
* The implementing class may choose to ignore the warning
* if it desires.
*
* @param message a String describing the warning
* @param sourceName a String describing the JavaScript source
* where the warning occured; typically a filename or URL
* @param line the line number associated with the warning
* @param lineSource the text of the line (may be null)
* @param lineOffset the offset into lineSource where problem was detected
*/
void warning(String message, String sourceName, int line,
String lineSource, int lineOffset);
/**
* Report an error.
*
* The implementing class is free to throw an exception if
* it desires.
*
* If execution has not yet begun, the JavaScript engine is
* free to find additional errors rather than terminating
* the translation. It will not execute a script that had
* errors, however.
*
* @param message a String describing the error
* @param sourceName a String describing the JavaScript source
* where the error occured; typically a filename or URL
* @param line the line number associated with the error
* @param lineSource the text of the line (may be null)
* @param lineOffset the offset into lineSource where problem was detected
*/
void error(String message, String sourceName, int line,
String lineSource, int lineOffset);
/**
* Creates an EvaluatorException that may be thrown.
*
* runtimeErrors, unlike errors, will always terminate the
* current script.
*
* @param message a String describing the error
* @param sourceName a String describing the JavaScript source
* where the error occured; typically a filename or URL
* @param line the line number associated with the error
* @param lineSource the text of the line (may be null)
* @param lineOffset the offset into lineSource where problem was detected
* @return an EvaluatorException that will be thrown.
*/
EvaluatorException runtimeError(String message, String sourceName,
int line, String lineSource,
int lineOffset);
}

View File

@@ -1,56 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
package org.mozilla.javascript;
/**
* The class of exceptions thrown by the JavaScript engine.
*/
public class EvaluatorException extends RuntimeException {
/**
* Create an exception with the specified detail message.
*
* Errors internal to the JavaScript engine will simply throw a
* RuntimeException.
*
* @param detail a message with detail about the exception
*/
public EvaluatorException(String detail) {
super(detail);
}
}

View File

@@ -1,86 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
// API class
package org.mozilla.javascript;
/**
* This is interface that all functions in JavaScript must implement.
* The interface provides for calling functions and constructors.
*
* @see org.mozilla.javascript.Scriptable
* @author Norris Boyd
*/
public interface Function extends Scriptable {
/**
* Call the function.
*
* Note that the array of arguments is not guaranteed to have
* length greater than 0.
*
* @param cx the current Context for this thread
* @param scope the scope to execute the function relative to. This is
* set to the value returned by getParentScope() except
* when the function is called from a closure.
* @param thisObj the JavaScript <code>this</code> object
* @param args the array of arguments
* @return the result of the call
* @exception JavaScriptException if an uncaught exception
* occurred while executing the function
*/
public Object call(Context cx, Scriptable scope, Scriptable thisObj,
Object[] args)
throws JavaScriptException;
/**
* Call the function as a constructor.
*
* This method is invoked by the runtime in order to satisfy a use
* of the JavaScript <code>new</code> operator. This method is
* expected to create a new object and return it.
*
* @param cx the current Context for this thread
* @param scope an enclosing scope of the caller except
* when the function is called from a closure.
* @param args the array of arguments
* @return the allocated object
* @exception JavaScriptException if an uncaught exception
* occurred while executing the constructor
*/
public Scriptable construct(Context cx, Scriptable scope, Object[] args)
throws JavaScriptException;
}

View File

@@ -1,103 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
* Roger Lawrence
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
package org.mozilla.javascript;
import java.util.*;
public class FunctionNode extends Node {
public FunctionNode(String name, Node left, Node right) {
super(TokenStream.FUNCTION, left, right, name);
itsVariableTable = new VariableTable();
}
public String getFunctionName() {
return getString();
}
public VariableTable getVariableTable() {
return itsVariableTable;
}
public boolean requiresActivation() {
return itsNeedsActivation;
}
public boolean setRequiresActivation(boolean b) {
return itsNeedsActivation = b;
}
public boolean getCheckThis() {
return itsCheckThis;
}
public void setCheckThis(boolean b) {
itsCheckThis = b;
}
/**
* There are three types of functions that can be defined. The first
* is a function statement. This is a function appearing as a top-level
* statement (i.e., not nested inside some other statement) in either a
* script or a function.
*
* The second is a function expression, which is a function appearing in
* an expression except for the third type, which is...
*
* The third type is a function expression where the expression is the
* top-level expression in an expression statement.
*
* The three types of functions have different treatment and must be
* distinquished.
*/
public static final byte FUNCTION_STATEMENT = 1;
public static final byte FUNCTION_EXPRESSION = 2;
public static final byte FUNCTION_EXPRESSION_STATEMENT = 3;
public byte getFunctionType() {
return itsFunctionType;
}
public void setFunctionType(byte functionType) {
itsFunctionType = functionType;
}
protected VariableTable itsVariableTable;
protected boolean itsNeedsActivation;
protected boolean itsCheckThis;
protected byte itsFunctionType;
}

View File

@@ -1,612 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-2000 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Norris Boyd
* Igor Bukanov
* David C. Navas
* Ted Neward
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
// API class
package org.mozilla.javascript;
import java.util.Vector;
import java.lang.reflect.Constructor;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.InvocationTargetException;
public class FunctionObject extends NativeFunction {
static final long serialVersionUID = -4074285335521944312L;
/**
* Create a JavaScript function object from a Java method.
*
* <p>The <code>member</code> argument must be either a java.lang.reflect.Method
* or a java.lang.reflect.Constructor and must match one of two forms.<p>
*
* The first form is a member with zero or more parameters
* of the following types: Object, String, boolean, Scriptable,
* byte, short, int, float, or double. The Long type is not supported
* because the double representation of a long (which is the
* EMCA-mandated storage type for Numbers) may lose precision.
* If the member is a Method, the return value must be void or one
* of the types allowed for parameters.<p>
*
* The runtime will perform appropriate conversions based
* upon the type of the parameter. A parameter type of
* Object specifies that no conversions are to be done. A parameter
* of type String will use Context.toString to convert arguments.
* Similarly, parameters of type double, boolean, and Scriptable
* will cause Context.toNumber, Context.toBoolean, and
* Context.toObject, respectively, to be called.<p>
*
* If the method is not static, the Java 'this' value will
* correspond to the JavaScript 'this' value. Any attempt
* to call the function with a 'this' value that is not
* of the right Java type will result in an error.<p>
*
* The second form is the variable arguments (or "varargs")
* form. If the FunctionObject will be used as a constructor,
* the member must have the following parameters
* <pre>
* (Context cx, Object[] args, Function ctorObj,
* boolean inNewExpr)</pre>
* and if it is a Method, be static and return an Object result.<p>
*
* Otherwise, if the FunctionObject will <i>not</i> be used to define a
* constructor, the member must be a static Method with parameters
* (Context cx, Scriptable thisObj, Object[] args,
* Function funObj) </pre>
* <pre>
* and an Object result.<p>
*
* When the function varargs form is called as part of a function call,
* the <code>args</code> parameter contains the
* arguments, with <code>thisObj</code>
* set to the JavaScript 'this' value. <code>funObj</code>
* is the function object for the invoked function.<p>
*
* When the constructor varargs form is called or invoked while evaluating
* a <code>new</code> expression, <code>args</code> contains the
* arguments, <code>ctorObj</code> refers to this FunctionObject, and
* <code>inNewExpr</code> is true if and only if a <code>new</code>
* expression caused the call. This supports defining a function that
* has different behavior when called as a constructor than when
* invoked as a normal function call. (For example, the Boolean
* constructor, when called as a function,
* will convert to boolean rather than creating a new object.)<p>
*
* @param name the name of the function
* @param methodOrConstructor a java.lang.reflect.Method or a java.lang.reflect.Constructor
* that defines the object
* @param scope enclosing scope of function
* @see org.mozilla.javascript.Scriptable
*/
public FunctionObject(String name, Member methodOrConstructor,
Scriptable scope)
{
String methodName;
if (methodOrConstructor instanceof Constructor) {
ctor = (Constructor) methodOrConstructor;
isStatic = true; // well, doesn't take a 'this'
types = ctor.getParameterTypes();
methodName = ctor.getName();
} else {
method = (Method) methodOrConstructor;
isStatic = Modifier.isStatic(method.getModifiers());
types = method.getParameterTypes();
methodName = method.getName();
}
this.functionName = name;
int length;
if (types.length == 4 && (types[1].isArray() || types[2].isArray())) {
// Either variable args or an error.
if (types[1].isArray()) {
if (!isStatic ||
types[0] != Context.class ||
types[1].getComponentType() != ScriptRuntime.ObjectClass ||
types[2] != ScriptRuntime.FunctionClass ||
types[3] != Boolean.TYPE)
{
throw Context.reportRuntimeError1(
"msg.varargs.ctor", methodName);
}
parmsLength = VARARGS_CTOR;
} else {
if (!isStatic ||
types[0] != Context.class ||
types[1] != ScriptRuntime.ScriptableClass ||
types[2].getComponentType() != ScriptRuntime.ObjectClass ||
types[3] != ScriptRuntime.FunctionClass)
{
throw Context.reportRuntimeError1(
"msg.varargs.fun", methodName);
}
parmsLength = VARARGS_METHOD;
}
// XXX check return type
length = 1;
} else {
parmsLength = (short) types.length;
for (int i=0; i < parmsLength; i++) {
Class type = types[i];
if (type != ScriptRuntime.ObjectClass &&
type != ScriptRuntime.StringClass &&
type != ScriptRuntime.BooleanClass &&
!ScriptRuntime.NumberClass.isAssignableFrom(type) &&
!Scriptable.class.isAssignableFrom(type) &&
type != Boolean.TYPE &&
type != Byte.TYPE &&
type != Short.TYPE &&
type != Integer.TYPE &&
type != Float.TYPE &&
type != Double.TYPE)
{
// Note that long is not supported.
throw Context.reportRuntimeError1("msg.bad.parms",
methodName);
}
}
length = parmsLength;
}
// Initialize length property
lengthPropertyValue = (short) length;
hasVoidReturn = method != null && method.getReturnType() == Void.TYPE;
this.argCount = (short) length;
setParentScope(scope);
setPrototype(getFunctionPrototype(scope));
Context cx = Context.getCurrentContext();
useDynamicScope = cx != null &&
cx.hasCompileFunctionsWithDynamicScope();
}
/**
* Return the value defined by the method used to construct the object
* (number of parameters of the method, or 1 if the method is a "varargs"
* form), unless setLength has been called with a new value.
* Overrides getLength in BaseFunction.
*
* @see org.mozilla.javascript.FunctionObject#setLength
* @see org.mozilla.javascript.BaseFunction#getLength
*/
public int getLength() {
return lengthPropertyValue;
}
/**
* Set the value of the "length" property.
*
* <p>Changing the value of the "length" property of a FunctionObject only
* affects the value retrieved from get() and does not affect the way
* the method itself is called. <p>
*
* The "length" property will be defined by default as the number
* of parameters of the method used to construct the FunctionObject,
* unless the method is a "varargs" form, in which case the "length"
* property will be defined to 1.
*
* @param length the new length
*/
public void setLength(short length) {
lengthPropertyValue = length;
}
// TODO: Make not public
/**
* Finds methods of a given name in a given class.
*
* <p>Searches <code>clazz</code> for methods with name
* <code>name</code>. Maintains a cache so that multiple
* lookups on the same class are cheap.
*
* @param clazz the class to search
* @param name the name of the methods to find
* @return an array of the found methods, or null if no methods
* by that name were found.
* @see java.lang.Class#getMethods
*/
public static Method[] findMethods(Class clazz, String name) {
return findMethods(getMethodList(clazz), name);
}
static Method[] findMethods(Method[] methods, String name) {
// Usually we're just looking for a single method, so optimize
// for that case.
Vector v = null;
Method first = null;
for (int i=0; i < methods.length; i++) {
if (methods[i] == null)
continue;
if (methods[i].getName().equals(name)) {
if (first == null) {
first = methods[i];
} else {
if (v == null) {
v = new Vector(5);
v.addElement(first);
}
v.addElement(methods[i]);
}
}
}
if (v == null) {
if (first == null)
return null;
Method[] single = { first };
return single;
}
Method[] result = new Method[v.size()];
v.copyInto(result);
return result;
}
static Method[] getMethodList(Class clazz) {
Method[] cached = methodsCache; // get once to avoid synchronization
if (cached != null && cached[0].getDeclaringClass() == clazz)
return cached;
Method[] methods = null;
try {
// getDeclaredMethods may be rejected by the security manager
// but getMethods is more expensive
if (!sawSecurityException)
methods = clazz.getDeclaredMethods();
} catch (SecurityException e) {
// If we get an exception once, give up on getDeclaredMethods
sawSecurityException = true;
}
if (methods == null) {
methods = clazz.getMethods();
}
int count = 0;
for (int i=0; i < methods.length; i++) {
if (sawSecurityException
? methods[i].getDeclaringClass() != clazz
: !Modifier.isPublic(methods[i].getModifiers()))
{
methods[i] = null;
} else {
count++;
}
}
Method[] result = new Method[count];
int j=0;
for (int i=0; i < methods.length; i++) {
if (methods[i] != null)
result[j++] = methods[i];
}
if (result.length > 0 && Context.isCachingEnabled)
methodsCache = result;
return result;
}
/**
* Define this function as a JavaScript constructor.
* <p>
* Sets up the "prototype" and "constructor" properties. Also
* calls setParent and setPrototype with appropriate values.
* Then adds the function object as a property of the given scope, using
* <code>prototype.getClassName()</code>
* as the name of the property.
*
* @param scope the scope in which to define the constructor (typically
* the global object)
* @param prototype the prototype object
* @see org.mozilla.javascript.Scriptable#setParentScope
* @see org.mozilla.javascript.Scriptable#setPrototype
* @see org.mozilla.javascript.Scriptable#getClassName
*/
public void addAsConstructor(Scriptable scope, Scriptable prototype) {
setParentScope(scope);
setPrototype(getFunctionPrototype(scope));
setImmunePrototypeProperty(prototype);
prototype.setParentScope(this);
final int attr = ScriptableObject.DONTENUM |
ScriptableObject.PERMANENT |
ScriptableObject.READONLY;
defineProperty(prototype, "constructor", this, attr);
String name = prototype.getClassName();
defineProperty(scope, name, this, ScriptableObject.DONTENUM);
setParentScope(scope);
}
static public Object convertArg(Scriptable scope,
Object arg, Class desired)
{
if (desired == ScriptRuntime.StringClass)
return ScriptRuntime.toString(arg);
if (desired == ScriptRuntime.IntegerClass ||
desired == Integer.TYPE)
{
return new Integer(ScriptRuntime.toInt32(arg));
}
if (desired == ScriptRuntime.BooleanClass ||
desired == Boolean.TYPE)
{
return ScriptRuntime.toBoolean(arg) ? Boolean.TRUE
: Boolean.FALSE;
}
if (desired == ScriptRuntime.DoubleClass ||
desired == Double.TYPE)
{
return new Double(ScriptRuntime.toNumber(arg));
}
if (desired == ScriptRuntime.ScriptableClass)
return ScriptRuntime.toObject(scope, arg);
if (desired == ScriptRuntime.ObjectClass)
return arg;
// Note that the long type is not supported; see the javadoc for
// the constructor for this class
throw Context.reportRuntimeError1
("msg.cant.convert", desired.getName());
}
/**
* Performs conversions on argument types if needed and
* invokes the underlying Java method or constructor.
* <p>
* Implements Function.call.
*
* @see org.mozilla.javascript.Function#call
* @exception JavaScriptException if the underlying Java method or
* constructor threw an exception
*/
public Object call(Context cx, Scriptable scope, Scriptable thisObj,
Object[] args)
throws JavaScriptException
{
if (parmsLength < 0) {
return callVarargs(cx, thisObj, args, false);
}
if (!isStatic) {
// OPT: cache "clazz"?
Class clazz = method != null ? method.getDeclaringClass()
: ctor.getDeclaringClass();
while (!clazz.isInstance(thisObj)) {
thisObj = thisObj.getPrototype();
if (thisObj == null || !useDynamicScope) {
// Couldn't find an object to call this on.
throw NativeGlobal.typeError1
("msg.incompat.call", functionName, scope);
}
}
}
Object[] invokeArgs;
int i;
if (parmsLength == args.length) {
invokeArgs = args;
// avoid copy loop if no conversions needed
i = (types == null) ? parmsLength : 0;
} else {
invokeArgs = new Object[parmsLength];
i = 0;
}
for (; i < parmsLength; i++) {
Object arg = (i < args.length)
? args[i]
: Undefined.instance;
if (types != null) {
arg = convertArg(this, arg, types[i]);
}
invokeArgs[i] = arg;
}
try {
Object result = method == null ? ctor.newInstance(invokeArgs)
: doInvoke(thisObj, invokeArgs);
return hasVoidReturn ? Undefined.instance : result;
}
catch (InvocationTargetException e) {
throw JavaScriptException.wrapException(scope, e);
}
catch (IllegalAccessException e) {
throw WrappedException.wrapException(e);
}
catch (InstantiationException e) {
throw WrappedException.wrapException(e);
}
}
/**
* Performs conversions on argument types if needed and
* invokes the underlying Java method or constructor
* to create a new Scriptable object.
* <p>
* Implements Function.construct.
*
* @param cx the current Context for this thread
* @param scope the scope to execute the function relative to. This
* set to the value returned by getParentScope() except
* when the function is called from a closure.
* @param args arguments to the constructor
* @see org.mozilla.javascript.Function#construct
* @exception JavaScriptException if the underlying Java method or constructor
* threw an exception
*/
public Scriptable construct(Context cx, Scriptable scope, Object[] args)
throws JavaScriptException
{
if (method == null || parmsLength == VARARGS_CTOR) {
Scriptable result;
if (method != null) {
result = (Scriptable) callVarargs(cx, null, args, true);
} else {
result = (Scriptable) call(cx, scope, null, args);
}
if (result.getPrototype() == null)
result.setPrototype(getClassPrototype());
if (result.getParentScope() == null) {
Scriptable parent = getParentScope();
if (result != parent)
result.setParentScope(parent);
}
return result;
} else if (method != null && !isStatic) {
Scriptable result;
try {
result = (Scriptable) method.getDeclaringClass().newInstance();
} catch (IllegalAccessException e) {
throw WrappedException.wrapException(e);
} catch (InstantiationException e) {
throw WrappedException.wrapException(e);
}
result.setPrototype(getClassPrototype());
result.setParentScope(getParentScope());
Object val = call(cx, scope, result, args);
if (val != null && val != Undefined.instance &&
val instanceof Scriptable)
{
return (Scriptable) val;
}
return result;
}
return super.construct(cx, scope, args);
}
private final Object doInvoke(Object thisObj, Object[] args)
throws IllegalAccessException, InvocationTargetException
{
Invoker master = invokerMaster;
if (master != null) {
if (invoker == null) {
invoker = master.createInvoker(method, types);
}
try {
return invoker.invoke(thisObj, args);
} catch (Exception e) {
throw new InvocationTargetException(e);
}
}
return method.invoke(thisObj, args);
}
private Object callVarargs(Context cx, Scriptable thisObj, Object[] args,
boolean inNewExpr)
throws JavaScriptException
{
try {
if (parmsLength == VARARGS_METHOD) {
Object[] invokeArgs = { cx, thisObj, args, this };
Object result = doInvoke(null, invokeArgs);
return hasVoidReturn ? Undefined.instance : result;
} else {
Boolean b = inNewExpr ? Boolean.TRUE : Boolean.FALSE;
Object[] invokeArgs = { cx, args, this, b };
return (method == null)
? ctor.newInstance(invokeArgs)
: doInvoke(null, invokeArgs);
}
}
catch (InvocationTargetException e) {
Throwable target = e.getTargetException();
if (target instanceof EvaluatorException)
throw (EvaluatorException) target;
if (target instanceof EcmaError)
throw (EcmaError) target;
Scriptable scope = thisObj == null ? this : thisObj;
throw JavaScriptException.wrapException(scope, target);
}
catch (IllegalAccessException e) {
throw WrappedException.wrapException(e);
}
catch (InstantiationException e) {
throw WrappedException.wrapException(e);
}
}
boolean isVarArgsMethod() {
return parmsLength == VARARGS_METHOD;
}
boolean isVarArgsConstructor() {
return parmsLength == VARARGS_CTOR;
}
static void setCachingEnabled(boolean enabled) {
if (!enabled) {
methodsCache = null;
invokerMaster = null;
} else if (invokerMaster == null) {
invokerMaster = newInvokerMaster();
}
}
/** Get default master implementation or null if not available */
private static Invoker newInvokerMaster() {
try {
Class cl = ScriptRuntime.loadClassName(INVOKER_MASTER_CLASS);
return (Invoker)cl.newInstance();
}
catch (ClassNotFoundException ex) {}
catch (IllegalAccessException ex) {}
catch (InstantiationException ex) {}
catch (SecurityException ex) {}
return null;
}
private static final String
INVOKER_MASTER_CLASS = "org.mozilla.javascript.optimizer.InvokerImpl";
static Invoker invokerMaster = newInvokerMaster();
private static final short VARARGS_METHOD = -1;
private static final short VARARGS_CTOR = -2;
private static boolean sawSecurityException;
static Method[] methodsCache;
Method method;
Constructor ctor;
private Class[] types;
Invoker invoker;
private short parmsLength;
private short lengthPropertyValue;
private boolean hasVoidReturn;
private boolean isStatic;
private boolean useDynamicScope;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,164 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Igor Bukanov
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
// API class
package org.mozilla.javascript;
public class IdFunction extends BaseFunction
{
public static final int FUNCTION_ONLY = 0;
public static final int CONSTRUCTOR_ONLY = 1;
public static final int FUNCTION_AND_CONSTRUCTOR = 2;
public IdFunction(IdFunctionMaster master, String name, int id) {
this.functionName = name;
this.master = master;
this.methodId = id;
}
public final int functionType() {
return functionType;
}
public void setFunctionType(int type) {
functionType = type;
}
public Scriptable getPrototype() {
// Lazy initialization of prototype: for native functions this
// may not be called at all
Scriptable proto = super.getPrototype();
if (proto == null) {
proto = getFunctionPrototype(getParentScope());
setPrototype(proto);
}
return proto;
}
public Object call(Context cx, Scriptable scope, Scriptable thisObj,
Object[] args)
throws JavaScriptException
{
if (functionType != CONSTRUCTOR_ONLY) {
return master.execMethod(methodId, this, cx, scope, thisObj, args);
}
else {
return Undefined.instance;
}
}
public Scriptable construct(Context cx, Scriptable scope, Object[] args)
throws JavaScriptException
{
if (functionType != FUNCTION_ONLY) {
// It is program error not to return Scriptable from constructor
Scriptable result = (Scriptable)master.execMethod(methodId, this,
cx, scope,
null, args);
postConstruction(result);
return result;
}
else {
return Undefined.instance;
}
}
public String decompile(Context cx, int indent, boolean justbody) {
StringBuffer sb = new StringBuffer();
if (!justbody) {
sb.append("function ");
sb.append(getFunctionName());
sb.append("() { ");
}
sb.append("[native code for ");
if (master instanceof Scriptable) {
Scriptable smaster = (Scriptable)master;
sb.append(smaster.getClassName());
sb.append('.');
}
sb.append(getFunctionName());
sb.append(", arity=");
sb.append(getArity());
sb.append(justbody ? "]\n" : "] }\n");
return sb.toString();
}
public int getArity() {
int arity = master.methodArity(methodId);
if (arity < 0) {
throw onBadMethodId(master, methodId);
}
return arity;
}
public int getLength() { return getArity(); }
/** Prepare to be used as constructor .
** @param scope constructor scope
** @param prototype DontEnum, DontDelete, ReadOnly prototype property
** of the constructor */
public void initAsConstructor(Scriptable scope, Scriptable prototype) {
setFunctionType(FUNCTION_AND_CONSTRUCTOR);
setParentScope(scope);
setImmunePrototypeProperty(prototype);
}
static RuntimeException onBadMethodId(IdFunctionMaster master, int id) {
// It is program error to call id-like methods for unknown or
// non-function id
return new RuntimeException("BAD FUNCTION ID="+id+" MASTER="+master);
}
// Copied from NativeFunction.construct
private void postConstruction(Scriptable newObj) {
if (newObj.getPrototype() == null) {
newObj.setPrototype(getClassPrototype());
}
if (newObj.getParentScope() == null) {
Scriptable parent = getParentScope();
if (newObj != parent) {
newObj.setParentScope(parent);
}
}
}
protected IdFunctionMaster master;
protected int methodId;
protected int functionType = FUNCTION_ONLY;
}

View File

@@ -1,54 +0,0 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1997-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Igor Bukanov
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU Public License (the "GPL"), in which case the
* provisions of the GPL are applicable instead of those above.
* If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use your
* version of this file under the NPL, indicate your decision by
* deleting the provisions above and replace them with the notice
* and other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this
* file under either the NPL or the GPL.
*/
package org.mozilla.javascript;
/** Master for id-based functions that knows their properties and how to
** execute them
*/
public interface IdFunctionMaster {
/** 'thisObj' will be null if invoked as constructor, in which case
** instance of Scriptable should be returned */
public Object execMethod(int methodId, IdFunction function,
Context cx, Scriptable scope,
Scriptable thisObj, Object[] args)
throws JavaScriptException;
/** Get arity or defined argument count for method with given id.
** Should return -1 if methodId is not known or can not be used
** with execMethod call */
public int methodArity(int methodId);
}

Some files were not shown because too many files have changed in this diff Show More