@Override
	public ReValue newOperation(@Nonnull AbstractInsnNode insn) throws AnalyzerException {
		switch (insn.getOpcode()) {
			case ACONST_NULL:
				return ObjectValue.VAL_OBJECT_NULL;
			case ICONST_M1:
				return IntValue.VAL_M1;
			case ICONST_0:
				return IntValue.VAL_0;
			case ICONST_1:
				return IntValue.VAL_1;
			case ICONST_2:
				return IntValue.VAL_2;
			case ICONST_3:
				return IntValue.VAL_3;
			case ICONST_4:
				return IntValue.VAL_4;
			case ICONST_5:
				return IntValue.VAL_5;
			case LCONST_0:
				return LongValue.VAL_0;
			case LCONST_1:
				return LongValue.VAL_1;
			case FCONST_0:
				return FloatValue.VAL_0;
			case FCONST_1:
				return FloatValue.VAL_1;
			case FCONST_2:
				return FloatValue.VAL_2;
			case DCONST_0:
				return DoubleValue.VAL_0;
			case DCONST_1:
				return DoubleValue.VAL_1;
			case BIPUSH:
			case SIPUSH:
				IntInsnNode intInsn = (IntInsnNode) insn;
				return IntValue.of(intInsn.operand);
			case LDC:
				Object value = ((LdcInsnNode) insn).cst;
				switch (value) {
					case Integer i -> {
						return IntValue.of(i);
					}
					case Float f -> {
						return FloatValue.of(f);
					}
					case Long l -> {
						return LongValue.of(l);
					}
					case Double d -> {
						return DoubleValue.of(d);
					}
					case String s -> {
						return ObjectValue.string(s);
					}
					case Type type -> {
						int sort = type.getSort();
						if (sort == Type.OBJECT || sort == Type.ARRAY) {
							return ObjectValue.VAL_CLASS;
						} else if (sort == Type.METHOD) {
							return ObjectValue.VAL_METHOD_TYPE;
						} else {
							throw new AnalyzerException(insn, "Illegal LDC value " + value);
						}
					}
					case Handle handle -> {
						return ObjectValue.VAL_METHOD_HANDLE;
					}
					case ConstantDynamic constantDynamic -> {
						Type dynamicType = Type.getType(constantDynamic.getDescriptor());
						return newValue(dynamicType, Nullness.NOT_NULL);
					}
					case null, default -> throw new AnalyzerException(insn, "Illegal LDC value " + value);
				}
			case JSR:
				return ObjectValue.VAL_JSR;
			case GETSTATIC:
				FieldInsnNode field = (FieldInsnNode) insn;
				if (getStaticLookup != null)
					return getStaticLookup.get(field);
				Type fieldType = Type.getType(field.desc);
				return newValue(fieldType);
			case NEW:
				Type objectType = Type.getObjectType(((TypeInsnNode) insn).desc);
				return newValue(objectType, Nullness.NOT_NULL);
			default:
				throw new AssertionError();
		}
	}
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