Sönke Ludwig
7b34bdadde
Fix compile error when naming a TaggedUnion field "move".
2020-04-06 13:45:16 +02:00
Sönke Ludwig
a3078c34fc
Fix another compile error related to generic visitors.
2020-04-04 15:15:53 +02:00
Sönke Ludwig
7a6da0ff79
Avoid instantiating generic visitor with types it cannot handle.
...
In cases where statically typed visitors need to be defined to avoid compile errors in a generic visitor, the generic one was still instantiated with the types already handled by the statically typed one(s), possibly resulting in a compile error.
2020-04-04 12:23:14 +02:00
Rasmus Thomsen
30b6690dca
meson: fix build on macOS
2020-03-29 08:35:24 +02:00
Rasmus Thomsen
2800c0ceb2
Add support for building with meson
...
Also fix an import in taggedalgebraic.d
2020-03-26 10:51:43 +01:00
dukc
c42c9a4e57
Allowed copying of tagged unions containing unit values
2020-02-21 18:00:19 +02:00
Geod24
7d47caa87d
Enable dip1000, drop support for < 2.085.1, test on OSX
2020-02-04 13:45:42 +09:00
Sönke Ludwig
fe2447f71a
Merge pull request #40 from schveiguy/addsafeonly
...
Add safeOnly UDA, associated tests. Fix issue with opUnary.
2019-12-01 18:17:41 +01:00
Steven Schveighoffer
af42d78bf6
Add safeOnly UDA, associated tests. Fix issue with opUnary.
2019-12-01 10:54:07 -05:00
Sönke Ludwig
73a494f0ae
Include the whole API in package.d
2019-12-01 00:03:18 +01:00
Sönke Ludwig
8f425b37b5
Merge all visit() implementations into a single module.
...
Avoids template instantiation conflicts introduced by adding the second visit() in taggedalgebraic.taggedalgebraic. A compatibility alias is left in the taggedunion module to avoid breaking backwards compatibility.
2019-12-01 00:03:00 +01:00
Sönke Ludwig
44a2b970af
Merge pull request #42 from schveiguy/addvisit
...
Add forwarder for visit and tryVisit from TaggedUnion to TaggedAlgebraic
2019-11-30 16:24:36 +01:00
Steven Schveighoffer
4bcd34d417
Add forwarder for visit and tryVisit from TaggedUnion to TaggedAlgebraic
2019-11-30 09:53:45 -05:00
Steven Schveighoffer
c322e43fd4
Add access of value via Kind enum. Fixes #38 .
2019-11-30 09:30:29 -05:00
Steven Schveighoffer
f0d324f43f
Allow typeof(null) to provide constructors and opAssign for TaggedUnion.
...
Fixes #36 .
2019-10-30 18:12:50 -04:00
Sönke Ludwig
b037967ed0
Add unit test.
2019-10-25 22:20:27 +02:00
Sönke Ludwig
d6d480b647
Add TaggedAlgebraic.toString().
...
Enables a better string representation, mainly useful for debugging purposes.
2019-10-25 22:16:44 +02:00
John Colvin
c128744e19
check sizeof
2019-10-24 17:59:04 +01:00
John Colvin
9789701e6e
fix array members
2019-10-24 17:54:00 +01:00
Sönke Ludwig
f8a9b8c651
Add stronger restrictions to TA.opDispatch. Fixes #9 .
...
Defines opDispatch as two levels of nested templates, so that the outer level only checks the member name to match any member defined by one of the contained types. This allows hasMember!TA to report proper values instead of always assuming `true`.
As a side-effect, `isOutputRange!(TA, T)` now only returns true, if any of the contained types is actually a matching output range.
2019-10-11 11:13:57 +02:00
Sönke Ludwig
f4c7030459
Let all TaggedAlgebraic operations return as auto ref. Fixes #15 .
2019-10-11 10:28:23 +02:00
Sönke Ludwig
ba79a25298
Add explicit unit test for commonAlignment.
2019-04-16 11:49:42 +02:00
Sönke Ludwig
fd85603576
Compute the proper struct alignment for TaggedUnion.
...
Before this change, the alignment of TaggedAlgebraic was always 4, which in turn had a 50% chance of aligning 8-byte pointers on a non-8-byte boundary, causing the pointer to become invisible to the GC (and less bad, causing performance degradation when dereferencing the pointer). This would happen in particular when the total size of the TaggedUnion/TaggedAlgebraic was not divisible by 8 and an array of values was built.
2019-04-16 11:37:04 +02:00
Denis Feklushkin
3258572585
Ddox fix and CI test added
2019-03-05 19:04:45 +07:00
Sönke Ludwig
141a4e290a
Detect types that are obviously not function literals.
...
This avoids extremely cryptic error messages with no pointer to the origin of the problem.
2019-02-24 14:24:37 +01:00
Sönke Ludwig
953198a293
Fix using non-copyable types with TaggedUnion.
2019-02-23 21:49:08 +01:00
Sönke Ludwig
7145693748
Work around name lookup issue on DMD < 2.081.0.
2019-02-23 18:18:39 +01:00
Sönke Ludwig
56d50fd56c
Work around Phobos issue 19696.
2019-02-23 18:18:22 +01:00
Sönke Ludwig
6589bac23a
Add TaggedUnion.hasType!T.
2019-02-23 16:16:20 +01:00
Sönke Ludwig
a52958ef01
Work around ReplaceType compile error issue.
...
ReplaceType doesn't work for "class C : D!C {}"
2019-02-23 15:56:59 +01:00
Sönke Ludwig
b766f62d43
Actually check for superfluous handlers.
2019-02-23 15:55:57 +01:00
Sönke Ludwig
ab25b89fb1
Make self-referential types work with TaggedAlgebraic, too.
...
Also removes some unused template code.
2019-02-22 19:28:09 +01:00
Sönke Ludwig
f4b621963c
Add support for self-referential types using "This" placeholder.
2019-02-22 17:34:08 +01:00
Sönke Ludwig
7ede6bf033
Refactor the TaggedUnion API.
...
- Add constructors and assignment operators for unique types
- Rename field getters to fooValue and value!() to enable sane property syntax and to avoid confusion when modifying the returned reference
- Fix misnomer "isUnionType" instead of "isUnitType"
2019-02-22 16:11:21 +01:00
Sönke Ludwig
1c88c3c65d
Add template constraint to visit/tryVisit.
2019-02-22 12:22:38 +01:00
Sönke Ludwig
59826ad719
Error out on extraneous visitors.
2019-02-22 11:14:56 +01:00
Sönke Ludwig
194e0dca41
Implement a simple version of visit/tryVisit for TaggedUnion.
...
See #3 .
2019-02-22 03:08:55 +01:00
Sönke Ludwig
88308fcba4
Split up TaggedUnion and TaggedAlgebraic into separate modules.
2019-02-22 03:08:55 +01:00
Sönke Ludwig
f7a03cdb02
Add enum support to TaggedUnion.
...
Allows to define the accepted types using an annotated enum instead of a struct/union.
2019-02-22 03:08:55 +01:00
Sönke Ludwig
39ebd11570
Use AliasSeq instead of TypeTuple.
2019-02-22 03:08:54 +01:00
Sönke Ludwig
78ca6e0cb5
Reduce reliance on typeof(U.field) to prepare for supporting U==enum.
2019-02-22 03:08:54 +01:00
Sönke Ludwig
95c2919d2b
Introduce TaggedUnion as the low-level basis for TaggedAlgebraic.
...
TaggedUnion has a number of convenience features compared to TaggedAlgebraic that are possible because of the missing dynamic dispatch functionality. If the latter is not required, TaggedUnion provides a much less complex and more robust way to store a fixed set of types/kinds.
2019-02-22 03:08:54 +01:00
Sönke Ludwig
8ee1afd7f2
Don't define ambiguous opBinary/opBinaryRight overloads. Fixes #18 .
2019-02-22 03:02:50 +01:00
Sönke Ludwig
6a08e1fea4
Make get!T nogc.
2018-10-21 21:37:46 +02:00
Sönke Ludwig
c275902b78
Fix deprecation warning.
2018-10-06 10:38:32 +02:00
drug007
2d3df68333
String literal reduces memory allocation.
...
`-profile=gc` showed that `assert` allocated memory for every iteration.
2018-09-20 10:32:25 +03:00
Sönke Ludwig
f963694522
Work around linker error for "dub test" in dependent projects.
2018-03-20 17:28:21 +01:00
Sönke Ludwig
2a7bd18695
Allow TA(val, kind) construction for unique types, too.
2018-03-20 16:37:52 +01:00
Sönke Ludwig
5fc3e16a83
Enable opEquals between two TaggedAlgebraic!T values.
2018-03-20 16:33:13 +01:00
Sönke Ludwig
c7f4533d17
Fix compilation errors caused by swap().
2018-03-20 16:21:36 +01:00