cvsuser 04/06/17 11:27:50
Modified: . MANIFEST
Added: classes slice.pmc
Log:
slices 5 - oops, forgot adding slice.pmc
Revision Changes Path
1.679 +1 -0 parrot/MANIFEST
Index: MANIFEST
===================================================================
RCS file: /cvs/public/parrot/MANIFEST,v
retrieving revision 1.678
retrieving revision 1.679
diff -u -w -r1.678 -r1.679
--- MANIFEST 17 Jun 2004 12:54:36 -0000 1.678
+++ MANIFEST 17 Jun 2004 18:27:46 -0000 1.679
@@ -92,6 +92,7 @@
classes/scalar.pmc []
classes/scratchpad.pmc []
classes/sharedref.pmc []
+classes/slice.pmc []
classes/stringarray.pmc []
classes/sub.pmc []
classes/timer.pmc []
1.1 parrot/classes/slice.pmc
Index: slice.pmc
===================================================================
/*
Copyright: 2004 The Perl Foundation. All Rights Reserved.
$Id: slice.pmc,v 1.1 2004/06/17 18:27:50 leo Exp $
=head1 NAME
classes/slice.pmc - Slice PMC
=head1 DESCRIPTION
These are the vtable functions for the slice PMC class.
=head2 Methods
=over 4
=cut
*/
#include "parrot/parrot.h"
pmclass Slice need_ext extends Key {
INTVAL get_integer() {
PMC *key = PMC_pmc_val(SELF);
/* TODO check range */
INTVAL v = key_integer(INTERP, key);
/* printf("Slice_get_integer %d\n", (int)v); */
return v;
}
PMC* nextkey_keyed (PMC* agg, INTVAL what) {
PMC *ret = SELF;
PMC *current_key;
/* printf("Slice_next what = %d\n", (int)what) */;
switch (what) {
case ITERATE_FROM_START:
case ITERATE_FROM_START_KEYS: /* reset key */
/*
* need a new Slice PMC that hold's the state
* especially PMC_data() must be zero
*/
ret = pmc_new_noinit(INTERP, enum_class_Slice);
PObj_get_FLAGS(ret) &= ~KEY_type_FLAGS;
PObj_get_FLAGS(ret) |= KEY_pmc_FLAG;
PMC_struct_val(ret) = NULL;
PMC_data(ret) = NULL;
/*
* key_pmc needs this
*/
PMC_pmc_val(ret) = SELF;
break;
case ITERATE_GET_NEXT:
current_key = PMC_pmc_val(SELF);
/* TODO check range */
PMC_pmc_val(SELF) = PMC_data(current_key);
if (!PMC_pmc_val(SELF))
PMC_int_val(SELF) = -1;
break;
}
return ret;
}
}
/*
=back
=cut
*/
/*
* Local variables:
* c-indentation-style: bsd
* c-basic-offset: 4
* indent-tabs-mode: nil
* End:
*
* vim: expandtab shiftwidth=4:
*/