The number of arguments this function can accept. Some functions may be able to accept multiple numbers
of arguments, so this function returns an array. If you return Integer.MAX_VALUE as one of the
items in the array, then any number of arguments may be sent.
Whether or not a function needs to be checked against the permissions file, if there are possible security concerns
with a user compiling, or running this function. If this function returns true, the permissions file will be checked for
commandhelper.func.compile.<function name> upon compilation, and commandhelper.func.use.<function name> upon
usage in game. Note that the config script is never barred from compiling any function.
Whether or not to run this function asynchronously from the main server thread. If you
return true, you may NOT have any interaction with the bukkit api, other than
bukkit thread safe methods. Returning true WILL run this function in the CH thread, returning
false WILL run this function in the main server thread, and returning null will run this
function in whatever context the script is currently running in.
This function is invoked when the script is run. The line number is provided so that if there is an error,
the function can provide a more specific error message for the user. If the function was canceled due to a fatal error
in the syntax of the user input or some similar situation, it should throw a ConfigRuntimeException.
All parameters sent to the
function have already been resolved into an atomic value, so functions do not have to worry about
resolving parameters. There is an explicit check made before calling exec to ensure that Construct ... args
will only be one of the atomic Constructs. If a code tree is needed instead of a resolved construct,
the function should indicate so, and execs will be called instead. If exec is needed,
execs should return CVoid.
It may be that a function can simply check for compile errors, but not
optimize. In this case, it is appropriate to use this definition of
optimizeDynamic, to return a value that will essentially make no changes,
or in the case where it can optimize anyways, even if some values are
undetermined at the moment.