Merge remote-tracking branch 'alexandre/fix-iterators'
authorJean Privat <jean@pryen.org>
Tue, 25 Feb 2014 21:14:14 +0000 (16:14 -0500)
committerJean Privat <jean@pryen.org>
Tue, 25 Feb 2014 21:14:14 +0000 (16:14 -0500)
Conflicts:
src/icode/icode_builder.nit
src/naive_interpreter.nit
tests/sav/base_attr_gen.res
tests/sav/error_needed_method_alt2.res
tests/sav/nitc/fixme/base_attr_gen_alt1.res
tests/sav/nitc/nitmetrics_args1.res

1  2 
src/abstract_compiler.nit
src/global_compiler.nit
src/naive_interpreter.nit
src/separate_compiler.nit
src/typing.nit
tests/sav/base_attr_gen.res
tests/sav/error_expr_not_ok_alt4.res
tests/sav/error_expr_not_ok_alt5.res
tests/sav/error_expr_not_ok_alt6.res
tests/sav/error_needed_method_alt2.res
tests/sav/nitmetrics_args1.res

Simple merge
Simple merge
@@@ -389,17 -386,25 +389,17 @@@ private class NaiveInterprete
                end
        end
  
 -      fun call_closure(closure: ClosureInstance, args: Array[Instance]): nullable Instance
 +      # Common code for runtime injected calls and normal calls
 +      fun send_commons(mproperty: MMethod, args: Array[Instance], mtype: MType): nullable Instance
        do
 -              var nclosuredef = closure.nclosuredef
 -              var f = closure.frame
 -              for i in [0..closure.nclosuredef.mclosure.mtype.as(MSignature).arity[ do
 -                      var variable = nclosuredef.variables[i]
 -                      f.map[variable] = args[i]
 -              end
 -
 -              self.frames.unshift(f)
 -
 -              self.stmt(nclosuredef.n_expr)
 -
 -              self.frames.shift
 -
 -              if self.is_continue(nclosuredef.escapemark) then
 -                      var res = self.escapevalue
 -                      self.escapevalue = null
 -                      return res
 +              if mtype isa MNullType then
 +                      if mproperty.name == "==" then
 +                              return self.bool_instance(args[0] == args[1])
 +                      else if mproperty.name == "!=" then
 +                              return self.bool_instance(args[0] != args[1])
 +                      end
-                       #fatal("Reciever is null. {mproperty}. {args.join(" ")} {self.frame.current_node.class_name}")
-                       fatal("Reciever is null")
++                      #fatal("Receiver is null. {mproperty}. {args.join(" ")} {self.frame.current_node.class_name}")
++                      fatal("Receiver is null")
                end
                return null
        end
Simple merge
diff --cc src/typing.nit
Simple merge
@@@ -1,1 -1,1 +1,1 @@@
- Runtime error: Reciever is null (base_attr_gen.nit:26)
 -Runtime error: Receiver is null (base_attr_gen.nit:8)
++Runtime error: Receiver is null (base_attr_gen.nit:26)
Simple merge
Simple merge
Simple merge
@@@ -1,2 -1,2 +1,2 @@@
 -alt/error_needed_method_alt2.nit:47,10--27: Error: Method 'init' doesn't exists in Collection[Int].
 +alt/error_needed_method_alt2.nit:47,10--27: Cannot instantiate interface Collection[Int].
- alt/error_needed_method_alt2.nit:47,1--40: Type Error: Expected method 'iterator' in type Collection[Int]
+ alt/error_needed_method_alt2.nit:47,1--40: Type Error: 'for' expects a type providing 'iterator' method, got 'Collection[Int]'.
Simple merge