The following program will raise user conditions and the trap code will display the line number in which the condition got raised.
The little program below demonstrates that SIGL is set to the wrong line number, if the condition gets raised in a routine which contains null clauses (they are not counted, it seems):
call on ANY / intercept anything that is not caught explicitly /
call on user TOO_SMALL / trap the user exception TOO_SMALL /
call on user too_big / trap the user exception TOO_BIG /
call checkAge 10
call checkAge 3
call checkAge 7
ANY : say "in line:" SIGL "exception:" condition("C"); return
parse arg age
say '--> age:' age
if age < 6 then RAISE USER too_small
else if age > 9 then RAISE USER too_big
else SAY '--> --> --> checked o.k.'
/ the following is line # 8 /
RAISE USER something_raised / everything o.k., RAISE'ing for fund ;) /
say "// caught exception 'TOO_BIG' \"
say "// caught exception 'TOO_SMALL' \"