| ;Testname=warning; Arguments=-fbin -omacdef.bin -w+macro-defaults; Files=stdout stderr macdef.bin |
| ;Testname=nonwarning; Arguments=-fbin -omacdef.bin -w-macro-defaults; Files=stdout stderr macdef.bin |
| |
| %MACRO mmac_fix 1 a |
| ; While defined to take one parameter, any invocation will |
| ; see two, due to the default parameter. |
| %warning %0 %1 %2 %3 %4 %5 |
| %ENDMACRO |
| mmac_fix one |
| |
| %MACRO mmac_var 1-2 a,b |
| ; While defined to take one or two parameters, invocations |
| ; will see three, due to the default parameters. |
| %warning %0 %1 %2 %3 %4 %5 |
| %ENDMACRO |
| mmac_var one |
| mmac_var one,two |
| |
| %MACRO mmac_plus 1-2+ a,b |
| ; This does not warn. Although this looks like two default |
| ; parameters, it ends up being only one: the "+" limits it |
| ; to two parameters; if invoked without a second parameter |
| ; the second parameter will be "a,b". |
| %warning %0 %1 %2 %3 %4 %5 |
| ;Check rotating behaviour |
| %ENDMACRO |
| mmac_plus one |
| mmac_plus one,two |
| mmac_plus one,two,three |
| |
| %MACRO mmac_star 1-* a,b |
| ; This does not warn. Because the "*" extends the range of |
| ; parameters to infinity, the "a,b" default parameters can |
| ; not exceed that range. |
| %warning %0 %1 %2 %3 %4 %5 |
| %ENDMACRO |
| mmac_star one |
| mmac_star one,two |
| mmac_star one,two,three |
| |
| %MACRO mmac_rotate 0-* a,b |
| %warning %0 %1 %2 %3 %4 %5 |
| ;%rotate should rotate all parameters |
| %rotate 1 |
| %warning %0 %1 %2 %3 %4 %5 |
| %ENDMACRO |
| mmac_rotate |
| mmac_rotate one |
| mmac_rotate one,two |
| mmac_rotate one,two,three |
| |
| ;Scope / evaluation time test |
| %define I 0 |
| %assign J 0 |
| %xdefine K 0 |
| |
| %MACRO mmac_scope 0 I J K |
| %warning %1 %2 %3 |
| %ENDMACRO |
| |
| %define I 1 |
| %assign J 1 |
| %xdefine K 1 |
| mmac_scope |