Lines Matching full:ablock
181 static void _Block_do_nothing(const void *aBlock) { }
287 struct Block_layout *aBlock;
295 aBlock = (struct Block_layout *)arg;
296 if (aBlock->flags & BLOCK_NEEDS_FREE) {
298 latching_incr_int(&aBlock->flags);
299 return aBlock;
301 else if (aBlock->flags & BLOCK_IS_GC) {
303 if (wantsOne && ((latching_incr_int(&aBlock->flags) & BLOCK_REFCOUNT_MASK) == 1)) {
305 _Block_setHasRefcount(aBlock, true);
307 return aBlock;
309 else if (aBlock->flags & BLOCK_IS_GLOBAL) {
310 return aBlock;
315 struct Block_layout *result = malloc(aBlock->descriptor->size);
317 memmove(result, aBlock, aBlock->descriptor->size); // bitcopy first
323 //printf("calling block copy helper %p(%p, %p)...\n", aBlock->descriptor->copy, result, aBlock);
324 (*aBlock->descriptor->copy)(result, aBlock); // do fixup
331 unsigned long int flags = aBlock->flags;
333 struct Block_layout *result = _Block_allocator(aBlock->descriptor->size, wantsOne, hasCTOR);
335 memmove(result, aBlock, aBlock->descriptor->size); // bitcopy first
346 (*aBlock->descriptor->copy)(result, aBlock); // do fixup
461 struct Block_layout *aBlock = (struct Block_layout *)arg;
463 if (!aBlock) return;
464 newCount = latching_decr_int(&aBlock->flags) & BLOCK_REFCOUNT_MASK;
467 if (aBlock->flags & BLOCK_IS_GC) {
471 _Block_setHasRefcount(aBlock, false);
473 else if (aBlock->flags & BLOCK_NEEDS_FREE) {
474 if (aBlock->flags & BLOCK_HAS_COPY_DISPOSE)(*aBlock->descriptor->dispose)(aBlock);
475 _Block_deallocator(aBlock);
477 else if (aBlock->flags & BLOCK_IS_GLOBAL) {
481 printf("Block_release called upon a stack Block: %p, ignored\n", (void *)aBlock);
489 struct Block_layout *aBlock;
491 aBlock = (struct Block_layout *)arg;
492 if (aBlock->flags & BLOCK_IS_GC) {
493 // bccAssert(aBlock->Block_flags & BLOCK_HAS_CTOR);
496 _Block_release(aBlock);
508 void *_Block_copy_collectable(const void *aBlock) {
509 return _Block_copy_internal(aBlock, 0);