[Top][All Lists]
[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