aboutsummaryrefslogtreecommitdiff
path: root/gcc/ch/chill.texi
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ch/chill.texi')
-rw-r--r--gcc/ch/chill.texi1231
1 files changed, 0 insertions, 1231 deletions
diff --git a/gcc/ch/chill.texi b/gcc/ch/chill.texi
deleted file mode 100644
index 9dab1f02af4..00000000000
--- a/gcc/ch/chill.texi
+++ /dev/null
@@ -1,1231 +0,0 @@
-@\input texinfo @c -*-texinfo-*-
-@setfilename chill.info
-@settitle Guide to GNU Chill
-
-
-@ifinfo
-@format
-START-INFO-DIR-ENTRY
-* Chill: (chill). Chill compiler
-END-INFO-DIR-ENTRY
-@end format
-@end ifinfo
-
-@titlepage
-@title GNU Chill
-@author William Cox, Per Bothner, Wilfried Moser
-@end titlepage
-
-@ifinfo
-@node Top
-@top
-
-@menu
-* Options:: Compiler options
-* Missing:: Unimplemented parts of the Chill language
-* Enhancements:: GNU-specific enhancements to the Chill language
-* Conversions:: Value and location conversions
-* Separate compilation:: Separate compilation
-* Differences:: Differences between GNUCHILL and Z.200/1988
-* Directives:: Implemented Compiler Directives
-* References:: Language definition references
-@end menu
-
-@end ifinfo
-
-@node Options
-@chapter Compiler options
-
-Invoking the compiler:
-
-The @sc{gnu} CHILL compiler supports several new command line options, and
-brings a new use to another:
-
-@table @code
-@item -lang-chill
-This option instructs gcc that the following file is a CHILL source file,
-even though its extension is not the default `.ch'.
-
-@item -flocal-loop-counter
-The CHILL compiler makes a separate reach, or scope,
-for each DO FOR loop. If @code{-flocal-loop-counter} is
-specified, the loop counter of value enumeration and location
-enumeration is automatically declared inside that reach.
-This is the default behavior, required by Z.200.
-
-@item -fno-local-loop-counter
-When this option is specified, the above automatic declaration
-is not performed, and the user must declare all loop counters
-explicitly.
-
-@item -fignore-case
-When this option is specified, the compiler ignores case. All
-identifiers are converted to lower case. This enables the usage
-of C runtime libraries.
-
-@item -fno-ignore-case
-Ignoring the case of identifiers is turned off.
-
-@item -fruntime-checking
-The CHILL compiler normally generates code to check
-the validity of expressions assigned to variables or
-expressions passed as parameters to procedures and processes,
-if those expressions cannot be checked at compile time.
-This is the default behavior, required by Z.200.
-This option allows you to re-enable the default behavior
-after disabling it with the @code{-fno-runtime-checking}
-option.
-
-@item -fno-runtime-checking
-The CHILL compiler normally generates code to check
-the validity of expressions assigned to variables, or
-expressions passed as parameters to procedures and processes.
-This option allows you to disable that code generation.
-This might be done to reduce the size of a program's
-generated code, or to increase its speed of execution.
-Compile time range-checking is still performed.
-
-@item -fgrant-only
-@itemx -fchill-grant-only
-This option causes the compiler to stop successfully
-after creating the grant file specified by the source
-file (see modular programming in CHILL). No code is
-generated, and many categories of errors are not reported.
-
-@item -fold-string
-Implement the semantics of Chill 1984 with respect to strings:
-String indexing yields a slice of length one; CHAR is similar
-to CHAR(1) (or CHARS(1)); and BOOL is similar to BIT(1) (or BOOLS(1)).
-
-@item -fno-old-string
-Don't implement 1984 Chill string semantics. This is the default.
-
-@item -I@var{seize_path}
-This directive adds the specified seize path to the compiler's
-list of paths to search for seize files. When processing a
-USE_SEIZE_FILE directive, the compiler normally searches for
-the specified seize file only in the current directory. When
-one or more seize paths are specified, the compiler also
-searches in those directories, in the order of their
-specification on the command line, for the seize file.
-
-@item -c
-This C-related switch, which normally prevents gcc from
-attempting to link, is *not* yet implemented by the @code{chill} command,
-but you can use the @code{gcc} command with this flag.
-@end table
-
-@node Missing
-@chapter Implemented and missing parts of the Chill language
-
-The numbers in parentheses are Z.200(1988) section numbers.
-
-@itemize @bullet
-@item The FORBID keyword in a GRANT statement is currently ignored.
-
-@item A CASE action or expression allows only a single expression
-in a case selector list (5.3.2, 6.4).
-
-@item ROW modes are not implemented (3.6.3, 3.13.4).
-
-@item Due to the absence of ROW modes, DYNAMIC has no meaning in
-connection with access and text modes.
-
-@item Array and structure layout (PACK, POS, NOPACK,
-STEP keywords) is ignored (3.12.6).
-
-@item Bit-string slices are not implemented.
-
-@item The support for synchronization modes and concurrent execution
-is slightly non-standard.
-
-@item Exception handling is implemented, but exceptions are not
-generated in all of the required situations.
-
-@item Dynamic modes are not implemented (though string slices should work).
-
-@item Reach-bound initializations are not implemented (4.1.2).
-
-@end itemize
-
-@node Enhancements
-@chapter GNU-specific enhancements to the Chill language
-
-@itemize @bullet
-@item Grantfiles. See @xref{Separate compilation}.
-@item Precisions. Multiple integer and real precisions are supported,
-as well as signed and unsigned variants of the integer modes.
-@item DESCR built-in. The new built-in function
-DESCR ( <descriptor argument> ) returns a pointer to
-STRUCT( addr PTR, length ULONG ) where <descriptor argument> can be
-anything the compiler can handle but at least a location of any mode
-(except synchronizing modes) and any character string or powerset value.
-(A temporary location within the current stack frame may be allocated
-if an expression is used.)
-
-CHILL does not permit the writing of procedures with parameters of
-any type. Yet some interfaces---in particular those to system
-calls---require
-the handling of a wide range of modes, e.g. any string mode, any structure
-mode, or any powerset mode. This could be handled by specifying two
-parameters (PTR, INT for the length) but this is error-prone (no guarantee
-the same location is used after in ADDR and LENGTH), and it will not be
-possible for expressions.
-
-Caveats: This feature permits the programmer to obtain the address of
-a literal (if the compiler takes this shortcut---see 1st example below).
-If hardware features protect constant parts of the program, erronous
-abuse will be detected.
-
- Examples:
- OFFER_HANDLER( descr("dbs"), ->dbs);
-
- SYNMODE m_els = SET( ela, elb, elc );
- SYNMODE m_elsel = POWERSET m_els;
- DCL user_buf STRUCT( a mx, b my, c mz);
- DCL select POWERSET m_elsel;
-
- select := m_elsel[LOWER(m_els) : UPPER(m_els)];
-
- GET_RECORD( relation, recno, descr(user_buf), descr(select) );
-
- PUT_RECORD( relation, recno, descr(user_buf.b), descr(m_elsel[elb]) );
-
-@item LENGTH built-in on left-hand-side. The LENGTH built-in may be
-used on the left-hand-side of an assignment, where its argument is a VARYING
-character string.
-@end itemize
-
-@node Conversions
-@chapter Value and location conversions
-
-Value and location conversions are highly dependent on the target machine.
-They are also very loosely specified in the 1988 standard.
-(The 1992 standard seems an improvement.)
-
-The GNU Chill compiler interprets @code{@var{mode}(@var{exp})} as follows:
-
-@itemize @bullet
-@item
-If @var{exp} is a referable location,
-and the size of (the mode of) @var{exp} is the same as the size of @var{mode},
-a location conversion is used.
-It is implemented exactly as: @code{(@var{refmode}(-> @var{exp}))->},
-where @var{refmode} is a synmode for @code{REF @var{mode}}.
-
-The programmer is responsible for making sure that alignment
-restrictions on machine addresses are not violated.
-
-If both @var{mode} and the mode of @var{exp} are discrete modes,
-alignment should not be a problem, and we get the same conversion
-as a standard value conversion.
-
-@item
-If @var{exp} is a constant,
-and the size of (the mode of) @var{exp} is the same as the size of @var{mode},
-then a value conversion is performed. This conversion is done
-at compile time, and it has not been implemented for all types.
-Specifically, converting to or from a floating-point type is not implemented.
-
-@item
-If both @var{mode} and the mode of @var{exp} are discrete modes,
-then a value conversion is performed, as described in Z.200.
-
-@item
-If both @var{mode} and the mode of @var{exp} are reference modes,
-then a value conversion is allowed.
-The same is true is one mode is a reference mode, and the other
-is an integral mode of the same size.
-
-@end itemize
-
-@node Separate compilation
-@chapter Separate compilation
-
-The GNU CHILL compiler supports modular programming. It
-allows the user to control the visibility of variables
-and modes, outside of a MODULE, by the use of GRANT
-and SEIZE directives. Any location or mode may be made
-visible to another MODULE by GRANTing it in the MODULE
-where it is defined, and SEIZEing it in another MODULE
-which needs to refer to it.
-
-When variables are GRANTed in one or more modules of a
-CHILL source file, the compiler outputs a grant file,
-with the original source file name as the base name,
-and the extension `.grt'. All of the variables and modes
-defined in the source file are written to the grant file,
-together with any use_seize_file directives, and the
-GRANT directives. A grant file is created for every such
-source file, except if an identical grant file already
-exists. This prevents unnecessary makefile activity.
-
-The referencing source file must:
-
-@enumerate
-@item specify the grant file in a use_seize_file directive, and
-@item SEIZE each variable or mode definition that it needs.
-@end enumerate
-
-An attempt to SEIZE a variable or mode which is not
-GRANTed in some seize file is an error.
-
-An attempt to refer to a variable which is defined in
-some seize file, but not explicitly granted, is an
-error.
-
-An attempt to GRANT a variable or mode which is not
-defined in the current MODULE is an error.
-
-Note that the GNU CHILL compiler will *not* write out a
-grant file if:
-
-@itemize @bullet
-@item there are no GRANT directives in the source file, or
-@item the entire grant file already exists, and is
- identical to the file which the compiler has just built.
-(This latter ``feature'' may be removed at some point.)
-@end itemize
-
-Otherwise, a grant file is an automatic, unsuppressable
-result of a successful CHILL compilation.
-
-A future release will also support using remote spec modules
-in a similar (but more Blue Book-conforming) manner.
-
-@node Differences
-@chapter Differences to Z.200/1988
-
-This chapter lists the differences and extensions between GNUCHILL
-and the CCITT recommendation Z.200 in its 1988 version (reffered to
-as Z.200/1988).
-
-@itemize @bullet
-
-@item 2.2 Vocabulary@*
-The definition of @i{<simple name string>} is changed to:
-
-@example
-@i{<simple name string> ::=}
-@example
-@i{@{<letter> | _ @} @{ <letter> | <digit | _ @}}
-@end example
-@end example
-
-@item 2.6 Compiler Directives@*
-Only one directive is allowed between the compiler directive delimiters
-`<>' and `<>' or the end-of-line, i.e.
-@example
-<> USE_SEIZE_FILE "foo.grt" <>
-<> ALL_STATIC_OFF
-@end example
-
-@item 3.3 Modes and Classes@*
-The syntax of @i{<mode>} is changed to:
-
-@example
-@i{<mode> ::=}
-@example
- [@b{READ}] @i{<non-composite-mode>}
-| [@b{READ}] @i{composite-mode>}
-@end example
-
-@i{<non-composite-mode> ::=}
-@example
- @i{<discrete mode>}
-| @i{<real modes>}
-| @i{<powerset modes>}
-| @i{<reference mode>}
-| @i{<procedure mode>}
-| @i{<instance mode>}
-| @i{<synchronization mode>}
-| @i{<timing mode>}
-@end example
-@end example
-
-@item 3.4 Discrete Modes@*
-The list of discrete modes is enhanced by the following modes:
-
-@example
-BYTE 8-bit signed integer
-UBYTE 8-bit unsigned integer
-UINT 16-bit unsigned integer
-LONG 32-bit signed integer
-ULONG 32-bit unsigned integer
-@end example
-
-@strong{Please note} that INT is implemented as 16-bit signed integer.
-
-@item 3.4.6 Range Modes@*
-The mode BIN(n) is not implemented. Using INT(0 : 2 ** n - 1) instead of
-BIN(n) makes this mode unneccessary.
-
-@item 3.X Real Modes@*
-Note: This is an extension to Z.200/1988, however, it is defined in
-Z.200/1992.
-
-@b{syntax:}
-
-@example
-@i{<real mode> ::=}
-@example
-@i{<floating point mode>}
-@end example
-@end example
-
-@b{semantics:}
-
-@example
-A real mode specifies a set of numerical values which approximate a
-contiguous range of real numbers.
-@end example
-
-@item 3.X.1 Floating point modes@*
-
-@b{syntax:}
-
-@example
-@i{<floating point mode> ::=}
-@example
-@i{<floating point mode name}
-@end example
-@end example
-
-@b{predefined names:}
-
-The names @i{REAL} and @i{LONG_REAL} are predefined as @b{floating
-point mode} names.
-
-@b{semantics:}
-
-A floating point mode defines a set of numeric approximations to a
-range of real values, together with their minimum relative accuracy,
-between implementation defined bounds, over which the usual ordering
-and arithmetic operations are defined. This set contains only the
-values which can be represented by the implementation.
-
-@b{examples:}
-
-@example
-@i{REAL}
-@i{LONG_REAL}
-@end example
-
-@item 3.6 Reference Modes@*
-Row modes are not implemeted at all.
-
-@item 3.7 Procedure Mode@*
-The syntax for procedure modes is changed to:
-
-@example
-@i{<procedure mode> ::=}
-@example
- @b{PROC} @i{([<parameter list>]) [ <result spec> ]}
- @i{[}@b{EXCEPTIONS}@i{(<exception list>)] [}@b{RECURSIVE}@i{]}
-| @i{<procedure mode name>}
-@end example
-
-@i{<parameter list> ::=}
-@example
-@i{<parameter spec> @{, <parameter spec> @} *}
-@end example
-
-@i{<parameter spec> ::=}
-@example
-@i{<mode> [ <parameter attribute> ]}
-@end example
-
-@i{<parameter attribute> ::=}
-@example
-@b{IN} | @b{OUT} | @b{INOUT} | @b{LOC}
-@end example
-
-@i{<result spec> ::=}
-@example
-@b{RETURNS} @i{( <mode> [}@b{LOC}@i{])}
-@end example
-
-@i{<exception list> ::=}
-@example
-@i{<exception name> @{, <exception name> @} *}
-@end example
-@end example
-
-
-@item 3.10 Input-Output Modes@*
-Due to the absence of row modes, DYNAMIC has no meaning in an access
-or text mode definition.
-
-
-@item 3.12.2 String Modes@*
-As @i{<string modes>} were defined differently in Z.200/1984, the syntax
-of @i{<string mode>} is changed to:
-
-@example
-@i{<string mode> ::=}
-@example
- @i{<string type> ( <string length> ) [} @b{VARYING} @i{]}
-| @i{<parametrized string mode>}
-| @i{<string mode name>}
-@end example
-
-@i{<parameterized string mode> ::=}
-@example
- @i{<origin string mode name> ( <string length> )}
-| @i{<parameterized string mode name>}
-@end example
-
-@i{<origin string mode name> ::=}
-@example
-@i{<string mode name>}
-@end example
-
-@i{string type}
-@example
- @b{BOOLS}
-| @b{BIT}
-| @b{CHARS}
-| @b{CHAR}
-@end example
-
-@i{<string length> ::=}
-@example
-@i{<integer literal expression>}
-@end example
-@end example
-
-@b{VARYING} is not implemented for @i{<string type>} @b{BIT}
-and @b{BOOL}.
-
-@item 3.11.1 Duration Modes@*
-The predefined mode @i{DURATION} is implemented as a NEWMODE ULONG and
-holds the duration value in miliseconds. This gives a maximum duration
-of
-
-@example
-MILLISECS (UPPER (ULONG)),
-SECS (4294967),
-MINUTES (71582),
-HOURS (1193), and
-DAYS (49).
-@end example
-
-@item 3.11.2 Absolute Time Modes@*
-The predefined mode @i{TIME} is implemented as a NEWMODE ULONG and
-holds the absolute time in seconds since Jan. 1st, 1970. This is
-equivalent to the mode `time_t' defined on different systems.
-
-@item 3.12.4 Structure Modes@*
-Variant fields are allowed, but the CASE-construct may define only one
-tag field (one dimensional CASE). OF course, several variant fields may
-be specified in one STRUCT mode. The tag field will (both at compile-
-and runtime) not be interpreted in any way, however, it must be
-interpreted by a debugger. As a consequence, there are no parameterized
-STRUCT modes.
-
-@item 3.12.5 Layout description for array and structure modes@*
-STEP and POS is not implemeted at all, therefore the syntax of
-@i{<element layout} and @i{field layout} is changed to:
-
-@example
-@i{<element layout> ::=}
-@example
-@b{PACK} | @b{NOPACK}
-@end example
-
-@i{<field layout> ::=}
-@example
-@b{PACK} | @b{NOPACK}
-@end example
-@end example
-
-@item 3.13.4 Dynamic parameterised structure modes@*
-Dynamic parameterised structure modes are not implemented.
-
-@item 4.1.2 Location declaration@*
-The keyword STATIC is allowed, but has no effect at module level, because
-all locations declared there are assumed to be `static' by default. Each
-granted location will become `public'. A `static' declaration inside a
-block, procedure, etc. places the variable in the data section instead of
-the stack section.
-
-@item 4.1.4 Based decleration@*
-The based declaration was taken from Z.200/1984 and has the following
-syntax:
-
-@b{syntax:}
-
-@example
-@i{<based declaration> ::=}
-@example
-@i{<defining occerrence list> <mode>} @b{BASED}
-@i{( <free reference location name> )}
-@end example
-@end example
-
-@b{semantics:}
-
-A based declaration with @i{<free reference location name>} specifies
-as many access names as are defining occerrences in the @i{defining
-occurrence list}. Names declared in a base declaration serve as an
-alternative way accessing a location by dereferencing a reference
-value. This reference value is contained in the location specified by
-the @i{free reference location name}. This dereferencing operation is
-made each time and only when an access is made via a declared @b{based}
-name.
-
-@b{static properties:}
-
-A defining occurrence in a @i{based declaration} with @i{free reference
-location name} defines a @b{based} name. The mode attached to a
-@b{based} name is the @i{mode} specified in the @i{based declaration}. A
-@b{based} name is @b{referable}.
-
-@item 4.2.2 Access names@*
-The syntax of access names is changed to:
-
-@example
-@i{<access name> ::=}
-@example
- @i{<location name>}
-| @i{<loc-identity name>}
-| @i{<based name>}
-| @i{<location enumeration name>}
-| @i{<location do-with name>}
-@end example
-@end example
-
-The semantics, static properties and dynamic conditions remain
-unchanged except that they are enhanced by @i{base name}.
-
-@item 5.2.4.1 Literals General@*
-The syntax of @i{<literal>} is change to:
-
-@example
-@i{<literal> ::=}
-@example
- @i{<integer literal>}
-| @i{<boolean literal>}
-| @i{<charater literal>}
-| @i{<set literal>}
-| @i{<emptiness literal>}
-| @i{<character string literal>}
-| @i{<bit string literal>}
-| @i{<floating point literal>}
-@end example
-@end example
-
-Note: The @i{<floating point literal>} is an extension to Z.200/1988 and
-will be described later on.
-
-@item 5.2.4.2 Integer literals@*
-The @i{<decimal integer literal>} is changed to:
-
-@example
-@i{<decimal integer literal> ::=}
-@example
- @i{@{ D | d @} ' @{ <digit> | _ @} +}
-| @i{<digit> @{ <digit> | _ @} *}
-@end example
-@end example
-
-@item 5.2.4.4 Character literals@*
-A character literal, e.g. 'M', may serve as a charater string literal of
-length 1.
-
-@item 5.2.4.7 Character string literals@*
-The syntax of a character string literal is:
-
-@example
-@i{<character string literal> ::=}
-@example
- @i{'@{ <non-reserved character> | <single quote> |}
- @i{<control sequence> @} * '}
-| @i{'@{ <non-reserved character> | <double quote> |}
- @i{<control sequence> @} * '}
-@end example
-
-@i{<single quote> ::=}
-@example
-@i{''}
-@end example
-
-@i{<double quote> ::=}
-@example
-@i{""}
-@end example
-@end example
-
-A character string litaral of length 1, enclosed in apostrophes
-(e.g. 'M') may also serve as a charater literal.
-
-@item 5.2.4.9 Floating point literal@*
-Note: This is an extension to Z.200/1988 ans was taken from Z.200/1992.
-
-@b{syntax:}
-
-@example
-@i{<floating point literal> ::=}
-@example
- @i{<unsigned floating point literal>}
-| @i{<signed floating point literal>}
-@end example
-
-@i{<unsigned floating point literal> ::=}
-@example
- @i{<digit sequence> . [ <digit sequence> ] [ <exponent> ]}
-| @i{[ <digit sequence> ] . <digit sequence> [ <exponent> ]}
-@end example
-
-@i{<signed floating point literal> ::=}
-@example
-@i{- <unsigned floating point literal>}
-@end example
-
-@i{<digit sequence> ::=}
-@example
-@i{<digit> @{ <digit> | _ @} *}
-@end example
-
-@i{<exponent> ::=}
-@example
- @i{[ E | D | e | d ] <digit sequence>}
-| @i{[ E | D | e | d ] - <digit sequence>}
-@end example
-@end example
-
-@item 5.2.14 Start Expression@*
-The START expression is not implemented.
-
-@item 5.3 Values and Expressions@*
-The undefined value, denoted by `*', is not implemented.
-
-@item 5.3.8 Operand-5@*
-The @i{<string repetition operator>} is defined as:
-
-@example
-@i{<string repetition operator> ::=}
-@example
-@i{(<integer expression>)}
-@end example
-@end example
-
-@item 6.4 Case Action@*
-There may be only one case selector specified. The optional range list
-must not be specified.
-
-@item 6.5 Do Action@*
-A Do-Action without control part is not implemented. Grouping of
-statements can be achieved via BEGIN and END. A location enumeration is not
-allowed for BIT strings, only for (varying) CHAR strings and ARRAYs.
-
-The expression list in a DO WITH must consist of locations only.
-
-@item 6.13 Start Action@*
-The syntax of the START action is changed to:
-
-@example
-@i{<start action> ::=}
-@example
-@b{START} @i{<process name> (<copy number> [, <actual parameter list>])}
-@i{[} @b{SET} @i{<instance location> ]}
-@end example
-
-@i{<copy number> ::=}
-@example
-@i{<integer expression>}
-@end example
-@end example
-
-@item 6.16 Delay Action@*
-The optional PRIORITY specification need not be a constant.
-
-@item 6.17 Delay Case Action@*
-The optional SET branch and the, also optional, PRIORITY branch must be
-separated by `;'.
-
-@item 6.18 Send Action@*
-The send action must define a destination instance (via the TO branch),
-since undirected signals are not supported. The optional PRIORITY
-specification need not be a constant. Additional to the data
-transported by the signal, there will be a user defined argument.
-
-The syntax of the @i{<send signal action>} is therefore:
-
-@example
-@i{<send signal action> ::=}
-@example
-@b{SEND} @i{<signal name> [ ( <value> @{, <value> @} * ) ]}
-@i{[} @b{WITH} @i{<expression> ]}
-@b{TO} @i{<instance primitive value> [ <priority> ]}
-@end example
-@end example
-
-The default priority can be specified by the compiler directive
-SEND_SIGNAL_DEFAULT_PRIORITY. If this also is omitted, the default
-priority is 0.
-
-@item 6.20.3 CHILL value built-in calls@*
-The CHILL value buit-in calls are enhanced by some calls, and other calls
-will have different arguments as described in Z.200/1988. Any call not
-mentioned here is the same as described in Z.200/1988.
-
-@b{syntax:}
-
-@example
-@i{CHILL value built-in routine call> ::=}
-@example
- @i{ADDR (<location>)}
-| @i{PRED (<pred succ argument>)}
-| @i{SUCC (<pred succ argument>)}
-| @i{ABS (<numeric expression>)}
-| @i{LENGTH (<length argument>)}
-| @i{SIN (<floating point expression>)}
-| @i{COS (<floating point expression>)}
-| @i{TAN (<floating point expression>)}
-| @i{ARCSIN (<floating point expression>)}
-| @i{ARCCOS (<floating point expression>)}
-| @i{ARCTAN (<floating point expression>)}
-| @i{EXP (<floating point expression>)}
-| @i{LN (<floating point expression>)}
-| @i{LOG (<floating point expression>)}
-| @i{SQRT (<floating point expression>)}
-| @i{QUEUE_LENGTH (<buffer location> | <event location>)}
-| @i{GEN_INST (<integer expression> | <process name> ,}
- @i{<integer expression>)}
-| @i{COPY_NUMBER (<instance expression>)}
-| @i{GEN_PTYE (<process name>)}
-| @i{PROC_TYPE (<instance expression>)}
-| @i{GEN_CODE (<process name> | <signal name>)}
-| @i{DESCR (<location>)}
-@end example
-
-@i{<pred succ argument> ::=}
-@example
- @i{<discrete expression>}
-| @i{<bound reference expression>}
-@end example
-
-@i{<numeric expression> ::=}
-@example
- @i{<integer expression>}
-| @i{floating point expression>}
-@end example
-
-@i{<length argument> ::=}
-@example
- @i{<string location>}
-| @i{<string expression>}
-| @i{<string mode name>}
-| @i{<event location>}
-| @i{<event mode name>}
-| @i{<buffer location>}
-| @i{<buffer mode name>}
-| @i{<text location>}
-| @i{<text mode name>}
-@end example
-@end example
-
-@b{semantics:}
-
-@i{ADDR} is derived syntax for -> @i{<location>}.
-
-@i{PRED} and @i{SUCC} delivers respectively, in case of a @i{discrete
-expression}, the next lower or higher discrete value of their argument,
-in case of @i{bound reference expression} these built-in calls deliver a
-pointer to the previous or next element.
-
-@i{ABS} is defined on numeric values, i.e. integer values and floating
-point values, delivering the corresponding absolute value.
-
-@i{LENGTH} is defined on
-
-@itemize @bullet
-
-@item string and text locations and string expressions, delivering the
-length of them;
-
-@item event locations, delivering the @b{event length} of the mode of the
-location;
-
-@item buffer locations, delivering the @b{buffer length} of the mode of
-the location;
-
-@item string mode names, delivering the @b{string length} of the mode;
-
-@item text mode names, delivering the @b{text length} of the mode;
-
-@item buffer mode names, delivering the @b{buffer length} of the mode;
-
-@item event mode names, delivering the @b{event length} of the mode;
-
-@item Additionally, @i{LENGTH} also may be used on the left hand
-side of an assignment to set a new length of a @i{varying character
-string location}. However, to avoid undefined elements in the varying
-string, the new length may only be less or equal to the current length.
-Otherwise a @b{RANGEFAIL} exception will be generated.
-@end itemize
-
-@i{SIN} delivers the sine of its argument (interpreted in radians).
-
-@i{COS} delivers the cosine of its argument (interpreted in radians).
-
-@i{TAN} delivers the tangent of its argument (interpreted in radians).
-
-@i{ARCSIN} delivers the sin -1 function of its argument.
-
-@i{ARCCOS} delivers the cos -1 function of its argument.
-
-@i{ARCTAN} delivers the tan -1 function of its argument.
-
-@i{EXP} delivers the exponential function, where x is the argument.
-
-@i{LN} delivers the natural logarithm of its argument.
-
-@i{LOG} delivers the base 10 logarithm of its argument.
-
-@i{SQRT} delivers the sqare root of its argument.
-
-@i{QUEUE_LENGTH} delivers either the number of sending delayed processes
-plus the number of messages in a buffer queue (if the argument is a
-@i{buffer location}), or the number of delayed processes (if the
-argument specifies an @i{event location}) as @i{integer expression}.
-
-@i{GEN_INST} delivers an @i{instance expression} constructed from the
-arguments. Both arguments must have the @i{&INT}-derived class.
-
-@i{COPY_NUMBER} delivers as @i{&INT}-derived class the copy number of an
-@i{instance location}.
-
-@i{GEN_PTYPE} delivers as @i{&INT}-derived class the associated number
-of the @i{process name}.
-
-@i{PROC_TYPE} delivers as @i{&INT}-derived class the process type of an
-@i{instance expression}.
-
-@i{GEN_CODE} delivers as @i{&INT}-derived class the associated number of
-the @i{process name} or @i{signal name}.
-
-@i{DESCR} delivers a @i{free reference expression} pointing to a
-structure with the following layout describing the @i{location} argument.
-
-@example
-SYNMODE __tmp_descr = STRUCT (p PTR, l ULONG);
-@end example
-
-
-@item 7.4.2 Associating an outside world object@*
-The syntax of the associate built-in routine call is defined as:
-
-@example
-@i{<associate built-in routine call> ::=}
-@example
-@i{ASSOCIATE ( <association location>, <string expression>,} [@i{, <string expression>} ] @i{)}
-@end example
-@end example
-
-The ASSOCIATE call has two parameters besides the association location:
-a pathname and an optional mode string.
-
-The value of the first string expression must be a pathname according to
-the rules of the underlying operating system. (Note that a relative pathname
-implies a name relative to the working directory of the process.)
-
-The mode string may contain the value "VARIABLE", which requests
-an external representation of records consisting of an UINT record
-length followed by as many bytes of data as indicated by the length field.
-Such a file with variable records is not indexable.
-
-A file with variable records can be written using any record mode. If the
-record mode is CHARS(n) VARYING, the record length is equal to the actual
-length of the value written. (Different record may have differing lengths.)
-With all other record modes, all records written using the same access mode
-will have the same length, but will still be prefixed with the length field.
-(Note that by re-connecting with different access modes, the external
-representation may ultimately contain records with differing lengths.)
-
-A file with variable records can only be read by using a record mode of
-CHARS(n) VARYING.
-
-
-@item 7.4.2 Accessing association attributes@*
-The value of the READABLE and WRITEABLE attributes is determined using
-the file status call provided by the operating system. The result will
-depend on the device being accessed, or on the file mode.
-
-The INDEXABLE attribute has the value false for files with variable records,
-and for files associated with devices not supporting random positioning
-(character devices, FIFO special files, etc.).
-
-The variable attribute is true for files associated with the mode sting
-"VARIABLE", and false otherwise.
-
-
-@item 7.4.5 Modifying association attributes@*
-The syntax of the MODIFY built-in routine call is defined as:
-
-@example
-@i{<modify built-in call> ::=}
-@example
-@i{MODIFY ( <association location>, <string expression> )}
-@end example
-@end example
-
-At present, MODIFY accepts a character string containing a pathname
-in addition to the association location, which will cause a renaming
-of the associated file.
-
-
-@item 7.4.9 Data transfer operations@*
-READRECORD will fail (causing READFAIL) if the number of bytes from the
-current position in the file to the end of the file is greater than zero
-but less than the size of the record mode, and no data will be transferred.
-(If the number of bytes is zero, no error occurs and OUTOFFILE will
-return TRUE.)
-
-The number of bytes transferred by READRECORD and WRITERECORD is equal to
-the size of the record mode of the access location. Note that the
-internal representation of this mode may vary depending on the
-record mode being packed or not.
-
-
-@item 7.5 Text Input Output@*
-Sequential text files will be represented so as to be compatible
-with the standard representation of texts on the underlying operating
-system, where control characters are used to delimit text records on files
-as well as to control the movement of a cursor or printing head on a device.
-
-For indexed text files, records of a uniform length (i.e. the size of the
-text record, including the length field) are written. All i/o codes cause
-an i/o transfer without any carriage control characters being added to the
-record, which will be expanded with spaces.
-
-An indexed text file is therefore not compatible with the standard
-text representation of the underlying operating system.
-
-
-
-@item 7.5.3 Text transfer operations@*
-The syntax of @i{<text argument>} is changed to:
-
-@example
-@i{<text argument> ::=}
-@example
- @i{<text location>}
-| @i{<predefined text location>}
-| @i{<varying string location>}
-@end example
-
-@i{<predefined text location> ::=}
-@example
- STDIN
-| STDOUT
-| STDERR
-@end example
-@end example
-
-NOTE: The identifiers STDIN, STDOUT, and STDERR are predefined.
-Association and connection with files or devices is done according to
-operating system rules.
-
-The effect of using READTEXT or WRITETEXT with a character string location
-as a text argument (i.e. the first parameter) where the same location also
-appears in the i/o list is undefined.
-
-The current implementation of formatting assumes run-to-completion semantics
-of CHILL tasks within an image.
-
-
-
-@item 7.5.5 Conversion@*
-Due to the implementation of @i{<floating point modes>} the syntax
-is changed to:
-
-@example
-@i{<conversion clause> ::=}
-@example
-@i{<conversion code> @{ <conversion qualifier @} *}
-@i{[ <clause width> ]}
-@end example
-
-@i{<conversion code> ::=}
-@example
-@i{B} | @i{O} | @i{H} | @i{C} | @i{F}
-@end example
-
-@i{<conversion qualifier> ::=}
-@example
-@i{L} | @i{E} | @i{P<character>}
-@end example
-
-@i{<clause width> ::=}
-@example
- @i{@{ <digit> @} +} | @i{V}
-| @i{<real clause width>}
-@end example
-
-@i{<real clause width> ::=}
-@example
-@i{@{ @{ <digit> + | V @} : @{ @{ <digit> @} + | V @}}
-@end example
-@end example
-
-Note: The @i{<real clause width>} is only valid for @i{<conversion
-code>} `C' or `F'.
-
-
-@item 7.5.7 I/O control@*
-To achieve compatibility of text files written with CHILL i/o with
-the standard representation of text on the underlying operating system
-the interpretation of the i/o control clause of the format
-deviates from Z.200. The following table shows the i/o codes together
-with the control characters written before and after the text record,
-to achieve the indicated function:
-@table @samp
-@item /
-Write next record (record, line feed)
-
-@item +
-Write record on next page (form feed, record, line feed)
-
-@item -
-Write record on current line (record, carriage return)
-
-@item ?
-Write record as a prompt (carriage return, record)
-
-@item !
-Emit record (record).
-
-@item =
-Force new page for the next line: The control character written before
-the next record will be form feed, irrespective of the i/o control used for
-transferring the record.
-@end table
-
-When reading a text file containing control characters other than line feed,
-these characters have to be reckoned with by the format used to read the
-text records.
-
-
-
-
-@item 11.2.2 Regionality@*
-Regionality is not implemented at all, so there is no difference in the
-generated code when REGION is substituted by MODULE in a GNUCHILL
-compilation unit.
-
-@item 11.5 Signal definition statement@*
-The @i{<signal definition statement>} may only occur at module level.
-
-@item 12.3 Case Selection@*
-The syntax of @i{<case label specification>} is changed to:
-
-@example
-@i{<case label specification> ::=}
-@example
-@i{( <case label> @{, <case label> @} * )}
-@end example
-
-@i{<case label> ::=}
-@example
- @i{<discrete literal expression>}
-| @i{<literal range>}
-| @i{<discrete mode name>}
-| @b{ELSE}
-@end example
-@end example
-
-@end itemize
-
-@node Directives
-@chapter Compiler Directives
-
-@itemize @bullet
-
-@item ALL_STATIC_ON, ALL_STATIC_OFF@*
-These directives control where procedure local variables are
-allocated. ALL_STATIC_ON turns allocation of procedure local variables
-in the data space ON, regardless of the keyword STATIC being used or not.
-ALL_STATIC_OFF places procedure local variables in the stack space.
-The default is ALL_STATIC_OFF.
-
-@item RANGE_ON, RANGE_OFF@*
-Turns generation of rangecheck code ON and OFF.
-
-@item USE_SEIZE_FILE <character string literal>@*
-Specify the filename (as a character string literal) where
-subsequent SEIZE statements are related to. This directive
-and the subsequent SEIZEs are written
-to a possibly generated grant file for this module.
-
-@example
-<> USE_SEIZE_FILE "foo.grt" <>
-SEIZE bar;
-@end example
-
-@item USE_SEIZE_FILE_RESTRICTED "filename"@*
-Same as USE_SEIZE_FILE. The difference is that this directive
-and subsequent SEIZEs are *not* written to a possibly generated
-grant file.
-
-@item PROCESS_TYPE = <integer expression>@*
-Set start value for all PROCESS delclarations. This value automatically
-gets incremented after each PROCESS declaration and may be changed with
-a new PROCESS_TYPE compiler directive.
-
-@item SIGNAL_CODE = <integer expression>@*
-Set start value for all SIGNAL definitions. This value automatically
-gets incremented after each SIGNAL definition and may be changed with a
-new SIGNAL_CODE compiler directive.
-
-@item SEND_SIGNAL_DEFAULT_PRIORITY = <integer expression>@*
-Set default priority for send signal action.
-
-@item SEND_BUFFER_DEFAULT_PRIORITY = <integer expression>@*
-Set default priority for send buffer action.
-
-Note: Every <integer expression> in the above mentioned compiler
-directives may also be specified by a SYNONYM of an integer type.
-
-@example
-SYN first_signal_code = 10;
-<> SIGNAL_CODE = first_signal_code <>
-SIGNAL s1;
-@end example
-
-@end itemize
-
-@node References
-@chapter Language Definition References
-
-@itemize @bullet
-@item CCITT High Level Language (CHILL) Recommendation Z.200
- ISO/IEC 9496, Geneva 1989 ISBN 92-61-03801-8
-
-@item An Analytic Description of CHILL, the CCITT high-level
- language, Branquart, Louis & Wodon, Springer-Verlag 1981
- ISBN 3-540-11196-4
-
-@item CHILL User's Manual
- CCITT, Geneva 1986 ISBN 92-61-02601-X
-
-@item Introduction to CHILL
- CCITT, Geneva 1983 ISBN 92-61-017771-1
-
-@item CHILL CCITT High Level Language
- Proceedings of the 5th CHILL Conference
- North-Holland, 1991 ISBN 0 444 88904 3
-
-@item Introduction to the CHILL programming Language
- TELEBRAS, Campinas, Brazil 1990
-
-@end itemize
-
-Z.200 is mostly a language-lawyer's document, but more readable
-than most. The User's Guide is more readable by far, but doesn't
-cover the whole language. Our copies of these documents came through
-Global Engineering Documents, in Irvine, CA, USA. (714)261-1455.
-
-@contents
-@bye