Changeset a66ea217 in mainline for uspace/app/bithenge/script.c


Ignore:
Timestamp:
2012-08-08T00:52:22Z (12 years ago)
Author:
Sean Bartell <wingedtachikoma@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d8bd2ec
Parents:
ad5c8a48
Message:

Bithenge: use expressions to make transforms

File:
1 edited

Legend:

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

    rad5c8a48 ra66ea217  
    6464        TOKEN_FALSE,
    6565        TOKEN_IF,
     66        TOKEN_IN,
    6667        TOKEN_REPEAT,
    6768        TOKEN_STRUCT,
     
    225226                } else if (!str_cmp(value, "if")) {
    226227                        state->token = TOKEN_IF;
     228                        free(value);
     229                } else if (!str_cmp(value, "in")) {
     230                        state->token = TOKEN_IN;
    227231                        free(value);
    228232                } else if (!str_cmp(value, "repeat")) {
     
    434438
    435439                return expr;
     440        } else if (state->token == TOKEN_IN) {
     441                next_token(state);
     442                bithenge_expression_t *expr;
     443                rc = bithenge_in_node_expression(&expr);
     444                if (rc != EOK) {
     445                        error_errno(state, rc);
     446                        return NULL;
     447                }
     448                return expr;
    436449        } else if (state->token == TOKEN_INTEGER) {
    437450                bithenge_int_t val = state->token_int;
     
    621634
    622635        bithenge_transform_t *xform;
    623         rc = bithenge_expression_transform(&xform, expr);
     636        rc = bithenge_inputless_transform(&xform, expr);
    624637        if (rc != EOK) {
    625638                error_errno(state, rc);
     
    867880static bithenge_transform_t *parse_transform_no_compose(state_t *state)
    868881{
    869         if (state->token == TOKEN_DO) {
     882        if (state->token == '(') {
     883                next_token(state);
     884                bithenge_expression_t *expr = parse_expression(state);
     885                expect(state, ')');
     886                if (state->error != EOK) {
     887                        bithenge_expression_dec_ref(expr);
     888                        return NULL;
     889                }
     890
     891                bithenge_transform_t *xform;
     892                int rc = bithenge_expression_transform(&xform, expr);
     893                if (rc != EOK) {
     894                        error_errno(state, rc);
     895                        return NULL;
     896                }
     897                return xform;
     898        } else if (state->token == TOKEN_DO) {
    870899                return parse_do_while(state);
    871900        } else if (state->token == TOKEN_IDENTIFIER) {
Note: See TracChangeset for help on using the changeset viewer.