| parrotcode: Lua Package Library | |
| Contents | Language Implementations | Lua |

lib/luapackage.pir - Lua Package Library

The package library provides basic facilities for loading and building modules in Lua.
It exports two of its functions directly in the global environment: require and module.
Everything else is exported in a table package.
See "Lua 5.1 Reference Manual", section 5.3 "Modules".

module (name [, ...])package.loaded[name],
this table is the module.
Otherwise,
if there is a global table t with the given name,
this table is the module.
Otherwise creates a new table t and sets it as the value of the global name and the value of package.loaded[name].
This function also initializes t._NAME with the given name,
t._M with the module (t itself),
and t._PACKAGE with the package name (the full module name minus last component; see below).
Finally,
module sets t as the new environment of the current function and the new value of package.loaded[name],
so that require returns t.name is a compound name (that is,
one with components separated by dots),
module creates (or reuses,
if they already exist) tables for each component.
For instance,
if name is a.b.c,
then module stores the module table in field c of field b of global a.require (modname)package.loaded to determine whether modname is already loaded.
If it is,
then require returns the value stored at package.loaded[modname].
Otherwise,
it tries to find a loader for the module.require queries package.preload[modname].
If it has a value,
this value (which should be a function) is the loader.
Otherwise require searches for a Lua loader using the path stored in package.path.
If that also fails,
it searches for a C loader using the path stored in package.cpath.
If that also fails,
it tries an all-in-one loader (see below).require signals an error.package.cpathrequire to search for a C loader.package.cpath in the same way it initializes the Lua path package.path,
using the environment variable LUA_CPATH (plus another default path).package.loadedrequire to control which modules are already loaded.
When you require a module modname and package.loaded[modname] is not false,
require simply returns the value stored there.package.loadlib (libname, funcname)libname.
Inside this library,
looks for a function funcname and returns this function as a C function.require,
it does not perform any path searching and does not automatically adds extensions.
libname must be the complete file name of the C library,
including if necessary a path and extension.
funcname must be the exact name exported by the C library .package.pathrequire to search for a Lua loader.LUA_PATH or with a default path,
if the environment variable is not defined.
Any ";;" in the value of the environment variable is replaced by the default path.require will change each interrogation mark in the template by filename,
which is modname with each dot replaced by a "directory separator" (such as "/" in Unix); then it will try to load the resulting file name.
So,
for instance,
if the Lua path is "./?.lua;./?.lc;/usr/local/?/init.lua"
foo will try to load the files ./foo.lua, ./foo.lc, and /usr/local/foo/init.lua, in that order.package.preloadrequire).package.seeall (module)module with its __index field referring to the global environment, so that this module inherits values from the global environment. To be used as an option to function module.
|
|
|