From 02b1b9cad50b1a95ed9fc5a3eb6f236ac4788708 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Mon, 30 Mar 2015 09:59:48 +0700 Subject: [PATCH] interpreter: interpret `with` statement Signed-off-by: Jean Privat --- src/interpreter/naive_interpreter.nit | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/interpreter/naive_interpreter.nit b/src/interpreter/naive_interpreter.nit index aba779a..21118ab 100644 --- a/src/interpreter/naive_interpreter.nit +++ b/src/interpreter/naive_interpreter.nit @@ -1270,14 +1270,16 @@ redef class ABlockExpr 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 @@ -1462,6 +1464,19 @@ redef class AForExpr 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 -- 1.7.9.5