bug-guile
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

guile-scsh: `command-line-arguments' needs nil check


From: William Xu
Subject: guile-scsh: `command-line-arguments' needs nil check
Date: Sat, 04 Feb 2006 13:00:24 +0800
User-agent: Gnus/5.110004 (No Gnus v0.4) Emacs/22.0.50 (gnu/linux)

Hi, there

Guile Version: 1.6.7-2, on debian unstable. (I noticed cvs guile-scsh on
savannah hasn't got updated for years..)

In file `scsh.scm', line 670, 

;;; Some globals.
;;(define %command-line '())            ; Includes program.
(define command-line-arguments  ; Doesn't include program.
  (cdr (command-line)))

Seems nil check for (command-line) is needed. When i call guile scripts
from C, i.e.,

    scm_c_primitive_load("script.scm");

in the script, i simply load guile-scsh lib, 

    (load-from-path "scsh/init")

Following is the backtrace, and a patch at end.

---------------------------------8<------------------------------------- 
williamxu:~/studio/my_repo/qq/src$ ./qq
Backtrace:
In unknown file:
   ?: 40  (let ((full-name #)) (let (#) (if already # #)))
    ...
   ?: 41  (begin (if # #) (make-modules-in # full-name))
   ?: 42* (if (or # #) (try-load-module name))
   ?: 43  [try-load-module (scsh scsh)]
   ?: 44  (or (begin (try-module-linked name)) (try-module-autoload name) ...)
   ?: 45* [try-module-autoload (scsh scsh)]
   ?: 46  (let* (# # # #) (resolve-module dir-hint-module-name #f) (and # #))
    ...
   ?: 47  (letrec ((load-file #)) (dynamic-wind (lambda () #) (lambda () #) 
...) ...)
   ?: 48* [dynamic-wind #<procedure #f ()> #<procedure #f ()> #<procedure #f 
()>]
   ?: 49* [#<procedure #f ()>]
   ?: 50* (let ((file #)) (cond (# => #) (# => #)))
   ?: 51  [#<procedure #f (full)> 
"/home/william/share/guile/site/scsh/scsh.scm"]
   ?: 52  [load-file #<primitive-procedure primitive-load> ...]
   ?: 53* [save-module-excursion #<procedure #f ()>]
   ?: 54  (let (# #) (dynamic-wind # thunk #))
   ?: 55  [dynamic-wind #<procedure #f ()> #<procedure #f ()> #<procedure #f 
()>]
   ?: 56* [#<procedure #f ()>]
   ?: 57* [primitive-load "/home/william/share/guile/site/scsh/scsh.scm"]
In /home/william/share/guile/site/scsh/scsh.scm:
 667: 58* (define command-line-arguments (cdr (command-line)))
 670: 59* [cdr #f]

/home/william/share/guile/site/scsh/scsh.scm:670:5: In procedure cdr in 
expression (cdr (command-line)):
/home/william/share/guile/site/scsh/scsh.scm:670:5: Wrong type argument in 
position 1: #f
williamxu:~/studio/my_repo/qq/src$ ./qq
---------------------------------8<------------------------------------- 

The patch, 

williamxu:~/share/guile/site/scsh$ diff -u scsh.scm.old  scsh.scm
--- scsh.scm.old        2006-02-04 12:42:24.000000000 +0800
+++ scsh.scm    2006-02-04 12:44:42.872000000 +0800
@@ -665,7 +665,10 @@
 ;;; Some globals.
 ;;(define %command-line '())           ; Includes program.
 (define command-line-arguments         ; Doesn't include program.
-  (cdr (command-line)))
+  ;; Add nil check. (xwl)
+  (let ((args (command-line)))
+    (if args
+       (cdr args))))
 
 ;; not implemented in Guile.
 ;;(define (set-command-line-args! args)
williamxu:~/share/guile/site/scsh$ 

-- 
William




reply via email to

[Prev in Thread] Current Thread [Next in Thread]