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
@@ -93,10 +93,12 @@ public:
93
93
  typedef typename Codecvt::state_type state_type;
94
94
  typedef typename wide_string::traits_type::int_type int_type;
95
95
 
96
- wstring_convert(Codecvt* pcvt = new Codecvt);
96
+ explicit wstring_convert(Codecvt* pcvt = new Codecvt); // explicit in C++14
97
97
  wstring_convert(Codecvt* pcvt, state_type state);
98
- wstring_convert(const byte_string& byte_err,
98
+ explicit wstring_convert(const byte_string& byte_err, // explicit in C++14
99
99
  const wide_string& wide_err = wide_string());
100
+ wstring_convert(const wstring_convert&) = delete; // C++14
101
+ wstring_convert & operator=(const wstring_convert &) = delete; // C++14
100
102
  ~wstring_convert();
101
103
 
102
104
  wide_string from_bytes(char byte);
@@ -109,7 +111,7 @@ public:
109
111
  byte_string to_bytes(const wide_string& wstr);
110
112
  byte_string to_bytes(const Elem* first, const Elem* last);
111
113
 
112
- size_t converted() const;
114
+ size_t converted() const; // noexcept in C++14
113
115
  state_type state() const;
114
116
  };
115
117
 
@@ -120,9 +122,12 @@ class wbuffer_convert
120
122
  public:
121
123
  typedef typename Tr::state_type state_type;
122
124
 
123
- wbuffer_convert(streambuf* bytebuf = 0, Codecvt* pcvt = new Codecvt,
124
- state_type state = state_type());
125
-
125
+ explicit wbuffer_convert(streambuf* bytebuf = 0, Codecvt* pcvt = new Codecvt,
126
+ state_type state = state_type()); // explicit in C++14
127
+ wbuffer_convert(const wbuffer_convert&) = delete; // C++14
128
+ wbuffer_convert & operator=(const wbuffer_convert &) = delete; // C++14
129
+ ~wbuffer_convert(); // C++14
130
+
126
131
  streambuf* rdbuf() const;
127
132
  streambuf* rdbuf(streambuf* bytebuf);
128
133
 
@@ -186,7 +191,7 @@ template <class charT> class messages_byname;
186
191
  #endif
187
192
  #include <cstdlib>
188
193
  #include <ctime>
189
- #ifdef _LIBCPP_MSVCRT
194
+ #if defined(_LIBCPP_MSVCRT) || defined(__MINGW32__)
190
195
  #include <support/win32/locale_win32.h>
191
196
  #else // _LIBCPP_MSVCRT
192
197
  #include <nl_types.h>
@@ -211,7 +216,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
211
216
  #else
212
217
  # define _LIBCPP_GET_C_LOCALE __cloc()
213
218
  // Get the C locale object
214
- locale_t __cloc();
219
+ _LIBCPP_FUNC_VIS locale_t __cloc();
215
220
  #define __cloc_defined
216
221
  #endif
217
222
 
@@ -224,7 +229,7 @@ typedef _VSTD::unique_ptr<__locale_struct, decltype(&uselocale)> __locale_raii;
224
229
  // OSX has nice foo_l() functions that let you turn off use of the global
225
230
  // locale. Linux, not so much. The following functions avoid the locale when
226
231
  // that's possible and otherwise do the wrong thing. FIXME.
227
- #if defined(__linux__) || defined(__EMSCRIPTEN__)
232
+ #if defined(__linux__) || defined(__EMSCRIPTEN__) || defined(_AIX)
228
233
 
229
234
  #ifdef _LIBCPP_LOCALE__L_EXTENSIONS
230
235
  decltype(MB_CUR_MAX_L(_VSTD::declval<locale_t>()))
@@ -234,7 +239,7 @@ __mb_cur_max_l(locale_t __l)
234
239
  return MB_CUR_MAX_L(__l);
235
240
  }
236
241
  #else // _LIBCPP_LOCALE__L_EXTENSIONS
237
- _LIBCPP_ALWAYS_INLINE inline
242
+ inline _LIBCPP_ALWAYS_INLINE
238
243
  decltype(MB_CUR_MAX) __mb_cur_max_l(locale_t __l)
239
244
  {
240
245
  __locale_raii __current(uselocale(__l), uselocale);
@@ -242,7 +247,7 @@ decltype(MB_CUR_MAX) __mb_cur_max_l(locale_t __l)
242
247
  }
243
248
  #endif // _LIBCPP_LOCALE__L_EXTENSIONS
244
249
 
245
- _LIBCPP_ALWAYS_INLINE inline
250
+ inline _LIBCPP_ALWAYS_INLINE
246
251
  wint_t __btowc_l(int __c, locale_t __l)
247
252
  {
248
253
  #ifdef _LIBCPP_LOCALE__L_EXTENSIONS
@@ -253,7 +258,7 @@ wint_t __btowc_l(int __c, locale_t __l)
253
258
  #endif
254
259
  }
255
260
 
256
- _LIBCPP_ALWAYS_INLINE inline
261
+ inline _LIBCPP_ALWAYS_INLINE
257
262
  int __wctob_l(wint_t __c, locale_t __l)
258
263
  {
259
264
  #ifdef _LIBCPP_LOCALE__L_EXTENSIONS
@@ -264,7 +269,7 @@ int __wctob_l(wint_t __c, locale_t __l)
264
269
  #endif
265
270
  }
266
271
 
267
- _LIBCPP_ALWAYS_INLINE inline
272
+ inline _LIBCPP_ALWAYS_INLINE
268
273
  size_t __wcsnrtombs_l(char *__dest, const wchar_t **__src, size_t __nwc,
269
274
  size_t __len, mbstate_t *__ps, locale_t __l)
