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
@@ -55,7 +55,7 @@ mrb_name_class(mrb_state *mrb, struct RClass *c, mrb_sym name)
55
55
  mrb_obj_iv_set(mrb, (struct RObject*)c,
56
56
  mrb_intern2(mrb, "__classid__", 11), mrb_symbol_value(name));
57
57
  }
58
-
58
+
59
59
  #define make_metaclass(mrb, c) prepare_singleton_class((mrb), (struct RBasic*)(c))
60
60
 
61
61
  static void
@@ -311,6 +311,7 @@ mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t f
311
311
  int ai = mrb_gc_arena_save(mrb);
312
312
 
313
313
  p = mrb_proc_new_cfunc(mrb, func);
314
+ p->target_class = c;
314
315
  mrb_define_method_raw(mrb, c, mid, p);
315
316
  mrb_gc_arena_restore(mrb, ai);
316
317
  }
@@ -489,14 +490,19 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
489
490
  mrb_value ss;
490
491
  struct RString *s;
491
492
  char **ps;
493
+ mrb_int len;
492
494
 
493
495
  ps = va_arg(ap, char**);
494
496
  if (i < argc) {
495
497
  ss = to_str(mrb, *sp++);
496
498
  s = mrb_str_ptr(ss);
497
- if ((mrb_int)strlen(s->ptr) < s->len) {
499
+ len = (mrb_int)strlen(s->ptr);
500
+ if (len < s->len) {
498
501
  mrb_raise(mrb, E_ARGUMENT_ERROR, "String contains NUL");
499
502
  }
503
+ else if (len > s->len) {
504
+ mrb_str_modify(mrb, s);
505
+ }
500
506
  *ps = s->ptr;
501
507
  i++;
502
508
  }
@@ -927,7 +933,7 @@ mrb_singleton_class(mrb_state *mrb, mrb_value v)
927
933
  return mrb_obj_value(mrb->false_class);
928
934
  case MRB_TT_TRUE:
929
935
  return mrb_obj_value(mrb->true_class);
930
- case MRB_TT_VOIDP:
936
+ case MRB_TT_CPTR:
931
937
  return mrb_obj_value(mrb->object_class);
932
938
  case MRB_TT_SYMBOL:
933
939
  case MRB_TT_FIXNUM:
@@ -1003,10 +1009,19 @@ mrb_method_search(mrb_state *mrb, struct RClass* c, mrb_sym mid)
1003
1009
  return m;
1004
1010
  }
1005
1011
 
1006
- void
1007
- mrb_obj_call_init(mrb_state *mrb, mrb_value obj, int argc, mrb_value *argv)
1012
+ static mrb_value
1013
+ mrb_instance_alloc(mrb_state *mrb, mrb_value cv)
1008
1014
  {
1009
- mrb_funcall_argv(mrb, obj, mrb->init_sym, argc, argv);
1015
+ struct RClass *c = mrb_class_ptr(cv);
1016
+ struct RObject *o;
1017
+ enum mrb_vtype ttype = MRB_INSTANCE_TT(c);
1018
+
1019
+ if (c->tt == MRB_TT_SCLASS)
1020
+ mrb_raise(mrb, E_TYPE_ERROR, "can't create instance of singleton class");
1021
+
1022
+ if (ttype == 0) ttype = MRB_TT_OBJECT;
1023
+ o = (struct RObject*)mrb_obj_alloc(mrb, ttype, c);
1024
+ return mrb_obj_value(o);
1010
1025
  }
1011
1026
 
1012
1027
  /*
@@ -1020,59 +1035,33 @@ mrb_obj_call_init(mrb_state *mrb, mrb_value obj, int argc, mrb_value *argv)
1020
1035
  * an object is constructed using .new.
1021
1036
  *
1022
1037
  */
