/** * Identical to {@link #assignRegister(int, HeapItem)} but also updates any register with an identical value to that * stored in the target register with the new value. */ public void assignRegisterAndUpdateIdentities(int register, HeapItem item) { assignRegisterAndUpdateIdentities(register, item, METHOD_HEAP); }
private void executeLocalObjectInit(MethodState callerMethodState) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { int instanceRegister = parameterRegisters[0]; HeapItem instanceItem = callerMethodState.peekRegister(instanceRegister); UninitializedInstance uninitializedInstance = (UninitializedInstance) instanceItem.getValue(); VirtualType instanceType = uninitializedInstance.getType(); // Create a Java class of the true type Class<?> klazz = vm.getClassLoader().loadClass(instanceType.getBinaryName()); Object newInstance = ObjectInstantiator.newInstance(klazz); HeapItem newInstanceItem = new HeapItem(newInstance, instanceType.getName()); callerMethodState.assignRegisterAndUpdateIdentities(instanceRegister, newInstanceItem); }
HeapItem newInstance = graph.getTerminatingRegisterConsensus(calleeInstanceRegister); int instanceRegister = parameterRegisters[0]; callerContext.getMethodState().assignRegisterAndUpdateIdentities(instanceRegister, newInstance);
HeapItem item = getMutableParameterConsensus(terminatingAddresses, graph, parameterRegister); int register = parameterRegisters[parameterIndex]; callerMethodState.assignRegisterAndUpdateIdentities(register, item);
callerMethodState.assignRegisterAndUpdateIdentities(parameterRegisters[0], newInstanceItem); } else { boolean isMutable = !vm.getConfiguration().isImmutable(newInstanceItem.getType());