From bd80c4ee9b6d9464cf9f3ff4ee41890d8b3ca9e6 Mon Sep 17 00:00:00 2001 From: Lua Team Date: Fri, 9 Sep 2005 12:00:00 +0000 Subject: Lua 5.1-alpha --- doc/manual.html | 5980 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 5980 insertions(+) create mode 100644 doc/manual.html (limited to 'doc/manual.html') diff --git a/doc/manual.html b/doc/manual.html new file mode 100644 index 00000000..b55232bd --- /dev/null +++ b/doc/manual.html @@ -0,0 +1,5980 @@ + + + + +Lua 5.1 Reference Manual + + + + + +
+

+[Lua logo] +Lua 5.1 Reference Manual +

+ +by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes +

+ +Copyright +© 2005 Lua.org, PUC-Rio. All rights reserved. + +


+ +

+

+ + + + +

+

1 - Introduction

+ +

Lua is an extension programming language designed to support +general procedural programming with data description +facilities. +It also offers good support for object-oriented programming, +functional programming, and data-driven programming. +Lua is intended to be used as a powerful, light-weight +configuration language for any program that needs one. +Lua is implemented as a library, written in clean C +(that is, in the common subset of ANSI C and C++). + +

Being an extension language, Lua has no notion of a "main" program: +it only works embedded in a host client, +called the embedding program or simply the host. +This host program can invoke functions to execute a piece of Lua code, +can write and read Lua variables, +and can register C functions to be called by Lua code. +Through the use of C functions, Lua can be augmented to cope with +a wide range of different domains, +thus creating customized programming languages sharing a syntactical framework. + +

The Lua distribution includes a stand-alone embedding program, +lua, that uses the Lua library to offer a complete Lua interpreter. + +

Lua is free software, +and is provided as usual with no guarantees, +as stated in its copyright notice. +The implementation described in this manual is available +at Lua's official web site, www.lua.org. + +

Like any other reference manual, +this document is dry in places. +For a discussion of the decisions behind the design of Lua, +see the papers below, +which are available at Lua's web site. +

+ +

Lua means "moon" in Portuguese and is pronounced LOO-ah. + +

+

2 - The Language

+ +

This section describes the lexis, the syntax, and the semantics of Lua. +In other words, +this section describes +which tokens are valid, +how they can be combined, +and what their combinations mean. + +

The language constructs will be explained using the usual extended BNF, +in which +{a} means 0 or more a's, and +[a] means an optional a. +Non-terminals are shown in italics, +keywords are shown in bold, +and other terminal symbols are shown in typewriter font, +enclosed in single quotes. + +

2.1 - Lexical Conventions

+ +

Names in Lua can be any string of letters, +digits, and underscores, +not beginning with a digit. +This coincides with the definition of names in most languages. +(The definition of letter depends on the current locale: +any character considered alphabetic by the current locale +can be used in an identifier.) + +

The following keywords are reserved +and cannot be used as names: + +

+       and       break     do        else      elseif
+       end       false     for       function  if
+       in        local     nil       not       or
+       repeat    return    then      true      until     while
+
+ +

Lua is a case-sensitive language: +and is a reserved word, but And and AND +are two different, valid names. +As a convention, names starting with an underscore followed by +uppercase letters (such as _VERSION) +are reserved for internal variables used by Lua. + +

The following strings denote other tokens: +

+       +     -     *     /     %     ^     #
+       ==    ~=    <=    >=    <     >     =
+       (     )     {     }     [     ]
+       ;     :     ,     .     ..    ...
+
+ +

Literal strings +can be delimited by matching single or double quotes, +and can contain the following C-like escape sequences: +