270
275
  {
@@ -276,7 +281,7 @@ size_t __wcsnrtombs_l(char *__dest, const wchar_t **__src, size_t __nwc,
276
281
  #endif
277
282
  }
278
283
 
279
- _LIBCPP_ALWAYS_INLINE inline
284
+ inline _LIBCPP_ALWAYS_INLINE
280
285
  size_t __wcrtomb_l(char *__s, wchar_t __wc, mbstate_t *__ps, locale_t __l)
281
286
  {
282
287
  #ifdef _LIBCPP_LOCALE__L_EXTENSIONS
@@ -287,7 +292,7 @@ size_t __wcrtomb_l(char *__s, wchar_t __wc, mbstate_t *__ps, locale_t __l)
287
292
  #endif
288
293
  }
289
294
 
290
- _LIBCPP_ALWAYS_INLINE inline
295
+ inline _LIBCPP_ALWAYS_INLINE
291
296
  size_t __mbsnrtowcs_l(wchar_t * __dest, const char **__src, size_t __nms,
292
297
  size_t __len, mbstate_t *__ps, locale_t __l)
293
298
  {
@@ -299,7 +304,7 @@ size_t __mbsnrtowcs_l(wchar_t * __dest, const char **__src, size_t __nms,
299
304
  #endif
300
305
  }
301
306
 
302
- _LIBCPP_ALWAYS_INLINE inline
307
+ inline _LIBCPP_ALWAYS_INLINE
303
308
  size_t __mbrtowc_l(wchar_t *__pwc, const char *__s, size_t __n,
304
309
  mbstate_t *__ps, locale_t __l)
305
310
  {
@@ -311,7 +316,7 @@ size_t __mbrtowc_l(wchar_t *__pwc, const char *__s, size_t __n,
311
316
  #endif
312
317
  }
313
318
 
314
- _LIBCPP_ALWAYS_INLINE inline
319
+ inline _LIBCPP_ALWAYS_INLINE
315
320
  int __mbtowc_l(wchar_t *__pwc, const char *__pmb, size_t __max, locale_t __l)
316
321
  {
317
322
  #ifdef _LIBCPP_LOCALE__L_EXTENSIONS
@@ -322,7 +327,7 @@ int __mbtowc_l(wchar_t *__pwc, const char *__pmb, size_t __max, locale_t __l)
322
327
  #endif
323
328
  }
324
329
 
325
- _LIBCPP_ALWAYS_INLINE inline
330
+ inline _LIBCPP_ALWAYS_INLINE
326
331
  size_t __mbrlen_l(const char *__s, size_t __n, mbstate_t *__ps, locale_t __l)
327
332
  {
328
333
  #ifdef _LIBCPP_LOCALE__L_EXTENSIONS
@@ -333,7 +338,7 @@ size_t __mbrlen_l(const char *__s, size_t __n, mbstate_t *__ps, locale_t __l)
333
338
  #endif
334
339
  }
335
340
 
336
- _LIBCPP_ALWAYS_INLINE inline
341
+ inline _LIBCPP_ALWAYS_INLINE
337
342
  lconv *__localeconv_l(locale_t __l)
338
343
  {
339
344
  #ifdef _LIBCPP_LOCALE__L_EXTENSIONS
@@ -344,7 +349,7 @@ lconv *__localeconv_l(locale_t __l)
344
349
  #endif
345
350
  }
346
351
 
347
- _LIBCPP_ALWAYS_INLINE inline
352
+ inline _LIBCPP_ALWAYS_INLINE
348
353
  size_t __mbsrtowcs_l(wchar_t *__dest, const char **__src, size_t __len,
349
354
  mbstate_t *__ps, locale_t __l)
350
355
  {
@@ -528,7 +533,7 @@ __scan_keyword(_InputIterator& __b, _InputIterator __e,
528
533
  return __kb;
529
534
  }
530
535
 
531
- struct __num_get_base
536
+ struct _LIBCPP_TYPE_VIS __num_get_base
532
537
  {
533
538
  static const int __num_get_buf_sz = 40;
534
539
 
@@ -536,6 +541,7 @@ struct __num_get_base
536
541
  static const char __src[33];
537
542
  };
538
543
 
544
+ _LIBCPP_FUNC_VIS
539
545
  void __check_grouping(const string& __grouping, unsigned* __g, unsigned* __g_end,
540
546
  ios_base::iostate& __err);
541
547
 
@@ -686,11 +692,11 @@ __num_get<_CharT>::__stage2_float_loop(_CharT __ct, bool& __in_units, char& __ex
686
692
  return 0;
687
693
  }
688
694
 
689
- _LIBCPP_EXTERN_TEMPLATE(struct __num_get<char>)
690
- _LIBCPP_EXTERN_TEMPLATE(struct __num_get<wchar_t>)
695
+ _LIBCPP_EXTERN_TEMPLATE2(struct _LIBCPP_TYPE_VIS __num_get<char>)
696
+ _LIBCPP_EXTERN_TEMPLATE2(struct _LIBCPP_TYPE_VIS __num_get<wchar_t>)
691
697
 
692
698
  template <class _CharT, class _InputIterator = istreambuf_iterator<_CharT> >
693
- class _LIBCPP_TYPE_VIS num_get
699
+ class _LIBCPP_TYPE_VIS_ONLY num_get
694
700
  : public locale::facet,
695
701
  private __num_get<_CharT>
696
702
  {
@@ -785,26 +791,61 @@ protected:
785
791
  _LIBCPP_ALWAYS_INLINE
786
792
  ~num_get() {}
787
793
 
794
+ template <class _Fp>
795
+ iter_type __do_get_floating_point
796
+ (iter_type __b, iter_type __e, ios_base& __iob,
797
+ ios_base::iostate& __err, _Fp& __v) const;
798
+
799
+ template <class _Signed>
800
+ iter_type __do_get_signed
801
+ (iter_type __b, iter_type __e, ios_base& __iob,
802
+ ios_base::iostate& __err, _Signed& __v) const;
803
+
804
+ template <class _Unsigned>
805
+ iter_type __do_get_unsigned
806
+ (iter_type __b, iter_type __e, ios_base& __iob,
807
+ ios_base::iostate& __err, _Unsigned& __v) const;
808
+
809
+
788
810
  virtual iter_type do_get(iter_type __b, iter_type __e, ios_base& __iob,
789
811
  ios_base::iostate& __err, bool& __v) const;
812
+
790
813
  virtual iter_type do_get(iter_type __b, iter_type __e, ios_base& __iob,
791
- ios_base::iostate& __err, long& __v) const;
814
+ ios_base::iostate& __err, long& __v) const
815
+ { return this->__do_get_signed ( __b, __e, __iob, __err, __v ); }
816
+
792
817
  virtual iter_type do_get(iter_type __b, iter_type __e, ios_base& __iob,
793
- ios_base::iostate& __err, long long& __v) const;
818
+ ios_base::iostate& __err, long long& __v) const
819
+ { return this->__do_get_signed ( __b, __e, __iob, __err, __v ); }
820
+
794
821
  virtual iter_type do_get(iter_type __b, iter_type __e, ios_base& __iob,
795
- ios_base::iostate& __err, unsigned short& __v) const;
822
+ ios_base::iostate& __err, unsigned short& __v) const
823
+ { return this->__do_get_unsigned ( __b, __e, __iob, __err, __v ); }
824
+
796
825
  virtual iter_type do_get(iter_type __b, iter_type __e, ios_base& __iob,
797
- ios_base::iostate& __err, unsigned int& __v) const;
826
+ ios_base::iostate& __err, unsigned int& __v) const
827
+ { return this->__do_get_unsigned ( __b, __e, __iob, __err, __v ); }
828
+
798
829
  virtual iter_type do_get(iter_type __b, iter_type __e, ios_base& __iob,
799
- ios_base::iostate& __err, unsigned long& __v) const;
830
+ ios_base::iostate& __err, unsigned long& __v) const
831
+ { return this->__do_get_unsigned ( __b, __e, __iob, __err, __v ); }
832
+
800
833
  virtual iter_type do_get(iter_type __b, iter_type __e, ios_base& __iob,
801
- ios_base::iostate& __err, unsigned long long& __v) const;
834
+ ios_base::iostate& __err, unsigned long long& __v) const
835
+ { return this->__do_get_unsigned ( __b, __e, __iob, __err, __v ); }
836
+
802
837
  virtual iter_type do_get(iter_type __b, iter_type __e, ios_base& __iob,
803
- ios_base::iostate& __err, float& __v) const;
838
+ ios_base::iostate& __err, float& __v) const
839
+ { return this->__do_get_floating_point ( __b, __e, __iob, __err, __v ); }
840
+
804
841
  virtual iter_type do_get(iter_type __b, iter_type __e, ios_base& __iob,
805
- ios_base::iostate& __err, double& __v) const;
842
+ ios_base::iostate& __err, double& __v) const
843
+ { return this->__do_get_floating_point ( __b, __e, __iob, __err, __v ); }
844
+
806
845
  virtual iter_type do_get(iter_type __b, iter_type __e, ios_base& __iob,
807
- ios_base::iostate& __err, long double& __v) const;
846
+ ios_base::iostate& __err, long double& __v) const
847
+ { return this->__do_get_floating_point ( __b, __e, __iob, __err, __v ); }
848
+
808
849
  virtual iter_type do_get(iter_type __b, iter_type __e, ios_base& __iob,
809
850
  ios_base::iostate& __err, void*& __v) const;
