/** @page parse_directives Parse Directives

    @tableofcontents

    %Qore supports the use of parse directives in order to set parsing options, load modules, control warnings, and include other files.

    Parse directives that set parsing options can be used any time parse options have not been locked on a @ref Qore::Program "Program object". They are used most often when it's not possible or desirable to set the parse options in the qore command line.

    The following are the recommended parse directives for %Qore programming (note that %Qore is moving toward establishing @ref new-style "%new-style" as the default syntax; all examples given in the %Qore documentation are given assuming @ref new-style "%new-style"):
    - @ref new-style "%new-style"
    - @ref strict-args "%strict-args"
    - @ref require-types "%require-types"
    - @ref enable-all-warnings "%enable-all-warnings"

    <b>Parse Directives</b>
    |!Directive|!Description
    |@ref allow-bare-refs "%allow-bare-refs"|Prohibits the use of the \c "$" character in variable names, method calls, and object member references. This makes %Qore scripts appear superficially more like C++ or Java programs.<br><br>This parse option is set by default with @ref new-style "%new-style".<br><br>Name resolution is made in the following order when this option is set: local variables, class constants and static class vars (when parsing in class code), global variables, and (non-class) constants.<br><br>Note that @ref implicit_arguments "implicit arguments" are still referenced with the \c "$" character even when this parse option is set; see also @ref require-dollar "%require-dollar" <br><br>Since %Qore 0.8.1
    |@ref allow-debugger "%allow-debugger"|Allows debugging actions that could be insecure such as reading the thread local variable stack<br><br>Since %Qore 0.8.13
    |@ref allow-injection "%allow-injection"|Allows code and dependency injections into the given @ref Qore::Program "Program" object
    |@ref allow-returns "%allow-returns"|Allows the use of the deprecated \c returns keyword<br><br>Since %Qore 0.9.4
    |@ref allow-weak-references "%allow-weak-references"|Allows the use of the @ref weak_assignment_operator "weak assignment operator (:=)"<br><br>Since %Qore 0.8.13
    |@ref append-include-path "%append-include-path"|Appends the given directories to qore's include path; also performs environment variable substitution
    |@ref append-module-path "%append-module-path"|Appends the given directories to qore's module path; also performs environment variable substitution <br><br>Since %Qore 0.8.6
    |@ref assume-global "%assume-global"|Resets the default %Qore behavior of assuming global variable scope when variables are first referenced if no @ref my "my" or @ref our "our" is present; use after @ref assume-local "%assume-local" to reset the default parsing behavior.<br><br>This parse option is also set with @ref old-style "%old-style" <br><br>Since %Qore 0.8.4
    |@ref assume-local "%assume-local"|Assume local variable scope when variables are first referenced if no @ref my "my" or @ref our "our" is present. When used with @ref allow-bare-refs "%allow-bare-refs", local variables without @ref my "my" must be declared with a data type restriction (can be @ref any_type "any").<br><br>This parse option is set by default with @ref new-style "%new-style"; see also @ref assume-global "%assume-global" <br><br>Since %Qore 0.8.1
    |@ref broken-cast "%broken-cast"|Use old pre-0.9.4 broken @ref cast "cast<>" operator handling where @ref nothing would be accepted without an error
    |@ref broken-int-assignments "%broken-int-assignments"|Use old pre-0.8.12 broken @ref int_type "int" and @ref softint_type "softint" runtime handling where type errors were ignored at runtime
    |@ref broken-list-parsing "%broken-list-parsing"|Use old pre-0.8.12 broken list parsing where certain lists without parentheses would be rewritten to make top-level statements like <tt>list l = 1, 2, 3;</tt> valid
    |@ref broken-logic-precedence "%broken-logic-precedence"|Use old pre-0.8.12 precedence of logical and bitwise operators
    |@ref broken-loop-statement "%broken-loop-statement"|Accept @ref break "break" and @ref continue "continue" outside of loops as with pre-0.8.13
    |@ref broken-operators "%broken-operators"|Accept spaces in multi-character operators as with pre-0.8.12
    |@ref broken-range "%broken-range"|Include the upper limit in @ref Qore::range() "range()" and @ref Qore::xrange() "xrange()" as with pre-0.9.5
    |@ref broken-references "%broken-references"|Do not enforce @ref reference_type "reference" and @ref reference_or_nothing_type "*reference" type restrictions as with pre-0.8.13
    |@ref broken-sprintf "%broken-sprintf"|Use pre-0.9 sprintf format handling where no argument is handled differently than @ref nothing
    |@ref broken-varargs "%broken-varargs"|Assume varargs for all @ref abstract "abstract" methods as with pre-1.17
    |@ref correct-cast "%correct-cast"|revert the effect of the @ref broken-cast "%broken-cast" parse option
    |@ref correct-int-assignments "%correct-int-assignments"|revert the effect of the @ref broken-int-assignments "%broken-int-assignments" parse option
    |@ref correct-list-parsing "%correct-list-parsing"|revert the effect of the @ref broken-list-parsing "%broken-list-parsing" parse option
    |@ref correct-logic-precedence "%correct-logic-precedence"|revert the effect of the @ref broken-logic-precedence "%broken-logic-precedence" parse option
    |@ref correct-loop-statement "%correct-loop-statement"|revert the effect of the @ref broken-loop-statement "%broken-loop-statement" parse option
    |@ref correct-operators "%correct-operators"|revert the effect of the @ref broken-operators "%broken-operators" parse option
    |@ref correct-range "%correct-range"|revert the effect of the @ref broken-range "%broken-range" parse option
    |@ref correct-references "%correct-references"|revert the effect of the @ref broken-references "%broken-references" parse option
    |@ref correct-sprintf "%correct-sprintf"|revert the effect of the @ref broken-sprintf "%broken-sprintf" parse option
    |@ref correct-varargs "%correct-varargs"|revert the effect of the @ref broken-varargs "%broken-varargs" parse option
    |@ref define "%define"|Creates and optionally sets a value for a @ref conditional_parsing "parse define" <br><br>Since %Qore 0.8.3
    |@ref disable-all-warnings "%disable-all-warnings"|Turns off all @ref warnings "warnings"
    |@ref disable-warning "%disable-warning" <em>@ref warnings "warning-code"</em>|Disables the named @ref warnings "warning" until @ref enable-warning "%enable-warning" is encountered with the same code or @ref enable-all-warnings "%enable-all-warnings" is encountered
    |@ref else "%else"|Allows for parsing an alternate block when used with the @ref ifdef "%ifdef" or @ref ifndef "%ifndef" parse directives (for @ref conditional_parsing "conditional parsing based on parse defines") <br><br>Since %Qore 0.8.3
    |@ref enable-all-warnings "%enable-all-warnings"|Turns on all @ref warnings "warnings"
    |@ref enable-warning "%enable-warning" <em>@ref warnings "warning-code"</em>|Enables the named @ref warnings "warning"
    |@ref endif "%endif"|Closes a @ref conditional_parsing "conditionally-parsed" block started by the @ref ifdef "%ifdef" or @ref ifndef "%ifndef" parse directives <br><br>Since %Qore 0.8.3
    |@ref endtry "%endtry"|Closes a @ref try-module "%try-module" or @ref try-reexport-module "%try-reexport-module" block <br><br>Since %Qore 0.8.6
    |@ref exec-class "%exec-class" <em>@ref qore_classes "class_name"</em>|Instantiates the named class as the application class; also turns on @ref no-top-level "%no-top-level". If the program is read from stdin or from the command line, an argument must be given specifying the class name. Any top level statements before this directive are silently ignored
    |@ref ifdef "%ifdef"|Opens a @ref conditional_parsing "conditionally-parsed" block; if the given @ref conditional_parsing "parse define" is defined, then the block after the @ref ifdef "%ifdef" is parsed until either an @ref else "%else" or an @ref endif "%endif" <br><br>Since %Qore 0.8.3
    |@ref ifndef "%ifndef"|Opens a @ref conditional_parsing "conditionally-parsed" block; if the given @ref conditional_parsing "parse define" is not defined, then the block after the @ref ifdef "%ifdef" is parsed until either an @ref else "%else" or an @ref endif "%endif" <br><br>Since %Qore 0.8.3
    |@ref include "%include" <em>file_name</em>|Starts parsing \a file_name immediately. Parsing resumes with the current input after \a file_name has been completely parsed
    |@ref lockdown "%lockdown"|Made up of @ref no-external-access "%no-external-access", @ref no-threads "%no-threads", and @ref no-io "%no-io"; equivalent to parse option @ref Qore::PO_LOCKDOWN and the \c --lockdown command line option
    |@ref lock-options "%lock-options"|Prohibits further changes to parse options (equivalent to the <tt>-</tt><tt>-lock-options</tt> command line option)
    |@ref lock-warnings "%lock-warnings"|Prohibits further changes to the warning mask (equivalent to the <tt>-</tt><tt>-lock-warnings</tt> command line option)
    |@ref loose-args "%loose-args"|reverts the effect of the @ref strict-args "%strict-args" parse options
    |@ref loose-types "%loose-types"|reverts the effect of the @ref strict-types "%strict-types" parse options
    |@ref new-style "%new-style"|Sets both @ref allow-bare-refs "%allow-bare-refs" and @ref assume-local "%assume-local". These two options together make programming in %Qore superficially more like programming in C++ or Java programs; use this if you dislike programming with the \c "$" sign, for example; see also @ref old-style "%old-style" <br><br>Since %Qore 0.8.1
    |@ref old-style "%old-style"|Resets default %Qore parsing behavior by setting @ref require-dollar "%require-dollar" and @ref assume-global "%assume-global"; this option is the opposite of @ref new-style "%new-style" <br><br>Since %Qore 0.8.4
    |@ref no-debugging "%no-debugging"|Forbids debugging of the current @ref Qore::Program "Program" object <br><br>Since %Qore 0.8.13
    |@ref no-class-defs "%no-class-defs"|Disallows @ref qore_classes "class definitions"; equivalent to @ref Qore::PO_NO_CLASS_DEFS and the <tt>-</tt><tt>-no-class-defs</tt> command line option
    |@ref no-child-restrictions "%no-child-restrictions"|Allows child program objects to have parse option restrictions that are not a strict subset of the parents'; equivalent to parse option @ref Qore::PO_NO_CHILD_PO_RESTRICTIONS and the <tt>-</tt><tt>-no-child-restrictions</tt> command line option
    |@ref no-constant-defs "%no-constant-defs"|Disallows @ref constants "constant definitions"; equivalent to parse option @ref Qore::PO_NO_CONSTANT_DEFS and the <tt>-</tt><tt>-no-constant-defs</tt> command line option
    |@ref no-database "%no-database"|Disallows access to database functionality (for example the @ref Qore::SQL::Datasource "Datasource class"; equivalent to parse option @ref Qore::PO_NO_DATABASE and the <tt>-</tt><tt>-no-database</tt> command line option
    |@ref no-external-access "%no-external-access"|made up of @ref no-process-control "%no-process-control", @ref no-network "%no-network", @ref no-filesystem "%no-filesystem", @ref no-database "%no-database", @ref no-external-info "%no-external-info", and @ref no-modules "%no-modules"; equivalent to parse option @ref Qore::PO_NO_EXTERNAL_ACCESS and the <tt>-</tt><tt>-no-external-access</tt> command line option
    |@ref no-external-info "%no-external-info"|Disallows any access to functionality that provides external information (see @ref no-external-info "%no-external-info" for a list of features not available with this parse option); equivalent to parse option @ref Qore::PO_NO_EXTERNAL_INFO and the <tt>-</tt><tt>-no-external-info</tt> command line option
    |@ref no-external-process "%no-external-process"|Disallows any access to external processes (see @ref no-external-process "%no-external-process" for a list of features not available with this parse option); equivalent to parse option @ref Qore::PO_NO_EXTERNAL_PROCESS and the <tt>-</tt><tt>-no-external-process</tt> command line option
    |@ref no-filesystem "%no-filesystem"|Disallows access to the local filesystem; equivalent to parse option @ref Qore::PO_NO_FILESYSTEM and the <tt>-</tt><tt>-no-filesystem</tt> command line option
    |@ref no-global-vars "%no-global-vars"|Disallows the use of global variables; equivalent to parse option @ref Qore::PO_NO_GLOBAL_VARS and the <tt>-</tt><tt>-no-global-vars</tt> command line option
    |@ref no-gui "%no-gui"|Disallows functionality that draws graphics to the display; equivalent to parse option @ref Qore::PO_NO_GUI and the <tt>-pno-gui</tt> command line option
    |@ref no-io "%no-io"|Made up of @ref no-gui "%no-gui" \| @ref no-terminal-io "%no-terminal-io" \| @ref no-filesystem "%no-filesystem" \| @ref no-network "%no-network" \| @ref no-database "%no-database"; equivalent to parse option @ref Qore::PO_NO_IO and the \c --no-io command line option
    |@ref no-locale-control "%no-locale-control"|Disallows access to functionality that changes locale information (see %no-locale-control for a list of features not available with this parse option); equivalent to parse option @ref Qore::PO_NO_LOCALE_CONTROL and the <tt>-</tt><tt>-no-locale-control</tt> command line option
    |@ref no-modules "%no-modules"|Disallows loading @ref qore_modules "modules" with the @ref requires "%requires", @ref try-module "%try-module", and @ref try-reexport-module "%try-reexport-module" parse directive or at runtime with load_module(); equivalent to @ref Qore::PO_NO_MODULES and the <tt>-pno-modules</tt> command line option <br><br>Since %Qore 0.8.4
    |@ref no-namespace-defs "%no-namespace-defs"|Disallows new @ref qore_namespaces "namespace definitions"; equivalent to @ref Qore::PO_NO_NAMESPACE_DEFS and the <tt>-</tt><tt>-no-namespace-defs</tt> command line option
    |@ref no-network "%no-network"|Disallows access to the network; equivalent to parse option @ref Qore::PO_NO_NETWORK and the <tt>-</tt><tt>-no-network</tt> command line option
    |@ref no-new "%no-new"|Disallows use of the @ref new "new operator"; equivalent to parse option @ref Qore::PO_NO_NEW and the <tt>-</tt><tt>-no-new</tt> command line option
    |@ref no-process-control "%no-process-control"|Disallows access to functions that would affect the current process (see @ref no-process-control "%no-process-control" for a list of features not available with this parse option); equivalent to parse option @ref Qore::PO_NO_PROCESS_CONTROL and the <tt>-</tt><tt>-no-process-control</tt> command line option
    |@ref no-reflection "%no-reflection"|Disallows access to the reflection API provided by the <a href="../../modules/reflection/html/index.html">reflection</a> module; equivalent to parse option @ref Qore::PO_NO_REFLECTION<br><br>Since %Qore 0.9
    |@ref no-subroutine-defs "%no-subroutine-defs"|Disallows subroutine (function) definitions; equivalent to parse option @ref Qore::PO_NO_SUBROUTINE_DEFS and the <tt>-</tt><tt>-no-subroutine-defs</tt> command line option
    |@ref no-terminal-io "%no-terminal-io"|Disallows access to terminal I/O (see @ref no-terminal-io "%no-terminal-io" for a list of features not available with this parse option); equivalent to parse option @ref Qore::PO_NO_TERMINAL_IO and the <tt>-pno-terminal-io</tt> command line option
    |@ref no-thread-classes "%no-thread-classes"|Disallows access to thread classes (see @ref no-thread-classes "%no-thread-classes" for a list of features not available with this parse option); equivalent to parse option @ref Qore::PO_NO_THREAD_CLASSES and the <tt>-</tt><tt>-no-thread-classes</tt> command line option
    |@ref no-thread-control "%no-thread-control"|Disallows access to thread control operations (see @ref no-thread-control "%no-thread-control" for a list of features not available with this parse option); equivalent to parse option @ref Qore::PO_NO_THREAD_CONTROL and the <tt>-</tt><tt>-no-thread-control</tt> command line option
    |@ref no-thread-info "%no-thread-info"|Disallows any access to functionality that provides threading information (see @ref no-thread-info "%no-thread-info" for a list of features not available with this parse option); equivalent to parse option @ref Qore::PO_NO_THREAD_INFO and the <tt>-</tt><tt>-no-thread-info</tt> command line option
    |@ref no-threads "%no-threads"|Disallows access to all thread control operations and thread classes (equivalent to <tt>-</tt><tt>-no-thread-control</tt> and <tt>-</tt><tt>-no-thread-classes</tt> together); equivalent to parse option @ref Qore::PO_NO_THREADS and the <tt>-</tt><tt>-no-threads</tt> command line option
    |@ref no-top-level "%no-top-level"|Disallows any further top level code; equivalent to parse option @ref Qore::PO_NO_TOP_LEVEL_STATEMENTS and the <tt>-</tt><tt>-no-top-level</tt> command line option
    |@ref no-transient "%no-transient"|Removes the @ref transient keyword for backwards-compatibility; equivalent to parse option @ref Qore::PO_NO_TRANSIENT
    |@ref no-uncontrolled-apis "%no-uncontrolled-apis"|Disallows access to uncontrolled APIs such as external language bindings or direct generic system call APIs that could bypass %Qore's sandboxing controls
    |@ref perl-bool-eval "%perl-bool-eval"|Set to mimic perl's boolean evaluation; this is the default with qore >= 0.8.6; prior to this version, by default qore used strict mathematic boolean evaluation, where any value converted to 0 is @ref False "False" and otherwise it's is @ref True "True". <br><br>As of %Qore 0.8.6+, this parse option is only needed if @ref strict-bool-eval "%strict-bool-eval" is set. <br><br>When this option is set, boolean evaluation follows the same rules as <value>::val(); see also @ref strict-bool-eval "%strict-bool-eval"<br><br>Since %Qore 0.8.6
    |@ref push-parse-options "%push-parse-options"|Stores parse options so that they will be restored when the current file is done parsing; use in include files to ensure parse options are set appropriately for the file being parsed
    |@ref require-dollar "%require-dollar"|Resets the default %Qore behavior where the use of the \c "$" character in variable names, method calls, and object member references is required; use after @ref allow-bare-refs "%allow-bare-refs" to reset the default parsing behavior <br><br>Since %Qore 0.8.4
    |@ref require-our "%require-our"|Requires global variables to be declared with @ref our "our" prior to use (like perl's <tt>use strict vars</tt> pragma); equivalent to parse option @ref Qore::PO_REQUIRE_OUR and the <tt>-</tt><tt>-require-our</tt> command line option
    |@ref require-prototypes "%require-prototypes"|Requires type declarations for all function and method parameters and return types. Variables and object members do not need to have type declarations; equivalent to parse option @ref Qore::PO_REQUIRE_PROTOTYPES and the <tt>-</tt><tt>-require-prototypes</tt> command line option <br><br>Since %Qore 0.8.0
    |@ref require-types "%require-types"|Requires type declarations for all function and method parameters, return types, variables, and object members; equivalent to parse option @ref Qore::PO_REQUIRE_TYPES and the <tt>-</tt><tt>-require-types</tt> command line option; also implies @ref strict-args "%strict-args" <br><br>Since %Qore 0.8.0
    |@ref requires "%requires"<tt>[(reexport)] <em>feature</em> [\<\|\<=\|=\|\>=\|\> <em>version</em>]</tt>|If the named feature is not already present in %Qore, then the \c QORE_MODULE_DIR environment variable is used to provide a list of directories to seach for a module with the same name (<em>feature</em><tt>[-api-</tt><em>x</em><tt>.</tt><em>y</em><tt>].qmod</tt> for binary modules or <em>feature</em><tt>.qm</tt> for user modules). If the module is not found, then the qore default module directory is checked.<br><br>This directive must be used to load modules providing parse support (i.e. modules providing classes, constants, functions, etc that are resolved at parse time).<br><br>If version information is provided, then it is compared with the module's version information, and if it does not match a parse exception is raised. <br><br>See also @ref Qore::load_module() for a function providing run-time module loading and @ref try-module "%try-module" and @ref try-reexport-module "%try-reexport-module" for a similar parse directive that allows module loading errors to be handled at runtime
    |@ref set-time-zone "%set-time-zone"|Sets the time zone for the current program from a UTC offset (with format \c "+/-[00[:00[:00]]"; \c ":" characters are optional) or a time zone region name (ex: \c "Europe/Prague") <br><br>Since %Qore 0.8.3
    |@ref strict-args "%strict-args"|Prohibits access to builtin functions and methods flagged with @ref RUNTIME_NOOP and also causes errors to be raised if excess arguments are given to functions that do not access excess arguments and if a non-list lvalue is passed to the @ref push, @ref pop, or @ref shift <br><br>Since %Qore 0.8.0
    |@ref strict-bool-eval "%strict-bool-eval"|Sets qore's default strict mathematic boolean evaluation mode, where any value converted to 0 is @ref False "False" and otherwise it's is @ref True "True"; this was how qore behaved by default prior to v0.8.6. <br><br>Equivalent to parse option @ref Qore::PO_STRICT_BOOLEAN_EVAL and the <tt>-pstrict-bool-eval</tt> command line option. <br><br>See also @ref perl-bool-eval "%perl-bool-eval"<br><br>Since %Qore 0.8.6
    |@ref strict-types "%strict-types"|Sets strict type checking and automatically sets default values for lvalues with type restrictions that have default values
    |@ref strong-encapsulation "%strong-encapsulation"|Disallows out-of-line class and namespace declarations. <br><br>Since %Qore 0.8.13
    |@ref try-module "%try-module" [(@ref variable_declarations "var_decl")] <em>feature</em> <tt>[\<\|\<=\|=\|\>=\|\></tt> <em>version</em><tt>]</tt>|If the named feature is not already present in %Qore, then the \c QORE_MODULE_DIR environment variable is used to provide a list of directories to seach for a module with the same name (<em>feature</em><tt>[-api-</tt><em>x</em><tt>.</tt><em>y</em><tt>].qmod</tt> for binary modules or <em>feature</em><tt>.qm</tt> for user modules). If the module is not found, then the qore default module directory is checked.<br><br>If an error occurs loading the module, then the @ref variable_declarations "variable" declared after <tt>%%try-module</tt> is instantiated with the exception information, and the code up to the @ref endtry "%endtry" parse declaration is parsed into the program, allowing for the qore script/program to handle module loading errors at parse time for modules that must be loaded at parse time.<br><br>If version information is provided, then it is compared with the module's version information, and if it does not match a parse exception is raised that is handled like any other load error.<br><br>See also @ref Qore::load_module() for a function providing run-time module loading and @ref requires "%requires" for a similar declaration that does not allow for parse-time module loading error handling.<br><br>Since %Qore 0.8.6
    |@ref try-reexport-module "%try-reexport-module" [(@ref variable_declarations "var_decl")] <em>feature</em> <tt>[\<\|\<=\|=\|\>=\|\></tt> <em>version</em><tt>]</tt>|The same as @ref try-module "%try-module" except that if used in a @ref user_modules "user module", the module is reexported to the importing code<br><br>Since %Qore 0.8.13
    <hr>
    @section allow-bare-refs %allow-bare-refs

    @par Parse Directive:
    <tt>%%allow-bare-refs</tt>

    @par Command Line:
    <tt>--allow-bare-refs, -B</tt>

    @par Parse Option Constant:
    @ref Qore::PO_ALLOW_BARE_REFS

    @par Description:
    Prohibits the use of the \c "$" character in variable names, method calls, and object member references. This makes %Qore scripts appear superficially more like C++ or Java programs. This parse option is set by default with @ref new-style "%new-style" and is the opposite of @ref require-dollar "%require-dollar".\n\n
    Name resolution is made in the following order when this option is set:
    - @ref variable_declarations "local variables"
    - @ref class_constants "class constants" (when parsing in class code)
    - @ref static_class_variables "static class variables" (when parsing in class code)
    - @ref variable_declarations "global variables"
    - (non-class) @ref constants "constants" \n\n

    @note
    - when using this option (or @ref new-style "%new-style) the lack of \c "$" characters in variable names makes it necessary to declare local variables before using them
    - ref implicit_arguments "implicit arguments" are still referenced with the \c "$" character even when this parse option is set.

    @since %Qore 0.8.1

    @see @ref require-dollar "%require-dollar"

    <hr>
    @section allow-debugger %allow-debugger

    @par Parse Directive:
    <tt>%%allow-debugger</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    @ref Qore::PO_ALLOW_DEBUGGER

    @par Description:
    Allows access to functionality that can be used to debug other @ref Qore::Program "Program" containers.
    Mainly related to classes:
    - @ref Qore::Breakpoint
    - @ref Qore::DebugProgram
    - @ref Qore::ProgramControl

    @since %Qore 0.8.13

    <hr>
    @section allow-injection %allow-injection

    @par Parse Directive:
    <tt>%%allow-injection</tt>

    @par Command Line:
    <tt>-pallow-injection</tt>

    @par Parse Option Constant:
    @ref Qore::PO_ALLOW_INJECTION

    @par Description:
    Allows for code and dependency injections in the given @ref Qore::Program "Program" object.

    @see
    - @ref Qore::Program::importClass()
    - @ref Qore::Program::importFunction()
    - @ref Qore::Program::loadApplyToUserModule()
    - @ref Qore::Program::loadUserModuleWithProgram()
    - @ref Qore::load_user_module_with_program()

    @since %Qore 0.8.12

    <hr>
    @section allow-returns %allow-returns

    @par Parse Directive:
    <tt>%%allow-returns</tt>

    @par Command Line:
    <tt>-pallow-returns</tt>

    @par Parse Option Constant:
    @ref Qore::PO_ALLOW_RETURNS

    @par Description:
    Allows the use of the deprecated \c returns keyword.

    @since %Qore 0.9.4

    <hr>
    @section allow-weak-references %allow-weak-references

    @par Parse Directive:
    <tt>%%allow-weak-references</tt>

    @par Command Line:
    <tt>-pallow-weak-references</tt>

    @par Parse Option Constant:
    @ref Qore::PO_ALLOW_WEAK_REFERENCES

    @par Description:
    Allows the use of the @ref weak_assignment_operator "weak assignment operator (:=)".

    @see
    - @ref weak_assignment_operator

    @since %Qore 0.8.13

    <hr>
    @section append-include-path %append-include-path

    @par Parse Directive:
    <tt>%%append-include-path</tt> <em>dir1[:dir2...]</em>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Appends the given directories to qore's include path; also performs environment variable substitution.  Only directories that exist and
    are readable are added to the include path.

    @see @ref append-module-path "%append-module-path"

    <hr>
    @section append-module-path %append-module-path

    @par Parse Directive:
    <tt>%%append-module-path</tt> <em>dir1[:dir2...]</em>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Appends the given directories to qore's module path; also performs environment variable substitution.  Only directories that exist and
    are readable are added to the module path.

    @since %Qore 0.8.6

    @see @ref append-include-path "%append-include-path"

    <hr>
    @section assume-global %assume-global

    @par Parse Directive:
    <tt>%%assume-global</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Resets the default %Qore behavior of assuming global variable scope when variables are first referenced if no @ref my "my" or @ref our "our" is present; use after @ref assume-local "%assume-local" to reset the default parsing behavior. This parse option is also set with @ref old-style "%old-style"

    @since %Qore 0.8.4

    @see @ref assume-local "%assume-local"

    <hr>
    @section assume-local %assume-local

    @par Parse Directive:
    <tt>%%assume-local</tt>

    @par Command Line:
    <tt>-</tt><tt>-assume-local</tt>

    @par Parse Option Constant:
    @ref Qore::PO_ASSUME_LOCAL

    @par Description:
    Assume local variable scope when variables are first referenced if no @ref my "my" or @ref our "our" is present. When used with @ref allow-bare-refs "%allow-bare-refs", local variables without @ref my "my" must be declared with a data type restriction (can be any). This parse option is set by default with @ref new-style "%new-style" and is the opposite of @ref assume-global "%assume-global"

    @since %Qore 0.8.1

    @see @ref assume-global "%assume-global"

    <hr>
    @section broken-cast %broken-cast

    @par Parse Directive:
    <tt>%%broken-cast</tt>

    @par Command Line:
    <tt>-pbroken-cast</tt>

    @par Parse Option Constant:
    @ref Qore::PO_BROKEN_CAST

    @par Description:
    Use old pre-0.9.4 broken @ref cast "cast<>" operator handling where @ref nothing would be accepted without an error

    @see @ref correct-cast "%correct-cast"

    @since %Qore 0.9.4

    <hr>
    @section broken-int-assignments %broken-int-assignments

    @par Parse Directive:
    <tt>%%broken-int-assignments</tt>

    @par Command Line:
    <tt>-pbroken-int-assignments</tt>

    @par Parse Option Constant:
    @ref Qore::PO_BROKEN_INT_ASSIGNMENTS

    @par Description:
    Use old pre-0.8.12 broken @ref int_type "int" and @ref softint_type "softint" runtime handling where type errors were ignored at runtime.

    @see @ref correct-int-assignments "%correct-int-assignments"

    @since %Qore 0.8.12

    <hr>
    @section broken-list-parsing %broken-list-parsing

    @par Parse Directive:
    <tt>%%broken-list-parsing</tt>

    @par Command Line:
    <tt>-pbroken-list-parsing</tt>

    @par Parse Option Constant:
    @ref Qore::PO_BROKEN_LIST_PARSING

    @par Description:
    Use old pre-0.8.12 broken list parsing where certain lists without parentheses would be rewritten to make top-level statements like <tt>list l = 1, 2, 3;</tt> valid.

    @see @ref correct-list-parsing "%correct-list-parsing"

    @since %Qore 0.8.12

    <hr>
    @section broken-logic-precedence %broken-logic-precedence

    @par Parse Directive:
    <tt>%%broken-logic-precedence</tt>

    @par Command Line:
    <tt>-pbroken-logic-precedence</tt>

    @par Parse Option Constant:
    @ref Qore::PO_BROKEN_LOGIC_PRECEDENCE

    @par Description:
    Use old pre-0.8.12 precedence where the \ref logical_and_operator "&&" had the same precedence as \ref logical_or_operator "||" and all three bitwise operators (
    \ref bitwise_and_operator "&", \ref bitwise_or_operator "|", \ref bitwise_xor_operator "^") shared the same precedence.

    An example of impact of @ref broken-logic-precedence "%broken-logic-precedence" directive:

    - with @ref broken-logic-precedence "%broken-logic-precedence":
    @code
    True \|\| False && False = False
    1 \| 2 ^ 3 & 5 = 0
    @endcode

    - without @ref broken-logic-precedence "%broken-logic-precedence" (or with @ref correct-logic-precedence "%correct-logic-precedence"):
    @code
    True \|\| False && False = True
    1 \| 2 ^ 3 & 5 = 3
    @endcode

    @see @ref correct-logic-precedence "%correct-logic-precedence"

    @since %Qore 0.8.12

    <hr>
    @section broken-loop-statement %broken-loop-statement

    @par Parse Directive:
    <tt>%%broken-loop-statement</tt>

    @par Command Line:
    <tt>-</tt><tt>-broken-loop-statement</tt>

    @par Parse Option Constant:
    @ref Qore::PO_BROKEN_LOOP_STATEMENT

    @par Description:
    Use old pre-0.8.13 handling of break/continue: continue statements in a switch behave like a break statement,
    both @ref break "break" and @ref continue "continue" behave like @ref return "return" when used outside of a loop.

    @since %Qore 0.8.13

    <hr>
    @section broken-operators %broken-operators

    @par Parse Directive:
    <tt>%%broken-operators</tt>

    @par Command Line:
    <tt>-pbroken-operators</tt>

    @par Parse Option Constant:
    @ref Qore::PO_BROKEN_OPERATORS

    @par Description:
    Accept spaces in the following multi-character operators for backwards compatibility with %Qore before 0.8.12:
    - @ref logical_less_than_or_equals_operator "<="
    - @ref logical_greater_than_or_equals_operator ">="
    - @ref logical_comparison_operator "<=>"
    - @ref logical_absolute_equality_operator "==="
    - @ref logical_absolute_inequality_operator "!=="
    - @ref logical_and_operator "&&"
    - @ref logical_or_operator "||"
    - @ref plus_equals_operator "+="
    - @ref minus_equals_operator "-="
    - @ref and_equals_operator "&="
    - @ref or_equals_operator "|="
    - @ref modulo_equals_operator "%="
    - @ref multiply_equals_operator "*="
    - @ref divide_equals_operator "/="
    - @ref xor_equals_operator "^="
    - @ref shift_left_equals_operator "<<="
    - @ref shift_right_equals_operator ">>="
    - @ref logical_inequality_operator "!="
    - @ref shift_right_operator ">>"
    - @ref shift_left_operator "<<"
    .
    For example, when this parse directive is not set, the following is a bug:
    @code{.py}
int i = 1;
i+ =4;
    @endcode
    When this parse directive is set; the above code is accepted.

    @see @ref correct-operators "%correct-operators"

    @since %Qore 0.8.12

    <hr>
    @section broken-range %broken-range

    @par Parse Directive:
    <tt>%%broken-range</tt>

    @par Command Line:
    <tt>-</tt><tt>-pbroken-range</tt>

    @par Parse Option Constant:
    @ref Qore::PO_BROKEN_RANGE

    @par Description:
    Include the upper limit in @ref Qore::range() "range()" and @ref Qore::xrange() "xrange()" as with %Qore before 0.9.5

    @see @ref correct-range "%correct-range"

    @since %Qore 0.9.5

    <hr>
    @section broken-references %broken-references

    @par Parse Directive:
    <tt>%%broken-references</tt>

    @par Command Line:
    <tt>-</tt><tt>-pbroken-references</tt>

    @par Parse Option Constant:
    @ref Qore::PO_BROKEN_REFERENCES

    @par Description:
    Do not enforce @ref reference_type "reference" and @ref reference_or_nothing_type "*reference" type restrictions as with pre-0.8.13; when this option is in effect, the @ref reference_type "reference" and @ref reference_or_nothing_type "*reference" type restrictions are ignored and have no type restrictions.

    @since %Qore 0.8.3

    <hr>
    @section broken-sprintf %broken-sprintf

    @par Parse Directive:
    <tt>%%broken-sprintf</tt>

    @par Command Line:
    <tt>-</tt><tt>-pbroken-sprintf</tt>

    @par Parse Option Constant:
    @ref Qore::PO_BROKEN_SPRINTF

    @par Description:
    Use pre-0.9 sprintf format handling where no argument is handled differently than @ref nothing

    @see @ref correct-sprintf "%correct-sprintf"

    @since %Qore 0.9

    <hr>
    @section broken-varargs %broken-varargs

    @par Parse Directive:
    <tt>%%broken-varargs</tt>

    @par Command Line:
    <tt>-</tt><tt>-pbroken-varargs</tt>

    @par Parse Option Constant:
    @ref Qore::PO_BROKEN_VARARGS

    @par Description:
    Use pre-1.17 varargs handling where varargs are detected based on the function or method body, and the vararg flag
    is set by default on all @ref abstract "abstract" methods.

    @see @ref correct-varargs "%correct-varargs"

    @since %Qore 1.17

    <hr>
    @section correct-cast %correct-cast

    @par Parse Directive:
    n/a

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Reverts the effect of the @ref broken-cast "%broken-cast" parse option.

    @see @ref broken-cast "%broken-cast"

    @since %Qore 0.9.4

    <hr>
    @section correct-int-assignments %correct-int-assignments

    @par Parse Directive:
    n/a

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Reverts the effect of the @ref broken-int-assignments "%broken-int-assignments" parse option.

    @see @ref broken-int-assignments "%broken-int-assignments"

    @since %Qore 0.8.12.10

    <hr>
    @section correct-list-parsing %correct-list-parsing

    @par Parse Directive:
    n/a

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Reverts the effect of the @ref broken-list-parsing "%broken-list-parsing" parse option.

    @see @ref broken-list-parsing "%broken-list-parsing"

    @since %Qore 0.8.12.10

    <hr>
    @section correct-logic-precedence %correct-logic-precedence

    @par Parse Directive:
    n/a

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Reverts the effect of the @ref broken-logic-precedence "%broken-logic-precedence" parse option.

    @see @ref broken-logic-precedence "%broken-logic-precedence"

    @since %Qore 0.8.12.10

    <hr>
    @section correct-loop-statement %correct-loop-statement

    @par Parse Directive:
    <tt>%%correct-loop-statement</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Reverts the effect of the @ref broken-loop-statement "%broken-loop-statement" parse option.

    @see @ref broken-loop-statement "%broken-loop-statement"

    @since %Qore 0.8.13

    <hr>
    @section correct-operators %correct-operators

    @par Parse Directive:
    <tt>%%correct-operators</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Reverts the effect of the @ref broken-operators "%broken-operators" parse option.

    @see @ref broken-operators "%broken-operators"

    @since %Qore 0.8.12.10

    <hr>
    @section correct-range %correct-range

    @par Parse Directive:
    <tt>%%correct-range</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Reverts the effect of the @ref broken-range "%broken-range" parse option.

    @see @ref broken-range "%broken-range"

    @since %Qore 0.9.5

    <hr>
    @section correct-references %correct-references

    @par Parse Directive:
    <tt>%%correct-references</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Reverts the effect of the @ref broken-references "%broken-references" parse option.

    @see @ref broken-references "%broken-references"

    @since %Qore 0.8.13

    <hr>
    @section correct-sprintf %correct-sprintf

    @par Parse Directive:
    <tt>%%correct-sprintf</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Reverts the effect of the @ref broken-sprintf "%broken-sprintf" parse option.

    @see @ref broken-sprintf "%broken-sprintf"

    @since %Qore 0.9

    <hr>
    @section correct-varargs %correct-varargs

    @par Parse Directive:
    <tt>%%correct-varargs</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Reverts the effect of the @ref broken-varargs "%broken-varargs" parse option.

    @see @ref broken-varargs "%broken-varargs"

    @since %Qore 1.17

    <hr>
    @section define %define

    @par Parse Directive:
    <tt>%%define</tt>

    @par Command Line:
    <tt>-</tt><tt>-define, -D</tt>

    @par Parse Option Constant:
    n/a

    @par Description:
    Creates and optionally sets a value for a @ref conditional_parsing "parse define"

    @since %Qore 0.8.3

    <hr>
    @section disable-all-warnings %disable-all-warnings

    @par Parse Directive:
    <tt>%%disable-all-warnings</tt>

    @par Command Line:
    n/a, warnings are disabled by default

    @par Parse Option Constant:
    n/a

    @par Description:
    Disables all warnings while parsing. See @ref warnings for more information.

    <hr>
    @section disable-warning %disable-warning

    @par Parse Directive:
    <tt>%%disable-warning</tt>

    @par Command Line:
    n/a, warnings are disabled by default

    @par Parse Option Constant:
    n/a

    @par Description:
    Disables the named warning while parsing. See @ref warnings for more information.

    <hr>
    @section else %else

    @par Parse Directive:
    <tt>%%else</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Allows for parsing an alternate block when used with the @ref ifdef "%ifdef" or @ref ifndef "%ifndef" parse directives (for @ref conditional_parsing "conditional parsing" based on parse defines)

    @since %Qore 0.8.3

    <hr>
    @section enable-all-warnings %enable-all-warnings

    @par Parse Directive:
    <tt>%%enable-all-warnings</tt>

    @par Command Line:
    <tt>-</tt><tt>-enable-all-warnings, -W</tt>

    @par Parse Option Constant:
    n/a

    @par Description
    Enables all warnings while parsing. See @ref warnings for more information.

    <hr>
    @section enable-warning %enable-warning

    @par Parse Directive:
    <tt>%%enable-warning</tt>

    @par Command Line:
    <tt>-</tt><tt>-enable-warning, -w</tt>

    @par Parse Option Constant:
    n/a

    @par Description:
    Enables the named warning while parsing. See @ref warnings for more information.

    <hr>
    @section endif %endif

    @par Parse Directive:
    <tt>%%endif</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Closes a conditionally-parsed block started by the @ref ifdef "%ifdef" or @ref ifndef "%ifndef" parse directives (for @ref conditional_parsing "conditional parsing" based on parse defines)

    @since %Qore 0.8.3

    <hr>
    @section endtry %endtry

    @par Parse Directive:
    <tt>%%endtry</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Closes a @ref try-module "%try-module" or @ref try-reexport-module "%try-reexport-module" block

    @since %Qore 0.8.6

    <hr>
    @section exec-class %exec-class

    @par Parse Directive:
    <tt>%%exec-class</tt>

    @par Command Line:
    <tt>-</tt><tt>-exec-class, -x</tt>

    @par Parse Option Constant:
    n/a

    @par Description:
    Executes the named class as the application class and turns on @ref no-top-level "%no-top-level" as well. Any top level statements before this directive are silently ignored.

    @see @ref Qore::set_return_value()

    <hr>
    @section ifdef %ifdef

    @par Parse Directive:
    <tt>%%ifdef</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Opens a conditionally-parsed block; if the given @ref conditional_parsing "parse define" is defined, then the block after the <tt>%%ifdef</tt> is parsed until either an @ref else "%else" or an @ref endif "%endif"

    @since %Qore 0.8.3

    <hr>
    @section ifndef %ifndef

    @par Parse Directive:
    <tt>%%ifndef</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Opens a conditionally-parsed block; if the given @ref conditional_parsing "parse define" is not defined, then the block after the <tt>%%ifndef</tt> is parsed until either an @ref else "%else" or an @ref endif "%endif"

    @since %Qore 0.8.3

    <hr>
    @section include %include

    @par Parse Directive:
    <tt>%%include</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Includes a file to be parsed. If the path is not absolute (i.e. starting with \c ""/"), then files are searched first in the directory of the currently-executing script (if known), then in each path in the environment variable \c QORE_INCLUDE_DIR.\n
    If the first character of the include target is \c '$', then environment variable substitution is performed on the leading environment variable

    @since %Qore 0.8.9 added environment variable substitution

    <hr>
    @section lockdown %lockdown

    @par Parse Directive:
    <tt>%%lockdown</tt>

    @par Command Line:
    <tt>-</tt><tt>-lockdown</tt>

    @par Parse Option Constant:
    @ref Qore::PO_LOCKDOWN

    @par Description:
    The most restrictive parse restriction, making any external access, threading, i/o, etc illegal.  Made up of @ref no-external-access "%no-external-access", @ref no-threads "%no-threads", and @ref no-io "%no-io"

    <hr>
    @section lock-options %lock-options

    @par Parse Directive:
    <tt>%%lock-options</tt>

    @par Command Line:
    <tt>-</tt><tt>-lock-options, -K</tt>

    @par Parse Option Constant:
    n/a

    @par Description:
    Prohibits further changes to parse options.

    <hr>
    @section lock-warnings %lock-warnings

    @par Parse Directive:
    <tt>%%lock-warnings</tt>

    @par Command Line:
    <tt>-</tt><tt>-lock-warnings, -A</tt>

    @par Parse Option Constant:
    @ref Qore::PO_LOCK_WARNINGS

    @par Description:
    Prohibits further changes to the warning mask.

    <hr>
    @section loose-args %loose-args

    @par Parse Directive:
    <tt>%%loose-args</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Reverts the effect of the @ref strict-args "%strict-args" parse option.

    @see @ref loose-args "%loose-args"

    <hr>
    @section loose-types %loose-types

    @par Parse Directive:
    <tt>%%loose-types</tt>

    @par Parse Option Constant:
    n/a

    @par Description:
    Reverts the effect of the @ref strict-types "%strict-types" parse option.

    @see strict-types "%strict-types"

    @since %Qore 0.9.4

    <hr>
    @section new-style %new-style

    @par Parse Directive:
    <tt>%%new-style</tt>

    @par Command Line:
    <tt>-</tt><tt>-new-style, -n</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NEW_STYLE

    @par Description:
    Sets both @ref allow-bare-refs "%allow-bare-refs" and @ref assume-local "%assume-local". These two options together make programming in %Qore superficially more like programming in C++ or Java programs; use this if you dislike programming with the \c "$" sign, for example.

    @see @ref old-style "%old-style"

    @note
    - %Qore is moving toward establishing @ref new-style "%new-style" as the default syntax; all examples given in the %Qore documentation are given assuming @ref new-style "%new-style".
    - when using this option (or @ref allow-bare-refs "%allow-bare-refs) the lack of \c "$" characters in variable names makes it necessary to declare local variables before using them

    @since %Qore 0.8.1

    <hr>
    @section old-style %old-style

    @par Parse Directive:
    <tt>%%old-style</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Resets default %Qore parsing behavior by setting @ref require-dollar "%require-dollar" and @ref assume-global "%assume-global"; this option has the opposite effect of @ref new-style "%new-style"

    @see @ref new-style "%new-style"

    @since %Qore 0.8.4

    <hr>
    @section no-debugging %no-debugging

    @par Parse Directive:
    <tt>%%no-debugging</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    @ref Qore::PO_NO_DEBUGGING

    @par Description:
    Forbids debugging of the current @ref Qore::Program "Program" object; when this parse option is set,
    debuggers cannot attach to the @ref Qore::Program "Program" object.

    @since %Qore 0.8.13

    <hr>
    @section no-child-restrictions %no-child-restrictions

    @par Parse Directive:
    <tt>%%no-child-restrictions</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-child-restrictions, -I</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_CHILD_PO_RESTRICTIONS

    @par Description:
    Allows child program objects to have parse option restrictions that are not a strict subset of the parents'.

    <hr>
    @section no-class-defs %no-class-defs

    @par Parse Directive:
    <tt>%%no-class-defs</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-class-defs</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_CLASS_DEFS

    @par Description:
    Disallows new class definitions. Any use of the reserved word \c class will result in a parse exception.

    <hr>
    @section no-constant-defs %no-constant-defs

    @par Parse Directive:
    <tt>%%no-constant-defs</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-constant-defs</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_CONSTANT_DEFS

    @par Description:
    Disallows new constant definitions. Any use of the reserved word \c const will result in a parse exception.

    <hr>
    @section no-database %no-database

    @par Parse Directive:
    <tt>%%no-database</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-database</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_DATABASE

    @par Description:
    Disallows access to database functionality. Currently this means that access to the following classes is restricted:
    - @ref Qore::SQL::Datasource
    - @ref Qore::SQL::DatasourcePool
    - @ref Qore::SQL::SQLStatement

    <hr>
    @section no-external-access %no-external-access

    @par Parse Directive:
    <tt>%%no-external-access</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-external-access</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_EXTERNAL_ACCESS

    @par Description:
    This option is made up of @ref no-process-control "%no-process-control", @ref no-network "%no-network", @ref no-filesystem "%no-filesystem", @ref no-database "%no-database", @ref no-external-info "%no-external-info", @ref no-modules "%no-modules", and @ref no-uncontrolled-apis "%no-uncontrolled-apis"

    @see @ref lockdown "%lockdown"

    <hr>
    @section no-external-info %no-external-info

    @par Parse Directive:
    <tt>%%no-external-info</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-external-info</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_EXTERNAL_INFO

    @par Description:
    Disallows any access to functionality that provides external information.  The following features are unavailable with this option:
    - getaddrinfo()
    - getegid()
    - getenv()
    - geteuid()
    - getgid()
    - getgrgid()
    - getgrgid2()
    - getgrnam()
    - getgrnam2()
    - getgroups()
    - gethostbyaddr()
    - gethostbyaddr_long()
    - gethostbyname()
    - gethostbyname_long()
    - gethostname()
    - getpid()
    - getppid()
    - getpwnam()
    - getpwnam2()
    - getpwuid()
    - getpwuid2()
    - getuid()
    - unsetenv()

    <hr>
    @section no-external-process %no-external-process

    @par Parse Directive:
    <tt>%%no-external-process</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-external-process, -E</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_EXTERNAL_PROCESS

    @par Description:
    Disallows any access to external processes. The following features are unavailable with this option:
    - @ref backquote_operator "backquote operator"
    - system()
    - kill()
    - exec()
    - backquote()

    <hr>
    @section no-filesystem %no-filesystem

    @par Parse Directive:
    <tt>%%no-filesystem</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-filesystem, -F</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_FILESYSTEM

    @par Description:
    Disallows any access to the external filesystem. The following features are unavailable with this option:
    - @ref Qore::Dir
    - @ref Qore::File
    - @ref Qore::File::hstat(string)
    - @ref Qore::File::hlstat(string)
    - @ref Qore::File::lstat(string)
    - @ref Qore::File::stat(string)
    - @ref Qore::File::statvfs(string)
    - @ref Qore::FtpClient::get()
    - @ref Qore::FtpClient::put()
    - chdir()
    - chmod()
    - chown()
    - getcwd()
    - getcwd2()
    - glob()
    - hlstat()
    - hstat()
    - is_bdev()
    - is_cdev()
    - is_dev()
    - is_dir()
    - is_executable()
    - is_file()
    - is_link()
    - is_pipe()
    - is_readable()
    - is_socket()
    - is_writable()
    - is_writeable()
    - lchown()
    - lstat()
    - mkdir()
    - mkfifo()
    - readlink()
    - rename()
    - rmdir()
    - stat()
    - statvfs()
    - unlink()

    <hr>
    @section no-global-vars %no-global-vars

    @par Parse Directive:
    <tt>%%no-global-vars</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-global-vars, -G</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_GLOBAL_VARS

    @par Description:
    Disallows the use of global variables.

    <hr>
    @section no-gui %no-gui

    @par Parse Directive:
    <tt>%%no-gui</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-gui, --set-parse-option=no-gui, -pno-gui</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_GUI

    @par Description:
    Disallows the use of functionality that draws graphics to the display (this functionality is not implemented in the qore library; only implemented in modules).

    <hr>
    @section no-io %no-io

    @par Parse Directive:
    <tt>%%no-io</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-io, --set-parse-option=no-io, -pno-io</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_IO

    @par Description:
    Made up of @ref no-gui "%no-gui" | @ref no-terminal-io "%no-terminal-io" | @ref no-filesystem "%no-filesystem" | @ref no-network "%no-network" | @ref no-database "%no-database" | @ref no-uncontrolled-apis "%no-uncontrolled-apis"

    <hr>
    @section no-locale-control %no-locale-control

    @par Parse Directive:
    <tt>%%no-locale-control</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-locale-control, -P</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_LOCALE_CONTROL

    @par Description:
    Disallows access to functions that would affect the locale settings of the current program. The following features are unavailable with this option:
    - @ref Qore::TimeZone::set()
    - @ref Qore::TimeZone::setUTCOffset()
    - @ref Qore::TimeZone::setRegion()

    <hr>
    @section no-modules %no-modules

    @par Parse Directive:
    <tt>%%no-modules</tt>

    @par Command Line:
    <tt>-pno-modules</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_MODULES

    @par Description:
    Disallows loading @ref qore_modules "modules" with the @ref requires "%requires", @ref try-module "%try-module", or @ref try-reexport-module "%try-reexport-module" directives or at runtime with load_module()

    @since %Qore 0.8.4

    <hr>
    @section no-namespace-defs %no-namespace-defs

    @par Parse Directive:
    <tt>%%no-namespace-defs</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-namespace-defs, -M</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_NAMESPACE_DEFS

    @par Description:
    Disallows new @ref qore_namespaces "namespace definitions".

    <hr>
    @section no-network %no-network

    @par Parse Directive:
    <tt>%%no-network</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-network, -Y</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_NETWORK

    @par Description:
    Disallows any access to the network.  The following features are unavailable with this option:
    - @ref Qore::FtpClient
    - @ref Qore::HTTPClient
    - @ref Qore::Socket

    <hr>
    @section no-new %no-new

    @par Parse Directive:
    <tt>%%no-new</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-new, -N</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_NEW

    @par Description:
    Disallows use of the @ref new "new operator".

    <hr>
    @section no-process-control %no-process-control

    @par Parse Directive:
    <tt>%%no-process-control</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-process-control, -P</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_PROCESS_CONTROL

    @par Description:
    Disallows access to functions that would affect the current process. The following features are unavailable with this option:
    - abort()
    - chdir()
    - exit()
    - fork()
    - get_module_option()
    - load_module()
    - remove_signal_handler()
    - setegid()
    - setenv()
    - seteuid()
    - setgid()
    - setgroups()
    - setsid()
    - set_module_option()
    - set_signal_handler()
    - setuid()
    - sleep()
    - srand()
    - thread_yield()
    - umask()
    - unsetenv()
    - usleep()

    <hr>
    @section no-reflection %no-reflection

    @par Parse Directive:
    <tt>%%no-reflection</tt>

    @par Command Line:
    <tt>-</tt><tt>-pno-reflection</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_REFLECTION

    @par Description:
    Disallows access to the reflection API provided by the <a href="../../modules/reflection/html/index.html">reflection</a> module.

    @since %Qore 0.9

    <hr>
    @section no-subroutine-defs %no-subroutine-defs

    @par Parse Directive:
    <tt>%%no-subroutine-defs</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-subroutine-defs, -S</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_SUBROUTINE_DEFS

    @par Description:
    Disallows subroutine (function) definitions.

    <hr>
    @section no-terminal-io %no-terminal-io

    @par Parse Directive:
    <tt>%%no-terminal-io</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-terminal-io,-</tt><tt>-set-parse-option=no-terminal-io, -pno-terminal-io</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_TERMINAL_IO

    @par Description:
    Disallows access to terminal input and output. The following features are unavailable with this option:
    - @ref Qore::TermIOS
    - @ref Qore::TermIOS::getWindowSize()
    - @ref Qore::stdin
    - @ref Qore::stdout
    - @ref Qore::stderr
    - f_printf()
    - f_vprintf()
    - flush()
    - print()
    - printf()
    - vprintf()

    <hr>
    @section no-thread-classes %no-thread-classes

    @par Parse Directive:
    <tt>%%no-thread-classes</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-thread-classes</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_THREAD_CLASSES

    @par Description:
    Disallows access to thread classes. The following features are unavailable with this option:
    - @ref Qore::Thread::AbstractSmartLock class
    - @ref Qore::Thread::AutoGate class
    - @ref Qore::Thread::AutoLock class
    - @ref Qore::Thread::AutoReadLock class
    - @ref Qore::Thread::AutoWriteLock class
    - @ref Qore::Thread::Condition class
    - @ref Qore::Thread::Counter class
    - @ref Qore::Thread::Gate class
    - @ref Qore::Thread::Mutex class
    - @ref Qore::Thread::Queue class
    - @ref Qore::Thread::RWLock class
    - @ref Qore::Thread::ThreadPool class

    <hr>
    @section no-thread-control %no-thread-control

    @par Parse Directive:
    <tt>%%no-thread-control</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-thread-control, -R</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_THREAD_CONTROL

    @par Description:
    Disallows access to thread control operations.  The following features are unavailable with this option:
    - @ref background "background operator"
    - @ref thread_exit "thread_exit statement"
    - delete_all_thread_data()
    - delete_thread_data()
    - get_all_thread_data()
    - get_thread_data()
    - mark_thread_resources()
    - remove_thread_data()
    - remove_thread_resource()
    - save_thread_data()
    - set_default_thread_stack_size()
    - set_thread_name()
    - set_thread_resource()
    - throw_thread_resource_exceptions()
    - throw_thread_resource_exceptions_to_mark()
    The following deprecated functions are also unavailable:
    - throwThreadResourceExceptions()

    <hr>
    @section no-thread-info %no-thread-info

    @par Parse Directive:
    <tt>%%no-thread-info</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-thread-info</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_THREAD_INFO

    @par Description:
    Disallows access to functionality that provides information about threading. The following features are unavailable with this option:
    - get_all_thread_call_stacks()
    - get_all_thread_data()
    - get_default_thread_stack_size()
    - get_stack_size()
    - get_thread_call_stack()
    - get_thread_data()
    - get_thread_name()
    - gettid()
    - num_threads()
    - thread_list()
    The following deprecated functions are also unavailable:
    - getAllThreadCallStacks()

    <hr>
    @section no-threads %no-threads

    @par Parse Directive:
    <tt>%%no-threads</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-threads, -T</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_THREADS

    @par Description:
    Disallows access to all thread control operations and thread classes (equivalent to @ref no-thread-control "%no-thread-control" and @ref no-thread-classes "%no-thread-classes" together).

    <hr>
    @section no-top-level %no-top-level

    @par Parse Directive:
    <tt>%%no-top-level</tt>

    @par Command Line:
    <tt>-</tt><tt>-no-top-level, -L</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_TOP_LEVEL_STATEMENTS

    @par Description:
    Disallows top level code from this point on, any top level statements before this directive are still allowed and become part of the @ref Qore::Program "Program" context.

    <hr>
    @section no-transient %no-transient

    @par Parse Directive:
    <tt>%%no-transient</tt>

    @par Command Line:
    <tt>-</tt><tt>-pno-transient</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_TRANSIENT

    @par Description:
    Removes the @ref transient keyword for backwards-compatibility.

    @since %Qore 0.9

    <hr>
    @section no-uncontrolled-apis %no-uncontrolled-apis

    @par Parse Directive:
    <tt>%no-uncontrolled-apis</tt>

    @par Command Line:
    <tt>-p=no-uncontrolled-apis</tt>

    @par Parse Option Constant:
    @ref Qore::PO_NO_UNCONTROLLED_APIS

    @par Description:
    Disallows access to uncontrolled APIs such as external language bindings or direct generic system call APIs that could bypass %Qore's sandboxing controls.

    <hr>
    @section perl-bool-eval %perl-bool-eval

    @par Parse Directive:
    <tt>%%perl-bool-eval</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Set to mimic perl's (and Python's) boolean evaluation; this is now the default (as of qore version 0.8.6); prior to this version, by default qore used @ref strict-bool-eval "strict mathematic boolean evaluation", where any value converted to 0 is @ref False "False" and otherwise it's is @ref True "True".\n\n
    As of %Qore 0.8.6+, <tt>%%perl-bool-eval</tt> is the default behavior and therefore only needs to be set if @ref strict-bool-eval "%strict-bool-eval" was set first.\n\n
    When this option is set, boolean evaluation follows the same rules as <value>::val(); for example:\n
    @code{.py}
string str = "hello";
if (str)
    printf("string is: %y\n", str);
    @endcode \n
    With this option set (the default), the above prints out: @verbatim string is: "hello"@endverbatim When it's not set (i.e. @ref strict-bool-eval "%strict-bool-eval" is set), nothing is printed out as the string expression evaluates to @ref False "False" due to qore's old strict mathematical boolean evaluation.\n\n
    Basically with this option set, qore's boolean evaluation becomes like perl's and Python's, whereas any expression that has the following values is @ref False "False": @ref nothing, @ref string "string" \c "0" and @ref string "empty strings", @ref integer "integer", @ref float "float", and @ref number "number" \c 0 (zero), @ref absolute_dates "absolute date" \c 1970-01-01Z (ie the start of the epoch with an offset of 0), @ref relative_dates "relative date" \c PT0H (ie any  @ref relative_dates "relative date" with a 0 duration), @ref null, @ref binary "empty binary objects", @ref hash "empty hashes", and @ref list "empty lists".  All other values are @ref True "True".

    @note also affects the @ref Qore::boolean(any) "boolean(any)" function

    @see @ref strict-bool-eval "%strict-bool-eval"

    @since %Qore 0.8.6

    <hr>
    @section push-parse-options %push-parse-options

    @par Parse Directive:
    <tt>%%push-parse-options</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Stores parse options so that they will be restored when the current file is done parsing; use in include files to ensure parse options are set appropriately for the file being parsed.\n\n
    For example:\n
    @code{.py}
%push-parse-options
%new-style
    @endcode

    <hr>
    @section require-dollar %require-dollar

    @par Parse Directive:
    <tt>%%require-dollar</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Resets the default %Qore behavior where the use of the \c "$" character in variable names, method calls, and object member references is required; use after @ref allow-bare-refs "%allow-bare-refs" to reset the default parsing behavior

    @since %Qore 0.8.4

    <hr>
    @section require-our %require-our

    @par Parse Directive:
    <tt>%%require-our</tt>

    @par Command Line:
    <tt>-</tt><tt>-require-our, -O</tt>

    @par Parse Option Constant:
    @ref Qore::PO_REQUIRE_OUR

    @par Description:
    Requires global variables to be declared with @ref our "our" prior to use (recommended to use for all larger scripts/programs).

    <hr>
    @section require-prototypes %require-prototypes

    @par Parse Directive:
    <tt>%%require-prototypes</tt>

    @par Command Line:
    <tt>-</tt><tt>-require-prototypes</tt>

    @par Parse Option Constant:
    @ref Qore::PO_REQUIRE_PROTOTYPES

    @par Description:
    Requires type declarations for all function and method parameters and return types. Variables and object members do not need to have type declarations with this option.

    @see @ref require-types "%require-types", which is a superset of this option.

    <hr>
    @section require-types %require-types

    @par Parse Directive:
    <tt>%%require-types</tt>

    @par Command Line:
    <tt>-</tt><tt>-require-types</tt>

    @par Parse Option Constant:
    @ref Qore::PO_REQUIRE_TYPES

    @par Description:
    Requires type declarations for all function and method parameters, return types, variables, and object members.
    Additionally causes \c CALL-WITH-TYPE-ERRORS exceptions to be thrown if a function, method, or @ref code_type "code" call is made
    with excess arguments not handled by the target.  In case calls are made to user code over a @ref Qore::Program "Program" barrier,
    the parse options of the target code determine if this exception is raised;

    @see @ref require-prototypes "%require-prototypes", which is a subset of this option.

    <hr>
    @section requires %requires

    @par Parse Directive:
    <tt>%%requires[(reexport)] <em>feature</em> [\<\|\<=\|=\|\>=\|\> <em>version</em>]</tt>

    @par Command Line:
    <tt>-</tt><tt>-load, -l</tt>

    @par Parse Option Constant:
    n/a

    @par Description:
    Loads a %Qore module immediately. The parse directive can be used to load a module during parsing, and the command line version can be used to load a module before parsing.  If the optional <tt><em>(reexport)</em></tt> option is used in a @ref user_modules "user module", then any modules loaded with this form of the <tt>%%requires</tt> parse directive will also be imported into the importing @ref Qore::Program "Program".\n\n
    From %Qore 0.7.1, you can specify a comparison operator (one of <tt>\<, \<=, =, \>=, or \></tt>) and version information after the module name as well. Version numbers are compared via integer comparisons of each element, where elements are separated by a \c ".". If one of the versions does not have as many elements as another, the missing elements are assumed to be \c "0" (i.e. version \c "1.0" compared with version \c "1.0.1" will be extended to \c "1.0.0").\n\n
    For example:\n
    @code{.py}
%requires oracle >= 1.0.1
    @endcode \n
    This will load the oracle module if it is at least version 1.0.1.\n\n
    For example:\n
    @code{.py}
%requires(reexport) Mime
    @endcode \n
    If this form is used in a @ref user_modules "user module", all public definitions from the <a href="../../modules/Mime/html/index.html">Mime</a> module would also be loaded into any @ref Qore::Program "Program" that requires the user module.\n\n
    Note that there is one special feature name: \c "qore". This pseudo-feature can be used to check the minimum %Qore version; if this feature is requested with version information, then the %Qore library's version information is used for the version number comparison.

    @see @ref try-module "%try-module" and @ref try-reexport-module "%try-reexport-module" for similar parse directives that allows module loading errors to be caught and handled at parse-time

    <hr>
    @section set-time-zone %set-time-zone

    @par Parse Directive:
    <tt>%%set-time-zone</tt>

    @par Command Line:
    <tt>-</tt><tt>-time-zone, -z</tt>

    @par Parse Option Constant:
    none; this is set by calling @ref Qore::TimeZone::setRegion() or @ref Qore::TimeZone::setUTCOffset()

    @par Description:
    Sets the time zone for the current program from a UTC offset (with format \c "+/-00[:00[:00]]"; \c ":"" characters are optional) or a time zone region name (ex: \c "Europe/Prague").

    <hr>
    @section strict-args %strict-args

    @par Parse Directive:
    <tt>%%strict-args</tt>

    @par Command Line:
    <tt>-</tt><tt>-strict-args</tt>

    @par Parse Option Constant:
    @ref Qore::PO_STRICT_ARGS

    @par Description:
    Prohibits access to builtin functions and methods flagged with @ref RUNTIME_NOOP and also causes errors to be raised if excess
    arguments are given to functions that do not access excess arguments and if a non-list lvalue is passed to the @ref push,
    @ref pop, or @ref shift.
    Additionally, If a function, method, or @ref code_type "code" call is made with excess arguments not handled by the target, a
    \c CALL-WITH-TYPE-ERRORS exception is thrown.  In case calls are made to user code over a @ref Qore::Program "Program" barrier,
    the parse options of the target code determine if this exception is raised;

    @see @ref loose-args "%loose-args"

    <hr>
    @section strict-bool-eval %strict-bool-eval

    @par Parse Directive:
    <tt>%%strict-bool-eval</tt>

    @par Command Line:
    <tt>-pstrict-bool-eval</tt>

    @par Parse Option Constant:
    @ref Qore::PO_STRICT_BOOLEAN_EVAL

    @par Description:
    When set, this option enables qore's default strict mathematic boolean evaluation, where any value converted to 0 is @ref False "False" and otherwise it's is @ref True "True".\n\n
    This option takes effect at runtime.\n\n
    For example:\n
    @code{.py}
string str = "hello";
if (str)
    printf("string is: %y\n", str);
    @endcode \n
    If <tt>%%strict-bool-eval</tt> is set, then %Qore's boolean evaluation will evaluate \c "hello" in a strict mathematical sense and convert it to 0, which is @ref False "False", so nothing would be printed out, but when <tt>%%perl-bool-eval</tt> is enabled, this will be @ref True "True" (following the rules for <string>::val()).\n\n
    %Qore's strict mathematical boolean evaluation was the default prior to %Qore 0.8.6, however it was considered non-intuitive and a design bug, and therefore the default behavior of the language was changed to a more intuitive form of boolean evaluation as documented in @ref perl-bool-eval "%perl-bool-eval".

    @note also affects the @ref Qore::boolean(any) "boolean(any)" function

    @see @ref perl-bool-eval "perl-bool-eval"

    @since %Qore 0.8.6

    <hr>
    @section strict-types %strict-types

    @par Parse Directive:
    <tt>%%strict-types</tt>

    @par Command Line:
    <tt>-pstrict-types</tt>

    @par Parse Option Constant:
    @ref Qore::PO_STRICT_TYPES

    @par Description:
    Sets strict type checking and automatically sets default values for lvalues with type restrictions that have
    default values.

    @see loose-types "%loose-types"

    @since %Qore 0.9.4

    @note This parse option is experimental; do not use it for code where forwards compatibility is important until
    its semantics have been finalized

    <hr>
    @section strong-encapsulation %strong-encapsulation

    @par Parse Directive:
    <tt>%%strong-encapsulation</tt>

    @par Command Line:
    <tt>-pstrong-encapsulation</tt>

    @par Parse Option Constant:
    @ref Qore::PO_STRONG_ENCAPSULATION

    @par Description:
    Disallows out-of-line namespace and class declarations which break encapsulation by allowing changes to existing namespaces and classes by external code.

    @since %Qore 0.8.13

    <hr>
    @section try-module %try-module

    @par Parse Directive:
    <tt>%%try-module</tt> [(@ref variable_declarations "var_decl")] <em>feature</em> <tt>[\<\|\<=\|=\|\>=\|\></tt> <em>version</em><tt>]</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Loads a %Qore module immediately; if an error occurs loading the module, then the @ref variable_declarations "variable" declared in parentheses after <tt>%%try-module</tt> is instantiated with the exception information, and the code up to the @ref endtry "%endtry" parse declaration is parsed into the program, allowing for the qore script/program to handle module loading errors at parse time for modules that must be loaded at parse time.\n\n
    A comparison operator (one of <tt>\<, \<=, =, \>=, or \></tt>) and version information can be optionally given after the module name as well. Version numbers are compared via integer comparisons of each element, where elements are separated by a \c ".". If one of the versions does not have as many elements as another, the missing elements are assumed to be \c "0" (i.e. version \c "1.0" compared with version \c "1.0.1" will be extended to \c "1.0.0").  Version errors are handled in the same was as any other module loading error.\n\n
    For example:\n
    @code{.py}
%new-style
%try-module (ex) some_module > 2.0
%define DontHaveSomeModule
    printf("error loading module %y: %s: %s\n", ex.arg, ex.err, ex.desc);
    exit(1);
%endtry

%ifndef DontHaveSomeModule
    some_module_api();
%endif
    @endcode \n
    This will load the \c "some_module" module if it is at least version 2.0, and print an error message and exit gracefully if it cannot be loaded.   Note that in order for the Qore script to be executable and exit gracefully in case the given module cannot be loaded, a parse define must be set in the \c %%try-module block and any code that accesses definitions provided by that module must be wrapped in \c %%ifndef blocks as in the above example.\n\n
    The @ref variable_declarations "variable declaration" in parentheses is optional; use the variant without the exception variable in code where parse option @ref Qore::PO_NO_TOP_LEVEL_STATEMENTS "PO_NO_TOP_LEVEL_STATEMENTS" is set, for example.  In this case, for example, other parse options can be set before the @ref endtry "%endtry" directive.\n\n
    Here is an example without a @ref variable_declarations "variable declaration" in parentheses:\n
    @code{.py}
%new-style
%try-module some_module > 2.0
%define DontHaveSomeModule
%endtry
    @endcode \n
    @note
    - There is one special feature name: \c "qore". This pseudo-feature can be used to check the minimum %Qore version; if this feature is requested with version information, then the %Qore library's version information is used for the version number comparison.
    - No type can be given with the \c %%try-module variable declaration; the value assigned to the variable will be a @ref hash_type "hash".

    @see @ref requires "%requires" for a similar parse directive where errors are handled with the default parse exception handler

    @since %Qore 0.8.6; the variant without the @ref variable_declarations "variable declaration" was introduced in %Qore 0.8.6.1

    <hr>
    @section try-reexport-module %try-reexport-module

    @par Parse Directive:
    <tt>%%try-reexport-module</tt> [(@ref variable_declarations "var_decl")] <em>feature</em> <tt>[\<\|\<=\|=\|\>=\|\></tt> <em>version</em><tt>]</tt>

    @par Command Line:
    n/a

    @par Parse Option Constant:
    n/a

    @par Description:
    Loads a %Qore module immediately; if an error occurs loading the module, then the @ref variable_declarations "variable" declared in parentheses after <tt>%%try-module</tt> is instantiated with the exception information, and the code up to the @ref endtry "%endtry" parse declaration is parsed into the program, allowing for the qore script/program to handle module loading errors at parse time for modules that must be loaded at parse time.\n\n
    A comparison operator (one of <tt>\<, \<=, =, \>=, or \></tt>) and version information can be optionally given after the module name as well. Version numbers are compared via integer comparisons of each element, where elements are separated by a \c ".". If one of the versions does not have as many elements as another, the missing elements are assumed to be \c "0" (i.e. version \c "1.0" compared with version \c "1.0.1" will be extended to \c "1.0.0").  Version errors are handled in the same was as any other module loading error.\n\n
    If the module is successfully loaded in a @ref user_modules "user module", then the module is also reexported to any
    code that requires the importing module.\n\n
    For example:\n
    @code{.py}
%new-style
%try-reexport-module (ex) some_module > 2.0
%define DontHaveSomeModule
    printf("error loading module %y: %s: %s\n", ex.arg, ex.err, ex.desc);
    exit(1);
%endtry

%ifndef DontHaveSomeModule
    some_module_api();
%endif
    @endcode \n
    This will load the \c "some_module" module if it is at least version 2.0, and print an error message and exit gracefully if it cannot be loaded.   Note that in order for the Qore script to be executable and exit gracefully in case the given module cannot be loaded, a parse define must be set in the \c %%try-module block and any code that accesses definitions provided by that module must be wrapped in \c %%ifndef blocks as in the above example.\n\n
    The @ref variable_declarations "variable declaration" in parentheses is optional; use the variant without the exception variable in code where parse option @ref Qore::PO_NO_TOP_LEVEL_STATEMENTS "PO_NO_TOP_LEVEL_STATEMENTS" is set, for example.  In this case, for example, other parse options can be set before the @ref endtry "%endtry" directive.\n\n
    Here is an example without a @ref variable_declarations "variable declaration" in parentheses:\n
    @code{.py}
%new-style
%try-reexport-module some_module > 2.0
%define DontHaveSomeModule
%endtry
    @endcode \n
    @note
    - There is one special feature name: \c "qore". This pseudo-feature can be used to check the minimum %Qore version; if this feature is requested with version information, then the %Qore library's version information is used for the version number comparison.
    - No type can be given with the \c %%try-module variable declaration; the value assigned to the variable will be a @ref hash_type "hash".

    @see
    - @ref try-module "%try-module"
    - @ref requires "%requires" for a similar parse directive where errors are handled with the default parse exception handler

    @since %Qore 0.8.13
*/
