webruby 0.1.2 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (518) hide show
  1. checksums.yaml +4 -4
  2. data/driver/driver.c +12 -0
  3. data/lib/webruby/config.rb +3 -3
  4. data/lib/webruby/environment.rb +1 -0
  5. data/lib/webruby/rake/files.rake +22 -22
  6. data/lib/webruby/rake/general.rake +0 -1
  7. data/lib/webruby/utility.rb +2 -0
  8. data/modules/emscripten/AUTHORS +12 -1
  9. data/modules/emscripten/cmake/Platform/Emscripten.cmake +152 -15
  10. data/modules/emscripten/em++ +2 -0
  11. data/modules/emscripten/em++.bat +1 -1
  12. data/modules/emscripten/em-config.bat +1 -1
  13. data/modules/emscripten/emar.bat +1 -1
  14. data/modules/emscripten/emcc +233 -95
  15. data/modules/emscripten/emcc.bat +1 -1
  16. data/modules/emscripten/emconfigure.bat +1 -1
  17. data/modules/emscripten/emmake.bat +1 -1
  18. data/modules/emscripten/emranlib.bat +1 -1
  19. data/modules/emscripten/emscripten.py +221 -217
  20. data/modules/emscripten/package.json +7 -0
  21. data/modules/emscripten/src/analyzer.js +1437 -1385
  22. data/modules/emscripten/src/compiler.js +30 -6
  23. data/modules/emscripten/src/compiler_phase.html +33 -0
  24. data/modules/emscripten/src/fastLong.js +6 -6
  25. data/modules/emscripten/src/headless.js +47 -656
  26. data/modules/emscripten/src/headlessCanvas.js +618 -0
  27. data/modules/emscripten/src/intertyper.js +1038 -899
  28. data/modules/emscripten/src/jsifier.js +818 -714
  29. data/modules/emscripten/src/library.js +1794 -2968
  30. data/modules/emscripten/src/library_browser.js +81 -16
  31. data/modules/emscripten/src/library_egl.js +9 -3
  32. data/modules/emscripten/src/library_fs.js +1585 -0
  33. data/modules/emscripten/src/library_gl.js +445 -202
  34. data/modules/emscripten/src/library_glfw.js +4 -1
  35. data/modules/emscripten/src/library_glut.js +61 -13
  36. data/modules/emscripten/src/library_idbfs.js +216 -0
  37. data/modules/emscripten/src/library_memfs.js +279 -0
  38. data/modules/emscripten/src/library_nodefs.js +234 -0
  39. data/modules/emscripten/src/library_openal.js +131 -150
  40. data/modules/emscripten/src/library_path.js +3 -0
  41. data/modules/emscripten/src/library_sdl.js +499 -229
  42. data/modules/emscripten/src/library_sockfs.js +576 -0
  43. data/modules/emscripten/src/library_tty.js +146 -0
  44. data/modules/emscripten/src/modules.js +30 -35
  45. data/modules/emscripten/src/parseTools.js +356 -161
  46. data/modules/emscripten/src/postamble.js +76 -31
  47. data/modules/emscripten/src/preamble.js +271 -41
  48. data/modules/emscripten/src/proxyClient.js +82 -0
  49. data/modules/emscripten/src/proxyWorker.js +143 -0
  50. data/modules/emscripten/src/relooper/Relooper.cpp +60 -24
  51. data/modules/emscripten/src/relooper/Relooper.h +3 -2
  52. data/modules/emscripten/src/relooper/emscripten/glue.js +20 -10
  53. data/modules/emscripten/src/relooper/fuzzer.py +19 -10
  54. data/modules/emscripten/src/relooper/test.cpp +50 -50
  55. data/modules/emscripten/src/relooper/test.txt +147 -30
  56. data/modules/emscripten/src/relooper/test2.c +13 -13
  57. data/modules/emscripten/src/relooper/test2.txt +17 -3
  58. data/modules/emscripten/src/relooper/test3.c +7 -7
  59. data/modules/emscripten/src/relooper/test3.txt +36 -7
  60. data/modules/emscripten/src/relooper/test4.cpp +7 -7
  61. data/modules/emscripten/src/relooper/test4.txt +28 -7
  62. data/modules/emscripten/src/relooper/test5.cpp +6 -6
  63. data/modules/emscripten/src/relooper/test5.txt +34 -10
  64. data/modules/emscripten/src/relooper/test6.cpp +4 -4
  65. data/modules/emscripten/src/relooper/test6.txt +17 -3
  66. data/modules/emscripten/src/relooper/test_dead.cpp +2 -2
  67. data/modules/emscripten/src/relooper/test_debug.cpp +4 -4
  68. data/modules/emscripten/src/relooper/test_debug.txt +17 -3
  69. data/modules/emscripten/src/relooper/test_fuzz1.cpp +9 -9
  70. data/modules/emscripten/src/relooper/test_fuzz1.txt +45 -5
  71. data/modules/emscripten/src/relooper/test_fuzz2.cpp +4 -4
  72. data/modules/emscripten/src/relooper/test_fuzz2.txt +18 -1
  73. data/modules/emscripten/src/relooper/test_fuzz3.cpp +5 -5
  74. data/modules/emscripten/src/relooper/test_fuzz3.txt +16 -0
  75. data/modules/emscripten/src/relooper/test_fuzz4.cpp +5 -5
  76. data/modules/emscripten/src/relooper/test_fuzz4.txt +25 -3
  77. data/modules/emscripten/src/relooper/test_fuzz5.cpp +10 -10
  78. data/modules/emscripten/src/relooper/test_fuzz5.txt +49 -15
  79. data/modules/emscripten/src/relooper/test_fuzz6.cpp +92 -92
  80. data/modules/emscripten/src/relooper/test_fuzz6.txt +201 -18
  81. data/modules/emscripten/src/relooper/test_inf.cpp +184 -184
  82. data/modules/emscripten/src/relooper/test_inf.txt +1078 -332
  83. data/modules/emscripten/src/runtime.js +69 -45
  84. data/modules/emscripten/src/settings.js +48 -919
  85. data/modules/emscripten/src/shell.html +1 -1
  86. data/modules/emscripten/src/shell.js +14 -8
  87. data/modules/emscripten/src/shell_sharedlib.js +18 -1
  88. data/modules/emscripten/src/simd.js +958 -0
  89. data/modules/emscripten/src/struct_info.json +1045 -0
  90. data/modules/emscripten/src/utility.js +11 -0
  91. data/modules/emscripten/system/bin/sdl-config +13 -0
  92. data/modules/emscripten/system/include/compat/ctype.h +17 -0
  93. data/modules/emscripten/system/include/compat/malloc.h +48 -0
  94. data/modules/emscripten/system/include/compat/math.h +14 -0
  95. data/modules/emscripten/system/include/compat/netdb.h +22 -0
  96. data/modules/emscripten/system/include/compat/stdarg.h +16 -0
  97. data/modules/emscripten/system/include/compat/stdlib.h +16 -0
  98. data/modules/emscripten/system/include/compat/string.h +17 -0
  99. data/modules/emscripten/system/include/compat/sys/socketvar.h +14 -0
  100. data/modules/emscripten/system/include/compat/sys/stat.h +20 -0
  101. data/modules/emscripten/system/include/{libc → compat}/sys/timeb.h +3 -7
  102. data/modules/emscripten/system/include/compat/time.h +18 -0
  103. data/modules/emscripten/system/include/compat/unistd.h +16 -0
  104. data/modules/emscripten/system/include/compat/xlocale.h +19 -0
  105. data/modules/emscripten/system/include/emscripten/emscripten.h +48 -7
  106. data/modules/emscripten/system/include/emscripten/vector.h +6 -0
  107. data/modules/emscripten/system/include/libc/aio.h +69 -0
  108. data/modules/emscripten/system/include/libc/alloca.h +13 -13
  109. data/modules/emscripten/system/include/libc/ar.h +19 -63
  110. data/modules/emscripten/system/include/libc/arpa/ftp.h +35 -0
  111. data/modules/emscripten/system/include/libc/arpa/inet.h +36 -0
  112. data/modules/emscripten/system/include/libc/arpa/nameser.h +467 -0
  113. data/modules/emscripten/system/include/libc/arpa/nameser_compat.h +2 -0
  114. data/modules/emscripten/system/include/libc/arpa/telnet.h +251 -0
  115. data/modules/emscripten/system/include/libc/arpa/tftp.h +31 -0
  116. data/modules/emscripten/system/include/libc/assert.h +9 -36
  117. data/modules/emscripten/system/include/libc/bits/alltypes.h +397 -0
  118. data/modules/emscripten/system/include/libc/bits/endian.h +1 -0
  119. data/modules/emscripten/system/include/libc/bits/errno.h +134 -0
  120. data/modules/emscripten/system/include/libc/bits/fcntl.h +38 -0
  121. data/modules/emscripten/system/include/libc/bits/fenv.h +34 -0
  122. data/modules/emscripten/system/include/libc/bits/float.h +17 -0
  123. data/modules/emscripten/system/include/libc/bits/io.h +0 -0
  124. data/modules/emscripten/system/include/libc/bits/ioctl.h +197 -0
  125. data/modules/emscripten/system/include/libc/bits/ipc.h +14 -0
  126. data/modules/emscripten/system/include/libc/bits/limits.h +8 -0
  127. data/modules/emscripten/system/include/libc/bits/mman.h +62 -0
  128. data/modules/emscripten/system/include/libc/bits/msg.h +16 -0
  129. data/modules/emscripten/system/include/libc/bits/posix.h +2 -0
  130. data/modules/emscripten/system/include/libc/bits/reg.h +19 -0
  131. data/modules/emscripten/system/include/libc/bits/setjmp.h +1 -0
  132. data/modules/emscripten/system/include/libc/bits/shm.h +18 -0
  133. data/modules/emscripten/system/include/libc/bits/signal.h +112 -0
  134. data/modules/emscripten/system/include/libc/bits/socket.h +17 -0
  135. data/modules/emscripten/system/include/libc/bits/stat.h +22 -0
  136. data/modules/emscripten/system/include/libc/bits/statfs.h +7 -0
  137. data/modules/emscripten/system/include/libc/bits/stdarg.h +4 -0
  138. data/modules/emscripten/system/include/libc/bits/stdint.h +20 -0
  139. data/modules/emscripten/system/include/libc/bits/syscall.h +696 -0
  140. data/modules/emscripten/system/include/libc/bits/termios.h +160 -0
  141. data/modules/emscripten/system/include/libc/bits/user.h +48 -0
  142. data/modules/emscripten/system/include/libc/byteswap.h +26 -0
  143. data/modules/emscripten/system/include/libc/complex.h +55 -54
  144. data/modules/emscripten/system/include/libc/cpio.h +29 -0
  145. data/modules/emscripten/system/include/libc/crypt.h +20 -0
  146. data/modules/emscripten/system/include/libc/ctype.h +58 -187
  147. data/modules/emscripten/system/include/libc/dirent.h +69 -6
  148. data/modules/emscripten/system/include/libc/dlfcn.h +42 -0
  149. data/modules/emscripten/system/include/libc/elf.h +2555 -0
  150. data/modules/emscripten/system/include/libc/endian.h +80 -1
  151. data/modules/emscripten/system/include/libc/err.h +25 -0
  152. data/modules/emscripten/system/include/libc/errno.h +23 -7
  153. data/modules/emscripten/system/include/libc/fcntl.h +175 -1
  154. data/modules/emscripten/system/include/libc/features.h +32 -0
  155. data/modules/emscripten/system/include/libc/fenv.h +28 -0
  156. data/modules/emscripten/system/include/libc/float.h +34 -0
  157. data/modules/emscripten/system/include/libc/fnmatch.h +24 -50
  158. data/modules/emscripten/system/include/libc/ftw.h +42 -0
  159. data/modules/emscripten/system/include/libc/getopt.h +22 -187
  160. data/modules/emscripten/system/include/libc/glob.h +42 -83
  161. data/modules/emscripten/system/include/libc/grp.h +37 -79
  162. data/modules/emscripten/system/include/libc/iconv.h +18 -56
  163. data/modules/emscripten/system/include/libc/ifaddrs.h +24 -53
  164. data/modules/emscripten/system/include/libc/inttypes.h +208 -271
  165. data/modules/emscripten/system/include/libc/iso646.h +5 -28
  166. data/modules/emscripten/system/include/libc/langinfo.h +88 -316
  167. data/modules/emscripten/system/include/libc/lastlog.h +1 -0
  168. data/modules/emscripten/system/include/libc/libgen.h +5 -13
  169. data/modules/emscripten/system/include/libc/libintl.h +25 -0
  170. data/modules/emscripten/system/include/libc/limits.h +140 -149
  171. data/modules/emscripten/system/include/libc/link.h +54 -0
  172. data/modules/emscripten/system/include/libc/locale.h +72 -70
  173. data/modules/emscripten/system/include/libc/malloc.h +0 -169
  174. data/modules/emscripten/system/include/libc/math.h +393 -573
  175. data/modules/emscripten/system/include/libc/memory.h +1 -0
  176. data/modules/emscripten/system/include/libc/mntent.h +44 -0
  177. data/modules/emscripten/system/include/libc/monetary.h +23 -0
  178. data/modules/emscripten/system/include/libc/mqueue.h +36 -0
  179. data/modules/emscripten/system/include/libc/net/ethernet.h +55 -0
  180. data/modules/emscripten/system/include/libc/net/if.h +135 -0
  181. data/modules/emscripten/system/include/libc/net/if_arp.h +133 -0
  182. data/modules/emscripten/system/include/libc/net/route.h +124 -0
  183. data/modules/emscripten/system/include/libc/netdb.h +161 -0
  184. data/modules/emscripten/system/include/libc/netinet/ether.h +14 -0
  185. data/modules/emscripten/system/include/libc/netinet/icmp6.h +305 -0
  186. data/modules/emscripten/system/include/libc/netinet/if_ether.h +126 -0
  187. data/modules/emscripten/system/include/libc/netinet/in.h +336 -0
  188. data/modules/emscripten/system/include/libc/netinet/in_systm.h +9 -0
  189. data/modules/emscripten/system/include/libc/netinet/ip.h +186 -0
  190. data/modules/emscripten/system/include/libc/netinet/ip6.h +142 -0
  191. data/modules/emscripten/system/include/libc/netinet/ip_icmp.h +192 -0
  192. data/modules/emscripten/system/include/libc/netinet/tcp.h +71 -0
  193. data/modules/emscripten/system/include/libc/netinet/udp.h +35 -0
  194. data/modules/emscripten/system/include/libc/netpacket/packet.h +44 -0
  195. data/modules/emscripten/system/include/libc/nl_types.h +22 -0
  196. data/modules/emscripten/system/include/libc/paths.h +30 -5
  197. data/modules/emscripten/system/include/libc/poll.h +46 -0
  198. data/modules/emscripten/system/include/libc/pthread.h +191 -331
  199. data/modules/emscripten/system/include/libc/pty.h +18 -0
  200. data/modules/emscripten/system/include/libc/pwd.h +33 -62
  201. data/modules/emscripten/system/include/libc/readme.txt +2 -2
  202. data/modules/emscripten/system/include/libc/regex.h +53 -93
  203. data/modules/emscripten/system/include/libc/resolv.h +144 -0
  204. data/modules/emscripten/system/include/libc/sched.h +124 -89
  205. data/modules/emscripten/system/include/libc/search.h +40 -48
  206. data/modules/emscripten/system/include/libc/semaphore.h +35 -0
  207. data/modules/emscripten/system/include/libc/setjmp.h +35 -13
  208. data/modules/emscripten/system/include/libc/shadow.h +44 -0
  209. data/modules/emscripten/system/include/libc/signal.h +245 -20
  210. data/modules/emscripten/system/include/libc/spawn.h +74 -0
  211. data/modules/emscripten/system/include/libc/stdalign.h +15 -0
  212. data/modules/emscripten/system/include/libc/stdarg.h +18 -43
  213. data/modules/emscripten/system/include/libc/stdbool.h +14 -0
  214. data/modules/emscripten/system/include/libc/stddef.h +12 -58
  215. data/modules/emscripten/system/include/libc/stdint.h +82 -458
  216. data/modules/emscripten/system/include/libc/stdio.h +184 -679
  217. data/modules/emscripten/system/include/libc/stdio_ext.h +34 -0
  218. data/modules/emscripten/system/include/libc/stdlib.h +146 -205
  219. data/modules/emscripten/system/include/libc/stdnoreturn.h +5 -0
  220. data/modules/emscripten/system/include/libc/string.h +86 -89
  221. data/modules/emscripten/system/include/libc/strings.h +27 -27
  222. data/modules/emscripten/system/include/libc/stropts.h +139 -0
  223. data/modules/emscripten/system/include/libc/sys/acct.h +75 -0
  224. data/modules/emscripten/system/include/libc/sys/cachectl.h +22 -0
  225. data/modules/emscripten/system/include/libc/sys/dir.h +0 -8
  226. data/modules/emscripten/system/include/libc/sys/epoll.h +67 -0
  227. data/modules/emscripten/system/include/libc/sys/errno.h +2 -190
  228. data/modules/emscripten/system/include/libc/sys/eventfd.h +26 -0
  229. data/modules/emscripten/system/include/libc/sys/fcntl.h +2 -4
  230. data/modules/emscripten/system/include/libc/sys/file.h +20 -1
  231. data/modules/emscripten/system/include/libc/sys/fsuid.h +20 -0
  232. data/modules/emscripten/system/include/libc/sys/inotify.h +57 -0
  233. data/modules/emscripten/system/include/libc/sys/io.h +17 -0
  234. data/modules/emscripten/system/include/libc/sys/ioctl.h +14 -0
  235. data/modules/emscripten/system/include/libc/sys/ipc.h +42 -0
  236. data/modules/emscripten/system/include/{sys/sysctl.h → libc/sys/klog.h} +4 -4
  237. data/modules/emscripten/system/include/libc/sys/mman.h +55 -0
  238. data/modules/emscripten/system/include/libc/sys/mount.h +72 -0
  239. data/modules/emscripten/system/include/libc/sys/msg.h +52 -0
  240. data/modules/emscripten/system/include/libc/sys/mtio.h +188 -0
  241. data/modules/emscripten/system/include/libc/sys/param.h +29 -19
  242. data/modules/emscripten/system/include/libc/sys/personality.h +46 -0
  243. data/modules/emscripten/system/include/libc/sys/poll.h +2 -0
  244. data/modules/emscripten/system/include/libc/sys/prctl.h +101 -0
  245. data/modules/emscripten/system/include/libc/sys/procfs.h +65 -0
  246. data/modules/emscripten/system/include/libc/sys/ptrace.h +96 -0
  247. data/modules/emscripten/system/include/libc/sys/reboot.h +20 -0
  248. data/modules/emscripten/system/include/libc/sys/reg.h +9 -0
  249. data/modules/emscripten/system/include/libc/sys/resource.h +89 -45
  250. data/modules/emscripten/system/include/libc/sys/select.h +42 -0
  251. data/modules/emscripten/system/include/libc/sys/sem.h +82 -0
  252. data/modules/emscripten/system/include/libc/sys/sendfile.h +22 -0
  253. data/modules/emscripten/system/include/libc/sys/shm.h +61 -0
  254. data/modules/emscripten/system/include/libc/sys/signal.h +1 -315
  255. data/modules/emscripten/system/include/libc/sys/signalfd.h +44 -0
  256. data/modules/emscripten/system/include/libc/sys/socket.h +299 -0
  257. data/modules/emscripten/system/include/libc/sys/stat.h +95 -204
  258. data/modules/emscripten/system/include/libc/sys/statfs.h +32 -0
  259. data/modules/emscripten/system/include/libc/sys/statvfs.h +57 -0
  260. data/modules/emscripten/system/include/libc/sys/stropts.h +1 -0
  261. data/modules/emscripten/system/include/libc/sys/swap.h +21 -0
  262. data/modules/emscripten/system/include/libc/sys/syscall.h +6 -0
  263. data/modules/emscripten/system/include/libc/sys/sysctl.h +17 -0
  264. data/modules/emscripten/system/include/libc/sys/sysinfo.h +36 -0
  265. data/modules/emscripten/system/include/libc/sys/syslog.h +1 -0
  266. data/modules/emscripten/system/include/libc/sys/sysmacros.h +15 -0
  267. data/modules/emscripten/system/include/libc/sys/termios.h +2 -280
  268. data/modules/emscripten/system/include/libc/sys/time.h +40 -68
  269. data/modules/emscripten/system/include/libc/sys/timerfd.h +24 -0
  270. data/modules/emscripten/system/include/libc/sys/times.h +14 -16
  271. data/modules/emscripten/system/include/libc/sys/timex.h +98 -0
  272. data/modules/emscripten/system/include/libc/sys/ttydefaults.h +34 -92
  273. data/modules/emscripten/system/include/libc/sys/types.h +87 -481
  274. data/modules/emscripten/system/include/libc/sys/ucontext.h +1 -0
  275. data/modules/emscripten/system/include/libc/sys/uio.h +48 -0
  276. data/modules/emscripten/system/include/libc/sys/un.h +32 -0
  277. data/modules/emscripten/system/include/libc/sys/user.h +16 -0
  278. data/modules/emscripten/system/include/libc/sys/utsname.h +30 -0
  279. data/modules/emscripten/system/include/libc/sys/vfs.h +1 -0
  280. data/modules/emscripten/system/include/libc/sys/wait.h +41 -26
  281. data/modules/emscripten/system/include/libc/sys/xattr.h +30 -0
  282. data/modules/emscripten/system/include/libc/syscall.h +1 -0
  283. data/modules/emscripten/system/include/libc/sysexits.h +21 -0
  284. data/modules/emscripten/system/include/libc/syslog.h +104 -0
  285. data/modules/emscripten/system/include/libc/tar.h +27 -33
  286. data/modules/emscripten/system/include/libc/termios.h +40 -1
  287. data/modules/emscripten/system/include/libc/tgmath.h +270 -0
  288. data/modules/emscripten/system/include/libc/time.h +96 -237
  289. data/modules/emscripten/system/include/libc/ucontext.h +25 -0
  290. data/modules/emscripten/system/include/libc/ulimit.h +17 -0
  291. data/modules/emscripten/system/include/libc/unistd.h +517 -4
  292. data/modules/emscripten/system/include/libc/utime.h +15 -3
  293. data/modules/emscripten/system/include/libc/utmp.h +40 -1
  294. data/modules/emscripten/system/include/libc/utmpx.h +58 -0
  295. data/modules/emscripten/system/include/libc/values.h +39 -0
  296. data/modules/emscripten/system/include/libc/wchar.h +164 -175
  297. data/modules/emscripten/system/include/libc/wctype.h +67 -37
  298. data/modules/emscripten/system/include/libc/wordexp.h +31 -42
  299. data/modules/emscripten/system/include/libcxx/__locale +6 -6
  300. data/modules/emscripten/system/include/libcxx/locale +1 -1
  301. data/modules/emscripten/system/lib/libc/musl/readme.txt +9 -1
  302. data/modules/emscripten/system/lib/libc/musl/src/internal/locale_impl.h +5 -0
  303. data/modules/emscripten/system/lib/libc/musl/src/internal/stdio_impl.h +92 -0
  304. data/modules/emscripten/system/lib/libc/musl/src/locale/big5.h +1085 -0
  305. data/modules/emscripten/system/lib/libc/musl/src/locale/codepages.h +238 -0
  306. data/modules/emscripten/system/lib/libc/musl/src/locale/gb18030.h +1836 -0
  307. data/modules/emscripten/system/lib/libc/musl/src/locale/hkscs.h +390 -0
  308. data/modules/emscripten/system/lib/libc/musl/src/locale/iconv.c +454 -0
  309. data/modules/emscripten/system/lib/libc/musl/src/locale/iswalnum_l.c +6 -0
  310. data/modules/emscripten/system/lib/libc/musl/src/locale/iswalpha_l.c +6 -0
  311. data/modules/emscripten/system/lib/libc/musl/src/locale/iswblank_l.c +6 -0
  312. data/modules/emscripten/system/lib/libc/musl/src/locale/iswcntrl_l.c +6 -0
  313. data/modules/emscripten/system/lib/libc/musl/src/locale/iswctype_l.c +9 -0
  314. data/modules/emscripten/system/lib/libc/musl/src/locale/iswdigit_l.c +6 -0
  315. data/modules/emscripten/system/lib/libc/musl/src/locale/iswgraph_l.c +6 -0
  316. data/modules/emscripten/system/lib/libc/musl/src/locale/iswlower_l.c +6 -0
  317. data/modules/emscripten/system/lib/libc/musl/src/locale/iswprint_l.c +6 -0
  318. data/modules/emscripten/system/lib/libc/musl/src/locale/iswpunct_l.c +6 -0
  319. data/modules/emscripten/system/lib/libc/musl/src/locale/iswspace_l.c +6 -0
  320. data/modules/emscripten/system/lib/libc/musl/src/locale/iswupper_l.c +6 -0
  321. data/modules/emscripten/system/lib/libc/musl/src/locale/iswxdigit_l.c +6 -0
  322. data/modules/emscripten/system/lib/libc/musl/src/locale/jis0208.h +550 -0
  323. data/modules/emscripten/system/lib/libc/musl/src/locale/ksc.h +640 -0
  324. data/modules/emscripten/system/lib/libc/musl/src/locale/legacychars.h +39 -0
  325. data/modules/emscripten/system/lib/libc/musl/src/locale/strfmon.c +101 -0
  326. data/modules/emscripten/system/lib/libc/musl/src/locale/strxfrm.c +18 -0
  327. data/modules/emscripten/system/lib/libc/musl/src/locale/towctrans_l.c +6 -0
  328. data/modules/emscripten/system/lib/libc/musl/src/locale/towlower_l.c +9 -0
  329. data/modules/emscripten/system/lib/libc/musl/src/locale/towupper_l.c +9 -0
  330. data/modules/emscripten/system/lib/libc/musl/src/locale/wcscoll.c +16 -0
  331. data/modules/emscripten/system/lib/libc/musl/src/locale/wcscoll_l.c +6 -0
  332. data/modules/emscripten/system/lib/libc/musl/src/locale/wcsxfrm.c +21 -0
  333. data/modules/emscripten/system/lib/libc/musl/src/locale/wcsxfrm_l.c +6 -0
  334. data/modules/emscripten/system/lib/libc/musl/src/locale/wctrans_l.c +6 -0
  335. data/modules/emscripten/system/lib/libc/musl/src/locale/wctype_l.c +9 -0
  336. data/modules/emscripten/system/lib/libc/musl/src/stdio/fwprintf.c +13 -0
  337. data/modules/emscripten/system/lib/libc/musl/src/stdio/swprintf.c +14 -0
  338. data/modules/emscripten/system/lib/libc/musl/src/stdio/vfwprintf.c +361 -0
  339. data/modules/emscripten/system/lib/libc/musl/src/stdio/vswprintf.c +53 -0
  340. data/modules/emscripten/system/lib/libc/musl/src/stdio/vwprintf.c +7 -0
  341. data/modules/emscripten/system/lib/libc/musl/src/stdio/wprintf.c +13 -0
  342. data/modules/emscripten/system/lib/libcextra.symbols +44 -0
  343. data/modules/emscripten/system/lib/libcxx/exception.cpp +3 -3
  344. data/modules/emscripten/system/lib/libcxx/locale.cpp +12 -12
  345. data/modules/emscripten/system/lib/libcxxabi/src/cxa_new_delete.cpp +1 -1
  346. data/modules/emscripten/tools/asm_module.py +2 -0
  347. data/modules/emscripten/tools/autodebugger.py +3 -1
  348. data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +0 -4835
  349. data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +0 -6495
  350. data/modules/emscripten/tools/file_packager.py +53 -56
  351. data/modules/emscripten/tools/find_bigfuncs.py +2 -2
  352. data/modules/emscripten/tools/find_bigvars.py +24 -0
  353. data/modules/emscripten/tools/gen_struct_info.py +509 -0
  354. data/modules/emscripten/tools/gen_struct_info.pyc +0 -0
  355. data/modules/emscripten/tools/js-optimizer.js +177 -86
  356. data/modules/emscripten/tools/js_optimizer.py +54 -19
  357. data/modules/emscripten/tools/js_optimizer.pyc +0 -0
  358. data/modules/emscripten/tools/jsrun.py +17 -7
  359. data/modules/emscripten/tools/jsrun.pyc +0 -0
  360. data/modules/emscripten/tools/response_file.py +2 -2
  361. data/modules/emscripten/tools/response_file.pyc +0 -0
  362. data/modules/emscripten/tools/shared.py +257 -123
  363. data/modules/emscripten/tools/shared.pyc +0 -0
  364. data/modules/emscripten/tools/source-maps/sourcemapper.js +37 -6
  365. data/modules/emscripten/tools/tempfiles.py +1 -0
  366. data/modules/emscripten/tools/tempfiles.pyc +0 -0
  367. data/modules/emscripten/tools/test-js-optimizer-asm-minlast-output.js +2 -0
  368. data/modules/emscripten/tools/test-js-optimizer-asm-minlast.js +8 -0
  369. data/modules/emscripten/tools/test-js-optimizer-asm-outline1-output.js +412 -169
  370. data/modules/emscripten/tools/test-js-optimizer-asm-outline1.js +88 -0
  371. data/modules/emscripten/tools/test-js-optimizer-asm-outline2-output.js +311 -265
  372. data/modules/emscripten/tools/test-js-optimizer-asm-pre-output.js +0 -20
  373. data/modules/emscripten/tools/test-js-optimizer-asm-pre.js +0 -21
  374. data/modules/emscripten/tools/test-js-optimizer-asm-regs.js +2 -2
  375. data/modules/emscripten/tools/test-js-optimizer-regs-output.js +8 -8
  376. data/modules/emscripten/tools/test-js-optimizer-regs.js +1 -1
  377. data/modules/emscripten/tools/validate_asmjs.py +82 -0
  378. data/modules/mruby/Rakefile +2 -2
  379. data/modules/mruby/include/mruby/class.h +2 -2
  380. data/modules/mruby/include/mruby/compile.h +12 -4
  381. data/modules/mruby/include/mruby/data.h +8 -3
  382. data/modules/mruby/include/mruby/debug.h +65 -0
  383. data/modules/mruby/include/mruby/dump.h +10 -2
  384. data/modules/mruby/include/mruby/irep.h +1 -0
  385. data/modules/mruby/include/mruby/string.h +2 -1
  386. data/modules/mruby/include/mruby/value.h +20 -13
  387. data/modules/mruby/include/mruby/variable.h +1 -0
  388. data/modules/mruby/include/mruby.h +5 -6
  389. data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +6 -4
  390. data/modules/mruby/mrbgems/mruby-math/src/math.c +4 -0
  391. data/modules/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +1 -1
  392. data/modules/mruby/mrbgems/mruby-proc-ext/src/proc.c +1 -1
  393. data/modules/mruby/mrbgems/mruby-random/src/random.c +1 -4
  394. data/modules/mruby/mrbgems/mruby-string-ext/src/string.c +25 -16
  395. data/modules/mruby/mrbgems/mruby-string-ext/test/string.rb +4 -0
  396. data/modules/mruby/mrbgems/mruby-struct/src/struct.c +1 -1
  397. data/modules/mruby/mrbgems/mruby-symbol-ext/mrblib/symbol.rb +51 -0
  398. data/modules/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +22 -0
  399. data/modules/mruby/mrbgems/mruby-time/src/time.c +38 -60
  400. data/modules/mruby/mrblib/class.rb +2 -2
  401. data/modules/mruby/src/backtrace.c +96 -23
  402. data/modules/mruby/src/class.c +43 -41
  403. data/modules/mruby/src/codegen.c +52 -46
  404. data/modules/mruby/src/debug.c +214 -0
  405. data/modules/mruby/src/dump.c +245 -17
  406. data/modules/mruby/src/error.c +14 -6
  407. data/modules/mruby/src/etc.c +17 -10
  408. data/modules/mruby/src/gc.c +9 -9
  409. data/modules/mruby/src/kernel.c +1 -1
  410. data/modules/mruby/src/load.c +137 -1
  411. data/modules/mruby/src/object.c +1 -1
  412. data/modules/mruby/src/parse.y +162 -37
  413. data/modules/mruby/src/state.c +2 -0
  414. data/modules/mruby/src/string.c +28 -19
  415. data/modules/mruby/src/symbol.c +0 -1
  416. data/modules/mruby/src/variable.c +12 -15
  417. data/modules/mruby/src/vm.c +38 -22
  418. data/modules/mruby/tasks/mrbgem_spec.rake +6 -4
  419. data/modules/mruby/tasks/mrbgems_test.rake +9 -9
  420. data/modules/mruby/tasks/mruby_build_gem.rake +9 -0
  421. data/modules/mruby/tasks/toolchains/androideabi.rake +2 -0
  422. data/modules/mruby/test/driver.c +3 -3
  423. data/modules/mruby/test/t/array.rb +13 -0
  424. data/modules/mruby/test/t/class.rb +28 -0
  425. data/modules/mruby/test/t/exception.rb +10 -0
  426. data/modules/mruby/test/t/literals.rb +50 -0
  427. data/modules/mruby/test/t/module.rb +22 -0
  428. data/modules/mruby/test/t/proc.rb +37 -0
  429. data/modules/mruby/test/t/string.rb +20 -21
  430. data/modules/mruby/tools/mrbc/mrbc.c +2 -4
  431. data/scripts/gen_post.rb +1 -0
  432. data/scripts/gen_require.rb +107 -0
  433. data/templates/minimal/Rakefile +20 -0
  434. metadata +210 -88
  435. data/driver/main.c +0 -40
  436. data/modules/emscripten/cmake/Platform/Emscripten_unix.cmake +0 -24
  437. data/modules/emscripten/emlibtool +0 -11
  438. data/modules/emscripten/emlibtool.bat +0 -2
  439. data/modules/emscripten/src/framework.js +0 -257
  440. data/modules/emscripten/system/include/bsd/float.h +0 -91
  441. data/modules/emscripten/system/include/bsd/readme.txt +0 -2
  442. data/modules/emscripten/system/include/bsd/sys/mman.h +0 -180
  443. data/modules/emscripten/system/include/bsd/sys/utsname.h +0 -70
  444. data/modules/emscripten/system/include/dlfcn.h +0 -31
  445. data/modules/emscripten/system/include/err.h +0 -95
  446. data/modules/emscripten/system/include/features.h +0 -3
  447. data/modules/emscripten/system/include/libc/_ansi.h +0 -135
  448. data/modules/emscripten/system/include/libc/_syslist.h +0 -40
  449. data/modules/emscripten/system/include/libc/argz.h +0 -33
  450. data/modules/emscripten/system/include/libc/envlock.h +0 -15
  451. data/modules/emscripten/system/include/libc/envz.h +0 -16
  452. data/modules/emscripten/system/include/libc/fastmath.h +0 -13
  453. data/modules/emscripten/system/include/libc/ieeefp.h +0 -256
  454. data/modules/emscripten/system/include/libc/machine/_default_types.h +0 -121
  455. data/modules/emscripten/system/include/libc/machine/_types.h +0 -8
  456. data/modules/emscripten/system/include/libc/machine/ansi.h +0 -1
  457. data/modules/emscripten/system/include/libc/machine/endian.h +0 -31
  458. data/modules/emscripten/system/include/libc/machine/fastmath.h +0 -100
  459. data/modules/emscripten/system/include/libc/machine/ieeefp.h +0 -376
  460. data/modules/emscripten/system/include/libc/machine/malloc.h +0 -8
  461. data/modules/emscripten/system/include/libc/machine/param.h +0 -1
  462. data/modules/emscripten/system/include/libc/machine/setjmp-dj.h +0 -43
  463. data/modules/emscripten/system/include/libc/machine/setjmp.h +0 -361
  464. data/modules/emscripten/system/include/libc/machine/stdlib.h +0 -8
  465. data/modules/emscripten/system/include/libc/machine/termios.h +0 -1
  466. data/modules/emscripten/system/include/libc/machine/time.h +0 -19
  467. data/modules/emscripten/system/include/libc/machine/types.h +0 -30
  468. data/modules/emscripten/system/include/libc/newlib.h +0 -2
  469. data/modules/emscripten/system/include/libc/process.h +0 -44
  470. data/modules/emscripten/system/include/libc/reent.h +0 -183
  471. data/modules/emscripten/system/include/libc/regdef.h +0 -7
  472. data/modules/emscripten/system/include/libc/sys/_default_fcntl.h +0 -223
  473. data/modules/emscripten/system/include/libc/sys/_types.h +0 -93
  474. data/modules/emscripten/system/include/libc/sys/cdefs.h +0 -123
  475. data/modules/emscripten/system/include/libc/sys/config.h +0 -255
  476. data/modules/emscripten/system/include/libc/sys/custom_file.h +0 -2
  477. data/modules/emscripten/system/include/libc/sys/dirent.h +0 -58
  478. data/modules/emscripten/system/include/libc/sys/features.h +0 -212
  479. data/modules/emscripten/system/include/libc/sys/iconvnls.h +0 -77
  480. data/modules/emscripten/system/include/libc/sys/lock.h +0 -24
  481. data/modules/emscripten/system/include/libc/sys/queue.h +0 -471
  482. data/modules/emscripten/system/include/libc/sys/reent.h +0 -843
  483. data/modules/emscripten/system/include/libc/sys/sched.h +0 -67
  484. data/modules/emscripten/system/include/libc/sys/stdio.h +0 -27
  485. data/modules/emscripten/system/include/libc/sys/string.h +0 -2
  486. data/modules/emscripten/system/include/libc/sys/syslimits.h +0 -65
  487. data/modules/emscripten/system/include/libc/sys/unistd.h +0 -514
  488. data/modules/emscripten/system/include/libc/sys/utime.h +0 -26
  489. data/modules/emscripten/system/include/libc/unctrl.h +0 -46
  490. data/modules/emscripten/system/include/memory.h +0 -10
  491. data/modules/emscripten/system/include/mntent.h +0 -23
  492. data/modules/emscripten/system/include/net/arpa/inet.h +0 -32
  493. data/modules/emscripten/system/include/net/arpa/nameser.h +0 -535
  494. data/modules/emscripten/system/include/net/arpa/nameser_compat.h +0 -187
  495. data/modules/emscripten/system/include/net/if.h +0 -106
  496. data/modules/emscripten/system/include/net/netinet/in.h +0 -230
  497. data/modules/emscripten/system/include/net/netinet/tcp.h +0 -246
  498. data/modules/emscripten/system/include/net/resolv.h +0 -389
  499. data/modules/emscripten/system/include/netdb.h +0 -130
  500. data/modules/emscripten/system/include/nl_types.h +0 -19
  501. data/modules/emscripten/system/include/poll.h +0 -3
  502. data/modules/emscripten/system/include/pty.h +0 -6
  503. data/modules/emscripten/system/include/semaphore.h +0 -31
  504. data/modules/emscripten/system/include/spawn.h +0 -105
  505. data/modules/emscripten/system/include/stdbool.h +0 -16
  506. data/modules/emscripten/system/include/sys/bitypes.h +0 -3
  507. data/modules/emscripten/system/include/sys/io.h +0 -14
  508. data/modules/emscripten/system/include/sys/ioctl.h +0 -78
  509. data/modules/emscripten/system/include/sys/poll.h +0 -31
  510. data/modules/emscripten/system/include/sys/select.h +0 -16
  511. data/modules/emscripten/system/include/sys/sendfile.h +0 -16
  512. data/modules/emscripten/system/include/sys/socket.h +0 -247
  513. data/modules/emscripten/system/include/sys/socketvar.h +0 -3
  514. data/modules/emscripten/system/include/sys/statvfs.h +0 -32
  515. data/modules/emscripten/system/include/sys/uio.h +0 -22
  516. data/modules/emscripten/system/include/sys/un.h +0 -66
  517. data/modules/emscripten/system/include/sysexits.h +0 -108
  518. data/modules/emscripten/system/include/xlocale.h +0 -47
