The display of
">I>", // TRACE_PREFIX_INVOCATION
"<I<", // TRACE_PREFIX_INVOCATION_EXIT
is activated by
trace A
trace I
trace L
trace R
All these trace instructions set the flag TraceSetting::traceLabels (see code
review below).
It's only when the trace label is global to the package (::option) that the
invocation entry is traced.
If you activate a trace label from inside a routine or method then the
invocation entry is not traced.
To make everybody happy, we could retro-trace the invocation entry if not yet
traced.
That would be done when executing a trace instruction which sets the flag
TraceSetting::traceLabels.
(did not check the feasibility but seems feasible...)
That's useful when needing only a local trace in a few methods, instead of a
full trace at package level.
I have some methods where I do that:
::method myMethod
use strict arg <some arguments>, trace=.false
if trace then .traceOutput~say(" >I> Method .myClass~myMethod")
if trace then trace i
...
If we implement the retro-trace then
- I can remove the display of >I> from my code.
- We retrieve the symmetry advocated by Josep Maria.
To have a consistent trace, the retro-trace should be activated only if the
trace instruction is the first instruction (or the second if the first
instruction is an expose).
Code review, search for:
tracingLabels
traceLabels
traceEntryOrExit
> On 18.05.2024 16:57, Josep Maria Blasco wrote:
>> The new multitasking tracing features introduce a new form of trace output
>> with a "<I<" prefix. The documentation for this particular form of output
>> (rexxref 2.29.5. *CHG* The Format of Trace Output, pp. 84--5) says
>>
>> <I< *NEW*
>> Identifies an exit (return) from an invocation of a routine or method. This
>> trace entry will only appear if tracing is enabled using the ::OPTIONS
>> directive using TRACE A, TRACE R, TRACE I or TRACE L.
>>
>> Now please consider:
>>
>> Call P
>>
>> ::Routine P
>>
>> Trace ?a
>>
>>
>> This produces a single line of tracing:
>>
>>
>>
>> <I< Routine "P" in package "D:\Dropbox\parser\test.rex".
>>
>>
>>
>> But (obviously) there is no OPTIONS directive.
>>
>>
>>
>> This can be either considered as an interpreter bug, or as a documentation
>> bug.
>>
>>
>>
>> A) As an interpreter bug, "<I<" tracing should be suppressed when only
>> "Trace a" is active, but no "::OPTIONS TRACE" is in effect.
>>
>>
>>
>> B) As a documentation bug, the documentation should be amended to indicate
>> that "Trace a" does also trigger this form of tracing.
>>
>>
_______________________________________________
Oorexx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/oorexx-devel