Пример #1
0
static area_t *dup_area (area_t * area)
{
    area_t *retval = malloc (sizeof (area_t));
    *retval = *area;

    switch (area->ty)
    {
        case AREA_UNION:
            retval->a.a_union[0] = dup_area (retval->a.a_union[0]);
            retval->a.a_union[1] = dup_area (retval->a.a_union[1]);
            break;
        default:
            break;
    }

    return retval;
}
Пример #2
0
static
dumb_ptr<area_t> dup_area(dumb_ptr<area_t> area)
{
    dumb_ptr<area_t> retval = dumb_ptr<area_t>::make();
    *retval = *area;

    switch (area->ty)
    {
        case AREA::UNION:
            retval->a.a_union[0] = dup_area(retval->a.a_union[0]);
            retval->a.a_union[1] = dup_area(retval->a.a_union[1]);
            break;
        default:
            break;
    }

    return retval;
}
Пример #3
0
void magic_copy_var (val_t * dest, val_t * src)
{
    *dest = *src;

    switch (dest->ty)
    {
        case TY_STRING:
            dest->v.v_string = strdup (dest->v.v_string);
            break;
        case TY_AREA:
            dest->v.v_area = dup_area (dest->v.v_area);
            break;
        default:
            break;
    }

}