/** * Sets the fields that were referenced from the bytecodes that were used as input to the * compilation. * * @param accessedFields the collected set of fields accessed during compilation */ public void setFields(EconomicSet<ResolvedJavaField> accessedFields) { if (accessedFields != null) { fields = accessedFields.toArray(new ResolvedJavaField[accessedFields.size()]); } }
private List<PolyglotContextImpl> collectAliveContexts() { Thread.holdsLock(this); List<PolyglotContextImpl> localContexts = new ArrayList<>(contexts.size()); for (ContextWeakReference ref : contexts) { PolyglotContextImpl context = ref.get(); if (context != null) { localContexts.add(context); } else { contexts.remove(ref); } } return localContexts; }
private static boolean assertUniqueTypes(ArrayList<ProfiledType> ptypes) { EconomicSet<ResolvedJavaType> set = EconomicSet.create(Equivalence.DEFAULT); for (ProfiledType ptype : ptypes) { set.add(ptype.getType()); } return set.size() == ptypes.size(); }
@Override public EconomicSet<Register> translateToCallerRegisters(EconomicSet<Register> calleeRegisters) { EconomicSet<Register> callerRegisters = EconomicSet.create(Equivalence.IDENTITY, calleeRegisters.size()); for (Register register : calleeRegisters) { if (l0.number <= register.number && register.number <= l7.number) { // do nothing } else if (o0.number <= register.number && register.number <= o7.number) { // do nothing } else if (i0.number <= register.number && register.number <= i7.number) { // translate input to output registers callerRegisters.add(translateInputToOutputRegister(register)); } else { callerRegisters.add(register); } } return callerRegisters; }
@CompilerDirectives.TruffleBoundary static String[] findUniquePublicMemberNames(Class<?> clazz, boolean onlyStatic, boolean includeInternal) throws SecurityException { JavaClassDesc classDesc = JavaClassDesc.forClass(clazz); EconomicSet<String> names = EconomicSet.create(); names.addAll(classDesc.getFieldNames(onlyStatic)); names.addAll(classDesc.getMethodNames(onlyStatic, includeInternal)); if (onlyStatic) { names.add("class"); if (Modifier.isPublic(clazz.getModifiers())) { // no support for non-static member types now for (Class<?> t : clazz.getClasses()) { if (!isStaticTypeOrInterface(t)) { continue; } names.add(t.getSimpleName()); } } } return names.toArray(new String[names.size()]); }
@Override public void finalizeAddress(Backend backend) { if (address == 0) { assert checkStubCondition(); InstalledCode code = stub.getCode(backend); EconomicSet<Register> destroyedRegisters = stub.getDestroyedCallerRegisters(); if (!destroyedRegisters.isEmpty()) { AllocatableValue[] temporaryLocations = new AllocatableValue[destroyedRegisters.size()]; int i = 0; for (Register reg : destroyedRegisters) { temporaryLocations[i++] = reg.asValue(); } temporaries = temporaryLocations; } address = code.getStart(); } }
@CompilerDirectives.TruffleBoundary static String[] findUniquePublicMemberNames(Class<?> clazz, boolean onlyStatic, boolean includeInternal) throws SecurityException { HostClassDesc classDesc = HostClassDesc.forClass(clazz); EconomicSet<String> names = EconomicSet.create(); names.addAll(classDesc.getFieldNames(onlyStatic)); names.addAll(classDesc.getMethodNames(onlyStatic, includeInternal)); if (onlyStatic) { names.add("class"); if (!TruffleOptions.AOT) { // GR-13208: SVM does not support Class.getClasses() yet if (Modifier.isPublic(clazz.getModifiers())) { // no support for non-static member types now for (Class<?> t : clazz.getClasses()) { if (!isStaticTypeOrInterface(t)) { continue; } names.add(t.getSimpleName()); } } } } return names.toArray(new String[names.size()]); }
private static void markUsages(EconomicSet<Node> markedNodes) { NodeStack workStack = new NodeStack(markedNodes.size() + 4); for (Node marked : markedNodes) { workStack.push(marked); } while (!workStack.isEmpty()) { Node marked = workStack.pop(); for (Node usage : marked.usages()) { if (!markedNodes.contains(usage)) { workStack.push(usage); markedNodes.add(usage); } } } }
if (controlSplitNode.getSuccessorCount() == reachableSuccessors.size() - 1) {