~ chicken-core (chicken-5) 33b0880af191c299ad9851c9ce6db0709f1f16db


commit 33b0880af191c299ad9851c9ce6db0709f1f16db
Author:     Evan Hanson <evhan@foldling.org>
AuthorDate: Mon Jan 18 20:59:55 2016 +1300
Commit:     Evan Hanson <evhan@foldling.org>
CommitDate: Tue Mar 8 22:52:33 2016 +1300

    Move formatting procedures to new chicken.format module

diff --git a/README b/README
index 6a03430e..0e70302d 100644
--- a/README
+++ b/README
@@ -294,6 +294,7 @@
 	|   |       |-- chicken.extras.import.so
 	|   |       |-- chicken.files.import.so
 	|   |       |-- chicken.foreign.import.so
+	|   |       |-- chicken.format.import.so
 	|   |       |-- chicken.lolevel.import.so
 	|   |       |-- chicken.internal.import.so
 	|   |       |-- chicken.irregex.import.so
diff --git a/batch-driver.scm b/batch-driver.scm
index a90601ce..87e34d3f 100644
--- a/batch-driver.scm
+++ b/batch-driver.scm
@@ -44,6 +44,7 @@
 	chicken.data-structures
 	chicken.extras
 	chicken.files
+	chicken.format
 	chicken.compiler.support
 	chicken.compiler.compiler-syntax
 	chicken.compiler.core
diff --git a/c-backend.scm b/c-backend.scm
index 575084cd..4b9d8ffc 100644
--- a/c-backend.scm
+++ b/c-backend.scm
@@ -40,6 +40,7 @@
 (import chicken scheme
 	chicken.bitwise
 	chicken.data-structures
+	chicken.format
 	chicken.compiler.core
 	chicken.compiler.c-platform
 	chicken.compiler.support
diff --git a/c-platform.scm b/c-platform.scm
index 757df6a7..b4463603 100644
--- a/c-platform.scm
+++ b/c-platform.scm
@@ -199,8 +199,8 @@
     chicken.data-structures#substring-ci=?
     chicken.data-structures#any? chicken.data-structures#atom?
     chicken.data-structures#alist-ref chicken.data-structures#rassoc
-    chicken.extras#read-string chicken.extras#format
-    chicken.extras#printf chicken.extras#sprintf chicken.extras#fprintf))
+    chicken.extras#read-string chicken.format#format
+    chicken.format#printf chicken.format#sprintf chicken.format#fprintf))
 
 (set! internal-bindings
   '(##sys#slot ##sys#setslot ##sys#block-ref ##sys#block-set!
diff --git a/chicken-bug.scm b/chicken-bug.scm
index d6c9c86f..142353e6 100644
--- a/chicken-bug.scm
+++ b/chicken-bug.scm
@@ -29,6 +29,7 @@
 (import chicken.data-structures
 	chicken.extras
 	chicken.foreign
+	chicken.format
 	chicken.posix
 	chicken.tcp
 	chicken.utils)
diff --git a/chicken-ffi-syntax.scm b/chicken-ffi-syntax.scm
index 57187535..7317a92c 100644
--- a/chicken-ffi-syntax.scm
+++ b/chicken-ffi-syntax.scm
@@ -40,7 +40,8 @@
   (no-procedure-checks))
 
 (import chicken.data-structures
-	chicken.extras)
+	chicken.extras
+	chicken.format)
 
 (include "mini-srfi-1.scm")
 
diff --git a/chicken-install.scm b/chicken-install.scm
index c25003d2..60430ea1 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -36,6 +36,7 @@
 	  chicken.extras
 	  chicken.files
 	  chicken.foreign
+	  chicken.format
 	  chicken.irregex
 	  chicken.ports
 	  chicken.posix
@@ -52,6 +53,7 @@
       "chicken.extras.import.so"
       "chicken.files.import.so"
       "chicken.foreign.import.so"
+      "chicken.format.import.so"
       "chicken.import.so"
       "chicken.internal.import.so"
       "chicken.irregex.import.so"
diff --git a/chicken-status.scm b/chicken-status.scm
index 9b71d44b..6a243097 100644
--- a/chicken-status.scm
+++ b/chicken-status.scm
@@ -35,6 +35,7 @@
 	  chicken.extras
 	  chicken.files
 	  chicken.foreign
+	  chicken.format
 	  chicken.irregex
 	  chicken.ports
 	  chicken.posix)
diff --git a/chicken-uninstall.scm b/chicken-uninstall.scm
index 7da83e6a..70f59372 100644
--- a/chicken-uninstall.scm
+++ b/chicken-uninstall.scm
@@ -37,6 +37,7 @@
 	  chicken.extras
 	  chicken.files
 	  chicken.foreign
+	  chicken.format
 	  chicken.irregex
 	  chicken.ports
 	  chicken.posix
diff --git a/compiler-syntax.scm b/compiler-syntax.scm
index 6c7e81ef..f9ae4197 100644
--- a/compiler-syntax.scm
+++ b/compiler-syntax.scm
@@ -35,7 +35,7 @@
 	chicken.compiler.support
 	chicken.compiler.core
 	chicken.data-structures
-	chicken.extras)
+	chicken.format)
 
 (include "tweaks.scm")
 (include "mini-srfi-1.scm")
@@ -147,11 +147,11 @@
 	`(,(r 'lambda) (,%tmp) ,(foldr list %tmp (cdr x))))
       x))
 
-(define-internal-compiler-syntax ((chicken.extras#sprintf chicken.extras#format) x r c)
+(define-internal-compiler-syntax ((chicken.format#sprintf chicken.format#format) x r c)
   (display write number->string write-char open-output-string get-output-string)
   (let* ((out (gensym 'out))
 	 (code (compile-format-string
-		(if (eq? (car x) 'chicken.extras#sprintf) 'sprintf 'format)
+		(if (eq? (car x) 'chicken.format#sprintf) 'sprintf 'format)
 		out x (cdr x) r c)))
     (if code
 	`(,(r 'let) ((,out (,(r 'open-output-string))))
@@ -159,14 +159,14 @@
 	  (,(r 'get-output-string) ,out))
 	x)))
 
