From bcb7ccde45f9388f8b36b88fdfcb5e786762c373 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 15 Oct 2014 17:46:47 -0400 Subject: [PATCH] * lisp/cedet/semantic/wisent/comp.el (wisent-defcontext): Move declarations outside of eval-when-compile. Use `declare'. (wisent-with-context): Add `defvar' declarations in case this macro is used in a file compiled with lexical-binding. (wisent-semantic-action-expand-body): Avoid add-to-list on local var. --- lisp/cedet/ChangeLog | 8 ++++++++ lisp/cedet/semantic/wisent/comp.el | 26 ++++++++++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog index 9aabc9c9e0d..2fdd1cefdcb 100644 --- a/lisp/cedet/ChangeLog +++ b/lisp/cedet/ChangeLog @@ -1,3 +1,11 @@ +2014-10-15 Stefan Monnier + + * semantic/wisent/comp.el (wisent-defcontext): Move declarations + outside of eval-when-compile. Use `declare'. + (wisent-with-context): Add `defvar' declarations in case this macro is + used in a file compiled with lexical-binding. + (wisent-semantic-action-expand-body): Avoid add-to-list on local var. + 2014-09-22 David Engster * ede/emacs.el (ede-emacs-version): Do not call 'egrep' to diff --git a/lisp/cedet/semantic/wisent/comp.el b/lisp/cedet/semantic/wisent/comp.el index 9e25b52e8ce..2e5d2a43395 100644 --- a/lisp/cedet/semantic/wisent/comp.el +++ b/lisp/cedet/semantic/wisent/comp.el @@ -41,6 +41,7 @@ ;;; Code: (require 'semantic/wisent) +(eval-when-compile (require 'cl)) ;;;; ------------------- ;;;; Misc. useful things @@ -66,18 +67,23 @@ (defmacro wisent-defcontext (name &rest vars) "Define a context NAME that will bind variables VARS." + (declare (indent 1)) (let* ((context (wisent-context-name name)) - (bindings (mapcar #'(lambda (v) (list 'defvar v)) vars))) - `(eval-when-compile - ,@bindings - (defvar ,context ',vars)))) -(put 'wisent-defcontext 'lisp-indent-function 1) + (declarations (mapcar #'(lambda (v) (list 'defvar v)) vars))) + `(progn + ,@declarations + (eval-when-compile + (defvar ,context ',vars))))) (defmacro wisent-with-context (name &rest body) "Bind variables in context NAME then eval BODY." - `(let* ,(wisent-context-bindings name) - ,@body)) -(put 'wisent-with-context 'lisp-indent-function 1) + (declare (indent 1)) + (let ((bindings (wisent-context-bindings name))) + `(progn + ,@(mapcar (lambda (binding) `(defvar ,(or (car-safe binding) binding))) + bindings) + (let* ,bindings + ,@body)))) ;; A naive implementation of data structures! But it suffice here ;-) @@ -2896,7 +2902,7 @@ references found in BODY, and XBODY is BODY expression with (progn (if (wisent-check-$N body n) ;; Accumulate $i symbol - (add-to-list 'found body)) + (pushnew body found :test #'equal)) (cons found body)) ;; BODY is a list, expand inside it (let (xbody sexpr) @@ -2916,7 +2922,7 @@ references found in BODY, and XBODY is BODY expression with ;; $i symbol ((wisent-check-$N sexpr n) ;; Accumulate $i symbol - (add-to-list 'found sexpr)) + (pushnew sexpr found :test #'equal)) ) ;; Accumulate expanded forms (setq xbody (nconc xbody (list sexpr)))) -- 2.39.5