aboutsummaryrefslogtreecommitdiff
path: root/gcc/d/dmd/mangle/basic.d
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/d/dmd/mangle/basic.d')
-rw-r--r--gcc/d/dmd/mangle/basic.d109
1 files changed, 109 insertions, 0 deletions
diff --git a/gcc/d/dmd/mangle/basic.d b/gcc/d/dmd/mangle/basic.d
new file mode 100644
index 0000000..263dd5e
--- /dev/null
+++ b/gcc/d/dmd/mangle/basic.d
@@ -0,0 +1,109 @@
+/**
+ * Defines the building blocks for creating the mangled names for basic types.
+ *
+ * Copyright: Copyright (C) 1999-2025 by The D Language Foundation, All Rights Reserved
+ * License: $(LINK2 https://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
+ * Source: $(LINK2 https://github.com/dlang/dmd/blob/master/compiler/src/dmd/mangle/basic.d, _basicmangle.d)
+ * Documentation: https://dlang.org/phobos/dmd_basicmangle.html
+ * Coverage: https://codecov.io/gh/dlang/dmd/src/master/compiler/src/dmd/mangle/basic.d
+ */
+module dmd.mangle.basic;
+
+import dmd.astenums;
+import dmd.common.outbuffer : OutBuffer;
+
+/// Type mangling mapping for basic, derived and user defined types
+immutable char[TMAX] mangleChar =
+[
+ Tchar : 'a',
+ Tbool : 'b',
+ Tcomplex80 : 'c',
+ Tfloat64 : 'd',
+ Tfloat80 : 'e',
+ Tfloat32 : 'f',
+ Tint8 : 'g',
+ Tuns8 : 'h',
+ Tint32 : 'i',
+ Timaginary80 : 'j',
+ Tuns32 : 'k',
+ Tint64 : 'l',
+ Tuns64 : 'm',
+ Tnull : 'n',
+ Timaginary32 : 'o',
+ Timaginary64 : 'p',
+ Tcomplex32 : 'q',
+ Tcomplex64 : 'r',
+ Tint16 : 's',
+ Tuns16 : 't',
+ Twchar : 'u',
+ Tvoid : 'v',
+ Tdchar : 'w',
+ // x // const
+ // y // immutable
+ Tint128 : 'z', // zi
+ Tuns128 : 'z', // zk
+
+ Tarray : 'A',
+ Ttuple : 'B',
+ Tclass : 'C',
+ Tdelegate : 'D',
+ Tenum : 'E',
+ Tfunction : 'F', // D function
+ Tsarray : 'G',
+ Taarray : 'H',
+ // I // in
+ // J // out
+ // K // ref
+ // L // lazy
+ // M // has this, or scope
+ // N // Nh:vector Ng:wild Nn:noreturn
+ // O // shared
+ Tpointer : 'P',
+ // Q // Type/symbol/identifier backward reference
+ Treference : 'R',
+ Tstruct : 'S',
+ // T // Ttypedef
+ // U // C function
+ // W // Windows function
+ // X // variadic T t...)
+ // Y // variadic T t,...)
+ // Z // not variadic, end of parameters
+
+ // '@' shouldn't appear anywhere in the deco'd names
+ Tnone : '@',
+ Tident : '@',
+ Tinstance : '@',
+ Terror : '@',
+ Ttypeof : '@',
+ Tslice : '@',
+ Treturn : '@',
+ Tvector : '@',
+ Ttraits : '@',
+ Tmixin : '@',
+ Ttag : '@',
+ Tnoreturn : '@', // becomes 'Nn'
+];
+
+unittest
+{
+ foreach (i, mangle; mangleChar)
+ {
+ if (mangle == char.init)
+ {
+ import core.stdc.stdio;
+ fprintf(stderr, "ty = %u\n", cast(uint)i);
+ assert(0);
+ }
+ }
+}
+
+/***********************
+ * Mangle basic type ty to buf.
+ */
+void tyToDecoBuffer(ref OutBuffer buf, int ty) @safe
+{
+ const c = mangleChar[ty];
+ buf.writeByte(c);
+ if (c == 'z')
+ buf.writeByte(ty == Tint128 ? 'i' : 'k');
+}