810
851
  };
@@ -946,153 +987,15 @@ num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
946
987
  return __b;
947
988
  }
948
989
 
949
- template <class _CharT, class _InputIterator>
950
- _InputIterator
951
- num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
952
- ios_base& __iob,
953
- ios_base::iostate& __err,
954
- long& __v) const
955
- {
956
- // Stage 1
957
- int __base = this->__get_base(__iob);
958
- // Stage 2
959
- char_type __atoms[26];
960
- char_type __thousands_sep;
961
- string __grouping = this->__stage2_int_prep(__iob, __atoms, __thousands_sep);
962
- string __buf;
963
- __buf.resize(__buf.capacity());
964
- char* __a = &__buf[0];
965
- char* __a_end = __a;
966
- unsigned __g[__num_get_base::__num_get_buf_sz];
967
- unsigned* __g_end = __g;
968
- unsigned __dc = 0;
969
- for (; __b != __e; ++__b)
970
- {
971
- if (__a_end - __a == __buf.size())
972
- {
973
- size_t __tmp = __buf.size();
974
- __buf.resize(2*__buf.size());
975
- __buf.resize(__buf.capacity());
976
- __a = &__buf[0];
977
- __a_end = __a + __tmp;
978
- }
979
- if (this->__stage2_int_loop(*__b, __base, __a, __a_end, __dc,
980
- __thousands_sep, __grouping, __g, __g_end,
981
- __atoms))
982
- break;
983
- }
984
- if (__grouping.size() != 0 && __g_end-__g < __num_get_base::__num_get_buf_sz)
985
- *__g_end++ = __dc;
986
- // Stage 3
987
- __v = __num_get_signed_integral<long>(__a, __a_end, __err, __base);
988
- // Digit grouping checked
989
- __check_grouping(__grouping, __g, __g_end, __err);
990
- // EOF checked
991
- if (__b == __e)
992
- __err |= ios_base::eofbit;
993
- return __b;
994
- }
995
-
996
- template <class _CharT, class _InputIterator>
997
- _InputIterator
998
- num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
999
- ios_base& __iob,
1000
- ios_base::iostate& __err,
1001
- long long& __v) const
1002
- {
1003
- // Stage 1
1004
- int __base = this->__get_base(__iob);
1005
- // Stage 2
1006
- char_type __atoms[26];
1007
- char_type __thousands_sep;
1008
- string __grouping = this->__stage2_int_prep(__iob, __atoms, __thousands_sep);
1009
- string __buf;
1010
- __buf.resize(__buf.capacity());
1011
- char* __a = &__buf[0];
1012
- char* __a_end = __a;
1013
- unsigned __g[__num_get_base::__num_get_buf_sz];
1014
- unsigned* __g_end = __g;
1015
- unsigned __dc = 0;
1016
- for (; __b != __e; ++__b)
1017
- {
1018
- if (__a_end - __a == __buf.size())
1019
- {
1020
- size_t __tmp = __buf.size();
1021
- __buf.resize(2*__buf.size());
1022
- __buf.resize(__buf.capacity());
1023
- __a = &__buf[0];
1024
- __a_end = __a + __tmp;
1025
- }
1026
- if (this->__stage2_int_loop(*__b, __base, __a, __a_end, __dc,
1027
- __thousands_sep, __grouping, __g, __g_end,
1028
- __atoms))
1029
- break;
1030
- }
1031
- if (__grouping.size() != 0 && __g_end-__g < __num_get_base::__num_get_buf_sz)
1032
- *__g_end++ = __dc;
1033
- // Stage 3
1034
- __v = __num_get_signed_integral<long long>(__a, __a_end, __err, __base);
1035
- // Digit grouping checked
1036
- __check_grouping(__grouping, __g, __g_end, __err);
1037
- // EOF checked
1038
- if (__b == __e)
1039
- __err |= ios_base::eofbit;
1040
- return __b;
1041
- }
1042
-
1043
- template <class _CharT, class _InputIterator>
1044
- _InputIterator
1045
- num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
1046
- ios_base& __iob,
1047
- ios_base::iostate& __err,
1048
- unsigned short& __v) const
1049
- {
1050
- // Stage 1
1051
- int __base = this->__get_base(__iob);
1052
- // Stage 2
1053
- char_type __atoms[26];
1054
- char_type __thousands_sep;
1055
- string __grouping = this->__stage2_int_prep(__iob, __atoms, __thousands_sep);
1056
- string __buf;
1057
- __buf.resize(__buf.capacity());
1058
- char* __a = &__buf[0];
1059
- char* __a_end = __a;
1060
- unsigned __g[__num_get_base::__num_get_buf_sz];
1061
- unsigned* __g_end = __g;
1062
- unsigned __dc = 0;
1063
- for (; __b != __e; ++__b)
1064
- {
1065
- if (__a_end - __a == __buf.size())
1066
- {
1067
- size_t __tmp = __buf.size();
1068
- __buf.resize(2*__buf.size());
1069
- __buf.resize(__buf.capacity());
1070
- __a = &__buf[0];
1071
- __a_end = __a + __tmp;
1072
- }
1073
- if (this->__stage2_int_loop(*__b, __base, __a, __a_end, __dc,
1074
- __thousands_sep, __grouping, __g, __g_end,
1075
- __atoms))
1076
- break;
1077
- }
1078
- if (__grouping.size() != 0 && __g_end-__g < __num_get_base::__num_get_buf_sz)
1079
- *__g_end++ = __dc;
1080
- // Stage 3
1081
- __v = __num_get_unsigned_integral<unsigned short>(__a, __a_end, __err, __base);
1082
- // Digit grouping checked
1083
- __check_grouping(__grouping, __g, __g_end, __err);
1084
- // EOF checked
1085
- if (__b == __e)
1086
- __err |= ios_base::eofbit;
1087
- return __b;
1088
- }
990
+ // signed
1089
991
 
