Mercurial > projects > ldc
annotate lphobos/typeinfo2/ti_Adouble.d @ 715:30b42a283c8e
Removed TypeOpaque from DMD.
Changed runtime functions taking opaque[] to void[].
Implemented proper type painting, to avoid "resizing" array casts in runtime calls that previously took opaque[].
Implemented dynamic arrays as first class types, this implements proper ABI for these types on x86.
Added dwarf region end after call to assert function, fixes some problems with llvm not allowing this to be missing.
Reverted change to WithStatement from rev [704] it breaks MiniD, mini/with2.d needs to be fixed some other way...
Fixed tango bug 1339 in runtime, problem with _adReverseChar on invalid UTF-8.
Disabled .bc generation in the compiler runtime part, genobj.d triggers some llvm bug when using debug info. the .o seems to work fine.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Wed, 22 Oct 2008 14:55:33 +0200 |
parents | b86e00b938a5 |
children |
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-2005 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_Adouble; |
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_double; |
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 // double[] |
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_Ad : 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 "double[]"; } |
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 { double[] s = *cast(double[]*)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 str++; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
46 len--; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
47 } |
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 return hash; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
50 } |
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 int equals(void *p1, void *p2) |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
53 { |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
54 double[] s1 = *cast(double[]*)p1; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
55 double[] s2 = *cast(double[]*)p2; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
56 size_t len = s1.length; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
57 |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
58 if (len != s2.length) |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
59 return 0; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
60 for (size_t u = 0; u < len; u++) |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
61 { |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
62 int c = TypeInfo_d._equals(s1[u], s2[u]); |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
63 if (c == 0) |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
64 return 0; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
65 } |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
66 return 1; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
67 } |
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 int compare(void *p1, void *p2) |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
70 { |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
71 double[] s1 = *cast(double[]*)p1; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
72 double[] s2 = *cast(double[]*)p2; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
73 size_t len = s1.length; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
74 |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
75 if (s2.length < len) |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
76 len = s2.length; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
77 for (size_t u = 0; u < len; u++) |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
78 { |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
79 int c = TypeInfo_d._compare(s1[u], s2[u]); |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
80 if (c) |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
81 return c; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
82 } |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
83 return cast(int)s1.length - cast(int)s2.length; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
84 } |
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 size_t tsize() |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
87 { |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
88 return (double[]).sizeof; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
89 } |
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 uint flags() |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
92 { |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
93 return 1; |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
94 } |
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 TypeInfo next() |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
97 { |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
98 return typeid(double); |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
99 } |
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 // idouble[] |
62
b86e00b938a5
[svn r66] Added support for imaginary floating point types
lindquist
parents:
61
diff
changeset
|
103 |
61
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
104 class TypeInfo_Ap : TypeInfo_Ad |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
105 { |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
106 char[] toString() { return "idouble[]"; } |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
107 |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
108 TypeInfo next() |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
109 { |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
110 return typeid(idouble); |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
111 } |
0258a7171a42
[svn r65] Added typeinfo implementations for float[], double[] and real[]
lindquist
parents:
diff
changeset
|
112 } |