JE, version 0.049

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, but it fully implements ECMAScript v3,
except for a few seldom-used features like -0.

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

Bug fix: String.prototype.indexOf no longer dies if the starting posi-
tion is greater than the length of the  string  and  perl  was  built
with  -DDEBUGGING.  Thanks  to  Jurgen  Weigert  for  reporting  this
(RT #58371).


TO DO

- Make the parser extensible/customisable
- 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
- Finish optimising JS compiled code by turning it into Perl code
- 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


PREREQUISITES

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

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 Kevin Cameron [ kevin  cameron com ] for his  contributions,

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

to Andy Armstrong    [ andy        hexten net       ],
   Yair Lenga        [ yair lenga  gmail com        ],
   Alex Robinson     [ alex        solidgoldpig com ],
   Christian Forster [ boronk      boronk de        ],
   Imre Rad          [ radimre     freemail hu      ] and
   Craig MacKenna    [ craig       animalhead com   ]
for their suggestions,

and to the CPAN Testers for their helpful reports.


COPYRIGHT AND LICENCE

Copyright (C) 2007-10 Father Chrysostomos

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