Re[2]: [CEDET-devel] More Analyzer
Brought to you by:
zappo
From: Eric M. L. <er...@si...> - 2004-03-05 13:47:26
|
>>> David Ponce <dav...@wa...> seems to think that: >Hi Eric, > >[...] > > Next up is (probably) more grammar support. > >Yeah! > > > David, in the semanic-grammar file, there is both grammar rules and > > Emacs Lisp code. This is handled in most cases by code like this: > > > > (if (in-lisp) > > (emacs-lisp-do-something) > > (more code for grammars)) > > > > For overload methods, it would be nifty to have a method like this: > > > > (if (in-lisp) > > (semantic-with-mode-variables 'emacs-lisp-mode > > (do stuff with Emacs Lisp)) > > > > (do grammar stuff.)) > > > > to execute code as if we were in an Emacs Lisp buffer. Do you have > > a notion for doing this? > >I think the following implementation should do what you expect >for overloads (untested). > >The semantic-bindings functions are already designed to work using an >explicit major mode instead of the default current one. > >The principle below is to temporarily tell semantic-fetch-overload to >look for overloads in a particular major mode table, instead of the >current buffer local one (which is still active for other purposes). > >Nested calls to `semantic-with-mode-overloads' should work too ;-) > >(defvar semantic-overloads-active-mode nil > "Major mode in which overloads are active.") > >(defmacro semantic-with-mode-overloads (mode &rest body) > "Evaluate BODY with the overloads of MODE active. >The current overloads active mode is saved, BODY is evaluated, and the >saved mode is restored, even in case of an abnormal exit. >Value is what BODY returns." > (let ((old-mode (make-symbol "mode"))) > `(let ((,old-mode semantic-overloads-active-mode)) > (unwind-protect > (progn > (setq semantic-overloads-active-mode ,mode) > ,@body) > (setq semantic-overloads-active-mode ,old-mode))))) > >(defsubst semantic-fetch-overload (overload) > "Return the current OVERLOAD function, or nil if not found. >Fetch OVERLOAD from the override table of the current overloads active >mode or its parents. By default the overloads active mode is the >current major mode." > (semantic-symbol-value > overload semantic-overloads-active-mode 'override)) [ ... ] That seems like a good way to do it. Unfortunately the variables would be much more difficult, but this will work for what I am planning to do. Thanks! Eric -- Eric Ludlam: za...@gn..., er...@si... Home: http://www.ludlam.net Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net GNU: www.gnu.org |