aboutsummaryrefslogtreecommitdiff
path: root/manual
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2019-05-09 11:13:45 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2019-05-09 11:13:45 -0300
commit389116d8abcc96db3cfe2f3cc25789c089fe12d6 (patch)
treef3d07b50c17f28ba09cf547d5a67519ffe3271a4 /manual
parent01bded3d8cd88a2d7f472b45f706565f1a9ef3b1 (diff)
downloadlua-389116d8abcc96db3cfe2f3cc25789c089fe12d6.tar.gz
lua-389116d8abcc96db3cfe2f3cc25789c089fe12d6.tar.bz2
lua-389116d8abcc96db3cfe2f3cc25789c089fe12d6.zip
Coroutines do not unwind the stack in case of errors
Back to how it was, a coroutine does not unwind its stack in case of errors (and therefore do not close its to-be-closed variables). This allows the stack to be examined after the error. The program can use 'coroutine.kill' to close the variables. The function created by 'coroutine.wrap', however, closes the coroutine's variables in case of errors, as it is impossible to examine the stack any way.
Diffstat (limited to 'manual')
-rw-r--r--manual/manual.of33
1 files changed, 25 insertions, 8 deletions
diff --git a/manual/manual.of b/manual/manual.of
index 5f265708..cf44b4f2 100644
--- a/manual/manual.of
+++ b/manual/manual.of
@@ -286,7 +286,7 @@ Lua also offers a system of @emph{warnings} @seeF{warn}.
286Unlike errors, warnings do not interfere 286Unlike errors, warnings do not interfere
287in any way with program execution. 287in any way with program execution.
288They typically only generate a message to the user, 288They typically only generate a message to the user,
289although this behavior can be adapted from C @see{lua_setwarnf}. 289although this behavior can be adapted from C @seeC{lua_setwarnf}.
290 290
291} 291}
292 292
@@ -835,6 +835,9 @@ In case of normal termination,
835plus any values returned by the coroutine main function. 835plus any values returned by the coroutine main function.
836In case of errors, @Lid{coroutine.resume} returns @false 836In case of errors, @Lid{coroutine.resume} returns @false
837plus the error object. 837plus the error object.
838In this case, the coroutine does not unwind its stack,
839so that it is possible to inspect it after the error
840with the debug API.
838 841
839A coroutine yields by calling @Lid{coroutine.yield}. 842A coroutine yields by calling @Lid{coroutine.yield}.
840When a coroutine yields, 843When a coroutine yields,
@@ -858,8 +861,10 @@ go as extra arguments to @Lid{coroutine.resume}.
858@Lid{coroutine.wrap} returns all the values returned by @Lid{coroutine.resume}, 861@Lid{coroutine.wrap} returns all the values returned by @Lid{coroutine.resume},
859except the first one (the boolean error code). 862except the first one (the boolean error code).
860Unlike @Lid{coroutine.resume}, 863Unlike @Lid{coroutine.resume},
861@Lid{coroutine.wrap} does not catch errors; 864the function created by @Lid{coroutine.wrap}
862any error is propagated to the caller. 865propagates any error to the caller.
866In this case,
867the function also kills the coroutine @seeF{coroutine.kill}.
863 868
864As an example of how coroutines work, 869As an example of how coroutines work,
865consider the following code: 870consider the following code:
@@ -1534,8 +1539,15 @@ the other pending closing methods will still be called.
1534If a coroutine yields inside a block and is never resumed again, 1539If a coroutine yields inside a block and is never resumed again,
1535the variables visible at that block will never go out of scope, 1540the variables visible at that block will never go out of scope,
1536and therefore they will not be closed. 1541and therefore they will not be closed.
1537(You should use finalizers to handle this case, 1542Similarly, if a coroutine ends with an error,
1538or else call @Lid{coroutine.kill} to close the variables.) 1543it does not unwind its stack,
1544so it does not close any variable.
1545You should either use finalizers
1546or call @Lid{coroutine.kill} to close the variables in these cases.
1547However, note that if the coroutine was created
1548through @Lid{coroutine.wrap},
1549then its corresponding function will close all variables
1550in case of errors.
1539 1551
1540} 1552}
1541 1553
@@ -6406,11 +6418,12 @@ or if it has stopped with an error.
6406Creates a new coroutine, with body @id{f}; 6418Creates a new coroutine, with body @id{f};
6407@id{f} must be a function. 6419@id{f} must be a function.
6408Returns a function that resumes the coroutine each time it is called. 6420Returns a function that resumes the coroutine each time it is called.
6409Any arguments passed to the function behave as the 6421Any arguments passed to this function behave as the
6410extra arguments to @id{resume}. 6422extra arguments to @id{resume}.
6411Returns the same values returned by @id{resume}, 6423The function returns the same values returned by @id{resume},
6412except the first boolean. 6424except the first boolean.
6413In case of error, propagates the error. 6425In case of error,
6426the function kills the coroutine and propagates the error.
6414 6427
6415} 6428}
6416 6429
@@ -6668,6 +6681,10 @@ the file path where the module was found,
6668as returned by @Lid{package.searchpath}. 6681as returned by @Lid{package.searchpath}.
6669The first searcher always returns the string @St{:preload:}. 6682The first searcher always returns the string @St{:preload:}.
6670 6683
6684Searchers should raise no errors and have no side effects in Lua.
6685(They may have side effects in C,
6686for instance by linking the application with a library.)
6687
6671} 6688}
6672 6689
6673@LibEntry{package.searchpath (name, path [, sep [, rep]])| 6690@LibEntry{package.searchpath (name, path [, sep [, rep]])|