public void setDef(final DefExpr def) {
		// if (Tree.DEBUG) {
		// System.out.println(" setting def of " + this +
		// " (" + System.identityHashCode(this) + ") to " + def);
		// }

		if (this.def == def) {
			return;
		}

		// If this Expr already had a defining statement, remove this from the
		// DefExpr use list.
		if (this.def != null) {
			this.def.removeUse(this);
		}

		if (this.isDef()) {
			Assert.isTrue((def == this) || (def == null));
			this.def = null;
			return;
		}

		this.def = def;

		if (this.def != null) {
			this.def.addUse(this); // This Expr is a use of def
		}
	}