annotate src/dil/ast/Parameters.d @ 821:09a64d96967a

Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
author Jarrett Billingsley <jarrett.billingsley@gmail.com>
date Fri, 14 Mar 2008 11:01:05 -0400
parents bcb74c9b895c
children 451ede0105e0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
1 /++
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
2 Author: Aziz Köksal
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
3 License: GPL3
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
4 +/
608
fac9e8b258fc Moved dil.ast.Parameter to dil.ast.Parameters.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 605
diff changeset
5 module dil.ast.Parameters;
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
6
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
7 import dil.ast.Node;
701
65ad2f96df1f Moved TypeNode to new module dil.ast.Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 668
diff changeset
8 import dil.ast.Type;
654
2a71e2f50e13 Moved class Declaration to its own module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 635
diff changeset
9 import dil.ast.Expression;
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
10 import dil.ast.NodeCopier;
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
11 import dil.lexer.Identifier;
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
12 import dil.Enums;
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
13
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
14 /// A function or foreach parameter.
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
15 class Parameter : Node
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
16 {
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
17 StorageClass stc; /// The storage classes of the parameter.
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
18 TypeNode type; /// The parameter's type.
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
19 Identifier* name; /// The name of the parameter.
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
20 Expression defValue; /// The default initialization value.
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
21
668
a1f8d8f2db38 Renamed some identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 654
diff changeset
22 this(StorageClass stc, TypeNode type, Identifier* name, Expression defValue)
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
23 {
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
24 super(NodeCategory.Other);
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
25 mixin(set_kind);
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
26 // type can be null when param in foreach statement
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
27 addOptChild(type);
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
28 addOptChild(defValue);
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
29
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
30 this.stc = stc;
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
31 this.type = type;
668
a1f8d8f2db38 Renamed some identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 654
diff changeset
32 this.name = name;
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
33 this.defValue = defValue;
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
34 }
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
35
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
36 /// Returns true if this is a D-style variadic parameter.
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
37 /// E.g.: func(int[] values ...)
747
00f872d949ea Added method scanCommentText() to DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 701
diff changeset
38 bool isDVariadic()
00f872d949ea Added method scanCommentText() to DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 701
diff changeset
39 {
00f872d949ea Added method scanCommentText() to DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 701
diff changeset
40 return isVariadic && !isCVariadic;
00f872d949ea Added method scanCommentText() to DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 701
diff changeset
41 }
00f872d949ea Added method scanCommentText() to DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 701
diff changeset
42
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
43 /// Returns true if this is a C-style variadic parameter.
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
44 /// E.g.: func(...)
747
00f872d949ea Added method scanCommentText() to DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 701
diff changeset
45 bool isCVariadic()
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
46 {
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
47 return stc == StorageClass.Variadic &&
668
a1f8d8f2db38 Renamed some identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 654
diff changeset
48 type is null && name is null;
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
49 }
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
50
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
51 /// Returns true if this is a D- or C-style variadic parameter.
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
52 bool isVariadic()
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
53 {
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
54 return !!(stc & StorageClass.Variadic);
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
55 }
821
09a64d96967a Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
Jarrett Billingsley <jarrett.billingsley@gmail.com>
parents: 806
diff changeset
56
09a64d96967a Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
Jarrett Billingsley <jarrett.billingsley@gmail.com>
parents: 806
diff changeset
57 /// Returns true if this parameter is lazy.
09a64d96967a Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
Jarrett Billingsley <jarrett.billingsley@gmail.com>
parents: 806
diff changeset
58 bool isLazy()
09a64d96967a Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
Jarrett Billingsley <jarrett.billingsley@gmail.com>
parents: 806
diff changeset
59 {
09a64d96967a Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
Jarrett Billingsley <jarrett.billingsley@gmail.com>
parents: 806
diff changeset
60 return !!(stc & StorageClass.Lazy);
09a64d96967a Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
Jarrett Billingsley <jarrett.billingsley@gmail.com>
parents: 806
diff changeset
61 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
62
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
63 mixin(copyMethod);
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
64 }
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
65
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
66 /// Array of parameters.
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
67 class Parameters : Node
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
68 {
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
69 this()
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
70 {
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
71 super(NodeCategory.Other);
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
72 mixin(set_kind);
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
73 }
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
74
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
75 bool hasVariadic()
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
76 {
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
77 if (children.length != 0)
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
78 return items[$-1].isVariadic();
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
79 return false;
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
80 }
821
09a64d96967a Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
Jarrett Billingsley <jarrett.billingsley@gmail.com>
parents: 806
diff changeset
81
09a64d96967a Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
Jarrett Billingsley <jarrett.billingsley@gmail.com>
parents: 806
diff changeset
82 bool hasLazy()
09a64d96967a Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
Jarrett Billingsley <jarrett.billingsley@gmail.com>
parents: 806
diff changeset
83 {
09a64d96967a Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
Jarrett Billingsley <jarrett.billingsley@gmail.com>
parents: 806
diff changeset
84 foreach(param; items)
09a64d96967a Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
Jarrett Billingsley <jarrett.billingsley@gmail.com>
parents: 806
diff changeset
85 if(param.isLazy())
09a64d96967a Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
Jarrett Billingsley <jarrett.billingsley@gmail.com>
parents: 806
diff changeset
86 return true;
09a64d96967a Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
Jarrett Billingsley <jarrett.billingsley@gmail.com>
parents: 806
diff changeset
87 return false;
09a64d96967a Started the interpreter. Made a couple changes in other parts -- CharExpression now has an IntExpression of a character type as its value member and its type is set accordingly.
Jarrett Billingsley <jarrett.billingsley@gmail.com>
parents: 806
diff changeset
88 }
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
89
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
90 void opCatAssign(Parameter param)
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
91 { addChild(param); }
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
92
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
93 Parameter[] items()
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
94 { return cast(Parameter[])children; }
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
95
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
96 size_t length()
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
97 { return children.length; }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
98
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
99 mixin(copyMethod);
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
100 }
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
101
747
00f872d949ea Added method scanCommentText() to DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 701
diff changeset
102 /*~~~~~~~~~~~~~~~~~~~~~~
00f872d949ea Added method scanCommentText() to DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 701
diff changeset
103 ~ Template parameters: ~
00f872d949ea Added method scanCommentText() to DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 701
diff changeset
104 ~~~~~~~~~~~~~~~~~~~~~~*/
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
105
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
106 /// Abstract base class for all template parameters.
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
107 abstract class TemplateParameter : Node
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
108 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
109 Identifier* ident;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
110 this(Identifier* ident)
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
111 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
112 super(NodeCategory.Other);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
113 this.ident = ident;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
114 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
115 override abstract TemplateParameter copy();
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
116 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
117
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
118 /// E.g.: (alias T)
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
119 class TemplateAliasParameter : TemplateParameter
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
120 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
121 TypeNode specType, defType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
122 this(Identifier* ident, TypeNode specType, TypeNode defType)
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
123 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
124 super(ident);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
125 mixin(set_kind);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
126 addOptChild(specType);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
127 addOptChild(defType);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
128 this.ident = ident;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
129 this.specType = specType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
130 this.defType = defType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
131 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
132 mixin(copyMethod);
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
133 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
134
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
135 /// E.g.: (T t)
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
136 class TemplateTypeParameter : TemplateParameter
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
137 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
138 TypeNode specType, defType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
139 this(Identifier* ident, TypeNode specType, TypeNode defType)
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
140 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
141 super(ident);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
142 mixin(set_kind);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
143 addOptChild(specType);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
144 addOptChild(defType);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
145 this.ident = ident;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
146 this.specType = specType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
147 this.defType = defType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
148 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
149 mixin(copyMethod);
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
150 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
151
635
b2fc028d8b55 Added class Visitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 608
diff changeset
152 // version(D2)
b2fc028d8b55 Added class Visitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 608
diff changeset
153 // {
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
154 /// E.g.: (this T)
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
155 class TemplateThisParameter : TemplateParameter
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
156 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
157 TypeNode specType, defType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
158 this(Identifier* ident, TypeNode specType, TypeNode defType)
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
159 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
160 super(ident);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
161 mixin(set_kind);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
162 addOptChild(specType);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
163 addOptChild(defType);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
164 this.ident = ident;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
165 this.specType = specType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
166 this.defType = defType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
167 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
168 mixin(copyMethod);
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
169 }
635
b2fc028d8b55 Added class Visitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 608
diff changeset
170 // }
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
171
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
172 /// E.g.: (T)
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
173 class TemplateValueParameter : TemplateParameter
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
174 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
175 TypeNode valueType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
176 Expression specValue, defValue;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
177 this(TypeNode valueType, Identifier* ident, Expression specValue, Expression defValue)
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
178 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
179 super(ident);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
180 mixin(set_kind);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
181 addChild(valueType);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
182 addOptChild(specValue);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
183 addOptChild(defValue);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
184 this.valueType = valueType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
185 this.ident = ident;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
186 this.specValue = specValue;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
187 this.defValue = defValue;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
188 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
189 mixin(copyMethod);
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
190 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
191
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
192 /// E.g.: (T...)
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
193 class TemplateTupleParameter : TemplateParameter
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
194 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
195 this(Identifier* ident)
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
196 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
197 super(ident);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
198 mixin(set_kind);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
199 this.ident = ident;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
200 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
201 mixin(copyMethod);
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
202 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
203
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
204 /// Array of template parameters.
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
205 class TemplateParameters : Node
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
206 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
207 this()
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
208 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
209 super(NodeCategory.Other);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
210 mixin(set_kind);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
211 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
212
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
213 void opCatAssign(TemplateParameter parameter)
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
214 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
215 addChild(parameter);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
216 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
217
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
218 TemplateParameter[] items()
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
219 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
220 return cast(TemplateParameter[])children;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
221 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
222
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
223 mixin(copyMethod);
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
224 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
225
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
226 /// Array of template arguments.
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
227 class TemplateArguments : Node
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
228 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
229 this()
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
230 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
231 super(NodeCategory.Other);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
232 mixin(set_kind);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
233 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
234
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
235 void opCatAssign(Node argument)
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
236 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
237 addChild(argument);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
238 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
239
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
240 mixin(copyMethod);
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
241 }