JE, version 0.54

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.


RECENT CHANGES

0.054
-----
JE::Object::Errors  thrown from within store  handlers  now  propagate
instead of turning into  ‘Cannot  assign  to  a  non-lvalue’  messages.
(Thanks to Chia-liang Kao for fixing this!)

0.053
-----
• The regular expression module was relying on a bug in perl that  is
  fixed in 5.13.8.
• The  match  and  search  methods of strings now work if no  regular
  expressions have been used yet. (A ‘require’ was missing.)

0.052
-----
Bug fix: The return value of JE::LValue->can can now be used and will
delegate properly to the referent.
Test fix:  t/parse08-regexps.t  has been fixed to work with  the  new
(?^u:...)  stringification of internally-UTF8 regular expressions  in
perl 5.13.8.


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

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 and Chia-liang Kao  for  their  contributions,

to Max Maischein for letting me use his tests,

to Andy Armstrong, Yair Lenga, Alex Robinson, Christian Forster, Imre
Rad and Craig MacKenna for their suggestions,

and to the CPAN Testers for their helpful reports.


COPYRIGHT AND LICENCE

Copyright (C) 2007-11 Father Chrysostomos

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