1023
- mrb_value
1024
- mrb_class_new_instance(mrb_state *mrb, int argc, mrb_value *argv, struct RClass * klass)
1025
- {
1026
- mrb_value obj;
1027
- struct RClass * c = (struct RClass*)mrb_obj_alloc(mrb, klass->tt, klass);
1028
- c->super = klass;
1029
- obj = mrb_obj_value(c);
1030
- mrb_obj_call_init(mrb, obj, argc, argv);
1031
- return obj;
1032
- }
1033
1038
 
1034
1039
  mrb_value
1035
- mrb_class_new_instance_m(mrb_state *mrb, mrb_value klass)
1040
+ mrb_instance_new(mrb_state *mrb, mrb_value cv)
1036
1041
  {
1042
+ mrb_value obj, blk;
1037
1043
  mrb_value *argv;
1038
- mrb_value blk;
1039
- struct RClass *k = mrb_class_ptr(klass);
1040
- struct RClass *c;
1041
1044
  int argc;
1042
- mrb_value obj;
1043
1045
 
1046
+ obj = mrb_instance_alloc(mrb, cv);
1044
1047
  mrb_get_args(mrb, "*&", &argv, &argc, &blk);
1045
- c = (struct RClass*)mrb_obj_alloc(mrb, k->tt, k);
1046
- c->super = k;
1047
- obj = mrb_obj_value(c);
1048
- mrb_funcall_with_block(mrb, obj, mrb->init_sym, argc, argv, blk);
1048
+ mrb_funcall_with_block(mrb, obj, mrb_intern2(mrb, "initialize", 10), argc, argv, blk);
1049
1049
 
1050
1050
  return obj;
1051
1051
  }
1052
1052
 
1053
1053
  mrb_value
1054
- mrb_instance_new(mrb_state *mrb, mrb_value cv)
1054
+ mrb_obj_new(mrb_state *mrb, struct RClass *c, int argc, mrb_value *argv)
1055
1055
  {
1056
- struct RClass *c = mrb_class_ptr(cv);
1057
- struct RObject *o;
1058
- enum mrb_vtype ttype = MRB_INSTANCE_TT(c);
1059
- mrb_value obj, blk;
1060
- mrb_value *argv;
1061
- int argc;
1056
+ mrb_value obj;
1062
1057
 
1063
- if (c->tt == MRB_TT_SCLASS)
1064
- mrb_raise(mrb, E_TYPE_ERROR, "can't create instance of singleton class");
1065
-
1066
- if (ttype == 0) ttype = MRB_TT_OBJECT;
1067
- o = (struct RObject*)mrb_obj_alloc(mrb, ttype, c);
1068
- obj = mrb_obj_value(o);
1069
- mrb_get_args(mrb, "*&", &argv, &argc, &blk);
1070
- mrb_funcall_with_block(mrb, obj, mrb->init_sym, argc, argv, blk);
1058
+ obj = mrb_instance_alloc(mrb, mrb_obj_value(c));
1059
+ mrb_funcall_argv(mrb, obj, mrb_intern2(mrb, "initialize", 10), argc, argv);
1071
1060
 
1072
1061
  return obj;
1073
1062
  }
1074
1063
 
1075
- mrb_value
1064
+ static mrb_value
1076
1065
  mrb_class_new_class(mrb_state *mrb, mrb_value cv)
1077
1066
  {
1078
1067
  mrb_value super;
@@ -1844,6 +1833,18 @@ mrb_mod_remove_const(mrb_state *mrb, mrb_value mod)
1844
1833
  return val;
1845
1834
  }
1846
1835
 
1836
+ mrb_value
1837
+ mrb_mod_const_missing(mrb_state *mrb, mrb_value mod)
1838
+ {
1839
+ mrb_sym sym;
1840
+
1841
+ mrb_get_args(mrb, "n", &sym);
1842
+ mrb_name_error(mrb, sym, "uninitialized constant %S",
1843
+ mrb_sym2str(mrb, sym));
1844
+ /* not reached */
1845
+ return mrb_nil_value();
1846
+ }
1847
+
1847
1848
  static mrb_value
1848
1849
  mrb_mod_s_constants(mrb_state *mrb, mrb_value mod)
