Changeset 16045 in project


Ignore:
Timestamp:
09/23/09 13:14:45 (10 years ago)
Author:
Ivan Raikov
Message:

getopt-long: bug fixes in handling of optional arguments

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/4/getopt-long/getopt-long.scm

    r15633 r16045  
    395395(define (long-option-name lst)
    396396  (let loop ((lst lst)  (ax (list)))
     397    (print "long-option-name: lst = "  lst)
     398    (print "long-option-name: ax = "  ax)
     399
    397400    (cond ((null? lst)  (list (list->string (reverse ax)) lst))
     401
    398402          ((and (char? (car lst))
    399403                (char-set-contains? long-option-name-cs
    400                                    (car lst))
    401                 (car lst)) =>
    402                 (lambda (c)
    403                   (loop (cdr lst) (cons c ax))))
     404                                   (car lst))
     405                (car lst) )
     406           =>
     407           (lambda (c)
     408             (loop (cdr lst) (cons c ax))))
    404409
    405410          ((char=? (car lst) #\=)
     
    435440           ((#\- #\-  . rst)
    436441            (match-let* (((n nrst)  (long-option-name rst))
    437                          ((v ())    (long-option-value nrst))
     442                         ((v ())    (begin
     443                                      (print "n = " n)
     444                                      (print "nrst = " nrst)
     445                                      (long-option-value nrst)))
    438446                         ((next v)
    439447                          (begin
     448                            (print "next = " next)
     449                            (print "v = " v)
    440450                            (or (and v (list next v))
    441                                 (and (not (check-long-option (car next)))
     451                                (and (pair? next)
     452                                     (not (check-long-option (car next)))
    442453                                     (not (check-short-option (car next)))
    443454                                     (list (cdr next) (car next)))
     
    464475                                "superfluous argument given to option " n))
    465476                       
    466                         ((and (not v) (option-spec-value spec))
    467                          (error 'long-option? "option requires value " n))
    468                        
    469477                        ((and (not v) (option-spec-value spec)
    470478                              (value-policy-optional?
    471479                               (option-spec-value spec)))
    472480                         (list next (cons (option-spec-name spec) #t)))
     481
     482                        ((and (not v) (option-spec-value spec))
     483                         (error 'long-option? "option requires value " n))
    473484                       
    474485                        (else
     
    633644                          specifications))
    634645         (pair           (split-argument-list program-arguments))
     646         (dd             (print "pair = " pair))
    635647         (split-ls       (car pair))
    636648         (non-split-ls   (cdr pair))
Note: See TracChangeset for help on using the changeset viewer.