1090
992
  template <class _CharT, class _InputIterator>
993
+ template <class _Signed>
1091
994
  _InputIterator
1092
- num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
995
+ num_get<_CharT, _InputIterator>::__do_get_signed(iter_type __b, iter_type __e,
1093
996
  ios_base& __iob,
1094
997
  ios_base::iostate& __err,
1095
- unsigned int& __v) const
998
+ _Signed& __v) const
1096
999
  {
1097
1000
  // Stage 1
1098
1001
  int __base = this->__get_base(__iob);
@@ -1125,7 +1028,7 @@ num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
1125
1028
  if (__grouping.size() != 0 && __g_end-__g < __num_get_base::__num_get_buf_sz)
1126
1029
  *__g_end++ = __dc;
1127
1030
  // Stage 3
1128
- __v = __num_get_unsigned_integral<unsigned int>(__a, __a_end, __err, __base);
1031
+ __v = __num_get_signed_integral<_Signed>(__a, __a_end, __err, __base);
1129
1032
  // Digit grouping checked
1130
1033
  __check_grouping(__grouping, __g, __g_end, __err);
1131
1034
  // EOF checked
@@ -1134,59 +1037,15 @@ num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
1134
1037
  return __b;
1135
1038
  }
1136
1039
 
1137
- template <class _CharT, class _InputIterator>
1138
- _InputIterator
1139
- num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
1140
- ios_base& __iob,
1141
- ios_base::iostate& __err,
1142
- unsigned long& __v) const
1143
- {
1144
- // Stage 1
1145
- int __base = this->__get_base(__iob);
1146
- // Stage 2
1147
- char_type __atoms[26];
1148
- char_type __thousands_sep;
1149
- string __grouping = this->__stage2_int_prep(__iob, __atoms, __thousands_sep);
1150
- string __buf;
1151
- __buf.resize(__buf.capacity());
1152
- char* __a = &__buf[0];
1153
- char* __a_end = __a;
1154
- unsigned __g[__num_get_base::__num_get_buf_sz];
1155
- unsigned* __g_end = __g;
1156
- unsigned __dc = 0;
1157
- for (; __b != __e; ++__b)
1158
- {
1159
- if (__a_end - __a == __buf.size())
1160
- {
1161
- size_t __tmp = __buf.size();
1162
- __buf.resize(2*__buf.size());
1163
- __buf.resize(__buf.capacity());
1164
- __a = &__buf[0];
1165
- __a_end = __a + __tmp;
1166
- }
1167
- if (this->__stage2_int_loop(*__b, __base, __a, __a_end, __dc,
1168
- __thousands_sep, __grouping, __g, __g_end,
1169
- __atoms))
1170
- break;
1171
- }
1172
- if (__grouping.size() != 0 && __g_end-__g < __num_get_base::__num_get_buf_sz)
1173
- *__g_end++ = __dc;
1174
- // Stage 3
1175
- __v = __num_get_unsigned_integral<unsigned long>(__a, __a_end, __err, __base);
1176
- // Digit grouping checked
1177
- __check_grouping(__grouping, __g, __g_end, __err);
1178
- // EOF checked
1179
- if (__b == __e)
1180
- __err |= ios_base::eofbit;
1181
- return __b;
1182
- }
1040
+ // unsigned
1183
1041
 
1184
1042
  template <class _CharT, class _InputIterator>
1043
+ template <class _Unsigned>
1185
1044
  _InputIterator
