Lock Definition {R}←{X}⎕LOCK Y

Y must be a simple character scalar, or vector which is taken to be the name of a defined function or operator in the active workspace. ⎕LOCK does not apply to dfns or derived functions.

The active referent to the name in the workspace is locked. Stop, trace and monitor settings, established by the ⎕STOP, ⎕TRACE and ⎕MONITOR functions, are cancelled.

The optional left argument X specifies to what extent the function code is hidden. X can be 0, 1, 2, or 3 (the default) with the following meaning:

  • 0: The argument is well-formed, but could not be locked (for example, it is a dfn).
  • 1: The object may not be displayed and you may not obtain its character form using ⎕CR, ⎕VR or ⎕NR.
  • 2: If an error or exception occurs that would normally cause a suspension of execution within the locked function or operator, the state indicator is cut back to the statement that called it and the suspension is triggered there instead.
  • 3: Both 1 and 2 apply. You can neither display the locked object nor suspend execution within it.

Locks are additive, so that

      1 ⎕LOCK'FOO'  2 ⎕LOCK'FOO'     

is equivalent to:

      3 ⎕LOCK'FOO' 

The shy result R is the lock state (1,2 or 3) of Y.

A DOMAIN ERROR is reported if Y is ill-formed.

Examples

      ⎕FX'r←foo' 'r←10'
      ⎕NR'foo'  
  rfoo r10
      ⎕NR'foo'
2
      ⎕LOCK'foo'
      ⎕NR'foo'
0