Compare commits
2 Commits
tags/head
...
less_stati
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
96154ba631 | ||
|
|
771cbc6bfd |
@@ -1,851 +0,0 @@
|
||||
The majority of Rhino is MPL 1.1 / GPL 2.0 dual licensed:
|
||||
|
||||
The Mozilla Public License (http://www.mozilla.org/MPL/MPL-1.1.txt):
|
||||
============================================================================
|
||||
MOZILLA PUBLIC LICENSE
|
||||
Version 1.1
|
||||
|
||||
---------------
|
||||
|
||||
1. Definitions.
|
||||
|
||||
1.0.1. "Commercial Use" means distribution or otherwise making the
|
||||
Covered Code available to a third party.
|
||||
|
||||
1.1. "Contributor" means each entity that creates or contributes to
|
||||
the creation of Modifications.
|
||||
|
||||
1.2. "Contributor Version" means the combination of the Original
|
||||
Code, prior Modifications used by a Contributor, and the Modifications
|
||||
made by that particular Contributor.
|
||||
|
||||
1.3. "Covered Code" means the Original Code or Modifications or the
|
||||
combination of the Original Code and Modifications, in each case
|
||||
including portions thereof.
|
||||
|
||||
1.4. "Electronic Distribution Mechanism" means a mechanism generally
|
||||
accepted in the software development community for the electronic
|
||||
transfer of data.
|
||||
|
||||
1.5. "Executable" means Covered Code in any form other than Source
|
||||
Code.
|
||||
|
||||
1.6. "Initial Developer" means the individual or entity identified
|
||||
as the Initial Developer in the Source Code notice required by Exhibit
|
||||
A.
|
||||
|
||||
1.7. "Larger Work" means a work which combines Covered Code or
|
||||
portions thereof with code not governed by the terms of this License.
|
||||
|
||||
1.8. "License" means this document.
|
||||
|
||||
1.8.1. "Licensable" means having the right to grant, to the maximum
|
||||
extent possible, whether at the time of the initial grant or
|
||||
subsequently acquired, any and all of the rights conveyed herein.
|
||||
|
||||
1.9. "Modifications" means any addition to or deletion from the
|
||||
substance or structure of either the Original Code or any previous
|
||||
Modifications. When Covered Code is released as a series of files, a
|
||||
Modification is:
|
||||
A. Any addition to or deletion from the contents of a file
|
||||
containing Original Code or previous Modifications.
|
||||
|
||||
B. Any new file that contains any part of the Original Code or
|
||||
previous Modifications.
|
||||
|
||||
1.10. "Original Code" means Source Code of computer software code
|
||||
which is described in the Source Code notice required by Exhibit A as
|
||||
Original Code, and which, at the time of its release under this
|
||||
License is not already Covered Code governed by this License.
|
||||
|
||||
1.10.1. "Patent Claims" means any patent claim(s), now owned or
|
||||
hereafter acquired, including without limitation, method, process,
|
||||
and apparatus claims, in any patent Licensable by grantor.
|
||||
|
||||
1.11. "Source Code" means the preferred form of the Covered Code for
|
||||
making modifications to it, including all modules it contains, plus
|
||||
any associated interface definition files, scripts used to control
|
||||
compilation and installation of an Executable, or source code
|
||||
differential comparisons against either the Original Code or another
|
||||
well known, available Covered Code of the Contributor's choice. The
|
||||
Source Code can be in a compressed or archival form, provided the
|
||||
appropriate decompression or de-archiving software is widely available
|
||||
for no charge.
|
||||
|
||||
1.12. "You" (or "Your") means an individual or a legal entity
|
||||
exercising rights under, and complying with all of the terms of, this
|
||||
License or a future version of this License issued under Section 6.1.
|
||||
For legal entities, "You" includes any entity which controls, is
|
||||
controlled by, or is under common control with You. For purposes of
|
||||
this definition, "control" means (a) the power, direct or indirect,
|
||||
to cause the direction or management of such entity, whether by
|
||||
contract or otherwise, or (b) ownership of more than fifty percent
|
||||
(50%) of the outstanding shares or beneficial ownership of such
|
||||
entity.
|
||||
|
||||
2. Source Code License.
|
||||
|
||||
2.1. The Initial Developer Grant.
|
||||
The Initial Developer hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license, subject to third party intellectual property
|
||||
claims:
|
||||
(a) under intellectual property rights (other than patent or
|
||||
trademark) Licensable by Initial Developer to use, reproduce,
|
||||
modify, display, perform, sublicense and distribute the Original
|
||||
Code (or portions thereof) with or without Modifications, and/or
|
||||
as part of a Larger Work; and
|
||||
|
||||
(b) under Patents Claims infringed by the making, using or
|
||||
selling of Original Code, to make, have made, use, practice,
|
||||
sell, and offer for sale, and/or otherwise dispose of the
|
||||
Original Code (or portions thereof).
|
||||
|
||||
(c) the licenses granted in this Section 2.1(a) and (b) are
|
||||
effective on the date Initial Developer first distributes
|
||||
Original Code under the terms of this License.
|
||||
|
||||
(d) Notwithstanding Section 2.1(b) above, no patent license is
|
||||
granted: 1) for code that You delete from the Original Code; 2)
|
||||
separate from the Original Code; or 3) for infringements caused
|
||||
by: i) the modification of the Original Code or ii) the
|
||||
combination of the Original Code with other software or devices.
|
||||
|
||||
2.2. Contributor Grant.
|
||||
Subject to third party intellectual property claims, each Contributor
|
||||
hereby grants You a world-wide, royalty-free, non-exclusive license
|
||||
|
||||
(a) under intellectual property rights (other than patent or
|
||||
trademark) Licensable by Contributor, to use, reproduce, modify,
|
||||
display, perform, sublicense and distribute the Modifications
|
||||
created by such Contributor (or portions thereof) either on an
|
||||
unmodified basis, with other Modifications, as Covered Code
|
||||
and/or as part of a Larger Work; and
|
||||
|
||||
(b) under Patent Claims infringed by the making, using, or
|
||||
selling of Modifications made by that Contributor either alone
|
||||
and/or in combination with its Contributor Version (or portions
|
||||
of such combination), to make, use, sell, offer for sale, have
|
||||
made, and/or otherwise dispose of: 1) Modifications made by that
|
||||
Contributor (or portions thereof); and 2) the combination of
|
||||
Modifications made by that Contributor with its Contributor
|
||||
Version (or portions of such combination).
|
||||
|
||||
(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
|
||||
effective on the date Contributor first makes Commercial Use of
|
||||
the Covered Code.
|
||||
|
||||
(d) Notwithstanding Section 2.2(b) above, no patent license is
|
||||
granted: 1) for any code that Contributor has deleted from the
|
||||
Contributor Version; 2) separate from the Contributor Version;
|
||||
3) for infringements caused by: i) third party modifications of
|
||||
Contributor Version or ii) the combination of Modifications made
|
||||
by that Contributor with other software (except as part of the
|
||||
Contributor Version) or other devices; or 4) under Patent Claims
|
||||
infringed by Covered Code in the absence of Modifications made by
|
||||
that Contributor.
|
||||
|
||||
3. Distribution Obligations.
|
||||
|
||||
3.1. Application of License.
|
||||
The Modifications which You create or to which You contribute are
|
||||
governed by the terms of this License, including without limitation
|
||||
Section 2.2. The Source Code version of Covered Code may be
|
||||
distributed only under the terms of this License or a future version
|
||||
of this License released under Section 6.1, and You must include a
|
||||
copy of this License with every copy of the Source Code You
|
||||
distribute. You may not offer or impose any terms on any Source Code
|
||||
version that alters or restricts the applicable version of this
|
||||
License or the recipients' rights hereunder. However, You may include
|
||||
an additional document offering the additional rights described in
|
||||
Section 3.5.
|
||||
|
||||
3.2. Availability of Source Code.
|
||||
Any Modification which You create or to which You contribute must be
|
||||
made available in Source Code form under the terms of this License
|
||||
either on the same media as an Executable version or via an accepted
|
||||
Electronic Distribution Mechanism to anyone to whom you made an
|
||||
Executable version available; and if made available via Electronic
|
||||
Distribution Mechanism, must remain available for at least twelve (12)
|
||||
months after the date it initially became available, or at least six
|
||||
(6) months after a subsequent version of that particular Modification
|
||||
has been made available to such recipients. You are responsible for
|
||||
ensuring that the Source Code version remains available even if the
|
||||
Electronic Distribution Mechanism is maintained by a third party.
|
||||
|
||||
3.3. Description of Modifications.
|
||||
You must cause all Covered Code to which You contribute to contain a
|
||||
file documenting the changes You made to create that Covered Code and
|
||||
the date of any change. You must include a prominent statement that
|
||||
the Modification is derived, directly or indirectly, from Original
|
||||
Code provided by the Initial Developer and including the name of the
|
||||
Initial Developer in (a) the Source Code, and (b) in any notice in an
|
||||
Executable version or related documentation in which You describe the
|
||||
origin or ownership of the Covered Code.
|
||||
|
||||
3.4. Intellectual Property Matters
|
||||
(a) Third Party Claims.
|
||||
If Contributor has knowledge that a license under a third party's
|
||||
intellectual property rights is required to exercise the rights
|
||||
granted by such Contributor under Sections 2.1 or 2.2,
|
||||
Contributor must include a text file with the Source Code
|
||||
distribution titled "LEGAL" which describes the claim and the
|
||||
party making the claim in sufficient detail that a recipient will
|
||||
know whom to contact. If Contributor obtains such knowledge after
|
||||
the Modification is made available as described in Section 3.2,
|
||||
Contributor shall promptly modify the LEGAL file in all copies
|
||||
Contributor makes available thereafter and shall take other steps
|
||||
(such as notifying appropriate mailing lists or newsgroups)
|
||||
reasonably calculated to inform those who received the Covered
|
||||
Code that new knowledge has been obtained.
|
||||
|
||||
(b) Contributor APIs.
|
||||
If Contributor's Modifications include an application programming
|
||||
interface and Contributor has knowledge of patent licenses which
|
||||
are reasonably necessary to implement that API, Contributor must
|
||||
also include this information in the LEGAL file.
|
||||
|
||||
(c) Representations.
|
||||
Contributor represents that, except as disclosed pursuant to
|
||||
Section 3.4(a) above, Contributor believes that Contributor's
|
||||
Modifications are Contributor's original creation(s) and/or
|
||||
Contributor has sufficient rights to grant the rights conveyed by
|
||||
this License.
|
||||
|
||||
3.5. Required Notices.
|
||||
You must duplicate the notice in Exhibit A in each file of the Source
|
||||
Code. If it is not possible to put such notice in a particular Source
|
||||
Code file due to its structure, then You must include such notice in a
|
||||
location (such as a relevant directory) where a user would be likely
|
||||
to look for such a notice. If You created one or more Modification(s)
|
||||
You may add your name as a Contributor to the notice described in
|
||||
Exhibit A. You must also duplicate this License in any documentation
|
||||
for the Source Code where You describe recipients' rights or ownership
|
||||
rights relating to Covered Code. You may choose to offer, and to
|
||||
charge a fee for, warranty, support, indemnity or liability
|
||||
obligations to one or more recipients of Covered Code. However, You
|
||||
may do so only on Your own behalf, and not on behalf of the Initial
|
||||
Developer or any Contributor. You must make it absolutely clear than
|
||||
any such warranty, support, indemnity or liability obligation is
|
||||
offered by You alone, and You hereby agree to indemnify the Initial
|
||||
Developer and every Contributor for any liability incurred by the
|
||||
Initial Developer or such Contributor as a result of warranty,
|
||||
support, indemnity or liability terms You offer.
|
||||
|
||||
3.6. Distribution of Executable Versions.
|
||||
You may distribute Covered Code in Executable form only if the
|
||||
requirements of Section 3.1-3.5 have been met for that Covered Code,
|
||||
and if You include a notice stating that the Source Code version of
|
||||
the Covered Code is available under the terms of this License,
|
||||
including a description of how and where You have fulfilled the
|
||||
obligations of Section 3.2. The notice must be conspicuously included
|
||||
in any notice in an Executable version, related documentation or
|
||||
collateral in which You describe recipients' rights relating to the
|
||||
Covered Code. You may distribute the Executable version of Covered
|
||||
Code or ownership rights under a license of Your choice, which may
|
||||
contain terms different from this License, provided that You are in
|
||||
compliance with the terms of this License and that the license for the
|
||||
Executable version does not attempt to limit or alter the recipient's
|
||||
rights in the Source Code version from the rights set forth in this
|
||||
License. If You distribute the Executable version under a different
|
||||
license You must make it absolutely clear that any terms which differ
|
||||
from this License are offered by You alone, not by the Initial
|
||||
Developer or any Contributor. You hereby agree to indemnify the
|
||||
Initial Developer and every Contributor for any liability incurred by
|
||||
the Initial Developer or such Contributor as a result of any such
|
||||
terms You offer.
|
||||
|
||||
3.7. Larger Works.
|
||||
You may create a Larger Work by combining Covered Code with other code
|
||||
not governed by the terms of this License and distribute the Larger
|
||||
Work as a single product. In such a case, You must make sure the
|
||||
requirements of this License are fulfilled for the Covered Code.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation.
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Covered Code due to
|
||||
statute, judicial order, or regulation then You must: (a) comply with
|
||||
the terms of this License to the maximum extent possible; and (b)
|
||||
describe the limitations and the code they affect. Such description
|
||||
must be included in the LEGAL file described in Section 3.4 and must
|
||||
be included with all distributions of the Source Code. Except to the
|
||||
extent prohibited by statute or regulation, such description must be
|
||||
sufficiently detailed for a recipient of ordinary skill to be able to
|
||||
understand it.
|
||||
|
||||
5. Application of this License.
|
||||
|
||||
This License applies to code to which the Initial Developer has
|
||||
attached the notice in Exhibit A and to related Covered Code.
|
||||
|
||||
6. Versions of the License.
|
||||
|
||||
6.1. New Versions.
|
||||
Netscape Communications Corporation ("Netscape") may publish revised
|
||||
and/or new versions of the License from time to time. Each version
|
||||
will be given a distinguishing version number.
|
||||
|
||||
6.2. Effect of New Versions.
|
||||
Once Covered Code has been published under a particular version of the
|
||||
License, You may always continue to use it under the terms of that
|
||||
version. You may also choose to use such Covered Code under the terms
|
||||
of any subsequent version of the License published by Netscape. No one
|
||||
other than Netscape has the right to modify the terms applicable to
|
||||
Covered Code created under this License.
|
||||
|
||||
6.3. Derivative Works.
|
||||
If You create or use a modified version of this License (which you may
|
||||
only do in order to apply it to code which is not already Covered Code
|
||||
governed by this License), You must (a) rename Your license so that
|
||||
the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
|
||||
"MPL", "NPL" or any confusingly similar phrase do not appear in your
|
||||
license (except to note that your license differs from this License)
|
||||
and (b) otherwise make it clear that Your version of the license
|
||||
contains terms which differ from the Mozilla Public License and
|
||||
Netscape Public License. (Filling in the name of the Initial
|
||||
Developer, Original Code or Contributor in the notice described in
|
||||
Exhibit A shall not of themselves be deemed to be modifications of
|
||||
this License.)
|
||||
|
||||
7. DISCLAIMER OF WARRANTY.
|
||||
|
||||
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
|
||||
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
|
||||
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
|
||||
IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
|
||||
YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
|
||||
COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
|
||||
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
|
||||
ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
|
||||
|
||||
8. TERMINATION.
|
||||
|
||||
8.1. This License and the rights granted hereunder will terminate
|
||||
automatically if You fail to comply with terms herein and fail to cure
|
||||
such breach within 30 days of becoming aware of the breach. All
|
||||
sublicenses to the Covered Code which are properly granted shall
|
||||
survive any termination of this License. Provisions which, by their
|
||||
nature, must remain in effect beyond the termination of this License
|
||||
shall survive.
|
||||
|
||||
8.2. If You initiate litigation by asserting a patent infringement
|
||||
claim (excluding declatory judgment actions) against Initial Developer
|
||||
or a Contributor (the Initial Developer or Contributor against whom
|
||||
You file such action is referred to as "Participant") alleging that:
|
||||
|
||||
(a) such Participant's Contributor Version directly or indirectly
|
||||
infringes any patent, then any and all rights granted by such
|
||||
Participant to You under Sections 2.1 and/or 2.2 of this License
|
||||
shall, upon 60 days notice from Participant terminate prospectively,
|
||||
unless if within 60 days after receipt of notice You either: (i)
|
||||
agree in writing to pay Participant a mutually agreeable reasonable
|
||||
royalty for Your past and future use of Modifications made by such
|
||||
Participant, or (ii) withdraw Your litigation claim with respect to
|
||||
the Contributor Version against such Participant. If within 60 days
|
||||
of notice, a reasonable royalty and payment arrangement are not
|
||||
mutually agreed upon in writing by the parties or the litigation claim
|
||||
is not withdrawn, the rights granted by Participant to You under
|
||||
Sections 2.1 and/or 2.2 automatically terminate at the expiration of
|
||||
the 60 day notice period specified above.
|
||||
|
||||
(b) any software, hardware, or device, other than such Participant's
|
||||
Contributor Version, directly or indirectly infringes any patent, then
|
||||
any rights granted to You by such Participant under Sections 2.1(b)
|
||||
and 2.2(b) are revoked effective as of the date You first made, used,
|
||||
sold, distributed, or had made, Modifications made by that
|
||||
Participant.
|
||||
|
||||
8.3. If You assert a patent infringement claim against Participant
|
||||
alleging that such Participant's Contributor Version directly or
|
||||
indirectly infringes any patent where such claim is resolved (such as
|
||||
by license or settlement) prior to the initiation of patent
|
||||
infringement litigation, then the reasonable value of the licenses
|
||||
granted by such Participant under Sections 2.1 or 2.2 shall be taken
|
||||
into account in determining the amount or value of any payment or
|
||||
license.
|
||||
|
||||
8.4. In the event of termination under Sections 8.1 or 8.2 above,
|
||||
all end user license agreements (excluding distributors and resellers)
|
||||
which have been validly granted by You or any distributor hereunder
|
||||
prior to termination shall survive termination.
|
||||
|
||||
9. LIMITATION OF LIABILITY.
|
||||
|
||||
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
|
||||
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
|
||||
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
|
||||
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
|
||||
ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
|
||||
CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
|
||||
WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
|
||||
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
|
||||
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
|
||||
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
|
||||
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
|
||||
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
|
||||
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
|
||||
THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
10. U.S. GOVERNMENT END USERS.
|
||||
|
||||
The Covered Code is a "commercial item," as that term is defined in
|
||||
48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
|
||||
software" and "commercial computer software documentation," as such
|
||||
terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
|
||||
C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
|
||||
all U.S. Government End Users acquire Covered Code with only those
|
||||
rights set forth herein.
|
||||
|
||||
11. MISCELLANEOUS.
|
||||
|
||||
This License represents the complete agreement concerning subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. This License shall be governed by
|
||||
California law provisions (except to the extent applicable law, if
|
||||
any, provides otherwise), excluding its conflict-of-law provisions.
|
||||
With respect to disputes in which at least one party is a citizen of,
|
||||
or an entity chartered or registered to do business in the United
|
||||
States of America, any litigation relating to this License shall be
|
||||
subject to the jurisdiction of the Federal Courts of the Northern
|
||||
District of California, with venue lying in Santa Clara County,
|
||||
California, with the losing party responsible for costs, including
|
||||
without limitation, court costs and reasonable attorneys' fees and
|
||||
expenses. The application of the United Nations Convention on
|
||||
Contracts for the International Sale of Goods is expressly excluded.
|
||||
Any law or regulation which provides that the language of a contract
|
||||
shall be construed against the drafter shall not apply to this
|
||||
License.
|
||||
|
||||
12. RESPONSIBILITY FOR CLAIMS.
|
||||
|
||||
As between Initial Developer and the Contributors, each party is
|
||||
responsible for claims and damages arising, directly or indirectly,
|
||||
out of its utilization of rights under this License and You agree to
|
||||
work with Initial Developer and Contributors to distribute such
|
||||
responsibility on an equitable basis. Nothing herein is intended or
|
||||
shall be deemed to constitute any admission of liability.
|
||||
|
||||
13. MULTIPLE-LICENSED CODE.
|
||||
|
||||
Initial Developer may designate portions of the Covered Code as
|
||||
"Multiple-Licensed". "Multiple-Licensed" means that the Initial
|
||||
Developer permits you to utilize portions of the Covered Code under
|
||||
Your choice of the NPL or the alternative licenses, if any, specified
|
||||
by the Initial Developer in the file described in Exhibit A.
|
||||
|
||||
EXHIBIT A -Mozilla Public License.
|
||||
|
||||
``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 ______________________________________.
|
||||
|
||||
The Initial Developer of the Original Code is ________________________.
|
||||
Portions created by ______________________ are Copyright (C) ______
|
||||
_______________________. All Rights Reserved.
|
||||
|
||||
Contributor(s): ______________________________________.
|
||||
|
||||
Alternatively, the contents of this file may be used under the terms
|
||||
of the _____ license (the "[___] License"), in which case the
|
||||
provisions of [______] 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 [____] 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 [___] License. If you do not delete
|
||||
the provisions above, a recipient may use your version of this file
|
||||
under either the MPL or the [___] License."
|
||||
|
||||
[NOTE: The text of this Exhibit A may differ slightly from the text of
|
||||
the notices in the Source Code files of the Original Code. You should
|
||||
use the text of this Exhibit A rather than the text found in the
|
||||
Original Code Source Code for Your Modifications.]
|
||||
============================================================================
|
||||
|
||||
============================================================================
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
============================================================================
|
||||
|
||||
Additionally, some files (currently the contents of
|
||||
toolsrc/org/mozilla/javascript/tools/debugger/treetable/) are available
|
||||
only under the following license:
|
||||
|
||||
============================================================================
|
||||
* Copyright 1997, 1998 Sun Microsystems, Inc. All Rights Reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Sun Microsystems nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
============================================================================
|
||||
222
mozilla/js/rhino/Makefile
Normal file
222
mozilla/js/rhino/Makefile
Normal file
@@ -0,0 +1,222 @@
|
||||
#! 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 :
|
||||
@@ -1,39 +1,37 @@
|
||||
<html>
|
||||
<!-- ***** BEGIN LICENSE BLOCK *****
|
||||
- Version: MPL 1.1/GPL 2.0
|
||||
-
|
||||
- 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 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 the Initial Developer are Copyright (C) 1998-1999
|
||||
- the Initial Developer. All Rights Reserved.
|
||||
-
|
||||
-
|
||||
- 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 General Public License Version 2 or later (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
|
||||
- MPL, indicate your decision by deleting the provisions above and replacing
|
||||
- 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 MPL or the GPL.
|
||||
-
|
||||
- ***** END LICENSE BLOCK ***** -->
|
||||
- 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>
|
||||
@@ -42,7 +40,7 @@ Rhino: JavaScript in Java<p>
|
||||
</h1>
|
||||
<span CLASS=LXRLONGDESC>
|
||||
Rhino is an implementation of JavaScript in Java. Documentation can be found
|
||||
<a href="http://www.mozilla.org/rhino/index.html">here</a>.
|
||||
<a href="http://www.mozilla.org/js/rhino/rhino.html">here</a>.
|
||||
</span>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,66 +1,22 @@
|
||||
# ***** BEGIN LICENSE BLOCK *****
|
||||
# Version: MPL 1.1/GPL 2.0
|
||||
#
|
||||
# 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 Rhino code, released May 6, 1999.
|
||||
#
|
||||
# The Initial Developer of the Original Code is
|
||||
# Netscape Communications Corporation.
|
||||
# Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
# the Initial Developer. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the terms of
|
||||
# the GNU General Public License Version 2 or later (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
|
||||
# MPL, indicate your decision by deleting the provisions above and replacing
|
||||
# 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 MPL or the GPL.
|
||||
#
|
||||
# ***** END LICENSE BLOCK *****
|
||||
|
||||
apiClasses=\
|
||||
src/org/mozilla/javascript/Callable.java,\
|
||||
src/org/mozilla/javascript/ClassCache.java,\
|
||||
src/org/mozilla/javascript/ClassShutter.java,\
|
||||
src/org/mozilla/javascript/CompilerEnvirons.java,\
|
||||
src/org/mozilla/javascript/ContinuationPending.java,\
|
||||
src/org/mozilla/javascript/ClassDefinitionException.java,\
|
||||
src/org/mozilla/javascript/ClassOutput.java,\
|
||||
src/org/mozilla/javascript/Context.java,\
|
||||
src/org/mozilla/javascript/ContextAction.java,\
|
||||
src/org/mozilla/javascript/ContextFactory.java,\
|
||||
src/org/mozilla/javascript/GeneratedClassLoader.java,\
|
||||
src/org/mozilla/javascript/ContextListener.java,\
|
||||
src/org/mozilla/javascript/EcmaError.java,\
|
||||
src/org/mozilla/javascript/ErrorReporter.java,\
|
||||
src/org/mozilla/javascript/EvaluatorException.java,\
|
||||
src/org/mozilla/javascript/Function.java,\
|
||||
src/org/mozilla/javascript/FunctionObject.java,\
|
||||
src/org/mozilla/javascript/GeneratedClassLoader.java,\
|
||||
src/org/mozilla/javascript/ImporterTopLevel.java,\
|
||||
src/org/mozilla/javascript/JavaScriptException.java,\
|
||||
src/org/mozilla/javascript/RefCallable.java,\
|
||||
src/org/mozilla/javascript/RhinoException.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/SecurityController.java,\
|
||||
src/org/mozilla/javascript/WrapFactory.java,\
|
||||
src/org/mozilla/javascript/WrappedException.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/optimizer/ClassCompiler.java,\
|
||||
src/org/mozilla/javascript/debug/DebuggableScript.java,\
|
||||
src/org/mozilla/javascript/serialize/ScriptableInputStream.java,\
|
||||
src/org/mozilla/javascript/serialize/ScriptableOutputStream.java
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
# ***** BEGIN LICENSE BLOCK *****
|
||||
# Version: MPL 1.1/GPL 2.0
|
||||
#
|
||||
# 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 Rhino code, released
|
||||
# May 6, 1999.
|
||||
#
|
||||
# The Initial Developer of the Original Code is
|
||||
# Netscape Communications Corporation.
|
||||
# Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
# the Initial Developer. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
# Igor Bukanov
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the terms of
|
||||
# the GNU General Public License Version 2 or later (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
|
||||
# MPL, indicate your decision by deleting the provisions above and replacing
|
||||
# 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 MPL or the GPL.
|
||||
#
|
||||
# ***** END LICENSE BLOCK *****
|
||||
|
||||
name: rhino
|
||||
Name: Rhino
|
||||
version: 1_7R3pre
|
||||
# See Context#getImplementationVersion() for format of this!
|
||||
implementation.version: Rhino 1.7 release 3 PRERELEASE ${implementation.date}
|
||||
|
||||
build.dir: build
|
||||
rhino.jar: js.jar
|
||||
small-rhino.jar: smalljs.jar
|
||||
rhino-14.jar: js-14.jar
|
||||
small-rhino-14.jar: smalljs-14.jar
|
||||
dist.name: rhino${version}
|
||||
dist.dir: ${build.dir}/${dist.name}
|
||||
|
||||
# compilation destionation
|
||||
classes: ${build.dir}/classes
|
||||
|
||||
# compilation settings
|
||||
debug: on
|
||||
target-jvm: 1.5
|
||||
source-level: 1.5
|
||||
|
||||
# jar generation settings
|
||||
jar-compression: true
|
||||
|
||||
# optional external packages
|
||||
xmlbeans: .
|
||||
xbean.jar: ${xmlbeans}/lib/xbean.jar
|
||||
jsr173.jar: ${xmlbeans}/lib/jsr173_1.0_api.jar
|
||||
@@ -1,343 +1,131 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- ***** BEGIN LICENSE BLOCK *****
|
||||
- Version: MPL 1.1/GPL 2.0
|
||||
-
|
||||
- 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 Rhino code, released May 6, 1999.
|
||||
-
|
||||
- The Initial Developer of the Original Code is
|
||||
- Netscape Communications Corporation.
|
||||
- Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
- the Initial Developer. All Rights Reserved.
|
||||
-
|
||||
- Contributor(s):
|
||||
-
|
||||
- Alternatively, the contents of this file may be used under the terms of
|
||||
- the GNU General Public License Version 2 or later (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
|
||||
- MPL, indicate your decision by deleting the provisions above and replacing
|
||||
- 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 MPL or the GPL.
|
||||
-
|
||||
- ***** END LICENSE BLOCK ***** -->
|
||||
|
||||
|
||||
<!--
|
||||
Build file for Rhino using Ant (see http://jakarta.apache.org/ant/index.html)
|
||||
Requires Ant version 1.2 or later
|
||||
|
||||
Compilation currently requires JDK 1.5 or later. Can cross-compile to
|
||||
support JDK 1.4.
|
||||
<!--
|
||||
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="help" basedir=".">
|
||||
<project name="Rhino" default="default" basedir=".">
|
||||
|
||||
<target name="properties">
|
||||
<!-- Allow user to override default settings from build.properties -->
|
||||
<property file="build.local.properties" />
|
||||
<tstamp>
|
||||
<!-- Specify date part of Context#getImplementationVersion() -->
|
||||
<format property="implementation.date" pattern="yyyy MM dd"/>
|
||||
</tstamp>
|
||||
<property file="build.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 name="dist.source-only-zip" value="rhino${version}-sources.zip"/>
|
||||
|
||||
<property file="apiClasses.properties"/>
|
||||
<property name="xmlimplsrc-build-file"
|
||||
location="xmlimplsrc/build.xml"/>
|
||||
|
||||
<available property="xmlimplsrc-present?"
|
||||
file="${xmlimplsrc-build-file}" />
|
||||
|
||||
<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="${classes}"/>
|
||||
<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" depends="init">
|
||||
<ant antfile="src/build.xml" target="compile"/>
|
||||
<ant antfile="toolsrc/build.xml" target="compile"/>
|
||||
<antcall target="xmlimplsrc-compile" />
|
||||
<target name="compile-src" depends="prepare">
|
||||
<ant dir="${src.dir}"/>
|
||||
</target>
|
||||
|
||||
<target name="compile-all" depends="compile">
|
||||
<ant antfile="deprecatedsrc/build.xml" target="compile"/>
|
||||
<target name="compile-toolsrc" depends="prepare">
|
||||
<ant dir="${toolsrc.dir}"/>
|
||||
</target>
|
||||
|
||||
<target name="graph" depends="init">
|
||||
<ant antfile="src/build.xml" target="graph"/>
|
||||
</target>
|
||||
<target name="compile" depends="compile-src,compile-toolsrc"/>
|
||||
|
||||
<target name="shell" depends="compile">
|
||||
<ant antfile="src/build.xml" target="shell"/>
|
||||
</target>
|
||||
|
||||
<target name="copy-source" depends="init">
|
||||
<ant antfile="src/build.xml" target="copy-source"/>
|
||||
<ant antfile="toolsrc/build.xml" target="copy-source"/>
|
||||
<ant antfile="testsrc/build.xml" target="copy-source"/>
|
||||
<antcall target="xmlimplsrc-copy-source" />
|
||||
<ant antfile="deprecatedsrc/build.xml" target="copy-source"/>
|
||||
<copy todir="${dist.dir}" file="build.xml"/>
|
||||
<copy todir="${dist.dir}" file="build.properties"/>
|
||||
<copy todir="${dist.dir}" file="apiClasses.properties"/>
|
||||
<copy todir="${dist.dir}" file="LICENSE.txt"/>
|
||||
<target name="jar" depends="compile">
|
||||
<jar jarfile="${dist.dir}/${rhino.jar}"
|
||||
basedir="${build.dest}"
|
||||
manifest="${src.dir}/manifest" />
|
||||
</target>
|
||||
|
||||
<target name="xmlimplsrc-compile" if="xmlimplsrc-present?">
|
||||
<echo>Calling ${xmlimplsrc-build-file}</echo>
|
||||
<!-- Ignore compilation errors under JDK less then 1.4 -->
|
||||
<property name="xmlimpl.compile.failonerror" value="no"/>
|
||||
<ant antfile="${xmlimplsrc-build-file}" target="compile"/>
|
||||
|
||||
<target name="jar-src" depends="compile-src">
|
||||
<jar jarfile="${dist.dir}/${rhino.jar}"
|
||||
basedir="${build.dest}"
|
||||
manifest="${src.dir}/manifest" />
|
||||
</target>
|
||||
|
||||
<target name="xmlimplsrc-copy-source" if="xmlimplsrc-present?">
|
||||
<echo>Calling ${xmlimplsrc-build-file}</echo>
|
||||
<ant antfile="${xmlimplsrc-build-file}" target="copy-source"/>
|
||||
</target>
|
||||
|
||||
<target name="jar" depends="compile-all">
|
||||
<property name="jarfile" location="${dist.dir}/${rhino.jar}"/>
|
||||
<jar jarfile="${jarfile}"
|
||||
basedir="${classes}"
|
||||
manifest="src/manifest"
|
||||
compress="${jar-compression}"
|
||||
/>
|
||||
</target>
|
||||
|
||||
<target name="console" depends="jar">
|
||||
<property name="jarfile" location="${dist.dir}/${rhino.jar}"/>
|
||||
<java jar="${jarfile}"
|
||||
fork="true">
|
||||
<arg line="-version 170"/>
|
||||
</java>
|
||||
</target>
|
||||
|
||||
<target name="retrotranslator" depends="retrotranslator-check,retrotranslator-download">
|
||||
<taskdef name="retrotranslator" classpath="build/download/Retrotranslator-1.2.3-bin/retrotranslator-transformer-1.2.3.jar"
|
||||
classname="net.sf.retrotranslator.transformer.RetrotranslatorTask"/>
|
||||
</target>
|
||||
|
||||
|
||||
<target name="retrotranslator-check">
|
||||
<condition property="retrotranslator.available">
|
||||
<and>
|
||||
<available file="build/download/Retrotranslator-1.2.3-bin/retrotranslator-transformer-1.2.3.jar"/>
|
||||
<available file="build/download/Retrotranslator-1.2.3-bin/retrotranslator-runtime-1.2.3.jar"/>
|
||||
<available file="build/download/Retrotranslator-1.2.3-bin/backport-util-concurrent-3.1.jar"/>
|
||||
</and>
|
||||
</condition>
|
||||
</target>
|
||||
|
||||
<target name="retrotranslator-download" unless="retrotranslator.available">
|
||||
<mkdir dir="build/download"/>
|
||||
<get src="http://downloads.sourceforge.net/retrotranslator/Retrotranslator-1.2.3-bin.zip" dest="build/download/Retrotranslator-1.2.3-bin.zip" usetimestamp="true"/>
|
||||
<unzip src="build/download/Retrotranslator-1.2.3-bin.zip" dest="build/download"/>
|
||||
</target>
|
||||
|
||||
<target name="retrojar" depends="jar,retrotranslator">
|
||||
<retrotranslator
|
||||
srcjar="${jarfile}"
|
||||
destjar="${dist.dir}/${rhino-14.jar}"
|
||||
embed="org.mozilla.javascript"
|
||||
/>
|
||||
</target>
|
||||
|
||||
<target name="smalljar" depends="compile">
|
||||
<property name="smalljarfile" location="${dist.dir}/${small-rhino.jar}"/>
|
||||
<jar basedir="${classes}" destfile="${smalljarfile}"
|
||||
compress="${jar-compression}">
|
||||
<include name="org/mozilla/javascript/*.class"/>
|
||||
|
||||
<include name="org/mozilla/javascript/debug/*.class"/>
|
||||
<include name="org/mozilla/javascript/resources/*.properties"/>
|
||||
<include name="org/mozilla/javascript/xml/*.class"/>
|
||||
<include name="org/mozilla/javascript/continuations/*.class"/>
|
||||
<include name="org/mozilla/javascript/jdk13/*.class"/>
|
||||
|
||||
<!-- exclude classes that defines only int constants -->
|
||||
<exclude name="org/mozilla/javascript/Token.class"/>
|
||||
|
||||
<!-- exclude classes that uses class generation library -->
|
||||
<exclude name="org/mozilla/javascript/JavaAdapter*.class"/>
|
||||
|
||||
<include name="org/mozilla/javascript/regexp/*.class"
|
||||
unless="no-regexp"/>
|
||||
</jar>
|
||||
|
||||
</target>
|
||||
|
||||
<target name="retrosmalljar" depends="smalljar,retrotranslator">
|
||||
<retrotranslator
|
||||
srcjar="${smalljarfile}"
|
||||
destjar="${dist.dir}/${small-rhino-14.jar}"
|
||||
embed="org.mozilla.javascript"
|
||||
/>
|
||||
</target>
|
||||
|
||||
<target name="copy-examples" depends="init">
|
||||
<mkdir dir="${dist.dir}/examples"/>
|
||||
<copy todir="${dist.dir}/examples">
|
||||
<fileset dir="examples" includes="**/*.java,**/*.js,**/*.html" />
|
||||
|
||||
<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="init">
|
||||
<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-source,copy-examples,copy-misc">
|
||||
<target name="copy-all" depends="copy-examples,copy-misc">
|
||||
</target>
|
||||
|
||||
<target name="javadoc" depends="init">
|
||||
<mkdir dir="${dist.dir}/javadoc"/>
|
||||
<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"
|
||||
destdir="${dist.dir}/javadoc"
|
||||
sourcepath="${src.dir}"
|
||||
destdir="${dist.apidocs}"
|
||||
overview="${dist.docs}/api.html"
|
||||
version="true"
|
||||
author="true"
|
||||
public="true"
|
||||
windowtitle="${Name}" />
|
||||
</target>
|
||||
|
||||
<target name="dev-javadoc" depends="init">
|
||||
<mkdir dir="${dist.dir}/javadoc"/>
|
||||
<javadoc sourcepath="src"
|
||||
destdir="${dist.dir}/javadoc"
|
||||
version="true"
|
||||
package="true"
|
||||
author="true"
|
||||
windowtitle="${Name}">
|
||||
<fileset
|
||||
dir="."
|
||||
includes="**/*.java"
|
||||
excludes="**/deprecatedsrc/**/*.java"
|
||||
/>
|
||||
</javadoc>
|
||||
</target>
|
||||
|
||||
<target name="dist" depends="deepclean,jar,retrojar,copy-all,javadoc">
|
||||
<target name="dist" depends="copy-all,javadoc,jar">
|
||||
<delete file="${dist.file}" />
|
||||
<zip destfile="${dist.file}">
|
||||
<fileset dir="${build.dir}" includes="${dist.name}/**"/>
|
||||
</zip>
|
||||
<zip zipfile="${dist.file}"
|
||||
basedir="${build.dir}"
|
||||
includes="**"
|
||||
excludes="classes/**" />
|
||||
</target>
|
||||
|
||||
<target name="source-zip" depends="copy-source,copy-examples,javadoc">
|
||||
<delete file="${dist.source-only-zip}" />
|
||||
<zip destfile="${dist.source-only-zip}">
|
||||
<zipfileset prefix="${dist.name}" dir="${dist.dir}">
|
||||
<include name="*src/**"/>
|
||||
<include name="build.xml"/>
|
||||
<include name="*.properties"/>
|
||||
<include name="examples/**"/>
|
||||
</zipfileset>
|
||||
</zip>
|
||||
<target name="default">
|
||||
<echo>
|
||||
**** Building core only; for full distribution build, try "ant dist".
|
||||
</echo>
|
||||
<antcall target="jar-src"/>
|
||||
</target>
|
||||
|
||||
<target name="compile-debugger">
|
||||
<ant antfile="toolsrc/build.xml" target="compile-debugger"/>
|
||||
</target>
|
||||
|
||||
<target name="clean" depends="properties">
|
||||
<delete quiet="true" file="${dist.dir}/${rhino.jar}"/>
|
||||
<delete quiet="true" file="${dist.dir}/${small-rhino.jar}"/>
|
||||
<delete quiet="true" dir="${build.dir}"/>
|
||||
</target>
|
||||
|
||||
<target name="deepclean" depends="properties">
|
||||
<delete quiet="true" dir="${build.dir}"/>
|
||||
<delete quiet="true" file="${dist.file}"/>
|
||||
<delete quiet="true" file="${dist.source-only-zip}"/>
|
||||
</target>
|
||||
|
||||
<!--
|
||||
The next two targets run the JavaScript Test Library tests. Note that these tests are quite extensive and take a long time
|
||||
to run. They are not documented in the 'help' target for now.
|
||||
-->
|
||||
|
||||
<!--
|
||||
Run the tests using JUnit. Beware that if you are using Ant from the command-line, there are some difficulties you may
|
||||
encounter setting this up correctly; see http://ant.apache.org/faq.html#delegating-classloader
|
||||
|
||||
IDEs that use Ant as the build system probably handle this fine.
|
||||
-->
|
||||
<target name="junit-all" depends="compile">
|
||||
<ant antfile="testsrc/build.xml" target="junit-coveragereport"/>
|
||||
</target>
|
||||
|
||||
<!--
|
||||
Run the tests using the Java port of jsdriver.pl. Note that running this port
|
||||
from the command-line may be more useful running this Ant target, as running
|
||||
from the command line allows configuration options, such as running with a
|
||||
non-default optimization level, or running only a subset of the tests.
|
||||
-->
|
||||
<target name="jsdriver-run" depends="compile">
|
||||
<ant antfile="testsrc/build.xml" target="jsdriver" />
|
||||
</target>
|
||||
|
||||
<!--
|
||||
Compile the JsDriver test driver.
|
||||
-->
|
||||
<target name="jsdriver" depends="compile">
|
||||
<ant antfile="testsrc/build.xml" target="clean" />
|
||||
<ant antfile="testsrc/build.xml" target="compile" />
|
||||
</target>
|
||||
|
||||
<target name="help" depends="properties">
|
||||
<echo>The following targets are available with this build file:
|
||||
|
||||
clean remove all compiled classes and copied property files
|
||||
|
||||
compile compile classes and copy all property files
|
||||
into ${classes} directory
|
||||
excluding deprecated code
|
||||
|
||||
compile-all compile all classes and copy all property files
|
||||
into ${classes} directory
|
||||
including deprecated code
|
||||
|
||||
deepclean remove all generated files and directories
|
||||
|
||||
dist create ${dist.file} with full Rhino distribution
|
||||
|
||||
help print this help
|
||||
|
||||
jar create ${rhino.jar} in ${dist.dir}
|
||||
|
||||
smalljar create ${small-rhino.jar} in ${dist.dir} with
|
||||
minimalist set of Rhino classes. See footprint.html
|
||||
from the doc directory for details.
|
||||
|
||||
javadoc generate Rhino API documentation
|
||||
in ${dist.dir}/javadoc
|
||||
|
||||
source-zip create ${dist.source-only-zip} with all Rhino
|
||||
source files necessary to recreate ${dist.file}
|
||||
</echo>
|
||||
</target>
|
||||
|
||||
|
||||
</project>
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- ***** BEGIN LICENSE BLOCK *****
|
||||
- Version: MPL 1.1/GPL 2.0
|
||||
-
|
||||
- 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 Rhino code, released May 6, 1999.
|
||||
-
|
||||
- The Initial Developer of the Original Code is
|
||||
- Netscape Communications Corporation.
|
||||
- Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
- the Initial Developer. All Rights Reserved.
|
||||
-
|
||||
- Contributor(s):
|
||||
-
|
||||
- Alternatively, the contents of this file may be used under the terms of
|
||||
- the GNU General Public License Version 2 or later (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
|
||||
- MPL, indicate your decision by deleting the provisions above and replacing
|
||||
- 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 MPL or the GPL.
|
||||
-
|
||||
- ***** END LICENSE BLOCK ***** -->
|
||||
|
||||
|
||||
<project name="src" default="compile" basedir="..">
|
||||
|
||||
<property file="build.properties"/>
|
||||
|
||||
<target name="compile">
|
||||
<javac srcdir="deprecatedsrc"
|
||||
destdir="${classes}"
|
||||
includes="org/mozilla/javascript/*.java"
|
||||
deprecation="on"
|
||||
debug="${debug}"
|
||||
target="${target-jvm}"
|
||||
source="${source-level}"
|
||||
>
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<target name="copy-source">
|
||||
<mkdir dir="${dist.dir}/deprecatedsrc"/>
|
||||
<copy todir="${dist.dir}/deprecatedsrc">
|
||||
<fileset dir="deprecatedsrc"
|
||||
includes="**/*.java,**/*.properties,**/*.xml,manifest"/>
|
||||
</copy>
|
||||
</target>
|
||||
|
||||
</project>
|
||||
@@ -1,53 +0,0 @@
|
||||
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
// API class
|
||||
|
||||
package org.mozilla.javascript;
|
||||
|
||||
/**
|
||||
* @deprecated The exception is no longer thrown by Rhino runtime as
|
||||
* {@link EvaluatorException} is used instead.
|
||||
*/
|
||||
public class ClassDefinitionException extends RuntimeException
|
||||
{
|
||||
static final long serialVersionUID = -5637830967241712746L;
|
||||
|
||||
public ClassDefinitionException(String detail) {
|
||||
super(detail);
|
||||
}
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Igor Bukanov
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
// API class
|
||||
|
||||
package org.mozilla.javascript;
|
||||
|
||||
/**
|
||||
* @deprecated The exception is no longer thrown by Rhino runtime as
|
||||
* {@link EvaluatorException} is used instead.
|
||||
*/
|
||||
public class NotAFunctionException extends RuntimeException
|
||||
{
|
||||
static final long serialVersionUID = 6461524852170711724L;
|
||||
|
||||
public NotAFunctionException() { }
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Norris Boyd
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
// API class
|
||||
|
||||
package org.mozilla.javascript;
|
||||
|
||||
/**
|
||||
* @deprecated This exception is no longer thrown by Rhino runtime.
|
||||
*/
|
||||
public class PropertyException extends RuntimeException
|
||||
{
|
||||
static final long serialVersionUID = -8221564865490676219L;
|
||||
|
||||
public PropertyException(String detail) {
|
||||
super(detail);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,367 +0,0 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Ethan Hugg
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
package org.mozilla.javascript.xml.impl.xmlbeans;
|
||||
|
||||
import org.apache.xmlbeans.XmlCursor;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
public class LogicalEquality
|
||||
{
|
||||
public static boolean nodesEqual(XmlCursor xmlOne, XmlCursor xmlTwo)
|
||||
{
|
||||
boolean result = false;
|
||||
|
||||
if (xmlOne.isStartdoc())
|
||||
{
|
||||
xmlOne.toFirstContentToken();
|
||||
}
|
||||
|
||||
if (xmlTwo.isStartdoc())
|
||||
{
|
||||
xmlTwo.toFirstContentToken();
|
||||
}
|
||||
|
||||
if (xmlOne.currentTokenType() == xmlTwo.currentTokenType())
|
||||
{
|
||||
if (xmlOne.isEnddoc())
|
||||
{
|
||||
// Both empty
|
||||
result = true;
|
||||
}
|
||||
else if (xmlOne.isAttr())
|
||||
{
|
||||
result = attributesEqual(xmlOne, xmlTwo);
|
||||
}
|
||||
else if (xmlOne.isText())
|
||||
{
|
||||
result = textNodesEqual(xmlOne, xmlTwo);
|
||||
}
|
||||
else if (xmlOne.isComment())
|
||||
{
|
||||
result = commentsEqual(xmlOne, xmlTwo);
|
||||
}
|
||||
else if (xmlOne.isProcinst())
|
||||
{
|
||||
result = processingInstructionsEqual(xmlOne, xmlTwo);
|
||||
}
|
||||
else if (xmlOne.isStart())
|
||||
{
|
||||
// Compare root elements
|
||||
result = elementsEqual(xmlOne, xmlTwo);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static boolean elementsEqual(XmlCursor xmlOne, XmlCursor xmlTwo)
|
||||
{
|
||||
boolean result = true;
|
||||
|
||||
if (!qnamesEqual(xmlOne.getName(), xmlTwo.getName()))
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// These filter out empty text nodes.
|
||||
nextToken(xmlOne);
|
||||
nextToken(xmlTwo);
|
||||
|
||||
do
|
||||
{
|
||||
if (xmlOne.currentTokenType() != xmlTwo.currentTokenType())
|
||||
{
|
||||
// Not same token
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
else if (xmlOne.isEnd())
|
||||
{
|
||||
// Done with this element, step over end
|
||||
break;
|
||||
}
|
||||
else if (xmlOne.isEnddoc())
|
||||
{
|
||||
// Shouldn't get here
|
||||
break;
|
||||
}
|
||||
else if (xmlOne.isAttr())
|
||||
{
|
||||
// This one will move us to the first non-attr token.
|
||||
result = attributeListsEqual(xmlOne, xmlTwo);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (xmlOne.isText())
|
||||
{
|
||||
result = textNodesEqual(xmlOne, xmlTwo);
|
||||
}
|
||||
else if (xmlOne.isComment())
|
||||
{
|
||||
result = commentsEqual(xmlOne, xmlTwo);
|
||||
}
|
||||
else if (xmlOne.isProcinst())
|
||||
{
|
||||
result = processingInstructionsEqual(xmlOne, xmlTwo);
|
||||
}
|
||||
else if (xmlOne.isStart())
|
||||
{
|
||||
result = elementsEqual(xmlOne, xmlTwo);
|
||||
}
|
||||
else
|
||||
{
|
||||
//XML.log("Unknown token type" + xmlOne.currentTokenType());
|
||||
}
|
||||
|
||||
// These filter out empty text nodes.
|
||||
nextToken(xmlOne);
|
||||
nextToken(xmlTwo);
|
||||
}
|
||||
}
|
||||
while(result);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param xmlOne
|
||||
* @param xmlTwo
|
||||
* @return
|
||||
*/
|
||||
private static boolean attributeListsEqual(XmlCursor xmlOne, XmlCursor xmlTwo)
|
||||
{
|
||||
boolean result = true;
|
||||
TreeMap mapOne = loadAttributeMap(xmlOne);
|
||||
TreeMap mapTwo = loadAttributeMap(xmlTwo);
|
||||
|
||||
if (mapOne.size() != mapTwo.size())
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
Set keysOne = mapOne.keySet();
|
||||
Set keysTwo = mapTwo.keySet();
|
||||
Iterator itOne = keysOne.iterator();
|
||||
Iterator itTwo = keysTwo.iterator();
|
||||
|
||||
while (result && itOne.hasNext())
|
||||
{
|
||||
String valueOne = (String) itOne.next();
|
||||
String valueTwo = (String) itTwo.next();
|
||||
|
||||
if (!valueOne.equals(valueTwo))
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
javax.xml.namespace.QName qnameOne = (javax.xml.namespace.QName) mapOne.get(valueOne);
|
||||
javax.xml.namespace.QName qnameTwo = (javax.xml.namespace.QName) mapTwo.get(valueTwo);
|
||||
|
||||
if (!qnamesEqual(qnameOne, qnameTwo))
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param xml
|
||||
* @return
|
||||
*/
|
||||
private static TreeMap loadAttributeMap(XmlCursor xml)
|
||||
{
|
||||
TreeMap result = new TreeMap();
|
||||
|
||||
while (xml.isAttr())
|
||||
{
|
||||
result.put(xml.getTextValue(), xml.getName());
|
||||
nextToken(xml);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param xmlOne
|
||||
* @param xmlTwo
|
||||
* @return
|
||||
*/
|
||||
private static boolean attributesEqual(XmlCursor xmlOne, XmlCursor xmlTwo)
|
||||
{
|
||||
boolean result = false;
|
||||
|
||||
if (xmlOne.isAttr() && xmlTwo.isAttr())
|
||||
{
|
||||
if (qnamesEqual(xmlOne.getName(), xmlTwo.getName()))
|
||||
{
|
||||
if (xmlOne.getTextValue().equals(xmlTwo.getTextValue()))
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param xmlOne
|
||||
* @param xmlTwo
|
||||
* @return
|
||||
*/
|
||||
private static boolean textNodesEqual(XmlCursor xmlOne, XmlCursor xmlTwo)
|
||||
{
|
||||
boolean result = false;
|
||||
|
||||
if (xmlOne.isText() && xmlTwo.isText())
|
||||
{
|
||||
if (xmlOne.getChars().equals(xmlTwo.getChars()))
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param xmlOne
|
||||
* @param xmlTwo
|
||||
* @return
|
||||
*/
|
||||
private static boolean commentsEqual(XmlCursor xmlOne, XmlCursor xmlTwo)
|
||||
{
|
||||
boolean result = false;
|
||||
|
||||
if (xmlOne.isComment() && xmlTwo.isComment())
|
||||
{
|
||||
if (xmlOne.getTextValue().equals(xmlTwo.getTextValue()))
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param xmlOne
|
||||
* @param xmlTwo
|
||||
* @return
|
||||
*/
|
||||
private static boolean processingInstructionsEqual(XmlCursor xmlOne, XmlCursor xmlTwo)
|
||||
{
|
||||
boolean result = false;
|
||||
|
||||
if (xmlOne.isProcinst() && xmlTwo.isProcinst())
|
||||
{
|
||||
if (qnamesEqual(xmlOne.getName(), xmlTwo.getName()))
|
||||
{
|
||||
if (xmlOne.getTextValue().equals(xmlTwo.getTextValue()))
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param qnameOne
|
||||
* @param qnameTwo
|
||||
* @return
|
||||
*/
|
||||
private static boolean qnamesEqual(javax.xml.namespace.QName qnameOne, javax.xml.namespace.QName qnameTwo)
|
||||
{
|
||||
boolean result = false;
|
||||
|
||||
if (qnameOne.getNamespaceURI().equals(qnameTwo.getNamespaceURI()))
|
||||
{
|
||||
if (qnameOne.getLocalPart().equals(qnameTwo.getLocalPart()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* filter out empty textNodes here
|
||||
*
|
||||
* @param xml
|
||||
*/
|
||||
private static void nextToken(XmlCursor xml)
|
||||
{
|
||||
do
|
||||
{
|
||||
xml.toNextToken();
|
||||
|
||||
if (!xml.isText())
|
||||
{
|
||||
// Not a text node
|
||||
break;
|
||||
}
|
||||
else if (xml.getChars().trim().length() > 0)
|
||||
{
|
||||
// Text node is not empty
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (true);
|
||||
}
|
||||
}
|
||||
@@ -1,335 +0,0 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Ethan Hugg
|
||||
* Terry Lucas
|
||||
* Milen Nankov
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
package org.mozilla.javascript.xml.impl.xmlbeans;
|
||||
|
||||
import org.mozilla.javascript.*;
|
||||
|
||||
/**
|
||||
* Class Namespace
|
||||
*
|
||||
*/
|
||||
class Namespace extends IdScriptableObject
|
||||
{
|
||||
static final long serialVersionUID = -5765755238131301744L;
|
||||
|
||||
private static final Object NAMESPACE_TAG = "Namespace";
|
||||
|
||||
private XMLLibImpl lib;
|
||||
private String prefix;
|
||||
private String uri;
|
||||
|
||||
public Namespace(XMLLibImpl lib, String uri)
|
||||
{
|
||||
super(lib.globalScope(), lib.namespacePrototype);
|
||||
|
||||
if (uri == null)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
this.lib = lib;
|
||||
this.prefix = (uri.length() == 0) ? "" : null;
|
||||
this.uri = uri;
|
||||
}
|
||||
|
||||
|
||||
public Namespace(XMLLibImpl lib, String prefix, String uri)
|
||||
{
|
||||
super(lib.globalScope(), lib.namespacePrototype);
|
||||
|
||||
if (uri == null)
|
||||
throw new IllegalArgumentException();
|
||||
if (uri.length() == 0) {
|
||||
// prefix should be "" for empty uri
|
||||
if (prefix == null)
|
||||
throw new IllegalArgumentException();
|
||||
if (prefix.length() != 0)
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
this.lib = lib;
|
||||
this.prefix = prefix;
|
||||
this.uri = uri;
|
||||
}
|
||||
|
||||
public void exportAsJSClass(boolean sealed)
|
||||
{
|
||||
exportAsJSClass(MAX_PROTOTYPE_ID, lib.globalScope(), sealed);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String uri()
|
||||
{
|
||||
return uri;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String prefix()
|
||||
{
|
||||
return prefix;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String toString ()
|
||||
{
|
||||
return uri();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String toLocaleString ()
|
||||
{
|
||||
return toString();
|
||||
}
|
||||
|
||||
public boolean equals(Object obj)
|
||||
{
|
||||
if (!(obj instanceof Namespace)) return false;
|
||||
return equals((Namespace)obj);
|
||||
}
|
||||
|
||||
protected Object equivalentValues(Object value)
|
||||
{
|
||||
if (!(value instanceof Namespace)) return Scriptable.NOT_FOUND;
|
||||
boolean result = equals((Namespace)value);
|
||||
return result ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
|
||||
private boolean equals(Namespace n)
|
||||
{
|
||||
return uri().equals(n.uri());
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getClassName ()
|
||||
{
|
||||
return "Namespace";
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param hint
|
||||
* @return
|
||||
*/
|
||||
public Object getDefaultValue (Class hint)
|
||||
{
|
||||
return uri();
|
||||
}
|
||||
|
||||
// #string_id_map#
|
||||
private static final int
|
||||
Id_prefix = 1,
|
||||
Id_uri = 2,
|
||||
MAX_INSTANCE_ID = 2;
|
||||
|
||||
protected int getMaxInstanceId()
|
||||
{
|
||||
return super.getMaxInstanceId() + MAX_INSTANCE_ID;
|
||||
}
|
||||
|
||||
protected int findInstanceIdInfo(String s)
|
||||
{
|
||||
int id;
|
||||
// #generated# Last update: 2004-07-20 19:50:50 CEST
|
||||
L0: { id = 0; String X = null;
|
||||
int s_length = s.length();
|
||||
if (s_length==3) { X="uri";id=Id_uri; }
|
||||
else if (s_length==6) { X="prefix";id=Id_prefix; }
|
||||
if (X!=null && X!=s && !X.equals(s)) id = 0;
|
||||
}
|
||||
// #/generated#
|
||||
|
||||
if (id == 0) return super.findInstanceIdInfo(s);
|
||||
|
||||
int attr;
|
||||
switch (id) {
|
||||
case Id_prefix:
|
||||
case Id_uri:
|
||||
attr = PERMANENT | READONLY;
|
||||
break;
|
||||
default: throw new IllegalStateException();
|
||||
}
|
||||
return instanceIdInfo(attr, super.getMaxInstanceId() + id);
|
||||
}
|
||||
// #/string_id_map#
|
||||
|
||||
protected String getInstanceIdName(int id)
|
||||
{
|
||||
switch (id - super.getMaxInstanceId()) {
|
||||
case Id_prefix: return "prefix";
|
||||
case Id_uri: return "uri";
|
||||
}
|
||||
return super.getInstanceIdName(id);
|
||||
}
|
||||
|
||||
protected Object getInstanceIdValue(int id)
|
||||
{
|
||||
switch (id - super.getMaxInstanceId()) {
|
||||
case Id_prefix:
|
||||
if (prefix == null) return Undefined.instance;
|
||||
return prefix;
|
||||
case Id_uri:
|
||||
return uri;
|
||||
}
|
||||
return super.getInstanceIdValue(id);
|
||||
}
|
||||
|
||||
|
||||
// #string_id_map#
|
||||
private static final int
|
||||
Id_constructor = 1,
|
||||
Id_toString = 2,
|
||||
Id_toSource = 3,
|
||||
MAX_PROTOTYPE_ID = 3;
|
||||
|
||||
protected int findPrototypeId(String s)
|
||||
{
|
||||
int id;
|
||||
// #generated# Last update: 2004-08-21 12:07:01 CEST
|
||||
L0: { id = 0; String X = null; int c;
|
||||
int s_length = s.length();
|
||||
if (s_length==8) {
|
||||
c=s.charAt(3);
|
||||
if (c=='o') { X="toSource";id=Id_toSource; }
|
||||
else if (c=='t') { X="toString";id=Id_toString; }
|
||||
}
|
||||
else if (s_length==11) { X="constructor";id=Id_constructor; }
|
||||
if (X!=null && X!=s && !X.equals(s)) id = 0;
|
||||
}
|
||||
// #/generated#
|
||||
return id;
|
||||
}
|
||||
// #/string_id_map#
|
||||
|
||||
protected void initPrototypeId(int id)
|
||||
{
|
||||
String s;
|
||||
int arity;
|
||||
switch (id) {
|
||||
case Id_constructor: arity=2; s="constructor"; break;
|
||||
case Id_toString: arity=0; s="toString"; break;
|
||||
case Id_toSource: arity=0; s="toSource"; break;
|
||||
default: throw new IllegalArgumentException(String.valueOf(id));
|
||||
}
|
||||
initPrototypeMethod(NAMESPACE_TAG, id, s, arity);
|
||||
}
|
||||
|
||||
public Object execIdCall(IdFunctionObject f,
|
||||
Context cx,
|
||||
Scriptable scope,
|
||||
Scriptable thisObj,
|
||||
Object[] args)
|
||||
{
|
||||
if (!f.hasTag(NAMESPACE_TAG)) {
|
||||
return super.execIdCall(f, cx, scope, thisObj, args);
|
||||
}
|
||||
int id = f.methodId();
|
||||
switch (id) {
|
||||
case Id_constructor:
|
||||
return jsConstructor(cx, (thisObj == null), args);
|
||||
case Id_toString:
|
||||
return realThis(thisObj, f).toString();
|
||||
case Id_toSource:
|
||||
return realThis(thisObj, f).js_toSource();
|
||||
}
|
||||
throw new IllegalArgumentException(String.valueOf(id));
|
||||
}
|
||||
|
||||
private Namespace realThis(Scriptable thisObj, IdFunctionObject f)
|
||||
{
|
||||
if(!(thisObj instanceof Namespace))
|
||||
throw incompatibleCallError(f);
|
||||
return (Namespace)thisObj;
|
||||
}
|
||||
|
||||
private Object jsConstructor(Context cx, boolean inNewExpr, Object[] args)
|
||||
{
|
||||
if (!inNewExpr && args.length == 1) {
|
||||
return lib.castToNamespace(cx, args[0]);
|
||||
}
|
||||
|
||||
if (args.length == 0) {
|
||||
return lib.constructNamespace(cx);
|
||||
} else if (args.length == 1) {
|
||||
return lib.constructNamespace(cx, args[0]);
|
||||
} else {
|
||||
return lib.constructNamespace(cx, args[0], args[1]);
|
||||
}
|
||||
}
|
||||
|
||||
private String js_toSource()
|
||||
{
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append('(');
|
||||
toSourceImpl(prefix, uri, sb);
|
||||
sb.append(')');
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
static void toSourceImpl(String prefix, String uri, StringBuffer sb)
|
||||
{
|
||||
sb.append("new Namespace(");
|
||||
if (uri.length() == 0) {
|
||||
if (!"".equals(prefix)) throw new IllegalArgumentException(prefix);
|
||||
} else {
|
||||
sb.append('\'');
|
||||
if (prefix != null) {
|
||||
sb.append(ScriptRuntime.escapeString(prefix, '\''));
|
||||
sb.append("', '");
|
||||
}
|
||||
sb.append(ScriptRuntime.escapeString(uri, '\''));
|
||||
sb.append('\'');
|
||||
}
|
||||
sb.append(')');
|
||||
}
|
||||
}
|
||||
@@ -1,350 +0,0 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Milen Nankov
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
package org.mozilla.javascript.xml.impl.xmlbeans;
|
||||
|
||||
import java.util.*;
|
||||
import org.apache.xmlbeans.XmlCursor;
|
||||
|
||||
import org.mozilla.javascript.*;
|
||||
|
||||
class NamespaceHelper
|
||||
{
|
||||
private XMLLibImpl lib;
|
||||
private final Map prefixToURI = new HashMap();
|
||||
private final Map uriToPrefix = new HashMap();
|
||||
// A set of URIs that are used without explicit namespace declaration in scope.
|
||||
private final Set undeclared = new HashSet();
|
||||
|
||||
private NamespaceHelper(XMLLibImpl lib)
|
||||
{
|
||||
this.lib = lib;
|
||||
// Insert the default namespace
|
||||
prefixToURI.put("", "");
|
||||
Set prefixes = new HashSet();
|
||||
prefixes.add("");
|
||||
uriToPrefix.put("", prefixes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Declared a new namespace
|
||||
*
|
||||
* @param prefix
|
||||
* @param uri
|
||||
* @param declarations
|
||||
*/
|
||||
private void declareNamespace(String prefix, String uri, ObjArray declarations)
|
||||
{
|
||||
Set prefixes = (Set)uriToPrefix.get(uri);
|
||||
if(prefixes == null)
|
||||
{
|
||||
prefixes = new HashSet();
|
||||
uriToPrefix.put(uri, prefixes);
|
||||
}
|
||||
|
||||
if(!prefixes.contains(prefix))
|
||||
{
|
||||
String oldURI = (String)prefixToURI.get(prefix);
|
||||
|
||||
// Add the new mapping
|
||||
prefixes.add(prefix);
|
||||
prefixToURI.put(prefix, uri);
|
||||
if(declarations != null)
|
||||
declarations.add(new Namespace(lib, prefix, uri));
|
||||
|
||||
if(oldURI != null)
|
||||
{
|
||||
// Update the existing mapping
|
||||
prefixes = (Set)uriToPrefix.get(oldURI);
|
||||
prefixes.remove(prefix);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the internal state of this NamespaceHelper to reflect the
|
||||
* existance of the XML token pointed to by the cursor.
|
||||
*/
|
||||
private void processName(XmlCursor cursor, ObjArray declarations)
|
||||
{
|
||||
javax.xml.namespace.QName qname = cursor.getName();
|
||||
String uri = qname.getNamespaceURI();
|
||||
Set prefixes = (Set)uriToPrefix.get(uri);
|
||||
if(prefixes == null || prefixes.size() == 0)
|
||||
{
|
||||
undeclared.add(uri);
|
||||
if(declarations != null)
|
||||
declarations.add(new Namespace(lib, uri));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the internal state of this NamespaceHelper with the
|
||||
* namespace information of the element pointed to by the cursor.
|
||||
*/
|
||||
private void update(XmlCursor cursor, ObjArray declarations)
|
||||
{
|
||||
// Process the Namespace declarations
|
||||
cursor.push();
|
||||
while(cursor.toNextToken().isAnyAttr())
|
||||
{
|
||||
if(cursor.isNamespace())
|
||||
{
|
||||
javax.xml.namespace.QName name = cursor.getName();
|
||||
String prefix = name.getLocalPart();
|
||||
String uri = name.getNamespaceURI();
|
||||
|
||||
declareNamespace(prefix, uri, declarations);
|
||||
}
|
||||
}
|
||||
cursor.pop();
|
||||
|
||||
// Process the element
|
||||
processName(cursor, declarations);
|
||||
|
||||
// Process the attributes
|
||||
cursor.push();
|
||||
boolean hasNext = cursor.toFirstAttribute();
|
||||
while(hasNext)
|
||||
{
|
||||
processName(cursor, declarations);
|
||||
hasNext = cursor.toNextAttribute();
|
||||
}
|
||||
cursor.pop();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Object[] array of Namespace objects in scope at the cursor.
|
||||
*/
|
||||
public static Object[] inScopeNamespaces(XMLLibImpl lib, XmlCursor cursor)
|
||||
{
|
||||
ObjArray namespaces = new ObjArray();
|
||||
NamespaceHelper helper = new NamespaceHelper(lib);
|
||||
|
||||
cursor.push();
|
||||
|
||||
int depth = 0;
|
||||
while(cursor.hasPrevToken())
|
||||
{
|
||||
if(cursor.isContainer())
|
||||
{
|
||||
cursor.push();
|
||||
depth++;
|
||||
}
|
||||
|
||||
cursor.toParent();
|
||||
}
|
||||
|
||||
for(int i = 0; i < depth; i++)
|
||||
{
|
||||
cursor.pop();
|
||||
helper.update(cursor, null);
|
||||
}
|
||||
|
||||
Iterator i = helper.prefixToURI.entrySet().iterator();
|
||||
while(i.hasNext())
|
||||
{
|
||||
Map.Entry entry = (Map.Entry)i.next();
|
||||
Namespace ns = new Namespace(lib, (String)entry.getKey(),
|
||||
(String)entry.getValue());
|
||||
namespaces.add(ns);
|
||||
}
|
||||
|
||||
i = helper.undeclared.iterator();
|
||||
while(i.hasNext())
|
||||
{
|
||||
Namespace ns = new Namespace(lib, (String)i.next());
|
||||
namespaces.add(ns);
|
||||
}
|
||||
|
||||
cursor.pop();
|
||||
|
||||
return namespaces.toArray();
|
||||
}
|
||||
|
||||
static Namespace getNamespace(XMLLibImpl lib, XmlCursor cursor,
|
||||
Object[] inScopeNamespaces)
|
||||
{
|
||||
String uri;
|
||||
String prefix;
|
||||
|
||||
if (cursor.isProcinst()) {
|
||||
uri = "";
|
||||
prefix = "";
|
||||
} else {
|
||||
javax.xml.namespace.QName qname = cursor.getName();
|
||||
uri = qname.getNamespaceURI();
|
||||
prefix = qname.getPrefix();
|
||||
}
|
||||
|
||||
if (inScopeNamespaces == null)
|
||||
return new Namespace(lib, prefix, uri);
|
||||
|
||||
Namespace result = null;
|
||||
for (int i = 0; i != inScopeNamespaces.length; ++i) {
|
||||
Namespace ns = (Namespace)inScopeNamespaces[i];
|
||||
if(ns == null) continue;
|
||||
|
||||
String nsURI = ns.uri();
|
||||
if(nsURI.equals(uri))
|
||||
{
|
||||
if(prefix.equals(ns.prefix()))
|
||||
{
|
||||
result = ns;
|
||||
break;
|
||||
}
|
||||
|
||||
if(result == null ||
|
||||
(result.prefix() == null &&
|
||||
ns.prefix() != null))
|
||||
result = ns;
|
||||
}
|
||||
}
|
||||
|
||||
if(result == null)
|
||||
result = new Namespace(lib, prefix, uri);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return List of Namespace objects that are declared in the container pointed to by the cursor.
|
||||
*/
|
||||
public static Object[] namespaceDeclarations(XMLLibImpl lib, XmlCursor cursor)
|
||||
{
|
||||
ObjArray declarations = new ObjArray();
|
||||
NamespaceHelper helper = new NamespaceHelper(lib);
|
||||
|
||||
cursor.push();
|
||||
|
||||
int depth = 0;
|
||||
while(cursor.hasPrevToken())
|
||||
{
|
||||
if(cursor.isContainer())
|
||||
{
|
||||
cursor.push();
|
||||
depth++;
|
||||
}
|
||||
|
||||
cursor.toParent();
|
||||
}
|
||||
|
||||
for(int i = 0; i < depth - 1; i++)
|
||||
{
|
||||
cursor.pop();
|
||||
helper.update(cursor, null);
|
||||
}
|
||||
|
||||
if(depth > 0)
|
||||
{
|
||||
cursor.pop();
|
||||
helper.update(cursor, declarations);
|
||||
}
|
||||
|
||||
cursor.pop();
|
||||
|
||||
return declarations.toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Prefix to URI map of all namespaces in scope at the cursor.
|
||||
*/
|
||||
public static Map getAllNamespaces(XMLLibImpl lib, XmlCursor cursor)
|
||||
{
|
||||
NamespaceHelper helper = new NamespaceHelper(lib);
|
||||
|
||||
cursor.push();
|
||||
|
||||
int depth = 0;
|
||||
while(cursor.hasPrevToken())
|
||||
{
|
||||
if(cursor.isContainer())
|
||||
{
|
||||
cursor.push();
|
||||
depth++;
|
||||
}
|
||||
|
||||
cursor.toParent();
|
||||
}
|
||||
|
||||
for(int i = 0; i < depth; i++)
|
||||
{
|
||||
cursor.pop();
|
||||
helper.update(cursor, null);
|
||||
}
|
||||
|
||||
cursor.pop();
|
||||
|
||||
return helper.prefixToURI;
|
||||
}
|
||||
|
||||
public static void getNamespaces(XmlCursor cursor, Map prefixToURI)
|
||||
{
|
||||
cursor.push();
|
||||
while(cursor.toNextToken().isAnyAttr())
|
||||
{
|
||||
if(cursor.isNamespace())
|
||||
{
|
||||
javax.xml.namespace.QName name = cursor.getName();
|
||||
String prefix = name.getLocalPart();
|
||||
String uri = name.getNamespaceURI();
|
||||
|
||||
prefixToURI.put(prefix, uri);
|
||||
}
|
||||
}
|
||||
cursor.pop();
|
||||
}
|
||||
|
||||
public static void removeNamespace(XmlCursor cursor, String prefix)
|
||||
{
|
||||
cursor.push();
|
||||
while(cursor.toNextToken().isAnyAttr())
|
||||
{
|
||||
if(cursor.isNamespace())
|
||||
{
|
||||
javax.xml.namespace.QName name = cursor.getName();
|
||||
if(name.getLocalPart().equals(prefix))
|
||||
{
|
||||
cursor.removeXml();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
cursor.pop();
|
||||
}
|
||||
}
|
||||
@@ -1,321 +0,0 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Ethan Hugg
|
||||
* Terry Lucas
|
||||
* Milen Nankov
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
package org.mozilla.javascript.xml.impl.xmlbeans;
|
||||
|
||||
import org.mozilla.javascript.*;
|
||||
|
||||
/**
|
||||
* Class QName
|
||||
*
|
||||
*/
|
||||
final class QName extends IdScriptableObject
|
||||
{
|
||||
static final long serialVersionUID = 416745167693026750L;
|
||||
|
||||
private static final Object QNAME_TAG = "QName";
|
||||
|
||||
XMLLibImpl lib;
|
||||
private String prefix;
|
||||
private String localName;
|
||||
private String uri;
|
||||
|
||||
QName(XMLLibImpl lib, String uri, String localName, String prefix)
|
||||
{
|
||||
super(lib.globalScope(), lib.qnamePrototype);
|
||||
if (localName == null) throw new IllegalArgumentException();
|
||||
this.lib = lib;
|
||||
this.uri = uri;
|
||||
this.prefix = prefix;
|
||||
this.localName = localName;
|
||||
}
|
||||
|
||||
void exportAsJSClass(boolean sealed)
|
||||
{
|
||||
exportAsJSClass(MAX_PROTOTYPE_ID, lib.globalScope(), sealed);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String toString()
|
||||
{
|
||||
String result;
|
||||
|
||||
if (uri == null)
|
||||
{
|
||||
result = "*::".concat(localName);
|
||||
}
|
||||
else if(uri.length() == 0)
|
||||
{
|
||||
result = localName;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = uri + "::" + localName;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public String localName()
|
||||
{
|
||||
return localName;
|
||||
}
|
||||
|
||||
String prefix()
|
||||
{
|
||||
return (prefix == null) ? prefix : "";
|
||||
}
|
||||
|
||||
String uri()
|
||||
{
|
||||
return uri;
|
||||
}
|
||||
|
||||
public boolean equals(Object obj)
|
||||
{
|
||||
if(!(obj instanceof QName)) return false;
|
||||
return equals((QName)obj);
|
||||
}
|
||||
|
||||
protected Object equivalentValues(Object value)
|
||||
{
|
||||
if(!(value instanceof QName)) return Scriptable.NOT_FOUND;
|
||||
boolean result = equals((QName)value);
|
||||
return result ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
|
||||
private boolean equals(QName q)
|
||||
{
|
||||
boolean result;
|
||||
|
||||
if (uri == null) {
|
||||
result = q.uri == null && localName.equals(q.localName);
|
||||
} else {
|
||||
result = uri.equals(q.uri) && localName.equals(q.localName);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getClassName ()
|
||||
{
|
||||
return "QName";
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param hint
|
||||
* @return
|
||||
*/
|
||||
public Object getDefaultValue (Class hint)
|
||||
{
|
||||
return toString();
|
||||
}
|
||||
|
||||
// #string_id_map#
|
||||
private static final int
|
||||
Id_localName = 1,
|
||||
Id_uri = 2,
|
||||
MAX_INSTANCE_ID = 2;
|
||||
|
||||
protected int getMaxInstanceId()
|
||||
{
|
||||
return super.getMaxInstanceId() + MAX_INSTANCE_ID;
|
||||
}
|
||||
|
||||
protected int findInstanceIdInfo(String s)
|
||||
{
|
||||
int id;
|
||||
// #generated# Last update: 2004-07-18 12:32:51 CEST
|
||||
L0: { id = 0; String X = null;
|
||||
int s_length = s.length();
|
||||
if (s_length==3) { X="uri";id=Id_uri; }
|
||||
else if (s_length==9) { X="localName";id=Id_localName; }
|
||||
if (X!=null && X!=s && !X.equals(s)) id = 0;
|
||||
}
|
||||
// #/generated#
|
||||
|
||||
if (id == 0) return super.findInstanceIdInfo(s);
|
||||
|
||||
int attr;
|
||||
switch (id) {
|
||||
case Id_localName:
|
||||
case Id_uri:
|
||||
attr = PERMANENT | READONLY;
|
||||
break;
|
||||
default: throw new IllegalStateException();
|
||||
}
|
||||
return instanceIdInfo(attr, super.getMaxInstanceId() + id);
|
||||
}
|
||||
// #/string_id_map#
|
||||
|
||||
protected String getInstanceIdName(int id)
|
||||
{
|
||||
switch (id - super.getMaxInstanceId()) {
|
||||
case Id_localName: return "localName";
|
||||
case Id_uri: return "uri";
|
||||
}
|
||||
return super.getInstanceIdName(id);
|
||||
}
|
||||
|
||||
protected Object getInstanceIdValue(int id)
|
||||
{
|
||||
switch (id - super.getMaxInstanceId()) {
|
||||
case Id_localName: return localName;
|
||||
case Id_uri: return uri;
|
||||
}
|
||||
return super.getInstanceIdValue(id);
|
||||
}
|
||||
|
||||
// #string_id_map#
|
||||
private static final int
|
||||
Id_constructor = 1,
|
||||
Id_toString = 2,
|
||||
Id_toSource = 3,
|
||||
MAX_PROTOTYPE_ID = 3;
|
||||
|
||||
protected int findPrototypeId(String s)
|
||||
{
|
||||
int id;
|
||||
// #generated# Last update: 2004-08-21 12:45:13 CEST
|
||||
L0: { id = 0; String X = null; int c;
|
||||
int s_length = s.length();
|
||||
if (s_length==8) {
|
||||
c=s.charAt(3);
|
||||
if (c=='o') { X="toSource";id=Id_toSource; }
|
||||
else if (c=='t') { X="toString";id=Id_toString; }
|
||||
}
|
||||
else if (s_length==11) { X="constructor";id=Id_constructor; }
|
||||
if (X!=null && X!=s && !X.equals(s)) id = 0;
|
||||
}
|
||||
// #/generated#
|
||||
return id;
|
||||
}
|
||||
// #/string_id_map#
|
||||
|
||||
protected void initPrototypeId(int id)
|
||||
{
|
||||
String s;
|
||||
int arity;
|
||||
switch (id) {
|
||||
case Id_constructor: arity=2; s="constructor"; break;
|
||||
case Id_toString: arity=0; s="toString"; break;
|
||||
case Id_toSource: arity=0; s="toSource"; break;
|
||||
default: throw new IllegalArgumentException(String.valueOf(id));
|
||||
}
|
||||
initPrototypeMethod(QNAME_TAG, id, s, arity);
|
||||
}
|
||||
|
||||
public Object execIdCall(IdFunctionObject f,
|
||||
Context cx,
|
||||
Scriptable scope,
|
||||
Scriptable thisObj,
|
||||
Object[] args)
|
||||
{
|
||||
if (!f.hasTag(QNAME_TAG)) {
|
||||
return super.execIdCall(f, cx, scope, thisObj, args);
|
||||
}
|
||||
int id = f.methodId();
|
||||
switch (id) {
|
||||
case Id_constructor:
|
||||
return jsConstructor(cx, (thisObj == null), args);
|
||||
case Id_toString:
|
||||
return realThis(thisObj, f).toString();
|
||||
case Id_toSource:
|
||||
return realThis(thisObj, f).js_toSource();
|
||||
}
|
||||
throw new IllegalArgumentException(String.valueOf(id));
|
||||
}
|
||||
|
||||
private QName realThis(Scriptable thisObj, IdFunctionObject f)
|
||||
{
|
||||
if(!(thisObj instanceof QName))
|
||||
throw incompatibleCallError(f);
|
||||
return (QName)thisObj;
|
||||
}
|
||||
|
||||
private Object jsConstructor(Context cx, boolean inNewExpr, Object[] args)
|
||||
{
|
||||
if (!inNewExpr && args.length == 1) {
|
||||
return lib.castToQName(cx, args[0]);
|
||||
}
|
||||
if (args.length == 0) {
|
||||
return lib.constructQName(cx, Undefined.instance);
|
||||
} else if (args.length == 1) {
|
||||
return lib.constructQName(cx, args[0]);
|
||||
} else {
|
||||
return lib.constructQName(cx, args[0], args[1]);
|
||||
}
|
||||
}
|
||||
|
||||
private String js_toSource()
|
||||
{
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append('(');
|
||||
toSourceImpl(uri, localName, prefix, sb);
|
||||
sb.append(')');
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static void toSourceImpl(String uri, String localName,
|
||||
String prefix, StringBuffer sb)
|
||||
{
|
||||
sb.append("new QName(");
|
||||
if (uri == null && prefix == null) {
|
||||
if (!"*".equals(localName)) {
|
||||
sb.append("null, ");
|
||||
}
|
||||
} else {
|
||||
Namespace.toSourceImpl(prefix, uri, sb);
|
||||
sb.append(", ");
|
||||
}
|
||||
sb.append('\'');
|
||||
sb.append(ScriptRuntime.escapeString(localName, '\''));
|
||||
sb.append("')");
|
||||
}
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,269 +0,0 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Igor Bukanov
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
package org.mozilla.javascript.xml.impl.xmlbeans;
|
||||
|
||||
import org.mozilla.javascript.*;
|
||||
|
||||
class XMLCtor extends IdFunctionObject
|
||||
{
|
||||
static final long serialVersionUID = -8708195078359817341L;
|
||||
|
||||
private static final Object XMLCTOR_TAG = "XMLCtor";
|
||||
|
||||
private XMLLibImpl lib;
|
||||
|
||||
XMLCtor(XML xml, Object tag, int id, int arity)
|
||||
{
|
||||
super(xml, tag, id, arity);
|
||||
this.lib = xml.lib;
|
||||
activatePrototypeMap(MAX_FUNCTION_ID);
|
||||
}
|
||||
|
||||
private void writeSetting(Scriptable target)
|
||||
{
|
||||
for (int i = 1; i <= MAX_INSTANCE_ID; ++i) {
|
||||
int id = super.getMaxInstanceId() + i;
|
||||
String name = getInstanceIdName(id);
|
||||
Object value = getInstanceIdValue(id);
|
||||
ScriptableObject.putProperty(target, name, value);
|
||||
}
|
||||
}
|
||||
|
||||
private void readSettings(Scriptable source)
|
||||
{
|
||||
for (int i = 1; i <= MAX_INSTANCE_ID; ++i) {
|
||||
int id = super.getMaxInstanceId() + i;
|
||||
String name = getInstanceIdName(id);
|
||||
Object value = ScriptableObject.getProperty(source, name);
|
||||
if (value == Scriptable.NOT_FOUND) {
|
||||
continue;
|
||||
}
|
||||
switch (i) {
|
||||
case Id_ignoreComments:
|
||||
case Id_ignoreProcessingInstructions:
|
||||
case Id_ignoreWhitespace:
|
||||
case Id_prettyPrinting:
|
||||
if (!(value instanceof Boolean)) {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case Id_prettyIndent:
|
||||
if (!(value instanceof Number)) {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
setInstanceIdValue(id, value);
|
||||
}
|
||||
}
|
||||
|
||||
// #string_id_map#
|
||||
|
||||
private static final int
|
||||
Id_ignoreComments = 1,
|
||||
Id_ignoreProcessingInstructions = 2,
|
||||
Id_ignoreWhitespace = 3,
|
||||
Id_prettyIndent = 4,
|
||||
Id_prettyPrinting = 5,
|
||||
|
||||
MAX_INSTANCE_ID = 5;
|
||||
|
||||
protected int getMaxInstanceId()
|
||||
{
|
||||
return super.getMaxInstanceId() + MAX_INSTANCE_ID;
|
||||
}
|
||||
|
||||
protected int findInstanceIdInfo(String s) {
|
||||
int id;
|
||||
// #generated# Last update: 2004-07-19 13:03:52 CEST
|
||||
L0: { id = 0; String X = null; int c;
|
||||
L: switch (s.length()) {
|
||||
case 12: X="prettyIndent";id=Id_prettyIndent; break L;
|
||||
case 14: c=s.charAt(0);
|
||||
if (c=='i') { X="ignoreComments";id=Id_ignoreComments; }
|
||||
else if (c=='p') { X="prettyPrinting";id=Id_prettyPrinting; }
|
||||
break L;
|
||||
case 16: X="ignoreWhitespace";id=Id_ignoreWhitespace; break L;
|
||||
case 28: X="ignoreProcessingInstructions";id=Id_ignoreProcessingInstructions; break L;
|
||||
}
|
||||
if (X!=null && X!=s && !X.equals(s)) id = 0;
|
||||
}
|
||||
// #/generated#
|
||||
|
||||
if (id == 0) return super.findInstanceIdInfo(s);
|
||||
|
||||
int attr;
|
||||
switch (id) {
|
||||
case Id_ignoreComments:
|
||||
case Id_ignoreProcessingInstructions:
|
||||
case Id_ignoreWhitespace:
|
||||
case Id_prettyIndent:
|
||||
case Id_prettyPrinting:
|
||||
attr = PERMANENT | DONTENUM;
|
||||
break;
|
||||
default: throw new IllegalStateException();
|
||||
}
|
||||
return instanceIdInfo(attr, super.getMaxInstanceId() + id);
|
||||
}
|
||||
|
||||
// #/string_id_map#
|
||||
|
||||
protected String getInstanceIdName(int id)
|
||||
{
|
||||
switch (id - super.getMaxInstanceId()) {
|
||||
case Id_ignoreComments: return "ignoreComments";
|
||||
case Id_ignoreProcessingInstructions: return "ignoreProcessingInstructions";
|
||||
case Id_ignoreWhitespace: return "ignoreWhitespace";
|
||||
case Id_prettyIndent: return "prettyIndent";
|
||||
case Id_prettyPrinting: return "prettyPrinting";
|
||||
}
|
||||
return super.getInstanceIdName(id);
|
||||
}
|
||||
|
||||
protected Object getInstanceIdValue(int id)
|
||||
{
|
||||
switch (id - super.getMaxInstanceId()) {
|
||||
case Id_ignoreComments:
|
||||
return ScriptRuntime.wrapBoolean(lib.ignoreComments);
|
||||
case Id_ignoreProcessingInstructions:
|
||||
return ScriptRuntime.wrapBoolean(lib.ignoreProcessingInstructions);
|
||||
case Id_ignoreWhitespace:
|
||||
return ScriptRuntime.wrapBoolean(lib.ignoreWhitespace);
|
||||
case Id_prettyIndent:
|
||||
return ScriptRuntime.wrapInt(lib.prettyIndent);
|
||||
case Id_prettyPrinting:
|
||||
return ScriptRuntime.wrapBoolean(lib.prettyPrinting);
|
||||
}
|
||||
return super.getInstanceIdValue(id);
|
||||
}
|
||||
|
||||
protected void setInstanceIdValue(int id, Object value)
|
||||
{
|
||||
switch (id - super.getMaxInstanceId()) {
|
||||
case Id_ignoreComments:
|
||||
lib.ignoreComments = ScriptRuntime.toBoolean(value);
|
||||
return;
|
||||
case Id_ignoreProcessingInstructions:
|
||||
lib.ignoreProcessingInstructions = ScriptRuntime.toBoolean(value);
|
||||
return;
|
||||
case Id_ignoreWhitespace:
|
||||
lib.ignoreWhitespace = ScriptRuntime.toBoolean(value);
|
||||
return;
|
||||
case Id_prettyIndent:
|
||||
lib.prettyIndent = ScriptRuntime.toInt32(value);
|
||||
return;
|
||||
case Id_prettyPrinting:
|
||||
lib.prettyPrinting = ScriptRuntime.toBoolean(value);
|
||||
return;
|
||||
}
|
||||
super.setInstanceIdValue(id, value);
|
||||
}
|
||||
|
||||
// #string_id_map#
|
||||
private static final int
|
||||
Id_defaultSettings = 1,
|
||||
Id_settings = 2,
|
||||
Id_setSettings = 3,
|
||||
MAX_FUNCTION_ID = 3;
|
||||
|
||||
protected int findPrototypeId(String s)
|
||||
{
|
||||
int id;
|
||||
// #generated# Last update: 2004-07-19 13:03:52 CEST
|
||||
L0: { id = 0; String X = null;
|
||||
int s_length = s.length();
|
||||
if (s_length==8) { X="settings";id=Id_settings; }
|
||||
else if (s_length==11) { X="setSettings";id=Id_setSettings; }
|
||||
else if (s_length==15) { X="defaultSettings";id=Id_defaultSettings; }
|
||||
if (X!=null && X!=s && !X.equals(s)) id = 0;
|
||||
}
|
||||
// #/generated#
|
||||
return id;
|
||||
}
|
||||
// #/string_id_map#
|
||||
|
||||
protected void initPrototypeId(int id)
|
||||
{
|
||||
String s;
|
||||
int arity;
|
||||
switch (id) {
|
||||
case Id_defaultSettings: arity=0; s="defaultSettings"; break;
|
||||
case Id_settings: arity=0; s="settings"; break;
|
||||
case Id_setSettings: arity=1; s="setSettings"; break;
|
||||
default: throw new IllegalArgumentException(String.valueOf(id));
|
||||
}
|
||||
initPrototypeMethod(XMLCTOR_TAG, id, s, arity);
|
||||
}
|
||||
|
||||
public Object execIdCall(IdFunctionObject f, Context cx, Scriptable scope,
|
||||
Scriptable thisObj, Object[] args)
|
||||
{
|
||||
if (!f.hasTag(XMLCTOR_TAG)) {
|
||||
return super.execIdCall(f, cx, scope, thisObj, args);
|
||||
}
|
||||
int id = f.methodId();
|
||||
switch (id) {
|
||||
case Id_defaultSettings: {
|
||||
lib.defaultSettings();
|
||||
Scriptable obj = cx.newObject(scope);
|
||||
writeSetting(obj);
|
||||
return obj;
|
||||
}
|
||||
case Id_settings: {
|
||||
Scriptable obj = cx.newObject(scope);
|
||||
writeSetting(obj);
|
||||
return obj;
|
||||
}
|
||||
case Id_setSettings: {
|
||||
if (args.length == 0
|
||||
|| args[0] == null
|
||||
|| args[0] == Undefined.instance)
|
||||
{
|
||||
lib.defaultSettings();
|
||||
} else if (args[0] instanceof Scriptable) {
|
||||
readSettings((Scriptable)args[0]);
|
||||
}
|
||||
return Undefined.instance;
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException(String.valueOf(id));
|
||||
}
|
||||
}
|
||||
@@ -1,754 +0,0 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Igor Bukanov
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
package org.mozilla.javascript.xml.impl.xmlbeans;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import org.mozilla.javascript.*;
|
||||
import org.mozilla.javascript.xml.*;
|
||||
|
||||
import org.apache.xmlbeans.XmlCursor;
|
||||
import org.apache.xmlbeans.XmlObject;
|
||||
|
||||
public final class XMLLibImpl extends XMLLib implements Serializable
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Scriptable globalScope;
|
||||
|
||||
XML xmlPrototype;
|
||||
XMLList xmlListPrototype;
|
||||
Namespace namespacePrototype;
|
||||
QName qnamePrototype;
|
||||
|
||||
|
||||
// Environment settings...
|
||||
boolean ignoreComments;
|
||||
boolean ignoreProcessingInstructions;
|
||||
boolean ignoreWhitespace;
|
||||
boolean prettyPrinting;
|
||||
int prettyIndent;
|
||||
|
||||
Scriptable globalScope()
|
||||
{
|
||||
return globalScope;
|
||||
}
|
||||
|
||||
private XMLLibImpl(Scriptable globalScope)
|
||||
{
|
||||
this.globalScope = globalScope;
|
||||
defaultSettings();
|
||||
}
|
||||
|
||||
public static void init(Context cx, Scriptable scope, boolean sealed)
|
||||
{
|
||||
// To force LinkageError if XmlObject is not available
|
||||
XmlObject.class.getName();
|
||||
|
||||
XMLLibImpl lib = new XMLLibImpl(scope);
|
||||
XMLLib bound = lib.bindToScope(scope);
|
||||
if (bound == lib) {
|
||||
lib.exportToScope(sealed);
|
||||
}
|
||||
}
|
||||
|
||||
private void exportToScope(boolean sealed)
|
||||
{
|
||||
xmlPrototype = XML.createEmptyXML(this);
|
||||
xmlListPrototype = new XMLList(this);
|
||||
namespacePrototype = new Namespace(this, "", "");
|
||||
qnamePrototype = new QName(this, "", "", "");
|
||||
|
||||
xmlPrototype.exportAsJSClass(sealed);
|
||||
xmlListPrototype.exportAsJSClass(sealed);
|
||||
namespacePrototype.exportAsJSClass(sealed);
|
||||
qnamePrototype.exportAsJSClass(sealed);
|
||||
}
|
||||
|
||||
void defaultSettings()
|
||||
{
|
||||
ignoreComments = true;
|
||||
ignoreProcessingInstructions = true;
|
||||
ignoreWhitespace = true;
|
||||
prettyPrinting = true;
|
||||
prettyIndent = 2;
|
||||
}
|
||||
|
||||
XMLName toAttributeName(Context cx, Object nameValue)
|
||||
{
|
||||
String uri;
|
||||
String localName;
|
||||
|
||||
if (nameValue instanceof String) {
|
||||
uri = "";
|
||||
localName = (String)nameValue;
|
||||
} else if (nameValue instanceof XMLName) {
|
||||
XMLName xmlName = (XMLName)nameValue;
|
||||
if (!xmlName.isAttributeName()) {
|
||||
xmlName.setAttributeName();
|
||||
}
|
||||
return xmlName;
|
||||
} else if (nameValue instanceof QName) {
|
||||
QName qname = (QName)nameValue;
|
||||
uri = qname.uri();
|
||||
localName = qname.localName();
|
||||
} else if (nameValue instanceof Boolean
|
||||
|| nameValue instanceof Number
|
||||
|| nameValue == Undefined.instance
|
||||
|| nameValue == null)
|
||||
{
|
||||
throw badXMLName(nameValue);
|
||||
} else {
|
||||
uri = "";
|
||||
localName = ScriptRuntime.toString(nameValue);
|
||||
}
|
||||
XMLName xmlName = XMLName.formProperty(uri, localName);
|
||||
xmlName.setAttributeName();
|
||||
return xmlName;
|
||||
}
|
||||
|
||||
private static RuntimeException badXMLName(Object value)
|
||||
{
|
||||
String msg;
|
||||
if (value instanceof Number) {
|
||||
msg = "Can not construct XML name from number: ";
|
||||
} else if (value instanceof Boolean) {
|
||||
msg = "Can not construct XML name from boolean: ";
|
||||
} else if (value == Undefined.instance || value == null) {
|
||||
msg = "Can not construct XML name from ";
|
||||
} else {
|
||||
throw new IllegalArgumentException(value.toString());
|
||||
}
|
||||
return ScriptRuntime.typeError(msg+ScriptRuntime.toString(value));
|
||||
}
|
||||
|
||||
XMLName toXMLName(Context cx, Object nameValue)
|
||||
{
|
||||
XMLName result;
|
||||
|
||||
if (nameValue instanceof XMLName) {
|
||||
result = (XMLName)nameValue;
|
||||
} else if (nameValue instanceof QName) {
|
||||
QName qname = (QName)nameValue;
|
||||
result = XMLName.formProperty(qname.uri(), qname.localName());
|
||||
} else if (nameValue instanceof String) {
|
||||
result = toXMLNameFromString(cx, (String)nameValue);
|
||||
} else if (nameValue instanceof Boolean
|
||||
|| nameValue instanceof Number
|
||||
|| nameValue == Undefined.instance
|
||||
|| nameValue == null)
|
||||
{
|
||||
throw badXMLName(nameValue);
|
||||
} else {
|
||||
String name = ScriptRuntime.toString(nameValue);
|
||||
result = toXMLNameFromString(cx, name);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* If value represents Uint32 index, make it available through
|
||||
* ScriptRuntime.lastUint32Result(cx) and return null.
|
||||
* Otherwise return the same value as toXMLName(cx, value).
|
||||
*/
|
||||
XMLName toXMLNameOrIndex(Context cx, Object value)
|
||||
{
|
||||
XMLName result;
|
||||
|
||||
if (value instanceof XMLName) {
|
||||
result = (XMLName)value;
|
||||
} else if (value instanceof String) {
|
||||
String str = (String)value;
|
||||
long test = ScriptRuntime.testUint32String(str);
|
||||
if (test >= 0) {
|
||||
ScriptRuntime.storeUint32Result(cx, test);
|
||||
result = null;
|
||||
} else {
|
||||
result = toXMLNameFromString(cx, str);
|
||||
}
|
||||
} else if (value instanceof Number) {
|
||||
double d = ((Number)value).doubleValue();
|
||||
long l = (long)d;
|
||||
if (l == d && 0 <= l && l <= 0xFFFFFFFFL) {
|
||||
ScriptRuntime.storeUint32Result(cx, l);
|
||||
result = null;
|
||||
} else {
|
||||
throw badXMLName(value);
|
||||
}
|
||||
} else if (value instanceof QName) {
|
||||
QName qname = (QName)value;
|
||||
String uri = qname.uri();
|
||||
boolean number = false;
|
||||
result = null;
|
||||
if (uri != null && uri.length() == 0) {
|
||||
// Only in this case qname.toString() can resemble uint32
|
||||
long test = ScriptRuntime.testUint32String(uri);
|
||||
if (test >= 0) {
|
||||
ScriptRuntime.storeUint32Result(cx, test);
|
||||
number = true;
|
||||
}
|
||||
}
|
||||
if (!number) {
|
||||
result = XMLName.formProperty(uri, qname.localName());
|
||||
}
|
||||
} else if (value instanceof Boolean
|
||||
|| value == Undefined.instance
|
||||
|| value == null)
|
||||
{
|
||||
throw badXMLName(value);
|
||||
} else {
|
||||
String str = ScriptRuntime.toString(value);
|
||||
long test = ScriptRuntime.testUint32String(str);
|
||||
if (test >= 0) {
|
||||
ScriptRuntime.storeUint32Result(cx, test);
|
||||
result = null;
|
||||
} else {
|
||||
result = toXMLNameFromString(cx, str);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
XMLName toXMLNameFromString(Context cx, String name)
|
||||
{
|
||||
if (name == null)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
int l = name.length();
|
||||
if (l != 0) {
|
||||
char firstChar = name.charAt(0);
|
||||
if (firstChar == '*') {
|
||||
if (l == 1) {
|
||||
return XMLName.formStar();
|
||||
}
|
||||
} else if (firstChar == '@') {
|
||||
XMLName xmlName = XMLName.formProperty("", name.substring(1));
|
||||
xmlName.setAttributeName();
|
||||
return xmlName;
|
||||
}
|
||||
}
|
||||
|
||||
String uri = getDefaultNamespaceURI(cx);
|
||||
|
||||
return XMLName.formProperty(uri, name);
|
||||
}
|
||||
|
||||
Namespace constructNamespace(Context cx, Object uriValue)
|
||||
{
|
||||
String prefix;
|
||||
String uri;
|
||||
|
||||
if (uriValue instanceof Namespace) {
|
||||
Namespace ns = (Namespace)uriValue;
|
||||
prefix = ns.prefix();
|
||||
uri = ns.uri();
|
||||
} else if (uriValue instanceof QName) {
|
||||
QName qname = (QName)uriValue;
|
||||
uri = qname.uri();
|
||||
if (uri != null) {
|
||||
prefix = qname.prefix();
|
||||
} else {
|
||||
uri = qname.toString();
|
||||
prefix = null;
|
||||
}
|
||||
} else {
|
||||
uri = ScriptRuntime.toString(uriValue);
|
||||
prefix = (uri.length() == 0) ? "" : null;
|
||||
}
|
||||
|
||||
return new Namespace(this, prefix, uri);
|
||||
}
|
||||
|
||||
Namespace castToNamespace(Context cx, Object namescapeObj)
|
||||
{
|
||||
if (namescapeObj instanceof Namespace) {
|
||||
return (Namespace)namescapeObj;
|
||||
}
|
||||
return constructNamespace(cx, namescapeObj);
|
||||
}
|
||||
|
||||
Namespace constructNamespace(Context cx)
|
||||
{
|
||||
return new Namespace(this, "", "");
|
||||
}
|
||||
|
||||
public Namespace constructNamespace(Context cx, Object prefixValue,
|
||||
Object uriValue)
|
||||
{
|
||||
String prefix;
|
||||
String uri;
|
||||
|
||||
if (uriValue instanceof QName) {
|
||||
QName qname = (QName)uriValue;
|
||||
uri = qname.uri();
|
||||
if (uri == null) {
|
||||
uri = qname.toString();
|
||||
}
|
||||
} else {
|
||||
uri = ScriptRuntime.toString(uriValue);
|
||||
}
|
||||
|
||||
if (uri.length() == 0) {
|
||||
if (prefixValue == Undefined.instance) {
|
||||
prefix = "";
|
||||
} else {
|
||||
prefix = ScriptRuntime.toString(prefixValue);
|
||||
if (prefix.length() != 0) {
|
||||
throw ScriptRuntime.typeError(
|
||||
"Illegal prefix '"+prefix+"' for 'no namespace'.");
|
||||
}
|
||||
}
|
||||
} else if (prefixValue == Undefined.instance) {
|
||||
prefix = "";
|
||||
} else if (!isXMLName(cx, prefixValue)) {
|
||||
prefix = "";
|
||||
} else {
|
||||
prefix = ScriptRuntime.toString(prefixValue);
|
||||
}
|
||||
|
||||
return new Namespace(this, prefix, uri);
|
||||
}
|
||||
|
||||
String getDefaultNamespaceURI(Context cx)
|
||||
{
|
||||
String uri = "";
|
||||
if (cx == null) {
|
||||
cx = Context.getCurrentContext();
|
||||
}
|
||||
if (cx != null) {
|
||||
Object ns = ScriptRuntime.searchDefaultNamespace(cx);
|
||||
if (ns != null) {
|
||||
if (ns instanceof Namespace) {
|
||||
uri = ((Namespace)ns).uri();
|
||||
} else {
|
||||
// Should not happen but for now it could
|
||||
// due to bad searchDefaultNamespace implementation.
|
||||
}
|
||||
}
|
||||
}
|
||||
return uri;
|
||||
}
|
||||
|
||||
Namespace getDefaultNamespace(Context cx)
|
||||
{
|
||||
if (cx == null) {
|
||||
cx = Context.getCurrentContext();
|
||||
if (cx == null) {
|
||||
return namespacePrototype;
|
||||
}
|
||||
}
|
||||
|
||||
Namespace result;
|
||||
Object ns = ScriptRuntime.searchDefaultNamespace(cx);
|
||||
if (ns == null) {
|
||||
result = namespacePrototype;
|
||||
} else {
|
||||
if (ns instanceof Namespace) {
|
||||
result = (Namespace)ns;
|
||||
} else {
|
||||
// Should not happen but for now it could
|
||||
// due to bad searchDefaultNamespace implementation.
|
||||
result = namespacePrototype;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
QName castToQName(Context cx, Object qnameValue)
|
||||
{
|
||||
if (qnameValue instanceof QName) {
|
||||
return (QName)qnameValue;
|
||||
}
|
||||
return constructQName(cx, qnameValue);
|
||||
}
|
||||
|
||||
QName constructQName(Context cx, Object nameValue)
|
||||
{
|
||||
QName result;
|
||||
|
||||
if (nameValue instanceof QName) {
|
||||
QName qname = (QName)nameValue;
|
||||
result = new QName(this, qname.uri(), qname.localName(),
|
||||
qname.prefix());
|
||||
} else {
|
||||
String localName = ScriptRuntime.toString(nameValue);
|
||||
result = constructQNameFromString(cx, localName);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Optimized version of constructQName for String type
|
||||
*/
|
||||
QName constructQNameFromString(Context cx, String localName)
|
||||
{
|
||||
if (localName == null)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
String uri;
|
||||
String prefix;
|
||||
|
||||
if ("*".equals(localName)) {
|
||||
uri = null;
|
||||
prefix = null;
|
||||
} else {
|
||||
Namespace ns = getDefaultNamespace(cx);
|
||||
uri = ns.uri();
|
||||
prefix = ns.prefix();
|
||||
}
|
||||
|
||||
return new QName(this, uri, localName, prefix);
|
||||
}
|
||||
|
||||
QName constructQName(Context cx, Object namespaceValue, Object nameValue)
|
||||
{
|
||||
String uri;
|
||||
String localName;
|
||||
String prefix;
|
||||
|
||||
if (nameValue instanceof QName) {
|
||||
QName qname = (QName)nameValue;
|
||||
localName = qname.localName();
|
||||
} else {
|
||||
localName = ScriptRuntime.toString(nameValue);
|
||||
}
|
||||
|
||||
Namespace ns;
|
||||
if (namespaceValue == Undefined.instance) {
|
||||
if ("*".equals(localName)) {
|
||||
ns = null;
|
||||
} else {
|
||||
ns = getDefaultNamespace(cx);
|
||||
}
|
||||
} else if (namespaceValue == null) {
|
||||
ns = null;
|
||||
} else if (namespaceValue instanceof Namespace) {
|
||||
ns = (Namespace)namespaceValue;
|
||||
} else {
|
||||
ns = constructNamespace(cx, namespaceValue);
|
||||
}
|
||||
|
||||
if (ns == null) {
|
||||
uri = null;
|
||||
prefix = null;
|
||||
} else {
|
||||
uri = ns.uri();
|
||||
prefix = ns.prefix();
|
||||
}
|
||||
|
||||
return new QName(this, uri, localName, prefix);
|
||||
}
|
||||
|
||||
Object addXMLObjects(Context cx, XMLObject obj1, XMLObject obj2)
|
||||
{
|
||||
XMLList listToAdd = new XMLList(this);
|
||||
|
||||
if (obj1 instanceof XMLList) {
|
||||
XMLList list1 = (XMLList)obj1;
|
||||
if (list1.length() == 1) {
|
||||
listToAdd.addToList(list1.item(0));
|
||||
} else {
|
||||
// Might be xmlFragment + xmlFragment + xmlFragment + ...;
|
||||
// then the result will be an XMLList which we want to be an
|
||||
// rValue and allow it to be assigned to an lvalue.
|
||||
listToAdd = new XMLList(this, obj1);
|
||||
}
|
||||
} else {
|
||||
listToAdd.addToList(obj1);
|
||||
}
|
||||
|
||||
if (obj2 instanceof XMLList) {
|
||||
XMLList list2 = (XMLList)obj2;
|
||||
for (int i = 0; i < list2.length(); i++) {
|
||||
listToAdd.addToList(list2.item(i));
|
||||
}
|
||||
} else if (obj2 instanceof XML) {
|
||||
listToAdd.addToList(obj2);
|
||||
}
|
||||
|
||||
return listToAdd;
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
// Overriding XMLLib methods
|
||||
//
|
||||
//
|
||||
|
||||
/**
|
||||
* See E4X 13.1.2.1.
|
||||
*/
|
||||
public boolean isXMLName(Context cx, Object nameObj)
|
||||
{
|
||||
String name;
|
||||
try {
|
||||
name = ScriptRuntime.toString(nameObj);
|
||||
} catch (EcmaError ee) {
|
||||
if ("TypeError".equals(ee.getName())) {
|
||||
return false;
|
||||
}
|
||||
throw ee;
|
||||
}
|
||||
|
||||
// See http://w3.org/TR/xml-names11/#NT-NCName
|
||||
int length = name.length();
|
||||
if (length != 0) {
|
||||
if (isNCNameStartChar(name.charAt(0))) {
|
||||
for (int i = 1; i != length; ++i) {
|
||||
if (!isNCNameChar(name.charAt(i))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isNCNameStartChar(int c)
|
||||
{
|
||||
if ((c & ~0x7F) == 0) {
|
||||
// Optimize for ASCII and use A..Z < _ < a..z
|
||||
if (c >= 'a') {
|
||||
return c <= 'z';
|
||||
} else if (c >= 'A') {
|
||||
if (c <= 'Z') {
|
||||
return true;
|
||||
}
|
||||
return c == '_';
|
||||
}
|
||||
} else if ((c & ~0x1FFF) == 0) {
|
||||
return (0xC0 <= c && c <= 0xD6)
|
||||
|| (0xD8 <= c && c <= 0xF6)
|
||||
|| (0xF8 <= c && c <= 0x2FF)
|
||||
|| (0x370 <= c && c <= 0x37D)
|
||||
|| 0x37F <= c;
|
||||
}
|
||||
return (0x200C <= c && c <= 0x200D)
|
||||
|| (0x2070 <= c && c <= 0x218F)
|
||||
|| (0x2C00 <= c && c <= 0x2FEF)
|
||||
|| (0x3001 <= c && c <= 0xD7FF)
|
||||
|| (0xF900 <= c && c <= 0xFDCF)
|
||||
|| (0xFDF0 <= c && c <= 0xFFFD)
|
||||
|| (0x10000 <= c && c <= 0xEFFFF);
|
||||
}
|
||||
|
||||
private static boolean isNCNameChar(int c)
|
||||
{
|
||||
if ((c & ~0x7F) == 0) {
|
||||
// Optimize for ASCII and use - < . < 0..9 < A..Z < _ < a..z
|
||||
if (c >= 'a') {
|
||||
return c <= 'z';
|
||||
} else if (c >= 'A') {
|
||||
if (c <= 'Z') {
|
||||
return true;
|
||||
}
|
||||
return c == '_';
|
||||
} else if (c >= '0') {
|
||||
return c <= '9';
|
||||
} else {
|
||||
return c == '-' || c == '.';
|
||||
}
|
||||
} else if ((c & ~0x1FFF) == 0) {
|
||||
return isNCNameStartChar(c) || c == 0xB7
|
||||
|| (0x300 <= c && c <= 0x36F);
|
||||
}
|
||||
return isNCNameStartChar(c) || (0x203F <= c && c <= 0x2040);
|
||||
}
|
||||
|
||||
XMLName toQualifiedName(Context cx, Object namespaceValue,
|
||||
Object nameValue)
|
||||
{
|
||||
// This is duplication of constructQName(cx, namespaceValue, nameValue)
|
||||
// but for XMLName
|
||||
|
||||
String uri;
|
||||
String localName;
|
||||
|
||||
if (nameValue instanceof QName) {
|
||||
QName qname = (QName)nameValue;
|
||||
localName = qname.localName();
|
||||
} else {
|
||||
localName = ScriptRuntime.toString(nameValue);
|
||||
}
|
||||
|
||||
Namespace ns;
|
||||
if (namespaceValue == Undefined.instance) {
|
||||
if ("*".equals(localName)) {
|
||||
ns = null;
|
||||
} else {
|
||||
ns = getDefaultNamespace(cx);
|
||||
}
|
||||
} else if (namespaceValue == null) {
|
||||
ns = null;
|
||||
} else if (namespaceValue instanceof Namespace) {
|
||||
ns = (Namespace)namespaceValue;
|
||||
} else {
|
||||
ns = constructNamespace(cx, namespaceValue);
|
||||
}
|
||||
|
||||
if (ns == null) {
|
||||
uri = null;
|
||||
} else {
|
||||
uri = ns.uri();
|
||||
}
|
||||
|
||||
return XMLName.formProperty(uri, localName);
|
||||
}
|
||||
|
||||
public Ref nameRef(Context cx, Object name,
|
||||
Scriptable scope, int memberTypeFlags)
|
||||
{
|
||||
if ((memberTypeFlags & Node.ATTRIBUTE_FLAG) == 0) {
|
||||
// should only be called foir cases like @name or @[expr]
|
||||
throw Kit.codeBug();
|
||||
}
|
||||
XMLName xmlName = toAttributeName(cx, name);
|
||||
return xmlPrimaryReference(cx, xmlName, scope);
|
||||
}
|
||||
|
||||
public Ref nameRef(Context cx, Object namespace, Object name,
|
||||
Scriptable scope, int memberTypeFlags)
|
||||
{
|
||||
XMLName xmlName = toQualifiedName(cx, namespace, name);
|
||||
if ((memberTypeFlags & Node.ATTRIBUTE_FLAG) != 0) {
|
||||
if (!xmlName.isAttributeName()) {
|
||||
xmlName.setAttributeName();
|
||||
}
|
||||
}
|
||||
return xmlPrimaryReference(cx, xmlName, scope);
|
||||
}
|
||||
|
||||
private Ref xmlPrimaryReference(Context cx, XMLName xmlName,
|
||||
Scriptable scope)
|
||||
{
|
||||
XMLObjectImpl xmlObj;
|
||||
XMLObjectImpl firstXmlObject = null;
|
||||
for (;;) {
|
||||
// XML object can only present on scope chain as a wrapper
|
||||
// of XMLWithScope
|
||||
if (scope instanceof XMLWithScope) {
|
||||
xmlObj = (XMLObjectImpl)scope.getPrototype();
|
||||
if (xmlObj.hasXMLProperty(xmlName)) {
|
||||
break;
|
||||
}
|
||||
if (firstXmlObject == null) {
|
||||
firstXmlObject = xmlObj;
|
||||
}
|
||||
}
|
||||
scope = scope.getParentScope();
|
||||
if (scope == null) {
|
||||
xmlObj = firstXmlObject;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// xmlObj == null corresponds to undefined as the target of
|
||||
// the reference
|
||||
if (xmlObj != null) {
|
||||
xmlName.initXMLObject(xmlObj);
|
||||
}
|
||||
return xmlName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes the reserved characters in a value of an attribute
|
||||
*
|
||||
* @param value Unescaped text
|
||||
* @return The escaped text
|
||||
*/
|
||||
public String escapeAttributeValue(Object value)
|
||||
{
|
||||
String text = ScriptRuntime.toString(value);
|
||||
|
||||
if (text.length() == 0) return "";
|
||||
|
||||
XmlObject xo = XmlObject.Factory.newInstance();
|
||||
|
||||
XmlCursor cursor = xo.newCursor();
|
||||
cursor.toNextToken();
|
||||
cursor.beginElement("a");
|
||||
cursor.insertAttributeWithValue("a", text);
|
||||
cursor.dispose();
|
||||
|
||||
String elementText = xo.toString();
|
||||
int begin = elementText.indexOf('"');
|
||||
int end = elementText.lastIndexOf('"');
|
||||
return elementText.substring(begin + 1, end);
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes the reserved characters in a value of a text node
|
||||
*
|
||||
* @param value Unescaped text
|
||||
* @return The escaped text
|
||||
*/
|
||||
public String escapeTextValue(Object value)
|
||||
{
|
||||
if (value instanceof XMLObjectImpl) {
|
||||
return ((XMLObjectImpl)value).toXMLString(0);
|
||||
}
|
||||
|
||||
String text = ScriptRuntime.toString(value);
|
||||
|
||||
if (text.length() == 0) return text;
|
||||
|
||||
XmlObject xo = XmlObject.Factory.newInstance();
|
||||
|
||||
XmlCursor cursor = xo.newCursor();
|
||||
cursor.toNextToken();
|
||||
cursor.beginElement("a");
|
||||
cursor.insertChars(text);
|
||||
cursor.dispose();
|
||||
|
||||
String elementText = xo.toString();
|
||||
int begin = elementText.indexOf('>') + 1;
|
||||
int end = elementText.lastIndexOf('<');
|
||||
return (begin < end) ? elementText.substring(begin, end) : "";
|
||||
}
|
||||
|
||||
public Object toDefaultXmlNamespace(Context cx, Object uriValue)
|
||||
{
|
||||
return constructNamespace(cx, uriValue);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,171 +0,0 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Igor Bukanov
|
||||
* Milen Nankov
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
package org.mozilla.javascript.xml.impl.xmlbeans;
|
||||
|
||||
import org.mozilla.javascript.Context;
|
||||
import org.mozilla.javascript.Kit;
|
||||
import org.mozilla.javascript.Ref;
|
||||
import org.mozilla.javascript.ScriptRuntime;
|
||||
import org.mozilla.javascript.Undefined;
|
||||
|
||||
class XMLName extends Ref
|
||||
{
|
||||
static final long serialVersionUID = 3832176310755686977L;
|
||||
|
||||
private String uri;
|
||||
private String localName;
|
||||
private boolean isAttributeName;
|
||||
private boolean isDescendants;
|
||||
private XMLObjectImpl xmlObject;
|
||||
|
||||
private XMLName(String uri, String localName)
|
||||
{
|
||||
this.uri = uri;
|
||||
this.localName = localName;
|
||||
}
|
||||
|
||||
static XMLName formStar()
|
||||
{
|
||||
return new XMLName(null, "*");
|
||||
}
|
||||
|
||||
static XMLName formProperty(String uri, String localName)
|
||||
{
|
||||
return new XMLName(uri, localName);
|
||||
}
|
||||
|
||||
void initXMLObject(XMLObjectImpl xmlObject)
|
||||
{
|
||||
if (xmlObject == null) throw new IllegalArgumentException();
|
||||
if (this.xmlObject != null) throw new IllegalStateException();
|
||||
this.xmlObject = xmlObject;
|
||||
}
|
||||
|
||||
String uri()
|
||||
{
|
||||
return uri;
|
||||
}
|
||||
|
||||
String localName()
|
||||
{
|
||||
return localName;
|
||||
}
|
||||
|
||||
boolean isAttributeName()
|
||||
{
|
||||
return isAttributeName;
|
||||
}
|
||||
|
||||
void setAttributeName()
|
||||
{
|
||||
if (isAttributeName) throw new IllegalStateException();
|
||||
isAttributeName = true;
|
||||
}
|
||||
|
||||
boolean isDescendants()
|
||||
{
|
||||
return isDescendants;
|
||||
}
|
||||
|
||||
void setIsDescendants()
|
||||
{
|
||||
if (isDescendants) throw new IllegalStateException();
|
||||
isDescendants = true;
|
||||
}
|
||||
|
||||
public boolean has(Context cx)
|
||||
{
|
||||
if (xmlObject == null) {
|
||||
return false;
|
||||
}
|
||||
return xmlObject.hasXMLProperty(this);
|
||||
}
|
||||
|
||||
public Object get(Context cx)
|
||||
{
|
||||
if (xmlObject == null) {
|
||||
throw ScriptRuntime.undefReadError(Undefined.instance,
|
||||
toString());
|
||||
}
|
||||
return xmlObject.getXMLProperty(this);
|
||||
}
|
||||
|
||||
public Object set(Context cx, Object value)
|
||||
{
|
||||
if (xmlObject == null) {
|
||||
throw ScriptRuntime.undefWriteError(Undefined.instance,
|
||||
toString(),
|
||||
value);
|
||||
}
|
||||
// Assignment to descendants causes parse error on bad reference
|
||||
// and this should not be called
|
||||
if (isDescendants) throw Kit.codeBug();
|
||||
xmlObject.putXMLProperty(this, value);
|
||||
return value;
|
||||
}
|
||||
|
||||
public boolean delete(Context cx)
|
||||
{
|
||||
if (xmlObject == null) {
|
||||
return true;
|
||||
}
|
||||
xmlObject.deleteXMLProperty(this);
|
||||
return !xmlObject.hasXMLProperty(this);
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
//return qname.localName();
|
||||
StringBuffer buff = new StringBuffer();
|
||||
if (isDescendants) buff.append("..");
|
||||
if (isAttributeName) buff.append('@');
|
||||
if (uri == null) {
|
||||
buff.append('*');
|
||||
if(localName().equals("*")) {
|
||||
return buff.toString();
|
||||
}
|
||||
} else {
|
||||
buff.append('"').append(uri()).append('"');
|
||||
}
|
||||
buff.append(':').append(localName());
|
||||
return buff.toString();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,724 +0,0 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Igor Bukanov
|
||||
* Ethan Hugg
|
||||
* Terry Lucas
|
||||
* Milen Nankov
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
package org.mozilla.javascript.xml.impl.xmlbeans;
|
||||
|
||||
import org.mozilla.javascript.*;
|
||||
import org.mozilla.javascript.xml.*;
|
||||
|
||||
/**
|
||||
* This abstract class describes what all XML objects (XML, XMLList) should have in common.
|
||||
*
|
||||
* @see XML
|
||||
*/
|
||||
abstract class XMLObjectImpl extends XMLObject
|
||||
{
|
||||
private static final Object XMLOBJECT_TAG = "XMLObject";
|
||||
|
||||
protected final XMLLibImpl lib;
|
||||
protected boolean prototypeFlag;
|
||||
|
||||
protected XMLObjectImpl(XMLLibImpl lib, XMLObject prototype)
|
||||
{
|
||||
super(lib.globalScope(), prototype);
|
||||
this.lib = lib;
|
||||
}
|
||||
|
||||
/**
|
||||
* ecmaHas(cx, id) calls this after resolving when id to XMLName
|
||||
* and checking it is not Uint32 index.
|
||||
*/
|
||||
abstract boolean hasXMLProperty(XMLName name);
|
||||
|
||||
/**
|
||||
* ecmaGet(cx, id) calls this after resolving when id to XMLName
|
||||
* and checking it is not Uint32 index.
|
||||
*/
|
||||
abstract Object getXMLProperty(XMLName name);
|
||||
|
||||
/**
|
||||
* ecmaPut(cx, id, value) calls this after resolving when id to XMLName
|
||||
* and checking it is not Uint32 index.
|
||||
*/
|
||||
abstract void putXMLProperty(XMLName name, Object value);
|
||||
|
||||
/**
|
||||
* ecmaDelete(cx, id) calls this after resolving when id to XMLName
|
||||
* and checking it is not Uint32 index.
|
||||
*/
|
||||
abstract void deleteXMLProperty(XMLName name);
|
||||
|
||||
/**
|
||||
* Test XML equality with target the target.
|
||||
*/
|
||||
abstract boolean equivalentXml(Object target);
|
||||
|
||||
// Methods from section 12.4.4 in the spec
|
||||
abstract XML addNamespace(Namespace ns);
|
||||
abstract XML appendChild(Object xml);
|
||||
abstract XMLList attribute(XMLName xmlName);
|
||||
abstract XMLList attributes();
|
||||
abstract XMLList child(long index);
|
||||
abstract XMLList child(XMLName xmlName);
|
||||
abstract int childIndex();
|
||||
abstract XMLList children();
|
||||
abstract XMLList comments();
|
||||
abstract boolean contains(Object xml);
|
||||
abstract Object copy();
|
||||
abstract XMLList descendants(XMLName xmlName);
|
||||
abstract Object[] inScopeNamespaces();
|
||||
abstract XML insertChildAfter(Object child, Object xml);
|
||||
abstract XML insertChildBefore(Object child, Object xml);
|
||||
abstract boolean hasOwnProperty(XMLName xmlName);
|
||||
abstract boolean hasComplexContent();
|
||||
abstract boolean hasSimpleContent();
|
||||
abstract int length();
|
||||
abstract String localName();
|
||||
abstract QName name();
|
||||
abstract Object namespace(String prefix);
|
||||
abstract Object[] namespaceDeclarations();
|
||||
abstract Object nodeKind();
|
||||
abstract void normalize();
|
||||
abstract Object parent();
|
||||
abstract XML prependChild(Object xml);
|
||||
abstract Object processingInstructions(XMLName xmlName);
|
||||
abstract boolean propertyIsEnumerable(Object member);
|
||||
abstract XML removeNamespace(Namespace ns);
|
||||
abstract XML replace(long index, Object xml);
|
||||
abstract XML replace(XMLName name, Object xml);
|
||||
abstract XML setChildren(Object xml);
|
||||
abstract void setLocalName(String name);
|
||||
abstract void setName(QName xmlName);
|
||||
abstract void setNamespace(Namespace ns);
|
||||
abstract XMLList text();
|
||||
public abstract String toString();
|
||||
abstract String toSource(int indent);
|
||||
abstract String toXMLString(int indent);
|
||||
abstract Object valueOf();
|
||||
|
||||
/**
|
||||
* Extension to access native implementation from scripts
|
||||
*/
|
||||
abstract org.apache.xmlbeans.XmlObject getXmlObject();
|
||||
|
||||
protected abstract Object jsConstructor(Context cx, boolean inNewExpr,
|
||||
Object[] args);
|
||||
|
||||
|
||||
final Object getMethod(String id)
|
||||
{
|
||||
return super.get(id, this);
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
// Methods overriding ScriptableObject
|
||||
//
|
||||
//
|
||||
|
||||
public final Object getDefaultValue(Class hint)
|
||||
{
|
||||
return toString();
|
||||
}
|
||||
|
||||
public void delete(String name)
|
||||
{
|
||||
throw new IllegalArgumentException("String: [" + name + "]");
|
||||
}
|
||||
|
||||
/**
|
||||
* XMLObject always compare with any value and equivalentValues
|
||||
* never returns {@link Scriptable#NOT_FOUND} for them but rather
|
||||
* calls equivalentXml(value) and wrap the result as Boolean.
|
||||
*/
|
||||
protected final Object equivalentValues(Object value)
|
||||
{
|
||||
boolean result = equivalentXml(value);
|
||||
return result ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
// Methods overriding XMLObject
|
||||
//
|
||||
//
|
||||
|
||||
public final XMLLib lib()
|
||||
{
|
||||
return lib;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of ECMAScript [[Has]]
|
||||
*/
|
||||
public final boolean ecmaHas(Context cx, Object id)
|
||||
{
|
||||
if (cx == null) cx = Context.getCurrentContext();
|
||||
XMLName xmlName = lib.toXMLNameOrIndex(cx, id);
|
||||
if (xmlName == null) {
|
||||
long index = ScriptRuntime.lastUint32Result(cx);
|
||||
// XXX Fix this cast
|
||||
return has((int)index, this);
|
||||
}
|
||||
return hasXMLProperty(xmlName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of ECMAScript [[Get]]
|
||||
*/
|
||||
public final Object ecmaGet(Context cx, Object id)
|
||||
{
|
||||
if (cx == null) cx = Context.getCurrentContext();
|
||||
XMLName xmlName = lib.toXMLNameOrIndex(cx, id);
|
||||
if (xmlName == null) {
|
||||
long index = ScriptRuntime.lastUint32Result(cx);
|
||||
// XXX Fix this cast
|
||||
Object result = get((int)index, this);
|
||||
if (result == Scriptable.NOT_FOUND) {
|
||||
result = Undefined.instance;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
return getXMLProperty(xmlName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of ECMAScript [[Put]]
|
||||
*/
|
||||
public final void ecmaPut(Context cx, Object id, Object value)
|
||||
{
|
||||
if (cx == null) cx = Context.getCurrentContext();
|
||||
XMLName xmlName = lib.toXMLNameOrIndex(cx, id);
|
||||
if (xmlName == null) {
|
||||
long index = ScriptRuntime.lastUint32Result(cx);
|
||||
// XXX Fix this cast
|
||||
put((int)index, this, value);
|
||||
return;
|
||||
}
|
||||
putXMLProperty(xmlName, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of ECMAScript [[Delete]].
|
||||
*/
|
||||
public final boolean ecmaDelete(Context cx, Object id)
|
||||
{
|
||||
if (cx == null) cx = Context.getCurrentContext();
|
||||
XMLName xmlName = lib.toXMLNameOrIndex(cx, id);
|
||||
if (xmlName == null) {
|
||||
long index = ScriptRuntime.lastUint32Result(cx);
|
||||
// XXX Fix this
|
||||
delete((int)index);
|
||||
return true;
|
||||
}
|
||||
deleteXMLProperty(xmlName);
|
||||
return true;
|
||||
}
|
||||
|
||||
public Ref memberRef(Context cx, Object elem, int memberTypeFlags)
|
||||
{
|
||||
XMLName xmlName;
|
||||
if ((memberTypeFlags & Node.ATTRIBUTE_FLAG) != 0) {
|
||||
xmlName = lib.toAttributeName(cx, elem);
|
||||
} else {
|
||||
if ((memberTypeFlags & Node.DESCENDANTS_FLAG) == 0) {
|
||||
// Code generation would use ecma(Get|Has|Delete|Set) for
|
||||
// normal name idenrifiers so one ATTRIBUTE_FLAG
|
||||
// or DESCENDANTS_FLAG has to be set
|
||||
throw Kit.codeBug();
|
||||
}
|
||||
xmlName = lib.toXMLName(cx, elem);
|
||||
}
|
||||
if ((memberTypeFlags & Node.DESCENDANTS_FLAG) != 0) {
|
||||
xmlName.setIsDescendants();
|
||||
}
|
||||
xmlName.initXMLObject(this);
|
||||
return xmlName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic reference to implement x::ns, x.@ns::y, x..@ns::y etc.
|
||||
*/
|
||||
public Ref memberRef(Context cx, Object namespace, Object elem,
|
||||
int memberTypeFlags)
|
||||
{
|
||||
XMLName xmlName = lib.toQualifiedName(cx, namespace, elem);
|
||||
if ((memberTypeFlags & Node.ATTRIBUTE_FLAG) != 0) {
|
||||
if (!xmlName.isAttributeName()) {
|
||||
xmlName.setAttributeName();
|
||||
}
|
||||
}
|
||||
if ((memberTypeFlags & Node.DESCENDANTS_FLAG) != 0) {
|
||||
xmlName.setIsDescendants();
|
||||
}
|
||||
xmlName.initXMLObject(this);
|
||||
return xmlName;
|
||||
}
|
||||
|
||||
public NativeWith enterWith(Scriptable scope)
|
||||
{
|
||||
return new XMLWithScope(lib, scope, this);
|
||||
}
|
||||
|
||||
public NativeWith enterDotQuery(Scriptable scope)
|
||||
{
|
||||
XMLWithScope xws = new XMLWithScope(lib, scope, this);
|
||||
xws.initAsDotQuery();
|
||||
return xws;
|
||||
}
|
||||
|
||||
public final Object addValues(Context cx, boolean thisIsLeft,
|
||||
Object value)
|
||||
{
|
||||
if (value instanceof XMLObject) {
|
||||
XMLObject v1, v2;
|
||||
if (thisIsLeft) {
|
||||
v1 = this;
|
||||
v2 = (XMLObject)value;
|
||||
} else {
|
||||
v1 = (XMLObject)value;
|
||||
v2 = this;
|
||||
}
|
||||
return lib.addXMLObjects(cx, v1, v2);
|
||||
}
|
||||
if (value == Undefined.instance) {
|
||||
// both "xml + undefined" and "undefined + xml" gives String(xml)
|
||||
return ScriptRuntime.toString(this);
|
||||
}
|
||||
|
||||
return super.addValues(cx, thisIsLeft, value);
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
// IdScriptableObject machinery
|
||||
//
|
||||
//
|
||||
|
||||
final void exportAsJSClass(boolean sealed)
|
||||
{
|
||||
prototypeFlag = true;
|
||||
exportAsJSClass(MAX_PROTOTYPE_ID, lib.globalScope(), sealed);
|
||||
}
|
||||
|
||||
// #string_id_map#
|
||||
private final static int
|
||||
Id_constructor = 1,
|
||||
|
||||
Id_addNamespace = 2,
|
||||
Id_appendChild = 3,
|
||||
Id_attribute = 4,
|
||||
Id_attributes = 5,
|
||||
Id_child = 6,
|
||||
Id_childIndex = 7,
|
||||
Id_children = 8,
|
||||
Id_comments = 9,
|
||||
Id_contains = 10,
|
||||
Id_copy = 11,
|
||||
Id_descendants = 12,
|
||||
Id_inScopeNamespaces = 13,
|
||||
Id_insertChildAfter = 14,
|
||||
Id_insertChildBefore = 15,
|
||||
Id_hasOwnProperty = 16,
|
||||
Id_hasComplexContent = 17,
|
||||
Id_hasSimpleContent = 18,
|
||||
Id_length = 19,
|
||||
Id_localName = 20,
|
||||
Id_name = 21,
|
||||
Id_namespace = 22,
|
||||
Id_namespaceDeclarations = 23,
|
||||
Id_nodeKind = 24,
|
||||
Id_normalize = 25,
|
||||
Id_parent = 26,
|
||||
Id_prependChild = 27,
|
||||
Id_processingInstructions = 28,
|
||||
Id_propertyIsEnumerable = 29,
|
||||
Id_removeNamespace = 30,
|
||||
Id_replace = 31,
|
||||
Id_setChildren = 32,
|
||||
Id_setLocalName = 33,
|
||||
Id_setName = 34,
|
||||
Id_setNamespace = 35,
|
||||
Id_text = 36,
|
||||
Id_toString = 37,
|
||||
Id_toSource = 38,
|
||||
Id_toXMLString = 39,
|
||||
Id_valueOf = 40,
|
||||
|
||||
Id_getXmlObject = 41,
|
||||
|
||||
MAX_PROTOTYPE_ID = 41;
|
||||
|
||||
protected int findPrototypeId(String s)
|
||||
{
|
||||
int id;
|
||||
// #generated# Last update: 2004-11-10 15:38:11 CET
|
||||
L0: { id = 0; String X = null; int c;
|
||||
L: switch (s.length()) {
|
||||
case 4: c=s.charAt(0);
|
||||
if (c=='c') { X="copy";id=Id_copy; }
|
||||
else if (c=='n') { X="name";id=Id_name; }
|
||||
else if (c=='t') { X="text";id=Id_text; }
|
||||
break L;
|
||||
case 5: X="child";id=Id_child; break L;
|
||||
case 6: c=s.charAt(0);
|
||||
if (c=='l') { X="length";id=Id_length; }
|
||||
else if (c=='p') { X="parent";id=Id_parent; }
|
||||
break L;
|
||||
case 7: c=s.charAt(0);
|
||||
if (c=='r') { X="replace";id=Id_replace; }
|
||||
else if (c=='s') { X="setName";id=Id_setName; }
|
||||
else if (c=='v') { X="valueOf";id=Id_valueOf; }
|
||||
break L;
|
||||
case 8: switch (s.charAt(4)) {
|
||||
case 'K': X="nodeKind";id=Id_nodeKind; break L;
|
||||
case 'a': X="contains";id=Id_contains; break L;
|
||||
case 'd': X="children";id=Id_children; break L;
|
||||
case 'e': X="comments";id=Id_comments; break L;
|
||||
case 'r': X="toString";id=Id_toString; break L;
|
||||
case 'u': X="toSource";id=Id_toSource; break L;
|
||||
} break L;
|
||||
case 9: switch (s.charAt(2)) {
|
||||
case 'c': X="localName";id=Id_localName; break L;
|
||||
case 'm': X="namespace";id=Id_namespace; break L;
|
||||
case 'r': X="normalize";id=Id_normalize; break L;
|
||||
case 't': X="attribute";id=Id_attribute; break L;
|
||||
} break L;
|
||||
case 10: c=s.charAt(0);
|
||||
if (c=='a') { X="attributes";id=Id_attributes; }
|
||||
else if (c=='c') { X="childIndex";id=Id_childIndex; }
|
||||
break L;
|
||||
case 11: switch (s.charAt(0)) {
|
||||
case 'a': X="appendChild";id=Id_appendChild; break L;
|
||||
case 'c': X="constructor";id=Id_constructor; break L;
|
||||
case 'd': X="descendants";id=Id_descendants; break L;
|
||||
case 's': X="setChildren";id=Id_setChildren; break L;
|
||||
case 't': X="toXMLString";id=Id_toXMLString; break L;
|
||||
} break L;
|
||||
case 12: switch (s.charAt(0)) {
|
||||
case 'a': X="addNamespace";id=Id_addNamespace; break L;
|
||||
case 'g': X="getXmlObject";id=Id_getXmlObject; break L;
|
||||
case 'p': X="prependChild";id=Id_prependChild; break L;
|
||||
case 's': c=s.charAt(3);
|
||||
if (c=='L') { X="setLocalName";id=Id_setLocalName; }
|
||||
else if (c=='N') { X="setNamespace";id=Id_setNamespace; }
|
||||
break L;
|
||||
} break L;
|
||||
case 14: X="hasOwnProperty";id=Id_hasOwnProperty; break L;
|
||||
case 15: X="removeNamespace";id=Id_removeNamespace; break L;
|
||||
case 16: c=s.charAt(0);
|
||||
if (c=='h') { X="hasSimpleContent";id=Id_hasSimpleContent; }
|
||||
else if (c=='i') { X="insertChildAfter";id=Id_insertChildAfter; }
|
||||
break L;
|
||||
case 17: c=s.charAt(3);
|
||||
if (c=='C') { X="hasComplexContent";id=Id_hasComplexContent; }
|
||||
else if (c=='c') { X="inScopeNamespaces";id=Id_inScopeNamespaces; }
|
||||
else if (c=='e') { X="insertChildBefore";id=Id_insertChildBefore; }
|
||||
break L;
|
||||
case 20: X="propertyIsEnumerable";id=Id_propertyIsEnumerable; break L;
|
||||
case 21: X="namespaceDeclarations";id=Id_namespaceDeclarations; break L;
|
||||
case 22: X="processingInstructions";id=Id_processingInstructions; break L;
|
||||
}
|
||||
if (X!=null && X!=s && !X.equals(s)) id = 0;
|
||||
}
|
||||
// #/generated#
|
||||
return id;
|
||||
}
|
||||
// #/string_id_map#
|
||||
|
||||
protected void initPrototypeId(int id)
|
||||
{
|
||||
String s;
|
||||
int arity;
|
||||
switch (id) {
|
||||
case Id_constructor: {
|
||||
IdFunctionObject ctor;
|
||||
if (this instanceof XML) {
|
||||
ctor = new XMLCtor((XML)this, XMLOBJECT_TAG, id, 1);
|
||||
} else {
|
||||
ctor = new IdFunctionObject(this, XMLOBJECT_TAG, id, 1);
|
||||
}
|
||||
initPrototypeConstructor(ctor);
|
||||
return;
|
||||
}
|
||||
|
||||
case Id_addNamespace: arity=1; s="addNamespace"; break;
|
||||
case Id_appendChild: arity=1; s="appendChild"; break;
|
||||
case Id_attribute: arity=1; s="attribute"; break;
|
||||
case Id_attributes: arity=0; s="attributes"; break;
|
||||
case Id_child: arity=1; s="child"; break;
|
||||
case Id_childIndex: arity=0; s="childIndex"; break;
|
||||
case Id_children: arity=0; s="children"; break;
|
||||
case Id_comments: arity=0; s="comments"; break;
|
||||
case Id_contains: arity=1; s="contains"; break;
|
||||
case Id_copy: arity=0; s="copy"; break;
|
||||
case Id_descendants: arity=1; s="descendants"; break;
|
||||
case Id_hasComplexContent: arity=0; s="hasComplexContent"; break;
|
||||
case Id_hasOwnProperty: arity=1; s="hasOwnProperty"; break;
|
||||
case Id_hasSimpleContent: arity=0; s="hasSimpleContent"; break;
|
||||
case Id_inScopeNamespaces: arity=0; s="inScopeNamespaces"; break;
|
||||
case Id_insertChildAfter: arity=2; s="insertChildAfter"; break;
|
||||
case Id_insertChildBefore: arity=2; s="insertChildBefore"; break;
|
||||
case Id_length: arity=0; s="length"; break;
|
||||
case Id_localName: arity=0; s="localName"; break;
|
||||
case Id_name: arity=0; s="name"; break;
|
||||
case Id_namespace: arity=1; s="namespace"; break;
|
||||
case Id_namespaceDeclarations:
|
||||
arity=0; s="namespaceDeclarations"; break;
|
||||
case Id_nodeKind: arity=0; s="nodeKind"; break;
|
||||
case Id_normalize: arity=0; s="normalize"; break;
|
||||
case Id_parent: arity=0; s="parent"; break;
|
||||
case Id_prependChild: arity=1; s="prependChild"; break;
|
||||
case Id_processingInstructions:
|
||||
arity=1; s="processingInstructions"; break;
|
||||
case Id_propertyIsEnumerable:
|
||||
arity=1; s="propertyIsEnumerable"; break;
|
||||
case Id_removeNamespace: arity=1; s="removeNamespace"; break;
|
||||
case Id_replace: arity=2; s="replace"; break;
|
||||
case Id_setChildren: arity=1; s="setChildren"; break;
|
||||
case Id_setLocalName: arity=1; s="setLocalName"; break;
|
||||
case Id_setName: arity=1; s="setName"; break;
|
||||
case Id_setNamespace: arity=1; s="setNamespace"; break;
|
||||
case Id_text: arity=0; s="text"; break;
|
||||
case Id_toString: arity=0; s="toString"; break;
|
||||
case Id_toSource: arity=1; s="toSource"; break;
|
||||
case Id_toXMLString: arity=1; s="toXMLString"; break;
|
||||
case Id_valueOf: arity=0; s="valueOf"; break;
|
||||
|
||||
case Id_getXmlObject: arity=0; s="getXmlObject"; break;
|
||||
default: throw new IllegalArgumentException(String.valueOf(id));
|
||||
}
|
||||
initPrototypeMethod(XMLOBJECT_TAG, id, s, arity);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param f
|
||||
* @param cx
|
||||
* @param scope
|
||||
* @param thisObj
|
||||
* @param args
|
||||
* @return
|
||||
*/
|
||||
public Object execIdCall(IdFunctionObject f, Context cx, Scriptable scope,
|
||||
Scriptable thisObj, Object[] args)
|
||||
{
|
||||
if (!f.hasTag(XMLOBJECT_TAG)) {
|
||||
return super.execIdCall(f, cx, scope, thisObj, args);
|
||||
}
|
||||
int id = f.methodId();
|
||||
if (id == Id_constructor) {
|
||||
return jsConstructor(cx, thisObj == null, args);
|
||||
}
|
||||
|
||||
// All (XML|XMLList).prototype methods require thisObj to be XML
|
||||
if (!(thisObj instanceof XMLObjectImpl))
|
||||
throw incompatibleCallError(f);
|
||||
XMLObjectImpl realThis = (XMLObjectImpl)thisObj;
|
||||
|
||||
switch (id) {
|
||||
case Id_addNamespace: {
|
||||
Namespace ns = lib.castToNamespace(cx, arg(args, 0));
|
||||
return realThis.addNamespace(ns);
|
||||
}
|
||||
case Id_appendChild:
|
||||
return realThis.appendChild(arg(args, 0));
|
||||
case Id_attribute: {
|
||||
XMLName xmlName = lib.toAttributeName(cx, arg(args, 0));
|
||||
return realThis.attribute(xmlName);
|
||||
}
|
||||
case Id_attributes:
|
||||
return realThis.attributes();
|
||||
case Id_child: {
|
||||
XMLName xmlName = lib.toXMLNameOrIndex(cx, arg(args, 0));
|
||||
if (xmlName == null) {
|
||||
long index = ScriptRuntime.lastUint32Result(cx);
|
||||
return realThis.child(index);
|
||||
} else {
|
||||
return realThis.child(xmlName);
|
||||
}
|
||||
}
|
||||
case Id_childIndex:
|
||||
return ScriptRuntime.wrapInt(realThis.childIndex());
|
||||
case Id_children:
|
||||
return realThis.children();
|
||||
case Id_comments:
|
||||
return realThis.comments();
|
||||
case Id_contains:
|
||||
return ScriptRuntime.wrapBoolean(
|
||||
realThis.contains(arg(args, 0)));
|
||||
case Id_copy:
|
||||
return realThis.copy();
|
||||
case Id_descendants: {
|
||||
XMLName xmlName = (args.length == 0)
|
||||
? XMLName.formStar()
|
||||
: lib.toXMLName(cx, args[0]);
|
||||
return realThis.descendants(xmlName);
|
||||
}
|
||||
case Id_inScopeNamespaces: {
|
||||
Object[] array = realThis.inScopeNamespaces();
|
||||
return cx.newArray(scope, array);
|
||||
}
|
||||
case Id_insertChildAfter:
|
||||
return realThis.insertChildAfter(arg(args, 0), arg(args, 1));
|
||||
case Id_insertChildBefore:
|
||||
return realThis.insertChildBefore(arg(args, 0), arg(args, 1));
|
||||
case Id_hasOwnProperty: {
|
||||
XMLName xmlName = lib.toXMLName(cx, arg(args, 0));
|
||||
return ScriptRuntime.wrapBoolean(
|
||||
realThis.hasOwnProperty(xmlName));
|
||||
}
|
||||
case Id_hasComplexContent:
|
||||
return ScriptRuntime.wrapBoolean(realThis.hasComplexContent());
|
||||
case Id_hasSimpleContent:
|
||||
return ScriptRuntime.wrapBoolean(realThis.hasSimpleContent());
|
||||
case Id_length:
|
||||
return ScriptRuntime.wrapInt(realThis.length());
|
||||
case Id_localName:
|
||||
return realThis.localName();
|
||||
case Id_name:
|
||||
return realThis.name();
|
||||
case Id_namespace: {
|
||||
String prefix = (args.length > 0)
|
||||
? ScriptRuntime.toString(args[0]) : null;
|
||||
return realThis.namespace(prefix);
|
||||
}
|
||||
case Id_namespaceDeclarations: {
|
||||
Object[] array = realThis.namespaceDeclarations();
|
||||
return cx.newArray(scope, array);
|
||||
}
|
||||
case Id_nodeKind:
|
||||
return realThis.nodeKind();
|
||||
case Id_normalize:
|
||||
realThis.normalize();
|
||||
return Undefined.instance;
|
||||
case Id_parent:
|
||||
return realThis.parent();
|
||||
case Id_prependChild:
|
||||
return realThis.prependChild(arg(args, 0));
|
||||
case Id_processingInstructions: {
|
||||
XMLName xmlName = (args.length > 0)
|
||||
? lib.toXMLName(cx, args[0])
|
||||
: XMLName.formStar();
|
||||
return realThis.processingInstructions(xmlName);
|
||||
}
|
||||
case Id_propertyIsEnumerable: {
|
||||
return ScriptRuntime.wrapBoolean(
|
||||
realThis.propertyIsEnumerable(arg(args, 0)));
|
||||
}
|
||||
case Id_removeNamespace: {
|
||||
Namespace ns = lib.castToNamespace(cx, arg(args, 0));
|
||||
return realThis.removeNamespace(ns);
|
||||
}
|
||||
case Id_replace: {
|
||||
XMLName xmlName = lib.toXMLNameOrIndex(cx, arg(args, 0));
|
||||
Object arg1 = arg(args, 1);
|
||||
if (xmlName == null) {
|
||||
long index = ScriptRuntime.lastUint32Result(cx);
|
||||
return realThis.replace(index, arg1);
|
||||
} else {
|
||||
return realThis.replace(xmlName, arg1);
|
||||
}
|
||||
}
|
||||
case Id_setChildren:
|
||||
return realThis.setChildren(arg(args, 0));
|
||||
case Id_setLocalName: {
|
||||
String localName;
|
||||
Object arg = arg(args, 0);
|
||||
if (arg instanceof QName) {
|
||||
localName = ((QName)arg).localName();
|
||||
} else {
|
||||
localName = ScriptRuntime.toString(arg);
|
||||
}
|
||||
realThis.setLocalName(localName);
|
||||
return Undefined.instance;
|
||||
}
|
||||
case Id_setName: {
|
||||
Object arg = (args.length != 0) ? args[0] : Undefined.instance;
|
||||
QName qname;
|
||||
if (arg instanceof QName) {
|
||||
qname = (QName)arg;
|
||||
if (qname.uri() == null) {
|
||||
qname = lib.constructQNameFromString(cx, qname.localName());
|
||||
} else {
|
||||
// E4X 13.4.4.35 requires to always construct QName
|
||||
qname = lib.constructQName(cx, qname);
|
||||
}
|
||||
} else {
|
||||
qname = lib.constructQName(cx, arg);
|
||||
}
|
||||
realThis.setName(qname);
|
||||
return Undefined.instance;
|
||||
}
|
||||
case Id_setNamespace: {
|
||||
Namespace ns = lib.castToNamespace(cx, arg(args, 0));
|
||||
realThis.setNamespace(ns);
|
||||
return Undefined.instance;
|
||||
}
|
||||
case Id_text:
|
||||
return realThis.text();
|
||||
case Id_toString:
|
||||
return realThis.toString();
|
||||
case Id_toSource: {
|
||||
int indent = ScriptRuntime.toInt32(args, 0);
|
||||
return realThis.toSource(indent);
|
||||
}
|
||||
case Id_toXMLString: {
|
||||
int indent = ScriptRuntime.toInt32(args, 0);
|
||||
return realThis.toXMLString(indent);
|
||||
}
|
||||
case Id_valueOf:
|
||||
return realThis.valueOf();
|
||||
|
||||
case Id_getXmlObject: {
|
||||
org.apache.xmlbeans.XmlObject xmlObject = realThis.getXmlObject();
|
||||
return Context.javaToJS(xmlObject, scope);
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException(String.valueOf(id));
|
||||
}
|
||||
|
||||
private static Object arg(Object[] args, int i)
|
||||
{
|
||||
return (i < args.length) ? args[i] : Undefined.instance;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,125 +0,0 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Norris Boyd
|
||||
* Ethan Hugg
|
||||
* Terry Lucas
|
||||
* Milen Nankov
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
package org.mozilla.javascript.xml.impl.xmlbeans;
|
||||
|
||||
import org.mozilla.javascript.*;
|
||||
import org.mozilla.javascript.xml.*;
|
||||
|
||||
final class XMLWithScope extends NativeWith
|
||||
{
|
||||
private static final long serialVersionUID = -696429282095170887L;
|
||||
|
||||
private XMLLibImpl lib;
|
||||
private int _currIndex;
|
||||
private XMLList _xmlList;
|
||||
private XMLObject _dqPrototype;
|
||||
|
||||
XMLWithScope(XMLLibImpl lib, Scriptable parent, XMLObject prototype)
|
||||
{
|
||||
super(parent, prototype);
|
||||
this.lib = lib;
|
||||
}
|
||||
|
||||
void initAsDotQuery()
|
||||
{
|
||||
XMLObject prototype = (XMLObject)getPrototype();
|
||||
// XMLWithScope also handles the .(xxx) DotQuery for XML
|
||||
// basically DotQuery is a for/in/with statement and in
|
||||
// the following 3 statements we setup to signal it's
|
||||
// DotQuery,
|
||||
// the index and the object being looped over. The
|
||||
// xws.setPrototype is the scope of the object which is
|
||||
// is a element of the lhs (XMLList).
|
||||
_currIndex = 0;
|
||||
_dqPrototype = prototype;
|
||||
if (prototype instanceof XMLList) {
|
||||
XMLList xl = (XMLList)prototype;
|
||||
if (xl.length() > 0) {
|
||||
setPrototype((Scriptable)(xl.get(0, null)));
|
||||
}
|
||||
}
|
||||
// Always return the outer-most type of XML lValue of
|
||||
// XML to left of dotQuery.
|
||||
_xmlList = new XMLList(lib);
|
||||
}
|
||||
|
||||
protected Object updateDotQuery(boolean value)
|
||||
{
|
||||
// Return null to continue looping
|
||||
|
||||
XMLObject seed = _dqPrototype;
|
||||
XMLList xmlL = _xmlList;
|
||||
|
||||
if (seed instanceof XMLList) {
|
||||
// We're a list so keep testing each element of the list if the
|
||||
// result on the top of stack is true then that element is added
|
||||
// to our result list. If false, we try the next element.
|
||||
XMLList orgXmlL = (XMLList)seed;
|
||||
|
||||
int idx = _currIndex;
|
||||
|
||||
if (value) {
|
||||
xmlL.addToList(orgXmlL.get(idx, null));
|
||||
}
|
||||
|
||||
// More elements to test?
|
||||
if (++idx < orgXmlL.length()) {
|
||||
// Yes, set our new index, get the next element and
|
||||
// reset the expression to run with this object as
|
||||
// the WITH selector.
|
||||
_currIndex = idx;
|
||||
setPrototype((Scriptable)(orgXmlL.get(idx, null)));
|
||||
|
||||
// continue looping
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
// If we're not a XMLList then there's no looping
|
||||
// just return DQPrototype if the result is true.
|
||||
if (value) {
|
||||
xmlL.addToList(seed);
|
||||
}
|
||||
}
|
||||
|
||||
return xmlL;
|
||||
}
|
||||
}
|
||||
161
mozilla/js/rhino/docs/RhinoDebugger.html
Normal file
161
mozilla/js/rhino/docs/RhinoDebugger.html
Normal file
@@ -0,0 +1,161 @@
|
||||
<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->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->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->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->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->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->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"> </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->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 "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.</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 "this" and "Locals". 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>
|
||||
137
mozilla/js/rhino/docs/api.html
Normal file
137
mozilla/js/rhino/docs/api.html
Normal file
@@ -0,0 +1,137 @@
|
||||
<!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>
|
||||
43
mozilla/js/rhino/docs/bsf.html
Normal file
43
mozilla/js/rhino/docs/bsf.html
Normal file
@@ -0,0 +1,43 @@
|
||||
<!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>
|
||||
24
mozilla/js/rhino/docs/changes.html
Normal file
24
mozilla/js/rhino/docs/changes.html
Normal file
@@ -0,0 +1,24 @@
|
||||
<!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>
|
||||
98
mozilla/js/rhino/docs/debugApi.html
Normal file
98
mozilla/js/rhino/docs/debugApi.html
Normal file
@@ -0,0 +1,98 @@
|
||||
<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>
|
||||
241
mozilla/js/rhino/docs/debugger.html
Normal file
241
mozilla/js/rhino/docs/debugger.html
Normal file
@@ -0,0 +1,241 @@
|
||||
<!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. 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>
|
||||
166
mozilla/js/rhino/docs/doc.html
Normal file
166
mozilla/js/rhino/docs/doc.html
Normal file
@@ -0,0 +1,166 @@
|
||||
<!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>
|
||||
88
mozilla/js/rhino/docs/download.html
Normal file
88
mozilla/js/rhino/docs/download.html
Normal file
@@ -0,0 +1,88 @@
|
||||
<!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
|
||||
<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> 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>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
278
mozilla/js/rhino/docs/embedding-engine.html
Normal file
278
mozilla/js/rhino/docs/embedding-engine.html
Normal file
@@ -0,0 +1,278 @@
|
||||
<!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>
|
||||
<br>
|
||||
<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 that’s getting brewed underneath, will
|
||||
help designing business applications even though most of the current ones
|
||||
are made with bird’s 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 doesn’t 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>
|
||||
<br>
|
||||
<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> var str;</font></font>
|
||||
<br><font face="Arial"><font size=-1> str = '"Hello World";</font></font>
|
||||
<br><font face="Arial"><font size=-1> 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> // create a Java
|
||||
string buffer object from JavaScript and use its java instance</font></font>
|
||||
<br><font face="Arial"><font size=-1> // This uses an
|
||||
another Java object created for creating new objects within Java and</font></font>
|
||||
<br><font face="Arial"><font size=-1> // brings the same
|
||||
for JavaScript execution scope</font></font>
|
||||
<br><font face="Arial"><font size=-1> // Refer _create.java
|
||||
for more information</font></font>
|
||||
<br><font face="Arial"><font size=-1> create.getInstance("java.lang.StringBuffer","buffer");</font></font>
|
||||
<br><font face="Arial"><font size=-1> //JavaScript refers
|
||||
the java object instance as ‘buffer’</font></font>
|
||||
<br><font face="Arial"><font size=-1> out.println(buffer.toString());</font></font>
|
||||
<br> <font face="Arial"><font size=-1>buffer.append("I
|
||||
am a javaobject dynamically created and executed in JavaScript");</font></font>
|
||||
<br> <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> /** Creates new
|
||||
JSHost */</font></font>
|
||||
<br><font face="Arial"><font size=-1> public JSHost()
|
||||
{</font></font>
|
||||
<br><font face="Arial"><font size=-1> }</font></font>
|
||||
<p><i><font face="Arial"><font size=-1> /*** Executes
|
||||
.js file ***/</font></font></i>
|
||||
<br><font face="Arial"><font size=-1> public Object executeJS
|
||||
(String jsfname){</font></font>
|
||||
<br><font face="Arial"><font size=-1> //You can also
|
||||
use evaluateReader</font></font>
|
||||
<br><font face="Arial"><font size=-1> File fp = new File(jsfname);</font></font>
|
||||
<br><font face="Arial"><font size=-1> String str_buff
|
||||
=null;</font></font>
|
||||
<br><font face="Arial"><font size=-1> try {</font></font>
|
||||
<br><font face="Arial"><font size=-1>
|
||||
FileReader fr = new FileReader(jsfname);</font></font>
|
||||
<br><font face="Arial"><font size=-1>
|
||||
int length = (int) fp.length();</font></font>
|
||||
<br><font face="Arial"><font size=-1>
|
||||
char cbuff[] = new char[(char)length];</font></font>
|
||||
<br><font face="Arial"><font size=-1>
|
||||
fr.read(cbuff);</font></font>
|
||||
<br><font face="Arial"><font size=-1>
|
||||
str_buff = new String(cbuff);</font></font>
|
||||
<br><font face="Arial"><font size=-1> } catch(Exception
|
||||
e) {</font></font>
|
||||
<br><font face="Arial"><font size=-1>
|
||||
e.printStackTrace();</font></font>
|
||||
<br><font face="Arial"><font size=-1> }</font></font>
|
||||
<p><font face="Arial"><font size=-1> //Execute the .js
|
||||
file content</font></font>
|
||||
<br><font face="Arial"><font size=-1> 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>
|
||||
<br>
|
||||
<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>
|
||||
<br>
|
||||
<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 < 1) {</font></font>
|
||||
<p><font face="Arial"><font size=-1>System.out.println("Usage - Java JSHosttest.class
|
||||
<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>
|
||||
<br>
|
||||
<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>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
</body>
|
||||
</html>
|
||||
89
mozilla/js/rhino/docs/examples.html
Normal file
89
mozilla/js/rhino/docs/examples.html
Normal file
@@ -0,0 +1,89 @@
|
||||
<!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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
52
mozilla/js/rhino/docs/faq.html
Normal file
52
mozilla/js/rhino/docs/faq.html
Normal file
@@ -0,0 +1,52 @@
|
||||
<!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>
|
||||
48
mozilla/js/rhino/docs/footprint.html
Normal file
48
mozilla/js/rhino/docs/footprint.html
Normal file
@@ -0,0 +1,48 @@
|
||||
<!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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<p>
|
||||
<hr WIDTH="100%">
|
||||
<br><a href="index.html">back to top</a>
|
||||
</body>
|
||||
</html>
|
||||
44
mozilla/js/rhino/docs/help.html
Normal file
44
mozilla/js/rhino/docs/help.html
Normal file
@@ -0,0 +1,44 @@
|
||||
<!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>
|
||||
<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>
|
||||
<h3>
|
||||
Module Owner</h3>
|
||||
The module owner, <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>
|
||||
<br>
|
||||
</body>
|
||||
</html>
|
||||
45
mozilla/js/rhino/docs/history.html
Normal file
45
mozilla/js/rhino/docs/history.html
Normal file
@@ -0,0 +1,45 @@
|
||||
<!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>
|
||||
75
mozilla/js/rhino/docs/index.html
Normal file
75
mozilla/js/rhino/docs/index.html
Normal file
@@ -0,0 +1,75 @@
|
||||
<!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 </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>
|
||||
66
mozilla/js/rhino/docs/javaone.html
Normal file
66
mozilla/js/rhino/docs/javaone.html
Normal file
@@ -0,0 +1,66 @@
|
||||
<!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>
|
||||
<h2>
|
||||
Slides</h2>
|
||||
<a href="http://industry.java.sun.com/javaone/99/pdfs/e629.pdf">Slides</a>
|
||||
(PDF file, 1112246 bytes) can be downloaded from Sun's site.
|
||||
<br>
|
||||
<br>
|
||||
<h2>
|
||||
More on Q & 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>
|
||||
82
mozilla/js/rhino/docs/jsc.html
Normal file
82
mozilla/js/rhino/docs/jsc.html
Normal file
@@ -0,0 +1,82 @@
|
||||
<!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>
|
||||
<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> -implements java.lang.Runnable NervousText.js</tt>
|
||||
<br>
|
||||
<p>
|
||||
<hr WIDTH="100%">
|
||||
<br><a href="index.html">back to top</a>
|
||||
</body>
|
||||
</html>
|
||||
BIN
mozilla/js/rhino/docs/jsdebug.jpg
Normal file
BIN
mozilla/js/rhino/docs/jsdebug.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 60 KiB |
86
mozilla/js/rhino/docs/limits.html
Normal file
86
mozilla/js/rhino/docs/limits.html
Normal file
@@ -0,0 +1,86 @@
|
||||
<!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>
|
||||
<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>
|
||||
<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> Sun Oct 25 02:00:00 GMT-0800 (PST) 1998</pre>
|
||||
Earlier versions may return:
|
||||
<pre> 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>
|
||||
BIN
mozilla/js/rhino/docs/lookup.gif
Normal file
BIN
mozilla/js/rhino/docs/lookup.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
68
mozilla/js/rhino/docs/opt.html
Normal file
68
mozilla/js/rhino/docs/opt.html
Normal file
@@ -0,0 +1,68 @@
|
||||
<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 & 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>
|
||||
149
mozilla/js/rhino/docs/overview.html
Normal file
149
mozilla/js/rhino/docs/overview.html
Normal file
@@ -0,0 +1,149 @@
|
||||
<!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ô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>
|
||||
<br>
|
||||
<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>
|
||||
<br>
|
||||
<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>
|
||||
<br>
|
||||
<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>
|
||||
<br>
|
||||
<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>
|
||||
3
mozilla/js/rhino/docs/owner.js
Normal file
3
mozilla/js/rhino/docs/owner.js
Normal file
@@ -0,0 +1,3 @@
|
||||
function owner() {
|
||||
return '<a href="mailto:nboyd'+'@'+ 'atg.com">Norris Boyd</a>'
|
||||
}
|
||||
83
mozilla/js/rhino/docs/perf.html
Normal file
83
mozilla/js/rhino/docs/perf.html
Normal file
@@ -0,0 +1,83 @@
|
||||
<!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>
|
||||
<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> result = 0;</tt>
|
||||
<br><tt> for (i=0; i <
|
||||
a.length; i++)</tt>
|
||||
<br><tt> result += a[i];</tt>
|
||||
<br><tt> return result;</tt>
|
||||
<br><tt>}</tt>
|
||||
<p>as
|
||||
<p><tt>function sum(a) {</tt>
|
||||
<br><tt> var result = 0;</tt>
|
||||
<br><tt> for (var i=0; i
|
||||
< a.length; i++)</tt>
|
||||
<br><tt> result += a[i];</tt>
|
||||
<br><tt> 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>
|
||||
<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 < n; i++)</tt>
|
||||
<br><tt> 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("a", "b", "c")</tt> or <tt>["a", "b", "c"]</tt> will cause a 3-element
|
||||
Java array to be allocated to hold the contents of the JavaScript array.
|
||||
<br>
|
||||
<br>
|
||||
<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> this.s = a;</tt>
|
||||
<br><tt> this.toString = new
|
||||
Function("return this.s");</tt>
|
||||
<br><tt>}</tt>
|
||||
<p>could be written more efficiently as
|
||||
<p><tt>function MyObject(a) {</tt>
|
||||
<br><tt> this.s = a;</tt>
|
||||
<br><tt> 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> </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>
|
||||
<p>
|
||||
<hr WIDTH="100%">
|
||||
<br><a href="index.html">back to top</a>
|
||||
<br>
|
||||
</body>
|
||||
</html>
|
||||
162
mozilla/js/rhino/docs/rhino15R1.html
Normal file
162
mozilla/js/rhino/docs/rhino15R1.html
Normal file
@@ -0,0 +1,162 @@
|
||||
<!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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<h3>
|
||||
Dynamic scope support</h3>
|
||||
Rhino 1.5 implements support for dynamic scopes, which are particularly
|
||||
useful for multithreaded environments like server embeddings.
|
||||
<br>
|
||||
<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>
|
||||
<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>
|
||||
<h3>
|
||||
Shell changes</h3>
|
||||
Two changes here: addition of the "environment" and "history" top-level
|
||||
variables.
|
||||
<br>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
84
mozilla/js/rhino/docs/rhino15R2.html
Normal file
84
mozilla/js/rhino/docs/rhino15R2.html
Normal file
@@ -0,0 +1,84 @@
|
||||
<!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>
|
||||
<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>
|
||||
<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>
|
||||
<h2>
|
||||
Interpreted mode performance improvements</h2>
|
||||
Igor Bukanov also made a number of improvements to interpreter mode performance.
|
||||
<br>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
63
mozilla/js/rhino/docs/rhino15R3.html
Normal file
63
mozilla/js/rhino/docs/rhino15R3.html
Normal file
@@ -0,0 +1,63 @@
|
||||
<!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>
|
||||
public boolean storeClass(String className, byte[] classBytes,<br>
|
||||
|
||||
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. 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. The file<br>
|
||||
saving code is now an inner class FileClassRepository in Context. As<br>
|
||||
a consequence of this 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>
|
||||
o Annonymous functions are now named class$1 instead of class1<br>
|
||||
o 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>
|
||||
BIN
mozilla/js/rhino/docs/rhino50.jpg
Normal file
BIN
mozilla/js/rhino/docs/rhino50.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.6 KiB |
138
mozilla/js/rhino/docs/runtime.html
Normal file
138
mozilla/js/rhino/docs/runtime.html
Normal file
@@ -0,0 +1,138 @@
|
||||
<!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>
|
||||
<br>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<br>
|
||||
<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>
|
||||
<p>
|
||||
<hr WIDTH="100%">
|
||||
<br><a href="index.html">back to top</a>
|
||||
</body>
|
||||
</html>
|
||||
BIN
mozilla/js/rhino/docs/scopes.gif
Normal file
BIN
mozilla/js/rhino/docs/scopes.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 80 KiB |
176
mozilla/js/rhino/docs/scopes.html
Normal file
176
mozilla/js/rhino/docs/scopes.html
Normal file
@@ -0,0 +1,176 @@
|
||||
<!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>
|
||||
</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> Context cx = Context.enter();</pre>
|
||||
Once you are done with execution, simply exit the Context:
|
||||
<pre> 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>
|
||||
</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> 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>
|
||||
|
||||
<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> var v = 8;</tt> <br>
|
||||
<tt> 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> Scriptable newScope = cx.newObject(sharedScope);<br> newScope.setPrototype(sharedScope);<br> 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>
|
||||
</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>
|
||||
<br>
|
||||
</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>
|
||||
</p>
|
||||
<h3>
|
||||
<hr width="100%"><br>
|
||||
<a href="index.html">back to top</a>
|
||||
</h3>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
BIN
mozilla/js/rhino/docs/scriptjava-frame.jpg
Normal file
BIN
mozilla/js/rhino/docs/scriptjava-frame.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 53 B |
199
mozilla/js/rhino/docs/scriptjava.html
Normal file
199
mozilla/js/rhino/docs/scriptjava.html
Normal file
@@ -0,0 +1,199 @@
|
||||
<!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>
|
||||
<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> 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> 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> 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>
|
||||
<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> public int getAge() { return age; }</tt>
|
||||
<br><tt> public void setAge(int anAge) { age = anAge;
|
||||
}</tt>
|
||||
<br><tt> public String getSex() { return "male"; }</tt>
|
||||
<br><tt> 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>
|
||||
<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> 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>
|
||||
<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> buttonListener = java.awt.event.ActionListener(o)</pre>
|
||||
above we can also write
|
||||
<pre> 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> buttonListener = new JavaAdapter(Packages.Foo,
|
||||
java.awt.event.ActionListener,
|
||||
java.lang.Runnable, o)</pre>
|
||||
In general the syntax is
|
||||
<p> <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>
|
||||
BIN
mozilla/js/rhino/docs/scriptjavaframe.jpg
Normal file
BIN
mozilla/js/rhino/docs/scriptjavaframe.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.0 KiB |
122
mozilla/js/rhino/docs/serialization.html
Normal file
122
mozilla/js/rhino/docs/serialization.html
Normal file
@@ -0,0 +1,122 @@
|
||||
<!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, 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>
|
||||
</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>$ java org.mozilla.javascript.tools.shell.Main<br>js> function f() { return 3; }<br>js> serialize(f, "f.ser")<br>js> quit()<br><br>$ java org.mozilla.javascript.tools.shell.Main<br>js> f = deserialize("f.ser")<br><br>function f() {<br> return 3;<br>}<br><br>js> f()<br>3<br>js></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. </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>$ cat test.js<br>function f() { return 3; }<br>serialize(f, "f.ser");<br>g = deserialize("f.ser");<br>print(g());<br>$ java org.mozilla.javascript.tools.shell.Main -opt -1 test.js<br>3<br>$ java 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>$ cat f.js<br>function f() { return 3; }<br>$ java -classpath js.jar org.mozilla.javascript.tools.jsc.Main f.js<br>$ cat test2.js<br>loadClass("f");<br>serialize(f, "f.ser");<br>g = deserialize("f.ser");<br>print(g());<br>$ java -classpath 'js.jar;.' org.mozilla.javascript.tools.shell.Main test2.js<br>3<br></pre>
|
||||
<p> 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>
|
||||
128
mozilla/js/rhino/docs/shell.html
Normal file
128
mozilla/js/rhino/docs/shell.html
Normal file
@@ -0,0 +1,128 @@
|
||||
<!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>
|
||||
<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> 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> 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>
|
||||
31
mozilla/js/rhino/docs/tools.html
Normal file
31
mozilla/js/rhino/docs/tools.html
Normal file
@@ -0,0 +1,31 @@
|
||||
<!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>
|
||||
<br>
|
||||
<br>
|
||||
<h2>
|
||||
JavaScript compiler</h2>
|
||||
The <a href="jsc.html">JavaScript compiler</a> translates JavaScript source
|
||||
into Java class files.
|
||||
<br>
|
||||
<p>
|
||||
<hr WIDTH="100%">
|
||||
<br><a href="index.html">back to top</a>
|
||||
</body>
|
||||
</html>
|
||||
336
mozilla/js/rhino/docs/tutorial.html
Normal file
336
mozilla/js/rhino/docs/tutorial.html
Normal file
@@ -0,0 +1,336 @@
|
||||
<!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>
|
||||
<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 < args.length; i++)</font></tt>
|
||||
<br><tt><font color="#006600"> 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, "<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><cmd></tt> and line number 1.
|
||||
<br>
|
||||
<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>
|
||||
<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>
|
||||
<dir> </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> </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"> System.out.println("x
|
||||
is not defined.");</font></tt>
|
||||
<br><tt><font color="#006600">else</font></tt>
|
||||
<br><tt><font color="#006600"> System.out.println("x
|
||||
= " + Context.toString(x));</font></tt>
|
||||
<br><tt><font color="#006600"></font></tt> </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"> 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"> Object functionArgs[]
|
||||
= { "my arg" };</font></tt>
|
||||
<br><tt><font color="#006600"> Object result = ((Function)
|
||||
f).call(cx, scope, scope, functionArgs);</font></tt>
|
||||
<br><tt><font color="#006600"> 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>
|
||||
78
mozilla/js/rhino/docs/users.html
Normal file
78
mozilla/js/rhino/docs/users.html
Normal file
@@ -0,0 +1,78 @@
|
||||
<!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 <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>
|
||||
@@ -1,39 +1,36 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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):
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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.*;
|
||||
|
||||
@@ -41,7 +38,7 @@ import org.mozilla.javascript.*;
|
||||
* Example of controlling the JavaScript execution engine.
|
||||
*
|
||||
* We evaluate a script and then manipulate the result.
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class Control {
|
||||
|
||||
@@ -53,47 +50,55 @@ public class Control {
|
||||
* Then set up the execution environment and begin to
|
||||
* execute scripts.
|
||||
*/
|
||||
public static void main(String[] args)
|
||||
{
|
||||
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 {
|
||||
// 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();
|
||||
|
||||
// Now we can evaluate a script. Let's create a new object
|
||||
// using the object literal notation.
|
||||
Object result = cx.evaluateString(scope, "obj = {a:1, b:['x','y']}",
|
||||
result = cx.evaluateString(scope, "obj = {a:1, b:['x','y']}",
|
||||
"MySource", 1, null);
|
||||
}
|
||||
catch (JavaScriptException jse) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
Scriptable obj = (Scriptable) scope.get("obj", scope);
|
||||
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 == 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));
|
||||
// Should print "obj.a == 1"
|
||||
System.out.println("obj.a == " + obj.get("a", obj));
|
||||
|
||||
Scriptable b = (Scriptable) obj.get("b", 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[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));
|
||||
// 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]));
|
||||
} finally {
|
||||
Context.exit();
|
||||
}
|
||||
} catch (JavaScriptException e) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
cx.exit();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,61 +1,55 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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
|
||||
* Contributor(s):
|
||||
* Norris Boyd
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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 {
|
||||
private static final long serialVersionUID = 438270592527335642L;
|
||||
|
||||
// The zero-argument constructor used by Rhino runtime to create instances
|
||||
public Counter() { }
|
||||
|
||||
// Method jsConstructor defines the JavaScript constructor
|
||||
// Method jsConstructor defines the JavaScript constructor
|
||||
public void jsConstructor(int a) { count = a; }
|
||||
|
||||
// The class name is defined by the getClassName method
|
||||
@Override
|
||||
public String getClassName() { return "Counter"; }
|
||||
|
||||
// The method jsGet_count defines the count property.
|
||||
// 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.
|
||||
// Methods can be defined using the jsFunction_ prefix. Here we define
|
||||
// resetCount for JavaScript.
|
||||
public void jsFunction_resetCount() { count = 0; }
|
||||
|
||||
private int count;
|
||||
|
||||
@@ -1,40 +1,37 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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
|
||||
* Contributor(s):
|
||||
* Norris Boyd
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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.*;
|
||||
|
||||
@@ -52,31 +49,27 @@ import org.mozilla.javascript.*;
|
||||
*/
|
||||
public class CounterTest {
|
||||
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Context cx = Context.enter();
|
||||
try {
|
||||
Scriptable scope = cx.initStandardObjects();
|
||||
ScriptableObject.defineClass(scope, Counter.class);
|
||||
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");
|
||||
Scriptable testCounter = cx.newObject(scope, "Counter");
|
||||
|
||||
Object count = ScriptableObject.getProperty(testCounter, "count");
|
||||
System.out.println("count = " + count);
|
||||
|
||||
Object count = ScriptableObject.getProperty(testCounter, "count");
|
||||
System.out.println("count = " + count);
|
||||
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");
|
||||
|
||||
ScriptableObject.callMethod(testCounter,
|
||||
"resetCount",
|
||||
new Object[0]);
|
||||
System.out.println("resetCount");
|
||||
count = ScriptableObject.getProperty(testCounter, "count");
|
||||
System.out.println("count = " + count);
|
||||
|
||||
count = ScriptableObject.getProperty(testCounter, "count");
|
||||
System.out.println("count = " + count);
|
||||
} finally {
|
||||
Context.exit();
|
||||
}
|
||||
}
|
||||
Context.exit();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,40 +1,37 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1997-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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
|
||||
* Contributor(s):
|
||||
* Norris Boyd
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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.*;
|
||||
|
||||
@@ -43,120 +40,86 @@ import org.mozilla.javascript.*;
|
||||
*/
|
||||
public class DynamicScopes {
|
||||
|
||||
static boolean useDynamicScope;
|
||||
|
||||
static class MyFactory extends ContextFactory
|
||||
{
|
||||
@Override
|
||||
protected boolean hasFeature(Context cx, int featureIndex)
|
||||
{
|
||||
if (featureIndex == Context.FEATURE_DYNAMIC_SCOPE) {
|
||||
return useDynamicScope;
|
||||
}
|
||||
return super.hasFeature(cx, featureIndex);
|
||||
}
|
||||
}
|
||||
|
||||
static {
|
||||
ContextFactory.initGlobal(new MyFactory());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Main entry point.
|
||||
*
|
||||
* Set up the shared scope and then spawn new threads that execute
|
||||
* relative to that shared scope. Try to run functions with and
|
||||
* relative to that shared scope. Try compiling functions with and
|
||||
* without dynamic scope to see the effect.
|
||||
*
|
||||
*
|
||||
* The expected output is
|
||||
* <pre>
|
||||
* sharedScope
|
||||
* nested:sharedScope
|
||||
* sharedScope
|
||||
* nested:sharedScope
|
||||
* sharedScope
|
||||
* nested:sharedScope
|
||||
* thread0
|
||||
* nested:thread0
|
||||
* thread1
|
||||
* nested:thread1
|
||||
* thread2
|
||||
* nested:thread2
|
||||
* </pre>
|
||||
* The final three lines may be permuted in any order depending on
|
||||
* thread scheduling.
|
||||
*/
|
||||
public static void main(String[] args)
|
||||
public static void main(String[] args)
|
||||
throws JavaScriptException
|
||||
{
|
||||
Context cx = Context.enter();
|
||||
try {
|
||||
// Precompile source only once
|
||||
String source = ""
|
||||
+"var x = 'sharedScope';\n"
|
||||
+"function f() { return x; }\n"
|
||||
// Dynamic scope works with nested function too
|
||||
+"function initClosure(prefix) {\n"
|
||||
+" return function test() { return prefix+x; }\n"
|
||||
+"}\n"
|
||||
+"var closure = initClosure('nested:');\n"
|
||||
+"";
|
||||
Script script = cx.compileString(source, "sharedScript", 1, null);
|
||||
|
||||
useDynamicScope = false;
|
||||
runScripts(cx, script);
|
||||
useDynamicScope = true;
|
||||
runScripts(cx, script);
|
||||
cx.setCompileFunctionsWithDynamicScope(false);
|
||||
runScripts(cx);
|
||||
cx.setCompileFunctionsWithDynamicScope(true);
|
||||
runScripts(cx);
|
||||
} finally {
|
||||
Context.exit();
|
||||
cx.exit();
|
||||
}
|
||||
}
|
||||
|
||||
static void runScripts(Context cx, Script script)
|
||||
|
||||
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.
|
||||
ScriptableObject sharedScope = cx.initStandardObjects(null, true);
|
||||
Scriptable scope = cx.initStandardObjects(null);
|
||||
|
||||
// Now we can execute the precompiled script against the scope
|
||||
// to define x variable and f function in the shared scope.
|
||||
script.exec(cx, sharedScope);
|
||||
// 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
|
||||
// Now we spawn some threads that execute a script that calls the
|
||||
// function 'f'. The scope chain looks like this:
|
||||
// <pre>
|
||||
// ------------------ ------------------
|
||||
// | per-thread scope | -prototype-> | shared scope |
|
||||
// ------------------ ------------------
|
||||
// ------------------
|
||||
// | shared scope |
|
||||
// ------------------
|
||||
// ^
|
||||
// |
|
||||
// parentScope
|
||||
// ------------------
|
||||
// | 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,
|
||||
// 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 source2 = ""
|
||||
+"function g() { var x = 'local'; return f(); }\n"
|
||||
+"java.lang.System.out.println(g());\n"
|
||||
+"function g2() { var x = 'local'; return closure(); }\n"
|
||||
+"java.lang.System.out.println(g2());\n"
|
||||
+"";
|
||||
t[i] = new Thread(new PerThread(sharedScope, source2,
|
||||
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
|
||||
// Don't return in this thread until all the spawned threads have
|
||||
// completed.
|
||||
for (int i=0; i < threadCount; i++) {
|
||||
try {
|
||||
@@ -165,39 +128,49 @@ public class DynamicScopes {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static class PerThread implements Runnable {
|
||||
|
||||
PerThread(Scriptable sharedScope, String source, String x) {
|
||||
this.sharedScope = sharedScope;
|
||||
this.source = source;
|
||||
|
||||
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(sharedScope);
|
||||
threadScope.setPrototype(sharedScope);
|
||||
|
||||
// We want "threadScope" to be a new top-level
|
||||
// scope, so set its parent scope to null. This
|
||||
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, source, "threadScript", 1, null);
|
||||
} finally {
|
||||
cx.evaluateString(threadScope, script, "threadScript", 1, null);
|
||||
}
|
||||
catch (NotAFunctionException jse) {
|
||||
// ignore
|
||||
}
|
||||
catch (PropertyException jse) {
|
||||
// ignore
|
||||
}
|
||||
catch (JavaScriptException jse) {
|
||||
// ignore
|
||||
}
|
||||
finally {
|
||||
Context.exit();
|
||||
}
|
||||
}
|
||||
private Scriptable sharedScope;
|
||||
private String source;
|
||||
private Scriptable scope;
|
||||
private String script;
|
||||
private String x;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,223 +0,0 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* John Schneider
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
print("----------------------------------------");
|
||||
|
||||
// Use the XML constructor to parse an string into an XML object
|
||||
var John = "<employee><name>John</name><age>25</age></employee>";
|
||||
var Sue ="<employee><name>Sue</name><age>32</age></employee>";
|
||||
var tagName = "employees";
|
||||
var employees = new XML("<" + tagName +">" + John + Sue + "</" + tagName +">");
|
||||
print("The employees XML object constructed from a string is:\n" + employees);
|
||||
|
||||
print("----------------------------------------");
|
||||
|
||||
// Use an XML literal to create an XML object
|
||||
var order = <order>
|
||||
<customer>
|
||||
<firstname>John</firstname>
|
||||
<lastname>Doe</lastname>
|
||||
</customer>
|
||||
<item>
|
||||
<description>Big Screen Television</description>
|
||||
<price>1299.99</price>
|
||||
<quantity>1</quantity>
|
||||
</item>
|
||||
</order>
|
||||
|
||||
// Construct the full customer name
|
||||
var name = order.customer.firstname + " " + order.customer.lastname;
|
||||
|
||||
// Calculate the total price
|
||||
var total = order.item.price * order.item.quantity;
|
||||
|
||||
print("The order XML object constructed using a literal is:\n" + order);
|
||||
print("The total price of " + name + "'s order is " + total);
|
||||
|
||||
print("----------------------------------------");
|
||||
|
||||
// construct a new XML object using expando and super-expando properties
|
||||
var order = <order/>;
|
||||
order.customer.name = "Fred Jones";
|
||||
order.customer.address.street = "123 Long Lang";
|
||||
order.customer.address.city = "Underwood";
|
||||
order.customer.address.state = "CA";
|
||||
order.item[0] = "";
|
||||
order.item[0].description = "Small Rodents";
|
||||
order.item[0].quantity = 10;
|
||||
order.item[0].price = 6.95;
|
||||
|
||||
print("The order custructed using expandos and super-expandos is:\n" + order);
|
||||
|
||||
// append a new item to the order
|
||||
order.item += <item><description>Catapult</description><price>139.95</price></item>;
|
||||
|
||||
print("----------------------------------------");
|
||||
|
||||
print("The order after appending a new item is:\n" + order);
|
||||
|
||||
print("----------------------------------------");
|
||||
|
||||
// dynamically construct an XML element using embedded expressions
|
||||
var tagname = "name";
|
||||
var attributename = "id";
|
||||
var attributevalue = 5;
|
||||
var content = "Fred";
|
||||
|
||||
var x = <{tagname} {attributename}={attributevalue}>{content}</{tagname}>;
|
||||
|
||||
print("The dynamically computed element value is:\n" + x.toXMLString());
|
||||
|
||||
print("----------------------------------------");
|
||||
|
||||
// Create a SOAP message
|
||||
var message = <soap:Envelope
|
||||
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
|
||||
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
||||
<soap:Body>
|
||||
<m:GetLastTradePrice xmlns:m="http://mycompany.com/stocks">
|
||||
<symbol>DIS</symbol>
|
||||
</m:GetLastTradePrice>
|
||||
</soap:Body>
|
||||
</soap:Envelope>
|
||||
|
||||
// declare the SOAP and stocks namespaces
|
||||
var soap = new Namespace("http://schemas.xmlsoap.org/soap/envelope/");
|
||||
var stock = new Namespace ("http://mycompany.com/stocks");
|
||||
|
||||
// extract the soap encoding style and body from the soap message
|
||||
var encodingStyle = message.@soap::encodingStyle;
|
||||
|
||||
print("The encoding style of the soap message is specified by:\n" + encodingStyle);
|
||||
|
||||
// change the stock symbol
|
||||
message.soap::Body.stock::GetLastTradePrice.symbol = "MYCO";
|
||||
|
||||
var body = message.soap::Body;
|
||||
|
||||
print("The body of the soap message is:\n" + body);
|
||||
|
||||
print("----------------------------------------");
|
||||
|
||||
// create an manipulate an XML object using the default xml namespace
|
||||
|
||||
default xml namespace = "http://default.namespace.com";
|
||||
var x = <x/>;
|
||||
x.a = "one";
|
||||
x.b = "two";
|
||||
x.c = <c xmlns="http://some.other.namespace.com">three</c>;
|
||||
|
||||
print("XML object constructed using the default xml namespace:\n" + x);
|
||||
|
||||
default xml namespace="";
|
||||
|
||||
print("----------------------------------------");
|
||||
|
||||
var order = <order id = "123456" timestamp="Mon Mar 10 2003 16:03:25 GMT-0800 (PST)">
|
||||
<customer>
|
||||
<firstname>John</firstname>
|
||||
<lastname>Doe</lastname>
|
||||
</customer>
|
||||
<item id="3456">
|
||||
<description>Big Screen Television</description>
|
||||
<price>1299.99</price>
|
||||
<quantity>1</quantity>
|
||||
</item>
|
||||
<item id = "56789">
|
||||
<description>DVD Player</description>
|
||||
<price>399.99</price>
|
||||
<quantity>1</quantity>
|
||||
</item>
|
||||
</order>;
|
||||
|
||||
|
||||
// get the customer element from the orderprint("The customer is:\n" + order.customer);
|
||||
|
||||
// get the id attribute from the order
|
||||
print("The order id is:" + order.@id);
|
||||
|
||||
// get all the child elements from the order element
|
||||
print("The children of the order are:\n" + order.*);
|
||||
|
||||
// get the list of all item descriptions
|
||||
print("The order descriptions are:\n" + order.item.description);
|
||||
|
||||
|
||||
// get second item by numeric index
|
||||
print("The second item is:\n" + order.item[1]);
|
||||
|
||||
// get the list of all child elements in all item elements
|
||||
print("The children of the items are:\n" + order.item.*);
|
||||
|
||||
// get the second child element from the order by index
|
||||
print("The second child of the order is:\n" + order.*[1]);
|
||||
|
||||
// calculate the total price of the order
|
||||
var totalprice = 0;
|
||||
for each (i in order.item) {
|
||||
totalprice += i.price * i.quantity;
|
||||
}
|
||||
print("The total price of the order is: " + totalprice);
|
||||
|
||||
print("----------------------------------------");
|
||||
|
||||
var e = <employees>
|
||||
<employee id="1"><name>Joe</name><age>20</age></employee>
|
||||
<employee id="2"><name>Sue</name><age>30</age></employee>
|
||||
</employees>;
|
||||
|
||||
// get all the names in e
|
||||
print("All the employee names are:\n" + e..name);
|
||||
|
||||
// employees with name Joe
|
||||
print("The employee named Joe is:\n" + e.employee.(name == "Joe"));
|
||||
|
||||
// employees with id's 1 & 2
|
||||
print("Employees with ids 1 & 2:\n" + e.employee.(@id == 1 || @id == 2));
|
||||
|
||||
// name of employee with id 1
|
||||
print("Name of the the employee with ID=1: " + e.employee.(@id == 1).name);
|
||||
|
||||
print("----------------------------------------");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,45 +1,41 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1997-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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
|
||||
* Norris Boyd
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Vector;
|
||||
|
||||
/**
|
||||
* Define a simple JavaScript File object.
|
||||
@@ -68,14 +64,10 @@ import java.util.ArrayList;
|
||||
* be wrapped as JavaScript exceptions when called from JavaScript,
|
||||
* and may be caught within JavaScript.
|
||||
*
|
||||
* @author Norris Boyd
|
||||
* @author Norris Boyd
|
||||
*/
|
||||
public class File extends ScriptableObject {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 2549960399774237828L;
|
||||
/**
|
||||
* The zero-parameter constructor.
|
||||
*
|
||||
@@ -96,7 +88,7 @@ public class File extends ScriptableObject {
|
||||
* to the use.
|
||||
*/
|
||||
public static Scriptable jsConstructor(Context cx, Object[] args,
|
||||
Function ctorObj,
|
||||
Function ctorObj,
|
||||
boolean inNewExpr)
|
||||
{
|
||||
File result = new File();
|
||||
@@ -113,7 +105,6 @@ public class File extends ScriptableObject {
|
||||
/**
|
||||
* Returns the name of this JavaScript class, "File".
|
||||
*/
|
||||
@Override
|
||||
public String getClassName() {
|
||||
return "File";
|
||||
}
|
||||
@@ -137,19 +128,32 @@ public class File extends ScriptableObject {
|
||||
*
|
||||
* @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
|
||||
throws IOException, JavaScriptException
|
||||
{
|
||||
List<String> list = new ArrayList<String>();
|
||||
Vector v = new Vector();
|
||||
String s;
|
||||
while ((s = jsFunction_readLine()) != null) {
|
||||
list.add(s);
|
||||
v.addElement(s);
|
||||
}
|
||||
String[] lines = list.toArray(new String[list.size()]);
|
||||
Object[] lines = new Object[v.size()];
|
||||
v.copyInto(lines);
|
||||
|
||||
Scriptable scope = ScriptableObject.getTopLevelScope(this);
|
||||
Context cx = Context.getCurrentContext();
|
||||
return cx.newObject(scope, "Array", lines);
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -239,8 +243,7 @@ public class File extends ScriptableObject {
|
||||
*
|
||||
* Close the file when this object is collected.
|
||||
*/
|
||||
@Override
|
||||
protected void finalize() {
|
||||
public void finalize() {
|
||||
try {
|
||||
jsFunction_close();
|
||||
}
|
||||
@@ -258,7 +261,7 @@ public class File extends ScriptableObject {
|
||||
// in a Scriptable object so that it can be manipulated by
|
||||
// JavaScript.
|
||||
Scriptable parent = ScriptableObject.getTopLevelScope(this);
|
||||
return Context.javaToJS(reader, parent);
|
||||
return Context.toObject(reader, parent);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -271,7 +274,7 @@ public class File extends ScriptableObject {
|
||||
if (writer == null)
|
||||
return null;
|
||||
Scriptable parent = ScriptableObject.getTopLevelScope(this);
|
||||
return Context.javaToJS(writer, parent);
|
||||
return Context.toObject(writer, parent);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,39 +1,36 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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):
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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.*;
|
||||
|
||||
@@ -79,7 +76,6 @@ import org.mozilla.javascript.*;
|
||||
*/
|
||||
|
||||
public class Foo extends ScriptableObject {
|
||||
private static final long serialVersionUID = -3833489808933339159L;
|
||||
|
||||
/**
|
||||
* The zero-parameter constructor.
|
||||
@@ -107,7 +103,6 @@ public class Foo extends ScriptableObject {
|
||||
/**
|
||||
* Returns the name of this JavaScript class, "Foo".
|
||||
*/
|
||||
@Override
|
||||
public String getClassName() {
|
||||
return "Foo";
|
||||
}
|
||||
@@ -145,6 +140,8 @@ public class Foo extends ScriptableObject {
|
||||
* @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,
|
||||
|
||||
59
mozilla/js/rhino/examples/Makefile
Normal file
59
mozilla/js/rhino/examples/Makefile
Normal file
@@ -0,0 +1,59 @@
|
||||
#! 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 :
|
||||
@@ -1,43 +1,39 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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):
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Vector;
|
||||
|
||||
/**
|
||||
* Matrix: An example host object class that implements the Scriptable interface.
|
||||
@@ -52,20 +48,21 @@ import java.util.ArrayList;
|
||||
* Here's a shell session showing the Matrix object in action:
|
||||
* <pre>
|
||||
* js> defineClass("Matrix")
|
||||
* js> var m = new Matrix(2); // A constructor call, see "Matrix(int dimension)"
|
||||
* js> m // Object.toString will call "Matrix.getClassName()"
|
||||
* [object 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> uneval(m[0]); // an array was created automatically!
|
||||
* js> m[0]; <i>an array was created automatically!</i>
|
||||
* [3]
|
||||
* js> uneval(m[1]); // array is created even if we don't set a value
|
||||
* js> m[1]; <i>array is created even if we don't set a value</i>
|
||||
* []
|
||||
* js> m.dim; // we can access the "dim" property
|
||||
* js> m.dim; <i>we can access the "dim" property</i>
|
||||
* 2
|
||||
* js> m.dim = 3;
|
||||
* 3
|
||||
* js> m.dim; // but not modify the "dim" property
|
||||
* js> m.dim; <i>but not modify it</i>
|
||||
* 2
|
||||
* </pre>
|
||||
*
|
||||
@@ -94,7 +91,7 @@ public class Matrix implements Scriptable {
|
||||
"Dimension of Matrix must be greater than zero");
|
||||
}
|
||||
dim = dimension;
|
||||
list = new ArrayList<Object>();
|
||||
v = new Vector();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -146,16 +143,15 @@ public class Matrix implements Scriptable {
|
||||
/**
|
||||
* Get the indexed property.
|
||||
* <p>
|
||||
* Look up the element in the associated list and return
|
||||
* 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) {
|
||||
while (index >= list.size()) {
|
||||
list.add(null);
|
||||
}
|
||||
Object result = list.get(index);
|
||||
if (index >= v.size())
|
||||
v.setSize(index+1);
|
||||
Object result = v.elementAt(index);
|
||||
if (result != null)
|
||||
return result;
|
||||
if (dim > 2) {
|
||||
@@ -168,7 +164,7 @@ public class Matrix implements Scriptable {
|
||||
Scriptable scope = ScriptableObject.getTopLevelScope(start);
|
||||
result = cx.newArray(scope, 0);
|
||||
}
|
||||
list.set(index, result);
|
||||
v.setElementAt(result, index);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -249,7 +245,7 @@ public class Matrix implements Scriptable {
|
||||
* Use the convenience method from Context that takes care of calling
|
||||
* toString, etc.
|
||||
*/
|
||||
public Object getDefaultValue(Class<?> typeHint) {
|
||||
public Object getDefaultValue(Class typeHint) {
|
||||
return "[object Matrix]";
|
||||
}
|
||||
|
||||
@@ -263,7 +259,7 @@ public class Matrix implements Scriptable {
|
||||
public boolean hasInstance(Scriptable value) {
|
||||
Scriptable proto = value.getPrototype();
|
||||
while (proto != null) {
|
||||
if (proto.equals(this))
|
||||
if (proto.equals(this))
|
||||
return true;
|
||||
proto = proto.getPrototype();
|
||||
}
|
||||
@@ -275,6 +271,6 @@ public class Matrix implements Scriptable {
|
||||
* Some private data for this class.
|
||||
*/
|
||||
private int dim;
|
||||
private List<Object> list;
|
||||
private Vector v;
|
||||
private Scriptable prototype, parent;
|
||||
}
|
||||
|
||||
@@ -1,53 +1,7 @@
|
||||
<!-- ***** BEGIN LICENSE BLOCK *****
|
||||
- Version: MPL 1.1/GPL 2.0
|
||||
-
|
||||
- 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 Rhino code, released May 6, 1999.
|
||||
-
|
||||
- The Initial Developer of the Original Code is
|
||||
- Netscape Communications Corporation.
|
||||
- Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
- the Initial Developer. All Rights Reserved.
|
||||
-
|
||||
- Contributor(s):
|
||||
-
|
||||
- Alternatively, the contents of this file may be used under the terms of
|
||||
- the GNU General Public License Version 2 or later (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
|
||||
- MPL, indicate your decision by deleting the provisions above and replacing
|
||||
- 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 MPL or the GPL.
|
||||
-
|
||||
- ***** END LICENSE BLOCK ***** -->
|
||||
|
||||
<html>
|
||||
<body>
|
||||
This is the NervousText applet in javascript:
|
||||
<applet archive="js.jar" code=NervousText width=200 height=50 >
|
||||
<applet code=NervousText.class width=200 height=50 >
|
||||
</applet>
|
||||
|
||||
<hr>
|
||||
The test assumes that applet code is generated with:
|
||||
<pre>
|
||||
java -classpath js.jar org.mozilla.javascript.tools.jsc.Main \
|
||||
-extends java.applet.Applet \
|
||||
-implements java.lang.Runnable \
|
||||
NervousText.js
|
||||
</pre>
|
||||
and the resulting 2 classes, NervousText.class extending java.applet.Applet and implementing java.lang.Runnable and NervousText1.class which represents compiled JavaScript code, are placed in the same directory as NervousText.html.
|
||||
<p>
|
||||
The test also assumes that js.jar from Rhino distribution is available in the same directory.
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,44 +1,10 @@
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
// 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
|
||||
Daniel Wyszynski
|
||||
Center for Applied Large-Scale Computing (CALC)
|
||||
04-12-95
|
||||
|
||||
Test of text animation.
|
||||
|
||||
@@ -57,7 +23,7 @@ var counter =0;
|
||||
var threadSuspended = false; //added by kwalrath
|
||||
|
||||
function init() {
|
||||
this.resize(150,50);
|
||||
this.resize(150,50);
|
||||
this.setFont(new Font("TimesRoman",Font.BOLD,36));
|
||||
s = this.getParameter("text");
|
||||
if (s == null) {
|
||||
@@ -67,7 +33,7 @@ function init() {
|
||||
}
|
||||
|
||||
function start() {
|
||||
if(killme == null)
|
||||
if(killme == null)
|
||||
{
|
||||
killme = new java.lang.Thread(java.lang.Runnable(this));
|
||||
killme.start();
|
||||
@@ -94,7 +60,7 @@ function paint(g) {
|
||||
g.drawChars(separated, i,1,x_coord,y_coord);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Added by kwalrath. */
|
||||
function mouseDown(evt, x, y) {
|
||||
if (threadSuspended) {
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Norris Boyd
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import org.mozilla.javascript.*;
|
||||
|
||||
/**
|
||||
* An example WrapFactory that can be used to avoid wrapping of Java types
|
||||
* that can be converted to ECMA primitive values.
|
||||
* So java.lang.String is mapped to ECMA string, all java.lang.Numbers are
|
||||
* mapped to ECMA numbers, and java.lang.Booleans are mapped to ECMA booleans
|
||||
* instead of being wrapped as objects. Additionally java.lang.Character is
|
||||
* converted to ECMA string with length 1.
|
||||
* Other types have the default behavior.
|
||||
* <p>
|
||||
* Note that calling "new java.lang.String('foo')" in JavaScript with this
|
||||
* wrap factory enabled will still produce a wrapped Java object since the
|
||||
* WrapFactory.wrapNewObject method is not overridden.
|
||||
* <p>
|
||||
* The PrimitiveWrapFactory is enabled on a Context by calling setWrapFactory
|
||||
* on that context.
|
||||
*/
|
||||
public class PrimitiveWrapFactory extends WrapFactory {
|
||||
@Override
|
||||
public Object wrap(Context cx, Scriptable scope, Object obj,
|
||||
Class<?> staticType)
|
||||
{
|
||||
if (obj instanceof String || obj instanceof Number ||
|
||||
obj instanceof Boolean)
|
||||
{
|
||||
return obj;
|
||||
} else if (obj instanceof Character) {
|
||||
char[] a = { ((Character)obj).charValue() };
|
||||
return new String(a);
|
||||
}
|
||||
return super.wrap(cx, scope, obj, staticType);
|
||||
}
|
||||
}
|
||||
@@ -1,78 +1,73 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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):
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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
|
||||
*
|
||||
* 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[])
|
||||
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();
|
||||
try {
|
||||
// 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();
|
||||
|
||||
// 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(Context.toString(result));
|
||||
|
||||
} finally {
|
||||
// Exit from the context.
|
||||
Context.exit();
|
||||
}
|
||||
|
||||
// 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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,68 +1,62 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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):
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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[])
|
||||
public static void main(String args[])
|
||||
throws JavaScriptException
|
||||
{
|
||||
Context cx = Context.enter();
|
||||
try {
|
||||
Scriptable scope = cx.initStandardObjects();
|
||||
Scriptable scope = cx.initStandardObjects(null);
|
||||
|
||||
// Add a global variable "out" that is a JavaScript reflection
|
||||
// of System.out
|
||||
Object jsOut = Context.javaToJS(System.out, scope);
|
||||
ScriptableObject.putProperty(scope, "out", jsOut);
|
||||
|
||||
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(Context.toString(result));
|
||||
} finally {
|
||||
Context.exit();
|
||||
}
|
||||
// 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,88 +1,80 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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):
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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
|
||||
*
|
||||
* Collects its arguments from the command line, executes the
|
||||
* script, and then ...
|
||||
*
|
||||
*
|
||||
* @author Norris Boyd
|
||||
*/
|
||||
public class RunScript3 {
|
||||
public static void main(String args[])
|
||||
public static void main(String args[])
|
||||
throws JavaScriptException
|
||||
{
|
||||
Context cx = Context.enter();
|
||||
try {
|
||||
Scriptable scope = cx.initStandardObjects();
|
||||
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);
|
||||
|
||||
// Collect the arguments into a single string.
|
||||
String s = "";
|
||||
for (int i=0; i < args.length; i++) {
|
||||
s += args[i];
|
||||
}
|
||||
// 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));
|
||||
|
||||
// Now evaluate the string we've collected. 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 fObj = scope.get("f", scope);
|
||||
if (!(fObj instanceof Function)) {
|
||||
System.out.println("f is undefined or not a function.");
|
||||
} else {
|
||||
Object functionArgs[] = { "my arg" };
|
||||
Function f = (Function)fObj;
|
||||
Object result = f.call(cx, scope, scope, functionArgs);
|
||||
String report = "f('my args') = " + Context.toString(result);
|
||||
System.out.println(report);
|
||||
}
|
||||
} finally {
|
||||
Context.exit();
|
||||
// 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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,77 +1,70 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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):
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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
|
||||
public static void main(String args[])
|
||||
throws Exception
|
||||
{
|
||||
Context cx = Context.enter();
|
||||
try {
|
||||
Scriptable scope = cx.initStandardObjects();
|
||||
Scriptable scope = cx.initStandardObjects(null);
|
||||
|
||||
// Use the Counter class to define a Counter constructor
|
||||
// and prototype in JavaScript.
|
||||
ScriptableObject.defineClass(scope, Counter.class);
|
||||
// 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(Context.toString(result));
|
||||
} finally {
|
||||
Context.exit();
|
||||
}
|
||||
// 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,39 +1,36 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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):
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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.*;
|
||||
@@ -46,15 +43,7 @@ import java.io.*;
|
||||
*
|
||||
* @author Norris Boyd
|
||||
*/
|
||||
public class Shell extends ScriptableObject
|
||||
{
|
||||
private static final long serialVersionUID = -5638074146250193112L;
|
||||
|
||||
@Override
|
||||
public String getClassName()
|
||||
{
|
||||
return "global";
|
||||
}
|
||||
public class Shell extends ScriptableObject {
|
||||
|
||||
/**
|
||||
* Main entry point.
|
||||
@@ -67,38 +56,42 @@ public class Shell extends ScriptableObject
|
||||
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 {
|
||||
// Initialize the standard objects (Object, Function, etc.)
|
||||
// This must be done before scripts can be executed.
|
||||
Shell shell = new Shell();
|
||||
cx.initStandardObjects(shell);
|
||||
|
||||
// Define some global functions particular to the shell. Note
|
||||
// that these functions are not part of ECMA.
|
||||
String[] names = { "print", "quit", "version", "load", "help" };
|
||||
shell.defineFunctionProperties(names, Shell.class,
|
||||
ScriptableObject.DONTENUM);
|
||||
|
||||
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;
|
||||
if (args.length == 0) {
|
||||
array = new Object[0];
|
||||
} else {
|
||||
int length = args.length - 1;
|
||||
array = new Object[length];
|
||||
System.arraycopy(args, 1, array, 0, length);
|
||||
}
|
||||
Scriptable argsObj = cx.newArray(shell, array);
|
||||
shell.defineProperty("arguments", argsObj,
|
||||
ScriptableObject.DONTENUM);
|
||||
|
||||
shell.processSource(cx, args.length == 0 ? null : args[0]);
|
||||
} finally {
|
||||
Context.exit();
|
||||
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();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -116,7 +109,7 @@ public class Shell extends ScriptableObject
|
||||
if (arg.equals("-version")) {
|
||||
if (++i == args.length)
|
||||
usage(arg);
|
||||
double d = Context.toNumber(args[i]);
|
||||
double d = cx.toNumber(args[i]);
|
||||
if (d != d)
|
||||
usage(arg);
|
||||
cx.setLanguageVersion((int) d);
|
||||
@@ -127,13 +120,25 @@ public class Shell extends ScriptableObject
|
||||
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.
|
||||
*/
|
||||
private static void usage(String s) {
|
||||
public static void usage(String s) {
|
||||
p("Didn't understand \"" + s + "\".");
|
||||
p("Valid arguments are:");
|
||||
p("-version 100|110|120|130|140|150|160|170");
|
||||
p("-version 100|110|120|130");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
@@ -142,7 +147,7 @@ public class Shell extends ScriptableObject
|
||||
*
|
||||
* This method is defined as a JavaScript function.
|
||||
*/
|
||||
public void help() {
|
||||
public static void help(String s) {
|
||||
p("");
|
||||
p("Command Description");
|
||||
p("======= ===========");
|
||||
@@ -192,8 +197,7 @@ public class Shell extends ScriptableObject
|
||||
*
|
||||
* This method is defined as a JavaScript function.
|
||||
*/
|
||||
public void quit()
|
||||
{
|
||||
public static void quit() {
|
||||
quitting = true;
|
||||
}
|
||||
|
||||
@@ -205,9 +209,9 @@ public class Shell extends ScriptableObject
|
||||
public static double version(Context cx, Scriptable thisObj,
|
||||
Object[] args, Function funObj)
|
||||
{
|
||||
double result = cx.getLanguageVersion();
|
||||
double result = (double) cx.getLanguageVersion();
|
||||
if (args.length > 0) {
|
||||
double d = Context.toNumber(args[0]);
|
||||
double d = cx.toNumber(args[0]);
|
||||
cx.setLanguageVersion((int) d);
|
||||
}
|
||||
return result;
|
||||
@@ -222,9 +226,8 @@ public class Shell extends ScriptableObject
|
||||
public static void load(Context cx, Scriptable thisObj,
|
||||
Object[] args, Function funObj)
|
||||
{
|
||||
Shell shell = (Shell)getTopLevelScope(thisObj);
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
shell.processSource(cx, Context.toString(args[i]));
|
||||
for (int i=0; i < args.length; i++) {
|
||||
processSource(cx, cx.toString(args[i]));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -236,8 +239,7 @@ public class Shell extends ScriptableObject
|
||||
* @param filename the name of the file to compile, or null
|
||||
* for interactive mode.
|
||||
*/
|
||||
private void processSource(Context cx, String filename)
|
||||
{
|
||||
public static void processSource(Context cx, String filename) {
|
||||
if (filename == null) {
|
||||
BufferedReader in = new BufferedReader
|
||||
(new InputStreamReader(System.in));
|
||||
@@ -269,11 +271,11 @@ public class Shell extends ScriptableObject
|
||||
if (cx.stringIsCompilableUnit(source))
|
||||
break;
|
||||
}
|
||||
Object result = cx.evaluateString(this, source,
|
||||
Object result = cx.evaluateString(global, source,
|
||||
sourceName, startline,
|
||||
null);
|
||||
if (result != Context.getUndefinedValue()) {
|
||||
System.err.println(Context.toString(result));
|
||||
if (result != cx.getUndefinedValue()) {
|
||||
System.err.println(cx.toString(result));
|
||||
}
|
||||
}
|
||||
catch (WrappedException we) {
|
||||
@@ -313,7 +315,7 @@ public class Shell extends ScriptableObject
|
||||
// Here we evalute the entire contents of the file as
|
||||
// a script. Text is printed only if the print() function
|
||||
// is called.
|
||||
cx.evaluateReader(this, in, filename, 1, null);
|
||||
cx.evaluateReader(global, in, filename, 1, null);
|
||||
}
|
||||
catch (WrappedException we) {
|
||||
System.err.println(we.getWrappedException().toString());
|
||||
@@ -337,12 +339,14 @@ public class Shell extends ScriptableObject
|
||||
}
|
||||
}
|
||||
}
|
||||
System.gc();
|
||||
}
|
||||
|
||||
private static void p(String s) {
|
||||
System.out.println(s);
|
||||
}
|
||||
|
||||
private boolean quitting;
|
||||
static Shell global;
|
||||
static boolean quitting;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,111 +1,63 @@
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/*
|
||||
* SwingApplication.js - a translation into JavaScript of
|
||||
* SwingApplication.java, a java.sun.com Swing example.
|
||||
*
|
||||
*
|
||||
* @author Roger E Critchlow, Jr.
|
||||
*/
|
||||
|
||||
var swingNames = JavaImporter();
|
||||
importPackage(Packages.javax.swing);
|
||||
importPackage(Packages.java.awt);
|
||||
importPackage(Packages.java.awt.event);
|
||||
|
||||
swingNames.importPackage(Packages.javax.swing);
|
||||
swingNames.importPackage(Packages.java.awt);
|
||||
swingNames.importPackage(Packages.java.awt.event);
|
||||
|
||||
function createComponents()
|
||||
{
|
||||
with (swingNames) {
|
||||
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.mnemonic = KeyEvent.VK_I;
|
||||
// Since Rhino 1.5R5 JS functions can be passed to Java method if
|
||||
// corresponding argument type is Java interface with single method
|
||||
// or all its methods have the same number of arguments and the
|
||||
// corresponding arguments has the same type. See also comments for
|
||||
// frame.addWindowListener bellow
|
||||
button.addActionListener(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.border = BorderFactory.createEmptyBorder(30, //top
|
||||
30, //left
|
||||
10, //bottom
|
||||
30); //right
|
||||
pane.setLayout(new GridLayout(0, 1));
|
||||
pane.add(button);
|
||||
pane.add(label);
|
||||
|
||||
return pane;
|
||||
}
|
||||
}
|
||||
|
||||
with (swingNames) {
|
||||
try {
|
||||
UIManager.
|
||||
setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
|
||||
} catch (e) { }
|
||||
|
||||
//Create the top-level container and add contents to it.
|
||||
var frame = new swingNames.JFrame("SwingApplication");
|
||||
frame.getContentPane().add(createComponents(), BorderLayout.CENTER);
|
||||
|
||||
// Pass JS function as implementation of WindowListener. It is allowed since
|
||||
// all methods in WindowListener have the same signature. To distinguish
|
||||
// between methods Rhino passes to JS function the name of corresponding
|
||||
// method as the last argument
|
||||
frame.addWindowListener(function(event, methodName) {
|
||||
if (methodName == "windowClosing") {
|
||||
java.lang.System.exit(0);
|
||||
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);
|
||||
|
||||
//Finish setting up the frame, and show it.
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
/*
|
||||
* 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);
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,47 +1,44 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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
|
||||
* Norris Boyd
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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
|
||||
* tags in the documentation comments match with the parameters for
|
||||
* the associated Java methods.
|
||||
* <p>
|
||||
* Any errors found are reported.
|
||||
@@ -57,12 +54,12 @@ function stringEndsWith(str, suffix) {
|
||||
/**
|
||||
* Perform processing once the end of a documentation comment is seen.
|
||||
*
|
||||
* Look for a parameter list following the end of the comment and
|
||||
* 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
|
||||
* @param line the string containing the comment end (in case the
|
||||
* parameters are on the same line)
|
||||
*/
|
||||
function processCommentEnd(f, a, line) {
|
||||
@@ -75,14 +72,14 @@ function processCommentEnd(f, a, line) {
|
||||
var m = line.match(/\(([^\)]+)\)/);
|
||||
var args = m ? m[1].split(",") : [];
|
||||
if (a.length != args.length) {
|
||||
print('"' + f.name +
|
||||
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 +
|
||||
print('"' + f.name +
|
||||
'"; line ' + f.lineNumber +
|
||||
' mismatch: had "' + a[i] +
|
||||
'" and "' + args[i] + '".');
|
||||
@@ -91,9 +88,9 @@ function processCommentEnd(f, a, line) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Process the given file, looking for mismatched @param lists and
|
||||
* Process the given file, looking for mismatched @param lists and
|
||||
* parameter lists.
|
||||
* @param f the file to process
|
||||
*/
|
||||
@@ -107,11 +104,11 @@ function processFile(f) {
|
||||
if (line.match(/@param/)) {
|
||||
while (m = line.match(/@param[ ]+([^ ]+)/)) {
|
||||
a[i++] = m[1];
|
||||
line = f.readLine();
|
||||
line = f.readLine();
|
||||
if (line == null)
|
||||
break outer;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (i != 0 && line.match(/\*\//)) {
|
||||
processCommentEnd(f, a, line);
|
||||
i = 0;
|
||||
@@ -119,7 +116,7 @@ function processFile(f) {
|
||||
}
|
||||
}
|
||||
if (i != 0) {
|
||||
print('"' + f.name +
|
||||
print('"' + f.name +
|
||||
'"; line ' + f.lineNumber +
|
||||
' missing parameters at end of file.');
|
||||
}
|
||||
|
||||
@@ -1,68 +1,69 @@
|
||||
/* -*- tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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
|
||||
* Patrick Beard
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
Implementing the interface java.util.Enumeration passing the object
|
||||
with JavaScript implementation directly to the constructor.
|
||||
This is a shorthand for JavaAdapter constructor:
|
||||
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:
|
||||
|
||||
elements = new JavaAdapter(java.util.Enumeration, {
|
||||
index: 0,
|
||||
elements: array,
|
||||
hasMoreElements: function ...
|
||||
nextElement: function ...
|
||||
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++];
|
||||
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())
|
||||
|
||||
@@ -1,41 +1,38 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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
|
||||
* Norris Boyd
|
||||
* Roland Pennings
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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
|
||||
@@ -43,7 +40,7 @@
|
||||
* @author Norris Boyd
|
||||
* @see rhinotip.jar
|
||||
* @lastmodified xx
|
||||
* @version 1.2 Roland Pennings: Allow multiple files for a function.
|
||||
* @version 1.2 Roland Pennings: Allow multiple files for a function.
|
||||
* @version 1.3 Roland Pennings: Removes ../.. from the input directory name
|
||||
*/
|
||||
defineClass("File")
|
||||
@@ -64,7 +61,7 @@ var debug = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Process JavaScript source file <code>f</code>, writing jsdoc to
|
||||
* 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)
|
||||
@@ -75,11 +72,11 @@ 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 name=\"_top_\"></a><pre><a href=\"' + indexFile + '\">Index Files</a> ';
|
||||
outstr += '<a href=\"' + indexFunction + '\">Index Functions</a></pre><hr>';
|
||||
out.writeLine(outstr);
|
||||
}
|
||||
@@ -101,7 +98,7 @@ function processFile(f, fname, inputdir, out) {
|
||||
// Strip leading whitespace and "*".
|
||||
comment += s.replace(/^\s*\*/, "");
|
||||
s = f.readLine();
|
||||
} while (s != null);
|
||||
} while (s != null);
|
||||
|
||||
if (debug)
|
||||
print("Found comment " + comment);
|
||||
@@ -119,7 +116,7 @@ function processFile(f, fname, inputdir, out) {
|
||||
// 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+))\(([^)]*)\)/);
|
||||
m = s.match(/^\s*function\s+((\w+)|(\w+)(\s+))\(([^)]*)\)/);
|
||||
if (m != null)
|
||||
{
|
||||
// Found a function start
|
||||
@@ -129,8 +126,8 @@ function processFile(f, fname, inputdir, out) {
|
||||
// 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 separate file with the function table of contents
|
||||
// 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
|
||||
@@ -138,26 +135,26 @@ function processFile(f, fname, inputdir, out) {
|
||||
filename = filename + "|" + fname;
|
||||
// print("filename = " + filename);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
indexFunctionArray[m[1]] = {filename:fname};
|
||||
}
|
||||
//reset comment
|
||||
//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.
|
||||
// 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 separate file with the function table of contents
|
||||
// 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
|
||||
@@ -165,15 +162,15 @@ function processFile(f, fname, inputdir, out) {
|
||||
filename = filename + "|" + fname;
|
||||
// print("filename = " + filename);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
indexFunctionArray[m[1]] = {filename:fname};
|
||||
}
|
||||
//reset comment
|
||||
//reset comment
|
||||
comment = "";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
firstLine = false;
|
||||
}
|
||||
|
||||
@@ -196,7 +193,7 @@ function processFile(f, fname, inputdir, out) {
|
||||
out.writeLine('</BODY></HTML>');
|
||||
|
||||
// Now clean up the doc array
|
||||
functionDocArray = [];
|
||||
functionDocArray = [];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -218,7 +215,7 @@ function processFunction(name, args, comment) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Process a method being bound to a prototype.
|
||||
* 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
|
||||
@@ -247,11 +244,11 @@ function processPrototypeMethod(proto, name, args, comment) {
|
||||
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
|
||||
// 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.
|
||||
// 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
|
||||
@@ -263,9 +260,9 @@ function processComment(comment,firstLine,fname) {
|
||||
tags[name] = a;
|
||||
return "";
|
||||
});
|
||||
|
||||
|
||||
// if we have a comment at the beginning of a file
|
||||
// store the comment for the index file
|
||||
// store the comment for the index file
|
||||
if (firstLine) {
|
||||
indexFileArray[fname] = comment;
|
||||
}
|
||||
@@ -277,7 +274,7 @@ function processComment(comment,firstLine,fname) {
|
||||
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>' +
|
||||
params += '<TR><TD><I>'+m[1]+'</I></TD>' +
|
||||
'<TD>'+m[2]+'</TD></TR>';
|
||||
}
|
||||
out += '<TABLE WIDTH="90%" BORDER=1>';
|
||||
@@ -329,7 +326,7 @@ function processComment(comment,firstLine,fname) {
|
||||
out += '<DT><B>Last modified:</B><DD>';
|
||||
out += '<script><!--\n';
|
||||
out += 'document.writeln(document.lastModified);\n';
|
||||
out += '// ---></script>\n';
|
||||
out += '// ---></script>\n';
|
||||
out += '</DL><P>';
|
||||
}
|
||||
|
||||
@@ -341,9 +338,9 @@ function processComment(comment,firstLine,fname) {
|
||||
* 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;
|
||||
@@ -358,18 +355,18 @@ function CreateOutputFile(outputdir,htmlfile)
|
||||
}
|
||||
|
||||
/**
|
||||
* Process a javascript file. Puts the generated HTML file in the outdir
|
||||
* 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)
|
||||
function processJSFile(filename,inputdir)
|
||||
{
|
||||
if (debug) print("filename = " + filename + " inputdir = " + inputdir);
|
||||
|
||||
if (!filename.match(/\.js$/)) {
|
||||
print("Expected filename to end in '.js'; had instead " +
|
||||
if (!filename.match(/\.js$/)) {
|
||||
print("Expected filename to end in '.js'; had instead " +
|
||||
filename + ". I don't treat the file.");
|
||||
} else {
|
||||
} else {
|
||||
if (inputdir==null)
|
||||
{
|
||||
var inname = filename;
|
||||
@@ -382,12 +379,12 @@ function processJSFile(filename,inputdir)
|
||||
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();
|
||||
}
|
||||
@@ -401,7 +398,7 @@ 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');
|
||||
@@ -415,7 +412,7 @@ function GenerateIndex(dirname)
|
||||
// sort the index file array
|
||||
var SortedFileArray = [];
|
||||
for (var fname in indexFileArray)
|
||||
SortedFileArray.push(fname);
|
||||
SortedFileArray.push(fname);
|
||||
SortedFileArray.sort();
|
||||
|
||||
for (var i=0; i < SortedFileArray.length; i++) {
|
||||
@@ -430,10 +427,10 @@ function GenerateIndex(dirname)
|
||||
}
|
||||
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');
|
||||
@@ -441,11 +438,11 @@ function GenerateIndex(dirname)
|
||||
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.push(functionname);
|
||||
SortedFunctionArray.sort();
|
||||
|
||||
for (var j=0; j < SortedFunctionArray.length; j++) {
|
||||
@@ -479,10 +476,10 @@ function PrintOptions()
|
||||
|
||||
|
||||
// Main Script
|
||||
// first read the arguments
|
||||
// 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(/^\-/)) {
|
||||
@@ -492,7 +489,7 @@ for (var i=0; i < arguments.length; i++) {
|
||||
outputdir = String(arguments[i+1]);
|
||||
if (debug) print("outputdir: + \'" + outputdir + "\'");
|
||||
|
||||
i++;
|
||||
i++;
|
||||
}
|
||||
else if (String(arguments[i])=="-i"){
|
||||
// process all files in an input directory
|
||||
@@ -513,16 +510,16 @@ if (debug) print("inputdir: + \'" + arguments[i+1] + "\'");
|
||||
|
||||
FileList.push(String(arguments[i]));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// first handle the single files
|
||||
for (var i in FileList)
|
||||
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
|
||||
@@ -531,13 +528,13 @@ for (var j in DirList) {
|
||||
|
||||
// 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();
|
||||
@@ -546,7 +543,7 @@ print("indexFunction = " + indexFunction);
|
||||
for (var i=0; i < lst.length; i++)
|
||||
{
|
||||
processJSFile(String(lst[i]),inputdir);
|
||||
}
|
||||
}
|
||||
|
||||
// generate the index files for the input directory
|
||||
GenerateIndex(inputDirName);
|
||||
|
||||
@@ -1,47 +1,44 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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
|
||||
* Norris Boyd
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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.,
|
||||
// by its package. Packages other than "java" must start with "Packages", i.e.,
|
||||
// "Packages.javax.servlet...".
|
||||
var sb = new java.lang.StringBuffer();
|
||||
|
||||
@@ -54,4 +51,4 @@ 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);
|
||||
print(sb);
|
||||
|
||||
@@ -1,46 +1,43 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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
|
||||
* Norris Boyd
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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
|
||||
// "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]);
|
||||
@@ -53,4 +50,4 @@ while ((line = f.readLine()) != null) {
|
||||
}
|
||||
for (i in o) {
|
||||
print(i);
|
||||
}
|
||||
}
|
||||
|
||||
0
mozilla/js/rhino/macbuild/import
Normal file
0
mozilla/js/rhino/macbuild/import
Normal file
BIN
mozilla/js/rhino/macbuild/js.mcp
Normal file
BIN
mozilla/js/rhino/macbuild/js.mcp
Normal file
Binary file not shown.
3564
mozilla/js/rhino/macbuild/js.mcp.xml
Normal file
3564
mozilla/js/rhino/macbuild/js.mcp.xml
Normal file
File diff suppressed because it is too large
Load Diff
1063
mozilla/js/rhino/macbuild/js6.xml
Normal file
1063
mozilla/js/rhino/macbuild/js6.xml
Normal file
File diff suppressed because it is too large
Load Diff
3573
mozilla/js/rhino/macbuild/jscore.xml
Normal file
3573
mozilla/js/rhino/macbuild/jscore.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
mozilla/js/rhino/macbuild/jsdebug.mcp
Executable file
BIN
mozilla/js/rhino/macbuild/jsdebug.mcp
Executable file
Binary file not shown.
BIN
mozilla/js/rhino/macbuild/jsopt.mcp
Executable file
BIN
mozilla/js/rhino/macbuild/jsopt.mcp
Executable file
Binary file not shown.
1291
mozilla/js/rhino/macbuild/jstools.xml
Normal file
1291
mozilla/js/rhino/macbuild/jstools.xml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,106 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- ***** BEGIN LICENSE BLOCK *****
|
||||
- Version: MPL 1.1/GPL 2.0
|
||||
-
|
||||
- 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 Rhino code, released May 6, 1999.
|
||||
-
|
||||
- The Initial Developer of the Original Code is
|
||||
- Netscape Communications Corporation.
|
||||
- Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
- the Initial Developer. All Rights Reserved.
|
||||
-
|
||||
- Contributor(s):
|
||||
-
|
||||
- Alternatively, the contents of this file may be used under the terms of
|
||||
- the GNU General Public License Version 2 or later (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
|
||||
- MPL, indicate your decision by deleting the provisions above and replacing
|
||||
- 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 MPL or the GPL.
|
||||
-
|
||||
- ***** END LICENSE BLOCK ***** -->
|
||||
|
||||
|
||||
<!--
|
||||
<!--
|
||||
Build file for Rhino using Ant (see http://jakarta.apache.org/ant/index.html)
|
||||
Requires Ant version 1.2
|
||||
-->
|
||||
<project name="src" default="compile" basedir="..">
|
||||
<project name="src" default="build" basedir=".">
|
||||
|
||||
<property file="build.properties"/>
|
||||
|
||||
<available property="jdk15"
|
||||
classname="java.lang.reflect.ParameterizedType" />
|
||||
|
||||
<target name="compile" depends="compile-most,compile-jdk15">
|
||||
<target name="properties">
|
||||
<property name="nest" value=".."/>
|
||||
</target>
|
||||
|
||||
<target name="shell" depends="compile">
|
||||
<java classname="org.mozilla.javascript.tools.shell.Main"
|
||||
classpath="${classes}"
|
||||
fork="true">
|
||||
<arg line="-version 170"/>
|
||||
</java>
|
||||
</target>
|
||||
|
||||
<target name="compile-most">
|
||||
<javac srcdir="src"
|
||||
destdir="${classes}"
|
||||
<target name="compile" depends="properties">
|
||||
<javac srcdir="."
|
||||
destdir="${nest}/${build.dest}"
|
||||
includes="org/**/*.java"
|
||||
excludes="org/**/jdk15/*.java"
|
||||
deprecation="on"
|
||||
debug="${debug}"
|
||||
target="${target-jvm}"
|
||||
source="${source-level}"
|
||||
>
|
||||
debug="${debug}">
|
||||
</javac>
|
||||
<copy todir="${classes}">
|
||||
<fileset dir="src" includes="org/**/*.properties" />
|
||||
<filterset>
|
||||
<filter token="IMPLEMENTATION.VERSION"
|
||||
value="${implementation.version}"/>
|
||||
</filterset>
|
||||
</copy>
|
||||
</target>
|
||||
|
||||
<target name="compile-jdk15" if="jdk15">
|
||||
<javac srcdir="src"
|
||||
destdir="${classes}"
|
||||
includes="org/**/jdk15/*.java"
|
||||
deprecation="on"
|
||||
debug="${debug}"
|
||||
target="${target-jvm}"
|
||||
source="${source-level}"
|
||||
>
|
||||
</javac>
|
||||
<target name="copy-properties">
|
||||
<copy todir="${nest}/${build.dest}">
|
||||
<fileset dir="." includes="org/**/*.properties" />
|
||||
</copy>
|
||||
</target>
|
||||
|
||||
<target name="copy-source">
|
||||
<mkdir dir="${dist.dir}/src"/>
|
||||
<copy todir="${dist.dir}/src">
|
||||
<fileset dir="src"
|
||||
includes="**/*.java,**/*.properties,**/*.xml,manifest"/>
|
||||
<copy todir="${nest}/${dist.src}">
|
||||
<fileset dir="."
|
||||
includes="org/**/*.java,org/**/*.properties,build.xml,manifest"/>
|
||||
</copy>
|
||||
</target>
|
||||
|
||||
<target name="clean">
|
||||
<delete includeEmptyDirs="true">
|
||||
<fileset dir="${classes}"
|
||||
excludes="org/mozilla/javascript/tools/**"/>
|
||||
</delete>
|
||||
</target>
|
||||
<target name="build" depends="compile,copy-properties,copy-source"/>
|
||||
|
||||
</project>
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
Manifest-Version: 1.0
|
||||
Main-Class: org.mozilla.javascript.tools.shell.Main
|
||||
Class-Path: xbean.jar
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* 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.
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,41 +1,37 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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
|
||||
* Contributor(s):
|
||||
* Norris Boyd
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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;
|
||||
|
||||
@@ -47,276 +43,98 @@ package org.mozilla.javascript;
|
||||
* @see org.mozilla.javascript.NativeCall
|
||||
* @author Norris Boyd
|
||||
*/
|
||||
final class Arguments extends IdScriptableObject
|
||||
{
|
||||
static final long serialVersionUID = 4275508002492040609L;
|
||||
class Arguments extends ScriptableObject {
|
||||
|
||||
public Arguments(NativeCall activation)
|
||||
{
|
||||
public Arguments(NativeCall activation) {
|
||||
this.activation = activation;
|
||||
|
||||
Scriptable parent = activation.getParentScope();
|
||||
setParentScope(parent);
|
||||
setPrototype(ScriptableObject.getObjectPrototype(parent));
|
||||
|
||||
args = activation.originalArgs;
|
||||
lengthObj = Integer.valueOf(args.length);
|
||||
args = activation.getOriginalArguments();
|
||||
int length = args.length;
|
||||
Object callee = activation.funObj;
|
||||
|
||||
NativeFunction f = activation.function;
|
||||
calleeObj = f;
|
||||
defineProperty("length", new Integer(length),
|
||||
ScriptableObject.DONTENUM);
|
||||
defineProperty("callee", callee, ScriptableObject.DONTENUM);
|
||||
|
||||
int version = f.getLanguageVersion();
|
||||
if (version <= Context.VERSION_1_3
|
||||
&& version != Context.VERSION_DEFAULT)
|
||||
{
|
||||
callerObj = null;
|
||||
} else {
|
||||
callerObj = NOT_FOUND;
|
||||
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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getClassName()
|
||||
{
|
||||
return "Object";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean has(int index, Scriptable start)
|
||||
{
|
||||
public Object get(int index, Scriptable start) {
|
||||
if (0 <= index && index < args.length) {
|
||||
if (args[index] != NOT_FOUND) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return super.has(index, start);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object get(int index, Scriptable start)
|
||||
{
|
||||
if (0 <= index && index < args.length) {
|
||||
Object value = args[index];
|
||||
if (value != NOT_FOUND) {
|
||||
if (sharedWithActivation(index)) {
|
||||
NativeFunction f = activation.function;
|
||||
String argName = f.getParamOrVarName(index);
|
||||
value = activation.get(argName, activation);
|
||||
if (value == NOT_FOUND) Kit.codeBug();
|
||||
}
|
||||
return value;
|
||||
}
|
||||
NativeFunction f = activation.funObj;
|
||||
if (index < f.argCount)
|
||||
return activation.get(f.argNames[index], activation);
|
||||
return args[index];
|
||||
}
|
||||
return super.get(index, start);
|
||||
}
|
||||
|
||||
private boolean sharedWithActivation(int index)
|
||||
{
|
||||
NativeFunction f = activation.function;
|
||||
int definedCount = f.getParamCount();
|
||||
if (index < definedCount) {
|
||||
// Check if argument is not hidden by later argument with the same
|
||||
// name as hidden arguments are not shared with activation
|
||||
if (index < definedCount - 1) {
|
||||
String argName = f.getParamOrVarName(index);
|
||||
for (int i = index + 1; i < definedCount; i++) {
|
||||
if (argName.equals(f.getParamOrVarName(i))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
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;
|
||||
}
|
||||
return false;
|
||||
super.put(name, start, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void put(int index, Scriptable start, Object value)
|
||||
{
|
||||
public void put(int index, Scriptable start, Object value) {
|
||||
if (0 <= index && index < args.length) {
|
||||
if (args[index] != NOT_FOUND) {
|
||||
if (sharedWithActivation(index)) {
|
||||
String argName;
|
||||
argName = activation.function.getParamOrVarName(index);
|
||||
activation.put(argName, activation, value);
|
||||
return;
|
||||
}
|
||||
synchronized (this) {
|
||||
if (args[index] != NOT_FOUND) {
|
||||
if (args == activation.originalArgs) {
|
||||
args = args.clone();
|
||||
}
|
||||
args[index] = value;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(int index)
|
||||
{
|
||||
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) {
|
||||
synchronized (this) {
|
||||
if (args[index] != NOT_FOUND) {
|
||||
if (args == activation.originalArgs) {
|
||||
args = args.clone();
|
||||
}
|
||||
args[index] = NOT_FOUND;
|
||||
return;
|
||||
}
|
||||
}
|
||||
NativeFunction f = activation.funObj;
|
||||
if (index < f.argCount)
|
||||
activation.delete(f.argNames[index]);
|
||||
else
|
||||
args[index] = Undefined.instance;
|
||||
}
|
||||
super.delete(index);
|
||||
}
|
||||
|
||||
// #string_id_map#
|
||||
|
||||
private static final int
|
||||
Id_callee = 1,
|
||||
Id_length = 2,
|
||||
Id_caller = 3,
|
||||
|
||||
MAX_INSTANCE_ID = 3;
|
||||
|
||||
@Override
|
||||
protected int getMaxInstanceId()
|
||||
{
|
||||
return MAX_INSTANCE_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int findInstanceIdInfo(String s)
|
||||
{
|
||||
int id;
|
||||
// #generated# Last update: 2007-05-09 08:15:04 EDT
|
||||
L0: { id = 0; String X = null; int c;
|
||||
if (s.length()==6) {
|
||||
c=s.charAt(5);
|
||||
if (c=='e') { X="callee";id=Id_callee; }
|
||||
else if (c=='h') { X="length";id=Id_length; }
|
||||
else if (c=='r') { X="caller";id=Id_caller; }
|
||||
}
|
||||
if (X!=null && X!=s && !X.equals(s)) id = 0;
|
||||
break L0;
|
||||
}
|
||||
// #/generated#
|
||||
|
||||
if (id == 0) return super.findInstanceIdInfo(s);
|
||||
|
||||
int attr;
|
||||
switch (id) {
|
||||
case Id_callee:
|
||||
case Id_caller:
|
||||
case Id_length:
|
||||
attr = DONTENUM;
|
||||
break;
|
||||
default: throw new IllegalStateException();
|
||||
}
|
||||
return instanceIdInfo(attr, id);
|
||||
}
|
||||
|
||||
// #/string_id_map#
|
||||
|
||||
@Override
|
||||
protected String getInstanceIdName(int id)
|
||||
{
|
||||
switch (id) {
|
||||
case Id_callee: return "callee";
|
||||
case Id_length: return "length";
|
||||
case Id_caller: return "caller";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object getInstanceIdValue(int id)
|
||||
{
|
||||
switch (id) {
|
||||
case Id_callee: return calleeObj;
|
||||
case Id_length: return lengthObj;
|
||||
case Id_caller: {
|
||||
Object value = callerObj;
|
||||
if (value == UniqueTag.NULL_VALUE) { value = null; }
|
||||
else if (value == null) {
|
||||
NativeCall caller = activation.parentActivationCall;
|
||||
if (caller != null) {
|
||||
value = caller.get("arguments", caller);
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return super.getInstanceIdValue(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setInstanceIdValue(int id, Object value)
|
||||
{
|
||||
switch (id) {
|
||||
case Id_callee: calleeObj = value; return;
|
||||
case Id_length: lengthObj = value; return;
|
||||
case Id_caller:
|
||||
callerObj = (value != null) ? value : UniqueTag.NULL_VALUE;
|
||||
return;
|
||||
}
|
||||
super.setInstanceIdValue(id, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
Object[] getIds(boolean getAll)
|
||||
{
|
||||
Object[] ids = super.getIds(getAll);
|
||||
if (getAll && args.length != 0) {
|
||||
boolean[] present = null;
|
||||
int extraCount = args.length;
|
||||
for (int i = 0; i != ids.length; ++i) {
|
||||
Object id = ids[i];
|
||||
if (id instanceof Integer) {
|
||||
int index = ((Integer)id).intValue();
|
||||
if (0 <= index && index < args.length) {
|
||||
if (present == null) {
|
||||
present = new boolean[args.length];
|
||||
}
|
||||
if (!present[index]) {
|
||||
present[index] = true;
|
||||
extraCount--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (extraCount != 0) {
|
||||
Object[] tmp = new Object[extraCount + ids.length];
|
||||
System.arraycopy(ids, 0, tmp, extraCount, ids.length);
|
||||
ids = tmp;
|
||||
int offset = 0;
|
||||
for (int i = 0; i != args.length; ++i) {
|
||||
if (present == null || !present[i]) {
|
||||
ids[offset] = Integer.valueOf(i);
|
||||
++offset;
|
||||
}
|
||||
}
|
||||
if (offset != extraCount) Kit.codeBug();
|
||||
}
|
||||
}
|
||||
return ids;
|
||||
}
|
||||
|
||||
// Fields to hold caller, callee and length properties,
|
||||
// where NOT_FOUND value tags deleted properties.
|
||||
// In addition if callerObj == NULL_VALUE, it tags null for scripts, as
|
||||
// initial callerObj == null means access to caller arguments available
|
||||
// only in JS <= 1.3 scripts
|
||||
private Object callerObj;
|
||||
private Object calleeObj;
|
||||
private Object lengthObj;
|
||||
|
||||
private NativeCall activation;
|
||||
|
||||
// Initially args holds activation.getOriginalArgs(), but any modification
|
||||
// of its elements triggers creation of a copy. If its element holds NOT_FOUND,
|
||||
// it indicates deleted index, in which case super class is queried.
|
||||
private Object[] args;
|
||||
private boolean hasCaller;
|
||||
}
|
||||
|
||||
@@ -1,43 +1,40 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.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/
|
||||
*
|
||||
* 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.
|
||||
* 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 the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
* 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
|
||||
* 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 General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
* 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;
|
||||
|
||||
@@ -46,31 +43,25 @@ package org.mozilla.javascript;
|
||||
* See ECMA 15.3.
|
||||
* @author Norris Boyd
|
||||
*/
|
||||
public class BaseFunction extends IdScriptableObject implements Function
|
||||
{
|
||||
public class BaseFunction extends IdScriptable implements Function {
|
||||
|
||||
static final long serialVersionUID = 5311394446546053859L;
|
||||
|
||||
private static final Object FUNCTION_TAG = "Function";
|
||||
|
||||
static void init(Scriptable scope, boolean sealed)
|
||||
{
|
||||
static void init(Context cx, Scriptable scope, boolean sealed) {
|
||||
BaseFunction obj = new BaseFunction();
|
||||
// Function.prototype attributes: see ECMA 15.3.3.1
|
||||
obj.prototypePropertyAttributes = DONTENUM | READONLY | PERMANENT;
|
||||
obj.exportAsJSClass(MAX_PROTOTYPE_ID, scope, sealed);
|
||||
obj.prototypeFlag = true;
|
||||
obj.functionName = "";
|
||||
obj.prototypePropertyAttrs = DONTENUM | READONLY | PERMANENT;
|
||||
obj.addAsPrototype(MAX_PROTOTYPE_ID, cx, scope, sealed);
|
||||
}
|
||||
|
||||
public BaseFunction()
|
||||
|
||||
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 BaseFunction(Scriptable scope, Scriptable prototype)
|
||||
{
|
||||
super(scope, prototype);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getClassName() {
|
||||
return "Function";
|
||||
}
|
||||
@@ -89,232 +80,125 @@ public class BaseFunction extends IdScriptableObject implements Function
|
||||
* value's prototype chain
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public boolean hasInstance(Scriptable instance)
|
||||
{
|
||||
public boolean hasInstance(Scriptable instance) {
|
||||
Object protoProp = ScriptableObject.getProperty(this, "prototype");
|
||||
if (protoProp instanceof Scriptable) {
|
||||
if (protoProp instanceof Scriptable && protoProp != Undefined.instance)
|
||||
{
|
||||
return ScriptRuntime.jsDelegatesTo(instance, (Scriptable)protoProp);
|
||||
}
|
||||
throw ScriptRuntime.typeError1("msg.instanceof.bad.prototype",
|
||||
getFunctionName());
|
||||
throw NativeGlobal.typeError1
|
||||
("msg.instanceof.bad.prototype", functionName, instance);
|
||||
}
|
||||
|
||||
// #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;
|
||||
|
||||
@Override
|
||||
protected int getMaxInstanceId()
|
||||
{
|
||||
return MAX_INSTANCE_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int findInstanceIdInfo(String s)
|
||||
{
|
||||
int id;
|
||||
// #generated# Last update: 2007-05-09 08:15:15 EDT
|
||||
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;
|
||||
break L0;
|
||||
}
|
||||
// #/generated#
|
||||
// #/string_id_map#
|
||||
|
||||
if (id == 0) return super.findInstanceIdInfo(s);
|
||||
|
||||
int attr;
|
||||
protected int getIdDefaultAttributes(int id) {
|
||||
switch (id) {
|
||||
case Id_length:
|
||||
case Id_arity:
|
||||
case Id_name:
|
||||
attr = DONTENUM | READONLY | PERMANENT;
|
||||
break;
|
||||
case Id_prototype:
|
||||
attr = prototypePropertyAttributes;
|
||||
break;
|
||||
case Id_arguments:
|
||||
attr = DONTENUM | PERMANENT;
|
||||
break;
|
||||
default: throw new IllegalStateException();
|
||||
case Id_length:
|
||||
case Id_arity:
|
||||
case Id_name:
|
||||
return DONTENUM | READONLY | PERMANENT;
|
||||
case Id_prototype:
|
||||
return prototypePropertyAttrs;
|
||||
case Id_arguments:
|
||||
return EMPTY;
|
||||
}
|
||||
return instanceIdInfo(attr, id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getInstanceIdName(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";
|
||||
}
|
||||
return super.getInstanceIdName(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object getInstanceIdValue(int id)
|
||||
{
|
||||
switch (id) {
|
||||
case Id_length: return ScriptRuntime.wrapInt(getLength());
|
||||
case Id_arity: return ScriptRuntime.wrapInt(getArity());
|
||||
case Id_name: return getFunctionName();
|
||||
case Id_prototype: return getPrototypeProperty();
|
||||
case Id_arguments: return getArguments();
|
||||
}
|
||||
return super.getInstanceIdValue(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setInstanceIdValue(int id, Object value)
|
||||
{
|
||||
if (id == Id_prototype) {
|
||||
if ((prototypePropertyAttributes & READONLY) == 0) {
|
||||
prototypeProperty = (value != null)
|
||||
? value : UniqueTag.NULL_VALUE;
|
||||
}
|
||||
return;
|
||||
} else if (id == Id_arguments) {
|
||||
if (value == NOT_FOUND) {
|
||||
// This should not be called since "arguments" is PERMANENT
|
||||
Kit.codeBug();
|
||||
}
|
||||
defaultPut("arguments", value);
|
||||
}
|
||||
super.setInstanceIdValue(id, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillConstructorProperties(IdFunctionObject ctor)
|
||||
{
|
||||
// Fix up bootstrapping problem: getPrototype of the IdFunctionObject
|
||||
// can not return Function.prototype because Function object is not
|
||||
// yet defined.
|
||||
ctor.setPrototype(this);
|
||||
super.fillConstructorProperties(ctor);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initPrototypeId(int id)
|
||||
{
|
||||
String s;
|
||||
int arity;
|
||||
switch (id) {
|
||||
case Id_constructor: arity=1; s="constructor"; break;
|
||||
case Id_toString: arity=1; s="toString"; break;
|
||||
case Id_toSource: arity=1; s="toSource"; break;
|
||||
case Id_apply: arity=2; s="apply"; break;
|
||||
case Id_call: arity=1; s="call"; break;
|
||||
default: throw new IllegalArgumentException(String.valueOf(id));
|
||||
}
|
||||
initPrototypeMethod(FUNCTION_TAG, id, s, arity);
|
||||
}
|
||||
|
||||
static boolean isApply(IdFunctionObject f) {
|
||||
return f.hasTag(FUNCTION_TAG) && f.methodId() == Id_apply;
|
||||
return super.getIdDefaultAttributes(id);
|
||||
}
|
||||
|
||||
static boolean isApplyOrCall(IdFunctionObject f) {
|
||||
if(f.hasTag(FUNCTION_TAG)) {
|
||||
switch(f.methodId()) {
|
||||
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 true;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return super.methodArity(methodId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object execIdCall(IdFunctionObject f, Context cx, Scriptable scope,
|
||||
Scriptable thisObj, Object[] args)
|
||||
public Object execMethod(int methodId, IdFunction f, Context cx,
|
||||
Scriptable scope, Scriptable thisObj,
|
||||
Object[] args)
|
||||
throws JavaScriptException
|
||||
{
|
||||
if (!f.hasTag(FUNCTION_TAG)) {
|
||||
return super.execIdCall(f, cx, scope, thisObj, args);
|
||||
}
|
||||
int id = f.methodId();
|
||||
switch (id) {
|
||||
case Id_constructor:
|
||||
return jsConstructor(cx, scope, args);
|
||||
if (prototypeFlag) {
|
||||
switch (methodId) {
|
||||
case Id_constructor:
|
||||
return jsConstructor(cx, scope, args);
|
||||
|
||||
case Id_toString: {
|
||||
BaseFunction realf = realFunction(thisObj, f);
|
||||
int indent = ScriptRuntime.toInt32(args, 0);
|
||||
return realf.decompile(indent, 0);
|
||||
}
|
||||
case Id_toString:
|
||||
return jsFunction_toString(cx, thisObj, args);
|
||||
|
||||
case Id_toSource: {
|
||||
BaseFunction realf = realFunction(thisObj, f);
|
||||
int indent = 0;
|
||||
int flags = Decompiler.TO_SOURCE_FLAG;
|
||||
if (args.length != 0) {
|
||||
indent = ScriptRuntime.toInt32(args[0]);
|
||||
if (indent >= 0) {
|
||||
flags = 0;
|
||||
} else {
|
||||
indent = 0;
|
||||
}
|
||||
case Id_apply:
|
||||
return jsFunction_apply(cx, scope, thisObj, args);
|
||||
|
||||
case Id_call:
|
||||
return jsFunction_call(cx, scope, thisObj, args);
|
||||
}
|
||||
return realf.decompile(indent, flags);
|
||||
}
|
||||
|
||||
case Id_apply:
|
||||
case Id_call:
|
||||
return ScriptRuntime.applyOrCall(id == Id_apply,
|
||||
cx, scope, thisObj, args);
|
||||
}
|
||||
throw new IllegalArgumentException(String.valueOf(id));
|
||||
}
|
||||
|
||||
private BaseFunction realFunction(Scriptable thisObj, IdFunctionObject f)
|
||||
{
|
||||
Object x = thisObj.getDefaultValue(ScriptRuntime.FunctionClass);
|
||||
if (x instanceof BaseFunction) {
|
||||
return (BaseFunction)x;
|
||||
}
|
||||
throw ScriptRuntime.typeError1("msg.incompat.call",
|
||||
f.getFunctionName());
|
||||
return super.execMethod(methodId, f, cx, scope, thisObj, args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make value as DontEnum, DontDelete, ReadOnly
|
||||
* prototype property of this Function object
|
||||
* prototype property of this Function object
|
||||
*/
|
||||
public void setImmunePrototypeProperty(Object value)
|
||||
{
|
||||
if ((prototypePropertyAttributes & READONLY) != 0) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
prototypeProperty = (value != null) ? value : UniqueTag.NULL_VALUE;
|
||||
prototypePropertyAttributes = DONTENUM | PERMANENT | READONLY;
|
||||
public void setImmunePrototypeProperty(Object value) {
|
||||
prototypeProperty = (value != null) ? value : NULL_TAG;
|
||||
prototypePropertyAttrs = DONTENUM | READONLY | PERMANENT;
|
||||
}
|
||||
|
||||
protected Scriptable getClassPrototype()
|
||||
{
|
||||
protected Scriptable getClassPrototype() {
|
||||
Object protoVal = getPrototypeProperty();
|
||||
if (protoVal instanceof Scriptable) {
|
||||
return (Scriptable) protoVal;
|
||||
}
|
||||
return getClassPrototype(this, "Object");
|
||||
if (protoVal == null
|
||||
|| !(protoVal instanceof Scriptable)
|
||||
|| (protoVal == Undefined.instance))
|
||||
protoVal = getClassPrototype(this, "Object");
|
||||
return (Scriptable) protoVal;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -322,56 +206,23 @@ public class BaseFunction extends IdScriptableObject implements Function
|
||||
*/
|
||||
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)
|
||||
{
|
||||
Scriptable result = createObject(cx, scope);
|
||||
if (result != null) {
|
||||
Object val = call(cx, scope, result, args);
|
||||
if (val instanceof Scriptable) {
|
||||
result = (Scriptable)val;
|
||||
}
|
||||
} else {
|
||||
Object val = call(cx, scope, null, args);
|
||||
if (!(val instanceof Scriptable)) {
|
||||
// It is program error not to return Scriptable from
|
||||
// the call method if createObject returns null.
|
||||
throw new IllegalStateException(
|
||||
"Bad implementaion of call as constructor, name="
|
||||
+getFunctionName()+" in "+getClass().getName());
|
||||
}
|
||||
result = (Scriptable)val;
|
||||
if (result.getPrototype() == null) {
|
||||
result.setPrototype(getClassPrototype());
|
||||
}
|
||||
if (result.getParentScope() == null) {
|
||||
Scriptable parent = getParentScope();
|
||||
if (result != parent) {
|
||||
result.setParentScope(parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates new script object.
|
||||
* The default implementation of {@link #construct} uses the method to
|
||||
* to get the value for <tt>thisObj</tt> argument when invoking
|
||||
* {@link #call}.
|
||||
* The methos is allowed to return <tt>null</tt> to indicate that
|
||||
* {@link #call} will create a new object itself. In this case
|
||||
* {@link #construct} will set scope and prototype on the result
|
||||
* {@link #call} unless they are already set.
|
||||
*/
|
||||
public Scriptable createObject(Context cx, Scriptable scope)
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -379,14 +230,16 @@ public class BaseFunction extends IdScriptableObject implements Function
|
||||
* Decompile the source information associated with this js
|
||||
* function/script back into a string.
|
||||
*
|
||||
* @param indent How much to indent the decompiled result.
|
||||
* @param cx Current context
|
||||
*
|
||||
* @param flags Flags specifying format of decompilation output.
|
||||
* @param indent How much to indent the decompiled result
|
||||
*
|
||||
* @param justbody Whether the decompilation should omit the
|
||||
* function header and trailing brace.
|
||||
*/
|
||||
String decompile(int indent, int flags)
|
||||
{
|
||||
|
||||
public String decompile(Context cx, int indent, boolean justbody) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
boolean justbody = (0 != (flags & Decompiler.ONLY_BODY_FLAG));
|
||||
if (!justbody) {
|
||||
sb.append("function ");
|
||||
sb.append(getFunctionName());
|
||||
@@ -405,14 +258,20 @@ public class BaseFunction extends IdScriptableObject implements Function
|
||||
|
||||
public int getLength() { return 0; }
|
||||
|
||||
public String getFunctionName()
|
||||
{
|
||||
return "";
|
||||
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;
|
||||
}
|
||||
|
||||
final Object getPrototypeProperty() {
|
||||
private Object getPrototypeProperty() {
|
||||
Object result = prototypeProperty;
|
||||
if (result == null) {
|
||||
if (result == null) {
|
||||
synchronized (this) {
|
||||
result = prototypeProperty;
|
||||
if (result == null) {
|
||||
@@ -421,144 +280,242 @@ public class BaseFunction extends IdScriptableObject implements Function
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (result == UniqueTag.NULL_VALUE) { result = null; }
|
||||
else if (result == NULL_TAG) { result = null; }
|
||||
return result;
|
||||
}
|
||||
|
||||
private void setupDefaultPrototype()
|
||||
{
|
||||
private void setupDefaultPrototype() {
|
||||
NativeObject obj = new NativeObject();
|
||||
final int attr = ScriptableObject.DONTENUM;
|
||||
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);
|
||||
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
|
||||
Object value = defaultGet("arguments");
|
||||
if (value != NOT_FOUND) {
|
||||
// Should after changing <Function name>.arguments its
|
||||
// activation still be available during Function call?
|
||||
// This code assumes it should not:
|
||||
// defaultGet("arguments") != NOT_FOUND
|
||||
// means assigned arguments
|
||||
return value;
|
||||
}
|
||||
Context cx = Context.getContext();
|
||||
NativeCall activation = ScriptRuntime.findFunctionActivation(cx, this);
|
||||
return (activation == null)
|
||||
? null
|
||||
: activation.get("arguments", activation);
|
||||
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);
|
||||
}
|
||||
|
||||
private static Object jsConstructor(Context cx, Scriptable scope,
|
||||
|
||||
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 sourceBuf = new StringBuffer();
|
||||
StringBuffer funArgs = new StringBuffer();
|
||||
|
||||
sourceBuf.append("function ");
|
||||
/* version != 1.2 Function constructor behavior -
|
||||
* print 'anonymous' as the function name if the
|
||||
* version (under which the function was compiled) is
|
||||
* less than 1.2... or if it's greater than 1.2, because
|
||||
* we need to be closer to ECMA.
|
||||
*/
|
||||
if (cx.getLanguageVersion() != Context.VERSION_1_2) {
|
||||
sourceBuf.append("anonymous");
|
||||
}
|
||||
sourceBuf.append('(');
|
||||
/* Collect the arguments into a string. */
|
||||
|
||||
// Append arguments as coma separated strings
|
||||
for (int i = 0; i < arglen - 1; i++) {
|
||||
if (i > 0) {
|
||||
sourceBuf.append(',');
|
||||
}
|
||||
sourceBuf.append(ScriptRuntime.toString(args[i]));
|
||||
int i;
|
||||
for (i = 0; i < arglen - 1; i++) {
|
||||
if (i > 0)
|
||||
funArgs.append(',');
|
||||
funArgs.append(ScriptRuntime.toString(args[i]));
|
||||
}
|
||||
sourceBuf.append(") {");
|
||||
if (arglen != 0) {
|
||||
// append function body
|
||||
String funBody = ScriptRuntime.toString(args[arglen - 1]);
|
||||
sourceBuf.append(funBody);
|
||||
}
|
||||
sourceBuf.append('}');
|
||||
String source = sourceBuf.toString();
|
||||
String funBody = arglen == 0 ? "" : ScriptRuntime.toString(args[i]);
|
||||
|
||||
int[] linep = new int[1];
|
||||
String source = "function (" + funArgs.toString() + ") {" +
|
||||
funBody + "}";
|
||||
int[] linep = { 0 };
|
||||
String filename = Context.getSourcePositionFromStack(linep);
|
||||
if (filename == null) {
|
||||
filename = "<eval'ed string>";
|
||||
linep[0] = 1;
|
||||
}
|
||||
|
||||
String sourceURI = ScriptRuntime.
|
||||
makeUrlForGeneratedScript(false, filename, linep[0]);
|
||||
|
||||
Object securityDomain = cx.getSecurityDomainForStackDepth(4);
|
||||
Scriptable global = ScriptableObject.getTopLevelScope(scope);
|
||||
|
||||
ErrorReporter reporter;
|
||||
reporter = DefaultErrorReporter.forEval(cx.getErrorReporter());
|
||||
|
||||
Evaluator evaluator = Context.createInterpreter();
|
||||
if (evaluator == null) {
|
||||
throw new JavaScriptException("Interpreter not present",
|
||||
filename, linep[0]);
|
||||
}
|
||||
|
||||
// Compile with explicit interpreter instance to force interpreter
|
||||
|
||||
// Compile the function with opt level of -1 to force interpreter
|
||||
// mode.
|
||||
return cx.compileFunction(global, source, evaluator, reporter,
|
||||
sourceURI, 1, null);
|
||||
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;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int findPrototypeId(String s)
|
||||
private static Object jsFunction_toString(Context cx, Scriptable thisObj,
|
||||
Object[] args)
|
||||
{
|
||||
int id;
|
||||
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#
|
||||
// #generated# Last update: 2007-05-09 08:15:15 EDT
|
||||
|
||||
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: c=s.charAt(3);
|
||||
if (c=='o') { X="toSource";id=Id_toSource; }
|
||||
else if (c=='t') { X="toString";id=Id_toString; }
|
||||
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;
|
||||
break L0;
|
||||
}
|
||||
// #/generated#
|
||||
return id;
|
||||
}
|
||||
|
||||
private static final int
|
||||
Id_constructor = 1,
|
||||
Id_toString = 2,
|
||||
Id_toSource = 3,
|
||||
Id_apply = 4,
|
||||
Id_call = 5,
|
||||
|
||||
MAX_PROTOTYPE_ID = 5;
|
||||
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;
|
||||
// For function object instances, attribute is PERMANENT; see ECMA 15.3.5.2
|
||||
private int prototypePropertyAttributes = PERMANENT;
|
||||
private Object prototypeProperty;
|
||||
private int prototypePropertyAttrs = DONTENUM;
|
||||
|
||||
private boolean prototypeFlag;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
|
||||
/* -*- 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;
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0
|
||||
*
|
||||
* 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 Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1997-1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Igor Bukanov, igor@fastmail.fm
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (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
|
||||
* MPL, indicate your decision by deleting the provisions above and replacing
|
||||
* 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 MPL or the GPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
package org.mozilla.javascript;
|
||||
|
||||
/**
|
||||
* Generic notion of callable object that can execute some script-related code
|
||||
* upon request with specified values for script scope and this objects.
|
||||
*/
|
||||
public interface Callable
|
||||
{
|
||||
/**
|
||||
* Perform the call.
|
||||
*
|
||||
* @param cx the current Context for this thread
|
||||
* @param scope the scope to use to resolve properties.
|
||||
* @param thisObj the JavaScript <code>this</code> object
|
||||
* @param args the array of arguments
|
||||
* @return the result of the call
|
||||
*/
|
||||
public Object call(Context cx, Scriptable scope, Scriptable thisObj,
|
||||
Object[] args);
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user