static void StmtExpr( void ) { ChkStmtExpr(); switch( CurToken ) { case T_IF: case T_WHILE: case T_DO: case T_FOR: case T_SWITCH: case T_CASE: case T_DEFAULT: case T_BREAK: case T_CONTINUE: case T_RETURN: case T_GOTO: case T_LEFT_BRACE: case T_RIGHT_BRACE: Expecting( Tokens[ T_SEMI_COLON ] ); break; default: Expecting( Tokens[ T_SEMI_COLON ] ); case T_SEMI_COLON: NextToken(); break; } }
static void StmtExpr( void ) { ChkStmtExpr(); if( ExpectingToken( T_SEMI_COLON ) ) { NextToken(); } }
static void ForStmt( void ) { bool parsed_semi_colon = FALSE; NextToken(); MustRecog( T_LEFT_PAREN ); if( CompFlags.c99_extensions ) { PushBlock(); // 'for' opens new scope } if( CurToken != T_SEMI_COLON ) { if( CompFlags.c99_extensions ) { TREEPTR tree; tree = LeafNode( OPR_NEWBLOCK ); AddStmt( tree ); BlockStack->gen_endblock = TRUE; if( !LoopDecl( &BlockStack->sym_list ) ) { ChkStmtExpr(); // no declarator, try init_expr } else { parsed_semi_colon = TRUE; // LoopDecl ate it up } tree->op.sym_handle = BlockStack->sym_list; } else { ChkStmtExpr(); // init_expr } } if( !parsed_semi_colon ) { MustRecog( T_SEMI_COLON ); } NewLoop(); BlockStack->block_type = T_FOR; if( CurToken != T_SEMI_COLON ) { BlockStack->break_label = NextLabel(); if( !JumpFalse( Expr(), BlockStack->break_label ) ) { BlockStack->break_label = 0; /* 09-sep-92 */ } } MustRecog( T_SEMI_COLON ); BlockStack->inc_var = NULL; if( CurToken != T_RIGHT_PAREN ) { BlockStack->inc_var = Expr(); // save this if( CompFlags.meaningless_stmt == 1 ) { ChkUseful(); } } MustRecog( T_RIGHT_PAREN ); }