cvsuser     03/01/11 02:59:42

  Modified:    classes  perlhash.pmc
               .        headers.c packfile.c pmc.c
  Log:
  constant_pmc
  
  Revision  Changes    Path
  1.37      +3 -3      parrot/classes/perlhash.pmc
  
  Index: perlhash.pmc
  ===================================================================
  RCS file: /cvs/public/parrot/classes/perlhash.pmc,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -w -r1.36 -r1.37
  --- perlhash.pmc      10 Jan 2003 17:04:03 -0000      1.36
  +++ perlhash.pmc      11 Jan 2003 10:59:33 -0000      1.37
  @@ -1,7 +1,7 @@
    /* perlhash.pmc
    *  Copyright: (When this is determined...it will go here)
    *  CVS Info
  - *     $Id: perlhash.pmc,v 1.36 2003/01/10 17:04:03 leo Exp $
  + *     $Id: perlhash.pmc,v 1.37 2003/01/11 10:59:33 leo Exp $
    *  Overview:
    *     These are the vtable functions for the PerlHash base class
    *  Data Structure and Algorithms:
  @@ -36,8 +36,8 @@
       }
       void init () {
           if (undef == NULL) {
  -            undef = pmc_new(INTERP, enum_class_PerlUndef);
  -            PObj_constant_SET(undef);
  +            undef = constant_pmc_new_noinit(INTERP, enum_class_PerlUndef);
  +            undef->vtable->init(INTERP, undef);
           }
           PObj_custom_mark_SET(SELF);
           new_hash(INTERP, (HASH **)&SELF->data);
  
  
  
  1.31      +12 -6     parrot/headers.c
  
  Index: headers.c
  ===================================================================
  RCS file: /cvs/public/parrot/headers.c,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -w -r1.30 -r1.31
  --- headers.c 4 Jan 2003 11:34:51 -0000       1.30
  +++ headers.c 11 Jan 2003 10:59:41 -0000      1.31
  @@ -1,7 +1,7 @@
   /* headers.c
    *  Copyright: (When this is determined...it will go here)
    *  CVS Info
  - *     $Id: headers.c,v 1.30 2003/01/04 11:34:51 leo Exp $
  + *     $Id: headers.c,v 1.31 2003/01/11 10:59:41 leo Exp $
    *  Overview:
    *     Header management functions. Handles getting of various headers,
    *     and pool creation
  @@ -28,6 +28,7 @@
   #  define STRING_HEADERS_PER_ALLOC 512
   #endif /* GC_IS_MALLOC */
   
  +#  define CONSTANT_PMC_HEADERS_PER_ALLOC 64
   /** PMC Header Functions for small-object lookup table **/
   
   void
  @@ -380,6 +381,9 @@
   
       /* Init the PMC header pool */
       interpreter->arena_base->pmc_pool = new_pmc_pool(interpreter);
  +    interpreter->arena_base->constant_pmc_pool = new_pmc_pool(interpreter);
  +    interpreter->arena_base->constant_pmc_pool->objects_per_alloc =
  +       CONSTANT_PMC_HEADERS_PER_ALLOC;
   }
   
   void
  @@ -397,15 +401,17 @@
       start = 2;
   #endif
       for (i = start; i <= 2; i++) {
  -        for (j = -2; j < (INTVAL)interpreter->arena_base->num_sized; j++) {
  -            if (j == -2)
  -                pool = interpreter->arena_base->constant_string_header_pool;
  -            else if (j == -1)
  +        for (j = -3; j < (INTVAL)interpreter->arena_base->num_sized; j++) {
  +            if (j == -3)
  +                pool = interpreter->arena_base->constant_pmc_pool;
  +            else if (j == -2)
                   pool = interpreter->arena_base->pmc_pool;
  +            else if (j == -1)
  +                pool = interpreter->arena_base->constant_string_header_pool;
               else
                   pool = interpreter->arena_base->sized_header_pools[j];
               if (pool) {
  -                if (j == -1) {
  +                if (j <= -2) {
                       if (i == 2)
                           free_unused_pobjects(interpreter, pool);
                   }
  
  
  
  1.63      +4 -4      parrot/packfile.c
  
  Index: packfile.c
  ===================================================================
  RCS file: /cvs/public/parrot/packfile.c,v
  retrieving revision 1.62
  retrieving revision 1.63
  diff -u -w -r1.62 -r1.63
  --- packfile.c        10 Dec 2002 16:40:32 -0000      1.62
  +++ packfile.c        11 Jan 2003 10:59:41 -0000      1.63
  @@ -7,7 +7,7 @@
   ** This program is free software. It is subject to the same
   ** license as Parrot itself.
   **
  -** $Id: packfile.c,v 1.62 2002/12/10 16:40:32 leo Exp $
  +** $Id: packfile.c,v 1.63 2003/01/11 10:59:41 leo Exp $
   **
   ** History:
   **  Rework by Melvin; new bytecode format, make bytecode portable.
  @@ -971,14 +971,14 @@
   
       while (components-- > 0) {
           if (tail) {
  -            tail->data = key_new(interpreter);
  +            tail->data = constant_pmc_new_noinit(interpreter, enum_class_Key);
               tail = tail->data;
           }
           else {
  -            head = tail = key_new(interpreter);
  +            head = tail = constant_pmc_new_noinit(interpreter, enum_class_Key);
           }
   
  -        PObj_constant_SET(tail);
  +        tail->vtable->init(interpreter, tail);
   
           switch (*cursor++) {
           case PARROT_ARG_IC:
  
  
  
  1.21      +24 -20    parrot/pmc.c
  
  Index: pmc.c
  ===================================================================
  RCS file: /cvs/public/parrot/pmc.c,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -w -r1.20 -r1.21
  --- pmc.c     2 Nov 2002 14:57:47 -0000       1.20
  +++ pmc.c     11 Jan 2003 10:59:41 -0000      1.21
  @@ -1,7 +1,7 @@
   /* pmc.c
    *  Copyright: (When this is determined...it will go here)
    *  CVS Info
  - *     $Id: pmc.c,v 1.20 2002/11/02 14:57:47 josh Exp $
  + *     $Id: pmc.c,v 1.21 2003/01/11 10:59:41 leo Exp $
    *  Overview:
    *     The base vtable calling functions.
    *  Data Structure and Algorithms:
  @@ -29,7 +29,16 @@
   PMC *
   pmc_new(struct Parrot_Interp *interpreter, INTVAL base_type)
   {
  -    PMC *pmc = new_pmc_header(interpreter);
  +    PMC *pmc = pmc_new_noinit(interpreter, base_type);
  +    pmc->vtable->init(interpreter, pmc);
  +    return pmc;
  +}
  +
  +static PMC*
  +get_new_pmc_header(struct Parrot_Interp *interpreter, INTVAL base_type,
  +    struct Small_Object_Pool *pool)
  +{
  +    PMC *pmc = get_free_pmc(interpreter, pool);
   
       if (!pmc) {
           internal_exception(ALLOCATION_ERROR,
  @@ -47,8 +56,6 @@
           return NULL;
       }
   
  -    pmc->vtable->init(interpreter, pmc);
  -
       return pmc;
   }
   
  @@ -66,27 +73,24 @@
   PMC *
   pmc_new_noinit(struct Parrot_Interp *interpreter, INTVAL base_type)
   {
  -    PMC *pmc = new_pmc_header(interpreter);
  -
  -    if (!pmc) {
  -        internal_exception(ALLOCATION_ERROR,
  -                           "Parrot VM: PMC allocation failed!\n");
  -        return NULL;
  +    return get_new_pmc_header(interpreter, base_type,
  +            interpreter->arena_base->pmc_pool);
       }
   
  -    pmc->vtable = &(Parrot_base_vtables[base_type]);
  +/*=for api pmc constant_pmc_new_noinit
   
  -    if (!pmc->vtable || !pmc->vtable->init) {
  -        /* This is usually because you either didn't call init_world early
  -         * enough or you added a new PMC class without adding
  -         * Parrot_(classname)_class_init to init_world. */
  -        PANIC("Null vtable used");
  -        return NULL;
  -    }
  +   Creates a new constant PMC of type C<base_type>
  +=cut
  +*/
   
  +PMC *
  +constant_pmc_new_noinit(struct Parrot_Interp *interpreter, INTVAL base_type)
  +{
  +    PMC *pmc = get_new_pmc_header(interpreter, base_type,
  +            interpreter->arena_base->constant_pmc_pool);
  +    PObj_constant_SET(pmc);
       return pmc;
   }
  -
   /*=for api pmc pmc_new_init
   
      As C<pmc_new>, but passes C<init> to the PMC's C<init_pmc> method.
  
  
  


Reply via email to