[pypy-commit] lang-scheme default: Bugfix, apply evaluated it's argument twice.

boemmels noreply at buildbot.pypy.org
Mon Jan 9 23:22:56 CET 2012


Author: Juergen Boemmels <boemmels at web.de>
Branch: 
Changeset: r38:2f31b68cba35
Date: 2012-01-09 22:39 +0100
http://bitbucket.org/pypy/lang-scheme/changeset/2f31b68cba35/

Log:	Bugfix, apply evaluated it's argument twice.

diff --git a/scheme/object.py b/scheme/object.py
--- a/scheme/object.py
+++ b/scheme/object.py
@@ -625,7 +625,7 @@
     w_iter = w_list
     while w_iter is not w_nil:
         if not isinstance(w_iter, W_Pair):
-            raise WrongArg(w_list, "List")
+            raise WrongArgType(w_list, "List")
         lst.append(w_iter.car)
         w_iter = w_iter.cdr
 
diff --git a/scheme/procedure.py b/scheme/procedure.py
--- a/scheme/procedure.py
+++ b/scheme/procedure.py
@@ -3,7 +3,7 @@
         W_Number, W_Real, W_Integer, W_List, W_Character, W_Vector, \
         Body, W_Procedure, W_String, W_Promise, plst2lst, w_undefined, \
         SchemeSyntaxError, SchemeQuit, WrongArgType, WrongArgsNumber, \
-        w_nil, w_true, w_false
+        w_nil, w_true, w_false, lst2plst
 
 ##
 # operations
@@ -360,7 +360,7 @@
             #print w_lst.to_repr(), "is not a list"
             raise WrongArgType(w_lst, "List")
 
-        return w_procedure.call_tr(ctx, w_lst)
+        return w_procedure.procedure_tr(ctx, lst2plst(w_lst))
 
 class Quit(W_Procedure):
     _symbol_name = "quit"
diff --git a/scheme/test/test_eval.py b/scheme/test/test_eval.py
--- a/scheme/test/test_eval.py
+++ b/scheme/test/test_eval.py
@@ -817,6 +817,10 @@
     assert w_result.to_number() == 64
 
     assert eval_(ctx, "(apply + '())").to_number() == 0
+
+    w_result = eval_(ctx, "(apply list '((+ 2 3) (* 3 4)))")
+    assert w_result.equal(parse_("((+ 2 3) (* 3 4))"))
+    
     py.test.raises(WrongArgsNumber, eval_, ctx, "(apply 1)")
     py.test.raises(WrongArgType, eval_, ctx, "(apply 1 '(1))")
     py.test.raises(WrongArgType, eval_, ctx, "(apply + 42)")


More information about the pypy-commit mailing list