mirror of
				https://github.com/openresty/openresty.git
				synced 2024-10-13 00:29:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			5879 lines
		
	
	
		
			193 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			5879 lines
		
	
	
		
			193 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| =pod
 | ||
| 
 | ||
| =encoding utf8
 | ||
| 
 | ||
| 
 | ||
| =head1 Lua 5.1 Reference Manual
 | ||
| 
 | ||
| by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes
 | ||
| 
 | ||
| Copyright E<copy> 2006E<ndash>2012 Lua.org, PUC-Rio. Freely available
 | ||
| under the terms of the Lua license.
 | ||
| 
 | ||
| 
 | ||
| contents E<middot> index E<middot> other versions
 | ||
| 
 | ||
| =head1 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 scripting language for any program that needs one. Lua is
 | ||
| implemented as a library, written in I<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 I<embedded> in a host client, called the I<embedding
 | ||
| program> or simply the I<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 sample host
 | ||
| program called C<lua>, which uses the Lua library to offer a complete,
 | ||
| stand-alone Lua interpreter.
 | ||
| 
 | ||
| Lua is free software, and is provided as usual with no guarantees, as
 | ||
| stated in its license. The implementation described in this manual is
 | ||
| available at Lua's official web site, C<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 technical
 | ||
| papers available at Lua's web site. For a detailed introduction to
 | ||
| programming in Lua, see Roberto's book, I<Programming in Lua (Second
 | ||
| Edition)>.
 | ||
| 
 | ||
| =head1 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
 | ||
| notation, in which {I<a>} means 0 or more I<a>'s, and [I<a>] means an
 | ||
| optional I<a>. Non-terminals are shown like non-terminal, keywords are
 | ||
| shown like B<kword>, and other terminal symbols are shown like
 | ||
