9 Parameterizations
A parameterization is a set of parameter values. Each thread has its own initial parameterization, which is extended functionally and superseded by parameterizations that are attached to a particular continuation mark.
Parameterization information is stored in a Scheme_Config record. For the currently executing thread, scheme_current_config returns the current parameterization.
To obtain parameter values, a Scheme_Config is combined with the current threads Scheme_Thread_Cell_Table, as stored in the thread record’s cell_values field.
Parameter values for built-in parameters are obtained and modified (for the current thread) 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:
MZCONFIG_ERROR_PRINT_VALUE_HANDLER – error-value->string-handler
MZCONFIG_SQUARE_BRACKETS_ARE_PARENS – read-square-brackets-as-parens
MZCONFIG_CURLY_BRACES_ARE_PARENS – read-curly-braces-as-parens
MZCONFIG_ALLOW_SET_UNDEFINED – allow-compile-set!-undefined
MZCONFIG_COLLECTION_PATHS – current-library-collection-paths
To get or set a parameter value for a thread other than the current one, use scheme_get_thread_param and scheme_set_thread_param, each of which takes a Scheme_Thread_Cell_Table to use in resolving or setting a parameter value.
When installing a new parameter with scheme_set_param, no check 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.
|
Gets the current value (for the current thread) of the parameter specified by param_id.
|
Sets the current value (for the current thread) of the parameter specified by param_id.
|
Like scheme_get_param, but using an arbitrary thread’s cell-value table.
|
Like scheme_set_param, but using an arbitrary thread’s cell-value table.
|
Creates and returns a parameterization that extends base with a new value v (in all threads) for the parameter param_id. Use scheme_install_config to make this configuration active in the current thread.
|
Adjusts the current thread’s continuation marks to make config the current parameterization. Typically, this function is called after scheme_push_continuation_frame to establish a new continuation frame, and then scheme_pop_continuation_frame is called later to remove the frame (and thus the parameterization).
|
Creates a new thread-cell-value table, copying values for preserved thread cells from cells.
|
Allocates a new primitive parameter index. This function must be called before scheme_basic_env, so it is only available to embedding applications (i.e., not extensions).
|
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. This function is only available to embedding applications (i.e., not extensions).
|
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 primitive 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:
If arity is non-negative, potential parameter values must be able to accept the specified number of arguments. The check and expected arguments should be NULL.
If check is not NULL, it is called to check a potential parameter value. The arguments passed to check are always 1 and an array that contains the potential parameter value. If isbool is 0 and check returns scheme_false, then a type error is reported using name and expected. If isbool is 1, then a type error is reported only when check returns NULL and any non-NULL return value is used as the actual value to be stored for the parameter.
Otherwise, isbool should be 1. A potential procedure argument is then treated as a Boolean value.
This function is only available to embedding applications (i.e., not extensions).