Home  |  Linux  | Mysql  | PHP  | XML
From:Claes Jakobsson Date:Tue Apr 10 01:41:21 2007
Subject:Re: Perl exceptions from bound JS constructors do not propogate
Hi Jesse.

On 6 apr 2007, at 10.35, Jesse Thompson wrote:

> 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.

Yes, this seems to be a bug. I think the problem lies within this  
piece of code from PJS_construct_perl_object (in JavaScript.xs)

     if (SvROK(pcls->cons)) {
         SV *rsv;
         SV *pkg = newSVpv(pcls->pkg, 0);
         perl_call_sv_with_jsvals_rsv(cx, obj,
                                      pcls->cons, pkg,
                                      argc, argv, &rsv);

         SvREFCNT_inc(rsv);

         JS_SetPrivate(cx, obj, (void *) rsv);
     }

     return JS_TRUE;

perl_call_sv_with_jsvals_rsv returns JS_FALSE if it throws an  
exception so we should also return JS_FALSE.

Please report this as an bug in RT and I'll fix it in the next release.

Thanks,
Claes
Navigate in group perl.javascript at sever nntp.perl.org
Previous Next




  
© No Copyright
You are free to use Anything
Site Maintained by PHP Developer
Powered By PHP Consultants