JE, version 0.022

JE is a pure-Perl ECMAScript (JavaScript) engine. Here are some of its
advantages:

    - Easy to install (no C compiler necessary)
    - Compatible with Data::Dump::Streamer, so the runtime environment
      can be serialised
    - The parser can be extended/customised to support extra (or
      fewer) language features (not yet complete)
    - All JavaScript datatypes can be manipulated directly from Perl
      (they all have overloaded operators)

Here are its main weakness:
    - It's slow (well, what did you expect?).
    - It uses lots of memory.
    - It leaks memory (to be fixed).

This is still an alpha release. The core objects are not yet complete,
but as long as you don't need all  the  methods  of  dates  (more pre-
cisely,  those beginning with ‘set’),  this module is actually usable.

If  you have the time and the interest,  please experiment  with  this
module (or maybe even lend a hand :-). If you have any ideas as to how
the API could be improved or reworked, please e-mail me.


CHANGES IN THIS RELEASE

• RegExp.prototype.test and RegExp.prototype.toString have been added,
  so the RegExp class is complete.
• Date.prototype’s setTime, setMilliseconds and setUTCMilliseconds
  methods has been added.
• []  in a regular expression used to be  an  always-fail  assertion.
  This is no longer the case. Now it follows Perl’s behaviour (the ]
  is interpreted as a literal character within the class).  I  origi-
  nally misread the  spec.  This  is  actually  a  syntax  error  in
  ECMAScript.
• Added an ‘unwrap’ option to bind_class,  that makes it behave more
  sensibly in the author’s opinion. This may become the default in a
  future release.
• Tainted code can now be run safely, and can no longer untaint
  its own data.
• Bug fixes--see the Changes file.


TO DO

- Make the parser extensible/customisable
- Finish the core object classes (Date and RegExp need to be finished)
- Add more helpful error messages
- Determine some logical way of dealing with locale settings (for
  String.prototype.localeCompare, et al.)
- Finish writing tests
- Deal with circular references
- Finish making built-in JS properties load lazily
- Optimise JS functions by turning them into Perl subs (but run bench-
  marks first to see whether this would actually speed things up) (I'm
  having second thoughts about this one)
- Other optimisations


INSTALLATION

The easiest way to install this module is to use the CPAN module or
the cpan script:

    [sudo] perl -MCPAN -e "install JE"

    [sudo] cpan
    cpan> install JE

Or you can use the following:

    perl Makefile.PL
    make
    make test
    [sudo] make install


DEPENDENCIES

This module requires perl 5.8.3 or higher and the following modules:
• Scalar::Util version 1.14 or later
• Exporter 5.57 or later
• The TimeDate distribution (more precisely, Time::Zone, Date::Format
  and Date::Parse)
• Encode 2.08 or later

For perl versions earlier than 5.9.4 it also requires
Tie::RefHash::Weak.

Later it will probably require Unicode::Collate.

There is a slight incompatibility with perl version 5.8.3. If you try
to create a regular expression with invalid modifiers, you will get a
warning as well as a SyntaxError. This causes one of the test scripts
(parse08-regexps.t) to fail.


DOCUMENTATION

After installing, you can find documentation for this module with the 
perldoc command.

    perldoc JE

Or try using man (it's faster, in my experience):

    man JE


ACKNOWLEDGEMENTS

Thanks to Max Maischein [ webmaster  corion net ] for letting me use
his tests,

to Andy Armstrong [ andy        hexten net       ],
   Yair Lenga     [ yair lenga  gmail com        ] and
   Alex Robinson  [ alex        solidgoldpig com ]
for their suggestions,

and to the CPAN Testers for their helpful reports.


COPYRIGHT AND LICENCE

Copyright (C) 2007-8 Father Chrysostomos

This program is free software; you may redistribute it and/or modify
it under the same terms as perl.
