Changeset f9c314a5 in mainline for uspace/app/bithenge/sequence.c


Ignore:
Timestamp:
2012-08-07T04:06:14Z (12 years ago)
Author:
Sean Bartell <wingedtachikoma@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0191bd3
Parents:
0ce0103
Message:

Bithenge: make scopes reference-counted

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/bithenge/sequence.c

    r0ce0103 rf9c314a5  
    5050        const struct seq_node_ops *ops;
    5151        bithenge_blob_t *blob;
    52         bithenge_scope_t scope;
     52        bithenge_scope_t *scope;
    5353        aoff64_t *ends;
    5454        size_t num_ends;
     
    114114                bithenge_blob_t *subblob = bithenge_node_as_blob(subblob_node);
    115115                aoff64_t field_size;
    116                 rc = bithenge_transform_prefix_length(subxform, &self->scope,
     116                rc = bithenge_transform_prefix_length(subxform, self->scope,
    117117                    subblob, &field_size);
    118118                bithenge_node_dec_ref(subblob_node);
     
    177177
    178178                aoff64_t size;
    179                 rc = bithenge_transform_prefix_apply(subxform, &self->scope,
     179                rc = bithenge_transform_prefix_apply(subxform, self->scope,
    180180                    bithenge_node_as_blob(blob_node), out, &size);
    181181                bithenge_node_dec_ref(blob_node);
     
    209209                }
    210210
    211                 rc = bithenge_transform_apply(subxform, &self->scope,
    212                     blob_node, out);
     211                rc = bithenge_transform_apply(subxform, self->scope, blob_node,
     212                    out);
    213213                bithenge_node_dec_ref(blob_node);
    214214                bithenge_transform_dec_ref(subxform);
     
    235235static void seq_node_destroy(seq_node_t *self)
    236236{
    237         bithenge_scope_destroy(&self->scope);
     237        bithenge_scope_dec_ref(self->scope);
    238238        bithenge_blob_dec_ref(self->blob);
    239239        free(self->ends);
     
    248248static bithenge_scope_t *seq_node_scope(seq_node_t *self)
    249249{
    250         return &self->scope;
     250        return self->scope;
    251251}
    252252
     
    267267        self->num_ends = 0;
    268268        self->end_on_empty = end_on_empty;
    269         bithenge_scope_init(&self->scope);
    270         int rc = bithenge_scope_copy(&self->scope, scope);
     269        int rc = bithenge_scope_new(&self->scope);
    271270        if (rc != EOK) {
    272                 bithenge_scope_destroy(&self->scope);
     271                free(self->ends);
     272                return rc;
     273        }
     274        rc = bithenge_scope_copy(self->scope, scope);
     275        if (rc != EOK) {
     276                bithenge_scope_dec_ref(self->scope);
     277                free(self->ends);
    273278                return rc;
    274279        }
     
    936941                }
    937942
    938                 bithenge_scope_t scope;
    939                 bithenge_scope_init(&scope);
    940                 rc = bithenge_scope_copy(&scope,
     943                bithenge_scope_t *scope;
     944                rc = bithenge_scope_new(&scope);
     945                if (rc != EOK) {
     946                        bithenge_node_dec_ref(subxform_result);
     947                        return rc;
     948                }
     949                rc = bithenge_scope_copy(scope,
    941950                    seq_node_scope(do_while_as_seq(self)));
    942                 bithenge_scope_set_current_node(&scope, subxform_result);
     951                bithenge_scope_set_current_node(scope, subxform_result);
    943952                if (rc != EOK) {
    944                         bithenge_scope_destroy(&scope);
     953                        bithenge_scope_dec_ref(scope);
    945954                        return rc;
    946955                }
    947956                bithenge_node_t *expr_result;
    948                 rc = bithenge_expression_evaluate(self->expr, &scope,
     957                rc = bithenge_expression_evaluate(self->expr, scope,
    949958                    &expr_result);
    950                 bithenge_scope_destroy(&scope);
     959                bithenge_scope_dec_ref(scope);
    951960                if (rc != EOK)
    952961                        return rc;
Note: See TracChangeset for help on using the changeset viewer.