webruby 0.2.2 → 0.2.4

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 (245) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webruby/config.rb +4 -9
  3. data/lib/webruby/rake/files.rake +2 -2
  4. data/modules/emscripten/AUTHORS +9 -1
  5. data/modules/emscripten/CONTRIBUTING.markdown +5 -0
  6. data/modules/emscripten/ChangeLog +435 -0
  7. data/modules/emscripten/cmake/Modules/FindOpenAL.cmake +26 -0
  8. data/modules/emscripten/cmake/Platform/Emscripten.cmake +9 -2
  9. data/modules/emscripten/em++ +0 -2
  10. data/modules/emscripten/emcc +92 -32
  11. data/modules/emscripten/emlink.py +16 -13
  12. data/modules/emscripten/emmake +1 -1
  13. data/modules/emscripten/emrun +918 -0
  14. data/modules/emscripten/emrun.bat +2 -0
  15. data/modules/emscripten/emscripten.py +545 -20
  16. data/modules/emscripten/src/analyzer.js +6 -1
  17. data/modules/emscripten/src/compiler.js +25 -16
  18. data/modules/emscripten/src/emrun_postjs.js +20 -0
  19. data/modules/emscripten/{tests → src}/hello_world.js +0 -0
  20. data/modules/emscripten/src/intertyper.js +45 -16
  21. data/modules/emscripten/src/jsifier.js +78 -48
  22. data/modules/emscripten/src/library.js +381 -96
  23. data/modules/emscripten/src/library_browser.js +50 -53
  24. data/modules/emscripten/src/library_egl.js +66 -24
  25. data/modules/emscripten/src/library_fs.js +122 -90
  26. data/modules/emscripten/src/library_gl.js +739 -353
  27. data/modules/emscripten/src/library_glfw.js +9 -3
  28. data/modules/emscripten/src/library_glut.js +10 -5
  29. data/modules/emscripten/src/library_idbfs.js +14 -14
  30. data/modules/emscripten/src/library_memfs.js +65 -41
  31. data/modules/emscripten/src/library_nodefs.js +61 -9
  32. data/modules/emscripten/src/library_openal.js +4 -4
  33. data/modules/emscripten/src/library_path.js +9 -13
  34. data/modules/emscripten/src/library_sdl.js +301 -64
  35. data/modules/emscripten/src/library_sockfs.js +7 -5
  36. data/modules/emscripten/src/modules.js +62 -22
  37. data/modules/emscripten/src/parseTools.js +135 -102
  38. data/modules/emscripten/src/postamble.js +3 -4
  39. data/modules/emscripten/src/preamble.js +49 -29
  40. data/modules/emscripten/src/proxyClient.js +1 -1
  41. data/modules/emscripten/src/proxyWorker.js +10 -10
  42. data/modules/emscripten/src/relooper/Relooper.cpp +15 -4
  43. data/modules/emscripten/src/runtime.js +32 -8
  44. data/modules/emscripten/src/settings.js +25 -8
  45. data/modules/emscripten/src/shell.html +6 -3
  46. data/modules/emscripten/src/shell.js +13 -11
  47. data/modules/emscripten/src/simd.js +602 -432
  48. data/modules/emscripten/src/struct_info.json +22 -2
  49. data/modules/emscripten/src/utility.js +32 -17
  50. data/modules/emscripten/system/include/SDL/SDL_events.h +1 -0
  51. data/modules/emscripten/system/include/compat/ctype.h +17 -0
  52. data/modules/emscripten/system/include/compat/wchar.h +23 -0
  53. data/modules/emscripten/system/include/compat/wctype.h +23 -0
  54. data/modules/emscripten/system/include/emscripten/emmintrin.h +87 -0
  55. data/modules/emscripten/system/include/emscripten/emscripten.h +30 -4
  56. data/modules/emscripten/system/include/emscripten/vector.h +29 -1
  57. data/modules/emscripten/system/include/emscripten/xmmintrin.h +131 -0
  58. data/modules/emscripten/system/include/libcxx/CREDITS.TXT +9 -1
  59. data/modules/emscripten/system/include/libcxx/__bit_reference +8 -8
  60. data/modules/emscripten/system/include/libcxx/__config +95 -17
  61. data/modules/emscripten/system/include/libcxx/__debug +25 -4
  62. data/modules/emscripten/system/include/libcxx/__functional_03 +7 -7
  63. data/modules/emscripten/system/include/libcxx/__functional_base +169 -9
  64. data/modules/emscripten/system/include/libcxx/__functional_base_03 +1 -1
  65. data/modules/emscripten/system/include/libcxx/__hash_table +25 -25
  66. data/modules/emscripten/system/include/libcxx/__locale +21 -19
  67. data/modules/emscripten/system/include/libcxx/__mutex_base +2 -33
  68. data/modules/emscripten/system/include/libcxx/__split_buffer +9 -9
  69. data/modules/emscripten/system/include/libcxx/__std_stream +14 -0
  70. data/modules/emscripten/system/include/libcxx/__tree +35 -26
  71. data/modules/emscripten/system/include/libcxx/__tuple +15 -15
  72. data/modules/emscripten/system/include/libcxx/__tuple_03 +2 -2
  73. data/modules/emscripten/system/include/libcxx/__undef_min_max +8 -0
  74. data/modules/emscripten/system/include/libcxx/algorithm +121 -110
  75. data/modules/emscripten/system/include/libcxx/array +15 -15
  76. data/modules/emscripten/system/include/libcxx/bitset +4 -4
  77. data/modules/emscripten/system/include/libcxx/chrono +51 -17
  78. data/modules/emscripten/system/include/libcxx/cmath +25 -23
  79. data/modules/emscripten/system/include/libcxx/codecvt +21 -18
  80. data/modules/emscripten/system/include/libcxx/complex +48 -7
  81. data/modules/emscripten/system/include/libcxx/cstddef +1 -1
  82. data/modules/emscripten/system/include/libcxx/cstdio +8 -1
  83. data/modules/emscripten/system/include/libcxx/cstdlib +1 -1
  84. data/modules/emscripten/system/include/libcxx/cwchar +1 -1
  85. data/modules/emscripten/system/include/libcxx/deque +26 -12
  86. data/modules/emscripten/system/include/libcxx/dynarray +311 -0
  87. data/modules/emscripten/system/include/libcxx/exception +4 -4
  88. data/modules/emscripten/system/include/libcxx/ext/__hash +3 -3
  89. data/modules/emscripten/system/include/libcxx/ext/hash_map +19 -15
  90. data/modules/emscripten/system/include/libcxx/ext/hash_set +7 -3
  91. data/modules/emscripten/system/include/libcxx/forward_list +33 -7
  92. data/modules/emscripten/system/include/libcxx/fstream +4 -4
  93. data/modules/emscripten/system/include/libcxx/functional +200 -170
  94. data/modules/emscripten/system/include/libcxx/future +83 -39
  95. data/modules/emscripten/system/include/libcxx/initializer_list +24 -11
  96. data/modules/emscripten/system/include/libcxx/iomanip +147 -0
  97. data/modules/emscripten/system/include/libcxx/ios +24 -16
  98. data/modules/emscripten/system/include/libcxx/iosfwd +19 -19
  99. data/modules/emscripten/system/include/libcxx/istream +13 -8
  100. data/modules/emscripten/system/include/libcxx/iterator +108 -417
  101. data/modules/emscripten/system/include/libcxx/limits +8 -4
  102. data/modules/emscripten/system/include/libcxx/list +28 -8
  103. data/modules/emscripten/system/include/libcxx/locale +153 -390
  104. data/modules/emscripten/system/include/libcxx/map +280 -100
  105. data/modules/emscripten/system/include/libcxx/memory +49 -97
  106. data/modules/emscripten/system/include/libcxx/mutex +2 -2
  107. data/modules/emscripten/system/include/libcxx/new +43 -14
  108. data/modules/emscripten/system/include/libcxx/numeric +2 -2
  109. data/modules/emscripten/system/include/libcxx/optional +697 -0
  110. data/modules/emscripten/system/include/libcxx/ostream +17 -8
  111. data/modules/emscripten/system/include/libcxx/queue +5 -5
  112. data/modules/emscripten/system/include/libcxx/random +53 -51
  113. data/modules/emscripten/system/include/libcxx/ratio +11 -11
  114. data/modules/emscripten/system/include/libcxx/readme.txt +1 -1
  115. data/modules/emscripten/system/include/libcxx/regex +23 -20
  116. data/modules/emscripten/system/include/libcxx/scoped_allocator +1 -1
  117. data/modules/emscripten/system/include/libcxx/set +166 -2
  118. data/modules/emscripten/system/include/libcxx/shared_mutex +419 -0
  119. data/modules/emscripten/system/include/libcxx/sstream +4 -4
  120. data/modules/emscripten/system/include/libcxx/stack +3 -3
  121. data/modules/emscripten/system/include/libcxx/streambuf +5 -5
  122. data/modules/emscripten/system/include/libcxx/string +372 -324
  123. data/modules/emscripten/system/include/libcxx/support/ibm/limits.h +99 -0
  124. data/modules/emscripten/system/include/libcxx/support/ibm/support.h +54 -0
  125. data/modules/emscripten/system/include/libcxx/support/ibm/xlocale.h +326 -0
  126. data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +6 -6
  127. data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +15 -15
  128. data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +2 -0
  129. data/modules/emscripten/system/include/libcxx/support/win32/support.h +6 -1
  130. data/modules/emscripten/system/include/libcxx/system_error +14 -8
  131. data/modules/emscripten/system/include/libcxx/thread +7 -8
  132. data/modules/emscripten/system/include/libcxx/tuple +29 -88
  133. data/modules/emscripten/system/include/libcxx/type_traits +253 -209
  134. data/modules/emscripten/system/include/libcxx/typeindex +3 -3
  135. data/modules/emscripten/system/include/libcxx/unordered_map +162 -101
  136. data/modules/emscripten/system/include/libcxx/unordered_set +79 -2
  137. data/modules/emscripten/system/include/libcxx/utility +20 -20
  138. data/modules/emscripten/system/include/libcxx/valarray +23 -23
  139. data/modules/emscripten/system/include/libcxx/vector +114 -91
  140. data/modules/emscripten/system/lib/libc/musl/src/regex/regcomp.c +3352 -0
  141. data/modules/emscripten/system/lib/libc/musl/src/regex/regerror.c +35 -0
  142. data/modules/emscripten/system/lib/libc/musl/src/regex/regexec.c +1011 -0
  143. data/modules/emscripten/system/lib/libc/musl/src/regex/tre-mem.c +158 -0
  144. data/modules/emscripten/system/lib/libc/musl/src/regex/tre.h +231 -0
  145. data/modules/emscripten/system/lib/libcextra.symbols +7 -0
  146. data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +9 -1
  147. data/modules/emscripten/system/lib/libcxx/algorithm.cpp +1 -0
  148. data/modules/emscripten/system/lib/libcxx/debug.cpp +66 -42
  149. data/modules/emscripten/system/lib/libcxx/exception.cpp +88 -16
  150. data/modules/emscripten/system/lib/libcxx/future.cpp +6 -0
  151. data/modules/emscripten/system/lib/libcxx/ios.cpp +7 -2
  152. data/modules/emscripten/system/lib/libcxx/iostream.cpp +8 -8
  153. data/modules/emscripten/system/lib/libcxx/locale.cpp +38 -11
  154. data/modules/emscripten/system/lib/libcxx/mutex.cpp +3 -0
  155. data/modules/emscripten/system/lib/libcxx/new.cpp +44 -10
  156. data/modules/emscripten/system/lib/libcxx/optional.cpp +25 -0
  157. data/modules/emscripten/system/lib/libcxx/random.cpp +26 -0
  158. data/modules/emscripten/system/lib/libcxx/readme.txt +1 -1
  159. data/modules/emscripten/system/lib/libcxx/shared_mutex.cpp +101 -0
  160. data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +11 -7
  161. data/modules/emscripten/system/lib/libcxx/string.cpp +3 -1
  162. data/modules/emscripten/system/lib/libcxx/strstream.cpp +7 -7
  163. data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +12 -13
  164. data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +33 -36
  165. data/modules/emscripten/system/lib/libcxx/symbols +187 -168
  166. data/modules/emscripten/system/lib/libcxx/system_error.cpp +1 -0
  167. data/modules/emscripten/system/lib/libcxx/thread.cpp +7 -3
  168. data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +9 -6
  169. data/modules/emscripten/system/lib/libcxx/valarray.cpp +2 -0
  170. data/modules/emscripten/third_party/lzma.js/doit.bat +4 -0
  171. data/modules/emscripten/third_party/lzma.js/doit.sh +9 -2
  172. data/modules/emscripten/tools/cache.py +5 -7
  173. data/modules/emscripten/tools/cache.pyc +0 -0
  174. data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +7 -0
  175. data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +9 -1
  176. data/modules/emscripten/tools/eliminator/eliminator-test-output.js +3 -0
  177. data/modules/emscripten/tools/eliminator/eliminator-test.js +9 -1
  178. data/modules/emscripten/tools/file_packager.py +93 -50
  179. data/modules/emscripten/tools/js-optimizer.js +98 -48
  180. data/modules/emscripten/tools/js_optimizer.py +4 -4
  181. data/modules/emscripten/tools/js_optimizer.pyc +0 -0
  182. data/modules/emscripten/tools/jsrun.py +1 -1
  183. data/modules/emscripten/tools/jsrun.pyc +0 -0
  184. data/modules/emscripten/tools/response_file.py +6 -0
  185. data/modules/emscripten/tools/response_file.pyc +0 -0
  186. data/modules/emscripten/tools/settings_template_readonly.py +2 -0
  187. data/modules/emscripten/tools/shared.py +88 -34
  188. data/modules/emscripten/tools/shared.pyc +0 -0
  189. data/modules/emscripten/tools/split.py +21 -13
  190. data/modules/mruby/build_config.rb +7 -1
  191. data/modules/mruby/doc/compile/README.md +5 -9
  192. data/modules/mruby/include/mrbconf.h +5 -2
  193. data/modules/mruby/include/mruby/array.h +1 -0
  194. data/modules/mruby/include/mruby/compile.h +2 -4
  195. data/modules/mruby/include/mruby/dump.h +7 -16
  196. data/modules/mruby/include/mruby/hash.h +1 -1
  197. data/modules/mruby/include/mruby/irep.h +14 -2
  198. data/modules/mruby/include/mruby/khash.h +8 -7
  199. data/modules/mruby/include/mruby/string.h +1 -0
  200. data/modules/mruby/include/mruby/value.h +5 -2
  201. data/modules/mruby/include/mruby.h +12 -13
  202. data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +16 -6
  203. data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +18 -30
  204. data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +21 -0
  205. data/modules/mruby/mrbgems/mruby-math/src/math.c +1 -1
  206. data/modules/mruby/mrbgems/mruby-random/src/random.c +144 -47
  207. data/modules/mruby/mrbgems/mruby-random/test/random.rb +44 -0
  208. data/modules/mruby/mrbgems/mruby-struct/src/struct.c +5 -5
  209. data/modules/mruby/mrblib/numeric.rb +99 -33
  210. data/modules/mruby/src/array.c +11 -4
  211. data/modules/mruby/src/backtrace.c +2 -2
  212. data/modules/mruby/src/class.c +49 -30
  213. data/modules/mruby/src/codegen.c +131 -79
  214. data/modules/mruby/src/debug.c +1 -1
  215. data/modules/mruby/src/dump.c +213 -163
  216. data/modules/mruby/src/error.c +17 -17
  217. data/modules/mruby/src/error.h +1 -1
  218. data/modules/mruby/src/etc.c +10 -0
  219. data/modules/mruby/src/gc.c +35 -17
  220. data/modules/mruby/src/hash.c +5 -5
  221. data/modules/mruby/src/kernel.c +36 -14
  222. data/modules/mruby/src/load.c +238 -296
  223. data/modules/mruby/src/numeric.c +18 -98
  224. data/modules/mruby/src/object.c +3 -5
  225. data/modules/mruby/src/parse.y +63 -56
  226. data/modules/mruby/src/proc.c +8 -5
  227. data/modules/mruby/src/re.h +0 -1
  228. data/modules/mruby/src/state.c +65 -27
  229. data/modules/mruby/src/string.c +3 -31
  230. data/modules/mruby/src/symbol.c +3 -3
  231. data/modules/mruby/src/variable.c +12 -5
  232. data/modules/mruby/src/vm.c +90 -72
  233. data/modules/mruby/tasks/mruby_build.rake +10 -1
  234. data/modules/mruby/tasks/toolchains/gcc.rake +12 -2
  235. data/modules/mruby/tasks/toolchains/{vs2012.rake → visualcpp.rake} +1 -1
  236. data/modules/mruby/test/driver.c +3 -3
  237. data/modules/mruby/test/t/array.rb +5 -5
  238. data/modules/mruby/test/t/class.rb +14 -1
  239. data/modules/mruby/test/t/kernel.rb +4 -0
  240. data/modules/mruby/test/t/module.rb +4 -4
  241. data/modules/mruby/test/t/nameerror.rb +1 -1
  242. data/modules/mruby/tools/mrbc/mrbc.c +23 -17
  243. data/modules/mruby/travis_config.rb +10 -1
  244. metadata +28 -5
  245. data/modules/mruby/tasks/toolchains/vs2010.rake +0 -3
