diff --git a/posix.mak b/posix.mak index 2080712aa9c..3d568a8ea2c 100644 --- a/posix.mak +++ b/posix.mak @@ -221,7 +221,7 @@ EXTRA_DOCUMENTABLES := $(EXTRA_MODULES_LINUX) $(EXTRA_MODULES_WIN32) $(EXTRA_MOD EXTRA_MODULES_INTERNAL := $(addprefix std/, \ algorithm/internal concurrencybase \ $(addprefix internal/, \ - cstring digest/sha_SSSE3 encodinginit \ + cstring digest/sha_SSSE3 \ $(addprefix math/, biguintcore biguintnoasm biguintx86 \ errorfunction gammafunction ) \ processinit scopebuffer test/dummyrange \ diff --git a/std/encoding.d b/std/encoding.d index 3acb4199e58..9e9da74725c 100644 --- a/std/encoding.d +++ b/std/encoding.d @@ -106,7 +106,6 @@ module std.encoding; import std.traits; import std.typecons; import std.range.primitives; -import std.internal.encodinginit; @system unittest { @@ -2461,6 +2460,22 @@ abstract class EncodingScheme */ static EncodingScheme create(string encodingName) { + static bool registerDefaultEncodings() + { + EncodingScheme.register!EncodingSchemeASCII; + EncodingScheme.register!EncodingSchemeLatin1; + EncodingScheme.register!EncodingSchemeLatin2; + EncodingScheme.register!EncodingSchemeWindows1250; + EncodingScheme.register!EncodingSchemeWindows1252; + EncodingScheme.register!EncodingSchemeUtf8; + EncodingScheme.register!EncodingSchemeUtf16Native; + EncodingScheme.register!EncodingSchemeUtf32Native; + return true; + } + + static shared bool initialized; + import std.concurrency : initOnce; + initOnce!initialized(registerDefaultEncodings()); encodingName = toLower(encodingName); if (auto p = encodingName in supported) @@ -3368,20 +3383,6 @@ class EncodingSchemeUtf32Native : EncodingScheme assert(ub.length == 8); } - -// shared static this() called from encodinginit to break ctor cycle -extern(C) void std_encoding_shared_static_this() -{ - EncodingScheme.register!EncodingSchemeASCII; - EncodingScheme.register!EncodingSchemeLatin1; - EncodingScheme.register!EncodingSchemeLatin2; - EncodingScheme.register!EncodingSchemeWindows1250; - EncodingScheme.register!EncodingSchemeWindows1252; - EncodingScheme.register!EncodingSchemeUtf8; - EncodingScheme.register!EncodingSchemeUtf16Native; - EncodingScheme.register!EncodingSchemeUtf32Native; -} - //============================================================================= diff --git a/std/internal/encodinginit.d b/std/internal/encodinginit.d deleted file mode 100644 index 837e4649287..00000000000 --- a/std/internal/encodinginit.d +++ /dev/null @@ -1,19 +0,0 @@ -// Written in the D programming language. - -/++ - The purpose of this module is to perform static construction away from the - normal modules to eliminate cyclic construction errors. - - Copyright: Copyright 2011 - 2016 - License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). - Authors: Martin Nowak, Steven Schveighoffer - Source: $(PHOBOSSRC std/internal/_encodinginit.d) - +/ -module std.internal.encodinginit; - -extern(C) void std_encoding_shared_static_this(); - -shared static this() -{ - std_encoding_shared_static_this(); -} diff --git a/win32.mak b/win32.mak index 3a9f3b48d37..44657e2efce 100644 --- a/win32.mak +++ b/win32.mak @@ -271,7 +271,6 @@ SRC_STD_C_FREEBSD= \ SRC_STD_INTERNAL= \ std\internal\cstring.d \ - std\internal\encodinginit.d \ std\internal\processinit.d \ std\internal\unicode_tables.d \ std\internal\unicode_comp.d \ diff --git a/win64.mak b/win64.mak index 80bc8467ea0..b2fe50fab2e 100644 --- a/win64.mak +++ b/win64.mak @@ -296,7 +296,6 @@ SRC_STD_C_FREEBSD= \ SRC_STD_INTERNAL= \ std\internal\cstring.d \ - std\internal\encodinginit.d \ std\internal\processinit.d \ std\internal\unicode_tables.d \ std\internal\unicode_comp.d \