diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 817c61e..a1a0c96 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,15 +14,17 @@ jobs: - dmd-latest - ldc-latest - - dmd-2.097.2 - - dmd-2.096.1 - - dmd-2.095.1 - - dmd-2.094.2 + - dmd-2.098.1 + - dmd-2.102.2 + - dmd-2.106.1 - - ldc-1.27.1 - - ldc-1.26.0 - - ldc-1.25.0 - - ldc-1.24.0 + - ldc-1.28.1 + - ldc-1.32.1 + - ldc-1.36.0 + exclude: + # linker error "section __DATA/__thread_bss has type zero-fill but non-zero file offset" + - os: macOS-latest + dc: dmd-2.098.1 runs-on: ${{ matrix.os }} steps: diff --git a/dub.sdl b/dub.sdl index 57170e8..ef2fb28 100644 --- a/dub.sdl +++ b/dub.sdl @@ -6,13 +6,18 @@ license "MIT" targetType "library" -dependency "taggedalgebraic" version="~>0.11.18" optional=true -dependency "mir-core" version="~>1.1.54" optional=true -dependency "sumtype" version="~>1.1.0" optional=true +dependency "taggedalgebraic" version="~>0.11" optional=true +dependency "mir-core" version="~>1.1" optional=true +dependency "sumtype" version="~>1.1" optional=true configuration "default" { } +configuration "unittest" { + dflags `-allinst` +} + configuration "allow-raw-unions" { versions "allowRawUnions" + dflags `-allinst` } diff --git a/example/all_example.d b/example/all_example.d index 14ed320..73925a3 100644 --- a/example/all_example.d +++ b/example/all_example.d @@ -1,7 +1,7 @@ /+ dub.sdl: - dependency "mir-core" version="~>1.1.54" - dependency "sumtype" version="~>1.1.0" - dependency "taggedalgebraic" version="~>0.11.18" + dependency "mir-core" version="~>1.1" + dependency "sumtype" version="~>1.1" + dependency "taggedalgebraic" version="~>0.11" dependency "sbin" path=".." +/ @@ -13,12 +13,14 @@ import sbin; struct Foo { string name; } -alias MA = Algebraic!( - TaggedType!(typeof(null), "nil"), - TaggedType!(int, "count"), - TaggedType!(string, "str"), - TaggedType!(Foo, "foo"), -); +static union U +{ + typeof(null) nil; + int count; + string str; + Foo foo; +} +alias MA = Algebraic!U; static assert (isTagged!(MA).any); static assert (isTagged!(MA).isMirAlgebraic); diff --git a/example/mir_algebraic_example.d b/example/mir_algebraic_example.d index e1b3a13..58b69e1 100644 --- a/example/mir_algebraic_example.d +++ b/example/mir_algebraic_example.d @@ -1,5 +1,5 @@ /+ dub.sdl: - dependency "mir-core" version="~>1.1.54" + dependency "mir-core" version="~>1.1" dependency "sbin" path=".." +/ @@ -8,12 +8,14 @@ import sbin; struct Foo { string name; } -alias TUnion = Algebraic!( - TaggedType!(typeof(null), "nil"), - TaggedType!(int, "count"), - TaggedType!(string, "str"), - TaggedType!(Foo, "foo"), -); +static union U +{ + typeof(null) nil; + int count; + string str; + Foo foo; +} +alias TUnion = Algebraic!U; static assert (isTagged!(TUnion).any); static assert (isTagged!(TUnion).isMirAlgebraic); @@ -42,7 +44,7 @@ void barTest() assert (sdbar.data.length == 4); assert (sdbar.data[0].kind == TUnion.Kind.count); assert (sdbar.data[0].get!int == 42); - //assert (sdbar.data[0].count == 42); + assert (sdbar.data[0].count == 42); // deserialize to new memory assert (bar.data[1].get!string.ptr != @@ -50,11 +52,11 @@ void barTest() assert (sdbar.data[1].kind == TUnion.Kind.str); assert (sdbar.data[1].get!string == "Hello"); - //assert (sdbar.data[1].str == "Hello"); + assert (sdbar.data[1].str == "Hello"); assert (sdbar.data[2].kind == TUnion.Kind.foo); assert (sdbar.data[2].get!Foo == Foo("ABC")); - //assert (sdbar.data[2].foo == Foo("ABC")); + assert (sdbar.data[2].foo == Foo("ABC")); assert (sdbar.data[2].get!Foo.name.ptr != bar.data[2].get!Foo.name.ptr); diff --git a/example/sumtype_example.d b/example/sumtype_example.d index 39caff5..b3f66a1 100644 --- a/example/sumtype_example.d +++ b/example/sumtype_example.d @@ -1,5 +1,5 @@ /+ dub.sdl: - dependency "sumtype" version="~>1.1.0" + dependency "sumtype" version="~>1.1" dependency "sbin" path=".." +/ diff --git a/example/taggedalgebraic_example.d b/example/taggedalgebraic_example.d index 3dc4774..64d6297 100644 --- a/example/taggedalgebraic_example.d +++ b/example/taggedalgebraic_example.d @@ -1,5 +1,5 @@ /+ dub.sdl: - dependency "taggedalgebraic" version="~>0.11.18" + dependency "taggedalgebraic" version="~>0.11" dependency "sbin" path=".." +/ diff --git a/source/sbin/deserialize.d b/source/sbin/deserialize.d index ea90c51..13d3ae9 100644 --- a/source/sbin/deserialize.d +++ b/source/sbin/deserialize.d @@ -16,7 +16,7 @@ import sbin.repr; target = reference to result object +/ void sbinDeserializePart(RH=EmptyReprHandler, R, string file=__FILE__, size_t line=__LINE__, Target...) - (ref R range, ref Target target) if (isInputRange!R && is(Unqual!(ElementType!R) == ubyte) && isReprHandler!RH) + (scope ref R range, ref Target target) if (isInputRange!R && is(Unqual!(ElementType!R) == ubyte) && isReprHandler!RH) { import sbin.util.stack : Stack; @@ -273,7 +273,7 @@ void sbinDeserializePart(RH=EmptyReprHandler, R, string file=__FILE__, size_t li deserialized value +/ Target sbinDeserializePart(RH=EmptyReprHandler, Target, R, string file=__FILE__, size_t line=__LINE__) - (ref R range) if (isReprHandler!RH) + (scope ref R range) if (isReprHandler!RH) { Unqual!Target ret; sbinDeserializePart!(RH, R, file, line, Target)(range, ret); @@ -281,7 +281,7 @@ Target sbinDeserializePart(RH=EmptyReprHandler, Target, R, string file=__FILE__, } /// ditto -Target sbinDeserializePart(Target, R, string file=__FILE__, size_t line=__LINE__)(ref R range) +Target sbinDeserializePart(Target, R, string file=__FILE__, size_t line=__LINE__)(scope ref R range) { Unqual!Target ret; sbinDeserializePart!(EmptyReprHandler, R, file, line, Target)(range, ret); @@ -297,7 +297,7 @@ Target sbinDeserializePart(Target, R, string file=__FILE__, size_t line=__LINE__ deserialized value +/ Target sbinDeserialize(RH=EmptyReprHandler, Target, R, string file=__FILE__, size_t line=__LINE__) - (R range) if (isReprHandler!RH) + (scope R range) if (isReprHandler!RH) { Unqual!Target ret; sbinDeserialize!(RH)(range, ret); @@ -305,7 +305,7 @@ Target sbinDeserialize(RH=EmptyReprHandler, Target, R, string file=__FILE__, siz } /// ditto -Target sbinDeserialize(Target, R, string file=__FILE__, size_t line=__LINE__)(R range) +Target sbinDeserialize(Target, R, string file=__FILE__, size_t line=__LINE__)(scope R range) { Unqual!Target ret; sbinDeserialize!(EmptyReprHandler, R, file, line)(range, ret); @@ -322,7 +322,7 @@ Target sbinDeserialize(Target, R, string file=__FILE__, size_t line=__LINE__)(R SBinDeserializeException if range isn't empty after deseriazlie +/ void sbinDeserialize(RH=EmptyReprHandler, R, string file=__FILE__, size_t line=__LINE__, Target...) - (R range, ref Target target) if (isReprHandler!RH) + (scope R range, ref Target target) if (isReprHandler!RH) { sbinDeserializePart!(RH, R, file, line)(range, target);