Changeset 36028 in project


Ignore:
Timestamp:
08/04/18 17:57:57 (14 months ago)
Author:
Ivan Raikov
Message:

fmt: fixes to egg file and added tests

Location:
release/5/fmt/trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • release/5/fmt/trunk/fmt-c-chicken.scm

    r36027 r36028  
    2727  cpp-include cpp-define cpp-wrap-header cpp-pragma cpp-line
    2828  cpp-error cpp-warning cpp-stringify cpp-sym-cat
    29   c-comment c-block-comment c-attribute
    30   )
     29  c-comment c-block-comment c-attribute)
    3130
    3231(import scheme (chicken base) fmt srfi-1 srfi-13)
  • release/5/fmt/trunk/fmt-c.scm

    r36027 r36028  
    88
    99(define (fmt-in-macro? st) (fmt-ref st 'in-macro?))
     10(define (fmt-macro-params st) (fmt-ref st 'macro-params))
    1011(define (fmt-expression? st) (fmt-ref st 'expression?))
    1112(define (fmt-return? st) (fmt-ref st 'return?))
     
    3334        ((or (string=? x ".") (string=? x "->")) 10)
    3435        ((or (string=? x "++") (string=? x "--")) 20)
     36        ((string=? x "&") 55)
    3537        ((string=? x "|") 65)
     38        ((string=? x "&&") 70)
    3639        ((string=? x "||") 75)
    3740        ((string=? x "|=") 85)
     
    4043      (case x
    4144        ;;((|::|) 5) ; C++
    42         ((paren bracket) 5)
    4345        ((dot arrow post-decrement post-increment) 10)
    4446        ((**) 15)                       ; Perl
     
    5557        ((^) 60)
    5658        ;;((|\||) 65)
    57         ((&&) 70)
     59        ((&& %and) 70)
     60        ((%or) 75)
    5861        ;;((|\|\||) 75)
    5962        ;;((.. ...) 77)                   ; Perl
     
    6568        ((and) 93)                      ; Perl
    6669        ((or xor) 94)                   ; Perl
     70        ((paren bracket) 100)
    6771        (else 95))))
    6872
     
    7074(define (c-op<= x y) (<= (c-op-precedence x) (c-op-precedence y)))
    7175
    72 (define (c-paren x) (cat "(" x ")"))
     76(define (c-paren x) (cat "(" (c-expr x) ")"))
    7377
    7478(define (c-maybe-paren op x)
    7579  (lambda (st)
    7680    ((fmt-let 'op op
    77               (if (or (fmt-in-macro? st) (c-op<= (fmt-op st) op))
     81              (if (c-op<= (fmt-op st) op)
    7882                  (c-paren x)
    7983                  x))
     
    142146(define (c-literal x)
    143147  (lambda (st)
    144     ((if (and (fmt-in-macro? st) (c-op< 'paren (fmt-op st))
    145               (not (c-literal? x)))
     148    ((if (and (symbol? x) (memq x (or (fmt-macro-params st) '())))
    146149         (c-paren (c-simple-literal x))
    147150         (c-simple-literal x))
     
    173176            ((enum) ((apply c-enum (cdr x)) st))
    174177            ((inline auto restrict register volatile extern static)
    175              ((cat (car x) " " (apply-cat (cdr x))) st))
     178             ((cat (car x) " " (apply c-begin (cdr x))) st))
    176179            ;; non C-keywords must have some character invalid in a C
    177180            ;; identifier to avoid conflicts - by default we prefix %
     
    224227            ((arithmetic-shift) ((apply c-op '<< (cdr x)) st))
    225228            ((bitwise-ior= bit-or=) ((apply c-op "|=" (cdr x)) st))
     229            ((%and) ((apply c-op "&&" (cdr x)) st))
    226230            ((%or) ((apply c-op "||" (cdr x)) st))
    227231            ((%. %field) ((apply c-op "." (cdr x)) st))
     
    357361        (else x)))
    358362
     363(define (flatten-list ls)
     364  (let lp ((ls ls) (res '()))
     365    (cond ((pair? ls) (lp (cdr ls) (cons (car ls) res)))
     366          ((null? ls) (reverse res))
     367          (else (reverse (cons ls res))))))
     368
    359369(define (replace-tree from to x)
    360370  (let replace ((x x))
     
    373383                             (replace-tree dot '__VA_ARGS__ body))))
    374384                   (else body)))
     385           (params (map (lambda (x) (if (pair? x) (cadr x) x))
     386                        (flatten-list (if (pair? x) (cdr x) '()))))
    375387           (tail
    376388            (if (pair? body)
    377389                (cat " "
    378390                     (fmt-let 'writer (make-cpp-writer st)
    379                               (fmt-let 'in-macro? (pair? x)
     391                              (fmt-let 'macro-params params
    380392                                       ((if (or (not (pair? x))
    381393                                                (and (null? (cdr body))
  • release/5/fmt/trunk/fmt.egg

    r36027 r36028  
    1010  (extension fmt (source "fmt-chicken.scm"))
    1111  (extension fmt-c
    12              (source "fmt-c-chicken")
     12             (source "fmt-c-chicken.scm")
    1313             (component-dependencies fmt))
    1414  (extension fmt-js
    15              (source "fmt-js-chicken")
     15             (source "fmt-js-chicken.scm")
    1616             (component-dependencies fmt fmt-c))
    1717  (extension fmt-color
    18              (source "fmt-color-chicken")
     18             (source "fmt-color-chicken.scm")
    1919             (component-dependencies fmt))
    2020  ;; (extension fmt-unicode (source "fmt-unicode-chicken"))
Note: See TracChangeset for help on using the changeset viewer.