@Override
	public ReValue naryOperation(@Nonnull AbstractInsnNode insn, @Nonnull List<? extends ReValue> values) {
		int opcode = insn.getOpcode();
		if (opcode == MULTIANEWARRAY) {
			Type type = Type.getType(((MultiANewArrayInsnNode) insn).desc);
			return newValue(type, Nullness.NOT_NULL);
		} else if (opcode == INVOKEDYNAMIC) {
			Type returnType = Type.getReturnType(((InvokeDynamicInsnNode) insn).desc);
			return newValue(returnType);
		} else {
			MethodInsnNode method = (MethodInsnNode) insn;
			if (opcode == INVOKESTATIC && invokeStaticLookup != null && values.stream().allMatch(ReValue::hasKnownValue)) {
				return invokeStaticLookup.get(method, values);
			} else if (opcode == INVOKEVIRTUAL && invokeVirtualLookup != null && values.stream().allMatch(ReValue::hasKnownValue)) {
				return invokeVirtualLookup.get(method, values.getFirst(), values.subList(1, values.size()));
			}
			Type returnType = Type.getReturnType(((MethodInsnNode) insn).desc);
			return newValue(returnType);
		}
	}
Interpreter implementation for enhanced value tracking.

@author Matt Coley
@see ReValue Base enhanced value type.
recaf-core/src/main/java/software/coley/recaf/util/analysis/ReInterpreter.java