Chapter 9

Parameterizations

A parameterization is a set of parameter values. Each thread has its own parameterization.

Parameterization information is stored in a Scheme_Config record. For the currently executing thread, scheme_config is the current parameterization. For any thread, the thread's Scheme_Thread record's config field stores the parameterization pointer.

Parameter values for built-in parameters are obtained and modified using scheme_get_param and scheme_set_param. Each parameter is stored as a Scheme_Object * value, and the built-in parameters are accessed through the following indices:

When installing a new parameter with scheme_set_param, no checking is performed on the supplied value to ensure that it is a legal value for the parameter; this is the responsibility of the caller of scheme_set_param. Note that Boolean parameters should only be set to the values #t and #f.

New primitive parameter indices are created with scheme_new_param and implemented with scheme_make_parameter and scheme_param_config.

9.1  Library Functions

¤ Scheme_Object * scheme_get_param(Scheme_Config *config, int param_id)

Gets the current value of the parameter specified by param_id. (This is a macro.)

¤ Scheme_Object * scheme_get_param_or_null(Scheme_Config *config, int param_id)

Gets the current value of the parameter specified by param_id. (This is a macro.)

¤ Scheme_Object * scheme_make_config(Scheme_Config *base)

Creates and returns a new parameterization, using base as the source parameterization. If base is NULL, the current thread's parameterization is used.

¤ int scheme_new_param()

Allocates a new primitive parameter index. This function must be called before scheme_basic_env.

¤ Scheme_Object * scheme_register_parameter(Scheme_Prim *function, char *name, int exnid)

Use this function instead of the other primitive-constructing functions, like scheme_make_prim, to create a primitive parameter procedure. See also scheme_param_config, below.

¤ Scheme_Object * scheme_param_config(char *name, Scheme_Object *param, int argc, Scheme_Object **argv,
   int arity, Scheme_Prim *check, char *expected, int isbool)

Call this procedure in a primitive parameter procedure to implement the work of getting or setting the parameter. The name argument should be the parameter procedure name; it is used to report errors. The param argument is a fixnum corresponding to the primtive parameter index returned by scheme_new_param. The argc and argv arguments should be the un-touched and un-tested arguments that were passed to the primitive parameter. Argument-checking is performed within scheme_param_config using arity, check, expected, and isbool: