Back to index

plt-scheme  4.2.1
Classes | Typedefs | Functions | Variables
MacOS.c File Reference
#include <Resources.h>
#include <Memory.h>
#include <LowMem.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "gc.h"
#include "gc_priv.h"

Go to the source code of this file.


struct  CodeZeroPtr
struct  TemporaryMemoryBlock


typedef struct CodeZeroPtr ** CodeZeroHandle
typedef struct TemporaryMemoryBlock
typedef struct ** TemporaryMemoryHandle


voidGC_MacGetDataStart ()
void GC_MacFreeTemporaryMemory (void)
Ptr GC_MacTemporaryNewPtr (size_t size, Boolean clearMemory)
static void perform_final_collection ()


static TemporaryMemoryHandle theTemporaryMemory = NULL
static Boolean firstTime = true
word GC_fo_entries

Class Documentation

struct CodeZeroPtr

Definition at line 30 of file MacOS.c.

Class Members
unsigned long aboveA5
unsigned long belowA5
unsigned long JTOffset
unsigned long JTSize
struct TemporaryMemoryBlock

Definition at line 54 of file MacOS.c.

Class Members
char data
TemporaryMemoryHandle nextBlock

Typedef Documentation

Definition at line 52 of file MacOS.c.

Definition at line 52 of file MacOS.c.

Function Documentation

Definition at line 113 of file MacOS.c.

    /* if possible, collect all memory, and invoke all finalizers. */
# endif

    if (theTemporaryMemory != NULL) {
       long totalMemoryUsed = 0;
       TemporaryMemoryHandle tempMemBlock = theTemporaryMemory;
       while (tempMemBlock != NULL) {
              TemporaryMemoryHandle nextBlock = (**tempMemBlock).nextBlock;
              totalMemoryUsed += GetHandleSize((Handle)tempMemBlock);
              tempMemBlock = nextBlock;
       theTemporaryMemory = NULL;

#       if !defined(SILENT) && !defined(SHARED_LIBRARY_BUILD)
          fprintf(stdout, "[total memory used:  %ld bytes.]\n",
          fprintf(stdout, "[total collections:  %ld.]\n", GC_gc_no);
#       endif

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 37 of file MacOS.c.

       CodeZeroHandle code0 = (CodeZeroHandle)GetResource('CODE', 0);
       if (code0) {
              long belowA5Size = (**code0).belowA5;
              return (LMGetCurrentA5() - belowA5Size);
       fprintf(stderr, "Couldn't load the jump table.");
       return 0;

Here is the caller graph for this function:

Ptr GC_MacTemporaryNewPtr ( size_t  size,
Boolean  clearMemory 

Definition at line 64 of file MacOS.c.

       static Boolean firstTime = true;
       OSErr result;
       TemporaryMemoryHandle tempMemBlock;
       Ptr tempPtr = nil;

       tempMemBlock = (TemporaryMemoryHandle)TempNewHandle(size + sizeof(TemporaryMemoryBlock), &result);
       if (tempMemBlock && result == noErr) {
              tempPtr = (**tempMemBlock).data;
              if (clearMemory) memset(tempPtr, 0, size);
              tempPtr = StripAddress(tempPtr);

              // keep track of the allocated blocks.
              (**tempMemBlock).nextBlock = theTemporaryMemory;
              theTemporaryMemory = tempMemBlock;
#     if !defined(SHARED_LIBRARY_BUILD)
       // install an exit routine to clean up the memory used at the end.
       if (firstTime) {
              firstTime = false;
#     endif
       return tempPtr;

Here is the call graph for this function:

static void perform_final_collection ( ) [static]

Definition at line 96 of file MacOS.c.

  unsigned i;
  word last_fo_entries = 0;
  /* adjust the stack bottom, because CFM calls us from another stack
     location. */
     GC_stackbottom = (ptr_t)&i;

  /* try to collect and finalize everything in sight */
    for (i = 0; i < 2 || GC_fo_entries < last_fo_entries; i++) {
        last_fo_entries = GC_fo_entries;

Here is the call graph for this function:

Here is the caller graph for this function:

Variable Documentation

Boolean firstTime = true [static]

Definition at line 60 of file MacOS.c.

Definition at line 89 of file finalize.c.

Definition at line 59 of file MacOS.c.