1186
- num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
1045
+ num_get<_CharT, _InputIterator>::__do_get_unsigned(iter_type __b, iter_type __e,
1187
1046
  ios_base& __iob,
1188
1047
  ios_base::iostate& __err,
1189
- unsigned long long& __v) const
1048
+ _Unsigned& __v) const
1190
1049
  {
1191
1050
  // Stage 1
1192
1051
  int __base = this->__get_base(__iob);
@@ -1219,59 +1078,7 @@ num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
1219
1078
  if (__grouping.size() != 0 && __g_end-__g < __num_get_base::__num_get_buf_sz)
1220
1079
  *__g_end++ = __dc;
1221
1080
  // Stage 3
1222
- __v = __num_get_unsigned_integral<unsigned long long>(__a, __a_end, __err, __base);
1223
- // Digit grouping checked
1224
- __check_grouping(__grouping, __g, __g_end, __err);
1225
- // EOF checked
1226
- if (__b == __e)
1227
- __err |= ios_base::eofbit;
1228
- return __b;
1229
- }
1230
-
1231
- template <class _CharT, class _InputIterator>
1232
- _InputIterator
1233
- num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
1234
- ios_base& __iob,
1235
- ios_base::iostate& __err,
1236
- float& __v) const
1237
- {
1238
- // Stage 1, nothing to do
1239
- // Stage 2
1240
- char_type __atoms[32];
1241
- char_type __decimal_point;
1242
- char_type __thousands_sep;
1243
- string __grouping = this->__stage2_float_prep(__iob, __atoms,
1244
- __decimal_point,
1245
- __thousands_sep);
1246
- string __buf;
1247
- __buf.resize(__buf.capacity());
1248
- char* __a = &__buf[0];
1249
- char* __a_end = __a;
1250
- unsigned __g[__num_get_base::__num_get_buf_sz];
1251
- unsigned* __g_end = __g;
1252
- unsigned __dc = 0;
1253
- bool __in_units = true;
1254
- char __exp = 'E';
1255
- for (; __b != __e; ++__b)
1256
- {
1257
- if (__a_end - __a == __buf.size())
1258
- {
1259
- size_t __tmp = __buf.size();
1260
- __buf.resize(2*__buf.size());
1261
- __buf.resize(__buf.capacity());
1262
- __a = &__buf[0];
1263
- __a_end = __a + __tmp;
1264
- }
1265
- if (this->__stage2_float_loop(*__b, __in_units, __exp, __a, __a_end,
1266
- __decimal_point, __thousands_sep,
1267
- __grouping, __g, __g_end,
1268
- __dc, __atoms))
1269
- break;
1270
- }
1271
- if (__grouping.size() != 0 && __in_units && __g_end-__g < __num_get_base::__num_get_buf_sz)
1272
- *__g_end++ = __dc;
1273
- // Stage 3
1274
- __v = __num_get_float<float>(__a, __a_end, __err);
1081
+ __v = __num_get_unsigned_integral<_Unsigned>(__a, __a_end, __err, __base);
1275
1082
  // Digit grouping checked
1276
1083
  __check_grouping(__grouping, __g, __g_end, __err);
1277
1084
  // EOF checked
@@ -1280,64 +1087,15 @@ num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
1280
1087
  return __b;
1281
1088
  }
1282
1089
 
1283
- template <class _CharT, class _InputIterator>
1284
- _InputIterator
1285
- num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
1286
- ios_base& __iob,
1287
- ios_base::iostate& __err,
1288
- double& __v) const
1289
- {
1290
- // Stage 1, nothing to do
1291
- // Stage 2
1292
- char_type __atoms[32];
1293
- char_type __decimal_point;
1294
- char_type __thousands_sep;
1295
- string __grouping = this->__stage2_float_prep(__iob, __atoms,
1296
- __decimal_point,
1297
- __thousands_sep);
1298
- string __buf;
1299
- __buf.resize(__buf.capacity());
1300
- char* __a = &__buf[0];
1301
- char* __a_end = __a;
1302
- unsigned __g[__num_get_base::__num_get_buf_sz];
1303
- unsigned* __g_end = __g;
1304
- unsigned __dc = 0;
1305
- bool __in_units = true;
1306
- char __exp = 'E';
1307
- for (; __b != __e; ++__b)
1308
- {
1309
- if (__a_end - __a == __buf.size())
1310
- {
1311
- size_t __tmp = __buf.size();
1312
- __buf.resize(2*__buf.size());
1313
- __buf.resize(__buf.capacity());
1314
- __a = &__buf[0];
1315
- __a_end = __a + __tmp;
1316
- }
1317
- if (this->__stage2_float_loop(*__b, __in_units, __exp, __a, __a_end,
1318
- __decimal_point, __thousands_sep,
1319
- __grouping, __g, __g_end,
1320
- __dc, __atoms))
1321
- break;
1322
- }
1323
- if (__grouping.size() != 0 && __in_units && __g_end-__g < __num_get_base::__num_get_buf_sz)
1324
- *__g_end++ = __dc;
1325
- // Stage 3
1326
- __v = __num_get_float<double>(__a, __a_end, __err);
1327
- // Digit grouping checked
1328
- __check_grouping(__grouping, __g, __g_end, __err);
1329
- // EOF checked
1330
- if (__b == __e)
1331
- __err |= ios_base::eofbit;
1332
- return __b;
1333
- }
1090
+ // floating point
1334
1091
 
1335
1092
  template <class _CharT, class _InputIterator>
1093
+ template <class _Fp>
1336
1094
  _InputIterator
1337
- num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
1095
+ num_get<_CharT, _InputIterator>::__do_get_floating_point(iter_type __b, iter_type __e,
1338
1096
  ios_base& __iob,
1339
1097
  ios_base::iostate& __err,
1340
- long double& __v) const
1098
+ _Fp& __v) const
1341
1099
  {
1342
1100
  // Stage 1, nothing to do
1343
1101
  // Stage 2
@@ -1375,7 +1133,7 @@ num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
1375
1133
  if (__grouping.size() != 0 && __in_units && __g_end-__g < __num_get_base::__num_get_buf_sz)
1376
1134
  *__g_end++ = __dc;
1377
1135
  // Stage 3
1378
- __v = __num_get_float<long double>(__a, __a_end, __err);
1136
+ __v = __num_get_float<_Fp>(__a, __a_end, __err);
1379
1137
  // Digit grouping checked
1380
1138
  __check_grouping(__grouping, __g, __g_end, __err);
1381
1139
  // EOF checked
@@ -1435,10 +1193,10 @@ num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
1435
1193
  return __b;
1436
1194
  }
1437
1195
 
1438
- _LIBCPP_EXTERN_TEMPLATE(class num_get<char>)
1439
- _LIBCPP_EXTERN_TEMPLATE(class num_get<wchar_t>)
1196
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS num_get<char>)
1197
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS num_get<wchar_t>)
1440
1198
 
