Changeset ad5c8a48 in mainline for uspace/app/bithenge/expression.c


Ignore:
Timestamp:
2012-08-07T21:35:50Z (12 years ago)
Author:
Sean Bartell <wingedtachikoma@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a66ea217
Parents:
c12b2ae
Message:

Bithenge: add expressions with binary operators

File:
1 edited

Legend:

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

    rc12b2ae rad5c8a48  
    9494                return rc;
    9595        }
     96
     97        /* Check types and get values. */
     98        bithenge_int_t a_int, b_int;
    9699        switch (self->op) {
     100        case BITHENGE_EXPRESSION_ADD: /* fallthrough */
     101        case BITHENGE_EXPRESSION_SUBTRACT: /* fallthrough */
     102        case BITHENGE_EXPRESSION_MULTIPLY:
     103                rc = EINVAL;
     104                if (bithenge_node_type(a) != BITHENGE_NODE_INTEGER)
     105                        goto error;
     106                if (bithenge_node_type(b) != BITHENGE_NODE_INTEGER)
     107                        goto error;
     108                a_int = bithenge_integer_node_value(a);
     109                b_int = bithenge_integer_node_value(b);
     110                break;
     111        default:
     112                break;
     113        }
     114
     115        switch (self->op) {
     116        case BITHENGE_EXPRESSION_ADD:
     117                rc = bithenge_new_integer_node(out, a_int + b_int);
     118                break;
     119        case BITHENGE_EXPRESSION_SUBTRACT:
     120                rc = bithenge_new_integer_node(out, a_int - b_int);
     121                break;
     122        case BITHENGE_EXPRESSION_MULTIPLY:
     123                rc = bithenge_new_integer_node(out, a_int * b_int);
     124                break;
    97125        case BITHENGE_EXPRESSION_EQUALS:
    98126                rc = bithenge_new_boolean_node(out, bithenge_node_equal(a, b));
    99127                break;
    100         }
     128        case BITHENGE_EXPRESSION_INVALID_BINARY_OP:
     129                assert(false);
     130                break;
     131        }
     132
     133error:
    101134        bithenge_node_dec_ref(a);
    102135        bithenge_node_dec_ref(b);
Note: See TracChangeset for help on using the changeset viewer.