annotate src/dil/ast/Parameters.d @ 806:bcb74c9b895c

Moved out files in the trunk folder to the root.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sun, 09 Mar 2008 00:12:19 +0100
parents trunk/src/dil/ast/Parameters.d@5fe89bb8cbdd
children 09a64d96967a
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 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
56
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
57 mixin(copyMethod);
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
58 }
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
59
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
60 /// Array of parameters.
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
61 class Parameters : Node
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
62 {
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
63 this()
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 super(NodeCategory.Other);
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
66 mixin(set_kind);
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
67 }
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 bool hasVariadic()
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 if (children.length != 0)
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
72 return items[$-1].isVariadic();
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
73 return false;
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
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
76 void opCatAssign(Parameter param)
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
77 { addChild(param); }
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
78
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
79 Parameter[] items()
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
80 { return cast(Parameter[])children; }
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
81
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
82 size_t length()
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
83 { return children.length; }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
84
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
85 mixin(copyMethod);
604
87f09469d337 Moved class Parameter/s to module dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
86 }
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
87
747
00f872d949ea Added method scanCommentText() to DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 701
diff changeset
88 /*~~~~~~~~~~~~~~~~~~~~~~
00f872d949ea Added method scanCommentText() to DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 701
diff changeset
89 ~ Template parameters: ~
00f872d949ea Added method scanCommentText() to DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 701
diff changeset
90 ~~~~~~~~~~~~~~~~~~~~~~*/
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
91
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
92 /// 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
93 abstract class TemplateParameter : Node
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
94 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
95 Identifier* ident;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
96 this(Identifier* ident)
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
97 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
98 super(NodeCategory.Other);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
99 this.ident = ident;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
100 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
101 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
102 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
103
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
104 /// 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
105 class TemplateAliasParameter : TemplateParameter
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
106 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
107 TypeNode specType, defType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
108 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
109 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
110 super(ident);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
111 mixin(set_kind);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
112 addOptChild(specType);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
113 addOptChild(defType);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
114 this.ident = ident;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
115 this.specType = specType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
116 this.defType = defType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
117 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
118 mixin(copyMethod);
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
119 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
120
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
121 /// 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
122 class TemplateTypeParameter : TemplateParameter
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 TypeNode specType, defType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
125 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
126 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
127 super(ident);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
128 mixin(set_kind);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
129 addOptChild(specType);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
130 addOptChild(defType);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
131 this.ident = ident;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
132 this.specType = specType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
133 this.defType = defType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
134 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
135 mixin(copyMethod);
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
136 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
137
635
b2fc028d8b55 Added class Visitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 608
diff changeset
138 // version(D2)
b2fc028d8b55 Added class Visitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 608
diff changeset
139 // {
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
140 /// 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
141 class TemplateThisParameter : TemplateParameter
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
142 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
143 TypeNode specType, defType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
144 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
145 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
146 super(ident);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
147 mixin(set_kind);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
148 addOptChild(specType);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
149 addOptChild(defType);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
150 this.ident = ident;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
151 this.specType = specType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
152 this.defType = defType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
153 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
154 mixin(copyMethod);
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
155 }
635
b2fc028d8b55 Added class Visitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 608
diff changeset
156 // }
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
157
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
158 /// E.g.: (T)
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
159 class TemplateValueParameter : TemplateParameter
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
160 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
161 TypeNode valueType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
162 Expression specValue, defValue;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
163 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
164 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
165 super(ident);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
166 mixin(set_kind);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
167 addChild(valueType);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
168 addOptChild(specValue);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
169 addOptChild(defValue);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
170 this.valueType = valueType;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
171 this.ident = ident;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
172 this.specValue = specValue;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
173 this.defValue = defValue;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
174 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
175 mixin(copyMethod);
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
176 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
177
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
178 /// E.g.: (T...)
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
179 class TemplateTupleParameter : TemplateParameter
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
180 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
181 this(Identifier* ident)
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
182 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
183 super(ident);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
184 mixin(set_kind);
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 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
187 mixin(copyMethod);
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
188 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
189
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
190 /// 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
191 class TemplateParameters : Node
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
192 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
193 this()
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 super(NodeCategory.Other);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
196 mixin(set_kind);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
197 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
198
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
199 void opCatAssign(TemplateParameter parameter)
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
200 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
201 addChild(parameter);
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
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
204 TemplateParameter[] items()
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
205 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
206 return cast(TemplateParameter[])children;
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
207 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
208
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
209 mixin(copyMethod);
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
210 }
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
211
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 747
diff changeset
212 /// 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
213 class TemplateArguments : Node
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 this()
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 super(NodeCategory.Other);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
218 mixin(set_kind);
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
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
221 void opCatAssign(Node argument)
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
222 {
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
223 addChild(argument);
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
224 }
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
225
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 786
diff changeset
226 mixin(copyMethod);
605
9daa6c34c45a Moved template parameter classes to dil.ast.Parameter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 604
diff changeset
227 }