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;
+ }
}