Mercurial > projects > ddmd
comparison dmd/FuncLiteralDeclaration.d @ 0:10317f0c89a5
Initial commit
author | korDen |
---|---|
date | Sat, 24 Oct 2009 08:42:06 +0400 |
parents | |
children | 51605de93870 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:10317f0c89a5 |
---|---|
1 module dmd.FuncLiteralDeclaration; | |
2 | |
3 import dmd.FuncDeclaration; | |
4 import dmd.TOK; | |
5 import dmd.Loc; | |
6 import dmd.Type; | |
7 import dmd.ForeachStatement; | |
8 import dmd.OutBuffer; | |
9 import dmd.HdrGenState; | |
10 import dmd.Dsymbol; | |
11 import dmd.STC; | |
12 import dmd.Lexer; | |
13 | |
14 class FuncLiteralDeclaration : FuncDeclaration | |
15 { | |
16 TOK tok; // TOKfunction or TOKdelegate | |
17 | |
18 this(Loc loc, Loc endloc, Type type, TOK tok, ForeachStatement fes) | |
19 { | |
20 super(loc, endloc, null, STC.STCundefined, type); | |
21 | |
22 string id; | |
23 | |
24 if (fes) | |
25 id = "__foreachbody"; | |
26 else if (tok == TOK.TOKdelegate) | |
27 id = "__dgliteral"; | |
28 else | |
29 id = "__funcliteral"; | |
30 | |
31 this.ident = Lexer.uniqueId(id); | |
32 this.tok = tok; | |
33 this.fes = fes; | |
34 | |
35 //printf("FuncLiteralDeclaration() id = '%s', type = '%s'\n", this->ident->toChars(), type->toChars()); | |
36 } | |
37 | |
38 void toCBuffer(OutBuffer buf, HdrGenState* hgs) | |
39 { | |
40 assert(false); | |
41 } | |
42 | |
43 Dsymbol syntaxCopy(Dsymbol) | |
44 { | |
45 assert(false); | |
46 } | |
47 | |
48 bool isNested() | |
49 { | |
50 //printf("FuncLiteralDeclaration::isNested() '%s'\n", toChars()); | |
51 return (tok == TOK.TOKdelegate); | |
52 } | |
53 | |
54 bool isVirtual() | |
55 { | |
56 return false; | |
57 } | |
58 | |
59 FuncLiteralDeclaration isFuncLiteralDeclaration() { return this; } | |
60 | |
61 string kind() | |
62 { | |
63 return (tok == TOKdelegate) ? "delegate" : "function"; | |
64 } | |
65 } |