Changeset 564 for proto


Ignore:
Timestamp:
Aug 1, 2010, 2:06:10 PM (9 years ago)
Author:
cameron
Message:

Tag matching fixes

Location:
proto/parabix2
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • proto/parabix2/parabix2_compilable.py

    r562 r564  
    271271        # Start the parallel parsing by inspecting the character
    272272        # after the opening "<" of a tag.
    273         LAngleFollow = bitutil.Advance(lex.LAngle) &~ CT_callouts.CtCDPI_mask
     273        LAngleFollow = lex.LAngle_scope &~ CT_callouts.CtCDPI_mask
    274274        ElemNamePositions = LAngleFollow & ~lex.Slash
    275275        EndTagSeconds = LAngleFollow & lex.Slash
  • proto/parabix2/template.c

    r562 r564  
    3434int buffer_base=0;
    3535int tag_depth=0;
     36int buffer_last;
    3637char * source;
    3738
     
    164165          }       
    165166        }
    166         else if(source[block_pos-1]=='/')
     167        else if(source[block_pos]=='>')
    167168          tag_depth--;
    168169        else
     
    241242  int block_pos = 0;
    242243  int errpos = 0;
    243   int chars_read = 0;
     244  int chars_avail = 0;
    244245  int check_pos = 0;
    245246  char srcbuf[BUFFER_SIZE+BLOCK_SIZE];
     
    249250 
    250251  EOF_mask = simd_const_1(1);
    251   chars_read = fread((void *)srcbuf, 1, BUFFER_SIZE, infile);
     252  chars_avail = fread((void *)srcbuf, 1, BUFFER_SIZE, infile);
    252253
    253254  Entity_Info * e = new Entity_Info;
     
    258259
    259260  if (e->content_start != 0) {
    260         memmove(&srcbuf[0], &srcbuf[e->content_start], chars_read - e->content_start);
    261         if (chars_read == BUFFER_SIZE) {
    262                 chars_read = BUFFER_SIZE - e->content_start +
     261        memmove(&srcbuf[0], &srcbuf[e->content_start], chars_avail - e->content_start);
     262        if (chars_avail == BUFFER_SIZE) {
     263                chars_avail = BUFFER_SIZE - e->content_start +
    263264                             fread(&srcbuf[BUFFER_SIZE-e->content_start], 1, e->content_start, infile);
    264265        }
    265         chars_read -=e->content_start;
     266        else chars_avail -=e->content_start;
    266267  }
    267268 
    268269  @stream_stmts
    269270
    270   while(chars_read>0){
     271  while(chars_avail>0){
    271272
    272273    PERF_SEC_START(parser_timer);
    273274
    274     if(chars_read < BUFFER_SIZE){
     275    block_pos = 0;
     276
     277    if(chars_avail < BUFFER_SIZE){
    275278   
    276       while (block_pos < chars_read){
    277 
    278         int bytes = chars_read - block_pos;     
     279      while (block_pos < chars_avail){
     280
     281        int bytes = chars_avail - block_pos;   
    279282        block_base = block_pos;
    280283         
     
    326329    }
    327330    else{
    328       while (block_pos < chars_read){
     331      while (block_pos < chars_avail){
    329332       
    330333        block_base = block_pos;
     
    363366    }
    364367
    365     PERF_SEC_END(parser_timer, chars_read);
    366 
    367     buf_pos += chars_read;
    368     chars_read = fread((void *)srcbuf, 1, BUFFER_SIZE, infile);
    369     block_pos = 0;
     368    PERF_SEC_END(parser_timer, chars_avail);
     369
     370    buf_pos += chars_avail;
     371    buffer_base = buf_pos;
     372    chars_avail = fread((void *)srcbuf, 1, BUFFER_SIZE, infile);
     373    buffer_last = buffer_base + chars_avail;
    370374  }
    371375  if(tag_depth!=0){
    372     fprintf(stderr, "tag matching error at position %i\n",block_pos+buffer_base);
     376    fprintf(stderr, "tag matching error (depth %i) at position %i\n", tag_depth, buffer_last);
    373377    exit(-1);
    374378  }       
Note: See TracChangeset for help on using the changeset viewer.