Changes in uspace/app/sbi/src/parse.c [051b3db8:c5cb943d] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/sbi/src/parse.c
r051b3db8 rc5cb943d 1 1 /* 2 * Copyright (c) 201 1Jiri Svoboda2 * Copyright (c) 2010 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 82 82 static stree_vdecl_t *parse_vdecl(parse_t *parse); 83 83 static stree_if_t *parse_if(parse_t *parse); 84 static stree_switch_t *parse_switch(parse_t *parse);85 84 static stree_while_t *parse_while(parse_t *parse); 86 85 static stree_for_t *parse_for(parse_t *parse); … … 668 667 stree_prop_t *prop; 669 668 stree_symbol_t *symbol; 669 bool_t body_expected; 670 670 671 671 stree_ident_t *ident; … … 720 720 /* Parse attributes. */ 721 721 parse_symbol_attrs(parse, symbol); 722 723 body_expected = (outer_csi->cc != csi_interface); 722 724 723 725 lmatch(parse, lc_is); … … 1068 1070 stree_vdecl_t *vdecl_s; 1069 1071 stree_if_t *if_s; 1070 stree_switch_t *switch_s;1071 1072 stree_while_t *while_s; 1072 1073 stree_for_t *for_s; … … 1091 1092 stat->u.if_s = if_s; 1092 1093 break; 1093 case lc_switch:1094 switch_s = parse_switch(parse);1095 stat = stree_stat_new(st_switch);1096 stat->u.switch_s = switch_s;1097 break;1098 1094 case lc_while: 1099 1095 while_s = parse_while(parse); … … 1218 1214 lmatch(parse, lc_end); 1219 1215 return if_s; 1220 }1221 1222 /** Parse @c switch statement.1223 *1224 * @param parse Parser object.1225 * @return New syntax tree node.1226 */1227 static stree_switch_t *parse_switch(parse_t *parse)1228 {1229 stree_switch_t *switch_s;1230 stree_when_t *when_c;1231 stree_expr_t *expr;1232 1233 #ifdef DEBUG_PARSE_TRACE1234 printf("Parse 'switch' statement.\n");1235 #endif1236 lmatch(parse, lc_switch);1237 1238 switch_s = stree_switch_new();1239 list_init(&switch_s->when_clauses);1240 1241 switch_s->expr = parse_expr(parse);1242 lmatch(parse, lc_is);1243 1244 /* Parse @c when clauses. */1245 while (lcur_lc(parse) == lc_when) {1246 lskip(parse);1247 when_c = stree_when_new();1248 list_init(&when_c->exprs);1249 while (b_true) {1250 expr = parse_expr(parse);1251 list_append(&when_c->exprs, expr);1252 if (lcur_lc(parse) != lc_comma)1253 break;1254 lskip(parse);1255 }1256 1257 lmatch(parse, lc_do);1258 when_c->block = parse_block(parse);1259 1260 list_append(&switch_s->when_clauses, when_c);1261 }1262 1263 /* Parse @c else clause. */1264 if (lcur_lc(parse) == lc_else) {1265 lskip(parse);1266 lmatch(parse, lc_do);1267 switch_s->else_block = parse_block(parse);1268 } else {1269 switch_s->else_block = NULL;1270 }1271 1272 lmatch(parse, lc_end);1273 return switch_s;1274 1216 } 1275 1217 … … 1712 1654 case lc_except: 1713 1655 case lc_finally: 1714 case lc_when:1715 1656 return b_true; 1716 1657 default:
Note:
See TracChangeset
for help on using the changeset viewer.