-(define-internal-compiler-syntax ((chicken.extras#fprintf) x r c)
+(define-internal-compiler-syntax ((chicken.format#fprintf) x r c)
   (display write number->string write-char open-output-string get-output-string)
   (if (>= (length x) 3)
       (let ((code (compile-format-string 'fprintf (cadr x) x (cddr x) r c)))
 	(or code x))
       x))
 
-(define-internal-compiler-syntax ((chicken.extras#printf) x r c)
+(define-internal-compiler-syntax ((chicken.format#printf) x r c)
   (display write number->string write-char open-output-string get-output-string)
   (let ((code (compile-format-string 'printf '##sys#standard-output x (cdr x) r c)))
     (or code x)))
@@ -175,7 +175,7 @@
   (call/cc
    (lambda (return)
      (and (>= (length args) 1)
-	  (memq (symbol-append 'chicken.extras# func) extended-bindings) ; s.a.
+	  (memq (symbol-append 'chicken.format# func) extended-bindings) ; s.a.
 	  (or (string? (car args))
 	      (and (list? (car args))
 		   (c (r 'quote) (caar args))
@@ -247,7 +247,7 @@
 				 ((#\?)
 				  (let* ([fstr (next)]
 					 [lst (next)] )
-				    (push `(##sys#apply chicken.extras#fprintf ,%out ,fstr ,lst))))
+				    (push `(##sys#apply chicken.format#fprintf ,%out ,fstr ,lst))))
 				 ((#\~) (push `(##sys#write-char-0 #\~ ,%out)))
 				 ((#\% #\N) (push `(##sys#write-char-0 #\newline ,%out)))
 				 (else
diff --git a/core.scm b/core.scm
index c45d324d..7a2f7406 100644
--- a/core.scm
+++ b/core.scm
@@ -323,7 +323,8 @@
 	chicken.eval
 	chicken.expand
 	chicken.extras
-	chicken.foreign)
+	chicken.foreign
+	chicken.format)
 
 (define (d arg1 . more)
   (when (##sys#fudge 13)		; debug mode?
diff --git a/csc.scm b/csc.scm
index 4bc5900c..2afa6f44 100644
--- a/csc.scm
+++ b/csc.scm
@@ -33,6 +33,7 @@
 	chicken.data-structures
 	chicken.extras
 	chicken.files
+	chicken.format
 	chicken.utils)
 
 (include "mini-srfi-1.scm")
diff --git a/csi.scm b/csi.scm
index a240fe4c..61e29d0e 100644
--- a/csi.scm
+++ b/csi.scm
@@ -56,6 +56,7 @@ EOF
 
 (import chicken.data-structures
 	chicken.extras
+	chicken.format
 	chicken.ports
 	chicken.repl)
 
diff --git a/defaults.make b/defaults.make
index b9c1e039..9af0e3d0 100644
--- a/defaults.make
+++ b/defaults.make
@@ -264,7 +264,7 @@ CHICKEN_PROGRAM_OPTIONS += $(if $(PROFILE_OBJECTS),-profile)
 
 PRIMITIVE_IMPORT_LIBRARIES = chicken csi chicken.foreign
 DYNAMIC_IMPORT_LIBRARIES = setup-api setup-download srfi-4
-DYNAMIC_CHICKEN_IMPORT_LIBRARIES = bitwise posix random
+DYNAMIC_CHICKEN_IMPORT_LIBRARIES = bitwise format posix random
 DYNAMIC_CHICKEN_UNIT_IMPORT_LIBRARIES = data-structures eval repl expand \
 	continuation extras files internal irregex lolevel ports tcp utils
 
diff --git a/distribution/manifest b/distribution/manifest
index 17100d7a..aaec1a15 100644
--- a/distribution/manifest
+++ b/distribution/manifest
@@ -260,6 +260,8 @@ chicken.files.import.scm
 chicken.files.import.c
 chicken.foreign.import.scm
 chicken.foreign.import.c
+chicken.format.import.scm
+chicken.format.import.c
 chicken.internal.import.scm
 chicken.internal.import.c
 chicken.irregex.import.scm
diff --git a/eval.scm b/eval.scm
index ece92a00..2aa6d040 100644
--- a/eval.scm
+++ b/eval.scm
@@ -82,6 +82,7 @@
     (chicken.extras . extras)
     (chicken.files . files)
     (chicken.foreign . chicken-ffi-syntax)
+    (chicken.format . extras)
     (chicken.internal . internal)
     (chicken.irregex . irregex)
     (chicken.lolevel . lolevel)
diff --git a/expand.scm b/expand.scm
index d4958809..0f67e38f 100644
--- a/expand.scm
+++ b/expand.scm
@@ -1187,7 +1187,7 @@
 	      (##sys#check-syntax 'cond clause '#(_ 1))
 	      (cond (else?
 		     (##sys#warn
-		      (chicken.extras#sprintf "clause following `~S' clause in `cond'" else?)
+		      (chicken.format#sprintf "clause following `~S' clause in `cond'" else?)
 		      (chicken.expand#strip-syntax clause))
 		     (expand rclauses else?)
 		     '(##core#begin))
diff --git a/extras.scm b/extras.scm
index 34e04307..e7f8cb62 100644
--- a/extras.scm
+++ b/extras.scm
@@ -30,9 +30,9 @@
  (uses data-structures))
 
 (module chicken.extras
-  (format fprintf pp pretty-print pretty-print-width printf
+  (pp pretty-print pretty-print-width
    read-buffered read-byte read-file read-line
-   read-lines read-string read-string! read-token sprintf
+   read-lines read-string read-string! read-token
    write-byte write-line write-string)
 
 (import scheme chicken)
@@ -564,9 +564,16 @@
 
 (define pp pretty-print)
 
+) ; module chicken.extras
+
 
 ;;; Write simple formatted output:
 
+(module chicken.format
+  (format fprintf printf sprintf)
+
+(import scheme chicken)
+
 (define fprintf0
   (lambda (loc port msg args)
     (when port (##sys#check-output-port port #t loc))
diff --git a/lfa2.scm b/lfa2.scm
index 9c408c94..1301c199 100644
--- a/lfa2.scm
+++ b/lfa2.scm
@@ -41,7 +41,8 @@
 
 (import chicken scheme
 	chicken.compiler.support
-	chicken.extras)
+	chicken.extras
+	chicken.format)
 
 (include "tweaks")
 (include "mini-srfi-1.scm")
diff --git a/manual/Unit extras b/manual/Unit extras
index ec3e9631..bf63656e 100644
--- a/manual/Unit extras	
+++ b/manual/Unit extras	
@@ -43,6 +43,7 @@ output of reasonable quality.
 
 === Formatted output
 
+These procedures are provided by the {{(chicken format)}} module.
 
 ==== printf
 ==== fprintf
diff --git a/modules.scm b/modules.scm
index 23c5f16a..b0fe4f78 100644
--- a/modules.scm
+++ b/modules.scm
@@ -938,6 +938,7 @@
 (##sys#register-module-alias 'expand 'chicken.expand)
 (##sys#register-module-alias 'files 'chicken.files)
 (##sys#register-module-alias 'foreign 'chicken.foreign)
+(##sys#register-module-alias 'format 'chicken.format)
 (##sys#register-module-alias 'irregex 'chicken.irregex)
 (##sys#register-module-alias 'lolevel 'chicken.lolevel)
 (##sys#register-module-alias 'ports 'chicken.ports)
diff --git a/rules.make b/rules.make
index 6c1938ee..704922c7 100644
--- a/rules.make
+++ b/rules.make
@@ -519,6 +519,7 @@ $(foreach lib, $(filter-out chicken,$(COMPILER_OBJECTS_1)),\
 # special cases for modules not corresponding directly to units
 $(eval $(call declare-emitted-import-lib-dependency,chicken.posix,$(POSIXFILE)))
 $(eval $(call declare-emitted-import-lib-dependency,chicken.bitwise,library))
+$(eval $(call declare-emitted-import-lib-dependency,chicken.format,extras))
 $(eval $(call declare-emitted-import-lib-dependency,chicken.random,extras))
 
 chicken.c: chicken.scm mini-srfi-1.scm \
@@ -536,7 +537,8 @@ batch-driver.c: batch-driver.scm mini-srfi-1.scm \
 		chicken.compiler.lfa2.import.scm \
 		chicken.compiler.c-backend.import.scm \
 		chicken.compiler.support.import.scm \
-		chicken.data-structures.import.scm
+		chicken.data-structures.import.scm \
+		chicken.format.import.scm
 c-platform.c: c-platform.scm mini-srfi-1.scm \
 		chicken.compiler.optimizer.import.scm \
 		chicken.compiler.support.import.scm \
@@ -551,45 +553,52 @@ c-backend.c: c-backend.scm mini-srfi-1.scm \
 		chicken.compiler.core.import.scm \
 		chicken.bitwise.import.scm \
 		chicken.data-structures.import.scm \
-		chicken.extras.import.scm
+		chicken.extras.import.scm \
+		chicken.format.import.scm
 core.c: core.scm mini-srfi-1.scm \
 		chicken.compiler.scrutinizer.import.scm \
 		chicken.compiler.support.import.scm \
 		chicken.data-structures.import.scm \
 		chicken.eval.import.scm \
 		chicken.expand.import.scm \
-		chicken.extras.import.scm
+		chicken.extras.import.scm \
+		chicken.format.import.scm
 optimizer.c: optimizer.scm mini-srfi-1.scm \
 		chicken.compiler.support.import.scm \
 		chicken.data-structures.import.scm \
 		chicken.extras.import.scm \
 		chicken.foreign.import.scm
 scheduler.c: scheduler.scm \
-		chicken.extras.import.scm
+		chicken.extras.import.scm \
+		chicken.format.import.scm
 scrutinizer.c: scrutinizer.scm mini-srfi-1.scm \
 		chicken.compiler.support.import.scm \
 		chicken.data-structures.import.scm \
 		chicken.expand.import.scm \
 		chicken.extras.import.scm \
 		chicken.files.import.scm \
+		chicken.format.import.scm \
 		chicken.ports.import.scm
 lfa2.c: lfa2.scm mini-srfi-1.scm \
 		chicken.compiler.support.import.scm \
-		chicken.extras.import.scm
+		chicken.extras.import.scm \
+		chicken.format.import.scm
 compiler-syntax.c: compiler-syntax.scm mini-srfi-1.scm \
 		chicken.compiler.support.import.scm \
 		chicken.compiler.core.import.scm \
 		chicken.data-structures.import.scm \
-		chicken.extras.import.scm
+		chicken.format.import.scm
 chicken-ffi-syntax.c: chicken-ffi-syntax.scm \
 		chicken.data-structures.import.scm \
-		chicken.extras.import.scm
+		chicken.extras.import.scm \
+		chicken.format.import.scm
 support.c: support.scm mini-srfi-1.scm \
 		chicken.data-structures.import.scm \
 		chicken.expand.import.scm \
 		chicken.extras.import.scm \
 		chicken.files.import.scm \
 		chicken.foreign.import.scm \
+		chicken.format.import.scm \
 		chicken.ports.import.scm \
 		chicken.random.import.scm
 csc.c: csc.scm \
@@ -598,15 +607,18 @@ csc.c: csc.scm \
 		chicken.eval.import.scm \
 		chicken.utils.import.scm \
 		chicken.files.import.scm \
-		chicken.extras.import.scm
+		chicken.format.import.scm \
+		chicken.utils.import.scm
 csi.c: csi.scm \
 		chicken.data-structures.import.scm \
 		chicken.extras.import.scm \
+		chicken.format.import.scm \
 		chicken.ports.import.scm
 chicken-bug.c: chicken-bug.scm \
 		chicken.data-structures.import.scm \
 		chicken.extras.import.scm \
 		chicken.foreign.import.scm \
+		chicken.format.import.scm \
 		chicken.tcp.import.scm \
 		chicken.utils.import.scm
 chicken-profile.c: chicken-profile.scm \
@@ -616,6 +628,7 @@ chicken-status.c: chicken-status.scm \
 		chicken.extras.import.scm \
 		chicken.files.import.scm \
 		chicken.foreign.import.scm \
+		chicken.format.import.scm \
 		chicken.irregex.import.scm \
 		chicken.ports.import.scm \
 		chicken.posix.import.scm \
@@ -625,6 +638,7 @@ chicken-install.c: chicken-install.scm \
 		chicken.extras.import.scm \
 		chicken.files.import.scm \
 		chicken.foreign.import.scm \
+		chicken.format.import.scm \
 		chicken.irregex.import.scm \
 		chicken.ports.import.scm \
 		chicken.posix.import.scm \
@@ -636,6 +650,7 @@ chicken-uninstall.c: chicken-uninstall.scm \
 		chicken.extras.import.scm \
 		chicken.files.import.scm \
 		chicken.foreign.import.scm \
+		chicken.format.import.scm \
 		chicken.irregex.import.scm \
 		chicken.ports.import.scm \
 		chicken.posix.import.scm \
@@ -646,6 +661,7 @@ setup-api.c: setup-api.scm \
 		chicken.extras.import.scm \
 		chicken.files.import.scm \
 		chicken.foreign.import.scm \
+		chicken.format.import.scm \
 		chicken.irregex.import.scm \
 		chicken.ports.import.scm \
 		chicken.posix.import.scm \
@@ -655,6 +671,7 @@ setup-download.c: setup-download.scm \
 		chicken.extras.import.scm \
 		chicken.files.import.scm \
 		chicken.foreign.import.scm \
+		chicken.format.import.scm \
 		chicken.irregex.import.scm \
 		chicken.ports.import.scm \
 		chicken.posix.import.scm \
@@ -704,6 +721,7 @@ utils.c: utils.scm \
 		chicken.extras.import.scm \
 		chicken.files.import.scm \
 		chicken.foreign.import.scm \
+		chicken.format.import.scm \
 		chicken.posix.import.scm \
 		chicken.irregex.import.scm
 
@@ -726,7 +744,10 @@ expand.c: $(SRCDIR)expand.scm $(SRCDIR)synrules.scm $(SRCDIR)common-declarations
 modules.c: $(SRCDIR)modules.scm $(SRCDIR)common-declarations.scm $(SRCDIR)mini-srfi-1.scm
 	$(bootstrap-lib)
 extras.c: $(SRCDIR)extras.scm $(SRCDIR)common-declarations.scm
-	$(bootstrap-lib) -emit-import-library chicken.extras -emit-import-library chicken.random
+	$(bootstrap-lib) \
+	-emit-import-library chicken.extras \
+	-emit-import-library chicken.format \
+	-emit-import-library chicken.random
 posixunix.c: $(SRCDIR)posixunix.scm $(SRCDIR)posix-common.scm $(SRCDIR)common-declarations.scm
 	$(bootstrap-lib) -emit-import-library chicken.posix
 posixwin.c: $(SRCDIR)posixwin.scm $(SRCDIR)posix-common.scm $(SRCDIR)common-declarations.scm
diff --git a/scheduler.scm b/scheduler.scm
index 1245182e..43a6525d 100644
--- a/scheduler.scm
+++ b/scheduler.scm
@@ -133,7 +133,8 @@ C_inline void C_fdset_add(int fd, int input, int output) {
 EOF
 ) )
 
-(import chicken.extras)
+(import chicken.extras
+	chicken.format)
 
 (include "common-declarations.scm")
 
diff --git a/scrutinizer.scm b/scrutinizer.scm
index 6589ed5c..aa4d1dce 100644
--- a/scrutinizer.scm
+++ b/scrutinizer.scm
@@ -37,6 +37,7 @@
 	chicken.data-structures
 	chicken.expand
 	chicken.extras
+	chicken.format
 	chicken.files
 	chicken.ports)
 
diff --git a/setup-api.scm b/setup-api.scm
index b7704168..7250db59 100644
--- a/setup-api.scm
+++ b/setup-api.scm
@@ -70,6 +70,7 @@
 	  chicken.extras
 	  chicken.files
 	  chicken.foreign
+	  chicken.format
 	  chicken.ports
 	  chicken.posix
 	  chicken.irregex
diff --git a/setup-download.scm b/setup-download.scm
index 73e751c0..21836e55 100644
--- a/setup-download.scm
+++ b/setup-download.scm
@@ -42,6 +42,7 @@
 	  chicken.extras
 	  chicken.files
 	  chicken.foreign
+	  chicken.format
 	  chicken.irregex
 	  chicken.posix
 	  chicken.tcp
diff --git a/support.scm b/support.scm
index 0ea66202..2b57ec97 100644
--- a/support.scm
+++ b/support.scm
@@ -81,6 +81,7 @@
 	chicken.extras
 	chicken.files
 	chicken.foreign
+	chicken.format
 	chicken.ports
 	chicken.random)
 
diff --git a/tests/apply-test.scm b/tests/apply-test.scm
index 3ec491c5..1ada5814 100644
--- a/tests/apply-test.scm
+++ b/tests/apply-test.scm
@@ -1,4 +1,4 @@
-(require-extension extras)
+(require-extension format)
 
 (define (list-tabulate n proc)
   (let loop ((i 0))
diff --git a/tests/environment-tests.scm b/tests/environment-tests.scm
index 0f1444c9..49f53aec 100644
--- a/tests/environment-tests.scm
+++ b/tests/environment-tests.scm
@@ -41,13 +41,13 @@
 
 (define foo-env (module-environment 'foo))
 (define csi-env (module-environment 'csi))
-(define extras-env (module-environment 'extras))
+(define format-env (module-environment 'format))
 
 (test-equal (eval '(bar) foo-env) 99)
 (test-error (eval 'baz foo-env))
 (test-equal (eval '(editor-command) csi-env) #f)
 (test-error (eval 'baz csi-env))
-(test-equal (eval '(format "~a" 1) extras-env) "1")
-(test-error (eval 'baz extras-env))
+(test-equal (eval '(format "~a" 1) format-env) "1")
+(test-error (eval 'baz format-env))
 
 (test-end)
diff --git a/tests/loopy-test.scm b/tests/loopy-test.scm
index 003d8103..81e49b0f 100644
--- a/tests/loopy-test.scm
+++ b/tests/loopy-test.scm
@@ -1,4 +1,4 @@
-(use (only extras printf))
+(use (only format printf))
 
 (load-relative "loopy-loop.scm")
 (load-relative "matchable.scm")
diff --git a/tests/numbers-string-conversion-tests.scm b/tests/numbers-string-conversion-tests.scm
index 5d38c239..3c647710 100644
--- a/tests/numbers-string-conversion-tests.scm
+++ b/tests/numbers-string-conversion-tests.scm
@@ -21,7 +21,7 @@
 ;; (load "~~/lib/syntax-case") and then load this file, or use gsi's -:s switch
 ;;;
 
-(use extras)			 ; Chicken w/ numbers
+(use format)			 ; Chicken w/ numbers
 ;(use-syntax (ice-9 syncase)) ; Guile
 
 ;; Set this to #f if the Scheme has no compnums at all, 'inexact if it only
diff --git a/tests/numbers-test.scm b/tests/numbers-test.scm
index 527f809e..7631fb34 100644
--- a/tests/numbers-test.scm
+++ b/tests/numbers-test.scm
@@ -1,7 +1,7 @@
 ;;;; numbers-test.scm
 
 (include "test.scm")
-(use bitwise extras posix)
+(use bitwise extras format posix)
 
 ;; The default "comparator" doesn't know how to deal with extended number types
 (current-test-comparator
diff --git a/tests/port-tests.scm b/tests/port-tests.scm
index 1c548e14..8240c148 100644
--- a/tests/port-tests.scm
+++ b/tests/port-tests.scm
@@ -1,4 +1,4 @@
-(require-extension data-structures extras files ports posix srfi-4 tcp utils)
+(require-extension data-structures extras format files ports posix srfi-4 tcp utils)
 
 (include "test.scm")
 (test-begin)
diff --git a/tests/runtests.sh b/tests/runtests.sh
index fab020b2..3be7a36a 100755
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -45,6 +45,7 @@ for x in \
     chicken.extras.import.so \
     chicken.files.import.so \
     chicken.foreign.import.so \
+    chicken.format.import.so \
     chicken.internal.import.so \
     chicken.irregex.import.so \
     chicken.lolevel.import.so \
diff --git a/tests/srfi-45-tests.scm b/tests/srfi-45-tests.scm
index 9ca20623..ae14af7c 100644
--- a/tests/srfi-45-tests.scm
+++ b/tests/srfi-45-tests.scm
@@ -1,7 +1,7 @@
 ;;; Tests adapted from SRFI 45 (for "lazy" -> "delay-force").
 ;;; That SRFI Copyright (C) André van Tonder (2003).
 
-(use (only extras printf)
+(use (only format printf)
      (only ports with-output-to-string))
 
 (define *errors* 0)
diff --git a/tests/test-irregex.scm b/tests/test-irregex.scm
index 5496ed75..a516ebb7 100644
--- a/tests/test-irregex.scm
+++ b/tests/test-irregex.scm
@@ -1,7 +1,7 @@
 ;;;: test-irregex.scm
 
 
-(use data-structures extras irregex ports)
+(use data-structures extras format irregex ports)
 
 (include "test.scm")
 
diff --git a/types.db b/types.db
index b751058e..4ab602a5 100644
--- a/types.db
+++ b/types.db
@@ -1519,12 +1519,9 @@
 
 ;; extras
 
-(chicken.extras#format (procedure chicken.extras#format (#!rest) *))
-(chicken.extras#fprintf (#(procedure #:enforce) chicken.extras#fprintf (output-port string #!rest) undefined))
 (chicken.extras#pp (#(procedure #:enforce) chicken.extras#pp (* #!optional output-port) undefined))
 (chicken.extras#pretty-print (#(procedure #:enforce) chicken.extras#pretty-print (* #!optional output-port) undefined))
 (chicken.extras#pretty-print-width (#(procedure #:clean) chicken.extras#pretty-print-width (#!optional fixnum) *))
-(chicken.extras#printf (#(procedure #:enforce) chicken.extras#printf (string #!rest) undefined))
 (chicken.extras#read-buffered (#(procedure #:enforce) chicken.extras#read-buffered (#!optional input-port) string))
 (chicken.extras#read-byte (#(procedure #:enforce) chicken.extras#read-byte (#!optional input-port) *))
 (chicken.extras#read-file (#(procedure #:enforce) chicken.extras#read-file (#!optional (or input-port string) (procedure (input-port) *) fixnum) list))
@@ -1533,11 +1530,15 @@
 (chicken.extras#read-string (#(procedure #:enforce) chicken.extras#read-string (#!optional (or fixnum false) input-port) string))
 (chicken.extras#read-string! (#(procedure #:enforce) chicken.extras#read-string! ((or fixnum false) string #!optional input-port fixnum) fixnum))
 (chicken.extras#read-token (#(procedure #:enforce) chicken.extras#read-token ((procedure (char) *) #!optional input-port) string))
-(chicken.extras#sprintf (#(procedure #:enforce #:foldable) chicken.extras#sprintf (string #!rest) string))
 (chicken.extras#write-byte (#(procedure #:enforce) chicken.extras#write-byte (fixnum #!optional output-port) undefined))
 (chicken.extras#write-line (#(procedure #:enforce) chicken.extras#write-line (string #!optional output-port) undefined))
 (chicken.extras#write-string (#(procedure #:enforce) chicken.extras#write-string (string #!optional * output-port) undefined))
 
+(chicken.format#format (procedure chicken.format#format (#!rest) *))
+(chicken.format#fprintf (#(procedure #:enforce) chicken.format#fprintf (output-port string #!rest) undefined))
+(chicken.format#printf (#(procedure #:enforce) chicken.format#printf (string #!rest) undefined))
+(chicken.format#sprintf (#(procedure #:enforce #:foldable) chicken.format#sprintf (string #!rest) string))
+
 ;; random
 
 (chicken.random#random (#(procedure #:clean #:enforce) chicken.random#random (fixnum) fixnum))
diff --git a/utils.scm b/utils.scm
index 985296a3..8c015cab 100644
--- a/utils.scm
+++ b/utils.scm
@@ -44,6 +44,7 @@
 	chicken.extras
 	chicken.files
 	chicken.foreign
+	chicken.format
 	chicken.posix
 	chicken.irregex)
 
Trap