+Moreover, a `\newline´ +(that is, a backslash followed by a real newline) +results in a newline in the string. +A character in a string may also be specified by its numerical value +using the escape sequence `\ddd´, +where ddd is a sequence of up to three decimal digits. +Strings in Lua may contain any 8-bit value, including embedded zeros, +which can be specified as `\0´. + +

Literal strings can also be defined using a long format +enclosed by l-brackets (long brackets). +We define an opening l-bracket of level n as an opening +square bracket followed by n equal signs followed by another +opening square bracket. +So, an opening l-bracket of level 0 is written as [[, +an opening l-bracket of level 1 is written as [=[, +and so on. +A closing l-bracket is defined similarly; +for instance, a closing l-bracket of level 4 is written as ]====]. +A long string starts with an opening l-bracket of any level and +ends at the first closing l-bracket of the same level. +Literals in this bracketed form may run for several lines, +do not interpret any escape sequences, +and ignore l-brackets of any other level. + +

For convenience, +when the opening l-bracket is immediately followed by a newline, +the newline is not included in the string. +As an example, in a system using ASCII +(in which `a´ is coded as 97, +newline is coded as 10, and `1´ is coded as 49), +the four literals below denote the same string: +

+      (1)   "alo\n123\""
+      (2)   '\97lo\10\04923"'
+      (3)   [[alo
+            123"]]
+      (4)   [==[
+            alo
+            123"]==]
+
+ +

Numerical constants may be written with an optional decimal part +and an optional decimal exponent. +Examples of valid numerical constants are +

+       3     3.0     3.1416  314.16e-2   0.31416E1
+
+ +

Comments start anywhere outside a string with a +double hyphen (--). +If the text immediately after -- is not an opening l-bracket, +the comment is a short comment, +which runs until the end of the line. +Otherwise, it is a long comment, +which runs until the corresponding closing l-bracket. + +

2.2 - Values and Types

+ +

Lua is a dynamically typed language. +That means that +variables do not have types; only values do. +There are no type definitions in the language. +All values carry their own type. + +

There are eight basic types in Lua: +nil, boolean, number, +string, function, userdata, +thread, and table. +Nil is the type of the value nil, +whose main property is to be different from any other value; +usually it represents the absence of a useful value. +Boolean is the type of the values false and true. +In Lua, both nil and false make a condition false; +any other value makes it true. +Number represents real (double-precision floating-point) numbers. +(It is easy to build Lua interpreters that use other +internal representations for numbers, +such as single-precision float or long integers. +See file luaconf.h.) +String represents arrays of characters. + +Lua is 8-bit clean: +Strings may contain any 8-bit character, +including embedded zeros ('\0') (see 2.1). + +

Functions are first-class values in Lua. +That means that functions can be stored in variables, +passed as arguments to other functions, and returned as results. +Lua can call (and manipulate) functions written in Lua and +functions written in C +(see 2.5.8). + +

The type userdata is provided to allow arbitrary C data to +be stored in Lua variables. +This type corresponds to a block of raw memory +and has no pre-defined operations in Lua, +except assignment and identity test. +However, by using metatables, +the programmer can define operations for userdata values +(see 2.8). +Userdata values cannot be created or modified in Lua, +only through the C API. +This guarantees the integrity of data owned by the host program. + +

The type thread represents independent threads of execution +and it is used to implement coroutines (see 2.11). + +

The type table implements associative arrays, +that is, arrays that can be indexed not only with numbers, +but with any value (except nil). +Moreover, +tables can be heterogeneous, +that is, they can contain values of all types (except nil). +Tables are the sole data structuring mechanism in Lua; +they may be used to represent ordinary arrays, +symbol tables, sets, records, graphs, trees, etc. +To represent records, Lua uses the field name as an index. +The language supports this representation by +providing a.name as syntactic sugar for a["name"]. +There are several convenient ways to create tables in Lua +(see 2.5.7). + +

Like indices, +the value of a table field can be of any type (except nil). +In particular, +because functions are first class values, +table fields may contain functions. +Thus tables may also carry methods (see 2.5.9). + +

Tables, functions, and userdata values are objects: +variables do not actually contain these values, +only references to them. +Assignment, parameter passing, and function returns +always manipulate references to such values; +these operations do not imply any kind of copy. + +

The library function type returns a string describing the type +of a given value. + +

2.2.1 - Coercion

+ +

Lua provides automatic conversion between +string and number values at run time. +Any arithmetic operation applied to a string tries to convert +that string to a number, following the usual rules. +Conversely, whenever a number is used where a string is expected, +the number is converted to a string, in a reasonable format. +For complete control of how numbers are converted to strings, +use the format function from the string library +(see string.format). + +

2.3 - Variables

+ +

Variables are places that store values. + +There are three kinds of variables in Lua: +global variables, local variables, and table fields. + +

A single name can denote a global variable or a local variable +(or a formal parameter of a function, +which is a particular form of local variable): +

+	var ::= Name
+
+Variables are assumed to be global unless explicitly declared local +(see 2.4.7). +Local variables are lexically scoped: +Local variables can be freely accessed by functions +defined inside their scope (see 2.6). + +

Before the first assignment to a variable, its value is nil. + +

Square brackets are used to index a table: +

+	var ::= prefixexp `[´ exp `]´
+
+The first expression (prefixexp) should result in a table value; +the second expression (exp) +identifies a specific entry inside that table. +The expression denoting the table to be indexed has a restricted syntax; +see 2.5 for details. + +

The syntax var.NAME is just syntactic sugar for +var["NAME"]: +

+	var ::= prefixexp `.´ Name
+
+ +

The meaning of accesses to global variables +and table fields can be changed via metatables. +An access to an indexed variable t[i] is equivalent to +a call gettable_event(t,i). +(See 2.8 for a complete description of the +gettable_event function. +This function is not defined or callable in Lua. +We use it here only for explanatory purposes.) + +

All global variables live as fields in ordinary Lua tables, +called environment tables or simply +environments (see 2.9). +Each function has its own reference to an environment, +so that all global variables in that function +will refer to that environment table. +When a function is created, +it inherits the environment from the function that created it. +To replace or get the environment table of a Lua function, +you call setfenv or getfenv. +(You can only manipulate the environment of C functions +through the debug library; (see 5.9).) + +

An access to a global variable x +is equivalent to _env.x, +which in turn is equivalent to +

+       gettable_event(_env, "x")
+
+where _env is the environment of the running function. +(See 2.8 for a complete description of the +gettable_event function. +This function is not defined or callable in Lua. +Similarly, the _env variable is not defined in Lua. +We use them here only for explanatory purposes.) + +

2.4 - Statements

+ +

Lua supports an almost conventional set of statements, +similar to those in Pascal or C. +This set includes +assignment, control structures, procedure calls, +table constructors, and variable declarations. + +

2.4.1 - Chunks

+ +

The unit of execution of Lua is called a chunk. +A chunk is simply a sequence of statements, +which are executed sequentially. +Each statement can be optionally followed by a semicolon: +

+	chunk ::= {stat [`;´]}
+
+ +

Lua handles a chunk as the body of an anonymous function +with a variable number of arguments +(see 2.5.9). +As such, chunks can define local variables, +receive arguments, and return values. + +

A chunk may be stored in a file or in a string inside the host program. +When a chunk is executed, first it is pre-compiled into opcodes for +a virtual machine, +and then the compiled code is executed +by an interpreter for the virtual machine. + +

Chunks may also be pre-compiled into binary form; +see program luac for details. +Programs in source and compiled forms are interchangeable; +Lua automatically detects the file type and acts accordingly. + + +

2.4.2 - Blocks

+A block is a list of statements; +syntactically, a block is equal to a chunk: +
+	block ::= chunk
+
+ +

A block may be explicitly delimited to produce a single statement: +

+	stat ::= do block end
+
+Explicit blocks are useful +to control the scope of variable declarations. +Explicit blocks are also sometimes used to +add a return or break statement in the middle +of another block (see 2.4.4). + + +

2.4.3 - Assignment

+ +

Lua allows multiple assignment. +Therefore, the syntax for assignment +defines a list of variables on the left side +and a list of expressions on the right side. +The elements in both lists are separated by commas: +

+	stat ::= varlist1 `=´ explist1
+	varlist1 ::= var {`,´ var}
+	explist1 ::= exp {`,´ exp}
+
+Expressions are discussed in 2.5. + +

Before the assignment, +the list of values is adjusted to the length of +the list of variables. +If there are more values than needed, +the excess values are thrown away. +If there are fewer values than needed, +the list is extended with as many nil's as needed. +If the list of expressions ends with a function call, +then all values returned by that function call enter in the list of values, +before the adjustment +(except when the call is enclosed in parentheses; see 2.5). + +

The assignment statement first evaluates all its expressions +and only then are the assignments performed. +Thus the code +

+       i = 3
+       i, a[i] = i+1, 20
+
+sets a[3] to 20, without affecting a[4] +because the i in a[i] is evaluated (to 3) +before it is assigned 4. +Similarly, the line +
+       x, y = y, x
+
+exchanges the values of x and y. + +

The meaning of assignments to global variables +and table fields can be changed via metatables. +An assignment to an indexed variable t[i] = val is equivalent to +settable_event(t,i,val). +(See 2.8 for a complete description of the +settable_event function. +This function is not defined or callable in Lua. +We use it here only for explanatory purposes.) + +

An assignment to a global variable x = val +is equivalent to the assignment +_env.x = val, +which in turn is equivalent to +

+       settable_event(_env, "x", val)
+
+where _env is the environment of the running function. +(The _env variable is not defined in Lua. +We use it here only for explanatory purposes.) + +

2.4.4 - Control Structures

+The control structures +if, while, and repeat have the usual meaning and +familiar syntax: + + + +
+	stat ::= while exp do block end
+	stat ::= repeat block until exp
+	stat ::= if exp then block {elseif exp then block} [else block] end
+
+Lua also has a for statement, in two flavors (see 2.4.5). + +

The condition expression exp of a +control structure may return any value. +Both false and nil are considered false. +All values different from nil and false are considered true +(in particular, the number 0 and the empty string are also true). + +

In the repeatuntil loop, +the inner block does not end at the until keyword, +but only after the condition. +That means the condition can refer to local variables +declared inside the loop. + +

The return statement is used to return values +from a function or from a chunk. + +Functions and chunks may return more than one value, +so the syntax for the return statement is +

+	stat ::= return [explist1]
+
+ +

The break statement can be used to terminate the execution of a +while, repeat, or for loop, +skipping to the next statement after the loop: + +

+	stat ::= break
+
+A break ends the innermost enclosing loop. + +

For syntactic reasons, return and break +statements can only be written as the last statement of a block. +If it is really necessary to return or break in the +middle of a block, +then an explicit inner block can be used, +as in the idioms +`do return end´ and +`do break end´, +because now return and break are the last statements in +their (inner) blocks. + +

2.4.5 - For Statement

+ +

The for statement has two forms: +one numeric and one generic. + + +

The numeric for loop repeats a block of code while a +control variable runs through an arithmetic progression. +It has the following syntax: +

+	stat ::= for Name `=´ exp `,´ exp [`,´ exp] do block end
+
+The block is repeated for name starting at the value of +the first exp, until it passes the second exp by steps of the +third exp. +More precisely, a for statement like +
+       for var = e1, e2, e3 do block end
+
+is equivalent to the code: +
+       do
+         local _var, _limit, _step = tonumber(e1), tonumber(e2), tonumber(e3)
+         if not (_var and _limit and _step) then error() end
+         while (_step>0 and _var<=_limit) or (_step<=0 and _var>=_limit) do
+           local var = _var
+           block
+           _var = _var + _step
+         end
+       end
+
+Note the following: + + +

The generic for statement works over functions, +called iterators. +For each iteration, it calls its iterator function to produce a new value, +stopping when the new value is nil. +The generic for loop has the following syntax: +

+	stat ::= for Name {`,´ Name} in explist1 do block end
+
+A for statement like +
+       for var_1, ..., var_n in explist do block end
+
+is equivalent to the code: +
+       do
+         local _f, _s, _var = explist
+         while true do
+           local var_1, ... , var_n = _f(_s, _var)
+           _var = var_1
+           if _var == nil then break end
+           block
+         end
+       end
+
+Note the following: + + +

2.4.6 - Function Calls as Statements

+To allow possible side-effects, +function calls can be executed as statements: +
+	stat ::= functioncall
+
+In this case, all returned values are thrown away. +Function calls are explained in 2.5.8. + +

2.4.7 - Local Declarations

+Local variables may be declared anywhere inside a block. +The declaration may include an initial assignment: +
+	stat ::= local namelist [`=´ explist1]
+	namelist ::= Name {`,´ Name}
+
+If present, an initial assignment has the same semantics +of a multiple assignment (see 2.4.3). +Otherwise, all variables are initialized with nil. + +

A chunk is also a block (see 2.4.1), +so local variables can be declared in a chunk outside any explicit block. +The scope of such local variables extends until the end of the chunk. + +

The visibility rules for local variables are explained in 2.6. + +

2.5 - Expressions

+ +

+The basic expressions in Lua are the following: +

+	exp ::= prefixexp
+	exp ::= nil | false | true
+	exp ::= Number
+	exp ::= Literal
+	exp ::= function
+	exp ::= tableconstructor
+	exp ::= `...´
+	exp ::= exp binop exp
+	exp ::= unop exp
+	prefixexp ::= var | functioncall | `(´ exp `)´
+
+ +

Numbers and literal strings are explained in 2.1; +variables are explained in 2.3; +function definitions are explained in 2.5.9; +function calls are explained in 2.5.8; +table constructors are explained in 2.5.7. +Vararg expressions, +denoted by three dots (...), can only be used inside +vararg functions; +they are explained in 2.5.9. + + +

Binary operators comprise arithmetic operators (see 2.5.1), +relational operators (see 2.5.2), and logical operators (see 2.5.3). +Unary operators comprise the unary minus (see 2.5.1), +the unary not (see 2.5.3), +and the unary length operator (see 2.5.5). + +

Both function calls and vararg expressions may result in multiple values. +If the expression is used as a statement (see 2.4.6) +(only possible for function calls), +then its return list is adjusted to zero elements, +thus discarding all returned values. +If the expression is used inside another expression +or in the middle of a list of expressions, +then its result list is adjusted to one element, +thus discarding all values except the first one. +If the expression is used as the last element of a list of expressions, +then no adjustment is made, +unless the call is enclosed in parentheses. + +

Here are some examples: +

+       f()                -- adjusted to 0 results
+       g(f(), x)          -- f() is adjusted to 1 result
+       g(x, f())          -- g gets x plus all values returned by f()
+       a,b,c = f(), x     -- f() is adjusted to 1 result (c gets nil)
+       a,b = ...          -- a gets the first vararg parameter, b gets
+                          -- the second (both a and b may get nil if there is
+                          -- no corresponding vararg parameter)
+       a,b,c = x, f()     -- f() is adjusted to 2 results
+       a,b,c = f()        -- f() is adjusted to 3 results
+       return f()         -- returns all values returned by f()
+       return ...         -- returns all received vararg parameters
+       return x,y,f()     -- returns x, y, and all values returned by f()
+       {f()}              -- creates a list with all values returned by f()
+       {...}              -- creates a list with all vararg parameters
+       {f(), nil}         -- f() is adjusted to 1 result
+
+ +

An expression enclosed in parentheses always results in only one value. +Thus, +(f(x,y,z)) is always a single value, +even if f returns several values. +(The value of (f(x,y,z)) is the first value returned by f +or nil if f does not return any values.) + +

2.5.1 - Arithmetic Operators

+Lua supports the usual arithmetic operators: +the binary + (addition), +- (subtraction), * (multiplication), +/ (division), % (modulus), and ^ (exponentiation); +and unary - (negation). +If the operands are numbers, or strings that can be converted to +numbers (see 2.2.1), +then all operations have the usual meaning. +Exponentiation works for any exponent. +For instance, x^-0.5 computes the inverse of the square root of x. +Modulus is defined as +
+  a % b == a - math.floor(a/b)*b
+
+That is, it is the remaining of a division that rounds +the quotient towards minus infinity. + +

2.5.2 - Relational Operators

+The relational operators in Lua are +
+       ==    ~=    <     >     <=    >=
+
+These operators always result in false or true. + +

Equality (==) first compares the type of its operands. +If the types are different, then the result is false. +Otherwise, the values of the operands are compared. +Numbers and strings are compared in the usual way. +Objects (tables, userdata, threads, and functions) +are compared by reference: +Two objects are considered equal only if they are the same object. +Every time you create a new object (a table, userdata, or function), +this new object is different from any previously existing object. + +

You can change the way that Lua compares tables and userdata +using the "eq" metamethod (see 2.8). + +

The conversion rules of 2.2.1 +do not apply to equality comparisons. +Thus, "0"==0 evaluates to false, +and t[0] and t["0"] denote different +entries in a table. + + +

The operator ~= is exactly the negation of equality (==). + +

The order operators work as follows. +If both arguments are numbers, then they are compared as such. +Otherwise, if both arguments are strings, +then their values are compared according to the current locale. +Otherwise, Lua tries to call the "lt" or the "le" +metamethod (see 2.8). + +

2.5.3 - Logical Operators

+The logical operators in Lua are + +
+       and   or    not
+
+Like the control structures (see 2.4.4), +all logical operators consider both false and nil as false +and anything else as true. + + +

The operator not always returns false or true. + +

The conjunction operator and returns its first argument +if this value is false or nil; +otherwise, and returns its second argument. +The disjunction operator or returns its first argument +if this value is different from nil and false; +otherwise, or returns its second argument. +Both and and or use short-cut evaluation, +that is, +the second operand is evaluated only if necessary. +For example, +

+       10 or error()       -> 10
+       nil or "a"          -> "a"
+       nil and 10          -> nil
+       false and error()   -> false
+       false and nil       -> false
+       false or nil        -> nil
+       10 and 20           -> 20
+
+ +

2.5.4 - Concatenation

+The string concatenation operator in Lua is +denoted by two dots (`..´). +If both operands are strings or numbers, then they are converted to +strings according to the rules mentioned in 2.2.1. +Otherwise, the "concat" metamethod is called (see 2.8). + +

2.5.5 - The Length Operator

+ +

The length operator is denoted by the prefix #. +The length of a string is its number of bytes +(that is, the usual meaning of string length when each +character is one byte). +The length of a table t is defined to be any +integer index n +such that t[n] is not nil and t[n+1] is nil; +moreover, if t[1] is nil, n may be zero. + +

For a regular array, with non-nil values from 1 to a given n, +its length is exactly that n, +the index of its last value. +If the array has "holes" +(that is, nil values between other non-nil values), +then #t may be any of the indices that precede a nil value +(that is, it may consider any such nil value as the end of +the array). + +

2.5.6 - Precedence

+Operator precedence in Lua follows the table below, +from lower to higher priority: +
+       or
+       and
+       <     >     <=    >=    ~=    ==
+       ..
+       +     -
+       *     /     %
+       not   #     - (unary)
+       ^
+
+You can use parentheses to change the precedences of an expression. +The concatenation (`..´) and exponentiation (`^´) +operators are right associative. +All other binary operators are left associative. + +

2.5.7 - Table Constructors

+Table constructors are expressions that create tables. +Every time a constructor is evaluated, a new table is created. +Constructors can be used to create empty tables, +or to create a table and initialize some of its fields. +The general syntax for constructors is +
+	tableconstructor ::= `{´ [fieldlist] `}´
+	fieldlist ::= field {fieldsep field} [fieldsep]
+	field ::= `[´ exp `]´ `=´ exp | Name `=´ exp | exp
+	fieldsep ::= `,´ | `;´
+
+ +

Each field of the form [exp1] = exp2 adds to the new table an entry +with key exp1 and value exp2. +A field of the form name = exp is equivalent to +["name"] = exp. +Finally, fields of the form exp are equivalent to +[i] = exp, where i are consecutive numerical integers, +starting with 1. +Fields in the other formats do not affect this counting. +For example, +

+       a = {[f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45}
+
+is equivalent to +
+       do
+         local temp = {}
+         temp[f(1)] = g
+         temp[1] = "x"         -- 1st exp
+         temp[2] = "y"         -- 2nd exp
+         temp.x = 1            -- temp["x"] = 1
+         temp[3] = f(x)        -- 3rd exp
+         temp[30] = 23
+         temp[4] = 45          -- 4th exp
+         a = temp
+       end
+
+ +

If the last field in the list has the form exp +and the expression is a function call or a vararg expression, +then all values returned by that expression enter the list consecutively +(see 2.5.8). +To avoid this, +enclose the function call (or the vararg expression) +in parentheses (see 2.5). + +

The field list may have an optional trailing separator, +as a convenience for machine-generated code. + +

2.5.8 - Function Calls

+A function call in Lua has the following syntax: +
+	functioncall ::= prefixexp args
+
+In a function call, +first prefixexp and args are evaluated. +If the value of prefixexp has type function, +then that function is called +with the given arguments. +Otherwise, its "call" metamethod is called, +having as first parameter the value of prefixexp, +followed by the original call arguments +(see 2.8). + +

The form +

+	functioncall ::= prefixexp `:´ Name args
+
+can be used to call "methods". +A call v:name(...) +is syntactic sugar for v.name(v,...), +except that v is evaluated only once. + +

Arguments have the following syntax: +

+	args ::= `(´ [explist1] `)´
+	args ::= tableconstructor
+	args ::= Literal
+
+All argument expressions are evaluated before the call. +A call of the form f{...} is syntactic sugar for +f({...}), that is, +the argument list is a single new table. +A call of the form f'...' +(or f"..." or f[[...]]) is syntactic sugar for +f('...'), that is, +the argument list is a single literal string. + +

As an exception to the free-format syntax of Lua, +you cannot put a line break before the `(´ in a function call. +That restriction avoids some ambiguities in the language. +If you write +

+       a = f
+       (g).x(a)
+
+Lua would read that as a = f(g).x(a). +So, if you want two statements, you must add a semi-colon between them. +If you actually want to call f, +you must remove the line break before (g). + +

A call of the form return functioncall is called +a tail call. +Lua implements proper tail calls +(or proper tail recursion): +In a tail call, +the called function reuses the stack entry of the calling function. +Therefore, there is no limit on the number of nested tail calls that +a program can execute. +However, a tail call erases any debug information about the +calling function. +Note that a tail call only happens with a particular syntax, +where the return has one single function call as argument; +this syntax makes the calling function returns exactly +the returns of the called function. +So, all the following examples are not tail calls: +

+  return (f(x))        -- results adjusted to 1
+  return 2 * f(x)
+  return x, f(x)       -- additional results
+  f(x); return         -- results discarded
+  return x or f(x)     -- results adjusted to 1
+
+ +

2.5.9 - Function Definitions

+ +

The syntax for function definition is +

+	function ::= function funcbody
+	funcbody ::= `(´ [parlist1] `)´ block end
+
+ +

The following syntactic sugar simplifies function definitions: +

+	stat ::= function funcname funcbody
+	stat ::= local function Name funcbody
+	funcname ::= Name {`.´ Name} [`:´ Name]
+
+The statement +
+       function f () ... end
+
+translates to +
+       f = function () ... end
+
+The statement +
+       function t.a.b.c.f () ... end
+
+translates to +
+       t.a.b.c.f = function () ... end
+
+The statement +
+       local function f () ... end
+
+translates to +
+       local f; f = function () ... end
+
+ +

A function definition is an executable expression, +whose value has type function. +When Lua pre-compiles a chunk, +all its function bodies are pre-compiled too. +Then, whenever Lua executes the function definition, +the function is instantiated (or closed). +This function instance (or closure) +is the final value of the expression. +Different instances of the same function +may refer to different external local variables +and may have different environment tables. + +

Parameters act as local variables that are +initialized with the argument values: +

+	parlist1 ::= namelist [`,´ `...´] | `...´
+
+When a function is called, +the list of arguments is adjusted to +the length of the list of parameters, +unless the function is a variadic or vararg function, +which is +indicated by three dots (`...´) at the end of its parameter list. +A vararg function does not adjust its argument list; +instead, it collects all extra arguments and supplies them +to the function through a vararg expression, +which is also written as three dots. +The value of this expression is a list of all actual extra arguments, +similar to a function with multiple results. +If a vararg expression is used inside another expression +or in the middle of a list of expressions, +then its return list is adjusted to one element. +If the expression is used as the last element of a list of expressions, +then no adjustment is made +(unless the call is enclosed in parentheses). + +

As an example, consider the following definitions: +

+       function f(a, b) end
+       function g(a, b, ...) end
+       function r() return 1,2,3 end
+
+Then, we have the following mapping from arguments to parameters and +to the vararg expression: +
+       CALL            PARAMETERS
+
+       f(3)             a=3, b=nil
+       f(3, 4)          a=3, b=4
+       f(3, 4, 5)       a=3, b=4
+       f(r(), 10)       a=1, b=10
+       f(r())           a=1, b=2
+
+       g(3)             a=3, b=nil, ... ->  (nothing)
+       g(3, 4)          a=3, b=4,   ... ->  (nothing)
+       g(3, 4, 5, 8)    a=3, b=4,   ... ->  5  8
+       g(5, r())        a=5, b=1,   ... ->  2  3
+
+ +

Results are returned using the return statement (see 2.4.4). +If control reaches the end of a function +without encountering a return statement, +then the function returns with no results. + +

The colon syntax +is used for defining methods, +that is, functions that have an implicit extra parameter self. +Thus, the statement +

+       function t.a.b.c:f (...) ... end
+
+is syntactic sugar for +
+       t.a.b.c.f = function (self, ...) ... end
+
+ +

2.6 - Visibility Rules

+ + +

Lua is a lexically scoped language. +The scope of variables begins at the first statement after +their declaration and lasts until the end of the innermost block that +includes the declaration. +For instance: +

+  x = 10                -- global variable
+  do                    -- new block
+    local x = x         -- new `x', with value 10
+    print(x)            --> 10
+    x = x+1
+    do                  -- another block
+      local x = x+1     -- another `x'
+      print(x)          --> 12
+    end
+    print(x)            --> 11
+  end
+  print(x)              --> 10  (the global one)
+
+Notice that, in a declaration like local x = x, +the new x being declared is not in scope yet, +and so the second x refers to the outside variable. + +

Because of the lexical scoping rules, +local variables can be freely accessed by functions +defined inside their scope. +For instance: +

+  local counter = 0
+  function inc (x)
+    counter = counter + x
+    return counter
+  end
+
+A local variable used by an inner function is called +an upvalue, or external local variable, +inside the inner function. + +

Notice that each execution of a local statement +defines new local variables. +Consider the following example: +

+  a = {}
+  local x = 20
+  for i=1,10 do
+    local y = 0
+    a[i] = function () y=y+1; return x+y end
+  end
+
+The loop creates ten closures +(that is, ten instances of the anonymous function). +Each of these closures uses a different y variable, +while all of them share the same x. + +

2.7 - Error Handling

+ +

Because Lua is an extension language, +all Lua actions start from C code in the host program +calling a function from the Lua library (see ). +Whenever an error occurs during Lua compilation or execution, +control returns to C, +which can take appropriate measures +(such as print an error message). + +

Lua code can explicitly generate an error by calling the +error function. +If you need to catch errors in Lua, +you can use the pcall function. + +

2.8 - Metatables

+ +

Every value in Lua may have a metatable. +This metatable is an ordinary Lua table +that defines the behavior of the original value +under certain special operations. +You can change several aspects of the behavior +of operations over a value by setting specific fields in its metatable. +For instance, when a non-numeric value is the operand of an addition, +Lua checks for a function in the field "__add" in its metatable. +If it finds one, +Lua calls that function to perform the addition. + +

We call the keys in a metatable events +and the values metamethods. +In the previous example, the event is "add" +and the metamethod is the function that performs the addition. + +

You can query the metatable of any value +through the getmetatable function. + +

You can replace the metatable of tables +through the setmetatable +function. +You cannot change the metatable of other types from Lua +(except using the debug library); +you must use the C API for that. + +

Tables and userdata have individual metatables +(although multiple tables and userdata can share +a same table as their metatable); +values of all other types share one single metatable per type. +So, there is one single metatable for all numbers, +and for all strings, etc. + +

A metatable may control how an object behaves in arithmetic operations, +order comparisons, concatenation, and indexing. +A metatable can also define a function to be called when a userdata +is garbage collected. +For each of those operations Lua associates a specific key +called an event. +When Lua performs one of those operations over a value, +it checks whether that value has a metatable with the corresponding event. +If so, the value associated with that key (the metamethod) +controls how Lua will perform the operation. + +

Metatables control the operations listed next. +Each operation is identified by its corresponding name. +The key for each operation is a string with its name prefixed by +two underscores; +for instance, the key for operation "add" is the +string "__add". +The semantics of these operations is better explained by a Lua function +describing how the interpreter executes that operation. + +

The code shown here in Lua is only illustrative; +the real behavior is hard coded in the interpreter +and it is much more efficient than this simulation. +All functions used in these descriptions +(rawget, tonumber, etc.) +are described in 5.1. +In particular, to retrieve the metamethod of a given object, +we use the expression +

+  metatable(obj)[event]
+
+This should be read as +
+  rawget(metatable(obj) or {}, event)
+
+That is, the access to a metamethod does not invoke other metamethods, +and the access to objects with no metatables does not fail +(it simply results in nil). + +

+ +

2.9 - Environments

+ +

Besides metatables, +objects of types thread, function, and userdata +have another table associated with them, +called environment. +Like metatables, environments are regular tables and +multiple objects can share the same environment. + +

Environments associated with userdata has no meaning for Lua. +It is only a feature for programmers to associate a table to +a userdata. + +

Environments associated with threads are called +global environments. +They are used as the default environment for threads and +non-nested functions created by that thread +(through loadfile, loadstring or load) +and can be directly accessed by C code (see 3.3). + +

Environments associated with C functions can be directly +accessed by C code (see 3.3). +They are used as the default environment for other C functions +created by that function. + +

Environments associated with Lua functions are used to resolve +all accesses to global variables within that function (see 2.3). +They are used as the default environment for other Lua functions +created by that function. + +

You can change the environment of a Lua function of the +running thread calling setfenv. +You can get the environment of a Lua function or the running thread +calling getfenv. +To manipulate the environment of other objects +(userdata, C functions, other threads) you must +use the C API. + +

2.10 - Garbage Collection

+ +

Lua does automatic memory management. +That means that +you do not have to worry about allocating memory for new objects +and freeing it when the objects are no longer needed. +Lua manages memory automatically by running +a garbage collector from time to time +to collect all dead objects +(that is, those objects that are no longer accessible from Lua). +All objects in Lua are subject to automatic management: +tables, userdata, functions, threads, and strings. + +

Lua 5.1 implements an incremental mark-and-sweep collector. +It uses two numbers to control its garbage-collection cycles. +One number, the garbage-collector pause, +controls how long the collector waits before starting a new cycle. +Larger values make the collector less aggressive. +Values smaller than 1 mean the collector will not wait to +start a new cycle. +A value of 2 means that the collector waits more or less to double +the total memory in use before starting a new cycle. + +

The other number, the garbage-collector multiplier, +controls the relative speed of the collector relative to +memory allocation. +Larger values make the collector more aggressive but also increases +the size of each incremental step. +Values smaller than 1 make the collector too slow and +may result in the collector never finishing a cycle. +The default, 2, means that the collector runs at "twice" +the speed of memory allocation. + +

You can change those numbers calling lua_gc in C +or collectgarbage in Lua. +Both get as arguments percentage points +(so an argument 100 means a real value of 1). +With those functions you can also get direct control +of the collector (e.g., stop and restart it). + +

2.10.1 - Garbage-Collection Metamethods

+ +

Using the C API, +you can set garbage-collector metamethods for userdata (see 2.8). +These metamethods are also called finalizers. +Finalizers allow you to coordinate Lua's garbage collection +with external resource management +(such as closing files, network or database connections, +or freeing your own memory). + +

Free userdata with a field __gc in their metatables are not +collected immediately by the garbage collector. +Instead, Lua puts them in a list. +After the collection, +Lua does the equivalent of the following function +for each userdata in that list: +

+ function gc_event (udata)
+   local h = metatable(udata).__gc
+   if h then
+     h(udata)
+   end
+ end
+
+ +

At the end of each garbage-collection cycle, +the finalizers for userdata are called in reverse +order of their creation, +among those collected in that cycle. +That is, the first finalizer to be called is the one associated +with the userdata created last in the program. + +

2.10.2 - Weak Tables

+ +

A weak table is a table whose elements are +weak references. +A weak reference is ignored by the garbage collector. +In other words, +if the only references to an object are weak references, +then the garbage collector will collect that object. + +

A weak table can have weak keys, weak values, or both. +A table with weak keys allows the collection of its keys, +but prevents the collection of its values. +A table with both weak keys and weak values allows the collection of +both keys and values. +In any case, if either the key or the value is collected, +the whole pair is removed from the table. +The weakness of a table is controlled by the value of the +__mode field of its metatable. +If the __mode field is a string containing the character `k´, +the keys in the table are weak. +If __mode contains `v´, +the values in the table are weak. + +

After you use a table as a metatable, +you should not change the value of its field __mode. +Otherwise, the weak behavior of the tables controlled by this +metatable is undefined. + +

2.11 - Coroutines

+ +

Lua supports coroutines, +also called collaborative multithreading. +A coroutine in Lua represents an independent thread of execution. +Unlike threads in multithread systems, however, +a coroutine only suspends its execution by explicitly calling +a yield function. + +

You create a coroutine with a call to coroutine.create. +Its sole argument is a function +that is the main function of the coroutine. +The create function only creates a new coroutine and +returns a handle to it (an object of type thread); +it does not start the coroutine execution. + +

When you first call coroutine.resume, +passing as its first argument +the thread returned by coroutine.create, +the coroutine starts its execution, +at the first line of its main function. +Extra arguments passed to coroutine.resume are given as +parameters for the coroutine main function. +After the coroutine starts running, +it runs until it terminates or yields. + +

A coroutine can terminate its execution in two ways: +Normally, when its main function returns +(explicitly or implicitly, after the last instruction); +and abnormally, if there is an unprotected error. +In the first case, coroutine.resume returns true, +plus any values returned by the coroutine main function. +In case of errors, coroutine.resume returns false +plus an error message. + +

A coroutine yields by calling coroutine.yield. +When a coroutine yields, +the corresponding coroutine.resume returns immediately, +even if the yield happens inside nested function calls +(that is, not in the main function, +but in a function directly or indirectly called by the main function). +In the case of a yield, coroutine.resume also returns true, +plus any values passed to coroutine.yield. +The next time you resume the same coroutine, +it continues its execution from the point where it yielded, +with the call to coroutine.yield returning any extra +arguments passed to coroutine.resume. + +

The coroutine.wrap function creates a coroutine +like coroutine.create, +but instead of returning the coroutine itself, +it returns a function that, when called, resumes the coroutine. +Any arguments passed to that function +go as extra arguments to resume. +The function returns all the values returned by resume, +except the first one (the boolean error code). +Unlike coroutine.resume, +this function does not catch errors; +any error is propagated to the caller. + +

As an example, +consider the next code: +

+function foo1 (a)
+  print("foo", a)
+  return coroutine.yield(2*a)
+end
+
+co = coroutine.create(function (a,b)
+      print("co-body", a, b)
+      local r = foo1(a+1)
+      print("co-body", r)
+      local r, s = coroutine.yield(a+b, a-b)
+      print("co-body", r, s)
+      return b, "end"
+end)
+       
+a, b = coroutine.resume(co, 1, 10)
+print("main", a, b)
+a, b, c = coroutine.resume(co, "r")
+print("main", a, b, c)
+a, b, c = coroutine.resume(co, "x", "y")
+print("main", a, b, c)
+a, b = coroutine.resume(co, "x", "y")
+print("main", a, b)
+
+When you run it, it produces the following output: +
+co-body 1       10
+foo     2
+main    true    4
+co-body r
+main    true    11      -9
+co-body x       y
+main    true    10      end
+main    false   cannot resume dead coroutine
+
+ +

+

3 - The Application Program Interface

+ + +

This section describes the C API for Lua, that is, +the set of C functions available to the host program to communicate +with Lua. +All API functions and related types and constants +are declared in the header file lua.h. + +

Even when we use the term "function", +any facility in the API may be provided as a macro instead. +All such macros use each of its arguments exactly once +(except for the first argument, which is always a Lua state), +and so do not generate hidden side-effects. + +

Like in most C libraries, +the Lua API functions do not check their arguments. +However, you can change this behavior by compiling Lua +with a proper definition for the macro luai_apicheck, +in file luaconf.h. + +

3.1 - The Stack

+ +

Lua uses a virtual stack to pass values to and from C. +Each element in this stack represents a Lua value +(nil, number, string, etc.). + +

Whenever Lua calls C, the called function gets a new stack, +which is independent of previous stacks and of stacks of +C functions that are still active. +That stack initially contains any arguments to the C function, +and it is where the C function pushes its results +to be returned to the caller (see lua_CFunction). + +

For convenience, +most query operations in the API do not follow a strict stack discipline. +Instead, they can refer to any element in the stack +by using an index: +A positive index represents an absolute stack position +(starting at 1); +a negative index represents an offset from the top of the stack. +More specifically, if the stack has n elements, +then index 1 represents the first element +(that is, the element that was pushed onto the stack first) +and +index n represents the last element; +index -1 also represents the last element +(that is, the element at the top) +and index -n represents the first element. +We say that an index is valid +if it lies between 1 and the stack top +(that is, if 1 <= abs(index) <= top). + + +

3.2 - Stack Size

+ +

When you interact with Lua API, +you are responsible for controlling stack overflow. +You can use the function lua_checkstack +to grow the stack size. + +

Whenever Lua calls C, +it ensures that at least LUA_MINSTACK stack positions are available. +LUA_MINSTACK is defined as 20, +so that usually you do not have to worry about stack space +unless your code has loops pushing elements onto the stack. + +

Most query functions accept as indices any value inside the +available stack space, that is, indices up to the maximum stack size +you have set through lua_checkstack. +Such indices are called acceptable indices. +More formally, we define an acceptable index +as follows: +

+     (index < 0 && abs(index) <= top) || (index > 0 && index <= stackspace)
+
+Note that 0 is never an acceptable index. + +

3.3 - Pseudo-Indices

+ +

Unless otherwise noted, +any function that accepts valid indices can also be called with +pseudo-indices, +which represent some Lua values that are accessible to the C code +but are not in the stack. +Pseudo-indices are used to access the thread environment, +the function environment, +the registry, +and the upvalues of a C function (see 3.4). + +

The thread environment (where global variables live) is +always at pseudo-index LUA_GLOBALSINDEX. +The environment of the running C function is always +at pseudo-index LUA_ENVIRONINDEX. + +

To access and change the value of global variables, +you can use regular table operations over an environment table. +For instance, to access the value of a global variable, do +

+       lua_getfield(L, LUA_GLOBALSINDEX, varname);
+
+ +

3.4 - C Closures

+ +

When a C function is created, +it is possible to associate some values with it, +thus creating a C closure; +these values are then accessible to the function whenever it is called +(see lua_pushcclosure). + +

Whenever a C function is called, +its associated values are located at specific pseudo-indices. +Those pseudo-indices are produced by the macro +lua_upvalueindex. +The first value associated with a function is at position +lua_upvalueindex(1), and so on. +Any access to lua_upvalueindex(n), +where n is greater than the number of upvalues of the +current function, +produces an acceptable (but invalid) index. + +

3.5 - Registry

+ +

Lua provides a registry, +a pre-defined table that can be used by any C code to +store whatever Lua value it needs to store. +This table is always located at pseudo-index +LUA_REGISTRYINDEX. +Any C library can store data into this table, +as long as it chooses keys different from other libraries. +Typically, you should use as key a string containing your library name +or a light userdata with the address of a C object in your code. + +

The integer keys in the registry are used by the reference mechanism, +implemented by the auxiliary library, +and therefore should not be used by other purposes. + +

3.6 - Error Handling in C

+ +

Internally, Lua uses the C longjmp facility to handle errors. +When Lua faces any error +(such as memory allocation errors, type errors, syntax errors) +it raises an error, that is, it does a long jump. +A protected environment uses setjmp +to set a recover point; +any error jumps to the most recent active recover point. + +

Almost any function in the API may raise an error, +for instance due to a memory allocation error. +The following functions run in protected mode +(that is, they create a protected environment to run), +so they never raise an error: +lua_newstate, lua_close, lua_load, +lua_pcall, and lua_cpcall. + +

Inside a C function you can raise an error calling lua_error. + +

3.7 - Functions and Types

+ +

Here we list all functions and types from the C API in +alphabetical order. + +

+


lua_Alloc

+
+          typedef void * (*lua_Alloc) (void *ud,
+                                       void *ptr,
+                                       size_t osize,
+                                       size_t nsize);
+
+
+ + +

The allocator function used by Lua states. +The allocator function must provide a +functionality similar to realloc, +but not exactly the same. +Its arguments are ud, +the opaque pointer passed to lua_newstate; +ptr, a pointer to the block being allocated/reallocated/freed; +osize, the original size of the block; +nsize, the new size of the block. +ptr is NULL if and only if osize is zero. +When nsize is zero, the allocator must return NULL; +if osize is not zero, +it should free the block pointed by ptr. +When nsize is not zero, the allocator returns NULL +if and only if it cannot fill the request. +When nsize is not zero and osize is zero, +the allocator behaves like malloc. +When nsize and osize are not zero, +the allocator behaves like realloc. +Lua assumes that the allocator never fails when +osize >= nsize. + +

A simple implementation for the allocator function could be like this: +

+static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
+  (void)ud;     /* not used */
+  (void)osize;  /* not used */
+  if (nsize == 0) {
+    free(ptr);  /* ANSI ensures that free(NULL) has no effect */
+    return NULL;
+  }
+  else
+    /* ANSI ensures that realloc(NULL, size) == malloc(size) */
+    return realloc(ptr, nsize);
+}
+
+ +

+


lua_atpanic

+
+          lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf);
+
+ + +

