candle 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (164) hide show
  1. data/LICENSE.txt +20 -0
  2. data/README.md +4 -0
  3. data/VERSION +1 -0
  4. data/bin/candle +21 -0
  5. data/lib/candle.rb +68 -0
  6. data/lib/candle/command.rb +27 -0
  7. data/lib/candle/generators/actions.rb +183 -0
  8. data/lib/candle/generators/blank.rb +127 -0
  9. data/lib/candle/generators/cli.rb +55 -0
  10. data/lib/candle/generators/help.rb +47 -0
  11. data/lib/candle/generators/jam.rb +80 -0
  12. data/lib/candle/generators/lua/scripts/AppDelegate.lua +36 -0
  13. data/lib/candle/generators/lua/scripts/tests/init.lua +6 -0
  14. data/lib/candle/generators/lua/scripts/tests/someTest.lua +12 -0
  15. data/lib/candle/generators/lua/wax/ProtocolLoader.h +12 -0
  16. data/lib/candle/generators/lua/wax/bin/hammer +157 -0
  17. data/lib/candle/generators/lua/wax/bin/update-xibs +131 -0
  18. data/lib/candle/generators/lua/wax/bin/waxsim +0 -0
  19. data/lib/candle/generators/lua/wax/lib/build-scripts/compile-stdlib.sh +14 -0
  20. data/lib/candle/generators/lua/wax/lib/build-scripts/copy-scripts.sh +58 -0
  21. data/lib/candle/generators/lua/wax/lib/build-scripts/luac.lua +80 -0
  22. data/lib/candle/generators/lua/wax/lib/extensions/CGAffine/wax_CGTransform.h +12 -0
  23. data/lib/candle/generators/lua/wax/lib/extensions/CGAffine/wax_CGTransform.m +85 -0
  24. data/lib/candle/generators/lua/wax/lib/extensions/CGContext/wax_CGContext.h +12 -0
  25. data/lib/candle/generators/lua/wax/lib/extensions/CGContext/wax_CGContext.m +251 -0
  26. data/lib/candle/generators/lua/wax/lib/extensions/HTTP/wax_http.h +14 -0
  27. data/lib/candle/generators/lua/wax/lib/extensions/HTTP/wax_http.m +240 -0
  28. data/lib/candle/generators/lua/wax/lib/extensions/HTTP/wax_http_connection.h +54 -0
  29. data/lib/candle/generators/lua/wax/lib/extensions/HTTP/wax_http_connection.m +304 -0
  30. data/lib/candle/generators/lua/wax/lib/extensions/filesystem/wax_filesystem.h +9 -0
  31. data/lib/candle/generators/lua/wax/lib/extensions/filesystem/wax_filesystem.m +273 -0
  32. data/lib/candle/generators/lua/wax/lib/extensions/json/Rakefile +10 -0
  33. data/lib/candle/generators/lua/wax/lib/extensions/json/wax_json.c +304 -0
  34. data/lib/candle/generators/lua/wax/lib/extensions/json/wax_json.h +11 -0
  35. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl-1.0.9.tar.gz +0 -0
  36. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/api/yajl_common.h +85 -0
  37. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/api/yajl_gen.h +159 -0
  38. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/api/yajl_parse.h +193 -0
  39. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl.c +159 -0
  40. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_alloc.c +65 -0
  41. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_alloc.h +50 -0
  42. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_buf.c +119 -0
  43. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_buf.h +73 -0
  44. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_bytestack.h +85 -0
  45. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_common.h +85 -0
  46. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_encode.c +188 -0
  47. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_encode.h +50 -0
  48. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_gen.c +322 -0
  49. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_gen.h +159 -0
  50. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_lex.c +737 -0
  51. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_lex.h +133 -0
  52. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_parse.h +193 -0
  53. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_parser.c +448 -0
  54. data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_parser.h +82 -0
  55. data/lib/candle/generators/lua/wax/lib/lua/lapi.c +1087 -0
  56. data/lib/candle/generators/lua/wax/lib/lua/lapi.h +16 -0
  57. data/lib/candle/generators/lua/wax/lib/lua/lauxlib.c +652 -0
  58. data/lib/candle/generators/lua/wax/lib/lua/lauxlib.h +174 -0
  59. data/lib/candle/generators/lua/wax/lib/lua/lbaselib.c +653 -0
  60. data/lib/candle/generators/lua/wax/lib/lua/lcode.c +839 -0
  61. data/lib/candle/generators/lua/wax/lib/lua/lcode.h +76 -0
  62. data/lib/candle/generators/lua/wax/lib/lua/ldblib.c +397 -0
  63. data/lib/candle/generators/lua/wax/lib/lua/ldebug.c +638 -0
  64. data/lib/candle/generators/lua/wax/lib/lua/ldebug.h +33 -0
  65. data/lib/candle/generators/lua/wax/lib/lua/ldo.c +518 -0
  66. data/lib/candle/generators/lua/wax/lib/lua/ldo.h +57 -0
  67. data/lib/candle/generators/lua/wax/lib/lua/ldump.c +164 -0
  68. data/lib/candle/generators/lua/wax/lib/lua/lfunc.c +174 -0
  69. data/lib/candle/generators/lua/wax/lib/lua/lfunc.h +34 -0
  70. data/lib/candle/generators/lua/wax/lib/lua/lgc.c +711 -0
  71. data/lib/candle/generators/lua/wax/lib/lua/lgc.h +110 -0
  72. data/lib/candle/generators/lua/wax/lib/lua/linit.c +38 -0
  73. data/lib/candle/generators/lua/wax/lib/lua/liolib.c +553 -0
  74. data/lib/candle/generators/lua/wax/lib/lua/llex.c +461 -0
  75. data/lib/candle/generators/lua/wax/lib/lua/llex.h +81 -0
  76. data/lib/candle/generators/lua/wax/lib/lua/llimits.h +128 -0
  77. data/lib/candle/generators/lua/wax/lib/lua/lmathlib.c +263 -0
  78. data/lib/candle/generators/lua/wax/lib/lua/lmem.c +86 -0
  79. data/lib/candle/generators/lua/wax/lib/lua/lmem.h +49 -0
  80. data/lib/candle/generators/lua/wax/lib/lua/loadlib.c +666 -0
  81. data/lib/candle/generators/lua/wax/lib/lua/lobject.c +214 -0
  82. data/lib/candle/generators/lua/wax/lib/lua/lobject.h +381 -0
  83. data/lib/candle/generators/lua/wax/lib/lua/lopcodes.c +102 -0
  84. data/lib/candle/generators/lua/wax/lib/lua/lopcodes.h +268 -0
  85. data/lib/candle/generators/lua/wax/lib/lua/loslib.c +243 -0
  86. data/lib/candle/generators/lua/wax/lib/lua/lparser.c +1339 -0
  87. data/lib/candle/generators/lua/wax/lib/lua/lparser.h +82 -0
  88. data/lib/candle/generators/lua/wax/lib/lua/lstate.c +214 -0
  89. data/lib/candle/generators/lua/wax/lib/lua/lstate.h +169 -0
  90. data/lib/candle/generators/lua/wax/lib/lua/lstring.c +111 -0
  91. data/lib/candle/generators/lua/wax/lib/lua/lstring.h +31 -0
  92. data/lib/candle/generators/lua/wax/lib/lua/lstrlib.c +869 -0
  93. data/lib/candle/generators/lua/wax/lib/lua/ltable.c +588 -0
  94. data/lib/candle/generators/lua/wax/lib/lua/ltable.h +40 -0
  95. data/lib/candle/generators/lua/wax/lib/lua/ltablib.c +287 -0
  96. data/lib/candle/generators/lua/wax/lib/lua/ltm.c +75 -0
  97. data/lib/candle/generators/lua/wax/lib/lua/ltm.h +54 -0
  98. data/lib/candle/generators/lua/wax/lib/lua/lua.h +388 -0
  99. data/lib/candle/generators/lua/wax/lib/lua/luaconf.h +753 -0
  100. data/lib/candle/generators/lua/wax/lib/lua/lualib.h +53 -0
  101. data/lib/candle/generators/lua/wax/lib/lua/lundump.c +227 -0
  102. data/lib/candle/generators/lua/wax/lib/lua/lundump.h +36 -0
  103. data/lib/candle/generators/lua/wax/lib/lua/lvm.c +763 -0
  104. data/lib/candle/generators/lua/wax/lib/lua/lvm.h +36 -0
  105. data/lib/candle/generators/lua/wax/lib/lua/lzio.c +82 -0
  106. data/lib/candle/generators/lua/wax/lib/lua/lzio.h +67 -0
  107. data/lib/candle/generators/lua/wax/lib/lua/print.c +227 -0
  108. data/lib/candle/generators/lua/wax/lib/project.rake +159 -0
  109. data/lib/candle/generators/lua/wax/lib/stdlib/enums.lua +396 -0
  110. data/lib/candle/generators/lua/wax/lib/stdlib/ext/http.lua +43 -0
  111. data/lib/candle/generators/lua/wax/lib/stdlib/ext/init.lua +4 -0
  112. data/lib/candle/generators/lua/wax/lib/stdlib/ext/number.lua +21 -0
  113. data/lib/candle/generators/lua/wax/lib/stdlib/ext/string.lua +97 -0
  114. data/lib/candle/generators/lua/wax/lib/stdlib/ext/table.lua +165 -0
  115. data/lib/candle/generators/lua/wax/lib/stdlib/helpers/WaxServer.lua +49 -0
  116. data/lib/candle/generators/lua/wax/lib/stdlib/helpers/autoload.lua +10 -0
  117. data/lib/candle/generators/lua/wax/lib/stdlib/helpers/base64.lua +64 -0
  118. data/lib/candle/generators/lua/wax/lib/stdlib/helpers/bit.lua +274 -0
  119. data/lib/candle/generators/lua/wax/lib/stdlib/helpers/cache.lua +73 -0
  120. data/lib/candle/generators/lua/wax/lib/stdlib/helpers/callback.lua +22 -0
  121. data/lib/candle/generators/lua/wax/lib/stdlib/helpers/frame.lua +76 -0
  122. data/lib/candle/generators/lua/wax/lib/stdlib/helpers/init.lua +78 -0
  123. data/lib/candle/generators/lua/wax/lib/stdlib/helpers/pickView.lua +54 -0
  124. data/lib/candle/generators/lua/wax/lib/stdlib/helpers/time.lua +102 -0
  125. data/lib/candle/generators/lua/wax/lib/stdlib/init.lua +18 -0
  126. data/lib/candle/generators/lua/wax/lib/stdlib/luaspec/init.lua +2 -0
  127. data/lib/candle/generators/lua/wax/lib/stdlib/luaspec/luamock.lua +84 -0
  128. data/lib/candle/generators/lua/wax/lib/stdlib/luaspec/luaspec.lua +377 -0
  129. data/lib/candle/generators/lua/wax/lib/stdlib/repl.lua +9 -0
  130. data/lib/candle/generators/lua/wax/lib/stdlib/structs.lua +11 -0
  131. data/lib/candle/generators/lua/wax/lib/stdlib/waxClass.lua +42 -0
  132. data/lib/candle/generators/lua/wax/lib/wax.h +16 -0
  133. data/lib/candle/generators/lua/wax/lib/wax.m +260 -0
  134. data/lib/candle/generators/lua/wax/lib/wax_class.h +18 -0
  135. data/lib/candle/generators/lua/wax/lib/wax_class.m +190 -0
  136. data/lib/candle/generators/lua/wax/lib/wax_gc.h +20 -0
  137. data/lib/candle/generators/lua/wax/lib/wax_gc.m +56 -0
  138. data/lib/candle/generators/lua/wax/lib/wax_helpers.h +102 -0
  139. data/lib/candle/generators/lua/wax/lib/wax_helpers.m +870 -0
  140. data/lib/candle/generators/lua/wax/lib/wax_instance.h +34 -0
  141. data/lib/candle/generators/lua/wax/lib/wax_instance.m +810 -0
  142. data/lib/candle/generators/lua/wax/lib/wax_server.h +47 -0
  143. data/lib/candle/generators/lua/wax/lib/wax_server.m +252 -0
  144. data/lib/candle/generators/lua/wax/lib/wax_stdlib.h +3 -0
  145. data/lib/candle/generators/lua/wax/lib/wax_struct.h +26 -0
  146. data/lib/candle/generators/lua/wax/lib/wax_struct.m +335 -0
  147. data/lib/candle/generators/templates/blank/WaxApplication.xcodeproj/project.pbxproj +836 -0
  148. data/lib/candle/generators/templates/blank/WaxApplication.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  149. data/lib/candle/generators/templates/blank/WaxApplication.xcodeproj/project.xcworkspace/xcuserdata/eiffel.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  150. data/lib/candle/generators/templates/blank/WaxApplication.xcodeproj/xcuserdata/eiffel.xcuserdatad/xcschemes/WaxApplication.xcscheme +86 -0
  151. data/lib/candle/generators/templates/blank/WaxApplication.xcodeproj/xcuserdata/eiffel.xcuserdatad/xcschemes/xcschememanagement.plist +22 -0
  152. data/lib/candle/generators/templates/blank/WaxApplication/Default-568h@2x.png +0 -0
  153. data/lib/candle/generators/templates/blank/WaxApplication/Default.png +0 -0
  154. data/lib/candle/generators/templates/blank/WaxApplication/Default@2x.png +0 -0
  155. data/lib/candle/generators/templates/blank/WaxApplication/ProtocolLoader.h +12 -0
  156. data/lib/candle/generators/templates/blank/WaxApplication/WaxApplication-Info.plist.tt +38 -0
  157. data/lib/candle/generators/templates/blank/WaxApplication/WaxApplication-Prefix.pch.tt +14 -0
  158. data/lib/candle/generators/templates/blank/WaxApplication/en.lproj/InfoPlist.strings +2 -0
  159. data/lib/candle/generators/templates/blank/WaxApplication/main.m.tt +20 -0
  160. data/lib/candle/tasks.rb +22 -0
  161. data/lib/candle/utility.rb +30 -0
  162. data/lib/candle/version.rb +9 -0
  163. data/lib/candle/view.rb +48 -0
  164. metadata +582 -0
