Changeset 27113 in project


Ignore:
Timestamp:
07/22/12 20:54:57 (9 years ago)
Author:
Ivan Raikov
Message:

nemo: bug fixes and error handling

Location:
release/4/nemo/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • release/4/nemo/trunk/expr-parser.scm

    r26990 r27113  
    180180                            (begin (stack-push! is (cdr p))
    181181                                   (match x
    182                                           ((or '< '> '>= '>= '^ '+ '- '* '/ '= )      x)
     182                                          ((or '< '> '>= '<= '^ '+ '- '* '/ '= )      x)
    183183                                          ('?           (tok loc QUESTION))
    184184                                          (':           (tok loc COLON))
  • release/4/nemo/trunk/expr.grm

    r25642 r27113  
    1111   ( ID NUM LET IF THEN ELSE RPAREN
    1212       (right: QUESTION COLON)
    13        (left: < > =)
     13       (left: < > = <= >=)
    1414       (left: + -)
    1515       (left: * /)
     
    3434             (expr < = expr)          : `(<= ,$1 ,$3)
    3535             (expr > = expr)          : `(>= ,$1 ,$3)
     36             (expr <= expr)          : `(<= ,$1 ,$3)
     37             (expr >= expr)          : `(>= ,$1 ,$3)
    3638             (expr QUESTION expr COLON expr) :  `(if ,$1 ,$3 ,$5)
    3739             (LET LPAREN bnds RPAREN expr)   :  `(let ,(reverse $3) ,$5)
  • release/4/nemo/trunk/nemo-core.scm

    r27093 r27113  
    379379  (define (make-arity-check nemo-env)
    380380    (lambda (s args)
    381       (let ((op (hash-table-ref nemo-env s)))
    382         (if (extended-procedure? op)
    383             (let* ((fd   (procedure-data op))
    384                    (fms   (lookup-def 'formals fd)))
    385 
    386               (if (not (= (length fms) (length args)))
    387                   (nemo:error 'eval-expr "procedure " s
    388                               " called with incorrect number of arguments: "
    389                               args)))))))
     381      (if (hash-table-exists? nemo-env s)
     382          (let ((op (hash-table-ref nemo-env s)))
     383            (if (extended-procedure? op)
     384                (let* ((fd   (procedure-data op))
     385                       (fms   (lookup-def 'formals fd)))
     386                 
     387                  (if (not (= (length fms) (length args)))
     388                      (nemo:error 'eval-expr "procedure " s
     389                                  " called with incorrect number of arguments: "
     390                                  args)))))
     391          (nemo:error 'eval-expr "symbol " s " is not defined")
     392          )))
    390393
    391394  (define (env-extend! nemo-env)
     
    395398              (arity-check (make-arity-check nemo-env))
    396399              (normalize-expr (make-normalize-expr arity-check)))
     400
    397401        (if (hash-table-exists? nemo-env sym)
    398402            (nemo:error 'env-extend! ": quantity " sym " already defined")
     
    418422              (('const)   (begin
    419423                            (if (not (number? initial))
    420                                 (nemo:error 'env-extend! ": constant definitions require numeric value"))
    421                             (hash-table-set! nemo-env sym (CONST name initial))))
     424                                (nemo:error 'env-extend! ": constant definitions require numeric value" name initial))
     425                            (hash-table-set! nemo-env sym (CONST name initial))
     426                            ))
    422427
    423428              (('asgn)    (let ((rhs (lookup-def 'rhs alst)))
     429
    424430                            (if (not (eq? initial 'none))
    425431                                (nemo:error 'env-extend!
     
    427433                            (if (not rhs)
    428434                                (nemo:error 'env-extend! ": state function definitions require an equation"))
    429                             (hash-table-set! nemo-env sym (ASGN  name 0.0 (normalize-expr rhs)))))
     435                            (let ((expr1 (normalize-expr rhs)))
     436                              (hash-table-set! nemo-env sym (ASGN name 0.0 expr1)))
     437                            ))
    430438
    431439              (('rate)    (let ((rhs (lookup-def 'rhs alst))
     
    532540                                               (ec e (fold ec ax (map second bs)))))
    533541                               (('if . es)   (fold (enumconsts lb) ax es))
    534                                ((s . es)     (if (symbol? s) 
    535                                                  (let ((v (const-env-entry->value (hash-table-ref const-env s))))
    536                                                    (cons (cons s v) (fold (enumconsts lb) ax es)))
    537                                                  ax))
     542                               ((s . es)     (cond ((and (symbol? s) (hash-table-exists? const-env s))
     543                                                    (let ((v (const-env-entry->value (hash-table-ref const-env s))))
     544                                                      (cons (cons s v) (fold (enumconsts lb) ax es)))
     545                                                    ax)
     546                                                   ((and (symbol? s) (not (member s lb)))
     547                                                    (nemo:error 'defun ": quantity " s " not defined"))
     548                                                   (else ax)
     549                                                   ))
    538550                               (s            (cond
    539551                                               ((and (symbol? s) (not (member s lb))
     
    543555                                               ((and (symbol? s) (not (member s lb)))
    544556                                                (nemo:error 'defun ": quantity " s " not defined"))
    545                                                (else ax)))))))
     557                                               (else ax)))
     558                               ))
     559                      ))
    546560                   
    547561                   )
  • release/4/nemo/trunk/nemo-matlab.scm

    r27093 r27113  
    735735                              (gate              (lookup-def 'gate subcomps))
    736736                              (sts               (and gate ((dis 'component-exports) sys (cid gate)))))
     737
     738                         (if (null? permqs)
     739                             (nemo:error 'nemo:matlab-translator ": ion channel definition " label
     740                                         "permeating-ion component lacks exported quantities"))
     741                         (if (null? sts)
     742                             (nemo:error 'nemo:matlab-translator ": ion channel definition " label
     743                                         "gate component lacks exported quantities"))
    737744                         
    738745                         (if (not (or pore permeability))
  • release/4/nemo/trunk/nemo-nest.scm

    r27093 r27113  
    15111511                              (gate              (lookup-def 'gate subcomps))
    15121512                              (sts               (and gate ((dis 'component-exports) sys (cid gate)))))
     1513
     1514                         (if (null? permqs)
     1515                             (nemo:error 'nemo:nest-translator ": ion channel definition " label
     1516                                         "permeating-ion component lacks exported quantities"))
     1517
     1518                         (if (null? sts)
     1519                             (nemo:error 'nemo:nest-translator ": ion channel definition " label
     1520                                         "gate component lacks exported quantities"))
    15131521                         
    15141522                         (if (not (or pore permeability))
  • release/4/nemo/trunk/nemo-nmodl.scm

    r27093 r27113  
    696696             (if (not (null? currents)) (pp indent+ (RANGE ,(slp ", " currents)))))
    697697
     698
    698699           (for-each (lambda (x)
    699700                       (case (first x)
     
    847848                                   (sts               (and gate ((dis 'component-exports) sys (cid gate)))))
    848849
     850                              (if (null? permqs)
     851                                  (nemo:error 'nemo:nmodl-translator ": ion channel definition " label
     852                                              "permeating-ion component lacks exported quantities"))
     853                              (if (null? sts)
     854                                  (nemo:error 'nemo:nmodl-translator ": ion channel definition " label
     855                                              "gate component lacks exported quantities"))
    849856
    850857                              (if (not (or pore permeability))
     
    861868
    862869                                    ((and perm pore gate)
     870
    863871                                     (case (cn perm)
    864872                                       ((non-specific)
     
    878886                                               (sptms (map (lambda (st pwr) (if pwr `(pow ,st ,pwr) st)) sts pwrs))
    879887                                               (gion  `(* ,gmax ,@sptms)))
     888
    880889                                          (list i e gion (nmodl-name (s+ 'i_ label)))))))
    881890
Note: See TracChangeset for help on using the changeset viewer.