Sets a new panic function and returns the old one. + +

If an error happens outside any protected environment, +Lua calls a panic function +and then calls exit(EXIT_FAILURE). +Your new panic function may avoid the application exit by +never returning (e.g., doing a long jump). + +

The panic function can access the error message at the top of the stack. + +

+


lua_call

+
+          void lua_call (lua_State *L, int nargs, int nresults);
+
+ + +

Calls a function. + +

To call a function you must use the following protocol: +First, the function to be called is pushed onto the stack; +then, the arguments to the function are pushed +in direct order, that is, the first argument is pushed first. +Finally you call lua_call; +nargs is the number of arguments that you pushed onto the stack. +All arguments and the function value are popped from the stack, +and the function results are pushed. +The number of results are adjusted to nresults, +unless nresults is LUA_MULTRET. +In that case, all results from the function are pushed. +Lua takes care that the returned values fit into the stack space. +The function results are pushed onto the stack in direct order +(the first result is pushed first), +so that after the call the last result is on the top. + +

Any error inside the called function is propagated upwards +(with a longjmp). + +

The following example shows how the host program may do the +equivalent to this Lua code: +

+       a = f("how", t.x, 14)
+
+Here it is in C: +
+    lua_getfield(L, LUA_GLOBALSINDEX, "t");     /* global `t' (for later use) */
+    lua_getfield(L, LUA_GLOBALSINDEX, "f");          /* function to be called */
+    lua_pushstring(L, "how");                                 /* 1st argument */
+    lua_getfield(L, -3, "x");                 /* push result of t.x (2nd arg) */
+    lua_pushinteger(L, 14);                                   /* 3rd argument */
+    lua_call(L, 3, 1);         /* call function with 3 arguments and 1 result */
+    lua_setfield(L, LUA_GLOBALSINDEX, "a");        /* set global variable `a' */
+    lua_pop(L, 1);                               /* remove `t' from the stack */
+
+Note that the code above is "balanced": +at its end, the stack is back to its original configuration. +This is considered good programming practice. + +

+


lua_CFunction

+
+          typedef int (*lua_CFunction) (lua_State *L);
+
+ + +

Type for C functions. + +

In order to communicate properly with Lua, +a C function must follow the following protocol, +which defines the way parameters and results are passed: +A C function receives its arguments from Lua in its stack +in direct order (the first argument is pushed first). +So, when the function starts, +its first argument (if any) is at index 1. +To return values to Lua, a C function just pushes them onto the stack, +in direct order (the first result is pushed first), +and returns the number of results. +Any other value in the stack below the results will be properly +discharged by Lua. +Like a Lua function, a C function called by Lua can also return +many results. + +

As an example, the following function receives a variable number +of numerical arguments and returns their average and sum: +

+       static int foo (lua_State *L) {
+         int n = lua_gettop(L);    /* number of arguments */
+         lua_Number sum = 0;
+         int i;
+         for (i = 1; i <= n; i++) {
+           if (!lua_isnumber(L, i)) {
+             lua_pushstring(L, "incorrect argument to function `average'");
+             lua_error(L);
+           }
+           sum += lua_tonumber(L, i);
+         }
+         lua_pushnumber(L, sum/n);        /* first result */
+         lua_pushnumber(L, sum);         /* second result */
+         return 2;                   /* number of results */
+       }
+
+ +

+


lua_checkstack

+
+          int lua_checkstack (lua_State *L, int extra);
+
+ + +

Grows the stack size to top + extra elements; +it returns false if it cannot grow the stack to that size. +This function never shrinks the stack; +if the stack is already larger than the new size, +it is left unchanged. + +

+


lua_close

+
+          void lua_close (lua_State *L);
+
+ + +

Destroys all objects in the given Lua state +(calling the corresponding garbage-collection metamethods, if any) +and frees all dynamic memory used by that state. +On several platforms, you may not need to call this function, +because all resources are naturally released when the host program ends. +On the other hand, long-running programs, +such as a daemon or a web server, +might need to release states as soon as they are not needed, +to avoid growing too large. + +

+


lua_concat

+
+          void lua_concat (lua_State *L, int n);
+
+ + +

Concatenates the n values at the top of the stack, +pops them, and leaves the result at the top. +If n is 1, the result is that single string +(that is, the function does nothing); +if n is 0, the result is the empty string. +Concatenation is done following the usual semantics of Lua +(see 2.5.4). + +

