webruby 0.2.2 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- 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' ) {
|