summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorLua Team <team@lua.org>2010-01-08 12:00:00 +0000
committerrepogen <>2010-01-08 12:00:00 +0000
commit22912c77c80f8de8f7accd3319c726f7c5349fd3 (patch)
treecaf064ecca31cd2ef1c919c585ee6b3d5e6d25d6 /doc
parent300cd56eb905be061aa75bb665549b3b85109bbe (diff)
downloadlua-github-5.2.0-work1.tar.gz
Lua 5.2.0-work15.2.0-work1
Diffstat (limited to 'doc')
-rw-r--r--doc/Makefile9
-rw-r--r--doc/alert.pngbin0 -> 1411 bytes
-rw-r--r--doc/contents.html34
-rw-r--r--doc/external.pngbin0 -> 165 bytes
-rw-r--r--doc/lua.1163
-rw-r--r--doc/lua.html172
-rw-r--r--doc/luac.1136
-rw-r--r--doc/luac.html145
-rw-r--r--doc/manual.css13
-rw-r--r--doc/manual.html1613
-rw-r--r--doc/osi-certified-72x60.pngbin0 -> 3774 bytes
-rw-r--r--doc/readme.html341
12 files changed, 1491 insertions, 1135 deletions
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644
index 00000000..c9e98b55
--- /dev/null
+++ b/doc/Makefile
@@ -0,0 +1,9 @@
+R= readme
+T= $R.txt
+H= $R.html
+
+$T: $H
+ lynx -dump $? >$@
+
+clean:
+ -rm -f $T
diff --git a/doc/alert.png b/doc/alert.png
new file mode 100644
index 00000000..49380746
--- /dev/null
+++ b/doc/alert.png
Binary files differ
diff --git a/doc/contents.html b/doc/contents.html
index 8e58e18c..beba089f 100644
--- a/doc/contents.html
+++ b/doc/contents.html
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
-<TITLE>Lua 5.1 Reference Manual - contents</TITLE>
+<TITLE>Lua 5.2 Reference Manual - contents</TITLE>
<LINK REL="stylesheet" TYPE="text/css" HREF="lua.css">
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=iso-8859-1">
<STYLE TYPE="text/css">
@@ -17,29 +17,9 @@ ul {
<HR>
<H1>
<A HREF="http://www.lua.org/"><IMG SRC="logo.gif" ALT="" BORDER=0></A>
-Lua 5.1 Reference Manual
+Lua 5.2 Reference Manual
</H1>
-This is an online version of
-<BLOCKQUOTE>
-<A HREF="http://www.amazon.com/exec/obidos/ASIN/8590379833/lua-indexmanual-20">
-<IMG SRC="cover.png" ALT="" TITLE="buy from Amazon" BORDER=1 ALIGN="left" HSPACE=12>
-</A>
-<B>Lua 5.1 Reference Manual</B>
-<BR>by R. Ierusalimschy, L. H. de Figueiredo, W. Celes
-<BR>Lua.org, August 2006
-<BR>ISBN 85-903798-3-3
-<BR><A HREF="http://www.amazon.com/exec/obidos/ASIN/8590379833/lua-indexmanual-20">
-<IMG SRC="amazon.gif" ALT="[Buy from Amazon]" BORDER=0></A>
-<BR CLEAR="all">
-</BLOCKQUOTE>
-<P>
-
-Buy a copy of this book and
-<A HREF="http://www.lua.org/donations.html">help to support</A>
-the Lua project.
-<P>
-
The reference manual is the official definition of the Lua language.
For a complete introduction to Lua programming, see the book
<A HREF="http://www.lua.org/docs.html#books">Programming in Lua</A>.
@@ -50,13 +30,9 @@ For a complete introduction to Lua programming, see the book
<A HREF="#contents">contents</A>
&middot;
<A HREF="#index">index</A>
-&middot;
-<A HREF="http://www.lua.org/manual/5.1/pt/">português</A>
-&middot;
-<A HREF="http://www.lua.org/manual/5.1/es/">español</A>
<HR>
<SMALL>
-Copyright &copy; 2006-2008 Lua.org, PUC-Rio.
+Copyright &copy; 2006-2010 Lua.org, PUC-Rio.
Freely available under the terms of the
<a href="http://www.lua.org/license.html#5">Lua license</a>.
</SMALL>
@@ -489,10 +465,10 @@ Freely available under the terms of the
<HR>
<SMALL>
Last update:
-Sat Jan 19 13:24:29 BRST 2008
+Fri Jan 8 16:29:00 BRST 2010
</SMALL>
<!--
-Last change: revised for Lua 5.1.3
+Last change: fake for Lua 5.2.0-work1
-->
</BODY>
diff --git a/doc/external.png b/doc/external.png
new file mode 100644
index 00000000..419c06fb
--- /dev/null
+++ b/doc/external.png
Binary files differ
diff --git a/doc/lua.1 b/doc/lua.1
deleted file mode 100644
index 24809cc6..00000000
--- a/doc/lua.1
+++ /dev/null
@@ -1,163 +0,0 @@
-.\" $Id: lua.man,v 1.11 2006/01/06 16:03:34 lhf Exp $
-.TH LUA 1 "$Date: 2006/01/06 16:03:34 $"
-.SH NAME
-lua \- Lua interpreter
-.SH SYNOPSIS
-.B lua
-[
-.I options
-]
-[
-.I script
-[
-.I args
-]
-]
-.SH DESCRIPTION
-.B lua
-is the stand-alone Lua interpreter.
-It loads and executes Lua programs,
-either in textual source form or
-in precompiled binary form.
-(Precompiled binaries are output by
-.BR luac ,
-the Lua compiler.)
-.B lua
-can be used as a batch interpreter and also interactively.
-.LP
-The given
-.I options
-(see below)
-are executed and then
-the Lua program in file
-.I script
-is loaded and executed.
-The given
-.I args
-are available to
-.I script
-as strings in a global table named
-.BR arg .
-If these arguments contain spaces or other characters special to the shell,
-then they should be quoted
-(but note that the quotes will be removed by the shell).
-The arguments in
-.B arg
-start at 0,
-which contains the string
-.RI ' script '.
-The index of the last argument is stored in
-.BR arg.n .
-The arguments given in the command line before
-.IR script ,
-including the name of the interpreter,
-are available in negative indices in
-.BR arg .
-.LP
-At the very start,
-before even handling the command line,
-.B lua
-executes the contents of the environment variable
-.BR LUA_INIT ,
-if it is defined.
-If the value of
-.B LUA_INIT
-is of the form
-.RI '@ filename ',
-then
-.I filename
-is executed.
-Otherwise, the string is assumed to be a Lua statement and is executed.
-.LP
-Options start with
-.B '\-'
-and are described below.
-You can use
-.B "'\--'"
-to signal the end of options.
-.LP
-If no arguments are given,
-then
-.B "\-v \-i"
-is assumed when the standard input is a terminal;
-otherwise,
-.B "\-"
-is assumed.
-.LP
-In interactive mode,
-.B lua
-prompts the user,
-reads lines from the standard input,
-and executes them as they are read.
-If a line does not contain a complete statement,
-then a secondary prompt is displayed and
-lines are read until a complete statement is formed or
-a syntax error is found.
-So, one way to interrupt the reading of an incomplete statement is
-to force a syntax error:
-adding a
-.B ';'
-in the middle of a statement is a sure way of forcing a syntax error
-(except inside multiline strings and comments; these must be closed explicitly).
-If a line starts with
-.BR '=' ,
-then
-.B lua
-displays the values of all the expressions in the remainder of the
-line. The expressions must be separated by commas.
-The primary prompt is the value of the global variable
-.BR _PROMPT ,
-if this value is a string;
-otherwise, the default prompt is used.
-Similarly, the secondary prompt is the value of the global variable
-.BR _PROMPT2 .
-So,
-to change the prompts,
-set the corresponding variable to a string of your choice.
-You can do that after calling the interpreter
-or on the command line
-(but in this case you have to be careful with quotes
-if the prompt string contains a space; otherwise you may confuse the shell.)
-The default prompts are "> " and ">> ".
-.SH OPTIONS
-.TP
-.B \-
-load and execute the standard input as a file,
-that is,
-not interactively,
-even when the standard input is a terminal.
-.TP
-.BI \-e " stat"
-execute statement
-.IR stat .
-You need to quote
-.I stat
-if it contains spaces, quotes,
-or other characters special to the shell.
-.TP
-.B \-i
-enter interactive mode after
-.I script
-is executed.
-.TP
-.BI \-l " name"
-call
-.BI require(' name ')
-before executing
-.IR script .
-Typically used to load libraries.
-.TP
-.B \-v
-show version information.
-.SH "SEE ALSO"
-.BR luac (1)
-.br
-http://www.lua.org/
-.SH DIAGNOSTICS
-Error messages should be self explanatory.
-.SH AUTHORS
-R. Ierusalimschy,
-L. H. de Figueiredo,
-and
-W. Celes
-.\" EOF
diff --git a/doc/lua.html b/doc/lua.html
deleted file mode 100644
index 1d435ab0..00000000
--- a/doc/lua.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<!-- $Id: lua.man,v 1.11 2006/01/06 16:03:34 lhf Exp $ -->
-<HTML>
-<HEAD>
-<TITLE>LUA man page</TITLE>
-<LINK REL="stylesheet" TYPE="text/css" HREF="lua.css">
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF">
-
-<H2>NAME</H2>
-lua - Lua interpreter
-<H2>SYNOPSIS</H2>
-<B>lua</B>
-[
-<I>options</I>
-]
-[
-<I>script</I>
-[
-<I>args</I>
-]
-]
-<H2>DESCRIPTION</H2>
-<B>lua</B>
-is the stand-alone Lua interpreter.
-It loads and executes Lua programs,
-either in textual source form or
-in precompiled binary form.
-(Precompiled binaries are output by
-<B>luac</B>,
-the Lua compiler.)
-<B>lua</B>
-can be used as a batch interpreter and also interactively.
-<P>
-The given
-<I>options</I>
-(see below)
-are executed and then
-the Lua program in file
-<I>script</I>
-is loaded and executed.
-The given
-<I>args</I>
-are available to
-<I>script</I>
-as strings in a global table named
-<B>arg</B>.
-If these arguments contain spaces or other characters special to the shell,
-then they should be quoted
-(but note that the quotes will be removed by the shell).
-The arguments in
-<B>arg</B>
-start at 0,
-which contains the string
-'<I>script</I>'.
-The index of the last argument is stored in
-<B>arg.n</B>.
-The arguments given in the command line before
-<I>script</I>,
-including the name of the interpreter,
-are available in negative indices in
-<B>arg</B>.
-<P>
-At the very start,
-before even handling the command line,
-<B>lua</B>
-executes the contents of the environment variable
-<B>LUA_INIT</B>,
-if it is defined.
-If the value of
-<B>LUA_INIT</B>
-is of the form
-'@<I>filename</I>',
-then
-<I>filename</I>
-is executed.
-Otherwise, the string is assumed to be a Lua statement and is executed.
-<P>
-Options start with
-<B>'-'</B>
-and are described below.
-You can use
-<B>'--'</B>
-to signal the end of options.
-<P>
-If no arguments are given,
-then
-<B>"-v -i"</B>
-is assumed when the standard input is a terminal;
-otherwise,
-<B>"-"</B>
-is assumed.
-<P>
-In interactive mode,
-<B>lua</B>
-prompts the user,
-reads lines from the standard input,
-and executes them as they are read.
-If a line does not contain a complete statement,
-then a secondary prompt is displayed and
-lines are read until a complete statement is formed or
-a syntax error is found.
-So, one way to interrupt the reading of an incomplete statement is
-to force a syntax error:
-adding a
-<B>';'</B>
-in the middle of a statement is a sure way of forcing a syntax error
-(except inside multiline strings and comments; these must be closed explicitly).
-If a line starts with
-<B>'='</B>,
-then
-<B>lua</B>
-displays the values of all the expressions in the remainder of the
-line. The expressions must be separated by commas.
-The primary prompt is the value of the global variable
-<B>_PROMPT</B>,
-if this value is a string;
-otherwise, the default prompt is used.
-Similarly, the secondary prompt is the value of the global variable
-<B>_PROMPT2</B>.
-So,
-to change the prompts,
-set the corresponding variable to a string of your choice.
-You can do that after calling the interpreter
-or on the command line
-(but in this case you have to be careful with quotes
-if the prompt string contains a space; otherwise you may confuse the shell.)
-The default prompts are "&gt; " and "&gt;&gt; ".
-<H2>OPTIONS</H2>
-<P>
-<B>-</B>
-load and execute the standard input as a file,
-that is,
-not interactively,
-even when the standard input is a terminal.
-<P>
-<B>-e </B><I>stat</I>
-execute statement
-<I>stat</I>.
-You need to quote
-<I>stat </I>
-if it contains spaces, quotes,
-or other characters special to the shell.
-<P>
-<B>-i</B>
-enter interactive mode after
-<I>script</I>
-is executed.
-<P>
-<B>-l </B><I>name</I>
-call
-<B>require</B>('<I>name</I>')
-before executing
-<I>script</I>.
-Typically used to load libraries.
-<P>
-<B>-v</B>
-show version information.
-<H2>SEE ALSO</H2>
-<B>luac</B>(1)
-<BR>
-<A HREF="http://www.lua.org/">http://www.lua.org/</A>
-<H2>DIAGNOSTICS</H2>
-Error messages should be self explanatory.
-<H2>AUTHORS</H2>
-R. Ierusalimschy,
-L. H. de Figueiredo,
-and
-W. Celes
-<!-- EOF -->
-</BODY>
-</HTML>
diff --git a/doc/luac.1 b/doc/luac.1
deleted file mode 100644
index d8146782..00000000
--- a/doc/luac.1
+++ /dev/null
@@ -1,136 +0,0 @@
-.\" $Id: luac.man,v 1.28 2006/01/06 16:03:34 lhf Exp $
-.TH LUAC 1 "$Date: 2006/01/06 16:03:34 $"
-.SH NAME
-luac \- Lua compiler
-.SH SYNOPSIS
-.B luac
-[
-.I options
-] [
-.I filenames
-]
-.SH DESCRIPTION
-.B luac
-is the Lua compiler.
-It translates programs written in the Lua programming language
-into binary files that can be later loaded and executed.
-.LP
-The main advantages of precompiling chunks are:
-faster loading,
-protecting source code from accidental user changes,
-and
-off-line syntax checking.
-.LP
-Pre-compiling does not imply faster execution
-because in Lua chunks are always compiled into bytecodes before being executed.
-.B luac
-simply allows those bytecodes to be saved in a file for later execution.
-.LP
-Pre-compiled chunks are not necessarily smaller than the corresponding source.
-The main goal in pre-compiling is faster loading.
-.LP
-The binary files created by
-.B luac
-are portable only among architectures with the same word size and byte order.
-.LP
-.B luac
-produces a single output file containing the bytecodes
-for all source files given.
-By default,
-the output file is named
-.BR luac.out ,
-but you can change this with the
-.B \-o
-option.
-.LP
-In the command line,
-you can mix
-text files containing Lua source and
-binary files containing precompiled chunks.
-This is useful to combine several precompiled chunks,
-even from different (but compatible) platforms,
-into a single precompiled chunk.
-.LP
-You can use
-.B "'\-'"
-to indicate the standard input as a source file
-and
-.B "'\--'"
-to signal the end of options
-(that is,
-all remaining arguments will be treated as files even if they start with
-.BR "'\-'" ).
-.LP
-The internal format of the binary files produced by
-.B luac
-is likely to change when a new version of Lua is released.
-So,
-save the source files of all Lua programs that you precompile.
-.LP
-.SH OPTIONS
-Options must be separate.
-.TP
-.B \-l
-produce a listing of the compiled bytecode for Lua's virtual machine.
-Listing bytecodes is useful to learn about Lua's virtual machine.
-If no files are given, then
-.B luac
-loads
-.B luac.out
-and lists its contents.
-.TP
-.BI \-o " file"
-output to
-.IR file ,
-instead of the default
-.BR luac.out .
-(You can use
-.B "'\-'"
-for standard output,
-but not on platforms that open standard output in text mode.)
-The output file may be a source file because
-all files are loaded before the output file is written.
-Be careful not to overwrite precious files.
-.TP
-.B \-p
-load files but do not generate any output file.
-Used mainly for syntax checking and for testing precompiled chunks:
-corrupted files will probably generate errors when loaded.
-Lua always performs a thorough integrity test on precompiled chunks.
-Bytecode that passes this test is completely safe,
-in the sense that it will not break the interpreter.
-However,
-there is no guarantee that such code does anything sensible.
-(None can be given, because the halting problem is unsolvable.)
-If no files are given, then
-.B luac
-loads
-.B luac.out
-and tests its contents.
-No messages are displayed if the file passes the integrity test.
-.TP
-.B \-s
-strip debug information before writing the output file.
-This saves some space in very large chunks,
-but if errors occur when running a stripped chunk,
-then the error messages may not contain the full information they usually do.
-For instance,
-line numbers and names of local variables are lost.
-.TP
-.B \-v
-show version information.
-.SH FILES
-.TP 15
-.B luac.out
-default output file
-.SH "SEE ALSO"
-.BR lua (1)
-.br
-http://www.lua.org/
-.SH DIAGNOSTICS
-Error messages should be self explanatory.
-.SH AUTHORS
-L. H. de Figueiredo,
-R. Ierusalimschy and
-W. Celes
-.\" EOF
diff --git a/doc/luac.html b/doc/luac.html
deleted file mode 100644
index 179ffe82..00000000
--- a/doc/luac.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!-- $Id: luac.man,v 1.28 2006/01/06 16:03:34 lhf Exp $ -->
-<HTML>
-<HEAD>
-<TITLE>LUAC man page</TITLE>
-<LINK REL="stylesheet" TYPE="text/css" HREF="lua.css">
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF">
-
-<H2>NAME</H2>
-luac - Lua compiler
-<H2>SYNOPSIS</H2>
-<B>luac</B>
-[
-<I>options</I>
-] [
-<I>filenames</I>
-]
-<H2>DESCRIPTION</H2>
-<B>luac</B>
-is the Lua compiler.
-It translates programs written in the Lua programming language
-into binary files that can be later loaded and executed.
-<P>
-The main advantages of precompiling chunks are:
-faster loading,
-protecting source code from accidental user changes,
-and
-off-line syntax checking.
-<P>
-Precompiling does not imply faster execution
-because in Lua chunks are always compiled into bytecodes before being executed.
-<B>luac</B>
-simply allows those bytecodes to be saved in a file for later execution.
-<P>
-Precompiled chunks are not necessarily smaller than the corresponding source.
-The main goal in precompiling is faster loading.
-<P>
-The binary files created by
-<B>luac</B>
-are portable only among architectures with the same word size and byte order.
-<P>
-<B>luac</B>
-produces a single output file containing the bytecodes
-for all source files given.
-By default,
-the output file is named
-<B>luac.out</B>,
-but you can change this with the
-<B>-o</B>
-option.
-<P>
-In the command line,
-you can mix
-text files containing Lua source and
-binary files containing precompiled chunks.
-This is useful because several precompiled chunks,
-even from different (but compatible) platforms,
-can be combined into a single precompiled chunk.
-<P>
-You can use
-<B>'-'</B>
-to indicate the standard input as a source file
-and
-<B>'--'</B>
-to signal the end of options
-(that is,
-all remaining arguments will be treated as files even if they start with
-<B>'-'</B>).
-<P>
-The internal format of the binary files produced by
-<B>luac</B>
-is likely to change when a new version of Lua is released.
-So,
-save the source files of all Lua programs that you precompile.
-<P>
-<H2>OPTIONS</H2>
-Options must be separate.
-<P>
-<B>-l</B>
-produce a listing of the compiled bytecode for Lua's virtual machine.
-Listing bytecodes is useful to learn about Lua's virtual machine.
-If no files are given, then
-<B>luac</B>
-loads
-<B>luac.out</B>
-and lists its contents.
-<P>
-<B>-o </B><I>file</I>
-output to
-<I>file</I>,
-instead of the default
-<B>luac.out</B>.
-(You can use
-<B>'-'</B>
-for standard output,
-but not on platforms that open standard output in text mode.)
-The output file may be a source file because
-all files are loaded before the output file is written.
-Be careful not to overwrite precious files.
-<P>
-<B>-p</B>
-load files but do not generate any output file.
-Used mainly for syntax checking and for testing precompiled chunks:
-corrupted files will probably generate errors when loaded.
-Lua always performs a thorough integrity test on precompiled chunks.
-Bytecode that passes this test is completely safe,
-in the sense that it will not break the interpreter.
-However,
-there is no guarantee that such code does anything sensible.
-(None can be given, because the halting problem is unsolvable.)
-If no files are given, then
-<B>luac</B>
-loads
-<B>luac.out</B>
-and tests its contents.
-No messages are displayed if the file passes the integrity test.
-<P>
-<B>-s</B>
-strip debug information before writing the output file.
-This saves some space in very large chunks,
-but if errors occur when running a stripped chunk,
-then the error messages may not contain the full information they usually do.
-For instance,
-line numbers and names of local variables are lost.
-<P>
-<B>-v</B>
-show version information.
-<H2>FILES</H2>
-<P>
-<B>luac.out</B>
-default output file
-<H2>SEE ALSO</H2>
-<B>lua</B>(1)
-<BR>
-<A HREF="http://www.lua.org/">http://www.lua.org/</A>
-<H2>DIAGNOSTICS</H2>
-Error messages should be self explanatory.
-<H2>AUTHORS</H2>
-L. H. de Figueiredo,
-R. Ierusalimschy and
-W. Celes
-<!-- EOF -->
-</BODY>
-</HTML>
diff --git a/doc/manual.css b/doc/manual.css
deleted file mode 100644
index eed5afd9..00000000
--- a/doc/manual.css
+++ /dev/null
@@ -1,13 +0,0 @@
-h3 code {
- font-family: inherit ;
-}
-
-pre {
- font-size: 105% ;
-}
-
-span.apii {
- float: right ;
- font-family: inherit ;
-}
-
diff --git a/doc/manual.html b/doc/manual.html
index f46f17c8..83d2bb09 100644
--- a/doc/manual.html
+++ b/doc/manual.html
@@ -1,39 +1,31 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
-<title>Lua 5.1 Reference Manual</title>
-<link rel="stylesheet" type="text/css" href="lua.css">
-<link rel="stylesheet" type="text/css" href="manual.css">
-<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=iso-8859-1">
+<title>Lua 5.2 Reference Manual</title>
+<link rel="stylesheet" href="lua.css">
</head>
-<body>
+<body bgcolor="#FFFFFF">
<hr>
<h1>
-<a href="http://www.lua.org/"><img src="logo.gif" alt="" border="0"></a>
-Lua 5.1 Reference Manual
+<a href="http://www.lua.org/home.html"><img src="logo.gif" alt="[Lua logo]" border="0"></a>
+Lua 5.2 Reference Manual
</h1>
by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes
<p>
<small>
-Copyright &copy; 2006-2008 Lua.org, PUC-Rio.
-Freely available under the terms of the
-<a href="http://www.lua.org/license.html#5">Lua license</a>.
+<a href="http://www.lua.org/copyright.html">Copyright</a>
+&copy; 2010 Lua.org, PUC-Rio. All rights reserved.
</small>
<hr>
-<p>
-
-<a href="contents.html#contents">contents</A>
-&middot;
-<a href="contents.html#index">index</A>
<!-- ====================================================================== -->
<p>
-<!-- $Id: manual.of,v 1.48 2008/08/18 15:24:20 roberto Exp $ -->
+<!-- $Id: manual.of,v 1.53 2010/01/08 18:18:46 roberto Exp roberto $ -->
@@ -111,15 +103,19 @@ at the end of this manual.
<h2>2.1 - <a name="2.1">Lexical Conventions</a></h2>
<p>
+Lua is a free-form language.
+It ignores spaces (including new lines) and comments
+between lexical elements (tokens),
+except as delimiters between names and keywords.
+
+
+<p>
<em>Names</em>
(also called <em>identifiers</em>)
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.
@@ -192,10 +188,17 @@ A <em>closing long bracket</em> is defined similarly;
for instance, a closing long bracket of level&nbsp;4 is written as <code>]====]</code>.
A long string starts with an opening long bracket of any level and
ends at the first closing long bracket of the same level.
+It can contain any text except a closing bracket of the proper 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.
+Any kind of end-of-line sequence
+(carriage return, newline, carriage return followed by newline,
+or newline followed by carriage return)
+is converted to a simple newline.
+You should not use long strings for non-text data;
+Use instead a regular quoted literal with explicit escape sequences
+for control characters.
<p>
@@ -429,20 +432,6 @@ The syntax <code>var.Name</code> is just syntactic sugar for
All global variables live as fields in ordinary Lua tables,
called <em>environment tables</em> or simply
<em>environments</em> (see <a href="#2.9">&sect;2.9</a>).
-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 <a href="#pdf-getfenv"><code>getfenv</code></a>.
-To replace it,
-you call <a href="#pdf-setfenv"><code>setfenv</code></a>.
-(You can only manipulate the environment of C&nbsp;functions
-through the debug library; (see <a href="#5.9">&sect;5.9</a>).)
-
-
-<p>
An access to a global variable <code>x</code>
is equivalent to <code>_env.x</code>,
which in turn is equivalent to
@@ -450,7 +439,7 @@ which in turn is equivalent to
<pre>
gettable_event(_env, "x")
</pre><p>
-where <code>_env</code> is the environment of the running function.
+where <code>_env</code> is the current environment (see <a href="#2.9">&sect;2.9</a>).
(See <a href="#2.8">&sect;2.8</a> for a complete description of the
<code>gettable_event</code> function.
This function is not defined or callable in Lua.
@@ -862,6 +851,43 @@ The visibility rules for local variables are explained in <a href="#2.6">&sect;2
+<h3>2.4.8 - <a name="2.4.8">Lexical Environments</a></h3>
+
+<p>
+A lexical environment defines a new current environment (see <a href="#2.9">&sect;2.9</a>)
+for the code inside its block:
+
+<pre>
+ stat ::= <b>in</b> exp <b>do</b> block <b>end</b>
+</pre><p>
+That is, a lexical environment changes the
+table used to resolve all accesses
+to global (free) variables inside a block.
+
+
+<p>
+Inside a lexical environment,
+the result of <code><em>exp</em></code> becomes the current environment.
+Expression <code><em>exp</em></code> is evaluated only once in the beginning of
+the statement and it is stored in a hidden local variable named
+<a name="pdf-(environment)"><code>(environment)</code></a>.
+Then, any global variable
+(that is, a variable not declared as a local)
+<code>var</code> inside <code><em>block</em></code> is accessed as
+<code>(environment).<em>var</em></code>.
+Moreover, functions defined inside the block also use the
+current environment as their environments (see <a href="#2.9">&sect;2.9</a>).
+
+
+<p>
+A lexical environment does not shadow local declarations.
+That is, any local variable that is visible just before
+a lexical environment is still visible inside the environment.
+
+
+
+
+
<h2>2.5 - <a name="2.5">Expressions</a></h2>
@@ -1078,7 +1104,7 @@ Otherwise, the "concat" metamethod is called (see <a href="#2.8">&sect;2.8</a>).
<h3>2.5.5 - <a name="2.5.5">The Length Operator</a></h3>
<p>
-The length operator is denoted by the unary operator <code>#</code>.
+The length operator is denoted by the unary prefix operator <code>#</code>.
The length of a string is its number of bytes
(that is, the usual meaning of string length when each
character is one byte).
@@ -1089,7 +1115,8 @@ The length of a table <code>t</code> is defined to be any
integer index <code>n</code>
such that <code>t[n]</code> is not <b>nil</b> and <code>t[n+1]</code> is <b>nil</b>;
moreover, if <code>t[1]</code> is <b>nil</b>, <code>n</code> can be zero.
-For a regular array, with non-nil values from 1 to a given <code>n</code>,
+For a regular array, where all non-nil values
+have keys from 1 to a given <code>n</code>,
its length is exactly that <code>n</code>,
the index of its last value.
If the array has "holes"
@@ -1100,6 +1127,11 @@ directly precedes a <b>nil</b> value
the array).
+<p>
+A program can modify the behavior of the length operator for
+any value but strings through metamethods (see <a href="#2.8">&sect;2.8</a>).
+
+
@@ -1237,7 +1269,7 @@ that is, the argument list is a single literal string.
<p>
-As an exception to the free-format syntax of Lua,
+As an exception to the free-form character of Lua,
you cannot put a line break before the '<code>(</code>' in a function call.
This restriction avoids some ambiguities in the language.
If you write
@@ -1247,7 +1279,8 @@ If you write
(g).x(a)
</pre><p>
Lua would see that as a single statement, <code>a = f(g).x(a)</code>.
-So, if you want two statements, you must add a semi-colon between them.
+In this case, if you want two statements,
+you must add a semi-colon between them.
If you actually want to call <code>f</code>,
you must remove the line break before <code>(g)</code>.
@@ -1557,6 +1590,8 @@ Tables and full userdata have individual 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.
+By default, a value has no metatable,
+but the string library sets a metatable for the string type (see <a href="#5.4">&sect;5.4</a>).
<p>
@@ -1734,14 +1769,13 @@ the <code>#</code> 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
+ return (h(op)) -- call handler with the operand
+ elseif type(op) == "table" then
+ return #op -- primitive table length
+ else -- no handler available: error
error(&middot;&middot;&middot;)
end
end
@@ -1923,23 +1957,24 @@ called when Lua calls a value.
<h2>2.9 - <a name="2.9">Environments</a></h2>
<p>
-Besides metatables,
-objects of types thread, function, and userdata
-have another table associated with them,
-called their <em>environment</em>.
+Each function and userdata in Lua
+has a table associated with it,
+called its <em>environment</em>.
Like metatables, environments are regular tables and
multiple objects can share the same environment.
+>From Lua,
+you can manipulate the environment of an object
+only through the debug library (see <a href="#5.10">&sect;5.10</a>).
<p>
-Threads are created sharing the environment of the creating thread.
Userdata and C&nbsp;functions are created sharing the environment
of the creating C&nbsp;function.
Non-nested Lua functions
(created by <a href="#pdf-loadfile"><code>loadfile</code></a>, <a href="#pdf-loadstring"><code>loadstring</code></a> or <a href="#pdf-load"><code>load</code></a>)
-are created sharing the environment of the creating thread.
-Nested Lua functions are created sharing the environment of
-the creating Lua function.
+are created sharing the global environment.
+Nested Lua functions are created sharing the current environment
+of where it is defined.
<p>
@@ -1949,14 +1984,6 @@ a userdata.
<p>
-Environments associated with threads are called
-<em>global environments</em>.
-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&nbsp;code (see <a href="#3.3">&sect;3.3</a>).
-
-
-<p>
The environment associated with a C&nbsp;function can be directly
accessed by C&nbsp;code (see <a href="#3.3">&sect;3.3</a>).
It is used as the default environment for other C&nbsp;functions
@@ -1964,20 +1991,15 @@ and userdata created by the function.
<p>
-Environments associated with Lua functions are used to resolve
-all accesses to global variables within the function (see <a href="#2.3">&sect;2.3</a>).
-They are used as the default environment for nested Lua functions
-created by the function.
-
-
-<p>
-You can change the environment of a Lua function or the
-running thread by calling <a href="#pdf-setfenv"><code>setfenv</code></a>.
-You can get the environment of a Lua function or the running thread
-by calling <a href="#pdf-getfenv"><code>getfenv</code></a>.
-To manipulate the environment of other objects
-(userdata, C&nbsp;functions, other threads) you must
-use the C&nbsp;API.
+The environment associated with a Lua function is used as the
+current environment of all code in the function outside
+a lexical environment (see <a href="#2.4.8">&sect;2.4.8</a>).
+A lexical environment changes the
+current environment inside its scope.
+In any case,
+the <em>current environment</em> is the table
+Lua uses to resolve global variables and to initialize
+the environment of nested functions.
@@ -2030,6 +2052,16 @@ the speed of memory allocation.
<p>
+If you set the step multiplier to a very large number
+(such as <em>2^30</em>),
+the collector behaves like a stop-the-world collector.
+If you then set the pause to 200,
+the collector behaves as in old Lua versions,
+doing a complete collection every time Lua doubles its
+memory usage.
+
+
+<p>
You can change these numbers by calling <a href="#lua_gc"><code>lua_gc</code></a> in C
or <a href="#pdf-collectgarbage"><code>collectgarbage</code></a> in Lua.
With these functions you can also control
@@ -2107,6 +2139,28 @@ the values in the table are weak.
<p>
+Userdata with finalizers has a special behavior in weak tables.
+When a userdata is a value in a weak table,
+it is removed from the table the first time it is collected,
+before running its finalizer.
+When it is a key, however,
+it is removed from the table only when it is really freed,
+after running its finalizer.
+This behavior allows the finalizer to access values
+associated with the userdata through weak tables.
+
+
+<p>
+A table with weak keys and strong values
+is also called an <em>ephemeron table</em>.
+In an ephemeron table,
+a value is considered reachable only if its key is reachable.
+In particular,
+if the only reference to a key comes from its value,
+the pair is removed.
+
+
+<p>
After you use a table as a metatable,
you should not change the value of its <code>__mode</code> field.
Otherwise, the weak behavior of the tables controlled by this
@@ -2309,7 +2363,7 @@ you are responsible for ensuring consistency.
In particular,
<em>you are responsible for controlling stack overflow</em>.
You can use the function <a href="#lua_checkstack"><code>lua_checkstack</code></a>
-to grow the stack size.
+to ensure that the stack has extra slots when pushing new elements.
<p>
@@ -2321,9 +2375,18 @@ unless your code has loops pushing elements onto the stack.
<p>
+When you call a Lua function
+without a fixed number of results (see <a href="#lua_call"><code>lua_call</code></a>),
+Lua ensures that the stack has enough size for all results,
+but it does not ensure any extra space.
+So, before pushing anything in the stack after such a call
+you should use <a href="#lua_checkstack"><code>lua_checkstack</code></a>.
+
+
+<p>
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 <a href="#lua_checkstack"><code>lua_checkstack</code></a>.
+that you have set through <a href="#lua_checkstack"><code>lua_checkstack</code></a>.
Such indices are called <em>acceptable indices</em>.
More formally, we define an <em>acceptable index</em>
as follows:
@@ -2342,8 +2405,7 @@ Note that 0 is never an acceptable index.
<p>
Unless otherwise noted,
-any function that accepts valid indices can also be called with
-<em>pseudo-indices</em>,
+any function that accepts valid indices also accepts <em>pseudo-indices</em>,
which represent some Lua values that are accessible to C&nbsp;code
but which are not in the stack.
Pseudo-indices are used to access the thread environment,
@@ -2353,8 +2415,6 @@ and the upvalues of a C&nbsp;function (see <a href="#3.4">&sect;3.4</a>).
<p>
-The thread environment (where global variables live) is
-always at pseudo-index <a name="pdf-LUA_GLOBALSINDEX"><code>LUA_GLOBALSINDEX</code></a>.
The environment of the running C&nbsp;function is always
at pseudo-index <a name="pdf-LUA_ENVIRONINDEX"><code>LUA_ENVIRONINDEX</code></a>.
@@ -2365,7 +2425,7 @@ you can use regular table operations over an environment table.
For instance, to access the value of a global variable, do
<pre>
- lua_getfield(L, LUA_GLOBALSINDEX, varname);
+ lua_getfield(L, LUA_ENVIRONINDEX, varname);
</pre>
@@ -2416,8 +2476,51 @@ or a light userdata with the address of a C&nbsp;object in your code.
<p>
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.
+and by some predefined values.
+Therefore, integer keys should not be used for other purposes.
+
+
+<p>
+When you create a new Lua state,
+its registry comes with some predefined values.
+These predefined values are indexed with integer keys
+defined as constants in <code>lua.h</code>.
+The following constants are defined:
+
+<ul>
+<li><b>LUA_RIDX_MAINTHREAD:</b> At this index the registry has
+the main thread of the state.
+(The main thread is the one created together with the state.)
+</li>
+<li><b>LUA_RIDX_CPCALL:</b> At this index the registry has
+the <a name="pdf-cpcall"><code>cpcall</code></a> function.
+This function allows you to call any
+<a href="#lua_CFunction"><code>lua_CFunction</code></a> without creating a closure for it,
+therefore preventing an unprotected memory allocation error.
+
+<p>
+The address of the function to be called must be stored in a variable,
+whose address is passed as the first argument to <code>cpcall</code>,
+as a light userdata.
+Note that the light userdata in the first argument should not
+point to the function to be called,
+but to a variable containing the pointer to the function.
+ANSI&nbsp;C does not allow the direct assignment of a function address to
+the <code>void*</code> in a light userdata.
+
+
+<p>
+Other arguments to <code>cpcall</code> are passed to the called function.
+The <code>cpcall</code> function itself should be called with <a href="#lua_pcall"><code>lua_pcall</code></a>,
+like any C function.
+</li>
+
+<li><b>LUA_RIDX_GLOBALS:</b> At this index the registry has
+the global environment.
+This is the C&nbsp;equivalent to the <a href="#pdf-_G"><code>_G</code></a> global variable.
+</li>
+</ul>
@@ -2429,7 +2532,7 @@ Internally, Lua uses the C <code>longjmp</code> facility to handle errors.
(You can also choose to use exceptions if you use C++;
see file <code>luaconf.h</code>.)
When Lua faces any error
-(such as memory allocation errors, type errors, syntax errors,
+(such as a memory allocation error, type errors, syntax errors,
and runtime errors)
it <em>raises</em> an error;
that is, it does a long jump.
@@ -2439,6 +2542,15 @@ any error jumps to the most recent active recover point.
<p>
+If an error happens outside any protected environment,
+Lua calls a <em>panic function</em> (see <a href="#lua_atpanic"><code>lua_atpanic</code></a>)
+and then calls <code>abort</code>,
+thus exiting the host application.
+Your panic function can avoid this exit by
+never returning (e.g., doing a long jump).
+
+
+<p>
Most functions in the API can throw an error,
for instance due to a memory allocation error.
The documentation for each function indicates whether
@@ -2452,7 +2564,75 @@ Inside a C&nbsp;function you can throw an error by calling <a href="#lua_error">
-<h2>3.7 - <a name="3.7">Functions and Types</a></h2>
+<h2>3.7 - <a name="3.7">Handling Yields in C</a></h2>
+
+<p>
+Internally, Lua uses the C <code>longjmp</code> facility to yield a coroutine.
+Therefore, if a function <code>foo</code> calls an API function
+and this API function yields
+(directly or indirectly by calling another function that yields),
+Lua cannot return to <code>foo</code> any more,
+because the <code>longjmp</code> removes its frame from the C stack.
+
+
+<p>
+To avoid this kind of problem,
+Lua raises an error whenever it tries to yield accross an API call,
+except for three functions:
+<a href="#lua_yieldk"><code>lua_yieldk</code></a>, <a href="#lua_callk"><code>lua_callk</code></a>, and <a href="#lua_pcallk"><code>lua_pcallk</code></a>.
+All those functions receive a <em>continuation function</em>
+(as a parameter called <code>k</code>) to continue execution after an yield.
+
+
+<p>
+To explain continuations,
+let us set some terminology.
+We have a C function called from Lua which we will call
+the <em>original function</em>.
+This original function may call one of those three functions in the C API,
+which we will call the <em>callee function</em>,
+that may yield the current thread.
+(This will happen when the callee function is <a href="#lua_yieldk"><code>lua_yieldk</code></a>,
+or when the callee function is either <a href="#lua_callk"><code>lua_callk</code></a> or <a href="#lua_pcallk"><code>lua_pcallk</code></a>
+and the function called by them yields.)
+
+
+<p>
+Suppose the running thread yields while executing the callee function.
+After the thread resumes,
+it eventually will finish running the callee function.
+However,
+the callee function cannot return to the original function,
+because its frame in the C stack was destroyed by the yield.
+Instead, Lua calls a <em>continuation function</em>,
+which was given as an argument to the callee function.
+As the name implies,
+the continuation function should continue the task
+of the original function.
+
+
+<p>
+Lua treats the continuation function as if it was the original function.
+The continuation function receives the same Lua stack
+from the original function,
+in the same state it would be if the callee function had returned.
+(For instance,
+after a <a href="#lua_callk"><code>lua_callk</code></a> the function and its arguments are
+removed from the stack and replaced by the results from the call.)
+It also has the same upvalues.
+Whatever it returns is handled by Lua as if it was the return
+of the original function.
+
+
+<p>
+The only difference in the Lua state between the original function
+and its continuation is the result of a call to <a href="#lua_getctx"><code>lua_getctx</code></a>.
+
+
+
+
+
+<h2>3.8 - <a name="3.8">Functions and Types</a></h2>
<p>
Here we list all functions and types from the C&nbsp;API in
@@ -2498,18 +2678,48 @@ but not exactly the same.
Its arguments are
<code>ud</code>, an opaque pointer passed to <a href="#lua_newstate"><code>lua_newstate</code></a>;
<code>ptr</code>, a pointer to the block being allocated/reallocated/freed;
-<code>osize</code>, the original size of the block;
+<code>osize</code>, the original size of the block or some code about what
+is being allocated;
<code>nsize</code>, the new size of the block.
-<code>ptr</code> is <code>NULL</code> if and only if <code>osize</code> is zero.
-When <code>nsize</code> is zero, the allocator must return <code>NULL</code>;
-if <code>osize</code> is not zero,
-it should free the block pointed to by <code>ptr</code>.
-When <code>nsize</code> is not zero, the allocator returns <code>NULL</code>
-if and only if it cannot fill the request.
-When <code>nsize</code> is not zero and <code>osize</code> is zero,
-the allocator should behave like <code>malloc</code>.
-When <code>nsize</code> and <code>osize</code> are not zero,
+
+
+<p>
+When <code>ptr</code> is not <code>NULL</code>,
+<code>osize</code> is the previous size of the block
+pointed by <code>ptr</code>,
+that is, the size given when it was allocated or reallocated.
+
+
+<p>
+When <code>ptr</code> is <code>NULL</code>,
+<code>osize</code> codes the kind of object that Lua is allocating.
+<code>osize</code> is any of
+<a href="#pdf-LUA_TSTRING"><code>LUA_TSTRING</code></a>, <a href="#pdf-LUA_TTABLE"><code>LUA_TTABLE</code></a>, <a href="#pdf-LUA_TFUNCTION"><code>LUA_TFUNCTION</code></a>,
+<a href="#pdf-LUA_TUSERDATA"><code>LUA_TUSERDATA</code></a>, or <a href="#pdf-LUA_TTHREAD"><code>LUA_TTHREAD</code></a> when (and only when)
+Lua is creating a new object of that type.
+When <code>osize</code> is some other value,
+Lua is allocating memory for something else.
+
+
+<p>
+Lua assumes the following behavior from the allocator function:
+
+
+<p>
+When <code>nsize</code> is zero:
+if <code>ptr</code> is not <code>NULL</code>,
+the allocator should free the block pointed to by <code>ptr</code>.
+Anyway, the allocator must return <code>NULL</code>.
+
+
+<p>
+When <code>nsize</code> is not zero:
+if <code>ptr</code> is <code>NULL</code>,
+the allocator should behave like <code>malloc</code>;
+when <code>ptr</code> is not <code>NULL</code>,
the allocator behaves like <code>realloc</code>.
+The allocator returns <code>NULL</code>
+if and only if it cannot fill the request.
Lua assumes that the allocator never fails when
<code>osize &gt;= nsize</code>.
@@ -2534,6 +2744,9 @@ This code assumes
that <code>free(NULL)</code> has no effect and that
<code>realloc(NULL, size)</code> is equivalent to <code>malloc(size)</code>.
ANSI&nbsp;C ensures both behaviors.
+It also assumes that <code>realloc</code> does not fail when shrinking a block.
+(ANSI&nbsp;C does not ensure this behavior,
+but it seems a safe assumption.)
@@ -2544,20 +2757,14 @@ ANSI&nbsp;C ensures both behaviors.
<pre>lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf);</pre>
<p>
-Sets a new panic function and returns the old one.
+Sets a new panic function and returns the old one (see <a href="#3.6">&sect;3.6</a>).
<p>
-If an error happens outside any protected environment,
-Lua calls a <em>panic function</em>
-and then calls <code>exit(EXIT_FAILURE)</code>,
-thus exiting the host application.
-Your panic function can avoid this exit by
-never returning (e.g., doing a long jump).
-
-
-<p>
-The panic function can access the error message at the top of the stack.
+The panic function should not try to run anything on the failed Lua state.
+However, it can still use the debug API (see <a href="#3.9">&sect;3.9</a>)
+to gather information about the state.
+In particular, the error message is at the top of the stack.
@@ -2606,14 +2813,14 @@ equivalent to this Lua code:
Here it is in&nbsp;C:
<pre>
- lua_getfield(L, LUA_GLOBALSINDEX, "f"); /* function to be called */
+ lua_getfield(L, LUA_ENVIRONINDEX, "f"); /* function to be called */
lua_pushstring(L, "how"); /* 1st argument */
- lua_getfield(L, LUA_GLOBALSINDEX, "t"); /* table to be indexed */
+ lua_getfield(L, LUA_ENVIRONINDEX, "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' */
+ lua_setfield(L, LUA_ENVIRONINDEX, "a"); /* set global 'a' */
</pre><p>
Note that the code above is "balanced":
at its end, the stack is back to its original configuration.
@@ -2623,6 +2830,19 @@ This is considered good programming practice.
+<hr><h3><a name="lua_callk"><code>lua_callk</code></a></h3><p>
+<span class="apii">[-(nargs + 1), +nresults, <em>e</em>]</span>
+<pre>void lua_callk (lua_State *L, int nargs, int nresults,
+ int ctx, lua_CFunction k);</pre>
+
+<p>
+This function behaves exactly like <a href="#lua_call"><code>lua_call</code></a>,
+but allows the called function to yield (see <a href="#3.7">&sect;3.7</a>).
+
+
+
+
+
<hr><h3><a name="lua_CFunction"><code>lua_CFunction</code></a></h3>
<pre>typedef int (*lua_CFunction) (lua_State *L);</pre>
@@ -2675,12 +2895,15 @@ of numerical arguments and returns their average and sum:
<hr><h3><a name="lua_checkstack"><code>lua_checkstack</code></a></h3><p>
-<span class="apii">[-0, +0, <em>m</em>]</span>
+<span class="apii">[-0, +0, <em>-</em>]</span>
<pre>int lua_checkstack (lua_State *L, int extra);</pre>
<p>
Ensures that there are at least <code>extra</code> free stack slots in the stack.
-It returns false if it cannot grow the stack to that size.
+It returns false if it cannot grant the request,
+because it would cause the stack to be larger than a fixed maximum size
+(typically at least a few thousand elements) or
+because it cannot allocate memory for the new stack size.
This function never shrinks the stack;
if the stack is already larger than the new size,
it is left unchanged.
@@ -2708,6 +2931,33 @@ to avoid growing too large.
+<hr><h3><a name="lua_compare"><code>lua_compare</code></a></h3><p>
+<span class="apii">[-0, +0, <em>e</em>]</span>
+<pre>int lua_compare (lua_State *L, int index1, int index2, int op);</pre>
+
+<p>
+Returns 1 if the value at acceptable index <code>index1</code> satisfies <code>op</code>
+when compared with the value at acceptable index <code>index2</code>,
+following the semantics of the corresponding Lua operator
+(that is, may call metamethods).
+Otherwise returns&nbsp;0.
+Also returns&nbsp;0 if any of the indices is non valid.
+
+
+<p>
+The value of <code>op</code> must be one of the following constants:
+
+<ul>
+
+<li><b>@<a name="pdf-LUA_OPEQ"><code>LUA_OPEQ</code></a>:</b>compares for equality (<code>==</code>)</li>
+<li><b>@<a name="pdf-LUA_OPLT"><code>LUA_OPLT</code></a>:</b>compares for less than (<code>&lt;</code>)</li>
+<li><b>@<a name="pdf-LUA_OPLE"><code>LUA_OPLE</code></a>:</b>compares for less or equal (<code>&lt;=</code>)</li>
+
+</ul>
+
+
+
+
<hr><h3><a name="lua_concat"><code>lua_concat</code></a></h3><p>
<span class="apii">[-n, +1, <em>e</em>]</span>
<pre>void lua_concat (lua_State *L, int n);</pre>
@@ -2725,19 +2975,15 @@ Concatenation is performed following the usual semantics of Lua
-<hr><h3><a name="lua_cpcall"><code>lua_cpcall</code></a></h3><p>
-<span class="apii">[-0, +(0|1), <em>-</em>]</span>
-<pre>int lua_cpcall (lua_State *L, lua_CFunction func, void *ud);</pre>
+<hr><h3><a name="lua_copy"><code>lua_copy</code></a></h3><p>
+<span class="apii">[-0, +0, <em>-</em>]</span>
+<pre>void lua_copy (lua_State *L, int fromidx, int toidx);</pre>
<p>
-Calls the C&nbsp;function <code>func</code> in protected mode.
-<code>func</code> starts with only one element in its stack,
-a light userdata containing <code>ud</code>.
-In case of errors,
-<a href="#lua_cpcall"><code>lua_cpcall</code></a> returns the same error codes as <a href="#lua_pcall"><code>lua_pcall</code></a>,
-plus the error object on the top of the stack;
-otherwise, it returns zero, and does not change the stack.
-All values returned by <code>func</code> are discarded.
+Moves the element at the valid index <code>fromidx</code>
+into the valid index <code>toidx</code>
+without shifting any element
+(therefore replacing the value at that position).
@@ -2788,22 +3034,6 @@ This function does not pop the Lua function from the stack.
-<hr><h3><a name="lua_equal"><code>lua_equal</code></a></h3><p>
-<span class="apii">[-0, +0, <em>e</em>]</span>
-<pre>int lua_equal (lua_State *L, int index1, int index2);</pre>
-
-<p>
-Returns 1 if the two values in acceptable indices <code>index1</code> and
-<code>index2</code> are equal,
-following the semantics of the Lua <code>==</code> operator
-(that is, may call metamethods).
-Otherwise returns&nbsp;0.
-Also returns&nbsp;0 if any of the indices is non valid.
-
-
-
-
-
<hr><h3><a name="lua_error"><code>lua_error</code></a></h3><p>
<span class="apii">[-1, +0, <em>v</em>]</span>
<pre>int lua_error (lua_State *L);</pre>
@@ -2877,6 +3107,11 @@ the collector (see <a href="#2.10">&sect;2.10</a>).
The function returns the previous value of the step multiplier.
</li>
+<li><b><code>LUA_GCISRUNNING</code>:</b>
+returns a boolean that tells whether the collector is running
+(i.e., not stopped).
+</li>
+
</ul>
@@ -2895,6 +3130,42 @@ opaque pointer passed to <a href="#lua_newstate"><code>lua_newstate</code></a>.
+<hr><h3><a name="lua_getctx"><code>lua_getctx</code></a></h3><p>
+<span class="apii">[-0, +0, <em>-</em>]</span>
+<pre>int lua_getctx (lua_State *L, int *ctx);</pre>
+
+<p>
+This function is called by a continuation function (see <a href="#3.7">&sect;3.7</a>)
+to retrieve the status of the thread and a context information.
+
+
+<p>
+When called in the original function,
+<a href="#lua_getctx"><code>lua_getctx</code></a> always returns <a href="#pdf-LUA_OK"><code>LUA_OK</code></a>
+and does not change the value of its argument <code>ctx</code>.
+When called inside a continuation function,
+<a href="#lua_getctx"><code>lua_getctx</code></a> returns <a href="#pdf-LUA_YIELD"><code>LUA_YIELD</code></a> and sets
+the value of <code>ctx</code> to be the context information
+(the value passed as the <code>ctx</code> argument
+to the callee together with the continuation function).
+
+
+<p>
+When the callee is <a href="#lua_pcallk"><code>lua_pcallk</code></a>,
+Lua may also call its continuation function
+to handle errors during the call.
+That is, upon an error in the function called by <a href="#lua_pcallk"><code>lua_pcallk</code></a>,
+Lua may not return <a href="#lua_pcallk"><code>lua_pcallk</code></a>
+but instead may call the continuation function.
+In that case, a call to <a href="#lua_getctx"><code>lua_getctx</code></a> will return the error code
+(the value that would be returned by <a href="#lua_pcallk"><code>lua_pcallk</code></a>);
+the value of <code>ctx</code> will be set to the context information,
+as in the case of an yield.
+
+
+
+
+
<hr><h3><a name="lua_getfenv"><code>lua_getfenv</code></a></h3><p>
<span class="apii">[-0, +1, <em>-</em>]</span>
<pre>void lua_getfenv (lua_State *L, int index);</pre>
@@ -2930,7 +3201,7 @@ Pushes onto the stack the value of the global <code>name</code>.
It is defined as a macro:
<pre>
- #define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, s)
+ #define lua_getglobal(L,s) lua_getfield(L, LUA_ENVIRONINDEX, s)
</pre>
@@ -3164,17 +3435,14 @@ Returns 1 if the value at the given acceptable index is a userdata
-<hr><h3><a name="lua_lessthan"><code>lua_lessthan</code></a></h3><p>
-<span class="apii">[-0, +0, <em>e</em>]</span>
-<pre>int lua_lessthan (lua_State *L, int index1, int index2);</pre>
+<hr><h3><a name="lua_len"><code>lua_len</code></a></h3><p>
+<span class="apii">[-0, +1, <em>e</em>]</span>
+<pre>void lua_len (lua_State *L, int index);</pre>
<p>
-Returns 1 if the value at acceptable index <code>index1</code> is smaller
-than the value at acceptable index <code>index2</code>,
-following the semantics of the Lua <code>&lt;</code> operator
-(that is, may call metamethods).
-Otherwise returns&nbsp;0.
-Also returns&nbsp;0 if any of the indices is non valid.
+Returns the "length" of the value at the given acceptable index;
+it is equivalent to the '<code>#</code>' operator in Lua (see <a href="#2.5.5">&sect;2.5.5</a>).
+The result is pushed on the stack.
@@ -3185,7 +3453,7 @@ Also returns&nbsp;0 if any of the indices is non valid.
<pre>int lua_load (lua_State *L,
lua_Reader reader,
void *data,
- const char *chunkname);</pre>
+ const char *source);</pre>
<p>
Loads a Lua chunk.
@@ -3197,7 +3465,7 @@ The return values of <a href="#lua_load"><code>lua_load</code></a> are:
<ul>
-<li><b>0:</b> no errors;</li>
+<li><b><a href="#pdf-LUA_OK"><code>LUA_OK</code></a> (0):</b> no errors;</li>
<li><b><a name="pdf-LUA_ERRSYNTAX"><code>LUA_ERRSYNTAX</code></a>:</b>
syntax error during pre-compilation;</li>
@@ -3205,6 +3473,12 @@ syntax error during pre-compilation;</li>
<li><b><a href="#pdf-LUA_ERRMEM"><code>LUA_ERRMEM</code></a>:</b>
memory allocation error.</li>
+<li><b><a href="#pdf-LUA_ERRGCMM"><code>LUA_ERRGCMM</code></a>:</b>
+error while running a <code>__gc</code> metamethod.
+(This error has no relation with the chunk being loaded.
+It is generated by the garbage collector.)
+</li>
+
</ul>
<p>
@@ -3224,8 +3498,8 @@ The <code>data</code> argument is an opaque value passed to the reader function.
<p>
-The <code>chunkname</code> argument gives a name to the chunk,
-which is used for error messages and in debug information (see <a href="#3.8">&sect;3.8</a>).
+The <code>source</code> argument gives a name to the chunk,
+which is used for error messages and in debug information (see <a href="#3.9">&sect;3.9</a>).
@@ -3236,8 +3510,8 @@ which is used for error messages and in debug information (see <a href="#3.8">&s
<pre>lua_State *lua_newstate (lua_Alloc f, void *ud);</pre>
<p>
-Creates a new, independent state.
-Returns <code>NULL</code> if cannot create the state
+Creates a new thread running in a new, independent state.
+Returns <code>NULL</code> if cannot create the thread/state
(due to lack of memory).
The argument <code>f</code> is the allocator function;
Lua does all memory allocation for this state through this function.
@@ -3267,7 +3541,7 @@ It is equivalent to <code>lua_createtable(L, 0, 0)</code>.
<p>
Creates a new thread, pushes it on the stack,
and returns a pointer to a <a href="#lua_State"><code>lua_State</code></a> that represents this new thread.
-The new state returned by this function shares with the original state
+The new thread returned by this function shares with the original thread
all global objects (such as tables),
but has an independent execution stack.
@@ -3316,7 +3590,7 @@ Lua frees its corresponding memory.
<p>
Pops a key from the stack,
-and pushes a key-value pair from the table at the given index
+and pushes a key&ndash;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 <a href="#lua_next"><code>lua_next</code></a> returns 0 (and pushes nothing).
@@ -3356,32 +3630,13 @@ this confuses the next call to <a href="#lua_next"><code>lua_next</code></a>.
<p>
The type of numbers in Lua.
By default, it is double, but that can be changed in <code>luaconf.h</code>.
-
-
-<p>
-Through the configuration file you can change
+Through this configuration file you can change
Lua to operate with another type for numbers (e.g., float or long).
-<hr><h3><a name="lua_objlen"><code>lua_objlen</code></a></h3><p>
-<span class="apii">[-0, +0, <em>-</em>]</span>
-<pre>size_t lua_objlen (lua_State *L, int index);</pre>
-
-<p>
-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 ('<code>#</code>');
-for userdata, this is the size of the block of memory allocated
-for the userdata;
-for other values, it is&nbsp;0.
-
-
-
-
-
<hr><h3><a name="lua_pcall"><code>lua_pcall</code></a></h3><p>
<span class="apii">[-(nargs + 1), +(nresults|1), <em>-</em>]</span>
<pre>int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc);</pre>
@@ -3424,12 +3679,14 @@ since by then the stack has unwound.
<p>
-The <a href="#lua_pcall"><code>lua_pcall</code></a> function returns 0 in case of success
-or one of the following error codes
+The <a href="#lua_pcall"><code>lua_pcall</code></a> function returns one of the following codes
(defined in <code>lua.h</code>):
<ul>
+<li><b><a name="pdf-LUA_OK"><code>LUA_OK</code></a> (0):</b>
+success.</li>
+
<li><b><a name="pdf-LUA_ERRRUN"><code>LUA_ERRRUN</code></a>:</b>
a runtime error.
</li>
@@ -3443,11 +3700,30 @@ For such errors, Lua does not call the error handler function.
error while running the error handler function.
</li>
+<li><b><a name="pdf-LUA_ERRGCMM"><code>LUA_ERRGCMM</code></a>:</b>
+error while running a <code>__gc</code> metamethod.
+(This error typically has no relation with the function being called.
+It is generated by the garbage collector.)
+</li>
+
</ul>
+<hr><h3><a name="lua_pcallk"><code>lua_pcallk</code></a></h3><p>
+<span class="apii">[-(nargs + 1), +(nresults|1), <em>-</em>]</span>
+<pre>int lua_pcallk (lua_State *L, int nargs, int nresults, int errfunc,
+ int ctx, lua_CFunction k);</pre>
+
+<p>
+This function behaves exactly like <a href="#lua_pcall"><code>lua_pcall</code></a>,
+but allows the called function to yield (see <a href="#3.7">&sect;3.7</a>).
+
+
+
+
+
<hr><h3><a name="lua_pop"><code>lua_pop</code></a></h3><p>
<span class="apii">[-n, +0, <em>-</em>]</span>
<pre>void lua_pop (lua_State *L, int n);</pre>
@@ -3583,7 +3859,7 @@ Pushes a light userdata onto the stack.
<p>
Userdata represent C&nbsp;values in Lua.
-A <em>light userdata</em> represents a pointer.
+A <em>light userdata</em> represents a pointer, a <code>void*</code>.
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).
@@ -3609,7 +3885,7 @@ In these cases, it automatically provides the string length.
<hr><h3><a name="lua_pushlstring"><code>lua_pushlstring</code></a></h3><p>
<span class="apii">[-0, +1, <em>m</em>]</span>
-<pre>void lua_pushlstring (lua_State *L, const char *s, size_t len);</pre>
+<pre>const char *lua_pushlstring (lua_State *L, const char *s, size_t len);</pre>
<p>
Pushes the string pointed to by <code>s</code> with size <code>len</code>
@@ -3620,6 +3896,10 @@ the function returns.
The string can contain embedded zeros.
+<p>
+Returns a pointer to the internal copy of the string.
+
+
@@ -3647,7 +3927,7 @@ Pushes a number with value <code>n</code> onto the stack.
<hr><h3><a name="lua_pushstring"><code>lua_pushstring</code></a></h3><p>
<span class="apii">[-0, +1, <em>m</em>]</span>
-<pre>void lua_pushstring (lua_State *L, const char *s);</pre>
+<pre>const char *lua_pushstring (lua_State *L, const char *s);</pre>
<p>
Pushes the zero-terminated string pointed to by <code>s</code>
@@ -3659,6 +3939,10 @@ The string cannot contain embedded zeros;
it is assumed to end at the first zero.
+<p>
+Returns a pointer to the internal copy of the string.
+
+
@@ -3733,7 +4017,7 @@ Similar to <a href="#lua_gettable"><code>lua_gettable</code></a>, but does a raw
<p>
Pushes onto the stack the value <code>t[n]</code>,
-where <code>t</code> is the value at the given valid index.
+where <code>t</code> is the table at the given valid index.
The access is raw;
that is, it does not invoke metamethods.
@@ -3741,6 +4025,23 @@ that is, it does not invoke metamethods.
+<hr><h3><a name="lua_rawlen"><code>lua_rawlen</code></a></h3><p>
+<span class="apii">[-0, +0, <em>-</em>]</span>
+<pre>size_t lua_rawlen (lua_State *L, int index);</pre>
+
+<p>
+Returns the raw "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 ('<code>#</code>')
+with no metamethods;
+for userdata, this is the size of the block of memory allocated
+for the userdata;
+for other values, it is&nbsp;0.
+
+
+
+
+
<hr><h3><a name="lua_rawset"><code>lua_rawset</code></a></h3><p>
<span class="apii">[-2, +0, <em>m</em>]</span>
<pre>void lua_rawset (lua_State *L, int index);</pre>
@@ -3759,7 +4060,7 @@ Similar to <a href="#lua_settable"><code>lua_settable</code></a>, but does a raw
<p>
Does the equivalent of <code>t[n] = v</code>,
-where <code>t</code> is the value at the given valid index
+where <code>t</code> is the table at the given valid index
and <code>v</code> is the value at the top of the stack.
@@ -3831,9 +4132,10 @@ because a pseudo-index is not an actual stack position.
<pre>void lua_replace (lua_State *L, int index);</pre>
<p>
-Moves the top element into the given position (and pops it),
+Moves the top element into the given position
without shifting any element
-(therefore replacing the value at the given position).
+(therefore replacing the value at the given position),
+and then pops the top element.
@@ -3848,9 +4150,8 @@ Starts and resumes a coroutine in a given thread.
<p>
-To start a coroutine, you first create a new thread
-(see <a href="#lua_newthread"><code>lua_newthread</code></a>);
-then you push onto its stack the main function plus any arguments;
+To start a coroutine,
+you push onto the thread stack the main function plus any arguments;
then you call <a href="#lua_resume"><code>lua_resume</code></a>,
with <code>narg</code> being the number of arguments.
This call returns when the coroutine suspends or finishes its execution.
@@ -3858,14 +4159,20 @@ When it returns, the stack contains all values passed to <a href="#lua_yield"><c
or all values returned by the body function.
<a href="#lua_resume"><code>lua_resume</code></a> returns
<a href="#pdf-LUA_YIELD"><code>LUA_YIELD</code></a> if the coroutine yields,
-0 if the coroutine finishes its execution
+<a href="#pdf-LUA_OK"><code>LUA_OK</code></a> if the coroutine finishes its execution
without errors,
or an error code in case of errors (see <a href="#lua_pcall"><code>lua_pcall</code></a>).
+
+
+<p>
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
+
+
+<p>
+To resume a coroutine, you put on its stack only the values to
be passed as results from <code>yield</code>,
and then call <a href="#lua_resume"><code>lua_resume</code></a>.
@@ -3893,7 +4200,7 @@ with user data <code>ud</code>.
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,
+neither a function nor a userdata,
<a href="#lua_setfenv"><code>lua_setfenv</code></a> returns 0.
Otherwise it returns 1.
@@ -3930,7 +4237,7 @@ sets it as the new value of global <code>name</code>.
It is defined as a macro:
<pre>
- #define lua_setglobal(L,s) lua_setfield(L, LUA_GLOBALSINDEX, s)
+ #define lua_setglobal(L,s) lua_setfield(L, LUA_ENVIRONINDEX, s)
</pre>
@@ -4012,8 +4319,9 @@ Returns the status of the thread <code>L</code>.
<p>
-The status can be 0 for a normal thread,
-an error code if the thread finished its execution with an error,
+The status can be 0 (<a href="#pdf-LUA_OK"><code>LUA_OK</code></a>) for a normal thread,
+an error code if the thread finished the execution
+of a <a href="#lua_resume"><code>lua_resume</code></a> with an error,
or <a name="pdf-LUA_YIELD"><code>LUA_YIELD</code></a> if the thread is suspended.
@@ -4028,10 +4336,10 @@ or <a name="pdf-LUA_YIELD"><code>LUA_YIELD</code></a> if the thread is suspended
Converts the Lua value at the given acceptable index to a C&nbsp;boolean
value (0&nbsp;or&nbsp;1).
Like all tests in Lua,
-<a href="#lua_toboolean"><code>lua_toboolean</code></a> returns 1 for any Lua value
+<a href="#lua_toboolean"><code>lua_toboolean</code></a> returns true for any Lua value
different from <b>false</b> and <b>nil</b>;
-otherwise it returns 0.
-It also returns 0 when called with a non-valid index.
+otherwise it returns false.
+It also returns false when called with a non-valid index.
(If you want to accept only actual boolean values,
use <a href="#lua_isboolean"><code>lua_isboolean</code></a> to test the value's type.)
@@ -4188,16 +4496,16 @@ or <code>LUA_TNONE</code> for a non-valid index
(that is, an index to an "empty" stack position).
The types returned by <a href="#lua_type"><code>lua_type</code></a> are coded by the following constants
defined in <code>lua.h</code>:
-<code>LUA_TNIL</code>,
-<code>LUA_TNUMBER</code>,
-<code>LUA_TBOOLEAN</code>,
-<code>LUA_TSTRING</code>,
-<code>LUA_TTABLE</code>,
-<code>LUA_TFUNCTION</code>,
-<code>LUA_TUSERDATA</code>,
-<code>LUA_TTHREAD</code>,
+<a name="pdf-LUA_TNIL"><code>LUA_TNIL</code></a>,
+<a name="pdf-LUA_TNUMBER"><code>LUA_TNUMBER</code></a>,
+<a name="pdf-LUA_TBOOLEAN"><code>LUA_TBOOLEAN</code></a>,
+<a name="pdf-LUA_TSTRING"><code>LUA_TSTRING</code></a>,
+<a name="pdf-LUA_TTABLE"><code>LUA_TTABLE</code></a>,
+<a name="pdf-LUA_TFUNCTION"><code>LUA_TFUNCTION</code></a>,
+<a name="pdf-LUA_TUSERDATA"><code>LUA_TUSERDATA</code></a>,
+<a name="pdf-LUA_TTHREAD"><code>LUA_TTHREAD</code></a>,
and
-<code>LUA_TLIGHTUSERDATA</code>.
+<a name="pdf-LUA_TLIGHTUSERDATA"><code>LUA_TLIGHTUSERDATA</code></a>.
@@ -4215,6 +4523,21 @@ which must be one the values returned by <a href="#lua_type"><code>lua_type</cod
+<hr><h3><a name="lua_version"><code>lua_version</code></a></h3><p>
+<span class="apii">[-0, +0, <em>v</em>]</span>
+<pre>const lua_Number *lua_version (lua_State *L);</pre>
+
+<p>
+Returns the address of the version number stored in the Lua core.
+When called with a valid <a href="#lua_State"><code>lua_State</code></a>,
+returns the address of the version used to create that state.
+When called with <code>NULL</code>,
+returns the address of the version running the call.
+
+
+
+
+
<hr><h3><a name="lua_Writer"><code>lua_Writer</code></a></h3>
<pre>typedef int (*lua_Writer) (lua_State *L,
const void* p,
@@ -4261,6 +4584,22 @@ and pushes them onto the stack <code>to</code>.
<pre>int lua_yield (lua_State *L, int nresults);</pre>
<p>
+This function is equivalent to <a href="#lua_yieldk"><code>lua_yieldk</code></a>,
+but it has no continuation (see <a href="#3.7">&sect;3.7</a>).
+Therefore, when the thread resumes,
+it returns to the function that called
+the function calling <code>lua_yield</code>.
+
+
+
+
+
+<hr><h3><a name="lua_yieldk"><code>lua_yieldk</code></a></h3><p>
+<span class="apii">[-?, +?, <em>-</em>]</span>
+<pre>int lua_yieldk (lua_State *L, int nresults, int ctx,
+ lua_CFunction k);</pre>
+
+<p>
Yields a coroutine.
@@ -4269,21 +4608,34 @@ This function should only be called as the
return expression of a C&nbsp;function, as follows:
<pre>
- return lua_yield (L, nresults);
+ return lua_yield (L, nresults, i, k);
</pre><p>
-When a C&nbsp;function calls <a href="#lua_yield"><code>lua_yield</code></a> in that way,
+When a C&nbsp;function calls <a href="#lua_yieldk"><code>lua_yieldk</code></a> in that way,
the running coroutine suspends its execution,
and the call to <a href="#lua_resume"><code>lua_resume</code></a> that started this coroutine returns.
The parameter <code>nresults</code> is the number of values from the stack
that are passed as results to <a href="#lua_resume"><code>lua_resume</code></a>.
+<p>
+When the coroutine is resumed again,
+Lua calls the given continuation function <code>k</code> to continue
+the execution of the C function that yielded (see <a href="#3.7">&sect;3.7</a>).
+This continuation function receives the same stack
+from the previous function,
+with the results removed and
+replaced by the arguments passed to <a href="#lua_resume"><code>lua_resume</code></a>.
+Moreover,
+the continuation function may access the value <code>ctx</code>
+by calling <a href="#lua_getctx"><code>lua_getctx</code></a>.
-<h2>3.8 - <a name="3.8">The Debug Interface</a></h2>
+
+
+<h2>3.9 - <a name="3.9">The Debug Interface</a></h2>
<p>
Lua has no built-in debugging facilities.
@@ -4303,9 +4655,12 @@ that need "inside information" from the interpreter.
const char *what; /* (S) */
const char *source; /* (S) */
int currentline; /* (l) */
- int nups; /* (u) number of upvalues */
int linedefined; /* (S) */
int lastlinedefined; /* (S) */
+ unsigned char nups; /* (u) number of upvalues */
+ unsigned char nparams; /* (u) number of parameters */
+ char isvararg; /* (u) */
+ char istailcall; /* (t) */
char short_src[LUA_IDSIZE]; /* (S) */
/* private part */
<em>other fields</em>
@@ -4326,10 +4681,15 @@ The fields of <a href="#lua_Debug"><code>lua_Debug</code></a> have the following
<ul>
<li><b><code>source</code>:</b>
-If the function was defined in a string,
-then <code>source</code> is that string.
-If the function was defined in a file,
-then <code>source</code> starts with a '<code>@</code>' followed by the file name.
+the source of the chunk that created the function.
+If <code>source</code> starts with a '<code>@</code>',
+it means that the function was defined in a file where
+the file name follows the '<code>@</code>'.
+If <code>source</code> starts with a '<code>=</code>',
+the rest of it should describe the source in a user-dependent manner.
+Otherwise,
+the function was defined in a string where
+<code>source</code> is that string.
</li>
<li><b><code>short_src</code>:</b>
@@ -4347,10 +4707,7 @@ the line number where the definition of the function ends.
<li><b><code>what</code>:</b>
the string <code>"Lua"</code> if the function is a Lua function,
<code>"C"</code> if it is a C&nbsp;function,
-<code>"main"</code> if it is the main part of a chunk,
-and <code>"tail"</code> if it was a function that did a tail call.
-In the latter case,
-Lua has no other information about the function.
+<code>"main"</code> if it is the main part of a chunk.
</li>
<li><b><code>currentline</code>:</b>
@@ -4380,10 +4737,25 @@ according to how the function was called.
(Lua uses the empty string when no other option seems to apply.)
</li>
+<li><b><code>istailcall</code>:</b>
+true if this function invocation was called by a tail call.
+In this case, the caller of this level is not in the stack.
+</li>
+
<li><b><code>nups</code>:</b>
the number of upvalues of the function.
</li>
+<li><b><code>nparams</code>:</b>
+the number of fixed parameters of the function
+(always 0&nbsp;for C&nbsp;functions).
+</li>
+
+<li><b><code>isvararg</code>:</b>
+whether the function is a vararg function
+(always true for C&nbsp;functions).
+</li>
+
</ul>
@@ -4441,13 +4813,13 @@ given as argument to a hook (see <a href="#lua_Hook"><code>lua_Hook</code></a>).
To get information about a function you push it onto the stack
and start the <code>what</code> string with the character '<code>&gt;</code>'.
(In that case,
-<code>lua_getinfo</code> pops the function in the top of the stack.)
+<code>lua_getinfo</code> pops the function from the top of the stack.)
For instance, to know in which line a function <code>f</code> was defined,
you can write the following code:
<pre>
lua_Debug ar;
- lua_getfield(L, LUA_GLOBALSINDEX, "f"); /* get global 'f' */
+ lua_getfield(L, LUA_ENVIRONINDEX, "f"); /* get global 'f' */
lua_getinfo(L, "&gt;S", &amp;ar);
printf("%d\n", ar.linedefined);
</pre>
@@ -4470,6 +4842,9 @@ fills in the fields <code>source</code>, <code>short_src</code>,
<li><b>'<code>l</code>':</b> fills in the field <code>currentline</code>;
</li>
+<li><b>'<code>t</code>':</b> fills in the field <code>istailcall</code>;
+</li>
+
<li><b>'<code>u</code>':</b> fills in the field <code>nups</code>;
</li>
@@ -4589,16 +4964,17 @@ Whenever a hook is called, its <code>ar</code> argument has its field
<code>event</code> set to the specific event that triggered the hook.
Lua identifies these events with the following constants:
<a name="pdf-LUA_HOOKCALL"><code>LUA_HOOKCALL</code></a>, <a name="pdf-LUA_HOOKRET"><code>LUA_HOOKRET</code></a>,
-<a name="pdf-LUA_HOOKTAILRET"><code>LUA_HOOKTAILRET</code></a>, <a name="pdf-LUA_HOOKLINE"><code>LUA_HOOKLINE</code></a>,
+<a name="pdf-LUA_HOOKTAILCALL"><code>LUA_HOOKTAILCALL</code></a>, <a name="pdf-LUA_HOOKLINE"><code>LUA_HOOKLINE</code></a>,
and <a name="pdf-LUA_HOOKCOUNT"><code>LUA_HOOKCOUNT</code></a>.
Moreover, for line events, the field <code>currentline</code> is also set.
To get the value of any other field in <code>ar</code>,
the hook must call <a href="#lua_getinfo"><code>lua_getinfo</code></a>.
-For return events, <code>event</code> can be <code>LUA_HOOKRET</code>,
-the normal value, or <code>LUA_HOOKTAILRET</code>.
-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 <a href="#lua_getinfo"><code>lua_getinfo</code></a>.
+
+
+<p>
+For call events, <code>event</code> can be <code>LUA_HOOKCALL</code>,
+the normal value, or <code>LUA_HOOKTAILCALL</code>, for a tail call;
+in this case, there will be no corresponding return event.
<p>
@@ -4705,6 +5081,29 @@ when the index is greater than the number of upvalues.
+<hr><h3><a name="lua_upvalueid"><code>lua_upvalueid</code></a></h3><p>
+<span class="apii">[-0, +0, <em>-</em>]</span>
+<pre>void *(lua_upvalueid) (lua_State *L, int funcindex, int n);</pre>
+
+<p>
+Returns an unique identifier for the upvalue numbered <code>n</code>
+from the closure at index <code>fidx</code>.
+Parameters <code>funcindex</code> and <code>n</code> are as in the <a href="#lua_getupvalue"><code>lua_getupvalue</code></a>
+(see <a href="#lua_getupvalue"><code>lua_getupvalue</code></a>)
+(but <code>n</code> cannot be greater than the number of upvalues).
+
+
+<p>
+These unique identifiers allow a program to check whether different
+closures share upvalues.
+Lua closures that share an upvalue
+(that is, that access a same external local variable)
+will return identical ids for those upvalue indices.
+
+
+
+
+
<h1>4 - <a name="4">The Auxiliary Library</a></h1>
@@ -4728,19 +5127,22 @@ have a prefix <code>luaL_</code>.
<p>
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.
+and so they provide nothing that cannot be done with that API.
<p>
Several functions in the auxiliary library are used to
check C&nbsp;function arguments.
-Their names are always <code>luaL_check*</code> or <code>luaL_opt*</code>.
-All of these functions throw an error if the check is not satisfied.
Because the error message is formatted for arguments
(e.g., "<code>bad argument #1</code>"),
you should not use these functions for other stack values.
+<p>
+Functions called <code>luaL_check*</code>
+always throw an error if the check is not satisfied.
+
+
<h2>4.1 - <a name="4.1">Functions and Types</a></h2>
@@ -4938,10 +5340,10 @@ Calls a metamethod.
If the object at index <code>obj</code> has a metatable and this
metatable has a field <code>e</code>,
this function calls this field and passes the object as its only argument.
-In this case this function returns 1 and pushes onto the
+In this case this function returns true 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).
+this function returns false (without pushing any value on the stack).
@@ -5064,7 +5466,8 @@ to use strings instead of numbers to select options.)
<p>
Grows the stack size to <code>top + sz</code> elements,
raising an error if the stack cannot grow to that size.
-<code>msg</code> is an additional text to go into the error message.
+<code>msg</code> is an additional text to go into the error message
+(or <code>NULL</code> for no additional text).
@@ -5105,7 +5508,24 @@ See <a href="#lua_type"><code>lua_type</code></a> for the encoding of types for
<p>
Checks whether the function argument <code>narg</code> is a userdata
-of the type <code>tname</code> (see <a href="#luaL_newmetatable"><code>luaL_newmetatable</code></a>).
+of the type <code>tname</code> (see <a href="#luaL_newmetatable"><code>luaL_newmetatable</code></a>) and
+returns the userdata address (see <a href="#lua_touserdata"><code>lua_touserdata</code></a>).
+
+
+
+
+
+<hr><h3><a name="luaL_checkversion"><code>luaL_checkversion</code></a></h3><p>
+<span class="apii">[-0, +0, <em>-</em>]</span>
+<pre>void *luaL_checkversion (lua_State *L);</pre>
+
+<p>
+Checks whether the core running the call,
+the core that created the Lua state,
+and the code making the call are all using the same version of Lua.
+Also checks whether the core running the call
+and the core that created the Lua state
+are using the same address space.
@@ -5122,15 +5542,15 @@ It is defined as the following macro:
<pre>
(luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0))
</pre><p>
-It returns 0 if there are no errors
-or 1 in case of errors.
+It returns false if there are no errors
+or true in case of errors.
<hr><h3><a name="luaL_dostring"><code>luaL_dostring</code></a></h3><p>
-<span class="apii">[-0, +?, <em>m</em>]</span>
+<span class="apii">[-0, +?, <em>-</em>]</span>
<pre>int luaL_dostring (lua_State *L, const char *str);</pre>
<p>
@@ -5140,8 +5560,8 @@ It is defined as the following macro:
<pre>
(luaL_loadstring(L, str) || lua_pcall(L, 0, LUA_MULTRET, 0))
</pre><p>
-It returns 0 if there are no errors
-or 1 in case of errors.
+It returns false if there are no errors
+or true in case of errors.
@@ -5179,7 +5599,7 @@ Pushes onto the stack the field <code>e</code> from the metatable
of the object at index <code>obj</code>.
If the object does not have a metatable,
or if the metatable does not have this field,
-returns 0 and pushes nothing.
+returns false and pushes nothing.
@@ -5214,8 +5634,23 @@ Pushes the resulting string on the stack and returns it.
+<hr><h3><a name="luaL_len"><code>luaL_len</code></a></h3><p>
+<span class="apii">[-0, +1, <em>e</em>]</span>
+<pre>int luaL_len (lua_State *L, int index);</pre>
+
+<p>
+Returns the "length" of the value at the given acceptable index
+as a number;
+it is equivalent to the '<code>#</code>' operator in Lua (see <a href="#2.5.5">&sect;2.5.5</a>).
+Raises an error if the result of the operation is not a number.
+(This only may happen through metamethods.)
+
+
+
+
+
<hr><h3><a name="luaL_loadbuffer"><code>luaL_loadbuffer</code></a></h3><p>
-<span class="apii">[-0, +1, <em>m</em>]</span>
+<span class="apii">[-0, +1, <em>-</em>]</span>
<pre>int luaL_loadbuffer (lua_State *L,
const char *buff,
size_t sz,
@@ -5264,7 +5699,7 @@ it does not run it.
<hr><h3><a name="luaL_loadstring"><code>luaL_loadstring</code></a></h3><p>
-<span class="apii">[-0, +1, <em>m</em>]</span>
+<span class="apii">[-0, +1, <em>-</em>]</span>
<pre>int luaL_loadstring (lua_State *L, const char *s);</pre>
<p>
@@ -5314,7 +5749,7 @@ with <code>tname</code> in the registry.
Creates a new Lua state.
It calls <a href="#lua_newstate"><code>lua_newstate</code></a> with an
allocator based on the standard&nbsp;C <code>realloc</code> function
-and then sets a panic function (see <a href="#lua_atpanic"><code>lua_atpanic</code></a>) that prints
+and then sets a panic function (see <a href="#3.6">&sect;3.6</a>) that prints
an error message to the standard error output in case of fatal
errors.
@@ -5527,8 +5962,10 @@ Opens a library.
<p>
When called with <code>libname</code> equal to <code>NULL</code>,
-it simply registers all functions in the list <code>l</code>
+it simply registers all functions in the array <code>l</code>
(see <a href="#luaL_Reg"><code>luaL_Reg</code></a>) into the table on the top of the stack.
+The pointer <code>l</code> may be <code>NULL</code>,
+representing an empty list.
<p>
@@ -5550,6 +5987,35 @@ on the top of the stack.
+<hr><h3><a name="luaL_testudata"><code>luaL_testudata</code></a></h3><p>
+<span class="apii">[-0, +0, <em>m</em>]</span>
+<pre>void *luaL_testudata (lua_State *L, int narg, const char *tname);</pre>
+
+<p>
+This function works like <a href="#luaL_checkudata"><code>luaL_checkudata</code></a>,
+except that, when the test fails,
+it returns <code>NULL</code> instead of throwing an error.
+
+
+
+
+
+<hr><h3><a name="luaL_traceback"><code>luaL_traceback</code></a></h3><p>
+<span class="apii">[-0, +1, <em>m</em>]</span>
+<pre>luaL_traceback (lua_State *L, lua_State *L1,
+ const char *msg, int level);</pre>
+
+<p>
+Creates and pushes a traceback of the stack <code>L1</code>.
+If <code>msg</code> is not <code>NULL</code> it is appended
+at the beginning of the traceback.
+The <code>level</code> parameter tells at which level
+to start the traceback.
+
+
+
+
+
<hr><h3><a name="luaL_typename"><code>luaL_typename</code></a></h3><p>
<span class="apii">[-0, +0, <em>-</em>]</span>
<pre>const char *luaL_typename (lua_State *L, int index);</pre>
@@ -5561,9 +6027,9 @@ Returns the name of the type of the value at the given index.
-<hr><h3><a name="luaL_typerror"><code>luaL_typerror</code></a></h3><p>
+<hr><h3><a name="luaL_typeerror"><code>luaL_typeerror</code></a></h3><p>
<span class="apii">[-0, +0, <em>v</em>]</span>
-<pre>int luaL_typerror (lua_State *L, int narg, const char *tname);</pre>
+<pre>int luaL_typeerror (lua_State *L, int narg, const char *tname);</pre>
<p>
Generates an error with a message like the following:
@@ -5645,7 +6111,7 @@ Currently, Lua has the following standard libraries:
<ul>
-<li>basic library,</li> which includes the coroutine sub-library;
+<li>basic library, which includes the coroutine sub-library;</li>
<li>package library;</li>
@@ -5655,6 +6121,8 @@ Currently, Lua has the following standard libraries:
<li>mathematical functions (sin, log, etc.);</li>
+<li>bitwise operations;</li>
+
<li>input and output;</li>
<li>operating system facilities;</li>
@@ -5678,6 +6146,7 @@ it can open them individually by calling
<a name="pdf-luaopen_string"><code>luaopen_string</code></a> (for the string library),
<a name="pdf-luaopen_table"><code>luaopen_table</code></a> (for the table library),
<a name="pdf-luaopen_math"><code>luaopen_math</code></a> (for the mathematical library),
+<a name="pdf-luaopen_bitlib"><code>luaopen_bitlib</code></a> (for the bit library),
<a name="pdf-luaopen_io"><code>luaopen_io</code></a> (for the I/O library),
<a name="pdf-luaopen_os"><code>luaopen_os</code></a> (for the Operating System library),
and <a name="pdf-luaopen_debug"><code>luaopen_debug</code></a> (for the debug library).
@@ -5709,7 +6178,7 @@ when absent, it defaults to "assertion failed!"
<p>
-<hr><h3><a name="pdf-collectgarbage"><code>collectgarbage (opt [, arg])</code></a></h3>
+<hr><h3><a name="pdf-collectgarbage"><code>collectgarbage ([opt [, arg]])</code></a></h3>
<p>
@@ -5718,6 +6187,11 @@ It performs different functions according to its first argument, <code>opt</code
<ul>
+<li><b>"collect":</b>
+performs a full garbage-collection cycle.
+This is the default option.
+</li>
+
<li><b>"stop":</b>
stops the garbage collector.
</li>
@@ -5726,12 +6200,16 @@ stops the garbage collector.
restarts the garbage collector.
</li>
-<li><b>"collect":</b>
-performs a full garbage-collection cycle.
-</li>
-
<li><b>"count":</b>
-returns the total memory in use by Lua (in Kbytes).
+returns the total memory in use by Lua (in Kbytes) and
+a second value with the total memory in bytes modulo 1024.
+The first value has a fractional part,
+so the following equality is always true:
+
+<pre>
+ k, b = collectgarbage("count")
+ assert(k*1024 == math.floor(k)*1024 + b)
+</pre><p>
</li>
<li><b>"step":</b>
@@ -5755,12 +6233,17 @@ the collector (see <a href="#2.10">&sect;2.10</a>).
Returns the previous value for <em>step</em>.
</li>
+<li><b>"isrunning":</b>
+returns a boolean that tells whether the collector is running
+(i.e., not stopped).
+</li>
+
</ul>
<p>
-<hr><h3><a name="pdf-dofile"><code>dofile (filename)</code></a></h3>
+<hr><h3><a name="pdf-dofile"><code>dofile ([filename])</code></a></h3>
Opens the named file and executes its contents as a Lua chunk.
When called without arguments,
<code>dofile</code> executes the contents of the standard input (<code>stdin</code>).
@@ -5780,7 +6263,7 @@ Function <code>error</code> never returns.
<p>
Usually, <code>error</code> adds some information about the error position
-at the beginning of the message.
+at the beginning of the message, if the message is a string.
The <code>level</code> argument specifies how to get the error position.
With level&nbsp;1 (the default), the error position is where the
<code>error</code> function was called.
@@ -5795,25 +6278,10 @@ to the message.
<p>
<hr><h3><a name="pdf-_G"><code>_G</code></a></h3>
A global variable (not a function) that
-holds the global environment (that is, <code>_G._G = _G</code>).
+holds the global environment (so that <code>_G._G = _G</code>).
Lua itself does not use this variable;
changing its value does not affect any environment,
nor vice-versa.
-(Use <a href="#pdf-setfenv"><code>setfenv</code></a> to change environments.)
-
-
-
-
-<p>
-<hr><h3><a name="pdf-getfenv"><code>getfenv ([f])</code></a></h3>
-Returns the current environment in use by the function.
-<code>f</code> can be a Lua function or a number
-that specifies the function at that stack level:
-Level&nbsp;1 is the function calling <code>getfenv</code>.
-If the given function is not a Lua function,
-or if <code>f</code> is 0,
-<code>getfenv</code> returns the global environment.
-The default for <code>f</code> is 1.
@@ -5837,30 +6305,47 @@ Otherwise, returns the metatable of the given object.
<p>
-Returns three values: an iterator function, the table <code>t</code>, and 0,
+If <code>t</code> has a metamethod <code>__ipairs</code>,
+calls it with <code>t</code> as argument and returns the first three
+results from the call.
+
+
+<p>
+Otherwise,
+returns three values: an iterator function, the table <code>t</code>, and 0,
so that the construction
<pre>
for i,v in ipairs(t) do <em>body</em> end
</pre><p>
will iterate over the pairs (<code>1,t[1]</code>), (<code>2,t[2]</code>), &middot;&middot;&middot;,
-up to the first integer key absent from the table.
+up to the length of the table,
+as defined by the length operator (see <a href="#2.5.5">&sect;2.5.5</a>).
+
+<p>
+<hr><h3><a name="pdf-load"><code>load (ld [, source [, mode]])</code></a></h3>
+
<p>
-<hr><h3><a name="pdf-load"><code>load (func [, chunkname])</code></a></h3>
+Loads a chunk.
<p>
-Loads a chunk using function <code>func</code> to get its pieces.
-Each call to <code>func</code> must return a string that concatenates
+If <code>ld</code> is a function,
+calls it repeatedly to get the chunk pieces.
+Each call to <code>ld</code> must return a string that concatenates
with previous results.
A return of an empty string, <b>nil</b>, or no value signals the end of the chunk.
<p>
+If <code>ld</code> is a string, the chunk is this string.
+
+
+<p>
If there are no errors,
returns the compiled chunk as a function;
otherwise, returns <b>nil</b> plus the error message.
@@ -5868,12 +6353,33 @@ The environment of the returned function is the global environment.
<p>
-<code>chunkname</code> is used as the chunk name for error messages
-and debug information.
+<code>source</code> is used as the source of the chunk for error messages
+and debug information (see <a href="#3.9">&sect;3.9</a>).
When absent,
it defaults to "<code>=(load)</code>".
+<p>
+The string <code>mode</code> controls whether the chunk can be text or binary
+(that is, a precompiled chunk).
+A letter '<code>t</code>' in <code>mode</code> allows a text chunk;
+a letter '<code>b</code>' allows a binary chunk.
+The default is "<code>bt</code>".
+
+
+
+
+<p>
+<hr><h3><a name="pdf-loadin"><code>loadin (env, ...)</code></a></h3>
+
+
+<p>
+This function is similar to <a href="#pdf-load"><code>load</code></a>,
+but sets <code>env</code> as the environment
+of the created function in case of success.
+The parameters after <code>env</code> are similar to those of <a href="#pdf-load"><code>load</code></a>, too.
+
+
<p>
@@ -5955,7 +6461,14 @@ In particular, you may clear existing fields.
<p>
-Returns three values: the <a href="#pdf-next"><code>next</code></a> function, the table <code>t</code>, and <b>nil</b>,
+If <code>t</code> has a metamethod <code>__pairs</code>,
+calls it with <code>t</code> as argument and returns the first three
+results from the call.
+
+
+<p>
+Otherwise,
+returns three values: the <a href="#pdf-next"><code>next</code></a> function, the table <code>t</code>, and <b>nil</b>,
so that the construction
<pre>
@@ -5972,7 +6485,7 @@ the table during its traversal.
<p>
-<hr><h3><a name="pdf-pcall"><code>pcall (f, arg1, &middot;&middot;&middot;)</code></a></h3>
+<hr><h3><a name="pdf-pcall"><code>pcall (f [, arg1, &middot;&middot;&middot;])</code></a></h3>
<p>
@@ -6043,7 +6556,8 @@ This function returns <code>table</code>.
<p>
If <code>index</code> is a number,
-returns all arguments after argument number <code>index</code>.
+returns all arguments after argument number <code>index</code>;
+a negative number indexes from the end (-1 is the last argument).
Otherwise, <code>index</code> must be the string <code>"#"</code>,
and <code>select</code> returns the total number of extra arguments it received.
@@ -6051,26 +6565,6 @@ and <code>select</code> returns the total number of extra arguments it received.
<p>
-<hr><h3><a name="pdf-setfenv"><code>setfenv (f, table)</code></a></h3>
-
-
-<p>
-Sets the environment to be used by the given function.
-<code>f</code> can be a Lua function or a number
-that specifies the function at that stack level:
-Level&nbsp;1 is the function calling <code>setfenv</code>.
-<code>setfenv</code> returns the given function.
-
-
-<p>
-As a special case, when <code>f</code> is 0 <code>setfenv</code> changes
-the environment of the running thread.
-In this case, <code>setfenv</code> returns no values.
-
-
-
-
-<p>
<hr><h3><a name="pdf-setmetatable"><code>setmetatable (table, metatable)</code></a></h3>
@@ -6144,22 +6638,6 @@ and "<code>userdata</code>".
<p>
-<hr><h3><a name="pdf-unpack"><code>unpack (list [, i [, j]])</code></a></h3>
-Returns the elements from the given table.
-This function is equivalent to
-
-<pre>
- return list[i], list[i+1], &middot;&middot;&middot;, list[j]
-</pre><p>
-except that the above code can be written only for a fixed number
-of elements.
-By default, <code>i</code> is&nbsp;1 and <code>j</code> is the length of the list,
-as defined by the length operator (see <a href="#2.5.5">&sect;2.5.5</a>).
-
-
-
-
-<p>
<hr><h3><a name="pdf-_VERSION"><code>_VERSION</code></a></h3>
A global variable (not a function) that
holds a string containing the current interpreter version.
@@ -6169,27 +6647,12 @@ The current contents of this variable is "<code>Lua 5.1</code>".
<p>
-<hr><h3><a name="pdf-xpcall"><code>xpcall (f, err)</code></a></h3>
+<hr><h3><a name="pdf-xpcall"><code>xpcall (f, err [, arg1, &middot;&middot;&middot;])</code></a></h3>
<p>
This function is similar to <a href="#pdf-pcall"><code>pcall</code></a>,
-except that you can set a new error handler.
-
-
-<p>
-<code>xpcall</code> calls function <code>f</code> in protected mode,
-using <code>err</code> as the error handler.
-Any error inside <code>f</code> is not propagated;
-instead, <code>xpcall</code> catches the error,
-calls the <code>err</code> 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, <code>xpcall</code> also returns all results from the call,
-after this first result.
-In case of any error,
-<code>xpcall</code> returns <b>false</b> plus the result from <code>err</code>.
+except that it sets a new error handler <code>err</code>.
@@ -6250,8 +6713,8 @@ If there is any error,
<p>
-Returns the running coroutine,
-or <b>nil</b> when called by the main thread.
+Returns the running coroutine plus a boolean,
+true when the running coroutine is the main one.
@@ -6322,7 +6785,7 @@ Everything else is exported in a table <a name="pdf-package"><code>package</code
<p>
-Creates a module.
+Creates and returns a module.
If there is a table in <code>package.loaded[name]</code>,
this table is the module.
Otherwise, if there is a global table <code>t</code> with the given name,
@@ -6334,12 +6797,15 @@ This function also initializes <code>t._NAME</code> with the given name,
<code>t._M</code> with the module (<code>t</code> itself),
and <code>t._PACKAGE</code> with the package name
(the full module name minus last component; see below).
-Finally, <code>module</code> sets <code>t</code> as the new environment
-of the current function and the new value of <code>package.loaded[name]</code>,
+Finally, <code>module</code> sets <code>t</code> as the new value of <code>package.loaded[name]</code>,
so that <a href="#pdf-require"><code>require</code></a> returns <code>t</code>.
<p>
+The <code>module</code> function returns the module table <code>t</code>.
+
+
+<p>
If <code>name</code> is a compound name
(that is, one with components separated by dots),
<code>module</code> creates (or reuses, if they already exist)
@@ -6355,6 +6821,12 @@ the module name,
where each option is a function to be applied over the module.
+<p>
+To keep compatibility with old versions of Lua,
+<code>module</code> also sets <code>t</code> as the new environment
+of the current function.
+
+
<p>
@@ -6412,6 +6884,38 @@ then <code>require</code> signals an error.
<p>
+<hr><h3><a name="pdf-package.config"><code>package.config</code></a></h3>
+
+
+<p>
+A string describing some compile-time configurations for packages.
+This string is a sequence of lines:
+
+<ul>
+
+<li>The first line is the directory separator string.
+Default is '<code>\</code>' for Windows and '<code>/</code>' for all other systems.</li>
+
+<li>The second line is the character that separates templates in a path.
+Default is '<code>;</code>'.</li>
+
+<li>The third line is the string that marks the
+substitution points in a template.
+Default is '<code>?</code>'.</li>
+
+<li>The fourth line is a string that, in a path in Windows,
+is replaced by the executable's directory.
+Default is '<code>!</code>'.</li>
+
+<li>The fifth line is a mark to ignore all before it when bulding the
+<code>luaopen_</code> function name.
+Default is '<code>-</code>'.</li>
+
+</ul>
+
+
+
+<p>
<hr><h3><a name="pdf-package.cpath"><code>package.cpath</code></a></h3>
@@ -6441,6 +6945,12 @@ When you require a module <code>modname</code> and
<a href="#pdf-require"><code>require</code></a> simply returns the value stored there.
+<p>
+This variable is only a reference to the real table;
+assignments to this variable do not change the
+table used by <a href="#pdf-require"><code>require</code></a>.
+
+
<p>
@@ -6471,27 +6981,14 @@ The first searcher simply looks for a loader in the
<p>
The second searcher looks for a loader as a Lua library,
using the path stored at <a href="#pdf-package.path"><code>package.path</code></a>.
-A path is a sequence of <em>templates</em> separated by semicolons.
-For each template,
-the searcher will change each interrogation
-mark in the template by <code>filename</code>,
-which is the module name with each dot replaced by a
-"directory separator" (such as "<code>/</code>" in Unix);
-then it will try to open the resulting file name.
-So, for instance, if the Lua path is the string
-
-<pre>
- "./?.lua;./?.lc;/usr/local/?/init.lua"
-</pre><p>
-the search for a Lua file for module <code>foo</code>
-will try to open the files
-<code>./foo.lua</code>, <code>./foo.lc</code>, and
-<code>/usr/local/foo/init.lua</code>, in that order.
+The search is done as described in function <a href="#pdf-package.searchpath"><code>package.searchpath</code></a>.
<p>
The third searcher looks for a loader as a C&nbsp;library,
using the path given by the variable <a href="#pdf-package.cpath"><code>package.cpath</code></a>.
+Again,
+the search is done as described in function <a href="#pdf-package.searchpath"><code>package.searchpath</code></a>.
For instance,
if the C&nbsp;path is the string
@@ -6537,7 +7034,15 @@ with each submodule keeping its original open function.
<p>
Dynamically links the host program with the C&nbsp;library <code>libname</code>.
-Inside this library, looks for a function <code>funcname</code>
+
+
+<p>
+If <code>funcname</code> is "<code>*</code>",
+then it only links with the library,
+making the symbols exported by the library
+available to other dynamically linked libraries.
+Otherwise,
+it looks for a function <code>funcname</code> inside the library
and returns this function as a C&nbsp;function.
(So, <code>funcname</code> must follow the protocol (see <a href="#lua_CFunction"><code>lua_CFunction</code></a>)).
@@ -6549,13 +7054,13 @@ Unlike <a href="#pdf-require"><code>require</code></a>,
it does not perform any path searching and
does not automatically adds extensions.
<code>libname</code> must be the complete file name of the C&nbsp;library,
-including if necessary a path and extension.
+including if necessary a path and an extension.
<code>funcname</code> must be the exact name exported by the C&nbsp;library
(which may depend on the C&nbsp;compiler and linker used).
<p>
-This function is not supported by ANSI C.
+This function is not supported by ANSI&nbsp;C.
As such, it is only available on some platforms
(Windows, Linux, Mac OS X, Solaris, BSD,
plus other Unix systems that support the <code>dlfcn</code> standard).
@@ -6594,6 +7099,41 @@ A table to store loaders for specific modules
<p>
+<hr><h3><a name="pdf-package.searchpath"><code>package.searchpath (name, path)</code></a></h3>
+
+
+<p>
+Searches for the given <code>name</code> in the given <code>path</code>.
+
+
+<p>
+A path is string containing a sequence of
+<em>templates</em> separated by semicolons.
+For each template,
+the function changes each interrogation
+mark in the template by <code>name</code>,
+and then tries to open the resulting file name.
+For instance, if the path is the string
+
+<pre>
+ "./?.lua;./?.lc;/usr/local/?/init.lua"
+</pre><p>
+the search for name <code>foo</code>
+will try to open the files
+<code>./foo.lua</code>, <code>./foo.lc</code>, and
+<code>/usr/local/foo/init.lua</code>, in that order.
+
+
+<p>
+Returns the resulting name of the first file that it can
+open in read mode (after closing it),
+or <b>nil</b> plus an error message if none succeeds.
+(This error message lists all file names it tried to open.)
+
+
+
+
+<p>
<hr><h3><a name="pdf-package.seeall"><code>package.seeall (module)</code></a></h3>
@@ -7070,6 +7610,16 @@ For instance, the item <code>%b()</code> matches expressions with
balanced parentheses.
</li>
+<li>
+<code>%f[<em>set</em>]</code>, a <em>frontier pattern</em>;
+such item matches an empty string at any position such that
+the next character belongs to <em>set</em>
+and the previous character does not belong to <em>set</em>.
+The set <em>set</em> is interpreted as previously described.
+The beggining and the end of the subject are handled as if
+they were the character '<code>\0</code>'.
+</li>
+
</ul>
@@ -7161,14 +7711,13 @@ of table <code>t</code>.
<p>
-<hr><h3><a name="pdf-table.maxn"><code>table.maxn (table)</code></a></h3>
+<hr><h3><a name="pdf-table.pack"><code>table.pack (&middot;&middot;&middot;)</code></a></h3>
<p>
-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.)
+Returns a new table with all parameters stored into
+keys 1, 2, etc.
+and with a field "<code>n</code>" with the total number of parameters.
@@ -7211,6 +7760,22 @@ may have their relative positions changed by the sort.
+<p>
+<hr><h3><a name="pdf-table.unpack"><code>table.unpack (list [, i [, j]])</code></a></h3>
+Returns the elements from the given table.
+This function is equivalent to
+
+<pre>
+ return list[i], list[i+1], &middot;&middot;&middot;, list[j]
+</pre><p>
+except that the above code can be written only for a fixed number
+of elements.
+By default, <code>i</code> is&nbsp;1 and <code>j</code> is the length of the list,
+as defined by the length operator (see <a href="#2.5.5">&sect;2.5.5</a>).
+
+
+
+
@@ -7380,21 +7945,13 @@ Returns <em>m2<sup>e</sup></em> (<code>e</code> should be an integer).
<p>
-<hr><h3><a name="pdf-math.log"><code>math.log (x)</code></a></h3>
+<hr><h3><a name="pdf-math.log"><code>math.log (x [, base])</code></a></h3>
<p>
-Returns the natural logarithm of <code>x</code>.
-
-
-
-
-<p>
-<hr><h3><a name="pdf-math.log10"><code>math.log10 (x)</code></a></h3>
-
-
-<p>
-Returns the base-10 logarithm of <code>x</code>.
+Returns the logarithm of <code>x</code> in the given base.
+The default for <code>base</code> is $e$
+(so that the function returns the natural logarithm of <code>x</code>).
@@ -7551,7 +8108,141 @@ Returns the hyperbolic tangent of <code>x</code>.
-<h2>5.7 - <a name="5.7">Input and Output Facilities</a></h2>
+<h2>5.7 - <a name="5.7">Bitwise operations</a></h2>
+
+<p>
+This library provides bitwise operations.
+It provides all its functions inside the table <a name="pdf-bit"><code>bit</code></a>.
+Unless otherwise stated,
+all functions accept as arguments and return numbers
+in the range <em>[0,2^32 - 1]</em>.
+Standard Lua does not use 2-complement representation for numbers,
+so in standard Lua (that is, with floating-point numbers) you
+cannot use negative numbers with this library.
+In particular, -1 is not the same as 0xffffffff.
+
+
+<p>
+<hr><h3><a name="pdf-bit.band"><code>bit.band (&middot;&middot;&middot;)</code></a></h3>
+
+
+<p>
+Returns the bitwise and of its operands.
+
+
+
+
+<p>
+<hr><h3><a name="pdf-bit.bnot"><code>bit.bnot (x)</code></a></h3>
+
+
+<p>
+Returns the bitwise negation of <code>x</code>.
+For any valid <code>x</code>,
+the following identity holds:
+
+<pre>
+ assert(bit.bnot(x) == 2^32 - 1 - x)
+</pre>
+
+
+
+<p>
+<hr><h3><a name="pdf-bit.bor"><code>bit.bor (&middot;&middot;&middot;)</code></a></h3>
+
+
+<p>
+Returns the bitwise or of its operands.
+
+
+
+
+<p>
+<hr><h3><a name="pdf-bit.brotate"><code>bit.brotate (x, disp)</code></a></h3>
+
+
+<p>
+Returns the number <code>x</code> rotated <code>disp</code> bits to the left.
+The number <code>disp</code> may be any representable integer.
+
+
+<p>
+For any valid displacement,
+the following identity holds:
+
+<pre>
+ assert(bit.rotate(x, disp) == bit.rotate(x, disp % 32))
+</pre><p>
+This allows you to consider that
+negative displacements rotate to the right.
+
+
+
+
+<p>
+<hr><h3><a name="pdf-bit.bshift"><code>bit.bshift (x, disp)</code></a></h3>
+
+
+<p>
+Returns the number <code>x</code> shifted <code>disp</code> bits to the left.
+The number <code>disp</code> may be any representable integer.
+Negative displacements shift to the right.
+In any direction, vacant bits are filled with zeros.
+In particular,
+displacements with absolute values higher than
+the total number of bits in the representation of <code>x</code>
+result in zero (all bits are shifted out).
+
+
+<p>
+For positive displacements,
+the following equality holds:
+
+<pre>
+ assert(bit.bshift(b, disp) == (b * 2^disp) % 2^32)
+</pre>
+
+<p>
+For negative displacements,
+the following equality holds:
+
+<pre>
+ assert(bit.bshift(b, disp) == math.floor(b * 2^disp))
+</pre>
+
+<p>
+This shift operation is what is called logical shift.
+For an arithmetic shift,
+you should use the arithmetic operators.
+
+
+
+
+<p>
+<hr><h3><a name="pdf-bit.btest"><code>bit.btest (&middot;&middot;&middot;)</code></a></h3>
+
+
+<p>
+Returns a boolean signaling
+whether the bitwise and of its operands is different from zero.
+
+
+
+
+<p>
+<hr><h3><a name="pdf-bit.bxor"><code>bit.bxor (&middot;&middot;&middot;)</code></a></h3>
+
+
+<p>
+Returns the bitwise exclusive or of its operands.
+
+
+
+
+
+
+
+<h2>5.8 - <a name="5.8">Input and Output Facilities</a></h2>
<p>
The I/O library provides two different styles for file manipulation.
@@ -7679,8 +8370,6 @@ The <code>mode</code> string can be any of the following:
</ul><p>
The <code>mode</code> string can also have a '<code>b</code>' 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&nbsp;C function <code>fopen</code>.
@@ -7770,6 +8459,11 @@ their handles are garbage collected,
but that takes an unpredictable amount of time to happen.
+<p>
+If <code>file</code> was created with <a href="#pdf-io.popen"><code>io.popen</code></a>,
+a sucessful close returns the exit status of the process.
+
+
<p>
@@ -7930,12 +8624,17 @@ To write other values,
use <a href="#pdf-tostring"><code>tostring</code></a> or <a href="#pdf-string.format"><code>string.format</code></a> before <code>write</code>.
+<p>
+In case of success, this function returns <code>file</code>.
+Otherwise it returns <b>nil</b> plus a string describing the error.
+
+
-<h2>5.8 - <a name="5.8">Operating System Facilities</a></h2>
+<h2>5.9 - <a name="5.9">Operating System Facilities</a></h2>
<p>
This library is implemented through table <a name="pdf-os"><code>os</code></a>.
@@ -8023,7 +8722,7 @@ and zero otherwise.
<p>
-<hr><h3><a name="pdf-os.exit"><code>os.exit ([code])</code></a></h3>
+<hr><h3><a name="pdf-os.exit"><code>os.exit ([code [, close])</code></a></h3>
<p>
@@ -8033,6 +8732,11 @@ to terminate the host program.
The default value for <code>code</code> is the success code.
+<p>
+If the optional second argument <code>close</code> is true,
+closes the Lua state before exiting.
+
+
<p>
@@ -8156,7 +8860,7 @@ which automatically removes the file when the program ends.
-<h2>5.9 - <a name="5.9">The Debug Library</a></h2>
+<h2>5.10 - <a name="5.10">The Debug Library</a></h2>
<p>
This library provides
@@ -8236,7 +8940,8 @@ or you can give a number as the value of <code>function</code>,
which means the function running at level <code>function</code> of the call stack
of the given thread:
level&nbsp;0 is the current function (<code>getinfo</code> itself);
-level&nbsp;1 is the function that called <code>getinfo</code>;
+level&nbsp;1 is the function that called <code>getinfo</code>
+(except for tail calls, which do not count on the stack);
and so on.
If <code>function</code> is a number larger than the number of active functions,
then <code>getinfo</code> returns <b>nil</b>.
@@ -8362,8 +9067,8 @@ When called without arguments,
<p>
When the hook is called, its first parameter is a string
describing the event that has triggered its call:
-<code>"call"</code>, <code>"return"</code> (or <code>"tail return"</code>,
-when simulating a return from a tail call),
+<code>"call"</code> (or <code>"tail call"</code>),
+<code>"return"</code>,
<code>"line"</code>, and <code>"count"</code>.
For line events,
the hook also gets the new line number as its second parameter.
@@ -8371,10 +9076,7 @@ Inside a hook,
you can call <code>getinfo</code> with level&nbsp;2 to get more information about
the running function
(level&nbsp;0 is the <code>getinfo</code> function,
-and level&nbsp;1 is the hook function),
-unless the event is <code>"tail return"</code>.
-In this case, Lua is only simulating the return,
-and a call to <code>getinfo</code> will return invalid data.
+and level&nbsp;1 is the hook function).
@@ -8425,7 +9127,10 @@ Otherwise, it returns the name of the upvalue.
<p>
-Returns a string with a traceback of the call stack.
+If <code>message</code> is present but is not a string,
+this function returns <code>message</code> without further processing.
+Otherwise,
+returns a string with a traceback of the call stack.
An optional <code>message</code> string is appended
at the beginning of the traceback.
An optional <code>level</code> number tells at which level
@@ -8529,6 +9234,17 @@ by issuing a different prompt.
<p>
+In case of unprotected errors in the script,
+the interpreter reports the error to the standard error stream.
+If the error object is a string,
+the interpreter adds a stack traceback to it.
+Otherwise, if the error object has a metamethod <code>__tostring</code>,
+the interpreter calls this metamethod to produce the final message.
+Finally, if the error object is <b>nil</b>,
+the interpreter does not report the error.
+
+
+<p>
If the global variable <a name="pdf-_PROMPT"><code>_PROMPT</code></a> contains a string,
then its value is used as the prompt.
Similarly, if the global variable <a name="pdf-_PROMPT2"><code>_PROMPT2</code></a> contains a string,
@@ -8577,8 +9293,8 @@ is a more portable solution.)
<p>
Here we list the incompatibilities that you may find when moving a program
-from Lua&nbsp;5.0 to Lua&nbsp;5.1.
-You can avoid most of the incompatibilities compiling Lua with
+from Lua&nbsp;5.1 to Lua&nbsp;5.2.
+You can avoid some incompatibilities compiling Lua with
appropriate options (see file <code>luaconf.h</code>).
However,
all these compatibility options will be removed in the next version of Lua.
@@ -8589,21 +9305,21 @@ all these compatibility options will be removed in the next version of Lua.
<ul>
<li>
-The vararg system changed from the pseudo-argument <code>arg</code> with a
-table with the extra arguments to the vararg expression.
-(See compile-time option <code>LUA_COMPAT_VARARG</code> in <code>luaconf.h</code>.)
+Lua identifiers cannot use locale-dependent letters.
</li>
<li>
-There was a subtle change in the scope of the implicit
-variables of the <b>for</b> statement and for the <b>repeat</b> statement.
+Doing a step in the garbage collector does not restart the collector
+if it has been stopped.
</li>
<li>
-The long string/long comment syntax (<code>[[<em>string</em>]]</code>)
-does not allow nesting.
-You can use the new syntax (<code>[=[<em>string</em>]=]</code>) in these cases.
-(See compile-time option <code>LUA_COMPAT_LSTR</code> in <code>luaconf.h</code>.)
+Weak tables with weak keys now perform like <em>ephemeron tables</em>.
+</li>
+
+<li>
+Threads do not have individual environments.
+All threads share a sinle fixed environment.
</li>
</ul>
@@ -8615,53 +9331,31 @@ You can use the new syntax (<code>[=[<em>string</em>]=]</code>) in these cases.
<ul>
<li>
-Function <code>string.gfind</code> was renamed <a href="#pdf-string.gmatch"><code>string.gmatch</code></a>.
-(See compile-time option <code>LUA_COMPAT_GFIND</code> in <code>luaconf.h</code>.)
-</li>
-
-<li>
-When <a href="#pdf-string.gsub"><code>string.gsub</code></a> is called with a function as its
-third argument,
-whenever this function returns <b>nil</b> or <b>false</b> the
-replacement string is the whole match,
-instead of the empty string.
-</li>
-
-<li>
-Function <code>table.setn</code> was deprecated.
-Function <code>table.getn</code> corresponds
-to the new length operator (<code>#</code>);
-use the operator instead of the function.
-(See compile-time option <code>LUA_COMPAT_GETN</code> in <code>luaconf.h</code>.)
+The debug library is not loaded by default.
+You must explicitly require it.
</li>
<li>
-Function <code>loadlib</code> was renamed <a href="#pdf-package.loadlib"><code>package.loadlib</code></a>.
-(See compile-time option <code>LUA_COMPAT_LOADLIB</code> in <code>luaconf.h</code>.)
+Functions <code>setfenv</code> and <code>getfenv</code> are deprecated.
+To set the environment of a Lua function,
+use lexical environments or the new function <a href="#pdf-loadin"><code>loadin</code></a>.
+(If you really need them,
+you may use their equivalents in the debug library.)
</li>
<li>
-Function <code>math.mod</code> was renamed <a href="#pdf-math.fmod"><code>math.fmod</code></a>.
-(See compile-time option <code>LUA_COMPAT_MOD</code> in <code>luaconf.h</code>.)
+Function <code>math.log10</code> is deprecated.
+Use <a href="#pdf-math.log"><code>math.log</code></a> with 10 as its second argument, instead.
</li>
<li>
-Functions <code>table.foreach</code> and <code>table.foreachi</code> are deprecated.
-You can use a for loop with <code>pairs</code> or <code>ipairs</code> instead.
+Function <code>table.maxn</code> is deprecated.
+Write it in Lua if you really need it.
</li>
<li>
-There were substantial changes in function <a href="#pdf-require"><code>require</code></a> due to
-the new module system.
-However, the new behavior is mostly compatible with the old,
-but <code>require</code> gets the path from <a href="#pdf-package.path"><code>package.path</code></a> instead
-of from <code>LUA_PATH</code>.
-</li>
-
-<li>
-Function <a href="#pdf-collectgarbage"><code>collectgarbage</code></a> has different arguments.
-Function <code>gcinfo</code> is deprecated;
-use <code>collectgarbage("count")</code> instead.
+Function <code>unpack</code> was moved into the table library
+and therefore must be called as <a href="#pdf-table.unpack"><code>table.unpack</code></a>.
</li>
</ul>
@@ -8673,36 +9367,38 @@ use <code>collectgarbage("count")</code> instead.
<ul>
<li>
-The <code>luaopen_*</code> functions (to open libraries)
-cannot be called directly,
-like a regular C function.
-They must be called through Lua,
-like a Lua function.
+Pseudoindex <code>LUA_GLOBALSINDEX</code> was deprecated.
+You may use the pseudoindex <a href="#pdf-LUA_ENVIRONINDEX"><code>LUA_ENVIRONINDEX</code></a> instead,
+if the C&nbsp;function does not change its standard environment.
+Otherwise, you should get the global environment from the registry
+(see <a href="#3.5">&sect;3.5</a>).
</li>
<li>
-Function <code>lua_open</code> was replaced by <a href="#lua_newstate"><code>lua_newstate</code></a> to
-allow the user to set a memory-allocation function.
-You can use <a href="#luaL_newstate"><code>luaL_newstate</code></a> from the standard library to
-create a state with a standard allocation function
-(based on <code>realloc</code>).
+Macros <a href="#lua_getglobal"><code>lua_getglobal</code></a>, <a href="#lua_setglobal"><code>lua_setglobal</code></a>, and <a href="#lua_register"><code>lua_register</code></a>
+now operate over the function environment instead of the global
+environment.
+(This is more consistent with how Lua manipulates global variables.)
</li>
<li>
-Functions <code>luaL_getn</code> and <code>luaL_setn</code>
-(from the auxiliary library) are deprecated.
-Use <a href="#lua_objlen"><code>lua_objlen</code></a> instead of <code>luaL_getn</code>
-and nothing instead of <code>luaL_setn</code>.
+<code>luaL_typerror</code> was renamed <a href="#luaL_typeerror"><code>luaL_typeerror</code></a>,
+to have a correct spelling.
</li>
<li>
-Function <code>luaL_openlib</code> was replaced by <a href="#luaL_register"><code>luaL_register</code></a>.
+Function <code>lua_cpcall</code> is deprecated.
+Use the new <code>cpcall</code> function defined in the registry instead
+(see <a href="#3.5">&sect;3.5</a>).
</li>
<li>
-Function <code>luaL_checkudata</code> now throws an error when the given value
-is not a userdata of the expected type.
-(In Lua&nbsp;5.0 it returned <code>NULL</code>.)
+Functions <code>lua_equal</code> and <code>lua_lessthan</code> are deprecated.
+Use the new <a href="#lua_compare"><code>lua_compare</code></a> with appropriate options instead.
+</li>
+
+<li>
+Function <code>lua_objlen</code> was renamed <a href="#lua_rawlen"><code>lua_rawlen</code></a>.
</li>
</ul>
@@ -8735,7 +9431,8 @@ Here is the complete syntax of Lua in extended BNF.
<b>for</b> namelist <b>in</b> explist <b>do</b> block <b>end</b> |
<b>function</b> funcname funcbody |
<b>local</b> <b>function</b> Name funcbody |
- <b>local</b> namelist [`<b>=</b>&acute; explist]
+ <b>local</b> namelist [`<b>=</b>&acute; explist] |
+ <b>in</b> exp <b>do</b> block <b>end</b>
laststat ::= <b>return</b> [explist] | <b>break</b>
@@ -8787,15 +9484,5 @@ Here is the complete syntax of Lua in extended BNF.
-
-<HR>
-<SMALL>
-Last update:
-Mon Aug 18 13:25:46 BRT 2008
-</SMALL>
-<!--
-Last change: revised for Lua 5.1.4
--->
-
</body></html>
diff --git a/doc/osi-certified-72x60.png b/doc/osi-certified-72x60.png
new file mode 100644
index 00000000..07df5f6e
--- /dev/null
+++ b/doc/osi-certified-72x60.png
Binary files differ
diff --git a/doc/readme.html b/doc/readme.html
index 38be6dbb..7640d3af 100644
--- a/doc/readme.html
+++ b/doc/readme.html
@@ -1,7 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
-<TITLE>Lua documentation</TITLE>
+<TITLE>Lua 5.2 readme</TITLE>
<LINK REL="stylesheet" TYPE="text/css" HREF="lua.css">
+<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=iso-8859-1">
+<STYLE TYPE="text/css">
+blockquote, .display {
+ color: black ;
+ padding: 8px ;
+ border: solid #a0a0a0 2px ;
+ background-color: #EFEFFF ;
+ margin-left: 0px ;
+}
+
+.review {
+ color: red ;
+}
+
+.external {
+ padding-right: 15px;
+ background: transparent url(external.png) no-repeat center right;
+}
+</STYLE>
</HEAD>
<BODY>
@@ -9,31 +29,324 @@
<HR>
<H1>
<A HREF="http://www.lua.org/"><IMG SRC="logo.gif" ALT="Lua" BORDER=0></A>
-Documentation
+Welcome to Lua 5.2
</H1>
-This is the documentation included in the source distribution of Lua 5.1.4.
+<A HREF="#about">about</A>
+&middot;
+<A HREF="#install">installation</A>
+&middot;
+<A HREF="#changes">changes</A>
+&middot;
+<A HREF="#license">license</A>
+&middot;
+<A HREF="contents.html">reference manual</A>
+<HR>
+<P>
-<UL>
-<LI><A HREF="contents.html">Reference manual</A>
-<LI><A HREF="lua.html">lua man page</A>
-<LI><A HREF="luac.html">luac man page</A>
-<LI><A HREF="../README">lua/README</A>
-<LI><A HREF="../etc/README">lua/etc/README</A>
-<LI><A HREF="../test/README">lua/test/README</A>
-</UL>
+<P>
+<IMG SRC="alert.png" ALIGN="absbottom">
+<EM>This is a work version of Lua 5.2.
+All details may change in the final version.</EM>
+
+<H2><A NAME="about">About Lua</A></H2>
+
+Lua is a powerful, fast, lightweight, embeddable scripting language
+developed by a
+<A HREF="http://www.lua.org/authors.html">team</A>
+at
+<A HREF="http://www.puc-rio.br/">PUC-Rio</A>,
+the Pontifical Catholic University of Rio de Janeiro in Brazil.
+Lua is
+<A HREF="#license">free software</A>
+used in many products and projects around the world.
+<P>
Lua's
<A HREF="http://www.lua.org/">official web site</A>
-contains updated documentation,
+provides complete information
+about Lua,
+including
+an
+<A HREF="http://www.lua.org/about.html">executive summary</A>
+and
+updated
+<A HREF="http://www.lua.org/docs.html">documentation</A>,
especially the
-<A HREF="http://www.lua.org/manual/5.1/">reference manual</A>.
+<A HREF="http://www.lua.org/manual/5.2/">reference manual</A>,
+which may differ slightly from the
+<A HREF="contents.html">local copy</A>
+distributed in this package.
+<P>
+
+<H2><A NAME="install">Installing Lua</A></H2>
+<DIV CLASS="review">how much detail?</DIV><P>
+
+Lua is distributed in source form.
+You need to build it before using it.
+This should be straightforward
+because
+Lua is implemented in pure ANSI C, and compiles unmodified in all known
+platforms that have an ANSI C compiler.
+Lua also compiles unmodified as C++.
+<P>
+
+The instructions below are for Unix-like platforms.
+There are also
+<A HREF="#other">instructions for other systems</A>.
+See below for
+<A HREF="#customization">customization options</A>.
+<P>
+
+<H3>Building Lua</H3>
+
+In most Unix-like platforms, simply do "make" with a suitable target.
+Here are the details.
+<P>
+
+<OL>
+<LI>
+Open a terminal window and move to
+the top-level directory, which is named lua-5.2.
+The Makefile there controls both the build process and the installation process.
+<P>
+<LI>
+ Do "make" and see if your platform is listed.
+ The platforms currently supported are:
+<BLOCKQUOTE>
+ aix ansi bsd freebsd generic linux macosx mingw posix solaris
+</BLOCKQUOTE>
+<P>
+ If your platform is listed, just do "make xxx", where xxx
+ is your platform name.
+<P>
+ If your platform is not listed, try the closest one or posix, generic,
+ ansi, in this order.
+<P>
+<LI>
+The compilation takes only a few moments
+and produces three files in the src directory:
+lua (the interpreter),
+luac (the compiler),
+and liblua.a (the library).
+<P>
+<LI>
+ If you want to check that Lua has been built correctly, do "make test"
+ after building Lua. This will run the interpreter on a "hello world"
+ Lua program from the test directory.
+ You may want to try other example programs in that directory.
+</OL>
+<P>
+
+<H3>Installing Lua</H3>
+ Once you have built Lua, you may want to install it in an official
+ place in your system. In this case, do "make install". The official
+ place and the way to install files are defined in Makefile. You'll
+ probably need the right permissions to install files.
+<P>
+
+ If you want to build and install Lua in one step, do <SPAN CLASS="display">"make xxx install"</SPAN>,
+ where xxx is your platform name.
+<P>
+
+ If you want to install Lua locally, then do "make local". This will
+ create directories bin, include, lib, man, and install Lua there as
+ follows:
+ <SPAN CLASS="review">review!</SPAN>
+<P>
+
+<DL CLASS="display">
+<DT>
+ bin:
+<DD>
+ lua luac
+<DT>
+ include:
+<DD>
+ lua.h luaconf.h lualib.h lauxlib.h lua.hpp
+<DT>
+ lib:
+<DD>
+ liblua.a
+<DT>
+ man/man1:
+<DD>
+ lua.1 luac.1
+</DL>
+
+ These are the only directories you need for development.
+<P>
+
+ There are man pages for
+ <A HREF="lua.html">lua</A> and
+ <A HREF="luac.html">luac</A>, in both nroff and html, and a
+ <A HREF="contents.html">reference manual</A> in html in doc, some sample code in test, and some
+ useful stuff in etc. You don't need these directories for development.
+<P>
+
+ If you want to install Lua locally, but in some other directory, do
+ "make install INSTALL_TOP=xxx", where xxx is your chosen directory.
+<P>
+
+<H3><A NAME="customization">Customization</A></H3>
+ Three kinds of things can be customized by editing a file:
+<UL>
+ <LI> Where and how to install Lua &ndash; edit Makefile.
+ <LI> How to build Lua &ndash; edit src/Makefile.
+ <LI> Lua features &ndash; edit src/luaconf.h.
+</UL>
+<P>
+
+ You don't actually need to edit the Makefiles because you may set the
+ relevant variables in the command line when invoking make.
+<P>
+
+ On the other hand, if you need to customize some Lua features, you'll need
+ to edit src/luaconf.h before building and installing Lua.
+ The edited file will be the one installed, and
+ it will be used by any Lua clients that you build, to ensure consistency.
+<P>
+
+ We strongly recommend that you enable dynamic loading. This is done
+ automatically for all platforms listed above that have this feature
+ and also for Windows.
+<P>
+
+<H3><A NAME="other">Building Lua on other systems</A></H3>
+
+ If you're not using the usual Unix tools, then the instructions for
+ building Lua depend on the compiler you use. You'll need to create
+ projects (or whatever your compiler uses) for building the library,
+ the interpreter, and the compiler, as follows:
+<P>
+<DL CLASS="display">
+<DT>
+library:
+<DD>
+ lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c
+ lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c
+ ltable.c ltm.c lundump.c lvm.c lzio.c
+ lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c
+ ltablib.c lstrlib.c loadlib.c linit.c
+<DT>
+interpreter:
+<DD>
+ library, lua.c
+<DT>
+compiler:
+<DD>
+ library, luac.c print.c
+</DL>
+
+ If you use Visual Studio .NET, you can use etc/luavs.bat in its
+ "Command Prompt".
+<P>
+
+ If all you want is to build the Lua interpreter, you may put all .c files
+ in a single project, except for luac.c and print.c. Or just use etc/all.c.
+<P>
+
+ To use Lua as a library in your own programs you'll need to know how to
+ create and use libraries with your compiler. Moreover, to dynamically load
+ C libraries for Lua you'll need to know how to create dynamic libraries
+ and you'll need to make sure that the Lua API functions are accessible to
+ those dynamic libraries &mdash; but you do <EM>not</EM> want to link the Lua library
+ into each dynamic library. For Unix, we recommend that the Lua library
+ be linked statically into the host program and its symbols exported for
+ dynamic linking; src/Makefile does this for the Lua interpreter.
+ For Windows, we recommend that the Lua library be DLL.
+<P>
+
+ As mentioned above, you may edit src/luaconf.h to customize
+ some features before building Lua.
+<P>
+
+<H2><A NAME="changes">Changes since Lua 5.1</A></H2>
+<DIV CLASS="review">incomplete!</DIV><P>
+
+Here are the main changes in Lua since its last release.
+The
+<A HREF="contents.html">reference manual</A>
+lists the
+<A HREF="manual.html#7">incompatibilities</A> that had to be introduced.
+<P>
+
+<H3>Language</H3>
+<UL>
+<LI> new lexical environments.
+<LI> hex escapes in strings.
+<LI> tables and strings honor the <CODE>__len</CODE> metamethod.
+</UL>
+
+<H3>Libraries</H3>
+<UL>
+<LI> new function <CODE>package.searchpath</CODE>.
+<LI> new metamethods <CODE>__pairs</CODE> and <CODE>__ipairs</CODE>.
+<LI> arguments for function called through <CODE>xpcall</CODE>.
+</UL>
+
+<H3>Implementation</H3>
+<UL>
+<LI> emergency garbage collector
+ (core forces a full collection when allocation fails).
+<LI> ephemeron tables
+ (tables with weak keys only visit value when key is accessible)
+<LI> handling of non-string error messages.
+<LI> udata with finalizers are kept in a separated list for the GC.
+<SPAN CLASS="review">relevant?</SPAN>
+</UL>
+
+
+<H2><A NAME="license">License</A></H2>
+<A HREF="http://www.opensource.org/docs/definition.php">
+<IMG SRC="osi-certified-72x60.png" ALIGN="right" BORDER="0" ALT="[osi certified]" xSTYLE="padding: 40px ;" hspace="10">
+</A>
+
+Lua is free software licensed under the terms of the
+<A HREF="http://www.opensource.org/licenses/mit-license.html">MIT license</A>
+reproduced below,
+and
+can be used for any purpose, including commercial purposes,
+at absolutely no cost without having to ask us.
+
+The only requirement is that if you do use Lua,
+then you should give us credit by including the appropriate copyright notice somewhere in your product or its documentation.
+
+For details and rationale, see
+<A HREF="http://www.lua.org/license.html" class="external">this</A>.
+<P>
+
+<BLOCKQUOTE>
+Copyright &copy; 1994-2010 Lua.org, PUC-Rio.
+<P>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+<P>
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+<P>
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+<P>
+</BLOCKQUOTE>
<P>
<HR>
<SMALL>
Last update:
-Tue Aug 12 14:46:07 BRT 2008
+Fri Jan 8 16:41:16 BRST 2010
</SMALL>
</BODY>