3.4 C Closures
When a C features is made, you are able to relate some beliefs with it, therefore producing a-c closing; these standards have been called upvalues and are available to the function each time it is labeled as (discover lua_pushcclosure ).
These pseudo-indices are manufactured by macro lua_upvalueindex . Initial advantages related to a function is at place lua_upvalueindex(1) , and so on. Any access to lua_upvalueindex(n) , where n is actually more than the quantity of upvalues regarding the current features (yet not more than 256), creates an appropriate (but invalid) list.
Lua produces a registry, a pre-defined desk which you can use by any C rule to store whatever Lua price it needs to put. This dining table is obviously found at pseudo-index LUA_REGISTRYINDEX . Any C library can put information into this table, but it should take the time to determine tips different from those utilized by various other libraries, in order to avoid crashes. Typically, you should utilize as key a string containing the library term or lighting userdata aided by the address of a C item inside rule.
The integer tactics for the registry are used because of the resource apparatus, applied because of the reliable collection, therefore should not be utilized for some other functions.
3.6 Error Handling in C
Internally, Lua uses the C longjmp establishment to manage mistakes. (It is possible to opt for exclusions if you use C++; read file luaconf.h .) When Lua faces any error (like memory allocation mistakes, type errors, syntax errors, and runtime problems) it does increase an error; that is, it can a lengthy hop. A protected environment utilizes setjmp to create a recover point; any error jumps on most recent effective recuperate aim.
The majority of features inside the API can toss an error, for example due to a memory space allotment mistake. The documentation for every function show whether or not it can place errors.
3.7 Applications and Kinds
Right here we list all functions and sort through the C API in alphabetical order. Each features possess indicative in this way: [-o, +p, x]
1st area, o , is actually how many areas the function pops from the bunch. The next industry, p , was the number of areas the function pushes on the bunch. (Any purpose usually forces their outcome after popping their arguments.) A field in type x|y suggests the big event can press (or pop) x or y factors, with regards to the situation; an interrogation level ‘ ? ‘ means that we simply cannot know-how numerous areas the event pops/pushes by appearing only at the arguments (e.g., they might rely on what exactly is about pile). The third industry, x , informs whether the function may put problems: ‘ – ‘ indicates the big event never tosses any mistake; ‘ m ‘ implies the function may put an error merely due to insufficient memory; ‘ elizabeth ‘ suggests the event may toss other kinds of errors; ‘ v ‘ indicates the big event may put one on purpose.
The type of the memory-allocation features utilized by Lua shows. The allocator features must make provision for a functionality much like realloc , not a similar. Their arguments were ud , an opaque pointer passed away to lua_newstate ; ptr , a pointer into block are allocated/reallocated/freed; osize , the original measurements of the block; nsize , the latest measurements of the block. ptr is NULL if and just if osize was zero. Whenever nsize is zero, the allocator must return NULL ; if osize is certainly not zero, it must relieve the block pointed to by ptr . Whenever nsize is not zero, the allocator return NULL if and simply when it cannot complete the consult. When nsize just isn’t zero and osize try zero, the allocator should react like malloc . When nsize and osize are not zero, the allocator acts like realloc . Lua assumes that allocator never ever fails when osize >= nsize .