webruby 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1364) hide show
  1. checksums.yaml +7 -0
  2. data/bin/webruby +36 -0
  3. data/driver/driver.c +50 -0
  4. data/driver/main.c +40 -0
  5. data/lib/webruby/app.rb +13 -0
  6. data/lib/webruby/config.rb +61 -0
  7. data/lib/webruby/environment.rb +32 -0
  8. data/lib/webruby/rake/files.rake +66 -0
  9. data/lib/webruby/rake/general.rake +22 -0
  10. data/lib/webruby/rake/mruby.rake +44 -0
  11. data/lib/webruby/utility.rb +132 -0
  12. data/lib/webruby.rb +10 -0
  13. data/modules/emscripten/AUTHORS +89 -0
  14. data/modules/emscripten/LICENSE +68 -0
  15. data/modules/emscripten/README.markdown +14 -0
  16. data/modules/emscripten/cmake/Platform/Emscripten.cmake +61 -0
  17. data/modules/emscripten/cmake/Platform/Emscripten_unix.cmake +24 -0
  18. data/modules/emscripten/em++ +12 -0
  19. data/modules/emscripten/em++.bat +2 -0
  20. data/modules/emscripten/em-config +24 -0
  21. data/modules/emscripten/em-config.bat +2 -0
  22. data/modules/emscripten/emar +24 -0
  23. data/modules/emscripten/emar.bat +2 -0
  24. data/modules/emscripten/emcc +1744 -0
  25. data/modules/emscripten/emcc.bat +2 -0
  26. data/modules/emscripten/emcc.py +5 -0
  27. data/modules/emscripten/emconfigure +27 -0
  28. data/modules/emscripten/emconfigure.bat +2 -0
  29. data/modules/emscripten/emlibtool +11 -0
  30. data/modules/emscripten/emlibtool.bat +2 -0
  31. data/modules/emscripten/emlink.py +293 -0
  32. data/modules/emscripten/emmake +29 -0
  33. data/modules/emscripten/emmake.bat +2 -0
  34. data/modules/emscripten/emranlib +9 -0
  35. data/modules/emscripten/emranlib.bat +2 -0
  36. data/modules/emscripten/emscons +20 -0
  37. data/modules/emscripten/emscripten.py +835 -0
  38. data/modules/emscripten/patches/README +4 -0
  39. data/modules/emscripten/patches/series +2 -0
  40. data/modules/emscripten/scons-tools/closure.py +28 -0
  41. data/modules/emscripten/scons-tools/emscripten.py +359 -0
  42. data/modules/emscripten/scons-tools/llvm.py +33 -0
  43. data/modules/emscripten/src/analyzer.js +1695 -0
  44. data/modules/emscripten/src/compiler.html +48 -0
  45. data/modules/emscripten/src/compiler.js +298 -0
  46. data/modules/emscripten/src/corruptionCheck.js +98 -0
  47. data/modules/emscripten/src/determinstic.js +20 -0
  48. data/modules/emscripten/src/embind/embind.js +1677 -0
  49. data/modules/emscripten/src/embind/emval.js +283 -0
  50. data/modules/emscripten/src/experimental/allow_loopvars_from_memsetcpy_inasm.diff +97 -0
  51. data/modules/emscripten/src/experimental/batching.diff +44 -0
  52. data/modules/emscripten/src/experimental/functypeopt.diff +113 -0
  53. data/modules/emscripten/src/experimental/multiple_heaps.diff +175 -0
  54. data/modules/emscripten/src/experimental/noncallgraphprofiling.diff +197 -0
  55. data/modules/emscripten/src/experimental/optimize_memcpy_for_ta1.diff +124 -0
  56. data/modules/emscripten/src/experimental/remove__label__s.diff +140 -0
  57. data/modules/emscripten/src/experimental/renderer_cache_hash.diff +99 -0
  58. data/modules/emscripten/src/experimental/sdl_key_forwarding.diff +57 -0
  59. data/modules/emscripten/src/experimental/simplifyGeneratedFunctionsDetection.diff +336 -0
  60. data/modules/emscripten/src/experimental/stringCache.diff +147 -0
  61. data/modules/emscripten/src/fastLong.js +299 -0
  62. data/modules/emscripten/src/framework.js +257 -0
  63. data/modules/emscripten/src/gl-matrix.js +1952 -0
  64. data/modules/emscripten/src/headless.js +904 -0
  65. data/modules/emscripten/src/intertyper.js +1050 -0
  66. data/modules/emscripten/src/jsifier.js +1827 -0
  67. data/modules/emscripten/src/library.js +8270 -0
  68. data/modules/emscripten/src/library_browser.js +911 -0
  69. data/modules/emscripten/src/library_egl.js +491 -0
  70. data/modules/emscripten/src/library_gc.js +236 -0
  71. data/modules/emscripten/src/library_gl.js +4452 -0
  72. data/modules/emscripten/src/library_glfw.js +576 -0
  73. data/modules/emscripten/src/library_glut.js +449 -0
  74. data/modules/emscripten/src/library_jansson.js +320 -0
  75. data/modules/emscripten/src/library_openal.js +602 -0
  76. data/modules/emscripten/src/library_sdl.js +2024 -0
  77. data/modules/emscripten/src/library_strtok_r.c +97 -0
  78. data/modules/emscripten/src/library_xlib.js +23 -0
  79. data/modules/emscripten/src/long.js +1609 -0
  80. data/modules/emscripten/src/modules.js +491 -0
  81. data/modules/emscripten/src/parseTools.js +2474 -0
  82. data/modules/emscripten/src/postamble.js +170 -0
  83. data/modules/emscripten/src/postamble_sharedlib.js +16 -0
  84. data/modules/emscripten/src/preamble.js +914 -0
  85. data/modules/emscripten/src/preamble_sharedlib.js +25 -0
  86. data/modules/emscripten/src/relooper/README.markdown +14 -0
  87. data/modules/emscripten/src/relooper/Relooper.cpp +1236 -0
  88. data/modules/emscripten/src/relooper/Relooper.h +250 -0
  89. data/modules/emscripten/src/relooper/doit.sh +70 -0
  90. data/modules/emscripten/src/relooper/emscripten/glue.js +57 -0
  91. data/modules/emscripten/src/relooper/emscripten/test.js +44 -0
  92. data/modules/emscripten/src/relooper/fuzzer.py +116 -0
  93. data/modules/emscripten/src/relooper/ministring.h +35 -0
  94. data/modules/emscripten/src/relooper/paper.pdf +0 -0
  95. data/modules/emscripten/src/relooper/test.cpp +262 -0
  96. data/modules/emscripten/src/relooper/test.txt +155 -0
  97. data/modules/emscripten/src/relooper/test2.c +44 -0
  98. data/modules/emscripten/src/relooper/test2.txt +12 -0
  99. data/modules/emscripten/src/relooper/test3.c +42 -0
  100. data/modules/emscripten/src/relooper/test3.txt +27 -0
  101. data/modules/emscripten/src/relooper/test4.cpp +40 -0
  102. data/modules/emscripten/src/relooper/test4.txt +23 -0
  103. data/modules/emscripten/src/relooper/test5.cpp +40 -0
  104. data/modules/emscripten/src/relooper/test5.txt +32 -0
  105. data/modules/emscripten/src/relooper/test6.cpp +31 -0
  106. data/modules/emscripten/src/relooper/test6.txt +12 -0
  107. data/modules/emscripten/src/relooper/test_dead.cpp +28 -0
  108. data/modules/emscripten/src/relooper/test_dead.txt +9 -0
  109. data/modules/emscripten/src/relooper/test_debug.cpp +30 -0
  110. data/modules/emscripten/src/relooper/test_debug.txt +128 -0
  111. data/modules/emscripten/src/relooper/test_fuzz1.cpp +52 -0
  112. data/modules/emscripten/src/relooper/test_fuzz1.txt +32 -0
  113. data/modules/emscripten/src/relooper/test_fuzz2.cpp +34 -0
  114. data/modules/emscripten/src/relooper/test_fuzz2.txt +13 -0
  115. data/modules/emscripten/src/relooper/test_fuzz3.cpp +36 -0
  116. data/modules/emscripten/src/relooper/test_fuzz3.txt +9 -0
  117. data/modules/emscripten/src/relooper/test_fuzz4.cpp +38 -0
  118. data/modules/emscripten/src/relooper/test_fuzz4.txt +19 -0
  119. data/modules/emscripten/src/relooper/test_fuzz5.cpp +57 -0
  120. data/modules/emscripten/src/relooper/test_fuzz5.txt +52 -0
  121. data/modules/emscripten/src/relooper/test_fuzz6.cpp +322 -0
  122. data/modules/emscripten/src/relooper/test_fuzz6.txt +108 -0
  123. data/modules/emscripten/src/relooper/test_inf.cpp +813 -0
  124. data/modules/emscripten/src/relooper/test_inf.txt +385 -0
  125. data/modules/emscripten/src/relooper/testit.sh +62 -0
  126. data/modules/emscripten/src/relooper/updateit.sh +17 -0
  127. data/modules/emscripten/src/relooper.js +11516 -0
  128. data/modules/emscripten/src/relooper.js.raw.js +11511 -0
  129. data/modules/emscripten/src/runtime.js +546 -0
  130. data/modules/emscripten/src/settings.js +1284 -0
  131. data/modules/emscripten/src/shell.html +92 -0
  132. data/modules/emscripten/src/shell.js +153 -0
  133. data/modules/emscripten/src/shell_sharedlib.js +12 -0
  134. data/modules/emscripten/src/socket.io.js +3870 -0
  135. data/modules/emscripten/src/utility.js +379 -0
  136. data/modules/emscripten/src/wrtcp.js +821 -0
  137. data/modules/emscripten/system/include/AL/al.h +172 -0
  138. data/modules/emscripten/system/include/AL/alc.h +84 -0
  139. data/modules/emscripten/system/include/EGL/egl.h +329 -0
  140. data/modules/emscripten/system/include/EGL/eglext.h +398 -0
  141. data/modules/emscripten/system/include/EGL/eglplatform.h +141 -0
  142. data/modules/emscripten/system/include/GL/freeglut_std.h +628 -0
  143. data/modules/emscripten/system/include/GL/gl.h +2241 -0
  144. data/modules/emscripten/system/include/GL/glew.h +6 -0
  145. data/modules/emscripten/system/include/GL/glext.h +11127 -0
  146. data/modules/emscripten/system/include/GL/glfw.h +518 -0
  147. data/modules/emscripten/system/include/GL/glu.h +353 -0
  148. data/modules/emscripten/system/include/GL/glut.h +21 -0
  149. data/modules/emscripten/system/include/GLES/gl.h +770 -0
  150. data/modules/emscripten/system/include/GLES/glext.h +1278 -0
  151. data/modules/emscripten/system/include/GLES/glplatform.h +30 -0
  152. data/modules/emscripten/system/include/GLES2/gl2.h +621 -0
  153. data/modules/emscripten/system/include/GLES2/gl2ext.h +803 -0
  154. data/modules/emscripten/system/include/GLES2/gl2platform.h +30 -0
  155. data/modules/emscripten/system/include/KHR/khrplatform.h +277 -0
  156. data/modules/emscripten/system/include/SDL/COPYING +19 -0
  157. data/modules/emscripten/system/include/SDL/SDL.h +162 -0
  158. data/modules/emscripten/system/include/SDL/SDL_assert.h +241 -0
  159. data/modules/emscripten/system/include/SDL/SDL_atomic.h +318 -0
  160. data/modules/emscripten/system/include/SDL/SDL_audio.h +509 -0
  161. data/modules/emscripten/system/include/SDL/SDL_blendmode.h +60 -0
  162. data/modules/emscripten/system/include/SDL/SDL_clipboard.h +75 -0
  163. data/modules/emscripten/system/include/SDL/SDL_compat.h +365 -0
  164. data/modules/emscripten/system/include/SDL/SDL_config.h +48 -0
  165. data/modules/emscripten/system/include/SDL/SDL_config.h.in +297 -0
  166. data/modules/emscripten/system/include/SDL/SDL_config_android.h +133 -0
  167. data/modules/emscripten/system/include/SDL/SDL_config_iphoneos.h +148 -0
  168. data/modules/emscripten/system/include/SDL/SDL_config_macosx.h +172 -0
  169. data/modules/emscripten/system/include/SDL/SDL_config_minimal.h +74 -0
  170. data/modules/emscripten/system/include/SDL/SDL_config_nintendods.h +129 -0
  171. data/modules/emscripten/system/include/SDL/SDL_config_pandora.h +125 -0
  172. data/modules/emscripten/system/include/SDL/SDL_config_windows.h +207 -0
  173. data/modules/emscripten/system/include/SDL/SDL_config_wiz.h +119 -0
  174. data/modules/emscripten/system/include/SDL/SDL_copying.h +20 -0
  175. data/modules/emscripten/system/include/SDL/SDL_cpuinfo.h +150 -0
  176. data/modules/emscripten/system/include/SDL/SDL_endian.h +248 -0
  177. data/modules/emscripten/system/include/SDL/SDL_error.h +77 -0
  178. data/modules/emscripten/system/include/SDL/SDL_events.h +639 -0
  179. data/modules/emscripten/system/include/SDL/SDL_gesture.h +91 -0
  180. data/modules/emscripten/system/include/SDL/SDL_gfxPrimitives.h +246 -0
  181. data/modules/emscripten/system/include/SDL/SDL_haptic.h +1200 -0
  182. data/modules/emscripten/system/include/SDL/SDL_hints.h +206 -0
  183. data/modules/emscripten/system/include/SDL/SDL_image.h +138 -0
  184. data/modules/emscripten/system/include/SDL/SDL_input.h +87 -0
  185. data/modules/emscripten/system/include/SDL/SDL_joystick.h +208 -0
  186. data/modules/emscripten/system/include/SDL/SDL_keyboard.h +169 -0
  187. data/modules/emscripten/system/include/SDL/SDL_keycode.h +344 -0
  188. data/modules/emscripten/system/include/SDL/SDL_loadso.h +85 -0
  189. data/modules/emscripten/system/include/SDL/SDL_log.h +211 -0
  190. data/modules/emscripten/system/include/SDL/SDL_main.h +98 -0
  191. data/modules/emscripten/system/include/SDL/SDL_mixer.h +634 -0
  192. data/modules/emscripten/system/include/SDL/SDL_mouse.h +213 -0
  193. data/modules/emscripten/system/include/SDL/SDL_mutex.h +248 -0
  194. data/modules/emscripten/system/include/SDL/SDL_name.h +11 -0
  195. data/modules/emscripten/system/include/SDL/SDL_opengl.h +11116 -0
  196. data/modules/emscripten/system/include/SDL/SDL_opengles.h +38 -0
  197. data/modules/emscripten/system/include/SDL/SDL_opengles2.h +38 -0
  198. data/modules/emscripten/system/include/SDL/SDL_pixels.h +423 -0
  199. data/modules/emscripten/system/include/SDL/SDL_platform.h +160 -0
  200. data/modules/emscripten/system/include/SDL/SDL_power.h +79 -0
  201. data/modules/emscripten/system/include/SDL/SDL_quit.h +58 -0
  202. data/modules/emscripten/system/include/SDL/SDL_rect.h +136 -0
  203. data/modules/emscripten/system/include/SDL/SDL_render.h +615 -0
  204. data/modules/emscripten/system/include/SDL/SDL_revision.h +2 -0
  205. data/modules/emscripten/system/include/SDL/SDL_revision.h.orig +2 -0
  206. data/modules/emscripten/system/include/SDL/SDL_rotozoom.h +123 -0
  207. data/modules/emscripten/system/include/SDL/SDL_rwops.h +220 -0
  208. data/modules/emscripten/system/include/SDL/SDL_scancode.h +398 -0
  209. data/modules/emscripten/system/include/SDL/SDL_shape.h +147 -0
  210. data/modules/emscripten/system/include/SDL/SDL_stdinc.h +764 -0
  211. data/modules/emscripten/system/include/SDL/SDL_surface.h +499 -0
  212. data/modules/emscripten/system/include/SDL/SDL_syswm.h +241 -0
  213. data/modules/emscripten/system/include/SDL/SDL_thread.h +182 -0
  214. data/modules/emscripten/system/include/SDL/SDL_timer.h +108 -0
  215. data/modules/emscripten/system/include/SDL/SDL_touch.h +124 -0
  216. data/modules/emscripten/system/include/SDL/SDL_ttf.h +249 -0
  217. data/modules/emscripten/system/include/SDL/SDL_types.h +29 -0
  218. data/modules/emscripten/system/include/SDL/SDL_version.h +166 -0
  219. data/modules/emscripten/system/include/SDL/SDL_video.h +820 -0
  220. data/modules/emscripten/system/include/SDL/begin_code.h +135 -0
  221. data/modules/emscripten/system/include/SDL/close_code.h +37 -0
  222. data/modules/emscripten/system/include/X11/X.h +717 -0
  223. data/modules/emscripten/system/include/X11/Xatom.h +79 -0
  224. data/modules/emscripten/system/include/X11/Xfuncproto.h +127 -0
  225. data/modules/emscripten/system/include/X11/Xlib.h +4023 -0
  226. data/modules/emscripten/system/include/X11/Xosdefs.h +116 -0
  227. data/modules/emscripten/system/include/X11/Xutil.h +826 -0
  228. data/modules/emscripten/system/include/X11/keysym.h +73 -0
  229. data/modules/emscripten/system/include/X11/keysymdef.h +2389 -0
  230. data/modules/emscripten/system/include/bsd/float.h +91 -0
  231. data/modules/emscripten/system/include/bsd/readme.txt +2 -0
  232. data/modules/emscripten/system/include/bsd/sys/mman.h +180 -0
  233. data/modules/emscripten/system/include/bsd/sys/utsname.h +70 -0
  234. data/modules/emscripten/system/include/dlfcn.h +31 -0
  235. data/modules/emscripten/system/include/emscripten/bind.h +1210 -0
  236. data/modules/emscripten/system/include/emscripten/emscripten.h +388 -0
  237. data/modules/emscripten/system/include/emscripten/val.h +311 -0
  238. data/modules/emscripten/system/include/emscripten/wire.h +393 -0
  239. data/modules/emscripten/system/include/err.h +95 -0
  240. data/modules/emscripten/system/include/execinfo.h +44 -0
  241. data/modules/emscripten/system/include/features.h +3 -0
  242. data/modules/emscripten/system/include/gc.h +70 -0
  243. data/modules/emscripten/system/include/gfx/png.h +3798 -0
  244. data/modules/emscripten/system/include/gfx/pngconf.h +1665 -0
  245. data/modules/emscripten/system/include/gfx/tiff.h +654 -0
  246. data/modules/emscripten/system/include/gfx/tiffconf.h +104 -0
  247. data/modules/emscripten/system/include/gfx/tiffio.h +526 -0
  248. data/modules/emscripten/system/include/gfx/tiffvers.h +9 -0
  249. data/modules/emscripten/system/include/jansson.h +323 -0
  250. data/modules/emscripten/system/include/jansson_config.h +54 -0
  251. data/modules/emscripten/system/include/libc/_ansi.h +135 -0
  252. data/modules/emscripten/system/include/libc/_syslist.h +40 -0
  253. data/modules/emscripten/system/include/libc/alloca.h +21 -0
  254. data/modules/emscripten/system/include/libc/ar.h +69 -0
  255. data/modules/emscripten/system/include/libc/argz.h +33 -0
  256. data/modules/emscripten/system/include/libc/assert.h +46 -0
  257. data/modules/emscripten/system/include/libc/complex.h +124 -0
  258. data/modules/emscripten/system/include/libc/ctype.h +196 -0
  259. data/modules/emscripten/system/include/libc/dirent.h +16 -0
  260. data/modules/emscripten/system/include/libc/endian.h +3 -0
  261. data/modules/emscripten/system/include/libc/envlock.h +15 -0
  262. data/modules/emscripten/system/include/libc/envz.h +16 -0
  263. data/modules/emscripten/system/include/libc/errno.h +11 -0
  264. data/modules/emscripten/system/include/libc/fastmath.h +13 -0
  265. data/modules/emscripten/system/include/libc/fcntl.h +1 -0
  266. data/modules/emscripten/system/include/libc/fnmatch.h +55 -0
  267. data/modules/emscripten/system/include/libc/getopt.h +196 -0
  268. data/modules/emscripten/system/include/libc/glob.h +89 -0
  269. data/modules/emscripten/system/include/libc/grp.h +94 -0
  270. data/modules/emscripten/system/include/libc/iconv.h +62 -0
  271. data/modules/emscripten/system/include/libc/ieeefp.h +256 -0
  272. data/modules/emscripten/system/include/libc/ifaddrs.h +64 -0
  273. data/modules/emscripten/system/include/libc/inttypes.h +290 -0
  274. data/modules/emscripten/system/include/libc/iso646.h +43 -0
  275. data/modules/emscripten/system/include/libc/langinfo.h +316 -0
  276. data/modules/emscripten/system/include/libc/libgen.h +23 -0
  277. data/modules/emscripten/system/include/libc/limits.h +155 -0
  278. data/modules/emscripten/system/include/libc/locale.h +80 -0
  279. data/modules/emscripten/system/include/libc/machine/_default_types.h +121 -0
  280. data/modules/emscripten/system/include/libc/machine/_types.h +8 -0
  281. data/modules/emscripten/system/include/libc/machine/ansi.h +1 -0
  282. data/modules/emscripten/system/include/libc/machine/endian.h +31 -0
  283. data/modules/emscripten/system/include/libc/machine/fastmath.h +100 -0
  284. data/modules/emscripten/system/include/libc/machine/ieeefp.h +376 -0
  285. data/modules/emscripten/system/include/libc/machine/malloc.h +8 -0
  286. data/modules/emscripten/system/include/libc/machine/param.h +1 -0
  287. data/modules/emscripten/system/include/libc/machine/setjmp-dj.h +43 -0
  288. data/modules/emscripten/system/include/libc/machine/setjmp.h +361 -0
  289. data/modules/emscripten/system/include/libc/machine/stdlib.h +8 -0
  290. data/modules/emscripten/system/include/libc/machine/termios.h +1 -0
  291. data/modules/emscripten/system/include/libc/machine/time.h +19 -0
  292. data/modules/emscripten/system/include/libc/machine/types.h +30 -0
  293. data/modules/emscripten/system/include/libc/malloc.h +169 -0
  294. data/modules/emscripten/system/include/libc/math.h +594 -0
  295. data/modules/emscripten/system/include/libc/newlib.h +2 -0
  296. data/modules/emscripten/system/include/libc/paths.h +7 -0
  297. data/modules/emscripten/system/include/libc/process.h +44 -0
  298. data/modules/emscripten/system/include/libc/pthread.h +362 -0
  299. data/modules/emscripten/system/include/libc/pwd.h +78 -0
  300. data/modules/emscripten/system/include/libc/readme.txt +3 -0
  301. data/modules/emscripten/system/include/libc/reent.h +183 -0
  302. data/modules/emscripten/system/include/libc/regdef.h +7 -0
  303. data/modules/emscripten/system/include/libc/regex.h +102 -0
  304. data/modules/emscripten/system/include/libc/sched.h +97 -0
  305. data/modules/emscripten/system/include/libc/search.h +59 -0
  306. data/modules/emscripten/system/include/libc/setjmp.h +20 -0
  307. data/modules/emscripten/system/include/libc/signal.h +30 -0
  308. data/modules/emscripten/system/include/libc/stdarg.h +50 -0
  309. data/modules/emscripten/system/include/libc/stddef.h +64 -0
  310. data/modules/emscripten/system/include/libc/stdint.h +493 -0
  311. data/modules/emscripten/system/include/libc/stdio.h +694 -0
  312. data/modules/emscripten/system/include/libc/stdlib.h +230 -0
  313. data/modules/emscripten/system/include/libc/string.h +105 -0
  314. data/modules/emscripten/system/include/libc/strings.h +35 -0
  315. data/modules/emscripten/system/include/libc/sys/_default_fcntl.h +223 -0
  316. data/modules/emscripten/system/include/libc/sys/_types.h +93 -0
  317. data/modules/emscripten/system/include/libc/sys/cdefs.h +123 -0
  318. data/modules/emscripten/system/include/libc/sys/config.h +255 -0
  319. data/modules/emscripten/system/include/libc/sys/custom_file.h +2 -0
  320. data/modules/emscripten/system/include/libc/sys/dir.h +10 -0
  321. data/modules/emscripten/system/include/libc/sys/dirent.h +58 -0
  322. data/modules/emscripten/system/include/libc/sys/errno.h +190 -0
  323. data/modules/emscripten/system/include/libc/sys/fcntl.h +4 -0
  324. data/modules/emscripten/system/include/libc/sys/features.h +212 -0
  325. data/modules/emscripten/system/include/libc/sys/file.h +2 -0
  326. data/modules/emscripten/system/include/libc/sys/iconvnls.h +77 -0
  327. data/modules/emscripten/system/include/libc/sys/lock.h +24 -0
  328. data/modules/emscripten/system/include/libc/sys/param.h +25 -0
  329. data/modules/emscripten/system/include/libc/sys/queue.h +471 -0
  330. data/modules/emscripten/system/include/libc/sys/reent.h +843 -0
  331. data/modules/emscripten/system/include/libc/sys/resource.h +59 -0
  332. data/modules/emscripten/system/include/libc/sys/sched.h +67 -0
  333. data/modules/emscripten/system/include/libc/sys/signal.h +314 -0
  334. data/modules/emscripten/system/include/libc/sys/stat.h +222 -0
  335. data/modules/emscripten/system/include/libc/sys/stdio.h +27 -0
  336. data/modules/emscripten/system/include/libc/sys/string.h +2 -0
  337. data/modules/emscripten/system/include/libc/sys/syslimits.h +65 -0
  338. data/modules/emscripten/system/include/libc/sys/termios.h +280 -0
  339. data/modules/emscripten/system/include/libc/sys/time.h +85 -0
  340. data/modules/emscripten/system/include/libc/sys/timeb.h +39 -0
  341. data/modules/emscripten/system/include/libc/sys/times.h +28 -0
  342. data/modules/emscripten/system/include/libc/sys/ttydefaults.h +97 -0
  343. data/modules/emscripten/system/include/libc/sys/types.h +481 -0
  344. data/modules/emscripten/system/include/libc/sys/unistd.h +514 -0
  345. data/modules/emscripten/system/include/libc/sys/utime.h +26 -0
  346. data/modules/emscripten/system/include/libc/sys/wait.h +40 -0
  347. data/modules/emscripten/system/include/libc/tar.h +39 -0
  348. data/modules/emscripten/system/include/libc/termios.h +7 -0
  349. data/modules/emscripten/system/include/libc/time.h +273 -0
  350. data/modules/emscripten/system/include/libc/unctrl.h +46 -0
  351. data/modules/emscripten/system/include/libc/unistd.h +6 -0
  352. data/modules/emscripten/system/include/libc/utime.h +12 -0
  353. data/modules/emscripten/system/include/libc/utmp.h +8 -0
  354. data/modules/emscripten/system/include/libc/wchar.h +194 -0
  355. data/modules/emscripten/system/include/libc/wctype.h +47 -0
  356. data/modules/emscripten/system/include/libc/wordexp.h +53 -0
  357. data/modules/emscripten/system/include/libcxx/CREDITS.TXT +91 -0
  358. data/modules/emscripten/system/include/libcxx/LICENSE.txt +76 -0
  359. data/modules/emscripten/system/include/libcxx/__bit_reference +1268 -0
  360. data/modules/emscripten/system/include/libcxx/__config +485 -0
  361. data/modules/emscripten/system/include/libcxx/__debug +193 -0
  362. data/modules/emscripten/system/include/libcxx/__functional_03 +2130 -0
  363. data/modules/emscripten/system/include/libcxx/__functional_base +437 -0
  364. data/modules/emscripten/system/include/libcxx/__functional_base_03 +1087 -0
  365. data/modules/emscripten/system/include/libcxx/__hash_table +1945 -0
  366. data/modules/emscripten/system/include/libcxx/__locale +1435 -0
  367. data/modules/emscripten/system/include/libcxx/__mutex_base +438 -0
  368. data/modules/emscripten/system/include/libcxx/__split_buffer +654 -0
  369. data/modules/emscripten/system/include/libcxx/__sso_allocator +77 -0
  370. data/modules/emscripten/system/include/libcxx/__std_stream +317 -0
  371. data/modules/emscripten/system/include/libcxx/__tree +2293 -0
  372. data/modules/emscripten/system/include/libcxx/__tuple +305 -0
  373. data/modules/emscripten/system/include/libcxx/__tuple_03 +27 -0
  374. data/modules/emscripten/system/include/libcxx/__undef_min_max +19 -0
  375. data/modules/emscripten/system/include/libcxx/algorithm +5458 -0
  376. data/modules/emscripten/system/include/libcxx/array +341 -0
  377. data/modules/emscripten/system/include/libcxx/atomic +1521 -0
  378. data/modules/emscripten/system/include/libcxx/bitset +1081 -0
  379. data/modules/emscripten/system/include/libcxx/cassert +25 -0
  380. data/modules/emscripten/system/include/libcxx/ccomplex +29 -0
  381. data/modules/emscripten/system/include/libcxx/cctype +164 -0
  382. data/modules/emscripten/system/include/libcxx/cerrno +393 -0
  383. data/modules/emscripten/system/include/libcxx/cfenv +82 -0
  384. data/modules/emscripten/system/include/libcxx/cfloat +78 -0
  385. data/modules/emscripten/system/include/libcxx/chrono +898 -0
  386. data/modules/emscripten/system/include/libcxx/cinttypes +259 -0
  387. data/modules/emscripten/system/include/libcxx/ciso646 +25 -0
  388. data/modules/emscripten/system/include/libcxx/climits +48 -0
  389. data/modules/emscripten/system/include/libcxx/clocale +53 -0
  390. data/modules/emscripten/system/include/libcxx/cmath +1683 -0
  391. data/modules/emscripten/system/include/libcxx/codecvt +547 -0
  392. data/modules/emscripten/system/include/libcxx/complex +1526 -0
  393. data/modules/emscripten/system/include/libcxx/complex.h +35 -0
  394. data/modules/emscripten/system/include/libcxx/condition_variable +256 -0
  395. data/modules/emscripten/system/include/libcxx/csetjmp +52 -0
  396. data/modules/emscripten/system/include/libcxx/csignal +58 -0
  397. data/modules/emscripten/system/include/libcxx/cstdarg +48 -0
  398. data/modules/emscripten/system/include/libcxx/cstdbool +32 -0
  399. data/modules/emscripten/system/include/libcxx/cstddef +103 -0
  400. data/modules/emscripten/system/include/libcxx/cstdint +191 -0
  401. data/modules/emscripten/system/include/libcxx/cstdio +175 -0
  402. data/modules/emscripten/system/include/libcxx/cstdlib +172 -0
  403. data/modules/emscripten/system/include/libcxx/cstring +112 -0
  404. data/modules/emscripten/system/include/libcxx/ctgmath +29 -0
  405. data/modules/emscripten/system/include/libcxx/ctime +72 -0
  406. data/modules/emscripten/system/include/libcxx/cwchar +208 -0
  407. data/modules/emscripten/system/include/libcxx/cwctype +213 -0
  408. data/modules/emscripten/system/include/libcxx/deque +2846 -0
  409. data/modules/emscripten/system/include/libcxx/exception +250 -0
  410. data/modules/emscripten/system/include/libcxx/ext/__hash +46 -0
  411. data/modules/emscripten/system/include/libcxx/ext/hash_map +1003 -0
  412. data/modules/emscripten/system/include/libcxx/ext/hash_set +657 -0
  413. data/modules/emscripten/system/include/libcxx/forward_list +1636 -0
  414. data/modules/emscripten/system/include/libcxx/fstream +1415 -0
  415. data/modules/emscripten/system/include/libcxx/functional +2063 -0
  416. data/modules/emscripten/system/include/libcxx/future +2505 -0
  417. data/modules/emscripten/system/include/libcxx/initializer_list +105 -0
  418. data/modules/emscripten/system/include/libcxx/iomanip +504 -0
  419. data/modules/emscripten/system/include/libcxx/ios +988 -0
  420. data/modules/emscripten/system/include/libcxx/iosfwd +194 -0
  421. data/modules/emscripten/system/include/libcxx/iostream +60 -0
  422. data/modules/emscripten/system/include/libcxx/istream +1713 -0
  423. data/modules/emscripten/system/include/libcxx/iterator +1869 -0
  424. data/modules/emscripten/system/include/libcxx/limits +809 -0
  425. data/modules/emscripten/system/include/libcxx/list +2275 -0
  426. data/modules/emscripten/system/include/libcxx/locale +4591 -0
  427. data/modules/emscripten/system/include/libcxx/map +1924 -0
  428. data/modules/emscripten/system/include/libcxx/memory +5437 -0
  429. data/modules/emscripten/system/include/libcxx/mutex +566 -0
  430. data/modules/emscripten/system/include/libcxx/new +117 -0
  431. data/modules/emscripten/system/include/libcxx/numeric +197 -0
  432. data/modules/emscripten/system/include/libcxx/ostream +1286 -0
  433. data/modules/emscripten/system/include/libcxx/queue +717 -0
  434. data/modules/emscripten/system/include/libcxx/random +6750 -0
  435. data/modules/emscripten/system/include/libcxx/ratio +487 -0
  436. data/modules/emscripten/system/include/libcxx/readme.txt +1 -0
  437. data/modules/emscripten/system/include/libcxx/regex +6439 -0
  438. data/modules/emscripten/system/include/libcxx/scoped_allocator +578 -0
  439. data/modules/emscripten/system/include/libcxx/set +1025 -0
  440. data/modules/emscripten/system/include/libcxx/sstream +888 -0
  441. data/modules/emscripten/system/include/libcxx/stack +292 -0
  442. data/modules/emscripten/system/include/libcxx/stdexcept +162 -0
  443. data/modules/emscripten/system/include/libcxx/streambuf +564 -0
  444. data/modules/emscripten/system/include/libcxx/string +3987 -0
  445. data/modules/emscripten/system/include/libcxx/strstream +400 -0
  446. data/modules/emscripten/system/include/libcxx/support/solaris/floatingpoint.h +5 -0
  447. data/modules/emscripten/system/include/libcxx/support/solaris/wchar.h +38 -0
  448. data/modules/emscripten/system/include/libcxx/support/solaris/xlocale.h +146 -0
  449. data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +79 -0
  450. data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +116 -0
  451. data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +113 -0
  452. data/modules/emscripten/system/include/libcxx/support/win32/support.h +115 -0
  453. data/modules/emscripten/system/include/libcxx/system_error +636 -0
  454. data/modules/emscripten/system/include/libcxx/tgmath.h +29 -0
  455. data/modules/emscripten/system/include/libcxx/thread +459 -0
  456. data/modules/emscripten/system/include/libcxx/tuple +1092 -0
  457. data/modules/emscripten/system/include/libcxx/type_traits +3040 -0
  458. data/modules/emscripten/system/include/libcxx/typeindex +103 -0
  459. data/modules/emscripten/system/include/libcxx/typeinfo +124 -0
  460. data/modules/emscripten/system/include/libcxx/unordered_map +1864 -0
  461. data/modules/emscripten/system/include/libcxx/unordered_set +1144 -0
  462. data/modules/emscripten/system/include/libcxx/utility +583 -0
  463. data/modules/emscripten/system/include/libcxx/valarray +4779 -0
  464. data/modules/emscripten/system/include/libcxx/vector +3228 -0
  465. data/modules/emscripten/system/include/memory.h +10 -0
  466. data/modules/emscripten/system/include/mntent.h +23 -0
  467. data/modules/emscripten/system/include/net/arpa/inet.h +32 -0
  468. data/modules/emscripten/system/include/net/arpa/nameser.h +535 -0
  469. data/modules/emscripten/system/include/net/arpa/nameser_compat.h +187 -0
  470. data/modules/emscripten/system/include/net/if.h +87 -0
  471. data/modules/emscripten/system/include/net/netinet/in.h +166 -0
  472. data/modules/emscripten/system/include/net/netinet/tcp.h +246 -0
  473. data/modules/emscripten/system/include/net/resolv.h +389 -0
  474. data/modules/emscripten/system/include/netdb.h +94 -0
  475. data/modules/emscripten/system/include/nl_types.h +19 -0
  476. data/modules/emscripten/system/include/poll.h +3 -0
  477. data/modules/emscripten/system/include/pty.h +6 -0
  478. data/modules/emscripten/system/include/semaphore.h +31 -0
  479. data/modules/emscripten/system/include/spawn.h +105 -0
  480. data/modules/emscripten/system/include/stdbool.h +16 -0
  481. data/modules/emscripten/system/include/sys/bitypes.h +3 -0
  482. data/modules/emscripten/system/include/sys/io.h +14 -0
  483. data/modules/emscripten/system/include/sys/ioctl.h +26 -0
  484. data/modules/emscripten/system/include/sys/poll.h +31 -0
  485. data/modules/emscripten/system/include/sys/select.h +14 -0
  486. data/modules/emscripten/system/include/sys/socket.h +101 -0
  487. data/modules/emscripten/system/include/sys/socketvar.h +3 -0
  488. data/modules/emscripten/system/include/sys/statvfs.h +32 -0
  489. data/modules/emscripten/system/include/sys/sysctl.h +14 -0
  490. data/modules/emscripten/system/include/sys/uio.h +22 -0
  491. data/modules/emscripten/system/include/sys/un.h +66 -0
  492. data/modules/emscripten/system/include/sysexits.h +108 -0
  493. data/modules/emscripten/system/include/unwind.h +154 -0
  494. data/modules/emscripten/system/include/xlocale.h +47 -0
  495. data/modules/emscripten/system/include/zconf.h +428 -0
  496. data/modules/emscripten/system/include/zlib.h +1613 -0
  497. data/modules/emscripten/system/lib/compiler-rt/LICENSE.TXT +97 -0
  498. data/modules/emscripten/system/lib/compiler-rt/divdi3.c +47 -0
  499. data/modules/emscripten/system/lib/compiler-rt/int_endianness.h +116 -0
  500. data/modules/emscripten/system/lib/compiler-rt/int_lib.h +46 -0
  501. data/modules/emscripten/system/lib/compiler-rt/int_math.h +67 -0
  502. data/modules/emscripten/system/lib/compiler-rt/int_types.h +140 -0
  503. data/modules/emscripten/system/lib/compiler-rt/int_util.h +29 -0
  504. data/modules/emscripten/system/lib/compiler-rt/muldi3.c +56 -0
  505. data/modules/emscripten/system/lib/compiler-rt/readme.txt +20 -0
  506. data/modules/emscripten/system/lib/compiler-rt/udivdi3.c +36 -0
  507. data/modules/emscripten/system/lib/compiler-rt/udivmoddi4.c +251 -0
  508. data/modules/emscripten/system/lib/debugging.cpp +24 -0
  509. data/modules/emscripten/system/lib/dlmalloc.c +6299 -0
  510. data/modules/emscripten/system/lib/embind/bind.cpp +63 -0
  511. data/modules/emscripten/system/lib/libc/gen/err.c +49 -0
  512. data/modules/emscripten/system/lib/libc/gen/errx.c +49 -0
  513. data/modules/emscripten/system/lib/libc/gen/verr.c +58 -0
  514. data/modules/emscripten/system/lib/libc/gen/verrx.c +51 -0
  515. data/modules/emscripten/system/lib/libc/gen/vwarn.c +55 -0
  516. data/modules/emscripten/system/lib/libc/gen/vwarnx.c +48 -0
  517. data/modules/emscripten/system/lib/libc/gen/warn.c +49 -0
  518. data/modules/emscripten/system/lib/libc/gen/warnx.c +49 -0
  519. data/modules/emscripten/system/lib/libc/musl/COPYRIGHT +92 -0
  520. data/modules/emscripten/system/lib/libc/musl/readme.txt +1 -0
  521. data/modules/emscripten/system/lib/libc/musl/src/ctype/alpha.h +125 -0
  522. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswalnum.c +7 -0
  523. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswalpha.c +14 -0
  524. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswblank.c +8 -0
  525. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswcntrl.c +10 -0
  526. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswctype.c +63 -0
  527. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswdigit.c +9 -0
  528. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswgraph.c +7 -0
  529. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswlower.c +6 -0
  530. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswprint.c +19 -0
  531. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswpunct.c +12 -0
  532. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswspace.c +19 -0
  533. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswupper.c +6 -0
  534. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswxdigit.c +7 -0
  535. data/modules/emscripten/system/lib/libc/musl/src/ctype/nonspacing.h +62 -0
  536. data/modules/emscripten/system/lib/libc/musl/src/ctype/punct.h +109 -0
  537. data/modules/emscripten/system/lib/libc/musl/src/ctype/towctrans.c +268 -0
  538. data/modules/emscripten/system/lib/libc/musl/src/ctype/wcswidth.c +8 -0
  539. data/modules/emscripten/system/lib/libc/musl/src/ctype/wctrans.c +16 -0
  540. data/modules/emscripten/system/lib/libc/musl/src/ctype/wcwidth.c +29 -0
  541. data/modules/emscripten/system/lib/libc/musl/src/ctype/wide.h +42 -0
  542. data/modules/emscripten/system/lib/libc/musl/src/internal/libc.c +22 -0
  543. data/modules/emscripten/system/lib/libc/musl/src/internal/libc.h +71 -0
  544. data/modules/emscripten/system/lib/libc/musl/src/multibyte/btowc.c +7 -0
  545. data/modules/emscripten/system/lib/libc/musl/src/multibyte/internal.c +38 -0
  546. data/modules/emscripten/system/lib/libc/musl/src/multibyte/internal.h +22 -0
  547. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mblen.c +17 -0
  548. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbrlen.c +18 -0
  549. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbrtowc.c +57 -0
  550. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbsinit.c +17 -0
  551. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbsnrtowcs.c +65 -0
  552. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbsrtowcs.c +100 -0
  553. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbstowcs.c +7 -0
  554. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbtowc.c +53 -0
  555. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wcrtomb.c +38 -0
  556. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wcsnrtombs.c +52 -0
  557. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wcsrtombs.c +58 -0
  558. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wcstombs.c +7 -0
  559. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wctob.c +8 -0
  560. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wctomb.c +18 -0
  561. data/modules/emscripten/system/lib/libc/musl/src/string/wcpcpy.c +6 -0
  562. data/modules/emscripten/system/lib/libc/musl/src/string/wcpncpy.c +6 -0
  563. data/modules/emscripten/system/lib/libc/musl/src/string/wcscasecmp.c +7 -0
  564. data/modules/emscripten/system/lib/libc/musl/src/string/wcscasecmp_l.c +6 -0
  565. data/modules/emscripten/system/lib/libc/musl/src/string/wcscat.c +7 -0
  566. data/modules/emscripten/system/lib/libc/musl/src/string/wcschr.c +8 -0
  567. data/modules/emscripten/system/lib/libc/musl/src/string/wcscmp.c +7 -0
  568. data/modules/emscripten/system/lib/libc/musl/src/string/wcscpy.c +8 -0
  569. data/modules/emscripten/system/lib/libc/musl/src/string/wcscspn.c +10 -0
  570. data/modules/emscripten/system/lib/libc/musl/src/string/wcsdup.c +11 -0
  571. data/modules/emscripten/system/lib/libc/musl/src/string/wcslen.c +8 -0
  572. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncasecmp.c +9 -0
  573. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncasecmp_l.c +6 -0
  574. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncat.c +10 -0
  575. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncmp.c +7 -0
  576. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncpy.c +9 -0
  577. data/modules/emscripten/system/lib/libc/musl/src/string/wcsnlen.c +8 -0
  578. data/modules/emscripten/system/lib/libc/musl/src/string/wcspbrk.c +7 -0
  579. data/modules/emscripten/system/lib/libc/musl/src/string/wcsrchr.c +8 -0
  580. data/modules/emscripten/system/lib/libc/musl/src/string/wcsspn.c +8 -0
  581. data/modules/emscripten/system/lib/libc/musl/src/string/wcsstr.c +108 -0
  582. data/modules/emscripten/system/lib/libc/musl/src/string/wcstok.c +12 -0
  583. data/modules/emscripten/system/lib/libc/musl/src/string/wcswcs.c +6 -0
  584. data/modules/emscripten/system/lib/libc/musl/src/string/wmemchr.c +8 -0
  585. data/modules/emscripten/system/lib/libc/musl/src/string/wmemcmp.c +8 -0
  586. data/modules/emscripten/system/lib/libc/musl/src/string/wmemcpy.c +9 -0
  587. data/modules/emscripten/system/lib/libc/musl/src/string/wmemmove.c +12 -0
  588. data/modules/emscripten/system/lib/libc/musl/src/string/wmemset.c +9 -0
  589. data/modules/emscripten/system/lib/libc/stdlib/getopt_long.c +511 -0
  590. data/modules/emscripten/system/lib/libc/stdlib/strtod.c +305 -0
  591. data/modules/emscripten/system/lib/libc.symbols +81 -0
  592. data/modules/emscripten/system/lib/libcextra.symbols +61 -0
  593. data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +91 -0
  594. data/modules/emscripten/system/lib/libcxx/LICENSE.txt +76 -0
  595. data/modules/emscripten/system/lib/libcxx/algorithm.cpp +83 -0
  596. data/modules/emscripten/system/lib/libcxx/bind.cpp +30 -0
  597. data/modules/emscripten/system/lib/libcxx/chrono.cpp +132 -0
  598. data/modules/emscripten/system/lib/libcxx/condition_variable.cpp +81 -0
  599. data/modules/emscripten/system/lib/libcxx/debug.cpp +504 -0
  600. data/modules/emscripten/system/lib/libcxx/exception.cpp +226 -0
  601. data/modules/emscripten/system/lib/libcxx/future.cpp +285 -0
  602. data/modules/emscripten/system/lib/libcxx/hash.cpp +564 -0
  603. data/modules/emscripten/system/lib/libcxx/ios.cpp +455 -0
  604. data/modules/emscripten/system/lib/libcxx/iostream.cpp +68 -0
  605. data/modules/emscripten/system/lib/libcxx/locale.cpp +6093 -0
  606. data/modules/emscripten/system/lib/libcxx/memory.cpp +223 -0
  607. data/modules/emscripten/system/lib/libcxx/mutex.cpp +250 -0
  608. data/modules/emscripten/system/lib/libcxx/new.cpp +205 -0
  609. data/modules/emscripten/system/lib/libcxx/random.cpp +48 -0
  610. data/modules/emscripten/system/lib/libcxx/readme.txt +1 -0
  611. data/modules/emscripten/system/lib/libcxx/regex.cpp +325 -0
  612. data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +196 -0
  613. data/modules/emscripten/system/lib/libcxx/string.cpp +687 -0
  614. data/modules/emscripten/system/lib/libcxx/strstream.cpp +329 -0
  615. data/modules/emscripten/system/lib/libcxx/support/solaris/README +4 -0
  616. data/modules/emscripten/system/lib/libcxx/support/solaris/mbsnrtowcs.inc +76 -0
  617. data/modules/emscripten/system/lib/libcxx/support/solaris/wcsnrtombs.inc +93 -0
  618. data/modules/emscripten/system/lib/libcxx/support/solaris/xlocale.c +245 -0
  619. data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +94 -0
  620. data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +70 -0
  621. data/modules/emscripten/system/lib/libcxx/symbols +2927 -0
  622. data/modules/emscripten/system/lib/libcxx/system_error.cpp +201 -0
  623. data/modules/emscripten/system/lib/libcxx/thread.cpp +208 -0
  624. data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +60 -0
  625. data/modules/emscripten/system/lib/libcxx/utility.cpp +17 -0
  626. data/modules/emscripten/system/lib/libcxx/valarray.cpp +54 -0
  627. data/modules/emscripten/system/lib/libcxxabi/CREDITS.TXT +38 -0
  628. data/modules/emscripten/system/lib/libcxxabi/LICENSE.TXT +76 -0
  629. data/modules/emscripten/system/lib/libcxxabi/include/cxa_demangle.h +167 -0
  630. data/modules/emscripten/system/lib/libcxxabi/include/cxxabi.h +175 -0
  631. data/modules/emscripten/system/lib/libcxxabi/lib/buildit +99 -0
  632. data/modules/emscripten/system/lib/libcxxabi/readme.txt +1 -0
  633. data/modules/emscripten/system/lib/libcxxabi/src/abort_message.cpp +50 -0
  634. data/modules/emscripten/system/lib/libcxxabi/src/abort_message.h +33 -0
  635. data/modules/emscripten/system/lib/libcxxabi/src/cxa_aux_runtime.cpp +34 -0
  636. data/modules/emscripten/system/lib/libcxxabi/src/cxa_demangle.cpp +11036 -0
  637. data/modules/emscripten/system/lib/libcxxabi/src/cxa_exception.cpp +622 -0
  638. data/modules/emscripten/system/lib/libcxxabi/src/cxa_exception.hpp +123 -0
  639. data/modules/emscripten/system/lib/libcxxabi/src/cxa_exception_storage.cpp +91 -0
  640. data/modules/emscripten/system/lib/libcxxabi/src/cxa_guard.cpp +231 -0
  641. data/modules/emscripten/system/lib/libcxxabi/src/cxa_handlers.cpp +125 -0
  642. data/modules/emscripten/system/lib/libcxxabi/src/cxa_handlers.hpp +54 -0
  643. data/modules/emscripten/system/lib/libcxxabi/src/cxa_new_delete.cpp +242 -0
  644. data/modules/emscripten/system/lib/libcxxabi/src/cxa_personality.cpp +1055 -0
  645. data/modules/emscripten/system/lib/libcxxabi/src/cxa_unexpected.cpp +27 -0
  646. data/modules/emscripten/system/lib/libcxxabi/src/cxa_vector.cpp +367 -0
  647. data/modules/emscripten/system/lib/libcxxabi/src/cxa_virtual.cpp +31 -0
  648. data/modules/emscripten/system/lib/libcxxabi/src/exception.cpp +41 -0
  649. data/modules/emscripten/system/lib/libcxxabi/src/fallback_malloc.ipp +174 -0
  650. data/modules/emscripten/system/lib/libcxxabi/src/private_typeinfo.cpp +1146 -0
  651. data/modules/emscripten/system/lib/libcxxabi/src/private_typeinfo.h +248 -0
  652. data/modules/emscripten/system/lib/libcxxabi/src/stdexcept.cpp +169 -0
  653. data/modules/emscripten/system/lib/libcxxabi/src/typeinfo.cpp +53 -0
  654. data/modules/emscripten/system/lib/libcxxabi/symbols +236 -0
  655. data/modules/emscripten/system/lib/sdl.cpp +13 -0
  656. data/modules/emscripten/system/lib/sdl.symbols +1 -0
  657. data/modules/emscripten/tests/hello_world.js +92 -0
  658. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/CppHeaderParser.py +2347 -0
  659. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/__init__.py +4 -0
  660. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/doc/CppHeaderParser.html +657 -0
  661. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/examples/SampleClass.h +147 -0
  662. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/examples/readSampleClass.py +74 -0
  663. data/modules/emscripten/third_party/CppHeaderParser/PKG-INFO +249 -0
  664. data/modules/emscripten/third_party/CppHeaderParser/README.html +544 -0
  665. data/modules/emscripten/third_party/CppHeaderParser/README.txt +226 -0
  666. data/modules/emscripten/third_party/CppHeaderParser/setup.py +43 -0
  667. data/modules/emscripten/third_party/ansidecl.h +371 -0
  668. data/modules/emscripten/third_party/closure-compiler/COPYING +202 -0
  669. data/modules/emscripten/third_party/closure-compiler/README +292 -0
  670. data/modules/emscripten/third_party/closure-compiler/compiler.jar +0 -0
  671. data/modules/emscripten/third_party/closure-compiler/readme.txt +3 -0
  672. data/modules/emscripten/third_party/cp-demangle.h +161 -0
  673. data/modules/emscripten/third_party/demangle.h +549 -0
  674. data/modules/emscripten/third_party/demangler.py +49 -0
  675. data/modules/emscripten/third_party/gcc_demangler.c +4226 -0
  676. data/modules/emscripten/third_party/gcc_demangler.js +21282 -0
  677. data/modules/emscripten/third_party/jni/emjvm.cpp +133 -0
  678. data/modules/emscripten/third_party/jni/emjvm.h +8 -0
  679. data/modules/emscripten/third_party/jni/emjvm.js +185 -0
  680. data/modules/emscripten/third_party/jni/jni.h +1154 -0
  681. data/modules/emscripten/third_party/libiberty.h +634 -0
  682. data/modules/emscripten/third_party/lzma.js/README.markdown +37 -0
  683. data/modules/emscripten/third_party/lzma.js/doit.sh +37 -0
  684. data/modules/emscripten/third_party/lzma.js/lzip/AUTHORS +7 -0
  685. data/modules/emscripten/third_party/lzma.js/lzip/COPYING +676 -0
  686. data/modules/emscripten/third_party/lzma.js/lzip/ChangeLog +201 -0
  687. data/modules/emscripten/third_party/lzma.js/lzip/INSTALL +56 -0
  688. data/modules/emscripten/third_party/lzma.js/lzip/Makefile +160 -0
  689. data/modules/emscripten/third_party/lzma.js/lzip/Makefile.in +138 -0
  690. data/modules/emscripten/third_party/lzma.js/lzip/NEWS +22 -0
  691. data/modules/emscripten/third_party/lzma.js/lzip/README +77 -0
  692. data/modules/emscripten/third_party/lzma.js/lzip/arg_parser.cc +204 -0
  693. data/modules/emscripten/third_party/lzma.js/lzip/arg_parser.h +106 -0
  694. data/modules/emscripten/third_party/lzma.js/lzip/configure +192 -0
  695. data/modules/emscripten/third_party/lzma.js/lzip/decoder.cc +252 -0
  696. data/modules/emscripten/third_party/lzma.js/lzip/decoder.h +268 -0
  697. data/modules/emscripten/third_party/lzma.js/lzip/encoder.cc +643 -0
  698. data/modules/emscripten/third_party/lzma.js/lzip/encoder.h +582 -0
  699. data/modules/emscripten/third_party/lzma.js/lzip/fast_encoder.cc +378 -0
  700. data/modules/emscripten/third_party/lzma.js/lzip/fast_encoder.h +171 -0
  701. data/modules/emscripten/third_party/lzma.js/lzip/lzip.h +264 -0
  702. data/modules/emscripten/third_party/lzma.js/lzip/main.cc +545 -0
  703. data/modules/emscripten/third_party/lzma.js/lzma-decoder.js +27 -0
  704. data/modules/emscripten/third_party/lzma.js/lzma-full.js +27 -0
  705. data/modules/emscripten/third_party/lzma.js/native_test.sh +5 -0
  706. data/modules/emscripten/third_party/lzma.js/post.js +13 -0
  707. data/modules/emscripten/third_party/lzma.js/pre.js +13 -0
  708. data/modules/emscripten/third_party/lzma.js/test-decoder.js +39 -0
  709. data/modules/emscripten/third_party/lzma.js/test-full.html +9 -0
  710. data/modules/emscripten/third_party/lzma.js/test-full.js +78 -0
  711. data/modules/emscripten/third_party/ply/ANNOUNCE +40 -0
  712. data/modules/emscripten/third_party/ply/CHANGES +1093 -0
  713. data/modules/emscripten/third_party/ply/PKG-INFO +22 -0
  714. data/modules/emscripten/third_party/ply/README +271 -0
  715. data/modules/emscripten/third_party/ply/TODO +16 -0
  716. data/modules/emscripten/third_party/ply/doc/internal.html +874 -0
  717. data/modules/emscripten/third_party/ply/doc/makedoc.py +194 -0
  718. data/modules/emscripten/third_party/ply/doc/ply.html +3262 -0
  719. data/modules/emscripten/third_party/ply/example/BASIC/README +79 -0
  720. data/modules/emscripten/third_party/ply/example/BASIC/basic.py +71 -0
  721. data/modules/emscripten/third_party/ply/example/BASIC/basiclex.py +74 -0
  722. data/modules/emscripten/third_party/ply/example/BASIC/basiclog.py +79 -0
  723. data/modules/emscripten/third_party/ply/example/BASIC/basinterp.py +441 -0
  724. data/modules/emscripten/third_party/ply/example/BASIC/basparse.py +424 -0
  725. data/modules/emscripten/third_party/ply/example/BASIC/dim.bas +14 -0
  726. data/modules/emscripten/third_party/ply/example/BASIC/func.bas +5 -0
  727. data/modules/emscripten/third_party/ply/example/BASIC/gcd.bas +22 -0
  728. data/modules/emscripten/third_party/ply/example/BASIC/gosub.bas +13 -0
  729. data/modules/emscripten/third_party/ply/example/BASIC/hello.bas +4 -0
  730. data/modules/emscripten/third_party/ply/example/BASIC/linear.bas +17 -0
  731. data/modules/emscripten/third_party/ply/example/BASIC/maxsin.bas +12 -0
  732. data/modules/emscripten/third_party/ply/example/BASIC/powers.bas +13 -0
  733. data/modules/emscripten/third_party/ply/example/BASIC/rand.bas +4 -0
  734. data/modules/emscripten/third_party/ply/example/BASIC/sales.bas +20 -0
  735. data/modules/emscripten/third_party/ply/example/BASIC/sears.bas +18 -0
  736. data/modules/emscripten/third_party/ply/example/BASIC/sqrt1.bas +5 -0
  737. data/modules/emscripten/third_party/ply/example/BASIC/sqrt2.bas +4 -0
  738. data/modules/emscripten/third_party/ply/example/GardenSnake/GardenSnake.py +709 -0
  739. data/modules/emscripten/third_party/ply/example/GardenSnake/README +5 -0
  740. data/modules/emscripten/third_party/ply/example/README +10 -0
  741. data/modules/emscripten/third_party/ply/example/ansic/README +2 -0
  742. data/modules/emscripten/third_party/ply/example/ansic/clex.py +164 -0
  743. data/modules/emscripten/third_party/ply/example/ansic/cparse.py +863 -0
  744. data/modules/emscripten/third_party/ply/example/calc/calc.py +107 -0
  745. data/modules/emscripten/third_party/ply/example/calcdebug/calc.py +113 -0
  746. data/modules/emscripten/third_party/ply/example/classcalc/calc.py +157 -0
  747. data/modules/emscripten/third_party/ply/example/cleanup.sh +2 -0
  748. data/modules/emscripten/third_party/ply/example/closurecalc/calc.py +130 -0
  749. data/modules/emscripten/third_party/ply/example/hedit/hedit.py +48 -0
  750. data/modules/emscripten/third_party/ply/example/newclasscalc/calc.py +160 -0
  751. data/modules/emscripten/third_party/ply/example/optcalc/README +9 -0
  752. data/modules/emscripten/third_party/ply/example/optcalc/calc.py +119 -0
  753. data/modules/emscripten/third_party/ply/example/unicalc/calc.py +117 -0
  754. data/modules/emscripten/third_party/ply/example/yply/README +41 -0
  755. data/modules/emscripten/third_party/ply/example/yply/ylex.py +112 -0
  756. data/modules/emscripten/third_party/ply/example/yply/yparse.py +217 -0
  757. data/modules/emscripten/third_party/ply/example/yply/yply.py +53 -0
  758. data/modules/emscripten/third_party/ply/ply/__init__.py +4 -0
  759. data/modules/emscripten/third_party/ply/ply/cpp.py +898 -0
  760. data/modules/emscripten/third_party/ply/ply/ctokens.py +133 -0
  761. data/modules/emscripten/third_party/ply/ply/lex.py +1058 -0
  762. data/modules/emscripten/third_party/ply/ply/yacc.py +3276 -0
  763. data/modules/emscripten/third_party/ply/setup.py +31 -0
  764. data/modules/emscripten/third_party/ply/test/README +7 -0
  765. data/modules/emscripten/third_party/ply/test/calclex.py +49 -0
  766. data/modules/emscripten/third_party/ply/test/cleanup.sh +4 -0
  767. data/modules/emscripten/third_party/ply/test/lex_closure.py +54 -0
  768. data/modules/emscripten/third_party/ply/test/lex_doc1.py +26 -0
  769. data/modules/emscripten/third_party/ply/test/lex_dup1.py +29 -0
  770. data/modules/emscripten/third_party/ply/test/lex_dup2.py +33 -0
  771. data/modules/emscripten/third_party/ply/test/lex_dup3.py +31 -0
  772. data/modules/emscripten/third_party/ply/test/lex_empty.py +20 -0
  773. data/modules/emscripten/third_party/ply/test/lex_error1.py +24 -0
  774. data/modules/emscripten/third_party/ply/test/lex_error2.py +26 -0
  775. data/modules/emscripten/third_party/ply/test/lex_error3.py +27 -0
  776. data/modules/emscripten/third_party/ply/test/lex_error4.py +27 -0
  777. data/modules/emscripten/third_party/ply/test/lex_hedit.py +47 -0
  778. data/modules/emscripten/third_party/ply/test/lex_ignore.py +31 -0
  779. data/modules/emscripten/third_party/ply/test/lex_ignore2.py +29 -0
  780. data/modules/emscripten/third_party/ply/test/lex_literal1.py +25 -0
  781. data/modules/emscripten/third_party/ply/test/lex_literal2.py +25 -0
  782. data/modules/emscripten/third_party/ply/test/lex_many_tokens.py +27 -0
  783. data/modules/emscripten/third_party/ply/test/lex_module.py +10 -0
  784. data/modules/emscripten/third_party/ply/test/lex_module_import.py +42 -0
  785. data/modules/emscripten/third_party/ply/test/lex_object.py +55 -0
  786. data/modules/emscripten/third_party/ply/test/lex_opt_alias.py +54 -0
  787. data/modules/emscripten/third_party/ply/test/lex_optimize.py +50 -0
  788. data/modules/emscripten/third_party/ply/test/lex_optimize2.py +50 -0
  789. data/modules/emscripten/third_party/ply/test/lex_optimize3.py +52 -0
  790. data/modules/emscripten/third_party/ply/test/lex_re1.py +27 -0
  791. data/modules/emscripten/third_party/ply/test/lex_re2.py +27 -0
  792. data/modules/emscripten/third_party/ply/test/lex_re3.py +29 -0
  793. data/modules/emscripten/third_party/ply/test/lex_rule1.py +27 -0
  794. data/modules/emscripten/third_party/ply/test/lex_rule2.py +29 -0
  795. data/modules/emscripten/third_party/ply/test/lex_rule3.py +27 -0
  796. data/modules/emscripten/third_party/ply/test/lex_state1.py +40 -0
  797. data/modules/emscripten/third_party/ply/test/lex_state2.py +40 -0
  798. data/modules/emscripten/third_party/ply/test/lex_state3.py +42 -0
  799. data/modules/emscripten/third_party/ply/test/lex_state4.py +41 -0
  800. data/modules/emscripten/third_party/ply/test/lex_state5.py +40 -0
  801. data/modules/emscripten/third_party/ply/test/lex_state_noerror.py +39 -0
  802. data/modules/emscripten/third_party/ply/test/lex_state_norule.py +40 -0
  803. data/modules/emscripten/third_party/ply/test/lex_state_try.py +45 -0
  804. data/modules/emscripten/third_party/ply/test/lex_token1.py +19 -0
  805. data/modules/emscripten/third_party/ply/test/lex_token2.py +22 -0
  806. data/modules/emscripten/third_party/ply/test/lex_token3.py +24 -0
  807. data/modules/emscripten/third_party/ply/test/lex_token4.py +26 -0
  808. data/modules/emscripten/third_party/ply/test/lex_token5.py +31 -0
  809. data/modules/emscripten/third_party/ply/test/lex_token_dup.py +29 -0
  810. data/modules/emscripten/third_party/ply/test/testlex.py +606 -0
  811. data/modules/emscripten/third_party/ply/test/testyacc.py +347 -0
  812. data/modules/emscripten/third_party/ply/test/yacc_badargs.py +68 -0
  813. data/modules/emscripten/third_party/ply/test/yacc_badid.py +77 -0
  814. data/modules/emscripten/third_party/ply/test/yacc_badprec.py +64 -0
  815. data/modules/emscripten/third_party/ply/test/yacc_badprec2.py +68 -0
  816. data/modules/emscripten/third_party/ply/test/yacc_badprec3.py +68 -0
  817. data/modules/emscripten/third_party/ply/test/yacc_badrule.py +68 -0
  818. data/modules/emscripten/third_party/ply/test/yacc_badtok.py +68 -0
  819. data/modules/emscripten/third_party/ply/test/yacc_dup.py +68 -0
  820. data/modules/emscripten/third_party/ply/test/yacc_error1.py +68 -0
  821. data/modules/emscripten/third_party/ply/test/yacc_error2.py +68 -0
  822. data/modules/emscripten/third_party/ply/test/yacc_error3.py +67 -0
  823. data/modules/emscripten/third_party/ply/test/yacc_error4.py +72 -0
  824. data/modules/emscripten/third_party/ply/test/yacc_inf.py +56 -0
  825. data/modules/emscripten/third_party/ply/test/yacc_literal.py +69 -0
  826. data/modules/emscripten/third_party/ply/test/yacc_misplaced.py +68 -0
  827. data/modules/emscripten/third_party/ply/test/yacc_missing1.py +68 -0
  828. data/modules/emscripten/third_party/ply/test/yacc_nested.py +33 -0
  829. data/modules/emscripten/third_party/ply/test/yacc_nodoc.py +67 -0
  830. data/modules/emscripten/third_party/ply/test/yacc_noerror.py +66 -0
  831. data/modules/emscripten/third_party/ply/test/yacc_nop.py +68 -0
  832. data/modules/emscripten/third_party/ply/test/yacc_notfunc.py +66 -0
  833. data/modules/emscripten/third_party/ply/test/yacc_notok.py +67 -0
  834. data/modules/emscripten/third_party/ply/test/yacc_prec1.py +68 -0
  835. data/modules/emscripten/third_party/ply/test/yacc_rr.py +72 -0
  836. data/modules/emscripten/third_party/ply/test/yacc_rr_unused.py +30 -0
  837. data/modules/emscripten/third_party/ply/test/yacc_simple.py +68 -0
  838. data/modules/emscripten/third_party/ply/test/yacc_sr.py +63 -0
  839. data/modules/emscripten/third_party/ply/test/yacc_term1.py +68 -0
  840. data/modules/emscripten/third_party/ply/test/yacc_unused.py +77 -0
  841. data/modules/emscripten/third_party/ply/test/yacc_unused_rule.py +72 -0
  842. data/modules/emscripten/third_party/ply/test/yacc_uprec.py +63 -0
  843. data/modules/emscripten/third_party/ply/test/yacc_uprec2.py +63 -0
  844. data/modules/emscripten/third_party/readme.txt +7 -0
  845. data/modules/emscripten/third_party/websockify/CHANGES.txt +23 -0
  846. data/modules/emscripten/third_party/websockify/LICENSE.txt +16 -0
  847. data/modules/emscripten/third_party/websockify/MANIFEST.in +1 -0
  848. data/modules/emscripten/third_party/websockify/Makefile +11 -0
  849. data/modules/emscripten/third_party/websockify/README.md +168 -0
  850. data/modules/emscripten/third_party/websockify/Windows/Windows Service Readme.txt +39 -0
  851. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/Program.cs +24 -0
  852. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/ProjectInstaller.Designer.cs +61 -0
  853. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/ProjectInstaller.cs +19 -0
  854. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/ProjectInstaller.resx +129 -0
  855. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/Properties/AssemblyInfo.cs +36 -0
  856. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/Service1.Designer.cs +37 -0
  857. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/Service1.cs +41 -0
  858. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/noVNC Websocket.csproj +75 -0
  859. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/noVNC Websocket.sln +20 -0
  860. data/modules/emscripten/third_party/websockify/docs/LICENSE.GPL-3 +621 -0
  861. data/modules/emscripten/third_party/websockify/docs/LICENSE.LGPL-3 +165 -0
  862. data/modules/emscripten/third_party/websockify/docs/LICENSE.MPL-2.0 +373 -0
  863. data/modules/emscripten/third_party/websockify/docs/TODO +9 -0
  864. data/modules/emscripten/third_party/websockify/docs/flash_policy.txt +4 -0
  865. data/modules/emscripten/third_party/websockify/docs/latency_results.txt +114 -0
  866. data/modules/emscripten/third_party/websockify/docs/notes +17 -0
  867. data/modules/emscripten/third_party/websockify/docs/release.txt +9 -0
  868. data/modules/emscripten/third_party/websockify/docs/websockify.1 +110 -0
  869. data/modules/emscripten/third_party/websockify/include/VT100.js +919 -0
  870. data/modules/emscripten/third_party/websockify/include/base64.js +114 -0
  871. data/modules/emscripten/third_party/websockify/include/keysym.js +99 -0
  872. data/modules/emscripten/third_party/websockify/include/util.js +359 -0
  873. data/modules/emscripten/third_party/websockify/include/web-socket-js/README.txt +109 -0
  874. data/modules/emscripten/third_party/websockify/include/web-socket-js/WebSocketMain.swf +0 -0
  875. data/modules/emscripten/third_party/websockify/include/web-socket-js/swfobject.js +4 -0
  876. data/modules/emscripten/third_party/websockify/include/web-socket-js/web_socket.js +391 -0
  877. data/modules/emscripten/third_party/websockify/include/websock.js +422 -0
  878. data/modules/emscripten/third_party/websockify/include/webutil.js +216 -0
  879. data/modules/emscripten/third_party/websockify/include/wsirc.js +235 -0
  880. data/modules/emscripten/third_party/websockify/include/wstelnet.js +335 -0
  881. data/modules/emscripten/third_party/websockify/other/Makefile +14 -0
  882. data/modules/emscripten/third_party/websockify/other/README.md +51 -0
  883. data/modules/emscripten/third_party/websockify/other/launch.sh +108 -0
  884. data/modules/emscripten/third_party/websockify/other/project.clj +13 -0
  885. data/modules/emscripten/third_party/websockify/other/websocket.c +802 -0
  886. data/modules/emscripten/third_party/websockify/other/websocket.h +84 -0
  887. data/modules/emscripten/third_party/websockify/other/websocket.rb +456 -0
  888. data/modules/emscripten/third_party/websockify/other/websockify.c +385 -0
  889. data/modules/emscripten/third_party/websockify/other/websockify.clj +233 -0
  890. data/modules/emscripten/third_party/websockify/other/websockify.js +196 -0
  891. data/modules/emscripten/third_party/websockify/other/websockify.rb +171 -0
  892. data/modules/emscripten/third_party/websockify/other/wswrap +22 -0
  893. data/modules/emscripten/third_party/websockify/rebind +18 -0
  894. data/modules/emscripten/third_party/websockify/rebind.c +94 -0
  895. data/modules/emscripten/third_party/websockify/run +5 -0
  896. data/modules/emscripten/third_party/websockify/setup.py +30 -0
  897. data/modules/emscripten/third_party/websockify/tests/b64_vs_utf8.py +29 -0
  898. data/modules/emscripten/third_party/websockify/tests/base64.html +91 -0
  899. data/modules/emscripten/third_party/websockify/tests/base64.js +12 -0
  900. data/modules/emscripten/third_party/websockify/tests/echo.html +148 -0
  901. data/modules/emscripten/third_party/websockify/tests/echo.py +75 -0
  902. data/modules/emscripten/third_party/websockify/tests/echo.rb +62 -0
  903. data/modules/emscripten/third_party/websockify/tests/latency.html +290 -0
  904. data/modules/emscripten/third_party/websockify/tests/latency.py +75 -0
  905. data/modules/emscripten/third_party/websockify/tests/load.html +250 -0
  906. data/modules/emscripten/third_party/websockify/tests/load.py +167 -0
  907. data/modules/emscripten/third_party/websockify/tests/plain_echo.html +168 -0
  908. data/modules/emscripten/third_party/websockify/tests/simple.html +68 -0
  909. data/modules/emscripten/third_party/websockify/tests/utf8-list.py +22 -0
  910. data/modules/emscripten/third_party/websockify/websockify/__init__.py +2 -0
  911. data/modules/emscripten/third_party/websockify/websockify/websocket.py +982 -0
  912. data/modules/emscripten/third_party/websockify/websockify/websocketproxy.py +393 -0
  913. data/modules/emscripten/third_party/websockify/websockify.py +5 -0
  914. data/modules/emscripten/third_party/websockify/wsirc.html +99 -0
  915. data/modules/emscripten/third_party/websockify/wstelnet.html +74 -0
  916. data/modules/emscripten/tools/__init__.py +0 -0
  917. data/modules/emscripten/tools/__init__.pyc +0 -0
  918. data/modules/emscripten/tools/autodebugger.py +289 -0
  919. data/modules/emscripten/tools/autodebugger_c.py +37 -0
  920. data/modules/emscripten/tools/autodebugger_indenter.py +18 -0
  921. data/modules/emscripten/tools/autodebugger_js.py +47 -0
  922. data/modules/emscripten/tools/autodediffer.py +60 -0
  923. data/modules/emscripten/tools/bindings_generator.py +832 -0
  924. data/modules/emscripten/tools/bisect_pair.py +88 -0
  925. data/modules/emscripten/tools/cache.py +198 -0
  926. data/modules/emscripten/tools/cache.pyc +0 -0
  927. data/modules/emscripten/tools/clean_webconsole.py +34 -0
  928. data/modules/emscripten/tools/crunch-worker.js +124 -0
  929. data/modules/emscripten/tools/diff_autodebugger.py +15 -0
  930. data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +5129 -0
  931. data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +6861 -0
  932. data/modules/emscripten/tools/eliminator/eliminator-test-output.js +6122 -0
  933. data/modules/emscripten/tools/eliminator/eliminator-test.js +8856 -0
  934. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/README.html +888 -0
  935. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/README.org +463 -0
  936. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/bin/uglifyjs +317 -0
  937. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/docstyle.css +75 -0
  938. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/lib/object-ast.js +75 -0
  939. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/lib/parse-js.js +1363 -0
  940. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/lib/process.js +2005 -0
  941. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/lib/squeeze-more.js +51 -0
  942. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/package.json +22 -0
  943. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/beautify.js +28 -0
  944. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/testparser.js +402 -0
  945. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/array1.js +1 -0
  946. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/array2.js +1 -0
  947. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/array3.js +1 -0
  948. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/array4.js +1 -0
  949. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/assignment.js +1 -0
  950. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/concatstring.js +1 -0
  951. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/const.js +1 -0
  952. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/empty-blocks.js +1 -0
  953. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/forstatement.js +1 -0
  954. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/if.js +1 -0
  955. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/ifreturn.js +1 -0
  956. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/ifreturn2.js +1 -0
  957. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue10.js +1 -0
  958. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue11.js +1 -0
  959. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue13.js +1 -0
  960. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue14.js +1 -0
  961. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue16.js +1 -0
  962. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue17.js +1 -0
  963. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue20.js +1 -0
  964. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue21.js +1 -0
  965. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue25.js +1 -0
  966. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue27.js +1 -0
  967. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue28.js +1 -0
  968. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue29.js +1 -0
  969. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue30.js +1 -0
  970. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue34.js +1 -0
  971. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue4.js +1 -0
  972. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue48.js +1 -0
  973. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue50.js +1 -0
  974. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue53.js +1 -0
  975. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue54.1.js +1 -0
  976. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue68.js +1 -0
  977. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue69.js +1 -0
  978. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue9.js +1 -0
  979. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/mangle.js +1 -0
  980. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/strict-equals.js +1 -0
  981. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/var.js +1 -0
  982. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/with.js +1 -0
  983. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/array1.js +3 -0
  984. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/array2.js +4 -0
  985. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/array3.js +4 -0
  986. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/array4.js +6 -0
  987. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/assignment.js +20 -0
  988. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/concatstring.js +3 -0
  989. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/const.js +5 -0
  990. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/empty-blocks.js +4 -0
  991. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/forstatement.js +10 -0
  992. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/if.js +6 -0
  993. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/ifreturn.js +9 -0
  994. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/ifreturn2.js +16 -0
  995. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue10.js +1 -0
  996. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue11.js +3 -0
  997. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue13.js +1 -0
  998. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue14.js +1 -0
  999. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue16.js +1 -0
  1000. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue17.js +4 -0
  1001. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue20.js +1 -0
  1002. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue21.js +6 -0
  1003. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue25.js +7 -0
  1004. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue27.js +1 -0
  1005. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue28.js +3 -0
  1006. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue29.js +1 -0
  1007. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue30.js +3 -0
  1008. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue34.js +3 -0
  1009. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue4.js +3 -0
  1010. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue48.js +1 -0
  1011. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue50.js +9 -0
  1012. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue53.js +1 -0
  1013. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue54.1.js +3 -0
  1014. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue68.js +5 -0
  1015. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue69.js +1 -0
  1016. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue9.js +4 -0
  1017. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/mangle.js +5 -0
  1018. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/strict-equals.js +3 -0
  1019. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/var.js +3 -0
  1020. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/with.js +2 -0
  1021. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/scripts.js +55 -0
  1022. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/tmp/hoist.js +33 -0
  1023. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/tmp/instrument.js +97 -0
  1024. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/tmp/instrument2.js +138 -0
  1025. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/tmp/test.js +16 -0
  1026. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/uglify-js.js +17 -0
  1027. data/modules/emscripten/tools/eliminator/safe-eliminator-test-output.js +85 -0
  1028. data/modules/emscripten/tools/eliminator/safe-eliminator-test.js +103 -0
  1029. data/modules/emscripten/tools/emconfiguren.py +19 -0
  1030. data/modules/emscripten/tools/emmaken.py +230 -0
  1031. data/modules/emscripten/tools/emmakenxx.py +18 -0
  1032. data/modules/emscripten/tools/exec_llvm.py +50 -0
  1033. data/modules/emscripten/tools/file2json.py +49 -0
  1034. data/modules/emscripten/tools/file_packager.py +649 -0
  1035. data/modules/emscripten/tools/find_bigfuncs.py +23 -0
  1036. data/modules/emscripten/tools/find_bigis.py +18 -0
  1037. data/modules/emscripten/tools/fix_closure.py +88 -0
  1038. data/modules/emscripten/tools/ie7_fix.py +14 -0
  1039. data/modules/emscripten/tools/js-optimizer.js +3440 -0
  1040. data/modules/emscripten/tools/js_optimizer.py +341 -0
  1041. data/modules/emscripten/tools/js_optimizer.pyc +0 -0
  1042. data/modules/emscripten/tools/jsrun.py +27 -0
  1043. data/modules/emscripten/tools/jsrun.pyc +0 -0
  1044. data/modules/emscripten/tools/ll-strip.py +56 -0
  1045. data/modules/emscripten/tools/make_file.py +19 -0
  1046. data/modules/emscripten/tools/make_minigzip.py +13 -0
  1047. data/modules/emscripten/tools/namespacer.py +95 -0
  1048. data/modules/emscripten/tools/nativize_llvm.py +34 -0
  1049. data/modules/emscripten/tools/node_modules/source-map/CHANGELOG.md +58 -0
  1050. data/modules/emscripten/tools/node_modules/source-map/LICENSE +28 -0
  1051. data/modules/emscripten/tools/node_modules/source-map/Makefile.dryice.js +166 -0
  1052. data/modules/emscripten/tools/node_modules/source-map/README.md +347 -0
  1053. data/modules/emscripten/tools/node_modules/source-map/build/assert-shim.js +56 -0
  1054. data/modules/emscripten/tools/node_modules/source-map/build/mini-require.js +152 -0
  1055. data/modules/emscripten/tools/node_modules/source-map/build/prefix-source-map.jsm +20 -0
  1056. data/modules/emscripten/tools/node_modules/source-map/build/prefix-utils.jsm +18 -0
  1057. data/modules/emscripten/tools/node_modules/source-map/build/suffix-browser.js +8 -0
  1058. data/modules/emscripten/tools/node_modules/source-map/build/suffix-source-map.jsm +6 -0
  1059. data/modules/emscripten/tools/node_modules/source-map/build/suffix-utils.jsm +21 -0
  1060. data/modules/emscripten/tools/node_modules/source-map/build/test-prefix.js +8 -0
  1061. data/modules/emscripten/tools/node_modules/source-map/build/test-suffix.js +3 -0
  1062. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/array-set.js +96 -0
  1063. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/base64-vlq.js +144 -0
  1064. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/base64.js +42 -0
  1065. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/binary-search.js +81 -0
  1066. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/source-map-consumer.js +430 -0
  1067. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/source-map-generator.js +381 -0
  1068. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/source-node.js +353 -0
  1069. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/util.js +117 -0
  1070. data/modules/emscripten/tools/node_modules/source-map/lib/source-map.js +8 -0
  1071. data/modules/emscripten/tools/node_modules/source-map/node_modules/amdefine/LICENSE +58 -0
  1072. data/modules/emscripten/tools/node_modules/source-map/node_modules/amdefine/README.md +119 -0
  1073. data/modules/emscripten/tools/node_modules/source-map/node_modules/amdefine/amdefine.js +299 -0
  1074. data/modules/emscripten/tools/node_modules/source-map/node_modules/amdefine/package.json +33 -0
  1075. data/modules/emscripten/tools/node_modules/source-map/package.json +74 -0
  1076. data/modules/emscripten/tools/node_modules/source-map/test/run-tests.js +73 -0
  1077. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-api.js +26 -0
  1078. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-array-set.js +71 -0
  1079. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-base64-vlq.js +24 -0
  1080. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-base64.js +35 -0
  1081. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-binary-search.js +54 -0
  1082. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-dog-fooding.js +72 -0
  1083. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-source-map-consumer.js +306 -0
  1084. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-source-map-generator.js +391 -0
  1085. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-source-node.js +282 -0
  1086. data/modules/emscripten/tools/node_modules/source-map/test/source-map/util.js +152 -0
  1087. data/modules/emscripten/tools/reproduceriter.js +216 -0
  1088. data/modules/emscripten/tools/reproduceriter.py +160 -0
  1089. data/modules/emscripten/tools/response_file.py +28 -0
  1090. data/modules/emscripten/tools/response_file.pyc +0 -0
  1091. data/modules/emscripten/tools/scan_js.py +20 -0
  1092. data/modules/emscripten/tools/scan_ll.py +18 -0
  1093. data/modules/emscripten/tools/scons/site_scons/site_tools/emscripten/__init__.py +3 -0
  1094. data/modules/emscripten/tools/scons/site_scons/site_tools/emscripten/emscripten.py +46 -0
  1095. data/modules/emscripten/tools/settings_template_readonly.py +47 -0
  1096. data/modules/emscripten/tools/shared.py +1437 -0
  1097. data/modules/emscripten/tools/shared.pyc +0 -0
  1098. data/modules/emscripten/tools/source-maps/sourcemap2json.js +15 -0
  1099. data/modules/emscripten/tools/source-maps/sourcemapper.js +177 -0
  1100. data/modules/emscripten/tools/split.py +97 -0
  1101. data/modules/emscripten/tools/tempfiles.py +40 -0
  1102. data/modules/emscripten/tools/tempfiles.pyc +0 -0
  1103. data/modules/emscripten/tools/test-js-optimizer-asm-last-output.js +75 -0
  1104. data/modules/emscripten/tools/test-js-optimizer-asm-last.js +91 -0
  1105. data/modules/emscripten/tools/test-js-optimizer-asm-outline-output.js +570 -0
  1106. data/modules/emscripten/tools/test-js-optimizer-asm-outline.js +606 -0
  1107. data/modules/emscripten/tools/test-js-optimizer-asm-pre-output.js +540 -0
  1108. data/modules/emscripten/tools/test-js-optimizer-asm-pre.js +550 -0
  1109. data/modules/emscripten/tools/test-js-optimizer-asm-regs-min-output.js +36 -0
  1110. data/modules/emscripten/tools/test-js-optimizer-asm-regs-min.js +37 -0
  1111. data/modules/emscripten/tools/test-js-optimizer-asm-regs-output.js +106 -0
  1112. data/modules/emscripten/tools/test-js-optimizer-asm-regs.js +110 -0
  1113. data/modules/emscripten/tools/test-js-optimizer-asm-relocate-output.js +9 -0
  1114. data/modules/emscripten/tools/test-js-optimizer-asm-relocate.js +12 -0
  1115. data/modules/emscripten/tools/test-js-optimizer-output.js +291 -0
  1116. data/modules/emscripten/tools/test-js-optimizer-regs-output.js +232 -0
  1117. data/modules/emscripten/tools/test-js-optimizer-regs.js +237 -0
  1118. data/modules/emscripten/tools/test-js-optimizer-t2-output.js +91 -0
  1119. data/modules/emscripten/tools/test-js-optimizer-t2.js +92 -0
  1120. data/modules/emscripten/tools/test-js-optimizer-t2c-output.js +17 -0
  1121. data/modules/emscripten/tools/test-js-optimizer-t2c.js +18 -0
  1122. data/modules/emscripten/tools/test-js-optimizer-t3-output.js +49 -0
  1123. data/modules/emscripten/tools/test-js-optimizer-t3.js +50 -0
  1124. data/modules/emscripten/tools/test-js-optimizer.js +401 -0
  1125. data/modules/mruby/AUTHORS +18 -0
  1126. data/modules/mruby/CONTRIBUTING.md +65 -0
  1127. data/modules/mruby/ChangeLog +15 -0
  1128. data/modules/mruby/INSTALL +29 -0
  1129. data/modules/mruby/LEGAL +6 -0
  1130. data/modules/mruby/MITL +20 -0
  1131. data/modules/mruby/Makefile +18 -0
  1132. data/modules/mruby/NEWS +13 -0
  1133. data/modules/mruby/README.md +116 -0
  1134. data/modules/mruby/Rakefile +114 -0
  1135. data/modules/mruby/TODO +11 -0
  1136. data/modules/mruby/benchmark/ao-render.rb +315 -0
  1137. data/modules/mruby/benchmark/bm_so_lists.rb +47 -0
  1138. data/modules/mruby/benchmark/fib39.rb +8 -0
  1139. data/modules/mruby/build_config.rb +88 -0
  1140. data/modules/mruby/doc/compile/README.md +376 -0
  1141. data/modules/mruby/doc/mrbgems/README.md +254 -0
  1142. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/README.md +4 -0
  1143. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake +23 -0
  1144. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +5 -0
  1145. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +20 -0
  1146. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/test/example.rb +7 -0
  1147. data/modules/mruby/examples/mrbgems/c_extension_example/README.md +4 -0
  1148. data/modules/mruby/examples/mrbgems/c_extension_example/mrbgem.rake +23 -0
  1149. data/modules/mruby/examples/mrbgems/c_extension_example/src/example.c +20 -0
  1150. data/modules/mruby/examples/mrbgems/c_extension_example/test/example.c +7 -0
  1151. data/modules/mruby/examples/mrbgems/c_extension_example/test/example.rb +3 -0
  1152. data/modules/mruby/examples/mrbgems/ruby_extension_example/README.md +4 -0
  1153. data/modules/mruby/examples/mrbgems/ruby_extension_example/mrbgem.rake +23 -0
  1154. data/modules/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +5 -0
  1155. data/modules/mruby/examples/mrbgems/ruby_extension_example/test/example.rb +3 -0
  1156. data/modules/mruby/examples/targets/ArduinoDue.rb +65 -0
  1157. data/modules/mruby/examples/targets/chipKitMax32.rb +68 -0
  1158. data/modules/mruby/include/mrbconf.h +87 -0
  1159. data/modules/mruby/include/mruby/array.h +63 -0
  1160. data/modules/mruby/include/mruby/class.h +75 -0
  1161. data/modules/mruby/include/mruby/compile.h +176 -0
  1162. data/modules/mruby/include/mruby/data.h +53 -0
  1163. data/modules/mruby/include/mruby/dump.h +151 -0
  1164. data/modules/mruby/include/mruby/gc.h +17 -0
  1165. data/modules/mruby/include/mruby/hash.h +54 -0
  1166. data/modules/mruby/include/mruby/irep.h +40 -0
  1167. data/modules/mruby/include/mruby/khash.h +257 -0
  1168. data/modules/mruby/include/mruby/numeric.h +32 -0
  1169. data/modules/mruby/include/mruby/proc.h +62 -0
  1170. data/modules/mruby/include/mruby/range.h +35 -0
  1171. data/modules/mruby/include/mruby/string.h +78 -0
  1172. data/modules/mruby/include/mruby/value.h +483 -0
  1173. data/modules/mruby/include/mruby/variable.h +78 -0
  1174. data/modules/mruby/include/mruby.h +388 -0
  1175. data/modules/mruby/minirake +477 -0
  1176. data/modules/mruby/mrbgems/default.gembox +61 -0
  1177. data/modules/mruby/mrbgems/full-core.gembox +9 -0
  1178. data/modules/mruby/mrbgems/mruby-array-ext/mrbgem.rake +4 -0
  1179. data/modules/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +204 -0
  1180. data/modules/mruby/mrbgems/mruby-array-ext/src/array.c +140 -0
  1181. data/modules/mruby/mrbgems/mruby-array-ext/test/array.rb +109 -0
  1182. data/modules/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +5 -0
  1183. data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +365 -0
  1184. data/modules/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +5 -0
  1185. data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +243 -0
  1186. data/modules/mruby/mrbgems/mruby-enum-ext/mrbgem.rake +4 -0
  1187. data/modules/mruby/mrbgems/mruby-enum-ext/mrblib/enum.rb +164 -0
  1188. data/modules/mruby/mrbgems/mruby-enum-ext/test/enum.rb +44 -0
  1189. data/modules/mruby/mrbgems/mruby-eval/mrbgem.rake +4 -0
  1190. data/modules/mruby/mrbgems/mruby-eval/src/eval.c +23 -0
  1191. data/modules/mruby/mrbgems/mruby-fiber/mrbgem.rake +4 -0
  1192. data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +251 -0
  1193. data/modules/mruby/mrbgems/mruby-fiber/test/fiber.rb +64 -0
  1194. data/modules/mruby/mrbgems/mruby-hash-ext/mrbgem.rake +4 -0
  1195. data/modules/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb +13 -0
  1196. data/modules/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +62 -0
  1197. data/modules/mruby/mrbgems/mruby-hash-ext/test/hash.rb +26 -0
  1198. data/modules/mruby/mrbgems/mruby-math/mrbgem.rake +4 -0
  1199. data/modules/mruby/mrbgems/mruby-math/src/math.c +685 -0
  1200. data/modules/mruby/mrbgems/mruby-math/test/math.rb +136 -0
  1201. data/modules/mruby/mrbgems/mruby-numeric-ext/mrbgem.rake +4 -0
  1202. data/modules/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +31 -0
  1203. data/modules/mruby/mrbgems/mruby-numeric-ext/test/numeric.rb +10 -0
  1204. data/modules/mruby/mrbgems/mruby-object-ext/mrbgem.rake +4 -0
  1205. data/modules/mruby/mrbgems/mruby-object-ext/src/object.c +108 -0
  1206. data/modules/mruby/mrbgems/mruby-object-ext/test/nil.rb +11 -0
  1207. data/modules/mruby/mrbgems/mruby-object-ext/test/object.rb +9 -0
  1208. data/modules/mruby/mrbgems/mruby-objectspace/mrbgem.rake +4 -0
  1209. data/modules/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +117 -0
  1210. data/modules/mruby/mrbgems/mruby-objectspace/test/objectspace.rb +38 -0
  1211. data/modules/mruby/mrbgems/mruby-print/mrbgem.rake +4 -0
  1212. data/modules/mruby/mrbgems/mruby-print/mrblib/print.rb +64 -0
  1213. data/modules/mruby/mrbgems/mruby-print/src/print.c +44 -0
  1214. data/modules/mruby/mrbgems/mruby-proc-ext/mrbgem.rake +4 -0
  1215. data/modules/mruby/mrbgems/mruby-proc-ext/mrblib/proc.rb +40 -0
  1216. data/modules/mruby/mrbgems/mruby-proc-ext/src/proc.c +97 -0
  1217. data/modules/mruby/mrbgems/mruby-proc-ext/test/proc.rb +41 -0
  1218. data/modules/mruby/mrbgems/mruby-random/mrbgem.rake +4 -0
  1219. data/modules/mruby/mrbgems/mruby-random/src/mt19937ar.c +193 -0
  1220. data/modules/mruby/mrbgems/mruby-random/src/mt19937ar.h +48 -0
  1221. data/modules/mruby/mrbgems/mruby-random/src/random.c +231 -0
  1222. data/modules/mruby/mrbgems/mruby-random/src/random.h +12 -0
  1223. data/modules/mruby/mrbgems/mruby-random/test/random.rb +32 -0
  1224. data/modules/mruby/mrbgems/mruby-range-ext/mrbgem.rake +4 -0
  1225. data/modules/mruby/mrbgems/mruby-range-ext/src/range.c +141 -0
  1226. data/modules/mruby/mrbgems/mruby-range-ext/test/range.rb +20 -0
  1227. data/modules/mruby/mrbgems/mruby-sprintf/mrbgem.rake +4 -0
  1228. data/modules/mruby/mrbgems/mruby-sprintf/src/kernel.c +30 -0
  1229. data/modules/mruby/mrbgems/mruby-sprintf/src/sprintf.c +1102 -0
  1230. data/modules/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +3 -0
  1231. data/modules/mruby/mrbgems/mruby-string-ext/mrbgem.rake +4 -0
  1232. data/modules/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +52 -0
  1233. data/modules/mruby/mrbgems/mruby-string-ext/src/string.c +175 -0
  1234. data/modules/mruby/mrbgems/mruby-string-ext/test/string.rb +112 -0
  1235. data/modules/mruby/mrbgems/mruby-struct/mrbgem.rake +4 -0
  1236. data/modules/mruby/mrbgems/mruby-struct/mrblib/struct.rb +50 -0
  1237. data/modules/mruby/mrbgems/mruby-struct/src/struct.c +818 -0
  1238. data/modules/mruby/mrbgems/mruby-struct/test/struct.rb +77 -0
  1239. data/modules/mruby/mrbgems/mruby-symbol-ext/mrbgem.rake +4 -0
  1240. data/modules/mruby/mrbgems/mruby-symbol-ext/mrblib/symbol.rb +9 -0
  1241. data/modules/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +55 -0
  1242. data/modules/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +12 -0
  1243. data/modules/mruby/mrbgems/mruby-time/mrbgem.rake +4 -0
  1244. data/modules/mruby/mrbgems/mruby-time/src/time.c +749 -0
  1245. data/modules/mruby/mrbgems/mruby-time/test/time.rb +201 -0
  1246. data/modules/mruby/mrbgems/mruby-toplevel-ext/mrbgem.rake +4 -0
  1247. data/modules/mruby/mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb +11 -0
  1248. data/modules/mruby/mrbgems/mruby-toplevel-ext/test/toplevel.rb +24 -0
  1249. data/modules/mruby/mrblib/array.rb +111 -0
  1250. data/modules/mruby/mrblib/class.rb +26 -0
  1251. data/modules/mruby/mrblib/compar.rb +104 -0
  1252. data/modules/mruby/mrblib/enum.rb +398 -0
  1253. data/modules/mruby/mrblib/error.rb +66 -0
  1254. data/modules/mruby/mrblib/hash.rb +193 -0
  1255. data/modules/mruby/mrblib/init_mrblib.c +14 -0
  1256. data/modules/mruby/mrblib/kernel.rb +46 -0
  1257. data/modules/mruby/mrblib/mrblib.rake +18 -0
  1258. data/modules/mruby/mrblib/numeric.rb +101 -0
  1259. data/modules/mruby/mrblib/print.rb +18 -0
  1260. data/modules/mruby/mrblib/range.rb +40 -0
  1261. data/modules/mruby/mrblib/string.rb +145 -0
  1262. data/modules/mruby/src/array.c +1150 -0
  1263. data/modules/mruby/src/backtrace.c +73 -0
  1264. data/modules/mruby/src/class.c +1942 -0
  1265. data/modules/mruby/src/codegen.c +2864 -0
  1266. data/modules/mruby/src/compar.c +13 -0
  1267. data/modules/mruby/src/crc.c +38 -0
  1268. data/modules/mruby/src/dump.c +542 -0
  1269. data/modules/mruby/src/enum.c +14 -0
  1270. data/modules/mruby/src/error.c +454 -0
  1271. data/modules/mruby/src/error.h +18 -0
  1272. data/modules/mruby/src/etc.c +204 -0
  1273. data/modules/mruby/src/gc.c +1542 -0
  1274. data/modules/mruby/src/hash.c +1261 -0
  1275. data/modules/mruby/src/init.c +62 -0
  1276. data/modules/mruby/src/kernel.c +1105 -0
  1277. data/modules/mruby/src/keywords +50 -0
  1278. data/modules/mruby/src/lex.def +212 -0
  1279. data/modules/mruby/src/load.c +629 -0
  1280. data/modules/mruby/src/mruby_core.rake +28 -0
  1281. data/modules/mruby/src/node.h +117 -0
  1282. data/modules/mruby/src/numeric.c +1418 -0
  1283. data/modules/mruby/src/object.c +593 -0
  1284. data/modules/mruby/src/opcode.h +160 -0
  1285. data/modules/mruby/src/parse.y +6050 -0
  1286. data/modules/mruby/src/pool.c +190 -0
  1287. data/modules/mruby/src/print.c +71 -0
  1288. data/modules/mruby/src/proc.c +209 -0
  1289. data/modules/mruby/src/range.c +442 -0
  1290. data/modules/mruby/src/re.h +13 -0
  1291. data/modules/mruby/src/state.c +200 -0
  1292. data/modules/mruby/src/string.c +2580 -0
  1293. data/modules/mruby/src/symbol.c +456 -0
  1294. data/modules/mruby/src/value_array.h +27 -0
  1295. data/modules/mruby/src/variable.c +1147 -0
  1296. data/modules/mruby/src/vm.c +2129 -0
  1297. data/modules/mruby/tasks/libmruby.rake +18 -0
  1298. data/modules/mruby/tasks/mrbgem_spec.rake +297 -0
  1299. data/modules/mruby/tasks/mrbgems.rake +85 -0
  1300. data/modules/mruby/tasks/mrbgems_test.rake +88 -0
  1301. data/modules/mruby/tasks/mruby_build.rake +211 -0
  1302. data/modules/mruby/tasks/mruby_build_commands.rake +287 -0
  1303. data/modules/mruby/tasks/mruby_build_gem.rake +67 -0
  1304. data/modules/mruby/tasks/ruby_ext.rake +70 -0
  1305. data/modules/mruby/tasks/toolchains/androideabi.rake +126 -0
  1306. data/modules/mruby/tasks/toolchains/clang.rake +8 -0
  1307. data/modules/mruby/tasks/toolchains/gcc.rake +21 -0
  1308. data/modules/mruby/tasks/toolchains/vs2010.rake +3 -0
  1309. data/modules/mruby/tasks/toolchains/vs2012.rake +44 -0
  1310. data/modules/mruby/test/README.md +7 -0
  1311. data/modules/mruby/test/assert.rb +238 -0
  1312. data/modules/mruby/test/driver.c +118 -0
  1313. data/modules/mruby/test/init_mrbtest.c +24 -0
  1314. data/modules/mruby/test/mrbtest.rake +47 -0
  1315. data/modules/mruby/test/report.rb +4 -0
  1316. data/modules/mruby/test/t/argumenterror.rb +21 -0
  1317. data/modules/mruby/test/t/array.rb +309 -0
  1318. data/modules/mruby/test/t/basicobject.rb +11 -0
  1319. data/modules/mruby/test/t/bs_block.rb +489 -0
  1320. data/modules/mruby/test/t/bs_literal.rb +38 -0
  1321. data/modules/mruby/test/t/class.rb +219 -0
  1322. data/modules/mruby/test/t/comparable.rb +72 -0
  1323. data/modules/mruby/test/t/enumerable.rb +108 -0
  1324. data/modules/mruby/test/t/exception.rb +337 -0
  1325. data/modules/mruby/test/t/false.rb +33 -0
  1326. data/modules/mruby/test/t/float.rb +145 -0
  1327. data/modules/mruby/test/t/gc.rb +45 -0
  1328. data/modules/mruby/test/t/hash.rb +310 -0
  1329. data/modules/mruby/test/t/indexerror.rb +10 -0
  1330. data/modules/mruby/test/t/integer.rb +222 -0
  1331. data/modules/mruby/test/t/kernel.rb +425 -0
  1332. data/modules/mruby/test/t/literals.rb +287 -0
  1333. data/modules/mruby/test/t/localjumperror.rb +13 -0
  1334. data/modules/mruby/test/t/methods.rb +109 -0
  1335. data/modules/mruby/test/t/module.rb +344 -0
  1336. data/modules/mruby/test/t/nameerror.rb +32 -0
  1337. data/modules/mruby/test/t/nil.rb +29 -0
  1338. data/modules/mruby/test/t/nomethoderror.rb +13 -0
  1339. data/modules/mruby/test/t/numeric.rb +29 -0
  1340. data/modules/mruby/test/t/object.rb +11 -0
  1341. data/modules/mruby/test/t/proc.rb +56 -0
  1342. data/modules/mruby/test/t/range.rb +82 -0
  1343. data/modules/mruby/test/t/rangeerror.rb +10 -0
  1344. data/modules/mruby/test/t/regexperror.rb +4 -0
  1345. data/modules/mruby/test/t/runtimeerror.rb +6 -0
  1346. data/modules/mruby/test/t/standarderror.rb +10 -0
  1347. data/modules/mruby/test/t/string.rb +483 -0
  1348. data/modules/mruby/test/t/symbol.rb +27 -0
  1349. data/modules/mruby/test/t/syntax.rb +67 -0
  1350. data/modules/mruby/test/t/true.rb +33 -0
  1351. data/modules/mruby/test/t/typeerror.rb +11 -0
  1352. data/modules/mruby/tools/mrbc/mrbc.c +318 -0
  1353. data/modules/mruby/tools/mrbc/mrbc.rake +14 -0
  1354. data/modules/mruby/travis_config.rb +6 -0
  1355. data/modules/mrubymix/LICENSE +21 -0
  1356. data/modules/mrubymix/README.md +6 -0
  1357. data/modules/mrubymix/bin/mrubymix +29 -0
  1358. data/modules/mrubymix/lib/mrubymix.rb +93 -0
  1359. data/modules/mrubymix/mrubymix.gemspec +13 -0
  1360. data/scripts/gen_gems_config.rb +185 -0
  1361. data/scripts/gen_post.rb +104 -0
  1362. data/templates/minimal/Rakefile +36 -0
  1363. data/templates/minimal/app/app.rb +3 -0
  1364. metadata +1408 -0