@@ -169,7 +169,8 @@
169
169
  {
170
170
  "file": "libc/time.h",
171
171
  "defines": [
172
- ["li", "CLOCKS_PER_SEC"]
172
+ ["li", "CLOCKS_PER_SEC"],
173
+ "CLOCK_REALTIME"
173
174
  ],
174
175
  "structs": {
175
176
  "timezone": [
@@ -290,7 +291,11 @@
290
291
  "AI_CANONNAME",
291
292
  "AI_PASSIVE",
292
293
  "NI_NAMEREQD",
293
- "EAI_NONAME",
294
+ "EAI_NONAME",
295
+ "EAI_AGAIN",
296
+ "EAI_FAIL",
297
+ "EAI_MEMORY",
298
+ "EAI_SYSTEM",
294
299
  "EAI_SOCKTYPE",
295
300
  "EAI_BADFLAGS"
296
301
  ],
@@ -961,6 +966,21 @@
961
966
  "x",
962
967
  "y"
963
968
  ],
969
+ "SDL_JoyAxisEvent": [
970
+ "type",
971
+ "which",
972
+ "axis",
973
+ "padding1",
974
+ "padding2",
975
+ "value"
976
+ ],
977
+ "SDL_JoyButtonEvent": [
978
+ "type",
979
+ "which",
980
+ "button",
981
+ "state",
982
+ "padding1"
983
+ ],
964
984
  "SDL_ResizeEvent": [
965
985
  "type",
966
986
  "w",
@@ -68,7 +68,7 @@ function warn(a, msg) {
68
68
  a = false;
69
69
  }
70
70
  if (!a) {
71
- printErr('Warning: ' + msg);
71
+ printErr('warning: ' + msg);
72
72
  }
73
73
  }
74
74
 
@@ -81,7 +81,7 @@ function warnOnce(a, msg) {
81
81
  if (!warnOnce.msgs) warnOnce.msgs = {};
82
82
  if (msg in warnOnce.msgs) return;
83
83
  warnOnce.msgs[msg] = true;
84
- printErr('Warning: ' + msg);
84
+ printErr('warning: ' + msg);
85
85
  }
86
86
  }
