Go to the first, previous, next, last section, table of contents.
- Grantfiles. See See section Separate compilation.
- Precisions. Multiple integer and real precisions are supported,
as well as signed and unsigned variants of the integer modes.
- 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]) );
- 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.
Go to the first, previous, next, last section, table of contents.