@@ -0,0 +1,1827 @@
1
+ //"use strict";
2
+
3
+ // Convert analyzed data to javascript. Everything has already been calculated
4
+ // before this stage, which just does the final conversion to JavaScript.
5
+
6
+ // Handy sets
7
+
8
+ var STRUCT_LIST = set('struct', 'list');
9
+ var UNDERSCORE_OPENPARENS = set('_', '(');
10
+ var RELOOP_IGNORED_LASTS = set('return', 'unreachable', 'resume');
11
+
12
+ var addedLibraryItems = {};
13
+ var asmLibraryFunctions = [];
14
+
15
+ var SETJMP_LABEL = -1;
16
+
17
+ var INDENTATION = ' ';
18
+
19
+ // JSifier
20
+ function JSify(data, functionsOnly, givenFunctions) {
21
+ var mainPass = !functionsOnly;
22
+
23
+ if (mainPass) {
24
+ var shellFile = SHELL_FILE ? SHELL_FILE : (BUILD_AS_SHARED_LIB ? 'shell_sharedlib.js' : 'shell.js');
25
+
26
+ if (phase == 'pre') {
27
+ // We will start to print out the data, but must do so carefully - we are
28
+ // dealing with potentially *huge* strings. Convenient replacements and
29
+ // manipulations may create in-memory copies, and we may OOM.
30
+ //
31
+ // Final shape that will be created:
32
+ // shell
33
+ // (body)
34
+ // preamble
35
+ // runtime
36
+ // generated code
37
+ // postamble
38
+ // global_vars
39
+ //
40
+ // First, we print out everything until the generated code. Then the
41
+ // functions will print themselves out as they are parsed. Finally, we
42
+ // will call finalCombiner in the main pass, to print out everything
43
+ // else. This lets us not hold any strings in memory, we simply print
44
+ // things out as they are ready.
45
+
46
+ var shellParts = read(shellFile).split('{{BODY}}');
47
+ print(processMacros(preprocess(shellParts[0])));
48
+ var preFile = BUILD_AS_SHARED_LIB ? 'preamble_sharedlib.js' : 'preamble.js';
49
+ var pre = processMacros(preprocess(read(preFile).replace('{{RUNTIME}}', getRuntime())));
50
+ print(pre);
51
+
52
+ data.unparsedFunctions.forEach(function(func) {
53
+ Functions.implementedFunctions[func.ident] = Functions.getSignature(func.returnType, func.params.map(function(param) { return param.type }));
54
+ });
55
+ }
56
+ }
57
+
58
+ // Does simple 'macro' substitution, using Django-like syntax,
59
+ // {{{ code }}} will be replaced with |eval(code)|.
60
+ function processMacros(text) {
61
+ return text.replace(/{{{[^}]+}}}/g, function(str) {
62
+ str = str.substr(3, str.length-6);
63
+ return eval(str).toString();
64
+ });
65
+ }
66
+
67
+ var substrate = new Substrate('JSifyer');
68
+
69
+ if (mainPass) {
70
+ // Handle unparsed types TODO: Batch them
71
+ analyzer(intertyper(data.unparsedTypess[0].lines, true), true);
72
+ data.unparsedTypess = null;
73
+
74
+ // Add additional necessary items for the main pass. We can now do this since types are parsed (types can be used through
75
+ // generateStructInfo in library.js)
76
+ LibraryManager.load();
77
+
78
+ if (phase == 'pre') {
79
+ var libFuncsToInclude;
80
+ if (INCLUDE_FULL_LIBRARY) {
81
+ assert(!BUILD_AS_SHARED_LIB, 'Cannot have both INCLUDE_FULL_LIBRARY and BUILD_AS_SHARED_LIB set.')
82
+ libFuncsToInclude = [];
83
+ for (var key in LibraryManager.library) {
84
+ if (!key.match(/__(deps|postset|inline|asm|sig)$/)) {
85
+ libFuncsToInclude.push(key);
86
+ }
87
+ }
88
+ } else {
89
+ libFuncsToInclude = DEFAULT_LIBRARY_FUNCS_TO_INCLUDE;
90
+ }
91
+ libFuncsToInclude.forEach(function(ident) {
92
+ data.functionStubs.push({
93
+ intertype: 'functionStub',
94
+ ident: '_' + ident
95
+ });
96
+ });
97
+ }
98
+ }
99
+
100
+ // Functions
101
+
102
+ Functions.currExternalFunctions = !mainPass ? givenFunctions.currExternalFunctions : {};
103
+
104
+ data.functionStubs.forEach(function(func) {
105
+ // Don't overwrite stubs that have more info.
106
+ if (!Functions.currExternalFunctions.hasOwnProperty(func.ident) ||
107
+ !Functions.currExternalFunctions[func.ident].numParams === undefined) {
108
+ Functions.currExternalFunctions[func.ident] = {
109
+ hasVarArgs: func.hasVarArgs,
110
+ numParams: func.params && func.params.length
111
+ };
112
+ }
113
+ });
114
+
115
+ if (phase == 'funcs') { // || phase == 'pre') { // pre has function shells, just to defined implementedFunctions
116
+ var MAX_BATCH_FUNC_LINES = 1000;
117
+ while (data.unparsedFunctions.length > 0) {
118
+ var currFuncLines = [];
119
+ var currBaseLineNums = [];
120
+ while (currFuncLines.length == 0 ||
121
+ (data.unparsedFunctions.length > 0 && currFuncLines.length + data.unparsedFunctions[0].lines.length <= MAX_BATCH_FUNC_LINES)) {
122
+ currBaseLineNums.push([currFuncLines.length, data.unparsedFunctions[0].lineNum-1]);
123
+ currFuncLines = currFuncLines.concat(data.unparsedFunctions[0].lines); // for first one, assign, do not concat?
124
+ data.unparsedFunctions.shift();
125
+ }
126
+ dprint('unparsedFunctions','====================\n// Processing function batch of ' + currBaseLineNums.length +
127
+ ' functions, ' + currFuncLines.length + ' lines, functions left: ' + data.unparsedFunctions.length);
128
+ if (DEBUG_MEMORY) MemoryDebugger.tick('pre-func');
129
+ JSify(analyzer(intertyper(currFuncLines, true, currBaseLineNums), true), true, Functions);
130
+ if (DEBUG_MEMORY) MemoryDebugger.tick('post-func');
131
+ }
132
+ currFuncLines = currBaseLineNums = null; // Do not hold on to anything from inside that loop (JS function scoping..)
133
+ data.unparsedFunctions = null;
134
+ }
135
+
136
+ // Actors
137
+
138
+ // type
139
+ // FIXME: This is no longer used, we do not actually need to JSify on types. TODO: Remove this and related code
140
+ substrate.addActor('Type', {
141
+ processItem: function(item) {
142
+ var type = Types.types[item.name_];
143
+ var niceName = toNiceIdent(item.name_);
144
+ // We might export all of Types.types, cleaner that way, but do not want slowdowns in accessing flatteners
145
+ item.JS = 'var ' + niceName + '___SIZE = ' + Types.types[item.name_].flatSize + '; // ' + item.name_ + '\n';
146
+ if (type.needsFlattening && !type.flatFactor) {
147
+ item.JS += 'var ' + niceName + '___FLATTENER = ' + JSON.stringify(Types.types[item.name_].flatIndexes) + ';';
148
+ }
149
+ return [item];
150
+ }
151
+ });
152
+
153
+ function makeEmptyStruct(type) {
154
+ var ret = [];
155
+ var typeData = Types.types[type];
156
+ assertTrue(typeData);
157
+ for (var i = 0; i < typeData.flatSize; i++) {
158
+ ret.push(0);
159
+ }
160
+ return ret;
161
+ }
162
+
163
+ function alignStruct(values, type) {
164
+ var typeData = Types.types[type];
165
+ assertTrue(typeData);
166
+ var ret = new Array(typeData.flatSize);
167
+ var index = 0;
168
+ var i = 0;
169
+ while (i < values.length) {
170
+ // Pad until the right place
171
+ var padded = typeData.flatFactor ? typeData.flatFactor*i : typeData.flatIndexes[i];
172
+ while (index < padded) {
173
+ ret[index++] = 0;
174
+ }
175
+ // Add current value(s)
176
+ var currValue = values[i];
177
+ if (USE_TYPED_ARRAYS == 2 && typeData.fields[i] == 'i64') {
178
+ // 'flatten' out the 64-bit value into two 32-bit halves
179
+ var parts = parseI64Constant(currValue, true);
180
+ ret[index++] = parts[0];
181
+ ret[index++] = 0;
182
+ ret[index++] = 0;
183
+ ret[index++] = 0;
184
+ ret[index++] = parts[1];
185
+ ret[index++] = 0;
186
+ ret[index++] = 0;
187
+ ret[index++] = 0;
188
+ } else {
189
+ currValue = flatten(currValue);
190
+ if (typeof currValue == 'object') {
191
+ for (var j = 0; j < currValue.length; j++) {
192
+ ret[index++] = currValue[j];
193
+ }
194
+ } else {
195
+ ret[index++] = currValue;
196
+ }
197
+ }
198
+ i += 1;
199
+ }
200
+ while (index < typeData.flatSize) {
201
+ ret[index++] = 0;
202
+ }
203
+ return ret;
204
+ }
205
+
206
+ // Gets an entire constant expression
207
+ function makeConst(value, type, ident) {
208
+ // Gets an array of constant items, separated by ',' tokens
209
+ function handleSegments(tokens) {
210
+ // Handle a single segment (after comma separation)
211
+ function handleSegment(segment) {
212
+ var ret;
213
+ if (segment.intertype === 'value') {
214
+ ret = segment.ident;
215
+ } else if (segment.intertype === 'emptystruct') {
216
+ ret = makeEmptyStruct(segment.type);
217
+ } else if (segment.intertype in PARSABLE_LLVM_FUNCTIONS) {
218
+ ret = finalizeLLVMFunctionCall(segment);
219
+ } else if (segment.intertype in STRUCT_LIST) {
220
+ ret = alignStruct(handleSegments(segment.contents), segment.type);
221
+ } else if (segment.intertype === 'string') {
222
+ ret = parseLLVMString(segment.text); // + ' /* ' + text + '*/';
223
+ } else if (segment.intertype === 'blockaddress') {
224
+ ret = finalizeBlockAddress(segment);
225
+ } else {
226
+ throw 'Invalid segment: ' + dump(segment);
227
+ }
228
+ assert(segment.type, 'Missing type for constant segment!');
229
+ return makeGlobalUse(indexizeFunctions(ret, segment.type));
230
+ };
231
+ return tokens.map(handleSegment)
232
+ }
233
+
234
+ //dprint('jsifier const: ' + JSON.stringify(value) + ',' + type + '\n');
235
+ if (value.intertype in PARSABLE_LLVM_FUNCTIONS) {
236
+ return [finalizeLLVMFunctionCall(value)];
237
+ } else if (Runtime.isNumberType(type) || pointingLevels(type) >= 1) {
238
+ return [makeGlobalUse(indexizeFunctions(parseNumerical(value.value), type))];
239
+ } else if (value.intertype === 'emptystruct') {
240
+ return makeEmptyStruct(type);
241
+ } else if (value.intertype === 'string') {
242
+ return parseLLVMString(value.text);
243
+ } else {
244
+ return alignStruct(handleSegments(value.contents), type);
245
+ }
246
+ }
247
+
248
+ function parseConst(value, type, ident) {
249
+ var constant = makeConst(value, type);
250
+ constant = flatten(constant).map(function(x) { return parseNumerical(x) })
251
+ return constant;
252
+ }
253
+
254
+ // globalVariable
255
+ substrate.addActor('GlobalVariable', {
256
+ processItem: function(item) {
257
+ function needsPostSet(value) {
258
+ if (typeof value !== 'string') return false;
259
+ return value[0] in UNDERSCORE_OPENPARENS || value.substr(0, 14) === 'CHECK_OVERFLOW'
260
+ || value.substr(0, 6) === 'GLOBAL';
261
+ }
262
+
263
+ item.intertype = 'GlobalVariableStub';
264
+ assert(!item.lines); // FIXME remove this, after we are sure it isn't needed
265
+ var ret = [item];
266
+ if (item.ident == '_llvm_global_ctors') {
267
+ item.JS = '\n/* global initializers */ __ATINIT__.push(' +
268
+ item.ctors.map(function(ctor) { return '{ func: function() { ' + ctor + '() } }' }).join(',') +
269
+ ');\n';
270
+ return ret;
271
+ }
272
+
273
+ var constant = null;
274
+ var allocator = (BUILD_AS_SHARED_LIB && !item.external) ? 'ALLOC_NORMAL' : 'ALLOC_STATIC';
275
+ var index = null;
276
+ if (item.external && BUILD_AS_SHARED_LIB) {
277
+ // External variables in shared libraries should not be declared as
278
+ // they would shadow similarly-named globals in the parent.
279
+ item.JS = '';
280
+ } else {
281
+ item.JS = makeGlobalDef(item.ident);
282
+ }
283
+
284
+ if (!NAMED_GLOBALS && isIndexableGlobal(item.ident)) {
285
+ index = makeGlobalUse(item.ident); // index !== null indicates we are indexing this
286
+ allocator = 'ALLOC_NONE';
287
+ }
288
+
289
+ if (ASM_JS && (MAIN_MODULE || SIDE_MODULE) && !item.private_ && !NAMED_GLOBALS && isIndexableGlobal(item.ident)) {
290
+ // We need this to be named (and it normally would not be), so that it can be linked to and used from other modules
291
+ Variables.globals[item.ident].linkable = 1;
292
+ }
293
+
294
+ if (isBSS(item)) {
295
+ var length = calcAllocatedSize(item.type);
296
+ length = Runtime.alignMemory(length);
297
+
298
+ // If using indexed globals, go ahead and early out (no need to explicitly
299
+ // initialize).
300
+ if (!NAMED_GLOBALS) {
301
+ return ret;
302
+ }
303
+ // If using named globals, we can at least shorten the call to allocate by
304
+ // passing an integer representing the size of memory to alloc instead of
305
+ // an array of 0s of size length.
306
+ else {
307
+ constant = length;
308
+ }
309
+ } else {
310
+ if (item.external) {
311
+ if (Runtime.isNumberType(item.type) || isPointerType(item.type)) {
312
+ constant = zeros(Runtime.getNativeFieldSize(item.type));
313
+ } else {
314
+ constant = makeEmptyStruct(item.type);
315
+ }
316
+ } else {
317
+ constant = parseConst(item.value, item.type, item.ident);
318
+ }
319
+ assert(typeof constant === 'object');//, [typeof constant, JSON.stringify(constant), item.external]);
320
+
321
+ // This is a flattened object. We need to find its idents, so they can be assigned to later
322
+ constant.forEach(function(value, i) {
323
+ if (needsPostSet(value)) { // ident, or expression containing an ident
324
+ ret.push({
325
+ intertype: 'GlobalVariablePostSet',
326
+ JS: makeSetValue(makeGlobalUse(item.ident), i, value, 'i32', false, true) + ';' // ignore=true, since e.g. rtti and statics cause lots of safe_heap errors
327
+ });
328
+ constant[i] = '0';
329
+ }
330
+ });
331
+
332
+ if (item.external) {
333
+ // External variables in shared libraries should not be declared as
334
+ // they would shadow similarly-named globals in the parent, so do nothing here.
335
+ if (BUILD_AS_SHARED_LIB) return ret;
336
+ // Library items need us to emit something, but everything else requires nothing.
337
+ if (!LibraryManager.library[item.ident.slice(1)]) return ret;
338
+ }
339
+
340
+ // ensure alignment
341
+ constant = constant.concat(zeros(Runtime.alignMemory(constant.length) - constant.length));
342
+
343
+ // Special case: class vtables. We make sure they are null-terminated, to allow easy runtime operations
344
+ if (item.ident.substr(0, 5) == '__ZTV') {
345
+ constant = constant.concat(zeros(Runtime.alignMemory(QUANTUM_SIZE)));
346
+ }
347
+ }
348
+
349
+ // NOTE: This is the only place that could potentially create static
350
+ // allocations in a shared library.
351
+ constant = makePointer(constant, null, allocator, item.type, index);
352
+
353
+ var js = (index !== null ? '' : item.ident + '=') + constant;
354
+ if (js) js += ';';
355
+
356
+ if (!ASM_JS && NAMED_GLOBALS && (EXPORT_ALL || (item.ident in EXPORTED_GLOBALS))) {
357
+ js += '\nModule["' + item.ident + '"] = ' + item.ident + ';';
358
+ }
359
+ if (BUILD_AS_SHARED_LIB == 2 && !item.private_) {
360
+ // TODO: make the assert conditional on ASSERTIONS
361
+ js += 'if (globalScope) { assert(!globalScope["' + item.ident + '"]); globalScope["' + item.ident + '"] = ' + item.ident + ' }';
362
+ }
363
+ if (item.external && !NAMED_GLOBALS) {
364
+ js = 'var ' + item.ident + ' = ' + js; // force an explicit naming, even if unnamed globals, for asm forwarding
365
+ }
366
+ return ret.concat({
367
+ intertype: 'GlobalVariable',
368
+ JS: js,
369
+ });
370
+ }
371
+ });
372
+
373
+ // alias
374
+ substrate.addActor('Alias', {
375
+ processItem: function(item) {
376
+ item.intertype = 'GlobalVariableStub';
377
+ var ret = [item];
378
+ item.JS = 'var ' + item.ident + ';';
379
+ // Set the actual value in a postset, since it may be a global variable. We also order by dependencies there
380
+ Variables.globals[item.ident].targetIdent = item.value.ident;
381
+ var value = Variables.globals[item.ident].resolvedAlias = finalizeLLVMParameter(item.value);
382
+ if ((MAIN_MODULE || SIDE_MODULE) && isFunctionType(item.type)) {
383
+ var target = item.value.ident;
384
+ if (!Functions.aliases[target]) Functions.aliases[target] = [];
385
+ Functions.aliases[target].push(item.ident);
386
+ }
387
+ return ret;
388
+ }
389
+ });
390
+
391
+ function processLibraryFunction(snippet, ident) {
392
+ snippet = snippet.toString();
393
+ assert(snippet.indexOf('XXX missing C define') == -1,
394
+ 'Trying to include a library function with missing C defines: ' + ident + ' | ' + snippet);
395
+
396
+ // name the function; overwrite if it's already named
397
+ snippet = snippet.replace(/function(?:\s+([^(]+))?\s*\(/, 'function _' + ident + '(');
398
+ if (LIBRARY_DEBUG) {
399
+ snippet = snippet.replace('{', '{ var ret = (function() { if (Runtime.debug) Module.printErr("[library call:' + ident + ': " + Array.prototype.slice.call(arguments).map(Runtime.prettyPrint) + "]"); ');
400
+ snippet = snippet.substr(0, snippet.length-1) + '}).apply(this, arguments); if (Runtime.debug && typeof ret !== "undefined") Module.printErr(" [ return:" + Runtime.prettyPrint(ret)); return ret; \n}';
401
+ }
402
+ return snippet;
403
+ }
404
+
405
+ // functionStub
406
+ substrate.addActor('FunctionStub', {
407
+ processItem: function(item) {
408
+ function addFromLibrary(ident) {
409
+ if (ident in addedLibraryItems) return '';
410
+ addedLibraryItems[ident] = true;
411
+
412
+ // dependencies can be JS functions, which we just run
413
+ if (typeof ident == 'function') return ident();
414
+
415
+ // Don't replace implemented functions with library ones (which can happen when we add dependencies).
416
+ // Note: We don't return the dependencies here. Be careful not to end up where this matters
417
+ if (('_' + ident) in Functions.implementedFunctions) return '';
418
+
419
+ var snippet = LibraryManager.library[ident];
420
+ var redirectedIdent = null;
421
+ var deps = LibraryManager.library[ident + '__deps'] || [];
422
+ var isFunction = false;
423
+
424
+ if (typeof snippet === 'string') {
425
+ var target = LibraryManager.library[snippet];
426
+ if (target) {
427
+ // Redirection for aliases. We include the parent, and at runtime make ourselves equal to it.
428
+ // This avoid having duplicate functions with identical content.
429
+ redirectedIdent = snippet;
430
+ deps.push(snippet);
431
+ snippet = '_' + snippet;
432
+ }
433
+ // In asm, we need to know about library functions. If there is a target, though, then no
434
+ // need to consider this a library function - we will call directly to it anyhow
435
+ if (ASM_JS && !redirectedIdent && (typeof target == 'function' || /Math\.\w+/.exec(snippet))) {
436
+ Functions.libraryFunctions[ident] = 1;
437
+ }
438
+ } else if (typeof snippet === 'object') {
439
+ snippet = stringifyWithFunctions(snippet);
440
+ } else if (typeof snippet === 'function') {
441
+ isFunction = true;
442
+ snippet = processLibraryFunction(snippet, ident);
443
+ if (ASM_JS) Functions.libraryFunctions[ident] = 1;
444
+ }
445
+
446
+ var postsetId = ident + '__postset';
447
+ var postset = LibraryManager.library[postsetId];
448
+ if (postset && !addedLibraryItems[postsetId]) {
449
+ addedLibraryItems[postsetId] = true;
450
+ ret.push({
451
+ intertype: 'GlobalVariablePostSet',
452
+ JS: postset
453
+ });
454
+ }
455
+
456
+ if (redirectedIdent) {
457
+ deps = deps.concat(LibraryManager.library[redirectedIdent + '__deps'] || []);
458
+ }
459
+ if (ASM_JS) {
460
+ // In asm, dependencies implemented in C might be needed by JS library functions.
461
+ // We don't know yet if they are implemented in C or not. To be safe, export such
462
+ // special cases.
463
+ [LIBRARY_DEPS_TO_AUTOEXPORT].forEach(function(special) {
464
+ deps.forEach(function(dep) {
465
+ if (dep == special && !EXPORTED_FUNCTIONS[dep]) {
466
+ EXPORTED_FUNCTIONS[dep] = 1;
467
+ }
468
+ });
469
+ });
470
+ }
471
+ // $ident's are special, we do not prefix them with a '_'.
472
+ if (ident[0] === '$') {
473
+ ident = ident.substr(1);
474
+ } else {
475
+ ident = '_' + ident;
476
+ }
477
+ if (VERBOSE) printErr('adding ' + ident + ' and deps ' + deps);
478
+ var depsText = (deps ? '\n' + deps.map(addFromLibrary).filter(function(x) { return x != '' }).join('\n') : '');
479
+ var contentText = isFunction ? snippet : ('var ' + ident + '=' + snippet + ';');
480
+ if (ASM_JS) {
481
+ var sig = LibraryManager.library[ident.substr(1) + '__sig'];
482
+ if (isFunction && sig && LibraryManager.library[ident.substr(1) + '__asm']) {
483
+ // asm library function, add it as generated code alongside the generated code
484
+ Functions.implementedFunctions[ident] = sig;
485
+ asmLibraryFunctions.push(contentText);
486
+ contentText = ' ';
487
+ EXPORTED_FUNCTIONS[ident] = 1;
488
+ Functions.libraryFunctions[ident.substr(1)] = 2;
489
+ }
490
+ }
491
+ if ((!ASM_JS || phase == 'pre') &&
492
+ (EXPORT_ALL || (ident in EXPORTED_FUNCTIONS))) {
493
+ contentText += '\nModule["' + ident + '"] = ' + ident + ';';
494
+ }
495
+ return depsText + contentText;
496
+ }
497
+
498
+ var ret = [item];
499
+ if (IGNORED_FUNCTIONS.indexOf(item.ident) >= 0) return null;
500
+ var shortident = item.ident.substr(1);
501
+ if (BUILD_AS_SHARED_LIB) {
502
+ // Shared libraries reuse the runtime of their parents.
503
+ item.JS = '';
504
+ } else {
505
+ // If this is not linkable, anything not in the library is definitely missing
506
+ var cancel = false;
507
+ if (!LINKABLE && !LibraryManager.library.hasOwnProperty(shortident) && !LibraryManager.library.hasOwnProperty(shortident + '__inline')) {
508
+ if (ERROR_ON_UNDEFINED_SYMBOLS) error('unresolved symbol: ' + shortident);
509
+ if (VERBOSE || WARN_ON_UNDEFINED_SYMBOLS) printErr('warning: unresolved symbol: ' + shortident);
510
+ if (ASM_JS || item.ident in DEAD_FUNCTIONS) {
511
+ // emit a stub that will fail during runtime. this allows asm validation to succeed.
512
+ LibraryManager.library[shortident] = new Function("Module['printErr']('missing function: " + shortident + "'); abort(-1);");
513
+ } else {
514
+ cancel = true; // emit nothing, not even var X = undefined;
515
+ }
516
+ }
517
+ item.JS = cancel ? ';' : addFromLibrary(shortident);
518
+ }
519
+ return ret;
520
+ }
521
+ });
522
+
523
+ // function splitter
524
+ substrate.addActor('FunctionSplitter', {
525
+ processItem: function(item) {
526
+ var ret = [item];
527
+ item.splitItems = 0;
528
+ item.labels.forEach(function(label) {
529
+ label.lines.forEach(function(line) {
530
+ line.func = item.ident;
531
+ line.funcData = item; // TODO: remove all these, access it globally
532
+ line.parentLabel = label.ident;
533
+ ret.push(line);
534
+ item.splitItems ++;
535
+ });
536
+ });
537
+
538
+ this.forwardItems(ret, 'FuncLineTriager');
539
+ }
540
+ });
541
+
542
+ // function for filtering functions for label debugging
543
+ if (LABEL_FUNCTION_FILTERS.length > 0) {
544
+ var LABEL_FUNCTION_FILTER_SET = set(LABEL_FUNCTION_FILTERS);
545
+ var functionNameFilterTest = function(ident) {
546
+ return (ident in LABEL_FUNCTION_FILTER_SET);
547
+ };
548
+ } else {
549
+ // no filters are specified, all function names are printed
550
+ var functionNameFilterTest = function(ident) {
551
+ return true;
552
+ }
553
+ }
554
+
555
+ // function reconstructor & post-JS optimizer
556
+ substrate.addActor('FunctionReconstructor', {
557
+ funcs: {},
558
+ seen: {},
559
+ processItem: function(item) {
560
+ if (this.seen[item.__uid__]) return null;
561
+ if (item.intertype == 'function') {
562
+ this.funcs[item.ident] = item;
563
+ item.relines = {};
564
+ this.seen[item.__uid__] = true;
565
+ return null;
566
+ }
567
+ var line = item;
568
+ var func = this.funcs[line.func];
569
+ if (!func) return null;
570
+
571
+ // Re-insert our line
572
+ this.seen[item.__uid__] = true;
573
+ var label = func.labels.filter(function(label) { return label.ident == line.parentLabel })[0];
574
+ label.lines = label.lines.map(function(line2) {
575
+ return (line2.lineNum !== line.lineNum) ? line2 : line;
576
+ });
577
+ func.splitItems --;
578
+ // OLD delete line.funcData; // clean up
579
+ if (func.splitItems > 0) return null;
580
+
581
+ // We have this function all reconstructed, go and finalize it's JS!
582
+
583
+ if (IGNORED_FUNCTIONS.indexOf(func.ident) >= 0) return null;
584
+
585
+ func.JS = '\n';
586
+
587
+ var paramIdents = func.params.map(function(param) {
588
+ return toNiceIdent(param.ident);
589
+ });
590
+
591
+ if (CLOSURE_ANNOTATIONS) {
592
+ func.JS += '/**\n';
593
+ paramIdents.forEach(function(param) {
594
+ func.JS += ' * @param {number} ' + param + '\n';
595
+ });
596
+ func.JS += ' * @return {number}\n'
597
+ func.JS += ' */\n';
598
+ }
599
+
600
+ if (PRINT_SPLIT_FILE_MARKER) {
601
+ func.JS += '\n//FUNCTION_BEGIN_MARKER\n'
602
+ var associatedSourceFile = "NO_SOURCE";
603
+ }
604
+
605
+ func.JS += 'function ' + func.ident + '(' + paramIdents.join(', ') + ') {\n';
606
+
607
+ if (PGO) {
608
+ func.JS += INDENTATION + 'PGOMonitor.called["' + func.ident + '"] = 1;\n';
609
+ }
610
+
611
+ if (ASM_JS) {
612
+ // spell out argument types
613
+ func.params.forEach(function(param) {
614
+ func.JS += INDENTATION + param.ident + ' = ' + asmCoercion(param.ident, param.type) + ';\n';
615
+ });
616
+
617
+ // spell out local variables
618
+ var vars = values(func.variables).filter(function(v) { return v.origin != 'funcparam' });
619
+ if (vars.length > 0) {
620
+ var chunkSize = 8;
621
+ var chunks = [];
622
+ var i = 0;
623
+ while (i < vars.length) {
624
+ chunks.push(vars.slice(i, i+chunkSize));
625
+ i += chunkSize;
626
+ }
627
+ for (i = 0; i < chunks.length; i++) {
628
+ func.JS += INDENTATION + 'var ' + chunks[i].map(function(v) {
629
+ var type = getImplementationType(v);
630
+ if (!isIllegalType(type) || v.ident.indexOf('$', 1) > 0) { // not illegal, or a broken up illegal
631
+ return v.ident + ' = ' + asmInitializer(type); //, func.variables[v.ident].impl);
632
+ } else {
633
+ return range(Math.ceil(getBits(type)/32)).map(function(i) {
634
+ return v.ident + '$' + i + '= 0';
635
+ }).join(',');
636
+ }
637
+ }).join(', ') + ';\n';
638
+ }
639
+ }
640
+ }
641
+
642
+ if (true) { // TODO: optimize away when not needed
643
+ if (CLOSURE_ANNOTATIONS) func.JS += '/** @type {number} */';
644
+ func.JS += INDENTATION + 'var label = 0;\n';
645
+ }
646
+
647
+ if (ASM_JS) {
648
+ var hasByVal = false;
649
+ func.params.forEach(function(param) {
650
+ hasByVal = hasByVal || param.byVal;
651
+ });
652
+ if (hasByVal) {
653
+ func.JS += INDENTATION + 'var tempParam = 0;\n';
654
+ }
655
+ }
656
+
657
+ // Prepare the stack, if we need one. If we have other stack allocations, force the stack to be set up.
658
+ func.JS += INDENTATION + RuntimeGenerator.stackEnter(func.initialStack, func.otherStackAllocations) + ';\n';
659
+
660
+ // Make copies of by-value params
661
+ // XXX It is not clear we actually need this. While without this we fail, it does look like
662
+ // Clang normally does the copy itself, in the calling function. We only need this code
663
+ // when Clang optimizes the code and passes the original, not the copy, to the other
664
+ // function. But Clang still copies, the copy is just unused! Need to figure out if that
665
+ // is caused by our running just some optimizations (the safe ones), or if its a bug
666
+ // in Clang, or a bug in our understanding of the IR.
667
+ func.params.forEach(function(param) {
668
+ if (param.byVal) {
669
+ var type = removePointing(param.type);
670
+ var typeInfo = Types.types[type];
671
+ func.JS += INDENTATION + (ASM_JS ? '' : 'var ') + 'tempParam = ' + param.ident + '; ' + param.ident + ' = ' + RuntimeGenerator.stackAlloc(typeInfo.flatSize) + ';' +
672
+ makeCopyValues(param.ident, 'tempParam', typeInfo.flatSize, 'null', null, param.byVal) + ';\n';
673
+ }
674
+ });
675
+
676
+ if (LABEL_DEBUG && functionNameFilterTest(func.ident)) func.JS += " Module.print(INDENT + ' Entering: " + func.ident + ": ' + Array.prototype.slice.call(arguments)); INDENT += ' ';\n";
677
+
678
+ // Walk function blocks and generate JS
679
+ function walkBlock(block, indent) {
680
+ if (!block) return '';
681
+ dprint('relooping', 'walking block: ' + block.type + ',' + block.entries + ' : ' + block.labels.length);
682
+ function getLabelLines(label, indent, relooping) {
683
+ if (!label) return '';
684
+ var ret = '';
685
+ if ((LABEL_DEBUG >= 2) && functionNameFilterTest(func.ident)) {
686
+ ret += indent + "Module.print(INDENT + '" + func.ident + ":" + label.ident + "');\n";
687
+ }
688
+ if (EXECUTION_TIMEOUT > 0) {
689
+ ret += indent + 'if (Date.now() - START_TIME >= ' + (EXECUTION_TIMEOUT*1000) + ') throw "Timed out!" + (new Error().stack);\n';
690
+ }
691
+
692
+ if (PRINT_SPLIT_FILE_MARKER && Debugging.on && Debugging.getAssociatedSourceFile(line.lineNum)) {
693
+ // Overwrite the associated source file for every line. The last line should contain the source file associated to
694
+ // the return value/address of outer most block (the marked function).
695
+ associatedSourceFile = Debugging.getAssociatedSourceFile(line.lineNum);
696
+ }
697
+
698
+ // for special labels we care about (for phi), mark that we visited them
699
+ var i = 0;
700
+ return ret + label.lines.map(function(line) {
701
+ var JS = line.JS;
702
+ if (relooping && i == label.lines.length-1) {
703
+ if (line.intertype == 'branch' || line.intertype == 'switch') {
704
+ JS = ''; // just branching operations - done in the relooper, so nothing need be done here
705
+ } else if (line.intertype == 'invoke') {
706
+ JS = line.reloopingJS; // invokes have code that is not rendered in the relooper (the call inside a try-catch)
707
+ }
708
+ }
709
+ i++;
710
+ // invoke instructions span two lines, and the debug info is located
711
+ // on the second line, hence the +1
712
+ return JS + (Debugging.on ? Debugging.getComment(line.lineNum + (line.intertype === 'invoke' ? 1 : 0)) : '');
713
+ })
714
+ .join('\n')
715
+ .split('\n') // some lines include line breaks
716
+ .map(function(line) { return indent + line })
717
+ .join('\n');
718
+ }
719
+ var ret = '';
720
+ if (!RELOOP || func.forceEmulated) { // TODO: also if just 1 label?
721
+ if (block.labels.length > 1) {
722
+ if (block.entries.length == 1) {
723
+ ret += indent + 'label = ' + getLabelId(block.entries[0]) + '; ' + (SHOW_LABELS ? '/* ' + getOriginalLabelId(block.entries[0]) + ' */' : '') + '\n';
724
+ } // otherwise, should have been set before!
725
+ if (func.setjmpTable) {
726
+ if (!ASM_JS) {
727
+ var setjmpTable = {};
728
+ ret += indent + 'var mySetjmpIds = {};\n';
729
+ ret += indent + 'var setjmpTable = {';
730
+ func.setjmpTable.forEach(function(triple) { // original label, label we created for right after the setjmp, variable setjmp result goes into
731
+ ret += '"' + getLabelId(triple.oldLabel) + '": ' + 'function(value) { label = ' + getLabelId(triple.newLabel) + '; ' + triple.assignTo + ' = value },';
732
+ });
733
+ ret += 'dummy: 0';
734
+ ret += '};\n';
735
+ } else {
736
+ ret += 'var setjmpLabel = 0;\n';
737
+ ret += 'var setjmpTable = ' + RuntimeGenerator.stackAlloc(4 * (MAX_SETJMPS + 1) * 2) + ';\n';
738
+ ret += makeSetValue('setjmpTable', '0', '0', 'i32') + ';'; // initialize first entry to 0
739
+ }
740
+ }
741
+ ret += indent + 'while(1) ';
742
+ if (func.setjmpTable && !ASM_JS) {
743
+ ret += 'try { ';
744
+ }
745
+ ret += 'switch(' + asmCoercion('label', 'i32') + ') {\n';
746
+ ret += block.labels.map(function(label) {
747
+ return indent + INDENTATION + 'case ' + getLabelId(label.ident) + ': ' + (SHOW_LABELS ? '// ' + getOriginalLabelId(label.ident) : '') + '\n'
748
+ + getLabelLines(label, indent + INDENTATION + INDENTATION);
749
+ }).join('\n') + '\n';
750
+ if (func.setjmpTable && ASM_JS) {
751
+ // emit a label in which we write to the proper local variable, before jumping to the actual label
752
+ ret += INDENTATION + 'case ' + SETJMP_LABEL + ': ';
753
+ ret += func.setjmpTable.map(function(triple) { // original label, label we created for right after the setjmp, variable setjmp result goes into
754
+ return 'if ((setjmpLabel|0) == ' + getLabelId(triple.oldLabel) + ') { ' + triple.assignTo + ' = threwValue; label = ' + triple.newLabel + ' }\n';
755
+ }).join(' else ');
756
+ if (ASSERTIONS) ret += 'else abort(-3);\n';
757
+ ret += '__THREW__ = threwValue = 0;\n';
758
+ ret += 'break;\n';
759
+ }
760
+ if (ASSERTIONS) ret += indent + INDENTATION + 'default: assert(0' + (ASM_JS ? '' : ', "bad label: " + label') + ');\n';
761
+ ret += indent + '}\n';
762
+ if (func.setjmpTable && !ASM_JS) {
763
+ ret += ' } catch(e) { if (!e.longjmp || !(e.id in mySetjmpIds)) throw(e); setjmpTable[setjmpLabels[e.id]](e.value) }';
764
+ }
765
+ } else {
766
+ ret += (SHOW_LABELS ? indent + '/* ' + block.entries[0] + ' */' : '') + '\n' + getLabelLines(block.labels[0], indent);
767
+ }
768
+ ret += '\n';
769
+ } else {
770
+ // Reloop multiple blocks using the compiled relooper
771
+
772
+ //Relooper.setDebug(1);
773
+ Relooper.init();
774
+
775
+ if (ASM_JS) Relooper.setAsmJSMode(1);
776
+
777
+ var blockMap = {};
778
+ // add blocks
779
+ for (var i = 0; i < block.labels.length; i++) {
780
+ var label = block.labels[i];
781
+ var content = getLabelLines(label, '', true);
782
+ //printErr(func.ident + ' : ' + label.ident + ' : ' + content + '\n');
783
+ blockMap[label.ident] = Relooper.addBlock(content);
784
+ }
785
+ // add branchings
786
+ function relevant(x) { return x && x.length > 2 ? x : 0 } // ignores ';' which valueJS and label*JS can be if empty
787
+ for (var i = 0; i < block.labels.length; i++) {
788
+ var label = block.labels[i];
789
+ var ident = label.ident;
790
+ var last = label.lines[label.lines.length-1];
791
+ //printErr('zz last ' + dump(last));
792
+ if (last.intertype == 'branch') {
793
+ if (last.label) { // 1 target
794
+ Relooper.addBranch(blockMap[ident], blockMap[last.label], 0, relevant(last.labelJS));
795
+ } else { // 2 targets
796
+ Relooper.addBranch(blockMap[ident], blockMap[last.labelTrue], last.valueJS, relevant(last.labelTrueJS));
797
+ Relooper.addBranch(blockMap[ident], blockMap[last.labelFalse], 0, relevant(last.labelFalseJS));
798
+ }
799
+ } else if (last.intertype == 'switch') {
800
+ last.groupedLabels.forEach(function(switchLabel) {
801
+ Relooper.addBranch(blockMap[ident], blockMap[switchLabel.label], switchLabel.value, relevant(switchLabel.labelJS));
802
+ });
803
+ Relooper.addBranch(blockMap[ident], blockMap[last.defaultLabel], 0, relevant(last.defaultLabelJS));
804
+ } else if (last.intertype == 'invoke') {
805
+ Relooper.addBranch(blockMap[ident], blockMap[last.toLabel], '!__THREW__', relevant(last.toLabelJS));
806
+ Relooper.addBranch(blockMap[ident], blockMap[last.unwindLabel], 0, relevant(last.unwindLabelJS));
807
+ } else if (last.intertype in RELOOP_IGNORED_LASTS) {
808
+ } else {
809
+ throw 'unknown reloop last line: ' + last.intertype;
810
+ }
811
+ }
812
+ ret += Relooper.render(blockMap[block.entries[0]]);
813
+ }
814
+ return ret;
815
+ }
816
+ func.JS += walkBlock(func.block, INDENTATION);
817
+ // Finalize function
818
+ if (LABEL_DEBUG && functionNameFilterTest(func.ident)) func.JS += " INDENT = INDENT.substr(0, INDENT.length-2);\n";
819
+ // Ensure a return in a function with a type that returns, even if it lacks a return (e.g., if it aborts())
820
+ if (RELOOP && func.lines.length > 0 && func.returnType != 'void') {
821
+ var returns = func.labels.filter(function(label) { return label.lines[label.lines.length-1].intertype == 'return' }).length;
822
+ if (returns == 0) func.JS += INDENTATION + 'return ' + asmCoercion('0', func.returnType);
823
+ }
824
+ func.JS += '}\n';
825
+
826
+ if (PRINT_SPLIT_FILE_MARKER) {
827
+ func.JS += '\n//FUNCTION_END_MARKER_OF_SOURCE_FILE_' + associatedSourceFile + '\n';
828
+ }
829
+
830
+ if (!ASM_JS && (EXPORT_ALL || (func.ident in EXPORTED_FUNCTIONS))) {
831
+ func.JS += 'Module["' + func.ident + '"] = ' + func.ident + ';';
832
+ }
833
+
834
+ if (!ASM_JS && INLINING_LIMIT && func.lines.length >= INLINING_LIMIT) {
835
+ func.JS += func.ident + '["X"]=1;';
836
+ }
837
+
838
+ if (BUILD_AS_SHARED_LIB == 2) {
839
+ // TODO: make the assert conditional on ASSERTIONS
840
+ func.JS += 'if (globalScope) { assert(!globalScope["' + func.ident + '"]); globalScope["' + func.ident + '"] = ' + func.ident + ' }';
841
+ }
842
+
843
+ func.JS = func.JS.replace(/\n *;/g, '\n'); // remove unneeded lines
844
+
845
+ if (MAIN_MODULE || SIDE_MODULE) {
846
+ // Clone the function for each of its aliases. We do not know which name it will be used by in another module,
847
+ // and we do not have a heavyweight metadata system to resolve aliases during linking
848
+ var aliases = Functions.aliases[func.ident];
849
+ if (aliases) {
850
+ var body = func.JS.substr(func.JS.indexOf('('));
851
+ aliases.forEach(function(alias) {
852
+ func.JS += '\n' + 'function ' + alias + body;
853
+ });
854
+ }
855
+ }
856
+
857
+ return func;
858
+ }
859
+ });
860
+
861
+ function getVarData(funcData, ident) {
862
+ var local = funcData.variables[ident];
863
+ if (local) return local;
864
+ var global = Variables.globals[ident];
865
+ return global || null;
866
+ }
867
+
868
+ function getVarImpl(funcData, ident) {
869
+ if (ident === 'null' || isNumber(ident)) return VAR_NATIVIZED; // like nativized, in that we have the actual value right here
870
+ var data = getVarData(funcData, ident);
871
+ assert(data, 'What variable is this? |' + ident + '|');
872
+ return data.impl;
873
+ }
874
+
875
+ substrate.addActor('FuncLineTriager', {
876
+ processItem: function(item) {
877
+ if (item.intertype == 'function') {
878
+ this.forwardItem(item, 'FunctionReconstructor'); // XXX not really needed
879
+ } else if (item.JS) {
880
+ this.forwardItem(item, 'FunctionReconstructor'); // XXX not really needed
881
+ } else {
882
+ this.forwardItem(item, 'Intertype:' + item.intertype);
883
+ }
884
+ }
885
+ });
886
+
887
+ // An interitem that has |assignTo| is an assign to that item. They call this function which
888
+ // generates the actual assignment.
889
+ function makeAssign(item) {
890
+ var valueJS = item.JS;
891
+ item.JS = '';
892
+ if (CLOSURE_ANNOTATIONS) item.JS += '/** @type {number} */ ';
893
+ if (!ASM_JS || item.intertype != 'alloca' || item.funcData.variables[item.assignTo].impl == VAR_EMULATED) { // asm only needs non-allocas
894
+ item.JS += ((ASM_JS || item.overrideSSA) ? '' : 'var ') + toNiceIdent(item.assignTo);
895
+ }
896
+ var value = parseNumerical(valueJS);
897
+ var impl = getVarImpl(item.funcData, item.assignTo);
898
+ switch (impl) {
899
+ case VAR_NATIVE: {
900
+ break;
901
+ }
902
+ case VAR_NATIVIZED: {
903
+ // SSA, so this must be the alloca. No need for a value
904
+ if (!item.overrideSSA) value = '';
905
+ break;
906
+ }
907
+ case VAR_EMULATED: {
908
+ break;
909
+ }
910
+ default: throw 'zz unknown impl: ' + impl;
911
+ }
912
+ if (value && value != ';') {
913
+ item.JS += '=' + value;
914
+ }
915
+ if (item.JS[item.JS.length-1] != ';') {
916
+ item.JS += ';';
917
+ }
918
+ }
919
+
920
+ // Function lines
921
+ function makeFuncLineActor(intertype, func) {
922
+ return substrate.addActor('Intertype:' + intertype, {
923
+ processItem: function(item) {
924
+ item.JS = func(item);
925
+ if (!item.JS) throw "No JS generated for " + dump((item.funcData=null,item));
926
+ if (item.assignTo) {
927
+ makeAssign(item);
928
+ if (!item.JS) throw "No assign JS generated for " + dump(item);
929
+ }
930
+ this.forwardItem(item, 'FunctionReconstructor');
931
+ }
932
+ });
933
+ }
934
+ makeFuncLineActor('value', function(item) {
935
+ return item.ident;
936
+ });
937
+ makeFuncLineActor('noop', function(item) {
938
+ return ';';
939
+ });
940
+ makeFuncLineActor('var', function(item) { // assigns into phis become simple vars
941
+ return ASM_JS ? ';' : ('var ' + item.ident + ';');
942
+ });
943
+ makeFuncLineActor('store', function(item) {
944
+ var value = finalizeLLVMParameter(item.value);
945
+ if (pointingLevels(item.pointerType) == 1) {
946
+ value = parseNumerical(value, item.valueType);
947
+ }
948
+ var impl = VAR_EMULATED;
949
+ if (item.pointer.intertype == 'value') {
950
+ impl = getVarImpl(item.funcData, item.ident);
951
+ }
952
+ switch (impl) {
953
+ case VAR_NATIVIZED:
954
+ if (isNumber(item.ident)) {
955
+ // Direct write to a memory address; this may be an intentional segfault, if not, it is a bug in the source
956
+ if (ASM_JS) {
957
+ return 'abort(' + item.ident + ')';
958
+ } else {
959
+ return 'throw "fault on write to ' + item.ident + '";';
960
+ }
961
+ }
962
+ return item.ident + '=' + value + ';'; // We have the actual value here
963
+ break;
964
+ case VAR_EMULATED:
965
+ if (item.pointer.intertype == 'value') {
966
+ return makeSetValue(makeGlobalUse(item.ident), 0, value, item.valueType, 0, 0, item.align) + ';';
967
+ } else {
968
+ return makeSetValue(0, finalizeLLVMParameter(item.pointer), value, item.valueType, 0, 0, item.align) + ';';
969
+ }
970
+ break;
971
+ default:
972
+ throw 'unknown [store] impl: ' + impl;
973
+ }
974
+ return null;
975
+ });
976
+
977
+ makeFuncLineActor('deleted', function(item) { return ';' });
978
+
979
+ function getOriginalLabelId(label) {
980
+ var funcData = Framework.currItem.funcData;
981
+ var labelIdsInverse = funcData.labelIdsInverse;
982
+ return labelIdsInverse[label];
983
+ }
984
+
985
+ function getLabelId(label) {
986
+ return label;
987
+ }
988
+
989
+ function makeBranch(label, lastLabel, labelIsVariable) { // lastLabel is deprecated
990
+ var pre = '';
991
+ if (label[0] == 'B') {
992
+ assert(!labelIsVariable, 'Cannot handle branches to variables with special branching options');
993
+ var parts = label.split('|');
994
+ var trueLabel = parts[1] || '';
995
+ var oldLabel = parts[2] || '';
996
+ var labelSetting = oldLabel ? 'label = ' + getLabelId(oldLabel) + ';' +
997
+ (SHOW_LABELS ? ' /* to: ' + getOriginalLabelId(cleanLabel(oldLabel)) + ' */' : '') : ''; // TODO: optimize away the setting
998
+ if (label[1] == 'R') {
999
+ if (label[2] == 'N') { // BRNOL: break, no label setting
1000
+ labelSetting = '';
1001
+ }
1002
+ return pre + labelSetting + 'break ' + trueLabel + ';';
1003
+ } else if (label[1] == 'C') { // CONT
1004
+ if (label[2] == 'N') { // BCNOL: continue, no label setting
1005
+ labelSetting = '';
1006
+ }
1007
+ return pre + labelSetting + 'continue ' + trueLabel + ';';
1008
+ } else if (label[1] == 'N') { // NOPP
1009
+ return pre + ';'; // Returning no text might confuse this parser
1010
+ } else if (label[1] == 'J') { // JSET
1011
+ return pre + labelSetting + ';';
1012
+ } else {
1013
+ throw 'Invalid B-op in branch: ' + trueLabel + ',' + oldLabel;
1014
+ }
1015
+ } else {
1016
+ if (!labelIsVariable) label = getLabelId(label);
1017
+ return pre + 'label = ' + label + ';' + (SHOW_LABELS ? ' /* to: ' + getOriginalLabelId(cleanLabel(label)) + ' */' : '') + ' break;';
1018
+ }
1019
+ }
1020
+
1021
+ function calcPhiSets(item) {
1022
+ if (!item.phi) return null;
1023
+ var phiSets = {};
1024
+ item.dependent.params.forEach(function(param) {
1025
+ if (!phiSets[param.targetLabel]) phiSets[param.targetLabel] = [];
1026
+ phiSets[param.targetLabel].push(param);
1027
+ param.valueJS = finalizeLLVMParameter(param.value);
1028
+ });
1029
+ return phiSets;
1030
+ }
1031
+
1032
+ function getPhiSetsForLabel(phiSets, label) {
1033
+ if (!phiSets) return '';
1034
+ label = getOldLabel(label);
1035
+ if (!phiSets[label]) return '';
1036
+ var labelSets = phiSets[label];
1037
+ // FIXME: Many of the |var |s here are not needed, but without them we get slowdowns with closure compiler. TODO: remove this workaround.
1038
+ if (labelSets.length == 1) {
1039
+ return (ASM_JS ? '' : 'var ') + labelSets[0].ident + ' = ' + labelSets[0].valueJS + ';';
1040
+ }
1041
+ // TODO: eliminate unneeded sets (to undefined etc.)
1042
+ var deps = {}; // for each ident we will set, which others it depends on
1043
+ var valueJSes = {};
1044
+ labelSets.forEach(function(labelSet) {
1045
+ deps[labelSet.ident] = {};
1046
+ valueJSes[labelSet.ident] = labelSet.valueJS;
1047
+ });
1048
+ labelSets.forEach(function(labelSet) {
1049
+ walkInterdata(labelSet.value, function mark(item) {
1050
+ if (item.intertype == 'value' && item.ident in deps && labelSet.ident != item.ident) {
1051
+ deps[labelSet.ident][item.ident] = true;
1052
+ }
1053
+ });
1054
+ });
1055
+ var pre = '', post = '', idents;
1056
+ mainLoop: while ((idents = keys(deps)).length > 0) {
1057
+ var remove = function(ident) {
1058
+ for (var i = 0; i < idents.length; i++) {
1059
+ delete deps[idents[i]][ident];
1060
+ }
1061
+ delete deps[ident];
1062
+ }
1063
+ for (var i = 0; i < idents.length; i++) {
1064
+ if (keys(deps[idents[i]]).length == 0) {
1065
+ post = 'var ' + idents[i] + ' = ' + valueJSes[idents[i]] + ';' + post;
1066
+ remove(idents[i]);
1067
+ continue mainLoop;
1068
+ }
1069
+ }
1070
+ // If we got here, we have circular dependencies, and must break at least one.
1071
+ pre += 'var ' + idents[0] + '$phi = ' + valueJSes[idents[0]] + ';';
1072
+ post += 'var ' + idents[0] + ' = ' + idents[0] + '$phi;';
1073
+ remove(idents[0]);
1074
+ }
1075
+ return pre + post;
1076
+
1077
+ /* // Safe, unoptimized copying
1078
+ var ret = '';
1079
+ for (var i = 0; i < labelSets.length-1; i++) {
1080
+ ret += 'var ' + labelSets[i].ident + '$phi = ' + labelSets[i].valueJS + ';';
1081
+ }
1082
+ ret += labelSets[labelSets.length-1].ident + ' = ' + labelSets[labelSets.length-1].valueJS + ';';
1083
+ for (var i = 0; i < labelSets.length-1; i++) {
1084
+ ret += labelSets[i].ident + ' = ' + labelSets[i].ident + '$phi;';
1085
+ }
1086
+ return ret;
1087
+ */
1088
+ }
1089
+
1090
+ makeFuncLineActor('branch', function(item) {
1091
+ var phiSets = calcPhiSets(item);
1092
+ if (!item.value) {
1093
+ return (item.labelJS = getPhiSetsForLabel(phiSets, item.label)) + makeBranch(item.label, item.currLabelId);
1094
+ } else {
1095
+ var condition = item.valueJS = finalizeLLVMParameter(item.value);
1096
+ var labelTrue = (item.labelTrueJS = getPhiSetsForLabel(phiSets, item.labelTrue)) + makeBranch(item.labelTrue, item.currLabelId);
1097
+ var labelFalse = (item.labelFalseJS = getPhiSetsForLabel(phiSets, item.labelFalse)) + makeBranch(item.labelFalse, item.currLabelId);
1098
+ if (labelTrue == ';' && labelFalse == ';') return ';';
1099
+ var head = 'if (' + condition + ') { ';
1100
+ var head2 = 'if (!(' + condition + ')) { ';
1101
+ var else_ = ' } else { ';
1102
+ var tail = ' }';
1103
+ if (labelTrue == ';') {
1104
+ return head2 + labelFalse + tail;
1105
+ } else if (labelFalse == ';') {
1106
+ return head + labelTrue + tail;
1107
+ } else {
1108
+ return head + labelTrue + else_ + labelFalse + tail;
1109
+ }
1110
+ }
1111
+ });
1112
+ makeFuncLineActor('switch', function(item) {
1113
+ var useIfs = RELOOP || item.switchLabels.length < 1024; // with a huge number of cases, if-else which looks nested to js parsers can cause problems
1114
+ var phiSets = calcPhiSets(item);
1115
+ // Consolidate checks that go to the same label. This is important because it makes the relooper simpler and faster.
1116
+ var targetLabels = {}; // for each target label, the list of values going to it
1117
+ var switchLabelMap = {};
1118
+ item.switchLabels.forEach(function(switchLabel) {
1119
+ switchLabelMap[switchLabel.label] = switchLabel;
1120
+ if (!targetLabels[switchLabel.label]) {
1121
+ targetLabels[switchLabel.label] = [];
1122
+ }
1123
+ targetLabels[switchLabel.label].push(switchLabel.value);
1124
+ });
1125
+ var ret = '';
1126
+ var first = true;
1127
+ var signedIdent = makeSignOp(item.ident, item.type, 're'); // we need to standardize for purpose of comparison
1128
+ if (RELOOP) {
1129
+ item.groupedLabels = [];
1130
+ }
1131
+ if (!useIfs) {
1132
+ ret += 'switch(' + signedIdent + ') {\n';
1133
+ }
1134
+ for (var targetLabel in targetLabels) {
1135
+ if (!first && useIfs) {
1136
+ ret += 'else ';
1137
+ } else {
1138
+ first = false;
1139
+ }
1140
+ var value;
1141
+ if (useIfs) {
1142
+ value = targetLabels[targetLabel].map(function(value) {
1143
+ return makeComparison(signedIdent, '==', makeSignOp(value, item.type, 're'), item.type)
1144
+ }).join(' | ');
1145
+ ret += 'if (' + value + ') {\n';
1146
+ } else {
1147
+ value = targetLabels[targetLabel].map(function(value) {
1148
+ return 'case ' + makeSignOp(value, item.type, 're') + ':';
1149
+ }).join(' ');
1150
+ ret += value + '{\n';
1151
+ }
1152
+ var phiSet = getPhiSetsForLabel(phiSets, targetLabel);
1153
+ ret += INDENTATION + '' + phiSet + makeBranch(targetLabel, item.currLabelId || null) + '\n';
1154
+ ret += '}\n';
1155
+ if (RELOOP) {
1156
+ item.groupedLabels.push({
1157
+ label: targetLabel,
1158
+ value: value,
1159
+ labelJS: phiSet
1160
+ });
1161
+ }
1162
+ }
1163
+ var phiSet = item.defaultLabelJS = getPhiSetsForLabel(phiSets, item.defaultLabel);
1164
+ if (useIfs) {
1165
+ if (item.switchLabels.length > 0) ret += 'else {\n';
1166
+ ret += phiSet + makeBranch(item.defaultLabel, item.currLabelId) + '\n';
1167
+ if (item.switchLabels.length > 0) ret += '}\n';
1168
+ } else {
1169
+ ret += 'default: {\n';
1170
+ ret += phiSet + makeBranch(item.defaultLabel, item.currLabelId) + '\n';
1171
+ ret += '}\n';
1172
+
1173
+ ret += '} break; \n'; // finish switch and break, to move control flow properly (breaks from makeBranch just broke out of the switch)
1174
+ }
1175
+ if (item.value) {
1176
+ ret += ' ' + toNiceIdent(item.value);
1177
+ }
1178
+ return ret;
1179
+ });
1180
+ makeFuncLineActor('return', function(item) {
1181
+ var ret = RuntimeGenerator.stackExit(item.funcData.initialStack, item.funcData.otherStackAllocations) + ';\n';
1182
+ if (LABEL_DEBUG && functionNameFilterTest(item.funcData.ident)) {
1183
+ ret += "Module.print(INDENT + 'Exiting: " + item.funcData.ident + "');\n"
1184
+ + "INDENT = INDENT.substr(0, INDENT.length-2);\n";
1185
+ }
1186
+ ret += 'return';
1187
+ var value = item.value ? finalizeLLVMParameter(item.value) : null;
1188
+ if (!value && item.funcData.returnType != 'void') value = '0'; // no-value returns must become value returns if function returns
1189
+ if (value) {
1190
+ ret += ' ' + asmCoercion(value, item.type);
1191
+ }
1192
+ return ret + ';';
1193
+ });
1194
+ makeFuncLineActor('resume', function(item) {
1195
+ if (DISABLE_EXCEPTION_CATCHING) return 'abort()';
1196
+ if (item.ident == 0) {
1197
+ // No exception to resume, so we can just bail.
1198
+ // This is related to issue #917 and http://llvm.org/PR15518
1199
+ return (EXCEPTION_DEBUG ? 'Module.print("no exception to resume")' : '') + ';';
1200
+ }
1201
+ // If there is no current exception, set this one as it (during a resume, the current exception can be wiped out)
1202
+ var ptr = makeStructuralAccess(item.ident, 0);
1203
+ return '___resumeException(' + asmCoercion(ptr, 'i32') + ')';
1204
+ });
1205
+ makeFuncLineActor('invoke', function(item) {
1206
+ // Wrapping in a function lets us easily return values if we are
1207
+ // in an assignment
1208
+ var disabled = DISABLE_EXCEPTION_CATCHING == 2 && !(item.funcData.ident in EXCEPTION_CATCHING_WHITELIST);
1209
+ var phiSets = calcPhiSets(item);
1210
+ var call_ = makeFunctionCall(item.ident, item.params, item.funcData, item.type, ASM_JS && !disabled, !!item.assignTo || !item.standalone);
1211
+
1212
+ var ret;
1213
+
1214
+ if (disabled) {
1215
+ ret = call_ + ';';
1216
+ } else if (ASM_JS) {
1217
+ if (item.type != 'void') call_ = asmCoercion(call_, item.type); // ensure coercion to ffi in comma operator
1218
+ call_ = call_.replace('; return', ''); // we auto-add returns when aborting, but do not need them here
1219
+ if (item.type == 'void') {
1220
+ ret = '__THREW__ = 0;' + call_ + ';';
1221
+ } else {
1222
+ ret = '(__THREW__ = 0,' + call_ + ');';
1223
+ }
1224
+ } else {
1225
+ ret = '(function() { try { __THREW__ = 0; return '
1226
+ + call_ + ' '
1227
+ + '} catch(e) { '
1228
+ + 'if (typeof e != "number") throw e; '
1229
+ + 'if (ABORT) throw e; __THREW__ = 1; '
1230
+ + (EXCEPTION_DEBUG ? 'Module.print("Exception: " + e + ", currently at: " + (new Error().stack)); ' : '')
1231
+ + 'return null } })();';
1232
+ }
1233
+
1234
+ if (item.assignTo) {
1235
+ ret = 'var ' + item.assignTo + ' = ' + ret;
1236
+ if (USE_TYPED_ARRAYS == 2 && isIllegalType(item.type)) {
1237
+ var bits = getBits(item.type);
1238
+ for (var i = 0; i < bits/32; i++) {
1239
+ ret += 'var ' + item.assignTo + '$' + i + ' = ' + (i == 0 ? item.assignTo : 'tempRet' + (i-1)) + ';'
1240
+ }
1241
+ }
1242
+ item.assignTo = null;
1243
+ }
1244
+ item.reloopingJS = ret; // everything but the actual branching (which the relooper will do for us)
1245
+ item.toLabelJS = getPhiSetsForLabel(phiSets, item.toLabel);
1246
+ item.unwindLabelJS = (ASM_JS ? '__THREW__ = 0;' : '') + getPhiSetsForLabel(phiSets, item.unwindLabel);
1247
+ ret += 'if (!__THREW__) { ' + item.toLabelJS + makeBranch(item.toLabel, item.currLabelId)
1248
+ + ' } else { ' + item.unwindLabelJS + makeBranch(item.unwindLabel, item.currLabelId) + ' }';
1249
+ return ret;
1250
+ });
1251
+ makeFuncLineActor('atomic', function(item) {
1252
+ var type = item.params[0].type;
1253
+ var param1 = finalizeLLVMParameter(item.params[0]);
1254
+ var param2 = finalizeLLVMParameter(item.params[1]);
1255
+ switch (item.op) {
1256
+ case 'add': return '(tempValue=' + makeGetValue(param1, 0, type) + ',' + makeSetValue(param1, 0, 'tempValue+' + param2, type, null, null, null, null, ',') + ',tempValue)';
1257
+ case 'sub': return '(tempValue=' + makeGetValue(param1, 0, type) + ',' + makeSetValue(param1, 0, 'tempValue-' + param2, type, null, null, null, null, ',') + ',tempValue)';
1258
+ case 'or': return '(tempValue=' + makeGetValue(param1, 0, type) + ',' + makeSetValue(param1, 0, 'tempValue|' + param2, type, null, null, null, null, ',') + ',tempValue)';
1259
+ case 'and': return '(tempValue=' + makeGetValue(param1, 0, type) + ',' + makeSetValue(param1, 0, 'tempValue&' + param2, type, null, null, null, null, ',') + ',tempValue)';
1260
+ case 'xor': return '(tempValue=' + makeGetValue(param1, 0, type) + ',' + makeSetValue(param1, 0, 'tempValue^' + param2, type, null, null, null, null, ',') + ',tempValue)';
1261
+ case 'xchg': return '(tempValue=' + makeGetValue(param1, 0, type) + ',' + makeSetValue(param1, 0, param2, type, null, null, null, null, ',') + ',tempValue)';
1262
+ case 'cmpxchg': {
1263
+ var param3 = finalizeLLVMParameter(item.params[2]);
1264
+ return '(tempValue=' + makeGetValue(param1, 0, type) + ',(' + makeGetValue(param1, 0, type) + '==(' + param2 + '|0) ? ' + asmCoercion(makeSetValue(param1, 0, param3, type, null, null, null, null, ','), 'i32') + ' : 0),tempValue)';
1265
+ }
1266
+ default: throw 'unhandled atomic op: ' + item.op;
1267
+ }
1268
+ });
1269
+ makeFuncLineActor('landingpad', function(item) {
1270
+ if (DISABLE_EXCEPTION_CATCHING && USE_TYPED_ARRAYS == 2) {
1271
+ ret = makeVarDef(item.assignTo) + '$0 = 0; ' + item.assignTo + '$1 = 0;';
1272
+ item.assignTo = null;
1273
+ if (VERBOSE) warnOnce('landingpad, but exceptions are disabled!');
1274
+ return ret;
1275
+ }
1276
+ var catchTypeArray = item.catchables.map(finalizeLLVMParameter).map(function(element) { return asmCoercion(element, 'i32') }).join(',');
1277
+ var ret = asmCoercion('___cxa_find_matching_catch(-1, -1' + (catchTypeArray.length > 0 ? ',' + catchTypeArray : '') +')', 'i32');
1278
+ if (USE_TYPED_ARRAYS == 2) {
1279
+ ret = makeVarDef(item.assignTo) + '$0 = ' + ret + '; ' + item.assignTo + '$1 = tempRet0;';
1280
+ item.assignTo = null;
1281
+ }
1282
+ return ret;
1283
+ });
1284
+ makeFuncLineActor('load', function(item) {
1285
+ var value = finalizeLLVMParameter(item.pointer);
1286
+ var impl = item.ident ? getVarImpl(item.funcData, item.ident) : VAR_EMULATED;
1287
+ switch (impl) {
1288
+ case VAR_NATIVIZED: {
1289
+ if (isNumber(item.ident)) {
1290
+ item.assignTo = null;
1291
+ // Direct read from a memory address; this may be an intentional segfault, if not, it is a bug in the source
1292
+ if (ASM_JS) {
1293
+ return 'abort(' + item.ident + ')';
1294
+ } else {
1295
+ return 'throw "fault on read from ' + item.ident + '";';
1296
+ }
1297
+ }
1298
+ return value; // We have the actual value here
1299
+ }
1300
+ case VAR_EMULATED: return makeGetValue(value, 0, item.type, 0, item.unsigned, 0, item.align);
1301
+ default: throw "unknown [load] impl: " + impl;
1302
+ }
1303
+ });
1304
+ makeFuncLineActor('extractvalue', function(item) {
1305
+ assert(item.indexes.length == 1); // TODO: use getelementptr parsing stuff, for depth. For now, we assume that LLVM aggregates are flat,
1306
+ // and we emulate them using simple JS objects { f1: , f2: , } etc., for speed
1307
+ var index = item.indexes[0][0].text;
1308
+ var valueType = Types.types[item.type].fields[index];
1309
+ if (USE_TYPED_ARRAYS != 2 || valueType != 'i64') {
1310
+ return item.ident + '.f' + index;
1311
+ } else {
1312
+ var assignTo = item.assignTo;
1313
+ item.assignTo = null;
1314
+ return 'var ' + assignTo + '$0 = ' + item.ident + '.f' + index + '[0];' +
1315
+ 'var ' + assignTo + '$1 = ' + item.ident + '.f' + index + '[1];';
1316
+ }
1317
+ });
1318
+ makeFuncLineActor('insertvalue', function(item) {
1319
+ assert(item.indexes.length == 1); // TODO: see extractvalue
1320
+ var ret = '(', ident;
1321
+ if (item.ident === '0') {
1322
+ item.ident = 'tempValue';
1323
+ ret += item.ident + ' = [' + makeEmptyStruct(item.type) + '], ';
1324
+ }
1325
+ return ret + item.ident + '.f' + item.indexes[0][0].text + ' = ' + finalizeLLVMParameter(item.value) + ', ' + item.ident + ')';
1326
+ });
1327
+ makeFuncLineActor('indirectbr', function(item) {
1328
+ var phiSets = calcPhiSets(item);
1329
+ var js = 'var ibr = ' + finalizeLLVMParameter(item.value) + ';\n';
1330
+ for (var targetLabel in phiSets) {
1331
+ js += 'if (' + makeComparison('ibr', '==', targetLabel, 'i32') + ') { ' + getPhiSetsForLabel(phiSets, targetLabel) + ' }\n';
1332
+ }
1333
+ return js + makeBranch('ibr', item.currLabelId, true);
1334
+ });
1335
+ makeFuncLineActor('alloca', function(item) {
1336
+ if (typeof item.allocatedIndex === 'number') {
1337
+ if (item.allocatedSize === 0) return ''; // This will not actually be shown - it's nativized
1338
+ return asmCoercion(getFastValue('sp', '+', item.allocatedIndex.toString()), 'i32');
1339
+ } else {
1340
+ return RuntimeGenerator.stackAlloc(getFastValue(calcAllocatedSize(item.allocatedType), '*', item.allocatedNum));
1341
+ }
1342
+ });
1343
+ makeFuncLineActor('va_arg', function(item) {
1344
+ assert(TARGET_LE32);
1345
+ var ident = item.value.ident;
1346
+ var move = Runtime.STACK_ALIGN;
1347
+
1348
+ // store current list offset in tempInt, advance list offset by STACK_ALIGN, return list entry stored at tempInt
1349
+ return '(tempInt=' + makeGetValue(ident, Runtime.QUANTUM_SIZE, '*') + ',' +
1350
+ makeSetValue(ident, Runtime.QUANTUM_SIZE, 'tempInt + ' + move, '*') + ',' +
1351
+ makeGetValue(makeGetValue(ident, 0, '*'), 'tempInt', item.type) + ')';
1352
+ });
1353
+
1354
+ makeFuncLineActor('mathop', processMathop);
1355
+
1356
+ makeFuncLineActor('bitcast', function(item) {
1357
+ var temp = {
1358
+ op: 'bitcast', variant: null, type: item.type,
1359
+ assignTo: item.assignTo,
1360
+ params: [item.params[0]] // XXX
1361
+ };
1362
+ var ret = processMathop(temp);
1363
+ if (!temp.assignTo) item.assignTo = null; // If the assign was stolen, propagate that
1364
+ return ret;
1365
+ });
1366
+
1367
+ function makeFunctionCall(ident, params, funcData, type, forceByPointer, hasReturn) {
1368
+ // We cannot compile assembly. See comment in intertyper.js:'Call'
1369
+ assert(ident != 'asm', 'Inline assembly cannot be compiled to JavaScript!');
1370
+
1371
+ if (ASM_JS && funcData.setjmpTable) forceByPointer = true; // in asm.js mode, we must do an invoke for each call
1372
+
1373
+ ident = Variables.resolveAliasToIdent(ident);
1374
+ var shortident = ident.slice(1);
1375
+ var simpleIdent = shortident;
1376
+ if (isLocalVar(ident)) {
1377
+ var callIdent = ident;
1378
+ } else {
1379
+ // Not a local var, check if in library
1380
+ var callIdent = LibraryManager.getRootIdent(simpleIdent);
1381
+ if (callIdent) {
1382
+ simpleIdent = callIdent; // ident may not be in library, if all there is is ident__inline, but in this case it is
1383
+ if (callIdent.indexOf('.') < 0) {
1384
+ callIdent = '_' + callIdent; // Not Math.*, so add the normal prefix
1385
+ }
1386
+ } else {
1387
+ callIdent = ident;
1388
+ }
1389
+ if (callIdent == '0') return 'abort(-2)';
1390
+ }
1391
+
1392
+ var args = [];
1393
+ var argsTypes = [];
1394
+ var varargs = [];
1395
+ var varargsTypes = [];
1396
+ var varargsByVals = {};
1397
+ var ignoreFunctionIndexizing = [];
1398
+ var useJSArgs = (simpleIdent + '__jsargs') in LibraryManager.library;
1399
+ var hasVarArgs = isVarArgsFunctionType(type);
1400
+ var normalArgs = (hasVarArgs && !useJSArgs) ? countNormalArgs(type, null, true) : -1;
1401
+ var byPointer = getVarData(funcData, ident);
1402
+ var byPointerForced = false;
1403
+
1404
+ if (forceByPointer && !byPointer) {
1405
+ byPointer = byPointerForced = true;
1406
+ }
1407
+
1408
+ params.forEach(function(param, i) {
1409
+ var val = finalizeParam(param);
1410
+ if (!hasVarArgs || useJSArgs || i < normalArgs) {
1411
+ args.push(val);
1412
+ argsTypes.push(param.type);
1413
+ } else {
1414
+ var size;
1415
+ if (param.byVal) {
1416
+ varargsByVals[varargs.length] = param.byVal;
1417
+ size = calcAllocatedSize(removeAllPointing(param.type));
1418
+ } else {
1419
+ size = Runtime.getNativeFieldSize(param.type);
1420
+ }
1421
+ size = Runtime.alignMemory(size, Runtime.STACK_ALIGN);
1422
+ varargs.push(val);
1423
+ varargs = varargs.concat(zeros(size-1));
1424
+ // TODO: replace concats like this with push
1425
+ varargsTypes.push(param.type);
1426
+ varargsTypes = varargsTypes.concat(zeros(size-1));
1427
+ }
1428
+ });
1429
+
1430
+ args = args.map(function(arg, i) { return indexizeFunctions(arg, argsTypes[i]) });
1431
+ if (ASM_JS) {
1432
+ if (shortident in Functions.libraryFunctions || simpleIdent in Functions.libraryFunctions || byPointerForced || funcData.setjmpTable) {
1433
+ args = args.map(function(arg, i) { return asmCoercion(arg, argsTypes[i]) });
1434
+ } else {
1435
+ args = args.map(function(arg, i) { return asmEnsureFloat(arg, argsTypes[i]) });
1436
+ }
1437
+ }
1438
+
1439
+ varargs = varargs.map(function(vararg, i) {
1440
+ if (ignoreFunctionIndexizing.indexOf(i) >= 0) return vararg;
1441
+ return vararg === 0 ? 0 : indexizeFunctions(vararg, varargsTypes[i])
1442
+ });
1443
+
1444
+ if (hasVarArgs && !useJSArgs) {
1445
+ if (varargs.length === 0) {
1446
+ varargs = [0];
1447
+ varargsTypes = ['i32'];
1448
+ }
1449
+ var offset = 0;
1450
+ varargs = '(tempInt=' + RuntimeGenerator.stackAlloc(varargs.length, ',') + ',' +
1451
+ varargs.map(function(arg, i) {
1452
+ var type = varargsTypes[i];
1453
+ if (type == 0) return null;
1454
+ arg = asmEnsureFloat(arg, type);
1455
+ var ret;
1456
+ assert(offset % Runtime.STACK_ALIGN == 0); // varargs must be aligned
1457
+ if (!varargsByVals[i]) {
1458
+ ret = makeSetValue(getFastValue('tempInt', '+', offset), 0, arg, type, null, null, Runtime.STACK_ALIGN, null, ',');
1459
+ offset += Runtime.alignMemory(Runtime.getNativeFieldSize(type), Runtime.STACK_ALIGN);
1460
+ } else {
1461
+ var size = calcAllocatedSize(removeAllPointing(type));
1462
+ ret = makeCopyValues(getFastValue('tempInt', '+', offset), arg, size, null, null, varargsByVals[i], ',');
1463
+ offset += Runtime.forceAlign(size, Runtime.STACK_ALIGN);
1464
+ }
1465
+ return ret;
1466
+ }).filter(function(arg) {
1467
+ return arg !== null;
1468
+ }).join(',') + ',tempInt)';
1469
+ varargs = asmCoercion(varargs, 'i32');
1470
+ }
1471
+
1472
+ args = args.concat(varargs);
1473
+ var argsText = args.join(', ');
1474
+
1475
+ // Inline if either we inline whenever we can (and we can), or if there is no noninlined version
1476
+ var inline = LibraryManager.library[simpleIdent + '__inline'];
1477
+ var nonInlined = simpleIdent in LibraryManager.library;
1478
+ if (inline && (INLINE_LIBRARY_FUNCS || !nonInlined)) {
1479
+ return inline.apply(null, args); // Warning: inlining does not prevent recalculation of the arguments. They should be simple identifiers
1480
+ }
1481
+
1482
+ if (ASM_JS && ident.indexOf('llvm_') >= 0) {
1483
+ // remove unneeded arguments in llvm intrinsic functions, which the asm sig can show us. this lets us alias memset with llvm.memset, we just
1484
+ // drop the final 2 args so things validate properly in asm
1485
+ var libsig = LibraryManager.library[simpleIdent + '__sig'];
1486
+ if (libsig) {
1487
+ assert(!hasVarArgs);
1488
+ while (libsig.length - 1 < args.length) {
1489
+ args.pop();
1490
+ argsTypes.pop();
1491
+ }
1492
+ }
1493
+ }
1494
+
1495
+ var returnType = 'void';
1496
+ if ((byPointer || ASM_JS) && hasReturn) {
1497
+ returnType = getReturnType(type);
1498
+ }
1499
+
1500
+ if (byPointer) {
1501
+ var sig = Functions.getSignature(returnType, argsTypes, hasVarArgs);
1502
+ if (ASM_JS) {
1503
+ assert(returnType.search(/\("'\[,/) == -1); // XXX need isFunctionType(type, out)
1504
+ if (!byPointerForced && !funcData.setjmpTable) {
1505
+ // normal asm function pointer call
1506
+ callIdent = '(' + callIdent + ')&{{{ FTM_' + sig + ' }}}'; // the function table mask is set in emscripten.py
1507
+ Functions.neededTables[sig] = 1;
1508
+ } else {
1509
+ // This is a call through an invoke_*, either a forced one, or a setjmp-required one
1510
+ // note: no need to update argsTypes at this point
1511
+ if (byPointerForced) Functions.unimplementedFunctions[callIdent] = sig;
1512
+ args.unshift(byPointerForced ? Functions.getIndex(callIdent, undefined, sig) : asmCoercion(callIdent, 'i32'));
1513
+ callIdent = 'invoke_' + sig;
1514
+ }
1515
+ } else if (SAFE_DYNCALLS) {
1516
+ assert(!ASM_JS, 'cannot emit safe dyncalls in asm');
1517
+ callIdent = '(tempInt=' + callIdent + ',tempInt < 0 || tempInt >= FUNCTION_TABLE.length-1 || !FUNCTION_TABLE[tempInt] ? abort("dyncall error: ' + sig + ' " + FUNCTION_TABLE_NAMES[tempInt]) : tempInt)';
1518
+ }
1519
+ if (!ASM_JS || (!byPointerForced && !funcData.setjmpTable)) callIdent = Functions.getTable(sig) + '[' + callIdent + ']';
1520
+ }
1521
+
1522
+ var ret = callIdent + '(' + args.join(', ') + ')';
1523
+ if (ASM_JS) { // TODO: do only when needed (library functions and Math.*?) XXX && simpleIdent in Functions.libraryFunctions) {
1524
+ ret = asmCoercion(ret, returnType);
1525
+ if (simpleIdent == 'abort' && funcData.returnType != 'void') {
1526
+ ret += '; return ' + asmCoercion('0', funcData.returnType); // special case: abort() can happen without return, breaking the return type of asm functions. ensure a return
1527
+ }
1528
+ }
1529
+
1530
+ if (ASM_JS && funcData.setjmpTable) {
1531
+ // check if a longjmp was done. If a setjmp happened, check if ours. If ours, go to a special label to handle it.
1532
+ // otherwise, just return - the call to us must also have been an invoke, so the setjmp propagates that way
1533
+ ret += '; if (((__THREW__|0) != 0) & ((threwValue|0) != 0)) { setjmpLabel = ' + asmCoercion('_testSetjmp(' + makeGetValue('__THREW__', 0, 'i32') + ', setjmpTable)', 'i32') + '; if ((setjmpLabel|0) > 0) { label = ' + SETJMP_LABEL + '; break } else return ' + (funcData.returnType != 'void' ? asmCoercion('0', funcData.returnType) : '') + ' } __THREW__ = threwValue = 0;\n';
1534
+ }
1535
+
1536
+ return ret;
1537
+ }
1538
+ makeFuncLineActor('getelementptr', function(item) { return finalizeLLVMFunctionCall(item) });
1539
+ makeFuncLineActor('call', function(item) {
1540
+ if (item.standalone && LibraryManager.isStubFunction(item.ident)) return ';';
1541
+ return makeFunctionCall(item.ident, item.params, item.funcData, item.type, false, !!item.assignTo || !item.standalone) + (item.standalone ? ';' : '');
1542
+ });
1543
+
1544
+ makeFuncLineActor('unreachable', function(item) {
1545
+ var ret = '';
1546
+ if (ASM_JS && item.funcData.returnType != 'void') ret = 'return ' + asmCoercion('0', item.funcData.returnType) + ';';
1547
+ if (ASSERTIONS) {
1548
+ ret = (ASM_JS ? 'abort()' : 'throw "Reached an unreachable!"') + ';' + ret;
1549
+ }
1550
+ return ret || ';';
1551
+ });
1552
+
1553
+ // Final combiner
1554
+
1555
+ function finalCombiner(items) {
1556
+ dprint('unparsedFunctions', 'Starting finalCombiner');
1557
+ var itemsDict = { type: [], GlobalVariableStub: [], functionStub: [], function: [], GlobalVariable: [], GlobalVariablePostSet: [] };
1558
+ items.forEach(function(item) {
1559
+ item.lines = null;
1560
+ var small = { intertype: item.intertype, JS: item.JS, ident: item.ident, dependencies: item.dependencies }; // Release memory
1561
+ itemsDict[small.intertype].push(small);
1562
+ });
1563
+ items = null;
1564
+
1565
+ var splitPostSets = splitter(itemsDict.GlobalVariablePostSet, function(x) { return x.ident && x.dependencies });
1566
+ itemsDict.GlobalVariablePostSet = splitPostSets.leftIn;
1567
+ var orderedPostSets = splitPostSets.splitOut;
1568
+
1569
+ var limit = orderedPostSets.length * orderedPostSets.length;
1570
+ for (var i = 0; i < orderedPostSets.length; i++) {
1571
+ for (var j = i+1; j < orderedPostSets.length; j++) {
1572
+ if (orderedPostSets[j].ident in orderedPostSets[i].dependencies) {
1573
+ var temp = orderedPostSets[i];
1574
+ orderedPostSets[i] = orderedPostSets[j];
1575
+ orderedPostSets[j] = temp;
1576
+ i--;
1577
+ limit--;
1578
+ assert(limit > 0, 'Could not sort postsets!');
1579
+ break;
1580
+ }
1581
+ }
1582
+ }
1583
+
1584
+ itemsDict.GlobalVariablePostSet = itemsDict.GlobalVariablePostSet.concat(orderedPostSets);
1585
+
1586
+ //
1587
+
1588
+ if (!mainPass) {
1589
+ if (phase == 'pre' && !Variables.generatedGlobalBase) {
1590
+ Variables.generatedGlobalBase = true;
1591
+ // Globals are done, here is the rest of static memory
1592
+ assert((TARGET_LE32 && Runtime.GLOBAL_BASE == 8) || (TARGET_X86 && Runtime.GLOBAL_BASE == 4)); // this is assumed in e.g. relocations for linkable modules
1593
+ print('STATIC_BASE = ' + Runtime.GLOBAL_BASE + ';\n');
1594
+ print('STATICTOP = STATIC_BASE + ' + Runtime.alignMemory(Variables.nextIndexedOffset) + ';\n');
1595
+ }
1596
+ var generated = itemsDict.function.concat(itemsDict.type).concat(itemsDict.GlobalVariableStub).concat(itemsDict.GlobalVariable);
1597
+ print(generated.map(function(item) { return item.JS; }).join('\n'));
1598
+
1599
+ if (phase == 'pre') {
1600
+ if (memoryInitialization.length > 0) {
1601
+ // apply postsets directly into the big memory initialization
1602
+ itemsDict.GlobalVariablePostSet = itemsDict.GlobalVariablePostSet.filter(function(item) {
1603
+ var m;
1604
+ if (m = /^HEAP([\dFU]+)\[([()>\d]+)\] *= *([()|\d{}\w_' ]+);?$/.exec(item.JS)) {
1605
+ var type = getTypeFromHeap(m[1]);
1606
+ var bytes = Runtime.getNativeTypeSize(type);
1607
+ var target = eval(m[2]) << log2(bytes);
1608
+ var value = m[3];
1609
+ try {
1610
+ value = eval(value);
1611
+ } catch(e) {
1612
+ // possibly function table {{{ FT_* }}} etc.
1613
+ if (value.indexOf('{{ ') < 0) return true;
1614
+ }
1615
+ writeInt8s(memoryInitialization, target - Runtime.GLOBAL_BASE, value, type);
1616
+ return false;
1617
+ }
1618
+ return true;
1619
+ });
1620
+ // write out the singleton big memory initialization value
1621
+ print('/* memory initializer */ ' + makePointer(memoryInitialization, null, 'ALLOC_NONE', 'i8', 'Runtime.GLOBAL_BASE', true));
1622
+ } else {
1623
+ print('/* no memory initializer */'); // test purposes
1624
+ }
1625
+
1626
+ // Define postsets. These will be run in ATINIT, right before global initializers (which might need the postsets). We cannot
1627
+ // run them now because the memory initializer might not have been applied yet.
1628
+ print('function runPostSets() {\n');
1629
+ print(itemsDict.GlobalVariablePostSet.map(function(item) { return item.JS }).join('\n'));
1630
+ print('}\n');
1631
+
1632
+ if (USE_TYPED_ARRAYS == 2) {
1633
+ print('var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8);\n');
1634
+ print('assert(tempDoublePtr % 8 == 0);\n');
1635
+ print('function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much\n');
1636
+ print(' HEAP8[tempDoublePtr] = HEAP8[ptr];\n');
1637
+ print(' HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\n');
1638
+ print(' HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\n');
1639
+ print(' HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\n');
1640
+ print('}\n');
1641
+ print('function copyTempDouble(ptr) {\n');
1642
+ print(' HEAP8[tempDoublePtr] = HEAP8[ptr];\n');
1643
+ print(' HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\n');
1644
+ print(' HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\n');
1645
+ print(' HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\n');
1646
+ print(' HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];\n');
1647
+ print(' HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];\n');
1648
+ print(' HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];\n');
1649
+ print(' HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];\n');
1650
+ print('}\n');
1651
+ }
1652
+ }
1653
+
1654
+ return;
1655
+ }
1656
+
1657
+ // Print out global variables and postsets TODO: batching
1658
+ if (phase == 'pre') {
1659
+ var legalizedI64sDefault = legalizedI64s;
1660
+ legalizedI64s = false;
1661
+
1662
+ var globalsData = analyzer(intertyper(data.unparsedGlobalss[0].lines, true), true);
1663
+
1664
+ if (!NAMED_GLOBALS) {
1665
+ sortGlobals(globalsData.globalVariables).forEach(function(g) {
1666
+ var ident = g.ident;
1667
+ if (!isIndexableGlobal(ident)) return;
1668
+ assert(Variables.nextIndexedOffset % Runtime.STACK_ALIGN == 0);
1669
+ Variables.indexedGlobals[ident] = Variables.nextIndexedOffset;
1670
+ Variables.nextIndexedOffset += Runtime.alignMemory(calcAllocatedSize(Variables.globals[ident].type));
1671
+ if (ident.substr(0, 5) == '__ZTV') { // leave room for null-terminating the vtable
1672
+ Variables.nextIndexedOffset += Runtime.alignMemory(QUANTUM_SIZE);
1673
+ }
1674
+ });
1675
+ }
1676
+ JSify(globalsData, true, Functions);
1677
+ globalsData = null;
1678
+ data.unparsedGlobalss = null;
1679
+
1680
+ var generated = itemsDict.functionStub.concat(itemsDict.GlobalVariablePostSet);
1681
+ generated.forEach(function(item) { print(indentify(item.JS || '', 2)); });
1682
+
1683
+ legalizedI64s = legalizedI64sDefault;
1684
+
1685
+ print('STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);\n');
1686
+ print('staticSealed = true; // seal the static portion of memory\n');
1687
+ print('STACK_MAX = STACK_BASE + ' + TOTAL_STACK + ';\n');
1688
+ print('DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX);\n');
1689
+ print('assert(DYNAMIC_BASE < TOTAL_MEMORY); // Stack must fit in TOTAL_MEMORY; allocations from here on may enlarge TOTAL_MEMORY\n');
1690
+
1691
+ if (asmLibraryFunctions.length > 0) {
1692
+ print('// ASM_LIBRARY FUNCTIONS');
1693
+ function fix(f) { // fix indenting to not confuse js optimizer
1694
+ f = f.substr(f.indexOf('f')); // remove initial spaces before 'function'
1695
+ f = f.substr(0, f.lastIndexOf('\n')+1); // remove spaces and last } XXX assumes function has multiple lines
1696
+ return f + '}'; // add unindented } to match function
1697
+ }
1698
+ print(asmLibraryFunctions.map(fix).join('\n'));
1699
+ }
1700
+
1701
+ } else {
1702
+ if (singlePhase) {
1703
+ assert(data.unparsedGlobalss[0].lines.length == 0, dump([phase, data.unparsedGlobalss]));
1704
+ assert(itemsDict.functionStub.length == 0, dump([phase, itemsDict.functionStub]));
1705
+ }
1706
+ }
1707
+
1708
+ if (abortExecution) throw 'Aborting compilation due to previous warnings';
1709
+
1710
+ if (phase == 'pre' || phase == 'funcs') {
1711
+ PassManager.serialize();
1712
+ return;
1713
+ }
1714
+
1715
+ // This is the main 'post' pass. Print out the generated code that we have here, together with the
1716
+ // rest of the output that we started to print out earlier (see comment on the
1717
+ // "Final shape that will be created").
1718
+ if (PRECISE_I64_MATH && Types.preciseI64MathUsed) {
1719
+ if (!INCLUDE_FULL_LIBRARY) {
1720
+ // first row are utilities called from generated code, second are needed from fastLong
1721
+ ['i64Add', 'i64Subtract', 'bitshift64Shl', 'bitshift64Lshr', 'bitshift64Ashr',
1722
+ 'llvm_ctlz_i32', 'llvm_cttz_i32'].forEach(function(func) {
1723
+ if (!Functions.libraryFunctions[func]) {
1724
+ print(processLibraryFunction(LibraryManager.library[func], func)); // must be first to be close to generated code
1725
+ Functions.implementedFunctions['_' + func] = LibraryManager.library[func + '__sig'];
1726
+ Functions.libraryFunctions[func] = 1;
1727
+ // limited dependency handling
1728
+ var deps = LibraryManager.library[func + '__deps'];
1729
+ if (deps) {
1730
+ deps.forEach(function(dep) {
1731
+ assert(typeof dep == 'function');
1732
+ var text = dep();
1733
+ assert(text.indexOf('\n') < 0);
1734
+ text = text.replace('ALLOC_STATIC', 'ALLOC_DYNAMIC');
1735
+ print('/* PRE_ASM */ ' + text + '\n');
1736
+ });
1737
+ }
1738
+ }
1739
+ });
1740
+ }
1741
+ print(read('fastLong.js'));
1742
+ print('// EMSCRIPTEN_END_FUNCS\n');
1743
+ print(read('long.js'));
1744
+ } else {
1745
+ print('// EMSCRIPTEN_END_FUNCS\n');
1746
+ print('// Warning: printing of i64 values may be slightly rounded! No deep i64 math used, so precise i64 code not included');
1747
+ print('var i64Math = null;');
1748
+ }
1749
+
1750
+ if (CORRUPTION_CHECK) {
1751
+ assert(!ASM_JS); // cannot monkeypatch asm!
1752
+ print(processMacros(read('corruptionCheck.js')));
1753
+ }
1754
+ if (HEADLESS) {
1755
+ print('if (!ENVIRONMENT_IS_WEB) {');
1756
+ print(read('headless.js').replace("'%s'", "'http://emscripten.org'").replace("'?%s'", "''").replace('%s,', 'null,').replace('%d', '0'));
1757
+ print('}');
1758
+ }
1759
+ if (RUNTIME_TYPE_INFO) {
1760
+ Types.cleanForRuntime();
1761
+ print('Runtime.typeInfo = ' + JSON.stringify(Types.types));
1762
+ print('Runtime.structMetadata = ' + JSON.stringify(Types.structMetadata));
1763
+ }
1764
+ var postFile = BUILD_AS_SHARED_LIB ? 'postamble_sharedlib.js' : 'postamble.js';
1765
+ var postParts = processMacros(preprocess(read(postFile))).split('{{GLOBAL_VARS}}');
1766
+ print(postParts[0]);
1767
+
1768
+ Functions.generateIndexing(); // done last, as it may rely on aliases set in postsets
1769
+
1770
+ // Load runtime-linked libraries
1771
+ RUNTIME_LINKED_LIBS.forEach(function(lib) {
1772
+ print('eval(Module["read"]("' + lib + '"))(' + Functions.getTable('x') + '.length, this);');
1773
+ });
1774
+
1775
+ print(postParts[1]);
1776
+
1777
+ var shellParts = read(shellFile).split('{{BODY}}');
1778
+ print(processMacros(preprocess(shellParts[1])));
1779
+ // Print out some useful metadata
1780
+ if (EMIT_GENERATED_FUNCTIONS || PGO) {
1781
+ var generatedFunctions = JSON.stringify(keys(Functions.implementedFunctions).filter(function(func) {
1782
+ return IGNORED_FUNCTIONS.indexOf(func.ident) < 0;
1783
+ }));
1784
+ if (PGO) {
1785
+ print('PGOMonitor.allGenerated = ' + generatedFunctions + ';\nremoveRunDependency("pgo");\n');
1786
+ }
1787
+ if (EMIT_GENERATED_FUNCTIONS) {
1788
+ print('// EMSCRIPTEN_GENERATED_FUNCTIONS: ' + generatedFunctions + '\n');
1789
+ }
1790
+ }
1791
+
1792
+ PassManager.serialize();
1793
+
1794
+ return null;
1795
+ }
1796
+
1797
+ // Data
1798
+
1799
+ if (mainPass) {
1800
+ substrate.addItems(data.functionStubs, 'FunctionStub');
1801
+ assert(data.functions.length == 0);
1802
+ } else {
1803
+ if (phase == 'pre') {
1804
+ // ensure there is a global ctors, for runPostSets
1805
+ if ('_llvm_global_ctors' in data.globalVariables) {
1806
+ data.globalVariables._llvm_global_ctors.ctors.unshift('runPostSets'); // run postsets right before global initializers
1807
+ hasCtors = true;
1808
+ } else {
1809
+ substrate.addItems([{
1810
+ intertype: 'GlobalVariableStub',
1811
+ ident: '_llvm_global_ctors',
1812
+ type: '[1 x { i32, void ()* }]',
1813
+ ctors: ["runPostSets"],
1814
+ }], 'GlobalVariable');
1815
+ }
1816
+ }
1817
+
1818
+ substrate.addItems(sortGlobals(data.globalVariables), 'GlobalVariable');
1819
+ substrate.addItems(data.aliass, 'Alias');
1820
+ substrate.addItems(data.functions, 'FunctionSplitter');
1821
+ }
1822
+
1823
+ finalCombiner(substrate.solve());
1824
+
1825
+ dprint('framework', 'Big picture: Finishing JSifier, main pass=' + mainPass);
1826
+ }
1827
+