| `B<=>E<acute>. The complete syntax of Lua can be found in E<sect>8 at
 | ||
| the end of this manual.
 | ||
| 
 | ||
| =head2 2.1 - Lexical Conventions
 | ||
| 
 | ||
| I<Names> (also called I<identifiers>) 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.) Identifiers are used to name variables and table fields.
 | ||
| 
 | ||
| The following I<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: C<and> is a reserved word, but C<And>
 | ||
| and C<AND> are two different, valid names. As a convention, names
 | ||
| starting with an underscore followed by uppercase letters (such as
 | ||
| C<_VERSION>) are reserved for internal global variables used by Lua.
 | ||
| 
 | ||
| The following strings denote other tokens:
 | ||
| 
 | ||
|      +     -     *     /     %     ^     #
 | ||
|      ==    ~=    <=    >=    <     >     =
 | ||
|      (     )     {     }     [     ]
 | ||
|      ;     :     ,     .     ..    ...
 | ||
| 
 | ||
| I<Literal strings> can be delimited by matching single or double
 | ||
| quotes, and can contain the following C-like escape sequences: 'C<\a>'
 | ||
| (bell), 'C<\b>' (backspace), 'C<\f>' (form feed), 'C<\n>' (newline),
 | ||
| 'C<\r>' (carriage return), 'C<\t>' (horizontal tab), 'C<\v>' (vertical
 | ||
| tab), 'C<\\>' (backslash), 'C<\">' (quotation mark [double quote]), and
 | ||
| 'C<\'>' (apostrophe [single quote]). Moreover, a backslash followed by
 | ||
| a real newline results in a newline in the string. A character in a
 | ||
| string can also be specified by its numerical value using the escape
 | ||
| sequence C<\I<ddd>>, where I<ddd> is a sequence of up to three decimal
 | ||
| digits. (Note that if a numerical escape is to be followed by a digit,
 | ||
| it must be expressed using exactly three digits.) Strings in Lua can
 | ||
| contain any 8-bit value, including embedded zeros, which can be
 | ||
| specified as 'C<\0>'.
 | ||
| 
 | ||
| Literal strings can also be defined using a long format enclosed by
 | ||
| I<long brackets>. We define an I<opening long bracket of level I<n>> as
 | ||
| an opening square bracket followed by I<n> equal signs followed by
 | ||
| another opening square bracket. So, an opening long bracket of level 0
 | ||
| is written as C<[[>, an opening long bracket of level 1 is written as
 | ||
| C<[=[>, and so on. A I<closing long bracket> is defined similarly; for
 | ||
| instance, a closing long bracket of level 4 is written as C<]====]>. A
 | ||
| long string starts with an opening long bracket of any level and ends
 | ||
| at the first closing long bracket of the same level. Literals in this
 | ||
| bracketed form can run for several lines, do not interpret any escape
 | ||
| sequences, and ignore long brackets of any other level. They can
 | ||
| contain anything except a closing bracket of the proper level.
 | ||
| 
 | ||
| For convenience, when the opening long 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 'C<a>' is coded as 97, newline is
 | ||
| coded as 10, and 'C<1>' is coded as 49), the five literal strings below
 | ||
| denote the same string:
 | ||
| 
 | ||
|      a = 'alo\n123"'
 | ||
|      a = "alo\n123\""
 | ||
|      a = '\97lo\10\04923"'
 | ||
|      a = [[alo
 | ||
|      123"]]
 | ||
|      a = [==[
 | ||
|      alo
 | ||
|      123"]==]
 | ||
| 
 | ||
| A I<numerical constant> can be written with an optional decimal part
 | ||
| and an optional decimal exponent. Lua also accepts integer hexadecimal
 | ||
| constants, by prefixing them with C<0x>. Examples of valid numerical
 | ||
| constants are
 | ||
| 
 | ||
|      3   3.0   3.1416   314.16e-2   0.31416E1   0xff   0x56
 | ||
| 
 | ||
| A I<comment> starts with a double hyphen (C<-->) anywhere outside a
 | ||
| string. If the text immediately after C<--> is not an opening long
 | ||
| bracket, the comment is a I<short comment>, which runs until the end of
 | ||
| the line. Otherwise, it is a I<long comment>, which runs until the
 | ||
| corresponding closing long bracket. Long comments are frequently used
 | ||
| to disable code temporarily.
 | ||
| 
 | ||
| =head2 2.2 - Values and Types
 | ||
| 
 | ||
| Lua is a I<dynamically typed language>. This means that variables do
 | ||
| not have types; only values do. There are no type definitions in the
 | ||
| language. All values carry their own type.
 | ||
| 
 | ||
| All values in Lua are I<first-class values>. This means that all values
 | ||
| can be stored in variables, passed as arguments to other functions, and
 | ||
| returned as results.
 | ||
| 
 | ||
| There are eight basic types in Lua: I<nil>, I<boolean>, I<number>,
 | ||
| I<string>, I<function>, I<userdata>, I<thread>, and I<table>. I<Nil> is
 | ||
| the type of the value B<nil>, whose main property is to be different
 | ||
| from any other value; it usually represents the absence of a useful
 | ||
| value. I<Boolean> is the type of the values B<false> and B<true>. Both
 | ||
| B<nil> and B<false> make a condition false; any other value makes it
 | ||
| true. I<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 C<luaconf.h>.) I<String> represents arrays of
 | ||
| characters. Lua is 8-bit clean: strings can contain any 8-bit
 | ||
| character, including embedded zeros ('C<\0>') (see E<sect>2.1).
 | ||
| 
 | ||
| Lua can call (and manipulate) functions written in Lua and functions
 | ||
| written in C (see E<sect>2.5.8).
 | ||
| 
 | ||
| The type I<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 I<metatables>, the programmer can define
 | ||
| operations for userdata values (see E<sect>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 I<thread> represents independent threads of execution and it
 | ||
| is used to implement coroutines (see E<sect>2.11). Do not confuse Lua
 | ||
| threads with operating-system threads. Lua supports coroutines on all
 | ||
| systems, even those that do not support threads.
 | ||
| 
 | ||
| The type I<table> implements associative arrays, that is, arrays that
 | ||
| can be indexed not only with numbers, but with any value (except
 | ||
| B<nil>). Tables can be I<heterogeneous>; that is, they can contain
 | ||
| values of all types (except B<nil>). Tables are the sole data
 | ||
| structuring mechanism in Lua; they can 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 C<a.name> as syntactic sugar for
 | ||
| C<a["name"]>. There are several convenient ways to create tables in Lua
 | ||
| (see E<sect>2.5.7).
 | ||
| 
 | ||
| Like indices, the value of a table field can be of any type (except
 | ||
| B<nil>). In particular, because functions are first-class values, table
 | ||
| fields can contain functions. Thus tables can also carry I<methods>
 | ||
| (see E<sect>2.5.9).
 | ||
| 
 | ||
| Tables, functions, threads, and (full) userdata values are I<objects>:
 | ||
| variables do not actually I<contain> these values, only I<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 C<type> returns a string describing the type of a
 | ||
| given value.
 | ||
| 
 | ||
| =head2 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
 | ||
| this string to a number, following the usual conversion 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 over how numbers are converted to strings, use the C<format>
 | ||
| function from the string library (see C<string.format>).
 | ||
| 
 | ||
| =head2 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
 | ||
| function's formal parameter, which is a particular kind of local
 | ||
| variable):
 | ||
| 
 | ||
| 	var ::= Name
 | ||
| 
 | ||
| Name denotes identifiers, as defined in E<sect>2.1.
 | ||
| 
 | ||
| Any variable is assumed to be global unless explicitly declared as a
 | ||
| local (see E<sect>2.4.7). Local variables are I<lexically scoped>:
 | ||
| local variables can be freely accessed by functions defined inside
 | ||
| their scope (see E<sect>2.6).
 | ||
| 
 | ||
| Before the first assignment to a variable, its value is B<nil>.
 | ||
| 
 | ||
| Square brackets are used to index a table:
 | ||
| 
 | ||
| 	var ::= prefixexp `[´ exp `]´
 | ||
| 
 | ||
| The meaning of accesses to global variables and table fields can be
 | ||
| changed via metatables. An access to an indexed variable C<t[i]> is
 | ||
| equivalent to a call C<gettable_event(t,i)>. (See E<sect>2.8 for a
 | ||
| complete description of the C<gettable_event> function. This function
 | ||
| is not defined or callable in Lua. We use it here only for explanatory
 | ||
| purposes.)
 | ||
| 
 | ||
| The syntax C<var.Name> is just syntactic sugar for C<var["Name"]>:
 | ||
| 
 | ||
| 	var ::= prefixexp `.´ Name
 | ||
| 
 | ||
| All global variables live as fields in ordinary Lua tables, called
 | ||
| I<environment tables> or simply I<environments> (see E<sect>2.9). Each
 | ||
| function has its own reference to an environment, so that all global
 | ||
| variables in this function will refer to this environment table. When a
 | ||
| function is created, it inherits the environment from the function that
 | ||
| created it. To get the environment table of a Lua function, you call
 | ||
| C<getfenv>. To replace it, you call C<setfenv>. (You can only
 | ||
| manipulate the environment of C functions through the debug library;
 | ||
| (see E<sect>5.9).)
 | ||
| 
 | ||
| An access to a global variable C<x> is equivalent to C<_env.x>, which
 | ||
| in turn is equivalent to
 | ||
| 
 | ||
|      gettable_event(_env, "x")
 | ||
| 
 | ||
| where C<_env> is the environment of the running function. (See
 | ||
| E<sect>2.8 for a complete description of the C<gettable_event>
 | ||
| function. This function is not defined or callable in Lua. Similarly,
 | ||
| the C<_env> variable is not defined in Lua. We use them here only for
 | ||
| explanatory purposes.)
 | ||
| 
 | ||
| =head2 2.4 - Statements
 | ||
| 
 | ||
| Lua supports an almost conventional set of statements, similar to those
 | ||
| in Pascal or C. This set includes assignments, control structures,
 | ||
| function calls, and variable declarations.
 | ||
| 
 | ||
| =head2 2.4.1 - Chunks
 | ||
| 
 | ||
| The unit of execution of Lua is called a I<chunk>. A chunk is simply a
 | ||
| sequence of statements, which are executed sequentially. Each statement
 | ||
| can be optionally followed by a semicolon:
 | ||
| 
 | ||
| 	chunk ::= {stat [`;´]}
 | ||
| 
 | ||
| There are no empty statements and thus 'C<;;>' is not legal.
 | ||
| 
 | ||
| Lua handles a chunk as the body of an anonymous function with a
 | ||
| variable number of arguments (see E<sect>2.5.9). As such, chunks can
 | ||
| define local variables, receive arguments, and return values.
 | ||
| 
 | ||
| A chunk can be stored in a file or in a string inside the host program.
 | ||
| To execute a chunk, Lua first pre-compiles the chunk into instructions
 | ||
| for a virtual machine, and then it executes the compiled code with an
 | ||
| interpreter for the virtual machine.
 | ||
| 
 | ||
| Chunks can also be pre-compiled into binary form; see program C<luac>
 | ||
| for details. Programs in source and compiled forms are interchangeable;
 | ||
| Lua automatically detects the file type and acts accordingly.
 | ||
| 
 | ||
| =head2 2.4.2 - Blocks
 | ||
| 
 | ||
| A block is a list of statements; syntactically, a block is the same as
 | ||
| a chunk:
 | ||
| 
 | ||
| 	block ::= chunk
 | ||
| 
 | ||
| A block can 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
 | ||
| B<return> or B<break> statement in the middle of another block (see
 | ||
| E<sect>2.4.4).
 | ||
| 
 | ||
| =head2 2.4.3 - Assignment
 | ||
| 
 | ||
| Lua allows multiple assignments. 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 ::= varlist `=´ explist
 | ||
| 	varlist ::= var {`,´ var}
 | ||
| 	explist ::= exp {`,´ exp}
 | ||
| 
 | ||
| Expressions are discussed in E<sect>2.5.
 | ||
| 
 | ||
| Before the assignment, the list of values is I<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 B<nil>'s as needed. If the list of
 | ||
| expressions ends with a function call, then all values returned by that
 | ||
| call enter the list of values, before the adjustment (except when the
 | ||
| call is enclosed in parentheses; see E<sect>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 C<a[3]> to 20, without affecting C<a[4]> because the C<i> in
 | ||
| C<a[i]> is evaluated (to 3) before it is assigned 4. Similarly, the
 | ||
| line
 | ||
| 
 | ||
|      x, y = y, x
 | ||
| 
 | ||
| exchanges the values of C<x> and C<y>, and
 | ||
| 
 | ||
|      x, y, z = y, z, x
 | ||
| 
 | ||
| cyclically permutes the values of C<x>, C<y>, and C<z>.
 | ||
| 
 | ||
| The meaning of assignments to global variables and table fields can be
 | ||
| changed via metatables. An assignment to an indexed variable C<t[i] =
 | ||
| val> is equivalent to C<settable_event(t,i,val)>. (See E<sect>2.8 for a
 | ||
| complete description of the C<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 C<x = val> is equivalent to the
 | ||
| assignment C<_env.x = val>, which in turn is equivalent to
 | ||
| 
 | ||
|      settable_event(_env, "x", val)
 | ||
| 
 | ||
| where C<_env> is the environment of the running function. (The C<_env>
 | ||
| variable is not defined in Lua. We use it here only for explanatory
 | ||
| purposes.)
 | ||
| 
 | ||
| =head2 2.4.4 - Control Structures
 | ||
| 
 | ||
| The control structures B<if>, B<while>, and B<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 B<for> statement, in two flavors (see E<sect>2.4.5).
 | ||
| 
 | ||
| The condition expression of a control structure can return any value.
 | ||
| Both B<false> and B<nil> are considered false. All values different
 | ||
| from B<nil> and B<false> are considered true (in particular, the number
 | ||
| 0 and the empty string are also true).
 | ||
| 
 | ||
| In the B<repeat>E<ndash>B<until> loop, the inner block does not end at
 | ||
| the B<until> keyword, but only after the condition. So, the condition
 | ||
| can refer to local variables declared inside the loop block.
 | ||
| 
 | ||
| The B<return> statement is used to return values from a function or a
 | ||
| chunk (which is just a function). Functions and chunks can return more
 | ||
| than one value, and so the syntax for the B<return> statement is
 | ||
| 
 | ||
| 	stat ::= return [explist]
 | ||
| 
 | ||
| The B<break> statement is used to terminate the execution of a
 | ||
| B<while>, B<repeat>, or B<for> loop, skipping to the next statement
 | ||
| after the loop:
 | ||
| 
 | ||
| 	stat ::= break
 | ||
| 
 | ||
| A B<break> ends the innermost enclosing loop.
 | ||
| 
 | ||
| The B<return> and B<break> statements can only be written as the
 | ||
| I<last> statement of a block. If it is really necessary to B<return> or
 | ||
| B<break> in the middle of a block, then an explicit inner block can be
 | ||
| used, as in the idioms C<do return end> and C<do break end>, because
 | ||
| now B<return> and B<break> are the last statements in their (inner)
 | ||
| blocks.
 | ||
| 
 | ||
| =head2 2.4.5 - For Statement
 | ||
| 
 | ||
| The B<for> statement has two forms: one numeric and one generic.
 | ||
| 
 | ||
| The numeric B<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 I<block> is repeated for I<name> starting at the value of the first
 | ||
| I<exp>, until it passes the second I<exp> by steps of the third I<exp>.
 | ||
| More precisely, a B<for> statement like
 | ||
| 
 | ||
|      for v = 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 v = var
 | ||
|          block
 | ||
|          var = var + step
 | ||
|        end
 | ||
|      end
 | ||
| 
 | ||
| Note the following:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * All three control expressions are evaluated only once, before
 | ||
| the loop starts. They must all result in numbers.
 | ||
| 
 | ||
| =item * C<I<var>>, C<I<limit>>, and C<I<step>> are invisible variables.
 | ||
| The names shown here are for explanatory purposes only.
 | ||
| 
 | ||
| =item * If the third expression (the step) is absent, then a step of 1
 | ||
| is used.
 | ||
| 
 | ||
| =item * You can use B<break> to exit a B<for> loop.
 | ||
| 
 | ||
| =item * The loop variable C<v> is local to the loop; you cannot use its
 | ||
| value after the B<for> ends or is broken. If you need this value,
 | ||
| assign it to another variable before breaking or exiting the loop.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| The generic B<for> statement works over functions, called I<iterators>.
 | ||
| On each iteration, the iterator function is called to produce a new
 | ||
| value, stopping when this new value is B<nil>. The generic B<for> loop
 | ||
| has the following syntax:
 | ||
| 
 | ||
| 	stat ::= for namelist in explist do block end
 | ||
| 	namelist ::= Name {`,´ Name}
 | ||
| 
 | ||
| A B<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:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * C<I<explist>> is evaluated only once. Its results are an
 | ||
| I<iterator> function, a I<state>, and an initial value for the first
 | ||
| I<iterator variable>.
 | ||
| 
 | ||
| =item * C<I<f>>, C<I<s>>, and C<I<var>> are invisible variables. The
 | ||
| names are here for explanatory purposes only.
 | ||
| 
 | ||
| =item * You can use B<break> to exit a B<for> loop.
 | ||
| 
 | ||
| =item * The loop variables C<I<var_i>> are local to the loop; you
 | ||
| cannot use their values after the B<for> ends. If you need these
 | ||
| values, then assign them to other variables before breaking or exiting
 | ||
| the loop.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| =head2 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 E<sect>2.5.8.
 | ||
| 
 | ||
| =head2 2.4.7 - Local Declarations
 | ||
| 
 | ||
| Local variables can be declared anywhere inside a block. The
 | ||
| declaration can include an initial assignment:
 | ||
| 
 | ||
| 	stat ::= local namelist [`=´ explist]
 | ||
| 
 | ||
| If present, an initial assignment has the same semantics of a multiple
 | ||
| assignment (see E<sect>2.4.3). Otherwise, all variables are initialized
 | ||
| with B<nil>.
 | ||
| 
 | ||
| A chunk is also a block (see E<sect>2.4.1), and 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 E<sect>2.6.
 | ||
| 
 | ||
| =head2 2.5 - Expressions
 | ||
| 
 | ||
| The basic expressions in Lua are the following:
 | ||
| 
 | ||
| 	exp ::= prefixexp
 | ||
| 	exp ::= nil | false | true
 | ||
| 	exp ::= Number
 | ||
| 	exp ::= String
 | ||
| 	exp ::= function
 | ||
| 	exp ::= tableconstructor
 | ||
| 	exp ::= `...´
 | ||
| 	exp ::= exp binop exp
 | ||
| 	exp ::= unop exp
 | ||
| 	prefixexp ::= var | functioncall | `(´ exp `)´
 | ||
| 
 | ||
| Numbers and literal strings are explained in E<sect>2.1; variables are
 | ||
| explained in E<sect>2.3; function definitions are explained in
 | ||
| E<sect>2.5.9; function calls are explained in E<sect>2.5.8; table
 | ||
| constructors are explained in E<sect>2.5.7. Vararg expressions, denoted
 | ||
| by three dots ('C<...>'), can only be used when directly inside a
 | ||
| vararg function; they are explained in E<sect>2.5.9.
 | ||
| 
 | ||
| Binary operators comprise arithmetic operators (see E<sect>2.5.1),
 | ||
| relational operators (see E<sect>2.5.2), logical operators (see
 | ||
| E<sect>2.5.3), and the concatenation operator (see E<sect>2.5.4). Unary
 | ||
| operators comprise the unary minus (see E<sect>2.5.1), the unary B<not>
 | ||
| (see E<sect>2.5.3), and the unary I<length operator> (see
 | ||
| E<sect>2.5.5).
 | ||
| 
 | ||
| Both function calls and vararg expressions can result in multiple
 | ||
| values. If an expression is used as a statement (only possible for
 | ||
| function calls (see E<sect>2.4.6)), then its return list is adjusted to
 | ||
| zero elements, thus discarding all returned values. If an expression is
 | ||
| used as the last (or the only) element of a list of expressions, then
 | ||
| no adjustment is made (unless the call is enclosed in parentheses). In
 | ||
| all other contexts, Lua adjusts the result list to one element,
 | ||
| discarding all values except the first one.
 | ||
| 
 | ||
| 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 results from 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 can 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 results from f()
 | ||
|      return ...         -- returns all received vararg parameters
 | ||
|      return x,y,f()     -- returns x, y, and all results from f()
 | ||
|      {f()}              -- creates a list with all results from f()
 | ||
|      {...}              -- creates a list with all vararg parameters
 | ||
|      {f(), nil}         -- f() is adjusted to 1 result
 | ||
| 
 | ||
| Any expression enclosed in parentheses always results in only one
 | ||
| value. Thus, C<(f(x,y,z))> is always a single value, even if C<f>
 | ||
| returns several values. (The value of C<(f(x,y,z))> is the first value
 | ||
| returned by C<f> or B<nil> if C<f> does not return any values.)
 | ||
| 
 | ||
| =head2 2.5.1 - Arithmetic Operators
 | ||
| 
 | ||
| Lua supports the usual arithmetic operators: the binary C<+>
 | ||
| (addition), C<-> (subtraction), C<*> (multiplication), C</> (division),
 | ||
| C<%> (modulo), and C<^> (exponentiation); and unary C<-> (negation). If
 | ||
| the operands are numbers, or strings that can be converted to numbers
 | ||
| (see E<sect>2.2.1), then all operations have the usual meaning.
 | ||
| Exponentiation works for any exponent. For instance, C<x^(-0.5)>
 | ||
| computes the inverse of the square root of C<x>. Modulo is defined as
 | ||
| 
 | ||
|      a % b == a - math.floor(a/b)*b
 | ||
| 
 | ||
| That is, it is the remainder of a division that rounds the quotient
 | ||
| towards minus infinity.
 | ||
| 
 | ||
| =head2 2.5.2 - Relational Operators
 | ||
| 
 | ||
| The relational operators in Lua are
 | ||
| 
 | ||
|      ==    ~=    <     >     <=    >=
 | ||
| 
 | ||
| These operators always result in B<false> or B<true>.
 | ||
| 
 | ||
| Equality (C<==>) first compares the type of its operands. If the types
 | ||
| are different, then the result is B<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 I<reference>: two objects are considered equal only if they
 | ||
| are the I<same> object. Every time you create a new object (a table,
 | ||
| userdata, thread, or function), this new object is different from any
 | ||
| previously existing object.
 | ||
| 
 | ||
| You can change the way that Lua compares tables and userdata by using
 | ||
| the "eq" metamethod (see E<sect>2.8).
 | ||
| 
 | ||
| The conversion rules of E<sect>2.2.1 I<do not> apply to equality
 | ||
| comparisons. Thus, C<"0"==0> evaluates to B<false>, and C<t[0]> and
 | ||
| C<t["0"]> denote different entries in a table.
 | ||
| 
 | ||
| The operator C<~=> is exactly the negation of equality (C<==>).
 | ||
| 
 | ||
| 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 E<sect>2.8). A comparison C<a E<gt> b> is translated to C<b E<lt>
 | ||
| a> and C<a E<gt>= b> is translated to C<b E<lt>= a>.
 | ||
| 
 | ||
| =head2 2.5.3 - Logical Operators
 | ||
| 
 | ||
| The logical operators in Lua are B<and>, B<or>, and B<not>. Like the
 | ||
| control structures (see E<sect>2.4.4), all logical operators consider
 | ||
| both B<false> and B<nil> as false and anything else as true.
 | ||
| 
 | ||
| The negation operator B<not> always returns B<false> or B<true>. The
 | ||
| conjunction operator B<and> returns its first argument if this value is
 | ||
| B<false> or B<nil>; otherwise, B<and> returns its second argument. The
 | ||
| disjunction operator B<or> returns its first argument if this value is
 | ||
| different from B<nil> and B<false>; otherwise, B<or> returns its second
 | ||
| argument. Both B<and> and B<or> use short-cut evaluation; that is, the
 | ||
| second operand is evaluated only if necessary. Here are some examples:
 | ||
| 
 | ||
|      10 or 20            --> 10
 | ||
|      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
 | ||
| 
 | ||
| (In this manual, C<--E<gt>> indicates the result of the preceding
 | ||
| expression.)
 | ||
| 
 | ||
| =head2 2.5.4 - Concatenation
 | ||
| 
 | ||
| The string concatenation operator in Lua is denoted by two dots
 | ||
| ('C<..>'). If both operands are strings or numbers, then they are
 | ||
| converted to strings according to the rules mentioned in E<sect>2.2.1.
 | ||
| Otherwise, the "concat" metamethod is called (see E<sect>2.8).
 | ||
| 
 | ||
| =head2 2.5.5 - The Length Operator
 | ||
| 
 | ||
| The length operator is denoted by the unary operator C<#>. 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 C<t> is defined to be any integer index C<n> such
 | ||
| that C<t[n]> is not B<nil> and C<t[n+1]> is B<nil>; moreover, if
 | ||
| C<t[1]> is B<nil>, C<n> can be zero. For a regular array, with non-nil
 | ||
| values from 1 to a given C<n>, its length is exactly that C<n>, the
 | ||
| index of its last value. If the array has "holes" (that is, B<nil>
 | ||
| values between other non-nil values), then C<#t> can be any of the
 | ||
| indices that directly precedes a B<nil> value (that is, it may consider
 | ||
| any such B<nil> value as the end of the array).
 | ||
| 
 | ||
| =head2 2.5.6 - Precedence
 | ||
| 
 | ||
| Operator precedence in Lua follows the table below, from lower to
 | ||
| higher priority:
 | ||
| 
 | ||
|      or
 | ||
|      and
 | ||
|      <     >     <=    >=    ~=    ==
 | ||
|      ..
 | ||
|      +     -
 | ||
|      *     /     %
 | ||
|      not   #     - (unary)
 | ||
|      ^
 | ||
| 
 | ||
| As usual, you can use parentheses to change the precedences of an
 | ||
| expression. The concatenation ('C<..>') and exponentiation ('C<^>')
 | ||
| operators are right associative. All other binary operators are left
 | ||
| associative.
 | ||
| 
 | ||
| =head2 2.5.7 - Table Constructors
 | ||
| 
 | ||
| Table constructors are expressions that create tables. Every time a
 | ||
| constructor is evaluated, a new table is created. A constructor can be
 | ||
| used to create an empty table 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 C<[exp1] = exp2> adds to the new table an entry
 | ||
| with key C<exp1> and value C<exp2>. A field of the form C<name = exp>
 | ||
| is equivalent to C<["name"] = exp>. Finally, fields of the form C<exp>
 | ||
| are equivalent to C<[i] = exp>, where C<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 t = {}
 | ||
|        t[f(1)] = g
 | ||
|        t[1] = "x"         -- 1st exp
 | ||
|        t[2] = "y"         -- 2nd exp
 | ||
|        t.x = 1            -- t["x"] = 1
 | ||
|        t[3] = f(x)        -- 3rd exp
 | ||
|        t[30] = 23
 | ||
|        t[4] = 45          -- 4th exp
 | ||
|        a = t
 | ||
|      end
 | ||
| 
 | ||
| If the last field in the list has the form C<exp> and the expression is
 | ||
| a function call or a vararg expression, then all values returned by
 | ||
| this expression enter the list consecutively (see E<sect>2.5.8). To
 | ||
| avoid this, enclose the function call or the vararg expression in
 | ||
| parentheses (see E<sect>2.5).
 | ||
| 
 | ||
| The field list can have an optional trailing separator, as a
 | ||
| convenience for machine-generated code.
 | ||
| 
 | ||
| =head2 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 I<function>, then this function is called
 | ||
| with the given arguments. Otherwise, the prefixexp "call" metamethod is
 | ||
| called, having as first parameter the value of prefixexp, followed by
 | ||
| the original call arguments (see E<sect>2.8).
 | ||
| 
 | ||
| The form
 | ||
| 
 | ||
| 	functioncall ::= prefixexp `:´ Name args
 | ||
| 
 | ||
| can be used to call "methods". A call C<v:name(I<args>)> is syntactic
 | ||
| sugar for C<v.name(v,I<args>)>, except that C<v> is evaluated only
 | ||
| once.
 | ||
| 
 | ||
| Arguments have the following syntax:
 | ||
| 
 | ||
| 	args ::= `(´ [explist] `)´
 | ||
| 	args ::= tableconstructor
 | ||
| 	args ::= String
 | ||
| 
 | ||
| All argument expressions are evaluated before the call. A call of the
 | ||
| form C<f{I<fields>}> is syntactic sugar for C<f({I<fields>})>; that is,
 | ||
| the argument list is a single new table. A call of the form
 | ||
| C<f'I<string>'> (or C<f"I<string>"> or C<f[[I<string>]]>) is syntactic
 | ||
| sugar for C<f('I<string>')>; 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 'C<(>' in a function call. This restriction avoids
 | ||
| some ambiguities in the language. If you write
 | ||
| 
 | ||
|      a = f
 | ||
|      (g).x(a)
 | ||
| 
 | ||
| Lua would see that as a single statement, C<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 C<f>, you must remove the line break before
 | ||
| C<(g)>.
 | ||
| 
 | ||
| A call of the form C<return> I<functioncall> is called a I<tail call>.
 | ||
| Lua implements I<proper tail calls> (or I<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 B<return> has one single
 | ||
| function call as argument; this syntax makes the calling function
 | ||
| return exactly the returns of the called function. So, none of the
 | ||
| following examples are 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
 | ||
| 
 | ||
| =head2 2.5.9 - Function Definitions
 | ||
| 
 | ||
| The syntax for function definition is
 | ||
| 
 | ||
| 	function ::= function funcbody
 | ||
| 	funcbody ::= `(´ [parlist] `)´ 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 () body end
 | ||
| 
 | ||
| translates to
 | ||
| 
 | ||
|      f = function () body end
 | ||
| 
 | ||
| The statement
 | ||
| 
 | ||
|      function t.a.b.c.f () body end
 | ||
| 
 | ||
| translates to
 | ||
| 
 | ||
|      t.a.b.c.f = function () body end
 | ||
| 
 | ||
| The statement
 | ||
| 
 | ||
|      local function f () body end
 | ||
| 
 | ||
| translates to
 | ||
| 
 | ||
|      local f; f = function () body end
 | ||
| 
 | ||
| I<not> to
 | ||
| 
 | ||
|      local f = function () body end
 | ||
| 
 | ||
| (This only makes a difference when the body of the function contains
 | ||
| references to C<f>.)
 | ||
| 
 | ||
| A function definition is an executable expression, whose value has type
 | ||
| I<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 I<instantiated> (or I<closed>). This function instance
 | ||
| (or I<closure>) is the final value of the expression. Different
 | ||
| instances of the same function can refer to different external local
 | ||
| variables and can have different environment tables.
 | ||
| 
 | ||
| Parameters act as local variables that are initialized with the
 | ||
| argument values:
 | ||
| 
 | ||
| 	parlist ::= 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
 | ||
| I<vararg function>, which is indicated by three dots ('C<...>') 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 I<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 that last expression 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 B<return> statement (see E<sect>2.4.4).
 | ||
| If control reaches the end of a function without encountering a
 | ||
| B<return> statement, then the function returns with no results.
 | ||
| 
 | ||
| The I<colon> syntax is used for defining I<methods>, that is, functions
 | ||
| that have an implicit extra parameter C<self>. Thus, the statement
 | ||
| 
 | ||
|      function t.a.b.c:f (params) body end
 | ||
| 
 | ||
| is syntactic sugar for
 | ||
| 
 | ||
|      t.a.b.c.f = function (self, params) body end
 | ||
| 
 | ||
| =head2 2.6 - Visibility Rules
 | ||
| 
 | ||
| Lua is a lexically scoped language. The scope of variables begins at
 | ||
| the first statement I<after> their declaration and lasts until the end
 | ||
| of the innermost block that includes the declaration. Consider the
 | ||
| following example:
 | ||
| 
 | ||
|      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 C<local x = x>, the new C<x> being
 | ||
| declared is not in scope yet, and so the second C<x> refers to the
 | ||
| outside variable.
 | ||
| 
 | ||
| Because of the lexical scoping rules, local variables can be freely
 | ||
| accessed by functions defined inside their scope. A local variable used
 | ||
| by an inner function is called an I<upvalue>, or I<external local
 | ||
| variable>, inside the inner function.
 | ||
| 
 | ||
| Notice that each execution of a B<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 C<y> variable, while
 | ||
| all of them share the same C<x>.
 | ||
| 
 | ||
| =head2 2.7 - Error Handling
 | ||
| 
 | ||
| Because Lua is an embedded extension language, all Lua actions start
 | ||
| from C code in the host program calling a function from the Lua library
 | ||
| (see C<lua_pcall>). Whenever an error occurs during Lua compilation or
 | ||
| execution, control returns to C, which can take appropriate measures
 | ||
| (such as printing an error message).
 | ||
| 
 | ||
| Lua code can explicitly generate an error by calling the C<error>
 | ||
| function. If you need to catch errors in Lua, you can use the C<pcall>
 | ||
| function.
 | ||
| 
 | ||
| =head2 2.8 - Metatables
 | ||
| 
 | ||
| Every value in Lua can have a I<metatable>. This I<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 C<"__add"> in its
 | ||
| metatable. If it finds one, Lua calls this function to perform the
 | ||
| addition.
 | ||
| 
 | ||
| We call the keys in a metatable I<events> and the values
 | ||
| I<metamethods>. In the previous example, the event is C<"add"> and the
 | ||
| metamethod is the function that performs the addition.
 | ||
| 
 | ||
| You can query the metatable of any value through the C<getmetatable>
 | ||
| function.
 | ||
| 
 | ||
| You can replace the metatable of tables through the C<setmetatable>
 | ||
| function. You cannot change the metatable of other types from Lua
 | ||
| (except by using the debug library); you must use the C API for that.
 | ||
| 
 | ||
| Tables and full userdata have individual metatables (although multiple
 | ||
| tables and userdata can share their metatables). Values of all other
 | ||
| types share one single metatable per type; that is, there is one single
 | ||
| metatable for all numbers, one for all strings, etc.
 | ||
| 
 | ||
| A metatable controls how an object behaves in arithmetic operations,
 | ||
| order comparisons, concatenation, length operation, and indexing. A
 | ||
| metatable also can define a function to be called when a userdata is
 | ||
| garbage collected. For each of these operations Lua associates a
 | ||
| specific key called an I<event>. When Lua performs one of these
 | ||
| operations over a value, it checks whether this 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, 'C<__>'; for
 | ||
| instance, the key for operation "add" is the string C<"__add">. The
 | ||
| semantics of these operations is better explained by a Lua function
 | ||
| describing how the interpreter executes the 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 (C<rawget>,
 | ||
| C<tonumber>, etc.) are described in E<sect>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(getmetatable(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 B<nil>).
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<"add":> the C<+> operation.
 | ||
| 
 | ||
| The function C<getbinhandler> below defines how Lua chooses a handler
 | ||
| for a binary operation. First, Lua tries the first operand. If its type
 | ||
| does not define a handler for the operation, then Lua tries the second
 | ||
| operand.
 | ||
| 
 | ||
|      function getbinhandler (op1, op2, event)
 | ||
|        return metatable(op1)[event] or metatable(op2)[event]
 | ||
|      end
 | ||
| 
 | ||
| By using this function, the behavior of the C<op1 + op2> is
 | ||
| 
 | ||
|      function add_event (op1, op2)
 | ||
|        local o1, o2 = tonumber(op1), tonumber(op2)
 | ||
|        if o1 and o2 then  -- both operands are numeric?
 | ||
|          return o1 + o2   -- '+' here is the primitive 'add'
 | ||
|        else  -- at least one of the operands is not numeric
 | ||
|          local h = getbinhandler(op1, op2, "__add")
 | ||
|          if h then
 | ||
|            -- call the handler with both operands
 | ||
|            return (h(op1, op2))
 | ||
|          else  -- no handler available: default behavior
 | ||
|            error(···)
 | ||
|          end
 | ||
|        end
 | ||
|      end
 | ||
| 
 | ||
| =item * B<"sub":> the C<-> operation. Behavior similar to the "add"
 | ||
| operation.
 | ||
| 
 | ||
| =item * B<"mul":> the C<*> operation. Behavior similar to the "add"
 | ||
| operation.
 | ||
| 
 | ||
| =item * B<"div":> the C</> operation. Behavior similar to the "add"
 | ||
| operation.
 | ||
| 
 | ||
| =item * B<"mod":> the C<%> operation. Behavior similar to the "add"
 | ||
| operation, with the operation C<o1 - floor(o1/o2)*o2> as the primitive
 | ||
| operation.
 | ||
| 
 | ||
| =item * B<"pow":> the C<^> (exponentiation) operation. Behavior similar
 | ||
| to the "add" operation, with the function C<pow> (from the C math
 | ||
| library) as the primitive operation.
 | ||
| 
 | ||
| =item * B<"unm":> the unary C<-> operation.
 | ||
| 
 | ||
|      function unm_event (op)
 | ||
|        local o = tonumber(op)
 | ||
|        if o then  -- operand is numeric?
 | ||
|          return -o  -- '-' here is the primitive 'unm'
 | ||
|        else  -- the operand is not numeric.
 | ||
|          -- Try to get a handler from the operand
 | ||
|          local h = metatable(op).__unm
 | ||
|          if h then
 | ||
|            -- call the handler with the operand
 | ||
|            return (h(op))
 | ||
|          else  -- no handler available: default behavior
 | ||
|            error(···)
 | ||
|          end
 | ||
|        end
 | ||
|      end
 | ||
| 
 | ||
| =item * B<"concat":> the C<..> (concatenation) operation.
 | ||
| 
 | ||
|      function concat_event (op1, op2)
 | ||
|        if (type(op1) == "string" or type(op1) == "number") and
 | ||
|           (type(op2) == "string" or type(op2) == "number") then
 | ||
|          return op1 .. op2  -- primitive string concatenation
 | ||
|        else
 | ||
|          local h = getbinhandler(op1, op2, "__concat")
 | ||
|          if h then
 | ||
|            return (h(op1, op2))
 | ||
|          else
 | ||
|            error(···)
 | ||
|          end
 | ||
|        end
 | ||
|      end
 | ||
| 
 | ||
| =item * B<"len":> the C<#> operation.
 | ||
| 
 | ||
|      function len_event (op)
 | ||
|        if type(op) == "string" then
 | ||
|          return strlen(op)         -- primitive string length
 | ||
|        elseif type(op) == "table" then
 | ||
|          return #op                -- primitive table length
 | ||
|        else
 | ||
|          local h = metatable(op).__len
 | ||
|          if h then
 | ||
|            -- call the handler with the operand
 | ||
|            return (h(op))
 | ||
|          else  -- no handler available: default behavior
 | ||
|            error(···)
 | ||
|          end
 | ||
|        end
 | ||
|      end
 | ||
| 
 | ||
| See E<sect>2.5.5 for a description of the length of a table.
 | ||
| 
 | ||
| =item * B<"eq":> the C<==> operation. The function C<getcomphandler>
 | ||
| defines how Lua chooses a metamethod for comparison operators. A
 | ||
| metamethod only is selected when both objects being compared have the
 | ||
| same type and the same metamethod for the selected operation.
 | ||
| 
 | ||
|      function getcomphandler (op1, op2, event)
 | ||
|        if type(op1) ~= type(op2) then return nil end
 | ||
|        local mm1 = metatable(op1)[event]
 | ||
|        local mm2 = metatable(op2)[event]
 | ||
|        if mm1 == mm2 then return mm1 else return nil end
 | ||
|      end
 | ||
| 
 | ||
| The "eq" event is defined as follows:
 | ||
| 
 | ||
|      function eq_event (op1, op2)
 | ||
|        if type(op1) ~= type(op2) then  -- different types?
 | ||
|          return false   -- different objects
 | ||
|        end
 | ||
|        if op1 == op2 then   -- primitive equal?
 | ||
|          return true   -- objects are equal
 | ||
|        end
 | ||
|        -- try metamethod
 | ||
|        local h = getcomphandler(op1, op2, "__eq")
 | ||
|        if h then
 | ||
|          return (h(op1, op2))
 | ||
|        else
 | ||
|          return false
 | ||
|        end
 | ||
|      end
 | ||
| 
 | ||
| C<a ~= b> is equivalent to C<not (a == b)>.
 | ||
| 
 | ||
| =item * B<"lt":> the C<E<lt>> operation.
 | ||
| 
 | ||
|      function lt_event (op1, op2)
 | ||
|        if type(op1) == "number" and type(op2) == "number" then
 | ||
|          return op1 < op2   -- numeric comparison
 | ||
|        elseif type(op1) == "string" and type(op2) == "string" then
 | ||
|          return op1 < op2   -- lexicographic comparison
 | ||
|        else
 | ||
|          local h = getcomphandler(op1, op2, "__lt")
 | ||
|          if h then
 | ||
|            return (h(op1, op2))
 | ||
|          else
 | ||
|            error(···)
 | ||
|          end
 | ||
|        end
 | ||
|      end
 | ||
| 
 | ||
| C<a E<gt> b> is equivalent to C<b E<lt> a>.
 | ||
| 
 | ||
| =item * B<"le":> the C<E<lt>=> operation.
 | ||
| 
 | ||
|      function le_event (op1, op2)
 | ||
|        if type(op1) == "number" and type(op2) == "number" then
 | ||
|          return op1 <= op2   -- numeric comparison
 | ||
|        elseif type(op1) == "string" and type(op2) == "string" then
 | ||
|          return op1 <= op2   -- lexicographic comparison
 | ||
|        else
 | ||
|          local h = getcomphandler(op1, op2, "__le")
 | ||
|          if h then
 | ||
|            return (h(op1, op2))
 | ||
|          else
 | ||
|            h = getcomphandler(op1, op2, "__lt")
 | ||
|            if h then
 | ||
|              return not h(op2, op1)
 | ||
|            else
 | ||
|              error(···)
 | ||
|            end
 | ||
|          end
 | ||
|        end
 | ||
|      end
 | ||
| 
 | ||
| C<a E<gt>= b> is equivalent to C<b E<lt>= a>. Note that, in the absence
 | ||
| of a "le" metamethod, Lua tries the "lt", assuming that C<a E<lt>= b>
 | ||
| is equivalent to C<not (b E<lt> a)>.
 | ||
| 
 | ||
| =item * B<"index":> The indexing access C<table[key]>.
 | ||
| 
 | ||
|      function gettable_event (table, key)
 | ||
|        local h
 | ||
|        if type(table) == "table" then
 | ||
|          local v = rawget(table, key)
 | ||
|          if v ~= nil then return v end
 | ||
|          h = metatable(table).__index
 | ||
|          if h == nil then return nil end
 | ||
|        else
 | ||
|          h = metatable(table).__index
 | ||
|          if h == nil then
 | ||
|            error(···)
 | ||
|          end
 | ||
|        end
 | ||
|        if type(h) == "function" then
 | ||
|          return (h(table, key))     -- call the handler
 | ||
|        else return h[key]           -- or repeat operation on it
 | ||
|        end
 | ||
|      end
 | ||
| 
 | ||
| =item * B<"newindex":> The indexing assignment C<table[key] = value>.
 | ||
| 
 | ||
|      function settable_event (table, key, value)
 | ||
|        local h
 | ||
|        if type(table) == "table" then
 | ||
|          local v = rawget(table, key)
 | ||
|          if v ~= nil then rawset(table, key, value); return end
 | ||
|          h = metatable(table).__newindex
 | ||
|          if h == nil then rawset(table, key, value); return end
 | ||
|        else
 | ||
|          h = metatable(table).__newindex
 | ||
|          if h == nil then
 | ||
|            error(···)
 | ||
|          end
 | ||
|        end
 | ||
|        if type(h) == "function" then
 | ||
|          h(table, key,value)           -- call the handler
 | ||
|        else h[key] = value             -- or repeat operation on it
 | ||
|        end
 | ||
|      end
 | ||
| 
 | ||
| =item * B<"call":> called when Lua calls a value.
 | ||
| 
 | ||
|      function function_event (func, ...)
 | ||
|        if type(func) == "function" then
 | ||
|          return func(...)   -- primitive call
 | ||
|        else
 | ||
|          local h = metatable(func).__call
 | ||
|          if h then
 | ||
|            return h(func, ...)
 | ||
|          else
 | ||
|            error(···)
 | ||
|          end
 | ||
|        end
 | ||
|      end
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| =head2 2.9 - Environments
 | ||
| 
 | ||
| Besides metatables, objects of types thread, function, and userdata
 | ||
| have another table associated with them, called their I<environment>.
 | ||
| Like metatables, environments are regular tables and multiple objects
 | ||
| can share the same environment.
 | ||
| 
 | ||
| Threads are created sharing the environment of the creating thread.
 | ||
| Userdata and C functions are created sharing the environment of the
 | ||
| creating C function. Non-nested Lua functions (created by C<loadfile>,
 | ||
| C<loadstring> or C<load>) are created sharing the environment of the
 | ||
| creating thread. Nested Lua functions are created sharing the
 | ||
| environment of the creating Lua function.
 | ||
| 
 | ||
| Environments associated with userdata have no meaning for Lua. It is
 | ||
| only a convenience feature for programmers to associate a table to a
 | ||
| userdata.
 | ||
| 
 | ||
| Environments associated with threads are called I<global environments>.
 | ||
| They are used as the default environment for threads and non-nested Lua
 | ||
| functions created by the thread and can be directly accessed by C code
 | ||
| (see E<sect>3.3).
 | ||
| 
 | ||
| The environment associated with a C function can be directly accessed
 | ||
| by C code (see E<sect>3.3). It is used as the default environment for
 | ||
| other C functions and userdata created by the function.
 | ||
| 
 | ||
| Environments associated with Lua functions are used to resolve all
 | ||
| accesses to global variables within the function (see E<sect>2.3). They
 | ||
| are used as the default environment for nested Lua functions created by
 | ||
| the function.
 | ||
| 
 | ||
| You can change the environment of a Lua function or the running thread
 | ||
| by calling C<setfenv>. You can get the environment of a Lua function or
 | ||
| the running thread by calling C<getfenv>. To manipulate the environment
 | ||
| of other objects (userdata, C functions, other threads) you must use
 | ||
| the C API.
 | ||
| 
 | ||
| =head2 2.10 - Garbage Collection
 | ||
| 
 | ||
| Lua performs automatic memory management. This means that you have to
 | ||
| worry neither about allocating memory for new objects nor about freeing
 | ||
| it when the objects are no longer needed. Lua manages memory
 | ||
| automatically by running a I<garbage collector> from time to time to
 | ||
| collect all I<dead objects> (that is, objects that are no longer
 | ||
| accessible from Lua). All memory used by Lua is subject to automatic
 | ||
| management: tables, userdata, functions, threads, strings, etc.
 | ||
| 
 | ||
| Lua implements an incremental mark-and-sweep collector. It uses two
 | ||
| numbers to control its garbage-collection cycles: the
 | ||
| I<garbage-collector pause> and the I<garbage-collector step
 | ||
| multiplier>. Both use percentage points as units (so that a value of
 | ||
| 100 means an internal value of 1).
 | ||
| 
 | ||
| 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 100 mean the collector will not wait to
 | ||
| start a new cycle. A value of 200 means that the collector waits for
 | ||
| the total memory in use to double before starting a new cycle.
 | ||
| 
 | ||
| The step multiplier controls the relative speed of the collector
 | ||
| relative to memory allocation. Larger values make the collector more
 | ||
| aggressive but also increase the size of each incremental step. Values
 | ||
| smaller than 100 make the collector too slow and can result in the
 | ||
| collector never finishing a cycle. The default, 200, means that the
 | ||
| collector runs at "twice" the speed of memory allocation.
 | ||
| 
 | ||
| You can change these numbers by calling C<lua_gc> in C or
 | ||
| C<collectgarbage> in Lua. With these functions you can also control the
 | ||
| collector directly (e.g., stop and restart it).
 | ||
| 
 | ||
| =head2 2.10.1 - Garbage-Collection Metamethods
 | ||
| 
 | ||
| Using the C API, you can set garbage-collector metamethods for userdata
 | ||
| (see E<sect>2.8). These metamethods are also called I<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).
 | ||
| 
 | ||
| Garbage userdata with a field C<__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 I<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. The
 | ||
| userdata itself is freed only in the next garbage-collection cycle.
 | ||
| 
 | ||
| =head2 2.10.2 - Weak Tables
 | ||
| 
 | ||
| A I<weak table> is a table whose elements are I<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 this 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 C<__mode> field of
 | ||
| its metatable. If the C<__mode> field is a string containing the
 | ||
| character 'C<k>', the keys in the table are weak. If C<__mode> contains
 | ||
| 'C<v>', the values in the table are weak.
 | ||
| 
 | ||
| After you use a table as a metatable, you should not change the value
 | ||
| of its C<__mode> field. Otherwise, the weak behavior of the tables
 | ||
| controlled by this metatable is undefined.
 | ||
| 
 | ||
| =head2 2.11 - Coroutines
 | ||
| 
 | ||
| Lua supports coroutines, also called I<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 C<coroutine.create>. Its sole
 | ||
| argument is a function that is the main function of the coroutine. The
 | ||
| C<create> function only creates a new coroutine and returns a handle to
 | ||
| it (an object of type I<thread>); it does not start the coroutine
 | ||
| execution.
 | ||
| 
 | ||
| When you first call C<coroutine.resume>, passing as its first argument
 | ||
| a thread returned by C<coroutine.create>, the coroutine starts its
 | ||
| execution, at the first line of its main function. Extra arguments
 | ||
| passed to C<coroutine.resume> are passed on to the coroutine main
 | ||
| function. After the coroutine starts running, it runs until it
 | ||
| terminates or I<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, C<coroutine.resume> returns B<true>, plus any values
 | ||
| returned by the coroutine main function. In case of errors,
 | ||
| C<coroutine.resume> returns B<false> plus an error message.
 | ||
| 
 | ||
| A coroutine yields by calling C<coroutine.yield>. When a coroutine
 | ||
| yields, the corresponding C<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, C<coroutine.resume> also
 | ||
| returns B<true>, plus any values passed to C<coroutine.yield>. The next
 | ||
| time you resume the same coroutine, it continues its execution from the
 | ||
| point where it yielded, with the call to C<coroutine.yield> returning
 | ||
| any extra arguments passed to C<coroutine.resume>.
 | ||
| 
 | ||
| Like C<coroutine.create>, the C<coroutine.wrap> function also creates a
 | ||
| coroutine, but instead of returning the coroutine itself, it returns a
 | ||
| function that, when called, resumes the coroutine. Any arguments passed
 | ||
| to this function go as extra arguments to C<coroutine.resume>.
 | ||
| C<coroutine.wrap> returns all the values returned by
 | ||
| C<coroutine.resume>, except the first one (the boolean error code).
 | ||
| Unlike C<coroutine.resume>, C<coroutine.wrap> does not catch errors;
 | ||
| any error is propagated to the caller.
 | ||
| 
 | ||
| As an example, consider the following code:
 | ||
| 
 | ||
|      function foo (a)
 | ||
|        print("foo", a)
 | ||
|        return coroutine.yield(2*a)
 | ||
|      end
 | ||
|      
 | ||
|      co = coroutine.create(function (a,b)
 | ||
|            print("co-body", a, b)
 | ||
|            local r = foo(a+1)
 | ||
|            print("co-body", r)
 | ||
|            local r, s = coroutine.yield(a+b, a-b)
 | ||
|            print("co-body", r, s)
 | ||
|            return b, "end"
 | ||
|      end)
 | ||
|             
 | ||
|      print("main", coroutine.resume(co, 1, 10))
 | ||
|      print("main", coroutine.resume(co, "r"))
 | ||
|      print("main", coroutine.resume(co, "x", "y"))
 | ||
|      print("main", coroutine.resume(co, "x", "y"))
 | ||
| 
 | ||
| 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
 | ||
| 
 | ||
| =head1 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 C<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 their
 | ||
| arguments exactly once (except for the first argument, which is always
 | ||
| a Lua state), and so do not generate any hidden side-effects.
 | ||
| 
 | ||
| As in most C libraries, the Lua API functions do not check their
 | ||
| arguments for validity or consistency. However, you can change this
 | ||
| behavior by compiling Lua with a proper definition for the macro
 | ||
| C<luai_apicheck>, in file C<luaconf.h>.
 | ||
| 
 | ||
| =head2 3.1 - The Stack
 | ||
| 
 | ||
| Lua uses a I<virtual stack> to pass values to and from C. Each element
 | ||
| in this stack represents a Lua value (B<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. This 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 C<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 I<index>: A positive index represents an I<absolute>
 | ||
| stack position (starting at 1); a negative index represents an
 | ||
| I<offset> relative to the top of the stack. More specifically, if the
 | ||
| stack has I<n> elements, then index 1 represents the first element
 | ||
| (that is, the element that was pushed onto the stack first) and index
 | ||
| I<n> represents the last element; index -1 also represents the last
 | ||
| element (that is, the element at the top) and index I<-n> represents
 | ||
| the first element. We say that an index is I<valid> if it lies between
 | ||
| 1 and the stack top (that is, if C<1 E<le> abs(index) E<le> top>).
 | ||
| 
 | ||
| =head2 3.2 - Stack Size
 | ||
| 
 | ||
| When you interact with Lua API, you are responsible for ensuring
 | ||
| consistency. In particular, I<you are responsible for controlling stack
 | ||
| overflow>. You can use the function C<lua_checkstack> to grow the stack
 | ||
| size.
 | ||
| 
 | ||
| Whenever Lua calls C, it ensures that at least C<LUA_MINSTACK> stack
 | ||
| positions are available. C<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 C<lua_checkstack>. Such indices are called I<acceptable
 | ||
| indices>. More formally, we define an I<acceptable index> as follows:
 | ||
| 
 | ||
|      (index < 0 && abs(index) <= top) ||
 | ||
|      (index > 0 && index <= stackspace)
 | ||
| 
 | ||
| Note that 0 is never an acceptable index.
 | ||
| 
 | ||
| =head2 3.3 - Pseudo-Indices
 | ||
| 
 | ||
| Unless otherwise noted, any function that accepts valid indices can
 | ||
| also be called with I<pseudo-indices>, which represent some Lua values
 | ||
| that are accessible to C code but which 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
 | ||
| E<sect>3.4).
 | ||
| 
 | ||
| The thread environment (where global variables live) is always at
 | ||
| pseudo-index C<LUA_GLOBALSINDEX>. The environment of the running C
 | ||
| function is always at pseudo-index C<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);
 | ||
| 
 | ||
| =head2 3.4 - C Closures
 | ||
| 
 | ||
| When a C function is created, it is possible to associate some values
 | ||
| with it, thus creating a I<C closure>; these values are called
 | ||
| I<upvalues> and are accessible to the function whenever it is called
 | ||
| (see C<lua_pushcclosure>).
 | ||
| 
 | ||
| Whenever a C function is called, its upvalues are located at specific
 | ||
| pseudo-indices. These pseudo-indices are produced by the macro
 | ||
| C<lua_upvalueindex>. The first value associated with a function is at
 | ||
| position C<lua_upvalueindex(1)>, and so on. Any access to
 | ||
| C<lua_upvalueindex(I<n>)>, where I<n> is greater than the number of
 | ||
| upvalues of the current function (but not greater than 256), produces
 | ||
| an acceptable (but invalid) index.
 | ||
| 
 | ||
| =head2 3.5 - Registry
 | ||
| 
 | ||
| Lua provides a I<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 C<LUA_REGISTRYINDEX>. Any C library can
 | ||
| store data into this table, but it should take care to choose keys
 | ||
| different from those used by other libraries, to avoid collisions.
 | ||
| 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
 | ||
| for other purposes.
 | ||
| 
 | ||
| =head2 3.6 - Error Handling in C
 | ||
| 
 | ||
| Internally, Lua uses the C C<longjmp> facility to handle errors. (You
 | ||
| can also choose to use exceptions if you use C++; see file
 | ||
| C<luaconf.h>.) When Lua faces any error (such as memory allocation
 | ||
| errors, type errors, syntax errors, and runtime errors) it I<raises> an
 | ||
| error; that is, it does a long jump. A I<protected environment> uses
 | ||
| C<setjmp> to set a recover point; any error jumps to the most recent
 | ||
| active recover point.
 | ||
| 
 | ||
| Most functions in the API can throw an error, for instance due to a
 | ||
| memory allocation error. The documentation for each function indicates
 | ||
| whether it can throw errors.
 | ||
| 
 | ||
| Inside a C function you can throw an error by calling C<lua_error>.
 | ||
| 
 | ||
| =head2 3.7 - Functions and Types
 | ||
| 
 | ||
| Here we list all functions and types from the C API in alphabetical
 | ||
| order. Each function has an indicator like this: [-o, +p, I<x>]
 | ||
| 
 | ||
| The first field, C<o>, is how many elements the function pops from the
 | ||
| stack. The second field, C<p>, is how many elements the function pushes
 | ||
| onto the stack. (Any function always pushes its results after popping
 | ||
| its arguments.) A field in the form C<x|y> means the function can push
 | ||
| (or pop) C<x> or C<y> elements, depending on the situation; an
 | ||
| interrogation mark 'C<?>' means that we cannot know how many elements
 | ||
| the function pops/pushes by looking only at its arguments (e.g., they
 | ||
| may depend on what is on the stack). The third field, C<x>, tells
 | ||
| whether the function may throw errors: 'C<->' means the function never
 | ||
| throws any error; 'C<m>' means the function may throw an error only due
 | ||
| to not enough memory; 'C<e>' means the function may throw other kinds
 | ||
| of errors; 'C<v>' means the function may throw an error on purpose.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_Alloc>
 | ||
| 
 | ||
|  typedef void * (*lua_Alloc) (void *ud,
 | ||
|                               void *ptr,
 | ||
|                               size_t osize,
 | ||
|                               size_t nsize);
 | ||
| 
 | ||
| The type of the memory-allocation function used by Lua states. The
 | ||
| allocator function must provide a functionality similar to C<realloc>,
 | ||
| but not exactly the same. Its arguments are C<ud>, an opaque pointer
 | ||
| passed to C<lua_newstate>; C<ptr>, a pointer to the block being
 | ||
| allocated/reallocated/freed; C<osize>, the original size of the block;
 | ||
| C<nsize>, the new size of the block. C<ptr> is C<NULL> if and only if
 | ||
| C<osize> is zero. When C<nsize> is zero, the allocator must return
 | ||
| C<NULL>; if C<osize> is not zero, it should free the block pointed to
 | ||
| by C<ptr>. When C<nsize> is not zero, the allocator returns C<NULL> if
 | ||
| and only if it cannot fill the request. When C<nsize> is not zero and
 | ||
| C<osize> is zero, the allocator should behave like C<malloc>. When
 | ||
| C<nsize> and C<osize> are not zero, the allocator behaves like
 | ||
| C<realloc>. Lua assumes that the allocator never fails when C<osize
 | ||
| E<gt>= nsize>.
 | ||
| 
 | ||
| Here is a simple implementation for the allocator function. It is used
 | ||
| in the auxiliary library by C<luaL_newstate>.
 | ||
| 
 | ||
|      static void *l_alloc (void *ud, void *ptr, size_t osize,
 | ||
|                                                 size_t nsize) {
 | ||
|        (void)ud;  (void)osize;  /* not used */
 | ||
|        if (nsize == 0) {
 | ||
|          free(ptr);
 | ||
|          return NULL;
 | ||
|        }
 | ||
|        else
 | ||
|          return realloc(ptr, nsize);
 | ||
|      }
 | ||
| 
 | ||
| This code assumes that C<free(NULL)> has no effect and that
 | ||
| C<realloc(NULL, size)> is equivalent to C<malloc(size)>. ANSI C ensures
 | ||
| both behaviors.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_atpanic>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  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
 | ||
| I<panic function> and then calls C<exit(EXIT_FAILURE)>, thus exiting
 | ||
| the host application. Your panic function can avoid this exit by never
 | ||
| returning (e.g., doing a long jump).
 | ||
| 
 | ||
| The panic function can access the error message at the top of the
 | ||
| stack.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_call>
 | ||
| 
 | ||
| [-(nargs + 1), +nresults, I<e>]
 | ||
| 
 | ||
|  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 C<lua_call>; C<nargs> is the number of
 | ||
| arguments that you pushed onto the stack. All arguments and the
 | ||
| function value are popped from the stack when the function is called.
 | ||
| The function results are pushed onto the stack when the function
 | ||
| returns. The number of results is adjusted to C<nresults>, unless
 | ||
| C<nresults> is C<LUA_MULTRET>. In this case, I<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 of the stack.
 | ||
| 
 | ||
| Any error inside the called function is propagated upwards (with a
 | ||
| C<longjmp>).
 | ||
| 
 | ||
| The following example shows how the host program can do the equivalent
 | ||
| to this Lua code:
 | ||
| 
 | ||
|      a = f("how", t.x, 14)
 | ||
| 
 | ||
| Here it is in C:
 | ||
| 
 | ||
|      lua_getfield(L, LUA_GLOBALSINDEX, "f"); /* function to be called */
 | ||
|      lua_pushstring(L, "how");                        /* 1st argument */
 | ||
|      lua_getfield(L, LUA_GLOBALSINDEX, "t");   /* table to be indexed */
 | ||
|      lua_getfield(L, -1, "x");        /* push result of t.x (2nd arg) */
 | ||
|      lua_remove(L, -2);                  /* remove 't' from the stack */
 | ||
|      lua_pushinteger(L, 14);                          /* 3rd argument */
 | ||
|      lua_call(L, 3, 1);     /* call 'f' with 3 arguments and 1 result */
 | ||
|      lua_setfield(L, LUA_GLOBALSINDEX, "a");        /* set global 'a' */
 | ||
| 
 | ||
| Note that the code above is "balanced": at its end, the stack is back
 | ||
| to its original configuration. This is considered good programming
 | ||
| practice.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_CFunction>
 | ||
| 
 | ||
|  typedef int (*lua_CFunction) (lua_State *L);
 | ||
| 
 | ||
| Type for C functions.
 | ||
| 
 | ||
| In order to communicate properly with Lua, a C function must use 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, C<lua_gettop(L)> returns the number of arguments
 | ||
| received by the function. The first argument (if any) is at index 1 and
 | ||
| its last argument is at index C<lua_gettop(L)>. 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 discarded
 | ||
| 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");
 | ||
|            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 */
 | ||
|      }
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_checkstack>
 | ||
| 
 | ||
| [-0, +0, I<m>]
 | ||
| 
 | ||
|  int lua_checkstack (lua_State *L, int extra);
 | ||
| 
 | ||
| Ensures that there are at least C<extra> free stack slots in the stack.
 | ||
| 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.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_close>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  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 this 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.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_concat>
 | ||
| 
 | ||
| [-n, +1, I<e>]
 | ||
| 
 | ||
|  void lua_concat (lua_State *L, int n);
 | ||
| 
 | ||
| Concatenates the C<n> values at the top of the stack, pops them, and
 | ||
| leaves the result at the top. If C<n> is 1, the result is the single
 | ||
| value on the stack (that is, the function does nothing); if C<n> is 0,
 | ||
| the result is the empty string. Concatenation is performed following
 | ||
| the usual semantics of Lua (see E<sect>2.5.4).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_cpcall>
 | ||
| 
 | ||
| [-0, +(0|1), I<->]
 | ||
| 
 | ||
|  int lua_cpcall (lua_State *L, lua_CFunction func, void *ud);
 | ||
| 
 | ||
| Calls the C function C<func> in protected mode. C<func> starts with
 | ||
| only one element in its stack, a light userdata containing C<ud>. In
 | ||
| case of errors, C<lua_cpcall> returns the same error codes as
 | ||
| C<lua_pcall>, plus the error object on the top of the stack; otherwise,
 | ||
| it returns zero, and does not change the stack. All values returned by
 | ||
| C<func> are discarded.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_createtable>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  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 C<narr> array elements and C<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 C<lua_newtable>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_dump>
 | ||
| 
 | ||
| [-0, +0, I<m>]
 | ||
| 
 | ||
|  int lua_dump (lua_State *L, lua_Writer writer, void *data);
 | ||
| 
 | ||
| Dumps a function as a binary chunk. 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, C<lua_dump> calls function C<writer> (see C<lua_Writer>) with
 | ||
| the given C<data> 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 Lua function from the stack.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_equal>
 | ||
| 
 | ||
| [-0, +0, I<e>]
 | ||
| 
 | ||
|  int lua_equal (lua_State *L, int index1, int index2);
 | ||
| 
 | ||
| Returns 1 if the two values in acceptable indices C<index1> and
 | ||
| C<index2> are equal, following the semantics of the Lua C<==> operator
 | ||
| (that is, may call metamethods). Otherwise returns 0. Also returns 0 if
 | ||
| any of the indices is non valid.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_error>
 | ||
| 
 | ||
| [-1, +0, I<v>]
 | ||
| 
 | ||
|  int lua_error (lua_State *L);
 | ||
| 
 | ||
| Generates a Lua error. The error message (which can actually be a Lua
 | ||
| value of any type) must be on the stack top. This function does a long
 | ||
| jump, and therefore never returns. (see C<luaL_error>).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_gc>
 | ||
| 
 | ||
| [-0, +0, I<e>]
 | ||
| 
 | ||
|  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 C<what>:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<C<LUA_GCSTOP>:> stops the garbage collector.
 | ||
| 
 | ||
| =item * B<C<LUA_GCRESTART>:> restarts the garbage collector.
 | ||
| 
 | ||
| =item * B<C<LUA_GCCOLLECT>:> performs a full garbage-collection cycle.
 | ||
| 
 | ||
| =item * B<C<LUA_GCCOUNT>:> returns the current amount of memory (in
 | ||
| Kbytes) in use by Lua.
 | ||
| 
 | ||
| =item * B<C<LUA_GCCOUNTB>:> returns the remainder of dividing the
 | ||
| current amount of bytes of memory in use by Lua by 1024.
 | ||
| 
 | ||
| =item * B<C<LUA_GCSTEP>:> performs an incremental step of garbage
 | ||
| collection. The step "size" is controlled by C<data> (larger values
 | ||
| mean more steps) in a non-specified way. If you want to control the
 | ||
| step size you must experimentally tune the value of C<data>. The
 | ||
| function returns 1 if the step finished a garbage-collection cycle.
 | ||
| 
 | ||
| =item * B<C<LUA_GCSETPAUSE>:> sets C<data> as the new value for the
 | ||
| I<pause> of the collector (see E<sect>2.10). The function returns the
 | ||
| previous value of the pause.
 | ||
| 
 | ||
| =item * B<C<LUA_GCSETSTEPMUL>:> sets C<data> as the new value for the
 | ||
| I<step multiplier> of the collector (see E<sect>2.10). The function
 | ||
| returns the previous value of the step multiplier.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_getallocf>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  lua_Alloc lua_getallocf (lua_State *L, void **ud);
 | ||
| 
 | ||
| Returns the memory-allocation function of a given state. If C<ud> is
 | ||
| not C<NULL>, Lua stores in C<*ud> the opaque pointer passed to
 | ||
| C<lua_newstate>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_getfenv>
 | ||
| 
 | ||
| [-0, +1, I<->]
 | ||
| 
 | ||
|  void lua_getfenv (lua_State *L, int index);
 | ||
| 
 | ||
| Pushes onto the stack the environment table of the value at the given
 | ||
| index.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_getfield>
 | ||
| 
 | ||
| [-0, +1, I<e>]
 | ||
| 
 | ||
|  void lua_getfield (lua_State *L, int index, const char *k);
 | ||
| 
 | ||
| Pushes onto the stack the value C<t[k]>, where C<t> is the value at the
 | ||
| given valid index. As in Lua, this function may trigger a metamethod
 | ||
| for the "index" event (see E<sect>2.8).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_getglobal>
 | ||
| 
 | ||
| [-0, +1, I<e>]
 | ||
| 
 | ||
|  void lua_getglobal (lua_State *L, const char *name);
 | ||
| 
 | ||
| Pushes onto the stack the value of the global C<name>. It is defined as
 | ||
| a macro:
 | ||
| 
 | ||
|      #define lua_getglobal(L,s)  lua_getfield(L, LUA_GLOBALSINDEX, s)
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_getmetatable>
 | ||
| 
 | ||
| [-0, +(0|1), I<->]
 | ||
| 
 | ||
|  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, the function returns 0 and pushes nothing on the
 | ||
| stack.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_gettable>
 | ||
| 
 | ||
| [-1, +1, I<e>]
 | ||
| 
 | ||
|  void lua_gettable (lua_State *L, int index);
 | ||
| 
 | ||
| Pushes onto the stack the value C<t[k]>, where C<t> is the value at the
 | ||
| given valid index and C<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 E<sect>2.8).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_gettop>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  int lua_gettop (lua_State *L);
 | ||
| 
 | ||
| Returns the index of the top element in the stack. Because indices
 | ||
| start at 1, this result is equal to the number of elements in the stack
 | ||
| (and so 0 means an empty stack).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_insert>
 | ||
| 
 | ||
| [-1, +1, I<->]
 | ||
| 
 | ||
|  void lua_insert (lua_State *L, int index);
 | ||
| 
 | ||
| Moves the top element into the given valid index, shifting up the
 | ||
| elements above this index to open space. Cannot be called with a
 | ||
| pseudo-index, because a pseudo-index is not an actual stack position.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_Integer>
 | ||
| 
 | ||
|  typedef ptrdiff_t lua_Integer;
 | ||
| 
 | ||
| The type used by the Lua API to represent integral values.
 | ||
| 
 | ||
| By default it is a C<ptrdiff_t>, which is usually the largest signed
 | ||
| integral type the machine handles "comfortably".
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_isboolean>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  int lua_isboolean (lua_State *L, int index);
 | ||
| 
 | ||
| Returns 1 if the value at the given acceptable index has type boolean,
 | ||
| and 0 otherwise.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_iscfunction>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  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.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_isfunction>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  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.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_islightuserdata>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  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.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_isnil>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  int lua_isnil (lua_State *L, int index);
 | ||
| 
 | ||
| Returns 1 if the value at the given acceptable index is B<nil>, and 0
 | ||
| otherwise.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_isnone>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  int lua_isnone (lua_State *L, int index);
 | ||
| 
 | ||
| Returns 1 if the given acceptable index is not valid (that is, it
 | ||
| refers to an element outside the current stack), and 0 otherwise.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_isnoneornil>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  int lua_isnoneornil (lua_State *L, int index);
 | ||
| 
 | ||
| Returns 1 if the given acceptable index is not valid (that is, it
 | ||
| refers to an element outside the current stack) or if the value at this
 | ||
| index is B<nil>, and 0 otherwise.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_isnumber>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  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.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_isstring>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  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.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_istable>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  int lua_istable (lua_State *L, int index);
 | ||
| 
 | ||
| Returns 1 if the value at the given acceptable index is a table, and 0
 | ||
| otherwise.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_isthread>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  int lua_isthread (lua_State *L, int index);
 | ||
| 
 | ||
| Returns 1 if the value at the given acceptable index is a thread, and 0
 | ||
| otherwise.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_isuserdata>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  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.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_lessthan>
 | ||
| 
 | ||
| [-0, +0, I<e>]
 | ||
| 
 | ||
|  int lua_lessthan (lua_State *L, int index1, int index2);
 | ||
| 
 | ||
| Returns 1 if the value at acceptable index C<index1> is smaller than
 | ||
| the value at acceptable index C<index2>, following the semantics of the
 | ||
| Lua C<E<lt>> operator (that is, may call metamethods). Otherwise
 | ||
| returns 0. Also returns 0 if any of the indices is non valid.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_load>
 | ||
| 
 | ||
| [-0, +1, I<->]
 | ||
| 
 | ||
|  int lua_load (lua_State *L,
 | ||
|                lua_Reader reader,
 | ||
|                void *data,
 | ||
|                const char *chunkname);
 | ||
| 
 | ||
| Loads a Lua chunk. If there are no errors, C<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 C<lua_load> are:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<0:> no errors;
 | ||
| 
 | ||
| =item * B<C<LUA_ERRSYNTAX>:> syntax error during pre-compilation;
 | ||
| 
 | ||
| =item * B<C<LUA_ERRMEM>:> memory allocation error.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| This function only loads a chunk; it does not run it.
 | ||
| 
 | ||
| C<lua_load> automatically detects whether the chunk is text or binary,
 | ||
| and loads it accordingly (see program C<luac>).
 | ||
| 
 | ||
| The C<lua_load> function uses a user-supplied C<reader> function to
 | ||
| read the chunk (see C<lua_Reader>). The C<data> argument is an opaque
 | ||
| value passed to the reader function.
 | ||
| 
 | ||
| The C<chunkname> argument gives a name to the chunk, which is used for
 | ||
| error messages and in debug information (see E<sect>3.8).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_newstate>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  lua_State *lua_newstate (lua_Alloc f, void *ud);
 | ||
| 
 | ||
| Creates a new, independent state. Returns C<NULL> if cannot create the
 | ||
| state (due to lack of memory). The argument C<f> is the allocator
 | ||
| function; Lua does all memory allocation for this state through this
 | ||
| function. The second argument, C<ud>, is an opaque pointer that Lua
 | ||
| simply passes to the allocator in every call.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_newtable>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  void lua_newtable (lua_State *L);
 | ||
| 
 | ||
| Creates a new empty table and pushes it onto the stack. It is
 | ||
| equivalent to C<lua_createtable(L, 0, 0)>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_newthread>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  lua_State *lua_newthread (lua_State *L);
 | ||
| 
 | ||
| Creates a new thread, pushes it on the stack, and returns a pointer to
 | ||
| a C<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 execution stack.
 | ||
| 
 | ||
| There is no explicit function to close or to destroy a thread. Threads
 | ||
| are subject to garbage collection, like any Lua object.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_newuserdata>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  void *lua_newuserdata (lua_State *L, size_t size);
 | ||
| 
 | ||
| This function allocates a new block of memory with the given size,
 | ||
| pushes onto the stack a new full userdata with the block address, and
 | ||
| returns this address.
 | ||
| 
 | ||
| Userdata represent C values in Lua. A I<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 with a C<gc> metamethod, Lua calls
 | ||
| the metamethod and marks the userdata as finalized. When this userdata
 | ||
| is collected again then Lua frees its corresponding memory.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_next>
 | ||
| 
 | ||
| [-1, +(2|0), I<e>]
 | ||
| 
 | ||
|  int lua_next (lua_State *L, int index);
 | ||
| 
 | ||
| Pops a key from the stack, and pushes a key-value pair from the table
 | ||
| at the given index (the "next" pair after the given key). If there are
 | ||
| no more elements in the table, then C<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) {
 | ||
|        /* uses 'key' (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)));
 | ||
|        /* removes 'value'; keeps 'key' for next iteration */
 | ||
|        lua_pop(L, 1);
 | ||
|      }
 | ||
| 
 | ||
| While traversing a table, do not call C<lua_tolstring> directly on a
 | ||
| key, unless you know that the key is actually a string. Recall that
 | ||
| C<lua_tolstring> I<changes> the value at the given index; this confuses
 | ||
| the next call to C<lua_next>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_Number>
 | ||
| 
 | ||
|  typedef double lua_Number;
 | ||
| 
 | ||
| The type of numbers in Lua. By default, it is double, but that can be
 | ||
| changed in C<luaconf.h>.
 | ||
| 
 | ||
| Through the configuration file you can change Lua to operate with
 | ||
| another type for numbers (e.g., float or long).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_objlen>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  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 ('C<#>'); for userdata, this is the size of the
 | ||
| block of memory allocated for the userdata; for other values, it is 0.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pcall>
 | ||
| 
 | ||
| [-(nargs + 1), +(nresults|1), I<->]
 | ||
| 
 | ||
|  int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc);
 | ||
