cvsuser     03/07/18 11:14:27

  Modified:    .        MANIFEST objects.c
  Log:
  Simon Glover cleans up the object functions
  
  Revision  Changes    Path
  1.381     +1 -0      parrot/MANIFEST
  
  Index: MANIFEST
  ===================================================================
  RCS file: /cvs/public/parrot/MANIFEST,v
  retrieving revision 1.380
  retrieving revision 1.381
  diff -u -w -r1.380 -r1.381
  --- MANIFEST  17 Jul 2003 06:53:06 -0000      1.380
  +++ MANIFEST  18 Jul 2003 18:14:26 -0000      1.381
  @@ -1861,6 +1861,7 @@
   t/pmc/managedstruct.t                             []
   t/pmc/multiarray.t                                []
   t/pmc/nci.t                                       []
  +t/pmc/objects.t                                   []
   t/pmc/perlarray.t                                 []
   t/pmc/perlhash.t                                  []
   t/pmc/perlint.t                                   []
  
  
  
  1.2       +18 -5     parrot/objects.c
  
  Index: objects.c
  ===================================================================
  RCS file: /cvs/public/parrot/objects.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -w -r1.1 -r1.2
  --- objects.c 16 Jul 2003 12:53:01 -0000      1.1
  +++ objects.c 18 Jul 2003 18:14:26 -0000      1.2
  @@ -1,7 +1,7 @@
   /* objects.c
    *  Copyright: 2003, Yet Another Society
    *  CVS Info
  - *     $Id: objects.c,v 1.1 2003/07/16 12:53:01 dan Exp $
  + *     $Id: objects.c,v 1.2 2003/07/18 18:14:26 dan Exp $
    *  Overview:
    *     Handles class and object manipulation
    *  Data Structure and Algorithms:
  @@ -31,16 +31,19 @@
   
     child_class = pmc_new(interpreter, enum_class_ParrotClass);
     child_class_array = PMC_data(child_class);
  +
     /* We have the same number of attributes as our parent */
     child_class->obj.u.int_val = base_class->obj.u.int_val;
  +
     /* Our parent class array has a single member in it */
     temp_pmc = pmc_new(interpreter, enum_class_Array);
  +  VTABLE_set_integer_native(interpreter, temp_pmc, 1);
     VTABLE_set_pmc_keyed_int(interpreter, child_class_array, 0, temp_pmc);
     VTABLE_set_pmc_keyed_int(interpreter, temp_pmc, 0, base_class);
   
     /* Our penultimate parent list is a clone of our parent's parent
        list, with our parent unshifted onto the beginning */
  -  temp_pmc = pmc_new(interpreter, enum_class_PerlUndef);
  +  temp_pmc = pmc_new_noinit(interpreter, enum_class_Array);
     VTABLE_clone(interpreter,
               VTABLE_get_pmc_keyed_int(interpreter,
                                        (PMC *)PMC_data(base_class), 1),
  @@ -49,7 +52,7 @@
     VTABLE_set_pmc_keyed_int(interpreter, child_class_array, 1, temp_pmc);
   
     /* Our attribute list is our parent's attribute list */
  -  temp_pmc = pmc_new(interpreter, enum_class_PerlUndef);
  +  temp_pmc = pmc_new_noinit(interpreter, enum_class_PerlHash);
     VTABLE_clone(interpreter,
               VTABLE_get_pmc_keyed_int(interpreter,
                                        (PMC *)PMC_data(base_class), 2),
  @@ -57,7 +60,7 @@
     VTABLE_set_pmc_keyed_int(interpreter, child_class_array, 2, temp_pmc);
     
     /* And our full keyed attribute list is our parent's */
  -  temp_pmc = pmc_new(interpreter, enum_class_PerlUndef);
  +  temp_pmc = pmc_new_noinit(interpreter, enum_class_PerlHash);
     VTABLE_clone(interpreter,
               VTABLE_get_pmc_keyed_int(interpreter,
                                        (PMC *)PMC_data(base_class), 3),
  @@ -68,7 +71,13 @@
     classname_pmc = pmc_new(interpreter, enum_class_PerlString);
     if (child_class_name) {
       VTABLE_set_string_native(interpreter, classname_pmc, child_class_name);
  -  } else {
  +
  +    /* Add ourselves to the interpreter's class hash */
  +    VTABLE_set_pmc_keyed(interpreter, interpreter->class_hash,
  +                         key_new_string(interpreter, child_class_name),
  +                         child_class);
  +  }
  +  else {
       VTABLE_set_string_native(interpreter, classname_pmc,
                             string_make(interpreter, "\0\0anonymous", 11, NULL, 0, 
NULL));
     }
  @@ -105,6 +114,10 @@
     classname_pmc = pmc_new(interpreter, enum_class_PerlString);
     VTABLE_set_string_native(interpreter, classname_pmc, class_name);
     VTABLE_set_pmc_keyed_int(interpreter, new_class_array, 4, classname_pmc);
  +
  +  /* Add ourselves to the interpreter's class hash */
  +  VTABLE_set_pmc_keyed(interpreter, interpreter->class_hash,
  +                       key_new_string(interpreter,class_name), new_class);
   
     return(new_class);
   }
  
  
  

Reply via email to