This appendix lists the functions exported by Elk that may trigger a garbage collection. Within C/C++ code, local Scheme objects must be protected as shown in section @(ch-gc) when one of these functions is called during the objects' lifetime.
The C functions corresponding to the following Scheme primitives can cause a garbage collection:
append load read-string apply macro-body require autoload macro-expand reverse backtrace-list make-list string call-with-input-file make-string string->list call-with-output-file make-vector string->number call/cc map string->symbol command-line-args oblist string-append cons open-input-file string-copy dump open-input-output-file substring dynamic-wind open-input-string symbol-plist eval open-output-file tilde-expand for-each open-output-string type force port-line-number vector get-output-string procedure-lambda vector->list list provide vector-copy list->string put with-input-from-file list->vector read with-output-to-file all special forms all mathematical primitives except predicates all output primitives if output is sent to a string port
In practice, most of these functions, in particular the special forms, are rarely or never used in extensions or Elk-based applications. In addition to these primitives, the following C functions can trigger a garbage collection:
Alloc_Object() Make_Reduced_Flonum() Make_String() Make_Port() Make_Flonum() Make_Const_String() Load_Source_Port() Define_Primitive() Intern() Load_File() Printf() CI_Intern() Copy_List() Print_Object() Define_Variable() Const_Cons() General_Print_Object() Define_Symbol() Make_Integer() Format() Bits_To_Symbols() Make_Unsigned() Eval() Make_Vector() Make_Long() Funcall() Make_Const_Vector() Make_Unsigned_Long()
Note: Make_Integer(), Make_Unsigned(), Make_Long(), and Make_Unsigned_Long() can only trigger a garbage collection if FIXNUM_FITS() (or UFIXNUM_FITS(), respectively) returns zero for the given argument.