[pypy-commit] lang-scheme default: Implement make-string

boemmels noreply at buildbot.pypy.org
Sat Dec 3 18:22:00 CET 2011


Author: Juergen Boemmels <boemmels at web.de>
Branch: 
Changeset: r25:9ff8fb62dd90
Date: 2011-11-29 23:44 +0100
http://bitbucket.org/pypy/lang-scheme/changeset/9ff8fb62dd90/

Log:	Implement make-string

diff --git a/scheme/procedure.py b/scheme/procedure.py
--- a/scheme/procedure.py
+++ b/scheme/procedure.py
@@ -269,7 +269,27 @@
         # simply relay to map and ignore output
         (res, ctx) = Map().procedure_tr(ctx, lst)
         return (w_undefined, ctx)
-    
+
+class MakeString(W_Procedure):
+    _symbol_name = "make-string"
+
+    def procedure(self, ctx, lst):
+        if len(lst) < 1 or len(lst) > 2:
+            raise WrongArgsNumber
+
+        w_number = lst[0]
+        if not isinstance(w_number, W_Integer):
+            raise WrongArgType(w_number, "Integer")
+        
+        if len(lst) == 2:
+            w_char = lst[1]
+        else:
+            w_char = W_Character(' ')
+        if not isinstance(w_char, W_Character):
+            raise WrongArgType(w_char, "Character")
+
+        return W_String(w_char.to_string() * w_number.to_fixnum())
+
 ##
 # Equivalnece Predicates
 ##
diff --git a/scheme/test/test_scheme_level.py b/scheme/test/test_scheme_level.py
--- a/scheme/test/test_scheme_level.py
+++ b/scheme/test/test_scheme_level.py
@@ -104,4 +104,11 @@
     (#f #f #f #f #f      #f       #f  #f     #f  #t    #f   #f) ; procedure?
     (#f #f #f #f #f      #f       #f  #f     #f  #f    #t   #t)); vector?
 ))
-""")
\ No newline at end of file
+""")
+
+def test_string():
+    run_with_assert(r"""
+(define new-str (make-string 7 #\*))
+(assert (string? new-str))
+(assert (equal? new-str "*******"))
+""")


More information about the pypy-commit mailing list