+


lua_cpcall

+
+          int lua_cpcall (lua_State *L, lua_CFunction func, void *ud);
+
+ + +

Calls the C function func in protected mode. +func starts with only one element in its stack, +a light userdata containing ud. +In case of errors, +lua_cpcall returns the same error codes as lua_pcall, +plus the error object on the top of the stack; +otherwise, it returns zero, and does not change the stack. +Any value returned by func is discarded. + +

+


lua_createtable

+
+          void lua_createtable (lua_State *L, int narr, int nrec);
+
+ + +

Creates a new empty table and pushes it onto the stack. +The new table has space pre-allocated +for narr array elements plus nrec non-array elements. +This pre-allocation is useful when you know exactly how many elements +the table will have. +Otherwise you can use the function lua_newtable. + +

+


lua_dump

+
+          int lua_dump (lua_State *L, lua_Writer writer, void *data);
+
+ + +

Dumps a function as a binary chunk. +This function receives a Lua function on the top of the stack +and produces a binary chunk that, +if loaded again, +results in a function equivalent to the one dumped. +As it produces parts of the chunk, +lua_dump calls function writer (see lua_Writer) +to write them. + +

The value returned is the error code returned by the last +call to the writer; +0 means no errors. + +

This function does not pop the function from the stack. + +

+


lua_equal

+
+          int lua_equal (lua_State *L, int index1, int index2);
+
+ + +

Returns 1 if the two values in acceptable indices index1 and +index2 are equal, +following the semantics of the Lua = operator +(that is, may call metamethods). +Otherwise returns 0. +Also returns 0 if any of the indices are non valid. + +

+


lua_error

+
+          int lua_error (lua_State *L);
+
+ + +

Generates a Lua error. +The error message (which actually can be any type of object) +must be on the stack top. +This function does a long jump, +and therefore never returns. + +

+


lua_gc

+
+          int lua_gc (lua_State *L, int what, int data);
+
+ + +

Controls the garbage collector. + +

This function performs several tasks, +according to the value of the parameter what: +

+ +

+


lua_getallocf

+
+          lua_Alloc lua_getallocf (lua_State *L, void **ud);
+
+ + +

Returns the allocator function of a given state. +If ud is not NULL Lua stores in *ud the +opaque pointer passed to lua_newstate. + +

+


lua_getfenv

+
+          void lua_getfenv (lua_State *L, int index);
+
+ + +

Pushes on the stack the environment table of +the value at the given index. + +

+


lua_getfield

+
+          void lua_getfield (lua_State *L, int index, const char *k);
+
+ + +

Pushes onto the stack the value t[k], +where t is the value at the given valid index index. +As in Lua, this function may trigger a metamethod +for the "index" event (see 2.8). + +

+


lua_getmetatable

+
+          int lua_getmetatable (lua_State *L, int index);
+
+ + +

Pushes onto the stack the metatable of the value at the given +acceptable index. +If the index is not valid, +or if the value does not have a metatable, +returns 0 and pushes nothing on the stack. + +

+


lua_gettable

+
+          void lua_gettable (lua_State *L, int index);
+
+ + +

Pushes onto the stack the value t[k], +where t is the value at the given valid index index +and k is the value at the top of the stack. + +

This function pops the key from the stack +(putting the resulting value in its place). +As in Lua, this function may trigger a metamethod +for the "index" event (see 2.8). + +

+


lua_gettop

+
+          int lua_gettop (lua_State *L);
+
+ + +

Returns the index of the top element in the stack. +Because indices start at 1, +that result is equal to the number of elements in the stack +(and so 0 means an empty stack). + +

+


lua_insert

+
+          void lua_insert (lua_State *L, int index);
+
+ + +

Moves the top element into the given valid index, +shifting up the elements above that position to open space. +Cannot be called with a pseudo-index, +because a pseudo-index is not an actual stack position. + +

+


lua_Integer

+
+          typedef ptrdiff_t lua_Integer;
+
+ + +

The type used by the Lua API to represent integral values. + +

By default it is a ptrdiff_t, +which is usually the largest type the machine handles +"comfortably". + +

+


lua_isboolean

+
+          int lua_isboolean (lua_State *L, int index);
+
+ + +

Returns 1 if the value at the given acceptable index has type boolean, +and 0 otherwise. + +

+


lua_iscfunction

+
+          int lua_iscfunction (lua_State *L, int index);
+
+ + +

Returns 1 if the value at the given acceptable index is a C function, +and 0 otherwise. + +

+


lua_isfunction

+
+          int lua_isfunction (lua_State *L, int index);
+
+ + +

Returns 1 if the value at the given acceptable index is a function +(either C or Lua), and 0 otherwise. + +

+


lua_islightuserdata

+
+          int lua_islightuserdata (lua_State *L, int index);
+
+ + +

Returns 1 if the value at the given acceptable index is a light userdata, +and 0 otherwise. + +

+


lua_isnil

+
+          int lua_isnil (lua_State *L, int index);
+
+ + +

Returns 1 if the value at the given acceptable index is nil, +and 0 otherwise. + +

+


lua_isnumber

+
+          int lua_isnumber (lua_State *L, int index);
+
+ + +

Returns 1 if the value at the given acceptable index is a number +or a string convertible to a number, +and 0 otherwise. + +

+


lua_isstring

+
+          int lua_isstring (lua_State *L, int index);
+
+ + +

Returns 1 if the value at the given acceptable index is a string +or a number (which is always convertible to a string), +and 0 otherwise. + +

+


lua_istable

+
+          int lua_istable (lua_State *L, int index);
+
+ + +

Returns 1 if the value at the given acceptable index is a table, +and 0 otherwise. + +

+


lua_isthread

+
+          int lua_isthread (lua_State *L, int index);
+
+ + +

Returns 1 if the value at the given acceptable index is a thread, +and 0 otherwise. + +

+


lua_isuserdata

+
+          int lua_isuserdata (lua_State *L, int index);
+
+ + +

Returns 1 if the value at the given acceptable index is a userdata +(either full or light), and 0 otherwise. + +

+


lua_lessthan

+
+          int lua_lessthan (lua_State *L, int index1, int index2);
+
+ + +

Returns 1 if the value in acceptable index index1 is smaller +than the value in acceptable index index2, +following the semantics of the Lua < operator +(that is, may call metamethods). +Otherwise returns 0. +Also returns 0 if any of the indices are non valid. + +

+


lua_load

+
+          int lua_load (lua_State *L, lua_Reader reader, void *data,
+                                      const char *chunkname);
+
+
+ + +

Loads a Lua chunk. +If there are no errors, +lua_load pushes the compiled chunk as a Lua +function on top of the stack. +Otherwise, it pushes an error message. +The return values of lua_load are: +

+ +

lua_load automatically detects whether the chunk is text or binary, +and loads it accordingly (see program luac). + +

lua_load uses a user-supplied reader function to read the chunk +(see lua_Reader). +The data argument is an opaque value passed to the reader function. + +

The chunkname argument gives the chunk name. +It is used for error messages and debug information (see 3.8). + +

+


lua_newstate

+
+          lua_State *lua_newstate (lua_Alloc f, void *ud);
+
+ + +

Creates a new, independent state. +Returns NULL if cannot create the state +(not enough memory). +The argument f is the allocator function; +Lua does all memory allocation for that state through that function. +The second argument, ud, is an opaque pointer that Lua +simply passes to the allocator in every call. + +

+


lua_newtable

+
+          void lua_newtable (lua_State *L);
+
+ + +

Creates a new empty table and pushes it onto the stack. +Equivalent to lua_createtable(L, 0, 0). + +

+


lua_newthread

+
+          lua_State *lua_newthread (lua_State *L);
+
+ + +

Creates a new thread, pushes it on the stack, +and returns a pointer to a lua_State that represents this new thread. +The new state returned by this function shares with the original state +all global objects (such as tables), +but has an independent run-time stack. + +

There is no explicit function to close or to destroy a thread. +Threads are subject to garbage collection, +like any Lua object. + +

+


lua_newuserdata

+
+          void *lua_newuserdata (lua_State *L, size_t size);
+
+ + +

This function allocates a new block of memory with the given size, +pushes on the stack a new full userdata with the block address, +and returns this address. + +

Userdata represents C values in Lua. +A full userdata represents a block of memory. +It is an object (like a table): +You must create it, it can have its own metatable, +and you can detect when it is being collected. +A full userdata is only equal to itself (under raw equality). + +

When Lua collects a full userdata, +it calls the userdata's gc metamethod, if any, +and then it frees the userdata's corresponding memory. + +

+


lua_next

+
+          int lua_next (lua_State *L, int index);
+
+ + +

Pops a key from the stack, +and pushes a key-value pair from the table +(the "next" pair after the given key). +If there are no more elements, +then lua_next returns 0 (and pushes nothing). + +

A typical traversal looks like this: +

+       /* table is in the stack at index `t' */
+       lua_pushnil(L);  /* first key */
+       while (lua_next(L, t) != 0) {
+         /* `key' is at index -2 and `value' at index -1 */
+         printf("%s - %s\n",
+           lua_typename(L, lua_type(L, -2)), lua_typename(L, lua_type(L, -1)));
+         lua_pop(L, 1);  /* removes `value'; keeps `key' for next iteration */
+       }
+
+ +

While traversing a table, +do not call lua_tolstring directly on a key, +unless you know that the key is actually a string. +Recall that lua_tolstring changes +the value at the given index; +this confuses the next call to lua_next. + +

+


lua_Number

+
+          typedef double lua_Number;
+
+ + +

The type of numbers in Lua. + +

Through the configuration file you can change +Lua to operate with other type for numbers (e.g., float or long). + +

+


lua_objlen

+
+          size_t lua_objlen (lua_State *L, int index);
+
+ + +

