summaryrefslogtreecommitdiff
path: root/meta
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2020-05-04 06:03:45 +0200
committerEugen Wissner <belka@caraus.de>2020-05-04 06:03:45 +0200
commitc68b8d1bddd61b06135324cdaed5eb8d7c74ea60 (patch)
tree41d71d93850088c610ed13fb517e9373028e66e9 /meta
parent048939410cb8ac3974a7d81d3873763712106a8d (diff)
downloadtanya-0.17.0.tar.gz
Update compiler, remove deprecated modulesv0.17.0
Diffstat (limited to 'meta')
-rw-r--r--meta/tanya/meta/transform.d442
1 files changed, 6 insertions, 436 deletions
diff --git a/meta/tanya/meta/transform.d b/meta/tanya/meta/transform.d
index 209e4fa..260ee9e 100644
--- a/meta/tanya/meta/transform.d
+++ b/meta/tanya/meta/transform.d
@@ -43,14 +43,14 @@ import tanya.meta.trait;
*/
template Unqual(T)
{
- static if (is(T U == const U)
+ static if (is(T U == shared const U)
+ || is(T U == shared inout U)
+ || is(T U == shared inout const U)
+ || is(T U == inout const U)
+ || is(T U == const U)
|| is(T U == immutable U)
|| is(T U == inout U)
- || is(T U == inout const U)
- || is(T U == shared U)
- || is(T U == shared const U)
- || is(T U == shared inout U)
- || is(T U == shared inout const U))
+ || is(T U == shared U))
{
alias Unqual = U;
}
@@ -138,8 +138,6 @@ template OriginalType(T)
* To = Target type.
*
* Returns: $(D_PARAM To) with the constness of $(D_PARAM From).
- *
- * See_Also: $(D_PSYMBOL CopyTypeQualifiers).
*/
template CopyConstness(From, To)
{
@@ -186,187 +184,6 @@ template CopyConstness(From, To)
}
/**
- * Copies type qualifiers of $(D_PARAM From) to $(D_PARAM To).
- *
- * Type qualifiers copied are:
- * $(UL
- * $(LI const)
- * $(LI immutable)
- * $(LI inout)
- * $(LI shared)
- * )
- * and combinations of these.
- *
- * Params:
- * From = Source type.
- * To = Target type.
- *
- * Returns: $(D_PARAM To) with the type qualifiers of $(D_PARAM From).
- *
- * See_Also: $(D_PSYMBOL CopyConstness).
- */
-template CopyTypeQualifiers(From, To)
-{
- static if (is(From T == immutable T))
- {
- alias CopyTypeQualifiers = immutable To;
- }
- else static if (is(From T == const T))
- {
- alias CopyTypeQualifiers = const To;
- }
- else static if (is(From T == shared T))
- {
- alias CopyTypeQualifiers = shared To;
- }
- else static if (is(From T == shared const T))
- {
- alias CopyTypeQualifiers = shared const To;
- }
- else static if (is(From T == inout T))
- {
- alias CopyTypeQualifiers = inout To;
- }
- else static if (is(From T == shared inout T))
- {
- alias CopyTypeQualifiers = shared inout To;
- }
- else static if (is(From T == inout const T))
- {
- alias CopyTypeQualifiers = inout const To;
- }
- else static if (is(From T == shared inout const T))
- {
- alias CopyTypeQualifiers = shared inout const To;
- }
- else
- {
- alias CopyTypeQualifiers = To;
- }
-}
-
-///
-@nogc nothrow pure @safe unittest
-{
- static assert(is(CopyTypeQualifiers!(int, char) == char));
- static assert(is(CopyTypeQualifiers!(const int, char) == const char));
- static assert(is(CopyTypeQualifiers!(immutable int, char) == immutable char));
- static assert(is(CopyTypeQualifiers!(inout int, char) == inout char));
- static assert(is(CopyTypeQualifiers!(inout const int, char) == inout const char));
-
- static assert(is(CopyTypeQualifiers!(shared int, char) == shared char));
- static assert(is(CopyTypeQualifiers!(shared const int, char) == shared const char));
- static assert(is(CopyTypeQualifiers!(shared inout int, char) == shared inout char));
- static assert(is(CopyTypeQualifiers!(shared inout const int, char) == shared inout const char));
-}
-
-/**
- * Evaluates to the unsigned counterpart of the integral type $(D_PARAM T) preserving all type qualifiers.
- * If $(D_PARAM T) is already unsigned, $(D_INLINECODE Unsigned!T) aliases $(D_PARAM T).
- *
- * Params:
- * T = A type.
- *
- * Returns: Unsigned counterpart of $(D_PARAM T).
- *
- * See_Also: $(D_PSYMBOL isSigned).
- */
-template Unsigned(T)
-if (isIntegral!T)
-{
- alias UnqualedType = Unqual!(OriginalType!T);
- static if (is(UnqualedType == byte))
- {
- alias Unsigned = CopyTypeQualifiers!(T, ubyte);
- }
- else static if (is(UnqualedType == short))
- {
- alias Unsigned = CopyTypeQualifiers!(T, ushort);
- }
- else static if (is(UnqualedType == int))
- {
- alias Unsigned = CopyTypeQualifiers!(T, uint);
- }
- else static if (is(UnqualedType == long))
- {
- alias Unsigned = CopyTypeQualifiers!(T, ulong);
- }
- else
- {
- alias Unsigned = T;
- }
-}
-
-///
-@nogc nothrow pure @safe unittest
-{
- static assert(is(Unsigned!byte == ubyte));
- static assert(is(Unsigned!short == ushort));
- static assert(is(Unsigned!int == uint));
- static assert(is(Unsigned!long == ulong));
-
- static assert(is(Unsigned!(const byte) == const ubyte));
- static assert(is(Unsigned!(shared byte) == shared ubyte));
- static assert(is(Unsigned!(shared const byte) == shared const ubyte));
-
- static assert(!is(Unsigned!float));
- static assert(is(Unsigned!ubyte == ubyte));
-}
-
-/**
- * Evaluates to the signed counterpart of the integral type $(D_PARAM T) preserving all type qualifiers.
- * If $(D_PARAM T) is already signed, $(D_INLINECODE Signed!T) aliases $(D_PARAM T).
- *
- * Params:
- * T = A type.
- *
- * Returns: Signed counterpart of $(D_PARAM T).
- *
- * See_Also: $(D_PSYMBOL isUnsigned).
- */
-template Signed(T)
-if (isIntegral!T)
-{
- alias UnqualedType = Unqual!(OriginalType!T);
- static if (is(UnqualedType == ubyte))
- {
- alias Signed = CopyTypeQualifiers!(T, byte);
- }
- else static if (is(UnqualedType == ushort))
- {
- alias Signed = CopyTypeQualifiers!(T, short);
- }
- else static if (is(UnqualedType == uint))
- {
- alias Signed = CopyTypeQualifiers!(T, int);
- }
- else static if (is(UnqualedType == ulong))
- {
- alias Signed = CopyTypeQualifiers!(T, long);
- }
- else
- {
- alias Signed = T;
- }
-}
-
-///
-@nogc nothrow pure @safe unittest
-{
- static assert(is(Signed!ubyte == byte));
- static assert(is(Signed!ushort == short));
- static assert(is(Signed!uint == int));
- static assert(is(Signed!ulong == long));
-
- static assert(is(Signed!(const ubyte) == const byte));
- static assert(is(Signed!(shared ubyte) == shared byte));
- static assert(is(Signed!(shared const ubyte) == shared const byte));
-
- static assert(!is(Signed!float));
- static assert(is(Signed!byte == byte));
-}
-
-/**
* Retrieves the target type `U` of a pointer `U*`.
*
* Params:
@@ -446,37 +263,6 @@ template ValueType(T)
}
/**
- * Params:
- * T = Scalar type.
- *
- * Returns: The type $(D_PARAM T) will promote to.
- *
- * See_Also: $(LINK2 https://dlang.org/spec/type.html#integer-promotions,
- * Integer Promotions).
- */
-template Promoted(T)
-if (isScalarType!T)
-{
- alias Promoted = CopyTypeQualifiers!(T, typeof(T.init + T.init));
-}
-
-///
-@nogc nothrow pure @safe unittest
-{
- static assert(is(Promoted!bool == int));
- static assert(is(Promoted!byte == int));
- static assert(is(Promoted!ubyte == int));
- static assert(is(Promoted!short == int));
- static assert(is(Promoted!ushort == int));
- static assert(is(Promoted!char == int));
- static assert(is(Promoted!wchar == int));
- static assert(is(Promoted!dchar == uint));
-
- static assert(is(Promoted!(const bool) == const int));
- static assert(is(Promoted!(shared bool) == shared int));
-}
-
-/**
* Adds $(D_KEYWORD inout) qualifier to the type $(D_PARAM T).
*
* Params:
@@ -605,86 +391,6 @@ alias SharedInoutConstOf(T) = shared(inout const T);
}
/**
- * Returns a template with one argument which applies all qualifiers of
- * $(D_PARAM T) on its argument if instantiated.
- *
- * Params:
- * T = A type.
- *
- * Returns: $(D_INLINECODE shared(inout const T)).
- */
-template QualifierOf(T)
-{
- static if (is(T U == const U))
- {
- alias QualifierOf = ConstOf;
- }
- else static if (is(T U == immutable U))
- {
- alias QualifierOf = ImmutableOf;
- }
- else static if (is(T U == inout U))
- {
- alias QualifierOf = InoutOf;
- }
- else static if (is(T U == inout const U))
- {
- alias QualifierOf = InoutConstOf;
- }
- else static if (is(T U == shared U))
- {
- alias QualifierOf = SharedOf;
- }
- else static if (is(T U == shared const U))
- {
- alias QualifierOf = SharedConstOf;
- }
- else static if (is(T U == shared inout U))
- {
- alias QualifierOf = SharedInoutOf;
- }
- else static if (is(T U == shared inout const U))
- {
- alias QualifierOf = SharedInoutConstOf;
- }
- else
- {
- alias QualifierOf(T) = T;
- }
-}
-
-///
-@nogc nothrow pure @safe unittest
-{
- alias MutableOf = QualifierOf!int;
- static assert(is(MutableOf!uint == uint));
-
- alias ConstOf = QualifierOf!(const int);
- static assert(is(ConstOf!uint == const uint));
-
- alias InoutOf = QualifierOf!(inout int);
- static assert(is(InoutOf!uint == inout uint));
-
- alias InoutConstOf = QualifierOf!(inout const int);
- static assert(is(InoutConstOf!uint == inout const uint));
-
- alias ImmutableOf = QualifierOf!(immutable int);
- static assert(is(ImmutableOf!uint == immutable uint));
-
- alias SharedOf = QualifierOf!(shared int);
- static assert(is(SharedOf!uint == shared uint));
-
- alias SharedConstOf = QualifierOf!(shared const int);
- static assert(is(SharedConstOf!uint == shared const uint));
-
- alias SharedInoutOf = QualifierOf!(shared inout int);
- static assert(is(SharedInoutOf!uint == shared inout uint));
-
- alias SharedInoutConstOf = QualifierOf!(shared inout const int);
- static assert(is(SharedInoutConstOf!uint == shared inout const uint));
-}
-
-/**
* Determines the type of $(D_PARAM T). If $(D_PARAM T) is already a type,
* $(D_PSYMBOL TypeOf) aliases itself to $(D_PARAM T).
*
@@ -719,142 +425,6 @@ if (isExpressions!T || __traits(isTemplate, T))
static assert(!is(TypeOf!(tanya.meta)));
}
-// e.g. returns int for int**.
-private template FinalPointerTarget(T)
-{
- static if (isPointer!T)
- {
- alias FinalPointerTarget = FinalPointerTarget!(PointerTarget!T);
- }
- else
- {
- alias FinalPointerTarget = T;
- }
-}
-
-// Returns true if T1 is void* and T2 is some pointer.
-private template voidAndPointer(T1, T2)
-{
- enum bool voidAndPointer = is(Unqual!(PointerTarget!T1) == void)
- && isPointer!T2;
-}
-
-// Type returned by the ternary operator.
-private alias TernaryType(T, U) = typeof(true ? T.init : U.init);
-
-/**
- * Determines the type all $(D_PARAM Args) can be implicitly converted to.
- *
- * $(OL
- * $(LI If one of the arguments is $(D_KEYWORD void), the common type is
- * $(D_KEYWORD void).)
- * $(LI The common type of integers with the same sign is the type with a
- * larger size. Signed and unsigned integers don't have a common type.
- * Type qualifiers are only preserved if all arguments are the same
- * type.)
- * $(LI The common type of floating point numbers is the type with more
- * precision. Type qualifiers are only preserved if all arguments are
- * the same type.)
- * $(LI The common type of polymorphic objects is the next, more generic type
- * both objects inherit from, e.g. $(D_PSYMBOL Object).)
- * $(LI `void*` is concerned as a common type of pointers only if one of the
- * arguments is a void pointer.)
- * $(LI Other types have a common type only if their pointers have a common
- * type. It means that for example $(D_KEYWORD bool) and $(D_KEYWORD int)
- don't have a common type. If the types fullfill this condition, the
- common type is determined with the ternary operator, i.e.
- `typeof(true ? T1.init : T2.init)` is evaluated.)
- * )
- *
- * If $(D_PARAM Args) don't have a common type, $(D_PSYMBOL CommonType) is
- * $(D_KEYWORD void).
- *
- * Params:
- * Args = Type list.
- *
- * Returns: Common type for $(D_PARAM Args) or $(D_KEYWORD void) if
- * $(D_PARAM Args) don't have a common type.
- */
-template CommonType(Args...)
-if (allSatisfy!(isType, Args))
-{
- static if (Args.length == 0
- || is(Unqual!(Args[0]) == void)
- || is(Unqual!(Args[1]) == void))
- {
- alias CommonType = void;
- }
- else static if (Args.length == 1)
- {
- alias CommonType = Args[0];
- }
- else
- {
- private alias Pair = Args[0 .. 2];
- private enum bool sameSigned = allSatisfy!(isIntegral, Pair)
- && isSigned!(Args[0]) == isSigned!(Args[1]);
-
- static if (is(Args[0] == Args[1]))
- {
- alias CommonType = CommonType!(Args[0], Args[2 .. $]);
- }
- else static if (sameSigned || allSatisfy!(isFloatingPoint, Pair))
- {
- alias CommonType = CommonType!(Unqual!(Largest!Pair),
- Args[2 .. $]);
- }
- else static if (voidAndPointer!Pair
- || voidAndPointer!(Args[1], Args[0]))
- {
- // Workaround for https://issues.dlang.org/show_bug.cgi?id=15557.
- // Determine the qualifiers returned by the ternary operator as if
- // both pointers were int*. Then copy the qualifiers to void*.
- alias P1 = CopyTypeQualifiers!(FinalPointerTarget!(Args[0]), int)*;
- alias P2 = CopyTypeQualifiers!(FinalPointerTarget!(Args[1]), int)*;
- static if (is(TernaryType!(P1, P2) U))
- {
- alias CommonType = CopyTypeQualifiers!(PointerTarget!U, void)*;
- }
- else
- {
- alias CommonType = void;
- }
- }
- else static if ((isPointer!(Args[0]) || isPolymorphicType!(Args[0]))
- && is(TernaryType!Pair U))
- {
- alias CommonType = CommonType!(U, Args[2 .. $]);
- }
- else static if (is(TernaryType!(Args[0]*, Args[1]*)))
- {
- alias CommonType = CommonType!(TernaryType!Pair, Args[2 .. $]);
- }
- else
- {
- alias CommonType = void;
- }
- }
-}
-
-///
-@nogc nothrow pure @safe unittest
-{
- static assert(is(CommonType!(int, int, int) == int));
- static assert(is(CommonType!(ubyte, ushort, uint) == uint));
- static assert(is(CommonType!(int, uint) == void));
-
- static assert(is(CommonType!(int, const int) == int));
- static assert(is(CommonType!(const int, const int) == const int));
-
- static assert(is(CommonType!(int[], const(int)[]) == const(int)[]));
- static assert(is(CommonType!(string, char[]) == const(char)[]));
-
- class A
- {
- }
- static assert(is(CommonType!(const A, Object) == const Object));
-}
-
/**
* Finds the type with the smallest size in the $(D_PARAM Args) list. If
* several types have the same type, the leftmost is returned.