1
0
mirror of https://github.com/janet-lang/janet synced 2025-01-13 17:10:27 +00:00

Merge branch 'master' of github.com:janet-lang/janet

This commit is contained in:
Calvin Rose 2021-02-26 17:29:25 -06:00
commit d6ea1989cc

View File

@ -778,24 +778,30 @@
a) a)
(defn sort (defn sort
"Sort an array in-place. Uses quick-sort and is not a stable sort." ``Sort `ind` in-place, and return it. Uses quick-sort and is not a stable sort.
[a &opt before?]
(sort-help a 0 (- (length a) 1) (or before? <))) If a `before?` comparator function is provided, sorts elements using that,
otherwise uses `<`.``
[ind &opt before?]
(sort-help ind 0 (- (length ind) 1) (or before? <)))
(defn sort-by (defn sort-by
``Returns `ind` sorted by calling ``Returns `ind` sorted by calling
a function `f` on each element and comparing the result with <.`` a function `f` on each element and comparing the result with `<`.``
[f ind] [f ind]
(sort ind (fn [x y] (< (f x) (f y))))) (sort ind (fn [x y] (< (f x) (f y)))))
(defn sorted (defn sorted
"Returns a new sorted array without modifying the old one." ``Returns a new sorted array without modifying the old one.
If a `before?` comparator function is provided, sorts elements using that,
otherwise uses `<`.``
[ind &opt before?] [ind &opt before?]
(sort (array/slice ind) before?)) (sort (array/slice ind) before?))
(defn sorted-by (defn sorted-by
``Returns a new sorted array that compares elements by invoking ``Returns a new sorted array that compares elements by invoking
a function `f` on each element and comparing the result with <.`` a function `f` on each element and comparing the result with `<`.``
[f ind] [f ind]
(sorted ind (fn [x y] (< (f x) (f y))))) (sorted ind (fn [x y] (< (f x) (f y)))))
@ -2098,7 +2104,7 @@
:on-parse-error on-parse-error :on-parse-error on-parse-error
:fiber-flags guard :fiber-flags guard
:evaluator evaluator :evaluator evaluator
:source where :source default-where
:parser parser :parser parser
:read read :read read
:expander expand} opts) :expander expand} opts)
@ -2108,9 +2114,11 @@
(default on-compile-error bad-compile) (default on-compile-error bad-compile)
(default on-parse-error bad-parse) (default on-parse-error bad-parse)
(default evaluator (fn evaluate [x &] (x))) (default evaluator (fn evaluate [x &] (x)))
(default where "<anonymous>") (default default-where "<anonymous>")
(default guard :ydt) (default guard :ydt)
(var where default-where)
# Evaluate 1 source form in a protected manner # Evaluate 1 source form in a protected manner
(defn eval1 [source &opt l c] (defn eval1 [source &opt l c]
(def source (if expand (expand source) source)) (def source (if expand (expand source) source))
@ -2163,11 +2171,18 @@
(while parser-not-done (while parser-not-done
(if (env :exit) (break)) (if (env :exit) (break))
(buffer/clear buf) (buffer/clear buf)
(if (= (chunks buf p) :cancel) (match (= (chunks buf p))
:cancel
(do (do
# A :cancel chunk represents a cancelled form in the REPL, so reset. # A :cancel chunk represents a cancelled form in the REPL, so reset.
(:flush p) (:flush p)
(buffer/clear buf)) (buffer/clear buf))
[:source new-where]
(if (string? new-where)
(set where new-where)
(set where default-where))
(do (do
(var pindex 0) (var pindex 0)
(var pstatus nil) (var pstatus nil)