Returns the "length" of the value at the given acceptable index: +For strings, this is the string length; +for tables, this is the result of the length operator (`#´). +for userdata, this is the size of the block of memory allocated +for the userdatum. +For other values, returns 0. + +

+


lua_pcall

+
+          lua_pcall (lua_State *L, int nargs, int nresults, int errfunc);
+
+ + +

Calls a function in protected mode. + +

Both nargs and nresults have the same meaning as +in lua_call. +If there are no errors during the call, +lua_pcall behaves exactly like lua_call. +However, if there is any error, +lua_pcall catches it, +pushes a single value on the stack (the error message), +and returns an error code. +Like lua_call, +lua_pcall always removes the function +and its arguments from the stack. + +

If errfunc is 0, +then the error message returned is exactly the original error message. +Otherwise, errfunc is the stack index of an +error handler function. +(In the current implementation, that index cannot be a pseudo-index.) +In case of runtime errors, +that function will be called with the error message +and its return value will be the message returned by lua_pcall. + +

Typically, the error handler function is used to add more debug +information to the error message, such as a stack traceback. +Such information cannot be gathered after the return of lua_pcall, +since by then the stack has unwound. + +

The lua_pcall function returns 0 in case of success +or one of the following error codes +(defined in lua.h): +

+ +

+


lua_pop

+
+          void lua_pop (lua_State *L, int n);
+
+ + +

Pops n elements from the stack. + +

+


lua_pushboolean

+
+          void lua_pushboolean (lua_State *L, int b);
+
+ + +

Pushes a boolean value with value b onto the stack. + +

+


lua_pushcclosure

+
+          void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);
+
+ + +

Pushes a new C closure onto the stack. + +

When a C function is created, +it is possible to associate some values with it, +thus creating a C closure (see 3.4); +these values are then accessible to the function whenever it is called. +To associate values with a C function, +first these values should be pushed onto the stack +(when there are multiple values, the first value is pushed first). +Then the function lua_pushcclosure +is used to create and push the C function onto the stack, +with the argument n telling how many values should be +associated with the function. +lua_pushcclosure also pops these values from the stack. + +

+


lua_pushcfunction

+
+          void lua_pushcfunction (lua_State *L, lua_CFunction f);
+
+ + +

Pushes a C function onto the stack. +This function is equivalent to lua_pushcclosure(L, f, 0);. + +

+


lua_pushfstring

+
+          const char *lua_pushfstring (lua_State *L, const char *fmt, ...);
+
+ + +

Pushes onto the stack a formatted string +and returns a pointer to that string. +It is similar to the C function sprintf +but with some important differences: +

+ +

+


lua_pushinteger

+
+          void lua_pushinteger (lua_State *L, lua_Integer n);
+
+ + +

Pushes a number with value n onto the stack. + +

+


lua_pushlightuserdata

+
+          void lua_pushlightuserdata (lua_State *L, void *p);
+
+ + +

Pushes a light userdata onto the stack. + +

Userdata represents C values in Lua. +A light userdata represents a pointer. +It is a value (like a number): +You do not create it, it has no metatables, +it is not collected (as it was never created). +A light userdata is equal to "any" +light userdata with the same C address. + +

+


lua_pushlstring

+
+          void lua_pushlstring (lua_State *L, const char *s, size_t len);
+
+ + +

Pushes the string pointed by s with size len +onto the stack. +Lua makes (or reuses) an internal copy of the given string, +so the memory at s can be freed or reused immediately after +the function returns. + +

+


lua_pushnil

+
+          void lua_pushnil (lua_State *L);
+
+ + +

Pushes a nil value onto the stack. + +

+


lua_pushnumber

+
+          void lua_pushnumber (lua_State *L, lua_Number n);
+
+ + +

Pushes a number with value n onto the stack. + +

+


lua_pushstring

+
+          void lua_pushstring (lua_State *L, const char *s);
+
+ + +

Pushes the zero-terminated string pointed by s +onto the stack. +Lua makes (or reuses) an internal copy of the given string, +so the memory at s can be freed or reused immediately after +the function returns. + +

+


lua_pushvalue

+
+          void lua_pushvalue (lua_State *L, int index);
+
+ + +

Pushes a copy of the element at the given valid index +onto the stack. + +

+


lua_pushvfstring

+
+          const char *lua_pushvfstring (lua_State *L, const char *fmt, va_list argp);
+
+ + +

Equivalent to lua_pushfstring, except that it receives a va_list +instead of a variable number of arguments. + +

+


lua_rawequal

+
+          int lua_rawequal (lua_State *L, int index1, int index2);
+
+ + +

Returns 1 if the two values in acceptable indices index1 and +index2 are primitively equal +(that is, without calling metamethods). +Otherwise returns 0. +Also returns 0 if any of the indices are non valid. + +

+


lua_rawget

+
+          void lua_rawget (lua_State *L, int index);
+
+ + +

Similar to lua_gettable, but doing a raw indexing +(i.e., without metamethods). + +

+


lua_rawgeti

+
+          void lua_rawgeti (lua_State *L, int index, int n);
+
+ + +

Pushes onto the stack the value t[n], +where t is the value at the given valid index index. +The access is raw, +that is, it does not invoke metamethods. + +

+


lua_rawset

+
+          void lua_rawset (lua_State *L, int index);
+
+ + +

Similar to lua_settable, but doing a raw assignment +(i.e., without metamethods). + +

+


lua_rawseti

+
+          void lua_rawseti (lua_State *L, int index, int n);
+
+ + +

Does the equivalent to t[n] = v, +where t is the value at the given valid index index +and v is the value at the top of the stack, + +

This function pops the value from the stack. +The assignment is raw, +that is, it does not invoke metamethods. + +

+


lua_Reader

+
+          typedef const char * (*lua_Reader)
+                               (lua_State *L, void *data, size_t *size);
+
+
+ + +

The reader function used by lua_load. +Every time it needs another piece of the chunk, +lua_load calls the reader, +passing along its data parameter. +The reader must return a pointer to a block of memory +with a new piece of the chunk +and set size to the block size. +To signal the end of the chunk, the reader returns NULL. +The reader function may return pieces of any size greater than zero. + +

+


lua_remove

+
+          void lua_remove (lua_State *L, int index);
+
+ + +

Removes the element at the given valid index, +shifting down the elements above that position to fill the gap. +Cannot be called with a pseudo-index, +because a pseudo-index is not an actual stack position. + +

+


lua_replace

+
+          void lua_replace (lua_State *L, int index);
+
+ + +

Moves the top element into the given position (and pops it), +without shifting any element +(therefore replacing the value at the given position). + +

+


lua_resume

+
+          int lua_resume (lua_State *L, int narg);
+
+ + +

Starts and resumes a coroutine in a given thread. + +

To start a coroutine, you first create a new thread +(see lua_newthread); +then you push on its stack the body function plus any eventual arguments; +then you call lua_resume, +with narg being the number of arguments. +This call returns when the coroutine suspends or finishes its execution. +When it returns, the stack contains all values passed to lua_yield, +or all values returned by the body function. +lua_resume returns 0 if there are no errors running the coroutine, +or an error code (see lua_pcall). +In case of errors, +the stack is not unwound, +so you can use the debug API over it; +The error message is on the top of the stack. +To restart a coroutine, you put on its stack only the values to +be passed as results from yield, +and then call lua_resume. + +

+


lua_setfenv

+
+          int lua_setfenv (lua_State *L, int index);
+
+ + +

Pops a table from the stack and sets it as +the new environment for the value at the given index. +If the value at the given index is +neither a function nor a thread nor a userdata, +lua_setfenv returns 0 (false). + +

+


lua_setfield

+
+          void lua_setfield (lua_State *L, int index, const char *k);
+
+ + +

Does the equivalent to t[k] = v, +where t is the value at the given valid index index +and v is the value at the top of the stack, + +

This function pops the value from the stack. +As in Lua, this function may trigger a metamethod +for the "newindex" event (see 2.8). + +

+


lua_setmetatable

+
+          int lua_setmetatable (lua_State *L, int index);
+
+ + +

Pops a table from the stack and +sets it as the new metatable for the value at the given +acceptable index. + +

+


lua_settable

+
+          void lua_settable (lua_State *L, int index);
+
+ + +

Does the equivalent to t[k] = v, +where t is the value at the given valid index index, +v is the value at the top of the stack, +and k is the value just below the top. + +

This function pops both the key and the value from the stack. +As in Lua, this function may trigger a metamethod +for the "newindex" event (see 2.8). + +

+


lua_settop

+
+          void lua_settop (lua_State *L, int index);
+
+ + +

Accepts any acceptable index, or 0, +and sets the stack top to that index. +If the new top is larger than the old one, +then the new elements are filled with nil. +If index is 0, then all stack elements are removed. + +

+


lua_State

+
+          typedef struct lua_State lua_State;
+
+ + +

Opaque structure that keeps the whole state of a Lua interpreter. +The Lua library is fully reentrant: +it has no global variables. +All information about a state is kept in this structure. + +

A pointer to this state must be passed as the first argument to +every function in the library, except to lua_newstate, +which creates a Lua state from scratch. + +

+


lua_toboolean

+
+          int lua_toboolean (lua_State *L, int index);
+
+ + +

Converts the Lua value at the given acceptable index to a C boolean +value ((0 or 1). +Like all tests in Lua, +lua_toboolean returns 1 for any Lua value +different from false and nil; +otherwise it returns 0. +It also returns 0 when called with a non-valid index. +(If you want to accept only real boolean values, +use lua_isboolean to test the value's type.) + +

+


lua_tocfunction

+
+          lua_CFunction lua_tocfunction (lua_State *L, int index);
+
+ + +

Converts a value at the given acceptable index to a C function. +That value must be a C function; +otherwise, returns NULL. + +

+


lua_tointeger

+
+          lua_Integer lua_tointeger (lua_State *L, int idx);
+
+ + +

Converts the Lua value at the given acceptable index +to the signed integral type lua_Integer. +The Lua value must be a number or a string convertible to number +(see 2.2.1); +otherwise, lua_tointeger returns 0. + +

If the number is not an integer, +it is truncated in some non-specified way. + +

+


lua_tolstring

+
+          const char *lua_tolstring (lua_State *L, int index, size_t *len);
+
+ + +

Converts the Lua value at the given acceptable index to a string +(const char*). +If len is not NULL, +it also sets *len with the string length. +The Lua value must be a string or a number; +otherwise, the function returns NULL. +If the value is a number, +then lua_tolstring also +changes the actual value in the stack to a string. +(This change confuses lua_next +when lua_tolstring is applied to keys.) + +

lua_tolstring returns a fully aligned pointer +to a string inside the Lua state. +This string always has a zero ('\0') +after its last character (as in C), +but may contain other zeros in its body. +Because Lua has garbage collection, +there is no guarantee that the pointer returned by lua_tolstring +will be valid after the corresponding value is removed from the stack. + +

+


lua_tonumber

+
+          lua_Number lua_tonumber (lua_State *L, int index);
+
+ + +

Converts the Lua value at the given acceptable index +to a number (see lua_Number). +The Lua value must be a number or a string convertible to number +(see 2.2.1); +otherwise, lua_tonumber returns 0. + +

+


lua_topointer

+
+          const void *lua_topointer (lua_State *L, int index);
+
+ + +

Converts the value at the given acceptable index to a generic +C pointer (void *). +The value may be a userdata, a table, a thread, or a function; +otherwise, lua_topointer returns NULL. +Lua ensures that different objects return different pointers. +There is no direct way to convert the pointer back to its original value. + +

Typically this function is used for debug information. + +

+


lua_tostring

+
+          const char *lua_tostring (lua_State *L, int index);
+
+ + +

Equivalent to lua_tolstring with len equal to NULL. + +

+


lua_tothread

+
+          lua_State *lua_tothread (lua_State *L, int index);
+
+ + +

Converts the value at the given acceptable index to a Lua thread +(represented as lua_State *). +This value must be a thread; +otherwise, the function returns NULL. + +

+


lua_touserdata

+
+          void *lua_touserdata (lua_State *L, int index);
+
+ + +

If the value at the given acceptable index is a full userdata, +returns its block address. +If the value is a light userdata, +returns its pointer. +Otherwise, returns NULL. + +

+


lua_type

+
+          int lua_type (lua_State *L, int index);
+
+ + +

Returns the type of a value in the given acceptable index, +or LUA_TNONE for a non-valid index +(that is, an index to an "empty" stack position). +The types returned by lua_type are coded by the following constants +defined in lua.h: +LUA_TNIL, +LUA_TNUMBER, +LUA_TBOOLEAN, +LUA_TSTRING, +LUA_TTABLE, +LUA_TFUNCTION, +LUA_TUSERDATA, +LUA_TTHREAD, +LUA_TLIGHTUSERDATA. + +

+


lua_Writer

+
+          typedef int (*lua_Writer)
+                          (lua_State *L, const void* p, size_t sz, void* ud);
+
+
+ + +

The writer function used by lua_dump. +Every time it produces another piece of chunk, +lua_dump calls the writer, +passing along the buffer to be written (p), +its size (sz), +and the data parameter supplied to lua_dump. + +

The writer returns an error code: +0 means no errors; +any other value means an error and stops lua_dump from +calling the writer again. + +

+


lua_xmove

+
+          void lua_xmove (lua_State *from, lua_State *to, int n);
+
+ + +

Exchange values between different threads of the same global state. + +

This function pops n values from the stack from, +and pushes them into the stack to. + +

+


lua_yield

+
+          int lua_yield  (lua_State *L, int nresults);
+
+ + +

Yields a coroutine. + +

This function can only be called as the +return expression of a C function, as follows: +

+       return lua_yield (L, nresults);
+
+When a C function calls lua_yield in that way, +the running coroutine suspends its execution, +and the call to lua_resume that started this coroutine returns. +The parameter nresults is the number of values from the stack +that are passed as results to lua_resume. + +

+

3.8 - The Debug Interface

+ +

Lua has no built-in debugging facilities. +Instead, it offers a special interface +by means of functions and hooks. +This interface allows the construction of different +kinds of debuggers, profilers, and other tools +that need "inside information" from the interpreter. + +

+


lua_Debug

+
+          typedef struct lua_Debug {
+            int event;
+            const char *name;      /* (n) */
+            const char *namewhat;  /* (n) */
+            const char *what;      /* (S) */
+            const char *source;    /* (S) */
+            int currentline;       /* (l) */
+            int nups;              /* (u) number of upvalues */
+            int linedefined;       /* (S) */
+            int lastlinedefined;   /* (S) */
+            char short_src[LUA_IDSIZE]; /* (S) */
+
+

/* private part */ + ... + } lua_Debug; + +

+ + +

A structure used to carry different pieces of +information about an active function. +lua_getstack fills only the private part +of this structure, for later use. +To fill the other fields of lua_Debug with useful information, +call lua_getinfo. + +

The fields of lua_Debug have the following meaning: +

+ +

+


lua_gethook

+
+          lua_Hook lua_gethook (lua_State *L);
+
+ + +

Returns the current hook function. + +

+


lua_gethookcount

+
+          int lua_gethookcount (lua_State *L);
+
+ + +

Returns the current hook count. + +

+


lua_gethookmask

+
+          int lua_gethookmask (lua_State *L);
+
+ + +

Returns the current hook mask. + +

+


lua_getinfo

+
+          int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);
+
+ + +

Fills the fields of lua_Debug with useful information. + +

This function returns 0 on error +(for instance, an invalid option in what). +Each character in the string what +selects some fields of the structure ar to be filled, +as indicated by the letter in parentheses in the definition of lua_Debug: +`S´ fills in the fields source, linedefined, +lastlinedefined, +and what; +`l´ fills in the field currentline, etc. +Moreover, `f´ pushes onto the stack the function that is +running at the given level. + +

To get information about a function that is not active +(that is, not in the stack), +you push it onto the stack +and start the what string with the character `>´. +For instance, to know in which line a function f was defined, +you can write the following code: +

+       lua_Debug ar;
+       lua_getfield(L, LUA_GLOBALSINDEX, "f");  /* get global `f' */
+       lua_getinfo(L, ">S", &ar);
+       printf("%d\n", ar.linedefined);
+
+ +

+


lua_getlocal

+
+          const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n);
+
+ + +

Gets information about a local variable of a given activation record. +The parameter ar must be a valid activation record that was +filled by a previous call to lua_getstack or +given as argument to a hook (see lua_Hook). +The index n selects which local variable to inspect +(1 is the first parameter or active local variable, and so on, +until the last active local variable). +lua_getlocal pushes the variable's value onto the stack, +and returns its name. + +

Returns NULL (and pushes nothing) +when the index is greater than +the number of active local variables. + +

+


lua_getstack

+
+          int lua_getstack (lua_State *L, int level, lua_Debug *ar);
+
+ + +

Get information about the interpreter runtime stack. + +

This function fills parts of a lua_Debug structure with +an identification of the activation record +of the function executing at a given level. +Level 0 is the current running function, +whereas level n+1 is the function that has called level n. +When there are no errors, lua_getstack returns 1; +when called with a level greater than the stack depth, +it returns 0. + +

+


lua_getupvalue

+
+          const char *lua_getupvalue (lua_State *L, int funcindex, int n);
+
+ + +

Gets information about a closure's upvalue. +(For Lua functions, +upvalues are the external local variables that the function uses, +and that consequently are included in its closure.) +lua_getupvalue gets the index n of an upvalue, +pushes the upvalue's value onto the stack, +and returns its name. +funcindex points to the closure in the stack. +(Upvalues have no particular order, +as they are active through the whole function.) + +

Returns NULL (and pushes nothing) +when the index is greater than the number of upvalues. +For C functions, this function uses the empty string "" +as a name for all upvalues. + +

+


lua_Hook

+
+          typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
+
+ + +

Type for debugging hook functions. + +

Whenever a hook is called, its ar argument has its field +event set to the specific event that triggered the hook. +Lua identifies these events with the following constants: +LUA_HOOKCALL, LUA_HOOKRET, +LUA_HOOKTAILRET, LUA_HOOKLINE, +and LUA_HOOKCOUNT. +Moreover, for line events, the field currentline is also set. +To get the value of any other field in ar, +the hook must call lua_getinfo. +For return events, event may be LUA_HOOKRET, +the normal value, or LUA_HOOKTAILRET. +In the latter case, Lua is simulating a return from +a function that did a tail call; +in this case, it is useless to call lua_getinfo. + +

While Lua is running a hook, it disables other calls to hooks. +Therefore, if a hook calls back Lua to execute a function or a chunk, +that execution occurs without any calls to hooks. + +

+


lua_sethook

+
+          int lua_sethook (lua_State *L, lua_Hook func, int mask, int count);
+
+ + +

Sets the debugging hook function. + +

func is the hook function. +mask specifies on which events the hook will be called: +It is formed by a disjunction of the constants +LUA_MASKCALL, +LUA_MASKRET, +LUA_MASKLINE, +and LUA_MASKCOUNT. +The count argument is only meaningful when the mask +includes LUA_MASKCOUNT. +For each event, the hook is called as explained below: +

+ +

A hook is disabled by setting mask to zero. + +

+


lua_setlocal

+
+          const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n);
+
+ + +

Sets the value of a local variable of a given activation record. +Parameters ar and n are like in lua_getlocal +(see ). +lua_setlocal assigns the value at the top of the stack +to the variable and returns its name. +It also pops the value from the stack. + +

Returns NULL (and pops nothing) +when the index is greater than +the number of active local variables. + +

+


lua_setupvalue

+
+          const char *lua_setupvalue (lua_State *L, int funcindex, int n);
+
+ + +

Sets the value of a closure's upvalue. +Parameters funcindex and n are like in lua_getupvalue +(see ). +It assigns the value at the top of the stack +to the upvalue and returns its name. +It also pops the value from the stack. + +

Returns NULL (and pops nothing) +when the index is greater than the number of upvalues. + +

+

4 - The Auxiliary Library

+ +

+The auxiliary library provides several convenient functions +to interface C with Lua. +While the basic API provides the primitive functions for all +interactions between C and Lua, +the auxiliary library provides higher-level functions for some +common tasks. + +

All functions from the auxiliary library +are defined in header file lauxlib.h and +have a prefix luaL_. + +

All functions in the auxiliary library are build on +top of the basic API, so they provide nothing that cannot +be done with that API. + +

Several functions in the auxiliary library are used to +check C function arguments. +Their names are always luaL_check* or luaL_opt*. +All those functions raise an error if the check is not satisfied. +Because the error message is formatted for arguments +(e.g., "bad argument #1"), +you should not use those functions for other stack values. + +

4.1 - Functions and Types

+ +

Here we list all functions and types from the auxiliary library +in alphabetical order. + +

+


luaL_addchar

+
+          void luaL_addchar (luaL_Buffer B, char c);
+
+ + +

Adds the character c to the buffer B +(see luaL_Buffer). + +

+


luaL_addlstring

+
+          void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l);
+
+ + +

Adds the string pointed by s with length l to +the buffer B +(see luaL_Buffer). + +

+


luaL_addsize

+
+          void luaL_addsize (luaL_Buffer B, size_t n);
+
+ + +

Adds a string of length n previously copied to the +buffer area (see luaL_prepbuffer) to the buffer B +(see luaL_Buffer). + +

+


luaL_addstring

+
+          void luaL_addstring (luaL_Buffer *B, const char *s);
+
+ + +

Adds the zero-terminated string pointed by s +to the buffer B +(see luaL_Buffer). + +

+


luaL_addvalue

+
+          void luaL_addvalue (luaL_Buffer *B);
+
+ + +

Adds the value at the top of the stack +to the buffer B +(see luaL_Buffer). +Pops the value. + +

This is the only function on string buffers that can (and must) +be called with an extra element on the stack, +which is the value to be added to the buffer. + +

+


luaL_argcheck

+
+          void luaL_argcheck (lua_State *L, int cond, int numarg,
+                              const char *extramsg);
+
+ + +

Checks whether cond is true. +If not, raise an error with message +"bad argument #<numarg> to <func> (<extramsg>)", +where func is retrieved from the call stack. + +

+


luaL_argerror

+
+          int luaL_argerror (lua_State *L, int numarg, const char *extramsg);
+
+ + +

Raises an error with message +"bad argument #<numarg> to <func> (<extramsg>)", +where func is retrieved from the call stack. + +

This function never returns. + +

+


luaL_Buffer

+
+          typedef struct luaL_Buffer luaL_Buffer;
+
+ + +

Type for a string buffer. + +

A string buffer allows C code to build Lua strings piecemeal. +Its pattern of use is as follows: +

+ +

During its normal operation a string buffer uses a +variable number of stack slots. +So, while using a buffer, you cannot assume that you know where +is the top of the stack. +You can use the stack between successive calls to buffer operations, +as long as that use is balanced, that is, +when you call a buffer operation the stack is at the same level +it was immediately after the previous buffer operation. +(The only exception to this rule is luaL_addvalue.) +After calling luaL_pushresult the stack is back to its +level when the buffer was initialized, +plus the final string on its top. + +

+


luaL_buffinit

+
+          void luaL_buffinit (lua_State *L, luaL_Buffer *B);
+
+ + +

Initializes a buffer B. +This function does not allocate any space; +the buffer must be declared as a variable +(see luaL_Buffer). + +

+


luaL_callmeta

+
+          int luaL_callmeta (lua_State *L, int obj, const char *e);
+
+ + +

Calls a metamethod. + +

If the object at index obj has a metatable and that +metatable has a field e, +calls that field passing the object as argument. +In that case the function returns 1 and pushes on the +stack the value returned by the call. +If there is no metatable or no metamethod returns 0 +(without pushing any value on the stack). + +