1441
- struct __num_put_base
1199
+ struct _LIBCPP_TYPE_VIS __num_put_base
1442
1200
  {
1443
1201
  protected:
1444
1202
  static void __format_int(char* __fmt, const char* __len, bool __signd,
@@ -1585,11 +1343,11 @@ __num_put<_CharT>::__widen_and_group_float(char* __nb, char* __np, char* __ne,
1585
1343
  __op = __ob + (__np - __nb);
1586
1344
  }
1587
1345
 
1588
- _LIBCPP_EXTERN_TEMPLATE(struct __num_put<char>)
1589
- _LIBCPP_EXTERN_TEMPLATE(struct __num_put<wchar_t>)
1346
+ _LIBCPP_EXTERN_TEMPLATE2(struct _LIBCPP_TYPE_VIS __num_put<char>)
1347
+ _LIBCPP_EXTERN_TEMPLATE2(struct _LIBCPP_TYPE_VIS __num_put<wchar_t>)
1590
1348
 
1591
1349
  template <class _CharT, class _OutputIterator = ostreambuf_iterator<_CharT> >
1592
- class _LIBCPP_TYPE_VIS num_put
1350
+ class _LIBCPP_TYPE_VIS_ONLY num_put
1593
1351
  : public locale::facet,
1594
1352
  private __num_put<_CharT>
1595
1353
  {
@@ -1769,7 +1527,12 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
1769
1527
  return do_put(__s, __iob, __fl, (unsigned long)__v);
1770
1528
  const numpunct<char_type>& __np = use_facet<numpunct<char_type> >(__iob.getloc());
1771
1529
  typedef typename numpunct<char_type>::string_type string_type;
1530
+ #if _LIBCPP_DEBUG_LEVEL >= 2
1531
+ string_type __tmp(__v ? __np.truename() : __np.falsename());
1532
+ string_type __nm = _VSTD::move(__tmp);
1533
+ #else
1772
1534
  string_type __nm = __v ? __np.truename() : __np.falsename();
1535
+ #endif
1773
1536
  for (typename string_type::iterator __i = __nm.begin(); __i != __nm.end(); ++__i, ++__s)
1774
1537
  *__s = *__i;
1775
1538
  return __s;
@@ -2065,8 +1828,8 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
2065
1828
  return __pad_and_output(__s, __o, __op, __oe, __iob, __fl);
2066
1829
  }
2067
1830
 
2068
- _LIBCPP_EXTERN_TEMPLATE(class num_put<char>)
2069
- _LIBCPP_EXTERN_TEMPLATE(class num_put<wchar_t>)
1831
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS num_put<char>)
1832
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS num_put<wchar_t>)
2070
1833
 
2071
1834
  template <class _CharT, class _InputIterator>
2072
1835
  _LIBCPP_HIDDEN
@@ -2108,7 +1871,7 @@ public:
2108
1871
  };
2109
1872
 
2110
1873
  template <class _CharT>
2111
- class __time_get_c_storage // purposefully not decorated
1874
+ class _LIBCPP_TYPE_VIS __time_get_c_storage
2112
1875
  {
2113
1876
  protected:
2114
1877
  typedef basic_string<_CharT> string_type;
@@ -2123,7 +1886,7 @@ protected:
2123
1886
  };
2124
1887
 
2125
1888
  template <class _CharT, class _InputIterator = istreambuf_iterator<_CharT> >
2126
- class _LIBCPP_TYPE_VIS time_get
1889
+ class _LIBCPP_TYPE_VIS_ONLY time_get
2127
1890
  : public locale::facet,
2128
1891
  public time_base,
2129
1892
  private __time_get_c_storage<_CharT>
@@ -2732,10 +2495,10 @@ time_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
2732
2495
  return __b;
2733
2496
  }
2734
2497
 
2735
- _LIBCPP_EXTERN_TEMPLATE(class time_get<char>)
2736
- _LIBCPP_EXTERN_TEMPLATE(class time_get<wchar_t>)
2498
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS time_get<char>)
2499
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS time_get<wchar_t>)
2737
2500
 
2738
- class __time_get
2501
+ class _LIBCPP_TYPE_VIS __time_get
2739
2502
  {
2740
2503
  protected:
2741
2504
  locale_t __loc_;
@@ -2746,7 +2509,7 @@ protected:
2746
2509
  };
2747
2510
 
2748
2511
  template <class _CharT>
2749
- class __time_get_storage
2512
+ class _LIBCPP_TYPE_VIS __time_get_storage
2750
2513
  : public __time_get
2751
2514
  {
2752
2515
  protected:
@@ -2773,7 +2536,7 @@ private:
2773
2536
  };
2774
2537
 
2775
2538
  template <class _CharT, class _InputIterator = istreambuf_iterator<_CharT> >
2776
- class _LIBCPP_TYPE_VIS time_get_byname
2539
+ class _LIBCPP_TYPE_VIS_ONLY time_get_byname
2777
2540
  : public time_get<_CharT, _InputIterator>,
2778
2541
  private __time_get_storage<_CharT>
2779
2542
  {
@@ -2815,10 +2578,10 @@ private:
2815
2578
  virtual const string_type& __X() const {return this->__X_;}
2816
2579
  };
2817
2580
 
2818
- _LIBCPP_EXTERN_TEMPLATE(class time_get_byname<char>)
2819
- _LIBCPP_EXTERN_TEMPLATE(class time_get_byname<wchar_t>)
2581
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS time_get_byname<char>)
2582
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS time_get_byname<wchar_t>)
2820
2583
 
2821
- class __time_put
2584
+ class _LIBCPP_TYPE_VIS __time_put
2822
2585
  {
2823
2586
  locale_t __loc_;
2824
2587
  protected:
@@ -2833,7 +2596,7 @@ protected:
2833
2596
  };
2834
2597
 
2835
2598
  template <class _CharT, class _OutputIterator = ostreambuf_iterator<_CharT> >
2836
- class _LIBCPP_TYPE_VIS time_put
2599
+ class _LIBCPP_TYPE_VIS_ONLY time_put
2837
2600
  : public locale::facet,
2838
2601
  private __time_put