| 
 | ||
| Calls a function in protected mode.
 | ||
| 
 | ||
| Both C<nargs> and C<nresults> have the same meaning as in C<lua_call>.
 | ||
| If there are no errors during the call, C<lua_pcall> behaves exactly
 | ||
| like C<lua_call>. However, if there is any error, C<lua_pcall> catches
 | ||
| it, pushes a single value on the stack (the error message), and returns
 | ||
| an error code. Like C<lua_call>, C<lua_pcall> always removes the
 | ||
| function and its arguments from the stack.
 | ||
| 
 | ||
| If C<errfunc> is 0, then the error message returned on the stack is
 | ||
| exactly the original error message. Otherwise, C<errfunc> is the stack
 | ||
| index of an I<error handler function>. (In the current implementation,
 | ||
| this index cannot be a pseudo-index.) In case of runtime errors, this
 | ||
| function will be called with the error message and its return value
 | ||
| will be the message returned on the stack by C<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 C<lua_pcall>, since
 | ||
| by then the stack has unwound.
 | ||
| 
 | ||
| The C<lua_pcall> function returns 0 in case of success or one of the
 | ||
| following error codes (defined in C<lua.h>):
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<C<LUA_ERRRUN>:> a runtime error.
 | ||
| 
 | ||
| =item * B<C<LUA_ERRMEM>:> memory allocation error. For such errors, Lua
 | ||
