Commit graph

83 commits

Author SHA1 Message Date
drug007 c30b17f3f4 TaggedUnion.toString supports @safe
Currently used `void delegate(const(char)[])` is not @safe by definition. In contrast `toString(W)` is able to deduce @safe-ty
2020-05-12 12:22:05 +03:00
Sönke Ludwig d50f507368 Provide nicer aliases for fields with trailing underscore. 2020-04-17 16:47:20 +02:00
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