annotate lphobos/typeinfo2/ti_C.d @ 650:aa6a0b7968f7

Added test case for bug #100 Removed dubious check for not emitting static private global in other modules without access. This should be handled properly somewhere else, it's causing unresolved global errors for stuff that should work (in MiniD)
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Sun, 05 Oct 2008 17:28:15 +0200
parents 79c9ac745fbc
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
106
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
1 /*
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
2 * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
3 * Written by Walter Bright
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
4 *
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
5 * This software is provided 'as-is', without any express or implied
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
6 * warranty. In no event will the authors be held liable for any damages
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
7 * arising from the use of this software.
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
8 *
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
9 * Permission is granted to anyone to use this software for any purpose,
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
10 * including commercial applications, and to alter it and redistribute it
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
11 * freely, in both source and binary form, subject to the following
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
12 * restrictions:
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
13 *
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
14 * o The origin of this software must not be misrepresented; you must not
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
15 * claim that you wrote the original software. If you use this software
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
16 * in a product, an acknowledgment in the product documentation would be
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
17 * appreciated but is not required.
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
18 * o Altered source versions must be plainly marked as such, and must not
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
19 * be misrepresented as being the original software.
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
20 * o This notice may not be removed or altered from any source
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
21 * distribution.
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
22 */
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
23
119
79c9ac745fbc [svn r123] Fixed some typeinfo module name mismatches.
lindquist
parents: 106
diff changeset
24 module typeinfo2.ti_C;
106
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
25
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
26 // Object
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
27
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
28 class TypeInfo_C : TypeInfo
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
29 {
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
30 hash_t getHash(void *p)
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
31 {
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
32 Object o = *cast(Object*)p;
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
33 assert(o);
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
34 return o.toHash();
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
35 }
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
36
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
37 int equals(void *p1, void *p2)
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
38 {
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
39 Object o1 = *cast(Object*)p1;
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
40 Object o2 = *cast(Object*)p2;
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
41
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
42 return o1 == o2;
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
43 }
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
44
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
45 int compare(void *p1, void *p2)
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
46 {
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
47 Object o1 = *cast(Object*)p1;
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
48 Object o2 = *cast(Object*)p2;
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
49 int c = 0;
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
50
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
51 // Regard null references as always being "less than"
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
52 if (!(o1 is o2))
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
53 {
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
54 if (o1)
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
55 { if (!o2)
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
56 c = 1;
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
57 else
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
58 c = o1.opCmp(o2);
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
59 }
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
60 else
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
61 c = -1;
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
62 }
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
63 return c;
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
64 }
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
65
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
66 size_t tsize()
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
67 {
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
68 return Object.sizeof;
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
69 }
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
70
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
71 uint flags()
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
72 {
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
73 return 1;
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
74 }
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
75 }
5b5194b25f33 [svn r110] Fixed typeinfo for classes.
lindquist
parents:
diff changeset
76