cvsuser     03/07/05 02:49:09

  Modified:    classes  sarray.pmc
  Log:
  create PMC result if necessary
  
  Revision  Changes    Path
  1.4       +20 -3     parrot/classes/sarray.pmc
  
  Index: sarray.pmc
  ===================================================================
  RCS file: /cvs/public/parrot/classes/sarray.pmc,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -w -r1.3 -r1.4
  --- sarray.pmc        4 Jul 2003 18:20:27 -0000       1.3
  +++ sarray.pmc        5 Jul 2003 09:49:09 -0000       1.4
  @@ -1,7 +1,7 @@
   /* sarray.pmc
    *  Copyright: (When this is determined...it will go here)
    *  CVS Info
  - *     $Id: sarray.pmc,v 1.3 2003/07/04 18:20:27 leo Exp $
  + *     $Id: sarray.pmc,v 1.4 2003/07/05 09:49:09 leo Exp $
    *  Overview:
    *     These are the vtable functions for the SArray base class
    *  Data Structure and Algorithms:
  @@ -214,6 +214,7 @@
   
       PMC* get_pmc_keyed_int (INTVAL* key) {
           HASH_ENTRY *e = (HASH_ENTRY *) PMC_data(SELF);
  +     PMC *ret;
   
        if (*key < 0) {
            *key += e[1].val.int_val;
  @@ -221,9 +222,25 @@
        if (*key < e[0].val.int_val || *key >= e[1].val.int_val)
            internal_exception(OUT_OF_BOUNDS, "SArray index out of bounds!\n");
        e = (HASH_ENTRY *) PMC_data(SELF) + (2 + *key);
  -     if (e->type != enum_hash_pmc)
  -         internal_exception(OUT_OF_BOUNDS, "SArray: Not a pmc!\n");
  +     switch (e->type) {
  +         case enum_hash_int:
  +             ret = pmc_new(INTERP, enum_class_PerlUndef);
  +             VTABLE_set_integer_native(INTERP, ret, e->val.int_val);
  +             return ret;
  +         case enum_hash_num:
  +             ret = pmc_new(INTERP, enum_class_PerlUndef);
  +             VTABLE_set_number_native(INTERP, ret, e->val.num_val);
  +             return ret;
  +         case enum_hash_string:
  +             ret = pmc_new(INTERP, enum_class_PerlUndef);
  +             VTABLE_set_string_native(INTERP, ret, e->val.string_val);
  +             return ret;
  +         case enum_hash_pmc:
           return e->val.pmc_val;
  +         default:
  +             internal_exception(OUT_OF_BOUNDS, "SArray: Not a pmc!\n");
  +     }
  +     return NULL;
       }
   
       PMC* get_pmc_keyed(PMC* key) {
  
  
  

Reply via email to