Navigation: Language Reference > 2 - Program Source Code Format > Compiler Directives >====== COMPILE (specify source to compile) ====== | ![]() ![]() ![]() |
COMPILE(terminator [,expression])
COMPILE | Specifies a block of source code lines to be included in the compilation. |
terminator | A string constant that marks the last line of a block of source code. |
expression | An expression allowing conditional execution of the COMPILE. The expression is an EQUATE whose value is zero or one, EQUATE = integer, or any of the other supported comparison operators. |
The COMPILE directive specifies a block of source code lines to be included in the compilation. The included block begins with the COMPILE directive and ends with the line that contains the same string constant as the terminator. The entire terminating line is included in the COMPILE block.
The optional expression parameter permits conditional COMPILE. The form of the expression is fixed. It is the label of an EQUATE statement, or a Conditional Switch set in the Project System, and may be followed by an equal sign = or conditional operator and an integer constant.
The following conditional operators are now supported:
Expressions may be one of the following forms:
<;equate> | ||
<;equate> | = | <;integer constant> |
<;equate> | <;> | <;integer constant> |
<;equate> | > | <;integer constant> |
<;equate> | <; | <;integer constant> |
<;equate> | >= | <;integer constant> |
<;equate> | <;= | <;integer constant> |
The code between COMPILE and the terminator is compiled only if the expression is true. If the expression contains an EQUATE that has not yet been defined, then the referenced EQUATE is assumed to be zero (0).
Although the expression is not required, COMPILE without an expression parameter is not necessary because all source code is compiled unless explicitly omitted. COMPILE and OMIT are opposites.
Nested OMIT/COMPILE
Every source/include file can have nested OMIT/COMPILE blocks with a maximum nesting equal to 8 with a condition that when evaluated does not omit source, plus one additional
OMIT/COMPILE with a condition evaluated to omit source code.
Example:
OMIT('*',_WIDTH32_) !OMIT only if application is 32-bit SIGNED EQUATE(SHORT) UNSIGNED EQUATE(USHORT) *
COMPILE('*',_WIDTH32_) !COMPILE only if application is 32-bit SIGNED EQUATE(LONG) UNSIGNED EQUATE(ULONG) *
COMPILE('EndOfFile',OnceOnly = 0) !COMPILE only the first time encountered because the
OnceOnly EQUATE(1) ! OnceOnly EQUATE is defined after the COMPILE that
! references it, so a second pass during the same
! compilation will not re-compile the code
Demo EQUATE(1) !Specify the Demo EQUATE value
CODE
COMPILE('EndDemoChk',Demo = 1) !COMPILE only if Demo equate is turned on
DO DemoCheck !Check for demo limits passed
! EndDemoChk !End of conditional COMPILE code
! EndOfFile
!The following example below shows how OMIT and COMPILE can be nested
COMPILE ('32bit',_width32_) !outer COMPILE
COMPILE ('*debug*',_debug_)
DEBUGGER::BUTTONLIST Equate('&Continue|&Halt|&Debug')
!end- COMPILE ('*debug*',_debug_)
OMIT ('*debug*',_debug_)
DEBUGGER::BUTTONLIST Equate('&Continue|&Halt')
!end- OMIT ('*debug*',_debug_)
!end- COMPILE ('32bit',_width32_) !end outer COMPILE
OMIT ('32bit',_width32_)
DEBUGGER::BUTTONLIST Equate('&Continue|&Halt')
!end- OMIT ('32bit',_width32_)
The compiler reads and parses source/include files by blocks. If the end of an OMIT/COMPILE block (terminator string) is found in the current block, the compiler either with skip the text up to terminator or will continue to parse the file - depending on whether you are using OMIT or COMPILE and what condition. If the terminator string is found within the current block and parsing is continuing, nested OMIT/COMPILE statements are allowed. If the terminator string is not found, nested OMIT/COMPILE statement in this block is not allowed.
In summary, nesting of OMIT/COMPILE statements is dependent on the current compiler block. Use of conditions in OMIT/COMPILE statements and possibility to define complex conditions as EQUATEs are allowed to avoid excessive nesting of OMIT/COMPILE statements.
See Also: