SOURCE-PROCEDURE system handle

A handle to the procedure file that contains the original invocation (RUN statement or function invocation) of the current internal procedure or user-defined function.

Syntax

SOURCE-PROCEDURE [ :attribute | :method ]
attribute
An attribute of the SOURCE-PROCEDURE handle.
method
A method of the SOURCE-PROCEDURE handle.

Attributes

The SOURCE-PROCEDURE handle supports all the attributes of the procedure object handle. For a list of these attributes, see the reference entry for the Procedure object handle in this section.

Methods

The SOURCE-PROCEDURE handle supports all the methods of the procedure object handle. For a list of these methods, see the reference entry for the Procedure object handle in this section.

Example

The following scenarios illustrate using SOURCE-PROCEDURE without procedure overriding, with procedure overriding, and with super and non-super RUNs:

Scenario 1: Using SOURCE-PROCEDURE without procedure overriding

The following scenario uses SOURCE-PROCEDURE without procedure overriding:

  1. A and B are handles of procedure files running persistently.
  2. proc1 is an internal procedure that resides in B.
  3. A says "RUN proc1 IN B," which runs B's proc1.

In this scenario:

Scenario 2: Using SOURCE-PROCEDURE with procedure overriding

The following scenario uses SOURCE-PROCEDURE with procedure overriding:

  1. A, B, and C, and X are handles of procedure files running persistently.
  2. B is a super procedure of A, and C is a super procedure of B.
  3. proc1 is an internal procedure different versions of which reside in A, B, and C.
    Note: This is an example of procedure overriding.
  4. X says "RUN proc1 IN A," which runs A's proc1.
  5. A's proc1 says "RUN SUPER," which runs B's proc1.
  6. B's proc1 says "RUN SUPER," which runs C's proc1.

In this scenario:

Scenario 3: With SUPER and non-SUPER RUNs

The following scenario shows how the value of SOURCE-PROCEDURE changes when a non-super RUN occurs:

  1. A, B, and C are handles of procedure files running persistently.
  2. B is a super procedure of A, and C is a super procedure of B.
  3. proc1 is an internal procedure different versions of which reside in A, B, and C.
  4. proc2 is an internal procedure different versions of which reside in A, B, and C.
  5. A says "RUN proc1," which runs A's proc1.
  6. A's proc1 says "RUN SUPER," which runs B's proc1.
  7. B's proc1 says "RUN SUPER," which runs C's proc1.
    Note: At this point, within any proc1 that runs as a result of its original RUN statement, the value of SOURCE-PROCEDURE is A.
  8. C's proc1 says "RUN proc2," which runs C's proc2.
    Note: This is a non-super RUN.

In this scenario:

For a sample program that uses SOURCE-PROCEDURE, see the reference entry for the RUN SUPER statement.

Notes

See also

ADD-SUPER-PROCEDURE( ) method, REMOVE-SUPER-PROCEDURE( ) method, RUN SUPER statement, SUPER function, SUPER-PROCEDURES attribute, TARGET-PROCEDURE system handle