Changeset 11639 in project


Ignore:
Timestamp:
08/14/08 07:52:09 (12 years ago)
Author:
Ivan Raikov
Message:

Bug fixes in let-enum.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/3/oru/nmodl.scm

    r11638 r11639  
    4444            (match kv ((k v) v) (else (cdr kv)))))))
    4545
    46 (define nl "\n")
    47 
    4846(define (nmodl-name s)
    4947  (let ((cs (string->list (->string s))))
     
    7371(define (enumbnds expr ax)
    7472  (match expr
    75          (('if . es)  (fold enumbnds ax es))
    76          (('let bnds body)  (fold enumbnds (append (map car bnds) ax) body))
    77          ((s . es)    (if (symbol? s)  (fold enumbnds ax es) ax))
     73         (('if . es)        (fold enumbnds ax es))
     74         (('let bnds body)  (enumbnds body (append  (map car bnds) ax)))
     75         ((s . es)          (if (symbol? s)  (fold enumbnds ax es) ax))
    7876         (else ax)))
    7977
     
    164162          `(if ,(k c subst) ,(k t subst) ,(k e subst)))
    165163         (('let bs e)
    166           (k `(let ,(map (lambda (b) `(,(car b) ,(k (cadr b) subst))) bs) ,e) subst))
     164          (k `(let ,(map (lambda (b) `(,(car b) ,(k (cadr b) subst))) bs) ,(k e subst)) subst))
    167165         ((f . es)
    168166          (cons (k f subst) (map (lambda (e) (k e subst)) es)))
     167         ((? symbol? )  (lookup-def t subst t))
    169168         ((? atom? ) t)))
    170169
     
    177176  (match expr
    178177         (('if c t e)
    179           (let ((x (gensym "if")))
    180             `(let ((,x (if ,(if-convert c) ,(if-convert t) ,(if-convert e))))  ,x)))
     178          (let ((r (gensym "if")))
     179            `(let ((,r (if ,(if-convert c) ,(if-convert t) ,(if-convert e)))) 
     180               ,r)))
    181181         (('let bs e)
    182182          `(let ,(map (lambda (b) `(,(car b) ,(if-convert (cadr b)))) bs) ,(if-convert e)))
     
    190190         (('let ((x ('if c t e))) y)
    191191          (let ((ax (fold let-enum ax (list c t e))))
    192             (if (eq? x y)  (cons (list x `(if ,c ,t ,e)) ax) ax)))
    193 
    194          (('let bnds body)  (let-enum body (append bnds ax)))
     192            (if (eq? x y)  (append ax (list (list x `(if ,c ,t ,e)))) ax)))
     193
     194         (('let bnds body)  (let-enum body (append ax bnds)))
    195195
    196196         (('if c t e)  (fold let-enum ax (list c t e)))
Note: See TracChangeset for help on using the changeset viewer.