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
@@ -7,6 +7,12 @@
7
7
  //
8
8
  //===----------------------------------------------------------------------===//
9
9
 
10
+ #if defined(_WIN32)
11
+ // Must be defined before including stdlib.h to enable rand_s().
12
+ #define _CRT_RAND_S
13
+ #include <stdio.h>
14
+ #endif
15
+
10
16
  #include "random"
11
17
  #include "system_error"
12
18
 
@@ -19,6 +25,25 @@
19
25
 
20
26
  _LIBCPP_BEGIN_NAMESPACE_STD
21
27
 
28
+ #if defined(_WIN32)
29
+ random_device::random_device(const string&)
30
+ {
31
+ }
32
+
33
+ random_device::~random_device()
34
+ {
35
+ }
36
+
37
+ unsigned
38
+ random_device::operator()()
39
+ {
40
+ unsigned r;
41
+ errno_t err = rand_s(&r);
42
+ if (err)
43
+ __throw_system_error(err, "random_device rand_s failed.");
44
+ return r;
45
+ }
46
+ #else
22
47
  random_device::random_device(const string& __token)
23
48
  : __f_(open(__token.c_str(), O_RDONLY))
24
49
  {
@@ -38,6 +63,7 @@ random_device::operator()()
38
63
  read(__f_, &r, sizeof(r));
39
64
  return r;
40
65
  }
66
+ #endif // defined(_WIN32)
41
67
 
42
68
  double
43
69
  random_device::entropy() const _NOEXCEPT
@@ -1 +1 @@
1
- These files are from libc++, svn revision 187959, 2013-08-08.
1
+ These files are from libc++, svn revision 194185, 2013-11-07.
@@ -0,0 +1,101 @@
1
+ //===---------------------- shared_mutex.cpp ------------------------------===//
2
+ //
3
+ // The LLVM Compiler Infrastructure
4
+ //
5
+ // This file is dual licensed under the MIT and the University of Illinois Open
6
+ // Source Licenses. See LICENSE.TXT for details.
7
+ //
8
+ //===----------------------------------------------------------------------===//
9
+
10
+ #define _LIBCPP_BUILDING_SHARED_MUTEX
11
+ #include "shared_mutex"
12
+
13
+ _LIBCPP_BEGIN_NAMESPACE_STD
14
+
15
+ shared_mutex::shared_mutex()
16
+ : __state_(0)
17
+ {
18
+ }
19
+
20
+ // Exclusive ownership
21
+
22
+ void
23
+ shared_mutex::lock()
24
+ {
25
+ unique_lock<mutex> lk(__mut_);
26
+ while (__state_ & __write_entered_)
27
+ __gate1_.wait(lk);
28
+ __state_ |= __write_entered_;
29
+ while (__state_ & __n_readers_)
30
+ __gate2_.wait(lk);
31
+ }
32
+
33
+ bool
34
+ shared_mutex::try_lock()
35
+ {
36
+ unique_lock<mutex> lk(__mut_);
37
+ if (__state_ == 0)
38
+ {
39
+ __state_ = __write_entered_;
40
+ return true;
41
+ }
42
+ return false;
43
+ }
44
+
45
+ void
46
+ shared_mutex::unlock()
47
+ {
48
+ lock_guard<mutex> _(__mut_);
49
+ __state_ = 0;
50
+ __gate1_.notify_all();
51
+ }
52
+
53
+ // Shared ownership
54
+
55
+ void
56
+ shared_mutex::lock_shared()
57
+ {
58
+ unique_lock<mutex> lk(__mut_);
59
+ while ((__state_ & __write_entered_) || (__state_ & __n_readers_) == __n_readers_)
60
+ __gate1_.wait(lk);
61
+ unsigned num_readers = (__state_ & __n_readers_) + 1;
62
+ __state_ &= ~__n_readers_;
63
+ __state_ |= num_readers;
64
+ }
65
+
66
+ bool
67
+ shared_mutex::try_lock_shared()
68
+ {
69
+ unique_lock<mutex> lk(__mut_);
70
+ unsigned num_readers = __state_ & __n_readers_;
71
+ if (!(__state_ & __write_entered_) && num_readers != __n_readers_)
72
+ {
73
+ ++num_readers;
74
+ __state_ &= ~__n_readers_;
75
+ __state_ |= num_readers;
76
+ return true;
77
+ }
78
+ return false;
79
+ }
80
+
81
+ void
82
+ shared_mutex::unlock_shared()
83
+ {
84
+ lock_guard<mutex> _(__mut_);
85
+ unsigned num_readers = (__state_ & __n_readers_) - 1;
86
+ __state_ &= ~__n_readers_;
87
+ __state_ |= num_readers;
88
+ if (__state_ & __write_entered_)
89
+ {
90
+ if (num_readers == 0)
91
+ __gate2_.notify_one();
92
+ }
93
+ else
94
+ {
95
+ if (num_readers == __n_readers_ - 1)
96
+ __gate1_.notify_one();
97
+ }
98
+ }
99
+
100
+
101
+ _LIBCPP_END_NAMESPACE_STD
@@ -28,7 +28,9 @@
28
28
 