| does not call the error handler function.
 | ||
| 
 | ||
| =item * B<C<LUA_ERRERR>:> error while running the error handler
 | ||
| function.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pop>
 | ||
| 
 | ||
| [-n, +0, I<->]
 | ||
| 
 | ||
|  void lua_pop (lua_State *L, int n);
 | ||
| 
 | ||
| Pops C<n> elements from the stack.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pushboolean>
 | ||
| 
 | ||
| [-0, +1, I<->]
 | ||
| 
 | ||
|  void lua_pushboolean (lua_State *L, int b);
 | ||
| 
 | ||
| Pushes a boolean value with value C<b> onto the stack.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pushcclosure>
 | ||
| 
 | ||
| [-n, +1, I<m>]
 | ||
| 
 | ||
|  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 E<sect>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 C<lua_pushcclosure> is called to create and push the C
 | ||
| function onto the stack, with the argument C<n> telling how many values
 | ||
| should be associated with the function. C<lua_pushcclosure> also pops
 | ||
| these values from the stack.
 | ||
| 
 | ||
| The maximum value for C<n> is 255.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pushcfunction>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  void lua_pushcfunction (lua_State *L, lua_CFunction f);
 | ||
| 
 | ||
| Pushes a C function onto the stack. This function receives a pointer to
 | ||
| a C function and pushes onto the stack a Lua value of type C<function>
 | ||
| that, when called, invokes the corresponding C function.
 | ||
| 
 | ||
| Any function to be registered in Lua must follow the correct protocol
 | ||
| to receive its parameters and return its results (see
 | ||
| C<lua_CFunction>).
 | ||
| 
 | ||
| C<lua_pushcfunction> is defined as a macro:
 | ||
| 
 | ||
|      #define lua_pushcfunction(L,f)  lua_pushcclosure(L,f,0)
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pushfstring>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  const char *lua_pushfstring (lua_State *L, const char *fmt, ...);
 | ||
| 
 | ||
| Pushes onto the stack a formatted string and returns a pointer to this
 | ||
| string. It is similar to the C function C<sprintf>, but has some
 | ||
| important differences:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * You do not have to allocate space for the result: the result is
 | ||
| a Lua string and Lua takes care of memory allocation (and deallocation,
 | ||
| through garbage collection).
 | ||
| 
 | ||
| =item * The conversion specifiers are quite restricted. There are no
 | ||
| flags, widths, or precisions. The conversion specifiers can only be
 | ||
| 'C<%%>' (inserts a 'C<%>' in the string), 'C<%s>' (inserts a
 | ||
| zero-terminated string, with no size restrictions), 'C<%f>' (inserts a
 | ||
| C<lua_Number>), 'C<%p>' (inserts a pointer as a hexadecimal numeral),
 | ||
| 'C<%d>' (inserts an C<int>), and 'C<%c>' (inserts an C<int> as a
 | ||
| character).
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pushinteger>
 | ||
| 
 | ||
| [-0, +1, I<->]
 | ||
| 
 | ||
|  void lua_pushinteger (lua_State *L, lua_Integer n);
 | ||
| 
 | ||
| Pushes a number with value C<n> onto the stack.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pushlightuserdata>
 | ||
| 
 | ||
| [-0, +1, I<->]
 | ||
| 
 | ||
|  void lua_pushlightuserdata (lua_State *L, void *p);
 | ||
| 
 | ||
| Pushes a light userdata onto the stack.
 | ||
| 
 | ||
| Userdata represent C values in Lua. A I<light userdata> represents a
 | ||
| pointer. It is a value (like a number): you do not create it, it has no
 | ||
| individual metatable, and it is not collected (as it was never
 | ||
| created). A light userdata is equal to "any" light userdata with the
 | ||
| same C address.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pushliteral>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  void lua_pushliteral (lua_State *L, const char *s);
 | ||
| 
 | ||
| This macro is equivalent to C<lua_pushlstring>, but can be used only
 | ||
| when C<s> is a literal string. In these cases, it automatically
 | ||
| provides the string length.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pushlstring>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  void lua_pushlstring (lua_State *L, const char *s, size_t len);
 | ||
| 
 | ||
| Pushes the string pointed to by C<s> with size C<len> onto the stack.
 | ||
| Lua makes (or reuses) an internal copy of the given string, so the
 | ||
| memory at C<s> can be freed or reused immediately after the function
 | ||
| returns. The string can contain embedded zeros.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pushnil>
 | ||
| 
 | ||
| [-0, +1, I<->]
 | ||
| 
 | ||
|  void lua_pushnil (lua_State *L);
 | ||
| 
 | ||
| Pushes a nil value onto the stack.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pushnumber>
 | ||
| 
 | ||
| [-0, +1, I<->]
 | ||
| 
 | ||
|  void lua_pushnumber (lua_State *L, lua_Number n);
 | ||
| 
 | ||
| Pushes a number with value C<n> onto the stack.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pushstring>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  void lua_pushstring (lua_State *L, const char *s);
 | ||
| 
 | ||
| Pushes the zero-terminated string pointed to by C<s> onto the stack.
 | ||
| Lua makes (or reuses) an internal copy of the given string, so the
 | ||
| memory at C<s> can be freed or reused immediately after the function
 | ||
| returns. The string cannot contain embedded zeros; it is assumed to end
 | ||
| at the first zero.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pushthread>
 | ||
| 
 | ||
| [-0, +1, I<->]
 | ||
| 
 | ||
|  int lua_pushthread (lua_State *L);
 | ||
| 
 | ||
| Pushes the thread represented by C<L> onto the stack. Returns 1 if this
 | ||
| thread is the main thread of its state.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pushvalue>
 | ||
| 
 | ||
| [-0, +1, I<->]
 | ||
| 
 | ||
|  void lua_pushvalue (lua_State *L, int index);
 | ||
| 
 | ||
| Pushes a copy of the element at the given valid index onto the stack.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_pushvfstring>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  const char *lua_pushvfstring (lua_State *L,
 | ||
|                                const char *fmt,
 | ||
|                                va_list argp);
 | ||
| 
 | ||
| Equivalent to C<lua_pushfstring>, except that it receives a C<va_list>
 | ||
| instead of a variable number of arguments.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_rawequal>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  int lua_rawequal (lua_State *L, int index1, int index2);
 | ||
| 
 | ||
| Returns 1 if the two values in acceptable indices C<index1> and
 | ||
| C<index2> are primitively equal (that is, without calling metamethods).
 | ||
| Otherwise returns 0. Also returns 0 if any of the indices are non
 | ||
| valid.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_rawget>
 | ||
| 
 | ||
| [-1, +1, I<->]
 | ||
| 
 | ||
|  void lua_rawget (lua_State *L, int index);
 | ||
| 
 | ||
| Similar to C<lua_gettable>, but does a raw access (i.e., without
 | ||
| metamethods).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_rawgeti>
 | ||
| 
 | ||
| [-0, +1, I<->]
 | ||
| 
 | ||
|  void lua_rawgeti (lua_State *L, int index, int n);
 | ||
| 
 | ||
| Pushes onto the stack the value C<t[n]>, where C<t> is the value at the
 | ||
| given valid index. The access is raw; that is, it does not invoke
 | ||
| metamethods.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_rawset>
 | ||
| 
 | ||
| [-2, +0, I<m>]
 | ||
| 
 | ||
|  void lua_rawset (lua_State *L, int index);
 | ||
| 
 | ||
| Similar to C<lua_settable>, but does a raw assignment (i.e., without
 | ||
| metamethods).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_rawseti>
 | ||
| 
 | ||
| [-1, +0, I<m>]
 | ||
| 
 | ||
|  void lua_rawseti (lua_State *L, int index, int n);
 | ||
| 
 | ||
| Does the equivalent of C<t[n] = v>, where C<t> is the value at the
 | ||
| given valid index and C<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.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_Reader>
 | ||
| 
 | ||
|  typedef const char * (*lua_Reader) (lua_State *L,
 | ||
|                                      void *data,
 | ||
|                                      size_t *size);
 | ||
| 
 | ||
| The reader function used by C<lua_load>. Every time it needs another
 | ||
| piece of the chunk, C<lua_load> calls the reader, passing along its
 | ||
| C<data> parameter. The reader must return a pointer to a block of
 | ||
| memory with a new piece of the chunk and set C<size> to the block size.
 | ||
| The block must exist until the reader function is called again. To
 | ||
| signal the end of the chunk, the reader must return C<NULL> or set
 | ||
| C<size> to zero. The reader function may return pieces of any size
 | ||
| greater than zero.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_register>
 | ||
| 
 | ||
| [-0, +0, I<e>]
 | ||
| 
 | ||
|  void lua_register (lua_State *L,
 | ||
|                     const char *name,
 | ||
|                     lua_CFunction f);
 | ||
| 
 | ||
| Sets the C function C<f> as the new value of global C<name>. It is
 | ||
| defined as a macro:
 | ||
| 
 | ||
|      #define lua_register(L,n,f) \
 | ||
|             (lua_pushcfunction(L, f), lua_setglobal(L, n))
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_remove>
 | ||
| 
 | ||
| [-1, +0, I<->]
 | ||
| 
 | ||
|  void lua_remove (lua_State *L, int index);
 | ||
| 
 | ||
| Removes the element at the given valid index, shifting down the
 | ||
| elements above this index to fill the gap. Cannot be called with a
 | ||
| pseudo-index, because a pseudo-index is not an actual stack position.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_replace>
 | ||
| 
 | ||
| [-1, +0, I<->]
 | ||
| 
 | ||
|  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).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_resume>
 | ||
| 
 | ||
| [-?, +?, I<->]
 | ||
| 
 | ||
|  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
 | ||
| C<lua_newthread>); then you push onto its stack the main function plus
 | ||
| any arguments; then you call C<lua_resume>, with C<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 C<lua_yield>, or all values returned by the body function.
 | ||
| C<lua_resume> returns C<LUA_YIELD> if the coroutine yields, 0 if the
 | ||
| coroutine finishes its execution without errors, or an error code in
 | ||
| case of errors (see C<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 C<yield>, and then call
 | ||
| C<lua_resume>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_setallocf>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  void lua_setallocf (lua_State *L, lua_Alloc f, void *ud);
 | ||
| 
 | ||
| Changes the allocator function of a given state to C<f> with user data
 | ||
| C<ud>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_setfenv>
 | ||
| 
 | ||
| [-1, +0, I<->]
 | ||
| 
 | ||
|  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, C<lua_setfenv> returns 0.
 | ||
| Otherwise it returns 1.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_setfield>
 | ||
| 
 | ||
| [-1, +0, I<e>]
 | ||
| 
 | ||
|  void lua_setfield (lua_State *L, int index, const char *k);
 | ||
| 
 | ||
| Does the equivalent to C<t[k] = v>, where C<t> is the value at the
 | ||
| given valid index and C<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 E<sect>2.8).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_setglobal>
 | ||
| 
 | ||
| [-1, +0, I<e>]
 | ||
| 
 | ||
|  void lua_setglobal (lua_State *L, const char *name);
 | ||
| 
 | ||
| Pops a value from the stack and sets it as the new value of global
 | ||
| C<name>. It is defined as a macro:
 | ||
| 
 | ||
|      #define lua_setglobal(L,s)   lua_setfield(L, LUA_GLOBALSINDEX, s)
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_setmetatable>
 | ||
| 
 | ||
| [-1, +0, I<->]
 | ||
| 
 | ||
|  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.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_settable>
 | ||
| 
 | ||
| [-2, +0, I<e>]
 | ||
| 
 | ||
|  void lua_settable (lua_State *L, int index);
 | ||
| 
 | ||
| Does the equivalent to C<t[k] = v>, where C<t> is the value at the
 | ||
| given valid index, C<v> is the value at the top of the stack, and C<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 E<sect>2.8).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_settop>
 | ||
| 
 | ||
| [-?, +?, I<->]
 | ||
| 
 | ||
|  void lua_settop (lua_State *L, int index);
 | ||
| 
 | ||
| Accepts any acceptable index, or 0, and sets the stack top to this
 | ||
| index. If the new top is larger than the old one, then the new elements
 | ||
| are filled with B<nil>. If C<index> is 0, then all stack elements are
 | ||
| removed.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<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 C<lua_newstate>, which creates a Lua
 | ||
| state from scratch.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_status>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  int lua_status (lua_State *L);
 | ||
| 
 | ||
| Returns the status of the thread C<L>.
 | ||
| 
 | ||
| The status can be 0 for a normal thread, an error code if the thread
 | ||
| finished its execution with an error, or C<LUA_YIELD> if the thread is
 | ||
| suspended.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_toboolean>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  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, C<lua_toboolean> returns 1 for
 | ||
| any Lua value different from B<false> and B<nil>; otherwise it returns
 | ||
| 0. It also returns 0 when called with a non-valid index. (If you want
 | ||
| to accept only actual boolean values, use C<lua_isboolean> to test the
 | ||
| value's type.)
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_tocfunction>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  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 C<NULL>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_tointeger>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  lua_Integer lua_tointeger (lua_State *L, int index);
 | ||
| 
 | ||
| Converts the Lua value at the given acceptable index to the signed
 | ||
| integral type C<lua_Integer>. The Lua value must be a number or a
 | ||
| string convertible to a number (see E<sect>2.2.1); otherwise,
 | ||
| C<lua_tointeger> returns 0.
 | ||
| 
 | ||
| If the number is not an integer, it is truncated in some non-specified
 | ||
| way.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_tolstring>
 | ||
| 
 | ||
| [-0, +0, I<m>]
 | ||
| 
 | ||
|  const char *lua_tolstring (lua_State *L, int index, size_t *len);
 | ||
| 
 | ||
| Converts the Lua value at the given acceptable index to a C string. If
 | ||
| C<len> is not C<NULL>, it also sets C<*len> with the string length. The
 | ||
| Lua value must be a string or a number; otherwise, the function returns
 | ||
| C<NULL>. If the value is a number, then C<lua_tolstring> also I<changes
 | ||
| the actual value in the stack to a string>. (This change confuses
 | ||
| C<lua_next> when C<lua_tolstring> is applied to keys during a table
 | ||
| traversal.)
 | ||
| 
 | ||
| C<lua_tolstring> returns a fully aligned pointer to a string inside the
 | ||
| Lua state. This string always has a zero ('C<\0>') after its last
 | ||
| character (as in C), but can contain other zeros in its body. Because
 | ||
| Lua has garbage collection, there is no guarantee that the pointer
 | ||
| returned by C<lua_tolstring> will be valid after the corresponding
 | ||
| value is removed from the stack.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_tonumber>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  lua_Number lua_tonumber (lua_State *L, int index);
 | ||
| 
 | ||
| Converts the Lua value at the given acceptable index to the C type
 | ||
| C<lua_Number> (see C<lua_Number>). The Lua value must be a number or a
 | ||
| string convertible to a number (see E<sect>2.2.1); otherwise,
 | ||
| C<lua_tonumber> returns 0.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_topointer>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  const void *lua_topointer (lua_State *L, int index);
 | ||
| 
 | ||
| Converts the value at the given acceptable index to a generic C pointer
 | ||
| (C<void*>). The value can be a userdata, a table, a thread, or a
 | ||
| function; otherwise, C<lua_topointer> returns C<NULL>. Different
 | ||
| objects will give different pointers. There is no way to convert the
 | ||
| pointer back to its original value.
 | ||
| 
 | ||
| Typically this function is used only for debug information.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_tostring>
 | ||
| 
 | ||
| [-0, +0, I<m>]
 | ||
| 
 | ||
|  const char *lua_tostring (lua_State *L, int index);
 | ||
| 
 | ||
| Equivalent to C<lua_tolstring> with C<len> equal to C<NULL>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_tothread>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  lua_State *lua_tothread (lua_State *L, int index);
 | ||
| 
 | ||
| Converts the value at the given acceptable index to a Lua thread
 | ||
| (represented as C<lua_State*>). This value must be a thread; otherwise,
 | ||
| the function returns C<NULL>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_touserdata>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  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 C<NULL>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_type>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  int lua_type (lua_State *L, int index);
 | ||
| 
 | ||
| Returns the type of the value in the given acceptable index, or
 | ||
| C<LUA_TNONE> for a non-valid index (that is, an index to an "empty"
 | ||
| stack position). The types returned by C<lua_type> are coded by the
 | ||
| following constants defined in C<lua.h>: C<LUA_TNIL>, C<LUA_TNUMBER>,
 | ||
| C<LUA_TBOOLEAN>, C<LUA_TSTRING>, C<LUA_TTABLE>, C<LUA_TFUNCTION>,
 | ||
| C<LUA_TUSERDATA>, C<LUA_TTHREAD>, and C<LUA_TLIGHTUSERDATA>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_typename>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  const char *lua_typename  (lua_State *L, int tp);
 | ||
| 
 | ||
| Returns the name of the type encoded by the value C<tp>, which must be
 | ||
| one the values returned by C<lua_type>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_Writer>
 | ||
| 
 | ||
|  typedef int (*lua_Writer) (lua_State *L,
 | ||
|                             const void* p,
 | ||
|                             size_t sz,
 | ||
|                             void* ud);
 | ||
| 
 | ||
| The type of the writer function used by C<lua_dump>. Every time it
 | ||
| produces another piece of chunk, C<lua_dump> calls the writer, passing
 | ||
| along the buffer to be written (C<p>), its size (C<sz>), and the
 | ||
| C<data> parameter supplied to C<lua_dump>.
 | ||
| 
 | ||
| The writer returns an error code: 0 means no errors; any other value
 | ||
| means an error and stops C<lua_dump> from calling the writer again.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_xmove>
 | ||
| 
 | ||
| [-?, +?, I<->]
 | ||
| 
 | ||
|  void lua_xmove (lua_State *from, lua_State *to, int n);
 | ||
| 
 | ||
| Exchange values between different threads of the I<same> global state.
 | ||
| 
 | ||
| This function pops C<n> values from the stack C<from>, and pushes them
 | ||
| onto the stack C<to>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_yield>
 | ||
| 
 | ||
| [-?, +?, I<->]
 | ||
| 
 | ||
|  int lua_yield  (lua_State *L, int nresults);
 | ||
| 
 | ||
| Yields a coroutine.
 | ||
| 
 | ||
| This function should only be called as the return expression of a C
 | ||
| function, as follows:
 | ||
| 
 | ||
|      return lua_yield (L, nresults);
 | ||
| 
 | ||
| When a C function calls C<lua_yield> in that way, the running coroutine
 | ||
| suspends its execution, and the call to C<lua_resume> that started this
 | ||
| coroutine returns. The parameter C<nresults> is the number of values
 | ||
| from the stack that are passed as results to C<lua_resume>.
 | ||
| 
 | ||
| =head2 3.8 - The Debug Interface
 | ||
| 
 | ||
| Lua has no built-in debugging facilities. Instead, it offers a special
 | ||
| interface by means of functions and I<hooks>. This interface allows the
 | ||
| construction of different kinds of debuggers, profilers, and other
 | ||
| tools that need "inside information" from the interpreter.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<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 */
 | ||
|    other fields
 | ||
|  } lua_Debug;
 | ||
| 
 | ||
| A structure used to carry different pieces of information about an
 | ||
| active function. C<lua_getstack> fills only the private part of this
 | ||
| structure, for later use. To fill the other fields of C<lua_Debug> with
 | ||
| useful information, call C<lua_getinfo>.
 | ||
| 
 | ||
| The fields of C<lua_Debug> have the following meaning:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<C<source>:> If the function was defined in a string, then
 | ||
| C<source> is that string. If the function was defined in a file, then
 | ||
| C<source> starts with a 'C<@>' followed by the file name.
 | ||
| 
 | ||
| =item * B<C<short_src>:> a "printable" version of C<source>, to be used
 | ||
| in error messages.
 | ||
| 
 | ||
| =item * B<C<linedefined>:> the line number where the definition of the
 | ||
| function starts.
 | ||
| 
 | ||
| =item * B<C<lastlinedefined>:> the line number where the definition of
 | ||
| the function ends.
 | ||
| 
 | ||
| =item * B<C<what>:> the string C<"Lua"> if the function is a Lua
 | ||
| function, C<"C"> if it is a C function, C<"main"> if it is the main
 | ||
| part of a chunk, and C<"tail"> if it was a function that did a tail
 | ||
| call. In the latter case, Lua has no other information about the
 | ||
| function.
 | ||
| 
 | ||
| =item * B<C<currentline>:> the current line where the given function is
 | ||
| executing. When no line information is available, C<currentline> is set
 | ||
| to -1.
 | ||
| 
 | ||
| =item * B<C<name>:> a reasonable name for the given function. Because
 | ||
| functions in Lua are first-class values, they do not have a fixed name:
 | ||
| some functions can be the value of multiple global variables, while
 | ||
| others can be stored only in a table field. The C<lua_getinfo> function
 | ||
| checks how the function was called to find a suitable name. If it
 | ||
| cannot find a name, then C<name> is set to C<NULL>.
 | ||
| 
 | ||
| =item * B<C<namewhat>:> explains the C<name> field. The value of
 | ||
| C<namewhat> can be C<"global">, C<"local">, C<"method">, C<"field">,
 | ||
| C<"upvalue">, or C<""> (the empty string), according to how the
 | ||
| function was called. (Lua uses the empty string when no other option
 | ||
| seems to apply.)
 | ||
| 
 | ||
| =item * B<C<nups>:> the number of upvalues of the function.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_gethook>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  lua_Hook lua_gethook (lua_State *L);
 | ||
| 
 | ||
| Returns the current hook function.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_gethookcount>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  int lua_gethookcount (lua_State *L);
 | ||
