浏览代码

Don't leave variables bound after function execution :(

master
Dylan Baker 6 年前
父节点
当前提交
2242484bd6
共有 2 个文件被更改,包括 9 次插入0 次删除
  1. 2
    0
      lib/chervil/ast/function.rb
  2. 7
    0
      spec/interpreter_spec.rb

+ 2
- 0
lib/chervil/ast/function.rb 查看文件

23
         raise "Expected #{params.size} arguments but received #{args.size}"
23
         raise "Expected #{params.size} arguments but received #{args.size}"
24
       end
24
       end
25
 
25
 
26
+      env = ::Chervil::Env.new(env)
27
+
26
       @params.zip(args).each do |key, value|
28
       @params.zip(args).each do |key, value|
27
         env.set(key.name, value)
29
         env.set(key.name, value)
28
       end
30
       end

+ 7
- 0
spec/interpreter_spec.rb 查看文件

25
       interpret('(define (plus-one x) (+ x one))', env)
25
       interpret('(define (plus-one x) (+ x one))', env)
26
       expect(interpret('(plus-one 2)', env).first).to eq(3.0)
26
       expect(interpret('(plus-one 2)', env).first).to eq(3.0)
27
     end
27
     end
28
+
29
+    it 'doesn\'t leave variables bound after function execution' do
30
+      env = Env.new
31
+      interpret('(define (plus-one x) (+ 1 x))', env)
32
+      interpret('(plus-one 5)', env)
33
+      expect(env.get('x')).to eq(nil)
34
+    end
28
   end
35
   end
29
 end
36
 end

正在加载...
取消
保存