use strict;
use warnings;
use JavaScript;
my $rt = JavaScript::Runtime->new;
my $cx = $rt->create_context;
$cx->bind_class(
'package' => 'Foo',
'name' => 'Foo',
constructor => sub {
return Foo->new;
},
properties => {},
static_methods => {
'list' => sub { my $self = shift; return $self->list; },
}
);
{
my $fn = $cx->eval("function t() { return Foo.list(); } t;" );
my $v = $fn->();
use Devel::Peek qw(Dump);
Dump($v);
my $v2 = Foo->list();
Dump($v2);
}
print "destruction should be done\n";
sub END {
print "should be really done now\n";
}
package Foo;
sub new {
my $class = shift;
my $self = {};
#$one ||=
bless $self, $class;
}
sub list {
my $class = shift;
my @objs;
for (1..2) {
push @objs, $class->new;
}
# return [{}];
return \@objs;
}
sub DESTROY {
print "object going boom!\n";
}
JavaScript::dump_sv_report_used();
1;