public String guessName() {
		if (shadow != null) {
			while (shadow.shadow != null) {
				shadow = shadow.shadow;
			}
			return shadow.guessName();
		}
		if (name == null) {
			Enumeration enum_ = hints.elements();
			while (enum_.hasMoreElements()) {
				Hint hint = (Hint) enum_.nextElement();
				if (type.isOfType(hint.getType())) {
					name = hint.getName();
					setType(hint.getType());
					return name;
				}
			}
			nameIsGenerated = true;
			if ((GlobalOptions.debuggingFlags & GlobalOptions.DEBUG_TYPES) != 0)
				GlobalOptions.err.println(getName() + " set type to getHint()");
			setType(type.getHint());
			if ((Options.options & Options.OPTION_PRETTY) != 0) {
				name = type.getDefaultName();
			} else {
				name = type.getDefaultName() + (slot >= 0 ? "_" + slot : "")
						+ "_" + serialnr++ + "_";
				isUnique = true;
			}
			if ((GlobalOptions.debuggingFlags & GlobalOptions.DEBUG_LOCALS) != 0) {
				GlobalOptions.err.println("Guessed name: " + name
						+ " from type: " + type);
				Thread.dumpStack();
			}
		}
		return name;
	}