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
@@ -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