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
  
  
  

Reply via email to