chicken-users
[Top][All Lists]
Advanced

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

[Chicken-users] Re: enumerating symbols


From: Linh Dang
Subject: [Chicken-users] Re: enumerating symbols
Date: Thu, 22 Apr 2004 14:07:47 -0400
User-agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux)

,---- [ code from felix ]
| (define oblist
|    (let ([find-symbol-table (foreign-lambda c-pointer "C_find_symbol_table" 
c-string)]
|       [enum-symbols! (foreign-lambda scheme-object "C_enumerate_symbols" 
c-pointer scheme-object)] )
|      (lambda ()
|        (let ([it (cons -1 '())]
|           [ns (find-symbol-table ".")] )
|       (let loop ([lst '()])
|         (let ([s (enum-symbols! ns it)])
|           (if s
|               (loop (cons s lst))
|               lst) ) ) ) ) ) )
`----


This is great! but

- csi can't evaluate it!
- can it be included in the standard distribution?
- for my hen.el emacs package (which run csi as a subprocess), I want
  to do:
   - chicken symbol completion
   - chicken symbol apropos

  I'd love to have something like those functions listed below to be
  callable from csi:


;;; -*- Hen -*-
(declare (export chicken:oblist chicken:oblist->strings
                 chicken:name-of-symbols-starting-with
                 chicken:name-of-symbols-matching) (fixnum))

(require 'srfi-13)
(require 'regex)

(define chicken:oblist
   (let ([find-symbol-table (foreign-lambda c-pointer "C_find_symbol_table" 
c-string)]
        [enum-symbols! (foreign-lambda scheme-object "C_enumerate_symbols" 
c-pointer scheme-object)] )
     (lambda ()
       (let ([it (cons -1 '())]
            [ns (find-symbol-table ".")] )
        (let loop ([lst '()])
          (let ([s (enum-symbols! ns it)])
            (if s
                (loop (cons s lst))
                lst) ) ) ) ) ) )

(define chicken:oblist->strings
   (let ([find-symbol-table (foreign-lambda c-pointer "C_find_symbol_table" 
c-string)]
        [enum-symbols! (foreign-lambda scheme-object "C_enumerate_symbols" 
c-pointer scheme-object)] )
     (lambda ()
       (let ([it (cons -1 '())]
            [ns (find-symbol-table ".")] )
        (let loop ([lst '()])
          (let ([s (enum-symbols! ns it)])
            (if s
                (loop (cons (->string s) lst))
                lst) ) ) ) ) ) )

(define chicken:name-of-symbols-starting-with
   (let ([find-symbol-table (foreign-lambda c-pointer "C_find_symbol_table" 
c-string)]
        [enum-symbols! (foreign-lambda scheme-object "C_enumerate_symbols" 
c-pointer scheme-object)] )
     (lambda (prefix)
       (let ([it (cons -1 '())]
            [ns (find-symbol-table ".")] )
        (let loop ([lst '()])
          (let ([s (enum-symbols! ns it)])
            (if s 
                (loop (if (string-prefix? prefix (symbol->string s))
                          (cons (symbol->string s) lst)
                          lst))
                lst) ) ) ) ) ) )

(define chicken:name-of-symbols-matching
   (let ([find-symbol-table (foreign-lambda c-pointer "C_find_symbol_table" 
c-string)]
        [enum-symbols! (foreign-lambda scheme-object "C_enumerate_symbols" 
c-pointer scheme-object)] )
     (lambda (re-string)
       (let ([it (cons -1 '())]
            [ns (find-symbol-table ".")]
            [re (regexp re-string)])
        (let loop ([lst '()])
          (let ([s (enum-symbols! ns it)])
            (if s 
                (loop (if (string-search re (symbol->string s))
                          (cons (symbol->string s) lst)
                          lst))
                lst) ) ) ) ) ) )




Thanx

--
Linh Dang










reply via email to

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