Make your own free website on
6.5. The Format of the OPTIONS clause

The format of the OPTIONS clause is very simple, it is followed by
any REXX string expression, which is interpreted as a set of space
separated words. The words are treated strictly in order from left
to right, and each word can change zero or more extension

Each extension has a name. If the word being treated matches that
name, that extension will be turned on. However, if the word being
treated matches the name of an extension but has the prefix NO,
then that extension is turned off. If the word does not match any
extensions, then it is simply ignored, without creating any errors
or raising any conditions.

Example: Extensions changing parsing

An example of the same is the UPPER instruction. In the following
piece of code the same clause is interpreted in two completely
different ways:

     options ‘NOUPPER’
     do i=1 to 2
          if i=2 then options ‘UPPER’
          upper foo bar

In the first iteration of the loop, the clause starting with the
token UPPER will be a command, issuing the string resulting from
evaluating the expression upper foo bar. However, in the second
iteration of the loop, the same clause is interpreted as an UPPER
instruction. Since these two statements has very different syntax,
it seems impossible to handle both in the same program.  Regina
tries to handle this by “allowing” both syntaxes when parsing the
source code, and selecting the right one when interpreting the
statement in question.

Regina’s frequent usage of extensions may slow down execution. To
illustrate how this can happen, consider the OPEN() extra built-in
function. As this is an extension, it might be dynamically
included and excluded from the scope of currently defined
function.  Thus, if the function is used in a loop, it might be in
the scope during the first iteration, but not the second. Thus,
Regina can not cache anything relating to this function, since the
cached information may be outdated later. As a consequence, Regina
must look up the function in the table of functions for each
invocation. To avoid this, you can set the extension CACHEEXT,
which tells Regina to cache info whenever possible, without
regards to whether this may render useless later executions of