@@ -354,7 +354,10 @@ var LibraryGLFW = {
354
354
  throw "Invalid glfwOpenWindow mode.";
355
355
  }
356
356
 
357
- Module.ctx = Browser.createContext(Module['canvas'], true, true);
357
+ var contextAttributes = {
358
+ antialias: (GLFW.params[0x00020013] > 1) //GLFW_FSAA_SAMPLES
359
+ }
360
+ Module.ctx = Browser.createContext(Module['canvas'], true, true, contextAttributes);
358
361
  return 1; //GL_TRUE
359
362
  },
360
363
 
@@ -16,6 +16,7 @@ var LibraryGLUT = {
16
16
  modifiers: 0,
17
17
  initWindowWidth: 256,
18
18
  initWindowHeight: 256,
19
+ initDisplayMode: 0x0000 /*GLUT_RGBA*/ | 0x0002 /*GLUT_DOUBLE*/ | 0x0010 /*GLUT_DEPTH*/,
19
20
  // Set when going fullscreen
20
21
  windowX: 0,
21
22
  windowY: 0,
@@ -189,12 +190,12 @@ var LibraryGLUT = {
189
190
  }
190
191
  },
191
192
 
192
- onMouseButtonDown: function(event){
193
+ onMouseButtonDown: function(event) {
193
194
  Browser.calculateMouseEvent(event);
194
195
 
195
196
  GLUT.buttons |= (1 << event['button']);
196
197
 
197
- if(event.target == Module["canvas"] && GLUT.mouseFunc){
198
+ if (event.target == Module["canvas"] && GLUT.mouseFunc) {
198
199
  try {
199
200
  event.target.setCapture();
200
201
  } catch (e) {}
@@ -204,21 +205,40 @@ var LibraryGLUT = {
204
205
  }
205
206
  },
206
207
 
207
- onMouseButtonUp: function(event){
208
+ onMouseButtonUp: function(event) {
208
209
  Browser.calculateMouseEvent(event);
209
210
 
210
211
  GLUT.buttons &= ~(1 << event['button']);
211
212
 
212
- if(GLUT.mouseFunc) {
213
+ if (GLUT.mouseFunc) {
213
214
  event.preventDefault();
214
215
  GLUT.saveModifiers(event);
215
216
  Runtime.dynCall('viiii', GLUT.mouseFunc, [event['button'], 1/*GLUT_UP*/, Browser.mouseX, Browser.mouseY]);
216
217
  }
217
218
  },
218
219
 
220
+ onMouseWheel: function(event) {
221
+ Browser.calculateMouseEvent(event);
222
+
223
+ // cross-browser wheel delta
224
+ var e = window.event || event; // old IE support
225
+ var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
226
+
227
+ var button = 3; // wheel up
228
+ if (delta < 0) {
229
+ button = 4; // wheel down
230
+ }
231
+
232
+ if (GLUT.mouseFunc) {
233
+ event.preventDefault();
234
+ GLUT.saveModifiers(event);
235
+ Runtime.dynCall('viiii', GLUT.mouseFunc, [button, 0/*GLUT_DOWN*/, Browser.mouseX, Browser.mouseY]);
236
+ }
237
+ },
238
+
219
239
  // TODO add fullscreen API ala:
220
240
  // http://johndyer.name/native-fullscreen-javascript-api-plus-jquery-plugin/
221
- onFullScreenEventChange: function(event){
241
+ onFullScreenEventChange: function(event) {
222
242
  var width;
223
243
  var height;
224
244
  if (document["fullScreen"] || document["mozFullScreen"] || document["webkitIsFullScreen"]) {
@@ -267,11 +287,23 @@ var LibraryGLUT = {
267
287
  // Ignore arguments
268
288
  GLUT.initTime = Date.now();
269
289
 
290
+ var isTouchDevice = 'ontouchstart' in document.documentElement;
291
+
270
292
  window.addEventListener("keydown", GLUT.onKeydown, true);
271
293
  window.addEventListener("keyup", GLUT.onKeyup, true);
272
- window.addEventListener("mousemove", GLUT.onMousemove, true);
273
- window.addEventListener("mousedown", GLUT.onMouseButtonDown, true);
274
- window.addEventListener("mouseup", GLUT.onMouseButtonUp, true);
294
+ if (isTouchDevice) {
295
+ window.addEventListener("touchmove", GLUT.onMousemove, true);
296
+ window.addEventListener("touchstart", GLUT.onMouseButtonDown, true);
297
+ window.addEventListener("touchend", GLUT.onMouseButtonUp, true);
298
+ } else {
299
+ window.addEventListener("mousemove", GLUT.onMousemove, true);
300
+ window.addEventListener("mousedown", GLUT.onMouseButtonDown, true);
301
+ window.addEventListener("mouseup", GLUT.onMouseButtonUp, true);
302
+ // IE9, Chrome, Safari, Opera
303
+ window.addEventListener("mousewheel", GLUT.onMouseWheel, true);
304
+ // Firefox
305
+ window.addEventListener("DOMMouseScroll", GLUT.onMouseWheel, true);
306
+ }
275
307
 
276
308
  Browser.resizeListeners.push(function(width, height) {
277
309
  if (GLUT.reshapeFunc) {
@@ -282,9 +314,19 @@ var LibraryGLUT = {
282
314
  __ATEXIT__.push({ func: function() {
283
315
  window.removeEventListener("keydown", GLUT.onKeydown, true);
284
316
  window.removeEventListener("keyup", GLUT.onKeyup, true);
285
- window.removeEventListener("mousemove", GLUT.onMousemove, true);
286
- window.removeEventListener("mousedown", GLUT.onMouseButtonDown, true);
287
- window.removeEventListener("mouseup", GLUT.onMouseButtonUp, true);
317
+ if (isTouchDevice) {
318
+ window.removeEventListener("touchmove", GLUT.onMousemove, true);
319
+ window.removeEventListener("touchstart", GLUT.onMouseButtonDown, true);
320
+ window.removeEventListener("touchend", GLUT.onMouseButtonUp, true);
321
+ } else {
322
+ window.removeEventListener("mousemove", GLUT.onMousemove, true);
323
+ window.removeEventListener("mousedown", GLUT.onMouseButtonDown, true);
324
+ window.removeEventListener("mouseup", GLUT.onMouseButtonUp, true);
325
+ // IE9, Chrome, Safari, Opera
326
+ window.removeEventListener("mousewheel", GLUT.onMouseWheel, true);
327
+ // Firefox
328
+ window.removeEventListener("DOMMouseScroll", GLUT.onMouseWheel, true);
329
+ }
288
330
  Module["canvas"].width = Module["canvas"].height = 1;
289
331
  } });
290
332
  },
@@ -384,7 +426,10 @@ var LibraryGLUT = {
384
426
 
385
427
  glutCreateWindow__deps: ['$Browser'],
386
428
  glutCreateWindow: function(name) {
387
- Module.ctx = Browser.createContext(Module['canvas'], true, true);
429
+ var contextAttributes = {
430
+ antialias: ((GLUT.initDisplayMode & 0x0080 /*GLUT_MULTISAMPLE*/) != 0)
431
+ };
432
+ Module.ctx = Browser.createContext(Module['canvas'], true, true, contextAttributes);
388
433
  return Module.ctx ? 1 /* a new GLUT window ID for the created context */ : 0 /* failure */;
389
434
  },
390
435
 
@@ -423,7 +468,10 @@ var LibraryGLUT = {
423
468
  GLUT.requestFullScreen();
424
469
  },
425
470
 
426
- glutInitDisplayMode: function(mode) {},
471
+ glutInitDisplayMode: function(mode) {
472
+ GLUT.initDisplayMode = mode;
473
+ },
474
+
427
475
  glutSwapBuffers: function() {},
428
476
 
429
477
  glutPostRedisplay: function() {
@@ -0,0 +1,216 @@
1
+ mergeInto(LibraryManager.library, {
2
+ $IDBFS__deps: ['$FS', '$MEMFS', '$PATH'],
3
+ $IDBFS: {
4
+ dbs: {},
5
+ indexedDB: function() {
6
+ return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
7
+ },
8
+ DB_VERSION: 20,
9
+ DB_STORE_NAME: 'FILE_DATA',
10
+ // reuse all of the core MEMFS functionality
11
+ mount: function(mount) {
12
+ return MEMFS.mount.apply(null, arguments);
13
+ },
14
+ // the only custom function IDBFS implements is to handle
15
+ // synchronizing the wrapped MEMFS with a backing IDB instance
16
+ syncfs: function(mount, populate, callback) {
17
+ IDBFS.getLocalSet(mount, function(err, local) {
18
+ if (err) return callback(err);
19
+
20
+ IDBFS.getRemoteSet(mount, function(err, remote) {
21
+ if (err) return callback(err);
22
+
23
+ var src = populate ? remote : local;
24
+ var dst = populate ? local : remote;
25
+
26
+ IDBFS.reconcile(src, dst, callback);
27
+ });
28
+ });
29
+ },
30
+ reconcile: function(src, dst, callback) {
31
+ var total = 0;
32
+
33
+ var create = {};
34
+ for (var key in src.files) {
35
+ if (!src.files.hasOwnProperty(key)) continue;
36
+ var e = src.files[key];
37
+ var e2 = dst.files[key];
38
+ if (!e2 || e.timestamp > e2.timestamp) {
39
+ create[key] = e;
40
+ total++;
41
+ }
42
+ }
43
+
44
+ var remove = {};
45
+ for (var key in dst.files) {
46
+ if (!dst.files.hasOwnProperty(key)) continue;
47
+ var e = dst.files[key];
48
+ var e2 = src.files[key];
49
+ if (!e2) {
50
+ remove[key] = e;
51
+ total++;
52
+ }
53
+ }
54
+
55
+ if (!total) {
56
+ // early out
57
+ return callback(null);
58
+ }
59
+
60
+ var completed = 0;
61
+ var done = function(err) {
62
+ if (err) return callback(err);
63
+ if (++completed >= total) {
64
+ return callback(null);
65
+ }
66
+ };
67
+
68
+ // create a single transaction to handle and IDB reads / writes we'll need to do
69
+ var db = src.type === 'remote' ? src.db : dst.db;
70
+ var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite');
71
+ transaction.onerror = function() { callback(this.error); };
72
+ var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
73
+
74
+ for (var path in create) {
75
+ if (!create.hasOwnProperty(path)) continue;
76
+ var entry = create[path];
77
+
78
+ if (dst.type === 'local') {
79
+ // save file to local
80
+ try {
81
+ if (FS.isDir(entry.mode)) {
82
+ FS.mkdir(path, entry.mode);
83
+ } else if (FS.isFile(entry.mode)) {
84
+ var stream = FS.open(path, 'w+', 0666);
85
+ FS.write(stream, entry.contents, 0, entry.contents.length, 0, true /* canOwn */);
86
+ FS.close(stream);
87
+ }
88
+ done(null);
89
+ } catch (e) {
90
+ return done(e);
91
+ }
92
+ } else {
93
+ // save file to IDB
94
+ var req = store.put(entry, path);
95
+ req.onsuccess = function() { done(null); };
96
+ req.onerror = function() { done(this.error); };
97
+ }
98
+ }
99
+
100
+ for (var path in remove) {
101
+ if (!remove.hasOwnProperty(path)) continue;
102
+ var entry = remove[path];
103
+
104
+ if (dst.type === 'local') {
105
+ // delete file from local
106
+ try {
107
+ if (FS.isDir(entry.mode)) {
108
+ // TODO recursive delete?
109
+ FS.rmdir(path);
110
+ } else if (FS.isFile(entry.mode)) {
111
+ FS.unlink(path);
112
+ }
113
+ done(null);
114
+ } catch (e) {
115
+ return done(e);
116
+ }
117
+ } else {
118
+ // delete file from IDB
119
+ var req = store.delete(path);
120
+ req.onsuccess = function() { done(null); };
121
+ req.onerror = function() { done(this.error); };
122
+ }
123
+ }
124
+ },
125
+ getLocalSet: function(mount, callback) {
126
+ var files = {};
127
+
128
+ var isRealDir = function(p) {
129
+ return p !== '.' && p !== '..';
130
+ };
131
+ var toAbsolute = function(root) {
132
+ return function(p) {
133
+ return PATH.join(root, p);
134
+ }
135
+ };
136
+
137
+ var check = FS.readdir(mount.mountpoint)
138
+ .filter(isRealDir)
139
+ .map(toAbsolute(mount.mountpoint));
140
+
141
+ while (check.length) {
142
+ var path = check.pop();
143
+ var stat, node;
144
+
145
+ try {
146
+ var lookup = FS.lookupPath(path);
147
+ node = lookup.node;
148
+ stat = FS.stat(path);
149
+ } catch (e) {
150
+ return callback(e);
151
+ }
152
+
153
+ if (FS.isDir(stat.mode)) {
154
+ check.push.apply(check, FS.readdir(path)
155
+ .filter(isRealDir)
156
+ .map(toAbsolute(path)));
157
+
158
+ files[path] = { mode: stat.mode, timestamp: stat.mtime };
159
+ } else if (FS.isFile(stat.mode)) {
160
+ files[path] = { contents: node.contents, mode: stat.mode, timestamp: stat.mtime };
161
+ } else {
162
+ return callback(new Error('node type not supported'));
163
+ }
164
+ }
165
+
166
+ return callback(null, { type: 'local', files: files });
167
+ },
168
+ getDB: function(name, callback) {
169
+ // look it up in the cache
170
+ var db = IDBFS.dbs[name];
171
+ if (db) {
172
+ return callback(null, db);
173
+ }
174
+ var req;
175
+ try {
176
+ req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION);
177
+ } catch (e) {
178
+ return onerror(e);
179
+ }
180
+ req.onupgradeneeded = function() {
181
+ db = req.result;
182
+ db.createObjectStore(IDBFS.DB_STORE_NAME);
183
+ };
184
+ req.onsuccess = function() {
185
+ db = req.result;
186
+ // add to the cache
187
+ IDBFS.dbs[name] = db;
188
+ callback(null, db);
189
+ };
190
+ req.onerror = function() {
191
+ callback(this.error);
192
+ };
193
+ },
194
+ getRemoteSet: function(mount, callback) {
195
+ var files = {};
196
+
197
+ IDBFS.getDB(mount.mountpoint, function(err, db) {
198
+ if (err) return callback(err);
199
+
200
+ var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly');
201
+ transaction.onerror = function() { callback(this.error); };
202
+
203
+ var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
204
+ store.openCursor().onsuccess = function(event) {
205
+ var cursor = event.target.result;
206
+ if (!cursor) {
207
+ return callback(null, { type: 'remote', db: db, files: files });
208
+ }
209
+
210
+ files[cursor.key] = cursor.value;
211
+ cursor.continue();
212
+ };
213
+ });
214
+ }
215
+ }
216
+ });
@@ -0,0 +1,279 @@
1
+ mergeInto(LibraryManager.library, {
2
+ $MEMFS__deps: ['$FS'],
3
+ $MEMFS: {
4
+ // content modes
5
+ CONTENT_OWNING: 1, // contains a subarray into the heap, and we own it, without copying (note: someone else needs to free() it, if that is necessary)
6
+ CONTENT_FLEXIBLE: 2, // has been modified or never set to anything, and is a flexible js array that can grow/shrink
7
+ CONTENT_FIXED: 3, // contains some fixed-size content written into it, in a typed array
8
+ mount: function(mount) {
9
+ return MEMFS.createNode(null, '/', {{{ cDefine('S_IFDIR') }}} | 0777, 0);
10
+ },
11
+ createNode: function(parent, name, mode, dev) {
12
+ if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
13
+ // no supported
14
+ throw new FS.ErrnoError(ERRNO_CODES.EPERM);
15
+ }
16
+ var node = FS.createNode(parent, name, mode, dev);
17
+ if (FS.isDir(node.mode)) {
18
+ node.node_ops = {
19
+ getattr: MEMFS.node_ops.getattr,
20
+ setattr: MEMFS.node_ops.setattr,
21
+ lookup: MEMFS.node_ops.lookup,
22
+ mknod: MEMFS.node_ops.mknod,
23
+ mknod: MEMFS.node_ops.mknod,
24
+ rename: MEMFS.node_ops.rename,
25
+ unlink: MEMFS.node_ops.unlink,
26
+ rmdir: MEMFS.node_ops.rmdir,
27
+ readdir: MEMFS.node_ops.readdir,
28
+ symlink: MEMFS.node_ops.symlink
29
+ };
30
+ node.stream_ops = {
31
+ llseek: MEMFS.stream_ops.llseek
32
+ };
33
+ node.contents = {};
34
+ } else if (FS.isFile(node.mode)) {
35
+ node.node_ops = {
36
+ getattr: MEMFS.node_ops.getattr,
37
+ setattr: MEMFS.node_ops.setattr
38
+ };
39
+ node.stream_ops = {
40
+ llseek: MEMFS.stream_ops.llseek,
41
+ read: MEMFS.stream_ops.read,
42
+ write: MEMFS.stream_ops.write,
43
+ allocate: MEMFS.stream_ops.allocate,
44
+ mmap: MEMFS.stream_ops.mmap
45
+ };
46
+ node.contents = [];
47
+ node.contentMode = MEMFS.CONTENT_FLEXIBLE;
48
+ } else if (FS.isLink(node.mode)) {
49
+ node.node_ops = {
50
+ getattr: MEMFS.node_ops.getattr,
51
+ setattr: MEMFS.node_ops.setattr,
52
+ readlink: MEMFS.node_ops.readlink
53
+ };
54
+ node.stream_ops = {};
55
+ } else if (FS.isChrdev(node.mode)) {
56
+ node.node_ops = {
57
+ getattr: MEMFS.node_ops.getattr,
58
+ setattr: MEMFS.node_ops.setattr
59
+ };
60
+ node.stream_ops = FS.chrdev_stream_ops;
61
+ }
62
+ node.timestamp = Date.now();
63
+ // add the new node to the parent
64
+ if (parent) {
65
+ parent.contents[name] = node;
66
+ }
67
+ return node;
68
+ },
69
+ ensureFlexible: function(node) {
70
+ if (node.contentMode !== MEMFS.CONTENT_FLEXIBLE) {
71
+ var contents = node.contents;
72
+ node.contents = Array.prototype.slice.call(contents);
73
+ node.contentMode = MEMFS.CONTENT_FLEXIBLE;
74
+ }
75
+ },
76
+ node_ops: {
77
+ getattr: function(node) {
78
+ var attr = {};
79
+ // device numbers reuse inode numbers.
80
+ attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
81
+ attr.ino = node.id;
82
+ attr.mode = node.mode;
83
+ attr.nlink = 1;
84
+ attr.uid = 0;
85
+ attr.gid = 0;
86
+ attr.rdev = node.rdev;
87
+ if (FS.isDir(node.mode)) {
88
+ attr.size = 4096;
89
+ } else if (FS.isFile(node.mode)) {
90
+ attr.size = node.contents.length;
91
+ } else if (FS.isLink(node.mode)) {
92
+ attr.size = node.link.length;
93
+ } else {
94
+ attr.size = 0;
95
+ }
96
+ attr.atime = new Date(node.timestamp);
97
+ attr.mtime = new Date(node.timestamp);
98
+ attr.ctime = new Date(node.timestamp);
99
+ // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),
100
+ // but this is not required by the standard.
101
+ attr.blksize = 4096;
102
+ attr.blocks = Math.ceil(attr.size / attr.blksize);
103
+ return attr;
104
+ },
105
+ setattr: function(node, attr) {
106
+ if (attr.mode !== undefined) {
107
+ node.mode = attr.mode;
108
+ }
109
+ if (attr.timestamp !== undefined) {
110
+ node.timestamp = attr.timestamp;
111
+ }
112
+ if (attr.size !== undefined) {
113
+ MEMFS.ensureFlexible(node);
114
+ var contents = node.contents;
115
+ if (attr.size < contents.length) contents.length = attr.size;
116
+ else while (attr.size > contents.length) contents.push(0);
117
+ }
118
+ },
119
+ lookup: function(parent, name) {
120
+ throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
121
+ },
122
+ mknod: function(parent, name, mode, dev) {
123
+ return MEMFS.createNode(parent, name, mode, dev);
124
+ },
125
+ rename: function(old_node, new_dir, new_name) {
126
+ // if we're overwriting a directory at new_name, make sure it's empty.
127
+ if (FS.isDir(old_node.mode)) {
128
+ var new_node;
129
+ try {
130
+ new_node = FS.lookupNode(new_dir, new_name);
131
+ } catch (e) {
132
+ }
133
+ if (new_node) {
134
+ for (var i in new_node.contents) {
135
+ throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
136
+ }
137
+ }
138
+ }
139
+ // do the internal rewiring
140
+ delete old_node.parent.contents[old_node.name];
141
+ old_node.name = new_name;
142
+ new_dir.contents[new_name] = old_node;
143
+ old_node.parent = new_dir;
144
+ },
145
+ unlink: function(parent, name) {
146
+ delete parent.contents[name];
147
+ },
148
+ rmdir: function(parent, name) {
149
+ var node = FS.lookupNode(parent, name);
150
+ for (var i in node.contents) {
151
+ throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
152
+ }
153
+ delete parent.contents[name];
154
+ },
155
+ readdir: function(node) {
156
+ var entries = ['.', '..']
157
+ for (var key in node.contents) {
158
+ if (!node.contents.hasOwnProperty(key)) {
159
+ continue;
160
+ }
161
+ entries.push(key);
162
+ }
163
+ return entries;
164
+ },
165
+ symlink: function(parent, newname, oldpath) {
166
+ var node = MEMFS.createNode(parent, newname, 0777 | {{{ cDefine('S_IFLNK') }}}, 0);
167
+ node.link = oldpath;
168
+ return node;
169
+ },
170
+ readlink: function(node) {
171
+ if (!FS.isLink(node.mode)) {
172
+ throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
173
+ }
174
+ return node.link;
175
+ },
176
+ },
177
+ stream_ops: {
178
+ read: function(stream, buffer, offset, length, position) {
179
+ var contents = stream.node.contents;
180
+ if (position >= contents.length)
181
+ return 0;
182
+ var size = Math.min(contents.length - position, length);
183
+ assert(size >= 0);
184
+ #if USE_TYPED_ARRAYS == 2
185
+ if (size > 8 && contents.subarray) { // non-trivial, and typed array
186
+ buffer.set(contents.subarray(position, position + size), offset);
187
+ } else
188
+ #endif
189
+ {
190
+ for (var i = 0; i < size; i++) {
191
+ buffer[offset + i] = contents[position + i];
192
+ }
193
+ }
194
+ return size;
195
+ },
196
+ write: function(stream, buffer, offset, length, position, canOwn) {
197
+ var node = stream.node;
198
+ node.timestamp = Date.now();
199
+ var contents = node.contents;
200
+ #if USE_TYPED_ARRAYS == 2
201
+ if (length && contents.length === 0 && position === 0 && buffer.subarray) {
202
+ // just replace it with the new data
203
+ assert(buffer.length);
204
+ if (canOwn && buffer.buffer === HEAP8.buffer && offset === 0) {
205
+ node.contents = buffer; // this is a subarray of the heap, and we can own it
206
+ node.contentMode = MEMFS.CONTENT_OWNING;
207
+ } else {
208
+ node.contents = new Uint8Array(buffer.subarray(offset, offset+length));
209
+ node.contentMode = MEMFS.CONTENT_FIXED;
210
+ }
211
+ return length;
212
+ }
213
+ #endif
214
+ MEMFS.ensureFlexible(node);
215
+ var contents = node.contents;
216
+ while (contents.length < position) contents.push(0);
217
+ for (var i = 0; i < length; i++) {
218
+ contents[position + i] = buffer[offset + i];
219
+ }
220
+ return length;
221
+ },
222
+ llseek: function(stream, offset, whence) {
223
+ var position = offset;
224
+ if (whence === 1) { // SEEK_CUR.
225
+ position += stream.position;
226
+ } else if (whence === 2) { // SEEK_END.
227
+ if (FS.isFile(stream.node.mode)) {
228
+ position += stream.node.contents.length;
229
+ }
230
+ }
231
+ if (position < 0) {
232
+ throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
233
+ }
234
+ stream.ungotten = [];
235
+ stream.position = position;
236
+ return position;
237
+ },
238
+ allocate: function(stream, offset, length) {
239
+ MEMFS.ensureFlexible(stream.node);
240
+ var contents = stream.node.contents;
241
+ var limit = offset + length;
242
+ while (limit > contents.length) contents.push(0);
243
+ },
244
+ mmap: function(stream, buffer, offset, length, position, prot, flags) {
245
+ if (!FS.isFile(stream.node.mode)) {
246
+ throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
247
+ }
248
+ var ptr;
249
+ var allocated;
250
+ var contents = stream.node.contents;
251
+ // Only make a new copy when MAP_PRIVATE is specified.
252
+ if ( !(flags & {{{ cDefine('MAP_PRIVATE') }}}) &&
253
+ (contents.buffer === buffer || contents.buffer === buffer.buffer) ) {
254
+ // We can't emulate MAP_SHARED when the file is not backed by the buffer
255
+ // we're mapping to (e.g. the HEAP buffer).
256
+ allocated = false;
257
+ ptr = contents.byteOffset;
258
+ } else {
259
+ // Try to avoid unnecessary slices.
260
+ if (position > 0 || position + length < contents.length) {
261
+ if (contents.subarray) {
262
+ contents = contents.subarray(position, position + length);
263
+ } else {
264
+ contents = Array.prototype.slice.call(contents, position, position + length);
265
+ }
266
+ }
267
+ allocated = true;
268
+ ptr = _malloc(length);
269
+ if (!ptr) {
270
+ throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);
271
+ }
272
+ buffer.set(contents, ptr);
273
+ }
274
+ return { ptr: ptr, allocated: allocated };
275
+ },
276
+ }
277
+ }
278
+ });
279
+