Changeset 94d484a in mainline for uspace/app/sbi/src/p_expr.c
- Timestamp:
- 2010-03-07T17:45:33Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d0febca
- Parents:
- fa36f29
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/sbi/src/p_expr.c
rfa36f29 r94d484a 48 48 static stree_expr_t *parse_pf_access(parse_t *parse, stree_expr_t *a); 49 49 static stree_expr_t *parse_pf_call(parse_t *parse, stree_expr_t *a); 50 static stree_expr_t *parse_pf_index(parse_t *parse, stree_expr_t *a); 50 51 static stree_expr_t *parse_primitive(parse_t *parse); 51 52 static stree_expr_t *parse_nameref(parse_t *parse); … … 181 182 lmatch(parse, lc_new); 182 183 texpr = parse_texpr(parse); 183 lmatch(parse, lc_lparen); 184 lmatch(parse, lc_rparen); 184 185 /* Parenthesis should be present except for arrays. */ 186 if (texpr->tc != tc_tindex) { 187 lmatch(parse, lc_lparen); 188 lmatch(parse, lc_rparen); 189 } 185 190 186 191 new_op = stree_new_new(); … … 200 205 a = parse_primitive(parse); 201 206 202 while (lcur_lc(parse) == lc_period || lcur_lc(parse) == lc_lparen) { 207 while (lcur_lc(parse) == lc_period || lcur_lc(parse) == lc_lparen || 208 lcur_lc(parse) == lc_lsbr) { 203 209 204 210 switch (lcur_lc(parse)) { … … 209 215 tmp = parse_pf_call(parse, a); 210 216 break; 217 case lc_lsbr: 218 tmp = parse_pf_index(parse, a); 219 break; 211 220 default: 212 221 assert(b_false); … … 273 282 } 274 283 284 /** Parse index expression. */ 285 static stree_expr_t *parse_pf_index(parse_t *parse, stree_expr_t *a) 286 { 287 stree_expr_t *expr; 288 stree_index_t *index; 289 stree_expr_t *arg; 290 291 lmatch(parse, lc_lsbr); 292 293 index = stree_index_new(); 294 index->base = a; 295 list_init(&index->args); 296 297 /* Parse indices */ 298 299 if (lcur_lc(parse) != lc_rsbr) { 300 while (b_true) { 301 arg = parse_expr(parse); 302 list_append(&index->args, arg); 303 304 if (lcur_lc(parse) == lc_rsbr) 305 break; 306 lmatch(parse, lc_comma); 307 } 308 } 309 310 lmatch(parse, lc_rsbr); 311 312 expr = stree_expr_new(ec_index); 313 expr->u.index = index; 314 315 return expr; 316 } 317 275 318 /** Parse primitive expression. */ 276 319 static stree_expr_t *parse_primitive(parse_t *parse)
Note:
See TracChangeset
for help on using the changeset viewer.