public String toString(boolean onlyPeekCachedRegisters) { StringBuilder sb = new StringBuilder(); if (mState != null) { sb.append(method.getSignature()).append(" State: ").append(mState.toString(onlyPeekCachedRegisters)); } if (sb.length() > 0) { sb.append('\n'); } Set<VirtualType> initializedClasses = getInitializedClasses(); if (initializedClasses.size() < 4) { // Too many will trash the heap for (VirtualType virtualClass : initializedClasses) { ClassState cState = classToStatus.get(virtualClass).getClassState(); sb.append("Class state: ").append(virtualClass).append(' ').append(cState); } } return sb.toString(); }
public Set<VirtualType> getInitializedClasses() { return classToStatus.entrySet().stream().filter(entry -> entry.getValue().isInitialized()).map(Entry::getKey) .collect(Collectors.toSet()); }
sideEffectLevel = graph.getHighestSideEffectLevel(); classToStatus.get(virtualClass).setSideEffectLevel(sideEffectLevel);
public ClassState peekClassState(VirtualType virtualClass) { ExecutionContext ancestor = getAncestorWithClass(virtualClass); if (ancestor == null) { // VirtualClass has not been initialized; build template and cache it locally to track initialization state ClassState templateClassState = TemplateStateFactory.forClass(this, virtualClass); setClassState(templateClassState); return templateClassState; } else if (ancestor != this) { ClassState ancestorClassState = ancestor.peekClassState(virtualClass); ClassState cState = ancestorClassState.getChild(this); SideEffect.Level level = ancestor.getClassSideEffectLevel(virtualClass); // Must initialize, because the ancestor probably just has the template class state. initializeClass(cState, level); return cState; } return classToStatus.get(virtualClass).getClassState(); }
public void setClassState(ClassState cState) { classToStatus.put(cState.getVirtualClass(), new ClassStatus(cState)); }
private void setClassInitialized(VirtualType virtualClass, SideEffect.Level level) { peekClassState(virtualClass); classToStatus.get(virtualClass).setSideEffectLevel(level); }
public boolean isClassInitialized(VirtualType virtualClass) { ExecutionContext ancestor = getAncestorWithClass(virtualClass); return ancestor != null && ancestor.classToStatus.get(virtualClass).isInitialized(); }
public SideEffect.Level getClassSideEffectLevel(VirtualType virtualClass) { ExecutionContext ancestor = getAncestorWithClass(virtualClass); if (ancestor == null) { return null; } return ancestor.classToStatus.get(virtualClass).getSideEffectLevel(); }