| 
 | ||
| Returns the current hook count.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_gethookmask>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  int lua_gethookmask (lua_State *L);
 | ||
| 
 | ||
| Returns the current hook mask.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_getinfo>
 | ||
| 
 | ||
| [-(0|1), +(0|1|2), I<m>]
 | ||
| 
 | ||
|  int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);
 | ||
| 
 | ||
| Returns information about a specific function or function invocation.
 | ||
| 
 | ||
| To get information about a function invocation, the parameter C<ar>
 | ||
| must be a valid activation record that was filled by a previous call to
 | ||
| C<lua_getstack> or given as argument to a hook (see C<lua_Hook>).
 | ||
| 
 | ||
| To get information about a function you push it onto the stack and
 | ||
| start the C<what> string with the character 'C<E<gt>>'. (In that case,
 | ||
| C<lua_getinfo> pops the function in the top of the stack.) For
 | ||
| instance, to know in which line a function C<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);
 | ||
| 
 | ||
| Each character in the string C<what> selects some fields of the
 | ||
| structure C<ar> to be filled or a value to be pushed on the stack:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<'C<n>':> fills in the field C<name> and C<namewhat>;
 | ||
| 
 | ||
| =item * B<'C<S>':> fills in the fields C<source>, C<short_src>,
 | ||
| C<linedefined>, C<lastlinedefined>, and C<what>;
 | ||
| 
 | ||
| =item * B<'C<l>':> fills in the field C<currentline>;
 | ||
| 
 | ||
| =item * B<'C<u>':> fills in the field C<nups>;
 | ||
| 
 | ||
| =item * B<'C<f>':> pushes onto the stack the function that is running
 | ||
| at the given level;
 | ||
| 
 | ||
| =item * B<'C<L>':> pushes onto the stack a table whose indices are the
 | ||
| numbers of the lines that are valid on the function. (A I<valid line>
 | ||
| is a line with some associated code, that is, a line where you can put
 | ||
| a break point. Non-valid lines include empty lines and comments.)
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| This function returns 0 on error (for instance, an invalid option in
 | ||
| C<what>).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_getlocal>
 | ||
| 
 | ||
| [-0, +(0|1), I<->]
 | ||
| 
 | ||
|  const char *lua_getlocal (lua_State *L, lua_Debug *ar, int n);
 | ||
| 
 | ||
| Gets information about a local variable of a given activation record.
 | ||
| The parameter C<ar> must be a valid activation record that was filled
 | ||
| by a previous call to C<lua_getstack> or given as argument to a hook
 | ||
| (see C<lua_Hook>). The index C<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). C<lua_getlocal> pushes the
 | ||
| variable's value onto the stack and returns its name.
 | ||
| 
 | ||
| Variable names starting with 'C<(>' (open parentheses) represent
 | ||
| internal variables (loop control variables, temporaries, and C function
 | ||
| locals).
 | ||
| 
 | ||
| Returns C<NULL> (and pushes nothing) when the index is greater than the
 | ||
| number of active local variables.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_getstack>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  int lua_getstack (lua_State *L, int level, lua_Debug *ar);
 | ||
| 
 | ||
| Get information about the interpreter runtime stack.
 | ||
| 
 | ||
| This function fills parts of a C<lua_Debug> structure with an
 | ||
| identification of the I<activation record> of the function executing at
 | ||
| a given level. Level 0 is the current running function, whereas level
 | ||
| I<n+1> is the function that has called level I<n>. When there are no
 | ||
| errors, C<lua_getstack> returns 1; when called with a level greater
 | ||
| than the stack depth, it returns 0.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_getupvalue>
 | ||
| 
 | ||
| [-0, +(0|1), I<->]
 | ||
| 
 | ||
|  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 are consequently included in its closure.) C<lua_getupvalue> gets
 | ||
| the index C<n> of an upvalue, pushes the upvalue's value onto the
 | ||
| stack, and returns its name. C<funcindex> points to the closure in the
 | ||
| stack. (Upvalues have no particular order, as they are active through
 | ||
| the whole function. So, they are numbered in an arbitrary order.)
 | ||
| 
 | ||
| Returns C<NULL> (and pushes nothing) when the index is greater than the
 | ||
| number of upvalues. For C functions, this function uses the empty
 | ||
| string C<""> as a name for all upvalues.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_Hook>
 | ||
| 
 | ||
|  typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
 | ||
| 
 | ||
| Type for debugging hook functions.
 | ||
| 
 | ||
| Whenever a hook is called, its C<ar> argument has its field C<event>
 | ||
| set to the specific event that triggered the hook. Lua identifies these
 | ||
| events with the following constants: C<LUA_HOOKCALL>, C<LUA_HOOKRET>,
 | ||
| C<LUA_HOOKTAILRET>, C<LUA_HOOKLINE>, and C<LUA_HOOKCOUNT>. Moreover,
 | ||
| for line events, the field C<currentline> is also set. To get the value
 | ||
| of any other field in C<ar>, the hook must call C<lua_getinfo>. For
 | ||
| return events, C<event> can be C<LUA_HOOKRET>, the normal value, or
 | ||
| C<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
 | ||
| C<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,
 | ||
| this execution occurs without any calls to hooks.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_sethook>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  int lua_sethook (lua_State *L, lua_Hook f, int mask, int count);
 | ||
| 
 | ||
| Sets the debugging hook function.
 | ||
| 
 | ||
| Argument C<f> is the hook function. C<mask> specifies on which events
 | ||
| the hook will be called: it is formed by a bitwise or of the constants
 | ||
| C<LUA_MASKCALL>, C<LUA_MASKRET>, C<LUA_MASKLINE>, and C<LUA_MASKCOUNT>.
 | ||
| The C<count> argument is only meaningful when the mask includes
 | ||
| C<LUA_MASKCOUNT>. For each event, the hook is called as explained
 | ||
| below:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<The call hook:> is called when the interpreter calls a
 | ||
| function. The hook is called just after Lua enters the new function,
 | ||
| before the function gets its arguments.
 | ||
| 
 | ||
| =item * B<The return hook:> is called when the interpreter returns from
 | ||
| a function. The hook is called just before Lua leaves the function. You
 | ||
| have no access to the values to be returned by the function.
 | ||
| 
 | ||
| =item * B<The line hook:> is called when the interpreter is about to
 | ||
| start the execution of a new line of code, or when it jumps back in the
 | ||
| code (even to the same line). (This event only happens while Lua is
 | ||
| executing a Lua function.)
 | ||
| 
 | ||
| =item * B<The count hook:> is called after the interpreter executes
 | ||
| every C<count> instructions. (This event only happens while Lua is
 | ||
| executing a Lua function.)
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| A hook is disabled by setting C<mask> to zero.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_setlocal>
 | ||
| 
 | ||
| [-(0|1), +0, I<->]
 | ||
| 
 | ||
|  const char *lua_setlocal (lua_State *L, lua_Debug *ar, int n);
 | ||
| 
 | ||
| Sets the value of a local variable of a given activation record.
 | ||
| Parameters C<ar> and C<n> are as in C<lua_getlocal> (see
 | ||
| C<lua_getlocal>). C<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 C<NULL> (and pops nothing) when the index is greater than the
 | ||
| number of active local variables.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<lua_setupvalue>
 | ||
| 
 | ||
| [-(0|1), +0, I<->]
 | ||
| 
 | ||
|  const char *lua_setupvalue (lua_State *L, int funcindex, int n);
 | ||
| 
 | ||
| Sets the value of a closure's upvalue. 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. Parameters C<funcindex> and C<n> are as in the
 | ||
| C<lua_getupvalue> (see C<lua_getupvalue>).
 | ||
| 
 | ||
| Returns C<NULL> (and pops nothing) when the index is greater than the
 | ||
| number of upvalues.
 | ||
| 
 | ||
| =head1 4 - The Auxiliary Library
 | ||
| 
 | ||
| The I<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
 | ||
| C<lauxlib.h> and have a prefix C<luaL_>.
 | ||
| 
 | ||
| All functions in the auxiliary library are built on top of the basic
 | ||
| API, and so they provide nothing that cannot be done with this API.
 | ||
| 
 | ||
| Several functions in the auxiliary library are used to check C function
 | ||
| arguments. Their names are always C<luaL_check*> or C<luaL_opt*>. All
 | ||
| of these functions throw an error if the check is not satisfied.
 | ||
| Because the error message is formatted for arguments (e.g., "C<bad
 | ||
| argument #1>"), you should not use these functions for other stack
 | ||
| values.
 | ||
| 
 | ||
| =head2 4.1 - Functions and Types
 | ||
| 
 | ||
| Here we list all functions and types from the auxiliary library in
 | ||
| alphabetical order.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_addchar>
 | ||
| 
 | ||
| [-0, +0, I<m>]
 | ||
| 
 | ||
|  void luaL_addchar (luaL_Buffer *B, char c);
 | ||
| 
 | ||
| Adds the character C<c> to the buffer C<B> (see C<luaL_Buffer>).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_addlstring>
 | ||
| 
 | ||
| [-0, +0, I<m>]
 | ||
| 
 | ||
|  void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l);
 | ||
| 
 | ||
| Adds the string pointed to by C<s> with length C<l> to the buffer C<B>
 | ||
| (see C<luaL_Buffer>). The string may contain embedded zeros.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_addsize>
 | ||
| 
 | ||
| [-0, +0, I<m>]
 | ||
| 
 | ||
|  void luaL_addsize (luaL_Buffer *B, size_t n);
 | ||
| 
 | ||
| Adds to the buffer C<B> (see C<luaL_Buffer>) a string of length C<n>
 | ||
| previously copied to the buffer area (see C<luaL_prepbuffer>).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_addstring>
 | ||
| 
 | ||
| [-0, +0, I<m>]
 | ||
| 
 | ||
|  void luaL_addstring (luaL_Buffer *B, const char *s);
 | ||
| 
 | ||
| Adds the zero-terminated string pointed to by C<s> to the buffer C<B>
 | ||
| (see C<luaL_Buffer>). The string may not contain embedded zeros.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_addvalue>
 | ||
| 
 | ||
| [-1, +0, I<m>]
 | ||
| 
 | ||
|  void luaL_addvalue (luaL_Buffer *B);
 | ||
| 
 | ||
| Adds the value at the top of the stack to the buffer C<B> (see
 | ||
| C<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.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_argcheck>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  void luaL_argcheck (lua_State *L,
 | ||
|                      int cond,
 | ||
|                      int narg,
 | ||
|                      const char *extramsg);
 | ||
| 
 | ||
| Checks whether C<cond> is true. If not, raises an error with the
 | ||
| following message, where C<func> is retrieved from the call stack:
 | ||
| 
 | ||
|      bad argument #<narg> to <func> (<extramsg>)
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_argerror>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  int luaL_argerror (lua_State *L, int narg, const char *extramsg);
 | ||
| 
 | ||
| Raises an error with the following message, where C<func> is retrieved
 | ||
| from the call stack:
 | ||
| 
 | ||
|      bad argument #<narg> to <func> (<extramsg>)
 | ||
| 
 | ||
| This function never returns, but it is an idiom to use it in C
 | ||
| functions as C<return luaL_argerror(I<args>)>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_Buffer>
 | ||
| 
 | ||
|  typedef struct luaL_Buffer luaL_Buffer;
 | ||
| 
 | ||
| Type for a I<string buffer>.
 | ||
| 
 | ||
| A string buffer allows C code to build Lua strings piecemeal. Its
 | ||
| pattern of use is as follows:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * First you declare a variable C<b> of type C<luaL_Buffer>.
 | ||
| 
 | ||
| =item * Then you initialize it with a call C<luaL_buffinit(L, &b)>.
 | ||
| 
 | ||
| =item * Then you add string pieces to the buffer calling any of the
 | ||
| C<luaL_add*> functions.
 | ||
| 
 | ||
| =item * You finish by calling C<luaL_pushresult(&b)>. This call leaves
 | ||
| the final string on the top of the stack.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| 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 the top of the stack is. 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 C<luaL_addvalue>.) After calling C<luaL_pushresult> the
 | ||
| stack is back to its level when the buffer was initialized, plus the
 | ||
| final string on its top.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_buffinit>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  void luaL_buffinit (lua_State *L, luaL_Buffer *B);
 | ||
| 
 | ||
| Initializes a buffer C<B>. This function does not allocate any space;
 | ||
| the buffer must be declared as a variable (see C<luaL_Buffer>).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_callmeta>
 | ||
| 
 | ||
| [-0, +(0|1), I<e>]
 | ||
| 
 | ||
|  int luaL_callmeta (lua_State *L, int obj, const char *e);
 | ||
| 
 | ||
| Calls a metamethod.
 | ||
| 
 | ||
| If the object at index C<obj> has a metatable and this metatable has a
 | ||
| field C<e>, this function calls this field and passes the object as its
 | ||
| only argument. In this case this function returns 1 and pushes onto the
 | ||
| stack the value returned by the call. If there is no metatable or no
 | ||
| metamethod, this function returns 0 (without pushing any value on the
 | ||
| stack).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_checkany>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  void luaL_checkany (lua_State *L, int narg);
 | ||
| 
 | ||
| Checks whether the function has an argument of any type (including
 | ||
| B<nil>) at position C<narg>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_checkint>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  int luaL_checkint (lua_State *L, int narg);
 | ||
| 
 | ||
| Checks whether the function argument C<narg> is a number and returns
 | ||
| this number cast to an C<int>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_checkinteger>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  lua_Integer luaL_checkinteger (lua_State *L, int narg);
 | ||
| 
 | ||
| Checks whether the function argument C<narg> is a number and returns
 | ||
| this number cast to a C<lua_Integer>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_checklong>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  long luaL_checklong (lua_State *L, int narg);
 | ||
| 
 | ||
| Checks whether the function argument C<narg> is a number and returns
 | ||
| this number cast to a C<long>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_checklstring>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  const char *luaL_checklstring (lua_State *L, int narg, size_t *l);
 | ||
| 
 | ||
| Checks whether the function argument C<narg> is a string and returns
 | ||
| this string; if C<l> is not C<NULL> fills C<*l> with the string's
 | ||
| length.
 | ||
| 
 | ||
| This function uses C<lua_tolstring> to get its result, so all
 | ||
| conversions and caveats of that function apply here.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_checknumber>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  lua_Number luaL_checknumber (lua_State *L, int narg);
 | ||
| 
 | ||
| Checks whether the function argument C<narg> is a number and returns
 | ||
| this number.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_checkoption>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  int luaL_checkoption (lua_State *L,
 | ||
|                        int narg,
 | ||
|                        const char *def,
 | ||
|                        const char *const lst[]);
 | ||
| 
 | ||
| Checks whether the function argument C<narg> is a string and searches
 | ||
| for this string in the array C<lst> (which must be NULL-terminated).
 | ||
| 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.
 | ||
| 
 | ||
| If C<def> is not C<NULL>, the function uses C<def> as a default value
 | ||
| when there is no argument C<narg> or if this argument is B<nil>.
 | ||
| 
 | ||
| This is a useful function for mapping strings to C enums. (The usual
 | ||
| convention in Lua libraries is to use strings instead of numbers to
 | ||
| select options.)
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_checkstack>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  void luaL_checkstack (lua_State *L, int sz, const char *msg);
 | ||
| 
 | ||
| Grows the stack size to C<top + sz> elements, raising an error if the
 | ||
| stack cannot grow to that size. C<msg> is an additional text to go into
 | ||
| the error message.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_checkstring>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  const char *luaL_checkstring (lua_State *L, int narg);
 | ||
| 
 | ||
| Checks whether the function argument C<narg> is a string and returns
 | ||
| this string.
 | ||
| 
 | ||
| This function uses C<lua_tolstring> to get its result, so all
 | ||
| conversions and caveats of that function apply here.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_checktype>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  void luaL_checktype (lua_State *L, int narg, int t);
 | ||
| 
 | ||
| Checks whether the function argument C<narg> has type C<t>. See
 | ||
| C<lua_type> for the encoding of types for C<t>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_checkudata>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  void *luaL_checkudata (lua_State *L, int narg, const char *tname);
 | ||
| 
 | ||
| Checks whether the function argument C<narg> is a userdata of the type
 | ||
| C<tname> (see C<luaL_newmetatable>).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_dofile>
 | ||
| 
 | ||
| [-0, +?, I<m>]
 | ||
| 
 | ||
|  int luaL_dofile (lua_State *L, const char *filename);
 | ||
| 
 | ||
| Loads and runs the given file. It is defined as the following macro:
 | ||
| 
 | ||
|      (luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0))
 | ||
| 
 | ||
| It returns 0 if there are no errors or 1 in case of errors.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_dostring>
 | ||
| 
 | ||
| [-0, +?, I<m>]
 | ||
| 
 | ||
|  int luaL_dostring (lua_State *L, const char *str);
 | ||
| 
 | ||
| Loads and runs the given string. It is defined as the following macro:
 | ||
| 
 | ||
|      (luaL_loadstring(L, str) || lua_pcall(L, 0, LUA_MULTRET, 0))
 | ||
| 
 | ||
| It returns 0 if there are no errors or 1 in case of errors.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_error>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  int luaL_error (lua_State *L, const char *fmt, ...);
 | ||
| 
 | ||
| Raises an error. The error message format is given by C<fmt> plus any
 | ||
| extra arguments, following the same rules of C<lua_pushfstring>. It
 | ||
| also adds at the beginning of the message the file name and the line
 | ||
| number where the error occurred, if this information is available.
 | ||
| 
 | ||
| This function never returns, but it is an idiom to use it in C
 | ||
| functions as C<return luaL_error(I<args>)>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_getmetafield>
 | ||
| 
 | ||
| [-0, +(0|1), I<m>]
 | ||
| 
 | ||
|  int luaL_getmetafield (lua_State *L, int obj, const char *e);
 | ||
| 
 | ||
| Pushes onto the stack the field C<e> from the metatable of the object
 | ||
| at index C<obj>. If the object does not have a metatable, or if the
 | ||
| metatable does not have this field, returns 0 and pushes nothing.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_getmetatable>
 | ||
| 
 | ||
| [-0, +1, I<->]
 | ||
| 
 | ||
|  void luaL_getmetatable (lua_State *L, const char *tname);
 | ||
| 
 | ||
| Pushes onto the stack the metatable associated with name C<tname> in
 | ||
| the registry (see C<luaL_newmetatable>).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_gsub>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  const char *luaL_gsub (lua_State *L,
 | ||
|                         const char *s,
 | ||
|                         const char *p,
 | ||
|                         const char *r);
 | ||
| 
 | ||
| Creates a copy of string C<s> by replacing any occurrence of the string
 | ||
| C<p> with the string C<r>. Pushes the resulting string on the stack and
 | ||
| returns it.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_loadbuffer>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  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 C<lua_load> to load
 | ||
| the chunk in the buffer pointed to by C<buff> with size C<sz>.
 | ||
| 
 | ||
| This function returns the same results as C<lua_load>. C<name> is the
 | ||
| chunk name, used for debug information and error messages.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_loadfile>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  int luaL_loadfile (lua_State *L, const char *filename);
 | ||
| 
 | ||
| Loads a file as a Lua chunk. This function uses C<lua_load> to load the
 | ||
| chunk in the file named C<filename>. If C<filename> is C<NULL>, then it
 | ||
| loads from the standard input. The first line in the file is ignored if
 | ||
| it starts with a C<#>.
 | ||
| 
 | ||
| This function returns the same results as C<lua_load>, but it has an
 | ||
| extra error code C<LUA_ERRFILE> if it cannot open/read the file.
 | ||
| 
 | ||
| As C<lua_load>, this function only loads the chunk; it does not run it.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_loadstring>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  int luaL_loadstring (lua_State *L, const char *s);
 | ||
| 
 | ||
| Loads a string as a Lua chunk. This function uses C<lua_load> to load
 | ||
| the chunk in the zero-terminated string C<s>.
 | ||
| 
 | ||
| This function returns the same results as C<lua_load>.
 | ||
| 
 | ||
| Also as C<lua_load>, this function only loads the chunk; it does not
 | ||
| run it.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_newmetatable>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  int luaL_newmetatable (lua_State *L, const char *tname);
 | ||
| 
 | ||
| If the registry already has the key C<tname>, returns 0. Otherwise,
 | ||
| creates a new table to be used as a metatable for userdata, adds it to
 | ||
| the registry with key C<tname>, and returns 1.
 | ||
| 
 | ||
| In both cases pushes onto the stack the final value associated with
 | ||
| C<tname> in the registry.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_newstate>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  lua_State *luaL_newstate (void);
 | ||
| 
 | ||
| Creates a new Lua state. It calls C<lua_newstate> with an allocator
 | ||
| based on the standard C C<realloc> function and then sets a panic
 | ||
| function (see C<lua_atpanic>) that prints an error message to the
 | ||
| standard error output in case of fatal errors.
 | ||
| 
 | ||
| Returns the new state, or C<NULL> if there is a memory allocation
 | ||
| error.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_openlibs>
 | ||
| 
 | ||
| [-0, +0, I<m>]
 | ||
| 
 | ||
|  void luaL_openlibs (lua_State *L);
 | ||
| 
 | ||
| Opens all standard Lua libraries into the given state.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_optint>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  int luaL_optint (lua_State *L, int narg, int d);
 | ||
| 
 | ||
| If the function argument C<narg> is a number, returns this number cast
 | ||
| to an C<int>. If this argument is absent or is B<nil>, returns C<d>.
 | ||
| Otherwise, raises an error.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_optinteger>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  lua_Integer luaL_optinteger (lua_State *L,
 | ||
|                               int narg,
 | ||
|                               lua_Integer d);
 | ||
| 
 | ||
| If the function argument C<narg> is a number, returns this number cast
 | ||
| to a C<lua_Integer>. If this argument is absent or is B<nil>, returns
 | ||
| C<d>. Otherwise, raises an error.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_optlong>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  long luaL_optlong (lua_State *L, int narg, long d);
 | ||
| 
 | ||
| If the function argument C<narg> is a number, returns this number cast
 | ||
| to a C<long>. If this argument is absent or is B<nil>, returns C<d>.
 | ||
| Otherwise, raises an error.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_optlstring>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  const char *luaL_optlstring (lua_State *L,
 | ||
|                               int narg,
 | ||
|                               const char *d,
 | ||
|                               size_t *l);
 | ||
| 
 | ||
| If the function argument C<narg> is a string, returns this string. If
 | ||
| this argument is absent or is B<nil>, returns C<d>. Otherwise, raises
 | ||
| an error.
 | ||
| 
 | ||
| If C<l> is not C<NULL>, fills the position C<*l> with the results's
 | ||
| length.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_optnumber>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number d);
 | ||
| 
 | ||
| If the function argument C<narg> is a number, returns this number. If
 | ||
| this argument is absent or is B<nil>, returns C<d>. Otherwise, raises
 | ||
| an error.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_optstring>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  const char *luaL_optstring (lua_State *L,
 | ||
|                              int narg,
 | ||
|                              const char *d);
 | ||
| 
 | ||
| If the function argument C<narg> is a string, returns this string. If
 | ||
| this argument is absent or is B<nil>, returns C<d>. Otherwise, raises
 | ||
| an error.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_prepbuffer>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  char *luaL_prepbuffer (luaL_Buffer *B);
 | ||
| 
 | ||
| Returns an address to a space of size C<LUAL_BUFFERSIZE> where you can
 | ||
| copy a string to be added to buffer C<B> (see C<luaL_Buffer>). After
 | ||
| copying the string into this space you must call C<luaL_addsize> with
 | ||
| the size of the string to actually add it to the buffer.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_pushresult>
 | ||
| 
 | ||
| [-?, +1, I<m>]
 | ||
| 
 | ||
|  void luaL_pushresult (luaL_Buffer *B);
 | ||
| 
 | ||
| Finishes the use of buffer C<B> leaving the final string on the top of
 | ||
| the stack.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_ref>
 | ||
| 
 | ||
| [-1, +0, I<m>]
 | ||
| 
 | ||
|  int luaL_ref (lua_State *L, int t);
 | ||
| 
 | ||
| Creates and returns a I<reference>, in the table at index C<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 manually add
 | ||
| integer keys into table C<t>, C<luaL_ref> ensures the uniqueness of the
 | ||
| key it returns. You can retrieve an object referred by reference C<r>
 | ||
| by calling C<lua_rawgeti(L, t, r)>. Function C<luaL_unref> frees a
 | ||
| reference and its associated object.
 | ||
| 
 | ||
| If the object at the top of the stack is B<nil>, C<luaL_ref> returns
 | ||
| the constant C<LUA_REFNIL>. The constant C<LUA_NOREF> is guaranteed to
 | ||
| be different from any reference returned by C<luaL_ref>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_Reg>
 | ||
| 
 | ||
|  typedef struct luaL_Reg {
 | ||
|    const char *name;
 | ||
|    lua_CFunction func;
 | ||
|  } luaL_Reg;
 | ||
| 
 | ||
| Type for arrays of functions to be registered by C<luaL_register>.
 | ||
| C<name> is the function name and C<func> is a pointer to the function.
 | ||
| Any array of C<luaL_Reg> must end with an sentinel entry in which both
 | ||
| C<name> and C<func> are C<NULL>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_register>
 | ||
| 
 | ||
