Changeset 051bc69a in mainline for uspace/app/sbi/src/p_type.c
- Timestamp:
- 2010-05-08T08:10:44Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 640ffe6, c5cb943d
- Parents:
- 25a76ab8
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/sbi/src/p_type.c
r25a76ab8 r051bc69a 31 31 #include <assert.h> 32 32 #include <stdlib.h> 33 #include "cspan.h" 33 34 #include "debug.h" 34 35 #include "lex.h" … … 45 46 static stree_texpr_t *parse_pf_taccess(parse_t *parse, stree_texpr_t *a); 46 47 static stree_texpr_t *parse_pf_tindex(parse_t *parse, stree_texpr_t *a); 48 static stree_texpr_t *parse_tparen(parse_t *parse); 47 49 static stree_texpr_t *parse_tprimitive(parse_t *parse); 48 static stree_t literal_t *parse_tliteral(parse_t *parse);49 static stree_t nameref_t *parse_tnameref(parse_t *parse);50 static stree_texpr_t *parse_tliteral(parse_t *parse); 51 static stree_texpr_t *parse_tnameref(parse_t *parse); 50 52 51 53 static stree_texpr_t *parse_recovery_texpr(parse_t *parse); … … 91 93 list_init(&tapply->targs); 92 94 95 targ = NULL; 96 93 97 while (lcur_lc(parse) == lc_slash) { 94 98 … … 104 108 aexpr = stree_texpr_new(tc_tapply); 105 109 aexpr->u.tapply = tapply; 110 tapply->texpr = aexpr; 111 112 if (targ != NULL) 113 aexpr->cspan = cspan_merge(gtype->cspan, targ->cspan); 114 else 115 aexpr->cspan = gtype->cspan; 116 106 117 return aexpr; 107 118 } … … 116 127 stree_texpr_t *tmp; 117 128 118 a = parse_tp rimitive(parse);129 a = parse_tparen(parse); 119 130 120 131 while (lcur_lc(parse) == lc_period || lcur_lc(parse) == lc_lsbr) { … … 162 173 texpr = stree_texpr_new(tc_taccess); 163 174 texpr->u.taccess = taccess; 175 taccess->texpr = texpr; 176 texpr->cspan = cspan_merge(a->cspan, ident->cspan); 164 177 165 178 return texpr; … … 176 189 stree_tindex_t *tindex; 177 190 stree_expr_t *expr; 191 cspan_t *cs1; 178 192 179 193 tindex = stree_tindex_new(); … … 209 223 210 224 lmatch(parse, lc_rsbr); 225 cs1 = lprev_span(parse); 211 226 212 227 texpr = stree_texpr_new(tc_tindex); 213 228 texpr->u.tindex = tindex; 214 215 return texpr; 216 } 229 tindex->texpr = texpr; 230 texpr->cspan = cspan_merge(a->cspan, cs1); 231 232 return texpr; 233 } 234 235 /** Parse possibly partenthesized type expression. 236 * 237 * @param parse Parser object. 238 */ 239 static stree_texpr_t *parse_tparen(parse_t *parse) 240 { 241 stree_texpr_t *texpr; 242 cspan_t *cs0, *cs1; 243 244 if (lcur_lc(parse) == lc_lparen) { 245 cs0 = lcur_span(parse); 246 lskip(parse); 247 texpr = parse_texpr(parse); 248 lmatch(parse, lc_rparen); 249 cs1 = lprev_span(parse); 250 texpr->cspan = cspan_merge(cs0, cs1); 251 } else { 252 texpr = parse_tprimitive(parse); 253 } 254 255 return texpr; 256 } 257 217 258 218 259 /** Parse primitive type expression. … … 226 267 switch (lcur_lc(parse)) { 227 268 case lc_ident: 228 texpr = stree_texpr_new(tc_tnameref); 229 texpr->u.tnameref = parse_tnameref(parse); 269 texpr = parse_tnameref(parse); 230 270 break; 231 271 case lc_bool: … … 234 274 case lc_string: 235 275 case lc_resource: 236 texpr = stree_texpr_new(tc_tliteral); 237 texpr->u.tliteral = parse_tliteral(parse); 276 texpr = parse_tliteral(parse); 238 277 break; 239 278 default: … … 250 289 * @param parse Parser object. 251 290 */ 252 static stree_t literal_t *parse_tliteral(parse_t *parse)291 static stree_texpr_t *parse_tliteral(parse_t *parse) 253 292 { 254 293 stree_tliteral_t *tliteral; 255 294 tliteral_class_t tlc; 295 stree_texpr_t *texpr; 256 296 257 297 switch (lcur_lc(parse)) { … … 278 318 279 319 tliteral = stree_tliteral_new(tlc); 280 return tliteral; 320 texpr = stree_texpr_new(tc_tliteral); 321 texpr->u.tliteral = tliteral; 322 tliteral->texpr = texpr; 323 texpr->cspan = lprev_span(parse); 324 325 return texpr; 281 326 } 282 327 … … 285 330 * @param parse Parser object. 286 331 */ 287 static stree_t nameref_t *parse_tnameref(parse_t *parse)332 static stree_texpr_t *parse_tnameref(parse_t *parse) 288 333 { 289 334 stree_tnameref_t *tnameref; 335 stree_texpr_t *texpr; 290 336 291 337 tnameref = stree_tnameref_new(); 292 338 tnameref->name = parse_ident(parse); 293 339 294 return tnameref; 340 texpr = stree_texpr_new(tc_tnameref); 341 texpr->u.tnameref = tnameref; 342 tnameref->texpr = texpr; 343 texpr->cspan = tnameref->name->cspan; 344 345 return texpr; 295 346 } 296 347 … … 310 361 texpr = stree_texpr_new(tc_tliteral); 311 362 texpr->u.tliteral = tliteral; 312 313 return texpr; 314 } 363 tliteral->texpr = texpr; 364 365 return texpr; 366 }
Note:
See TracChangeset
for help on using the changeset viewer.