[Templates-cvs] cvs commit: Template2/xs Stash.xs

cvs@template-toolkit.org cvs@template-toolkit.org


cvs         05/03/03 19:17:42

  Modified:    xs       Stash.xs
  Log:
  * fixed bug in die_object() to stop it from stringifying
    non-object references
  
  Revision  Changes    Path
  1.15      +9 -10     Template2/xs/Stash.xs
  
  Index: Stash.xs
  ===================================================================
  RCS file: /template-toolkit/Template2/xs/Stash.xs,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- Stash.xs	2003/03/17 23:05:27	1.14
  +++ Stash.xs	2005/03/03 19:17:42	1.15
  @@ -26,7 +26,7 @@
   *
   *---------------------------------------------------------------------
   *
  -* $Id: Stash.xs,v 1.14 2003/03/17 23:05:27 abw Exp $
  +* $Id: Stash.xs,v 1.15 2005/03/03 19:17:42 abw Exp $
   *
   *=====================================================================*/
   
  @@ -94,7 +94,7 @@
   static SV*      scalar_dot_length(pTHX_ SV*, AV*);
   
   static char rcsid[] = 
  -	"$Id: Stash.xs,v 1.14 2003/03/17 23:05:27 abw Exp $";
  +	"$Id: Stash.xs,v 1.15 2005/03/03 19:17:42 abw Exp $";
   
   /* dispatch table for XS versions of special "virtual methods",
    * names must be in alphabetical order 		
  @@ -376,7 +376,6 @@
       I32 atroot;
       TT_PERF_INIT;
   
  -
       /* ignore _private or .private members */
       if (!root || *item == '_' || *item == '.') {
           return &PL_sv_undef;
  @@ -520,8 +519,8 @@
   		       real throwing */
   		    
   		    if (SvROK(ERRSV) || !strstr(SvPV(ERRSV, PL_na), 
  -						"Can't locate object method")) {
  -			die_object(aTHX_ ERRSV);
  +                                        "Can't locate object method")) {
  +              die_object(aTHX_ ERRSV);
   		    }
   		} else {
   		    result = fold_results(aTHX_ n);
  @@ -718,11 +717,11 @@
    */
   static void die_object (pTHX_ SV *err) {
   
  -    if (sv_isobject(err)) {
  -	/* throw object via ERRSV ($@) */
  -	SV *errsv = perl_get_sv("@", TRUE);
  -	sv_setsv(errsv, err);
  -	(void) die(Nullch);
  +    if (sv_isobject(err) || SvROK(err)) {
  +       /* throw object via ERRSV ($@) */
  +       SV *errsv = perl_get_sv("@", TRUE);
  +       sv_setsv(errsv, err);
  +       (void) die(Nullch);
       }
   
       /* error string sent back via croak() */