2839
2602
  {
@@ -2928,11 +2691,11 @@ time_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base&,
2928
2691
  return _VSTD::copy(__nb, __ne, __s);
2929
2692
  }
2930
2693
 
2931
- _LIBCPP_EXTERN_TEMPLATE(class time_put<char>)
2932
- _LIBCPP_EXTERN_TEMPLATE(class time_put<wchar_t>)
2694
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS time_put<char>)
2695
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS time_put<wchar_t>)
2933
2696
 
2934
2697
  template <class _CharT, class _OutputIterator = ostreambuf_iterator<_CharT> >
2935
- class _LIBCPP_TYPE_VIS time_put_byname
2698
+ class _LIBCPP_TYPE_VIS_ONLY time_put_byname
2936
2699
  : public time_put<_CharT, _OutputIterator>
2937
2700
  {
2938
2701
  public:
@@ -2949,8 +2712,8 @@ protected:
2949
2712
  ~time_put_byname() {}
2950
2713
  };
2951
2714
 
2952
- _LIBCPP_EXTERN_TEMPLATE(class time_put_byname<char>)
2953
- _LIBCPP_EXTERN_TEMPLATE(class time_put_byname<wchar_t>)
2715
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS time_put_byname<char>)
2716
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS time_put_byname<wchar_t>)
2954
2717
 
2955
2718
  // money_base
2956
2719
 
@@ -2966,7 +2729,7 @@ public:
2966
2729
  // moneypunct
2967
2730
 
2968
2731
  template <class _CharT, bool _International = false>
2969
- class _LIBCPP_TYPE_VIS moneypunct
2732
+ class _LIBCPP_TYPE_VIS_ONLY moneypunct
2970
2733
  : public locale::facet,
2971
2734
  public money_base
2972
2735
  {
@@ -3016,15 +2779,15 @@ template <class _CharT, bool _International>
3016
2779
  const bool
3017
2780
  moneypunct<_CharT, _International>::intl;
3018
2781
 
3019
- _LIBCPP_EXTERN_TEMPLATE(class moneypunct<char, false>)
3020
- _LIBCPP_EXTERN_TEMPLATE(class moneypunct<char, true>)
3021
- _LIBCPP_EXTERN_TEMPLATE(class moneypunct<wchar_t, false>)
3022
- _LIBCPP_EXTERN_TEMPLATE(class moneypunct<wchar_t, true>)
2782
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS moneypunct<char, false>)
2783
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS moneypunct<char, true>)
2784
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS moneypunct<wchar_t, false>)
2785
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS moneypunct<wchar_t, true>)
3023
2786
 
3024
2787
  // moneypunct_byname
3025
2788
 
3026
2789
  template <class _CharT, bool _International = false>
3027
- class _LIBCPP_TYPE_VIS moneypunct_byname
2790
+ class _LIBCPP_TYPE_VIS_ONLY moneypunct_byname
3028
2791
  : public moneypunct<_CharT, _International>
3029
2792
  {
3030
2793
  public:
@@ -3073,10 +2836,10 @@ template<> void moneypunct_byname<char, true>::init(const char*);
3073
2836
  template<> void moneypunct_byname<wchar_t, false>::init(const char*);
3074
2837
  template<> void moneypunct_byname<wchar_t, true>::init(const char*);
3075
2838
 
3076
- _LIBCPP_EXTERN_TEMPLATE(class moneypunct_byname<char, false>)
3077
- _LIBCPP_EXTERN_TEMPLATE(class moneypunct_byname<char, true>)
3078
- _LIBCPP_EXTERN_TEMPLATE(class moneypunct_byname<wchar_t, false>)
3079
- _LIBCPP_EXTERN_TEMPLATE(class moneypunct_byname<wchar_t, true>)
2839
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS moneypunct_byname<char, false>)
2840
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS moneypunct_byname<char, true>)
2841
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS moneypunct_byname<wchar_t, false>)
2842
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS moneypunct_byname<wchar_t, true>)
3080
2843
 
3081
2844
  // money_get
3082
2845
 
@@ -3132,11 +2895,11 @@ __money_get<_CharT>::__gather_info(bool __intl, const locale& __loc,
3132
2895
  }
3133
2896
  }
3134
2897
 
3135
- _LIBCPP_EXTERN_TEMPLATE(class __money_get<char>)
3136
- _LIBCPP_EXTERN_TEMPLATE(class __money_get<wchar_t>)
2898
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS __money_get<char>)
2899
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS __money_get<wchar_t>)
3137
2900
 
3138
2901
  template <class _CharT, class _InputIterator = istreambuf_iterator<_CharT> >
3139
- class _LIBCPP_TYPE_VIS money_get
2902
+ class _LIBCPP_TYPE_VIS_ONLY money_get
3140
2903
  : public locale::facet,
3141
2904
  private __money_get<_CharT>
3142
2905
  {
@@ -3190,7 +2953,7 @@ template <class _CharT, class _InputIterator>
3190
2953
  locale::id
3191
2954
  money_get<_CharT, _InputIterator>::id;
3192
2955
 
3193
- void __do_nothing(void*);
2956
+ _LIBCPP_FUNC_VIS void __do_nothing(void*);
3194
2957
 
3195
2958
  template <class _Tp>
3196
2959
  _LIBCPP_HIDDEN
@@ -3320,7 +3083,7 @@ money_get<_CharT, _InputIterator>::__do_get(iter_type& __b, iter_type __e,
3320
3083
  bool __more_needed = __trailing_sign ||
3321
3084
  (__p < 2) ||
3322
3085
  (__p == 2 && __pat.field[3] != static_cast<char>(money_base::none));
3323
- bool __sb = __flags & ios_base::showbase;
3086
+ bool __sb = (__flags & ios_base::showbase) != 0;
3324
3087
  if (__sb || __more_needed)
3325
3088
  {
3326
3089
  typename string_type::const_iterator __sym_space_end = __sym.begin();
@@ -3513,8 +3276,8 @@ money_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
3513
3276
  return __b;
3514
3277
  }
3515
3278
 
3516
- _LIBCPP_EXTERN_TEMPLATE(class money_get<char>)
3517
- _LIBCPP_EXTERN_TEMPLATE(class money_get<wchar_t>)
3279
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS money_get<char>)
3280
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS money_get<wchar_t>)
3518
3281
 
3519
3282
  // money_put
3520
3283
 
