comparison website/src/manual.html.luan @ 482:7e9fcfbf22ec

documentation
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 11 May 2015 21:05:10 -0600
parents 1285c52ea9d4
children ddee9f5167d8
comparison
equal deleted inserted replaced
481:5d4a78c93383 482:7e9fcfbf22ec
276 to call a given function in <i>protected mode</i>. 276 to call a given function in <i>protected mode</i>.
277 277
278 278
279 <p> 279 <p>
280 Whenever there is an error, 280 Whenever there is an error,
281 an <i>error object</i> (also called an <i>error message</i>) 281 an <i>error table</i>
282 is propagated with information about the error. 282 is propagated with information about the error.
283 Luan itself only generates errors whose error object is a string, 283 See <a href="#Luan.new_error"><tt>Luan.new_error</tt></a>.
284 but programs may generate errors with
285 any value as the error object.
286 It is up to the Luan program or its host to handle such error objects.
287
288
289 284
290 285
291 286
292 <h3 <%=heading_options%> ><a name="meta">Metatables and Metamethods</a></h3> 287 <h3 <%=heading_options%> ><a name="meta">Metatables and Metamethods</a></h3>
293 288
1948 1943
1949 1944
1950 <h4 <%=heading_options%> ><a name="Luan.error"><tt>Luan.error (message)</tt></a></h4> 1945 <h4 <%=heading_options%> ><a name="Luan.error"><tt>Luan.error (message)</tt></a></h4>
1951 1946
1952 <p> 1947 <p>
1953 Throws an error containing the message. This uses Java exceptions internally and the implementation is likely to change. So this documentation is likely to change. 1948 Throws an error containing the message.
1949
1950 <p>
1951 Could be defined as:
1952
1953 <p><tt><pre>
1954 function Luan.error(message)
1955 <a href="#Luan.new_error">Luan.new_error</a>(message).throw()
1956 end
1957 </pre></tt></p>
1958
1954 1959
1955 1960
1956 <h4 <%=heading_options%> ><a name="Luan.get_metatable"><tt>Luan.get_metatable (table)</tt></a></h4> 1961 <h4 <%=heading_options%> ><a name="Luan.get_metatable"><tt>Luan.get_metatable (table)</tt></a></h4>
1957 1962
1958 <p> 1963 <p>
2034 f.exists() or <a href="#Luan.error">Luan.error</a>("file '"..file_uri.."' not found") 2039 f.exists() or <a href="#Luan.error">Luan.error</a>("file '"..file_uri.."' not found")
2035 return <a href="#Luan.load">Luan.load</a>( f.read_text(), file_uri ) 2040 return <a href="#Luan.load">Luan.load</a>( f.read_text(), file_uri )
2036 end 2041 end
2037 </pre></tt></p> 2042 </pre></tt></p>
2038 2043
2044
2045 <h4 <%=heading_options%> ><a name="Luan.new_error"><tt>Luan.new_error (message)</tt></a></h4>
2046
2047 <p>
2048 Creates a new error table containing the message assigned to "<tt>message</tt>". The error table also contains a <tt>throw</tt> function which throws the error. The table also contains a list of stack trace elements where each stack trace element is a table containing "<tt>source</tt>", "<tt>line</tt>", and possible "<tt>call_to</tt>". The table also has a metatable containing "<tt>__to_string</tt>" to render the error.
2049
2050 <p>
2051 To print the current stack trace, you could do:
2052
2053 <p><tt><pre>
2054 Io.print( Luan.new_error "stack" )
2055 </pre></tt></p>
2039 2056
2040 2057
2041 <h4 <%=heading_options%> ><a name="Luan.pairs"><tt>Luan.pairs (t)</tt></a></h4> 2058 <h4 <%=heading_options%> ><a name="Luan.pairs"><tt>Luan.pairs (t)</tt></a></h4>
2042 2059
2043 <p> 2060 <p>
2252 -- clean up 2269 -- clean up
2253 end; 2270 end;
2254 } 2271 }
2255 </pre></tt></p> 2272 </pre></tt></p>
2256 2273
2274 <p>
2275 Could be defined as:
2276
2277 <p><tt><pre>
2278 function Luan.try(t)
2279 local r = { <a href="#Luan.pcall">Luan.pcall</a>(t[1]) }
2280 if r[1] then
2281 Table.remove(r,1)
2282 elseif t.catch ~= nil then
2283 r = { t.catch(r[2]) }
2284 else
2285 t.finally and t.finally()
2286 r[2].throw()
2287 end
2288 t.finally and t.finally()
2289 return Table.unpack(r)
2290 end
2291 </pre></tt></p>
2257 2292
2258 2293
2259 <h4 <%=heading_options%> ><a name="Luan.type"><tt>Luan.type (v)</tt></a></h4> 2294 <h4 <%=heading_options%> ><a name="Luan.type"><tt>Luan.type (v)</tt></a></h4>
2260 2295
2261 <p> 2296 <p>