@Override public void addToObjectSpace(Ruby runtime, boolean useObjectSpace, IRubyObject object) { if (useObjectSpace) runtime.objectSpace.add(object); } };
private ObjectGroup getObjectGroup() { Reference<ObjectGroup> ref = currentObjectGroup.get(); ObjectGroup objectGroup = ref != null ? ref.get() : null; return objectGroup != null && !objectGroup.isFull() ? objectGroup : addObjectGroup(); }
private long createId(IRubyObject object) { long id = calculateObjectId(object); registerObjectId(id, object); return id; }
public void add(IRubyObject object) { if (true && object.getMetaClass() != null && !(object instanceof JavaProxy)) { getObjectGroup().add(object); } else { addIndividualWeakReference(object); } }
private synchronized ObjectGroup addObjectGroup() { cleanup(objectGroupReferenceQueue); ObjectGroup objectGroup; WeakReferenceListNode<ObjectGroup> ref = new WeakReferenceListNode<ObjectGroup>(objectGroup = new ObjectGroup(), objectGroupReferenceQueue, top); currentObjectGroup.set(ref); top = ref; if (groupSweeperReference == null) registerGroupSweeper(); return objectGroup; }
/** * We lazily stand up the object ID since it forces us to stand up * per-object state for a given object. We also check for ObjectSpace here, * and normally we do not register a given object ID into ObjectSpace due * to the high cost associated with constructing the related weakref. Most * uses of id/object_id will only ever need it to be a unique identifier, * and the id2ref behavior provided by ObjectSpace is considered internal * and not generally supported. * * @param objectIdAccessor The variable accessor to use for storing the * generated object ID * @return The generated object ID */ protected synchronized long initObjectId(RubyBasicObject self, VariableAccessor objectIdAccessor) { Ruby runtime = self.getRuntime(); long id; if (runtime.isObjectSpaceEnabled()) { id = runtime.getObjectSpace().createAndRegisterObjectId(self); } else { id = ObjectSpace.calculateObjectId(self); } // we use a direct path here to avoid frozen checks setObjectId(realClass, self, objectIdAccessor.getIndex(), id); return id; }
public IRubyObject id2ref(long id) { synchronized (identities) { cleanIdentities(); IdReference reference = identities.get(id); if (reference == null) { return null; } return reference.get(); } }
private synchronized void addIndividualWeakReference(IRubyObject object) { cleanup(deadReferences); top = new WeakReferenceListNode<Object>(object, deadReferences, top); }
public long createAndRegisterObjectId(IRubyObject rubyObject) { synchronized (identities) { Long longId = (Long) identitiesByObject.get(rubyObject); if (longId == null) { longId = createId(rubyObject); } return longId.longValue(); } }
@Deprecated public long idOf(IRubyObject rubyObject) { return createAndRegisterObjectId(rubyObject); }
@JRubyMethod(required = 1, optional = 1, module = true, visibility = PRIVATE) public static IRubyObject define_finalizer(IRubyObject recv, IRubyObject[] args, Block block) { Ruby runtime = recv.getRuntime(); IRubyObject finalizer; if (args.length == 2) { finalizer = args[1]; if (!finalizer.respondsTo("call")) { throw runtime.newArgumentError("wrong type argument " + finalizer.getType() + " (should be callable)"); } } else { finalizer = runtime.newProc(Block.Type.PROC, block); } IRubyObject obj = args[0]; runtime.getObjectSpace().addFinalizer(obj, finalizer); return runtime.newArray(RubyFixnum.zero(runtime), finalizer); }
public void add(IRubyObject object) { if (true && object.getMetaClass() != null && !(object instanceof JavaProxy)) { getObjectGroup().add(object); } else { addIndividualWeakReference(object); } }
private synchronized ObjectGroup addObjectGroup() { cleanup(objectGroupReferenceQueue); ObjectGroup objectGroup; WeakReferenceListNode<ObjectGroup> ref = new WeakReferenceListNode<ObjectGroup>(objectGroup = new ObjectGroup(), objectGroupReferenceQueue, top); currentObjectGroup.set(ref); top = ref; if (groupSweeperReference == null) registerGroupSweeper(); return objectGroup; }
id = runtime.getObjectSpace().createAndRegisterObjectId(self); } else { id = ObjectSpace.calculateObjectId(self);
public void registerObjectId(long id, IRubyObject object) { synchronized (identities) { cleanIdentities(); identities.put(id, new IdReference(object, id, deadIdentityReferences)); identitiesByObject.put(object, id); } }
private synchronized void addIndividualWeakReference(IRubyObject object) { cleanup(deadReferences); top = new WeakReferenceListNode<Object>(object, deadReferences, top); }
public long createAndRegisterObjectId(IRubyObject rubyObject) { synchronized (identities) { Long longId = (Long) identitiesByObject.get(rubyObject); if (longId == null) { longId = createId(rubyObject); } return longId.longValue(); } }
@Deprecated public long idOf(IRubyObject rubyObject) { return createAndRegisterObjectId(rubyObject); }
@JRubyMethod(required = 1, optional = 1, module = true, visibility = PRIVATE) public static IRubyObject define_finalizer(IRubyObject recv, IRubyObject[] args, Block block) { Ruby runtime = recv.getRuntime(); IRubyObject finalizer; if (args.length == 2) { finalizer = args[1]; if (!finalizer.respondsTo("call")) { throw runtime.newArgumentError("wrong type argument " + finalizer.getType() + " (should be callable)"); } } else { finalizer = runtime.newProc(Block.Type.PROC, block); } IRubyObject obj = args[0]; runtime.getObjectSpace().addFinalizer(obj, finalizer); return runtime.newArray(RubyFixnum.zero(runtime), finalizer); }
private long createId(IRubyObject object) { long id = calculateObjectId(object); registerObjectId(id, object); return id; }