cvsuser 03/08/19 11:37:28
Modified: classes array.pmc iterator.pmc perlhash.pmc perlstring.pmc
config/gen parrot_include.pl
include/parrot enums.h
t/pmc iter.t
Log:
more readable code and PASM with enums
Revision Changes Path
1.61 +5 -5 parrot/classes/array.pmc
Index: array.pmc
===================================================================
RCS file: /cvs/public/parrot/classes/array.pmc,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -w -r1.60 -r1.61
--- array.pmc 8 Aug 2003 15:53:25 -0000 1.60
+++ array.pmc 19 Aug 2003 18:37:15 -0000 1.61
@@ -1,7 +1,7 @@
/* array.pmc
* Copyright: 2001-2003 The Perl Foundation. All Rights Reserved.
* CVS Info
- * $Id: array.pmc,v 1.60 2003/08/08 15:53:25 leo Exp $
+ * $Id: array.pmc,v 1.61 2003/08/19 18:37:15 leo Exp $
* Overview:
* These are the vtable functions for the Array base class
* Data Structure and Algorithms:
@@ -502,22 +502,22 @@
PObj_get_FLAGS(ret) &= ~KEY_type_FLAGS;
PObj_get_FLAGS(ret) |= KEY_integer_FLAG;
switch (what) {
- case 0: /* reset key, iterate from start */
+ case ITERATE_FROM_START: /* reset key */
ret->cache.int_val = 0;
if (!n)
ret->cache.int_val = -1;
break;
- case 1: /* next key */
+ case ITERATE_GET_NEXT:
if (ret->cache.int_val < n - 1)
++ret->cache.int_val;
else
ret->cache.int_val = -1;
break;
- case 2: /* prev key */
+ case ITERATE_GET_PREV:
if (ret->cache.int_val >= 0)
--ret->cache.int_val;
break;
- case 3: /* reset key, iterate from end */
+ case ITERATE_FROM_END:
ret->cache.int_val = n - 1;
break;
}
1.10 +12 -12 parrot/classes/iterator.pmc
Index: iterator.pmc
===================================================================
RCS file: /cvs/public/parrot/classes/iterator.pmc,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -w -r1.9 -r1.10
--- iterator.pmc 21 Jul 2003 18:00:29 -0000 1.9
+++ iterator.pmc 19 Aug 2003 18:37:15 -0000 1.10
@@ -1,7 +1,7 @@
/* Iterator.pmc
* Copyright: 2001-2003 The Perl Foundation. All Rights Reserved.
* CVS Info
- * $Id: iterator.pmc,v 1.9 2003/07/21 18:00:29 chromatic Exp $
+ * $Id: iterator.pmc,v 1.10 2003/08/19 18:37:15 leo Exp $
* Overview:
* These are the vtable functions for the Iterator base class
* Data Structure and Algorithms:
@@ -97,7 +97,7 @@
void set_integer_native (INTVAL value) {
PMC *key;
- if (value < 0 || value > 3)
+ if (value < ITERATE_FROM_START || value > ITERATE_FROM_END)
internal_exception(1, "Illegal set_integer on iterator\n");
/* reset iterator on aggregate */
if (!SELF->cache.struct_val) {
@@ -113,7 +113,7 @@
PMC *agg = PMC_data(SELF);
INTVAL ret = VTABLE_get_integer_keyed(INTERP, agg, key);
SELF->cache.struct_val =
- VTABLE_nextkey_keyed(INTERP, agg, key, 2);
+ VTABLE_nextkey_keyed(INTERP, agg, key, ITERATE_GET_PREV);
return ret;
}
@@ -122,7 +122,7 @@
PMC *agg = PMC_data(SELF);
FLOATVAL ret = VTABLE_get_number_keyed(INTERP, agg, key);
SELF->cache.struct_val =
- VTABLE_nextkey_keyed(INTERP, agg, key, 2);
+ VTABLE_nextkey_keyed(INTERP, agg, key, ITERATE_GET_PREV);
return ret;
}
@@ -131,7 +131,7 @@
PMC *agg = PMC_data(SELF);
BIGNUM *ret = VTABLE_get_bignum_keyed(INTERP, agg, key);
SELF->cache.struct_val =
- VTABLE_nextkey_keyed(INTERP, agg, key, 2);
+ VTABLE_nextkey_keyed(INTERP, agg, key, ITERATE_GET_PREV);
return ret;
}
@@ -140,7 +140,7 @@
PMC *agg = PMC_data(SELF);
STRING *ret = VTABLE_get_string_keyed(INTERP, agg, key);
SELF->cache.struct_val =
- VTABLE_nextkey_keyed(INTERP, agg, key, 2);
+ VTABLE_nextkey_keyed(INTERP, agg, key, ITERATE_GET_PREV);
return ret;
}
@@ -149,7 +149,7 @@
PMC *agg = PMC_data(SELF);
PMC *ret = VTABLE_get_pmc_keyed(INTERP, agg, key);
SELF->cache.struct_val =
- VTABLE_nextkey_keyed(INTERP, agg, key, 2);
+ VTABLE_nextkey_keyed(INTERP, agg, key, ITERATE_GET_PREV);
return ret;
}
@@ -158,7 +158,7 @@
PMC *agg = PMC_data(SELF);
INTVAL ret = VTABLE_get_integer_keyed(INTERP, agg, key);
SELF->cache.struct_val =
- VTABLE_nextkey_keyed(INTERP, agg, key, 1);
+ VTABLE_nextkey_keyed(INTERP, agg, key, ITERATE_GET_NEXT);
return ret;
}
@@ -168,7 +168,7 @@
PMC *agg = PMC_data(SELF);
FLOATVAL ret = VTABLE_get_number_keyed(INTERP, agg, key);
SELF->cache.struct_val =
- VTABLE_nextkey_keyed(INTERP, agg, key, 1);
+ VTABLE_nextkey_keyed(INTERP, agg, key, ITERATE_GET_NEXT);
return ret;
}
@@ -177,7 +177,7 @@
PMC *agg = PMC_data(SELF);
BIGNUM *ret = VTABLE_get_bignum_keyed(INTERP, agg, key);
SELF->cache.struct_val =
- VTABLE_nextkey_keyed(INTERP, agg, key, 1);
+ VTABLE_nextkey_keyed(INTERP, agg, key, ITERATE_GET_NEXT);
return ret;
}
@@ -186,7 +186,7 @@
PMC *agg = PMC_data(SELF);
STRING * ret = VTABLE_get_string_keyed(INTERP, agg, key);
SELF->cache.struct_val =
- VTABLE_nextkey_keyed(INTERP, agg, key, 1);
+ VTABLE_nextkey_keyed(INTERP, agg, key, ITERATE_GET_NEXT);
return ret;
}
@@ -195,7 +195,7 @@
PMC *agg = PMC_data(SELF);
PMC *ret = VTABLE_get_pmc_keyed(INTERP, agg, key);
SELF->cache.struct_val =
- VTABLE_nextkey_keyed(INTERP, agg, key, 1);
+ VTABLE_nextkey_keyed(INTERP, agg, key, ITERATE_GET_NEXT);
return ret;
}
1.50 +3 -3 parrot/classes/perlhash.pmc
Index: perlhash.pmc
===================================================================
RCS file: /cvs/public/parrot/classes/perlhash.pmc,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -w -r1.49 -r1.50
--- perlhash.pmc 19 Aug 2003 02:01:43 -0000 1.49
+++ perlhash.pmc 19 Aug 2003 18:37:15 -0000 1.50
@@ -1,7 +1,7 @@
/* perlhash.pmc
* Copyright: 2001-2003 The Perl Foundation. All Rights Reserved.
* CVS Info
- * $Id: perlhash.pmc,v 1.49 2003/08/19 02:01:43 scog Exp $
+ * $Id: perlhash.pmc,v 1.50 2003/08/19 18:37:15 leo Exp $
* Overview:
* These are the vtable functions for the PerlHash base class
* Data Structure and Algorithms:
@@ -361,13 +361,13 @@
PObj_get_FLAGS(ret) &= ~KEY_type_FLAGS;
PObj_get_FLAGS(ret) |= KEY_integer_FLAG;
switch (what) {
- case 0: /* reset key, iterate from start */
+ case ITERATE_FROM_START: /* reset key */
ret->cache.int_val = 0;
if (!n)
ret->cache.int_val = -1;
PMC_data(ret) = (void *)INITBucketIndex;
break;
- case 1: /* next key */
+ case ITERATE_GET_NEXT:
/* do nothing: hash_get_idx does increment the idx */
break;
default:
1.49 +5 -5 parrot/classes/perlstring.pmc
Index: perlstring.pmc
===================================================================
RCS file: /cvs/public/parrot/classes/perlstring.pmc,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -w -r1.48 -r1.49
--- perlstring.pmc 19 Aug 2003 18:04:19 -0000 1.48
+++ perlstring.pmc 19 Aug 2003 18:37:15 -0000 1.49
@@ -1,7 +1,7 @@
/* perlstring.pmc
* Copyright: 2001-2003 The Perl Foundation. All Rights Reserved.
* CVS Info
- * $Id: perlstring.pmc,v 1.48 2003/08/19 18:04:19 leo Exp $
+ * $Id: perlstring.pmc,v 1.49 2003/08/19 18:37:15 leo Exp $
* Overview:
* These are the vtable functions for the PerlString base class
* Data Structure and Algorithms:
@@ -371,13 +371,13 @@
PObj_get_FLAGS(ret) &= ~KEY_type_FLAGS;
PObj_get_FLAGS(ret) |= KEY_integer_FLAG;
switch (what) {
- case 0: /* reset key, iterate from start */
+ case ITERATE_FROM_START: /* reset key */
ret->cache.int_val = 0;
if (!n)
ret->cache.int_val = -1;
PMC_data(key) = s->strstart;
break;
- case 1: /* next key */
+ case ITERATE_GET_NEXT:
if (ret->cache.int_val < n - 1) {
++ret->cache.int_val;
if ((char *)PMC_data(key) >= (char *)s->strstart &&
@@ -393,7 +393,7 @@
else
ret->cache.int_val = -1;
break;
- case 2: /* prev key */
+ case ITERATE_GET_PREV:
if (ret->cache.int_val >= 0) {
--ret->cache.int_val;
if (ret->cache.int_val >= 0) {
@@ -409,7 +409,7 @@
}
}
break;
- case 3: /* reset key, iterate from end */
+ case ITERATE_FROM_END:
ret->cache.int_val = n-1;
PMC_data(key) = (char *)s->strstart + s->bufused;
(char *)PMC_data(key) = const_cast(
1.3 +1 -0 parrot/config/gen/parrot_include.pl
Index: parrot_include.pl
===================================================================
RCS file: /cvs/public/parrot/config/gen/parrot_include.pl,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -w -r1.2 -r1.3
--- parrot_include.pl 17 Jul 2003 06:53:12 -0000 1.2
+++ parrot_include.pl 19 Aug 2003 18:37:19 -0000 1.3
@@ -11,6 +11,7 @@
include/parrot/core_pmcs.h
include/parrot/datatypes.h
include/parrot/encoding.h
+ include/parrot/enums.h
include/parrot/exceptions.h
include/parrot/interpreter.h
include/parrot/io.h
1.4 +10 -0 parrot/include/parrot/enums.h
Index: enums.h
===================================================================
RCS file: /cvs/public/parrot/include/parrot/enums.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -w -r1.3 -r1.4
--- enums.h 19 Aug 2003 10:57:48 -0000 1.3
+++ enums.h 19 Aug 2003 18:37:22 -0000 1.4
@@ -33,6 +33,16 @@
} Stack_chunk_flags;
+/* &gen_from_enum(iterator.pasm) */
+typedef enum {
+ ITERATE_FROM_START,
+ ITERATE_GET_NEXT,
+ ITERATE_GET_PREV,
+ ITERATE_FROM_END
+} Iterator_action_t;
+
+/* &end_gen */
+
#endif
/*
1.8 +21 -13 parrot/t/pmc/iter.t
Index: iter.t
===================================================================
RCS file: /cvs/public/parrot/t/pmc/iter.t,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -w -r1.7 -r1.8
--- iter.t 19 Aug 2003 14:42:46 -0000 1.7
+++ iter.t 19 Aug 2003 18:37:28 -0000 1.8
@@ -12,7 +12,7 @@
OUTPUT
output_is(<<'CODE', <<'OUTPUT', "int test");
-
+ .include "iterator.pasm"
new P0, .PerlArray # empty array
new P2, .PerlArray # array with 2 elements
push P2, 10
@@ -25,13 +25,13 @@
print "not "
ok2: print "ok 2\n"
new P1, .Iterator, P0
- set P1, 0 # reset PIter
+ set P1, .ITERATE_FROM_START
print "ok 3\n"
unless P1, ok4 # if(iter) == false on empty
print "not "
ok4: print "ok 4\n"
new P1, .Iterator, P2
- set P1, 0 # reset PIter
+ set P1, .ITERATE_FROM_START
if P1, ok5 # if(iter) == true on non empty
print "not "
ok5: print "ok 5\n"
@@ -52,7 +52,7 @@
ok8: print "ok 8\n"
# now iterate from end
- set P1, 3 # reset PIter
+ set P1, .ITERATE_FROM_END
if P1, ok9 # if(iter) == true on non empty
print "not "
ok9: print "ok 9\n"
@@ -88,6 +88,7 @@
OUTPUT
output_is(<<'CODE', <<'OUTPUT', "hash iter 1");
+ .include "iterator.pasm"
new P0, .PerlHash # empty Hash
new P2, .PerlHash # Hash with 2 elements
set P2["ab"], 100
@@ -100,13 +101,13 @@
print "not "
ok2: print "ok 2\n"
new P1, .Iterator, P0
- set P1, 0 # reset PIter
+ set P1, .ITERATE_FROM_START
print "ok 3\n"
unless P1, ok4 # if(iter) == false on empty
print "not "
ok4: print "ok 4\n"
new P1, .Iterator, P2
- set P1, 0 # reset PIter
+ set P1, .ITERATE_FROM_START
if P1, ok5 # if(iter) == true on non empty
print "not "
ok5: print "ok 5\n"
@@ -141,6 +142,7 @@
OUTPUT
output_is(<<'CODE', <<'OUTPUT', "hash iter 2");
+ .include "iterator.pasm"
new P0, .PerlHash # Hash for iteration
new P2, .PerlHash # for test
@@ -165,7 +167,7 @@
print "not "
ok1:
print "ok 1\n"
- set P1, 0
+ set P1, .ITERATE_FROM_START
get:
unless P1, done
shift S3, P1 # get hash.key
@@ -187,6 +189,7 @@
output_is(<<'CODE', <<'OUTPUT', "hash iter - various types");
.include "datatypes.pasm" # type constants
+ .include "iterator.pasm"
new P1, .PerlHash
set P1["int"], 10
set P1["num"], 2.5
@@ -197,7 +200,7 @@
set I10, 0 # count items
new P0, .Iterator, P1 # setup iterator for hash P1
- set P0, 0 # reset iterator, begin at start
+ set P0, .ITERATE_FROM_START
iter_loop:
unless P0, iter_end # while (entries) ...
inc I10
@@ -231,10 +234,11 @@
OUTPUT
output_is(<<'CODE', <<OUTPUT, "string iteration forward");
+ .include "iterator.pasm"
new P2, .PerlString
set P2, "parrot"
new P1, .Iterator, P2
- set P1, 0
+ set P1, .ITERATE_FROM_START
iter_loop:
unless P1, iter_end # while (entries) ...
shift S1, P1
@@ -251,10 +255,11 @@
OUTPUT
output_is(<<'CODE', <<OUTPUT, "string iteration backward");
+ .include "iterator.pasm"
new P2, .PerlString
set P2, "parrot"
new P1, .Iterator, P2
- set P1, 3
+ set P1, .ITERATE_FROM_END
iter_loop:
unless P1, iter_end # while (entries) ...
pop S1, P1
@@ -271,10 +276,11 @@
OUTPUT
output_is(<<'CODE', <<OUTPUT, "string iteration forward get ord");
+ .include "iterator.pasm"
new P2, .PerlString
set P2, "ABC"
new P1, .Iterator, P2
- set P1, 0
+ set P1, .ITERATE_FROM_START
iter_loop:
unless P1, iter_end # while (entries) ...
shift I1, P1
@@ -291,10 +297,11 @@
OUTPUT
output_is(<<'CODE', <<OUTPUT, "string iteration backward get ord");
+.include "iterator.pasm"
new P2, .PerlString
set P2, "ABC"
new P1, .Iterator, P2
- set P1, 3
+ set P1, .ITERATE_FROM_END
iter_loop:
unless P1, iter_end # while (entries) ...
pop I1, P1
@@ -313,6 +320,7 @@
SKIP: {
skip("N/Y: get_keyed_int gets rest of array", 1);
output_is(<<'CODE', <<'OUTPUT', "shift + index access");
+ .include "iterator.pasm"
new P2, .PerlArray # array with 2 elements
push P2, 10
@@ -320,7 +328,7 @@
push P2, 30
push P2, 40
new P1, .Iterator, P2
- set P1, 0
+ set P1, .ITERATE_FROM_START
set I0, P1 # arr.length
eq I0, 4, ok1