diff options
Diffstat (limited to 'gcc/ch/chill.texi')
-rw-r--r-- | gcc/ch/chill.texi | 1231 |
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 |