1 Overview
2 Values and Types
3 Memory Allocation
4 Namespaces and Modules
5 Procedures
6 Evaluation
7 Exceptions and Escape Continuations
8 Threads
9 Parameterizations
10 Continuation Marks
11 String Encodings
12 Bignums, Rationals, and Complex Numbers
13 Ports and the Filesystem
14 Structures
15 Security Guards
16 Custodians
17 Miscellaneous Utilities
18 Flags and Hooks
Index
Version: 4.0.2

 

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:

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.

Scheme_Object*

 

scheme_get_param

(

Scheme_Config* config,

 

 

 

 

int param_id)

Gets the current value (for the current thread) of the parameter specified by param_id.

Scheme_Object*

 

scheme_set_param

(

Scheme_Config* config,

 

 

 

 

int param_id,

 

 

 

 

Scheme_Object* v)

Sets the current value (for the current thread) of the parameter specified by param_id.

Scheme_Object*

scheme_get_thread_param

(

Scheme_Config* config,

 

 

Scheme_Thread_Cell_Table* cells,

 

 

int param_id)

Like scheme_get_param, but using an arbitrary thread’s cell-value table.

Scheme_Object*

scheme_set_thread_param

(

Scheme_Config* config,

 

 

Scheme_Thread_Cell_Table* cells,

 

 

int param_id,

 

 

Scheme_Object* v)

Like scheme_set_param, but using an arbitrary thread’s cell-value table.

Scheme_Object*

 

scheme_extend_config

(

Scheme_Config* base,

 

 

 

 

int param_id,

 

 

 

 

Scheme_Object* v)

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.

void

 

scheme_install_config

(

Scheme_Config* config)

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).

Scheme_Thread_Cell_Table*

scheme_inherit_cells

(

Scheme_Thread_Cell_Table* cells)

Creates a new thread-cell-value table, copying values for preserved thread cells from cells.

int

 

scheme_new_param

(

)

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).

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. This function is only available to embedding applications (i.e., not extensions).

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 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:

This function is only available to embedding applications (i.e., not extensions).