DfType (DfaCallArguments args, DfaMemoryState state, int bitsPerChar, int maxBits) { DfaValue arg = args.myArguments[0]; if (arg == null) return DfType.TOP; LongRangeSet range = DfLongType.extractRange(state.getDfType(arg)); int usedBits = range.min() >= 0 ? Long.SIZE - Long.numberOfLeadingZeros(range.max()) : maxBits; int max = Math.max(1, (usedBits - 1) / bitsPerChar + 1); return STRING_LENGTH.asDfType(intRange(LongRangeSet.range(1, max))); }