#J supports multiple descriptors
authorDavid Vázquez <davazp@gmail.com>
Tue, 4 Jun 2013 19:46:18 +0000 (20:46 +0100)
committerDavid Vázquez <davazp@gmail.com>
Tue, 4 Jun 2013 19:46:18 +0000 (20:46 +0100)
src/read.lisp

index ceec883..e8ca5eb 100644 (file)
       (#\J
        (unless (char= (%peek-char stream) #\:)
          (error "FFI descriptor must start with a semicolon."))
-       `(oget *root* ,(subseq (read-until stream #'terminalp) 1)))
+       (let ((descriptor (subseq (read-until stream #'terminalp) 1))
+             (subdescriptors nil))
+         (do* ((start 0 (1+ end))
+               (end (position #\: (subseq descriptor start))
+                    (position #\: (subseq descriptor start))))
+              ((null end)
+               (push (subseq descriptor start) subdescriptors)
+               `(oget *root* ,@(reverse subdescriptors)))
+           (push (subseq descriptor start end) subdescriptors))))
       (otherwise
        (cond
          ((and ch (digit-char-p ch))