annotate lphobos/typeinfo2/ti_Areal.d @ 1650:40bd4a0d4870

Update to work with LLVM 2.7. Removed use of dyn_cast, llvm no compiles without exceptions and rtti by default. We do need exceptions for the libconfig stuff, but rtti isn't necessary (anymore). Debug info needs to be rewritten, as in LLVM 2.7 the format has completely changed. To have something to look at while rewriting, the old code has been wrapped inside #ifndef DISABLE_DEBUG_INFO , this means that you have to define this to compile at the moment. Updated tango 0.99.9 patch to include updated EH runtime code, which is needed for LLVM 2.7 as well.
author Tomas Lindquist Olsen
date Wed, 19 May 2010 12:42:32 +0200
parents b86e00b938a5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
1 /*
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
2 * Copyright (C) 2004-2006 by Digital Mars, www.digitalmars.com
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
3 * Written by Walter Bright
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
4 *
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
5 * This software is provided 'as-is', without any express or implied
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
6 * warranty. In no event will the authors be held liable for any damages
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
7 * arising from the use of this software.
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
8 *
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
9 * Permission is granted to anyone to use this software for any purpose,
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
10 * including commercial applications, and to alter it and redistribute it
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
11 * freely, in both source and binary form, subject to the following
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
12 * restrictions:
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
13 *
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
14 * o The origin of this software must not be misrepresented; you must not
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
15 * claim that you wrote the original software. If you use this software
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
16 * in a product, an acknowledgment in the product documentation would be
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
17 * appreciated but is not required.
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
18 * o Altered source versions must be plainly marked as such, and must not
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
19 * be misrepresented as being the original software.
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
20 * o This notice may not be removed or altered from any source
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
21 * distribution.
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
22 */
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
23
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
24 module typeinfo2.ti_Areal;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
25
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
26 private import typeinfo1.ti_real;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
27
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
28 // real[]
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
29
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
30 class TypeInfo_Ae : TypeInfo
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
31 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
32 char[] toString() { return "real[]"; }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
33
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
34 hash_t getHash(void *p)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
35 { real[] s = *cast(real[]*)p;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
36 size_t len = s.length;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
37 auto str = s.ptr;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
38 hash_t hash = 0;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
39
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
40 while (len)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
41 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
42 hash *= 9;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
43 hash += (cast(uint *)str)[0];
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
44 hash += (cast(uint *)str)[1];
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
45 hash += (cast(ushort *)str)[4];
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
46 str++;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
47 len--;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
48 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
49
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
50 return hash;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
51 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
52
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
53 int equals(void *p1, void *p2)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
54 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
55 real[] s1 = *cast(real[]*)p1;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
56 real[] s2 = *cast(real[]*)p2;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
57 size_t len = s1.length;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
58
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
59 if (len != s2.length)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
60 return 0;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
61 for (size_t u = 0; u < len; u++)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
62 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
63 int c = TypeInfo_e._equals(s1[u], s2[u]);
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
64 if (c == 0)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
65 return 0;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
66 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
67 return 1;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
68 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
69
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
70 int compare(void *p1, void *p2)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
71 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
72 real[] s1 = *cast(real[]*)p1;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
73 real[] s2 = *cast(real[]*)p2;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
74 size_t len = s1.length;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
75
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
76 if (s2.length < len)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
77 len = s2.length;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
78 for (size_t u = 0; u < len; u++)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
79 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
80 int c = TypeInfo_e._compare(s1[u], s2[u]);
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
81 if (c)
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
82 return c;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
83 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
84 return cast(int)s1.length - cast(int)s2.length;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
85 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
86
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
87 size_t tsize()
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
88 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
89 return (real[]).sizeof;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
90 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
91
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
92 uint flags()
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
93 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
94 return 1;
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
95 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
96
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
97 TypeInfo next()
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
98 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
99 return typeid(real);
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
100 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
101 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
102
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
103 // ireal[]
62
b86e00b938a5 [svn r66] Added support for imaginary floating point types
lindquist
parents: 61
diff changeset
104
61
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
105 class TypeInfo_Aj : TypeInfo_Ae
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
106 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
107 char[] toString() { return "ireal[]"; }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
108
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
109 TypeInfo next()
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
110 {
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
111 return typeid(ireal);
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
112 }
0258a7171a42 [svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff changeset
113 }