87
87
 
@@ -89,7 +89,7 @@ var abortExecution = false;
89
89
 
90
90
  function error(msg) {
91
91
  abortExecution = true;
92
- printErr('Error: ' + msg);
92
+ printErr('error: ' + msg);
93
93
  }
94
94
 
95
95
  function dedup(items, ident) {
@@ -222,7 +222,8 @@ function mergeInto(obj, other) {
222
222
  }
223
223
 
224
224
  function isNumber(x) {
225
- return x == parseFloat(x) || (typeof x == 'string' && x.match(/^-?\d+$/));
225
+ // XXX this does not handle 0xabc123 etc. We should likely also do x == parseInt(x) (which handles that), and remove hack |// handle 0x... as well|
226
+ return x == parseFloat(x) || (typeof x == 'string' && x.match(/^-?\d+$/)) || x === 'NaN';
226
227
  }
227
228
 
228
229
  function isArray(x) {
@@ -345,13 +346,19 @@ function sortedJsonCompare(x, y) {
345
346
  return true;
346
347
  }
347
348
 
349
+ function escapeJSONKey(x) {
350
+ if (/^[\d\w_]+$/.exec(x) || x[0] === '"' || x[0] === "'") return x;
351
+ assert(x.indexOf("'") < 0, 'cannot have internal single quotes in keys: ' + x);
352
+ return "'" + x + "'";
353
+ }
354
+
348
355
  function stringifyWithFunctions(obj) {
349
356
  if (typeof obj === 'function') return obj.toString();
350
357
  if (obj === null || typeof obj !== 'object') return JSON.stringify(obj);
351
358
  if (isArray(obj)) {
352
359
  return '[' + obj.map(stringifyWithFunctions).join(',') + ']';
353
360
  } else {
354
- return '{' + keys(obj).map(function(key) { return key + ':' + stringifyWithFunctions(obj[key]) }).join(',') + '}';
361
+ return '{' + keys(obj).map(function(key) { return escapeJSONKey(key) + ':' + stringifyWithFunctions(obj[key]) }).join(',') + '}';
355
362
  }
356
363
  }
357
364
 
@@ -375,22 +382,30 @@ function ceilPowerOfTwo(x) {
375
382
  }
376
383
 
377
384
  function Benchmarker() {
378
- var starts = {}, times = {}, counts = {};
385
+ var totals = {};
386
+ var ids = [], lastTime = 0;
379
387
  this.start = function(id) {
380
- //printErr(['+', id, starts[id]]);
381
- starts[id] = (starts[id] || []).concat([Date.now()]);
388
+ var now = Date.now();
389
+ if (ids.length > 0) {
390
+ totals[ids[ids.length-1]] += now - lastTime;
391
+ }
392
+ lastTime = now;
393
+ ids.push(id);
394
+ totals[id] = totals[id] || 0;
382
395
  };
383
396
  this.stop = function(id) {
384
- //printErr(['-', id, starts[id]]);
385
- assert(starts[id], new Error().stack);
386
- times[id] = (times[id] || 0) + Date.now() - starts[id].pop();
387
- counts[id] = (counts[id] || 0) + 1;
388
- this.print();
397
+ var now = Date.now();
398
+ assert(id === ids[ids.length-1]);
399
+ totals[id] += now - lastTime;
400
+ lastTime = now;
401
+ ids.pop();
389
402
  };
390
- this.print = function() {
391
- var ids = keys(times);
392
- ids.sort(function(a, b) { return times[b] - times[a] });
393
- printErr('times: \n' + ids.map(function(id) { return id + ' : ' + counts[id] + ' times, ' + times[id] + ' ms' }).join('\n'));
403
+ this.print = function(text) {
404
+ var ids = keys(totals);
405
+ if (ids.length > 0) {
406
+ ids.sort(function(a, b) { return totals[b] - totals[a] });
407
+ printErr(text + ' times: \n' + ids.map(function(id) { return id + ' : ' + totals[id] + ' ms' }).join('\n'));
408
+ }
394
409
  };
395
410
  };
396
411
 
@@ -55,6 +55,7 @@ extern "C" {
55
55
  */
56
56
  typedef enum
57
57
  {
58
+ SDL_NOEVENT = 0,
58
59
  SDL_FIRSTEVENT = 0, /**< Unused (do not remove) */
59
60
 
60
61
  /* Application events */
@@ -14,4 +14,21 @@
14
14
 
15
15
  #include_next <ctype.h>
16
16
 
17
+ /* We undef these until libcxx is fixed. Without this,
18
+ some things can fail to compile correctly, like
19
+ Boost. Issue #1716. */
20
+
21
+ #undef isalpha
22
+ #undef isblank
23
+ #undef iscntrl
24
+ #undef isdigit
25
+ #undef isgraph
26
+ #undef islower
27
+ #undef isprint
28
+ #undef ispunct
29
+ #undef isspace
30
+ #undef isupper
31
+ #undef isxdigit
32
+ #undef isctype
33
+
17
34
  #endif /* _COMPAT_CTYPE_H_ */
@@ -0,0 +1,23 @@
1
+ #ifndef _COMPAT_WCHAR_H_
2
+ #define _COMPAT_WCHAR_H_
3
+
4
+ #include_next <wchar.h>
5
+
6
+ /* We undef these until libcxx is fixed. Without this,
7
+ some things can fail to compile correctly, like
8
+ Boost. Issue #1716. */
9
+
10
+ #undef iswalpha
11
+ #undef iswblank
12
+ #undef iswcntrl
13
+ #undef iswdigit
14
+ #undef iswgraph
15
+ #undef iswlower
16
+ #undef iswprint
17
+ #undef iswpunct
18
+ #undef iswspace
19
+ #undef iswupper
20
+ #undef iswxdigit
21
+ #undef iswctype
22
+
23
+ #endif /* _COMPAT_WCHAR_H_ */
@@ -0,0 +1,23 @@
1
+ #ifndef _COMPAT_WCTYPE_H_
2
+ #define _COMPAT_WCTYPE_H_
3
+
4
+ #include_next <wctype.h>
5
+
6
+ /* We undef these until libcxx is fixed. Without this,
7
+ some things can fail to compile correctly, like
8
+ Boost. Issue #1716. */
9
+
10
+ #undef iswalpha
11
+ #undef iswblank
12
+ #undef iswcntrl
13
+ #undef iswdigit
14
+ #undef iswgraph
15
+ #undef iswlower
16
+ #undef iswprint
17
+ #undef iswpunct
18
+ #undef iswspace
19
+ #undef iswupper
20
+ #undef iswxdigit
21
+ #undef iswctype
22
+
23
+ #endif /* _COMPAT_WCTYPE_H_ */
@@ -0,0 +1,87 @@
1
+ #include <xmmintrin.h>
2
+
3
+ typedef int32x4 __m128i;
4
+
5
+ static __inline__ __m128i __attribute__((__always_inline__))
6
+ _mm_set_epi32(int z, int y, int x, int w)
7
+ {
8
+ return (__m128i){ w, x, y, z };
9
+ }
10
+
11
+ static __inline__ __m128i __attribute__((__always_inline__))
12
+ _mm_set1_epi32(int w)
13
+ {
14
+ return (__m128i){ w, w, w, w };
15
+ }
16
+
17
+ static __inline__ __m128i __attribute__((__always_inline__))
18
+ _mm_setzero_si128()
19
+ {
20
+ return (__m128i){ 0, 0, 0, 0 };
21
+ }
22
+
23
+ static __inline__ void __attribute__((__always_inline__))
24
+ _mm_store_si128(__m128i *p, __m128i a)
25
+ {
26
+ *p = a;
27
+ }
28
+
29
+ static __inline__ __m128i __attribute__((__always_inline__))
30
+ _mm_and_si128(__m128i a, __m128i b)
31
+ {
32
+ return a & b;
33
+ }
34
+
35
+ static __inline__ __m128i __attribute__((__always_inline__))
36
+ _mm_andnot_si128(__m128i a, __m128i b)
37
+ {
38
+ return ~a & b;
39
+ }
40
+
41
+ static __inline__ __m128i __attribute__((__always_inline__))
42
+ _mm_or_si128(__m128i a, __m128i b)
43
+ {
44
+ return a | b;
45
+ }
46
+
47
+ static __inline__ __m128i __attribute__((__always_inline__))
48
+ _mm_xor_si128(__m128i a, __m128i b)
49
+ {
50
+ return a ^ b;
51
+ }
52
+
53
+ static __inline__ __m128i __attribute__((__always_inline__))
54
+ _mm_add_epi32(__m128i a, __m128i b)
55
+ {
56
+ return a + b;
57
+ }
58
+
59
+ static __inline__ __m128i __attribute__((__always_inline__))
60
+ _mm_sub_epi32(__m128i a, __m128i b)
61
+ {
62
+ return a - b;
63
+ }
64
+
65
+ static __inline__ __m128 __attribute__((__always_inline__))
66
+ _mm_castsi128_ps(__m128i a)
67
+ {
68
+ return emscripten_int32x4_bitsToFloat32x4(a);
69
+ }
70
+
71
+ static __inline__ __m128 __attribute__((__always_inline__))
72
+ _mm_cvtepi32_ps(__m128i a)
73
+ {
74
+ return emscripten_int32x4_toFloat32x4(a);
75
+ }
76
+
77
+ static __inline__ __m128i __attribute__((__always_inline__))
78
+ _mm_castps_si128(__m128 a)
79
+ {
80
+ return emscripten_float32x4_bitsToInt32x4(a);
81
+ }
82
+
83
+ static __inline__ __m128i __attribute__((__always_inline__))
84
+ _mm_cvtps_epi32(__m128 a)
85
+ {
86
+ return emscripten_float32x4_toInt32x4(a);
87
+ }
@@ -24,13 +24,37 @@ extern "C" {
24
24
  * EM_ASM(window.alert('hai'));
25
25
  *
26
26
  * This also works with asm.js, as it outlines the code (it
27
- * does a function call to reach it).
27
+ * does a function call to reach it). It supports newlines,
28
28
  *
29
- * Note: double-quotes (") are not supported, but you can use
30
- * single-quotes (') in js anyhow.
29
+ * EM_ASM(
30
+ * window.alert('hai'));
31
+ * window.alert('bai'));
32
+ * )
33
+ *
34
+ * Notes: Double-quotes (") are not supported, but you can use
35
+ * single-quotes (') in js anyhow.
36
+ *
37
+ * You can't access C variables with EM_ASM, nor receive
38
+ * a value back. use EM_ASM_INT or EM_ASM_DOUBLE for that
31
39
  */
32
40
  #define EM_ASM(...) emscripten_asm_const(#__VA_ARGS__)
33
41
 
42
+ /*
43
+ * Input-output versions of EM_ASM. EM_ASM_INT receives arguments of
44
+ * either int or double type and returns an int; EM_ASM_DOUBLE
45
+ * receives similar arguments (int or double) but returns a double.
46
+ * Arguments arrive as $0, $1 etc; output value should be returned:
47
+ *
48
+ * int x = EM_ASM_INT({
49
+ * console.log('I received: ' + [$0, $1]);
50
+ * return $0 + $1;
51
+ * }, calc(), otherCalc());
52
+ *
53
+ * Note the {,}
54
+ */
55
+ #define EM_ASM_INT(code, ...) emscripten_asm_const_int(#code, __VA_ARGS__)
56
+ #define EM_ASM_DOUBLE(code, ...) emscripten_asm_const_double(#code, __VA_ARGS__)
57
+
34
58
  /*
35
59
  * Forces LLVM to not dead-code-eliminate a function. Note that
36
60
  * you still need to use EXPORTED_FUNCTIONS so it stays alive
@@ -203,7 +227,7 @@ void emscripten_get_canvas_size(int *width, int *height, int *isFullscreen);
203
227
  * absolute time, and is only meaningful in comparison to
204
228
  * other calls to this function. The unit is ms.
205
229
  */
206
- float emscripten_get_now();
230
+ double emscripten_get_now();
207
231
 
208
232
  /*
209
233
  * Simple random number generation in [0, 1), maps to Math.random().
@@ -420,6 +444,8 @@ void emscripten_jcache_printf_(...); /* internal use */
420
444
 
421
445
  /* Helper API for EM_ASM - do not call this yourself */
422
446
  void emscripten_asm_const(const char *code);
447
+ int emscripten_asm_const_int(const char *code, ...);
448
+ double emscripten_asm_const_double(const char *code, ...);
423
449
 
424
450
  #ifdef __cplusplus
425
451
  }
@@ -2,5 +2,33 @@
2
2
  // Support for the JS SIMD API proposal, https://github.com/johnmccutchan/ecmascript_simd
3
3
 
4
4
  typedef float float32x4 __attribute__((__vector_size__(16)));
5
- typedef unsigned int uint32x4 __attribute__((__vector_size__(16)));
5
+ typedef unsigned int int32x4 __attribute__((__vector_size__(16)));
6
+
7
+ #ifdef __cplusplus
8
+ extern "C" {
9
+ #endif
10
+
11
+ unsigned int emscripten_float32x4_signmask(float32x4 x);
12
+
13
+ float32x4 emscripten_float32x4_min(float32x4 a, float32x4 b);
14
+ float32x4 emscripten_float32x4_max(float32x4 a, float32x4 b);
15
+ float32x4 emscripten_float32x4_sqrt(float32x4 a);
16
+ float32x4 emscripten_float32x4_lessThan(float32x4 a, float32x4 b);
17
+ float32x4 emscripten_float32x4_lessThanOrEqual(float32x4 a, float32x4 b);
18
+ float32x4 emscripten_float32x4_equal(float32x4 a, float32x4 b);
19
+ float32x4 emscripten_float32x4_greaterThanOrEqual(float32x4 a, float32x4 b);
20
+ float32x4 emscripten_float32x4_greaterThan(float32x4 a, float32x4 b);
21
+ float32x4 emscripten_float32x4_and(float32x4 a, float32x4 b);
22
+ float32x4 emscripten_float32x4_andNot(float32x4 a, float32x4 b);
23
+ float32x4 emscripten_float32x4_or(float32x4 a, float32x4 b);
24
+ float32x4 emscripten_float32x4_xor(float32x4 a, float32x4 b);
25
+
26
+ float32x4 emscripten_int32x4_bitsToFloat32x4(int32x4 a);
27
+ float32x4 emscripten_int32x4_toFloat32x4(int32x4 a);
28
+ int32x4 emscripten_float32x4_bitsToInt32x4(float32x4 a);
29
+ int32x4 emscripten_float32x4_toInt32x4(float32x4 a);
30
+
31
+ #ifdef __cplusplus
32
+ }
33
+ #endif
6
34
 
@@ -0,0 +1,131 @@
1
+ #include <vector.h>
2
+
3
+ typedef float32x4 __m128;
4
+
5
+ static __inline__ __m128 __attribute__((__always_inline__))
6
+ _mm_set_ps(float z, float y, float x, float w)
7
+ {
8
+ return (__m128){ w, x, y, z };
9
+ }
10
+
11
+ static __inline__ __m128 __attribute__((__always_inline__))
12
+ _mm_set1_ps(float w)
13
+ {
14
+ return (__m128){ w, w, w, w };
15
+ }
16
+
17
+ static __inline__ __m128 __attribute__((__always_inline__))
18
+ _mm_setzero_ps(void)
19
+ {
20
+ return (__m128){ 0.0, 0.0, 0.0, 0.0 };
21
+ }
22
+
23
+ static __inline__ void __attribute__((__always_inline__))
24
+ _mm_store_ps(float *p, __m128 a)
25
+ {
26
+ *(__m128 *)p = a;
27
+ }
28
+
29
+ static __inline__ int __attribute__((__always_inline__))
30
+ _mm_movemask_ps(__m128 a)
31
+ {
32
+ return emscripten_float32x4_signmask(a);
33
+ }
34
+
35
+ static __inline__ __m128 __attribute__((__always_inline__))
36
+ _mm_add_ps(__m128 a, __m128 b)
37
+ {
38
+ return a + b;
39
+ }
40
+
41
+ static __inline__ __m128 __attribute__((__always_inline__))
42
+ _mm_sub_ps(__m128 a, __m128 b)
43
+ {
44
+ return a - b;
45
+ }
46
+
47
+ static __inline__ __m128 __attribute__((__always_inline__))
48
+ _mm_mul_ps(__m128 a, __m128 b)
49
+ {
50
+ return a * b;
51
+ }
52
+
53
+ static __inline__ __m128 __attribute__((__always_inline__))
54
+ _mm_div_ps(__m128 a, __m128 b)
55
+ {
56
+ return a / b;
57
+ }
58
+
59
+ static __inline__ __m128 __attribute__((__always_inline__))
60
+ _mm_min_ps(__m128 a, __m128 b)
61
+ {
62
+ return emscripten_float32x4_min(a, b);
63
+ }
64
+
65
+ static __inline__ __m128 __attribute__((__always_inline__))
66
+ _mm_max_ps(__m128 a, __m128 b)
67
+ {
68
+ return emscripten_float32x4_max(a, b);
69
+ }
70
+
71
+ static __inline__ __m128 __attribute__((__always_inline__))
72
+ _mm_sqrt_ps(__m128 a)
73
+ {
74
+ return emscripten_float32x4_sqrt(a);
75
+ }
76
+
77
+ /* TODO: shuffles */
78
+
79
+ static __inline__ __m128 __attribute__((__always_inline__))
80
+ _mm_cmplt_ps(__m128 a, __m128 b)
81
+ {
82
+ return emscripten_float32x4_lessThan(a, b);
83
+ }
84
+
85
+ static __inline__ __m128 __attribute__((__always_inline__))
86
+ _mm_cmple_ps(__m128 a, __m128 b)
87
+ {
88
+ return emscripten_float32x4_lessThanOrEqual(a, b);
89
+ }
90
+
91
+ static __inline__ __m128 __attribute__((__always_inline__))
92
+ _mm_cmpeq_ps(__m128 a, __m128 b)
93
+ {
94
+ return emscripten_float32x4_equal(a, b);
95
+ }
96
+
97
+ static __inline__ __m128 __attribute__((__always_inline__))
98
+ _mm_cmpge_ps(__m128 a, __m128 b)
99
+ {
100
+ return emscripten_float32x4_greaterThanOrEqual(a, b);
101
+ }
102
+
103
+ static __inline__ __m128 __attribute__((__always_inline__))
104
+ _mm_cmpgt_ps(__m128 a, __m128 b)
105
+ {
106
+ return emscripten_float32x4_greaterThan(a, b);
107
+ }
108
+
109
+ static __inline__ __m128 __attribute__((__always_inline__))
110
+ _mm_and_ps(__m128 a, __m128 b)
111
+ {
112
+ return emscripten_float32x4_and(a, b);
113
+ }
114
+
115
+ static __inline__ __m128 __attribute__((__always_inline__))
116
+ _mm_andnot_ps(__m128 a, __m128 b)
117
+ {
118
+ return emscripten_float32x4_andNot(a, b);
119
+ }
120
+
121
+ static __inline__ __m128 __attribute__((__always_inline__))
122
+ _mm_or_ps(__m128 a, __m128 b)
123
+ {
124
+ return emscripten_float32x4_or(a, b);
125
+ }
126
+
127
+ static __inline__ __m128 __attribute__((__always_inline__))
128
+ _mm_xor_ps(__m128 a, __m128 b)
129
+ {
130
+ return emscripten_float32x4_xor(a, b);
131
+ }
@@ -31,7 +31,7 @@ D: FreeBSD and Solaris ports, libcxxrt support, some atomics work.
31
31
  N: Marshall Clow
32
32
  E: mclow.lists@gmail.com
33
33
  E: marshall@idio.com
34
- D: Minor patches and bug fixes.
34
+ D: C++14 support, patches and bug fixes.
35
35
 
36
36
  N: Bill Fisher
37
37
  E: william.w.fisher@gmail.com
@@ -76,6 +76,10 @@ N: Bjorn Reese
76
76
  E: breese@users.sourceforge.net
77
77
  D: Initial regex prototype
78
78
 
79
+ N: Nico Rieck
80
+ E: nico.rieck@gmail.com
81
+ D: Windows fixes
82
+
79
83
  N: Jonathan Sauer
80
84
  D: Minor patches, mostly related to constexpr
81
85
 
@@ -105,6 +109,10 @@ N: Zhang Xiongpang
105
109
  E: zhangxiongpang@gmail.com
106
110
  D: Minor patches and bug fixes.
107
111
 
112
+ N: Xing Xue
113
+ E: xingxue@ca.ibm.com
114
+ D: AIX port
115
+
108
116
  N: Zhihao Yuan
109
117
  E: lichray@gmail.com
110
118
  D: Standard compatibility fixes.
@@ -40,7 +40,7 @@ class __bit_reference
40
40
  __storage_pointer __seg_;
41
41
  __storage_type __mask_;
42
42
 
43
- #if defined(__clang__)
43
+ #if defined(__clang__) || defined(__IBMCPP__) || defined(_LIBCPP_MSVC)
44
44
  friend typename _Cp::__self;
45
45
  #else
46
46
  friend class _Cp::__self;
@@ -82,7 +82,7 @@ class __bit_reference<_Cp, false>
82
82
  };
83
83
 
84
84
  template <class _Cp>
85
- _LIBCPP_INLINE_VISIBILITY inline
85
+ inline _LIBCPP_INLINE_VISIBILITY
86
86
  void
87
87
  swap(__bit_reference<_Cp> __x, __bit_reference<_Cp> __y) _NOEXCEPT
88
88
  {
@@ -92,7 +92,7 @@ swap(__bit_reference<_Cp> __x, __bit_reference<_Cp> __y) _NOEXCEPT
92
92
  }
93
93
 
94
94
  template <class _Cp, class _Dp>
95
- _LIBCPP_INLINE_VISIBILITY inline
95
+ inline _LIBCPP_INLINE_VISIBILITY
96
96
  void
97
97
  swap(__bit_reference<_Cp> __x, __bit_reference<_Dp> __y) _NOEXCEPT
98
98
  {
@@ -102,7 +102,7 @@ swap(__bit_reference<_Cp> __x, __bit_reference<_Dp> __y) _NOEXCEPT
102
102
  }
103
103
 
104
104
  template <class _Cp>
105
- _LIBCPP_INLINE_VISIBILITY inline
105
+ inline _LIBCPP_INLINE_VISIBILITY
106
106
  void
107
107
  swap(__bit_reference<_Cp> __x, bool& __y) _NOEXCEPT
108
108
  {
@@ -112,7 +112,7 @@ swap(__bit_reference<_Cp> __x, bool& __y) _NOEXCEPT
112
112
  }
113
113
 
114
114
  template <class _Cp>
115
- _LIBCPP_INLINE_VISIBILITY inline
115
+ inline _LIBCPP_INLINE_VISIBILITY
116
116
  void
117
117
  swap(bool& __x, __bit_reference<_Cp> __y) _NOEXCEPT
118
118
  {
@@ -130,7 +130,7 @@ class __bit_const_reference
130
130
  __storage_pointer __seg_;
131
131
  __storage_type __mask_;
132
132
 
133
- #if defined(__clang__)
133
+ #if defined(__clang__) || defined(__IBMCPP__) || defined(_LIBCPP_MSVC)
134
134
  friend typename _Cp::__self;
135
135
  #else
136
136
  friend class _Cp::__self;
@@ -379,7 +379,7 @@ __fill_n_true(__bit_iterator<_Cp, false> __first, typename _Cp::size_type __n)
379
379
  }
380
380
 
381
381
  template <class _Cp>
382
- _LIBCPP_INLINE_VISIBILITY inline
382
+ inline _LIBCPP_INLINE_VISIBILITY
383
383
  void
384
384
  fill_n(__bit_iterator<_Cp, false> __first, typename _Cp::size_type __n, bool __value_)
385
385
  {
@@ -1222,7 +1222,7 @@ private:
1222
1222
  __bit_iterator(__storage_pointer __s, unsigned __ctz) _NOEXCEPT
1223
1223
  : __seg_(__s), __ctz_(__ctz) {}
1224
1224
 
1225
- #if defined(__clang__)
1225
+ #if defined(__clang__) || defined(__IBMCPP__) || defined(_LIBCPP_MSVC)
1226
1226
  friend typename _Cp::__self;
1227
1227
  #else
1228
1228
  friend class _Cp::__self;