Changeset c3437d9 in mainline for uspace/app/bithenge/script.c
- Timestamp:
- 2012-08-04T03:51:15Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0ce0103
- Parents:
- e3f2765
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/bithenge/script.c
re3f2765 rc3437d9 59 59 60 60 /* Keywords */ 61 TOKEN_DO, 61 62 TOKEN_ELSE, 62 63 TOKEN_FALSE, … … 67 68 TOKEN_TRANSFORM, 68 69 TOKEN_TRUE, 70 TOKEN_WHILE, 69 71 } token_type_t; 70 72 … … 211 213 if (!value) { 212 214 error_errno(state, ENOMEM); 215 } else if (!str_cmp(value, "do")) { 216 state->token = TOKEN_DO; 217 free(value); 213 218 } else if (!str_cmp(value, "else")) { 214 219 state->token = TOKEN_ELSE; … … 234 239 } else if (!str_cmp(value, "true")) { 235 240 state->token = TOKEN_TRUE; 241 free(value); 242 } else if (!str_cmp(value, "while")) { 243 state->token = TOKEN_WHILE; 236 244 free(value); 237 245 } else { … … 686 694 } 687 695 696 static bithenge_transform_t *parse_do_while(state_t *state) 697 { 698 expect(state, TOKEN_DO); 699 expect(state, '{'); 700 bithenge_transform_t *xform = parse_transform(state); 701 expect(state, '}'); 702 expect(state, TOKEN_WHILE); 703 expect(state, '('); 704 bithenge_expression_t *expr = parse_expression(state); 705 expect(state, ')'); 706 707 if (state->error != EOK) { 708 bithenge_expression_dec_ref(expr); 709 bithenge_transform_dec_ref(xform); 710 return NULL; 711 } 712 713 bithenge_transform_t *do_while_xform; 714 int rc = bithenge_do_while_transform(&do_while_xform, xform, expr); 715 if (rc != EOK) { 716 error_errno(state, rc); 717 return NULL; 718 } 719 return do_while_xform; 720 } 721 688 722 /* The TOKEN_STRUCT and '{' must already have been skipped. */ 689 723 static bithenge_transform_t *parse_struct(state_t *state) … … 740 774 static bithenge_transform_t *parse_transform_no_compose(state_t *state) 741 775 { 742 if (state->token == TOKEN_IDENTIFIER) { 776 if (state->token == TOKEN_DO) { 777 return parse_do_while(state); 778 } else if (state->token == TOKEN_IDENTIFIER) { 743 779 return parse_invocation(state); 744 780 } else if (state->token == TOKEN_IF) {
Note:
See TracChangeset
for help on using the changeset viewer.