public void traverse(
		ASTVisitor visitor,
		BlockScope blockScope) {

		BlockScope visitScope= (this.scope!=null)?this.scope :blockScope;
		if (visitor.visit(this, blockScope)) {
			if (initializations != null) {
				int initializationsLength = initializations.length;
				for (int i = 0; i < initializationsLength; i++)
					initializations[i].traverse(visitor, visitScope);
			}

			if (condition != null)
				condition.traverse(visitor, visitScope);

			if (increments != null) {
				int incrementsLength = increments.length;
				for (int i = 0; i < incrementsLength; i++)
					increments[i].traverse(visitor, visitScope);
			}

			if (action != null)
				action.traverse(visitor, visitScope);
		}
		visitor.endVisit(this, blockScope);
	}