annotate dmd/PostBlitDeclaration.d @ 178:e3afd1303184

Many small bugs fixed Made all classes derive from TObject to detect memory leaks (functionality is disabled for now) Began work on overriding backend memory allocations (to avoid memory leaks)
author korDen
date Sun, 17 Oct 2010 07:42:00 +0400
parents e28b18c23469
children cd48cb899aee
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1 module dmd.PostBlitDeclaration;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
2
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 98
diff changeset
3 import dmd.common;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
4 import dmd.FuncDeclaration;
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
5 import dmd.Global;
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
6 import dmd.LINK;
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
7 import dmd.LinkDeclaration;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
8 import dmd.Loc;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
9 import dmd.Identifier;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
10 import dmd.Dsymbol;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
11 import dmd.Scope;
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
12 import dmd.StructDeclaration;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
13 import dmd.OutBuffer;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
14 import dmd.HdrGenState;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
15 import dmd.STC;
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
16 import dmd.Type;
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
17 import dmd.TypeFunction;
47
488f3f6bcceb PostBlitDeclaration.ctor
korDen
parents: 0
diff changeset
18 import dmd.Id;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
20 version(DMDV2)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
21 class PostBlitDeclaration : FuncDeclaration
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
22 {
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
23 this(Loc loc, Loc endloc)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
24 {
178
e3afd1303184 Many small bugs fixed
korDen
parents: 114
diff changeset
25 register();
47
488f3f6bcceb PostBlitDeclaration.ctor
korDen
parents: 0
diff changeset
26 super(loc, endloc, Id._postblit, STCundefined, null);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
27 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
28
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
29 this(Loc loc, Loc endloc, Identifier id)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
30 {
178
e3afd1303184 Many small bugs fixed
korDen
parents: 114
diff changeset
31 register();
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
32 super(loc, loc, id, STCundefined, null);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
33 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
34
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
35 override Dsymbol syntaxCopy(Dsymbol s)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
36 {
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
37 assert(!s);
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
38 PostBlitDeclaration dd = new PostBlitDeclaration(loc, endloc, ident);
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
39 return super.syntaxCopy(dd);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
40 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
41
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
42 override void semantic(Scope sc)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
43 {
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
44 //writef("PostBlitDeclaration.semantic() %s\n", toChars());
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
45 //writef("ident: %s, %s, %p, %p\n", ident.toChars(), Id.dtor.toChars(), ident, Id.dtor);
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
46 //writef("stc = x%llx\n", sc.stc);
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
47 parent = sc.parent;
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
48 Dsymbol parent = toParent();
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
49 StructDeclaration ad = parent.isStructDeclaration();
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
50 if (!ad)
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
51 {
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
52 error("post blits are only for struct/union definitions, not %s %s", parent.kind(), parent.toChars());
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
53 }
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
54 else if (ident == Id._postblit && semanticRun < PASSsemantic)
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
55 ad.postblits.push(this);
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
56
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
57 if (!type)
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
58 type = new TypeFunction(null, Type.tvoid, false, LINKd);
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
59
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
60 sc = sc.push();
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
61 sc.stc &= ~STCstatic; // not static
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
62 sc.linkage = LINKd;
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
63
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
64 FuncDeclaration.semantic(sc);
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
65
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
66 sc.pop();
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
67 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
68
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
69 override void toCBuffer(OutBuffer buf, HdrGenState* hgs)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
70 {
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
71 buf.writestring("this(this)");
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
72 bodyToCBuffer(buf, hgs);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
73 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
74
79
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
75 override void toJsonBuffer(OutBuffer buf)
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
76 {
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
77 // intentionally empty
79
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
78 }
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
79
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
80 override bool isVirtual()
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
81 {
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
82 return false;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
83 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
84
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
85 override bool addPreInvariant()
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
86 {
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
87 return false;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
88 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
89
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
90 override bool addPostInvariant()
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
91 {
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
92 return (isThis() && vthis && global.params.useInvariants);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
93 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
94
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
95 override bool overloadInsert(Dsymbol s)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
96 {
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
97 return false; // cannot overload postblits
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
98 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
99
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
100 override void emitComment(Scope sc)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
101 {
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
102 // intentionally empty
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
103 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
104
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
105 override PostBlitDeclaration isPostBlitDeclaration() { return this; }
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
106 }