Commit graph

45 commits

Author SHA1 Message Date
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
Sönke Ludwig
445f1ef365 Fix test for frontend versions < 2.072.x. 2018-01-18 00:44:33 +01:00
Sönke Ludwig
3709a2298f Add test and close #8.
Was fixed by 513729bf59 for compiler frontend versions >= 2.072.x.
2018-01-18 00:31:00 +01:00
Sönke Ludwig
9b13f08a25 Fix compile error for overloaded TaggedAlgebraic returns. Fixes #13. 2018-01-18 00:29:16 +01:00
Sönke Ludwig
f9c7d444e6 Disable TypeOf on frontent versions < 2.072.x 2018-01-18 00:06:06 +01:00
Sönke Ludwig
f87b378cf3 Add the TypeOf template. 2018-01-17 23:53:57 +01:00
Sönke Ludwig
de7df6bfeb Fix hasType!T when called with rvalues. 2017-12-07 20:41:06 +01:00
John Colvin
ffe296a96f do implicit casting without std.conv.to 2017-12-07 15:59:12 +00:00
Sönke Ludwig
513729bf59 Enable proper default initialization.
Since @disable this() still leaves an invalid .init open, TaggedAlgebraic.init has now been changed to always contain the .init value of the first specified sub type.

Note that this change is restricted to DMD 2.072 and up, because earlier versions of DMD do not allow postblits or destructors within unions and using a union appears to be the only way to implement this.
2017-06-12 21:12:42 +02:00
Sönke Ludwig
a7c77bba94
Fix compile error on DMD 2.068.2. 2017-06-12 21:06:55 +02:00
Sönke Ludwig
be4a93e553
Make apply() work for plain values, too.
This provides symmetry between TaggedAlgebraic values and ordinary values.
2017-05-28 22:28:39 +02:00
Sönke Ludwig
50e80dc0d9
Add apply() to generically extract the contained value.
See also #3.
2017-05-28 22:05:19 +02:00
Sönke Ludwig
e4c5ec700a Add non-ref overload of get(). 2016-11-22 18:02:34 +01:00
Sönke Ludwig
4a506f458b Make TaggedAlgebraic.Union public. 2016-11-21 20:21:23 +01:00
Sönke Ludwig
537f17f71a Add assertion error message. 2016-11-21 20:20:14 +01:00
Sönke Ludwig
58a1cc274f Add a proper workaround for the void intializer error in DMD 2.072.0-b2. 2016-10-10 12:32:42 +02:00
Sönke Ludwig
baad665621 Work around stricter memory-safety checks in DMD 2.072.0-b2. 2016-10-10 11:16:55 +02:00
Nick Sabalausky
8197549929 Document basic usage. 2016-09-20 00:52:02 -04:00
Sönke Ludwig
a0415ed13c Improve dynamic type conversion.
- Uses std.conv.to to implement opCast instead of just supporting implicit type conversions
- Adds .toString to make to!string(ta) return the expected result
2016-04-04 13:40:58 +02:00
Sönke Ludwig
89e90b962f Fix unit test. See #2. 2016-01-27 23:11:32 +01:00
Sönke Ludwig
df23609f3d Fix "statement not reachable" errors. 2015-12-06 14:57:30 +01:00
Sönke Ludwig
96f18356f7 Output a proper error message when using hasType with an invalid type. Fixes #1. 2015-08-27 11:27:57 +02:00
Sönke Ludwig
84d6c8da80 Rename "type" to "kind".
Although there will be situations where the enum names equal the name of the types stored in a TaggedAlgebraic, "type" is often not the right term. It's also possible to define multiple fields of the same type, but with different names. "Kind" is used now as a more generic alternative.
2015-08-27 11:00:16 +02:00
Sönke Ludwig
d02baa57ac Add opBinaryRight forwarding. 2015-08-17 15:53:47 +02:00
Sönke Ludwig
f8835076f8 Improve operator forwarding.
- Added @disableIndex to disable opIndex forwarding for certain fields
- Added field/properly forwarding
- Fixed binary operator overloading
- Allow implicit conversions when trying to match return types to TaggedAlgebraic during operator return type deduction
2015-08-17 15:49:32 +02:00
Sönke Ludwig
8fba150b03 Add limited support for operations where the RHS is a TaggedAlgebraic. 2015-08-14 11:24:54 +02:00
Sönke Ludwig
d38c8d472d Add some more tests. 2015-08-13 23:43:09 +02:00
Sönke Ludwig
f06a793dae Add support for opCall forwarding and add default assignment operator. 2015-08-13 16:11:30 +02:00
Sönke Ludwig
d901bfa810 Add UFCS functions get and hasType. 2015-08-13 15:59:50 +02:00
Sönke Ludwig
e53ae02ec6 Fix postblit/destructor handling and partially fix compilation on DMD 2.067.1.
Also allow to use a struct instead of a union to pass the fields to TaggedAlgebraic (because union doesn't allow fields with postblit/destructor).
2015-08-13 15:30:32 +02:00
Sönke Ludwig
ed96f7652f Comment-in descruct() call. 2015-08-13 12:53:31 +02:00
Sönke Ludwig
2e8d0b29dd Initial commit of a first working version. 2015-08-13 11:54:39 +02:00