| 273 had_error=TRUE; |
267 had_error=TRUE; |
| 274 tokz_warn_error(tokz, tokens->line, |
268 tokz_warn_error(tokz, tokens->line, |
| 275 E_TOKZ_IDENTIFIER_EXPECTED); |
269 E_TOKZ_IDENTIFIER_EXPECTED); |
| 276 } |
270 } |
| 277 |
271 |
| 278 if(had_error) |
|
| 279 break; |
|
| 280 |
|
| 281 if(t==P_STMT){ |
272 if(t==P_STMT){ |
| 282 if(find_beg_sect(tokz)) |
273 if(find_beg_sect(tokz)) |
| 283 t=P_STMT_SECT; |
274 t=P_STMT_SECT; |
| 284 } |
275 } |
| |
276 |
| |
277 if(had_error) |
| |
278 break; |
| |
279 |
| |
280 /* Got the statement and its type */ |
| 285 |
281 |
| 286 options=lookup_option(tokz->optstack[tokz->nest_lvl], |
282 options=lookup_option(tokz->optstack[tokz->nest_lvl], |
| 287 TOK_IDENT_VAL(tokens+0)); |
283 TOK_IDENT_VAL(tokens+0)); |
| 288 if(options==NULL) |
284 if(options==NULL) |
| 289 options=lookup_option(common_opts, TOK_IDENT_VAL(tokens+0)); |
285 options=lookup_option(common_opts, TOK_IDENT_VAL(tokens+0)); |
| 295 had_error=!check_args(tokz, tokens, ntokens, options->argfmt); |
291 had_error=!check_args(tokz, tokens, ntokens, options->argfmt); |
| 296 } |
292 } |
| 297 |
293 |
| 298 if(had_error) |
294 if(had_error) |
| 299 break; |
295 break; |
| |
296 |
| |
297 /* Found the option and arguments are ok */ |
| 300 |
298 |
| 301 if(options->opts!=NULL){ |
299 if(options->opts!=NULL){ |
| 302 if(t!=P_STMT_SECT){ |
300 if(t!=P_STMT_SECT){ |
| 303 had_error=TRUE; |
301 had_error=TRUE; |
| 304 tokz_warn_error(tokz, tokz->line, E_TOKZ_LBRACE_EXPECTED); |
302 tokz_warn_error(tokz, tokz->line, E_TOKZ_LBRACE_EXPECTED); |
| 305 }else if(tokz->nest_lvl==MAX_NEST-1){ |
303 }else if(tokz->nest_lvl==MAX_NEST-1){ |
| 306 tokz_warn_error(tokz, tokz->line, E_TOKZ_MAX_NEST); |
304 tokz_warn_error(tokz, tokz->line, E_TOKZ_MAX_NEST); |
| 307 had_error=TRUE; |
305 had_error=TRUE; |
| 308 }else{ |
306 }else{ |
| 309 tokz->optstack[++tokz->nest_lvl]=options->opts; |
307 tokz->nest_lvl++; |
| |
308 tokz->optstack[tokz->nest_lvl]=options->opts; |
| 310 } |
309 } |
| 311 }else if(t==P_STMT_SECT){ |
310 }else if(t==P_STMT_SECT){ |
| 312 had_error=TRUE; |
311 had_error=TRUE; |
| 313 tokz_warn_error(tokz, tokz->line, E_TOKZ_SYNTAX); |
312 tokz_warn_error(tokz, tokz->line, E_TOKZ_SYNTAX); |
| 314 } |
313 } |
| 334 errornest++; |
333 errornest++; |
| 335 tokz_warn_error(tokz, tokz->line, E_TOKZ_SYNTAX); |
334 tokz_warn_error(tokz, tokz->line, E_TOKZ_SYNTAX); |
| 336 break; |
335 break; |
| 337 |
336 |
| 338 case P_END_SECT: |
337 case P_END_SECT: |
| 339 if(tokz->nest_lvl==0){ |
338 if(tokz->nest_lvl+errornest==0){ |
| 340 tokz_warn_error(tokz, tokz->line, E_TOKZ_SYNTAX); |
339 tokz_warn_error(tokz, tokz->line, E_TOKZ_SYNTAX); |
| 341 had_error=TRUE; |
340 had_error=TRUE; |
| |
341 } |
| |
342 |
| |
343 if(had_error) |
| 342 break; |
344 break; |
| 343 } |
|
| 344 |
345 |
| 345 if(errornest!=0){ |
346 if(errornest!=0){ |
| 346 if(errornest==1){ |
|
| 347 call_cancel_sect(tokz, tokz->optstack[tokz->nest_lvl]); |
|
| 348 tokz->nest_lvl--; |
|
| 349 } |
|
| 350 errornest--; |
347 errornest--; |
| 351 }else{ |
348 }else{ |
| 352 if(!had_error) |
349 had_error=!call_end_sect(tokz, tokz->optstack[tokz->nest_lvl]); |
| 353 had_error=!call_end_sect(tokz, |
|
| 354 tokz->optstack[tokz->nest_lvl]); |
|
| 355 |
|
| 356 tokz->nest_lvl--; |
350 tokz->nest_lvl--; |
| 357 } |
351 } |
| 358 |
352 |
| 359 if(tokz->nest_lvl<init_nest_lvl) |
353 if(tokz->nest_lvl<init_nest_lvl) |
| 360 goto eof; |
354 goto eof; |
| 361 } |
355 } |
| 362 |
356 |
| 363 if(!had_error) |
357 if(!had_error) |
| 364 continue; |
358 continue; |
| 365 |
359 |
| 366 if(t==P_STMT_SECT || t==P_END_SECT){ |
360 if(t==P_STMT_SECT) |
| 367 errornest++; |
361 errornest++; |
| 368 /*if(t==P_END_SECT) |
|
| 369 tokz->nest_lvl--;*/ |
|
| 370 } |
|
| 371 |
362 |
| 372 if(!(tokz->flags&TOKZ_ERROR_TOLERANT)) |
363 if(!(tokz->flags&TOKZ_ERROR_TOLERANT)) |
| 373 break; |
364 break; |
| 374 } |
365 } |
| 375 |
366 |