Browse Source

Documentation

Better explanation about the guaranties of multiple assignment in
the manual.
Roberto Ierusalimschy 3 years ago
parent
commit
87a9573b2e
4 changed files with 13 additions and 5 deletions
  1. 1 1
      ldebug.c
  2. 1 1
      lstrlib.c
  3. 1 1
      lvm.c
  4. 10 2
      manual/manual.of

+ 1 - 1
ldebug.c

@@ -64,7 +64,7 @@ static int getbaseline (const Proto *f, int pc, int *basepc) {
   }
   else {
     int i = cast_uint(pc) / MAXIWTHABS - 1;  /* get an estimate */
-    /* estimate must be a lower bond of the correct base */
+    /* estimate must be a lower bound of the correct base */
     lua_assert(i < 0 ||
               (i < f->sizeabslineinfo && f->abslineinfo[i].pc <= pc));
     while (i + 1 < f->sizeabslineinfo && pc >= f->abslineinfo[i + 1].pc)

+ 1 - 1
lstrlib.c

@@ -1217,7 +1217,7 @@ static const char *get2digits (const char *s) {
 
 
 /*
-** Chech whether a conversion specification is valid. When called,
+** Check whether a conversion specification is valid. When called,
 ** first character in 'form' must be '%' and last character must
 ** be a valid conversion specifier. 'flags' are the accepted flags;
 ** 'precision' signals whether to accept a precision.

+ 1 - 1
lvm.c

@@ -1109,7 +1109,7 @@ void luaV_finishOp (lua_State *L) {
 #define ProtectNT(exp)  (savepc(L), (exp), updatetrap(ci))
 
 /*
-** Protect code that can only raise errors. (That is, it cannnot change
+** Protect code that can only raise errors. (That is, it cannot change
 ** the stack or hooks.)
 */
 #define halfProtect(exp)  (savestate(L,ci), (exp))

+ 10 - 2
manual/manual.of

@@ -1346,8 +1346,10 @@ then all values returned by that call enter the list of values,
 before the adjustment
 (except when the call is enclosed in parentheses; see @See{expressions}).
 
-The assignment statement first evaluates all its expressions
-and only then the assignments are performed.
+If a variable is both assigned and read
+inside a multiple assignment,
+Lua ensures all reads get the value of the variable
+before the assignment.
 Thus the code
 @verbatim{
 i = 3
@@ -1367,6 +1369,12 @@ x, y, z = y, z, x
 }
 cyclically permutes the values of @id{x}, @id{y}, and @id{z}.
 
+Note that this guarantee covers only accesses
+syntactically inside the assignment statement.
+If a function or a metamethod called during the assignment
+changes the value of a variable,
+Lua gives no guarantees about the order of that access.
+
 An assignment to a global name @T{x = val}
 is equivalent to the assignment
 @T{_ENV.x = val} @see{globalenv}.