<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -118,61 +118,88 @@ describe &quot;The return keyword&quot; do
   end
 
   describe &quot;within a begin&quot; do
-    it &quot;executes ensure before returning from function&quot; do
-      def f(a)
+    before :each do
+      ScratchPad.record []
+    end
+
+    it &quot;executes ensure before returning&quot; do
+      def f()
         begin
-          return a
+          ScratchPad &lt;&lt; :begin
+          return :begin
+          ScratchPad &lt;&lt; :after_begin
         ensure
-          a &lt;&lt; 1
+          ScratchPad &lt;&lt; :ensure
         end
+        ScratchPad &lt;&lt; :function
       end
-      f([]).should == [1]
+      f().should == :begin
+      ScratchPad.recorded.should == [:begin, :ensure]
     end
 
-    it &quot;executes return in ensure before returning from function&quot; do
-      def f(a)
+    it &quot;returns last value returned in ensure&quot; do
+      def f()
         begin
-          return a
+          ScratchPad &lt;&lt; :begin
+          return :begin
+          ScratchPad &lt;&lt; :after_begin
         ensure
-          return [0]
-          a &lt;&lt; 1
+          ScratchPad &lt;&lt; :ensure
+          return :ensure
+          ScratchPad &lt;&lt; :after_ensure
         end
+        ScratchPad &lt;&lt; :function
       end
-      f([]).should == [0]
+      f().should == :ensure
+      ScratchPad.recorded.should == [:begin, :ensure]
     end
 
-    it &quot;executes ensures in stack order before returning from function&quot; do
-      def f(a)
+    it &quot;executes nested ensures before returning&quot; do
+      def f()
         begin
           begin
-            return a
+            ScratchPad &lt;&lt; :inner_begin
+            return :inner_begin
+            ScratchPad &lt;&lt; :after_inner_begin
           ensure
-            a &lt;&lt; 2
+            ScratchPad &lt;&lt; :inner_ensure
           end
+          ScratchPad &lt;&lt; :outer_begin
+          return :outer_begin
+          ScratchPad &lt;&lt; :after_outer_begin
         ensure
-          a &lt;&lt; 1
+          ScratchPad &lt;&lt; :outer_ensure
         end
+        ScratchPad &lt;&lt; :function
       end
-      f([]).should == [2,1]
+      f().should == :inner_begin
+      ScratchPad.recorded.should == [:inner_begin, :inner_ensure, :outer_ensure]
     end
 
-    it &quot;executes return at base of ensure stack&quot; do
-      def f(a)
+    it &quot;returns last value returned in nested ensures&quot; do
+      def f()
         begin
           begin
-            return a
+            ScratchPad &lt;&lt; :inner_begin
+            return :inner_begin
+            ScratchPad &lt;&lt; :after_inner_begin
           ensure
-            a &lt;&lt; 2
-            return 2
+            ScratchPad &lt;&lt; :inner_ensure
+            return :inner_ensure
+            ScratchPad &lt;&lt; :after_inner_ensure
           end
+          ScratchPad &lt;&lt; :outer_begin
+          return :outer_begin
+          ScratchPad &lt;&lt; :after_outer_begin
         ensure
-          a &lt;&lt; 1
-          return 1
+          ScratchPad &lt;&lt; :outer_ensure
+          return :outer_ensure
+          ScratchPad &lt;&lt; :after_outer_ensure
         end
+        ScratchPad &lt;&lt; :function
       end
-      a = []
-      f(a).should == 1
-      a.should == [2, 1]
+      f().should == :outer_ensure
+      ScratchPad.recorded.should == [:inner_begin, :inner_ensure, :outer_ensure]
     end
   end
 </diff>
      <filename>language/return_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>8e099b36ca56d97c8b7a77388c009bdf4de30134</id>
    </parent>
  </parents>
  <author>
    <name>Charles Comstock</name>
    <email>clgc@consistency.cgs.wustl.edu</email>
  </author>
  <url>http://github.com/rubyspec/rubyspec/commit/bd16a4301de66d27c9ddf87edb2f6bd569024841</url>
  <id>bd16a4301de66d27c9ddf87edb2f6bd569024841</id>
  <committed-date>2009-09-29T16:30:18-07:00</committed-date>
  <authored-date>2009-09-29T16:30:18-07:00</authored-date>
  <message>Return from within a begin was not checking all exit paths from the function
and updated specs to use ScratchPad</message>
  <tree>03cbb4898e5a27262f70cd4f55d208801c57bd59</tree>
  <committer>
    <name>Charles Comstock</name>
    <email>clgc@consistency.cgs.wustl.edu</email>
  </committer>
</commit>
