From 8c8ade7167781e074402446c20a5b248d909103e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Mon, 25 Jul 2022 01:10:29 +0200 Subject: Properly unlex characters. --- module/c/unlex.scm | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/module/c/unlex.scm b/module/c/unlex.scm index e467a50f..13968698 100644 --- a/module/c/unlex.scm +++ b/module/c/unlex.scm @@ -72,11 +72,32 @@ (`(pp-number ,n) n) - ;; TODO remaining parts - (('character-constant `(character-encoding . ,x) c parts ...) - (format #f "'~a'" c)) + (('character-constant `(character-prefix . ,x) c parts ...) + (with-output-to-string + (lambda () + (unless (null? x) + (display (car x))) + (display #\') + (match c + (`(escape-sequence (simple-escape-sequence ,x)) + (format #t "\\~a" x)) + (`(escape-sequence (octal-escape-sequence ,x)) + (format #t "\\~a" x)) + (`(escape-sequence (octal-escape-sequence ,x)) + (format #t "\\x~a" x)) + (`(escape-sequence (universal-character-name ,x)) + (format #t "\\~a~a" + (case (string-length x) + ((4) #\u) ((8) #\U)) + x)) + (else (display c))) + ;; TODO remaining parts + (display #\')))) - (`(punctuator ,p) p))) + (`(punctuator ,p) p) + (_ (scm-error 'cpp-error "stringify-token" + "No matching patterns for: ~s" + (list preprocessing-token) #f)))) ;; takes a token list, and return a single string literal token (define (stringify-tokens tokens) -- cgit v1.2.3