macro.catchAbort

From RPTools Wiki
Revision as of 12:22, 10 March 2019 by Naciron (talk | contribs) (new macro.catchAbort to catch an abort during macro execution)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Introduced in version 1.5.0. The variable macro.catchAbort can be used to make sure that the overall macro execution is not aborted if a called macro uses the abort() function. Whereever you set macro.catchAbort to 1 any subsequent call to some macro using abort() will not abort the current macro. So the abort is kind of catched and the macro will proceed with execution.

The variable macro.catchAbort must be in the variable scope where the abort should be catched. It is not a general flag to turn off abort behaviour, just temporary in the macro or variable scope where it's set.

Usage

Set this variable to 0 (default abort behaviour) or 1 (catch aborts).

[h: macro.catchAbort = 1]
[h: macro.catchAbort = 0]

Examples

When a macro on is called by another macro, the called macro may use the abort() to cancel execution. Usually all macro execution would stop, so the calling macro would not proceed. We can now override that default behaviour by catching the abort.

Default behaviour

The macro below will not have any output cause the default behaviour is that any call to abort will stop the overall macro execution. Whatever code is defined after the call to abort is not executed.

Default abort Macro
[h: resultText = "defaultValue"]
[h: resultText = abort(0)]
[r: resultText]

Catch the abort

The macro below will output "defaultValue" cause we activate catching the abort with macro.catchAbort set to 1 . The example shows how to set a default value for any return value of a function/macro that has a abort call in it. Optionally it deactivates the catching of later aborts again with macro.catchAbort set to 0. You don't have to do this mostly, cause each macro will have it's own variable scope anyway, so setting it to 1 will not influence catching in other macros.

Catching abort
[h: macro.catchAbort = 1]
[h: resultText = "defaultValue"]
[h: resultText = abort(0)]
[r: resultText]
[h: macro.catchAbort = 0]

Catch the abort with 2 macros

Sames as in the above example the calling macro below will output "defaultValue" cause we activate catching the abort (in anything that this macro will call afterwards) with macro.catchAbort set to 1 .

Called macro using an abort as function doSomething() Calling macro catching an abort
[h: "this macro will do something and then abort"]
[h: "... doing something"]
[h: abort(0)]
[h: macro.catchAbort= 1]
[h: resultText = "defaultValue"]
[h: resultText = doSomething()]
[r: resultText]
[h: macro.catchAbort= 0]

See also

abort()

Version changes

  • 1.5.0 - introduced macro.abortCatch