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
@@ -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' ) {