1849
1850
  {
@@ -1937,6 +1938,7 @@ mrb_init_class(mrb_state *mrb)
1937
1938
  mrb_define_method(mrb, mod, "const_set", mrb_mod_const_set, MRB_ARGS_REQ(2)); /* 15.2.2.4.23 */
1938
1939
  mrb_define_method(mrb, mod, "constants", mrb_mod_constants, MRB_ARGS_NONE()); /* 15.2.2.4.24 */
1939
1940
  mrb_define_method(mrb, mod, "remove_const", mrb_mod_remove_const, MRB_ARGS_REQ(1)); /* 15.2.2.4.40 */
1941
+ mrb_define_method(mrb, mod, "const_missing", mrb_mod_const_missing, MRB_ARGS_REQ(1));
1940
1942
  mrb_define_method(mrb, mod, "define_method", mod_define_method, MRB_ARGS_REQ(1));
1941
1943
  mrb_define_method(mrb, mod, "class_variables", mrb_mod_class_variables, MRB_ARGS_NONE()); /* 15.2.2.4.19 */
1942
1944
  mrb_define_method(mrb, mod, "===", mrb_mod_eqq, MRB_ARGS_REQ(1));
@@ -12,6 +12,7 @@
12
12
  #include "mruby/irep.h"
13
13
  #include "mruby/numeric.h"
14
14
  #include "mruby/string.h"
15
+ #include "mruby/debug.h"
15
16
  #include "node.h"
16
17
  #include "opcode.h"
17
18
  #include "re.h"
@@ -51,11 +52,11 @@ typedef struct scope {
51
52
 
52
53
  struct loopinfo *loop;
53
54
  int ensure_level;
54
- char *filename;
55
- short lineno;
55
+ char const *filename;
56
+ uint16_t lineno;
56
57
 
57
58
  mrb_code *iseq;
58
- short *lines;
59
+ uint16_t *lines;
59
60
  int icapa;
60
61
 
61
62
  mrb_irep *irep;
@@ -67,6 +68,10 @@ typedef struct scope {
67
68
  int ai;
68
69
 
69
70
  int idx;
71
+
72
+ int debug_start_pos;
73
+ uint16_t filename_index;
74
+ parser_state* parser;
70
75
  } codegen_scope;
71
76
 
72
77
  static codegen_scope* scope_new(mrb_state *mrb, codegen_scope *prev, node *lv);
@@ -141,7 +146,8 @@ genop(codegen_scope *s, mrb_code i)
141
146
  s->icapa *= 2;
142
147
  s->iseq = (mrb_code *)codegen_realloc(s, s->iseq, sizeof(mrb_code)*s->icapa);
143
148
  if (s->lines) {
144
- s->lines = (short*)codegen_realloc(s, s->lines, sizeof(short)*s->icapa);
149
+ s->lines = (uint16_t*)codegen_realloc(s, s->lines, sizeof(short)*s->icapa);
150
+ s->irep->lines = s->lines;
145
151
  }
146
152
  }
147
153
  s->iseq[s->pc] = i;
@@ -271,18 +277,6 @@ genop_peep(codegen_scope *s, mrb_code i, int val)
271
277
  case OP_MOVE:
272
278
  s->iseq[s->pc-1] = MKOP_AB(OP_RETURN, GETARG_B(i0), OP_R_NORMAL);
273
279
  return;
274
- case OP_LOADI:
275
- s->iseq[s->pc-1] = MKOP_AsBx(OP_LOADI, 0, GETARG_sBx(i0));
276
- genop(s, MKOP_AB(OP_RETURN, 0, OP_R_NORMAL));
277
- return;
278
- case OP_ARRAY:
279
- case OP_HASH:
280
- case OP_RANGE:
281
- case OP_AREF:
282
- case OP_GETUPVAR:
283
- s->iseq[s->pc-1] = MKOP_ABC(c0, 0, GETARG_B(i0), GETARG_C(i0));
284
- genop(s, MKOP_AB(OP_RETURN, 0, OP_R_NORMAL));
285
- return;
286
280
  case OP_SETIV:
287
281
  case OP_SETCV:
288
282
  case OP_SETCONST:
@@ -294,29 +288,6 @@ genop_peep(codegen_scope *s, mrb_code i, int val)
294
288
  i0 = s->iseq[s->pc-1];
295
289
  genop(s, MKOP_AB(OP_RETURN, GETARG_A(i0), OP_R_NORMAL));
296
290
  return;
297
- case OP_LOADSYM:
298
- case OP_GETGLOBAL:
299
- case OP_GETIV:
300
- case OP_GETCV:
301
- case OP_GETCONST:
302
- case OP_GETSPECIAL:
303
- case OP_LOADL:
304
- case OP_STRING:
305
- s->iseq[s->pc-1] = MKOP_ABx(c0, 0, GETARG_Bx(i0));
306
- genop(s, MKOP_AB(OP_RETURN, 0, OP_R_NORMAL));
307
- return;
308
- case OP_SCLASS:
309
- s->iseq[s->pc-1] = MKOP_AB(c0, GETARG_A(i), GETARG_B(i0));
310
- genop(s, MKOP_AB(OP_RETURN, 0, OP_R_NORMAL));
311
- return;
312
- case OP_LOADNIL:
313
- case OP_LOADSELF:
314
- case OP_LOADT:
315
- case OP_LOADF:
316
- case OP_OCLASS:
317
- s->iseq[s->pc-1] = MKOP_A(c0, 0);
318
- genop(s, MKOP_AB(OP_RETURN, 0, OP_R_NORMAL));
319
- return;
320
291
  #if 0
321
292
  case OP_SEND:
322
293
  if (GETARG_B(i) == OP_R_NORMAL && GETARG_A(i) == GETARG_A(i0)) {
@@ -713,16 +684,23 @@ static int
713
684
  gen_values(codegen_scope *s, node *t, int val)
714
685
  {
715
686
  int n = 0;
687
+ int is_splat;
716
688
 
717
689
  while (t) {
718
- if (n >= 127 || (intptr_t)t->car->car == NODE_SPLAT) { // splat mode
690
+ is_splat = (intptr_t)t->car->car == NODE_SPLAT; // splat mode
691
+ if (n >= 127 || is_splat) {
719
692
  if (val) {
720
693
  pop_n(n);
721
694
  genop(s, MKOP_ABC(OP_ARRAY, cursp(), cursp(), n));
722
695
  push();
723
696
  codegen(s, t->car, VAL);
724
697
  pop(); pop();
725
- genop(s, MKOP_AB(OP_ARYCAT, cursp(), cursp()+1));
698
+ if (is_splat) {
699
+ genop(s, MKOP_AB(OP_ARYCAT, cursp(), cursp()+1));
700
+ }
701
+ else {
702
+ genop(s, MKOP_AB(OP_ARYPUSH, cursp(), cursp()+1));
703
+ }
726
704
  t = t->cdr;
727
705
  while (t) {
728
706
  push();
@@ -959,6 +937,9 @@ gen_vmassignment(codegen_scope *s, node *tree, int rhs, int val)
959
937
  }
960
938
  }
961
939
  }
940
+ else {
941
+ pop();
942
+ }
962
943
  }
963
944
 
964
945
  static void
@@ -1104,6 +1085,15 @@ codegen(codegen_scope *s, node *tree, int val)
1104
1085
  int nt;
1105
1086
 
1106
1087
  if (!tree) return;
1088
+
1089
+ if (s->irep && s->pc > 0 && s->filename_index != tree->filename_index) {
1090
+ s->irep->filename = mrb_parser_get_filename(s->parser, s->filename_index);
1091
+ mrb_debug_info_append_file(s->mrb, s->irep, s->debug_start_pos, s->pc);
1092
+ s->debug_start_pos = s->pc;
1093
+ s->filename_index = tree->filename_index;
1094
+ s->filename = mrb_parser_get_filename(s->parser, tree->filename_index);
1095
+ }
1096
+
1107
1097
  nt = (intptr_t)tree->car;
1108
1098
  s->lineno = tree->lineno;
1109
1099
  tree = tree->cdr;
@@ -2389,9 +2379,23 @@ scope_new(mrb_state *mrb, codegen_scope *prev, node *lv)
2389
2379
 
2390
2380
  p->filename = prev->filename;
2391
2381
  if (p->filename) {
2392
- p->lines = (short*)mrb_malloc(mrb, sizeof(short)*p->icapa);
2382
+ p->lines = (uint16_t*)mrb_malloc(mrb, sizeof(short)*p->icapa);
2393
2383
  }
2394
2384
  p->lineno = prev->lineno;
2385
+
2386
+ // debug setting
2387
+ p->debug_start_pos = 0;
2388
+ if(p->filename) {
2389
+ mrb_debug_info_alloc(mrb, p->irep);
2390
+ p->irep->filename = p->filename;
2391
+ p->irep->lines = p->lines;
2392
+ }
2393
+ else {
2394
+ p->irep->debug_info = NULL;
2395
+ }
2396
+ p->parser = prev->parser;
2397
+ p->filename_index = prev->filename_index;
2398
+
2395
2399
  return p;
2396
2400
  }
2397
2401
 
@@ -2417,6 +2421,9 @@ scope_finish(codegen_scope *s)
2417
2421
  irep->pool = (mrb_value *)codegen_realloc(s, irep->pool, sizeof(mrb_value)*irep->plen);
2418
2422
  irep->syms = (mrb_sym *)codegen_realloc(s, irep->syms, sizeof(mrb_sym)*irep->slen);
2419
2423
  if (s->filename) {
2424
+ s->irep->filename = mrb_parser_get_filename(s->parser, s->filename_index);
2425
+ mrb_debug_info_append_file(mrb, s->irep, s->debug_start_pos, s->pc);
2426
+
2420
2427
  fname_len = strlen(s->filename);
2421
2428
  fname = codegen_malloc(s, fname_len + 1);
2422
2429
  memcpy(fname, s->filename, fname_len);
@@ -2828,7 +2835,6 @@ codedump_all(mrb_state *mrb, int start)
2828
2835
  codedump(mrb, i);
2829
2836
  }
2830
2837
  }
2831
-
2832
2838
  static int
2833
2839
  codegen_start(mrb_state *mrb, parser_state *p)
2834
2840
  {
@@ -2838,9 +2844,9 @@ codegen_start(mrb_state *mrb, parser_state *p)
2838
2844
  return -1;
2839
2845
  }
2840
2846
  scope->mrb = mrb;
2841
- if (p->filename) {
2842
- scope->filename = p->filename;
2843
- }
2847
+ scope->parser = p;
2848
+ scope->filename = p->filename;
2849
+ scope->filename_index = p->current_filename_index;
2844
2850
  if (setjmp(scope->jmp) == 0) {
2845
2851
  // prepare irep
2846
2852
  codegen(scope, p->tree, NOVAL);
@@ -0,0 +1,214 @@
1
+ #include <string.h>
2
+ #include "mruby.h"
3
+ #include "mruby/irep.h"
4
+ #include "mruby/debug.h"
5
+
6
+ static mrb_irep_debug_info_file *
7
+ get_file(mrb_irep_debug_info *info, uint32_t pc)
8
+ {
9
+ mrb_irep_debug_info_file **ret;
10
+ int32_t count;
11
+
12
+ if(pc >= info->pc_count) { return NULL; }
13
+ // get upper bound
14
+ ret = info->files;
15
+ count = info->flen;
16
+ while (count > 0) {
17
+ int32_t step = count / 2;
18
+ mrb_irep_debug_info_file **it = ret + step;
19
+ if (!(pc < (*it)->start_pos)) {
20
+ ret = it + 1;
21
+ count -= step + 1;
22
+ } else { count = step; }
23
+ }
24
+
25
+ --ret;
26
+
27
+ // check returning file exists inside debug info
28
+ mrb_assert(info->files <= ret && ret < (info->files + info->flen));
29
+ // check pc is within the range of returning file
30
+ mrb_assert((*ret)->start_pos <= pc &&
31
+ pc < (((ret + 1 - info->files) < info->flen)
32
+ ? (*(ret+1))->start_pos : info->pc_count));
33
+
34
+ return *ret;
35
+ }
36
+
37
+ static mrb_debug_line_type
38
+ select_line_type(const uint16_t *lines, size_t lines_len)
39
+ {
40
+ size_t line_count = 0;
41
+ int prev_line = -1;
42
+ size_t i;
43
+ for (i = 0; i < lines_len; ++i) {
44
+ if (lines[i] != prev_line) {
45
+ ++line_count;
46
+ }
47
+ }
48
+ return (sizeof(uint16_t) * lines_len) <= (sizeof(mrb_irep_debug_info_line) * line_count)
49
+ ? mrb_debug_line_ary : mrb_debug_line_flat_map;
50
+ }
51
+
52
+ char const*
53
+ mrb_debug_get_filename(mrb_irep *irep, uint32_t pc)
54
+ {
55
+ if (irep && pc < irep->ilen) {
56
+ mrb_irep_debug_info_file* f = NULL;
57
+ if (!irep->debug_info) { return irep->filename; }
58
+ else if ((f = get_file(irep->debug_info, pc))) {
59
+ return f->filename;
60
+ }
61
+ }
62
+ return NULL;
63
+ }
64
+
65
+ int32_t
66
+ mrb_debug_get_line(mrb_irep *irep, uint32_t pc)
67
+ {
68
+ if (irep && pc < irep->ilen) {
69
+ mrb_irep_debug_info_file* f = NULL;
70
+ if (!irep->debug_info) {
71
+ return irep->lines? irep->lines[pc] : -1;
72
+ }
73
+ else if ((f = get_file(irep->debug_info, pc))) {
74
+ switch(f->line_type) {
75
+ case mrb_debug_line_ary:
76
+ mrb_assert(f->start_pos <= pc && pc < (f->start_pos + f->line_entry_count));
77
+ return f->line_ary[pc - f->start_pos];
78
+
79
+ case mrb_debug_line_flat_map: {
80
+ // get upper bound
81
+ mrb_irep_debug_info_line *ret = f->line_flat_map;
82
+ uint32_t count = f->line_entry_count;
83
+ while (count > 0) {
84
+ int32_t step = count / 2;
85
+ mrb_irep_debug_info_line *it = ret + step;
86
+ if (!(pc < it->start_pos)) {
87
+ ret = it + 1;
88
+ count -= step + 1;
89
+ } else { count = step; }
90
+ }
91
+
92
+ --ret;
93
+
94
+ // check line entry pointer range
95
+ mrb_assert(f->line_flat_map <= ret && ret < (f->line_flat_map + f->line_entry_count));
96
+ // check pc range
97
+ mrb_assert(ret->start_pos <= pc &&
98
+ pc < (((ret + 1 - f->line_flat_map) < f->line_entry_count)
99
+ ? (ret+1)->start_pos : irep->debug_info->pc_count));
100
+
101
+ return ret->line;
102
+ }
103
+ }
104
+ }
105
+ }
106
+ return -1;
107
+ }
108
+
109
+ mrb_irep_debug_info *
110
+ mrb_debug_info_alloc(mrb_state *mrb, mrb_irep *irep)
111
+ {
112
+ static const mrb_irep_debug_info initial = { 0, 0, NULL };
113
+ mrb_irep_debug_info *ret;
114
+
115
+ mrb_assert(!irep->debug_info);
116
+ ret = (mrb_irep_debug_info *)mrb_malloc(mrb, sizeof(*ret));
117
+ *ret = initial;
118
+ irep->debug_info = ret;
119
+ return ret;
120
+ }
121
+
122
+ mrb_irep_debug_info_file *
123
+ mrb_debug_info_append_file(mrb_state *mrb, mrb_irep *irep,
124
+ uint32_t start_pos, uint32_t end_pos)
125
+ {
126
+ mrb_irep_debug_info *info;
127
+ mrb_irep_debug_info_file *ret;
128
+ uint32_t file_pc_count;
129
+ size_t fn_len;
130
+ size_t len;
131
+ uint32_t i;
132
+
133
+ if (!irep->debug_info) { return NULL; }
134
+
135
+ mrb_assert(irep->filename);
136
+ mrb_assert(irep->lines);
137
+
138
+ info = irep->debug_info;
139
+
140
+ if (info->flen > 0 && strcmp(irep->filename, info->files[info->flen - 1]->filename) == 0) {
141
+ return NULL;
142
+ }
143
+
144
+ ret = (mrb_irep_debug_info_file *)mrb_malloc(mrb, sizeof(*ret));
145
+ info->files =
146
+ (mrb_irep_debug_info_file*)info->files
147
+ ? mrb_realloc(mrb, info->files, sizeof(mrb_irep_debug_info_file*) * (info->flen + 1))
148
+ : mrb_malloc(mrb, sizeof(mrb_irep_debug_info_file*));
149
+ info->files[info->flen++] = ret;
150
+
151
+ file_pc_count = end_pos - start_pos;
152
+
153
+ ret->start_pos = start_pos;
154
+ info->pc_count = end_pos;
155
+
156
+ fn_len = strlen(irep->filename);
157
+ ret->filename_sym = mrb_intern2(mrb, irep->filename, fn_len);
158
+ len = 0;
159
+ ret->filename = mrb_sym2name_len(mrb, ret->filename_sym, &len);
160
+
161
+ ret->line_type = select_line_type(irep->lines + start_pos, end_pos - start_pos);
162
+ ret->line_ptr = NULL;
163
+
164
+ switch(ret->line_type) {
165
+ case mrb_debug_line_ary:
166
+ ret->line_entry_count = file_pc_count;
167
+ ret->line_ary = mrb_malloc(mrb, sizeof(uint16_t) * file_pc_count);
168
+ for(i = 0; i < file_pc_count; ++i) {
169
+ ret->line_ary[i] = irep->lines[start_pos + i];
170
+ }
171
+ break;
172
+
173
+ case mrb_debug_line_flat_map: {
174
+ uint16_t prev_line = 0;
175
+ mrb_irep_debug_info_line m;
176
+ ret->line_flat_map = mrb_malloc(mrb, sizeof(mrb_irep_debug_info_line) * 1);
177
+ ret->line_entry_count = 0;
178
+ for(i = 0; i < file_pc_count; ++i) {
179
+ if(irep->lines[start_pos + i] == prev_line) { continue; }
180
+
181
+ ret->line_flat_map = mrb_realloc(
182
+ mrb, ret->line_flat_map,
183
+ sizeof(mrb_irep_debug_info_line) * (ret->line_entry_count + 1));
184
+ m.start_pos = start_pos + i;
185
+ m.line = irep->lines[start_pos + i];
186
+ ret->line_flat_map[ret->line_entry_count] = m;
187
+
188
+ // update
189
+ ++ret->line_entry_count;
190
+ prev_line = irep->lines[start_pos + i];
191
+ }
192
+ } break;
193
+
194
+ default: mrb_assert(0); break;
195
+ }
196
+
197
+ return ret;
198
+ }
199
+
200
+ void
201
+ mrb_debug_info_free(mrb_state *mrb, mrb_irep_debug_info *d)
202
+ {
203
+ uint32_t i;
204
+
205
+ if(!d) { return; }
206
+
207
+ for(i = 0; i < d->flen; ++i) {
208
+ mrb_assert(d->files[i]);
209
+ mrb_free(mrb, d->files[i]->line_ptr);
210
+ mrb_free(mrb, d->files[i]);
211
+ }
212
+ mrb_free(mrb, d->files);
213
+ mrb_free(mrb, d);
214
+ }