mirror of https://github.com/rusefi/lua.git
lhf's corrections.
This commit is contained in:
parent
d763b69740
commit
15791f93fe
332
manual.tex
332
manual.tex
|
@ -1,4 +1,4 @@
|
|||
% $Id: manual.tex,v 1.17 1996/04/29 18:50:08 roberto Exp roberto $
|
||||
% $Id: manual.tex,v 1.18 1996/06/18 20:08:40 roberto Exp roberto $
|
||||
|
||||
\documentstyle[fullpage,11pt,bnf]{article}
|
||||
|
||||
|
@ -28,13 +28,13 @@ Waldemar Celes Filho
|
|||
\vspace{1.0ex}\\
|
||||
%\small \tecgraf \ --- PUC-Rio\\
|
||||
\smallskip
|
||||
\small\tt roberto,lhf,celes@icad.puc-rio.br
|
||||
\small\tt lua@icad.puc-rio.br
|
||||
\vspace{2.0ex}\\
|
||||
%MCC 08/95 ---
|
||||
\tecgraf\ --- Departamento de Inform\'atica --- PUC-Rio
|
||||
}
|
||||
|
||||
\date{\small \verb$Date: 1996/04/29 18:50:08 $}
|
||||
\date{\small \verb$Date: 1996/06/18 20:08:40 $}
|
||||
|
||||
\maketitle
|
||||
|
||||
|
@ -42,9 +42,10 @@ Waldemar Celes Filho
|
|||
\noindent
|
||||
Lua is an extension programming language designed to be used
|
||||
as a configuration language for any program that needs one.
|
||||
This document describes Version \Version\ of the Lua programming language and
|
||||
the API that allows interaction between Lua programs and its host C program.
|
||||
It also presents some examples of using the main features of the system.
|
||||
This document describes version \Version\ of the Lua programming language and
|
||||
the API that allows interaction between Lua programs and their host C programs.
|
||||
The document also presents some examples of using the main
|
||||
features of the system.
|
||||
\end{abstract}
|
||||
|
||||
\vspace{4ex}
|
||||
|
@ -57,8 +58,8 @@ Lua \'e uma linguagem de extens\~ao projetada para ser usada como
|
|||
linguagem de configura\c{c}\~ao em qualquer programa que precise de
|
||||
uma.
|
||||
Este documento descreve a vers\~ao \Version\ da linguagem de
|
||||
programa\c{c}\~ao Lua e a Interface de Programa\c{c}\~ao que permite
|
||||
a intera\c{c}\~ao entre programas Lua e o programa C hospedeiro.
|
||||
programa\c{c}\~ao Lua e a Interface de Programa\c{c}\~ao (API) que permite
|
||||
a intera\c{c}\~ao entre programas Lua e programas C hospedeiros.
|
||||
O documento tamb\'em apresenta alguns exemplos de uso das principais
|
||||
ca\-racte\-r\'{\i}sticas do sistema.
|
||||
\end{quotation}
|
||||
|
@ -69,7 +70,7 @@ ca\-racte\-r\'{\i}sticas do sistema.
|
|||
Lua is an extension programming language designed to support
|
||||
general procedural programming features with data description
|
||||
facilities.
|
||||
It is supposed to be used as a configuration language for any
|
||||
It is intended to be used as a configuration language for any
|
||||
program that needs one.
|
||||
%Its main extensions are related to object-oriented facilities,
|
||||
%and fallbacks,
|
||||
|
@ -88,16 +89,13 @@ Through the use of C functions, Lua can be augmented to cope with
|
|||
rather different domains,
|
||||
thus creating customized programming languages sharing a syntactical framework.
|
||||
|
||||
Lua is free distribution software,
|
||||
Lua is free-distribution software,
|
||||
and provided as usual with no guarantees.
|
||||
The implementation described in this manual is available
|
||||
by anonymous ftp from
|
||||
\begin{verbatim}
|
||||
ftp.icad.puc-rio.br:/pub/lua/lua.tar.gz
|
||||
\end{verbatim}
|
||||
or by WWW (World Wide Web) from
|
||||
at the following URL's:
|
||||
\begin{verbatim}
|
||||
http://www.inf.puc-rio.br/~roberto/lua.html
|
||||
ftp://ftp.icad.puc-rio.br/pub/lua/lua.tar.gz
|
||||
\end{verbatim}
|
||||
|
||||
|
||||
|
@ -115,14 +113,15 @@ using functions in the library that implements Lua.
|
|||
|
||||
\Index{Global variables} do not need declaration.
|
||||
Any variable is assumed to be global unless explicitly declared local
|
||||
(see local declarations, Section~\ref{localvar}).
|
||||
(\see{localvar}).
|
||||
Before the first assignment, the value of a global variable is \nil.
|
||||
|
||||
The unit of execution of Lua is called a \Def{chunk}.
|
||||
The syntax for chunks is:%
|
||||
The syntax%
|
||||
\footnote{As usual, \rep{{\em a}} means 0 or more {\em a\/}'s,
|
||||
\opt{{\em a}} means an optional {\em a} and \oneormore{{\em a}} means
|
||||
one or more {\em a\/}'s.}
|
||||
for chunks is:
|
||||
\begin{Produc}
|
||||
\produc{chunk}{\rep{statement \Or function}}
|
||||
\end{Produc}%
|
||||
|
@ -138,7 +137,7 @@ of new functions%
|
|||
assignment to a global variable; \see{TypesSec}.}.
|
||||
|
||||
Chunks may be pre-compiled; see program \IndexVerb{luac} for details.
|
||||
Ascii files with chunk code and their binary pre-compiled forms
|
||||
Text files with chunks and their binary pre-compiled forms
|
||||
are interchangeable.
|
||||
Lua automatically detects the file type and acts accordingly.
|
||||
\index{pre-compilation}
|
||||
|
@ -174,7 +173,7 @@ However, by using fallbacks, the programmer may define operations
|
|||
for {\em userdata} values; \see{fallback}.
|
||||
|
||||
The type {\em table} implements \Index{associative arrays},
|
||||
that is, \Index{arrays} which can be indexed not only with numbers,
|
||||
that is, \Index{arrays} that can be indexed not only with numbers,
|
||||
but with any value (except \nil).
|
||||
Therefore, this type may be used not only to represent ordinary arrays,
|
||||
but also symbol tables, sets, records, etc.
|
||||
|
@ -192,14 +191,14 @@ It is important to notice that tables are objects, and not values.
|
|||
Variables cannot contain tables, only references to them.
|
||||
Assignment, parameter passing and returns always manipulate references
|
||||
to tables, and do not imply any kind of copy.
|
||||
Moreover, tables must be explicitly created before used;
|
||||
\see{tableconstructor}.
|
||||
Moreover, tables must be explicitly created before used
|
||||
(\see{tableconstructor}).
|
||||
|
||||
|
||||
|
||||
\section{The Language}
|
||||
|
||||
This section describes the lexis, syntax and semantics of Lua.
|
||||
This section describes the lexis, the syntax and the semantics of Lua.
|
||||
|
||||
|
||||
\subsection{Lexical Conventions} \label{lexical}
|
||||
|
@ -210,9 +209,10 @@ not beginning with a digit.
|
|||
The following words are reserved, and cannot be used as identifiers:
|
||||
\index{reserved words}
|
||||
\begin{verbatim}
|
||||
and do else elseif end
|
||||
function if local nil not
|
||||
or repeat return until then while
|
||||
and do else elseif
|
||||
end function if local
|
||||
nil not or repeat
|
||||
return then until while
|
||||
\end{verbatim}
|
||||
|
||||
The following strings denote other \Index{tokens}:
|
||||
|
@ -225,8 +225,8 @@ The following strings denote other \Index{tokens}:
|
|||
and can contain the C-like escape sequences
|
||||
\verb-'\n'-, \verb-'\t'- and \verb-'\r'-.
|
||||
Literal strings can also be delimited by matching \verb'[[ ... ]]'.
|
||||
Literals in this last form may run for several lines,
|
||||
may contain nested \verb'[[ ... ]]',
|
||||
Literals in this bracketed form may run for several lines,
|
||||
may contain nested \verb'[[ ... ]]' pairs,
|
||||
and do not interpret escape sequences.
|
||||
|
||||
\Index{Comments} start anywhere outside a string with a
|
||||
|
@ -248,8 +248,9 @@ that string to a number, following the usual rules.
|
|||
Conversely, whenever a number is used when a string is expected,
|
||||
that number is converted to a string, according to the following rule:
|
||||
if the number is an integer, it is written without exponent or decimal point;
|
||||
otherwise, it is formatted following the ``\verb'%g'''
|
||||
conversion specification of the standard \verb'printf' C function.
|
||||
otherwise, it is formatted following the \verb'%g'
|
||||
conversion specification of the \verb'printf' function in the
|
||||
standard C library.
|
||||
|
||||
|
||||
|
||||
|
@ -261,8 +262,8 @@ the system does not know how many values a function will return,
|
|||
or how many parameters it needs.
|
||||
Therefore, sometimes, a list of values must be {\em adjusted\/}, at run time,
|
||||
to a given length.
|
||||
If there are more values than are needed, the last values are thrown away.
|
||||
If there are more needs than values, the list is extended with as
|
||||
If there are more values than are needed, then the last values are thrown away.
|
||||
If there are more needs than values, then the list is extended with as
|
||||
many \nil's as needed.
|
||||
Adjustment occurs in multiple assignment and function calls.
|
||||
|
||||
|
@ -272,18 +273,18 @@ Adjustment occurs in multiple assignment and function calls.
|
|||
Lua supports an almost conventional set of \Index{statements}.
|
||||
The conventional commands include
|
||||
assignment, control structures and procedure calls.
|
||||
Non-conventional commands include table constructors,
|
||||
explained in Section \ref{tableconstructor},
|
||||
and local variable declarations.
|
||||
Non-conventional commands include table constructors
|
||||
(Section~\ref{tableconstructor}),
|
||||
and local variable declarations (Section~\ref{localvar}).
|
||||
|
||||
\subsubsection{Blocks}
|
||||
A \Index{block} is a list of statements, executed sequentially.
|
||||
Any statement can be optionally followed by a semicolon.
|
||||
A \Index{block} is a list of statements, which is executed sequentially.
|
||||
Any statement can be optionally followed by a semicolon:
|
||||
\begin{Produc}
|
||||
\produc{block}{\rep{stat sc} \opt{ret sc}}
|
||||
\produc{sc}{\opt{\ter{;}}}
|
||||
\end{Produc}%
|
||||
For syntactic reasons, a \Index{return statement} can only be written
|
||||
For syntactic reasons, a \IndexVerb{return} statement can only be written
|
||||
as the last statement of a block.
|
||||
This restriction also avoids some ``statement not reached'' errors.
|
||||
|
||||
|
@ -291,7 +292,7 @@ This restriction also avoids some ``statement not reached'' errors.
|
|||
The language allows \Index{multiple assignment}.
|
||||
Therefore, the syntax defines a list of variables on the left side,
|
||||
and a list of expressions on the right side.
|
||||
Both lists have their elements separated by commas.
|
||||
Both lists have their elements separated by commas:
|
||||
\begin{Produc}
|
||||
\produc{stat}{varlist1 \ter{=} explist1}
|
||||
\produc{varlist1}{var \rep{\ter{,} var}}
|
||||
|
@ -304,33 +305,34 @@ Therefore, it can be used to exchange two values, as in
|
|||
x, y = y, x
|
||||
\end{verbatim}
|
||||
Before the assignment, the list of values is {\em adjusted} to
|
||||
the length of the list of variables; \see{adjust}.
|
||||
the length of the list of variables (\see{adjust}).
|
||||
|
||||
A single name can denote a global or a local variable,
|
||||
or a formal parameter:
|
||||
\begin{Produc}
|
||||
\produc{var}{name}
|
||||
\end{Produc}%
|
||||
A single name can denote a global or a local variable,
|
||||
or a formal parameter.
|
||||
Square brackets are used to index a table:
|
||||
\begin{Produc}
|
||||
\produc{var}{var \ter{[} exp1 \ter{]}}
|
||||
\end{Produc}%
|
||||
Square brackets are used to index a table.
|
||||
If \verb'var' results in a table value,
|
||||
the field indexed by the expression value gets the assigned value.
|
||||
Otherwise, the fallback {\em settable} is called,
|
||||
with three parameters: the value of \verb'var',
|
||||
the value of expression, and the value being assigned to it;
|
||||
\see{fallback}.
|
||||
|
||||
The syntax \verb'var.NAME' is just syntactic sugar for
|
||||
\verb'var["NAME"]'.
|
||||
\begin{Produc}
|
||||
\produc{var}{var \ter{.} name}
|
||||
\end{Produc}%
|
||||
The syntax \verb'var.NAME' is just syntactic sugar for
|
||||
\verb'var["NAME"]'.
|
||||
|
||||
\subsubsection{Control Structures}
|
||||
The \Index{condition expression} of a control structure can return any value.
|
||||
All values different from \nil\ are considered true,
|
||||
while \nil\ is considered false.
|
||||
All values different from \nil\ are considered true;
|
||||
\nil\ is considered false.
|
||||
{\tt if}'s, {\tt while}'s and {\tt repeat}'s have the usual meaning.
|
||||
|
||||
\index{while-do}\index{repeat-until}\index{if-then-else}
|
||||
|
@ -351,7 +353,7 @@ the syntax for a \Index{return statement} is:
|
|||
|
||||
\subsubsection{Function Calls as Statements} \label{funcstat}
|
||||
Because of possible side-effects,
|
||||
function calls can be executed as statements.
|
||||
function calls can be executed as statements:
|
||||
\begin{Produc}
|
||||
\produc{stat}{functioncall}
|
||||
\end{Produc}%
|
||||
|
@ -368,7 +370,7 @@ The declaration may include an initial assignment:
|
|||
\produc{declist}{name \rep{\ter{,} name}}
|
||||
\produc{init}{\ter{=} explist1}
|
||||
\end{Produc}%
|
||||
If there is an initial assignment, it has the same semantics
|
||||
If present, an initial assignment has the same semantics
|
||||
of a multiple assignment.
|
||||
Otherwise, all variables are initialized with \nil.
|
||||
|
||||
|
@ -395,23 +397,23 @@ These operators are the binary
|
|||
and the unary \verb'-'.
|
||||
If the operands are numbers, or strings that can be converted to
|
||||
numbers, according to the rules given in Section \ref{coercion},
|
||||
all operations but exponentiation have the usual meaning.
|
||||
Otherwise, the fallback ``arith'' is called; \see{fallback}.
|
||||
then all operations but exponentiation have the usual meaning.
|
||||
Otherwise, the fallback ``arith'' is called (\see{fallback}).
|
||||
An exponentiation always calls this fallback.
|
||||
The standard mathematical library redefines this fallback,
|
||||
giving the expected meaning to \Index{exponentiation};
|
||||
\see{mathlib}.
|
||||
giving the expected meaning to \Index{exponentiation}
|
||||
(\see{mathlib}).
|
||||
|
||||
\subsubsection{Relational Operators}
|
||||
Lua offers the following \Index{relational operators}:
|
||||
Lua provides the following \Index{relational operators}:
|
||||
\begin{verbatim}
|
||||
< > <= >= ~= ==
|
||||
\end{verbatim}
|
||||
All return \nil\ as false and a value different from \nil\
|
||||
All these return \nil\ as false and a value different from \nil\
|
||||
(actually the number 1) as true.
|
||||
|
||||
Equality first compares the types of its operands.
|
||||
If they are different, the result is \nil.
|
||||
If they are different, then the result is \nil.
|
||||
Otherwise, their values are compared.
|
||||
Numbers and strings are compared in the usual way.
|
||||
Tables, CFunctions, and functions are compared by reference,
|
||||
|
@ -419,13 +421,13 @@ that is, two tables are considered equal only if they are the same table.
|
|||
The operator \verb'~=' is exactly the negation of equality (\verb'==').
|
||||
|
||||
The other operators work as follows.
|
||||
If both arguments are numbers, they are compared as such.
|
||||
If both arguments are numbers, then they are compared as such.
|
||||
Otherwise, if both arguments can be converted to strings,
|
||||
their values are compared using lexicographical order.
|
||||
Otherwise, the fallback ``order'' is called; \see{fallback}.
|
||||
Otherwise, the ``order'' fallback is called (\see{fallback}).
|
||||
|
||||
\subsubsection{Logical Operators}
|
||||
All logical operators, like control structures,
|
||||
Like control structures, all logical operators
|
||||
consider \nil\ as false and anything else as true.
|
||||
The \Index{logical operators} are:
|
||||
\index{and}\index{or}\index{not}
|
||||
|
@ -439,9 +441,9 @@ the second operand is evaluated only if necessary.
|
|||
\subsubsection{Concatenation}
|
||||
Lua offers a string \Index{concatenation} operator,
|
||||
denoted by ``\IndexVerb{..}''.
|
||||
If operands are strings or numbers, they are converted to
|
||||
If operands are strings or numbers, then they are converted to
|
||||
strings according to the rules in Section \ref{coercion}.
|
||||
Otherwise, the fallback ``concat'' is called; \see{fallback}.
|
||||
Otherwise, the fallback ``concat'' is called (\see{fallback}).
|
||||
|
||||
\subsubsection{Precedence}
|
||||
\Index{Operator precedence} follows the table below,
|
||||
|
@ -455,7 +457,8 @@ from the lower to the higher priority:
|
|||
not - (unary)
|
||||
^
|
||||
\end{verbatim}
|
||||
All binary operators are left associative, except for \verb'^',
|
||||
All binary operators are left associative,
|
||||
except for \verb'^' (exponentiation),
|
||||
which is right associative.
|
||||
|
||||
\subsubsection{Table Constructors} \label{tableconstructor}
|
||||
|
@ -478,7 +481,7 @@ The form {\em lfieldlist1} is used to initialize lists.
|
|||
\end{Produc}%
|
||||
The expressions in the list are assigned to consecutive numerical indexes,
|
||||
starting with 1.
|
||||
As an example:
|
||||
For example:
|
||||
\begin{verbatim}
|
||||
a = {"v1", "v2", 34}
|
||||
\end{verbatim}
|
||||
|
@ -491,12 +494,12 @@ is equivalent to:
|
|||
a = temp
|
||||
\end{verbatim}
|
||||
|
||||
The next form initializes named fields in a table.
|
||||
The next form initializes named fields in a table:
|
||||
\begin{Produc}
|
||||
\produc{ffieldlist1}{ffield \rep{\ter{,} ffield} \opt{\ter{,}}}
|
||||
\produc{ffield}{name \ter{=} exp}
|
||||
\end{Produc}%
|
||||
As an example:
|
||||
For example:
|
||||
\begin{verbatim}
|
||||
a = {x = 1, y = 3}
|
||||
\end{verbatim}
|
||||
|
@ -516,8 +519,8 @@ A \Index{function call} has the following syntax:
|
|||
\end{Produc}%
|
||||
Here, \verb'var' can be any variable (global, local, indexed, etc).
|
||||
If its type is {\em function\/} or {\em CFunction\/},
|
||||
this function is called.
|
||||
Otherwise, the fallback ``function'' is called,
|
||||
then this function is called.
|
||||
Otherwise, the ``function'' fallback is called,
|
||||
having as first parameter the value of \verb'var',
|
||||
and then the original call parameters.
|
||||
|
||||
|
@ -553,10 +556,10 @@ If the function is called as a statement (\see{funcstat}),
|
|||
its return list is adjusted to 0.
|
||||
If the function is called in a place that needs a single value
|
||||
(syntactically denoted by the non-terminal \verb'exp1'),
|
||||
its return list is adjusted to 1.
|
||||
then its return list is adjusted to 1.
|
||||
If the function is called in a place that can hold many values
|
||||
(syntactically denoted by the non-terminal \verb'exp'),
|
||||
no adjustment is done.
|
||||
then no adjustment is made.
|
||||
|
||||
|
||||
\subsection{\Index{Function Definitions}}
|
||||
|
@ -582,15 +585,15 @@ initialized with the argument values.
|
|||
|
||||
Results are returned using the \verb'return' statement (\see{return}).
|
||||
If control reaches the end of a function without a return instruction,
|
||||
the function returns with no results.
|
||||
then the function returns with no results.
|
||||
|
||||
There is a special syntax for definition of \Index{methods},
|
||||
that is, functions which have an extra parameter \Def{self}.
|
||||
There is a special syntax for defining \Index{methods},
|
||||
that is, functions that have an extra parameter \Def{self}.
|
||||
\begin{Produc}
|
||||
\produc{function}{\rwd{function} var \ter{:} name \ter{(} \opt{parlist1}
|
||||
\ter{)} block \rwd{end}}
|
||||
\end{Produc}%
|
||||
A declaration like
|
||||
Thus, a declaration like
|
||||
\begin{verbatim}
|
||||
function v:f (...)
|
||||
...
|
||||
|
@ -611,13 +614,13 @@ the variable \verb'v' must have been previously initialized with a table value.
|
|||
|
||||
Lua provides a powerful mechanism to extend its semantics,
|
||||
called \Def{fallbacks}.
|
||||
Basically, a fallback is a programmer defined function
|
||||
which is called whenever Lua does not know how to proceed.
|
||||
A fallback is a programmer defined function
|
||||
that is called whenever Lua does not know how to proceed.
|
||||
|
||||
Lua supports the following fallbacks,
|
||||
identified by the given strings:
|
||||
\begin{description}
|
||||
\item[``arith'']\index{arithmetic fallback}
|
||||
\item[``arith'':]\index{arithmetic fallback}
|
||||
called when an arithmetic operation is applied to non numerical operands,
|
||||
or when the binary \verb'^' operation is called.
|
||||
It receives three arguments:
|
||||
|
@ -628,7 +631,7 @@ and one of the following strings describing the offended operator:
|
|||
\end{verbatim}
|
||||
Its return value is the final result of the arithmetic operation.
|
||||
The default function issues an error.
|
||||
\item[``order'']\index{order fallback}
|
||||
\item[``order'':]\index{order fallback}
|
||||
called when an order comparison is applied to non numerical or
|
||||
non string operands.
|
||||
It receives three arguments:
|
||||
|
@ -639,40 +642,40 @@ one of the following strings describing the offended operator:
|
|||
\end{verbatim}
|
||||
Its return value is the final result of the comparison operation.
|
||||
The default function issues an error.
|
||||
\item[``concat'']\index{concatenation fallback}
|
||||
\item[``concat'':]\index{concatenation fallback}
|
||||
called when a concatenation is applied to non string operands.
|
||||
It receives the two operands as arguments.
|
||||
Its return value is the final result of the concatenation operation.
|
||||
The default function issues an error.
|
||||
\item[``index'']\index{index fallback}
|
||||
\item[``index'':]\index{index fallback}
|
||||
called when Lua tries to retrieve the value of an index
|
||||
not present in a table.
|
||||
It receives as arguments the table and the index.
|
||||
Its return value is the final result of the indexing operation.
|
||||
The default function returns nil.
|
||||
\item[``getglobal'']\index{index getglobal}
|
||||
\item[``getglobal'':]\index{index getglobal}
|
||||
called when Lua tries to retrieve the value of a global variable
|
||||
which has a nil value (or which has not been initialized).
|
||||
It receives as argument the name of the variable.
|
||||
Its return value is the final result of the expression.
|
||||
The default function returns nil.
|
||||
\item[``gettable'']\index{gettable fallback}
|
||||
\item[``gettable'':]\index{gettable fallback}
|
||||
called when Lua tries to index a non table value.
|
||||
It receives as arguments the non table value and the index.
|
||||
Its return value is the final result of the indexing operation.
|
||||
The default function issues an error.
|
||||
\item[``settable'']\index{settable fallback}
|
||||
\item[``settable'':]\index{settable fallback}
|
||||
called when Lua tries to assign indexed a non table value.
|
||||
It receives as arguments the non table value,
|
||||
the index, and the assigned value.
|
||||
The default function issues an error.
|
||||
\item[``function'']\index{function falback}
|
||||
\item[``function'':]\index{function falback}
|
||||
called when Lua tries to call a non function value.
|
||||
It receives as arguments the non function value and the
|
||||
arguments given in the original call.
|
||||
Its return values are the final results of the call operation.
|
||||
The default function issues an error.
|
||||
\item[``gc'']
|
||||
\item[``gc'':]
|
||||
called during garbage collection.
|
||||
It receives as argument the table being collected.
|
||||
After each run of the collector this function is called with argument nil.
|
||||
|
@ -681,15 +684,15 @@ it must be used with great care,
|
|||
and programmers should avoid the creation of new objects
|
||||
(tables or strings) in this function.
|
||||
The default function does nothing.
|
||||
\item[``error'']\index{error fallback}
|
||||
\item[``error'':]\index{error fallback}
|
||||
called when an error occurs.
|
||||
It receives as argument a string describing the error.
|
||||
The default function prints the message on the standard error output.
|
||||
\end{description}
|
||||
|
||||
The function \IndexVerb{setfallback} is used to change a fallback action.
|
||||
Its first argument is a string describing the fallback,
|
||||
and the second the new function to be called.
|
||||
The function \IndexVerb{setfallback} is used to change a fallback function.
|
||||
Its first argument is the name of a fallback condition,
|
||||
and the second argument is the new function to be called.
|
||||
It returns the old function for the given fallback.
|
||||
|
||||
Section \ref{exfallback} shows an example of the use of fallbacks.
|
||||
|
@ -700,18 +703,18 @@ Section \ref{exfallback} shows an example of the use of fallbacks.
|
|||
Because Lua is an extension language,
|
||||
all Lua actions start from C code calling a function from the Lua library.
|
||||
Whenever an error occurs during Lua compilation or execution,
|
||||
an error fallback function is called,
|
||||
an ``error'' fallback function is called,
|
||||
and then the corresponding function from the library
|
||||
(\verb'lua_dofile', \verb'lua_dostring',
|
||||
\verb'lua_call', and \verb'lua_callfunction')
|
||||
is terminated returning an error condition.
|
||||
|
||||
The only argument to the error fallback function is a string describing
|
||||
the error.
|
||||
The only argument to the ``error'' fallback function is a string
|
||||
describing the error.
|
||||
The standard I/O library redefines this fallback,
|
||||
using the debug facilities (\see{debugI},
|
||||
in order to print some extra informations,
|
||||
like the stack of calls.
|
||||
using the debug facilities (\see{debugI}),
|
||||
in order to print some extra information,
|
||||
like the call stack.
|
||||
For more information about an error,
|
||||
the Lua program can include the compilation pragma \verb'$debug'.
|
||||
\index{debug pragma}\label{pragma}
|
||||
|
@ -719,12 +722,11 @@ This pragma must be written in a line by itself.
|
|||
When an error occurs in a program compiled with this option,
|
||||
the error routine is able to print also the lines where the calls
|
||||
(and the error) were made.
|
||||
If needed, it is possible to change the error fallback routine;
|
||||
\see{fallback}.
|
||||
If needed, it is possible to change the ``error'' fallback routine
|
||||
(\see{fallback}).
|
||||
|
||||
Lua code can generate an error by calling the function \verb'error'.
|
||||
Its optional parameter is a string,
|
||||
which is used as the error message.
|
||||
Lua code can generate an error by calling the built-in
|
||||
function \verb'error' (\see{pdf-error}).
|
||||
|
||||
|
||||
\section{The Application Program Interface}
|
||||
|
@ -741,24 +743,24 @@ The API functions can be classified in the following categories:
|
|||
\item C functions to be called by Lua;
|
||||
\item references to Lua Objects.
|
||||
\end{enumerate}
|
||||
All API functions are declared in the file \verb'lua.h'.
|
||||
All API functions are declared in the header file \verb'lua.h'.
|
||||
|
||||
\subsection{Executing Lua Code}
|
||||
A host program can execute Lua chunks written in a file or in a string,
|
||||
using the following functions:
|
||||
\Deffunc{lua_dofile}\Deffunc{lua_dostring}
|
||||
\begin{verbatim}
|
||||
int lua_dofile (char *filename);
|
||||
int lua_dostring (char *string);
|
||||
int lua_dofile (char *filename);
|
||||
int lua_dostring (char *string);
|
||||
\end{verbatim}
|
||||
Both functions return an error code:
|
||||
0, in case of success; non zero, in case of errors.
|
||||
More specifically, \verb'lua_dofile' returns 2 if for any reason
|
||||
it could not open the file.
|
||||
The function \verb'lua_dofile', if called with argument NULL (0),
|
||||
executes the ``file'' {\tt stdin}.
|
||||
The function \verb'lua_dofile', if called with argument \verb'NULL' (0),
|
||||
executes the {\tt stdin} stream.
|
||||
Function \verb'lua_dofile' is also able to execute pre-compiled chunks.
|
||||
It detects whether the file is text or not,
|
||||
It automatically detects whether the file is text or binary,
|
||||
and loads it accordingly (see program \IndexVerb{luac}).
|
||||
|
||||
\subsection{Converting Values between C and Lua} \label{valuesCLua}
|
||||
|
@ -770,8 +772,8 @@ Values of type \verb'lua_Object' have no meaning outside Lua;
|
|||
for instance,
|
||||
the comparisson of two \verb"lua_Object's" is of no significance.
|
||||
|
||||
Lua has automatic memory management, and garbage collection.
|
||||
Because of that, a \verb'lua_Object' has a limited scope,
|
||||
Because Lua has automatic memory management and garbage collection,
|
||||
a \verb'lua_Object' has a limited scope,
|
||||
and is only valid inside the {\em block\/} where it was created.
|
||||
A C function called from Lua is a block,
|
||||
and its parameters are valid only until its end.
|
||||
|
@ -815,9 +817,8 @@ and 0 otherwise.
|
|||
The function \verb'lua_isnumber' accepts numbers and numerical strings,
|
||||
\verb'lua_isstring' accepts strings and numbers (\see{coercion}),
|
||||
and \verb'lua_isfunction' accepts Lua and C functions.
|
||||
|
||||
The function \verb'lua_type' can be used to distinguish between
|
||||
different kinds of user data; see below.
|
||||
different kinds of user data.
|
||||
|
||||
To translate a value from type \verb'lua_Object' to a specific C type,
|
||||
the programmer can use:
|
||||
|
@ -866,15 +867,15 @@ plus the macro:
|
|||
void lua_pushuserdata (void *u);
|
||||
\end{verbatim}
|
||||
All of them receive a C value,
|
||||
convert it to a correspondent \verb'lua_Object',
|
||||
convert it to a corresponding \verb'lua_Object',
|
||||
and leave the result on the top of the Lua stack,
|
||||
where it can be assigned to a Lua variable,
|
||||
passed as paramenter to a Lua function, etc (see below). \label{pushing}
|
||||
passed as parameter to a Lua function, etc. \label{pushing}
|
||||
|
||||
User data can have different tags,
|
||||
whose semantics are defined by the host program.
|
||||
Any positive integer can be used to tag a user data.
|
||||
When a user data is retrieved,
|
||||
Any positive integer can be used to tag a user datum.
|
||||
When a user datum is retrieved,
|
||||
the function \verb'lua_type' can be used to get its tag.
|
||||
|
||||
To complete the set,
|
||||
|
@ -889,13 +890,13 @@ void lua_pushobject (lua_Object object);
|
|||
|
||||
\subsection{Manipulating Lua Objects}
|
||||
To read the value of any global Lua variable,
|
||||
one can use the function:
|
||||
one uses the function:
|
||||
\Deffunc{lua_getglobal}
|
||||
\begin{verbatim}
|
||||
lua_Object lua_getglobal (char *varname);
|
||||
\end{verbatim}
|
||||
As in Lua, if the value of the global is \nil,
|
||||
the \verb'"getglobal"' fallback is called.
|
||||
then the ``getglobal'' fallback is called.
|
||||
|
||||
To store a value previously pushed onto the stack in a global variable,
|
||||
there is the function:
|
||||
|
@ -914,7 +915,7 @@ expects on the stack a table and an index,
|
|||
and returns the contents of the table at that index.
|
||||
As in Lua, if the first object is not a table,
|
||||
or the index is not present in the table,
|
||||
the correspondent fallback is called.
|
||||
the corresponding fallback is called.
|
||||
|
||||
%For compatibility with previous versions of the API,
|
||||
%the following macros are supported:
|
||||
|
@ -934,20 +935,20 @@ and then call the function:
|
|||
\begin{verbatim}
|
||||
void lua_storesubscript (void);
|
||||
\end{verbatim}
|
||||
Again, the correspondent fallback is called if needed.
|
||||
Again, the corresponding fallback is called if needed.
|
||||
|
||||
Finally, the function
|
||||
\Deffunc{lua_createtable}
|
||||
\begin{verbatim}
|
||||
lua_Object lua_createtable (void);
|
||||
\end{verbatim}
|
||||
creates a new table.
|
||||
creates and returns a new table.
|
||||
|
||||
{\em Please Notice:\/}
|
||||
Most functions from the Lua library receive parameters through the stack.
|
||||
Because other functions also use the stack,
|
||||
Most functions from the Lua library receive parameters through Lua's stack.
|
||||
Because other functions also use this stack,
|
||||
it is important that these
|
||||
parameters be pushed just before the correspondent call,
|
||||
parameters be pushed just before the corresponding call,
|
||||
without intermediate calls to the Lua library.
|
||||
For instance, suppose the user wants the value of \verb'a[i]'.
|
||||
A simplistic solution would be:
|
||||
|
@ -1064,7 +1065,7 @@ In this way, it is possible to write functions that work with
|
|||
a variable number of parameters.
|
||||
|
||||
To return values, a C function just pushes them onto the stack,
|
||||
in direct order; \see{valuesCLua}.
|
||||
in direct order (\see{valuesCLua}).
|
||||
Like a Lua function, a C function called by Lua can also return
|
||||
many results.
|
||||
|
||||
|
@ -1073,7 +1074,7 @@ Section~\ref{exCFunction} presents an example of a CFunction.
|
|||
|
||||
\subsection{References to Lua Objects}
|
||||
|
||||
As already noted, \verb'lua_Object's are volatile.
|
||||
As noted in Section~\ref{LuacallC}, \verb'lua_Object's are volatile.
|
||||
If the C code needs to keep a \verb'lua_Object'
|
||||
outside block boundaries,
|
||||
it must create a \Def{reference} to the object.
|
||||
|
@ -1087,7 +1088,7 @@ void lua_pushref (int ref);
|
|||
void lua_unref (int ref);
|
||||
\end{verbatim}
|
||||
The function \verb'lua_ref' creates a reference
|
||||
to the object which is on the top of the stack,
|
||||
to the object that is on the top of the stack,
|
||||
and returns this reference.
|
||||
If \verb'lock' is true, the object is {\em locked}:
|
||||
that means the object will not be garbage collected.
|
||||
|
@ -1095,9 +1096,9 @@ Notice that an unlocked reference may be garbage collected.
|
|||
Whenever the referenced object is needed,
|
||||
a call to \verb'lua_getref'
|
||||
returns a handle to it,
|
||||
while \verb'lua_pushref' pushes the object on the stack.
|
||||
whereas \verb'lua_pushref' pushes the object on the stack.
|
||||
If the object has been collected,
|
||||
\verb'lua_getref' returns \verb'LUA_NOOBJECT',
|
||||
then \verb'lua_getref' returns \verb'LUA_NOOBJECT',
|
||||
and \verb'lua_pushobject' issues an error.
|
||||
|
||||
When a reference is no longer needed,
|
||||
|
@ -1112,7 +1113,7 @@ Most of them provide features that allows some degree of
|
|||
\Index{reflexivity} in the language.
|
||||
Some of these features cannot be simulated with the rest of the
|
||||
Language nor with the standard Lua API.
|
||||
Others are just helpful interfaces to common API functions.
|
||||
Others are just convenient interfaces to common API functions.
|
||||
|
||||
The libraries, on the other hand, provide useful routines
|
||||
that are implemented directly through the standard API.
|
||||
|
@ -1134,10 +1135,10 @@ declared in \verb-lualib.h-.
|
|||
|
||||
\subsubsection*{{\tt dofile (filename)}}\Deffunc{dofile}
|
||||
This function receives a file name,
|
||||
opens it and executes its contents as a Lua chunk,
|
||||
opens it, and executes its contents as a Lua chunk,
|
||||
or as pre-compiled chunks.
|
||||
When called without arguments,
|
||||
it executes the contents of the standard input.
|
||||
it executes the contents of the standard input (\verb'stdin').
|
||||
It returns 1 if there are no errors, \nil\ otherwise.
|
||||
It issues an error when called with a non string argument.
|
||||
|
||||
|
@ -1168,7 +1169,7 @@ See Section \ref{exnext} for an example of the use of this function.
|
|||
|
||||
\subsubsection*{{\tt nextvar (name)}}\Deffunc{nextvar}
|
||||
This function is similar to the function \verb'next',
|
||||
but it iterates over the global variables.
|
||||
but iterates over the global variables.
|
||||
Its single argument is the name of a global variable,
|
||||
or \nil\ to get a first name.
|
||||
Similarly to \verb'next', it returns the name of another variable
|
||||
|
@ -1193,7 +1194,7 @@ See Section~\ref{libio} for functions for formatted output.
|
|||
This function receives one argument,
|
||||
and tries to convert it to a number.
|
||||
If the argument is already a number or a string convertible
|
||||
to a number (\see{coercion}), it returns that number;
|
||||
to a number (\see{coercion}), then it returns that number;
|
||||
otherwise, it returns \nil.
|
||||
|
||||
\subsubsection*{{\tt type (v)}}\Deffunc{type}
|
||||
|
@ -1217,7 +1218,7 @@ and between C functions and Lua functions.
|
|||
This function issues an {\em ``assertion failed!''} error
|
||||
when its argument is \nil.
|
||||
|
||||
\subsubsection*{{\tt error (message)}}\Deffunc{error}
|
||||
\subsubsection*{{\tt error (message)}}\Deffunc{error}\label{pdf-error}
|
||||
This function issues an error message and terminates
|
||||
the last called function from the library
|
||||
(\verb'lua_dofile', \verb'lua_dostring', \ldots).
|
||||
|
@ -1265,9 +1266,9 @@ Returns another string, which is a substring of \verb's',
|
|||
starting at \verb'i' and runing until \verb'j'.
|
||||
If \verb'j' is absent,
|
||||
it is assumed to be equal to the length of \verb's'.
|
||||
Particularly, the call \verb'strsub(s,1,j)' returns a prefix of \verb's'
|
||||
In particular, the call \verb'strsub(s,1,j)' returns a prefix of \verb's'
|
||||
with length \verb'j',
|
||||
while the call \verb'strsub(s,i)' returns a suffix of \verb's',
|
||||
whereas the call \verb'strsub(s,i)' returns a suffix of \verb's',
|
||||
starting at \verb'i'.
|
||||
|
||||
\subsubsection*{{\tt strlower (s)}}\Deffunc{strlower}
|
||||
|
@ -1282,7 +1283,7 @@ All other characters are left unchanged.
|
|||
|
||||
\subsubsection*{{\tt ascii (s, [i])}}\Deffunc{ascii}
|
||||
Returns the ascii code of the character \verb's[i]'.
|
||||
If \verb'i' is absent, it is assumed to be 1.
|
||||
If \verb'i' is absent, then it is assumed to be 1.
|
||||
|
||||
\subsubsection*{{\tt format (formatstring, e1, e2, \ldots)}}\Deffunc{format}
|
||||
\label{format}
|
||||
|
@ -1290,7 +1291,7 @@ This function returns a formated version of its variable number of arguments
|
|||
following the description given in its first argument (which must be a string).
|
||||
The format string follows the same rules as the \verb'printf' family of
|
||||
standard C functions.
|
||||
The only differencies are that the options/modifiers
|
||||
The only differences are that the options/modifiers
|
||||
\verb'*', \verb'l', \verb'L', \verb'n', \verb'p',
|
||||
and \verb'h' are not supported,
|
||||
and there is an extra option, \verb'q'.
|
||||
|
@ -1303,7 +1304,7 @@ are correctly escaped when written.
|
|||
The options \verb'c', \verb'd', \verb'E', \verb'e', \verb'f',
|
||||
\verb'g' \verb'i', \verb'o', \verb'u', \verb'X', and \verb'x' all
|
||||
expect a number argument,
|
||||
while \verb'q' and \verb's' expect a string.
|
||||
whereas \verb'q' and \verb's' expect a string.
|
||||
|
||||
|
||||
\subsection{Mathematical Functions} \label{mathlib}
|
||||
|
@ -1325,7 +1326,7 @@ max min mod sin sqrt tan random randomseed
|
|||
Most of them
|
||||
are only interfaces to the homonymous functions in the C library,
|
||||
except that, for the trigonometric functions,
|
||||
all angles are expressed in degrees.
|
||||
all angles are expressed in degrees, not radians.
|
||||
|
||||
The function \verb'max' returns the maximum
|
||||
value of its numeric arguments.
|
||||
|
@ -1343,7 +1344,7 @@ $[0,1)$.
|
|||
|
||||
\subsection{I/O Facilities} \label{libio}
|
||||
|
||||
All I/O operations in Lua are done over two {\em current} files,
|
||||
All I/O operations in Lua are done over two {\em current} files:
|
||||
one for reading and one for writing.
|
||||
Initially, the current input file is \verb'stdin',
|
||||
and the current output file is \verb'stdout'.
|
||||
|
@ -1489,15 +1490,15 @@ with an optional \verb-code-,
|
|||
to terminate the program.
|
||||
|
||||
|
||||
\section{The Debuger Interface} \label{debugI}
|
||||
\section{The Debugger Interface} \label{debugI}
|
||||
|
||||
Lua has no built in debuger facilities.
|
||||
Lua has no built-in debugger facilities.
|
||||
Instead, it offers a special interface,
|
||||
by means of functions and {\em hooks},
|
||||
which allows the construction of different
|
||||
kinds of debugers, profiles, and other tools
|
||||
that need ``inside'' information from the interpreter.
|
||||
This interface is declared in the file \verb'luadebug.h'.
|
||||
kinds of debugers, profilers, and other tools
|
||||
that need ``inside information'' from the interpreter.
|
||||
This interface is declared in the header file \verb'luadebug.h'.
|
||||
|
||||
\subsection{Stack and Function Information}
|
||||
|
||||
|
@ -1529,9 +1530,9 @@ char *lua_getobjname (lua_Object o, char **name);
|
|||
\verb'lua_funcinfo' gives the file name and the line where the
|
||||
given function has been defined.
|
||||
If the ``function'' is in fact the main code of a chunk,
|
||||
\verb'linedefined' is 0.
|
||||
then \verb'linedefined' is 0.
|
||||
If the function is a C function,
|
||||
\verb'linedefined' is -1, and \verb'filename' is \verb'"(C)"'.
|
||||
then \verb'linedefined' is -1, and \verb'filename' is \verb'"(C)"'.
|
||||
|
||||
The function \verb'lua_currentline' gives the current line where
|
||||
a given function is executing.
|
||||
|
@ -1550,10 +1551,10 @@ function is a fallback.
|
|||
If so, it returns the string \verb'"fallback"',
|
||||
and \verb'name' is set to point to the fallback name.
|
||||
Otherwise, if the given function is the value of a global variable,
|
||||
\verb'lua_getobjname' returns the string \verb'"global"',
|
||||
then \verb'lua_getobjname' returns the string \verb'"global"',
|
||||
while \verb'name' points to the variable name.
|
||||
If the given function is neither a fallback nor a global variable,
|
||||
\verb'lua_getobjname' returns the empty string,
|
||||
then \verb'lua_getobjname' returns the empty string,
|
||||
and \verb'name' is set to \verb'NULL'.
|
||||
|
||||
\subsection{Manipulating Local Variables}
|
||||
|
@ -1579,15 +1580,15 @@ or if the activation record has no debug information,
|
|||
The function \verb'lua_setlocal' sets the local variable
|
||||
\verb'local_number' to the value previously pushed on the stack
|
||||
(\see{valuesCLua}).
|
||||
If the function succeeds it returns 1.
|
||||
If the function succeeds, then it returns 1.
|
||||
If \verb'local_number' is greater than the number
|
||||
of active local variables,
|
||||
or if the activation record has no debug information,
|
||||
this function fails and returns 0.
|
||||
then this function fails and returns 0.
|
||||
|
||||
\subsection{Hooks}
|
||||
|
||||
The Lua interpreter offers two hooks for debug purposes:
|
||||
The Lua interpreter offers two hooks for debugging purposes:
|
||||
\begin{verbatim}
|
||||
typedef void (*lua_CHFunction) (lua_Function func, char *file, int line);
|
||||
extern lua_CHFunction lua_callhook;
|
||||
|
@ -1631,7 +1632,7 @@ like ordinary arrays, records, sets, bags, and lists.
|
|||
Arrays need no explanations.
|
||||
In Lua, it is conventional to start indices from 1,
|
||||
but this is only a convention.
|
||||
Arrays can be indexed by 0, negative numbers, or any other value (but \nil).
|
||||
Arrays can be indexed by 0, negative numbers, or any other value (except \nil).
|
||||
Records are also trivially implemented by the syntactic sugar
|
||||
\verb'a.x'.
|
||||
|
||||
|
@ -1642,15 +1643,14 @@ The statement \verb's[x] = 1' inserts the value of \verb'x' into
|
|||
the set \verb's'.
|
||||
The expression \verb's[x]' is true if and only if
|
||||
\verb'x' belongs to \verb's'.
|
||||
Finally, the statement \verb's[x] = nil' erases \verb'x' from \verb's'.
|
||||
Finally, the statement \verb's[x] = nil' removes \verb'x' from \verb's'.
|
||||
|
||||
Bags can be implemented similarly to sets,
|
||||
but using the value associated to an element as its counter.
|
||||
So, to insert an element,
|
||||
the following code is enough:
|
||||
\begin{verbatim}
|
||||
if s[x] then s[x] = s[x]+1
|
||||
else s[x] = 1 end
|
||||
if s[x] then s[x] = s[x]+1 else s[x] = 1 end
|
||||
\end{verbatim}
|
||||
and to remove an element:
|
||||
\begin{verbatim}
|
||||
|
@ -1671,7 +1671,7 @@ the tail with \verb'l[2]'.
|
|||
\Deffunc{next}\Deffunc{nextvar}
|
||||
This example shows how to use the function \verb'next' to iterate
|
||||
over the fields of a table.
|
||||
Function \Def{clone} receives any table and returns a clone of it.
|
||||
Function \IndexVerb{clone} receives any table and returns a clone of it.
|
||||
\begin{verbatim}
|
||||
function clone (t) -- t is a table
|
||||
local new_t = {} -- create a new table
|
||||
|
@ -1731,7 +1731,7 @@ end
|
|||
|
||||
\subsection{\Index{Variable number of arguments}}
|
||||
Lua does not provide any explicit mechanism to deal with
|
||||
variable number of arguments.
|
||||
variable number of arguments in function calls.
|
||||
However, one can use table constructors to simulate this mechanism.
|
||||
As an example, suppose a function to concatenate all its arguments.
|
||||
It could be written like
|
||||
|
@ -1778,9 +1778,9 @@ In order to restore this value, a \verb'lua_dofile' suffices.
|
|||
|
||||
Storing tables is a little more complex.
|
||||
Assuming that the table is a tree,
|
||||
and all indices are identifiers
|
||||
and that all indices are identifiers
|
||||
(that is, the tables are being used as records),
|
||||
its value can be written directly with table constructors.
|
||||
then its value can be written directly with table constructors.
|
||||
First, the function \verb'write_value' is changed to
|
||||
\begin{verbatim}
|
||||
function write_value (value)
|
||||
|
@ -1902,9 +1902,9 @@ with the index fallback redefined according to
|
|||
Section~\ref{exfallback}}.
|
||||
|
||||
As one could expect, a good way to represent a class is
|
||||
as a table.
|
||||
with a table.
|
||||
This table will contain all instance methods of the class,
|
||||
plus eventual default values for instance variables.
|
||||
plus optional default values for instance variables.
|
||||
An instance of a class has its \verb'parent' field pointing to
|
||||
the class,
|
||||
and so it ``inherits'' all methods.
|
||||
|
@ -1942,7 +1942,7 @@ p2 = Point:create{x = 10} -- y will be inherited until it is set
|
|||
--
|
||||
p1:move(p2)
|
||||
\end{verbatim}
|
||||
\caption{A Class Point.\label{Point}}
|
||||
\caption{A Class {\tt Point}.\label{Point}}
|
||||
\Line
|
||||
\end{figure}
|
||||
Finally, a subclass can be created as a new table,
|
||||
|
@ -2071,7 +2071,7 @@ Lua means {\em moon} in Portuguese.
|
|||
|
||||
\appendix
|
||||
|
||||
\section{Incompatibilities with Previous Versions}
|
||||
\section*{Incompatibilities with Previous Versions}
|
||||
|
||||
Although great care has been taken to avoid incompatibilities with
|
||||
the previous public versions of Lua,
|
||||
|
@ -2082,7 +2082,7 @@ Here is a list of all these differences.
|
|||
\begin{itemize}
|
||||
\item
|
||||
Functions \verb'date' and \verb'time' (from \verb'iolib')
|
||||
have been superseded by the new version of function \verb'date'.
|
||||
have been superseded by the new, more powerful version of function \verb'date'.
|
||||
\item
|
||||
Function \verb'append' (from \verb'iolib') now returns 1 whenever it succeeds,
|
||||
whether the file is new or not.
|
||||
|
@ -2094,7 +2094,7 @@ The API lock mechanism has been superseded by the reference mechanism.
|
|||
However, \verb-lua.h- provides compatibility macros,
|
||||
so there is no need to change programs.
|
||||
\item
|
||||
API function \verb'lua_pushliteral' now is just a macro to
|
||||
The API function \verb'lua_pushliteral' now is just a macro to
|
||||
\verb'lua_pushstring'.
|
||||
\end{itemize}
|
||||
|
||||
|
@ -2145,11 +2145,11 @@ int lua_storesubscript (void);
|
|||
with the parameters explicitly pushed on the stack.
|
||||
\item
|
||||
The functionality of the function \verb'lua_errorfunction' has been
|
||||
replaced by the {\em fallback} mechanism; \see{error}.
|
||||
replaced by the {\em fallback} mechanism (\see{error}).
|
||||
\item
|
||||
When calling a function from the Lua library,
|
||||
parameters passed through the stack
|
||||
must be pushed just before the correspondent call,
|
||||
must be pushed just before the corresponding call,
|
||||
with no intermediate calls to Lua.
|
||||
Special care should be taken with macros like
|
||||
\verb'lua_getindexed' and \verb'lua_getfield'.
|
||||
|
|
Loading…
Reference in New Issue