Ignore:
Timestamp:
06/07/06 16:30:22 (9 years ago)
Author:
xi
Message:

Implementing Scanner: macros and high-level functions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libyaml/trunk/src/api.c

    r183 r185  
    5050 
    5151    parser = yaml_malloc(sizeof(yaml_parser_t)); 
    52     if (!parser) return NULL; 
     52    if (!parser) goto error; 
    5353 
    5454    memset(parser, 0, sizeof(yaml_parser_t)); 
     
    5757 
    5858    parser->raw_buffer = yaml_malloc(YAML_RAW_BUFFER_SIZE); 
    59     if (!parser->raw_buffer) { 
    60         yaml_free(parser); 
    61         return NULL; 
    62     } 
     59    if (!parser->raw_buffer) goto error; 
     60    memset(parser->raw_buffer, 0, YAML_RAW_BUFFER_SIZE); 
     61 
    6362    parser->raw_pointer = parser->raw_buffer; 
    6463    parser->raw_unread = 0; 
     
    6766 
    6867    parser->buffer = yaml_malloc(YAML_BUFFER_SIZE); 
    69     if (!parser->buffer) { 
    70         yaml_free(parser->raw_buffer); 
    71         yaml_free(parser); 
    72         return NULL; 
    73     } 
     68    if (!parser->buffer) goto error; 
     69    memset(parser->buffer, 0, YAML_BUFFER_SIZE); 
     70 
    7471    parser->buffer_end = parser->buffer; 
    7572    parser->pointer = parser->buffer; 
    7673    parser->unread = 0; 
    7774 
     75    /* Allocate the tokens queue. */ 
     76 
     77    parser->tokens = yaml_malloc(YAML_DEFAULT_SIZE*sizeof(yaml_token_t *)); 
     78    if (!parser->tokens) goto error; 
     79    memset(parser->tokens, 0, YAML_DEFAULT_SIZE*sizeof(yaml_token_t *)); 
     80 
     81    parser->tokens_size = YAML_DEFAULT_SIZE; 
     82    parser->tokens_head = 0; 
     83    parser->tokens_tail = 0; 
     84    parser->tokens_parsed = 0; 
     85 
     86    /* Allocate the indents stack. */ 
     87 
     88    parser->indents = yaml_malloc(YAML_DEFAULT_SIZE*sizeof(int)); 
     89    if (!parser->indents) goto error; 
     90    memset(parser->indents, 0, YAML_DEFAULT_SIZE*sizeof(int)); 
     91 
     92    parser->indents_size = YAML_DEFAULT_SIZE; 
     93    parser->indents_length = 0; 
     94 
     95    /* Allocate the stack of potential simple keys. */ 
     96 
     97    parser->simple_keys = yaml_malloc(YAML_DEFAULT_SIZE*sizeof(yaml_simple_key_t *)); 
     98    if (!parser->simple_keys) goto error; 
     99    memset(parser->simple_keys, 0, YAML_DEFAULT_SIZE*sizeof(yaml_simple_key_t *)); 
     100 
     101    parser->simple_keys_size = YAML_DEFAULT_SIZE; 
     102 
     103    /* Done. */ 
     104 
    78105    return parser; 
     106 
     107    /* On error, free allocated buffers. */ 
     108 
     109error: 
     110 
     111    if (!parser) return NULL; 
     112 
     113    yaml_free(parser->simple_keys); 
     114    yaml_free(parser->indents); 
     115    yaml_free(parser->tokens); 
     116    yaml_free(parser->buffer); 
     117    yaml_free(parser->raw_buffer); 
     118 
     119    yaml_free(parser); 
     120 
     121    return NULL; 
    79122} 
    80123 
     
    88131    assert(parser); /* Non-NULL parser object expected. */ 
    89132 
     133    yaml_free(parser->simple_keys); 
     134    yaml_free(parser->indents); 
     135    yaml_free(parser->tokens); 
    90136    yaml_free(parser->buffer); 
    91137    yaml_free(parser->raw_buffer); 
Note: See TracChangeset for help on using the changeset viewer.