~ chicken-core (chicken-5) 1366ee852ddc20ee611f5f83c5aaee769df890d4
commit 1366ee852ddc20ee611f5f83c5aaee769df890d4
Author: Peter Bex <peter@more-magic.net>
AuthorDate: Sun Aug 13 14:42:46 2017 +0200
Commit: Kooda <kooda@upyum.com>
CommitDate: Sun Aug 20 05:26:32 2017 +0200
Move sorting procedures from chicken.data-structures to chicken.sort
This also wraps the chicken-bug and chicken-profile programs in a
"main" module. This helped find a bug in chicken-profile: we forgot
to import chicken.file in chicken-profile when we moved "glob" into
that module.
We also forgot to export merge!, the side-effect version of merge from
data-structures. The new chicken.sort module does export this
procedure.
Signed-off-by: Kooda <kooda@upyum.com>
diff --git a/README b/README
index 75f51e0a..288f6e64 100644
--- a/README
+++ b/README
@@ -319,6 +319,7 @@ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/
| | |-- chicken.process-context.import.so
| | |-- chicken.random.import.so
| | |-- chicken.repl.import.so
+ | | |-- chicken.sort.import.so
| | |-- chicken.read-syntax.import.so
| | |-- chicken.syntax.import.so
| | |-- chicken.tcp.import.so
diff --git a/c-backend.scm b/c-backend.scm
index 6be88abe..1fe60dd3 100644
--- a/c-backend.scm
+++ b/c-backend.scm
@@ -41,6 +41,7 @@
chicken.foreign
chicken.format
chicken.internal
+ chicken.sort
chicken.time
chicken.compiler.core
chicken.compiler.c-platform
diff --git a/chicken-bug.scm b/chicken-bug.scm
index e0977546..7b5b04ff 100644
--- a/chicken-bug.scm
+++ b/chicken-bug.scm
@@ -25,7 +25,11 @@
(declare (block))
-(import chicken.data-structures
+(module main ()
+
+(import chicken scheme)
+
+(import (only chicken.data-structures chop string-intersperse)
chicken.foreign
chicken.format
chicken.io
@@ -34,6 +38,7 @@
chicken.port
chicken.posix
chicken.platform
+ chicken.sort
chicken.time)
(define-constant +bug-report-file+ "chicken-bug-report.~a-~a-~a")
@@ -164,3 +169,5 @@ EOF
(print "\nA bug report has been written to `" fname "'."))
(main (command-line-arguments))
+
+)
diff --git a/chicken-install.scm b/chicken-install.scm
index ad8bbfa6..5ca3947e 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -29,8 +29,8 @@
(import (scheme))
(import (chicken))
(import (chicken condition))
-(import (chicken foreign))
(import (chicken data-structures))
+(import (chicken foreign))
(import (chicken keyword))
(import (chicken file))
(import (chicken format))
@@ -39,6 +39,7 @@
(import (chicken posix))
(import (chicken port))
(import (chicken io))
+(import (chicken sort))
(import (chicken time))
(import (chicken pathname))
(import (chicken process))
diff --git a/chicken-profile.scm b/chicken-profile.scm
index 78582a84..b676f474 100644
--- a/chicken-profile.scm
+++ b/chicken-profile.scm
@@ -26,9 +26,14 @@
(declare (block))
-(import chicken.data-structures
+(module main ()
+
+(import chicken scheme)
+(import (only chicken.data-structures string-intersperse)
+ chicken.file
chicken.internal
- chicken.posix)
+ chicken.posix
+ chicken.sort)
(include "mini-srfi-1.scm")
@@ -251,3 +256,5 @@ EOF
(for-each print-row data))))
(run (command-line-arguments))
+
+)
diff --git a/chicken-status.scm b/chicken-status.scm
index a51e18d5..5f4bbb2d 100644
--- a/chicken-status.scm
+++ b/chicken-status.scm
@@ -27,7 +27,7 @@
(import (scheme))
(import (chicken))
- (import (chicken data-structures)
+ (import (only (chicken data-structures) ->string)
(chicken file)
(chicken foreign)
(chicken format)
@@ -35,7 +35,8 @@
(chicken port)
(chicken posix)
(chicken pathname)
- (chicken pretty-print))
+ (chicken pretty-print)
+ (chicken sort))
(include "mini-srfi-1.scm")
(include "egg-environment.scm")
diff --git a/csi.scm b/csi.scm
index 55f8ec3f..cab891ae 100644
--- a/csi.scm
+++ b/csi.scm
@@ -58,6 +58,7 @@ EOF
chicken.port
chicken.pretty-print
chicken.repl
+ chicken.sort
chicken.syntax)
(include "banner.scm")
diff --git a/data-structures.scm b/data-structures.scm
index bf9821b1..a0415010 100644
--- a/data-structures.scm
+++ b/data-structures.scm
@@ -31,7 +31,6 @@
(module chicken.data-structures
(alist-ref alist-update alist-update! atom? butlast
chop compress flatten intersperse join rassoc tail?
- merge sort sort! sorted? topological-sort
conc ->string string-chop string-chomp
string-compare3 string-compare3-ci
reverse-string-append
@@ -587,6 +586,15 @@
(##sys#substring str 0 diff)
str) ) )
+) ; chicken.data-structures
+
+
+(module chicken.sort
+ (merge merge! sort sort! sorted? topological-sort)
+
+(import chicken scheme)
+(import (only (chicken data-structures)
+ alist-ref alist-update!))
;;; Defines: sorted?, merge, merge!, sort, sort!
@@ -783,5 +791,5 @@
(cdar dag)
'()
state)))))
+) ; chicken.sort
-)
diff --git a/defaults.make b/defaults.make
index 8b072088..9bebd8b6 100644
--- a/defaults.make
+++ b/defaults.make
@@ -268,7 +268,7 @@ DYNAMIC_IMPORT_LIBRARIES = srfi-4
DYNAMIC_CHICKEN_IMPORT_LIBRARIES = bitwise blob errno file.posix \
fixnum flonum format gc io keyword load locative memory \
platform plist posix pretty-print process process.signal \
- process-context random syntax time time.posix
+ process-context random syntax sort time time.posix
DYNAMIC_CHICKEN_COMPILER_IMPORT_LIBRARIES = user-pass
DYNAMIC_CHICKEN_UNIT_IMPORT_LIBRARIES = continuation data-structures \
eval file internal irregex lolevel pathname port \
diff --git a/distribution/manifest b/distribution/manifest
index 56ceddb4..1e6a4468 100644
--- a/distribution/manifest
+++ b/distribution/manifest
@@ -336,6 +336,8 @@ chicken.read-syntax.import.scm
chicken.read-syntax.import.c
chicken.repl.import.scm
chicken.repl.import.c
+chicken.sort.import.scm
+chicken.sort.import.c
chicken.syntax.import.scm
chicken.syntax.import.c
chicken.tcp.import.scm
diff --git a/optimizer.scm b/optimizer.scm
index 99703051..8d48b3d1 100644
--- a/optimizer.scm
+++ b/optimizer.scm
@@ -36,9 +36,10 @@
default-optimization-passes rewrite)
(import chicken scheme
- chicken.data-structures
chicken.compiler.support
- chicken.internal)
+ chicken.data-structures
+ chicken.internal
+ chicken.sort)
(include "tweaks")
(include "mini-srfi-1.scm")
diff --git a/rules.make b/rules.make
index a4faa94b..945f31ab 100644
--- a/rules.make
+++ b/rules.make
@@ -522,6 +522,7 @@ $(eval $(call declare-emitted-import-lib-dependency,chicken.random,extras))
$(eval $(call declare-emitted-import-lib-dependency,chicken.locative,lolevel))
$(eval $(call declare-emitted-import-lib-dependency,chicken.memory,lolevel))
$(eval $(call declare-emitted-import-lib-dependency,chicken.syntax,expand))
+$(eval $(call declare-emitted-import-lib-dependency,chicken.sort,data-structures))
chicken.c: chicken.scm mini-srfi-1.scm \
chicken.compiler.batch-driver.import.scm \
@@ -563,6 +564,7 @@ c-backend.c: c-backend.scm mini-srfi-1.scm \
chicken.foreign.import.scm \
chicken.format.import.scm \
chicken.internal.import.scm \
+ chicken.sort.import.scm \
chicken.time.import.scm
core.c: core.scm mini-srfi-1.scm \
chicken.compiler.scrutinizer.import.scm \
@@ -578,7 +580,8 @@ core.c: core.scm mini-srfi-1.scm \
optimizer.c: optimizer.scm mini-srfi-1.scm \
chicken.compiler.support.import.scm \
chicken.data-structures.import.scm \
- chicken.internal.import.scm
+ chicken.internal.import.scm \
+ chicken.sort.import.scm
scheduler.c: scheduler.scm \
chicken.format.import.scm
scrutinizer.c: scrutinizer.scm mini-srfi-1.scm \
@@ -620,6 +623,7 @@ support.c: support.scm mini-srfi-1.scm \
chicken.port.import.scm \
chicken.pretty-print.import.scm \
chicken.random.import.scm \
+ chicken.sort.import.scm \
chicken.syntax.import.scm \
chicken.time.import.scm
modules.c: modules.scm \
@@ -647,6 +651,7 @@ csi.c: csi.scm \
chicken.port.import.scm \
chicken.pretty-print.import.scm \
chicken.repl.import.scm \
+ chicken.sort.import.scm \
chicken.syntax.import.scm
chicken-bug.c: chicken-bug.scm \
chicken.foreign.import.scm \
@@ -661,7 +666,8 @@ chicken-bug.c: chicken-bug.scm \
chicken-profile.c: chicken-profile.scm \
chicken.data-structures.import.scm \
chicken.internal.import.scm \
- chicken.posix.import.scm
+ chicken.posix.import.scm \
+ chicken.sort.import.scm
chicken-status.c: chicken-status.scm \
chicken.data-structures.import.scm \
chicken.file.import.scm \
@@ -671,7 +677,8 @@ chicken-status.c: chicken-status.scm \
chicken.pathname.import.scm \
chicken.port.import.scm \
chicken.posix.import.scm \
- chicken.pretty-print.import.scm
+ chicken.pretty-print.import.scm \
+ chicken.sort.import.scm
chicken-install.c: chicken-install.scm \
chicken.condition.import.scm \
chicken.data-structures.import.scm \
@@ -684,6 +691,7 @@ chicken-install.c: chicken-install.scm \
chicken.port.import.scm \
chicken.posix.import.scm \
chicken.pretty-print.import.scm \
+ chicken.sort.import.scm \
chicken.tcp.import.scm
chicken-uninstall.c: chicken-uninstall.scm \
chicken.data-structures.import.scm \
@@ -833,7 +841,9 @@ chicken-ffi-syntax.c: $(SRCDIR)chicken-ffi-syntax.scm $(SRCDIR)common-declaratio
continuation.c: $(SRCDIR)continuation.scm $(SRCDIR)common-declarations.scm
$(bootstrap-lib) -emit-import-library chicken.continuation
data-structures.c: $(SRCDIR)data-structures.scm $(SRCDIR)common-declarations.scm
- $(bootstrap-lib) -emit-import-library chicken.data-structures
+ $(bootstrap-lib) \
+ -emit-import-library chicken.data-structures \
+ -emit-import-library chicken.sort
pathname.c: $(SRCDIR)pathname.scm $(SRCDIR)common-declarations.scm
$(bootstrap-lib) -emit-import-library chicken.pathname
port.c: $(SRCDIR)port.scm $(SRCDIR)common-declarations.scm
diff --git a/support.scm b/support.scm
index 158cae2f..78ce2940 100644
--- a/support.scm
+++ b/support.scm
@@ -92,6 +92,7 @@
chicken.port
chicken.pretty-print
chicken.random
+ chicken.sort
chicken.syntax
chicken.time)
diff --git a/tests/data-structures-tests.scm b/tests/data-structures-tests.scm
index 9db1cddf..3f8db863 100644
--- a/tests/data-structures-tests.scm
+++ b/tests/data-structures-tests.scm
@@ -1,6 +1,7 @@
;;;; data-structures-tests.scm
-(use data-structures)
+(import (chicken data-structures)
+ (chicken sort))
(define-syntax assert-error
(syntax-rules ()
diff --git a/tests/test-find-files.scm b/tests/test-find-files.scm
index 30405fde..723e4720 100644
--- a/tests/test-find-files.scm
+++ b/tests/test-find-files.scm
@@ -1,4 +1,7 @@
-(use (chicken file) (chicken process-context) data-structures)
+(use (chicken file)
+ (chicken process-context)
+ (chicken sort))
+
(include "test.scm")
(handle-exceptions exn
diff --git a/types.db b/types.db
index 0f5a5811..b59408fd 100644
--- a/types.db
+++ b/types.db
@@ -1486,14 +1486,6 @@
(chicken.data-structures#join (#(procedure #:clean #:enforce) chicken.data-structures#join ((list-of list) #!optional list) list))
(chicken.data-structures#list-of? (#(procedure #:clean #:enforce) chicken.data-structures#list-of? ((procedure (*) *)) (procedure (list) boolean)))
-(chicken.data-structures#merge
- (forall (e)
- (#(procedure #:enforce) chicken.data-structures#merge ((list-of e) (list-of e) (procedure (e e) *)) (list-of e))))
-
-(chicken.data-structures#merge!
- (forall (e)
- (#(procedure #:enforce) chicken.data-structures#merge! ((list-of e) (list-of e) (procedure (e e) *)) (list-of e))))
-
(chicken.data-structures#o (#(procedure #:clean #:enforce) chicken.data-structures#o (#!rest (procedure (*) *)) (procedure (*) *)))
(chicken.data-structures#rassoc
@@ -1502,22 +1494,6 @@
(or false (pair b c)))))
(chicken.data-structures#reverse-string-append (#(procedure #:clean #:enforce) chicken.data-structures#reverse-string-append ((list-of string)) string))
-(chicken.data-structures#sort
- (forall (e (s (or (vector-of e) (list-of e))))
- (#(procedure #:enforce)
- chicken.data-structures#sort
- (s (procedure (e e) *))
- s)))
-
-(chicken.data-structures#sort!
- (forall (e (s (or (vector-of e) (list-of e))))
- (#(procedure #:enforce)
- chicken.data-structures#sort!
- (s (procedure (e e) *))
- s)))
-
-(chicken.data-structures#sorted? (#(procedure #:enforce) chicken.data-structures#sorted? ((or list vector) (procedure (* *) *)) boolean))
-(chicken.data-structures#topological-sort (#(procedure #:enforce) chicken.data-structures#topological-sort ((list-of list) (procedure (* *) *)) list))
(chicken.data-structures#string-chomp (#(procedure #:clean #:enforce) chicken.data-structures#string-chomp (string #!optional string) string))
(chicken.data-structures#string-chop (#(procedure #:clean #:enforce) chicken.data-structures#string-chop (string fixnum) (list-of string)))
(chicken.data-structures#string-compare3 (#(procedure #:clean #:enforce) chicken.data-structures#string-compare3 (string string) fixnum))
@@ -2105,6 +2081,34 @@
(chicken.process#system* (#(procedure #:clean #:enforce) chicken.process#system* (string #!rest) undefined))
(chicken.process#qs (#(procedure #:clean #:enforce) chicken.process#qs (string) string))
+;; sort
+
+(chicken.sort#merge
+ (forall (e)
+ (#(procedure #:enforce) chicken.sort#merge ((list-of e) (list-of e) (procedure (e e) *)) (list-of e))))
+
+(chicken.sort#merge!
+ (forall (e)
+ (#(procedure #:enforce) chicken.sort#merge! ((list-of e) (list-of e) (procedure (e e) *)) (list-of e))))
+
+(chicken.sort#sort
+ (forall (e (s (or (vector-of e) (list-of e))))
+ (#(procedure #:enforce)
+ chicken.sort#sort
+ (s (procedure (e e) *))
+ s)))
+
+(chicken.sort#sort!
+ (forall (e (s (or (vector-of e) (list-of e))))
+ (#(procedure #:enforce)
+ chicken.sort#sort!
+ (s (procedure (e e) *))
+ s)))
+
+(chicken.sort#sorted? (#(procedure #:enforce) chicken.sort#sorted? ((or list vector) (procedure (* *) *)) boolean))
+(chicken.sort#topological-sort (#(procedure #:enforce) chicken.sort#topological-sort ((list-of list) (procedure (* *) *)) list))
+
+
;; srfi-4
(srfi-4#blob->f32vector (#(procedure #:clean #:enforce) srfi-4#blob->f32vector (blob) (struct f32vector)))
Trap