@@ -3688,11 +3451,11 @@ __money_put<_CharT>::__format(char_type* __mb, char_type*& __mi, char_type*& __m
3688
3451
  __mi = __mb;
3689
3452
  }
3690
3453
 
3691
- _LIBCPP_EXTERN_TEMPLATE(class __money_put<char>)
3692
- _LIBCPP_EXTERN_TEMPLATE(class __money_put<wchar_t>)
3454
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS __money_put<char>)
3455
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS __money_put<wchar_t>)
3693
3456
 
3694
3457
  template <class _CharT, class _OutputIterator = ostreambuf_iterator<_CharT> >
3695
- class _LIBCPP_TYPE_VIS money_put
3458
+ class _LIBCPP_TYPE_VIS_ONLY money_put
3696
3459
  : public locale::facet,
3697
3460
  private __money_put<_CharT>
3698
3461
  {
@@ -3845,8 +3608,8 @@ money_put<_CharT, _OutputIterator>::do_put(iter_type __s, bool __intl,
3845
3608
  return __pad_and_output(__s, __mb, __mi, __me, __iob, __fl);
3846
3609
  }
3847
3610
 
3848
- _LIBCPP_EXTERN_TEMPLATE(class money_put<char>)
3849
- _LIBCPP_EXTERN_TEMPLATE(class money_put<wchar_t>)
3611
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS money_put<char>)
3612
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS money_put<wchar_t>)
3850
3613
 
3851
3614
  // messages
3852
3615
 
@@ -3859,7 +3622,7 @@ public:
3859
3622
  };
3860
3623
 
3861
3624
  template <class _CharT>
3862
- class _LIBCPP_TYPE_VIS messages
3625
+ class _LIBCPP_TYPE_VIS_ONLY messages
3863
3626
  : public locale::facet,
3864
3627
  public messages_base
3865
3628
  {
@@ -3955,11 +3718,11 @@ messages<_CharT>::do_close(catalog __c) const
3955
3718
  #endif // !_WIN32
3956
3719
  }
3957
3720
 
3958
- _LIBCPP_EXTERN_TEMPLATE(class messages<char>)
3959
- _LIBCPP_EXTERN_TEMPLATE(class messages<wchar_t>)
3721
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS messages<char>)
3722
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS messages<wchar_t>)
3960
3723
 
3961
3724
  template <class _CharT>
3962
- class _LIBCPP_TYPE_VIS messages_byname
3725
+ class _LIBCPP_TYPE_VIS_ONLY messages_byname
3963
3726
  : public messages<_CharT>
3964
3727
  {
3965
3728
  public:
@@ -3979,13 +3742,13 @@ protected:
3979
3742
  ~messages_byname() {}
3980
3743
  };
3981
3744
 
3982
- _LIBCPP_EXTERN_TEMPLATE(class messages_byname<char>)
3983
- _LIBCPP_EXTERN_TEMPLATE(class messages_byname<wchar_t>)
3745
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS messages_byname<char>)
3746
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS messages_byname<wchar_t>)
3984
3747
 
3985
3748
  template<class _Codecvt, class _Elem = wchar_t,
3986
3749
  class _Wide_alloc = allocator<_Elem>,
3987
3750
  class _Byte_alloc = allocator<char> >
3988
- class _LIBCPP_TYPE_VIS wstring_convert
3751
+ class _LIBCPP_TYPE_VIS_ONLY wstring_convert
3989
3752
  {
3990
3753
  public:
3991
3754
  typedef basic_string<char, char_traits<char>, _Byte_alloc> byte_string;
@@ -4003,9 +3766,9 @@ private:
4003
3766
  wstring_convert(const wstring_convert& __wc);
4004
3767
  wstring_convert& operator=(const wstring_convert& __wc);
4005
3768
  public:
4006
- wstring_convert(_Codecvt* __pcvt = new _Codecvt);
3769
+ _LIBCPP_EXPLICIT_AFTER_CXX11 wstring_convert(_Codecvt* __pcvt = new _Codecvt);
4007
3770
  wstring_convert(_Codecvt* __pcvt, state_type __state);
4008
- wstring_convert(const byte_string& __byte_err,
3771
+ _LIBCPP_EXPLICIT_AFTER_CXX11 wstring_convert(const byte_string& __byte_err,
4009
3772
  const wide_string& __wide_err = wide_string());
4010
3773
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
4011
3774
  wstring_convert(wstring_convert&& __wc);
@@ -4035,7 +3798,7 @@ public:
4035
3798
  byte_string to_bytes(const _Elem* __first, const _Elem* __last);
4036
3799
 
4037
3800
  _LIBCPP_ALWAYS_INLINE
4038
- size_t converted() const {return __cvtcount_;}
3801
+ size_t converted() const _NOEXCEPT {return __cvtcount_;}
4039
3802
  _LIBCPP_ALWAYS_INLINE
4040
3803
  state_type state() const {return __cvtstate_;}
4041
3804
  };
@@ -4238,7 +4001,7 @@ wstring_convert<_Codecvt, _Elem, _Wide_alloc, _Byte_alloc>::
4238
4001
  }
4239
4002
 
4240
4003
  template <class _Codecvt, class _Elem = wchar_t, class _Tr = char_traits<_Elem> >
4241
- class _LIBCPP_TYPE_VIS wbuffer_convert
4004
+ class _LIBCPP_TYPE_VIS_ONLY wbuffer_convert
4242
4005
  : public basic_streambuf<_Elem, _Tr>
4243
4006
  {
4244
4007
  public:
@@ -4269,8 +4032,8 @@ private:
4269
4032
  wbuffer_convert(const wbuffer_convert&);
4270
4033
  wbuffer_convert& operator=(const wbuffer_convert&);
4271
4034
  public:
4272
- wbuffer_convert(streambuf* __bytebuf = 0, _Codecvt* __pcvt = new _Codecvt,
4273
- state_type __state = state_type());
4035
+ _LIBCPP_EXPLICIT_AFTER_CXX11 wbuffer_convert(streambuf* __bytebuf = 0,
4036
+ _Codecvt* __pcvt = new _Codecvt, state_type __state = state_type());
4274
4037
  ~wbuffer_convert();
4275
4038
 
4276
4039
  _LIBCPP_INLINE_VISIBILITY