Changeset 600f5d1 in mainline for uspace/app/bithenge/script.c
- Timestamp:
- 2012-06-27T20:10:30Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 02dcb20
- Parents:
- 978ccaf1
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/bithenge/script.c
r978ccaf1 r600f5d1 177 177 return; 178 178 } else if (isalpha(ch)) { 179 while (isalnum(state->buffer[state->buffer_pos])) 179 while (isalnum(state->buffer[state->buffer_pos]) 180 || state->buffer[state->buffer_pos] == '_') 180 181 state->buffer_pos++; 181 182 char *value = str_ndup(state->buffer + state->old_buffer_pos, … … 308 309 expect(state, '{'); 309 310 while (state->error == EOK && state->token != '}') { 310 expect(state, '.'); 311 subxforms[num].name = expect_identifier(state); 312 expect(state, TOKEN_LEFT_ARROW); 311 if (state->token == '.') { 312 expect(state, '.'); 313 subxforms[num].name = expect_identifier(state); 314 expect(state, TOKEN_LEFT_ARROW); 315 } else { 316 subxforms[num].name = NULL; 317 expect(state, TOKEN_LEFT_ARROW); 318 } 313 319 subxforms[num].transform = parse_transform(state); 314 320 expect(state, ';'); … … 339 345 } 340 346 341 /** Parse a transform .347 /** Parse a transform without composition. 342 348 * @return The parsed transform, or NULL if an error occurred. */ 343 static bithenge_transform_t *parse_transform (state_t *state)349 static bithenge_transform_t *parse_transform_no_compose(state_t *state) 344 350 { 345 351 if (state->token == TOKEN_IDENTIFIER) { … … 356 362 return NULL; 357 363 } 364 } 365 366 /** Parse a transform. 367 * @return The parsed transform, or NULL if an error occurred. */ 368 static bithenge_transform_t *parse_transform(state_t *state) 369 { 370 bithenge_transform_t *result = parse_transform_no_compose(state); 371 bithenge_transform_t **xforms = NULL; 372 size_t num = 1; 373 while (state->token == TOKEN_LEFT_ARROW) { 374 expect(state, TOKEN_LEFT_ARROW); 375 xforms = state_realloc(state, xforms, 376 (num + 1) * sizeof(*xforms)); 377 if (state->error != EOK) 378 break; 379 xforms[num] = parse_transform_no_compose(state); 380 num++; 381 } 382 if (state->error != EOK) { 383 while (xforms && num--) 384 bithenge_transform_dec_ref(xforms[num]); 385 free(xforms); 386 bithenge_transform_dec_ref(result); 387 return NULL; 388 } 389 if (xforms) { 390 xforms[0] = result; 391 int rc = bithenge_new_composed_transform(&result, xforms, num); 392 if (rc != EOK) { 393 error_errno(state, rc); 394 return NULL; 395 } 396 } 397 return result; 358 398 } 359 399
Note:
See TracChangeset
for help on using the changeset viewer.