src: cleanup importations
[nit.git] / src / transform.nit
index bf4b992..6a209c3 100644 (file)
@@ -17,8 +17,8 @@
 module transform
 
 import astbuilder
-import auto_super_init
 import astvalidation
+import semantize
 
 redef class ToolContext
        var transform_phase: Phase = new TransformPhase(self, [typing_phase, auto_super_init_phase])
@@ -88,13 +88,14 @@ redef class AVardeclExpr
        #
        # Declarations are only useful for scope rules
        # Once names are associated with real objects, ther declaration become useless
-       # Therefore, if there is no initial value, then just detach it
+       # Therefore, if there is no initial value, then just ignore it
        # Else, replace it with a simple assignment
        redef fun accept_transform_visitor(v)
        do
                var nexpr = n_expr
                if nexpr == null then
-                       detach
+                       # do nothing
+                       # note: not detached because the collection is currently under iteration
                else
                        var nvar = v.builder.make_var_assign(self.variable.as(not null), nexpr)
                        replace_with(nvar)
@@ -170,16 +171,13 @@ redef class AArrayExpr
        #     t
        redef fun accept_transform_visitor(v)
        do
-               var mtype = self.mtype.as(MClassType)
                var nblock = v.builder.make_block
 
-               var meth = v.get_method(self, "with_capacity", mtype.mclass)
-               var nnew = v.builder.make_new(mtype, meth, [v.builder.make_int(n_exprs.n_exprs.length)])
+               var nnew = v.builder.make_new(with_capacity_callsite.as(not null), [v.builder.make_int(n_exprs.n_exprs.length)])
                nblock.add nnew
 
-               var madd = v.get_method(self, "push", mtype.mclass)
                for nexpr in self.n_exprs.n_exprs do
-                       var nadd = v.builder.make_call(nnew.make_var_read, madd, [nexpr])
+                       var nadd = v.builder.make_call(nnew.make_var_read, push_callsite.as(not null), [nexpr])
                        nblock.add nadd
                end
                var nres = nnew.make_var_read
@@ -189,43 +187,12 @@ redef class AArrayExpr
        end
 end
 
-redef class ASuperstringExpr
-       # `"x{y}z"` is replaced with
-       #
-       #     var t = new Array[Object].with_capacity(3)
-       #     t.add("x")
-       #     t.add(y)
-       #     t.add("z")
-       #     t.to_s
-       redef fun accept_transform_visitor(v)
-       do
-               var nblock = v.builder.make_block
-
-               var arraytype = v.get_class(self, "Array").get_mtype([v.get_class(self, "Object").mclass_type])
-               var meth = v.get_method(self, "with_capacity", arraytype.mclass)
-               var nnew = v.builder.make_new(arraytype, meth, [v.builder.make_int(n_exprs.length)])
-               nblock.add nnew
-
-               var madd = v.get_method(self, "add", arraytype.mclass)
-               for nexpr in self.n_exprs do
-                       var nadd = v.builder.make_call(nnew.make_var_read, madd, [nexpr])
-                       nblock.add nadd
-               end
-
-               var mtos = v.get_method(self, "to_s", arraytype.mclass)
-               var ntos = v.builder.make_call(nnew.make_var_read, mtos, null)
-               nblock.add ntos
-
-               replace_with(nblock)
-       end
-end
-
 redef class ACrangeExpr
        # `[x..y]` is replaced with `new Range[X](x,y)`
        redef fun accept_transform_visitor(v)
        do
-               var mtype = self.mtype.as(MClassType)
-               replace_with(v.builder.make_new(mtype, init_callsite.mproperty, [n_expr, n_expr2]))
+               if parent isa AForExpr then return # to permit shortcut ranges
+               replace_with(v.builder.make_new(init_callsite.as(not null), [n_expr, n_expr2]))
        end
 end
 
@@ -233,8 +200,8 @@ redef class AOrangeExpr
        # `[x..y[` is replaced with `new Range[X].without_last(x,y)`
        redef fun accept_transform_visitor(v)
        do
-               var mtype = self.mtype.as(MClassType)
-               replace_with(v.builder.make_new(mtype, init_callsite.mproperty, [n_expr, n_expr2]))
+               if parent isa AForExpr then return # to permit shortcut ranges
+               replace_with(v.builder.make_new(init_callsite.as(not null), [n_expr, n_expr2]))
        end
 end
 
@@ -261,18 +228,18 @@ redef class ASendReassignFormExpr
 
                var read_args = new Array[AExpr]
                var write_args = new Array[AExpr]
-               for a in raw_arguments.as(not null) do
+               for a in raw_arguments do
                        nblock.add(a)
                        read_args.add(a.make_var_read)
                        write_args.add(a.make_var_read)
                end
 
-               var nread = v.builder.make_call(n_expr.make_var_read, callsite.mproperty, read_args)
+               var nread = v.builder.make_call(n_expr.make_var_read, callsite.as(not null), read_args)
 
-               var nnewvalue = v.builder.make_call(nread, reassign_callsite.mproperty, [n_value])
+               var nnewvalue = v.builder.make_call(nread, reassign_callsite.as(not null), [n_value])
 
                write_args.add(nnewvalue)
-               var nwrite = v.builder.make_call(n_expr.make_var_read, write_callsite.mproperty, write_args)
+               var nwrite = v.builder.make_call(n_expr.make_var_read, write_callsite.as(not null), write_args)
                nblock.add(nwrite)
 
                replace_with(nblock)
@@ -287,7 +254,7 @@ redef class AVarReassignExpr
 
                var nread = v.builder.make_var_read(variable, read_type.as(not null))
 
-               var nnewvalue = v.builder.make_call(nread, reassign_callsite.mproperty, [n_value])
+               var nnewvalue = v.builder.make_call(nread, reassign_callsite.as(not null), [n_value])
                var nwrite = v.builder.make_var_assign(variable, nnewvalue)
 
                replace_with(nwrite)
@@ -303,7 +270,7 @@ redef class AAttrReassignExpr
                var attribute = self.mproperty.as(not null)
 
                var nread = v.builder.make_attr_read(n_expr.make_var_read, attribute)
-               var nnewvalue = v.builder.make_call(nread, reassign_callsite.mproperty, [n_value])
+               var nnewvalue = v.builder.make_call(nread, reassign_callsite.as(not null), [n_value])
                var nwrite = v.builder.make_attr_assign(n_expr.make_var_read, attribute, nnewvalue)
                nblock.add(nwrite)