cvs commit: ponie/src/pmc perl5cargo_cult.pmc

[email protected] (Nicholas Clark) 24 Jun 2004 14:33:05 -0000
Newsgroups perl.ponie.changes
Message-ID <[email protected]>
cvsuser     04/06/24 07:33:05

  Modified:    src/pmc  perl5cargo_cult.pmc
  Log:
  vtable calls for setting/getting flags.
  
  Revision  Changes    Path
  1.12      +54 -2     ponie/src/pmc/perl5cargo_cult.pmc
  
  Index: perl5cargo_cult.pmc
  ===================================================================
  RCS file: /cvs/public/ponie/src/pmc/perl5cargo_cult.pmc,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -w -r1.11 -r1.12
  --- perl5cargo_cult.pmc	24 Jun 2004 11:01:48 -0000	1.11
  +++ perl5cargo_cult.pmc	24 Jun 2004 14:33:05 -0000	1.12
  @@ -1,7 +1,7 @@
   /* Perl5QQQ.pmc -*- c -*-
    *  Copyright: 2001-2004 The Perl Foundation.  All Rights Reserved.
    *  CVS Info
  - *     $Id: perl5cargo_cult.pmc,v 1.11 2004/06/24 11:01:48 nicholas Exp $
  + *     $Id: perl5cargo_cult.pmc,v 1.12 2004/06/24 14:33:05 nicholas Exp $
    *  Overview:
    *     These are the vtable functions for the Perl5QQQ base class
    *  Data Structure and Algorithms:
  @@ -55,9 +55,61 @@
   	    default:
   	      /*  Can't easily croak.  */
   	    /*croak ("Out of range key %d (max is %d)", key, Ponie_P_MAX - 1);*/
  -	    fprintf (stderr, "Out of range key %d (max is %d)", (int)key,
  +	    fprintf (stderr, "Out of range P key %d (max is %d)\n", (int)key,
   		     (int)Ponie_P_MAX - 1);
   	}
   	return 0;
       }
  +
  +    INTVAL get_integer_keyed_int(INTVAL key) {
  +	switch (key) {
  +	case Ponie_I_SVp_NOK:
  +	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  +			 & SVp_NOK;
  +	case Ponie_I_SVf_NOK:
  +	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  +			 & SVf_NOK;
  +	case Ponie_I_SVpf_NOK:
  +	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  +			 & (SVf_NOK|SVf_NOK);
  +	default:
  +	    /*  Can't easily croak.  */
  +	    /*croak ("Out of range key %d (max is %d)", key, Ponie_P_MAX - 1);*/
  +	    fprintf (stderr, "Out of range get I key %d (max is %d)\n",
  +		     (int)key, (int)Ponie_I_MAX - 1);
  +	    abort();
  +	}
  +	return 0;
  +    }
  +
  +    void set_integer_keyed_int(INTVAL key, INTVAL value) {
  +	switch (key) {
  +	case Ponie_I_SVp_NOK:
  +	    (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags) &= ~SVp_NOK;
  +	    if (value)
  +		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  +		    |= SVp_NOK;
  +	    return;
  +	case Ponie_I_SVf_NOK:
  +	    (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags) &= ~SVf_NOK;
  +	    if (value)
  +		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  +		    |= SVf_NOK;
  +	    return;
  +	case Ponie_I_SVpf_NOK:
  +	    (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  +		&= ~(SVp_NOK|SVf_NOK);
  +	    if (value)
  +		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  +		    |= (SVp_NOK|SVf_NOK);
  +	    return;
  +	default:
  +	    /*  Can't easily croak.  */
  +	    /*croak ("Out of range key %d (max is %d)", key, Ponie_P_MAX - 1);*/
  +	    fprintf (stderr, "Out of range set I key %d (max is %d)\n",
  +		     (int)key, (int)Ponie_I_MAX - 1);
  +	    abort();
  +	}
  +	return;
  +    }
   }