replace Scheme read with our tokenizer and parser
Also implement . as field access operator and preserve ;-comments in generated C
This commit is contained in:
@@ -20,8 +20,8 @@ utils.o: utils.module.scm ../utils.scm
|
||||
sex-macros.o: sex-macros.module.scm ../sex-macros.scm
|
||||
$(CHICKEN_C) $(CSC_FLAGS) $(MODULE_FLAGS) sex-macros.module.scm -o sex-macros.o -unit sex-macros
|
||||
|
||||
reader.o: reader.module.scm ../reader.scm
|
||||
$(CHICKEN_C) $(CSC_FLAGS) $(MODULE_FLAGS) reader.module.scm -o reader.o -unit reader
|
||||
reader.o: reader.module.scm ../reader.scm utils.o
|
||||
$(CHICKEN_C) $(CSC_FLAGS) $(MODULE_FLAGS) reader.module.scm -o reader.o -unit reader -link utils
|
||||
|
||||
sex-modules.o: sex-modules.module.scm ../sex-modules.scm reader.o utils.o
|
||||
$(CHICKEN_C) $(CSC_FLAGS) $(MODULE_FLAGS) sex-modules.module.scm -o sex-modules.o -unit sex-modules -link reader,utils
|
||||
|
||||
@@ -28,6 +28,11 @@
|
||||
(test 1 (atom-to-fmt-c 'true))
|
||||
(test 0 (atom-to-fmt-c 'false))
|
||||
|
||||
;; make-field-access
|
||||
(test 'a.b (make-field-access '(.b a)))
|
||||
(test 'a.b.c (make-field-access '(.c a.b))))
|
||||
;; dot-access -> %. member-access directive (kebab-converted operands)
|
||||
(test '(%. a b) (walk-expr '(dot-access a b)))
|
||||
(test '(%. a b c) (walk-expr '(dot-access a b c)))
|
||||
(test '(%. a_b c) (walk-expr '(dot-access a-b c)))
|
||||
|
||||
;; comment -> %comment directive (rendered as /* ... */)
|
||||
(test '(%comment " hi") (walk-expr '(comment " hi")))
|
||||
(test '(%comment " hi") (process-toplevel-form '(comment " hi"))))
|
||||
|
||||
@@ -15,4 +15,27 @@
|
||||
(reader-test '((¤)) "[]")
|
||||
(reader-test '((¤ (¤))) "[[]]")
|
||||
(reader-test '((¤ (¤ const char))) "[[const char]]")
|
||||
|
||||
;; leading `.' becomes the dot-access operator
|
||||
(reader-test '((dot-access obj field)) "(. obj field)")
|
||||
(reader-test '((dot-access obj method a b)) "(. obj method a b)")
|
||||
(reader-test '((dot-access a b)) "(. a b)")
|
||||
;; nested leading dot
|
||||
(reader-test '((foo (dot-access a b))) "(foo (. a b))")
|
||||
|
||||
;; dotted pairs are preserved (only a *leading* dot is special)
|
||||
(reader-test '((a . b)) "(a . b)")
|
||||
(reader-test '((a b . c)) "(a b . c)")
|
||||
(reader-test '((quote (a . b))) "'(a . b)")
|
||||
;; a `.'-prefixed symbol is an ordinary symbol, not dot-access
|
||||
(reader-test '((.field obj)) "(.field obj)")
|
||||
|
||||
;; `;' comments are preserved as (comment "...") forms
|
||||
(reader-test '((comment " hi")) "; hi")
|
||||
(reader-test '((comment ";; Prototypes")) ";;; Prototypes")
|
||||
(reader-test '((foo (comment " c") bar)) "(foo ; c\n bar)")
|
||||
;; a trailing top-level comment is its own form
|
||||
(reader-test '((a b) (comment " t")) "(a b) ; t")
|
||||
;; a `;' inside a string is not a comment
|
||||
(reader-test '("a;b") "\"a;b\"")
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user