annotate dmd/FuncLiteralDeclaration.d @ 56:51605de93870

TupleExp.optimize UnrolledLoopStatement.ctor UnrolledLoopStatement.semantic UnrolledLoopStatement.blockExit OrOrExp.checkSideEffect FuncExp.syntaxCopy FuncLiteralDeclaration.syntaxCopy WhileStatement.hasBreak StructInitializer.toExpression StructLiteralExp.ctor StructLiteralExp.optimize BinExp.commonSemanticAssign ModAssignExp.opId Argument.isLazyArray CommaExp.implicitConvTo CommaExp.castTo TypeClass.isBaseOf createTypeInfoArray TypeTuple.getTypeInfoDeclaration TypeInfoTupleDeclaration.ctor TypeNext.constConv XorExp.implicitConvTo TemplateParameter.isTemplateValueParameter
author korDen
date Sat, 21 Aug 2010 14:16:53 +0400
parents 10317f0c89a5
children 2e2a5c3f943a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1 module dmd.FuncLiteralDeclaration;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
2
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
3 import dmd.FuncDeclaration;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
4 import dmd.TOK;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
5 import dmd.Loc;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
6 import dmd.Type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
7 import dmd.ForeachStatement;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
8 import dmd.OutBuffer;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
9 import dmd.HdrGenState;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
10 import dmd.Dsymbol;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
11 import dmd.STC;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
12 import dmd.Lexer;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
13
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
14 class FuncLiteralDeclaration : FuncDeclaration
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
15 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
16 TOK tok; // TOKfunction or TOKdelegate
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
17
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
18 this(Loc loc, Loc endloc, Type type, TOK tok, ForeachStatement fes)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
20 super(loc, endloc, null, STC.STCundefined, type);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
21
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
22 string id;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
23
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
24 if (fes)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
25 id = "__foreachbody";
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
26 else if (tok == TOK.TOKdelegate)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
27 id = "__dgliteral";
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
28 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
29 id = "__funcliteral";
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
30
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
31 this.ident = Lexer.uniqueId(id);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
32 this.tok = tok;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
33 this.fes = fes;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
34
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
35 //printf("FuncLiteralDeclaration() id = '%s', type = '%s'\n", this->ident->toChars(), type->toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
36 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
37
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
38 void toCBuffer(OutBuffer buf, HdrGenState* hgs)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
39 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
40 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
41 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
42
56
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
43 Dsymbol syntaxCopy(Dsymbol s)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
44 {
56
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
45 FuncLiteralDeclaration f;
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
46
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
47 //printf("FuncLiteralDeclaration.syntaxCopy('%s')\n", toChars());
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
48 if (s)
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
49 f = cast(FuncLiteralDeclaration)s;
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
50 else
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
51 {
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
52 f = new FuncLiteralDeclaration(loc, endloc, type.syntaxCopy(), tok, fes);
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
53 f.ident = ident; // keep old identifier
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
54 }
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
55 FuncDeclaration.syntaxCopy(f);
51605de93870 TupleExp.optimize
korDen
parents: 0
diff changeset
56 return f;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
57 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
58
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
59 bool isNested()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
60 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
61 //printf("FuncLiteralDeclaration::isNested() '%s'\n", toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
62 return (tok == TOK.TOKdelegate);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
63 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
64
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
65 bool isVirtual()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
66 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
67 return false;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
68 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
69
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
70 FuncLiteralDeclaration isFuncLiteralDeclaration() { return this; }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
71
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
72 string kind()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
73 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
74 return (tok == TOKdelegate) ? "delegate" : "function";
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
75 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
76 }