parser: remove generated old-style accesors.
[nit.git] / src / parser / xss / prods.xss
1 $ // This file is part of NIT ( http://www.nitlanguage.org ).
2 $ //
3 $ // Copyright 2008 Jean Privat <jean@pryen.org>
4 $ // Based on algorithms developped for ( http://www.sablecc.org/ ).
5 $ //
6 $ // Licensed under the Apache License, Version 2.0 (the "License");
7 $ // you may not use this file except in compliance with the License.
8 $ // You may obtain a copy of the License at
9 $ //
10 $ //     http://www.apache.org/licenses/LICENSE-2.0
11 $ //
12 $ // Unless required by applicable law or agreed to in writing, software
13 $ // distributed under the License is distributed on an "AS IS" BASIS,
14 $ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 $ // See the License for the specific language governing permissions and
16 $ // limitations under the License.
17
18 $ template make_abs_prods()
19 $ set baseprod = {//prod/@ename}
20
21 $ foreach {//prod}
22 class @ename super Prod end
23 $ end
24
25 $ foreach {//alt}
26 class @ename
27         super ${../@ename}
28 $ foreach {elem}
29 $   if @is_list
30         var n_@name: List[@etype] = new List[@etype]
31 $   else
32 $   if @modifier
33         var _n_@name: nullable @etype = null
34         fun n_@name: nullable @etype do return _n_@name
35         fun n_@name=(n_@name: nullable @etype) do _n_@name = n_@name
36 $   else
37         var _n_@name: @etype = null
38         fun n_@name: @etype do return _n_@name
39         fun n_@name=(n_@name: @etype) do _n_@name = n_@name
40 $   end
41 $   end
42 $ end
43 end
44 $ end
45
46 class Start
47         super Prod
48         var _n_base: nullable $baseprod
49         fun n_base: nullable $baseprod do return _n_base
50         fun n_base=(n_base: nullable $baseprod_ do _n_base = n_base
51         var _n_eof: EOF
52         fun n_eof: EOF do return _n_eof
53         fun n_eof=(n_eof: EOF) do _n_eof = n_eof
54         init(
55                 n_base: nullable $baseprod,
56                 n_eof: EOF)
57         do
58                 _n_base = n_base
59                 _n_eof = n_eof
60         end
61 end
62 $ end template
63
64 $ template make_prods()
65 $ set baseprod = {//prod/@ename}
66 $ foreach {//alt}
67 redef class @ename
68 $ if {count(elem)!=0}
69         init init_${translate(@ename,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")} (
70 $ foreach {elem}
71 $   if {@is_list}
72                 n_@{name}: Collection[Object][-sep ','-] # Should be Collection[@etype]
73 $   else
74                 n_@{name}: nullable @etype[-sep ','-]
75 $   end
76 $ end
77         )
78 $ else
79         init init_${translate(@ename,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")}
80 $ end
81         do
82 $ foreach {elem}
83 $   if @is_list
84                 self.n_@{name}.unsafe_add_all(n_@{name})
85 $   else
86 $   if {@modifier}
87                 _n_@name = n_@{name}
88                 if n_@{name} != null then n_@{name}.parent = self
89 $   else
90                 _n_@name = n_@{name}.as(not null)
91                 n_@{name}.parent = self
92 $   end
93 $   end
94 $ end
95         end
96
97         redef fun replace_child(old_child: PNode, new_child: nullable PNode)
98         do
99 $ foreach {elem}
100 $   if @is_list
101                 if n_@{name}.replace_child(old_child, new_child) then return
102 $   else
103                 if _n_@{name} == old_child then
104 $   if @modifier
105                         n_@{name} = new_child.as(nullable @etype)
106 $   else
107                         n_@{name} = new_child.as(@etype)
108 $   end
109                         return
110                 end
111 $   end
112 $ end foreach
113         end
114
115 $   foreach {elem}
116 $     if @is_list
117 $     else
118         redef fun n_@{name}=(node)
119         do
120                 _n_@{name} = node
121 $       if @modifier
122                 if node != null then node.parent = self
123 $       else
124                 node.parent = self
125 $       end
126         end
127 $     end
128 $   end foreach
129
130
131         redef fun visit_all(v: Visitor)
132         do
133 $   foreach {elem}
134 $     if @is_list
135                 n_@{name}.visit_all(v)
136 $     else
137                 v.enter_visit(_n_@{name})
138 $     end
139 $   end foreach
140         end
141 end
142 $ end foreach
143
144 redef class Start
145     redef fun replace_child(old_child: PNode, new_child: nullable PNode)
146     do
147         if _n_base == old_child then
148             if new_child == null then
149             else
150                 new_child.parent = self
151                 assert new_child isa $baseprod
152                 _n_base = new_child
153             end
154             old_child.parent = null
155             return
156         end
157     end
158
159     redef fun visit_all(v: Visitor)
160     do
161         if _n_base != null then
162             v.enter_visit(_n_base.as(not null))
163         end
164         v.enter_visit(_n_eof)
165     end
166 end
167 $ end template