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:
MZCONFIG_ERROR_PORT -- current-error-port
MZCONFIG_ENABLE_EXCEPTION_BREAK -- exception-break-enabled
MZCONFIG_ERROR_PRINT_VALUE_HANDLER -- error-value->string-handler
MZCONFIG_EXIT_HANDLER -- exit-handler
MZCONFIG_DEBUG_INFO_HANDLER -- debug-info-handler
MZCONFIG_LOAD_HANDLER -- current-load
MZCONFIG_PROMPT_READ_HANDLER -- current-prompt-read
MZCONFIG_CAN_READ_PIPE_QUOTE -- read-accept-bar-quote
MZCONFIG_PRINT_BOX -- print-box
MZCONFIG_SQUARE_BRACKETS_ARE_PARENS -- read-square-brackets-as-parens
MZCONFIG_CURLY_BRACES_ARE_PARENS -- read-curly-braces-as-parens
MZCONFIG_ERROR_PRINT_WIDTH -- error-print-width
MZCONFIG_CONFIG_BRANCH_HANDLER -- parameterization-branch-handler
MZCONFIG_ALLOW_SET_UNDEFINED -- allow-compile-set!-undefined
MZCONFIG_CUSTODIAN -- current-custodian
MZCONFIG_USE_COMPILED_KIND -- use-compiled-file-kinds
MZCONFIG_LOAD_DIRECTORY -- current-load-relative-directory
MZCONFIG_COLLECTION_PATHS -- current-library-collection-paths
MZCONFIG_PORT_PRINT_HANDLER -- global-port-print-handler
MZCONFIG_LOAD_EXTENSION_HANDLER -- current-load-extension
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.
¤ 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 configuration, using base
as the base configuration. If base is NULL, the current
thread's parameterization's current base parameterization
is used.
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:
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.