| [-(0|1), +1, I<m>]
 | ||
| 
 | ||
|  void luaL_register (lua_State *L,
 | ||
|                      const char *libname,
 | ||
|                      const luaL_Reg *l);
 | ||
| 
 | ||
| Opens a library.
 | ||
| 
 | ||
| When called with C<libname> equal to C<NULL>, it simply registers all
 | ||
| functions in the list C<l> (see C<luaL_Reg>) into the table on the top
 | ||
| of the stack.
 | ||
| 
 | ||
| When called with a non-null C<libname>, C<luaL_register> creates a new
 | ||
| table C<t>, sets it as the value of the global variable C<libname>,
 | ||
| sets it as the value of C<package.loaded[libname]>, and registers on it
 | ||
| all functions in the list C<l>. If there is a table in
 | ||
| C<package.loaded[libname]> or in variable C<libname>, reuses this table
 | ||
| instead of creating a new one.
 | ||
| 
 | ||
| In any case the function leaves the table on the top of the stack.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_typename>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  const char *luaL_typename (lua_State *L, int index);
 | ||
| 
 | ||
| Returns the name of the type of the value at the given index.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_typerror>
 | ||
| 
 | ||
| [-0, +0, I<v>]
 | ||
| 
 | ||
|  int luaL_typerror (lua_State *L, int narg, const char *tname);
 | ||
| 
 | ||
| Generates an error with a message like the following:
 | ||
| 
 | ||
|      location: bad argument narg to 'func' (tname expected, got rt)
 | ||
| 
 | ||
| where C<I<location>> is produced by C<luaL_where>, C<I<func>> is the
 | ||
| name of the current function, and C<I<rt>> is the type name of the
 | ||
| actual argument.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_unref>
 | ||
| 
 | ||
| [-0, +0, I<->]
 | ||
| 
 | ||
|  void luaL_unref (lua_State *L, int t, int ref);
 | ||
| 
 | ||
| Releases reference C<ref> from the table at index C<t> (see
 | ||
| C<luaL_ref>). The entry is removed from the table, so that the referred
 | ||
| object can be collected. The reference C<ref> is also freed to be used
 | ||
| again.
 | ||
| 
 | ||
| If C<ref> is C<LUA_NOREF> or C<LUA_REFNIL>, C<luaL_unref> does nothing.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<luaL_where>
 | ||
| 
 | ||
| [-0, +1, I<m>]
 | ||
| 
 | ||
|  void luaL_where (lua_State *L, int lvl);
 | ||
| 
 | ||
| Pushes onto the stack a string identifying the current position of the
 | ||
| control at level C<lvl> in the call stack. Typically this string has
 | ||
| the following format:
 | ||
| 
 | ||
|      chunkname:currentline:
 | ||
| 
 | ||
| Level 0 is the running function, level 1 is the function that called
 | ||
| the running function, etc.
 | ||
| 
 | ||
| This function is used to build a prefix for error messages.
 | ||
| 
 | ||
| =head1 5 - Standard Libraries
 | ||
| 
 | ||
| The standard Lua libraries provide useful functions that are
 | ||
| implemented directly through the C API. Some of these functions provide
 | ||
| essential services to the language (e.g., C<type> and C<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 requirements that deserve an implementation in C
 | ||
| (e.g., C<table.sort>).
 | ||
| 
 | ||
| All libraries are implemented through the official C API and are
 | ||
| provided as separate C modules. Currently, Lua has the following
 | ||
| standard libraries:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * basic library, which includes the coroutine sub-library;
 | ||
| 
 | ||
| =item * package library;
 | ||
| 
 | ||
| =item * string manipulation;
 | ||
| 
 | ||
| =item * table manipulation;
 | ||
| 
 | ||
| =item * mathematical functions (sin, log, etc.);
 | ||
| 
 | ||
| =item * input and output;
 | ||
| 
 | ||
| =item * operating system facilities;
 | ||
| 
 | ||
| =item * debug facilities.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| 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 should call the
 | ||
| C<luaL_openlibs> function, which opens all standard libraries.
 | ||
| Alternatively, it can open them individually by calling C<luaopen_base>
 | ||
| (for the basic library), C<luaopen_package> (for the package library),
 | ||
| C<luaopen_string> (for the string library), C<luaopen_table> (for the
 | ||
| table library), C<luaopen_math> (for the mathematical library),
 | ||
| C<luaopen_io> (for the I/O library), C<luaopen_os> (for the Operating
 | ||
| System library), and C<luaopen_debug> (for the debug library). These
 | ||
| functions are declared in C<lualib.h> and should not be called
 | ||
| directly: you must call them like any other Lua C function, e.g., by
 | ||
| using C<lua_call>.
 | ||
| 
 | ||
| =head2 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 implementations for some of its facilities.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<assert (v [, message])>
 | ||
| 
 | ||
| Issues an error when the value of its argument C<v> is false (i.e.,
 | ||
| B<nil> or B<false>); otherwise, returns all its arguments. C<message>
 | ||
| is an error message; when absent, it defaults to "assertion failed!"
 | ||
| 
 | ||
| 
 | ||
| =head2 C<collectgarbage ([opt [, arg]])>
 | ||
| 
 | ||
| This function is a generic interface to the garbage collector. It
 | ||
| performs different functions according to its first argument, C<opt>:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<"collect":> performs a full garbage-collection cycle. This is
 | ||
| the default option.
 | ||
| 
 | ||
| =item * B<"stop":> stops the garbage collector.
 | ||
| 
 | ||
| =item * B<"restart":> restarts the garbage collector.
 | ||
| 
 | ||
| =item * B<"count":> returns the total memory in use by Lua (in Kbytes).
 | ||
| 
 | ||
| =item * B<"step":> performs a garbage-collection step. The step "size"
 | ||
| is controlled by C<arg> (larger values mean more steps) in a
 | ||
| non-specified way. If you want to control the step size you must
 | ||
| experimentally tune the value of C<arg>. Returns B<true> if the step
 | ||
| finished a collection cycle.
 | ||
| 
 | ||
| =item * B<"setpause":> sets C<arg> as the new value for the I<pause> of
 | ||
| the collector (see E<sect>2.10). Returns the previous value for
 | ||
| I<pause>.
 | ||
| 
 | ||
| =item * B<"setstepmul":> sets C<arg> as the new value for the I<step
 | ||
| multiplier> of the collector (see E<sect>2.10). Returns the previous
 | ||
| value for I<step>.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| 
 | ||
| =head2 C<dofile ([filename])>
 | ||
| 
 | ||
| Opens the named file and executes its contents as a Lua chunk. When
 | ||
| called without arguments, C<dofile> executes the contents of the
 | ||
| standard input (C<stdin>). Returns all values returned by the chunk. In
 | ||
| case of errors, C<dofile> propagates the error to its caller (that is,
 | ||
| C<dofile> does not run in protected mode).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<error (message [, level])>
 | ||
| 
 | ||
| Terminates the last protected function called and returns C<message> as
 | ||
| the error message. Function C<error> never returns.
 | ||
| 
 | ||
| Usually, C<error> adds some information about the error position at the
 | ||
| beginning of the message. The C<level> argument specifies how to get
 | ||
| the error position. With level 1 (the default), the error position is
 | ||
| where the C<error> function was called. Level 2 points the error to
 | ||
| where the function that called C<error> was called; and so on. Passing
 | ||
| a level 0 avoids the addition of error position information to the
 | ||
| message.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<_G>
 | ||
| 
 | ||
| A global variable (not a function) that holds the global environment
 | ||
| (that is, C<_G._G = _G>). Lua itself does not use this variable;
 | ||
| changing its value does not affect any environment, nor vice-versa.
 | ||
| (Use C<setfenv> to change environments.)
 | ||
| 
 | ||
| 
 | ||
| =head2 C<getfenv ([f])>
 | ||
| 
 | ||
| Returns the current environment in use by the function. C<f> can be a
 | ||
| Lua function or a number that specifies the function at that stack
 | ||
| level: Level 1 is the function calling C<getfenv>. If the given
 | ||
| function is not a Lua function, or if C<f> is 0, C<getfenv> returns the
 | ||
| global environment. The default for C<f> is 1.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<getmetatable (object)>
 | ||
| 
 | ||
| If C<object> does not have a metatable, returns B<nil>. Otherwise, if
 | ||
| the object's metatable has a C<"__metatable"> field, returns the
 | ||
| associated value. Otherwise, returns the metatable of the given object.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<ipairs (t)>
 | ||
| 
 | ||
| Returns three values: an iterator function, the table C<t>, and 0, so
 | ||
| that the construction
 | ||
| 
 | ||
|      for i,v in ipairs(t) do body end
 | ||
| 
 | ||
| will iterate over the pairs (C<1,t[1]>), (C<2,t[2]>),
 | ||
| E<middot>E<middot>E<middot>, up to the first integer key absent from
 | ||
| the table.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<load (func [, chunkname])>
 | ||
| 
 | ||
| Loads a chunk using function C<func> to get its pieces. Each call to
 | ||
| C<func> must return a string that concatenates with previous results. A
 | ||
| return of an empty string, B<nil>, or no value signals the end of the
 | ||
| chunk.
 | ||
| 
 | ||
| If there are no errors, returns the compiled chunk as a function;
 | ||
| otherwise, returns B<nil> plus the error message. The environment of
 | ||
| the returned function is the global environment.
 | ||
| 
 | ||
| C<chunkname> is used as the chunk name for error messages and debug
 | ||
| information. When absent, it defaults to "C<=(load)>".
 | ||
| 
 | ||
| 
 | ||
| =head2 C<loadfile ([filename])>
 | ||
| 
 | ||
| Similar to C<load>, but gets the chunk from file C<filename> or from
 | ||
| the standard input, if no file name is given.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<loadstring (string [, chunkname])>
 | ||
| 
 | ||
| Similar to C<load>, but gets the chunk from the given string.
 | ||
| 
 | ||
| To load and run a given string, use the idiom
 | ||
| 
 | ||
|      assert(loadstring(s))()
 | ||
| 
 | ||
| When absent, C<chunkname> defaults to the given string.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<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. C<next>
 | ||
| returns the next index of the table and its associated value. When
 | ||
| called with B<nil> as its second argument, C<next> returns an initial
 | ||
| index and its associated value. When called with the last index, or
 | ||
| with B<nil> in an empty table, C<next> returns B<nil>. If the second
 | ||
| argument is absent, then it is interpreted as B<nil>. In particular,
 | ||
| you can use C<next(t)> to check whether a table is empty.
 | ||
| 
 | ||
| The order in which the indices are enumerated is not specified, I<even
 | ||
| for numeric indices>. (To traverse a table in numeric order, use a
 | ||
| numerical B<for> or the C<ipairs> function.)
 | ||
| 
 | ||
| The behavior of C<next> is I<undefined> if, during the traversal, you
 | ||
| assign any value to a non-existent field in the table. You may however
 | ||
| modify existing fields. In particular, you may clear existing fields.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<pairs (t)>
 | ||
| 
 | ||
| Returns three values: the C<next> function, the table C<t>, and B<nil>,
 | ||
| so that the construction
 | ||
| 
 | ||
|      for k,v in pairs(t) do body end
 | ||
| 
 | ||
| will iterate over all keyE<ndash>value pairs of table C<t>.
 | ||
| 
 | ||
| See function C<next> for the caveats of modifying the table during its
 | ||
| traversal.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<pcall (f, arg1, E<middot>E<middot>E<middot>)>
 | ||
| 
 | ||
| Calls function C<f> with the given arguments in I<protected mode>. This
 | ||
| means that any error inside C<f> is not propagated; instead, C<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, C<pcall> also returns all results from the call,
 | ||
| after this first result. In case of any error, C<pcall> returns
 | ||
| B<false> plus the error message.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<print (E<middot>E<middot>E<middot>)>
 | ||
| 
 | ||
| Receives any number of arguments, and prints their values to C<stdout>,
 | ||
| using the C<tostring> function to convert them to strings. C<print> is
 | ||
| not intended for formatted output, but only as a quick way to show a
 | ||
| value, typically for debugging. For formatted output, use
 | ||
| C<string.format>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<rawequal (v1, v2)>
 | ||
| 
 | ||
| Checks whether C<v1> is equal to C<v2>, without invoking any
 | ||
| metamethod. Returns a boolean.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<rawget (table, index)>
 | ||
| 
 | ||
| Gets the real value of C<table[index]>, without invoking any
 | ||
| metamethod. C<table> must be a table; C<index> may be any value.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<rawset (table, index, value)>
 | ||
| 
 | ||
| Sets the real value of C<table[index]> to C<value>, without invoking
 | ||
| any metamethod. C<table> must be a table, C<index> any value different
 | ||
| from B<nil>, and C<value> any Lua value.
 | ||
| 
 | ||
| This function returns C<table>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<select (index, E<middot>E<middot>E<middot>)>
 | ||
| 
 | ||
| If C<index> is a number, returns all arguments after argument number
 | ||
| C<index>. Otherwise, C<index> must be the string C<"#">, and C<select>
 | ||
| returns the total number of extra arguments it received.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<setfenv (f, table)>
 | ||
| 
 | ||
| Sets the environment to be used by the given function. C<f> can be a
 | ||
| Lua function or a number that specifies the function at that stack
 | ||
| level: Level 1 is the function calling C<setfenv>. C<setfenv> returns
 | ||
| the given function.
 | ||
| 
 | ||
| As a special case, when C<f> is 0 C<setfenv> changes the environment of
 | ||
| the running thread. In this case, C<setfenv> returns no values.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<setmetatable (table, metatable)>
 | ||
| 
 | ||
| Sets the metatable for the given table. (You cannot change the
 | ||
| metatable of other types from Lua, only from C.) If C<metatable> is
 | ||
| B<nil>, removes the metatable of the given table. If the original
 | ||
| metatable has a C<"__metatable"> field, raises an error.
 | ||
| 
 | ||
| This function returns C<table>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<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 C<tonumber> returns
 | ||
| this number; otherwise, it returns B<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 'C<A>' (in either upper or lower case) represents 10, 'C<B>'
 | ||
| represents 11, and so forth, with 'C<Z>' representing 35. In base 10
 | ||
| (the default), the number can have a decimal part, as well as an
 | ||
| optional exponent part (see E<sect>2.1). In other bases, only unsigned
 | ||
| integers are accepted.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<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 C<string.format>.
 | ||
| 
 | ||
| If the metatable of C<e> has a C<"__tostring"> field, then C<tostring>
 | ||
| calls the corresponding value with C<e> as argument, and uses the
 | ||
| result of the call as its result.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<type (v)>
 | ||
| 
 | ||
| Returns the type of its only argument, coded as a string. The possible
 | ||
| results of this function are "C<nil>" (a string, not the value B<nil>),
 | ||
| "C<number>", "C<string>", "C<boolean>", "C<table>", "C<function>",
 | ||
| "C<thread>", and "C<userdata>".
 | ||
| 
 | ||
| 
 | ||
| =head2 C<unpack (list [, i [, j]])>
 | ||
| 
 | ||
| Returns the elements from the given table. 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, C<i> is 1 and C<j> is the length of the list, as
 | ||
| defined by the length operator (see E<sect>2.5.5).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<_VERSION>
 | ||
| 
 | ||
| A global variable (not a function) that holds a string containing the
 | ||
| current interpreter version. The current contents of this variable is
 | ||
| "C<Lua 5.1>".
 | ||
| 
 | ||
| 
 | ||
| =head2 C<xpcall (f, err)>
 | ||
| 
 | ||
| This function is similar to C<pcall>, except that you can set a new
 | ||
| error handler.
 | ||
| 
 | ||
| C<xpcall> calls function C<f> in protected mode, using C<err> as the
 | ||
| error handler. Any error inside C<f> is not propagated; instead,
 | ||
| C<xpcall> catches the error, calls the C<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 this case, C<xpcall> also returns all results from the call,
 | ||
| after this first result. In case of any error, C<xpcall> returns
 | ||
| B<false> plus the result from C<err>.
 | ||
| 
 | ||
| =head2 5.2 - Coroutine Manipulation
 | ||
| 
 | ||
| The operations related to coroutines comprise a sub-library of the
 | ||
| basic library and come inside the table C<coroutine>. See E<sect>2.11
 | ||
| for a general description of coroutines.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<coroutine.create (f)>
 | ||
| 
 | ||
| Creates a new coroutine, with body C<f>. C<f> must be a Lua function.
 | ||
| Returns this new coroutine, an object with type C<"thread">.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<coroutine.resume (co [, val1, E<middot>E<middot>E<middot>])>
 | ||
| 
 | ||
| Starts or continues the execution of coroutine C<co>. The first time
 | ||
| you resume a coroutine, it starts running its body. The values C<val1>,
 | ||
| E<middot>E<middot>E<middot> are passed as the arguments to the body
 | ||
| function. If the coroutine has yielded, C<resume> restarts it; the
 | ||
| values C<val1>, E<middot>E<middot>E<middot> are passed as the results
 | ||
| from the yield.
 | ||
| 
 | ||
| If the coroutine runs without any errors, C<resume> returns B<true>
 | ||
| plus any values passed to C<yield> (if the coroutine yields) or any
 | ||
| values returned by the body function (if the coroutine terminates). If
 | ||
| there is any error, C<resume> returns B<false> plus the error message.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<coroutine.running ()>
 | ||
| 
 | ||
| Returns the running coroutine, or B<nil> when called by the main
 | ||
| thread.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<coroutine.status (co)>
 | ||
| 
 | ||
| Returns the status of coroutine C<co>, as a string: C<"running">, if
 | ||
| the coroutine is running (that is, it called C<status>);
 | ||
| C<"suspended">, if the coroutine is suspended in a call to C<yield>, or
 | ||
| if it has not started running yet; C<"normal"> if the coroutine is
 | ||
| active but not running (that is, it has resumed another coroutine); and
 | ||
| C<"dead"> if the coroutine has finished its body function, or if it has
 | ||
| stopped with an error.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<coroutine.wrap (f)>
 | ||
| 
 | ||
| Creates a new coroutine, with body C<f>. C<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
 | ||
| C<resume>. Returns the same values returned by C<resume>, except the
 | ||
| first boolean. In case of error, propagates the error.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<coroutine.yield (E<middot>E<middot>E<middot>)>
 | ||
| 
 | ||
| Suspends the execution of the calling coroutine. The coroutine cannot
 | ||
| be running a C function, a metamethod, or an iterator. Any arguments to
 | ||
| C<yield> are passed as extra results to C<resume>.
 | ||
| 
 | ||
| =head2 5.3 - Modules
 | ||
| 
 | ||
| The package library provides basic facilities for loading and building
 | ||
| modules in Lua. It exports two of its functions directly in the global
 | ||
| environment: C<require> and C<module>. Everything else is exported in a
 | ||
| table C<package>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<module (name [, E<middot>E<middot>E<middot>])>
 | ||
| 
 | ||
| Creates a module. If there is a table in C<package.loaded[name]>, this
 | ||
| table is the module. Otherwise, if there is a global table C<t> with
 | ||
| the given name, this table is the module. Otherwise creates a new table
 | ||
| C<t> and sets it as the value of the global C<name> and the value of
 | ||
| C<package.loaded[name]>. This function also initializes C<t._NAME> with
 | ||
| the given name, C<t._M> with the module (C<t> itself), and
 | ||
| C<t._PACKAGE> with the package name (the full module name minus last
 | ||
| component; see below). Finally, C<module> sets C<t> as the new
 | ||
| environment of the current function and the new value of
 | ||
| C<package.loaded[name]>, so that C<require> returns C<t>.
 | ||
| 
 | ||
| If C<name> is a compound name (that is, one with components separated
 | ||
| by dots), C<module> creates (or reuses, if they already exist) tables
 | ||
| for each component. For instance, if C<name> is C<a.b.c>, then
 | ||
| C<module> stores the module table in field C<c> of field C<b> of global
 | ||
| C<a>.
 | ||
| 
 | ||
| This function can receive optional I<options> after the module name,
 | ||
| where each option is a function to be applied over the module.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<require (modname)>
 | ||
| 
 | ||
| Loads the given module. The function starts by looking into the
 | ||
| C<package.loaded> table to determine whether C<modname> is already
 | ||
| loaded. If it is, then C<require> returns the value stored at
 | ||
| C<package.loaded[modname]>. Otherwise, it tries to find a I<loader> for
 | ||
| the module.
 | ||
| 
 | ||
| To find a loader, C<require> is guided by the C<package.loaders> array.
 | ||
| By changing this array, we can change how C<require> looks for a
 | ||
| module. The following explanation is based on the default configuration
 | ||
| for C<package.loaders>.
 | ||
| 
 | ||
| First C<require> queries C<package.preload[modname]>. If it has a
 | ||
| value, this value (which should be a function) is the loader. Otherwise
 | ||
| C<require> searches for a Lua loader using the path stored in
 | ||
| C<package.path>. If that also fails, it searches for a C loader using
 | ||
| the path stored in C<package.cpath>. If that also fails, it tries an
 | ||
| I<all-in-one> loader (see C<package.loaders>).
 | ||
| 
 | ||
| Once a loader is found, C<require> calls the loader with a single
 | ||
| argument, C<modname>. If the loader returns any value, C<require>
 | ||
| assigns the returned value to C<package.loaded[modname]>. If the loader
 | ||
| returns no value and has not assigned any value to
 | ||
| C<package.loaded[modname]>, then C<require> assigns B<true> to this
 | ||
| entry. In any case, C<require> returns the final value of
 | ||
| C<package.loaded[modname]>.
 | ||
| 
 | ||
| If there is any error loading or running the module, or if it cannot
 | ||
| find any loader for the module, then C<require> signals an error.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<package.cpath>
 | ||
| 
 | ||
| The path used by C<require> to search for a C loader.
 | ||
| 
 | ||
| Lua initializes the C path C<package.cpath> in the same way it
 | ||
| initializes the Lua path C<package.path>, using the environment
 | ||
| variable C<LUA_CPATH> or a default path defined in C<luaconf.h>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<package.loaded>
 | ||
| 
 | ||
| A table used by C<require> to control which modules are already loaded.
 | ||
| When you require a module C<modname> and C<package.loaded[modname]> is
 | ||
| not false, C<require> simply returns the value stored there.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<package.loaders>
 | ||
| 
 | ||
| A table used by C<require> to control how to load modules.
 | ||
| 
 | ||
| Each entry in this table is a I<searcher function>. When looking for a
 | ||
| module, C<require> calls each of these searchers in ascending order,
 | ||
| with the module name (the argument given to C<require>) as its sole
 | ||
| parameter. The function can return another function (the module
 | ||
| I<loader>) or a string explaining why it did not find that module (or
 | ||
| B<nil> if it has nothing to say). Lua initializes this table with four
 | ||
| functions.
 | ||
| 
 | ||
| The first searcher simply looks for a loader in the C<package.preload>
 | ||
| table.
 | ||
| 
 | ||
| The second searcher looks for a loader as a Lua library, using the path
 | ||
| stored at C<package.path>. A path is a sequence of I<templates>
 | ||
| separated by semicolons. For each template, the searcher will change
 | ||
| each interrogation mark in the template by C<filename>, which is the
 | ||
| module name with each dot replaced by a "directory separator" (such as
 | ||
| "C</>" in Unix); then it will try to open the resulting file name. So,
 | ||
| for instance, if the Lua path is the string
 | ||
| 
 | ||
|      "./?.lua;./?.lc;/usr/local/?/init.lua"
 | ||
| 
 | ||
| the search for a Lua file for module C<foo> will try to open the files
 | ||
| C<./foo.lua>, C<./foo.lc>, and C</usr/local/foo/init.lua>, in that
 | ||
| order.
 | ||
| 
 | ||
| The third searcher looks for a loader as a C library, using the path
 | ||
| given by the variable C<package.cpath>. For instance, if the C path is
 | ||
| the string
 | ||
| 
 | ||
|      "./?.so;./?.dll;/usr/local/?/init.so"
 | ||
| 
 | ||
| the searcher for module C<foo> will try to open the files C<./foo.so>,
 | ||
| C<./foo.dll>, and C</usr/local/foo/init.so>, in that order. Once it
 | ||
| finds a C library, this searcher first uses a dynamic link facility to
 | ||
| link the application with the library. Then it tries to find a C
 | ||
| function inside the library to be used as the loader. The name of this
 | ||
| C function is the string "C<luaopen_>" concatenated with a copy of the
 | ||
| module name where each dot is replaced by an underscore. Moreover, if
 | ||
| the module name has a hyphen, its prefix up to (and including) the
 | ||
| first hyphen is removed. For instance, if the module name is
 | ||
| C<a.v1-b.c>, the function name will be C<luaopen_b_c>.
 | ||
| 
 | ||
| The fourth searcher tries an I<all-in-one loader>. It searches the C
 | ||
| path for a library for the root name of the given module. For instance,
 | ||
| when requiring C<a.b.c>, it will search for a C library for C<a>. If
 | ||
| found, it looks into it for an open function for the submodule; in our
 | ||
| example, that would be C<luaopen_a_b_c>. With this facility, a package
 | ||
| can pack several C submodules into one single library, with each
 | ||
| submodule keeping its original open function.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<package.loadlib (libname, funcname)>
 | ||
| 
 | ||
| Dynamically links the host program with the C library C<libname>.
 | ||
| Inside this library, looks for a function C<funcname> and returns this
 | ||
| function as a C function. (So, C<funcname> must follow the protocol
 | ||
| (see C<lua_CFunction>)).
 | ||
| 
 | ||
| This is a low-level function. It completely bypasses the package and
 | ||
| module system. Unlike C<require>, it does not perform any path
 | ||
| searching and does not automatically adds extensions. C<libname> must
 | ||
| be the complete file name of the C library, including if necessary a
 | ||
| path and extension. C<funcname> must be the exact name exported by the
 | ||
| C library (which may depend on the C compiler and linker used).
 | ||
| 
 | ||
| This function is not supported by ANSI C. As such, it is only available
 | ||
| on some platforms (Windows, Linux, Mac OS X, Solaris, BSD, plus other
 | ||
| Unix systems that support the C<dlfcn> standard).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<package.path>
 | ||
| 
 | ||
| The path used by C<require> to search for a Lua loader.
 | ||
| 
 | ||
| At start-up, Lua initializes this variable with the value of the
 | ||
| environment variable C<LUA_PATH> or with a default path defined in
 | ||
| C<luaconf.h>, if the environment variable is not defined. Any "C<;;>"
 | ||
| in the value of the environment variable is replaced by the default
 | ||
| path.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<package.preload>
 | ||
| 
 | ||
| A table to store loaders for specific modules (see C<require>).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<package.seeall (module)>
 | ||
| 
 | ||
| Sets a metatable for C<module> with its C<__index> field referring to
 | ||
| the global environment, so that this module inherits values from the
 | ||
| global environment. To be used as an option to function C<module>.
 | ||
| 
 | ||
| =head2 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
 | ||
| C<string>. It also sets a metatable for strings where the C<__index>
 | ||
| field points to the C<string> table. Therefore, you can use the string
 | ||
| functions in object-oriented style. For instance, C<string.byte(s, i)>
 | ||
| can be written as C<s:byte(i)>.
 | ||
| 
 | ||
| The string library assumes one-byte character encodings.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<string.byte (s [, i [, j]])>
 | ||
| 
 | ||
| Returns the internal numerical codes of the characters C<s[i]>,
 | ||
| C<s[i+1]>, E<middot>E<middot>E<middot>, C<s[j]>. The default value for
 | ||
| C<i> is 1; the default value for C<j> is C<i>.
 | ||
| 
 | ||
| Note that numerical codes are not necessarily portable across
 | ||
| platforms.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<string.char (E<middot>E<middot>E<middot>)>
 | ||
| 
 | ||
| Receives zero 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 corresponding argument.
 | ||
| 
 | ||
| Note that numerical codes are not necessarily portable across
 | ||
| platforms.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<string.dump (function)>
 | ||
| 
 | ||
| Returns a string containing a binary representation of the given
 | ||
| function, so that a later C<loadstring> on this string returns a copy
 | ||
| of the function. C<function> must be a Lua function without upvalues.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<string.find (s, pattern [, init [, plain]])>
 | ||
| 
 | ||
| Looks for the first match of C<pattern> in the string C<s>. If it finds
 | ||
| a match, then C<find> returns the indices of C<s> where this occurrence
 | ||
| starts and ends; otherwise, it returns B<nil>. A third, optional
 | ||
| numerical argument C<init> specifies where to start the search; its
 | ||
| default value is 1 and can be negative. A value of B<true> as a fourth,
 | ||
| optional argument C<plain> turns off the pattern matching facilities,
 | ||
| so the function does a plain "find substring" operation, with no
 | ||
| characters in C<pattern> being considered "magic". Note that if
 | ||
| C<plain> is given, then C<init> must be given as well.
 | ||
| 
 | ||
| If the pattern has captures, then in a successful match the captured
 | ||
| values are also returned, after the two indices.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<string.format (formatstring, E<middot>E<middot>E<middot>)>
 | ||
| 
 | ||
| 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 C<printf>
 | ||
| family of standard C functions. The only differences are that the
 | ||
| options/modifiers C<*>, C<l>, C<L>, C<n>, C<p>, and C<h> are not
 | ||
| supported and that there is an extra option, C<q>. The C<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, embedded zeros, 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<c>, C<d>, C<E>, C<e>, C<f>, C<g>, C<G>, C<i>, C<o>, C<u>,
 | ||
| C<X>, and C<x> all expect a number as argument, whereas C<q> and C<s>
 | ||
| expect a string.
 | ||
| 
 | ||
| This function does not accept string values containing embedded zeros,
 | ||
| except as arguments to the C<q> option.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<string.gmatch (s, pattern)>
 | ||
| 
 | ||
| Returns an iterator function that, each time it is called, returns the
 | ||
| next captures from C<pattern> over string C<s>. If C<pattern> 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 C<s>, printing one per
 | ||
| line. The next example collects all pairs C<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
 | ||
| 
 | ||
| For this function, a 'C<^>' at the start of a pattern does not work as
 | ||
| an anchor, as this would prevent the iteration.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<string.gsub (s, pattern, repl [, n])>
 | ||
| 
 | ||
| Returns a copy of C<s> in which all (or the first C<n>, if given)
 | ||
| occurrences of the C<pattern> have been replaced by a replacement
 | ||
| string specified by C<repl>, which can be a string, a table, or a
 | ||
| function. C<gsub> also returns, as its second value, the total number
 | ||
| of matches that occurred.
 | ||
| 
 | ||
| If C<repl> is a string, then its value is used for replacement. The
 | ||
| character C<%> works as an escape character: any sequence in C<repl> of
 | ||
| the form C<%I<n>>, with I<n> between 1 and 9, stands for the value of
 | ||
| the I<n>-th captured substring (see below). The sequence C<%0> stands
 | ||
| for the whole match. The sequence C<%%> stands for a single C<%>.
 | ||
| 
 | ||
| If C<repl> is a table, then the table is queried for every match, using
 | ||
| the first capture as the key; if the pattern specifies no captures,
 | ||
| then the whole match is used as the key.
 | ||
| 
 | ||
| If C<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 the table query or by the function call is a
 | ||
| string or a number, then it is used as the replacement string;
 | ||
| otherwise, if it is B<false> or B<nil>, then there is no replacement
 | ||
| (that is, the original match is kept in the string).
 | ||
| 
 | ||
| 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.1"}
 | ||
|      x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t)
 | ||
