JE::Code - ECMAScript parser and code executor for JE
use JE;
$j = new JE;
$code = $j->compile('1+1'); # returns a JE::Code object
$code->execute;
- $code->execute($this, $scope, $code_type);
- The "execute" method of a parse tree
executes it. All the arguments are optional.
The first argument will be the 'this' value of the execution
context. The global object will be used if it is omitted or undef.
The second argument is the scope chain. A scope chain
containing just the global object will be used if it is omitted or
undef.
The third arg indicates the type of code. 0 or
undef indicates global code. 1 means eval code (code
called by JavaScript's "eval"
function, which has nothing to do with JE's
"eval" method, which runs global
code). Variables created with "var"
and function declarations inside eval code can be deleted, whereas such
variables in global or function code cannot. A value of 2 means
function code, which requires an explicit
"return" statement for a value to be
returned.
If an error occurs, "undef"
will be returned and $@ will contain the error
message. If no error occurs, $@ will be a null
string.
- $code->set_global( $thing )
- You can transfer a JE::Code object to another JavaScript environment by
setting the global object this way. You can also set it to
"undef", if, for instance, you want to
serialise the compiled code without serialising the entire JS environment.
If you do that, you'll need to set the global object again before you can
use the code object.
- JE::Code::add_line_number($message, $code_object, $position)
- WARNING: The parameter list is still subject to change.
This routine append a string such as 'at file, line 76.' to
the error message passed to it, unless it ends with a line break
already.
$code_object is a code object as
returned by JE's or JE::Parser's
"parse" method. If it is omitted, the
current value of $JE::Code::code will be used
(this is set while JS code is running). If
$JE::Code::code turns out to be undefined, then
$message will be returned unchanged (this is
subject to change; later I might make it use Carp to add a Perl file
and line number).
$position is the position within the
source code, which will be used to determine the line number. If this is
omitted, $JE::Code::pos will be used.
"add_line_number" can optionally be exported.