OSDN Git Service

* config/alpha/vms.h (INCLUDE_DEFAULTS): Add /gnu/lib/gcc-lib/include.
[pf3gnuchains/gcc-fork.git] / gcc / ch / chill.texi
1 @\input texinfo @c -*-texinfo-*-
2 @setfilename chill.info
3 @settitle Guide to GNU Chill
4
5
6 @ifinfo
7 @format
8 START-INFO-DIR-ENTRY
9 * Chill: (chill).               Chill compiler
10 END-INFO-DIR-ENTRY
11 @end format
12 @end ifinfo
13
14 @titlepage
15 @title GNU Chill
16 @author William Cox, Per Bothner, Wilfried Moser
17 @end titlepage
18 @contents
19
20 @node Top
21 @top
22
23 @menu
24 * Options::               Compiler options
25 * Missing::               Unimplemented parts of the Chill language
26 * Enhancements::          GNU-specific enhancements to the Chill language
27 * Conversions::           Value and location conversions
28 * Separate compilation::  Separate compilation
29 * Differences::           Differences between GNUCHILL and Z.200/1988
30 * Directives::            Implemented Compiler Directives
31 * References::            Language definition references
32 @end menu
33
34 @node Options
35 @chapter Compiler options
36
37 Invoking the compiler:
38
39 The @sc{gnu} CHILL compiler supports several new command line options, and
40 brings a new use to another:
41
42 @table @code
43 @item -lang-chill
44 This option instructs gcc that the following file is a CHILL source file,
45 even though its extension is not the default `.ch'.
46
47 @item -flocal-loop-counter
48 The CHILL compiler makes a separate reach, or scope,
49 for each DO FOR loop.  If @code{-flocal-loop-counter} is
50 specified, the loop counter of value enumeration and location
51 enumeration is automatically declared inside that reach.
52 This is the default behavior, required by Z.200.
53
54 @item -fno-local-loop-counter
55 When this option is specified, the above automatic declaration
56 is not performed, and the user must declare all loop counters 
57 explicitly.
58
59 @item -fignore-case
60 When this option is specified, the compiler ignores case. All 
61 identifiers are converted to lower case. This enables the usage
62 of C runtime libraries.
63
64 @item -fno-ignore-case
65 Ignoring the case of identifiers is turned off.
66
67 @item -fruntime-checking
68 The CHILL compiler normally generates code to check 
69 the validity of expressions assigned to variables or
70 expressions passed as parameters to procedures and processes,
71 if those expressions cannot be checked at compile time.
72 This is the default behavior, required by Z.200.
73 This option allows you to re-enable the default behavior
74 after disabling it with the @code{-fno-runtime-checking}
75 option.
76
77 @item -fno-runtime-checking
78 The CHILL compiler normally generates code to check 
79 the validity of expressions assigned to variables, or
80 expressions passed as parameters to procedures and processes.
81 This option allows you to disable that code generation.
82 This might be done to reduce the size of a program's
83 generated code, or to increase its speed of execution.
84 Compile time range-checking is still performed.
85
86 @item -fgrant-only
87 @itemx -fchill-grant-only
88 This option causes the compiler to stop successfully
89 after creating the grant file specified by the source
90 file (see modular programming in CHILL).  No code is
91 generated, and many categories of errors are not reported.
92
93 @item -fold-string
94 Implement the semantics of Chill 1984 with respect to strings:
95 String indexing yields a slice of length one;  CHAR is similar
96 to CHAR(1) (or CHARS(1)); and BOOL is similar to BIT(1) (or BOOLS(1)).
97
98 @item -fno-old-string
99 Don't implement 1984 Chill string semantics.  This is the default.
100
101 @item -I@var{seize_path}
102 This directive adds the specified seize path to the compiler's
103 list of paths to search for seize files.  When processing a 
104 USE_SEIZE_FILE directive, the compiler normally searches for
105 the specified seize file only in the current directory.  When
106 one or more seize paths are specified, the compiler also 
107 searches in those directories, in the order of their
108 specification on the command line, for the seize file.
109
110 @item -c
111 This C-related switch, which normally prevents gcc from 
112 attempting to link, is *not* yet implemented by the @code{chill} command,
113 but you can use the @code{gcc} command with this flag.
114 @end table
115
116 @node Missing
117 @chapter Implemented and missing parts of the Chill language
118
119 The numbers in parentheses are Z.200(1988) section numbers.
120
121 @itemize @bullet
122 @item The FORBID keyword in a GRANT statement is currently ignored.
123
124 @item A CASE action or expression allows only a single expression
125 in a case selector list (5.3.2, 6.4).
126
127 @item ROW modes are not implemented (3.6.3, 3.13.4).
128
129 @item Due to the absence of ROW modes, DYNAMIC has no meaning in
130 connection with access and text modes.
131
132 @item Array and structure layout (PACK, POS, NOPACK, 
133 STEP keywords) is ignored (3.12.6).
134
135 @item Bit-string slices are not implemented.
136
137 @item The support for synchronization modes and concurrent execution
138 is slightly non-standard.
139
140 @item Exception handling is implemented, but exceptions are not
141 generated in all of the required situations.
142
143 @item Dynamic modes are not implemented (though string slices should work).
144
145 @item Reach-bound initializations are not implemented (4.1.2).
146
147 @end itemize
148
149 @node Enhancements
150 @chapter GNU-specific enhancements to the Chill language
151
152 @itemize @bullet
153 @item Grantfiles.  See @xref{Separate compilation}.
154 @item Precisions.  Multiple integer and real precisions are supported,
155 as well as signed and unsigned variants of the integer modes.
156 @item DESCR built-in. The new built-in function 
157 DESCR ( <descriptor argument> ) returns a pointer to 
158 STRUCT( addr PTR, length ULONG ) where <descriptor argument> can be
159 anything the compiler can handle but at least a location of any mode
160 (except synchronizing modes) and any character string or powerset value.
161 (A temporary location within the current stack frame may be allocated
162 if an expression is used.)
163
164 CHILL does not permit the writing of procedures with parameters of
165 any type. Yet some interfaces---in particular those to system 
166 calls---require
167 the handling of a wide range of modes, e.g. any string mode, any structure
168 mode, or any powerset mode. This could be handled by specifying two
169 parameters (PTR, INT for the length) but this is error-prone (no guarantee
170 the same location is used after in ADDR and LENGTH), and it will not be
171 possible for expressions.
172
173 Caveats: This feature permits the programmer to obtain the address of
174 a literal (if the compiler takes this shortcut---see 1st example below).
175 If hardware features protect constant parts of the program, erronous
176 abuse will be detected.
177
178     Examples:
179        OFFER_HANDLER( descr("dbs"), ->dbs);
180
181        SYNMODE m_els = SET( ela, elb, elc );
182        SYNMODE m_elsel = POWERSET m_els;
183        DCL user_buf STRUCT( a mx, b my, c mz);
184        DCL select POWERSET m_elsel;
185
186        select := m_elsel[LOWER(m_els) : UPPER(m_els)];
187
188        GET_RECORD( relation, recno, descr(user_buf), descr(select) );
189
190        PUT_RECORD( relation, recno, descr(user_buf.b), descr(m_elsel[elb]) );
191
192 @item LENGTH built-in on left-hand-side.       The LENGTH built-in may be
193 used on the left-hand-side of an assignment, where its argument is a VARYING
194 character string.
195 @end itemize
196
197 @node Conversions
198 @chapter Value and location conversions
199
200 Value and location conversions are highly dependent on the target machine.
201 They are also very loosely specified in the 1988 standard.
202 (The 1992 standard seems an improvement.)
203
204 The GNU Chill compiler interprets @code{@var{mode}(@var{exp})} as follows:
205
206 @itemize @bullet
207 @item
208 If @var{exp} is a referable location,
209 and the size of (the mode of) @var{exp} is the same as the size of @var{mode},
210 a location conversion is used.
211 It is implemented exactly as:  @code{(@var{refmode}(-> @var{exp}))->},
212 where @var{refmode} is a synmode for @code{REF @var{mode}}.
213
214 The programmer is responsible for making sure that alignment
215 restrictions on machine addresses are not violated.
216
217 If both @var{mode} and the mode of @var{exp} are discrete modes,
218 alignment should not be a problem, and we get the same conversion
219 as a standard value conversion.
220
221 @item
222 If @var{exp} is a constant,
223 and the size of (the mode of) @var{exp} is the same as the size of @var{mode},
224 then a value conversion is performed.  This conversion is done
225 at compile time, and it has not been implemented for all types.
226 Specifically, converting to or from a floating-point type is not implemented.
227
228 @item
229 If both @var{mode} and the mode of @var{exp} are discrete modes,
230 then a value conversion is performed, as described in Z.200.
231
232 @item
233 If both @var{mode} and the mode of @var{exp} are reference modes,
234 then a value conversion is allowed.
235 The same is true is one mode is a reference mode, and the other
236 is an integral mode of the same size.
237
238 @end itemize
239
240 @node Separate compilation
241 @chapter Separate compilation
242
243 The GNU CHILL compiler supports modular programming.  It
244 allows the user to control the visibility of variables
245 and modes, outside of a MODULE, by the use of GRANT
246 and SEIZE directives.  Any location or mode may be made
247 visible to another MODULE by GRANTing it in the MODULE
248 where it is defined, and SEIZEing it in another MODULE
249 which needs to refer to it.
250
251 When variables are GRANTed in one or more modules of a
252 CHILL source file, the compiler outputs a grant file,
253 with the original source file name as the base name,
254 and the extension `.grt'.  All of the variables and modes
255 defined in the source file are written to the grant file,
256 together with any use_seize_file directives, and the
257 GRANT directives.  A grant file is created for every such
258 source file, except if an identical grant file already 
259 exists.  This prevents unnecessary makefile activity.
260
261 The referencing source file must:
262
263 @enumerate
264 @item specify the grant file in a use_seize_file directive, and
265 @item SEIZE each variable or mode definition that it needs.
266 @end enumerate
267
268 An attempt to SEIZE a variable or mode which is not
269 GRANTed in some seize file is an error.
270
271 An attempt to refer to a variable which is defined in
272 some seize file, but not explicitly granted, is an
273 error.
274
275 An attempt to GRANT a variable or mode which is not
276 defined in the current MODULE is an error.
277
278 Note that the GNU CHILL compiler will *not* write out a
279 grant file if:
280
281 @itemize @bullet
282 @item there are no GRANT directives in the source file, or
283 @item the entire grant file already exists, and is
284      identical to the file which the compiler has just built.
285 (This latter ``feature'' may be removed at some point.)
286 @end itemize
287
288 Otherwise, a grant file is an automatic, unsuppressable
289 result of a successful CHILL compilation.
290
291 A future release will also support using remote spec modules
292 in a similar (but more Blue Book-conforming) manner.
293
294 @node Differences
295 @chapter Differences to Z.200/1988
296
297 This chapter lists the differences and extensions between GNUCHILL 
298 and the CCITT recommendation Z.200 in its 1988 version (reffered to
299 as Z.200/1988).
300
301 @itemize @bullet
302
303 @item 2.2 Vocabulary@*
304 The definition of @i{<simple name string>} is changed to:
305
306 @example
307 @i{<simple name string> ::=}
308 @example
309 @i{@{<letter> | _ @} @{ <letter> | <digit | _ @}}
310 @end example
311 @end example
312
313 @item 2.6 Compiler Directives@*
314 Only one directive is allowed between the compiler directive delimiters
315 `<>' and `<>' or the end-of-line, i.e.
316 @example
317 <> USE_SEIZE_FILE "foo.grt" <>
318 <> ALL_STATIC_OFF
319 @end example
320
321 @item 3.3 Modes and Classes@*
322 The syntax of @i{<mode>} is changed to:
323
324 @example
325 @i{<mode> ::=}
326 @example
327   [@b{READ}] @i{<non-composite-mode>}
328 | [@b{READ}] @i{composite-mode>}
329 @end example
330
331 @i{<non-composite-mode> ::=}
332 @example
333   @i{<discrete mode>}
334 | @i{<real modes>}
335 | @i{<powerset modes>}
336 | @i{<reference mode>}
337 | @i{<procedure mode>}
338 | @i{<instance mode>}
339 | @i{<synchronization mode>}
340 | @i{<timing mode>}
341 @end example
342 @end example
343
344 @item 3.4 Discrete Modes@*
345 The list of discrete modes is enhanced by the following modes:
346
347 @example
348 BYTE         8-bit signed integer
349 UBYTE        8-bit unsigned integer
350 UINT         16-bit unsigned integer
351 LONG         32-bit signed integer
352 ULONG        32-bit unsigned integer
353 @end example
354
355 @strong{Please note} that INT is implemented as 16-bit signed integer.
356
357 @item 3.4.6 Range Modes@*
358 The mode BIN(n) is not implemented. Using INT(0 : 2 ** n - 1) instead of
359 BIN(n) makes this mode unneccessary.
360
361 @item 3.X Real Modes@*
362 Note: This is an extension to Z.200/1988, however, it is defined in
363 Z.200/1992.
364
365 @b{syntax:}
366
367 @example
368 @i{<real mode> ::=}
369 @example
370 @i{<floating point mode>}
371 @end example
372 @end example
373
374 @b{semantics:}
375
376 @example
377 A real mode specifies a set of numerical values which approximate a
378 contiguous range of real numbers.
379 @end example
380
381 @item 3.X.1 Floating point modes@*
382
383 @b{syntax:}
384
385 @example
386 @i{<floating point mode> ::=}
387 @example
388 @i{<floating point mode name}
389 @end example
390 @end example
391
392 @b{predefined names:}
393
394 The names @i{REAL} and @i{LONG_REAL} are predefined as @b{floating
395 point mode} names.
396
397 @b{semantics:}
398
399 A floating point mode defines a set of numeric approximations to a 
400 range of real values, together with their minimum relative accuracy, 
401 between implementation defined bounds, over which the usual ordering 
402 and arithmetic operations are defined. This set contains only the 
403 values which can be represented by the implementation.
404
405 @b{examples:}
406
407 @example
408 @i{REAL}
409 @i{LONG_REAL}
410 @end example
411
412 @item 3.6 Reference Modes@*
413 Row modes are not implemeted at all.
414
415 @item 3.7 Procedure Mode@*
416 The syntax for procedure modes is changed to:
417
418 @example
419 @i{<procedure mode> ::=}
420 @example
421   @b{PROC} @i{([<parameter list>]) [ <result spec> ]}
422   @i{[}@b{EXCEPTIONS}@i{(<exception list>)] [}@b{RECURSIVE}@i{]}
423 | @i{<procedure mode name>}
424 @end example
425
426 @i{<parameter list> ::=}
427 @example
428 @i{<parameter spec> @{, <parameter spec> @} *}
429 @end example
430
431 @i{<parameter spec> ::=}
432 @example
433 @i{<mode> [ <parameter attribute> ]}
434 @end example
435
436 @i{<parameter attribute> ::=}
437 @example
438 @b{IN} | @b{OUT} | @b{INOUT} | @b{LOC}
439 @end example
440
441 @i{<result spec> ::=}
442 @example
443 @b{RETURNS} @i{( <mode> [}@b{LOC}@i{])}
444 @end example
445
446 @i{<exception list> ::=}
447 @example
448 @i{<exception name> @{, <exception name> @} *}
449 @end example
450 @end example
451
452
453 @item 3.10 Input-Output Modes@*
454 Due to the absence of row modes, DYNAMIC has no meaning in an access
455 or text mode definition.
456
457
458 @item 3.12.2 String Modes@*
459 As @i{<string modes>} were defined differently in Z.200/1984, the syntax
460 of @i{<string mode>} is changed to:
461
462 @example
463 @i{<string mode> ::=}
464 @example
465   @i{<string type> ( <string length> ) [} @b{VARYING} @i{]}
466 | @i{<parametrized string mode>}
467 | @i{<string mode name>}
468 @end example
469
470 @i{<parameterized string mode> ::=}
471 @example
472   @i{<origin string mode name> ( <string length> )}
473 | @i{<parameterized string mode name>}
474 @end example
475
476 @i{<origin string mode name> ::=}
477 @example
478 @i{<string mode name>}
479 @end example
480
481 @i{string type}
482 @example
483   @b{BOOLS}
484 | @b{BIT}
485 | @b{CHARS}
486 | @b{CHAR}
487 @end example
488
489 @i{<string length> ::=}
490 @example
491 @i{<integer literal expression>}
492 @end example
493 @end example
494
495 @b{VARYING} is not implemented for @i{<string type>} @b{BIT}
496 and @b{BOOL}.
497
498 @item 3.11.1 Duration Modes@*
499 The predefined mode @i{DURATION} is implemented as a NEWMODE ULONG and
500 holds the duration value in miliseconds. This gives a maximum duration
501 of
502
503 @example
504 MILLISECS (UPPER (ULONG)),
505 SECS (4294967),
506 MINUTES (71582),
507 HOURS (1193), and
508 DAYS (49).
509 @end example
510
511 @item 3.11.2 Absolute Time Modes@*
512 The predefined mode @i{TIME} is implemented as a NEWMODE ULONG and
513 holds the absolute time in seconds since Jan. 1st, 1970. This is
514 equivalent to the mode `time_t' defined on different systems.
515
516 @item 3.12.4 Structure Modes@*
517 Variant fields are allowed, but the CASE-construct may define only one
518 tag field (one dimensional CASE). OF course, several variant fields may
519 be specified in one STRUCT mode. The tag field will (both at compile-
520 and runtime) not be interpreted in any way, however, it must be
521 interpreted by a debugger. As a consequence, there are no parameterized 
522 STRUCT modes.
523
524 @item 3.12.5 Layout description for array and structure modes@*
525 STEP and POS is not implemeted at all, therefore the syntax of
526 @i{<element layout} and @i{field layout} is changed to:
527
528 @example
529 @i{<element layout> ::=}
530 @example
531 @b{PACK} | @b{NOPACK}
532 @end example
533
534 @i{<field layout> ::=}
535 @example
536 @b{PACK} | @b{NOPACK}
537 @end example
538 @end example
539
540 @item 3.13.4 Dynamic parameterised structure modes@*
541 Dynamic parameterised structure modes are not implemented.
542
543 @item 4.1.2 Location declaration@*
544 The keyword STATIC is allowed, but has no effect at module level, because
545 all locations declared there are assumed to be `static' by default. Each
546 granted location will become `public'. A `static' declaration inside a
547 block, procedure, etc. places the variable in the data section instead of
548 the stack section.
549
550 @item 4.1.4 Based decleration@*
551 The based declaration was taken from Z.200/1984 and has the following
552 syntax:
553
554 @b{syntax:}
555
556 @example
557 @i{<based declaration> ::=}
558 @example
559 @i{<defining occerrence list> <mode>} @b{BASED}
560 @i{( <free reference location name> )}
561 @end example
562 @end example
563
564 @b{semantics:}
565
566 A based declaration with @i{<free reference location name>} specifies
567 as many access names as are defining occerrences in the @i{defining
568 occurrence list}. Names declared in a base declaration serve as an
569 alternative way accessing a location by dereferencing a reference 
570 value. This reference value is contained in the location specified by 
571 the @i{free reference location name}. This dereferencing operation is 
572 made each time and only when an access is made via a declared @b{based} 
573 name.
574
575 @b{static properties:}
576
577 A defining occurrence in a @i{based declaration} with @i{free reference
578 location name} defines a @b{based} name. The mode attached to a
579 @b{based} name is the @i{mode} specified in the @i{based declaration}. A
580 @b{based} name is @b{referable}.
581
582 @item 4.2.2 Access names@*
583 The syntax of access names is changed to:
584
585 @example
586 @i{<access name> ::=}
587 @example
588   @i{<location name>}
589 | @i{<loc-identity name>}
590 | @i{<based name>}
591 | @i{<location enumeration name>}
592 | @i{<location do-with name>}
593 @end example
594 @end example
595
596 The semantics, static properties and dynamic conditions remain
597 unchanged except that they are enhanced by @i{base name}.
598
599 @item 5.2.4.1 Literals General@*
600 The syntax of @i{<literal>} is change to:
601
602 @example
603 @i{<literal> ::=}
604 @example
605   @i{<integer literal>}
606 | @i{<boolean literal>}
607 | @i{<charater literal>}
608 | @i{<set literal>}
609 | @i{<emptiness literal>}
610 | @i{<character string literal>}
611 | @i{<bit string literal>}
612 | @i{<floating point literal>}
613 @end example
614 @end example
615
616 Note: The @i{<floating point literal>} is an extension to Z.200/1988 and
617 will be described later on.
618
619 @item 5.2.4.2 Integer literals@*
620 The @i{<decimal integer literal>} is changed to:
621
622 @example
623 @i{<decimal integer literal> ::=}
624 @example
625   @i{@{ D | d @} ' @{ <digit> | _ @} +}
626 | @i{<digit> @{ <digit> | _ @} *}
627 @end example
628 @end example
629
630 @item 5.2.4.4 Character literals@*
631 A character literal, e.g. 'M', may serve as a charater string literal of
632 length 1.
633
634 @item 5.2.4.7 Character string literals@*
635 The syntax of a character string literal is:
636
637 @example
638 @i{<character string literal> ::=}
639 @example
640   @i{'@{ <non-reserved character> | <single quote> |}
641   @i{<control sequence> @} * '}
642 | @i{'@{ <non-reserved character> | <double quote> |}
643   @i{<control sequence> @} * '}
644 @end example
645
646 @i{<single quote> ::=}
647 @example
648 @i{''}
649 @end example
650
651 @i{<double quote> ::=}
652 @example
653 @i{""}
654 @end example
655 @end example
656
657 A character string litaral of length 1, enclosed in apostrophes
658 (e.g. 'M') may also serve as a charater literal.
659
660 @item 5.2.4.9 Floating point literal@*
661 Note: This is an extension to Z.200/1988 ans was taken from Z.200/1992.
662
663 @b{syntax:}
664
665 @example
666 @i{<floating point literal> ::=}
667 @example
668   @i{<unsigned floating point literal>}
669 | @i{<signed floating point literal>}
670 @end example
671
672 @i{<unsigned floating point literal> ::=}
673 @example
674   @i{<digit sequence> . [ <digit sequence> ] [ <exponent> ]}
675 | @i{[ <digit sequence> ] . <digit sequence> [ <exponent> ]}
676 @end example
677
678 @i{<signed floating point literal> ::=}
679 @example
680 @i{- <unsigned floating point literal>}
681 @end example
682
683 @i{<digit sequence> ::=}
684 @example
685 @i{<digit> @{ <digit> | _ @} *}
686 @end example
687
688 @i{<exponent> ::=}
689 @example
690   @i{[ E | D | e | d ] <digit sequence>}
691 | @i{[ E | D | e | d ] - <digit sequence>}
692 @end example
693 @end example
694
695 @item 5.2.14 Start Expression@*
696 The START expression is not implemented.
697
698 @item 5.3 Values and Expressions@*
699 The undefined value, denoted by `*', is not implemented.
700
701 @item 5.3.8 Operand-5@*
702 The @i{<string repetition operator>} is defined as:
703
704 @example
705 @i{<string repetition operator> ::=}
706 @example
707 @i{(<integer expression>)}
708 @end example
709 @end example
710
711 @item 6.4 Case Action@*
712 There may be only one case selector specified. The optional range list
713 must not be specified.
714
715 @item 6.5 Do Action@*
716 A Do-Action without control part is not implemented. Grouping of
717 statements can be achieved via BEGIN and END. A location enumeration is not
718 allowed for BIT strings, only for (varying) CHAR strings and ARRAYs.
719
720 The expression list in a DO WITH must consist of locations only.
721
722 @item 6.13 Start Action@*
723 The syntax of the START action is changed to:
724
725 @example
726 @i{<start action> ::=}
727 @example
728 @b{START} @i{<process name> (<copy number> [, <actual parameter list>])}
729 @i{[} @b{SET} @i{<instance location> ]}
730 @end example
731
732 @i{<copy number> ::=}
733 @example
734 @i{<integer expression>}
735 @end example
736 @end example
737
738 @item 6.16 Delay Action@*
739 The optional PRIORITY specification need not be a constant.
740
741 @item 6.17 Delay Case Action@*
742 The optional SET branch and the, also optional, PRIORITY branch must be
743 separated by `;'.
744
745 @item 6.18 Send Action@*
746 The send action must define a destination instance (via the TO branch),
747 since undirected signals are not supported. The optional PRIORITY
748 specification need not be a constant. Additional to the data
749 transported by the signal, there will be a user defined argument.
750
751 The syntax of the @i{<send signal action>} is therefore:
752
753 @example
754 @i{<send signal action> ::=}
755 @example
756 @b{SEND} @i{<signal name> [ ( <value> @{, <value> @} * ) ]}
757 @i{[} @b{WITH} @i{<expression> ]}
758 @b{TO} @i{<instance primitive value> [ <priority> ]}
759 @end example
760 @end example
761
762 The default priority can be specified by the compiler directive
763 SEND_SIGNAL_DEFAULT_PRIORITY. If this also is omitted, the default
764 priority is 0.
765
766 @item 6.20.3 CHILL value built-in calls@*
767 The CHILL value buit-in calls are enhanced by some calls, and other calls
768 will have different arguments as described in Z.200/1988. Any call not
769 mentioned here is the same as described in Z.200/1988.
770
771 @b{syntax:}
772
773 @example
774 @i{CHILL value built-in routine call> ::=}
775 @example
776   @i{ADDR (<location>)}
777 | @i{PRED (<pred succ argument>)}
778 | @i{SUCC (<pred succ argument>)}
779 | @i{ABS (<numeric expression>)}
780 | @i{LENGTH (<length argument>)}
781 | @i{SIN (<floating point expression>)}
782 | @i{COS (<floating point expression>)}
783 | @i{TAN (<floating point expression>)}
784 | @i{ARCSIN (<floating point expression>)}
785 | @i{ARCCOS (<floating point expression>)}
786 | @i{ARCTAN (<floating point expression>)}
787 | @i{EXP (<floating point expression>)}
788 | @i{LN (<floating point expression>)}
789 | @i{LOG (<floating point expression>)}
790 | @i{SQRT (<floating point expression>)}
791 | @i{QUEUE_LENGTH (<buffer location> | <event location>)}
792 | @i{GEN_INST (<integer expression> | <process name> ,}
793                @i{<integer expression>)}
794 | @i{COPY_NUMBER (<instance expression>)}
795 | @i{GEN_PTYE (<process name>)}
796 | @i{PROC_TYPE (<instance expression>)}
797 | @i{GEN_CODE (<process name> | <signal name>)}
798 | @i{DESCR (<location>)}
799 @end example
800
801 @i{<pred succ argument> ::=}
802 @example
803   @i{<discrete expression>}
804 | @i{<bound reference expression>}
805 @end example
806
807 @i{<numeric expression> ::=}
808 @example
809   @i{<integer expression>}
810 | @i{floating point expression>}
811 @end example
812
813 @i{<length argument> ::=}
814 @example
815   @i{<string location>}
816 | @i{<string expression>}
817 | @i{<string mode name>}
818 | @i{<event location>}
819 | @i{<event mode name>}
820 | @i{<buffer location>}
821 | @i{<buffer mode name>}
822 | @i{<text location>}
823 | @i{<text mode name>}
824 @end example
825 @end example
826
827 @b{semantics:}
828
829 @i{ADDR} is derived syntax for -> @i{<location>}.
830
831 @i{PRED} and @i{SUCC} delivers respectively, in case of a @i{discrete
832 expression}, the next lower or higher discrete value of their argument,
833 in case of @i{bound reference expression} these built-in calls deliver a
834 pointer to the previous or next element.
835
836 @i{ABS} is defined on numeric values, i.e. integer values and floating
837 point values, delivering the corresponding absolute value.
838
839 @i{LENGTH} is defined on
840
841 @itemize @bullet
842
843 @item string and text locations and string expressions, delivering the
844 length of them;
845
846 @item event locations, delivering the @b{event length} of the mode of the
847 location;
848
849 @item buffer locations, delivering the @b{buffer length} of the mode of
850 the location;
851
852 @item string mode names, delivering the @b{string length} of the mode;
853
854 @item text mode names, delivering the @b{text length} of the mode;
855
856 @item buffer mode names, delivering the @b{buffer length} of the mode;
857
858 @item event mode names, delivering the @b{event length} of the mode;
859
860 @item Additionally, @i{LENGTH} also may be used on the left hand
861 side of an assignment to set a new length of a @i{varying character
862 string location}. However, to avoid undefined elements in the varying
863 string, the new length may only be less or equal to the current length.
864 Otherwise a @b{RANGEFAIL} exception will be generated.
865 @end itemize
866
867 @i{SIN} delivers the sine of its argument (interpreted in radians).
868
869 @i{COS} delivers the cosine of its argument (interpreted in radians).
870
871 @i{TAN} delivers the tangent of its argument (interpreted in radians).
872
873 @i{ARCSIN} delivers the sin -1 function of its argument.
874
875 @i{ARCCOS} delivers the cos -1 function of its argument.
876
877 @i{ARCTAN} delivers the tan -1 function of its argument.
878
879 @i{EXP} delivers the exponential function, where x is the argument.
880
881 @i{LN} delivers the natural logarithm of its argument.
882
883 @i{LOG} delivers the base 10 logarithm of its argument.
884
885 @i{SQRT} delivers the sqare root of its argument.
886
887 @i{QUEUE_LENGTH} delivers either the number of sending delayed processes
888 plus the number of messages in a buffer queue (if the argument is a
889 @i{buffer location}), or the number of delayed processes (if the
890 argument specifies an @i{event location}) as @i{integer expression}.
891
892 @i{GEN_INST} delivers an @i{instance expression} constructed from the
893 arguments. Both arguments must have the @i{&INT}-derived class.
894
895 @i{COPY_NUMBER} delivers as @i{&INT}-derived class the copy number of an
896 @i{instance location}.
897
898 @i{GEN_PTYPE} delivers as @i{&INT}-derived class the associated number
899 of the @i{process name}.
900
901 @i{PROC_TYPE} delivers as @i{&INT}-derived class the process type of an
902 @i{instance expression}.
903
904 @i{GEN_CODE} delivers as @i{&INT}-derived class the associated number of
905 the @i{process name} or @i{signal name}.
906
907 @i{DESCR} delivers a @i{free reference expression} pointing to a
908 structure with the following layout describing the @i{location} argument.
909
910 @example
911 SYNMODE __tmp_descr = STRUCT (p PTR, l ULONG);
912 @end example
913
914
915 @item 7.4.2 Associating an outside world object@*
916 The syntax of the associate built-in routine call is defined as:
917
918 @example
919 @i{<associate built-in routine call> ::=}
920 @example
921 @i{ASSOCIATE ( <association location>, <string expression>,} [@i{, <string expression>} ] @i{)}
922 @end example
923 @end example
924
925 The ASSOCIATE call has two parameters besides the association location:
926 a pathname and an optional mode string.
927
928 The value of the first string expression must be a pathname according to
929 the rules of the underlying operating system. (Note that a relative pathname 
930 implies a name relative to the working directory of the process.)
931
932 The mode string may contain the value "VARIABLE", which requests
933 an external representation of records consisting of an UINT record
934 length followed by as many bytes of data as indicated by the length field.
935 Such a file with variable records is not indexable.
936
937 A file with variable records can be written using any record mode. If the 
938 record mode is CHARS(n) VARYING, the record length is equal to the actual 
939 length of the value written.  (Different record may have differing lengths.)
940 With all other record modes, all records written using the same access mode
941 will have the same length, but will still be prefixed with the length field.
942 (Note that by re-connecting with different access modes, the external
943 representation may ultimately contain records with differing lengths.)
944
945 A file with variable records can only be read by using a record mode of
946 CHARS(n) VARYING.
947
948
949 @item 7.4.2 Accessing association attributes@*
950 The value of the READABLE and WRITEABLE attributes is determined using 
951 the file status call provided by the operating system.  The result will
952 depend on the device being accessed, or on the file mode.
953
954 The INDEXABLE attribute has the value false for files with variable records,
955 and for files associated with devices not supporting random positioning
956 (character devices, FIFO special files, etc.).
957
958 The variable attribute is true for files associated with the mode sting
959 "VARIABLE", and false otherwise.
960
961
962 @item 7.4.5 Modifying association attributes@*
963 The syntax of the MODIFY built-in routine call is defined as:
964
965 @example
966 @i{<modify built-in call> ::=}
967 @example
968 @i{MODIFY ( <association location>, <string expression> )}
969 @end example
970 @end example
971
972 At present, MODIFY accepts a character string containing a pathname
973 in addition to the association location, which will cause a renaming 
974 of the associated file.
975
976
977 @item 7.4.9 Data transfer operations@*
978 READRECORD will fail (causing READFAIL) if the number of bytes from the
979 current position in the file to the end of the file is greater than zero
980 but less than the size of the record mode, and no data will be transferred.
981 (If the number of bytes is zero, no error occurs and OUTOFFILE will
982 return TRUE.)
983
984 The number of bytes transferred by READRECORD and WRITERECORD is equal to
985 the size of the record mode of the access location. Note that the
986 internal representation of this mode may vary depending on the
987 record mode being packed or not.
988
989
990 @item 7.5 Text Input Output@*
991 Sequential text files will be represented so as to be compatible
992 with the standard representation of texts on the underlying operating
993 system, where control characters are used to delimit text records on files
994 as well as to control the movement of a cursor or printing head on a device.
995
996 For indexed text files, records of a uniform length (i.e. the size of the
997 text record, including the length field) are written.  All i/o codes cause 
998 an i/o transfer without any carriage control  characters being added to the
999 record, which will be expanded with spaces.
1000
1001 An indexed text file is therefore not compatible with the standard
1002 text representation of the underlying operating system. 
1003
1004
1005
1006 @item 7.5.3 Text transfer operations@*
1007 The syntax of @i{<text argument>} is changed to:
1008
1009 @example
1010 @i{<text argument> ::=}
1011 @example
1012   @i{<text location>}
1013 | @i{<predefined text location>}
1014 | @i{<varying string location>}
1015 @end example
1016
1017 @i{<predefined text location> ::=}
1018 @example
1019   STDIN
1020 | STDOUT
1021 | STDERR
1022 @end example
1023 @end example
1024
1025 NOTE: The identifiers STDIN, STDOUT, and STDERR are predefined.
1026 Association and connection with files or devices is done according to
1027 operating system rules.
1028
1029 The effect of using READTEXT or WRITETEXT with a character string location
1030 as a text argument (i.e. the first parameter) where the same location also
1031 appears in the i/o list is undefined.
1032
1033 The current implementation of formatting assumes run-to-completion semantics
1034 of CHILL tasks within an image.
1035
1036
1037
1038 @item 7.5.5 Conversion@*
1039 Due to the implementation of @i{<floating point modes>} the syntax
1040 is changed to:
1041
1042 @example
1043 @i{<conversion clause> ::=}
1044 @example
1045 @i{<conversion code> @{ <conversion qualifier @} *}
1046 @i{[ <clause width> ]}
1047 @end example
1048
1049 @i{<conversion code> ::=}
1050 @example
1051 @i{B} | @i{O} | @i{H} | @i{C} | @i{F}
1052 @end example
1053
1054 @i{<conversion qualifier> ::=}
1055 @example
1056 @i{L} | @i{E} | @i{P<character>}
1057 @end example
1058
1059 @i{<clause width> ::=}
1060 @example
1061   @i{@{ <digit> @} +} | @i{V}
1062 | @i{<real clause width>}
1063 @end example
1064
1065 @i{<real clause width> ::=}
1066 @example
1067 @i{@{ @{ <digit> + | V @} : @{ @{ <digit> @} + | V @}}
1068 @end example
1069 @end example
1070
1071 Note: The @i{<real clause width>} is only valid for @i{<conversion
1072 code>} `C' or `F'.
1073
1074
1075 @item 7.5.7 I/O control@*
1076 To achieve compatibility of text files written with CHILL i/o with
1077 the standard representation of text on the underlying operating system
1078 the interpretation of the i/o control clause of the format 
1079 deviates from Z.200. The following table shows the i/o codes together
1080 with the control characters written before and after the text record, 
1081 to achieve the indicated function:
1082 @table @samp
1083 @item /
1084 Write next record (record, line feed)
1085
1086 @item +
1087 Write record on next page (form feed, record, line feed)
1088
1089 @item -
1090 Write record on current line (record, carriage return)
1091
1092 @item ?
1093 Write record as a prompt (carriage return, record)
1094
1095 @item !
1096 Emit record (record).
1097
1098 @item =
1099 Force new page for the next line: The control character written before
1100 the next record will be form feed, irrespective of the i/o control used for
1101 transferring the record.
1102 @end table
1103
1104 When reading a text file containing control characters other than line feed,
1105 these characters have to be reckoned with by the format used to read the
1106 text records.
1107
1108
1109
1110
1111 @item 11.2.2 Regionality@*
1112 Regionality is not implemented at all, so there is no difference in the
1113 generated code when REGION is substituted by MODULE in a GNUCHILL
1114 compilation unit.
1115
1116 @item 11.5 Signal definition statement@*
1117 The @i{<signal definition statement>} may only occur at module level.
1118
1119 @item 12.3 Case Selection@*
1120 The syntax of @i{<case label specification>} is changed to:
1121
1122 @example
1123 @i{<case label specification> ::=}
1124 @example
1125 @i{( <case label> @{, <case label> @} * )}
1126 @end example
1127
1128 @i{<case label> ::=}
1129 @example
1130   @i{<discrete literal expression>}
1131 | @i{<literal range>}
1132 | @i{<discrete mode name>}
1133 | @b{ELSE}
1134 @end example
1135 @end example
1136
1137 @end itemize
1138
1139 @node Directives
1140 @chapter Compiler Directives
1141
1142 @itemize @bullet
1143
1144 @item ALL_STATIC_ON, ALL_STATIC_OFF@*
1145 These directives control where procedure local variables are
1146 allocated. ALL_STATIC_ON turns allocation of procedure local variables
1147 in the data space ON, regardless of the keyword STATIC being used or not.
1148 ALL_STATIC_OFF places procedure local variables in the stack space.
1149 The default is ALL_STATIC_OFF.
1150
1151 @item RANGE_ON, RANGE_OFF@*
1152 Turns generation of rangecheck code ON and OFF.
1153
1154 @item USE_SEIZE_FILE <character string literal>@*
1155 Specify the filename (as a character string literal) where 
1156 subsequent SEIZE statements are related to. This directive 
1157 and the subsequent SEIZEs are written
1158 to a possibly generated grant file for this module.
1159
1160 @example
1161 <> USE_SEIZE_FILE "foo.grt" <>
1162 SEIZE bar;
1163 @end example
1164
1165 @item USE_SEIZE_FILE_RESTRICTED "filename"@*
1166 Same as USE_SEIZE_FILE. The difference is that this directive
1167 and subsequent SEIZEs are *not* written to a possibly generated
1168 grant file. 
1169
1170 @item PROCESS_TYPE = <integer expression>@*
1171 Set start value for all PROCESS delclarations. This value automatically
1172 gets incremented after each PROCESS declaration and may be changed with
1173 a new PROCESS_TYPE compiler directive.
1174
1175 @item SIGNAL_CODE = <integer expression>@*
1176 Set start value for all SIGNAL definitions. This value automatically
1177 gets incremented after each SIGNAL definition and may be changed with a
1178 new SIGNAL_CODE compiler directive.
1179
1180 @item SEND_SIGNAL_DEFAULT_PRIORITY = <integer expression>@*
1181 Set default priority for send signal action.
1182
1183 @item SEND_BUFFER_DEFAULT_PRIORITY = <integer expression>@*
1184 Set default priority for send buffer action.
1185
1186 Note: Every <integer expression> in the above mentioned compiler
1187 directives may also be specified by a SYNONYM of an integer type.
1188
1189 @example
1190 SYN first_signal_code = 10;
1191 <> SIGNAL_CODE = first_signal_code <>
1192 SIGNAL s1;
1193 @end example
1194
1195 @end itemize
1196
1197 @node References
1198 @chapter Language Definition References
1199
1200 @itemize @bullet
1201 @item   CCITT High Level Language (CHILL) Recommendation Z.200
1202         ISO/IEC 9496, Geneva 1989                ISBN 92-61-03801-8
1203
1204 @item   An Analytic Description of CHILL, the CCITT high-level
1205         language, Branquart, Louis & Wodon, Springer-Verlag 1981
1206                                                  ISBN 3-540-11196-4
1207
1208 @item   CHILL User's Manual
1209         CCITT, Geneva 1986                       ISBN 92-61-02601-X
1210
1211 @item   Introduction to CHILL
1212         CCITT, Geneva 1983                       ISBN 92-61-017771-1
1213
1214 @item   CHILL CCITT High Level Language
1215         Proceedings of the 5th CHILL Conference
1216         North-Holland, 1991                      ISBN 0 444 88904 3
1217
1218 @item   Introduction to the CHILL programming Language
1219         TELEBRAS, Campinas, Brazil 1990
1220
1221 @end itemize
1222
1223 Z.200 is mostly a language-lawyer's document, but more readable
1224 than most.  The User's Guide is more readable by far, but doesn't
1225 cover the whole language.  Our copies of these documents came through
1226 Global Engineering Documents, in Irvine, CA, USA. (714)261-1455.
1227
1228 @bye