|      --> x="lua-5.1.tar.gz"
 | ||
| 
 | ||
| 
 | ||
| =head2 C<string.len (s)>
 | ||
| 
 | ||
| Receives a string and returns its length. The empty string C<""> has
 | ||
| length 0. Embedded zeros are counted, so C<"a\000bc\000"> has length 5.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<string.lower (s)>
 | ||
| 
 | ||
| Receives a string and returns a copy of this string with all uppercase
 | ||
| letters changed to lowercase. All other characters are left unchanged.
 | ||
| The definition of what an uppercase letter is depends on the current
 | ||
| locale.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<string.match (s, pattern [, init])>
 | ||
| 
 | ||
| Looks for the first I<match> of C<pattern> in the string C<s>. If it
 | ||
| finds one, then C<match> returns the captures from the pattern;
 | ||
| otherwise it returns B<nil>. If C<pattern> specifies no captures, then
 | ||
| the whole match is returned. A third, optional numerical argument
 | ||
| C<init> specifies where to start the search; its default value is 1 and
 | ||
| can be negative.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<string.rep (s, n)>
 | ||
| 
 | ||
| Returns a string that is the concatenation of C<n> copies of the string
 | ||
| C<s>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<string.reverse (s)>
 | ||
| 
 | ||
| Returns a string that is the string C<s> reversed.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<string.sub (s, i [, j])>
 | ||
| 
 | ||
| Returns the substring of C<s> that starts at C<i> and continues until
 | ||
| C<j>; C<i> and C<j> can be negative. If C<j> is absent, then it is
 | ||
| assumed to be equal to -1 (which is the same as the string length). In
 | ||
| particular, the call C<string.sub(s,1,j)> returns a prefix of C<s> with
 | ||
| length C<j>, and C<string.sub(s, -i)> returns a suffix of C<s> with
 | ||
| length C<i>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<string.upper (s)>
 | ||
| 
 | ||
| Receives a string and returns a copy of this string with all lowercase
 | ||
| letters changed to uppercase. All other characters are left unchanged.
 | ||
| The definition of what a lowercase letter is depends on the current
 | ||
| locale.
 | ||
| 
 | ||
| =head2 5.4.1 - Patterns
 | ||
| 
 | ||
| =head2 Character Class:
 | ||
| 
 | ||
| A I<character class> is used to represent a set of characters. The
 | ||
| following combinations are allowed in describing a character class:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<I<x>:> (where I<x> is not one of the I<magic characters>
 | ||
| C<^$()%.[]*+-?>) represents the character I<x> itself.
 | ||
| 
 | ||
| =item * B<C<.>:> (a dot) represents all characters.
 | ||
| 
 | ||
| =item * B<C<%a>:> represents all letters.
 | ||
| 
 | ||
| =item * B<C<%c>:> represents all control characters.
 | ||
| 
 | ||
| =item * B<C<%d>:> represents all digits.
 | ||
| 
 | ||
| =item * B<C<%l>:> represents all lowercase letters.
 | ||
| 
 | ||
| =item * B<C<%p>:> represents all punctuation characters.
 | ||
| 
 | ||
| =item * B<C<%s>:> represents all space characters.
 | ||
| 
 | ||
| =item * B<C<%u>:> represents all uppercase letters.
 | ||
| 
 | ||
| =item * B<C<%w>:> represents all alphanumeric characters.
 | ||
| 
 | ||
| =item * B<C<%x>:> represents all hexadecimal digits.
 | ||
| 
 | ||
| =item * B<C<%z>:> represents the character with representation 0.
 | ||
| 
 | ||
| =item * B<C<%I<x>>:> (where I<x> is any non-alphanumeric character)
 | ||
| represents the character I<x>. This is the standard way to escape the
 | ||
| magic characters. Any punctuation character (even the non magic) can be
 | ||
| preceded by a 'C<%>' when used to represent itself in a pattern.
 | ||
| 
 | ||
| =item * B<C<[I<set>]>:> represents the class which is the union of all
 | ||
| characters in I<set>. A range of characters can be specified by
 | ||
| separating the end characters of the range with a 'C<->'. All classes
 | ||
| C<%>I<x> described above can also be used as components in I<set>. All
 | ||
| other characters in I<set> represent themselves. For example, C<[%w_]>
 | ||
| (or C<[_%w]>) represents all alphanumeric characters plus the
 | ||
| underscore, C<[0-7]> represents the octal digits, and C<[0-7%l%-]>
 | ||
| represents the octal digits plus the lowercase letters plus the 'C<->'
 | ||
| character.
 | ||
| 
 | ||
| The interaction between ranges and classes is not defined. Therefore,
 | ||
| patterns like C<[%a-z]> or C<[a-%%]> have no meaning.
 | ||
| 
 | ||
| =item * B<C<[^I<set>]>:> represents the complement of I<set>, where
 | ||
| I<set> is interpreted as above.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| For all classes represented by single letters (C<%a>, C<%c>, etc.), the
 | ||
| corresponding uppercase letter represents the complement of the class.
 | ||
| For instance, C<%S> represents all non-space characters.
 | ||
| 
 | ||
| The definitions of letter, space, and other character groups depend on
 | ||
| the current locale. In particular, the class C<[a-z]> may not be
 | ||
| equivalent to C<%l>.
 | ||
| 
 | ||
| =head2 Pattern Item:
 | ||
| 
 | ||
| A I<pattern item> can be
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * a single character class, which matches any single character in
 | ||
| the class;
 | ||
| 
 | ||
| =item * a single character class followed by 'C<*>', which matches 0 or
 | ||
| more repetitions of characters in the class. These repetition items
 | ||
| will always match the longest possible sequence;
 | ||
| 
 | ||
| =item * a single character class followed by 'C<+>', which matches 1 or
 | ||
| more repetitions of characters in the class. These repetition items
 | ||
| will always match the longest possible sequence;
 | ||
| 
 | ||
| =item * a single character class followed by 'C<->', which also matches
 | ||
| 0 or more repetitions of characters in the class. Unlike 'C<*>', these
 | ||
| repetition items will always match the I<shortest> possible sequence;
 | ||
| 
 | ||
| =item * a single character class followed by 'C<?>', which matches 0 or
 | ||
| 1 occurrence of a character in the class;
 | ||
| 
 | ||
| =item * C<%I<n>>, for I<n> between 1 and 9; such item matches a
 | ||
| substring equal to the I<n>-th captured string (see below);
 | ||
| 
 | ||
| =item * C<%bI<xy>>, where I<x> and I<y> are two distinct characters;
 | ||
| such item matches strings that start with I<x>, end with I<y>, and
 | ||
| where the I<x> and I<y> are I<balanced>. This means that, if one reads
 | ||
| the string from left to right, counting I<+1> for an I<x> and I<-1> for
 | ||
| a I<y>, the ending I<y> is the first I<y> where the count reaches 0.
 | ||
| For instance, the item C<%b()> matches expressions with balanced
 | ||
| parentheses.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| =head2 Pattern:
 | ||
| 
 | ||
| A I<pattern> is a sequence of pattern items. A 'C<^>' at the beginning
 | ||
| of a pattern anchors the match at the beginning of the subject string.
 | ||
| A 'C<$>' at the end of a pattern anchors the match at the end of the
 | ||
| subject string. At other positions, 'C<^>' and 'C<$>' have no special
 | ||
| meaning and represent themselves.
 | ||
| 
 | ||
| =head2 Captures:
 | ||
| 
 | ||
| A pattern can contain sub-patterns enclosed in parentheses; they
 | ||
| describe I<captures>. When a match succeeds, the substrings of the
 | ||
| subject string that match captures are stored (I<captured>) for future
 | ||
| use. Captures are numbered according to their left parentheses. For
 | ||
| instance, in the pattern C<"(a*(.)%w(%s*))">, the part of the string
 | ||
| matching C<"a*(.)%w(%s*)"> is stored as the first capture (and
 | ||
| therefore has number 1); the character matching "C<.>" is captured with
 | ||
| number 2, and the part matching "C<%s*>" has number 3.
 | ||
| 
 | ||
| As a special case, the empty capture C<()> captures the current string
 | ||
| position (a number). For instance, if we apply the pattern C<"()aa()">
 | ||
| on the string C<"flaaap">, there will be two captures: 3 and 5.
 | ||
| 
 | ||
| A pattern cannot contain embedded zeros. Use C<%z> instead.
 | ||
| 
 | ||
| =head2 5.5 - Table Manipulation
 | ||
| 
 | ||
| This library provides generic functions for table manipulation. It
 | ||
| provides all its functions inside the table C<table>.
 | ||
| 
 | ||
| Most functions in the table library assume that the table represents an
 | ||
| array or a list. For these functions, when we talk about the "length"
 | ||
| of a table we mean the result of the length operator.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<table.concat (table [, sep [, i [, j]]])>
 | ||
| 
 | ||
| Given an array where all elements are strings or numbers, returns
 | ||
| C<table[i]..sep..table[i+1] E<middot>E<middot>E<middot> sep..table[j]>.
 | ||
| The default value for C<sep> is the empty string, the default for C<i>
 | ||
| is 1, and the default for C<j> is the length of the table. If C<i> is
 | ||
| greater than C<j>, returns the empty string.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<table.insert (table, [pos,] value)>
 | ||
| 
 | ||
| Inserts element C<value> at position C<pos> in C<table>, shifting up
 | ||
| other elements to open space, if necessary. The default value for
 | ||
| C<pos> is C<n+1>, where C<n> is the length of the table (see
 | ||
| E<sect>2.5.5), so that a call C<table.insert(t,x)> inserts C<x> at the
 | ||
| end of table C<t>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<table.maxn (table)>
 | ||
| 
 | ||
| Returns the largest positive numerical index of the given table, or
 | ||
| zero if the table has no positive numerical indices. (To do its job
 | ||
| this function does a linear traversal of the whole table.)
 | ||
| 
 | ||
| 
 | ||
| =head2 C<table.remove (table [, pos])>
 | ||
| 
 | ||
| Removes from C<table> the element at position C<pos>, shifting down
 | ||
| other elements to close the space, if necessary. Returns the value of
 | ||
| the removed element. The default value for C<pos> is C<n>, where C<n>
 | ||
| is the length of the table, so that a call C<table.remove(t)> removes
 | ||
| the last element of table C<t>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<table.sort (table [, comp])>
 | ||
| 
 | ||
| Sorts table elements in a given order, I<in-place>, from C<table[1]> to
 | ||
| C<table[n]>, where C<n> is the length of the table. If C<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 C<not
 | ||
| comp(a[i+1],a[i])> will be true after the sort). If C<comp> is not
 | ||
| given, then the standard Lua operator C<E<lt>> 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.
 | ||
| 
 | ||
| =head2 5.6 - Mathematical Functions
 | ||
| 
 | ||
| This library is an interface to the standard C math library. It
 | ||
| provides all its functions inside the table C<math>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.abs (x)>
 | ||
| 
 | ||
| Returns the absolute value of C<x>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.acos (x)>
 | ||
| 
 | ||
| Returns the arc cosine of C<x> (in radians).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.asin (x)>
 | ||
| 
 | ||
| Returns the arc sine of C<x> (in radians).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.atan (x)>
 | ||
| 
 | ||
| Returns the arc tangent of C<x> (in radians).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.atan2 (y, x)>
 | ||
| 
 | ||
| Returns the arc tangent of C<y/x> (in radians), but uses the signs of
 | ||
| both parameters to find the quadrant of the result. (It also handles
 | ||
| correctly the case of C<x> being zero.)
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.ceil (x)>
 | ||
| 
 | ||
| Returns the smallest integer larger than or equal to C<x>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.cos (x)>
 | ||
| 
 | ||
| Returns the cosine of C<x> (assumed to be in radians).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.cosh (x)>
 | ||
| 
 | ||
| Returns the hyperbolic cosine of C<x>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.deg (x)>
 | ||
| 
 | ||
| Returns the angle C<x> (given in radians) in degrees.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.exp (x)>
 | ||
| 
 | ||
| Returns the value I<ex>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.floor (x)>
 | ||
| 
 | ||
| Returns the largest integer smaller than or equal to C<x>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.fmod (x, y)>
 | ||
| 
 | ||
| Returns the remainder of the division of C<x> by C<y> that rounds the
 | ||
| quotient towards zero.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.frexp (x)>
 | ||
| 
 | ||
| Returns C<m> and C<e> such that I<x = m2e>, C<e> is an integer and the
 | ||
| absolute value of C<m> is in the range I<[0.5, 1)> (or zero when C<x>
 | ||
| is zero).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.huge>
 | ||
| 
 | ||
| The value C<HUGE_VAL>, a value larger than or equal to any other
 | ||
| numerical value.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.ldexp (m, e)>
 | ||
| 
 | ||
| Returns I<m2e> (C<e> should be an integer).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.log (x)>
 | ||
| 
 | ||
| Returns the natural logarithm of C<x>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.log10 (x)>
 | ||
| 
 | ||
| Returns the base-10 logarithm of C<x>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.max (x, E<middot>E<middot>E<middot>)>
 | ||
| 
 | ||
| Returns the maximum value among its arguments.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.min (x, E<middot>E<middot>E<middot>)>
 | ||
| 
 | ||
| Returns the minimum value among its arguments.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.modf (x)>
 | ||
| 
 | ||
| Returns two numbers, the integral part of C<x> and the fractional part
 | ||
| of C<x>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.pi>
 | ||
| 
 | ||
| The value of I<pi>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.pow (x, y)>
 | ||
| 
 | ||
| Returns I<xy>. (You can also use the expression C<x^y> to compute this
 | ||
| value.)
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.rad (x)>
 | ||
| 
 | ||
| Returns the angle C<x> (given in degrees) in radians.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.random ([m [, n]])>
 | ||
| 
 | ||
| This function is an interface to the simple pseudo-random generator
 | ||
| function C<rand> provided by ANSI C. (No guarantees can be given for
 | ||
| its statistical properties.)
 | ||
| 
 | ||
| When called without arguments, returns a uniform pseudo-random real
 | ||
| number in the range I<[0,1)>. When called with an integer number C<m>,
 | ||
| C<math.random> returns a uniform pseudo-random integer in the range
 | ||
| I<[1, m]>. When called with two integer numbers C<m> and C<n>,
 | ||
| C<math.random> returns a uniform pseudo-random integer in the range
 | ||
| I<[m, n]>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.randomseed (x)>
 | ||
| 
 | ||
| Sets C<x> as the "seed" for the pseudo-random generator: equal seeds
 | ||
| produce equal sequences of numbers.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.sin (x)>
 | ||
| 
 | ||
| Returns the sine of C<x> (assumed to be in radians).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.sinh (x)>
 | ||
| 
 | ||
| Returns the hyperbolic sine of C<x>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.sqrt (x)>
 | ||
| 
 | ||
| Returns the square root of C<x>. (You can also use the expression
 | ||
| C<x^0.5> to compute this value.)
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.tan (x)>
 | ||
| 
 | ||
| Returns the tangent of C<x> (assumed to be in radians).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<math.tanh (x)>
 | ||
| 
 | ||
| Returns the hyperbolic tangent of C<x>.
 | ||
| 
 | ||
| =head2 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 these default files. The second
 | ||
| style uses explicit file descriptors.
 | ||
| 
 | ||
| When using implicit file descriptors, all operations are supplied by
 | ||
| table C<io>. When using explicit file descriptors, the operation
 | ||
| C<io.open> returns a file descriptor and then all operations are
 | ||
| supplied as methods of the file descriptor.
 | ||
| 
 | ||
| The table C<io> also provides three predefined file descriptors with
 | ||
| their usual meanings from C: C<io.stdin>, C<io.stdout>, and
 | ||
| C<io.stderr>. The I/O library never closes these files.
 | ||
| 
 | ||
| Unless otherwise stated, all I/O functions return B<nil> on failure
 | ||
| (plus an error message as a second result and a system-dependent error
 | ||
| code as a third result) and some value different from B<nil> on
 | ||
| success.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<io.close ([file])>
 | ||
| 
 | ||
| Equivalent to C<file:close()>. Without a C<file>, closes the default
 | ||
| output file.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<io.flush ()>
 | ||
| 
 | ||
| Equivalent to C<file:flush> over the default output file.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<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 this 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.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<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 body end
 | ||
| 
 | ||
| will iterate over all lines of the file. When the iterator function
 | ||
| detects the end of file, it returns B<nil> (to finish the loop) and
 | ||
| automatically closes the file.
 | ||
| 
 | ||
| The call C<io.lines()> (with no file name) is equivalent to
 | ||
| C<io.input():lines()>; that is, it iterates over the lines of the
 | ||
| default input file. In this case it does not close the file when the
 | ||
| loop ends.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<io.open (filename [, mode])>
 | ||
| 
 | ||
| This function opens a file, in the mode specified in the string
 | ||
| C<mode>. It returns a new file handle, or, in case of errors, B<nil>
 | ||
| plus an error message.
 | ||
| 
 | ||
| The C<mode> string can be any of the following:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<"r":> read mode (the default);
 | ||
| 
 | ||
| =item * B<"w":> write mode;
 | ||
| 
 | ||
| =item * B<"a":> append mode;
 | ||
| 
 | ||
| =item * B<"r+":> update mode, all previous data is preserved;
 | ||
| 
 | ||
| =item * B<"w+":> update mode, all previous data is erased;
 | ||
| 
 | ||
| =item * B<"a+":> append update mode, previous data is preserved,
 | ||
| writing is only allowed at the end of file.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| The C<mode> string can also have a 'C<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 C<fopen>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<io.output ([file])>
 | ||
| 
 | ||
| Similar to C<io.input>, but operates over the default output file.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<io.popen (prog [, mode])>
 | ||
| 
 | ||
| Starts program C<prog> in a separated process and returns a file handle
 | ||
| that you can use to read data from this program (if C<mode> is C<"r">,
 | ||
| the default) or to write data to this program (if C<mode> is C<"w">).
 | ||
| 
 | ||
| This function is system dependent and is not available on all
 | ||
| platforms.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<io.read (E<middot>E<middot>E<middot>)>
 | ||
| 
 | ||
| Equivalent to C<io.input():read>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<io.tmpfile ()>
 | ||
| 
 | ||
| Returns a handle for a temporary file. This file is opened in update
 | ||
| mode and it is automatically removed when the program ends.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<io.type (obj)>
 | ||
| 
 | ||
| Checks whether C<obj> is a valid file handle. Returns the string
 | ||
| C<"file"> if C<obj> is an open file handle, C<"closed file"> if C<obj>
 | ||
| is a closed file handle, or B<nil> if C<obj> is not a file handle.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<io.write (E<middot>E<middot>E<middot>)>
 | ||
| 
 | ||
| Equivalent to C<io.output():write>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<file:close ()>
 | ||
| 
 | ||
| Closes C<file>. Note that files are automatically closed when their
 | ||
| handles are garbage collected, but that takes an unpredictable amount
 | ||
| of time to happen.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<file:flush ()>
 | ||
| 
 | ||
| Saves any written data to C<file>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<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 body end
 | ||
