private void forStatement() {
		beginScope();
		lex(); expect(TK_OPENPAREN);
		
		// Decl
		if (_token != TK_SEMICOLON)
			statementDecl();
		expect(TK_SEMICOLON);
		
		int jmppos = _func.getCurrentInstPos();
		int jmpfpos = -1;
		
		// Cond
		if (_token != TK_SEMICOLON) {
			expression();
			jmpfpos = _func.addInst(JMPF);
		}
		expect(TK_SEMICOLON);
		
		// Inc
		int incStart = _func.getCurrentInstPos() + 1;
		if (_token != TK_CLOSEPAREN)
			expression();
		expect(TK_CLOSEPAREN);
		
		int incEnd = _func.getCurrentInstPos();
		int incSize = (incEnd - incStart) + 1;
		
		ScoreVector<ScoreInstruction> inc = new ScoreVector<ScoreInstruction>();
		if (incSize > 0) {
			for (int i = 0; i < incSize; i++)
				inc.push(_func.getInstAt(incStart + i));
			_func.popInst(incSize);
		}
		
		// BREAKABLE
		startBCTarget(); statement();
		
		if (incSize > 0) {
			for (int i = 0; i < incSize; i++)
				_func.addInst(inc.get(i));
		}
		
		int bTarg = _func.getCurrentInstPos(), cTarg = jmppos;
		_func.addInst(JMP, jmppos - _func.getCurrentInstPos() - 1);
		if (jmpfpos > 0)
			_func.setInstArg(jmpfpos, 0, _func.getCurrentInstPos() - jmpfpos);
			
		endScope();
		
		// NO BREAKABLE
		endBCTarget(bTarg, cTarg);
	}