The VarValues Service Class
The service class
VarValues contains those methods used by the engine to allocate,
store, and retrieve variable values.
The members of the
tVariable structure used by this class are as follows:
Member | Description of content
|
migComment | Contains the sequence number of the variable, starting at one, within the list
of parameters and then local variables declared within the subprogram.
|
specInfo | If the variable is a scalar then this is set to zero else it is set to the
the number of elements in the array.
|
The method VarValues_Construct
Prototype
void* VarValues_Construct(int subRoot)
The
VarValues_Constuct method initializes the values of the local variables
associated with a subprogram. Each call to a subprogram constructs a variable values vector.
In the case of recursion there is one varvalues vector for each active call to the
subprogram. Its parameter is:
Parameter | Description
|
subRoot | specifies the root offset of the subprogram being called.
|
Each parameter and local variable defined for the subprogram is assigned a sequence number
starting at one by the method
VarValues_SetLocalVariables. The corresponding entry
in the values vector controls the values for that component during the current call to the
subprogram. The zero member of the values vector contains the control information for
the values vector itself.
The method returns an opaque handle to the variable values vector. It is this handle that is
referred to as
This in methods using this vector.
The method VarValues_Destroy
Prototype
void VarValues_Destroy(void* This)
The
VarValues_Destroy method destroys a variable values vector for a subprogram call
when that call exits the subprogram. All scratch information storage associated with the
parameters and local variables associated with the subprgram call is released to the scratch
information manager. This includes the variable values vector itself. Its parameter is:
Parameter | Description
|
This | specifies the handle of the variable values vector. After this call the content
of this handle is no longer valid.
|
The method VarValues_GetHandle
Prototype
void* VarValues_GetHandle(void* This,int seq)
The
VarValues_GetHandle method is called when a member of a variable with a structure
type is being accessed. Its parameters are as follows:
Parameter | Description
|
This | specifies the handle of the variable values vector.
|
seq | specifies the sequence number of the variable whose member is being accessed.
|
The method returns a pointer to the start of the value vector for this instance of the
structure.
The method VarValues_GetType
Prototype
int VarValues_GetType(void* This,int seq)
The
VarValues_GetType method simply gets the type of a variable instance from the
variable values vector. Its parameters are as follows:
Parameter | Description
|
This | specifies the handle of the variable values vector.
|
seq | specifies the sequence number of the variable whose type is being gotten.
|
The engines using this class support variant types that are not imposed on
a variable until runtime. The consequence of this is that variables do not necessarily
have the same type in different executions of their subprogram. The type is recorded in
the variable value vector and not in the information vector of the variable itself.
The method VarValues_GetValue
Prototype
int VarValues_GetValue(void* This,int seq)
The
VarValues_GetValue method simply gets the value entry of a variable instance from
the variable values vector. Its parameters are as follows:
Parameter | Description
|
This | specifies the handle of the variable values vector.
|
seq | specifies the sequence number of the variable whose value is being gotten.
|
The method VarValues_PopHandle
Prototype
void* VarValues_PopHandle(void* This)
The
VarValues_PopHandle method pops a handle to a value that is to be passed to a
method expecting a pointer to a structure, array, or ByRef parameter. Its parameter is:
Parameter | Description
|
This | specifies the handle of the variable values vector.
|
The method pops a value or vector from the runtime data queue and returns a pointer obtained
from the information popped to an actual value or value vector that is being passed to
a method.
The method VarValues_PopObject
Prototype
void* VarValues_PopObject(void* This)
The
VarValues_PopObject method pops an object handle of a value instance. Its
parameter is:
Parameter | Description
|
This | specifies the handle of the variable values vector.
|
First, the sequence number of a variable is popped fron the stack. If that variable has an
object type with values associated with it then the handle to those values is returned. If no
values are associated with the object type, they are initialized in scratch information
storage and the handle is returned. If not an object type, then a simple pointer to the
values is returned.
The method VarValues_PushObject
Prototype
void VarValues_PushObject(int symRoot,int symType,void* handle)
The
VarValues_PushObject method creates an object and pushes its attribute vector onto
the runtime data queue. Its parameters are as follows:
Parameter | Description
|
symRoot | specifies the root of the object.
|
symType | specifies the object type of the object.
|
handle | specifies the handle for the information associated with the object.
|
The method VarValues_PushValue
Prototype
void VarValues_PushValue(void* This,int seq,int subscript)
The method pushes the possibly subscripted value of a variable onto
the runtime data queue. Its parameters are as follows:
Parameter | Description
|
This | specifies the handle of the variable values vector.
|
seq | specifies the sequence number of the variable whose value is being pushed.
|
subscript | specifies the subscript relative to 0 of the value if the variable is an array.
If the variable is not an array this parameter is ignored.
|
The method VarValues_SetExternalCall
Prototype
void VarValues_SetExternalCall(void* This,int subRoot, char* prams)
The
VarValues_SetExternalCall method sets the parameter values of a subprogram when
that subprogram is being called via from an external source. Its parameters are as follows:
Parameter | Description
|
This | specifies the handle of the variable values vector.
|
subRoot | specifies the root offset of the subprogram being called.
|
prams | contains the values to be assigned to the parameters of the subprogram. For
integer parameters it should contain a valid integer representation and for
booolean parameters it should contain ".T." or ".F.".
|
The method VarValues_SetInternalCall
Prototype
void VarValues_SetInternalCall(void* This, int subRoot)
The
VarValues_SetInternalCall method sets the parameter values of a subprogram when
that subprogram is being called via from an internal source. Its parameters ar as follows:
Parameter | Description
|
This | specifies the handle of the variable values vector.
|
subRoot | specifies the root offset of the subprogram being called.
|
The actual initial parameter values for the subprogram are popped from the runtime data
queue.
The method VarValues_SetLocalVariables
Prototype
void VarValues_SetLocalVariables(int subRoot)
The
VarValues_SetLocalVariables method is called by the
gmSL compiler after the
code for a subprogram has been compiled. It scans the symbols associated with the subprogram
for local variables and their control structures as required by the runtime engine. The
control structure for the subprogram is modified as well to specify the number of local
variables. Its parameter is as follows:
Parameter | Description
|
subRoot | specifies the rool offset of the complied gmSL method.
|
The method VarValues_SetValue
Prototype
void VarValues_SetValue(void* This,int seq,int value)
The
VarValues_SetValue method sets the simple value of a variable instance. Its
parameters are as follows:
Parameter | Description
|
This | specifies the handle of the variable values vector.
|
seq | specifies the sequence number of the variable whose value is being set being set.
|
value | specifies the new value.
|
The method VarValues_StoreValue
Prototype
void VarValues_StoreValue(void* This,int seq,int subscript)
The method pops a value from the runtime data queue and stores it
in the possibly subscripted value of a variable. Its parameters are as follows:
Parameter | Description
|
This | specifies the handle of the variable values vector.
|
seq | specifies the sequence number of the variable whose value is being stored.
|
subscript | specifies the subscript relative to 0 of the value if the variable is an array.
If the variable is not an array this parameter is ignored.
|