Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | added print-stack-trace and read-string to thunder-utils.sls |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
0e61d1648b52ed5bb6c9f7143393075a |
| User & Date: | aldo 2017-01-11 17:46:07.996 |
| Original Comment: | added print-stack-trace |
Context
|
2017-01-11
| ||
| 17:49 | small fix to print-stack-trace check-in: 927509fadb user: aldo tags: trunk | |
| 17:46 | added print-stack-trace and read-string to thunder-utils.sls check-in: 0e61d1648b user: aldo tags: trunk | |
| 16:37 | added srfi 113 sets&bags, srfi 128 comparators check-in: 07be5132aa user: aldo tags: trunk | |
Changes
Changes to thunder-utils.sls.
| ︙ | ︙ | |||
10 11 12 13 14 15 16 | ;; Unless required by applicable law or agreed to in writing, software ;; distributed under the License is distributed on an "AS IS" BASIS, ;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ;; See the License for the specific language governing permissions and ;; limitations under the License. (library (thunder-utils) | | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
;; Unless required by applicable law or agreed to in writing, software
;; distributed under the License is distributed on an "AS IS" BASIS,
;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
;; See the License for the specific language governing permissions and
;; limitations under the License.
(library (thunder-utils)
(export string-split string-replace bytevector-copy* read-string
print-stack-trace)
(import (scheme) (srfi s14 char-sets))
;; POSSIBLE THAT NOT EXISTS THIS FUNCTION???
;; s is a string , c is a character-set
;; null strings are discarded from result by default unless #f is specified as third argument
(define string-split
(case-lambda
[(s c)
(string-split s c #t)]
[(s c discard-null?)
(define res '())
(let loop ([l (string->list s)] [t '()])
(if (null? l)
(if (and (null? t) discard-null?)
res (append res (list (list->string t))))
(if (char-set-contains? c (car l))
(begin
(unless (and (null? t) discard-null?)
(set! res (append res (list (list->string t)))))
(loop (cdr l) '()))
(loop (cdr l) (append t (list (car l)))))))]))
;; POSSIBLE THAT THIS NOT EXIST?
;; if x is a character: (eqv? s[i] x) => s[i] = y
;; if x is a list: (memq s[i] x) => s[i] = y
(define (string-replace s x y)
(list->string
(let ([cmp (if (list? x) memq eqv?)])
(map (lambda (z) (if (cmp z x) y z)) (string->list s)))))
;; WHY THERE NOT EXISTS BYTEVECTOR-COPY WITH src-start and n? F*** YOU
(define bytevector-copy*
(case-lambda
[(bv) (bytevector-copy bv)]
[(bv start)
(bytevector-copy* start (- (bytevector-length bv) start))]
[(bv start n)
(let ([dst (make-bytevector n)])
(bytevector-copy! bv start dst 0 n) dst)]))
(define read-string
(case-lambda
[() (read-string #f)]
[(n) (read-string n (current-input-port))]
[(n port)
(if n
(get-string-n port n)
(get-string-all port))]))
(define (print-stack-trace depth)
(printf "stack-trace:\n")
(call/cc
(lambda (k)
(let loop ((cur (inspect/object k))
(i 0))
(if (and (< i depth)
(> (cur 'depth) 1))
(let* ([name (cond [((cur 'code) 'name) => (lambda (x) x)]
[else "*"])]
[source ((cur 'code) 'source)]
[source-txt (if source
(let ([ss (with-output-to-string
(lambda ()
(source 'write (current-output-port))))])
(if (> (string-length ss) 50)
(string-truncate! ss 50)
ss))
"*")])
(call-with-values
(lambda () (cur 'source-path))
(case-lambda
[() (printf "[no source] [~a]: ~a\n" name source-txt)]
[(fn bfp) (printf "~a char ~a [~a]: ~a\n" fn bfp name source-txt)]
[(fn line char) (printf "~a:~a:~a [~a]: ~a\n" fn line char name source-txt)]))
(loop (cur 'link) (+ i 1)))))))
(printf "stack-trace end.\n"))
);library
|