@@ -0,0 +1,86 @@
1
+ /*
2
+ ** $Id: lmem.c,v 1.70.1.1 2007/12/27 13:02:25 roberto Exp $
3
+ ** Interface to Memory Manager
4
+ ** See Copyright Notice in lua.h
5
+ */
6
+
7
+
8
+ #include <stddef.h>
9
+
10
+ #define lmem_c
11
+ #define LUA_CORE
12
+
13
+ #include "lua.h"
14
+
15
+ #include "ldebug.h"
16
+ #include "ldo.h"
17
+ #include "lmem.h"
18
+ #include "lobject.h"
19
+ #include "lstate.h"
20
+
21
+
22
+
23
+ /*
24
+ ** About the realloc function:
25
+ ** void * frealloc (void *ud, void *ptr, size_t osize, size_t nsize);
26
+ ** (`osize' is the old size, `nsize' is the new size)
27
+ **
28
+ ** Lua ensures that (ptr == NULL) iff (osize == 0).
29
+ **
30
+ ** * frealloc(ud, NULL, 0, x) creates a new block of size `x'
31
+ **
32
+ ** * frealloc(ud, p, x, 0) frees the block `p'
33
+ ** (in this specific case, frealloc must return NULL).
34
+ ** particularly, frealloc(ud, NULL, 0, 0) does nothing
35
+ ** (which is equivalent to free(NULL) in ANSI C)
36
+ **
37
+ ** frealloc returns NULL if it cannot create or reallocate the area
38
+ ** (any reallocation to an equal or smaller size cannot fail!)
39
+ */
40
+
41
+
42
+
43
+ #define MINSIZEARRAY 4
44
+
45
+
46
+ void *luaM_growaux_ (lua_State *L, void *block, int *size, size_t size_elems,
47
+ int limit, const char *errormsg) {
48
+ void *newblock;
49
+ int newsize;
50
+ if (*size >= limit/2) { /* cannot double it? */
51
+ if (*size >= limit) /* cannot grow even a little? */
52
+ luaG_runerror(L, errormsg);
53
+ newsize = limit; /* still have at least one free place */
54
+ }
55
+ else {
56
+ newsize = (*size)*2;
57
+ if (newsize < MINSIZEARRAY)
58
+ newsize = MINSIZEARRAY; /* minimum size */
59
+ }
60
+ newblock = luaM_reallocv(L, block, *size, newsize, size_elems);
61
+ *size = newsize; /* update only when everything else is OK */
62
+ return newblock;
63
+ }
64
+
65
+
66
+ void *luaM_toobig (lua_State *L) {
67
+ luaG_runerror(L, "memory allocation error: block too big");
68
+ return NULL; /* to avoid warnings */
69
+ }
70
+
71
+
72
+
73
+ /*
74
+ ** generic allocation routine.
75
+ */
76
+ void *luaM_realloc_ (lua_State *L, void *block, size_t osize, size_t nsize) {
77
+ global_State *g = G(L);
78
+ lua_assert((osize == 0) == (block == NULL));
79
+ block = (*g->frealloc)(g->ud, block, osize, nsize);
80
+ if (block == NULL && nsize > 0)
81
+ luaD_throw(L, LUA_ERRMEM);
82
+ lua_assert((nsize == 0) == (block == NULL));
83
+ g->totalbytes = (g->totalbytes - osize) + nsize;
84
+ return block;
85
+ }
86
+
@@ -0,0 +1,49 @@
1
+ /*
2
+ ** $Id: lmem.h,v 1.31.1.1 2007/12/27 13:02:25 roberto Exp $
3
+ ** Interface to Memory Manager
4
+ ** See Copyright Notice in lua.h
5
+ */
6
+
7
+ #ifndef lmem_h
8
+ #define lmem_h
9
+
10
+
11
+ #include <stddef.h>
12
+
13
+ #include "llimits.h"
14
+ #include "lua.h"
15
+
16
+ #define MEMERRMSG "not enough memory"
17
+
18
+
19
+ #define luaM_reallocv(L,b,on,n,e) \
20
+ ((cast(size_t, (n)+1) <= MAX_SIZET/(e)) ? /* +1 to avoid warnings */ \
21
+ luaM_realloc_(L, (b), (on)*(e), (n)*(e)) : \
22
+ luaM_toobig(L))
23
+
24
+ #define luaM_freemem(L, b, s) luaM_realloc_(L, (b), (s), 0)
25
+ #define luaM_free(L, b) luaM_realloc_(L, (b), sizeof(*(b)), 0)
26
+ #define luaM_freearray(L, b, n, t) luaM_reallocv(L, (b), n, 0, sizeof(t))
27
+
28
+ #define luaM_malloc(L,t) luaM_realloc_(L, NULL, 0, (t))
29
+ #define luaM_new(L,t) cast(t *, luaM_malloc(L, sizeof(t)))
30
+ #define luaM_newvector(L,n,t) \
31
+ cast(t *, luaM_reallocv(L, NULL, 0, n, sizeof(t)))
32
+
33
+ #define luaM_growvector(L,v,nelems,size,t,limit,e) \
34
+ if ((nelems)+1 > (size)) \
35
+ ((v)=cast(t *, luaM_growaux_(L,v,&(size),sizeof(t),limit,e)))
36
+
37
+ #define luaM_reallocvector(L, v,oldn,n,t) \
38
+ ((v)=cast(t *, luaM_reallocv(L, v, oldn, n, sizeof(t))))
39
+
40
+
41
+ LUAI_FUNC void *luaM_realloc_ (lua_State *L, void *block, size_t oldsize,
42
+ size_t size);
43
+ LUAI_FUNC void *luaM_toobig (lua_State *L);
44
+ LUAI_FUNC void *luaM_growaux_ (lua_State *L, void *block, int *size,
45
+ size_t size_elem, int limit,
46
+ const char *errormsg);
47
+
48
+ #endif
49
+
@@ -0,0 +1,666 @@
1
+ /*
2
+ ** $Id: loadlib.c,v 1.52.1.3 2008/08/06 13:29:28 roberto Exp $
3
+ ** Dynamic library loader for Lua
4
+ ** See Copyright Notice in lua.h
5
+ **
6
+ ** This module contains an implementation of loadlib for Unix systems
7
+ ** that have dlfcn, an implementation for Darwin (Mac OS X), an
8
+ ** implementation for Windows, and a stub for other systems.
9
+ */
10
+
11
+
12
+ #include <stdlib.h>
13
+ #include <string.h>
14
+
15
+
16
+ #define loadlib_c
17
+ #define LUA_LIB
18
+
19
+ #include "lua.h"
20
+
21
+ #include "lauxlib.h"
22
+ #include "lualib.h"
23
+
24
+
25
+ /* prefix for open functions in C libraries */
26
+ #define LUA_POF "luaopen_"
27
+
28
+ /* separator for open functions in C libraries */
29
+ #define LUA_OFSEP "_"
30
+
31
+
32
+ #define LIBPREFIX "LOADLIB: "
33
+
34
+ #define POF LUA_POF
35
+ #define LIB_FAIL "open"
36
+
37
+
38
+ /* error codes for ll_loadfunc */
39
+ #define ERRLIB 1
40
+ #define ERRFUNC 2
41
+
42
+ #define setprogdir(L) ((void)0)
43
+
44
+
45
+ static void ll_unloadlib (void *lib);
46
+ static void *ll_load (lua_State *L, const char *path);
47
+ static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym);
48
+
49
+
50
+
51
+ #if defined(LUA_DL_DLOPEN)
52
+ /*
53
+ ** {========================================================================
54
+ ** This is an implementation of loadlib based on the dlfcn interface.
55
+ ** The dlfcn interface is available in Linux, SunOS, Solaris, IRIX, FreeBSD,
56
+ ** NetBSD, AIX 4.2, HPUX 11, and probably most other Unix flavors, at least
57
+ ** as an emulation layer on top of native functions.
58
+ ** =========================================================================
59
+ */
60
+
61
+ #include <dlfcn.h>
62
+
63
+ static void ll_unloadlib (void *lib) {
64
+ dlclose(lib);
65
+ }
66
+
67
+
68
+ static void *ll_load (lua_State *L, const char *path) {
69
+ void *lib = dlopen(path, RTLD_NOW);
70
+ if (lib == NULL) lua_pushstring(L, dlerror());
71
+ return lib;
72
+ }
73
+
74
+
75
+ static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) {
76
+ lua_CFunction f = (lua_CFunction)dlsym(lib, sym);
77
+ if (f == NULL) lua_pushstring(L, dlerror());
78
+ return f;
79
+ }
80
+
81
+ /* }====================================================== */
82
+
83
+
84
+
85
+ #elif defined(LUA_DL_DLL)
86
+ /*
87
+ ** {======================================================================
88
+ ** This is an implementation of loadlib for Windows using native functions.
89
+ ** =======================================================================
90
+ */
91
+
92
+ #include <windows.h>
93
+
94
+
95
+ #undef setprogdir
96
+
97
+ static void setprogdir (lua_State *L) {
98
+ char buff[MAX_PATH + 1];
99
+ char *lb;
100
+ DWORD nsize = sizeof(buff)/sizeof(char);
101
+ DWORD n = GetModuleFileNameA(NULL, buff, nsize);
102
+ if (n == 0 || n == nsize || (lb = strrchr(buff, '\\')) == NULL)
103
+ luaL_error(L, "unable to get ModuleFileName");
104
+ else {
105
+ *lb = '\0';
106
+ luaL_gsub(L, lua_tostring(L, -1), LUA_EXECDIR, buff);
107
+ lua_remove(L, -2); /* remove original string */
108
+ }
109
+ }
110
+
111
+
112
+ static void pusherror (lua_State *L) {
113
+ int error = GetLastError();
114
+ char buffer[128];
115
+ if (FormatMessageA(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM,
116
+ NULL, error, 0, buffer, sizeof(buffer), NULL))
117
+ lua_pushstring(L, buffer);
118
+ else
119
+ lua_pushfstring(L, "system error %d\n", error);
120
+ }
121
+
122
+ static void ll_unloadlib (void *lib) {
123
+ FreeLibrary((HINSTANCE)lib);
124
+ }
125
+
126
+
127
+ static void *ll_load (lua_State *L, const char *path) {
128
+ HINSTANCE lib = LoadLibraryA(path);
129
+ if (lib == NULL) pusherror(L);
130
+ return lib;
131
+ }
132
+
133
+
134
+ static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) {
135
+ lua_CFunction f = (lua_CFunction)GetProcAddress((HINSTANCE)lib, sym);
136
+ if (f == NULL) pusherror(L);
137
+ return f;
138
+ }
139
+
140
+ /* }====================================================== */
141
+
142
+
143
+
144
+ #elif defined(LUA_DL_DYLD)
145
+ /*
146
+ ** {======================================================================
147
+ ** Native Mac OS X / Darwin Implementation
148
+ ** =======================================================================
149
+ */
150
+
151
+ #include <mach-o/dyld.h>
152
+
153
+
154
+ /* Mac appends a `_' before C function names */
155
+ #undef POF
156
+ #define POF "_" LUA_POF
157
+
158
+
159
+ static void pusherror (lua_State *L) {
160
+ const char *err_str;
161
+ const char *err_file;
162
+ NSLinkEditErrors err;
163
+ int err_num;
164
+ NSLinkEditError(&err, &err_num, &err_file, &err_str);
165
+ lua_pushstring(L, err_str);
166
+ }
167
+
168
+
169
+ static const char *errorfromcode (NSObjectFileImageReturnCode ret) {
170
+ switch (ret) {
171
+ case NSObjectFileImageInappropriateFile:
172
+ return "file is not a bundle";
173
+ case NSObjectFileImageArch:
174
+ return "library is for wrong CPU type";
175
+ case NSObjectFileImageFormat:
176
+ return "bad format";
177
+ case NSObjectFileImageAccess:
178
+ return "cannot access file";
179
+ case NSObjectFileImageFailure:
180
+ default:
181
+ return "unable to load library";
182
+ }
183
+ }
184
+
185
+
186
+ static void ll_unloadlib (void *lib) {
187
+ NSUnLinkModule((NSModule)lib, NSUNLINKMODULE_OPTION_RESET_LAZY_REFERENCES);
188
+ }
189
+
190
+
191
+ static void *ll_load (lua_State *L, const char *path) {
192
+ NSObjectFileImage img;
193
+ NSObjectFileImageReturnCode ret;
194
+ /* this would be a rare case, but prevents crashing if it happens */
195
+ if(!_dyld_present()) {
196
+ lua_pushliteral(L, "dyld not present");
197
+ return NULL;
198
+ }
199
+ ret = NSCreateObjectFileImageFromFile(path, &img);
200
+ if (ret == NSObjectFileImageSuccess) {
201
+ NSModule mod = NSLinkModule(img, path, NSLINKMODULE_OPTION_PRIVATE |
202
+ NSLINKMODULE_OPTION_RETURN_ON_ERROR);
203
+ NSDestroyObjectFileImage(img);
204
+ if (mod == NULL) pusherror(L);
205
+ return mod;
206
+ }
207
+ lua_pushstring(L, errorfromcode(ret));
208
+ return NULL;
209
+ }
210
+
211
+
212
+ static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) {
213
+ NSSymbol nss = NSLookupSymbolInModule((NSModule)lib, sym);
214
+ if (nss == NULL) {
215
+ lua_pushfstring(L, "symbol " LUA_QS " not found", sym);
216
+ return NULL;
217
+ }
218
+ return (lua_CFunction)NSAddressOfSymbol(nss);
219
+ }
220
+
221
+ /* }====================================================== */
222
+
223
+
224
+
225
+ #else
226
+ /*
227
+ ** {======================================================
228
+ ** Fallback for other systems
229
+ ** =======================================================
230
+ */
231
+
232
+ #undef LIB_FAIL
233
+ #define LIB_FAIL "absent"
234
+
235
+
236
+ #define DLMSG "dynamic libraries not enabled; check your Lua installation"
237
+
238
+
239
+ static void ll_unloadlib (void *lib) {
240
+ (void)lib; /* to avoid warnings */
241
+ }
242
+
243
+
244
+ static void *ll_load (lua_State *L, const char *path) {
245
+ (void)path; /* to avoid warnings */
246
+ lua_pushliteral(L, DLMSG);
247
+ return NULL;
248
+ }
249
+
250
+
251
+ static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) {
252
+ (void)lib; (void)sym; /* to avoid warnings */
253
+ lua_pushliteral(L, DLMSG);
254
+ return NULL;
255
+ }
256
+
257
+ /* }====================================================== */
258
+ #endif
259
+
260
+
261
+
262
+ static void **ll_register (lua_State *L, const char *path) {
263
+ void **plib;
264
+ lua_pushfstring(L, "%s%s", LIBPREFIX, path);
265
+ lua_gettable(L, LUA_REGISTRYINDEX); /* check library in registry? */
266
+ if (!lua_isnil(L, -1)) /* is there an entry? */
267
+ plib = (void **)lua_touserdata(L, -1);
268
+ else { /* no entry yet; create one */
269
+ lua_pop(L, 1);
270
+ plib = (void **)lua_newuserdata(L, sizeof(const void *));
271
+ *plib = NULL;
272
+ luaL_getmetatable(L, "_LOADLIB");
273
+ lua_setmetatable(L, -2);
274
+ lua_pushfstring(L, "%s%s", LIBPREFIX, path);
275
+ lua_pushvalue(L, -2);
276
+ lua_settable(L, LUA_REGISTRYINDEX);
277
+ }
278
+ return plib;
279
+ }
280
+
281
+
282
+ /*
283
+ ** __gc tag method: calls library's `ll_unloadlib' function with the lib
284
+ ** handle
285
+ */
286
+ static int gctm (lua_State *L) {
287
+ void **lib = (void **)luaL_checkudata(L, 1, "_LOADLIB");
288
+ if (*lib) ll_unloadlib(*lib);
289
+ *lib = NULL; /* mark library as closed */
290
+ return 0;
291
+ }
292
+
293
+
294
+ static int ll_loadfunc (lua_State *L, const char *path, const char *sym) {
295
+ void **reg = ll_register(L, path);
296
+ if (*reg == NULL) *reg = ll_load(L, path);
297
+ if (*reg == NULL)
298
+ return ERRLIB; /* unable to load library */
299
+ else {
300
+ lua_CFunction f = ll_sym(L, *reg, sym);
301
+ if (f == NULL)
302
+ return ERRFUNC; /* unable to find function */
303
+ lua_pushcfunction(L, f);
304
+ return 0; /* return function */
305
+ }
306
+ }
307
+
308
+
309
+ static int ll_loadlib (lua_State *L) {
310
+ const char *path = luaL_checkstring(L, 1);
311
+ const char *init = luaL_checkstring(L, 2);
312
+ int stat = ll_loadfunc(L, path, init);
313
+ if (stat == 0) /* no errors? */
314
+ return 1; /* return the loaded function */
315
+ else { /* error; error message is on stack top */
316
+ lua_pushnil(L);
317
+ lua_insert(L, -2);
318
+ lua_pushstring(L, (stat == ERRLIB) ? LIB_FAIL : "init");
319
+ return 3; /* return nil, error message, and where */
320
+ }
321
+ }
322
+
323
+
324
+
325
+ /*
326
+ ** {======================================================
327
+ ** 'require' function
328
+ ** =======================================================
329
+ */
330
+
331
+
332
+ static int readable (const char *filename) {
333
+ FILE *f = fopen(filename, "r"); /* try to open file */
334
+ if (f == NULL) return 0; /* open failed */
335
+ fclose(f);
336
+ return 1;
337
+ }
338
+
339
+
340
+ static const char *pushnexttemplate (lua_State *L, const char *path) {
341
+ const char *l;
342
+ while (*path == *LUA_PATHSEP) path++; /* skip separators */
343
+ if (*path == '\0') return NULL; /* no more templates */
344
+ l = strchr(path, *LUA_PATHSEP); /* find next separator */
345
+ if (l == NULL) l = path + strlen(path);
346
+ lua_pushlstring(L, path, l - path); /* template */
347
+ return l;
348
+ }
349
+
350
+
351
+ static const char *findfile (lua_State *L, const char *name,
352
+ const char *pname) {
353
+ const char *path;
354
+ name = luaL_gsub(L, name, ".", LUA_DIRSEP);
355
+ lua_getfield(L, LUA_ENVIRONINDEX, pname);
356
+ path = lua_tostring(L, -1);
357
+ if (path == NULL)
358
+ luaL_error(L, LUA_QL("package.%s") " must be a string", pname);
359
+ lua_pushliteral(L, ""); /* error accumulator */
360
+ while ((path = pushnexttemplate(L, path)) != NULL) {
361
+ const char *filename;
362
+ filename = luaL_gsub(L, lua_tostring(L, -1), LUA_PATH_MARK, name);
363
+ lua_remove(L, -2); /* remove path template */
364
+ if (readable(filename)) /* does file exist and is readable? */
365
+ return filename; /* return that file name */
366
+ lua_pushfstring(L, "\n\tno file " LUA_QS, filename);
367
+ lua_remove(L, -2); /* remove file name */
368
+ lua_concat(L, 2); /* add entry to possible error message */
369
+ }
370
+ return NULL; /* not found */
371
+ }
372
+
373
+
374
+ static void loaderror (lua_State *L, const char *filename) {
375
+ luaL_error(L, "error loading module " LUA_QS " from file " LUA_QS ":\n\t%s",
376
+ lua_tostring(L, 1), filename, lua_tostring(L, -1));
377
+ }
378
+
379
+
380
+ static int loader_Lua (lua_State *L) {
381
+ const char *filename;
382
+ const char *name = luaL_checkstring(L, 1);
383
+ filename = findfile(L, name, "path");
384
+ if (filename == NULL) return 1; /* library not found in this path */
385
+ if (luaL_loadfile(L, filename) != 0)
386
+ loaderror(L, filename);
387
+ return 1; /* library loaded successfully */
388
+ }
389
+
390
+
391
+ static const char *mkfuncname (lua_State *L, const char *modname) {
392
+ const char *funcname;
393
+ const char *mark = strchr(modname, *LUA_IGMARK);
394
+ if (mark) modname = mark + 1;
395
+ funcname = luaL_gsub(L, modname, ".", LUA_OFSEP);
396
+ funcname = lua_pushfstring(L, POF"%s", funcname);
397
+ lua_remove(L, -2); /* remove 'gsub' result */
398
+ return funcname;
399
+ }
400
+
401
+
402
+ static int loader_C (lua_State *L) {
403
+ const char *funcname;
404
+ const char *name = luaL_checkstring(L, 1);
405
+ const char *filename = findfile(L, name, "cpath");
406
+ if (filename == NULL) return 1; /* library not found in this path */
407
+ funcname = mkfuncname(L, name);
408
+ if (ll_loadfunc(L, filename, funcname) != 0)
409
+ loaderror(L, filename);
410
+ return 1; /* library loaded successfully */
411
+ }
412
+
413
+
414
+ static int loader_Croot (lua_State *L) {
415
+ const char *funcname;
416
+ const char *filename;
417
+ const char *name = luaL_checkstring(L, 1);
418
+ const char *p = strchr(name, '.');
419
+ int stat;
420
+ if (p == NULL) return 0; /* is root */
421
+ lua_pushlstring(L, name, p - name);
422
+ filename = findfile(L, lua_tostring(L, -1), "cpath");
423
+ if (filename == NULL) return 1; /* root not found */
424
+ funcname = mkfuncname(L, name);
425
+ if ((stat = ll_loadfunc(L, filename, funcname)) != 0) {
426
+ if (stat != ERRFUNC) loaderror(L, filename); /* real error */
427
+ lua_pushfstring(L, "\n\tno module " LUA_QS " in file " LUA_QS,
428
+ name, filename);
429
+ return 1; /* function not found */
430
+ }
431
+ return 1;
432
+ }
433
+
434
+
435
+ static int loader_preload (lua_State *L) {
436
+ const char *name = luaL_checkstring(L, 1);
437
+ lua_getfield(L, LUA_ENVIRONINDEX, "preload");
438
+ if (!lua_istable(L, -1))
439
+ luaL_error(L, LUA_QL("package.preload") " must be a table");
440
+ lua_getfield(L, -1, name);
441
+ if (lua_isnil(L, -1)) /* not found? */
442
+ lua_pushfstring(L, "\n\tno field package.preload['%s']", name);
443
+ return 1;
444
+ }
445
+
446
+
447
+ static const int sentinel_ = 0;
448
+ #define sentinel ((void *)&sentinel_)
449
+
450
+
451
+ static int ll_require (lua_State *L) {
452
+ const char *name = luaL_checkstring(L, 1);
453
+ int i;
454
+ lua_settop(L, 1); /* _LOADED table will be at index 2 */
455
+ lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED");
456
+ lua_getfield(L, 2, name);
457
+ if (lua_toboolean(L, -1)) { /* is it there? */
458
+ if (lua_touserdata(L, -1) == sentinel) /* check loops */
459
+ luaL_error(L, "loop or previous error loading module " LUA_QS, name);
460
+ return 1; /* package is already loaded */
461
+ }
462
+ /* else must load it; iterate over available loaders */
463
+ lua_getfield(L, LUA_ENVIRONINDEX, "loaders");
464
+ if (!lua_istable(L, -1))
465
+ luaL_error(L, LUA_QL("package.loaders") " must be a table");
466
+ lua_pushliteral(L, ""); /* error message accumulator */
467
+ for (i=1; ; i++) {
468
+ lua_rawgeti(L, -2, i); /* get a loader */
469
+ if (lua_isnil(L, -1))
470
+ luaL_error(L, "module " LUA_QS " not found:%s",
471
+ name, lua_tostring(L, -2));
472
+ lua_pushstring(L, name);
473
+ lua_call(L, 1, 1); /* call it */
474
+ if (lua_isfunction(L, -1)) /* did it find module? */
475
+ break; /* module loaded successfully */
476
+ else if (lua_isstring(L, -1)) /* loader returned error message? */
477
+ lua_concat(L, 2); /* accumulate it */
478
+ else
479
+ lua_pop(L, 1);
480
+ }
481
+ lua_pushlightuserdata(L, sentinel);
482
+ lua_setfield(L, 2, name); /* _LOADED[name] = sentinel */
483
+ lua_pushstring(L, name); /* pass name as argument to module */
484
+ lua_call(L, 1, 1); /* run loaded module */
485
+ if (!lua_isnil(L, -1)) /* non-nil return? */
486
+ lua_setfield(L, 2, name); /* _LOADED[name] = returned value */
487
+ lua_getfield(L, 2, name);
488
+ if (lua_touserdata(L, -1) == sentinel) { /* module did not set a value? */
489
+ lua_pushboolean(L, 1); /* use true as result */
490
+ lua_pushvalue(L, -1); /* extra copy to be returned */
491
+ lua_setfield(L, 2, name); /* _LOADED[name] = true */
492
+ }
493
+ return 1;
494
+ }
495
+
496
+ /* }====================================================== */
497
+
498
+
499
+
500
+ /*
501
+ ** {======================================================
502
+ ** 'module' function
503
+ ** =======================================================
504
+ */
505
+
506
+
507
+ static void setfenv (lua_State *L) {
508
+ lua_Debug ar;
509
+ if (lua_getstack(L, 1, &ar) == 0 ||
510
+ lua_getinfo(L, "f", &ar) == 0 || /* get calling function */
511
+ lua_iscfunction(L, -1))
512
+ luaL_error(L, LUA_QL("module") " not called from a Lua function");
513
+ lua_pushvalue(L, -2);
514
+ lua_setfenv(L, -2);
515
+ lua_pop(L, 1);
516
+ }
517
+
518
+
519
+ static void dooptions (lua_State *L, int n) {
520
+ int i;
521
+ for (i = 2; i <= n; i++) {
522
+ lua_pushvalue(L, i); /* get option (a function) */
523
+ lua_pushvalue(L, -2); /* module */
524
+ lua_call(L, 1, 0);
525
+ }
526
+ }
527
+
528
+
529
+ static void modinit (lua_State *L, const char *modname) {
530
+ const char *dot;
531
+ lua_pushvalue(L, -1);
532
+ lua_setfield(L, -2, "_M"); /* module._M = module */
533
+ lua_pushstring(L, modname);
534
+ lua_setfield(L, -2, "_NAME");
535
+ dot = strrchr(modname, '.'); /* look for last dot in module name */
536
+ if (dot == NULL) dot = modname;
537
+ else dot++;
538
+ /* set _PACKAGE as package name (full module name minus last part) */
539
+ lua_pushlstring(L, modname, dot - modname);
540
+ lua_setfield(L, -2, "_PACKAGE");
541
+ }
542
+
543
+
544
+ static int ll_module (lua_State *L) {
545
+ const char *modname = luaL_checkstring(L, 1);
546
+ int loaded = lua_gettop(L) + 1; /* index of _LOADED table */
547
+ lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED");
548
+ lua_getfield(L, loaded, modname); /* get _LOADED[modname] */
549
+ if (!lua_istable(L, -1)) { /* not found? */
550
+ lua_pop(L, 1); /* remove previous result */
551
+ /* try global variable (and create one if it does not exist) */
552
+ if (luaL_findtable(L, LUA_GLOBALSINDEX, modname, 1) != NULL)
553
+ return luaL_error(L, "name conflict for module " LUA_QS, modname);
554
+ lua_pushvalue(L, -1);
555
+ lua_setfield(L, loaded, modname); /* _LOADED[modname] = new table */
556
+ }
557
+ /* check whether table already has a _NAME field */
558
+ lua_getfield(L, -1, "_NAME");
559
+ if (!lua_isnil(L, -1)) /* is table an initialized module? */
560
+ lua_pop(L, 1);
561
+ else { /* no; initialize it */
562
+ lua_pop(L, 1);
563
+ modinit(L, modname);
564
+ }
565
+ lua_pushvalue(L, -1);
566
+ setfenv(L);
567
+ dooptions(L, loaded - 1);
568
+ return 0;
569
+ }
570
+
571
+
572
+ static int ll_seeall (lua_State *L) {
573
+ luaL_checktype(L, 1, LUA_TTABLE);
574
+ if (!lua_getmetatable(L, 1)) {
575
+ lua_createtable(L, 0, 1); /* create new metatable */
576
+ lua_pushvalue(L, -1);
577
+ lua_setmetatable(L, 1);
578
+ }
579
+ lua_pushvalue(L, LUA_GLOBALSINDEX);
580
+ lua_setfield(L, -2, "__index"); /* mt.__index = _G */
581
+ return 0;
582
+ }
583
+
584
+
585
+ /* }====================================================== */
586
+
587
+
588
+
589
+ /* auxiliary mark (for internal use) */
590
+ #define AUXMARK "\1"
591
+
592
+ static void setpath (lua_State *L, const char *fieldname, const char *envname,
593
+ const char *def) {
594
+ const char *path = getenv(envname);
595
+ if (path == NULL) /* no environment variable? */
596
+ lua_pushstring(L, def); /* use default */
597
+ else {
598
+ /* replace ";;" by ";AUXMARK;" and then AUXMARK by default path */
599
+ path = luaL_gsub(L, path, LUA_PATHSEP LUA_PATHSEP,
600
+ LUA_PATHSEP AUXMARK LUA_PATHSEP);
601
+ luaL_gsub(L, path, AUXMARK, def);
602
+ lua_remove(L, -2);
603
+ }
604
+ setprogdir(L);
605
+ lua_setfield(L, -2, fieldname);
606
+ }
607
+
608
+
609
+ static const luaL_Reg pk_funcs[] = {
610
+ {"loadlib", ll_loadlib},
611
+ {"seeall", ll_seeall},
612
+ {NULL, NULL}
613
+ };
614
+
615
+
616
+ static const luaL_Reg ll_funcs[] = {
617
+ {"module", ll_module},
618
+ {"require", ll_require},
619
+ {NULL, NULL}
620
+ };
621
+
622
+
623
+ static const lua_CFunction loaders[] =
624
+ {loader_preload, loader_Lua, loader_C, loader_Croot, NULL};
625
+
626
+
627
+ LUALIB_API int luaopen_package (lua_State *L) {
628
+ int i;
629
+ /* create new type _LOADLIB */
630
+ luaL_newmetatable(L, "_LOADLIB");
631
+ lua_pushcfunction(L, gctm);
632
+ lua_setfield(L, -2, "__gc");
633
+ /* create `package' table */
634
+ luaL_register(L, LUA_LOADLIBNAME, pk_funcs);
635
+ #if defined(LUA_COMPAT_LOADLIB)
636
+ lua_getfield(L, -1, "loadlib");
637
+ lua_setfield(L, LUA_GLOBALSINDEX, "loadlib");
638
+ #endif
639
+ lua_pushvalue(L, -1);
640
+ lua_replace(L, LUA_ENVIRONINDEX);
641
+ /* create `loaders' table */
642
+ lua_createtable(L, 0, sizeof(loaders)/sizeof(loaders[0]) - 1);
643
+ /* fill it with pre-defined loaders */
644
+ for (i=0; loaders[i] != NULL; i++) {
645
+ lua_pushcfunction(L, loaders[i]);
646
+ lua_rawseti(L, -2, i+1);
647
+ }
648
+ lua_setfield(L, -2, "loaders"); /* put it in field `loaders' */
649
+ setpath(L, "path", LUA_PATH, LUA_PATH_DEFAULT); /* set field `path' */
650
+ setpath(L, "cpath", LUA_CPATH, LUA_CPATH_DEFAULT); /* set field `cpath' */
651
+ /* store config information */
652
+ lua_pushliteral(L, LUA_DIRSEP "\n" LUA_PATHSEP "\n" LUA_PATH_MARK "\n"
653
+ LUA_EXECDIR "\n" LUA_IGMARK);
654
+ lua_setfield(L, -2, "config");
655
+ /* set field `loaded' */
656
+ luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 2);
657
+ lua_setfield(L, -2, "loaded");
658
+ /* set field `preload' */
659
+ lua_newtable(L);
660
+ lua_setfield(L, -2, "preload");
661
+ lua_pushvalue(L, LUA_GLOBALSINDEX);
662
+ luaL_register(L, NULL, ll_funcs); /* open lib into global table */
663
+ lua_pop(L, 1);
664
+ return 1; /* return 'package' table */
665
+ }
666
+