package Perl6::Run::JS;
use strict;
use vars qw($VERSION @ISA @EXPORT);
require Exporter;
$VERSION = '0.01';
@ISA = qw(Exporter);
@EXPORT = qw();
use PIL2JS;
use JavaScript::SpiderMonkey;
sub new {
my($class)=@_;
my $jssm = JavaScript::SpiderMonkey->new();
$jssm->init();
$jssm->function_set("print", sub { print "@_\n"; });
my $self = {
JS => $jssm
};
bless $self,$class;
$self->init();
}
sub init {
my($self)=@_;
my $js = jsbin_hack(compile_perl6_to_standalone_js("-e", ""));
$self->{JS}->eval($js);
die "$self: init: $@" if $@;
$self->{JS}->function_set("_bare_js_function__eval_perl5",
sub { my($code)=@_;
my @res = eval($code); warn $@ if $@;
return @res; });
$self->eval(q/sub eval_perl5 ($str) { # XXX - should be *eval_perl5
return JS::inline('(function (str) {
return _bare_js_function__eval_perl5(str);
})')(~$str);
}/);
$self;
}
sub eval {
my($self,$p6)=@_;
my $js = compile_perl6_to_mini_js("-e", $p6);
$self->{JS}->eval($js); # $@ passed on
}
sub eval_js {
my($self,$js)=@_;
$self->{JS}->eval($js);
}
sub DESTROY {
my($self)=@_;
$self->{JS}->destroy();
}
1;
__END__