On Friday 03 October 2008 18:14:19 [EMAIL PROTECTED] wrote:
> Log:
> [pipp] implement clone, add, i_add and assign_pmc and enable associated
> tests
>
>
> Modified: trunk/languages/pipp/src/pmc/phparray.pmc
> ===========================================================================
>=== --- trunk/languages/pipp/src/pmc/phparray.pmc   (original)
> +++ trunk/languages/pipp/src/pmc/phparray.pmc   Fri Oct  3 18:14:15 2008
> @@ -1416,6 +1416,147 @@
>  
>  /*
>  
> +=item C<PMC* clone()>
> +
> +Return a deep clone of this PHPArray.
> +
> +=cut
> +
> +*/
> +    PMC *clone() {
> +        PMC           *cloned_pmc, *cloned_value;
> +        STRING        *cloned_key;
> +        PippHashTable *orig_ht, *cloned_ht;
> +        PippBucket    *bkt;
> +
> +        cloned_pmc = pmc_new(INTERP, PMC_type(SELF));
> +        cloned_ht  = (PippHashTable*) PMC_struct_val(cloned_pmc);
> +        orig_ht    = (PippHashTable*) PMC_struct_val(SELF);
> +        pipp_hash_create(INTERP, orig_ht->capacity);
> +
> +        for (bkt = orig_ht->tableHead; bkt != NULL; bkt = bkt->tableNext)
> { +            cloned_key   = string_copy(INTERP, bkt->key);
> +            cloned_value = VTABLE_clone(INTERP, bkt->value);
> +            pipp_hash_put(INTERP, cloned_ht, cloned_key, cloned_value);
> +        }
> +        return cloned_pmc;
> +    }

You can declare and assign in the same statement, as long as you don't declare 
*after* any assignments, per C89.  (Reducing the scope of variables reduces 
stack size used too, which probably isn't a concern here, but it's a nice 
benefit when we can get it.)

-- c

Reply via email to