Browse code
chore: various minor changes, perf improvements
Ed Langley authored on 29/10/2020 21:46:49
Showing 2 changed files
Showing 2 changed files
... | ... |
@@ -11,7 +11,7 @@ |
11 | 11 |
#:smug |
12 | 12 |
:local-time |
13 | 13 |
:uuid |
14 |
- :fwoar.lisputils) |
|
14 |
+ :fwoar-lisputils) |
|
15 | 15 |
:in-order-to ((test-op (test-op :cl-edn/test))) |
16 | 16 |
:components ((:file "package") |
17 | 17 |
(:file "edn" :depends-on ("package" "synthesize")) |
... | ... |
@@ -21,14 +21,14 @@ |
21 | 21 |
(defsystem :cl-edn/fset |
22 | 22 |
:depends-on (#:cl-edn |
23 | 23 |
#:fset |
24 |
- #:fwoar.lisputils) |
|
24 |
+ #:fwoar-lisputils) |
|
25 | 25 |
:components ((:file "fset-synthesize"))) |
26 | 26 |
|
27 | 27 |
(defsystem :cl-edn/fset-lossy |
28 | 28 |
:depends-on (#:cl-edn |
29 | 29 |
#:cl-edn/fset |
30 | 30 |
#:fset |
31 |
- #:fwoar.lisputils) |
|
31 |
+ #:fwoar-lisputils) |
|
32 | 32 |
:components ((:file "fset-lossy-synthesize"))) |
33 | 33 |
|
34 | 34 |
(defsystem :cl-edn/test |
... | ... |
@@ -100,28 +100,34 @@ |
100 | 100 |
(.or (.nil) |
101 | 101 |
(.boolean))) |
102 | 102 |
|
103 |
+(defun .try (pred next) |
|
104 |
+ (lambda (input) |
|
105 |
+ (when (funcall pred input) |
|
106 |
+ (funcall next input)))) |
|
107 |
+ |
|
103 | 108 |
(defun .collections () |
104 |
- (.alt (.tag :map (.map-element)) |
|
105 |
- (.collection :set (.string= "#{") (.char= #\})) |
|
106 |
- (.collection :vector (.char= #\[) (.char= #\])) |
|
107 |
- (.collection :list (.char= #\() (.char= #\))))) |
|
109 |
+ (.or (.tag :map (.map-element)) |
|
110 |
+ (.collection :vector (.char= #\[) (.char= #\])) |
|
111 |
+ (.collection :list (.char= #\() (.char= #\))) |
|
112 |
+ (.collection :set (.string= "#{") (.char= #\})))) |
|
108 | 113 |
|
109 | 114 |
(defun .atoms () |
110 |
- (.alt (.number) |
|
111 |
- (.symbol) |
|
112 |
- (.keyword) |
|
113 |
- (.character) |
|
114 |
- (.string))) |
|
115 |
+ (.or (.number) |
|
116 |
+ (.symbol))) |
|
115 | 117 |
|
116 | 118 |
(defun .element () |
117 | 119 |
(.or (.primitive) |
118 |
- (.alt (.atoms) |
|
119 |
- (.collections) |
|
120 |
- |
|
121 |
- (.tag :tagged |
|
122 |
- (.let* ((tag (.progn (.char= #\#) (.tag-symbol))) |
|
123 |
- (element (.progn (.s) (.element)))) |
|
124 |
- (.identity (list tag element))))))) |
|
120 |
+ (.atoms) |
|
121 |
+ (.or (.try (.one-of '(#\" #\: #\\)) |
|
122 |
+ (.or (.string) |
|
123 |
+ (.keyword) |
|
124 |
+ (.character))) |
|
125 |
+ (.try (.one-of '(#\{ #\[ #\( #\#)) |
|
126 |
+ (.or (.collections) |
|
127 |
+ (.tag :tagged |
|
128 |
+ (.let* ((tag (.progn (.char= #\#) (.tag-symbol))) |
|
129 |
+ (element (.progn (.s) (.element)))) |
|
130 |
+ (.identity (list tag element))))))))) |
|
125 | 131 |
|
126 | 132 |
(defun .nil () |
127 | 133 |
(.and (.string= "nil") |
... | ... |
@@ -323,15 +329,16 @@ |
323 | 329 |
(.item))) |
324 | 330 |
|
325 | 331 |
(defun translate-escape (c) |
326 |
- (ecase c |
|
332 |
+ (case c |
|
327 | 333 |
((#\" #\\) c) |
328 | 334 |
(#\t #\tab) |
329 | 335 |
(#\n #\newline) |
330 | 336 |
(#\r #\return) |
331 | 337 |
(#\b #\backspace) |
332 |
- (#\f #.(code-char 12)))) |
|
338 |
+ (#\f #.(code-char 12)) |
|
339 |
+ (t c))) |
|
333 | 340 |
|
334 |
-(defun parse-string-ending-old (s) |
|
341 |
+(defun parse-string-ending (s) |
|
335 | 342 |
(let ((pos 0) |
336 | 343 |
(done nil)) |
337 | 344 |
(flet ((consume-char () |
... | ... |
@@ -351,14 +358,17 @@ |
351 | 358 |
(values nil 0)))))) |
352 | 359 |
|
353 | 360 |
(defun translate-escapes (s) |
354 |
- (let ((parts (coerce (fwoar.string-utils:split #\\ s) 'list))) |
|
361 |
+ (let* ((s (serapeum:string-replace-all "\\\\" s "\\")) |
|
362 |
+ (parts (coerce (fwoar.string-utils:split #\\ s) 'list))) |
|
355 | 363 |
(serapeum:string-join (list* (car parts) |
356 | 364 |
(mapcan (lambda (part) |
357 |
- (list (translate-escape (elt part 0)) |
|
358 |
- (subseq part 1))) |
|
365 |
+ (format t "~&~s~%" part) |
|
366 |
+ (unless (equal part "") |
|
367 |
+ (list (translate-escape (elt part 0)) |
|
368 |
+ (subseq part 1)))) |
|
359 | 369 |
(cdr parts)))))) |
360 | 370 |
|
361 |
-(defun parse-string-ending (s) |
|
371 |
+(defun parse-string-ending-old (s) |
|
362 | 372 |
(declare (optimize (speed 3)) |
363 | 373 |
(type simple-string s)) |
364 | 374 |
(loop |
... | ... |
@@ -388,7 +398,7 @@ |
388 | 398 |
|
389 | 399 |
(defun .string-ending () |
390 | 400 |
(lambda (input) |
391 |
- (multiple-value-bind (ending count) (parse-string-ending input) |
|
401 |
+ (multiple-value-bind (ending count) (parse-string-ending (coerce input 'simple-string)) |
|
392 | 402 |
(if (> count 0) |
393 | 403 |
(list (cons ending |
394 | 404 |
(subseq input count))) |