interpreter: interpret `with` statement
authorJean Privat <jean@pryen.org>
Mon, 30 Mar 2015 02:59:48 +0000 (09:59 +0700)
committerJean Privat <jean@pryen.org>
Fri, 3 Apr 2015 07:59:19 +0000 (14:59 +0700)
Signed-off-by: Jean Privat <jean@pryen.org>

src/interpreter/naive_interpreter.nit

index aba779a..21118ab 100644 (file)
@@ -1270,14 +1270,16 @@ redef class ABlockExpr
 end
 
 redef class AVardeclExpr
 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)
        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)
                        v.write_variable(self.variable.as(not null), i)
+                       return i
                end
                end
+               return null
        end
 end
 
        end
 end
 
@@ -1462,6 +1464,19 @@ redef class AForExpr
        end
 end
 
        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
 redef class AAssertExpr
        redef fun stmt(v)
        do