+


luaL_checkany

+
+          void luaL_checkany (lua_State *L, int narg);
+
+ + +

Checks whether the function has an argument narg. + +

+


luaL_checkint

+
+          int luaL_checkint (lua_State *L, int narg);
+
+ + +

Checks whether the function argument narg is a number +and returns that number casted to an int. + +

+


luaL_checkinteger

+
+          lua_Integer luaL_checkinteger (lua_State *L, int numArg);
+
+ + +

Checks whether the function argument narg is a number +and returns that number casted to a lua_Integer. + +

+


luaL_checklong

+
+          long luaL_checklong (lua_State *L, int narg);
+
+ + +

Checks whether the function argument narg is a number +and returns that number casted to a long. + +

+


luaL_checklstring

+
+          const char *luaL_checklstring (lua_State *L, int numArg, size_t *l);
+
+ + +

Checks whether the function argument narg is a string +and returns that string; +if l is not NULL fills the position *l +with the string's length. + +

+


luaL_checknumber

+
+          lua_Number luaL_checknumber (lua_State *L, int numArg);
+
+ + +

Checks whether the function argument narg is a number +and returns that number. + +

+


luaL_checkoption

+
+          int luaL_checkoption (lua_State *L, int narg, const char *def,
+                                const char *const lst[]);
+
+ + +

Checks whether the function argument narg is a string and +searches for that string into the array lst +(which must be NULL-terminated). +If def is not NULL, +uses def as a default value when +the function has no argument narg or if that argument is nil. + +

Returns the index in the array where the string was found. +Raises an error if the argument is not a string or +if the string cannot be found. + +

+


luaL_checkstack

+
+          void luaL_checkstack (lua_State *L, int sz, const char *msg);
+
+ + +

Grows the stack size to top + sz elements, +raising an error if the stack cannot grow to that size. +msg is an additional text to go into the error message. + +

+


luaL_checkstring

+
+          const char *luaL_checkstring (lua_State *L, int narg);
+
+ + +

Checks whether the function argument narg is a string +and returns that string. + +

+


luaL_checktype

+
+          void luaL_checktype (lua_State *L, int narg, int t);
+
+ + +

Checks whether the function argument narg has type t. + +

+


luaL_checkudata

+
+          void *luaL_checkudata (lua_State *L, int ud, const char *tname);
+
+ + +

Checks whether the function argument narg is a userdata +of the type tname (see luaL_newmetatable). + +

+


luaL_error

+
+          int luaL_error (lua_State *L, const char *fmt, ...);
+
+ + +

Raises an error. +The error message format is given by fmt +plus any extra argument, +following the same rules of lua_pushfstring. +It also adds at the beginning of the message the file name and +the line number where the error occurred, +if that information is available. + +

This function never returns. + +

+


luaL_getmetafield

+
+          int luaL_getmetafield (lua_State *L, int obj, const char *e);
+
+ + +

Pushes on the stack the field e from the metatable +of the object at index obj. +If the object does not have a metatable, +or if the metatable does not have that field, +returns 0 (false) and pushes nothing. + +

+


luaL_getmetatable

+
+          void luaL_getmetatable (lua_State *L, const char *tname);
+
+ + +

Pushes on the stack the metatable associated to name tname +in the registry (see luaL_newmetatable). + +

+


luaL_gsub

+
+          const char *luaL_gsub (lua_State *L, const char *s,
+                                 const char *p, const char *r);
+
+ + +

Creates a copy of string s changing any occurrence of p +by the string r. +Pushes the resulting string on the stack and returns it. + +

+


luaL_loadbuffer

+
+          int luaL_loadbuffer (lua_State *L, const char *buff,
+                               size_t sz, const char *name);
+
+ + +

Loads a buffer as a Lua chunk. +This function uses lua_load to load the chunk in the +buffer pointed by buff with size sz. + +

This function returns the same results as lua_load. +name is the chunk name, +used for debug information and error messages. + +

+


luaL_loadfile

+
+          int luaL_loadfile (lua_State *L, const char *filename);
+
+ + +

Loads a file as a Lua chunk. +This function uses lua_load to load the chunk in the file +named filename. +If the file's first line starts with a # it is ignored. + +

This function returns the same results as lua_load, +but it has an extra error code LUA_ERRFILE +if it cannot open the file. + +

+


luaL_loadstring

+
+          int luaL_loadstring (lua_State *L, const char *s);
+
+ + +

Loads a string as a Lua chunk. +This function uses lua_load to load the chunk in +the zero-terminated string s. + +

This function returns the same results as lua_load. + +

+


luaL_newmetatable

+
+          int luaL_newmetatable (lua_State *L, const char *tname);
+
+ + +

If the register already has the key "tname", +returns 0. +Otherwise, +creates a new table to be used as metatables for userdata, +adds it to the register with key "tname", +and returns 1. + +

In both cases pushes on the stack the final value associated +with "tname" in the registry. + +

+


luaL_newstate

+
+          lua_State *luaL_newstate (void);
+
+ + +

Creates a new Lua state, calling lua_newstate with an +allocation function based on the standard C realloc function +and setting a panic function ((see lua_atpanic)) that prints +an error message to the standard error output in case of fatal +errors. + +

Returns the new state, +or NULL if there is a memory allocation error. + +

+


luaL_optint

+
+          int luaL_optint (lua_State *L, int narg, int d);
+
+ + +

If the function argument narg is a number, +returns that number casted to an int. +If that argument is absent or is nil, +returns d. +Otherwise, raise an error. + +

+


luaL_optinteger

+
+          lua_Integer luaL_optinteger (lua_State *L, int nArg, lua_Integer d);
+
+ + +

If the function argument narg is a number, +returns that number casted to a lua_Integer. +If that argument is absent or is nil, +returns d. +Otherwise, raise an error. + +

+


luaL_optlong

+
+          long luaL_optlong (lua_State *L, int narg, long d);
+
+ + +

If the function argument narg is a number, +returns that number casted to a long. +If that argument is absent or is nil, +returns d. +Otherwise, raise an error. + +

+


luaL_optlstring

+
+          const char *luaL_optlstring (lua_State *L, int numArg,
+                                       const char *d, size_t *l);
+
+ + +

If the function argument narg is a string, +returns that string. +If that argument is absent or is nil, +returns d. +Otherwise, raise an error. + +

If l is not NULL fills the position *l +with the results's length. + +

+


luaL_optnumber

+
+          lua_Number luaL_optnumber (lua_State *L, int nArg, lua_Number d);
+
+ + +

If the function argument narg is a number, +returns that number. +If that argument is absent or is nil, +returns d. +Otherwise, raise an error. + +

+


luaL_optstring

+
+          const char *luaL_optstring (lua_State *L, int narg, const char *d);
+
+ + +

If the function argument narg is a string, +returns that string. +If that argument is absent or is nil, +returns d. +Otherwise, raise an error. + +

+


luaL_prepbuffer

+
+          char *luaL_prepbuffer (luaL_Buffer *B);
+
+ + +

Returns an address to a space of size LUAL_BUFFERSIZE +wherein you can copy a string to be added to buffer B +(see luaL_Buffer). +After copying the string into that space you must call +luaL_addsize with the size of the string to actually add +it to the buffer. + +

+


luaL_pushresult

+
+          void luaL_pushresult (luaL_Buffer *B);
+
+ + +

Finishes the use of buffer B leaving the final string on +the top of the stack. + +

+


luaL_ref

+
+          int luaL_ref (lua_State *L, int t);
+
+ + +

Creates and returns a reference, +in the table at index t, +for the object at the top of the stack (and pops the object). + +

A reference is a unique integer key. +As long as you do not add integer keys into table t, +luaL_ref ensures the uniqueness of the key it returns. +You can retrieve an object referred by reference r +calling lua_rawgeti(L, t, r). +Function luaL_unref frees a reference and its associated object. + +

Whenever the object at the top of the stack is nil, +luaL_ref returns the same reference LUA_REFNIL. +The constant LUA_NOREF is garanteed to be different +from any reference returned by luaL_ref. + +

+


luaL_Reg

+
+          typedef struct luaL_Reg {
+            const char *name;
+            lua_CFunction func;
+          } luaL_Reg;
+
+
+ + +

Format for arrays of functions to be registered by +luaL_register. +name is the function name and func is a pointer to +the function. +Any array of luaL_Reg must end with an sentinel entry +wherein both name and func are NULL. + +

+


luaL_register

+
+          void luaL_register (lua_State *L, const char *libname,
+                              const luaL_Reg *l);
+
+ + +

Opens a library. + +

When called with libname equal to NULL, +simply registers all functions in the list l +(see luaL_Reg) into the table on the top of the stack. + +

When called with a non-null libname, +creates a new table t, +sets it as the value of the variable libname, +sets it as the value of package.loaded[libname], +and registers on it all functions in the list l. +If there is a table in package.loaded[libname] or in +variable libname, +reuses that table instead of creating a new one. + +

In any case the function leaves the table +on the top of the stack. + +

+


luaL_typename

+
+          const char *luaL_typename (lua_State *L, int idx);
+
+ + +

Returns the name of the type of the value at index idx. + +

+


luaL_typerror

+
+          int luaL_typerror (lua_State *L, int narg, const char *tname);
+
+ + +

Generates an error with a message like +

+<location>: bad argument <narg> to <function> (<tname> expected, got <realt>)
+
+where <location> is produced by luaL_where, +<function> is the name of the current function, +and <realt> is the type name of the actual argument. + +

+


luaL_unref

+
+          void luaL_unref (lua_State *L, int t, int ref);
+
+ + +

Releases reference ref from the table at index t +(see luaL_ref). +The entry is removed from the table, +so that the referred object can be collected. +The reference ref is also freed to be used again. + +

If ref is LUA_NOREF or LUA_REFNIL, +luaL_unref does nothing. + +

+


luaL_where

+
+          void luaL_where (lua_State *L, int lvl);
+
+ + +

Pushes on the stack a string identifying the current position +of the control at level lvl in the call stack. +Typically this string has the format <chunkname>:<currentline>:. +Level 0 is the running function, +level 1 is the function that called the running function. + +

This function is used to build a prefix for error messages. + +

+

5 - Standard Libraries

+ +

The standard libraries provide useful functions +that are implemented directly through the C API. +Some of these functions provide essential services to the language +(e.g., type and getmetatable); +others provide access to "outside" services (e.g., I/O); +and others could be implemented in Lua itself, +but are quite useful or have critical performance to +deserve an implementation in C (e.g., sort). + +

All libraries are implemented through the official C API +and are provided as separate C modules. +Currently, Lua has the following standard libraries: +

+Except for the basic and package libraries, +each library provides all its functions as fields of a global table +or as methods of its objects. + +

To have access to these libraries, +the C host program must first call the function +luaL_openlibs; +or else it can open them individually calling +luaopen_base (for the basic library), +luaopen_package (for the package library), +luaopen_string (for the string library), +luaopen_table (for the table library), +luaopen_math (for the mathematical library), +luaopen_io (for the I/O and the Operating System libraries), +and luaopen_debug (for the debug library). +These functions are declared in lualib.h. + +

5.1 - Basic Functions

+ +

The basic library provides some core functions to Lua. +If you do not include this library in your application, +you should check carefully whether you need to provide some alternative +implementation for some of its facilities. + +


assert (v [, message])

+Issues an error when +the value of its argument v is nil or false; +otherwise, returns all its arguments. +message is an error message; +when absent, it defaults to "assertion failed!" + +


collectgarbage (opt [, arg])

+ +

This function is a generic interface to the garbage collector. +It performs different functions according to its first argument, opt: +

+ +


dofile (filename)

+Opens the named file and executes its contents as a Lua chunk. +When called without arguments, +dofile executes the contents of the standard input (stdin). +Returns any value returned by the chunk. +In case of errors, dofile propagates the error +to its caller (that is, it does not run in protected mode). + +


error (message [, level])

+Terminates the last protected function called +and returns message as the error message. +Function error never returns. + +

Usually, error adds some information about the error position +at the beginning of the message. +The level argument specifies how to get the error position. +With level 1 (the default), the error position is where the +error function was called. +Level 2 points the error to where the function +that called error was called; and so on. +Passing a level 0 avoids the addition of error position information +to the message. + +


_G

+A global variable (not a function) that +holds the global environment (that is, _G._G = _G). +Lua itself does not use this variable; +changing its value does not affect any environment. +(Use setfenv to change environments.) + +


getfenv (f)

+Returns the current environment in use by the function. +f can be a Lua function or a number, +which specifies the function at that stack level: +Level 1 is the function calling getfenv. +If the given function is not a Lua function, +or if f is 0, +getfenv returns the global environment. +The default for f is 1. + +


getmetatable (object)

+ +

If object does not have a metatable, returns nil. +Otherwise, +if the object's metatable has a "__metatable" field, +returns the associated value. +Otherwise, returns the metatable of the given object. + +


ipairs (t)

+ +

Returns an iterator function, the table t, and 0, +so that the construction +

+       for i,v in ipairs(t) do ... end
+
+will iterate over the pairs (1,t[1]), (2,t[2]), ..., +up to the first integer key with a nil value in the table. + +


load (func [, chunkname])

+ +

Loads a chunk using function func to get its pieces. +Each call to func must return a string that concatenates +with previous results. +A return of nil (or no value) signals the end of the chunk. + +

If there are no errors, +returns the compiled chunk as a function; +otherwise, returns nil plus the error message. +The environment of the returned function is the global environment. + +

chunkname is used as the chunk name for error messages +and debug information. + +


loadfile (filename)

+ +

Similar to load, +but gets the chunk from file filename. + +


loadstring (string [, chunkname])

+ +

Similar to load, +but gets the chunk from the given string. + +

To load and run a given string, use the idiom +

+      assert(loadstring(s))()
+
+ +


next (table [, index])

+ +

Allows a program to traverse all fields of a table. +Its first argument is a table and its second argument +is an index in this table. +next returns the next index of the table and the +value associated with the index. +When called with nil as its second argument, +next returns the first index +of the table and its associated value. +When called with the last index, +or with nil in an empty table, +next returns nil. +If the second argument is absent, then it is interpreted as nil. + +

Lua has no declaration of fields; +There is no difference between a +field not present in a table or a field with value nil. +Therefore, next only considers fields with non-nil values. +The order in which the indices are enumerated is not specified, +even for numeric indices. +(To traverse a table in numeric order, +use a numerical for or the ipairs function.) + +

The behavior of next is undefined if, +during the traversal, +you assign any value to a non-existent field in the table. + +


pairs (t)

+ +

Returns the next function and the table t (plus a nil), +so that the construction +

+       for k,v in pairs(t) do ... end
+
+will iterate over all key–value pairs of table t. + +


pcall (f, arg1, arg2, ...)

+ +

Calls function f with +the given arguments in protected mode. +That means that any error inside f is not propagated; +instead, pcall catches the error +and returns a status code. +Its first result is the status code (a boolean), +which is true if the call succeeds without errors. +In such case, pcall also returns all results from the call, +after this first result. +In case of any error, pcall returns false plus the error message. + +


print (e1, e2, ...)

+Receives any number of arguments, +and prints their values in stdout, +using the tostring function to convert them to strings. +This function is not intended for formatted output, +but only as a quick way to show a value, +typically for debugging. +For formatted output, use format (see 5.4). + +


rawequal (v1, v2)

+Checks whether v1 is equal to v2, +without invoking any metamethod. +Returns a boolean. + +


rawget (table, index)

+Gets the real value of table[index], +without invoking any metamethod. +table must be a table; +index is any value different from nil. + +


rawset (table, index, value)

+Sets the real value of table[index] to value, +without invoking any metamethod. +table must be a table, +index is any value different from nil, +and value is any Lua value. + +


select (index, ...)

+ +

If index is a number, +returns all argument after argument number index. +Otherwise, index must be the string "#", +and select returns the total number of extra arguments it received. + +


setfenv (f, table)

+ +

Sets the environment to be used by the given function. +f can be a Lua function or a number, +which specifies the function at that stack level: +Level 1 is the function calling setfenv. +setfenv returns the given function. + +

As a special case, when f is 0 setfenv changes +the environment of the running thread. +In this case, setfenv returns no values. + +


setmetatable (table, metatable)

+ +

Sets the metatable for the given table. +(You cannot change the metatable of other types from Lua.) +If metatable is nil, +removes the metatable of the given table. +If the original metatable has a "__metatable" field, +raises an error. + +

This function returns table. + +


tonumber (e [, base])

+Tries to convert its argument to a number. +If the argument is already a number or a string convertible +to a number, then tonumber returns that number; +otherwise, it returns nil. + +

