parser: remove old-style attributes in xss
[nit.git] / src / parser / xss / prods.xss
index 45a6868..da6dae9 100644 (file)
@@ -27,12 +27,12 @@ class @ename
        super ${../@ename}
 $ foreach {elem}
 $   if @is_list
-    readable var _n_@name: List[@etype] = new List[@etype]
+       var n_@name: List[@etype] = new List[@etype]
 $   else
 $   if @modifier
-    readable var _n_@name: nullable @etype = null
+       var n_@name: nullable @etype = null is writable
 $   else
-    readable var _n_@name: @etype
+       var n_@name: @etype is writable, noinit
 $   end
 $   end
 $ end
@@ -41,16 +41,15 @@ $ end
 
 class Start
        super Prod
-    readable var _n_base: nullable $baseprod
-    readable var _n_eof: EOF
-    init(
-        n_base: nullable $baseprod,
-        n_eof: EOF)
-    do
-        _n_base = n_base
-        _n_eof = n_eof
-    end
-
+       var n_base: nullable $baseprod is writable, noinit
+       var n_eof: EOF is writable, noinit
+       init(
+               n_base: nullable $baseprod,
+               n_eof: EOF)
+       do
+               _n_base = n_base
+               _n_eof = n_eof
+       end
 end
 $ end template
 
@@ -58,97 +57,79 @@ $ template make_prods()
 $ set baseprod = {//prod/@ename}
 $ foreach {//alt}
 redef class @ename
-    private init empty_init do end
-
 $ if {count(elem)!=0}
-    init init_${translate(@ename,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")} (
+       init init_${translate(@ename,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")} (
 $ foreach {elem}
 $   if {@is_list}
-            n_@{name}: Collection[Object][-sep ','-] # Should be Collection[@etype]
+               n_@{name}: Collection[Object][-sep ','-] # Should be Collection[@etype]
 $   else
-            n_@{name}: nullable @etype[-sep ','-]
+               n_@{name}: nullable @etype[-sep ','-]
 $   end
 $ end
-    )
+       )
 $ else
-    init init_${translate(@ename,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")}
+       init init_${translate(@ename,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")}
 $ end
-    do
-        empty_init
+       do
 $ foreach {elem}
 $   if @is_list
-       for n in n_@{name} do
-               assert n isa @{etype}
-               _n_@{name}.add(n)
-               n.parent = self
-       end
+               self.n_@{name}.unsafe_add_all(n_@{name})
 $   else
 $   if {@modifier}
-        _n_@name = n_@{name}
-       if n_@{name} != null then
-               n_@{name}.parent = self
-       end
+               _n_@name = n_@{name}
+               if n_@{name} != null then n_@{name}.parent = self
 $   else
-        _n_@name = n_@{name}.as(not null)
-       n_@{name}.parent = self
+               _n_@name = n_@{name}.as(not null)
+               n_@{name}.parent = self
 $   end
 $   end
 $ end
-    end
+       end
 
-    redef fun replace_child(old_child: PNode, new_child: nullable PNode)
-    do
+       redef fun replace_child(old_child: PNode, new_child: nullable PNode)
+       do
 $ foreach {elem}
 $   if @is_list
-        for i in [0.._n_@{name}.length[ do
-            if _n_@{name}[i] == old_child then
-                if new_child != null then
-                   assert new_child isa @etype
-                    _n_@{name}[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_@{name}.remove_at(i)
-                end
-                return
-            end
-        end
+               if n_@{name}.replace_child(old_child, new_child) then return
 $   else
-        if _n_@{name} == old_child then
-            if new_child != null then
-                new_child.parent = self
-               assert new_child isa @etype
-                _n_@{name} = new_child
-           else
+               if _n_@{name} == old_child then
 $   if @modifier
-               _n_@{name} = null
+                       n_@{name} = new_child.as(nullable @etype)
 $   else
-               abort
+                       n_@{name} = new_child.as(@etype)
 $   end
-            end
-            return
-       end
+                       return
+               end
 $   end
 $ end foreach
-    end
+       end
 
-    redef fun visit_all(v: Visitor)
-    do
 $   foreach {elem}
 $     if @is_list
-            for n in _n_@{name} do
-                v.enter_visit(n)
-           end
 $     else
+       redef fun n_@{name}=(node)
+       do
+               _n_@{name} = node
 $       if @modifier
-        if _n_@{name} != null then
-            v.enter_visit(_n_@{name}.as(not null))
-        end
+               if node != null then node.parent = self
 $       else
-        v.enter_visit(_n_@{name})
+               node.parent = self
 $       end
+       end
 $     end
 $   end foreach
-    end
+
+
+       redef fun visit_all(v: Visitor)
+       do
+$   foreach {elem}
+$     if @is_list
+               n_@{name}.visit_all(v)
+$     else
+               v.enter_visit(_n_@{name})
+$     end
+$   end foreach
+       end
 end
 $ end foreach