Perl exceptions from bound JS constructors do not propogate
[email protected] ("Jesse Thompson") Fri, 6 Apr 2007 01:35:46 -0700
| Newsgroups | perl.javascript |
|---|---|
| Message-ID | <[email protected]> |
------=_Part_4278_30501440.1175848546375
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
Am I approaching this the wrong way, or is this perhaps something to report
in rt?
It looks like when I bind a class and throw an error (such as a die()
statement or a failed DB connect) from within a static or object method, it
bubbles beautifully through JS as an exception.
However when I bind a class and register some perl sub as a *constructor*,
any dies or errors from there seem to make the constructor abort silently
instead.
Example: in the code attached below, the perl diagnostic displays a blessed
object. when you uncomment "test point 2" you get a well documented error
message. When you uncomment "Test point #1" however, the message goes
unreported and you get a blank (uncontructed) object instead of a blessed
hash.
Thank you for your consideration. :)
- - Jesse Thompson
Webformix, Bend OR
use JavaScript;
use Data::Dumper;
my $rt = JavaScript::Runtime->new();
my $cx = $rt->create_context();
$cx->bind_function(write => sub { print @_; });
$cx->bind_class(
name => 'JSDB',
package => 'JSDB',
constructor => "JSDB::new",
fs => { test => \&JSDB::test, },
);
$cx->set_error_handler( sub { die(Dumper(\@_)); } );
$ret = $cx->eval(q[
var dbh = new JSDB;
dbh.test();
]);
print "js_ret = ($ret), \$@ = ($@)\n";
die(Dumper($ret));
exit;
package JSDB;
sub new
{
my $class = shift;
my $self = {};
# die("Test point #1");
bless $self, $class;
return($self);
}
sub test
{
my $self = shift;
# die("Test point #2");
}
------=_Part_4278_30501440.1175848546375--