An optional argument specifies the base to interpret the numeral. +The base may be any integer between 2 and 36, inclusive. +In bases above 10, the letter `A´ (in either upper or lower case) +represents 10, `B´ represents 11, and so forth, +with `Z´ representing 35. +In base 10 (the default), the number may have a decimal part, +as well as an optional exponent part (see 2.2.1). +In other bases, only unsigned integers are accepted. + +


tostring (e)

+Receives an argument of any type and +converts it to a string in a reasonable format. +For complete control of how numbers are converted, +use string.format (see 5.4). + +

If the metatable of e has a "__tostring" field, +tostring calls the corresponding value +with e as argument, +and uses the result of the call as its result. + +


type (v)

+Returns the type of its only argument, coded as a string. +The possible results of this function are +"nil" (a string, not the value nil), +"number", +"string", +"boolean, +"table", +"function", +"thread", +and "userdata". + +


unpack (list [, i [, j]])

+Returns the elements from the given list. +This function is equivalent to +
+  return list[i], list[i+1], ..., list[j]
+
+except that the above code can be written only for a fixed number +of elements. +By default, i is 1 and j is the length of the list, +as defined by the length operator. + +


_VERSION

+A global variable (not a function) that +holds a string containing the current interpreter version. +The current contents of this variable is "Lua 5.1". + +


xpcall (f, err)

+ +

This function is similar to pcall, +except that you can set a new error handler. + +

xpcall calls function f in protected mode, +using err as the error handler. +Any error inside f is not propagated; +instead, xpcall catches the error, +calls the err function with the original error object, +and returns a status code. +Its first result is the status code (a boolean), +which is true if the call succeeds without errors. +In such case, xpcall also returns all results from the call, +after this first result. +In case of any error, +xpcall returns false plus the result from err. + +

5.2 - Coroutine Manipulation

+ +

The operations related to coroutines comprise a sub-library of +the basic library and come inside the table coroutine. +See 2.11 for a general description of coroutines. + +


coroutine.create (f)

+ +

Creates a new coroutine, with body f. +f must be a Lua function. +Returns this new coroutine, +an object with type "thread". + +


coroutine.resume (co, val1, ...)

+ +

Starts or continues the execution of coroutine co. +The first time you resume a coroutine, +it starts running its body. +The arguments val1, ... go as the arguments to the body function. +If the coroutine has yielded, +resume restarts it; +the arguments val1, ... go as the results from the yield. + +

If the coroutine runs without any errors, +resume returns true plus any values passed to yield +(if the coroutine yields) or any values returned by the body function +(if the coroutine terminates). +If there is any error, +resume returns false plus the error message. + +


coroutine.running ()

+ +

Returns the running coroutine, +or nil when called by the main thread. + +


coroutine.status (co)

+ +

Returns the status of coroutine co, as a string: +"running", +if the coroutine is running (that is, it called status); +"suspended", if the coroutine is suspended in a call to yield, +or if it has not started running yet; +"normal" if the coroutine is active but not running +(that is, it has resumed another coroutine); +and "dead" if the coroutine has finished its body function, +or if it has stopped with an error. + +


coroutine.wrap (f)

+ +

Creates a new coroutine, with body f. +f must be a Lua function. +Returns a function that resumes the coroutine each time it is called. +Any arguments passed to the function behave as the +extra arguments to resume. +Returns the same values returned by resume, +except the first boolean. +In case of error, propagates the error. + +


coroutine.yield (val1, ...)

+ +

Suspends the execution of the calling coroutine. +The coroutine cannot be running neither a C function, +nor a metamethod, nor an iterator. +Any arguments to yield go as extra results to resume. + +

5.3 - Packages and Modules

+ +

The package library provides basic +facilities for packages and 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. + +


module (name [, ...])

+ +

Creates a module. +If there is a table in package.loaded[name], +that table is the module. +Otherwise, if there is a global table t with the given name, +that 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. + +

If name is a compound name +(that is, one with components separated by dots) +module creates (or reuses, if they already exists) +tables for each component. +For instance, if name is a.b.c, +module stores the module table in field c of +field b of global a. + +

This function may receive optional options after +the module name, +where each option is a function to be applied over the module. + +


require (modname)

+ +

Loads the given module. +The function starts by looking into the table 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 that module. + +

To find a loader, +first require queries package.preload[modname]. +If it is a true value, +that 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. + +

When loading a C library, +require first uses a dynamic link facility to link the +application with the library. +Then it tries to find a C function inside that library to +be used as the loader. +The name of that C function is the string "luaopen_" +concatenated with a copy of the module name wherein each dot +is replaced by an underscore. +Moreover, if the module name has a colon, +its prefix up to (and including) the first colon is removed. +For instance, if the module name is a.v1:b.c, +the function name will be luaopen_b_c. + +

If require finds neither a Lua library nor a +C library for a module, +it calls the all-in-one loader. +That loader searches the C path for a library for +the root name of the given module. +For instance, when requiring a.b.c, +it will search for a C library for a. +If found, it looks into it for an open function for +the submodule; +in our example, that would be luaopen_a_b_c. +With that facility, a package can pack several C submodules +into one single library, +with each submodule keeping its original open function. + +

Once a loader is found, +require calls the loader with a sinle argument, modname. +If the loader returns any value, +require assigns it to package.loaded[modname]. +If the loader returns no value and +has not assigned any value to package.loaded[modname], +require assigns true to that entry. +In any case, require returns the +final value of package.loaded[modname]. + +

If there is any error loading or running the module, +or if it cannot find any loader for that module, +then require signals an error. + +


package.cpath

+ +

The path used by require to search for a C loader. + +

Lua initializes the C path package.cpath in the same way +it initializes the Lua path package.path, +using the environment variable LUA_CPATH +(plus another compiled-defined default path). + +


package.loaded

+ +

A table used by require 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)

+ +

Links the program with the dynamic C library libname. +Inside this library, looks for a function funcname +and returns this function as a C function. + +

libname must be the complete file name of the C library, +including any eventual path and extension. + +

This function is not supported by ANSI C. +As such, it is only available on some platforms +(Windows, Linux, Solaris, BSD, plus other Unix systems that +support the dlfcn standard). + +


package.path

+ +

The path used by require to search for a Lua loader. + +

At start-up, Lua initializes this variable with +the value of the environment variable LUA_PATH or +with a compiled-defined default path, +if the environment variable is not defined. +Any ";;" in the value of the environment variable +is replaced by the default path. + +

A path is a sequence of templates separated by semicolons. +For each template, 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"
+
+the search for a Lua loader for module mod +will try to load the files +./mod.lua, ./mod.lc, and +/usr/local/mod/init.lua, in that order. + +


package.preload

+ +

A table to store loaders for specific modules +(see require). + +


package.seeall (module)

+ +

Sets a metatable for module with +its __index field refering to the global environment, +so that this module inherits undefined values +from the global environment. +To be used as an option to function module. + +

5.4 - String Manipulation

+ +

This library provides generic functions for string manipulation, +such as finding and extracting substrings, and pattern matching. +When indexing a string in Lua, the first character is at position 1 +(not at 0, as in C). +Indices are allowed to be negative and are interpreted as indexing backwards, +from the end of the string. +Thus, the last character is at position -1, and so on. + +

The string library provides all its functions inside the table +string. +It also sets a metatable for strings +wherein __index points to itself. +Therefore, you can use the string function is object-oriented style. +For instance, string.byte(s, i) +can be written as s:byte(i). + +


string.byte (s [, i [, j]])

+Returns the internal numerical codes of the characters s[i], +s[i+1], ..., s[j]. +The default value for i is 1; +the default value for j is i. + +

Note that numerical codes are not necessarily portable across platforms. + +


string.char (i1, i2, ...)

+Receives 0 or more integers. +Returns a string with length equal to the number of arguments, +in which each character has the internal numerical code equal +to its correspondent argument. + +

Note that numerical codes are not necessarily portable across platforms. + +


string.dump (function)

+ +

Returns a binary representation of the given function, +so that a later loadstring on that string returns +a copy of the function. +function must be a Lua function. + +


string.find (s, pattern [, init [, plain]])

+Looks for the first match of +pattern in the string s. +If it finds one, then find returns the indices of s +where this occurrence starts and ends; +otherwise, it returns nil. +A third, optional numerical argument init specifies +where to start the search; +its default value is 1 and may be negative. +A value of true as a fourth, optional argument plain +turns off the pattern matching facilities, +so the function does a plain "find substring" operation, +with no characters in pattern being considered "magic". +Note that if plain is given, then init must be given too. + +


string.format (formatstring, e1, e2, ...)

+Returns a formatted version of its variable number of arguments +following the description given in its first argument (which must be a string). +The format string follows the same rules as the printf family of +standard C functions. +The only differences are that the options/modifiers +*, l, L, n, p, +and h are not supported, +and there is an extra option, q. +The q option formats a string in a form suitable to be safely read +back by the Lua interpreter: +The string is written between double quotes, +and all double quotes, newlines, and backslashes in the string +are correctly escaped when written. +For instance, the call +
+       string.format('%q', 'a string with "quotes" and \n new line')
+
+will produce the string: +
+"a string with \"quotes\" and \
+ new line"
+
+ +

The options c, d, E, e, f, +g, G, i, o, u, X, and x all +expect a number as argument, +whereas q and s expect a string. + +

This function does not accept string values +containing embedded zeros. + +


string.gmatch (s, pat)

+Returns an iterator function that, +each time it is called, +returns the next captures from pattern pat over string s. + +

If pat specifies no captures, +then the whole match is produced in each call. + +

As an example, the following loop +

+  s = "hello world from Lua"
+  for w in string.gmatch(s, "%a+") do
+    print(w)
+  end
+
+will iterate over all the words from string s, +printing one per line. +The next example collects all pairs key=value from the +given string into a table: +
+  t = {}
+  s = "from=world, to=Lua"
+  for k, v in string.gmatch(s, "(%w+)=(%w+)") do
+    t[k] = v
+  end
+
+ +


string.gsub (s, pat, repl [, n])

+Returns a copy of s +in which all occurrences of the pattern pat have been +replaced by a replacement string specified by repl. +gsub also returns, as a second value, +the total number of substitutions made. + +

If repl is a string, then its value is used for replacement. +The character % works as an escape character: +Any sequence in repl of the form %n, +with n between 1 and 9, +stands for the value of the n-th captured substring (see below). +The sequence %0 stands for the whole match. +The sequence %% stands for a single %. + +

If repl is a function, then this function is called every time a +match occurs, with all captured substrings passed as arguments, +in order; +if the pattern specifies no captures, +then the whole match is passed as a sole argument. +If the value returned by this function is a string, +then it is used as the replacement string; +otherwise, the replacement string is the empty string. + +

The optional last parameter n limits +the maximum number of substitutions to occur. +For instance, when n is 1 only the first occurrence of +pat is replaced. + +

Here are some examples: +

+   x = string.gsub("hello world", "(%w+)", "%1 %1")
+   --> x="hello hello world world"
+
+   x = string.gsub("hello world", "%w+", "%0 %0", 1)
+   --> x="hello hello world"
+
+   x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1")
+   --> x="world hello Lua from"
+
+   x = string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv)
+   --> x="home = /home/roberto, user = roberto"
+
+   x = string.gsub("4+5 = $return 4+5$", "%$(.-)%$", function (s)
+         return loadstring(s)()
+       end)
+   --> x="4+5 = 9"
+
+   local t = {name="lua", version="5.0"}
+   x = string.gsub("$name_$version.tar.gz", "%$(%w+)", function (v)
+         return t[v]
+       end)
+   --> x="lua_5.0.tar.gz"
+
+ +


string.len (s)

+Receives a string and returns its length. +The empty string "" has length 0. +Embedded zeros are counted, +so "a\000bc\000" has length 5. + +


string.lower (s)

+Receives a string and returns a copy of that string with all +uppercase letters changed to lowercase. +All other characters are left unchanged. +The definition of what is an uppercase letter depends on the current locale. + +


string.match (s, pattern [, init])

+Looks for the first match of +pattern in the string s. +If it finds one, then match returns +the captures from the pattern; +otherwise it returns nil. +If pattern specifies no captures, +then the whole match is returned. +A third, optional numerical argument init specifies +where to start the search; +its default value is 1 and may be negative. + +


string.rep (s, n)

+Returns a string that is the concatenation of n copies of +the string s. + +


string.reverse (s)

+Returns a string that is the string s reversed. + +


string.sub (s, i [, j])

+Returns the substring of s that +starts at i and continues until j; +i and j may be negative. +If j is absent, then it is assumed to be equal to -1 +(which is the same as the string length). +In particular, +the call string.sub(s,1,j) returns a prefix of s +with length j, +and string.sub(s, -i) returns a suffix of s +with length i. + +


string.upper (s)

+Receives a string and returns a copy of that string with all +lowercase letters changed to uppercase. +All other characters are left unchanged. +The definition of what is a lowercase letter depends on the current locale. + +

Patterns

+ +

+A character class is used to represent a set of characters. +The following combinations are allowed in describing a character class: +

+For all classes represented by single letters (%a, %c, etc.), +the corresponding uppercase letter represents the complement of the class. +For instance, %S represents all non-space characters. + +

The definitions of letter, space, and other character groups +depend on the current locale. +In particular, the class [a-z] may not be equivalent to %l. + +

+A pattern item may be +

+ +

+A pattern is a sequence of pattern items. +A `^´ at the beginning of a pattern anchors the match at the +beginning of the subject string. +A `$´ at the end of a pattern anchors the match at the +end of the subject string. +At other positions, +`^´ and `$´ have no special meaning and represent themselves. + +

+A pattern may contain sub-patterns enclosed in parentheses; +they describe captures. +When a match succeeds, the substrings of the subject string +that match captures are stored (captured) for future use. +Captures are numbered according to their left parentheses. +For instance, in the pattern "(a*(.)%w(%s*))", +the part of the string matching "a*(.)%w(%s*)" is +stored as the first capture (and therefore has number 1); +the character matching . is captured with number 2, +and the part matching %s* has number 3. + +

As a special case, the empty capture () captures +the current string position (a number). +For instance, if we apply the pattern "()aa()" on the +string "flaaap", there will be two captures: 3 and 5. + +

A pattern cannot contain embedded zeros. Use %z instead. + +

5.5 - Table Manipulation

+This library provides generic functions for table manipulation. +It provides all its functions inside the table table. + +

Most functions in the table library assume that the table +represents an array or a list. +For those functions, when we talk about "the length" of a table +we mean the result of the length operator. + +


table.concat (table [, sep [, i [, j]]])

+Returns table[i]..sep..table[i+1] ... sep..table[j]. +The default value for sep is the empty string, +the default for i is 1, +and the default for j is the length of the table. +If i is greater than j, returns the empty string. + +


table.sort (table [, comp])

+Sorts table elements in a given order, in-place, +from table[1] to table[n], +where n is the length of the table. +If comp is given, +then it must be a function that receives two table elements, +and returns true +when the first is less than the second +(so that not comp(a[i+1],a[i]) will be true after the sort). +If comp is not given, +then the standard Lua operator < is used instead. + +

The sort algorithm is not stable, +that is, elements considered equal by the given order +may have their relative positions changed by the sort. + +


table.insert (table, [pos,] value)

+ +

Inserts element value at position pos in table, +shifting up other elements to open space, if necessary. +The default value for pos is n+1, +where n is the length of the table (see 2.5.5), +so that a call table.insert(t,x) inserts x at the end +of table t. + +


table.remove (table [, pos])

+ +

Removes from table the element at position pos, +shifting down other elements to close the space, if necessary. +Returns the value of the removed element. +The default value for pos is n, +where n is the length of the table, +so that a call table.remove(t) removes the last element +of table t. + +

5.6 - Mathematical Functions

+ +

This library is an interface to the standard C math library. +It provides all its functions inside the table math. +The library provides the following functions: + + + + + + + +

+       math.abs     math.acos    math.asin    math.atan    math.atan2
+       math.ceil    math.cosh    math.cos     math.deg     math.exp
+       math.floor   math.fmod    math.frexp   math.ldexp   math.log
+       math.log10   math.max     math.min     math.modf    math.pow
+       math.rad     math.random  math.randomseed           math.sin
+       math.sinh    math.sqrt    math.tan     math.tanh
+
+plus a variable math.pi and +a variable math.huge, +with the value HUGE_VAL. +Most of those functions +are only interfaces to the corresponding functions in the C library. +All trigonometric functions work in radians. +The functions math.deg and math.rad convert +between radians and degrees. + +

The function math.max returns the maximum +value of its numeric arguments. +Similarly, math.min computes the minimum. +Both can be used with 1, 2, or more arguments. + +

The function math.modf corresponds to the modf C function. +It returns two values: +The integral part and the fractional part of its argument. +The function math.frexp also returns 2 values: +The normalized fraction and the exponent of its argument. + +

The functions math.random and math.randomseed +are interfaces to the simple random generator functions +rand and srand that are provided by ANSI C. +(No guarantees can be given for their statistical properties.) +When called without arguments, +math.random returns a pseudo-random real number +in the range [0,1). +When called with a number n, +math.random returns +a pseudo-random integer in the range [1,n]. +When called with two arguments, +l and u, +math.random returns a pseudo-random +integer in the range [l,u]. +The math.randomseed function sets a "seed" +for the pseudo-random generator: +Equal seeds produce equal sequences of numbers. + +

5.7 - Input and Output Facilities

+ +

The I/O library provides two different styles for file manipulation. +The first one uses implicit file descriptors, +that is, there are operations to set a default input file and a +default output file, +and all input/output operations are over those default files. +The second style uses explicit file descriptors. + +

When using implicit file descriptors, +all operations are supplied by table io. +When using explicit file descriptors, +the operation io.open returns a file descriptor +and then all operations are supplied as methods of the file descriptor. + +

The table io also provides +three predefined file descriptors with their usual meanings from C: +io.stdin, io.stdout, and io.stderr. + +

Unless otherwise stated, +all I/O functions return nil on failure +(plus an error message as a second result) +and some value different from nil on success. + +


io.close ([file])

+ +

Equivalent to file:close(). +Without a file, closes the default output file. + +


io.flush ()

+ +

Equivalent to file:flush over the default output file. + +


io.input ([file])

+ +

When called with a file name, it opens the named file (in text mode), +and sets its handle as the default input file. +When called with a file handle, +it simply sets that file handle as the default input file. +When called without parameters, +it returns the current default input file. + +

In case of errors this function raises the error, +instead of returning an error code. + +


io.lines ([filename])

+ +

Opens the given file name in read mode +and returns an iterator function that, +each time it is called, +returns a new line from the file. +Therefore, the construction +

+       for line in io.lines(filename) do ... end
+
+will iterate over all lines of the file. +When the iterator function detects the end of file, +it returns nil (to finish the loop) and automatically closes the file. + +

The call io.lines() (without a file name) is equivalent +to io.input():lines(), that is, it iterates over the +lines of the default input file. +In that case it does not close the file when the loop ends. + +


io.open (filename [, mode])

+ +

This function opens a file, +in the mode specified in the string mode. +It returns a new file handle, +or, in case of errors, nil plus an error message. + +

The mode string can be any of the following: +

+The mode string may also have a b at the end, +which is needed in some systems to open the file in binary mode. +This string is exactly what is used in the +standard C function fopen. + +


io.output ([file])

+ +

Similar to io.input, but operates over the default output file. + +


io.popen ([prog [, mode]])

+ +

Starts program prog in a separated process and returns +a file handle that you can use to read data from that program +(if mode is "r", the default) +or to write data to that program +(if mode is "w"). + +

This function is system dependent and is not available +in all platforms. + +


io.read (format1, ...)

+ +

Equivalent to io.input():read. + +


io.tmpfile ()

+ +

Returns a handle for a temporary file. +This file is open in update mode +and it is automatically removed when the program ends. + +


io.type (obj)

+ +

Checks whether obj is a valid file handle. +Returns the string "file" if obj is an open file handle, +"closed file" if obj is a closed file handle, +and nil if obj is not a file handle. + +


io.write (value1, ...)

+ +

Equivalent to io.output():write. + +


file:close ()

+ +

Closes file. +Note that files are automatically closed when garbage collected, +but that takes an unpredictable time to happen. + +


file:flush ()

+ +

Saves any written data to file. + +


file:lines ()

+ +

Returns an iterator function that, +each time it is called, +returns a new line from the file. +Therefore, the construction +

+       for line in file:lines() do ... end
+
+will iterate over all lines of the file. +(Unlike io.lines, this function does not close the file +when the loop ends.) + +


file:read (format1, ...)

+ +

Reads the file file, +according to the given formats, which specify what to read. +For each format, +the function returns a string (or a number) with the characters read, +or nil if it cannot read data with the specified format. +When called without formats, +it uses a default format that reads the entire next line +(see below). + +

The available formats are +

+ +


file:seek ([whence] [, offset])

+ +

Sets and gets the file position, +measured from the beginning of the file, +to the position given by offset plus a base +specified by the string whence, as follows: +

+In case of success, function seek returns the final file position, +measured in bytes from the beginning of the file. +If this function fails, it returns nil, +plus a string describing the error. + +

The default value for whence is "cur", +and for offset is 0. +Therefore, the call file:seek() returns the current +file position, without changing it; +the call file:seek("set") sets the position to the +beginning of the file (and returns 0); +and the call file:seek("end") sets the position to the +end of the file, and returns its size. + +


file:setvbuf (mode [, size])

+ +

Sets the buffering mode for an output file. +There are three available modes: +

+For the last two cases, sizes +specifies the size of the buffer, in bytes. +The default is an appropriate size. + +


file:write (value1, ...)

+ +

Writes the value of each of its arguments to +the filehandle file. +The arguments must be strings or numbers. +To write other values, +use tostring or string.format before write. + +

5.8 - Operating System Facilities

+ +

This library is implemented through table os. + +


os.clock ()

+ +

Returns an approximation of the amount of CPU time +used by the program, in seconds. + +


os.date ([format [, time]])

+ +

Returns a string or a table containing date and time, +formatted according to the given string format. + +

If the time argument is present, +this is the time to be formatted +(see the os.time function for a description of this value). +Otherwise, date formats the current time. + +

If format starts with `!´, +then the date is formatted in Coordinated Universal Time. +After that optional character, +if format is *t, +then date returns a table with the following fields: +year (four digits), month (1--12), day (1--31), +hour (0--23), min (0--59), sec (0--61), +wday (weekday, Sunday is 1), +yday (day of the year), +and isdst (daylight saving flag, a boolean). + +

