public Type setType(Type otherType) {
		LocalInfo li = getLocalInfo();
		if (li.loopCount++ > 5) {
			GlobalOptions.err.println("Type error in local " + getName() + ": "
					+ li.type + " seems to be recursive.");
			Thread.dumpStack();
			otherType = Type.tError;
		}
		Type newType = li.type.intersection(otherType);
		if (newType == Type.tError && otherType != Type.tError
				&& li.type != Type.tError) {
			GlobalOptions.err.println("Type error in local " + getName() + ": "
					+ li.type + " and " + otherType);
			Thread.dumpStack();
		} else if ((GlobalOptions.debuggingFlags & GlobalOptions.DEBUG_TYPES) != 0)
			GlobalOptions.err.println(getName() + " setType, new: " + newType
					+ " old: " + li.type);

		if (!li.type.equals(newType)) {
			li.type = newType;
			java.util.Enumeration enum_ = li.operators.elements();
			while (enum_.hasMoreElements()) {
				LocalVarOperator lvo = (LocalVarOperator) enum_.nextElement();
				if ((GlobalOptions.debuggingFlags & GlobalOptions.DEBUG_TYPES) != 0)
					GlobalOptions.err.println("updating " + lvo);
				lvo.updateType();
			}
		}
		li.loopCount--;
		return li.type;
	}