NAME
        pragma

DESCRIPTION
        The preprocessor directive #pragma can be used to select
        several compilation options. Multiple options can be selected
        in one #pragma directive by separating them with commas.

        no_clone: The blueprint object can't be cloned.
        no_inherit: The program can't be inherited.
        no_shadow: The program can't be shadowed (similar to declaring
                all functions as 'nomask').

        init_variables: Clone variables are initialized by __INIT().
        share_variables: Clone variables are initialized from the
                blueprint.

        weak_types: no type checking (this is the default).
        strict_types: all functions must be declared with argument
                prototypes, and the return values of call_other() must
                be casted.
        strong_types: all functions must be declared with complete
                types of return value and parameters.
        save_types: the declaration data is kept after compilation and
                checked at runtime. This is important for type-safe
                inheritance.
        no_bytes_type: removes the keyword 'bytes', also 'string' then
                denotes the type <string|bytes>.
        bytes_type: reactivates the keyword 'bytes' and distinguishes
                between the 'bytes' and 'string' type.

        rtt_checks: runtime checks during execution of this program will be
                enabled. The interpreter will check for correct datatypes in
                the following circumstances:
                  - arguments on function calls,
                  - return values of functions,
                  - assignment to variables,
                  - restoration of values to variables or struct members.
                Don't confuse this with strong/strict_types, they only
                check at compile time.
                strong_types/strict_types is seriously recommended.
                This pragma implicitly enables save_types as well.
        warn_rtt_checks: runtime checks are enabled, just like rtt_checks,
                but errors will be shown as warnings only.
        no_rtt_checks: disable runtime type checks for this program (default).

        pedantic: Certain warnings are treated as errors:
                  - failure to pass enough arguments to simul efuns
                  - type casts with no effect
                  - inconsistent declarations
                  - inconsistent overloads
                  - double inherits
        sloppy: Turns off pedantic (the default).

        range_check: Use of questionable ranges (ranges of negative sizes,
                or with bounds beyond the array's size) cause a runtime
                warning.
        no_range_check: Turns off range_check (the default).

        warn_deprecated: Use of deprecated efuns or indexing operations
                causes the compiler to issue a warning (the default).
        no_warn_deprecated: Turns off warn_deprecated.

        warn_empty_casts: A cast of a value to its own type generates
                a warning. Also casting a value of mixed/unknown type or
                casting to mixed will generate a warning (the default).
        no_warn_empty_casts: Turns off warn_empty_casts.

        warn_missing_return: Warn if a value-returning function is missing
                a return statement (the default). If possible, the driver
                will try to detect this at compile time; otherwise a runtime
                warning will be generated when the function is executed.
                The check applies only to functions with a declared return
                type other than 'void'.
        no_warn_missing_return: Turn off warn_missing_return.

        warn_function_inconsistent: If an inherited function is
                overloaded with inconsistent return types or arguments,
                a warning is generated; or if pragma_pedantic is in effect,
                an error. By default this is active.
        no_warn_function_inconsistent: An inherited function can
                be overloaded with inconsistent return types or arguments,
                as long as pragma_pedantic is not in effect.

                This pragma is meant to easen the adaption of legacy
                mudlib code - in general one should fix the warnings,
                not turn them off.

        When an object is compiled with type testing (#pragma
        strict_types), all types are saved of the arguments for that
        function during compilation.  If the #pragma save_types is
        specified, then the types are saved even after compilation, to
        be used when the object is inherited.

        The following two pragmas are available if the driver was
        compiled with DEBUG and TRACE_CODE options:

        set_code_window: Sets an offset to the current program writing
                position. Use this BEFORE a piece of code where you
                want to check to what bytecodes it is compiled.
        show_code_window: shows some bytes starting at or near the
                last point set_code_window was called.

EXAMPLES
        #pragma strict_types
        #pragma no_clone, no_inherit

HISTORY
        LDMud 3.2.7 added local_scopes, no_local_scopes, no_clone
        and no_inherit.
        LDMud 3.2.8 added weak_types, pedantic and sloppy.
        LDMud 3.2.9 allowed to specify multiple pragmas in one directive.
        LDMud 3.2.9 added (no_)warn_deprecated.
        LDMud 3.2.10 added (no_)warn_empty_casts.
        Starting with LDMud 3.2.10, #pragma xxx_types in an included file are
          no longer valid only until the end of the file, but remain active
          when processing returns to the including file.
        LDMud 3.2.11 added (no_)warn_function_inconsistent.
        LDMud 3.3.378 added init_variables, share_variables.
        LDMud 3.3.357 added (no_)warn_missing_return.
        LDMud 3.3.646 added (no_)range_check.
        LDMud 3.5.0 removed combine_strings and no_combine_strings.
        LDMud 3.5.0 removed local_scopes and no_local_scopes.
        LDMud 3.5.0 removed verbose_errors (making its behaviour mandatory).
        LDMud 3.5.0 enabled warn_deprecated by default.

SEE ALSO
        inheritance(LPC), initialisation(LPC), objects(C),
        operators(LPC)