If format is not *t, +then date returns the date as a string, +formatted according to the same rules as the C function strftime. + +

When called without arguments, +date returns a reasonable date and time representation that depends on +the host system and on the current locale +(that is, os.date() is equivalent to os.date("%c")). + +


os.difftime (t2, t1)

+ +

Returns the number of seconds from time t1 to time t2. +In Posix, Windows, and some other systems, +this value is exactly t2-t1. + +


os.execute (command)

+ +

This function is equivalent to the C function system. +It passes command to be executed by an operating system shell. +It returns a status code, which is system-dependent. + +


os.exit ([code])

+ +

Calls the C function exit, +with an optional code, +to terminate the host program. +The default value for code is the success code. + +


os.getenv (varname)

+ +

Returns the value of the process environment variable varname, +or nil if the variable is not defined. + +


os.remove (filename)

+ +

Deletes the file with the given name. +If this function fails, it returns nil, +plus a string describing the error. + +


os.rename (oldname, newname)

+ +

Renames file named oldname to newname. +If this function fails, it returns nil, +plus a string describing the error. + +


os.setlocale (locale [, category])

+ +

Sets the current locale of the program. +locale is a string specifying a locale; +category is an optional string describing which category to change: +"all", "collate", "ctype", +"monetary", "numeric", or "time"; +the default category is "all". +The function returns the name of the new locale, +or nil if the request cannot be honored. + +


os.time ([table])

+ +

Returns the current time when called without arguments, +or a time representing the date and time specified by the given table. +This table must have fields year, month, and day, +and may have fields hour, min, sec, and isdst +(for a description of these fields, see the os.date function). + +

The returned value is a number, whose meaning depends on your system. +In Posix, Windows, and some other systems, this number counts the number +of seconds since some given start time (the "epoch"). +In other systems, the meaning is not specified, +and the number returned by time can be used only as an argument to +date and difftime. + +


os.tmpname ()

+ +

Returns a string with a file name that can +be used for a temporary file. +The file must be explicitly opened before its use +and removed when no longer needed. + +

5.9 - The Reflexive Debug Interface

+ +

The debug library provides +the functionality of the debug interface to Lua programs. +You should exert care when using this library. +The functions provided here should be used exclusively for debugging +and similar tasks, such as profiling. +Please resist the temptation to use them as a +usual programming tool: +They can be very slow. +Moreover, several of its functions +violate some assumptions about Lua code +(e.g., that local variables cannot be accessed from outside or +that userdata metatables cannot be changed by Lua code) +and therefore can compromise some otherwise secure code. + +

All functions in this library are provided +inside a debug table. + +


debug.debug ()

+ +

Enters an interactive mode with the user, +running each string that the user enters. +Using simple commands and other debug facilities, +the user can inspect global and local variables, +change their values, evaluate expressions, and so on. +A line containing only the word cont finishes this function, +so that the caller continues its execution. + +

Note that commands for debug.debug are not lexically nested +with any function, so they have no direct access to local variables. + +


debug.getfenv (o)

+Returns the environment of object o. + +


debug.gethook ()

+ +

Returns the current hook settings, as three values: +the current hook function, the current hook mask, +and the current hook count +(as set by the debug.sethook function). + +


debug.getinfo (function [, what])

+ +

This function returns a table with information about a function. +You can give the function directly, +or you can give a number as the value of function, +which means the function running at level function of the call stack: +Level 0 is the current function (getinfo itself); +level 1 is the function that called getinfo; +and so on. +If function is a number larger than the number of active functions, +then getinfo returns nil. + +

The returned table contains all the fields returned by lua_getinfo, +with the string what describing which fields to fill in. +The default for what is to get all information available. +If present, +the option `f´ +adds a field named func with the function itself. + +

For instance, the expression debug.getinfo(1,"n").name returns +the name of the current function, if a reasonable name can be found, +and debug.getinfo(print) returns a table with all available information +about the print function. + +


debug.getlocal (level, local)

+ +

This function returns the name and the value of the local variable +with index local of the function at level level of the stack. +(The first parameter or local variable has index 1, and so on, +until the last active local variable.) +The function returns nil if there is no local +variable with the given index, +and raises an error when called with a level out of range. +(You can call debug.getinfo to check whether the level is valid.) + +


debug.getmetatable (object)

+ +

If object does not have a metatable, returns nil. +Otherwise, returns the metatable of the given object. + +


debug.getupvalue (func, up)

+ +

This function returns the name and the value of the upvalue +with index up of the function func. +The function returns nil if there is no upvalue with the given index. + +


debug.setfenv (o, table)

+ +

Sets the environment of the given object. + +


debug.sethook (hook, mask [, count])

+ +

Sets the given function as a hook. +The string mask and the number count describe +when the hook will be called. +The string mask may have the following characters, +with the given meaning: +

+With a count different from zero, +the hook is called after every count instructions. + +

When called without arguments, +the debug.sethook function turns off the hook. + +

When the hook is called, its first parameter is always a string +describing the event that triggered its call: +"call", "return" (or "tail return"), +"line", and "count". +Moreover, for line events, +it also gets as its second parameter the new line number. +Inside a hook, +you can call getinfo with level 2 to get more information about +the running function +(level 0 is the getinfo function, +and level 1 is the hook function), +unless the event is "tail return". +In this case, Lua is only simulating the return, +and a call to getinfo will return invalid data. + +


debug.setlocal (level, local, value)

+ +

This function assigns the value value to the local variable +with index local of the function at level level of the stack. +The function returns nil if there is no local +variable with the given index, +and raises an error when called with a level out of range. +(You can call getinfo to check whether the level is valid.) +Otherwise, it returns the name of the local variable. + +


debug.setmetatable (o, metatable)

+ +

Sets the metatable for the given object. + +


debug.setupvalue (func, up, value)

+ +

This function assigns the value value to the upvalue +with index up of the function func. +The function returns nil if there is no upvalue +with the given index. +Otherwise, it returns the name of the upvalue. + +


debug.traceback ([message])

+ +

Returns a string with a traceback of the call stack. +An optional message string is appended +at the beginning of the traceback. +This function is typically used with xpcall to produce +better error messages. + +

+

6 - Lua Stand-alone

+ +

Although Lua has been designed as an extension language, +to be embedded in a host C program, +it is also frequently used as a stand-alone language. +An interpreter for Lua as a stand-alone language, +called simply lua, +is provided with the standard distribution. +The stand-alone interpreter includes +all standard libraries plus the reflexive debug interface. +Its usage is: +

+      lua [options] [script [args]]
+
+The options are: + +After handling its options, lua runs the given script, +passing to it the given args. +When called without arguments, +lua behaves as lua -v -i when stdin is a terminal, +and as lua - otherwise. + +

Before running any argument, +the interpreter checks for an environment variable LUA_INIT. +If its format is @filename, +then lua executes the file. +Otherwise, lua executes the string itself. + +

All options are handled in order, except -i. +For instance, an invocation like +

+       $ lua -e'a=1' -e 'print(a)' script.lua
+
+will first set a to 1, then print a, +and finally run the file script.lua. +(Here $ is the shell prompt. Your prompt may be different.) + +

Before starting to run the script, +lua collects all arguments in the command line +in a global table called arg. +The script name is stored in index 0, +the first argument after the script name goes to index 1, +and so on. +Any arguments before the script name +(that is, the interpreter name plus the options) +go to negative indices. +For instance, in the call +

+       $ lua -la.lua b.lua t1 t2
+
+the interpreter first runs the file a.lua, +then creates a table +
+       arg = { [-2] = "lua", [-1] = "-la.lua", [0] = "b.lua",
+               [1] = "t1", [2] = "t2" }
+
+and finally runs the file b.lua. +The script is called with arg[1], arg[2], ... +as arguments; +it can access those arguments with the vararg expression .... + +

In interactive mode, +if you write an incomplete statement, +the interpreter waits for its completion. + +

If the global variable _PROMPT is defined as a string, +then its value is used as the prompt. +Therefore, the prompt can be changed directly on the command line: +

+       $ lua -e"_PROMPT='myprompt> '" -i
+
+(the outer pair of quotes is for the shell, +the inner is for Lua), +or in any Lua programs by assigning to _PROMPT. +Note the use of -i to enter interactive mode; otherwise, +the program would end just after the assignment to _PROMPT. + +

To allow the use of Lua as a +script interpreter in Unix systems, +the stand-alone interpreter skips +the first line of a chunk if it starts with #. +Therefore, Lua scripts can be made into executable programs +by using chmod +x and the #! form, +as in +

+#!/usr/local/bin/lua
+
+(Of course, +the location of the Lua interpreter may be different in your machine. +If lua is in your PATH, +then +
+#!/usr/bin/env lua
+
+is a more portable solution.) + +


+ +

Incompatibilities with Previous Version

+ + +

Here we list the incompatibilities when moving a program +from Lua 5.0 to Lua 5.1. +You can avoid most of the incompatibilities compiling Lua with +appropriate options. +However, +all those compatibility options will be removed in the next version. + +

Incompatibilities with version 5.0

+ +

Changes in the Language

+ + +

Changes in the Libraries

+ + +

Changes in the API

+ + +

+ +

The Complete Syntax of Lua

+ + +

+ +

+
+

chunk ::= {stat [`;´]} + +

block ::= chunk + +

stat ::= varlist1 `=´ explist1 | functioncall | do block end | while exp do block end | repeat block until exp | if exp then block {elseif exp then block} [else block] end | return [explist1] | break | for Name `=´ exp `,´ exp [`,´ exp] do block end | for namelist in explist1 do block end | function funcname funcbody | local function Name funcbody | local namelist [init] + +

funcname ::= Name {`.´ Name} [`:´ Name] + +

varlist1 ::= var {`,´ var} + +

var ::= Name | prefixexp `[´ exp `]´ | prefixexp `.´ Name + +

namelist ::= Name {`,´ Name} + +

init ::= `=´ explist1 + +

explist1 ::= {exp `,´} exp + +

exp ::= nil | false | true | Number | Literal | `...´ | function | prefixexp | tableconstructor | exp binop exp | unop exp + +

prefixexp ::= var | functioncall | `(´ exp `)´ + +

functioncall ::= prefixexp args | prefixexp `:´ Name args + +

args ::= `(´ [explist1] `)´ | tableconstructor | Literal + +

function ::= function funcbody + +

funcbody ::= `(´ [parlist1] `)´ block end + +

parlist1 ::= namelist [`,´ `...´] | `...´ + +

tableconstructor ::= `{´ [fieldlist] `}´ + fieldlist ::= field {fieldsep field} [fieldsep] + field ::= `[´ exp `]´ `=´ exp | name `=´ exp | exp + fieldsep ::= `,´ | `;´ + +

binop ::= `+´ | `-´ | `*´ | `/´ | `^´ | `%´ | `..´ | `<´ | `<=´ | `>´ | `>=´ | `==´ | `~=´ | and | or + +

unop ::= `-´ | not | `#´ + +

+ +

+ +

+ +


+ +Last update: +Wed Sep 7 13:53:49 BRT 2005 + + + -- cgit v1.2.1