29
29
  // Note: optimize for size
30
30
 
31
+ #if ! defined(_LIBCPP_MSVC)
31
32
  #pragma GCC visibility push(hidden)
33
+ #endif
32
34
 
33
35
  namespace
34
36
  {
@@ -47,9 +49,9 @@ private:
47
49
  count_t& count() const _NOEXCEPT {return (count_t&)(*(str_ - sizeof(count_t)));}
48
50
  public:
49
51
  explicit __libcpp_nmstr(const char* msg);
50
- __libcpp_nmstr(const __libcpp_nmstr& s) _LIBCPP_CANTTHROW;
51
- __libcpp_nmstr& operator=(const __libcpp_nmstr& s) _LIBCPP_CANTTHROW;
52
- ~__libcpp_nmstr() _LIBCPP_CANTTHROW;
52
+ __libcpp_nmstr(const __libcpp_nmstr& s) _NOEXCEPT;
53
+ __libcpp_nmstr& operator=(const __libcpp_nmstr& s) _NOEXCEPT;
54
+ ~__libcpp_nmstr();
53
55
  const char* c_str() const _NOEXCEPT {return str_;}
54
56
  };
55
57
 
@@ -65,14 +67,14 @@ __libcpp_nmstr::__libcpp_nmstr(const char* msg)
65
67
  }
66
68
 
67
69
  inline
68
- __libcpp_nmstr::__libcpp_nmstr(const __libcpp_nmstr& s)
70
+ __libcpp_nmstr::__libcpp_nmstr(const __libcpp_nmstr& s) _NOEXCEPT
69
71
  : str_(s.str_)
70
72
  {
71
73
  __sync_add_and_fetch(&count(), 1);
72
74
  }
73
75
 
74
76
  __libcpp_nmstr&
75
- __libcpp_nmstr::operator=(const __libcpp_nmstr& s)
77
+ __libcpp_nmstr::operator=(const __libcpp_nmstr& s) _NOEXCEPT
76
78
  {
77
79
  const char* p = str_;
78
80
  str_ = s.str_;
@@ -91,7 +93,9 @@ __libcpp_nmstr::~__libcpp_nmstr()
91
93
 
92
94
  }
93
95
 
96
+ #if ! defined(_LIBCPP_MSVC)
94
97
  #pragma GCC visibility pop
98
+ #endif
95
99
 
96
100
  namespace std // purposefully not using versioning namespace
97
101
  {
@@ -123,7 +127,7 @@ logic_error::operator=(const logic_error& le) _NOEXCEPT
123
127
  return *this;
124
128
  }
125
129
 
126
- #ifndef _LIBCPPABI_VERSION
130
+ #if !defined(_LIBCPPABI_VERSION) && !defined(LIBSTDCXX)
127
131
 
128
132
  logic_error::~logic_error() _NOEXCEPT
129
133
  {
@@ -167,7 +171,7 @@ runtime_error::operator=(const runtime_error& le) _NOEXCEPT
167
171
  return *this;
168
172
  }
169
173
 
170
- #ifndef _LIBCPPABI_VERSION
174
+ #if !defined(_LIBCPPABI_VERSION) && !defined(LIBSTDCXX)
171
175
 
172
176
  runtime_error::~runtime_error() _NOEXCEPT
