protected List<JitVal> doGetDefinitions(NavigableMap<Long, JitVal> map, AddressSpace space,
				long offset, int size) {
			List<JitVal> result = new ArrayList<>();
			Entry<Long, JitVal> preEntry = map.lowerEntry(offset);
			long cursor = offset;
			if (preEntry != null) {
				if (endOf(preEntry) > offset) {
					JitVal preVal = preEntry.getValue();
					Varnode preVn = new Varnode(space.getAddress(preEntry.getKey()), preVal.size());
					int shave = (int) (offset - preEntry.getKey());
					JitVal truncVal = arithmetic.truncFromLeft(preVn, shave, preVal);
					cursor = endOf(preEntry);
					result.add(truncVal);
				}
			}
			long end = offset + size;
			for (Entry<Long, JitVal> entry : map.subMap(offset, end).entrySet()) {
				if (entry.getKey() > cursor) {
					result.add(new JitMissingVar(
						new Varnode(space.getAddress(cursor), (int) (entry.getKey() - cursor))));
				}
				if (endOf(entry) > end) {
					JitVal postVal = entry.getValue();
					Varnode postVn = new Varnode(space.getAddress(entry.getKey()), postVal.size());
					int shave = (int) (endOf(entry) - end);
					JitVal truncVal = arithmetic.truncFromRight(postVn, shave, postVal);
					cursor = end;
					result.add(truncVal);
					break;
				}
				result.add(entry.getValue());
				cursor = endOf(entry);
			}
			if (end > cursor) {
				result.add(
					new JitMissingVar(new Varnode(space.getAddress(cursor), (int) (end - cursor))));
			}
			assert !result.isEmpty();
			return result;
		}
The implementation of {@link #getDefinitions(AddressSpace, long, int)} for a given
address space

@param map the map of values for the given space
@param space the address space
@param offset the offset within the space
@param size the size of the varnode
@return the list of values
Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitDataFlowState.java