diff --git a/src/util/sequence.jam b/src/util/sequence.jam index 50ab5c0aa..c3f86965b 100644 --- a/src/util/sequence.jam +++ b/src/util/sequence.jam @@ -59,17 +59,36 @@ rule insertion-sort ( s * : ordered * ) local caller = [ CALLER_MODULE ] ; ordered ?= sequence.less ; local result = $(s[1]) ; - for local x in $(s[2-]) + if $(ordered) = sequence.less { local head tail ; - tail = $(result) ; - while $(tail) && [ modules.call-in $(caller) : $(ordered) $(tail[1]) $(x) ] + for local x in $(s[2-]) { - head += $(tail[1]) ; - tail = $(tail[2-]) ; + head = ; + tail = $(result) ; + while $(tail) && ( $(tail[1]) < $(x) ) + { + head += $(tail[1]) ; + tail = $(tail[2-]) ; + } + result = $(head) $(x) $(tail) ; } - result = $(head) $(x) $(tail) ; } + else + { + for local x in $(s[2-]) + { + local head tail ; + tail = $(result) ; + while $(tail) && [ modules.call-in $(caller) : $(ordered) $(tail[1]) $(x) ] + { + head += $(tail[1]) ; + tail = $(tail[2-]) ; + } + result = $(head) $(x) $(tail) ; + } + } + return $(result) ; }