One important documentation tree describes the parts that the compiler
has found. It starts with the normal tree of documents that the project
manager stores about the current project:
Project group = list of projects
Project = list of documents
Each document creates a pointer to a structure of type FORM_DESC (module_form)
which holds the pointer to further information about the source code and
the GUI for the form.
name | |
localvar_offset | Offset for the next formlocal variable that will be created. |
form_number | Unique integer number (zero based) that will be used to identify the form in a table of form descriptions at runtime. |
first_formlocal_var (struct VAR_DESC) | Pointer to first variable description. This is the start of a list of variable descriptions (see VAR_DESC structure). |
first formlocal_sub (struct SUB_DESC) | Pointer to first subroutine description. This is the start of a list of subroutine descriptions (see SUBDESC structure). |
inherited_form | If the current source will be inherited from another source inherited_form points to the description of the base class description. |
first_parlist (struct PAR_FORM_LIST) | Beside the subroutine declarations described in the list starting with first_formlocal_var the parser uses an additional list of subroutine descriptions in parsing order. This will be stored as pointer in first_parlist. |
first_form_event (struct EVENT_DESC) | Pointer to first event description. This is the start of a list of event descriptions (see EVENT_DESC structure). |
next_form_header | Pointer to next form description in list ?? |
source_ptr (CBasicDocument) | This points back to the CBasicDocument class that holds additional information about the depending form and source module. |
Global variables | valid for all source files |
Variables local in the current source | Cleared when the parser starts with a new form, source or other module. |
Variables and parameter local in the current subroutine. | Cleared everytime the compiler starts to parse a new subroutine. |
The VAR_DESC structure stores the following information for a variable.
entry_length | Used for entries that store additional optional information behind the VAR_DESC structure. |
offset | Offset of the variable in the memory block of all variables at runtime. Every variable has a unique offset to address the variable memory ar runtime. |
typeflag | Flags to mark special properties of the variable |
type | number that describes the type of the variable (integer, double ...). See defines.h for legal values. |
subtype | used for component access comp.property etc. Has been replaced by sub_desc_ptr |
sub_desc_ptr | Pointer to structures that descibes details of variable type if needed. If for example the identifier is a call to a function the sub_desc_ptr points to the description of the called subroutine. |
var_range | Describes the range of the variable (global, formlocal, sublocal) |
modifier | Flags to mark modifiers set with the variable name like PUBLIC, PRIVATE... (currently not used) |
call_event_list | used ?? |
subdesc | old form of subdescription (used??) |
next_var | Pointer to next variable declaration in depending list (global, sublocal, parameter ...) |
SUB_DESC structure
name | Name of the subroutine |
sub_type | used ?? |
par_desc_list | Pointer to first parameter description list |
next_sub_header | Pointer to next subroutine description |
property_type | 0=normal sub 1=property get 2=property let |
code_offset | code address for interpreter or label number for compiler |
localvar_offset | Offset for next variable in formlocal variable definitions |
sub_ptr | Pointer to depending SUB_DESC structure |
last_unref_call | If a function will be called before the code position of the code is available this is a list of pointer to the addresses where the starting code position of the subroutine must be added later. |
par_list | Pointer to list of parameters for this function |
var_list | Pointer to list of sublocal variables for this subroutine |
next_parlist | Pointer to next PAR_DESC_LIST description. |
next_form_parlist | Pointer to next PAR_DESC_LIST in parsing order for current form (??) |
end_header_code_ptr | End of code for current subroutine (used for debuggin purposes) |
end_header_line_pos | (??) |
preread_token | (??) |
return_value | Pointer to variable description for return value of subroutine. |
name | Name of the event |
par_list | List of parameters used when the event will be raised |
evt_offset | Each event destination will at runtime be stored in the memory block of the component at a unique location. This offset describes the offset of this address within the component memory starting from the beginning of the memory block. |
next_event | Next event in list of event descriptions for the current form or module |
ENUM WEEKDAYS
MONDAY
TUESDAY
...
END ENUM
the values MONDAY ... will be stored as constants but the typename WEEKDAYS may be used in further variable declarations like
Dim myvar As WEEKDAYS
Therefore HBasic creates an additional structure of type TYPE_DESC which
in this case holds the description of the type WEEKDAYS.
type_id | Unique id to identify this type in variable descriptions |
type_name | Name of the type |
type | Kind of type (see defines.h (TYPE_*) for list of values) |
entry_length | Length of memory block that is used to store one entry of this type |
description | (??) |
next | Pointer to next type description in type definition list |