173
177
  {
@@ -7,6 +7,8 @@
7
7
  //
8
8
  //===----------------------------------------------------------------------===//
9
9
 
10
+ #define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__;
11
+
10
12
  #include "string"
11
13
  #include "cstdlib"
12
14
  #include "cwchar"
@@ -89,7 +91,7 @@ inline
89
91
  int
90
92
  as_integer(const string& func, const string& s, size_t* idx, int base )
91
93
  {
92
- // Use long as no Stantard string to integer exists.
94
+ // Use long as no Standard string to integer exists.
93
95
  long r = as_integer_helper<long>( func, s, idx, base, strtol );
94
96
  if (r < numeric_limits<int>::min() || numeric_limits<int>::max() < r)
95
97
  throw_from_string_out_of_range(func);
@@ -156,13 +156,13 @@ strstreambuf::overflow(int_type __c)
156
156
  {
157
157
  if ((__strmode_ & __dynamic) == 0 || (__strmode_ & __frozen) != 0)
158
158
  return int_type(EOF);
159
- streamsize old_size = (epptr() ? epptr() : egptr()) - eback();
160
- streamsize new_size = max<streamsize>(__alsize_, 2*old_size);
159
+ size_t old_size = static_cast<size_t> ((epptr() ? epptr() : egptr()) - eback());
160
+ size_t new_size = max<size_t>(static_cast<size_t>(__alsize_), 2*old_size);
161
161
  if (new_size == 0)
162
162
  new_size = __default_alsize;
163
163
  char* buf = nullptr;
164
164
  if (__palloc_)
165
- buf = static_cast<char*>(__palloc_(static_cast<size_t>(new_size)));
165
+ buf = static_cast<char*>(__palloc_(new_size));
166
166
  else
167
167
  buf = new char[new_size];
168
168
  if (buf == nullptr)
@@ -229,8 +229,8 @@ strstreambuf::pos_type
229
229
  strstreambuf::seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __which)
230
230
  {
231
231
  off_type __p(-1);
232
- bool pos_in = __which & ios::in;
233
- bool pos_out = __which & ios::out;
232
+ bool pos_in = (__which & ios::in) != 0;
233
+ bool pos_out = (__which & ios::out) != 0;
234
234
  bool legal = false;
235
235
  switch (__way)
236
236
  {
@@ -287,8 +287,8 @@ strstreambuf::pos_type
287
287
  strstreambuf::seekpos(pos_type __sp, ios_base::openmode __which)
288
288
  {
289
289
  off_type __p(-1);
290
- bool pos_in = __which & ios::in;
291
- bool pos_out = __which & ios::out;
290
+ bool pos_in = (__which & ios::in) != 0;
291
+ bool pos_out = (__which & ios::out) != 0;
292
292
  if (pos_in || pos_out)
293
293
  {
294
294
  if (!((pos_in && gptr() == nullptr) || (pos_out && pptr() == nullptr)))
@@ -8,9 +8,8 @@
8
8
  //
9
9
  //===----------------------------------------------------------------------===//
10
10
 
11
- #include "support/win32/locale_win32.h"
11
+ #include <locale>
12
12
  #include <cstdarg> // va_start, va_end
13
- #include <cwchar> // mbstate_t
14
13
 
15
14
  // FIXME: base currently unused. Needs manual work to construct the new locale
16
15
  locale_t newlocale( int mask, const char * locale, locale_t /*base*/ )
@@ -34,38 +33,38 @@ lconv *localeconv_l( locale_t loc )
34
33
  __locale_raii __current( uselocale(loc), uselocale );
35
34
  return localeconv();
36
35
  }
37
- size_t mbrlen_l( const char *__restrict__ s, size_t n,
38
- mbstate_t *__restrict__ ps, locale_t loc )
36
+ size_t mbrlen_l( const char *__restrict s, size_t n,
37
+ mbstate_t *__restrict ps, locale_t loc )
39
38
  {
40
39
  __locale_raii __current( uselocale(loc), uselocale );
41
40
  return mbrlen( s, n, ps );
42
41
  }
43
- size_t mbsrtowcs_l( wchar_t *__restrict__ dst, const char **__restrict__ src,
44
- size_t len, mbstate_t *__restrict__ ps, locale_t loc )
42
+ size_t mbsrtowcs_l( wchar_t *__restrict dst, const char **__restrict src,
43
+ size_t len, mbstate_t *__restrict ps, locale_t loc )
45
44
  {
46
45
  __locale_raii __current( uselocale(loc), uselocale );
47
46
  return mbsrtowcs( dst, src, len, ps );
48
47
  }
49
- size_t wcrtomb_l( char *__restrict__ s, wchar_t wc, mbstate_t *__restrict__ ps,
48
+ size_t wcrtomb_l( char *__restrict s, wchar_t wc, mbstate_t *__restrict ps,
50
49
  locale_t loc )
51
50
  {
52
51
  __locale_raii __current( uselocale(loc), uselocale );
53
52
  return wcrtomb( s, wc, ps );
54
53
  }
55
- size_t mbrtowc_l( wchar_t *__restrict__ pwc, const char *__restrict__ s,
56
- size_t n, mbstate_t *__restrict__ ps, locale_t loc )
54
+ size_t mbrtowc_l( wchar_t *__restrict pwc, const char *__restrict s,
55
+ size_t n, mbstate_t *__restrict ps, locale_t loc )
57
56
  {
58
57
  __locale_raii __current( uselocale(loc), uselocale );
59
58
  return mbrtowc( pwc, s, n, ps );
60
59
  }
61
- size_t mbsnrtowcs_l( wchar_t *__restrict__ dst, const char **__restrict__ src,
62
- size_t nms, size_t len, mbstate_t *__restrict__ ps, locale_t loc )
60
+ size_t mbsnrtowcs_l( wchar_t *__restrict dst, const char **__restrict src,
61
+ size_t nms, size_t len, mbstate_t *__restrict ps, locale_t loc )
63
62
  {
64
63
  __locale_raii __current( uselocale(loc), uselocale );
65
64
  return mbsnrtowcs( dst, src, nms, len, ps );
66
65
  }
67
- size_t wcsnrtombs_l( char *__restrict__ dst, const wchar_t **__restrict__ src,
68
- size_t nwc, size_t len, mbstate_t *__restrict__ ps, locale_t loc )
66
+ size_t wcsnrtombs_l( char *__restrict dst, const wchar_t **__restrict src,
67
+ size_t nwc, size_t len, mbstate_t *__restrict ps, locale_t loc )
69
68
  {
70
69
  __locale_raii __current( uselocale(loc), uselocale );
71
70
  return wcsnrtombs( dst, src, nwc, len, ps );
@@ -14,14 +14,7 @@
14
14
  #include <cstdio> // vsprintf, vsnprintf
15
15
  #include <cstring> // strcpy, wcsncpy
16
16
  #include <cwchar> // mbstate_t
17
- #include <memory> // unique_ptr
18
17
 
19
- namespace { // Private
20
-
21
- struct free_deleter {
22
- inline void operator()(char* p) { free(p); }
23
- };
24
- }
25
18
  // Some of these functions aren't standard or if they conform, the name does not.
26
19
 
27
20
  int asprintf(char **sptr, const char *__restrict format, ...)
@@ -29,44 +22,44 @@ int asprintf(char **sptr, const char *__restrict format, ...)
29
22
  va_list ap;
30
23
  va_start(ap, format);
31
24
  int result;
32
- #ifndef _LIBCPP_NO_EXCEPTIONS
33
- try {
34
- #endif
35
- result = vasprintf(sptr, format, ap);
36
- #ifndef _LIBCPP_NO_EXCEPTIONS
37
- } catch( ... ) {
38
- va_end(ap);
39
- throw;
40
- }
41
- #endif
25
+ result = vasprintf(sptr, format, ap);
42
26
  va_end(ap);
43
27
  return result;
44
28
  }
45
29
 
46
- // Like sprintf, but when return value >= 0 it returns a pointer to a malloc'd string in *sptr.
30
+ // Like sprintf, but when return value >= 0 it returns
31
+ // a pointer to a malloc'd string in *sptr.
47
32
  // If return >= 0, use free to delete *sptr.
48
33
  int vasprintf( char **sptr, const char *__restrict format, va_list ap )
49
34
  {
50
35
  *sptr = NULL;
51
- int count = _vsnprintf( NULL, 0, format, ap ); // Query the buffer size required.
52
- if( count >= 0 ) {
53
- std::unique_ptr<char, free_deleter> p( static_cast<char*>(malloc(count+1)) );
54
- if ( ! p )
55
- return -1;
56
- if ( vsnprintf( p.get(), count+1, format, ap ) == count ) // We should have used exactly what was required.
57
- *sptr = p.release();
58
- else // Otherwise something is wrong, likely a bug in vsnprintf. If so free the memory and report the error.
59
- return -1; // Pointer will get automaticlaly deleted.
36
+ // Query the count required.
37
+ int count = _vsnprintf( NULL, 0, format, ap );
38
+ if (count < 0)
39
+ return count;
40
+ size_t buffer_size = static_cast<size_t>(count) + 1;
41
+ char* p = static_cast<char*>(malloc(buffer_size));
42
+ if ( ! p )
43
+ return -1;
44
+ // If we haven't used exactly what was required, something is wrong.
45
+ // Maybe bug in vsnprintf. Report the error and return.
46
+ if (_vsnprintf(p, buffer_size, format, ap) != count) {
47
+ free(p);
48
+ return -1;
60
49
  }
61
-
50
+ // All good. This is returning memory to the caller not freeing it.
51
+ *sptr = p;
62
52
  return count;
63
53
  }
64
54
 
65
- // Returns >= 0: the number of wide characters found in the multi byte sequence src (of src_size_bytes),
66
- // that fit in the buffer dst (of max_dest_chars elements size). The count returned excludes the null terminator.
67
- // When dst is NULL, no characters are copied and no "out" parameters are updated.
55
+ // Returns >= 0: the number of wide characters found in the
56
+ // multi byte sequence src (of src_size_bytes), that fit in the buffer dst
57
+ // (of max_dest_chars elements size). The count returned excludes the
58
+ // null terminator. When dst is NULL, no characters are copied
59
+ // and no "out" parameters are updated.
68
60
  // Returns (size_t) -1: an incomplete sequence encountered.
69
- // Leaves *src pointing the next character to convert or NULL if a null character was converted from *src.
61
+ // Leaves *src pointing the next character to convert or NULL
62
+ // if a null character was converted from *src.
70
63
  size_t mbsnrtowcs( wchar_t *__restrict dst, const char **__restrict src,
71
64
  size_t src_size_bytes, size_t max_dest_chars, mbstate_t *__restrict ps )
72
65
  {
@@ -112,10 +105,13 @@ size_t mbsnrtowcs( wchar_t *__restrict dst, const char **__restrict src,
112
105
  }
113
106
 
114
107
  // Converts max_source_chars from the wide character buffer pointer to by *src,
115
- // into the multi byte character sequence buffer stored at dst which must be dst_size_bytes bytes in size.
116
- // Returns >= 0: the number of bytes in the sequence sequence converted frome *src, excluding the null terminator.
108
+ // into the multi byte character sequence buffer stored at dst which must be
109
+ // dst_size_bytes bytes in size.
110
+ // Returns >= 0: the number of bytes in the sequence sequence
111
+ // converted frome *src, excluding the null terminator.
117
112
  // Returns size_t(-1) if an error occurs, also sets errno.
118
- // If dst is NULL dst_size_bytes is ignored and no bytes are copied to dst and no "out" parameters are updated.
113
+ // If dst is NULL dst_size_bytes is ignored and no bytes are copied to dst
114
+ // and no "out" parameters are updated.
119
115
  size_t wcsnrtombs( char *__restrict dst, const wchar_t **__restrict src,
120
116
  size_t max_source_chars, size_t dst_size_bytes, mbstate_t *__restrict ps )
121
117
  {
@@ -138,7 +134,8 @@ size_t wcsnrtombs( char *__restrict dst, const wchar_t **__restrict src,
138
134
  result = wcrtomb_s( &char_size, dst + dest_converted, dest_remaining, c, ps);
139
135
  else
140
136
  result = wcrtomb_s( &char_size, NULL, 0, c, ps);
141
- // If result is zero there is no error and char_size contains the size of the multi-byte-sequence converted.
137
+ // If result is zero there is no error and char_size contains the
138
+ // size of the multi-byte-sequence converted.
142
139
  // Otherwise result indicates an errno type error.
143
140
  if ( result == no_error ) {
144
141
  if ( c == L'\0' ) {