;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*- ;;;; ************************************************************************* ;;;; FILE IDENTIFICATION ;;;; ;;;; Name: cl-symbols.lisp ;;;; Purpose: Returns all defined Common Lisp symbols ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; ;;;; $Id: cl-symbols.lisp,v 1.4 2002/12/13 21:59:57 kevin Exp $ ;;;; ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; ;;;; KMRCL users are granted the rights to distribute and use this software ;;;; as governed by the terms of the Lisp Lesser GNU Public License ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL. ;;;; ************************************************************************* (in-package :kmrcl) (defun cl-symbols () (append (cl-variables) (cl-functions))) (defun cl-variables () (let ((vars '())) (do-symbols (s 'common-lisp) (multiple-value-bind (sym status) (find-symbol (symbol-name s) 'common-lisp) (when (and (or (eq status :external) (eq status :internal)) (boundp sym)) (push sym vars)))) (nreverse vars))) (defun cl-functions () (let ((funcs '())) (do-symbols (s 'common-lisp) (multiple-value-bind (sym status) (find-symbol (symbol-name s) 'common-lisp) (when (and (or (eq status :external) (eq status :internal)) (fboundp sym)) (push sym funcs)))) (nreverse funcs))) ;;; Symbol functions (defun concat-symbol-pkg (pkg &rest args) (declare (dynamic-extent args)) (flet ((stringify (arg) (etypecase arg (string (string-upcase arg)) (symbol (symbol-name arg))))) (let ((str (apply #'concatenate 'string (mapcar #'stringify args)))) (intern #-case-sensitive (string-upcase str) #+case-sensitive str (if pkg pkg *package*))))) (defun concat-symbol (&rest args) (apply #'concat-symbol-pkg nil args)) (defun ensure-keyword (name) "Returns keyword for a name" (etypecase name (keyword name) (string (values (intern #-case-sensitive (string-upcase name) #+case-sensitive name :keyword))) (symbol (values (intern (symbol-name name)) :keyword))))