annotate dmd/FileExp.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 fe932c1a9563
children b0d41ff5e0df
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
1 module dmd.FileExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
2
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 72
diff changeset
3 import dmd.common;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
4 import dmd.Expression;
163
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
5 import dmd.File;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
6 import dmd.UnaExp;
163
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
7 import dmd.StringExp;
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
8 import dmd.WANT;
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
9 import dmd.Global;
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
10 import dmd.FileName;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
11 import dmd.OutBuffer;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
12 import dmd.Loc;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
13 import dmd.Scope;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
14 import dmd.HdrGenState;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
15 import dmd.TOK;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
16
163
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
17 import core.stdc.stdio;
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
18
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19 class FileExp : UnaExp
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
20 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
21 this(Loc loc, Expression e)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
22 {
178
e3afd1303184 Many small bugs fixed
korDen
parents: 163
diff changeset
23 register();
162
438eaa11eed4 updated build script to use dmd2.039
korDen
parents: 114
diff changeset
24 super(loc, TOKmixin, FileExp.sizeof, e);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
25 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
26
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
27 override Expression semantic(Scope sc)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
28 {
163
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
29 StringExp se;
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
30
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
31 version (LOGSEMANTIC) {
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
32 printf("FileExp.semantic('%.*s')\n", toChars());
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
33 }
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
34 UnaExp.semantic(sc);
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
35 e1 = resolveProperties(sc, e1);
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
36 e1 = e1.optimize(WANTvalue);
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
37 if (e1.op != TOKstring)
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
38 {
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
39 error("file name argument must be a string, not (%s)", e1.toChars());
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
40 goto Lerror;
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
41 }
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
42 se = cast(StringExp)e1;
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
43 se = se.toUTF8(sc);
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
44
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
45 string name = (cast(immutable(char)*)se.string_)[0..se.len];
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
46
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
47 if (!global.params.fileImppath)
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
48 {
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
49 error("need -Jpath switch to import text file %s", name);
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
50 goto Lerror;
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
51 }
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
52
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
53 if (name != FileName.name(name))
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
54 {
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
55 error("use -Jpath switch to provide path for filename %s", name);
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
56 goto Lerror;
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
57 }
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
58
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
59 name = FileName.searchPath(global.filePath, name, 0);
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
60 if (!name)
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
61 {
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
62 error("file %s cannot be found, check -Jpath", se.toChars());
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
63 goto Lerror;
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
64 }
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
65
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
66 if (global.params.verbose)
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
67 printf("file %s\t(%s)\n", cast(char*)se.string_, name);
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
68
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
69 {
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
70 scope File f = new File(name);
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
71 if (f.read())
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
72 {
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
73 error("cannot read file %s", f.toChars());
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
74 goto Lerror;
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
75 }
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
76 else
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
77 {
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
78 f.ref_ = 1;
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
79 se = new StringExp(loc, (cast(immutable(char)*)f.buffer)[0..f.len]);
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
80 }
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
81 }
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
82 Lret:
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
83 return se.semantic(sc);
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
84
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
85 Lerror:
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
86 se = new StringExp(loc, "");
fe932c1a9563 *.interpret functions implemenation
korDen
parents: 162
diff changeset
87 goto Lret;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
88 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
89
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
90 override void toCBuffer(OutBuffer buf, HdrGenState* hgs)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
91 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
92 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
93 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
94 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
95