~ chicken-core (chicken-5) 727b2b3fea271474540f215af4842d32e82e7e6d


commit 727b2b3fea271474540f215af4842d32e82e7e6d
Author:     felix <felix@y.(none)>
AuthorDate: Sun Aug 22 23:22:10 2010 +0200
Commit:     felix <felix@y.(none)>
CommitDate: Sun Aug 22 23:22:10 2010 +0200

    applied zbigniew's record-rename patch (finally), added test-case

diff --git a/chicken-syntax.scm b/chicken-syntax.scm
index 4fc2fcf8..f97c22a1 100644
--- a/chicken-syntax.scm
+++ b/chicken-syntax.scm
@@ -59,8 +59,11 @@
   (lambda (x r c)
     (##sys#check-syntax 'define-record x '(_ symbol . #(symbol 0)))
     (let* ((name (cadr x))
-	   (slots (cddr x))
 	   (prefix (symbol->string name))
+	   (name (if (##sys#current-module)
+		     (##sys#module-rename name (##sys#module-name (##sys#current-module)))
+		     name))
+	   (slots (cddr x))
 	   (setters (memq #:record-setters ##sys#features))
 	   (%define (r 'define))
 	   (%getter-with-setter (r 'getter-with-setter)))
@@ -822,11 +825,21 @@
 	      'define-record-printer (cons head body)
 	      '((symbol symbol symbol) . #(_ 1)))
 	     `(##sys#register-record-printer 
-	       ',(##sys#slot head 0)
+	       ',(if (##sys#current-module)
+		     (##sys#module-rename (##sys#slot head 0)
+					  (##sys#module-name
+					   (##sys#current-module)))
+		     (##sys#slot head 0))
 	       (##core#lambda ,(##sys#slot head 1) ,@body)) ]
-	    [else
+	    (else
 	     (##sys#check-syntax 'define-record-printer (cons head body) '(symbol _))
-	     `(##sys#register-record-printer ',head ,@body) ] ) ))))
+	     `(##sys#register-record-printer
+               ',(if (##sys#current-module)
+                     (##sys#module-rename head
+                                          (##sys#module-name
+                                           (##sys#current-module)))
+                     head)
+               ,@body) ) ) ))))
 
 
 ;;; Exceptions:
@@ -897,7 +910,11 @@
      'define-record-type 
      form
      '(_ variable #(variable 1) variable . _)) 
-    (let* ((t (cadr form))
+    (let* ((t (if (##sys#current-module)
+		     (##sys#module-rename (cadr form)
+					  (##sys#module-name
+					   (##sys#current-module)))
+		     (cadr form)))
 	   (conser (caddr form))
 	   (pred (cadddr form))
 	   (slots (cddddr form))
diff --git a/distribution/manifest b/distribution/manifest
index 6c2ceb82..9d12d6d9 100644
--- a/distribution/manifest
+++ b/distribution/manifest
@@ -100,6 +100,7 @@ tests/compiler-tests-2.scm
 tests/compiler-tests-3.scm
 tests/inlining-tests.scm
 tests/locative-stress-test.scm
+tests/record-rename-test.scm
 tests/r4rstest.scm
 tests/null.scm
 tests/sgrep.scm
diff --git a/tests/record-rename-test.scm b/tests/record-rename-test.scm
new file mode 100644
index 00000000..5a3e2ef6
--- /dev/null
+++ b/tests/record-rename-test.scm
@@ -0,0 +1,33 @@
+;;;; record-rename-test.scm
+
+
+(define-record foo a)
+
+(define-record-type bar
+  (make-bar x)
+  bar?
+  (x get-x))
+
+
+(module m1 (make-foo make-bar)
+(import scheme chicken)
+
+(define-record foo a b)
+
+(define-record-type bar
+  (make-bar x y)
+  bar?
+  (x get-x) (y get-y))
+
+)
+
+
+(let ((f1 (make-foo 1))
+      (f2 (make-bar 2)))
+  (print (list f1 f2)))
+
+(import m1)
+
+(let ((f1 (make-foo 1 2))
+      (f2 (make-bar 3 4)))
+  (print (list f1 f2)))
diff --git a/tests/runtests.sh b/tests/runtests.sh
index e2c2eab6..a17184fc 100644
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -221,6 +221,9 @@ echo "======================================== posix tests ..."
 $compile posix-tests.scm
 ./a.out
 
+echo "======================================== record-renaming tests ..."
+$interpret -bnq record-rename-test.scm
+
 echo "======================================== regular expression tests ..."
 $interpret -bnq test-irregex.scm
 $interpret -bnq test-glob.scm
Trap