Thread: [CEDET-devel] Lexical safety
Brought to you by:
zappo
From: Eric M. L. <er...@si...> - 2003-12-29 01:31:29
|
I've added a new macro into semantic-lex concerning lexical safety. The new macro is `semantic-lex-catch-errors' which protects against the lexer detecting unparseable code in the FORMS argument. The lexer had the ability to recognize a special "throw symbol" for some analyzers that would then `throw' on that symbol, which could be caught later. Auto-parse mode used this to prevent lots of unmatched syntax from appearing randomly while you were editing your code. As I had mentioned some time ago, I was trying to fix this problem. The new macro which does this work also will set a new parser state of "unparsable" now found in semantic.el. This state gets reverted as soon as the user types in a buffer, or if one of the parse tree flush commands is run. The new semantic idle scheduler uses this, which means any and all idle services which might accidentally call for a full reparse will now short circuit and use the cache instead. As such, the original bug caused by eldoc and the new semanticdb search routines is now (finally!) dead. I also used this feature in senator's extension to hippie expand. This way if you type: funcall(boo and hit hippie-expand, the old behavior was to mark everything as unmatched syntax starting with the function you were in. Bad bad bad. Now a quick use of the lexical safety macro puts the buffer into the 'unparseable' state, so all searches use the cache. Once an element is found as replacement, the buffer reverts to being merely out of date. Nifty. I can imagine many commands doing this to prevent such unwanted behavior. It may be reasonable to have this always be the default though I hadn't thought that out too far yet. Enjoy 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 |