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.
- checksums.yaml +4 -4
- data/lib/webruby/config.rb +4 -9
- data/lib/webruby/rake/files.rake +2 -2
- data/modules/emscripten/AUTHORS +9 -1
- data/modules/emscripten/CONTRIBUTING.markdown +5 -0
- data/modules/emscripten/ChangeLog +435 -0
- data/modules/emscripten/cmake/Modules/FindOpenAL.cmake +26 -0
- data/modules/emscripten/cmake/Platform/Emscripten.cmake +9 -2
- data/modules/emscripten/em++ +0 -2
- data/modules/emscripten/emcc +92 -32
- data/modules/emscripten/emlink.py +16 -13
- data/modules/emscripten/emmake +1 -1
- data/modules/emscripten/emrun +918 -0
- data/modules/emscripten/emrun.bat +2 -0
- data/modules/emscripten/emscripten.py +545 -20
- data/modules/emscripten/src/analyzer.js +6 -1
- data/modules/emscripten/src/compiler.js +25 -16
- data/modules/emscripten/src/emrun_postjs.js +20 -0
- data/modules/emscripten/{tests → src}/hello_world.js +0 -0
- data/modules/emscripten/src/intertyper.js +45 -16
- data/modules/emscripten/src/jsifier.js +78 -48
- data/modules/emscripten/src/library.js +381 -96
- data/modules/emscripten/src/library_browser.js +50 -53
- data/modules/emscripten/src/library_egl.js +66 -24
- data/modules/emscripten/src/library_fs.js +122 -90
- data/modules/emscripten/src/library_gl.js +739 -353
- data/modules/emscripten/src/library_glfw.js +9 -3
- data/modules/emscripten/src/library_glut.js +10 -5
- data/modules/emscripten/src/library_idbfs.js +14 -14
- data/modules/emscripten/src/library_memfs.js +65 -41
- data/modules/emscripten/src/library_nodefs.js +61 -9
- data/modules/emscripten/src/library_openal.js +4 -4
- data/modules/emscripten/src/library_path.js +9 -13
- data/modules/emscripten/src/library_sdl.js +301 -64
- data/modules/emscripten/src/library_sockfs.js +7 -5
- data/modules/emscripten/src/modules.js +62 -22
- data/modules/emscripten/src/parseTools.js +135 -102
- data/modules/emscripten/src/postamble.js +3 -4
- data/modules/emscripten/src/preamble.js +49 -29
- data/modules/emscripten/src/proxyClient.js +1 -1
- data/modules/emscripten/src/proxyWorker.js +10 -10
- data/modules/emscripten/src/relooper/Relooper.cpp +15 -4
- data/modules/emscripten/src/runtime.js +32 -8
- data/modules/emscripten/src/settings.js +25 -8
- data/modules/emscripten/src/shell.html +6 -3
- data/modules/emscripten/src/shell.js +13 -11
- data/modules/emscripten/src/simd.js +602 -432
- data/modules/emscripten/src/struct_info.json +22 -2
- data/modules/emscripten/src/utility.js +32 -17
- data/modules/emscripten/system/include/SDL/SDL_events.h +1 -0
- data/modules/emscripten/system/include/compat/ctype.h +17 -0
- data/modules/emscripten/system/include/compat/wchar.h +23 -0
- data/modules/emscripten/system/include/compat/wctype.h +23 -0
- data/modules/emscripten/system/include/emscripten/emmintrin.h +87 -0
- data/modules/emscripten/system/include/emscripten/emscripten.h +30 -4
- data/modules/emscripten/system/include/emscripten/vector.h +29 -1
- data/modules/emscripten/system/include/emscripten/xmmintrin.h +131 -0
- data/modules/emscripten/system/include/libcxx/CREDITS.TXT +9 -1
- data/modules/emscripten/system/include/libcxx/__bit_reference +8 -8
- data/modules/emscripten/system/include/libcxx/__config +95 -17
- data/modules/emscripten/system/include/libcxx/__debug +25 -4
- data/modules/emscripten/system/include/libcxx/__functional_03 +7 -7
- data/modules/emscripten/system/include/libcxx/__functional_base +169 -9
- data/modules/emscripten/system/include/libcxx/__functional_base_03 +1 -1
- data/modules/emscripten/system/include/libcxx/__hash_table +25 -25
- data/modules/emscripten/system/include/libcxx/__locale +21 -19
- data/modules/emscripten/system/include/libcxx/__mutex_base +2 -33
- data/modules/emscripten/system/include/libcxx/__split_buffer +9 -9
- data/modules/emscripten/system/include/libcxx/__std_stream +14 -0
- data/modules/emscripten/system/include/libcxx/__tree +35 -26
- data/modules/emscripten/system/include/libcxx/__tuple +15 -15
- data/modules/emscripten/system/include/libcxx/__tuple_03 +2 -2
- data/modules/emscripten/system/include/libcxx/__undef_min_max +8 -0
- data/modules/emscripten/system/include/libcxx/algorithm +121 -110
- data/modules/emscripten/system/include/libcxx/array +15 -15
- data/modules/emscripten/system/include/libcxx/bitset +4 -4
- data/modules/emscripten/system/include/libcxx/chrono +51 -17
- data/modules/emscripten/system/include/libcxx/cmath +25 -23
- data/modules/emscripten/system/include/libcxx/codecvt +21 -18
- data/modules/emscripten/system/include/libcxx/complex +48 -7
- data/modules/emscripten/system/include/libcxx/cstddef +1 -1
- data/modules/emscripten/system/include/libcxx/cstdio +8 -1
- data/modules/emscripten/system/include/libcxx/cstdlib +1 -1
- data/modules/emscripten/system/include/libcxx/cwchar +1 -1
- data/modules/emscripten/system/include/libcxx/deque +26 -12
- data/modules/emscripten/system/include/libcxx/dynarray +311 -0
- data/modules/emscripten/system/include/libcxx/exception +4 -4
- data/modules/emscripten/system/include/libcxx/ext/__hash +3 -3
- data/modules/emscripten/system/include/libcxx/ext/hash_map +19 -15
- data/modules/emscripten/system/include/libcxx/ext/hash_set +7 -3
- data/modules/emscripten/system/include/libcxx/forward_list +33 -7
- data/modules/emscripten/system/include/libcxx/fstream +4 -4
- data/modules/emscripten/system/include/libcxx/functional +200 -170
- data/modules/emscripten/system/include/libcxx/future +83 -39
- data/modules/emscripten/system/include/libcxx/initializer_list +24 -11
- data/modules/emscripten/system/include/libcxx/iomanip +147 -0
- data/modules/emscripten/system/include/libcxx/ios +24 -16
- data/modules/emscripten/system/include/libcxx/iosfwd +19 -19
- data/modules/emscripten/system/include/libcxx/istream +13 -8
- data/modules/emscripten/system/include/libcxx/iterator +108 -417
- data/modules/emscripten/system/include/libcxx/limits +8 -4
- data/modules/emscripten/system/include/libcxx/list +28 -8
- data/modules/emscripten/system/include/libcxx/locale +153 -390
- data/modules/emscripten/system/include/libcxx/map +280 -100
- data/modules/emscripten/system/include/libcxx/memory +49 -97
- data/modules/emscripten/system/include/libcxx/mutex +2 -2
- data/modules/emscripten/system/include/libcxx/new +43 -14
- data/modules/emscripten/system/include/libcxx/numeric +2 -2
- data/modules/emscripten/system/include/libcxx/optional +697 -0
- data/modules/emscripten/system/include/libcxx/ostream +17 -8
- data/modules/emscripten/system/include/libcxx/queue +5 -5
- data/modules/emscripten/system/include/libcxx/random +53 -51
- data/modules/emscripten/system/include/libcxx/ratio +11 -11
- data/modules/emscripten/system/include/libcxx/readme.txt +1 -1
- data/modules/emscripten/system/include/libcxx/regex +23 -20
- data/modules/emscripten/system/include/libcxx/scoped_allocator +1 -1
- data/modules/emscripten/system/include/libcxx/set +166 -2
- data/modules/emscripten/system/include/libcxx/shared_mutex +419 -0
- data/modules/emscripten/system/include/libcxx/sstream +4 -4
- data/modules/emscripten/system/include/libcxx/stack +3 -3
- data/modules/emscripten/system/include/libcxx/streambuf +5 -5
- data/modules/emscripten/system/include/libcxx/string +372 -324
- data/modules/emscripten/system/include/libcxx/support/ibm/limits.h +99 -0
- data/modules/emscripten/system/include/libcxx/support/ibm/support.h +54 -0
- data/modules/emscripten/system/include/libcxx/support/ibm/xlocale.h +326 -0
- data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +6 -6
- data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +15 -15
- data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +2 -0
- data/modules/emscripten/system/include/libcxx/support/win32/support.h +6 -1
- data/modules/emscripten/system/include/libcxx/system_error +14 -8
- data/modules/emscripten/system/include/libcxx/thread +7 -8
- data/modules/emscripten/system/include/libcxx/tuple +29 -88
- data/modules/emscripten/system/include/libcxx/type_traits +253 -209
- data/modules/emscripten/system/include/libcxx/typeindex +3 -3
- data/modules/emscripten/system/include/libcxx/unordered_map +162 -101
- data/modules/emscripten/system/include/libcxx/unordered_set +79 -2
- data/modules/emscripten/system/include/libcxx/utility +20 -20
- data/modules/emscripten/system/include/libcxx/valarray +23 -23
- data/modules/emscripten/system/include/libcxx/vector +114 -91
- data/modules/emscripten/system/lib/libc/musl/src/regex/regcomp.c +3352 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/regerror.c +35 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/regexec.c +1011 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/tre-mem.c +158 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/tre.h +231 -0
- data/modules/emscripten/system/lib/libcextra.symbols +7 -0
- data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +9 -1
- data/modules/emscripten/system/lib/libcxx/algorithm.cpp +1 -0
- data/modules/emscripten/system/lib/libcxx/debug.cpp +66 -42
- data/modules/emscripten/system/lib/libcxx/exception.cpp +88 -16
- data/modules/emscripten/system/lib/libcxx/future.cpp +6 -0
- data/modules/emscripten/system/lib/libcxx/ios.cpp +7 -2
- data/modules/emscripten/system/lib/libcxx/iostream.cpp +8 -8
- data/modules/emscripten/system/lib/libcxx/locale.cpp +38 -11
- data/modules/emscripten/system/lib/libcxx/mutex.cpp +3 -0
- data/modules/emscripten/system/lib/libcxx/new.cpp +44 -10
- data/modules/emscripten/system/lib/libcxx/optional.cpp +25 -0
- data/modules/emscripten/system/lib/libcxx/random.cpp +26 -0
- data/modules/emscripten/system/lib/libcxx/readme.txt +1 -1
- data/modules/emscripten/system/lib/libcxx/shared_mutex.cpp +101 -0
- data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +11 -7
- data/modules/emscripten/system/lib/libcxx/string.cpp +3 -1
- data/modules/emscripten/system/lib/libcxx/strstream.cpp +7 -7
- data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +12 -13
- data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +33 -36
- data/modules/emscripten/system/lib/libcxx/symbols +187 -168
- data/modules/emscripten/system/lib/libcxx/system_error.cpp +1 -0
- data/modules/emscripten/system/lib/libcxx/thread.cpp +7 -3
- data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +9 -6
- data/modules/emscripten/system/lib/libcxx/valarray.cpp +2 -0
- data/modules/emscripten/third_party/lzma.js/doit.bat +4 -0
- data/modules/emscripten/third_party/lzma.js/doit.sh +9 -2
- data/modules/emscripten/tools/cache.py +5 -7
- data/modules/emscripten/tools/cache.pyc +0 -0
- data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +7 -0
- data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +9 -1
- data/modules/emscripten/tools/eliminator/eliminator-test-output.js +3 -0
- data/modules/emscripten/tools/eliminator/eliminator-test.js +9 -1
- data/modules/emscripten/tools/file_packager.py +93 -50
- data/modules/emscripten/tools/js-optimizer.js +98 -48
- data/modules/emscripten/tools/js_optimizer.py +4 -4
- data/modules/emscripten/tools/js_optimizer.pyc +0 -0
- data/modules/emscripten/tools/jsrun.py +1 -1
- data/modules/emscripten/tools/jsrun.pyc +0 -0
- data/modules/emscripten/tools/response_file.py +6 -0
- data/modules/emscripten/tools/response_file.pyc +0 -0
- data/modules/emscripten/tools/settings_template_readonly.py +2 -0
- data/modules/emscripten/tools/shared.py +88 -34
- data/modules/emscripten/tools/shared.pyc +0 -0
- data/modules/emscripten/tools/split.py +21 -13
- data/modules/mruby/build_config.rb +7 -1
- data/modules/mruby/doc/compile/README.md +5 -9
- data/modules/mruby/include/mrbconf.h +5 -2
- data/modules/mruby/include/mruby/array.h +1 -0
- data/modules/mruby/include/mruby/compile.h +2 -4
- data/modules/mruby/include/mruby/dump.h +7 -16
- data/modules/mruby/include/mruby/hash.h +1 -1
- data/modules/mruby/include/mruby/irep.h +14 -2
- data/modules/mruby/include/mruby/khash.h +8 -7
- data/modules/mruby/include/mruby/string.h +1 -0
- data/modules/mruby/include/mruby/value.h +5 -2
- data/modules/mruby/include/mruby.h +12 -13
- data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +16 -6
- data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +18 -30
- data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +21 -0
- data/modules/mruby/mrbgems/mruby-math/src/math.c +1 -1
- data/modules/mruby/mrbgems/mruby-random/src/random.c +144 -47
- data/modules/mruby/mrbgems/mruby-random/test/random.rb +44 -0
- data/modules/mruby/mrbgems/mruby-struct/src/struct.c +5 -5
- data/modules/mruby/mrblib/numeric.rb +99 -33
- data/modules/mruby/src/array.c +11 -4
- data/modules/mruby/src/backtrace.c +2 -2
- data/modules/mruby/src/class.c +49 -30
- data/modules/mruby/src/codegen.c +131 -79
- data/modules/mruby/src/debug.c +1 -1
- data/modules/mruby/src/dump.c +213 -163
- data/modules/mruby/src/error.c +17 -17
- data/modules/mruby/src/error.h +1 -1
- data/modules/mruby/src/etc.c +10 -0
- data/modules/mruby/src/gc.c +35 -17
- data/modules/mruby/src/hash.c +5 -5
- data/modules/mruby/src/kernel.c +36 -14
- data/modules/mruby/src/load.c +238 -296
- data/modules/mruby/src/numeric.c +18 -98
- data/modules/mruby/src/object.c +3 -5
- data/modules/mruby/src/parse.y +63 -56
- data/modules/mruby/src/proc.c +8 -5
- data/modules/mruby/src/re.h +0 -1
- data/modules/mruby/src/state.c +65 -27
- data/modules/mruby/src/string.c +3 -31
- data/modules/mruby/src/symbol.c +3 -3
- data/modules/mruby/src/variable.c +12 -5
- data/modules/mruby/src/vm.c +90 -72
- data/modules/mruby/tasks/mruby_build.rake +10 -1
- data/modules/mruby/tasks/toolchains/gcc.rake +12 -2
- data/modules/mruby/tasks/toolchains/{vs2012.rake → visualcpp.rake} +1 -1
- data/modules/mruby/test/driver.c +3 -3
- data/modules/mruby/test/t/array.rb +5 -5
- data/modules/mruby/test/t/class.rb +14 -1
- data/modules/mruby/test/t/kernel.rb +4 -0
- data/modules/mruby/test/t/module.rb +4 -4
- data/modules/mruby/test/t/nameerror.rb +1 -1
- data/modules/mruby/tools/mrbc/mrbc.c +23 -17
- data/modules/mruby/travis_config.rb +10 -1
- metadata +28 -5
- data/modules/mruby/tasks/toolchains/vs2010.rake +0 -3
@@ -7,6 +7,12 @@
|
|
7
7
|
//
|
8
8
|
//===----------------------------------------------------------------------===//
|
9
9
|
|
10
|
+
#if defined(_WIN32)
|
11
|
+
// Must be defined before including stdlib.h to enable rand_s().
|
12
|
+
#define _CRT_RAND_S
|
13
|
+
#include <stdio.h>
|
14
|
+
#endif
|
15
|
+
|
10
16
|
#include "random"
|
11
17
|
#include "system_error"
|
12
18
|
|
@@ -19,6 +25,25 @@
|
|
19
25
|
|
20
26
|
_LIBCPP_BEGIN_NAMESPACE_STD
|
21
27
|
|
28
|
+
#if defined(_WIN32)
|
29
|
+
random_device::random_device(const string&)
|
30
|
+
{
|
31
|
+
}
|
32
|
+
|
33
|
+
random_device::~random_device()
|
34
|
+
{
|
35
|
+
}
|
36
|
+
|
37
|
+
unsigned
|
38
|
+
random_device::operator()()
|
39
|
+
{
|
40
|
+
unsigned r;
|
41
|
+
errno_t err = rand_s(&r);
|
42
|
+
if (err)
|
43
|
+
__throw_system_error(err, "random_device rand_s failed.");
|
44
|
+
return r;
|
45
|
+
}
|
46
|
+
#else
|
22
47
|
random_device::random_device(const string& __token)
|
23
48
|
: __f_(open(__token.c_str(), O_RDONLY))
|
24
49
|
{
|
@@ -38,6 +63,7 @@ random_device::operator()()
|
|
38
63
|
read(__f_, &r, sizeof(r));
|
39
64
|
return r;
|
40
65
|
}
|
66
|
+
#endif // defined(_WIN32)
|
41
67
|
|
42
68
|
double
|
43
69
|
random_device::entropy() const _NOEXCEPT
|
@@ -1 +1 @@
|
|
1
|
-
These files are from libc++, svn revision
|
1
|
+
These files are from libc++, svn revision 194185, 2013-11-07.
|
@@ -0,0 +1,101 @@
|
|
1
|
+
//===---------------------- shared_mutex.cpp ------------------------------===//
|
2
|
+
//
|
3
|
+
// The LLVM Compiler Infrastructure
|
4
|
+
//
|
5
|
+
// This file is dual licensed under the MIT and the University of Illinois Open
|
6
|
+
// Source Licenses. See LICENSE.TXT for details.
|
7
|
+
//
|
8
|
+
//===----------------------------------------------------------------------===//
|
9
|
+
|
10
|
+
#define _LIBCPP_BUILDING_SHARED_MUTEX
|
11
|
+
#include "shared_mutex"
|
12
|
+
|
13
|
+
_LIBCPP_BEGIN_NAMESPACE_STD
|
14
|
+
|
15
|
+
shared_mutex::shared_mutex()
|
16
|
+
: __state_(0)
|
17
|
+
{
|
18
|
+
}
|
19
|
+
|
20
|
+
// Exclusive ownership
|
21
|
+
|
22
|
+
void
|
23
|
+
shared_mutex::lock()
|
24
|
+
{
|
25
|
+
unique_lock<mutex> lk(__mut_);
|
26
|
+
while (__state_ & __write_entered_)
|
27
|
+
__gate1_.wait(lk);
|
28
|
+
__state_ |= __write_entered_;
|
29
|
+
while (__state_ & __n_readers_)
|
30
|
+
__gate2_.wait(lk);
|
31
|
+
}
|
32
|
+
|
33
|
+
bool
|
34
|
+
shared_mutex::try_lock()
|
35
|
+
{
|
36
|
+
unique_lock<mutex> lk(__mut_);
|
37
|
+
if (__state_ == 0)
|
38
|
+
{
|
39
|
+
__state_ = __write_entered_;
|
40
|
+
return true;
|
41
|
+
}
|
42
|
+
return false;
|
43
|
+
}
|
44
|
+
|
45
|
+
void
|
46
|
+
shared_mutex::unlock()
|
47
|
+
{
|
48
|
+
lock_guard<mutex> _(__mut_);
|
49
|
+
__state_ = 0;
|
50
|
+
__gate1_.notify_all();
|
51
|
+
}
|
52
|
+
|
53
|
+
// Shared ownership
|
54
|
+
|
55
|
+
void
|
56
|
+
shared_mutex::lock_shared()
|
57
|
+
{
|
58
|
+
unique_lock<mutex> lk(__mut_);
|
59
|
+
while ((__state_ & __write_entered_) || (__state_ & __n_readers_) == __n_readers_)
|
60
|
+
__gate1_.wait(lk);
|
61
|
+
unsigned num_readers = (__state_ & __n_readers_) + 1;
|
62
|
+
__state_ &= ~__n_readers_;
|
63
|
+
__state_ |= num_readers;
|
64
|
+
}
|
65
|
+
|
66
|
+
bool
|
67
|
+
shared_mutex::try_lock_shared()
|
68
|
+
{
|
69
|
+
unique_lock<mutex> lk(__mut_);
|
70
|
+
unsigned num_readers = __state_ & __n_readers_;
|
71
|
+
if (!(__state_ & __write_entered_) && num_readers != __n_readers_)
|
72
|
+
{
|
73
|
+
++num_readers;
|
74
|
+
__state_ &= ~__n_readers_;
|
75
|
+
__state_ |= num_readers;
|
76
|
+
return true;
|
77
|
+
}
|
78
|
+
return false;
|
79
|
+
}
|
80
|
+
|
81
|
+
void
|
82
|
+
shared_mutex::unlock_shared()
|
83
|
+
{
|
84
|
+
lock_guard<mutex> _(__mut_);
|
85
|
+
unsigned num_readers = (__state_ & __n_readers_) - 1;
|
86
|
+
__state_ &= ~__n_readers_;
|
87
|
+
__state_ |= num_readers;
|
88
|
+
if (__state_ & __write_entered_)
|
89
|
+
{
|
90
|
+
if (num_readers == 0)
|
91
|
+
__gate2_.notify_one();
|
92
|
+
}
|
93
|
+
else
|
94
|
+
{
|
95
|
+
if (num_readers == __n_readers_ - 1)
|
96
|
+
__gate1_.notify_one();
|
97
|
+
}
|
98
|
+
}
|
99
|
+
|
100
|
+
|
101
|
+
_LIBCPP_END_NAMESPACE_STD
|
@@ -28,7 +28,9 @@
|
|
28
28
|
|
29
29
|
// Note: optimize for size
|
30
30
|
|
31
|
+
#if ! defined(_LIBCPP_MSVC)
|
31
32
|
#pragma GCC visibility push(hidden)
|
33
|
+
#endif
|
32
34
|
|
33
35
|
namespace
|
34
36
|
{
|
@@ -47,9 +49,9 @@ private:
|
|
47
49
|
count_t& count() const _NOEXCEPT {return (count_t&)(*(str_ - sizeof(count_t)));}
|
48
50
|
public:
|
49
51
|
explicit __libcpp_nmstr(const char* msg);
|
50
|
-
__libcpp_nmstr(const __libcpp_nmstr& s)
|
51
|
-
__libcpp_nmstr& operator=(const __libcpp_nmstr& s)
|
52
|
-
~__libcpp_nmstr()
|
52
|
+
__libcpp_nmstr(const __libcpp_nmstr& s) _NOEXCEPT;
|
53
|
+
__libcpp_nmstr& operator=(const __libcpp_nmstr& s) _NOEXCEPT;
|
54
|
+
~__libcpp_nmstr();
|
53
55
|
const char* c_str() const _NOEXCEPT {return str_;}
|
54
56
|
};
|
55
57
|
|
@@ -65,14 +67,14 @@ __libcpp_nmstr::__libcpp_nmstr(const char* msg)
|
|
65
67
|
}
|
66
68
|
|
67
69
|
inline
|
68
|
-
__libcpp_nmstr::__libcpp_nmstr(const __libcpp_nmstr& s)
|
70
|
+
__libcpp_nmstr::__libcpp_nmstr(const __libcpp_nmstr& s) _NOEXCEPT
|
69
71
|
: str_(s.str_)
|
70
72
|
{
|
71
73
|
__sync_add_and_fetch(&count(), 1);
|
72
74
|
}
|
73
75
|
|
74
76
|
__libcpp_nmstr&
|
75
|
-
__libcpp_nmstr::operator=(const __libcpp_nmstr& s)
|
77
|
+
__libcpp_nmstr::operator=(const __libcpp_nmstr& s) _NOEXCEPT
|
76
78
|
{
|
77
79
|
const char* p = str_;
|
78
80
|
str_ = s.str_;
|
@@ -91,7 +93,9 @@ __libcpp_nmstr::~__libcpp_nmstr()
|
|
91
93
|
|
92
94
|
}
|
93
95
|
|
96
|
+
#if ! defined(_LIBCPP_MSVC)
|
94
97
|
#pragma GCC visibility pop
|
98
|
+
#endif
|
95
99
|
|
96
100
|
namespace std // purposefully not using versioning namespace
|
97
101
|
{
|
@@ -123,7 +127,7 @@ logic_error::operator=(const logic_error& le) _NOEXCEPT
|
|
123
127
|
return *this;
|
124
128
|
}
|
125
129
|
|
126
|
-
#
|
130
|
+
#if !defined(_LIBCPPABI_VERSION) && !defined(LIBSTDCXX)
|
127
131
|
|
128
132
|
logic_error::~logic_error() _NOEXCEPT
|
129
133
|
{
|
@@ -167,7 +171,7 @@ runtime_error::operator=(const runtime_error& le) _NOEXCEPT
|
|
167
171
|
return *this;
|
168
172
|
}
|
169
173
|
|
170
|
-
#
|
174
|
+
#if !defined(_LIBCPPABI_VERSION) && !defined(LIBSTDCXX)
|
171
175
|
|
172
176
|
runtime_error::~runtime_error() _NOEXCEPT
|
173
177
|
{
|
@@ -7,6 +7,8 @@
|
|
7
7
|
//
|
8
8
|
//===----------------------------------------------------------------------===//
|
9
9
|
|
10
|
+
#define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__;
|
11
|
+
|
10
12
|
#include "string"
|
11
13
|
#include "cstdlib"
|
12
14
|
#include "cwchar"
|
@@ -89,7 +91,7 @@ inline
|
|
89
91
|
int
|
90
92
|
as_integer(const string& func, const string& s, size_t* idx, int base )
|
91
93
|
{
|
92
|
-
// Use long as no
|
94
|
+
// Use long as no Standard string to integer exists.
|
93
95
|
long r = as_integer_helper<long>( func, s, idx, base, strtol );
|
94
96
|
if (r < numeric_limits<int>::min() || numeric_limits<int>::max() < r)
|
95
97
|
throw_from_string_out_of_range(func);
|
@@ -156,13 +156,13 @@ strstreambuf::overflow(int_type __c)
|
|
156
156
|
{
|
157
157
|
if ((__strmode_ & __dynamic) == 0 || (__strmode_ & __frozen) != 0)
|
158
158
|
return int_type(EOF);
|
159
|
-
|
160
|
-
|
159
|
+
size_t old_size = static_cast<size_t> ((epptr() ? epptr() : egptr()) - eback());
|
160
|
+
size_t new_size = max<size_t>(static_cast<size_t>(__alsize_), 2*old_size);
|
161
161
|
if (new_size == 0)
|
162
162
|
new_size = __default_alsize;
|
163
163
|
char* buf = nullptr;
|
164
164
|
if (__palloc_)
|
165
|
-
buf = static_cast<char*>(__palloc_(
|
165
|
+
buf = static_cast<char*>(__palloc_(new_size));
|
166
166
|
else
|
167
167
|
buf = new char[new_size];
|
168
168
|
if (buf == nullptr)
|
@@ -229,8 +229,8 @@ strstreambuf::pos_type
|
|
229
229
|
strstreambuf::seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __which)
|
230
230
|
{
|
231
231
|
off_type __p(-1);
|
232
|
-
bool pos_in = __which & ios::in;
|
233
|
-
bool pos_out = __which & ios::out;
|
232
|
+
bool pos_in = (__which & ios::in) != 0;
|
233
|
+
bool pos_out = (__which & ios::out) != 0;
|
234
234
|
bool legal = false;
|
235
235
|
switch (__way)
|
236
236
|
{
|
@@ -287,8 +287,8 @@ strstreambuf::pos_type
|
|
287
287
|
strstreambuf::seekpos(pos_type __sp, ios_base::openmode __which)
|
288
288
|
{
|
289
289
|
off_type __p(-1);
|
290
|
-
bool pos_in = __which & ios::in;
|
291
|
-
bool pos_out = __which & ios::out;
|
290
|
+
bool pos_in = (__which & ios::in) != 0;
|
291
|
+
bool pos_out = (__which & ios::out) != 0;
|
292
292
|
if (pos_in || pos_out)
|
293
293
|
{
|
294
294
|
if (!((pos_in && gptr() == nullptr) || (pos_out && pptr() == nullptr)))
|
@@ -8,9 +8,8 @@
|
|
8
8
|
//
|
9
9
|
//===----------------------------------------------------------------------===//
|
10
10
|
|
11
|
-
#include
|
11
|
+
#include <locale>
|
12
12
|
#include <cstdarg> // va_start, va_end
|
13
|
-
#include <cwchar> // mbstate_t
|
14
13
|
|
15
14
|
// FIXME: base currently unused. Needs manual work to construct the new locale
|
16
15
|
locale_t newlocale( int mask, const char * locale, locale_t /*base*/ )
|
@@ -34,38 +33,38 @@ lconv *localeconv_l( locale_t loc )
|
|
34
33
|
__locale_raii __current( uselocale(loc), uselocale );
|
35
34
|
return localeconv();
|
36
35
|
}
|
37
|
-
size_t mbrlen_l( const char *
|
38
|
-
mbstate_t *
|
36
|
+
size_t mbrlen_l( const char *__restrict s, size_t n,
|
37
|
+
mbstate_t *__restrict ps, locale_t loc )
|
39
38
|
{
|
40
39
|
__locale_raii __current( uselocale(loc), uselocale );
|
41
40
|
return mbrlen( s, n, ps );
|
42
41
|
}
|
43
|
-
size_t mbsrtowcs_l( wchar_t *
|
44
|
-
size_t len, mbstate_t *
|
42
|
+
size_t mbsrtowcs_l( wchar_t *__restrict dst, const char **__restrict src,
|
43
|
+
size_t len, mbstate_t *__restrict ps, locale_t loc )
|
45
44
|
{
|
46
45
|
__locale_raii __current( uselocale(loc), uselocale );
|
47
46
|
return mbsrtowcs( dst, src, len, ps );
|
48
47
|
}
|
49
|
-
size_t wcrtomb_l( char *
|
48
|
+
size_t wcrtomb_l( char *__restrict s, wchar_t wc, mbstate_t *__restrict ps,
|
50
49
|
locale_t loc )
|
51
50
|
{
|
52
51
|
__locale_raii __current( uselocale(loc), uselocale );
|
53
52
|
return wcrtomb( s, wc, ps );
|
54
53
|
}
|
55
|
-
size_t mbrtowc_l( wchar_t *
|
56
|
-
size_t n, mbstate_t *
|
54
|
+
size_t mbrtowc_l( wchar_t *__restrict pwc, const char *__restrict s,
|
55
|
+
size_t n, mbstate_t *__restrict ps, locale_t loc )
|
57
56
|
{
|
58
57
|
__locale_raii __current( uselocale(loc), uselocale );
|
59
58
|
return mbrtowc( pwc, s, n, ps );
|
60
59
|
}
|
61
|
-
size_t mbsnrtowcs_l( wchar_t *
|
62
|
-
size_t nms, size_t len, mbstate_t *
|
60
|
+
size_t mbsnrtowcs_l( wchar_t *__restrict dst, const char **__restrict src,
|
61
|
+
size_t nms, size_t len, mbstate_t *__restrict ps, locale_t loc )
|
63
62
|
{
|
64
63
|
__locale_raii __current( uselocale(loc), uselocale );
|
65
64
|
return mbsnrtowcs( dst, src, nms, len, ps );
|
66
65
|
}
|
67
|
-
size_t wcsnrtombs_l( char *
|
68
|
-
size_t nwc, size_t len, mbstate_t *
|
66
|
+
size_t wcsnrtombs_l( char *__restrict dst, const wchar_t **__restrict src,
|
67
|
+
size_t nwc, size_t len, mbstate_t *__restrict ps, locale_t loc )
|
69
68
|
{
|
70
69
|
__locale_raii __current( uselocale(loc), uselocale );
|
71
70
|
return wcsnrtombs( dst, src, nwc, len, ps );
|
@@ -14,14 +14,7 @@
|
|
14
14
|
#include <cstdio> // vsprintf, vsnprintf
|
15
15
|
#include <cstring> // strcpy, wcsncpy
|
16
16
|
#include <cwchar> // mbstate_t
|
17
|
-
#include <memory> // unique_ptr
|
18
17
|
|
19
|
-
namespace { // Private
|
20
|
-
|
21
|
-
struct free_deleter {
|
22
|
-
inline void operator()(char* p) { free(p); }
|
23
|
-
};
|
24
|
-
}
|
25
18
|
// Some of these functions aren't standard or if they conform, the name does not.
|
26
19
|
|
27
20
|
int asprintf(char **sptr, const char *__restrict format, ...)
|
@@ -29,44 +22,44 @@ int asprintf(char **sptr, const char *__restrict format, ...)
|
|
29
22
|
va_list ap;
|
30
23
|
va_start(ap, format);
|
31
24
|
int result;
|
32
|
-
|
33
|
-
try {
|
34
|
-
#endif
|
35
|
-
result = vasprintf(sptr, format, ap);
|
36
|
-
#ifndef _LIBCPP_NO_EXCEPTIONS
|
37
|
-
} catch( ... ) {
|
38
|
-
va_end(ap);
|
39
|
-
throw;
|
40
|
-
}
|
41
|
-
#endif
|
25
|
+
result = vasprintf(sptr, format, ap);
|
42
26
|
va_end(ap);
|
43
27
|
return result;
|
44
28
|
}
|
45
29
|
|
46
|
-
// Like sprintf, but when return value >= 0 it returns
|
30
|
+
// Like sprintf, but when return value >= 0 it returns
|
31
|
+
// a pointer to a malloc'd string in *sptr.
|
47
32
|
// If return >= 0, use free to delete *sptr.
|
48
33
|
int vasprintf( char **sptr, const char *__restrict format, va_list ap )
|
49
34
|
{
|
50
35
|
*sptr = NULL;
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
36
|
+
// Query the count required.
|
37
|
+
int count = _vsnprintf( NULL, 0, format, ap );
|
38
|
+
if (count < 0)
|
39
|
+
return count;
|
40
|
+
size_t buffer_size = static_cast<size_t>(count) + 1;
|
41
|
+
char* p = static_cast<char*>(malloc(buffer_size));
|
42
|
+
if ( ! p )
|
43
|
+
return -1;
|
44
|
+
// If we haven't used exactly what was required, something is wrong.
|
45
|
+
// Maybe bug in vsnprintf. Report the error and return.
|
46
|
+
if (_vsnprintf(p, buffer_size, format, ap) != count) {
|
47
|
+
free(p);
|
48
|
+
return -1;
|
60
49
|
}
|
61
|
-
|
50
|
+
// All good. This is returning memory to the caller not freeing it.
|
51
|
+
*sptr = p;
|
62
52
|
return count;
|
63
53
|
}
|
64
54
|
|
65
|
-
// Returns >= 0: the number of wide characters found in the
|
66
|
-
//
|
67
|
-
//
|
55
|
+
// Returns >= 0: the number of wide characters found in the
|
56
|
+
// multi byte sequence src (of src_size_bytes), that fit in the buffer dst
|
57
|
+
// (of max_dest_chars elements size). The count returned excludes the
|
58
|
+
// null terminator. When dst is NULL, no characters are copied
|
59
|
+
// and no "out" parameters are updated.
|
68
60
|
// Returns (size_t) -1: an incomplete sequence encountered.
|
69
|
-
// Leaves *src pointing the next character to convert or NULL
|
61
|
+
// Leaves *src pointing the next character to convert or NULL
|
62
|
+
// if a null character was converted from *src.
|
70
63
|
size_t mbsnrtowcs( wchar_t *__restrict dst, const char **__restrict src,
|
71
64
|
size_t src_size_bytes, size_t max_dest_chars, mbstate_t *__restrict ps )
|
72
65
|
{
|
@@ -112,10 +105,13 @@ size_t mbsnrtowcs( wchar_t *__restrict dst, const char **__restrict src,
|
|
112
105
|
}
|
113
106
|
|
114
107
|
// Converts max_source_chars from the wide character buffer pointer to by *src,
|
115
|
-
// into the multi byte character sequence buffer stored at dst which must be
|
116
|
-
//
|
108
|
+
// into the multi byte character sequence buffer stored at dst which must be
|
109
|
+
// dst_size_bytes bytes in size.
|
110
|
+
// Returns >= 0: the number of bytes in the sequence sequence
|
111
|
+
// converted frome *src, excluding the null terminator.
|
117
112
|
// Returns size_t(-1) if an error occurs, also sets errno.
|
118
|
-
// If dst is NULL dst_size_bytes is ignored and no bytes are copied to dst
|
113
|
+
// If dst is NULL dst_size_bytes is ignored and no bytes are copied to dst
|
114
|
+
// and no "out" parameters are updated.
|
119
115
|
size_t wcsnrtombs( char *__restrict dst, const wchar_t **__restrict src,
|
120
116
|
size_t max_source_chars, size_t dst_size_bytes, mbstate_t *__restrict ps )
|
121
117
|
{
|
@@ -138,7 +134,8 @@ size_t wcsnrtombs( char *__restrict dst, const wchar_t **__restrict src,
|
|
138
134
|
result = wcrtomb_s( &char_size, dst + dest_converted, dest_remaining, c, ps);
|
139
135
|
else
|
140
136
|
result = wcrtomb_s( &char_size, NULL, 0, c, ps);
|
141
|
-
// If result is zero there is no error and char_size contains the
|
137
|
+
// If result is zero there is no error and char_size contains the
|
138
|
+
// size of the multi-byte-sequence converted.
|
142
139
|
// Otherwise result indicates an errno type error.
|
143
140
|
if ( result == no_error ) {
|
144
141
|
if ( c == L'\0' ) {
|