Merge: Robust IO
authorJean Privat <jean@pryen.org>
Fri, 10 Apr 2015 11:27:53 +0000 (18:27 +0700)
committerJean Privat <jean@pryen.org>
Fri, 10 Apr 2015 11:27:53 +0000 (18:27 +0700)
Some cleanup on lib/standard/file.nit
Especially close #755

There is still some work to do and question to answer from an API point of view.

Pull-Request: #1246
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Romain Chanoir <chanoir.romain@courrier.uqam.ca>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

1  2 
src/interpreter/naive_interpreter.nit

@@@ -1001,11 -1001,11 +1001,11 @@@ redef class AMethPropde
                        else if pname == "file_exists" then
                                return v.bool_instance(recvval.to_s.file_exists)
                        else if pname == "file_mkdir" then
-                               recvval.to_s.mkdir
-                               return null
+                               var res = recvval.to_s.mkdir
+                               return v.bool_instance(res == null)
                        else if pname == "file_chdir" then
-                               recvval.to_s.chdir
-                               return null
+                               var res = recvval.to_s.chdir
+                               return v.bool_instance(res == null)
                        else if pname == "file_realpath" then
                                return v.native_string_instance(recvval.to_s.realpath)
                        else if pname == "get_environ" then
@@@ -1273,16 -1273,14 +1273,16 @@@ redef class ABlockExp
  end
  
  redef class AVardeclExpr
 -      redef fun stmt(v)
 +      redef fun expr(v)
        do
                var ne = self.n_expr
                if ne != null then
                        var i = v.expr(ne)
 -                      if i == null then return
 +                      if i == null then return null
                        v.write_variable(self.variable.as(not null), i)
 +                      return i
                end
 +              return null
        end
  end
  
@@@ -1467,19 -1465,6 +1467,19 @@@ redef class AForExp
        end
  end
  
 +redef class AWithExpr
 +      redef fun stmt(v)
 +      do
 +              var expr = v.expr(self.n_expr)
 +              if expr == null then return
 +
 +              v.callsite(method_start, [expr])
 +              v.stmt(self.n_block)
 +              v.is_escape(self.break_mark) # Clear the break
 +              v.callsite(method_finish, [expr])
 +      end
 +end
 +
  redef class AAssertExpr
        redef fun stmt(v)
        do