| 
 | ||
| will iterate over all lines of the file. (Unlike C<io.lines>, this
 | ||
| function does not close the file when the loop ends.)
 | ||
| 
 | ||
| 
 | ||
| =head2 C<file:read (E<middot>E<middot>E<middot>)>
 | ||
| 
 | ||
| Reads the file C<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 B<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
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<"*n":> reads a number; this is the only format that returns a
 | ||
| number instead of a string.
 | ||
| 
 | ||
| =item * B<"*a":> reads the whole file, starting at the current
 | ||
| position. On end of file, it returns the empty string.
 | ||
| 
 | ||
| =item * B<"*l":> reads the next line (skipping the end of line),
 | ||
| returning B<nil> on end of file. This is the default format.
 | ||
| 
 | ||
| =item * B<I<number>:> reads a string with up to this number of
 | ||
| characters, returning B<nil> on end of file. If number is zero, it
 | ||
| reads nothing and returns an empty string, or B<nil> on end of file.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| 
 | ||
| =head2 C<file:seek ([whence] [, offset])>
 | ||
| 
 | ||
| Sets and gets the file position, measured from the beginning of the
 | ||
| file, to the position given by C<offset> plus a base specified by the
 | ||
| string C<whence>, as follows:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<"set":> base is position 0 (beginning of the file);
 | ||
| 
 | ||
| =item * B<"cur":> base is current position;
 | ||
| 
 | ||
| =item * B<"end":> base is end of file;
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| In case of success, function C<seek> returns the final file position,
 | ||
| measured in bytes from the beginning of the file. If this function
 | ||
| fails, it returns B<nil>, plus a string describing the error.
 | ||
| 
 | ||
| The default value for C<whence> is C<"cur">, and for C<offset> is 0.
 | ||
| Therefore, the call C<file:seek()> returns the current file position,
 | ||
| without changing it; the call C<file:seek("set")> sets the position to
 | ||
| the beginning of the file (and returns 0); and the call
 | ||
| C<file:seek("end")> sets the position to the end of the file, and
 | ||
| returns its size.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<file:setvbuf (mode [, size])>
 | ||
| 
 | ||
| Sets the buffering mode for an output file. There are three available
 | ||
| modes:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<"no":> no buffering; the result of any output operation
 | ||
| appears immediately.
 | ||
| 
 | ||
| =item * B<"full":> full buffering; output operation is performed only
 | ||
| when the buffer is full (or when you explicitly C<flush> the file (see
 | ||
| C<io.flush>)).
 | ||
| 
 | ||
| =item * B<"line":> line buffering; output is buffered until a newline
 | ||
| is output or there is any input from some special files (such as a
 | ||
| terminal device).
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| For the last two cases, C<size> specifies the size of the buffer, in
 | ||
| bytes. The default is an appropriate size.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<file:write (E<middot>E<middot>E<middot>)>
 | ||
| 
 | ||
| Writes the value of each of its arguments to the C<file>. The arguments
 | ||
| must be strings or numbers. To write other values, use C<tostring> or
 | ||
| C<string.format> before C<write>.
 | ||
| 
 | ||
| =head2 5.8 - Operating System Facilities
 | ||
| 
 | ||
| This library is implemented through table C<os>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<os.clock ()>
 | ||
| 
 | ||
| Returns an approximation of the amount in seconds of CPU time used by
 | ||
| the program.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<os.date ([format [, time]])>
 | ||
| 
 | ||
| Returns a string or a table containing date and time, formatted
 | ||
| according to the given string C<format>.
 | ||
| 
 | ||
| If the C<time> argument is present, this is the time to be formatted
 | ||
| (see the C<os.time> function for a description of this value).
 | ||
| Otherwise, C<date> formats the current time.
 | ||
| 
 | ||
| If C<format> starts with 'C<!>', then the date is formatted in
 | ||
| Coordinated Universal Time. After this optional character, if C<format>
 | ||
| is the string "C<*t>", then C<date> returns a table with the following
 | ||
| fields: C<year> (four digits), C<month> (1--12), C<day> (1--31),
 | ||
| C<hour> (0--23), C<min> (0--59), C<sec> (0--61), C<wday> (weekday,
 | ||
| Sunday is 1), C<yday> (day of the year), and C<isdst> (daylight saving
 | ||
| flag, a boolean).
 | ||
| 
 | ||
| If C<format> is not "C<*t>", then C<date> returns the date as a string,
 | ||
| formatted according to the same rules as the C function C<strftime>.
 | ||
| 
 | ||
| When called without arguments, C<date> returns a reasonable date and
 | ||
| time representation that depends on the host system and on the current
 | ||
| locale (that is, C<os.date()> is equivalent to C<os.date("%c")>).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<os.difftime (t2, t1)>
 | ||
| 
 | ||
| Returns the number of seconds from time C<t1> to time C<t2>. In POSIX,
 | ||
| Windows, and some other systems, this value is exactly C<t2>I<->C<t1>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<os.execute ([command])>
 | ||
| 
 | ||
| This function is equivalent to the C function C<system>. It passes
 | ||
| C<command> to be executed by an operating system shell. It returns a
 | ||
| status code, which is system-dependent. If C<command> is absent, then
 | ||
| it returns nonzero if a shell is available and zero otherwise.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<os.exit ([code])>
 | ||
| 
 | ||
| Calls the C function C<exit>, with an optional C<code>, to terminate
 | ||
| the host program. The default value for C<code> is the success code.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<os.getenv (varname)>
 | ||
| 
 | ||
| Returns the value of the process environment variable C<varname>, or
 | ||
| B<nil> if the variable is not defined.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<os.remove (filename)>
 | ||
| 
 | ||
| Deletes the file or directory with the given name. Directories must be
 | ||
| empty to be removed. If this function fails, it returns B<nil>, plus a
 | ||
| string describing the error.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<os.rename (oldname, newname)>
 | ||
| 
 | ||
| Renames file or directory named C<oldname> to C<newname>. If this
 | ||
| function fails, it returns B<nil>, plus a string describing the error.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<os.setlocale (locale [, category])>
 | ||
| 
 | ||
| Sets the current locale of the program. C<locale> is a string
 | ||
| specifying a locale; C<category> is an optional string describing which
 | ||
| category to change: C<"all">, C<"collate">, C<"ctype">, C<"monetary">,
 | ||
| C<"numeric">, or C<"time">; the default category is C<"all">. The
 | ||
| function returns the name of the new locale, or B<nil> if the request
 | ||
| cannot be honored.
 | ||
| 
 | ||
| If C<locale> is the empty string, the current locale is set to an
 | ||
| implementation-defined native locale. If C<locale> is the string
 | ||
| "C<C>", the current locale is set to the standard C locale.
 | ||
| 
 | ||
| When called with B<nil> as the first argument, this function only
 | ||
| returns the name of the current locale for the given category.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<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 C<year>, C<month>, and C<day>, and may have fields
 | ||
| C<hour>, C<min>, C<sec>, and C<isdst> (for a description of these
 | ||
| fields, see the C<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
 | ||
| C<time> can be used only as an argument to C<date> and C<difftime>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<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 explicitly
 | ||
| removed when no longer needed.
 | ||
| 
 | ||
| On some systems (POSIX), this function also creates a file with that
 | ||
| name, to avoid security risks. (Someone else might create the file with
 | ||
| wrong permissions in the time between getting the name and creating the
 | ||
| file.) You still have to open the file to use it and to remove it (even
 | ||
| if you do not use it).
 | ||
| 
 | ||
| When possible, you may prefer to use C<io.tmpfile>, which automatically
 | ||
| removes the file when the program ends.
 | ||
| 
 | ||
| =head2 5.9 - The Debug Library
 | ||
| 
 | ||
| This 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
 | ||
| these functions violate some assumptions about Lua code (e.g., that
 | ||
| variables local to a function cannot be accessed from outside or that
 | ||
| userdata metatables cannot be changed by Lua code) and therefore can
 | ||
| compromise otherwise secure code.
 | ||
| 
 | ||
| All functions in this library are provided inside the C<debug> table.
 | ||
| All functions that operate over a thread have an optional first
 | ||
| argument which is the thread to operate over. The default is always the
 | ||
| current thread.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<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 C<cont>
 | ||
| finishes this function, so that the caller continues its execution.
 | ||
| 
 | ||
| Note that commands for C<debug.debug> are not lexically nested within
 | ||
| any function, and so have no direct access to local variables.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<debug.getfenv (o)>
 | ||
| 
 | ||
| Returns the environment of object C<o>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<debug.gethook ([thread])>
 | ||
| 
 | ||
| Returns the current hook settings of the thread, as three values: the
 | ||
| current hook function, the current hook mask, and the current hook
 | ||
| count (as set by the C<debug.sethook> function).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<debug.getinfo ([thread,] function [, what])>
 | ||
| 
 | ||
| Returns a table with information about a function. You can give the
 | ||
| function directly, or you can give a number as the value of
 | ||
| C<function>, which means the function running at level C<function> of
 | ||
| the call stack of the given thread: level 0 is the current function
 | ||
| (C<getinfo> itself); level 1 is the function that called C<getinfo>;
 | ||
| and so on. If C<function> is a number larger than the number of active
 | ||
| functions, then C<getinfo> returns B<nil>.
 | ||
| 
 | ||
| The returned table can contain all the fields returned by
 | ||
| C<lua_getinfo>, with the string C<what> describing which fields to fill
 | ||
| in. The default for C<what> is to get all information available, except
 | ||
| the table of valid lines. If present, the option 'C<f>' adds a field
 | ||
| named C<func> with the function itself. If present, the option 'C<L>'
 | ||
| adds a field named C<activelines> with the table of valid lines.
 | ||
| 
 | ||
| For instance, the expression C<debug.getinfo(1,"n").name> returns a
 | ||
| table with a name for the current function, if a reasonable name can be
 | ||
| found, and the expression C<debug.getinfo(print)> returns a table with
 | ||
| all available information about the C<print> function.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<debug.getlocal ([thread,] level, local)>
 | ||
| 
 | ||
| This function returns the name and the value of the local variable with
 | ||
| index C<local> of the function at level C<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 B<nil> if there is no
 | ||
| local variable with the given index, and raises an error when called
 | ||
| with a C<level> out of range. (You can call C<debug.getinfo> to check
 | ||
| whether the level is valid.)
 | ||
| 
 | ||
| Variable names starting with 'C<(>' (open parentheses) represent
 | ||
| internal variables (loop control variables, temporaries, and C function
 | ||
| locals).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<debug.getmetatable (object)>
 | ||
| 
 | ||
| Returns the metatable of the given C<object> or B<nil> if it does not
 | ||
| have a metatable.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<debug.getregistry ()>
 | ||
| 
 | ||
| Returns the registry table (see E<sect>3.5).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<debug.getupvalue (func, up)>
 | ||
| 
 | ||
| This function returns the name and the value of the upvalue with index
 | ||
| C<up> of the function C<func>. The function returns B<nil> if there is
 | ||
| no upvalue with the given index.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<debug.setfenv (object, table)>
 | ||
| 
 | ||
| Sets the environment of the given C<object> to the given C<table>.
 | ||
| Returns C<object>.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<debug.sethook ([thread,] hook, mask [, count])>
 | ||
| 
 | ||
| Sets the given function as a hook. The string C<mask> and the number
 | ||
| C<count> describe when the hook will be called. The string mask may
 | ||
| have the following characters, with the given meaning:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<C<"c">:> the hook is called every time Lua calls a function;
 | ||
| 
 | ||
| =item * B<C<"r">:> the hook is called every time Lua returns from a
 | ||
| function;
 | ||
| 
 | ||
| =item * B<C<"l">:> the hook is called every time Lua enters a new line
 | ||
| of code.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| With a C<count> different from zero, the hook is called after every
 | ||
| C<count> instructions.
 | ||
| 
 | ||
| When called without arguments, C<debug.sethook> turns off the hook.
 | ||
| 
 | ||
| When the hook is called, its first parameter is a string describing the
 | ||
| event that has triggered its call: C<"call">, C<"return"> (or C<"tail
 | ||
| return">, when simulating a return from a tail call), C<"line">, and
 | ||
| C<"count">. For line events, the hook also gets the new line number as
 | ||
| its second parameter. Inside a hook, you can call C<getinfo> with level
 | ||
| 2 to get more information about the running function (level 0 is the
 | ||
| C<getinfo> function, and level 1 is the hook function), unless the
 | ||
| event is C<"tail return">. In this case, Lua is only simulating the
 | ||
| return, and a call to C<getinfo> will return invalid data.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<debug.setlocal ([thread,] level, local, value)>
 | ||
| 
 | ||
| This function assigns the value C<value> to the local variable with
 | ||
| index C<local> of the function at level C<level> of the stack. The
 | ||
| function returns B<nil> if there is no local variable with the given
 | ||
| index, and raises an error when called with a C<level> out of range.
 | ||
| (You can call C<getinfo> to check whether the level is valid.)
 | ||
| Otherwise, it returns the name of the local variable.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<debug.setmetatable (object, table)>
 | ||
| 
 | ||
| Sets the metatable for the given C<object> to the given C<table> (which
 | ||
| can be B<nil>).
 | ||
| 
 | ||
| 
 | ||
| =head2 C<debug.setupvalue (func, up, value)>
 | ||
| 
 | ||
| This function assigns the value C<value> to the upvalue with index
 | ||
| C<up> of the function C<func>. The function returns B<nil> if there is
 | ||
| no upvalue with the given index. Otherwise, it returns the name of the
 | ||
| upvalue.
 | ||
| 
 | ||
| 
 | ||
| =head2 C<debug.traceback ([thread,] [message [, level]])>
 | ||
| 
 | ||
| Returns a string with a traceback of the call stack. An optional
 | ||
| C<message> string is appended at the beginning of the traceback. An
 | ||
| optional C<level> number tells at which level to start the traceback
 | ||
| (default is 1, the function calling C<traceback>).
 | ||
| 
 | ||
| =head1 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 C<lua>, is provided with the standard distribution. The
 | ||
| stand-alone interpreter includes all standard libraries, including the
 | ||
| debug library. Its usage is:
 | ||
| 
 | ||
|      lua [options] [script [args]]
 | ||
| 
 | ||
| The options are:
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * B<C<-e I<stat>>:> executes string I<stat>;
 | ||
| 
 | ||
| =item * B<C<-l I<mod>>:> "requires" I<mod>;
 | ||
| 
 | ||
| =item * B<C<-i>:> enters interactive mode after running I<script>;
 | ||
| 
 | ||
| =item * B<C<-v>:> prints version information;
 | ||
| 
 | ||
| =item * B<C<-->:> stops handling options;
 | ||
| 
 | ||
| =item * B<C<->:> executes C<stdin> as a file and stops handling
 | ||
| options.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| After handling its options, C<lua> runs the given I<script>, passing to
 | ||
| it the given I<args> as string arguments. When called without
 | ||
| arguments, C<lua> behaves as C<lua -v -i> when the standard input
 | ||
| (C<stdin>) is a terminal, and as C<lua -> otherwise.
 | ||
| 
 | ||
| Before running any argument, the interpreter checks for an environment
 | ||
| variable C<LUA_INIT>. If its format is C<@I<filename>>, then C<lua>
 | ||
| executes the file. Otherwise, C<lua> executes the string itself.
 | ||
| 
 | ||
| All options are handled in order, except C<-i>. For instance, an
 | ||
| invocation like
 | ||
| 
 | ||
|      $ lua -e'a=1' -e 'print(a)' script.lua
 | ||
| 
 | ||
| will first set C<a> to 1, then print the value of C<a> (which is
 | ||
| 'C<1>'), and finally run the file C<script.lua> with no arguments.
 | ||
| (Here C<$> is the shell prompt. Your prompt may be different.)
 | ||
| 
 | ||
| Before starting to run the script, C<lua> collects all arguments in the
 | ||
| command line in a global table called C<arg>. The script name is stored
 | ||
| at 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 b.lua t1 t2
 | ||
| 
 | ||
| the interpreter first runs the file C<a.lua>, then creates a table
 | ||
| 
 | ||
|      arg = { [-2] = "lua", [-1] = "-la",
 | ||
|              [0] = "b.lua",
 | ||
|              [1] = "t1", [2] = "t2" }
 | ||
| 
 | ||
| and finally runs the file C<b.lua>. The script is called with
 | ||
| C<arg[1]>, C<arg[2]>, E<middot>E<middot>E<middot> as arguments; it can
 | ||
| also access these arguments with the vararg expression 'C<...>'.
 | ||
| 
 | ||
| In interactive mode, if you write an incomplete statement, the
 | ||
| interpreter waits for its completion by issuing a different prompt.
 | ||
| 
 | ||
| If the global variable C<_PROMPT> contains a string, then its value is
 | ||
| used as the prompt. Similarly, if the global variable C<_PROMPT2>
 | ||
| contains a string, its value is used as the secondary prompt (issued
 | ||
| during incomplete statements). Therefore, both prompts can be changed
 | ||
| directly on the command line or in any Lua programs by assigning to
 | ||
| C<_PROMPT>. See the next example:
 | ||
| 
 | ||
|      $ lua -e"_PROMPT='myprompt> '" -i
 | ||
| 
 | ||
| (The outer pair of quotes is for the shell, the inner pair is for Lua.)
 | ||
| Note the use of C<-i> to enter interactive mode; otherwise, the program
 | ||
| would just end silently right after the assignment to C<_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 C<#>. Therefore, Lua scripts can be made into executable programs
 | ||
| by using C<chmod +x> and the C<#!> form, as in
 | ||
| 
 | ||
|      #!/usr/local/bin/lua
 | ||
| 
 | ||
| (Of course, the location of the Lua interpreter may be different in
 | ||
| your machine. If C<lua> is in your C<PATH>, then
 | ||
| 
 | ||
|      #!/usr/bin/env lua
 | ||
| 
 | ||
| is a more portable solution.)
 | ||
| 
 | ||
| =head1 7 - Incompatibilities with the Previous Version
 | ||
| 
 | ||
| Here we list the incompatibilities that you may find when moving a
 | ||
| program from Lua 5.0 to Lua 5.1. You can avoid most of the
 | ||
| incompatibilities compiling Lua with appropriate options (see file
 | ||
| C<luaconf.h>). However, all these compatibility options will be removed
 | ||
| in the next version of Lua.
 | ||
| 
 | ||
| =head2 7.1 - Changes in the Language
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * The vararg system changed from the pseudo-argument C<arg> with
 | ||
| a table with the extra arguments to the vararg expression. (See
 | ||
| compile-time option C<LUA_COMPAT_VARARG> in C<luaconf.h>.)
 | ||
| 
 | ||
| =item * There was a subtle change in the scope of the implicit
 | ||
| variables of the B<for> statement and for the B<repeat> statement.
 | ||
| 
 | ||
| =item * The long string/long comment syntax (C<[[I<string>]]>) does not
 | ||
| allow nesting. You can use the new syntax (C<[=[I<string>]=]>) in these
 | ||
| cases. (See compile-time option C<LUA_COMPAT_LSTR> in C<luaconf.h>.)
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| =head2 7.2 - Changes in the Libraries
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * Function C<string.gfind> was renamed C<string.gmatch>. (See
 | ||
| compile-time option C<LUA_COMPAT_GFIND> in C<luaconf.h>.)
 | ||
| 
 | ||
| =item * When C<string.gsub> is called with a function as its third
 | ||
| argument, whenever this function returns B<nil> or B<false> the
 | ||
| replacement string is the whole match, instead of the empty string.
 | ||
| 
 | ||
| =item * Function C<table.setn> was deprecated. Function C<table.getn>
 | ||
| corresponds to the new length operator (C<#>); use the operator instead
 | ||
| of the function. (See compile-time option C<LUA_COMPAT_GETN> in
 | ||
| C<luaconf.h>.)
 | ||
| 
 | ||
| =item * Function C<loadlib> was renamed C<package.loadlib>. (See
 | ||
| compile-time option C<LUA_COMPAT_LOADLIB> in C<luaconf.h>.)
 | ||
| 
 | ||
| =item * Function C<math.mod> was renamed C<math.fmod>. (See
 | ||
| compile-time option C<LUA_COMPAT_MOD> in C<luaconf.h>.)
 | ||
| 
 | ||
| =item * Functions C<table.foreach> and C<table.foreachi> are
 | ||
| deprecated. You can use a for loop with C<pairs> or C<ipairs> instead.
 | ||
| 
 | ||
| =item * There were substantial changes in function C<require> due to
 | ||
| the new module system. However, the new behavior is mostly compatible
 | ||
| with the old, but C<require> gets the path from C<package.path> instead
 | ||
| of from C<LUA_PATH>.
 | ||
| 
 | ||
| =item * Function C<collectgarbage> has different arguments. Function
 | ||
| C<gcinfo> is deprecated; use C<collectgarbage("count")> instead.
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| =head2 7.3 - Changes in the API
 | ||
| 
 | ||
| =over
 | ||
| 
 | ||
| =item * The C<luaopen_*> functions (to open libraries) cannot be called
 | ||
| directly, like a regular C function. They must be called through Lua,
 | ||
| like a Lua function.
 | ||
| 
 | ||
| =item * Function C<lua_open> was replaced by C<lua_newstate> to allow
 | ||
| the user to set a memory-allocation function. You can use
 | ||
| C<luaL_newstate> from the standard library to create a state with a
 | ||
| standard allocation function (based on C<realloc>).
 | ||
| 
 | ||
| =item * Functions C<luaL_getn> and C<luaL_setn> (from the auxiliary
 | ||
| library) are deprecated. Use C<lua_objlen> instead of C<luaL_getn> and
 | ||
| nothing instead of C<luaL_setn>.
 | ||
| 
 | ||
| =item * Function C<luaL_openlib> was replaced by C<luaL_register>.
 | ||
| 
 | ||
| =item * Function C<luaL_checkudata> now throws an error when the given
 | ||
| value is not a userdata of the expected type. (In Lua 5.0 it returned
 | ||
| C<NULL>.)
 | ||
| 
 | ||
| =back
 | ||
| 
 | ||
| =head1 8 - The Complete Syntax of Lua
 | ||
| 
 | ||
| Here is the complete syntax of Lua in extended BNF. (It does not
 | ||
| describe operator precedences.)
 | ||
| 
 | ||
| 	chunk ::= {stat [`;´]} [laststat [`;´]]
 | ||
|  
 | ||
| 	block ::= chunk
 | ||
|  
 | ||
| 	stat ::=  varlist `=´ explist | 
 | ||
| 		 functioncall | 
 | ||
| 		 do block end | 
 | ||
| 		 while exp do block end | 
 | ||
| 		 repeat block until exp | 
 | ||
| 		 if exp then block {elseif exp then block} [else block] end | 
 | ||
| 		 for Name `=´ exp `,´ exp [`,´ exp] do block end | 
 | ||
| 		 for namelist in explist do block end | 
 | ||
| 		 function funcname funcbody | 
 | ||
| 		 local function Name funcbody | 
 | ||
| 		 local namelist [`=´ explist] 
 | ||
|  
 | ||
| 	laststat ::= return [explist] | break
 | ||
|  
 | ||
| 	funcname ::= Name {`.´ Name} [`:´ Name]
 | ||
|  
 | ||
| 	varlist ::= var {`,´ var}
 | ||
|  
 | ||
| 	var ::=  Name | prefixexp `[´ exp `]´ | prefixexp `.´ Name 
 | ||
|  
 | ||
| 	namelist ::= Name {`,´ Name}
 | ||
|  
 | ||
| 	explist ::= {exp `,´} exp
 | ||
|  
 | ||
| 	exp ::=  nil | false | true | Number | String | `...´ | function | 
 | ||
| 		 prefixexp | tableconstructor | exp binop exp | unop exp 
 | ||
|  
 | ||
| 	prefixexp ::= var | functioncall | `(´ exp `)´
 | ||
|  
 | ||
| 	functioncall ::=  prefixexp args | prefixexp `:´ Name args 
 | ||
|  
 | ||
| 	args ::=  `(´ [explist] `)´ | tableconstructor | String 
 | ||
|  
 | ||
| 	function ::= function funcbody
 | ||
|  
 | ||
| 	funcbody ::= `(´ [parlist] `)´ block end
 | ||
|  
 | ||
| 	parlist ::= namelist [`,´ `...´] | `...´
 | ||
|  
 | ||
| 	tableconstructor ::= `{´ [fieldlist] `}´
 | ||
|  
 | ||
| 	fieldlist ::= field {fieldsep field} [fieldsep]
 | ||
|  
 | ||
| 	field ::= `[´ exp `]´ `=´ exp | Name `=´ exp | exp
 | ||
|  
 | ||
| 	fieldsep ::= `,´ | `;´
 | ||
|  
 | ||
| 	binop ::= `+´ | `-´ | `*´ | `/´ | `^´ | `%´ | `..´ | 
 | ||
| 		 `<´ | `<=´ | `>´ | `>=´ | `==´ | `~=´ | 
 | ||
| 		 and | or
 | ||
|  
 | ||
| 	unop ::= `-´ | not | `#E<acute>
 | ||
| 
 | ||
| 
 | ||
| Last update: Mon Feb 13 18:54:19 BRST 2012
 | ||
| 
 | ||
| =cut
 |