<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">FUNNELWEB LISTING FILE
======================


Global Local| Input File
------------+-------------------------------------------------------------------
     1     1| AN03: Test semantics checking of macros.
     2     2| 
     3     3| First define some macros to call.
     4     4| @$@&lt;Zero@&gt;@Z@M@{@}
     5     5| @$@&lt;One@&gt;@(@1@)@Z@M@{@}
     6     6| @$@&lt;Two@&gt;@(@2@)@Z@M@{@}
     7     7| 
     8     8| 1. Test call to undefined macro.
     9     9| @$@&lt;Sloth1@&gt;@Z==@{@&lt;Walrus@&gt;@}
       Error|...................^Call to undefined macro.
    10    10| 
    11    11| 2. Test calls with wrong number of parameters.
    12    12| @$@&lt;Sloth2@&gt;@Z==@{
    13    13| @&lt;Zero@&gt;
    14    14| @&lt;Zero@&gt;@(@)
       Error|.^Call has 1 parameter, but the macro
            |.^definition at line 4 specifies 0 parameters.
            |.^Note: If your call looks like this: @&lt;Macro@&gt;@(@) then you
            |.^should be aware that FunnelWeb treats this as a call with
            |.^a single parameter consisting of the empty string. This
            |.^is a consequence of parameter delimiters @"@" being optional.
    15    15| @&lt;Zero@&gt;@(@,@)
       Error|.^Call has 2 parameters, but the macro
            |.^definition at line 4 specifies 0 parameters.
    16    16| @&lt;One@&gt;
       Error|.^Call has 0 parameters, but the macro
            |.^definition at line 5 specifies 1 parameter.
    17    17| @&lt;One@&gt;@(@)
    18    18| @&lt;One@&gt;@(Walrus@,@)
       Error|.^Call has 2 parameters, but the macro
            |.^definition at line 5 specifies 1 parameter.
    19    19| @&lt;Two@&gt;@(Sloth@)
       Error|.^Call has 1 parameter, but the macro
            |.^definition at line 6 specifies 2 parameters.
    20    20| @}
    21    21| 
    22    22| 3. Test call to file macro.
    23    23| @O@&lt;deleteme.txt@&gt;@{@}
            |.^This file macro is called one or more times.
            |.^Each call has been flagged with an error message.
    24    24| @$@&lt;Teapot@&gt;@Z@{@&lt;deleteme.txt@&gt;@}
       Error|.................^Calls to file macros are not allowed.
            |.................^Reason: It should be possible to comment out a
            |.................^file macro without a big fuss. Calling a file macro
            |.................^just tangles it up in the macro structure,
            |.................^making it more difficult to comment out later.
    25    25| 
    26    26| 4. Test macro never used and has &lt;special&gt;Z.
    27    27| @$@&lt;Elephant@&gt;@Z@{@}
    28    28| 
    29    29| 5. Test macro often used and has &lt;special&gt;M.
    30    30| @$@&lt;Giraffe@&gt;@M@{@}
    31    31| @$@&lt;Use Giraffe@&gt;@Z@{@&lt;Giraffe@&gt;@&lt;Giraffe@&gt;@}
    32    32| 
    33    33| 6. Test macro never used and no &lt;special&gt;Z
    34    34| @$@&lt;Zebra@&gt;@{@}
       Error|.^This macro is never used (and has no @Z).
    35    35| 
    36    36| 7. Test multiply used and no &lt;special&gt;M.
    37    37| @$@&lt;Monkey@&gt;@{@}
       Error|.^This macro is used more than once (and has no @M).
    38    38| @$@&lt;Use Monkey@&gt;@Z@{@&lt;Monkey@&gt;@&lt;Monkey@&gt;@}
    39    39| 
    40    40| 8. Test directly recursive macro.
    41    41| @$@&lt;Who do ya call?@&gt;@{@&lt;Who do ya call?@&gt;@}
       Error|.^This macro has an infinite expansion.
    42    42| 
    43    43| 9. Test indirectly recursive macro.
    44    44| @$@&lt;X@&gt;@M@{@&lt;Y@&gt;@}
       Error|.^This macro has an infinite expansion.
    45    45| @$@&lt;Y@&gt;@{@&lt;X@&gt;@}
       Error|.^This macro has an infinite expansion.
    46    46| 
    47    47| 10. Test callers of recursive macros.
    48    48| @$@&lt;Z@&gt;@Z@{@&lt;X@&gt;@}
       Error|.^This macro has an infinite expansion.
            | &lt;End-Of-File&gt;
------------+-------------------------------------------------------------------

There were 13 Errors.
</pre></body></html>