Mercurial > projects > ddmd
annotate dmd/templates/Util.d @ 13:427f8aa74d28
On the road to make Phobos compilable
author | korDen |
---|---|
date | Mon, 12 Apr 2010 16:29:33 +0400 |
parents | 89cc05dbdae1 |
children | e28b18c23469 |
rev | line source |
---|---|
7
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
1 module dmd.templates.Util; |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
2 |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
3 import dmd.Dsymbol; |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
4 import dmd.Type; |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
5 import dmd.Expression; |
13 | 6 import dmd.Loc; |
7 import dmd.Scope; | |
8 import dmd.WANT; | |
7
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
9 |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
10 version (DMDV2) { |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
11 Object objectSyntaxCopy(Object o) |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
12 { |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
13 if (!o) |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
14 return null; |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
15 |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
16 Type t = isType(o); |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
17 if (t) |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
18 return t.syntaxCopy(); |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
19 |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
20 Expression e = isExpression(o); |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
21 if (e) |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
22 return e.syntaxCopy(); |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
23 |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
24 return o; |
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
25 } |
13 | 26 } |
27 | |
28 Object aliasParameterSemantic(Loc loc, Scope sc, Object o) | |
29 { | |
30 if (o) | |
31 { | |
32 Expression ea = isExpression(o); | |
33 Type ta = isType(o); | |
34 if (ta) | |
35 { | |
36 Dsymbol s = ta.toDsymbol(sc); | |
37 if (s) | |
38 o = s; | |
39 else | |
40 o = ta.semantic(loc, sc); | |
41 } | |
42 else if (ea) | |
43 { | |
44 ea = ea.semantic(sc); | |
45 o = ea.optimize(WANTvalue | WANTinterpret); | |
46 } | |
47 } | |
48 return o; | |
7
89cc05dbdae1
Implementing TemplateAliasParameter and TemplateValueParameter
dkoroskin <>
parents:
diff
changeset
|
49 } |