webruby 0.2.2 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
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;