built-in method

# `permission_error/3`

## Description

    permission_error(Operation, Permission, Culprit)

Throws an permission error. Used when an operation is not allowed. For example, sending a message for a predicate that is not within the scope of the sender. This built-in method is declared private and thus cannot be used as a message to an object. Calling this predicate is equivalent to the following sequence of goals:

    ...,
    context(Context),
    throw(error(permission_error(Operation,Permission,Culprit), Context)).

This allows the user to generate errors in the same format used by the runtime.

Possible values for `Operation` include:

- `access`

- `create`

- `modify`

- `open`

- `input`

- `output`

- `reposition`

- `repeat`

Possible values for `Permission` include:

- `predicate_declaration`

- `protected_predicate`

- `private_predicate`

- `static_predicate`

- `database`

- `object`

- `static_object`

- `static_protocol`

- `static_category`

- `entity_relation`

- `operator`

- `flag`

- `engine`

- `binary_stream`

- `text_stream`

- `source_sink`

- `stream`

- `past_end_of_stream`

The value of `Culprit` is the argument or one of its sub-terms that caused the error.

## Modes and number of proofs

    permission_error(@nonvar, @nonvar, @nonvar) - error

## Errors

When called:
`permission_error(Operation, Permission, Culprit)`

## Examples

    ...,
    \+ writable(File),
    permission_error(modify, file, File).

See also

catch/3, throw/1, context/1, instantiation_error/0, uninstantiation_error/1, type_error/2, domain_error/2, existence_error/2, representation_error/1, evaluation_error/1, resource_error/1, syntax_error/1, system_error/0