unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Slow fontification in C mode buffers
@ 2011-12-03 13:19 Eli Zaretskii
  2011-12-03 15:03 ` Sujith
                   ` (2 more replies)
  0 siblings, 3 replies; 42+ messages in thread
From: Eli Zaretskii @ 2011-12-03 13:19 UTC (permalink / raw)
  To: emacs-devel; +Cc: Alan Mackenzie

Did anyone else notice that scrolling the first time through a very
large comment in C mode became extremely slow lately?  For example,
visit xdisp.c in "emacs -Q", type M-<, then hit C-v several times in
quick succession.  Then watch in disbelief how long it takes for Emacs
to scroll by these several screenfuls.  In my case (6.5 year old
hardware), I even see the "hourglass cursor" kick in, and the CPU
meter shows 100% utilization of one execution unit for about 5
seconds.

If you then type M-< and again hit C-v several times, scrolling will
be at its usual speed.  Scrolling outside of large comments is also
reasonably fast, even for the first time.

Therefore, my prime suspect is font-lock, which is triggered by the
need to display a portion of the buffer that was not fontified yet.
This suspicion is corroborated by the fact that jit-stealth font-lock
of xdisp.c causes extremely high peaks of CPU usage, and Emacs
response time becomes very sluggish.

Is there something in C Mode's arrangements for fontification,
specifically related to comments, that was changed lately and that can
explain this slowdown?



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Slow fontification in C mode buffers
  2011-12-03 13:19 Slow fontification in C mode buffers Eli Zaretskii
@ 2011-12-03 15:03 ` Sujith
  2011-12-03 15:14   ` Eli Zaretskii
  2011-12-03 15:18 ` Alan Mackenzie
  2011-12-03 21:15 ` Alan Mackenzie
  2 siblings, 1 reply; 42+ messages in thread
From: Sujith @ 2011-12-03 15:03 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Alan Mackenzie, emacs-devel

Eli Zaretskii wrote:
> Did anyone else notice that scrolling the first time through a very
> large comment in C mode became extremely slow lately?  For example,
> visit xdisp.c in "emacs -Q", type M-<, then hit C-v several times in
> quick succession.  Then watch in disbelief how long it takes for Emacs
> to scroll by these several screenfuls.  In my case (6.5 year old
> hardware), I even see the "hourglass cursor" kick in, and the CPU
> meter shows 100% utilization of one execution unit for about 5
> seconds.
> 
> If you then type M-< and again hit C-v several times, scrolling will
> be at its usual speed.  Scrolling outside of large comments is also
> reasonably fast, even for the first time.
> 
> Therefore, my prime suspect is font-lock, which is triggered by the
> need to display a portion of the buffer that was not fontified yet.
> This suspicion is corroborated by the fact that jit-stealth font-lock
> of xdisp.c causes extremely high peaks of CPU usage, and Emacs
> response time becomes very sluggish.
> 
> Is there something in C Mode's arrangements for fontification,
> specifically related to comments, that was changed lately and that can
> explain this slowdown?

I can see this behavior on a low-spec machine - Intel Atom @ 1.66 GHz with
1GB RAM running GNU/Linux. C mode is really slow with maximum font-lock
decoration and hitting C-v a few times is enough for the screen to lock up,
while the CPU chugs away at full usage. After the buffer has been fully fontified,
scrolling is fast. My current workaround is to set font-lock-maximum-decoration
to 2.

I tried the pretests to see if things have changed, but 24.0.92 has pretty much
the same behavior.

Sujith



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-03 15:03 ` Sujith
@ 2011-12-03 15:14   ` Eli Zaretskii
  2011-12-03 15:32     ` Sujith
  0 siblings, 1 reply; 42+ messages in thread
From: Eli Zaretskii @ 2011-12-03 15:14 UTC (permalink / raw)
  To: Sujith; +Cc: acm, emacs-devel

> From: Sujith <m.sujith@gmail.com>
> Date: Sat, 3 Dec 2011 20:33:15 +0530
> Cc: emacs-devel@gnu.org,
>     Alan Mackenzie <acm@muc.de>
> 
> I can see this behavior on a low-spec machine - Intel Atom @ 1.66 GHz with
> 1GB RAM running GNU/Linux. C mode is really slow with maximum font-lock
> decoration and hitting C-v a few times is enough for the screen to lock up,
> while the CPU chugs away at full usage. After the buffer has been fully fontified,
> scrolling is fast. My current workaround is to set font-lock-maximum-decoration
> to 2.
> 
> I tried the pretests to see if things have changed, but 24.0.92 has pretty much
> the same behavior.

Thanks.

Do you see any significant difference in performance between when
point is inside of a very large comment, like at the beginning of
src/xdisp.c, and when point is in "normal" C code, with only
relatively short comments?



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-03 13:19 Slow fontification in C mode buffers Eli Zaretskii
  2011-12-03 15:03 ` Sujith
@ 2011-12-03 15:18 ` Alan Mackenzie
  2011-12-03 16:19   ` Eli Zaretskii
  2011-12-13 15:31   ` Kan-Ru Chen
  2011-12-03 21:15 ` Alan Mackenzie
  2 siblings, 2 replies; 42+ messages in thread
From: Alan Mackenzie @ 2011-12-03 15:18 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

Hi, Eli.

On Sat, Dec 03, 2011 at 03:19:47PM +0200, Eli Zaretskii wrote:
> Did anyone else notice that scrolling the first time through a very
> large comment in C mode became extremely slow lately?  For example,
> visit xdisp.c in "emacs -Q", type M-<, then hit C-v several times in
> quick succession.  Then watch in disbelief how long it takes for Emacs
> to scroll by these several screenfuls.  In my case (6.5 year old
> hardware), I even see the "hourglass cursor" kick in, and the CPU
> meter shows 100% utilization of one execution unit for about 5
> seconds.

> If you then type M-< and again hit C-v several times, scrolling will
> be at its usual speed.  Scrolling outside of large comments is also
> reasonably fast, even for the first time.

> Therefore, my prime suspect is font-lock, which is triggered by the
> need to display a portion of the buffer that was not fontified yet.
> This suspicion is corroborated by the fact that jit-stealth font-lock
> of xdisp.c causes extremely high peaks of CPU usage, and Emacs
> response time becomes very sluggish.

> Is there something in C Mode's arrangements for fontification,
> specifically related to comments, that was changed lately and that can
> explain this slowdown?

By a happy coincidence, I've just tracked down another sluggishness (in
large array initialisations, reported by Peter Milliken on bug-cc-mode)
which looks to have exactly the same cause, namely
`c-font-lock-enclosing-decls' which fontifies the innards of a
struct/union/enum when jit-lock etc. starts in the middle of it.

I've got a solution, though it's not fully worked out yet.  Give me till
later on today, possibly tomorrow.

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-03 15:14   ` Eli Zaretskii
@ 2011-12-03 15:32     ` Sujith
  0 siblings, 0 replies; 42+ messages in thread
From: Sujith @ 2011-12-03 15:32 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: acm, emacs-devel

Eli Zaretskii wrote:
> Do you see any significant difference in performance between when
> point is inside of a very large comment, like at the beginning of
> src/xdisp.c, and when point is in "normal" C code, with only
> relatively short comments?

Yep, with 24.0.92 I can see this behavior. And it's easily reproducible too.

* Open a new C file (say a.c)
* Copy all text from COPYING.
* Paste into a.c
* Try to scroll backwards.

And here the CPU usage maxes out and doesn't really recover.

Sujith



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-03 15:18 ` Alan Mackenzie
@ 2011-12-03 16:19   ` Eli Zaretskii
  2011-12-13 15:31   ` Kan-Ru Chen
  1 sibling, 0 replies; 42+ messages in thread
From: Eli Zaretskii @ 2011-12-03 16:19 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel

> Date: Sat, 3 Dec 2011 15:18:24 +0000
> From: Alan Mackenzie <acm@muc.de>
> Cc: emacs-devel@gnu.org
> 
> By a happy coincidence, I've just tracked down another sluggishness (in
> large array initialisations, reported by Peter Milliken on bug-cc-mode)
> which looks to have exactly the same cause, namely
> `c-font-lock-enclosing-decls' which fontifies the innards of a
> struct/union/enum when jit-lock etc. starts in the middle of it.

Can this explain the slowness when inside a long comment?

> I've got a solution, though it's not fully worked out yet.  Give me till
> later on today, possibly tomorrow.

Take your time, it's not a catastrophe.  Not many C source files have
such long commentary sections as xdisp.c.  It's just that I use
xdisp.c for my benchmark, since it's a large file.

Thanks.



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-03 13:19 Slow fontification in C mode buffers Eli Zaretskii
  2011-12-03 15:03 ` Sujith
  2011-12-03 15:18 ` Alan Mackenzie
@ 2011-12-03 21:15 ` Alan Mackenzie
  2011-12-04  6:00   ` Eli Zaretskii
  2 siblings, 1 reply; 42+ messages in thread
From: Alan Mackenzie @ 2011-12-03 21:15 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

Hello again, Eli!

On Sat, Dec 03, 2011 at 03:19:47PM +0200, Eli Zaretskii wrote:
> Did anyone else notice that scrolling the first time through a very
> large comment in C mode became extremely slow lately?  For example,
> visit xdisp.c in "emacs -Q", type M-<, then hit C-v several times in
> quick succession.  Then watch in disbelief how long it takes for Emacs
> to scroll by these several screenfuls.  In my case (6.5 year old
> hardware), I even see the "hourglass cursor" kick in, and the CPU
> meter shows 100% utilization of one execution unit for about 5
> seconds.

> If you then type M-< and again hit C-v several times, scrolling will
> be at its usual speed.  Scrolling outside of large comments is also
> reasonably fast, even for the first time.

> Therefore, my prime suspect is font-lock, which is triggered by the
> need to display a portion of the buffer that was not fontified yet.
> This suspicion is corroborated by the fact that jit-stealth font-lock
> of xdisp.c causes extremely high peaks of CPU usage, and Emacs
> response time becomes very sluggish.

> Is there something in C Mode's arrangements for fontification,
> specifically related to comments, that was changed lately and that can
> explain this slowdown?

Would you please try out this patch.  It is not, perhaps, as fast as one
might wish, but it is a considerable improvement nonetheless.



=== modified file 'lisp/progmodes/cc-engine.el'
*** lisp/progmodes/cc-engine.el	2011-11-23 07:03:56 +0000
--- lisp/progmodes/cc-engine.el	2011-12-03 20:58:54 +0000
***************
*** 195,203 ****
        (not prevstate)
      (> arg 0)))
  
- ;; Dynamically bound cache for `c-in-literal'.
- (defvar c-in-literal-cache t)
- 
  \f
  ;; Basic handling of preprocessor directives.
  
--- 195,200 ----
***************
*** 2093,2120 ****
  ;; `c-state-literal-at'.
  
  (defsubst c-state-pp-to-literal (from to)
!   ;; Do a parse-partial-sexp from FROM to TO, returning the bounds of any
!   ;; literal at TO as a cons, otherwise NIL.
!   ;; FROM must not be in a literal, and the buffer should already be wide
!   ;; enough.
    (save-excursion
!     (let ((s (parse-partial-sexp from to)))
        (when (or (nth 3 s) (nth 4 s))	; in a string or comment
  	(parse-partial-sexp (point) (point-max)
  			    nil			 ; TARGETDEPTH
  			    nil			 ; STOPBEFORE
  			    s			 ; OLDSTATE
! 			    'syntax-table)	 ; stop at end of literal
! 	(cons (nth 8 s) (point))))))
! 
! (defun c-state-literal-at (here)
!   ;; If position HERE is inside a literal, return (START . END), the
!   ;; boundaries of the literal (which may be outside the accessible bit of the
!   ;; buffer).  Otherwise, return nil.
!   ;;
!   ;; This function is almost the same as `c-literal-limits'.  It differs in
!   ;; that it is a lower level function, and that it rigourously follows the
!   ;; syntax from BOB, whereas `c-literal-limits' uses a "local" safe position.
    ;;
    ;; NOTE: This function manipulates `c-state-nonlit-pos-cache'.  This cache
    ;; MAY NOT contain any positions within macros, since macros are frequently
--- 2090,2124 ----
  ;; `c-state-literal-at'.
  
  (defsubst c-state-pp-to-literal (from to)
!   ;; Do a parse-partial-sexp from FROM to TO, returning either
!   ;;     (STATE TYPE (BEG . END))     if TO is in a literal; or
!   ;;     (STATE)                      otherwise,
!   ;; where STATE is the parsing state at TO, TYPE is the type of the literal
!   ;; (one of 'c, 'c++, 'string) and (BEG . END) is the boundaries of the literal.
!   ;;
!   ;; Only elements 3 (in a string), 4 (in a comment), 5 (following a quote),
!   ;; 7 (comment type) and 8 (start of comment/string) (and possibly 9) of
!   ;; STATE are valid.
    (save-excursion
!     (let ((s (parse-partial-sexp from to))
! 	  ty)
        (when (or (nth 3 s) (nth 4 s))	; in a string or comment
+ 	(setq ty (cond
+ 		  ((nth 3 s) 'string)
+ 		  ((eq (nth 7 s) t) 'c++)
+ 		  (t 'c)))
  	(parse-partial-sexp (point) (point-max)
  			    nil			 ; TARGETDEPTH
  			    nil			 ; STOPBEFORE
  			    s			 ; OLDSTATE
! 			    'syntax-table))	 ; stop at end of literal
!       (if ty
! 	  `(,s ,ty (,(nth 8 s) . ,(point)))
! 	`(,s)))))
! 
! (defun c-state-safe-place (here)
!   ;; Return a buffer position before HERE which is "safe", i.e. outside any
!   ;; string, comment, or macro.
    ;;
    ;; NOTE: This function manipulates `c-state-nonlit-pos-cache'.  This cache
    ;; MAY NOT contain any positions within macros, since macros are frequently
***************
*** 2137,2143 ****
  
  	(while (<= (setq npos (+ pos c-state-nonlit-pos-interval))
  		   here)
! 	  (setq lit (c-state-pp-to-literal pos npos))
  	  (setq pos (or (cdr lit) npos)) ; end of literal containing npos.
  	  (goto-char pos)
  	  (when (and (c-beginning-of-macro) (/= (point) pos))
--- 2141,2147 ----
  
  	(while (<= (setq npos (+ pos c-state-nonlit-pos-interval))
  		   here)
! 	  (setq lit (car (cddr (c-state-pp-to-literal pos npos))))
  	  (setq pos (or (cdr lit) npos)) ; end of literal containing npos.
  	  (goto-char pos)
  	  (when (and (c-beginning-of-macro) (/= (point) pos))
***************
*** 2148,2156 ****
  
  	(if (> pos c-state-nonlit-pos-cache-limit)
  	    (setq c-state-nonlit-pos-cache-limit pos))
! 	(if (< pos here)
! 	    (setq lit (c-state-pp-to-literal pos here)))
! 	lit))))
  
  (defsubst c-state-lit-beg (pos)
    ;; Return the start of the literal containing POS, or POS itself.
--- 2152,2173 ----
  
  	(if (> pos c-state-nonlit-pos-cache-limit)
  	    (setq c-state-nonlit-pos-cache-limit pos))
! 	pos))))
! 	
! (defun c-state-literal-at (here)
!   ;; If position HERE is inside a literal, return (START . END), the
!   ;; boundaries of the literal (which may be outside the accessible bit of the
!   ;; buffer).  Otherwise, return nil.
!   ;;
!   ;; This function is almost the same as `c-literal-limits'.  Previously, it
!   ;; differed in that it was a lower level function, and that it rigourously
!   ;; followed the syntax from BOB.  `c-literal-limits' is now (2011-12)
!   ;; virtually identical to this function.
!   (save-restriction
!     (widen)
!     (save-excursion
!       (let ((pos (c-state-safe-place here)))
! 	    (car (cddr (c-state-pp-to-literal pos here)))))))
  
  (defsubst c-state-lit-beg (pos)
    ;; Return the start of the literal containing POS, or POS itself.
***************
*** 4181,4187 ****
  \f
  ;; Tools for handling comments and string literals.
  
! (defun c-slow-in-literal (&optional lim detect-cpp)
    "Return the type of literal point is in, if any.
  The return value is `c' if in a C-style comment, `c++' if in a C++
  style comment, `string' if in a string literal, `pound' if DETECT-CPP
--- 4198,4204 ----
  \f
  ;; Tools for handling comments and string literals.
  
! (defun c-in-literal (&optional lim detect-cpp)
    "Return the type of literal point is in, if any.
  The return value is `c' if in a C-style comment, `c++' if in a C++
  style comment, `string' if in a string literal, `pound' if DETECT-CPP
***************
*** 4194,4260 ****
  
  Note that this function might do hidden buffer changes.  See the
  comment at the start of cc-engine.el for more info."
! 
!   (if (and (vectorp c-in-literal-cache)
! 	   (= (point) (aref c-in-literal-cache 0)))
!       (aref c-in-literal-cache 1)
!     (let ((rtn (save-excursion
! 		 (let* ((pos (point))
! 			(lim (or lim (progn
! 				       (c-beginning-of-syntax)
! 				       (point))))
! 			(state (parse-partial-sexp lim pos)))
! 		   (cond
! 		    ((elt state 3) 'string)
! 		    ((elt state 4) (if (elt state 7) 'c++ 'c))
! 		    ((and detect-cpp (c-beginning-of-macro lim)) 'pound)
! 		    (t nil))))))
!       ;; cache this result if the cache is enabled
!       (if (not c-in-literal-cache)
! 	  (setq c-in-literal-cache (vector (point) rtn)))
!       rtn)))
! 
! ;; XEmacs has a built-in function that should make this much quicker.
! ;; I don't think we even need the cache, which makes our lives more
! ;; complicated anyway.  In this case, lim is only used to detect
! ;; cpp directives.
! ;;
! ;; Note that there is a bug in XEmacs's buffer-syntactic-context when used in
! ;; conjunction with syntax-table-properties.  The bug is present in, e.g.,
! ;; XEmacs 21.4.4.  It manifested itself thus:
! ;;
! ;; Starting with an empty AWK Mode buffer, type
! ;; /regexp/ {<C-j>
! ;; Point gets wrongly left at column 0, rather than being indented to tab-width.
! ;;
! ;; AWK Mode is designed such that when the first / is typed, it gets the
! ;; syntax-table property "string fence".  When the second / is typed, BOTH /s
! ;; are given the s-t property "string".  However, buffer-syntactic-context
! ;; fails to take account of the change of the s-t property on the opening / to
! ;; "string", and reports that the { is within a string started by the second /.
! ;;
! ;; The workaround for this is for the AWK Mode initialization to switch the
! ;; defalias for c-in-literal to c-slow-in-literal.  This will slow down other
! ;; cc-modes in XEmacs whenever an awk-buffer has been initialized.
! ;;
! ;; (Alan Mackenzie, 2003/4/30).
! 
! (defun c-fast-in-literal (&optional lim detect-cpp)
!   ;; This function might do hidden buffer changes.
!   (let ((context (buffer-syntactic-context)))
!     (cond
!      ((eq context 'string) 'string)
!      ((eq context 'comment) 'c++)
!      ((eq context 'block-comment) 'c)
!      ((and detect-cpp (save-excursion (c-beginning-of-macro lim))) 'pound))))
! 
! (defalias 'c-in-literal
!   (if (fboundp 'buffer-syntactic-context)
!     'c-fast-in-literal                  ; XEmacs
!     'c-slow-in-literal))                ; GNU Emacs
! 
! ;; The defalias above isn't enough to shut up the byte compiler.
! (cc-bytecomp-defun c-in-literal)
  
  (defun c-literal-limits (&optional lim near not-in-delimiter)
    "Return a cons of the beginning and end positions of the comment or
--- 4211,4222 ----
  
  Note that this function might do hidden buffer changes.  See the
  comment at the start of cc-engine.el for more info."
!   (let* ((safe-place (c-state-safe-place (point)))
! 	 (lit (c-state-pp-to-literal safe-place (point))))
!     (or (cadr lit)
! 	(and detect-cpp
! 	     (save-excursion (c-beginning-of-macro))
! 	     'pound))))
  
  (defun c-literal-limits (&optional lim near not-in-delimiter)
    "Return a cons of the beginning and end positions of the comment or
***************
*** 4273,4336 ****
  
    (save-excursion
      (let* ((pos (point))
! 	   (lim (or lim (progn
! 			  (c-beginning-of-syntax)
! 			  (point))))
! 	   (state (parse-partial-sexp lim pos)))
! 
!       (cond ((elt state 3)		; String.
! 	     (goto-char (elt state 8))
! 	     (cons (point) (or (c-safe (c-forward-sexp 1) (point))
! 			       (point-max))))
! 
! 	    ((elt state 4)		; Comment.
! 	     (goto-char (elt state 8))
! 	     (cons (point) (progn (c-forward-single-comment) (point))))
! 
! 	    ((and (not not-in-delimiter)
! 		  (not (elt state 5))
! 		  (eq (char-before) ?/)
! 		  (looking-at "[/*]"))
! 	     ;; We're standing in a comment starter.
! 	     (backward-char 1)
! 	     (cons (point) (progn (c-forward-single-comment) (point))))
! 
! 	    (near
! 	     (goto-char pos)
! 
! 	     ;; Search forward for a literal.
! 	     (skip-chars-forward " \t")
! 
! 	     (cond
! 	      ((looking-at c-string-limit-regexp) ; String.
! 	       (cons (point) (or (c-safe (c-forward-sexp 1) (point))
! 				 (point-max))))
  
! 	      ((looking-at c-comment-start-regexp) ; Line or block comment.
! 	       (cons (point) (progn (c-forward-single-comment) (point))))
  
! 	      (t
! 	       ;; Search backward.
! 	       (skip-chars-backward " \t")
  
! 	       (let ((end (point)) beg)
! 		 (cond
! 		  ((save-excursion
! 		     (< (skip-syntax-backward c-string-syntax) 0)) ; String.
! 		   (setq beg (c-safe (c-backward-sexp 1) (point))))
! 
! 		  ((and (c-safe (forward-char -2) t)
! 			(looking-at "*/"))
! 		   ;; Block comment.  Due to the nature of line
! 		   ;; comments, they will always be covered by the
! 		   ;; normal case above.
! 		   (goto-char end)
! 		   (c-backward-single-comment)
! 		   ;; If LIM is bogus, beg will be bogus.
! 		   (setq beg (point))))
  
! 		 (if beg (cons beg end))))))
! 	    ))))
  
  ;; In case external callers use this; it did have a docstring.
  (defalias 'c-literal-limits-fast 'c-literal-limits)
--- 4235,4290 ----
  
    (save-excursion
      (let* ((pos (point))
! 	   (lim (or lim (c-state-safe-place pos)))
! 	   (pp-to-lit (c-state-pp-to-literal lim pos))
! 	   (state (car pp-to-lit))
! 	   (lit-type (cadr pp-to-lit))
! 	   (lit-limits (car (cddr pp-to-lit))))
  
!       (cond
!        (lit-limits)
!        ((and (not not-in-delimiter)
! 	     (not (elt state 5))
! 	     (eq (char-before) ?/)
! 	     (looking-at "[/*]")) ; FIXME!!! use c-line/block-comment-starter.  2008-09-28.
! 	;; We're standing in a comment starter.
! 	(backward-char 1)
! 	(cons (point) (progn (c-forward-single-comment) (point))))
  
!        (near
! 	(goto-char pos)
! 	;; Search forward for a literal.
! 	(skip-chars-forward " \t")
! 	(cond
! 	 ((looking-at c-string-limit-regexp) ; String.
! 	  (cons (point) (or (c-safe (c-forward-sexp 1) (point))
! 			    (point-max))))
! 
! 	 ((looking-at c-comment-start-regexp) ; Line or block comment.
! 	  (cons (point) (progn (c-forward-single-comment) (point))))
! 
! 	 (t
! 	  ;; Search backward.
! 	  (skip-chars-backward " \t")
  
! 	  (let ((end (point)) beg)
! 	    (cond
! 	     ((save-excursion
! 		(< (skip-syntax-backward c-string-syntax) 0)) ; String.
! 	      (setq beg (c-safe (c-backward-sexp 1) (point))))
! 
! 	     ((and (c-safe (forward-char -2) t)
! 		   (looking-at "*/"))
! 	      ;; Block comment.  Due to the nature of line
! 	      ;; comments, they will always be covered by the
! 	      ;; normal case above.
! 	      (goto-char end)
! 	      (c-backward-single-comment)
! 	      ;; If LIM is bogus, beg will be bogus.
! 	      (setq beg (point))))
  
! 	    (if beg (cons beg end))))))
!        ))))
  
  ;; In case external callers use this; it did have a docstring.
  (defalias 'c-literal-limits-fast 'c-literal-limits)

=== modified file 'lisp/progmodes/cc-fonts.el'
*** lisp/progmodes/cc-fonts.el	2011-11-20 02:29:42 +0000
--- lisp/progmodes/cc-fonts.el	2011-12-03 20:47:42 +0000
***************
*** 1535,1544 ****
    ;; Fontification".
    (let* ((paren-state (c-parse-state))
  	 (start (point))
  	 decl-context bo-decl in-typedef type-type ps-elt)
  
      ;; First, are we actually in a "local" declaration?
!     (setq decl-context (c-beginning-of-decl-1)
  	  bo-decl (point)
  	  in-typedef (looking-at c-typedef-key))
      (if in-typedef (c-forward-token-2))
--- 1535,1545 ----
    ;; Fontification".
    (let* ((paren-state (c-parse-state))
  	 (start (point))
+ 	 (bod-lim (max (- (point) 500) (point-min)))
  	 decl-context bo-decl in-typedef type-type ps-elt)
  
      ;; First, are we actually in a "local" declaration?
!     (setq decl-context (c-beginning-of-decl-1 bod-lim)
  	  bo-decl (point)
  	  in-typedef (looking-at c-typedef-key))
      (if in-typedef (c-forward-token-2))

=== modified file 'lisp/progmodes/cc-mode.el'
*** lisp/progmodes/cc-mode.el	2011-11-20 02:29:42 +0000
--- lisp/progmodes/cc-mode.el	2011-12-03 21:01:50 +0000
***************
*** 1562,1571 ****
    (c-common-init 'awk-mode)
    (c-awk-unstick-NL-prop)
  
-   ;; Prevent XEmacs's buffer-syntactic-context being used.  See the comment
-   ;; in cc-engine.el, just before (defun c-fast-in-literal ...
-   (defalias 'c-in-literal 'c-slow-in-literal)
- 
    (c-run-mode-hooks 'c-mode-common-hook 'awk-mode-hook)
    (c-update-modeline))
  
--- 1562,1567 ----


-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-03 21:15 ` Alan Mackenzie
@ 2011-12-04  6:00   ` Eli Zaretskii
  0 siblings, 0 replies; 42+ messages in thread
From: Eli Zaretskii @ 2011-12-04  6:00 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel

> Date: Sat, 3 Dec 2011 21:15:29 +0000
> Cc: emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> Would you please try out this patch.  It is not, perhaps, as fast as one
> might wish, but it is a considerable improvement nonetheless.

It indeed makes scrolling considerably faster inside large comments.

Thanks.



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-03 15:18 ` Alan Mackenzie
  2011-12-03 16:19   ` Eli Zaretskii
@ 2011-12-13 15:31   ` Kan-Ru Chen
  2011-12-14 11:19     ` Alan Mackenzie
                       ` (3 more replies)
  1 sibling, 4 replies; 42+ messages in thread
From: Kan-Ru Chen @ 2011-12-13 15:31 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Eli Zaretskii, emacs-devel

Alan Mackenzie <acm@muc.de> writes:

> By a happy coincidence, I've just tracked down another sluggishness (in
> large array initialisations, reported by Peter Milliken on bug-cc-mode)
> which looks to have exactly the same cause, namely
> `c-font-lock-enclosing-decls' which fontifies the innards of a
> struct/union/enum when jit-lock etc. starts in the middle of it.

Is this the same problem?

http://debbugs.gnu.org/cgi/bugreport.cgi?bug=10288

I cannot find the original report by Peter.

-- 
Kanru



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-13 15:31   ` Kan-Ru Chen
@ 2011-12-14 11:19     ` Alan Mackenzie
  2011-12-14 11:30     ` Alan Mackenzie
                       ` (2 subsequent siblings)
  3 siblings, 0 replies; 42+ messages in thread
From: Alan Mackenzie @ 2011-12-14 11:19 UTC (permalink / raw)
  To: Kan-Ru Chen; +Cc: Eli Zaretskii, emacs-devel

Hello, Kanru.

On Tue, Dec 13, 2011 at 11:31:36PM +0800, Kan-Ru Chen wrote:
> Alan Mackenzie <acm@muc.de> writes:

> > By a happy coincidence, I've just tracked down another sluggishness (in
> > large array initialisations, reported by Peter Milliken on bug-cc-mode)
> > which looks to have exactly the same cause, namely
> > `c-font-lock-enclosing-decls' which fontifies the innards of a
> > struct/union/enum when jit-lock etc. starts in the middle of it.

> Is this the same problem?

> http://debbugs.gnu.org/cgi/bugreport.cgi?bug=10288

I don't think it is.  I've tried it out on the version fixed for Peter,
and it still goes like a snail.

> I cannot find the original report by Peter.

He sent his bug report direct to bug-cc-mode@gnu.org.  :-) There are
instructions for signing up to this mailing list at
http://cc-mode@sourceforge.net.

> -- 
> Kanru



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-13 15:31   ` Kan-Ru Chen
  2011-12-14 11:19     ` Alan Mackenzie
@ 2011-12-14 11:30     ` Alan Mackenzie
  2011-12-14 12:23       ` Alan Mackenzie
  2011-12-14 13:14     ` Alan Mackenzie
  2011-12-15 13:43     ` Alan Mackenzie
  3 siblings, 1 reply; 42+ messages in thread
From: Alan Mackenzie @ 2011-12-14 11:30 UTC (permalink / raw)
  To: Kan-Ru Chen; +Cc: Eli Zaretskii, emacs-devel

Hello again, Kanru!

On Tue, Dec 13, 2011 at 11:31:36PM +0800, Kan-Ru Chen wrote:
> Alan Mackenzie <acm@muc.de> writes:

> > By a happy coincidence, I've just tracked down another sluggishness (in
> > large array initialisations, reported by Peter Milliken on bug-cc-mode)
> > which looks to have exactly the same cause, namely
> > `c-font-lock-enclosing-decls' which fontifies the innards of a
> > struct/union/enum when jit-lock etc. starts in the middle of it.

> Is this the same problem?

NO!

> http://debbugs.gnu.org/cgi/bugreport.cgi?bug=10288

I've seen what the problem is.  You've got lots of declarations not
separated by commas.  If DEFINE_DATA_ENTRY is a macro "with its own
semicolon", follow the instructions in chapter "Macros with ;" in the CC
Mode manual.

> -- 
> Kanru

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-14 11:30     ` Alan Mackenzie
@ 2011-12-14 12:23       ` Alan Mackenzie
  0 siblings, 0 replies; 42+ messages in thread
From: Alan Mackenzie @ 2011-12-14 12:23 UTC (permalink / raw)
  To: Kan-Ru Chen; +Cc: Eli Zaretskii, emacs-devel

On Wed, Dec 14, 2011 at 11:30:25AM +0000, Alan Mackenzie wrote:
> Hello again, Kanru!

> On Tue, Dec 13, 2011 at 11:31:36PM +0800, Kan-Ru Chen wrote:
> > Alan Mackenzie <acm@muc.de> writes:

> > > By a happy coincidence, I've just tracked down another sluggishness (in
> > > large array initialisations, reported by Peter Milliken on bug-cc-mode)
> > > which looks to have exactly the same cause, namely
> > > `c-font-lock-enclosing-decls' which fontifies the innards of a
> > > struct/union/enum when jit-lock etc. starts in the middle of it.

> > Is this the same problem?

> NO!

> > http://debbugs.gnu.org/cgi/bugreport.cgi?bug=10288

> I've seen what the problem is.  You've got lots of declarations not
> separated by commas.  If DEFINE_DATA_ENTRY is a macro "with its own
> semicolon", follow the instructions in chapter "Macros with ;" in the CC
> Mode manual.

Sorry, please ignore the previous paragraph.  It's rubbish!

> > -- 
> > Kanru

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-13 15:31   ` Kan-Ru Chen
  2011-12-14 11:19     ` Alan Mackenzie
  2011-12-14 11:30     ` Alan Mackenzie
@ 2011-12-14 13:14     ` Alan Mackenzie
  2011-12-14 15:02       ` Kan-Ru Chen
  2011-12-15 13:43     ` Alan Mackenzie
  3 siblings, 1 reply; 42+ messages in thread
From: Alan Mackenzie @ 2011-12-14 13:14 UTC (permalink / raw)
  To: Kan-Ru Chen; +Cc: Eli Zaretskii, emacs-devel

Hello, yet again!

On Tue, Dec 13, 2011 at 11:31:36PM +0800, Kan-Ru Chen wrote:
> Alan Mackenzie <acm@muc.de> writes:

> > By a happy coincidence, I've just tracked down another sluggishness (in
> > large array initialisations, reported by Peter Milliken on bug-cc-mode)
> > which looks to have exactly the same cause, namely
> > `c-font-lock-enclosing-decls' which fontifies the innards of a
> > struct/union/enum when jit-lock etc. starts in the middle of it.

> Is this the same problem?

> http://debbugs.gnu.org/cgi/bugreport.cgi?bug=10288

As a workaround, put this into your .emacs:

(add-hook 'c-mode-common-hook
          (lambda () (setq c-macro-with-semi-re nil)))
.  It gives a speed up of about a factor of 4.

As a more drastic workaround, disable font-locking with
    M-x font-lock-mode
.

> -- 
> Kanru

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-14 13:14     ` Alan Mackenzie
@ 2011-12-14 15:02       ` Kan-Ru Chen
  0 siblings, 0 replies; 42+ messages in thread
From: Kan-Ru Chen @ 2011-12-14 15:02 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Eli Zaretskii, emacs-devel

Hi!

Alan Mackenzie <acm@muc.de> writes:

> Hello, yet again!
>
> On Tue, Dec 13, 2011 at 11:31:36PM +0800, Kan-Ru Chen wrote:
>> Alan Mackenzie <acm@muc.de> writes:
>
>> > By a happy coincidence, I've just tracked down another sluggishness (in
>> > large array initialisations, reported by Peter Milliken on bug-cc-mode)
>> > which looks to have exactly the same cause, namely
>> > `c-font-lock-enclosing-decls' which fontifies the innards of a
>> > struct/union/enum when jit-lock etc. starts in the middle of it.
>
>> Is this the same problem?
>
>> http://debbugs.gnu.org/cgi/bugreport.cgi?bug=10288

I was editing this file

https://hg.mozilla.org/mozilla-central/raw-file/tip/dom/base/nsDOMClassInfo.cpp

The one in bug report is a reduced example that has same behavior

> As a workaround, put this into your .emacs:
>
> (add-hook 'c-mode-common-hook
>           (lambda () (setq c-macro-with-semi-re nil)))
> .  It gives a speed up of about a factor of 4.

Thanks! "Macros with ;" is a very useful tip too.

> As a more drastic workaround, disable font-locking with
>     M-x font-lock-mode

The fix for Peter also helps a bit.

-- 
Kanru



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-13 15:31   ` Kan-Ru Chen
                       ` (2 preceding siblings ...)
  2011-12-14 13:14     ` Alan Mackenzie
@ 2011-12-15 13:43     ` Alan Mackenzie
  2011-12-15 16:16       ` Kan-Ru Chen
  3 siblings, 1 reply; 42+ messages in thread
From: Alan Mackenzie @ 2011-12-15 13:43 UTC (permalink / raw)
  To: Kan-Ru Chen; +Cc: Eli Zaretskii, emacs-devel

Hello mk.4 Kanru.

On Tue, Dec 13, 2011 at 11:31:36PM +0800, Kan-Ru Chen wrote:
> Alan Mackenzie <acm@muc.de> writes:

> > By a happy coincidence, I've just tracked down another sluggishness (in
> > large array initialisations, reported by Peter Milliken on bug-cc-mode)
> > which looks to have exactly the same cause, namely
> > `c-font-lock-enclosing-decls' which fontifies the innards of a
> > struct/union/enum when jit-lock etc. starts in the middle of it.

> Is this the same problem?

> http://debbugs.gnu.org/cgi/bugreport.cgi?bug=10288

> I cannot find the original report by Peter.


Would you please try the following patch and let me know how it goes.
Thanks!


*** orig/cc-engine.el	2011-12-15 09:06:28.000000000 +0000
--- cc-engine.el	2011-12-15 13:41:25.000000000 +0000
***************
*** 8073,8078 ****
--- 8073,8094 ----
  	    next-open-brace (c-pull-open-brace paren-state)))
      open-brace))
  
+ (defun c-cheap-inside-bracelist-p (paren-state)
+   ;; Return the position of the L-brace if point is inside a brace list
+   ;; initialization of an array, etc.  This is an approximate function,
+   ;; designed for speed over accuracy.  We simply search for "= {" (naturally
+   ;; with syntactic whitespace allowed).  PAREN-STATE is the normal thing that
+   ;; it is everywhere else.
+   (let (b-pos)
+     (save-excursion
+       (while
+ 	  (and (setq b-pos (c-pull-open-brace paren-state))
+ 	       (progn (goto-char b-pos)
+ 		      (c-backward-sws)
+ 		      (c-backward-token-2)
+ 		      (not (looking-at "=")))))
+       b-pos)))
+ 
  (defun c-inside-bracelist-p (containing-sexp paren-state)
    ;; return the buffer position of the beginning of the brace list
    ;; statement if we're inside a brace list, otherwise return nil.
*** orig/cc-fonts.el	2011-12-15 09:06:28.000000000 +0000
--- cc-fonts.el	2011-12-15 13:15:43.000000000 +0000
***************
*** 1394,1399 ****
--- 1394,1405 ----
  	      (c-fontify-recorded-types-and-refs)
  	      nil)
  
+ 	     ;; If point is inside a bracelist, there's no point checking it
+ 	     ;; being at a declarator.
+ 	     ((let ((paren-state (c-parse-state)))
+ 		(c-cheap-inside-bracelist-p paren-state))
+ 	      nil)
+ 
  	     (t
  	      ;; Are we at a declarator?  Try to go back to the declaration
  	      ;; to check this.  If we get there, check whether a "typedef"

> -- 
> Kanru

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-15 13:43     ` Alan Mackenzie
@ 2011-12-15 16:16       ` Kan-Ru Chen
  2011-12-15 18:12         ` Alan Mackenzie
  0 siblings, 1 reply; 42+ messages in thread
From: Kan-Ru Chen @ 2011-12-15 16:16 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Eli Zaretskii, emacs-devel

Alan Mackenzie <acm@muc.de> writes:

> Would you please try the following patch and let me know how it goes.
> Thanks!

No change. c-cheap-inside-bracelist-p seems not called at all.

> *** orig/cc-engine.el	2011-12-15 09:06:28.000000000 +0000
> --- cc-engine.el	2011-12-15 13:41:25.000000000 +0000
> ***************
> *** 8073,8078 ****
> --- 8073,8094 ----
>   	    next-open-brace (c-pull-open-brace paren-state)))
>       open-brace))
>   
> + (defun c-cheap-inside-bracelist-p (paren-state)
> +   ;; Return the position of the L-brace if point is inside a brace list
> +   ;; initialization of an array, etc.  This is an approximate function,
> +   ;; designed for speed over accuracy.  We simply search for "= {" (naturally
> +   ;; with syntactic whitespace allowed).  PAREN-STATE is the normal thing that
> +   ;; it is everywhere else.
> +   (let (b-pos)
> +     (save-excursion
> +       (while
> + 	  (and (setq b-pos (c-pull-open-brace paren-state))
> + 	       (progn (goto-char b-pos)
> + 		      (c-backward-sws)
> + 		      (c-backward-token-2)
> + 		      (not (looking-at "=")))))
> +       b-pos)))
> + 
>   (defun c-inside-bracelist-p (containing-sexp paren-state)
>     ;; return the buffer position of the beginning of the brace list
>     ;; statement if we're inside a brace list, otherwise return nil.
> *** orig/cc-fonts.el	2011-12-15 09:06:28.000000000 +0000
> --- cc-fonts.el	2011-12-15 13:15:43.000000000 +0000
> ***************
> *** 1394,1399 ****
> --- 1394,1405 ----
>   	      (c-fontify-recorded-types-and-refs)
>   	      nil)
>   
> + 	     ;; If point is inside a bracelist, there's no point checking it
> + 	     ;; being at a declarator.
> + 	     ((let ((paren-state (c-parse-state)))
> + 		(c-cheap-inside-bracelist-p paren-state))
> + 	      nil)
> + 
>   	     (t
>   	      ;; Are we at a declarator?  Try to go back to the declaration
>   	      ;; to check this.  If we get there, check whether a "typedef"
>
>> -- 
>> Kanru

-- 
Kanru



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-15 16:16       ` Kan-Ru Chen
@ 2011-12-15 18:12         ` Alan Mackenzie
  2011-12-16  2:32           ` Kan-Ru Chen
  0 siblings, 1 reply; 42+ messages in thread
From: Alan Mackenzie @ 2011-12-15 18:12 UTC (permalink / raw)
  To: Kan-Ru Chen; +Cc: emacs-devel

Hello, again.

On Fri, Dec 16, 2011 at 12:16:25AM +0800, Kan-Ru Chen wrote:
> Alan Mackenzie <acm@muc.de> writes:

> > Would you please try the following patch and let me know how it goes.
> > Thanks!

> No change. c-cheap-inside-bracelist-p seems not called at all.

Hmm.  The place c-cheap-inside-bracelist-p is inside
c-font-lock-declarations, it can scarcely avoid being called.

Forgive me for asking you this, but are you sure you byte compiled the
two files after patching them, etc.?

> -- 
> Kanru

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-15 18:12         ` Alan Mackenzie
@ 2011-12-16  2:32           ` Kan-Ru Chen
  2011-12-16 11:26             ` Alan Mackenzie
  0 siblings, 1 reply; 42+ messages in thread
From: Kan-Ru Chen @ 2011-12-16  2:32 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel

Alan Mackenzie <acm@muc.de> writes:

> Hello, again.
>
> On Fri, Dec 16, 2011 at 12:16:25AM +0800, Kan-Ru Chen wrote:
>> Alan Mackenzie <acm@muc.de> writes:
>
>> > Would you please try the following patch and let me know how it goes.
>> > Thanks!
>
>> No change. c-cheap-inside-bracelist-p seems not called at all.
>
> Hmm.  The place c-cheap-inside-bracelist-p is inside
> c-font-lock-declarations, it can scarcely avoid being called.
>
> Forgive me for asking you this, but are you sure you byte compiled the
> two files after patching them, etc.?

I forgot that I've set font-lock-maximum-decoration to 2. I tested with
emacs -Q again. The first font-lock is slow, but pretty fast after
that. It occasionally hangs when I C-v the buffer. Below is the
elp-results:

Function Name                            Call Count  Elapsed Time  Average Time
c-beginning-of-decl-1                    1203        269.68204399  0.2241746001
c-beginning-of-statement-1               1242        269.60064599  0.2170697632
c-crosses-statement-barrier-p            241143      258.95701700  0.0010738732
c-font-lock-declarations                 179         160.73329700  0.8979513798
c-find-decl-spots                        179         160.732037    0.8979443407
c-at-macro-vsemi-p                       336240      159.34210499  0.0004738939
c-in-literal                             336240      150.66956800  0.0004481012
c-slow-in-literal                        336240      149.19536500  0.0004437168
c-literal-limits                         374344      85.649792999  0.0002287996
c-beginning-of-syntax                    522725      73.183792999  0.0001400043
c-font-lock-enclosing-decls              179         57.476122000  0.3210956536
c-backward-sws                           1215297     12.826941000  1.055...e-05
c-beginning-of-macro                     746198      4.2144529999  5.647...e-06
c-parse-state                            3326        1.0435710000  0.0003137615
c-parse-state-1                          3326        0.9558269999  0.0002873803
c-forward-decl-or-cast-1                 2089        0.4252059999  0.0002035452
c-append-to-state-cache                  3178        0.3954000000  0.0001244178
c-font-lock-declarators                  135         0.3788929999  0.0028066148
c-syntactic-re-search-forward            432         0.3418039999  0.0007912129
c-forward-type                           5008        0.2934280000  5.859...e-05
c-remove-stale-state-cache               2819        0.2530829999  8.977...e-05
c-font-lock-<>-arglists                  179         0.1875940000  0.0010480111
c-font-lock-enum-tail                    179         0.1730750000  0.0009668994
c-parse-state-get-strategy               3326        0.149166      4.484...e-05
c-get-fallback-scan-pos                  330         0.1159620000  0.0003514000
c-forward-name                           3509        0.1159080000  3.303...e-05
c-remove-stale-state-cache-backwards     507         0.1071120000  0.0002112662
c-font-lock-complex-decl-prepare         179         0.0924410000  0.0005164301
c-backward-token-2                       6514        0.0913669999  1.402...e-05
c-cheap-inside-bracelist-p               1954        0.0872260000  4.463...e-05
c-state-literal-at                       520         0.0582760000  0.0001120692
c-forward-label                          707         0.0382930000  5.416...e-05
c-at-toplevel-p                          128         0.0342679999  0.0002677187
c-syntactic-content                      2688        0.0300650000  1.118...e-05
c-forward-sws                            8547        0.0256289999  2.998...e-06
c-state-balance-parens-backwards         506         0.0250620000  4.952...e-05
c-search-uplist-for-classkey             128         0.0244740000  0.0001912031
c-looking-at-decl-block                  128         0.0230999999  0.0001804687
c-syntactic-skip-backward                128         0.0213989999  0.0001671796
c-after-conditional                      204         0.0180919999  8.868...e-05
c-beginning-of-current-token             4902        0.0143600000  2.929...e-06
c-get-cache-scan-pos                     3474        0.0119859999  3.450...e-06
c-end-of-macro                           2192        0.0077970000  3.557...e-06
c-syntactic-end-of-macro                 245         0.0049240000  2.009...e-05
c-add-type                               258         0.0042930000  1.663...e-05
c-looking-at-inexpr-block                95          0.0039379999  4.145...e-05
c-forward-annotation                     2089        0.0028189999  1.349...e-06
c-skip-comments-and-strings              1694        0.0025100000  1.481...e-06
c-font-lock-invalid-string               392         0.0018759999  4.785...e-06
c-state-get-min-scan-pos                 3674        0.0011130000  3.029...e-07
c-most-enclosing-brace                   1142        0.0008480000  7.425...e-07
c-fontify-recorded-types-and-refs        475         0.0005930000  1.248...e-06
c-forward-keyword-clause                 33          0.000508      1.539...e-05
c-append-lower-brace-pair-to-state-cache 1           0.00038       0.00038
c-safe-position                          256         0.0003150000  1.230...e-06
c-forward-to-cpp-define-body             32          0.0002930000  9.156...e-06
c-end-of-current-token                   32          6.500...e-05  2.031...e-06
c-leave-cc-mode-mode                     6           1.300...e-05  2.166...e-06
c-forward-single-comment                 2           1e-05         5e-06

-- 
Kanru



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-16  2:32           ` Kan-Ru Chen
@ 2011-12-16 11:26             ` Alan Mackenzie
  2011-12-17 16:06               ` Kan-Ru Chen
  0 siblings, 1 reply; 42+ messages in thread
From: Alan Mackenzie @ 2011-12-16 11:26 UTC (permalink / raw)
  To: Kan-Ru Chen; +Cc: emacs-devel

Hello, Kanru.

On Fri, Dec 16, 2011 at 10:32:20AM +0800, Kan-Ru Chen wrote:
> Alan Mackenzie <acm@muc.de> writes:

> > Hello, again.

> > On Fri, Dec 16, 2011 at 12:16:25AM +0800, Kan-Ru Chen wrote:
> >> Alan Mackenzie <acm@muc.de> writes:

> >> > Would you please try the following patch and let me know how it goes.
> >> > Thanks!

> >> No change. c-cheap-inside-bracelist-p seems not called at all.

> > Hmm.  The place c-cheap-inside-bracelist-p is inside
> > c-font-lock-declarations, it can scarcely avoid being called.

> > Forgive me for asking you this, but are you sure you byte compiled the
> > two files after patching them, etc.?

> I forgot that I've set font-lock-maximum-decoration to 2. I tested with
> emacs -Q again. The first font-lock is slow, but pretty fast after
> that. It occasionally hangs when I C-v the buffer. Below is the
> elp-results:

You haven't said exactly how many operations, or what, you performed
before doing elp-results.  In my elp results below, I've:
(i) Loaded elp and instrumented the c- package.
(ii) Loaded your file.
(iii) Done M-x c++-mode
(iv) Done M-x elp-results (to clear the accumulated times)
(v) M->
(vi) M-x elp-results.

I've done this twice, once before my patch, once after.  See below.
(I've added some blank lines to your lines to make it easier to read.)

> Function Name                            Call Count  Elapsed Time  Average Time
> c-beginning-of-decl-1                    1203        269.68204399  0.2241746001
> c-beginning-of-statement-1               1242        269.60064599  0.2170697632
> c-crosses-statement-barrier-p            241143      258.95701700  0.0010738732
> c-font-lock-declarations                 179         160.73329700  0.8979513798
> c-find-decl-spots                        179         160.732037    0.8979443407

> c-at-macro-vsemi-p                       336240      159.34210499  0.0004738939
> c-in-literal                             336240      150.66956800  0.0004481012
> c-slow-in-literal                        336240      149.19536500  0.0004437168
> c-literal-limits                         374344      85.649792999  0.0002287996
> c-beginning-of-syntax                    522725      73.183792999  0.0001400043

> c-font-lock-enclosing-decls              179         57.476122000  0.3210956536
> c-backward-sws                           1215297     12.826941000  1.055...e-05
> c-beginning-of-macro                     746198      4.2144529999  5.647...e-06
> c-parse-state                            3326        1.0435710000  0.0003137615
> c-parse-state-1                          3326        0.9558269999  0.0002873803
[ .... ]

Here are the results.  Firstly, before my patch:

Function Name                                   Call Count Elapsed Time Average Time
c-font-lock-declarations                         7           17.564425     2.5092035714
c-find-decl-spots                                7           17.564371     2.5091958571
c-beginning-of-decl-1                            319         17.295377000  0.0542174827
c-beginning-of-statement-1                       333         17.290300000  0.0519228228
c-crosses-statement-barrier-p                    40773       14.900494999  0.0003654500

c-at-macro-vsemi-p                               41180       9.1869819999  0.0002230932
c-in-literal                                     41180       7.1732340000  0.0001741921
c-literal-limits                                 40126       3.7167549999  9.262...e-05
c-backward-sws                                   184630      2.7831049999  1.507...e-05
c-beginning-of-macro                             103323      0.6003159999  5.810...e-06

c-state-safe-place                               61257       0.4731989999  7.724...e-06
c-parse-state                                    326         0.2056420000  0.0006308036
c-parse-state-1                                  326         0.1998150000  0.0006129294
c-append-to-state-cache                          319         0.1097839999  0.0003441504
c-forward-decl-or-cast-1                         305         0.0845859999  0.0002773311


Secondly, after the patch.

Function Name                                   Call Count Elapsed Time Average Time
c-font-lock-declarations                         7           0.180145      0.025735
c-find-decl-spots                                7           0.1800869999  0.0257267142
c-font-lock-enclosing-decls                      7           0.0966709999  0.0138101428
c-beginning-of-decl-1                            14          0.0923319999  0.0065951428
c-beginning-of-statement-1                       28          0.0913820000  0.0032636428

c-parse-state                                    326         0.086686      0.0002659079
c-parse-state-1                                  326         0.0810159999  0.0002485153
c-crosses-statement-barrier-p                    147         0.0744919999  0.0005067482
c-forward-decl-or-cast-1                         305         0.0568969999  0.0001865475
c-forward-type                                   617         0.0472009999  7.650...e-05

c-append-to-state-cache                          319         0.0459020000  0.0001438934
c-at-macro-vsemi-p                               189         0.0408429999  0.0002161005
c-literal-limits                                 112         0.0402480000  0.0003593571
c-beginning-of-macro                             2186        0.0391449999  1.790...e-05
c-in-literal                                     189         0.0371179999  0.0001963915
[ .... ]
c-cheap-inside-bracelist-p                       305         0.0109840000  3.601...e-05


Would you please perform the test again, exactly as I have done, and then
send me the new results.  (The top 15 lines should be enough).

Thanks!

> -- 
> Kanru

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-16 11:26             ` Alan Mackenzie
@ 2011-12-17 16:06               ` Kan-Ru Chen
  2011-12-21 10:56                 ` Alan Mackenzie
                                   ` (2 more replies)
  0 siblings, 3 replies; 42+ messages in thread
From: Kan-Ru Chen @ 2011-12-17 16:06 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel

Alan Mackenzie <acm@muc.de> writes:

>> I forgot that I've set font-lock-maximum-decoration to 2. I tested with
>> emacs -Q again. The first font-lock is slow, but pretty fast after
>> that. It occasionally hangs when I C-v the buffer. Below is the
>> elp-results:
>
> You haven't said exactly how many operations, or what, you performed
> before doing elp-results.  In my elp results below, I've:
> (i) Loaded elp and instrumented the c- package.
> (ii) Loaded your file.
> (iii) Done M-x c++-mode
> (iv) Done M-x elp-results (to clear the accumulated times)
> (v) M->
> (vi) M-x elp-results.

Please forgive me for using the other files, it is closer to the real
case. You can get the file from

https://hg.mozilla.org/mozilla-central/raw-file/tip/dom/base/nsDOMClassInfo.cpp

(i) Loaded elp and instrumented the c- package.
(ii) Loaded nsDOMClassInfo.cpp
(iii) Done M-x c++-mode
(iv) Done M-x elp-results (to clear the accumulated times)
(v) C-s battery until failing to find 
(vi) M-x elp-results.

Before:

c-beginning-of-decl-1                          201         13.065947999  0.0650047164
c-beginning-of-statement-1                     229         13.061191     0.0570357685
c-crosses-statement-barrier-p                  35466       11.622212999  0.0003277001
c-font-lock-declarations                       16          9.4090929999  0.5880683124
c-find-decl-spots                              16          9.4089879999  0.5880617499

c-at-macro-vsemi-p                             46569       6.6139159999  0.0001420240
c-in-literal                                   46569       5.4569670000  0.0001171802
c-literal-limits                               51666       3.1393819999  6.076...e-05
c-backward-sws                                 176682      1.6644079999  9.420...e-06
c-beginning-of-macro                           104078      0.5568430000  5.350...e-06

c-state-safe-place                             72459       0.3154430000  4.353...e-06
c-parse-state                                  225         0.1421229999  0.0006316577
c-parse-state-1                                225         0.1385559999  0.0006158044
c-font-lock-enclosing-decls                    16          0.1365140000  0.0085321250
c-append-to-state-cache                        196         0.0641449999  0.0003272704

After:

c-beginning-of-decl-1                          137         9.6732900000  0.0706079562
c-beginning-of-statement-1                     165         9.6693369999  0.0586020424
c-crosses-statement-barrier-p                  25584       8.5505400000  0.0003342143
c-font-lock-declarations                       16          6.059768      0.3787355
c-find-decl-spots                              16          6.059666      0.378729125

c-at-macro-vsemi-p                             35149       4.7420429999  0.0001349126
c-in-literal                                   35149       4.0154739999  0.0001142414
c-literal-limits                               38962       2.5425719999  6.525...e-05
c-backward-sws                                 128214      1.1421259999  8.907...e-06
c-beginning-of-macro                           78145       0.3845660000  4.921...e-06

c-state-safe-place                             54703       0.2419970000  4.423...e-06
c-parse-state                                  317         0.1464209999  0.0004618958
c-font-lock-enclosing-decls                    16          0.137945      0.0086215625
c-parse-state-1                                317         0.1331939999  0.0004201703
c-font-lock-declarators                        24          0.065522      0.0027300833

-- 
Kanru



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-17 16:06               ` Kan-Ru Chen
@ 2011-12-21 10:56                 ` Alan Mackenzie
  2011-12-21 13:33                   ` Geoff Gole
  2011-12-22 16:06                   ` Kan-Ru Chen
  2012-01-13 19:12                 ` Alan Mackenzie
  2012-01-15 21:12                 ` Alan Mackenzie
  2 siblings, 2 replies; 42+ messages in thread
From: Alan Mackenzie @ 2011-12-21 10:56 UTC (permalink / raw)
  To: Kan-Ru Chen; +Cc: emacs-devel

Hello, Kanru.

On Sun, Dec 18, 2011 at 12:06:00AM +0800, Kan-Ru Chen wrote:

> Please forgive me for using the other files, it is closer to the real
> case. You can get the file from

> https://hg.mozilla.org/mozilla-central/raw-file/tip/dom/base/nsDOMClassInfo.cpp

OK, now I understand.  I feel your pain.  ;-(

> (i) Loaded elp and instrumented the c- package.
> (ii) Loaded nsDOMClassInfo.cpp
> (iii) Done M-x c++-mode
> (iv) Done M-x elp-results (to clear the accumulated times)
> (v) C-s battery until failing to find 
> (vi) M-x elp-results.

> Before:

> c-beginning-of-decl-1                          201         13.065947999  0.0650047164
> c-beginning-of-statement-1                     229         13.061191     0.0570357685
> c-crosses-statement-barrier-p                  35466       11.622212999  0.0003277001
> c-font-lock-declarations                       16          9.4090929999  0.5880683124
> c-find-decl-spots                              16          9.4089879999  0.5880617499

> c-at-macro-vsemi-p                             46569       6.6139159999  0.0001420240
> c-in-literal                                   46569       5.4569670000  0.0001171802
> c-literal-limits                               51666       3.1393819999  6.076...e-05
> c-backward-sws                                 176682      1.6644079999  9.420...e-06
> c-beginning-of-macro                           104078      0.5568430000  5.350...e-06

> c-state-safe-place                             72459       0.3154430000  4.353...e-06
> c-parse-state                                  225         0.1421229999  0.0006316577
> c-parse-state-1                                225         0.1385559999  0.0006158044
> c-font-lock-enclosing-decls                    16          0.1365140000  0.0085321250
> c-append-to-state-cache                        196         0.0641449999  0.0003272704

> After:

> c-beginning-of-decl-1                          137         9.6732900000  0.0706079562
> c-beginning-of-statement-1                     165         9.6693369999  0.0586020424
> c-crosses-statement-barrier-p                  25584       8.5505400000  0.0003342143
> c-font-lock-declarations                       16          6.059768      0.3787355
> c-find-decl-spots                              16          6.059666      0.378729125

> c-at-macro-vsemi-p                             35149       4.7420429999  0.0001349126
> c-in-literal                                   35149       4.0154739999  0.0001142414
> c-literal-limits                               38962       2.5425719999  6.525...e-05
> c-backward-sws                                 128214      1.1421259999  8.907...e-06
> c-beginning-of-macro                           78145       0.3845660000  4.921...e-06

> c-state-safe-place                             54703       0.2419970000  4.423...e-06
> c-parse-state                                  317         0.1464209999  0.0004618958
> c-font-lock-enclosing-decls                    16          0.137945      0.0086215625
> c-parse-state-1                                317         0.1331939999  0.0004201703
> c-font-lock-declarators                        24          0.065522      0.0027300833

It looks like my latest change is saving ~25% of the runtime.  That is
not enough, not nearly enough.  Also, your hardware is _much_ faster than
mine.  ;-)

The problem is quite clear - because of the dearth of
semicolons/right-braces, searching backwards to the beginning of
statements (function "c-beginning-of-statement-1") takes forever during
fontification.  To solve this will involve putting a limit on backward
search and somehow coping with not finding BO-statement.

This is going to be a lot of work, and I'm not going to be able to get it
finished this year.  Sorry.  But I'm sure the bug can be fixed.  

In the meantime, I suggest turning font-lock off for this file.

> -- Kanru

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-21 10:56                 ` Alan Mackenzie
@ 2011-12-21 13:33                   ` Geoff Gole
  2011-12-21 16:04                     ` Alan Mackenzie
                                       ` (2 more replies)
  2011-12-22 16:06                   ` Kan-Ru Chen
  1 sibling, 3 replies; 42+ messages in thread
From: Geoff Gole @ 2011-12-21 13:33 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Kan-Ru Chen, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 249 bytes --]

If another data point will help, I've also noticed *very* slow c-mode
fontification in a script generated header,
/usr/include/GL/gl_mangle.h. In case you don't have this header, a
copy is attached.

The file is basically several thousand #defines.

[-- Attachment #2: gl_mangle.h --]
[-- Type: text/x-chdr, Size: 110027 bytes --]

#if 0
#define GL_MANGLE_C1 "DO NOT EDIT!!! - TO REGENERATE from gl.h, EXECUTE THIS FILE IN SHELL (/bin/sh) and save the output"
#define GL_MANGLE_C2 "This file is used to create GL function protypes and aliases for the function names"
	files="gl.h glext.h"
#define GL_MANGLE_C3 "get regeneration header - copy everything in this file above the 'REGENERATE_TO_END' line"
	awk 	'!done; /^\/\*REGENERATE_TO_END/ {done=1}' $0
	echo ""
#define GL_MANGLE_C4 get aliases
	grep '^GLAPI' $files | sed -e 's/.*ENTRY gl\([^( ]*\).*$/#define gl\1		MANGLE(\1)/' | sort | uniq
	echo ""
	echo "#endif /* GL_MANGLE_H */"
	exit
#endif /* REGENERATION */

/*
 * If you compile Mesa with USE_MGL_NAMESPACE defined then you can link
 * your application both with OpenGL and Mesa.  The Mesa functions will
 * be redefined so they are prefixed with "mgl" instead of "gl".
 * Mgl contributed by Randy Frank (rfrank@rsinc.com)
 * Regneration code contributed by Ray Tice (rayt@ma.ultra.net)
 */

#ifndef GL_MANGLE_H
#define GL_MANGLE_H

#ifndef   MANGLE
#define   MANGLE(x) mgl##x
#endif  /*MANGLE*/

/*REGENERATE_TO_END-----------ALL LINES BELOW HERE GET REPLACED ON REGENERATION */

#define glAccum		MANGLE(Accum)
#define glActiveProgramEXT		MANGLE(ActiveProgramEXT)
#define glActiveStencilFaceEXT		MANGLE(ActiveStencilFaceEXT)
#define glActiveTextureARB		MANGLE(ActiveTextureARB)
#define glActiveTexture		MANGLE(ActiveTexture)
#define glActiveVaryingNV		MANGLE(ActiveVaryingNV)
#define glAlphaFragmentOp1ATI		MANGLE(AlphaFragmentOp1ATI)
#define glAlphaFragmentOp2ATI		MANGLE(AlphaFragmentOp2ATI)
#define glAlphaFragmentOp3ATI		MANGLE(AlphaFragmentOp3ATI)
#define glAlphaFunc		MANGLE(AlphaFunc)
#define glApplyTextureEXT		MANGLE(ApplyTextureEXT)
#define glAreProgramsResidentNV		MANGLE(AreProgramsResidentNV)
#define glAreTexturesResidentEXT		MANGLE(AreTexturesResidentEXT)
#define glAreTexturesResident		MANGLE(AreTexturesResident)
#define glArrayElementEXT		MANGLE(ArrayElementEXT)
#define glArrayElement		MANGLE(ArrayElement)
#define glArrayObjectATI		MANGLE(ArrayObjectATI)
#define glAsyncMarkerSGIX		MANGLE(AsyncMarkerSGIX)
#define glAttachObjectARB		MANGLE(AttachObjectARB)
#define glAttachShader		MANGLE(AttachShader)
#define glBeginConditionalRender		MANGLE(BeginConditionalRender)
#define glBeginConditionalRenderNV		MANGLE(BeginConditionalRenderNV)
#define glBeginFragmentShaderATI		MANGLE(BeginFragmentShaderATI)
#define glBegin		MANGLE(Begin)
#define glBeginOcclusionQueryNV		MANGLE(BeginOcclusionQueryNV)
#define glBeginPerfMonitorAMD		MANGLE(BeginPerfMonitorAMD)
#define glBeginQueryARB		MANGLE(BeginQueryARB)
#define glBeginQuery		MANGLE(BeginQuery)
#define glBeginTransformFeedbackEXT		MANGLE(BeginTransformFeedbackEXT)
#define glBeginTransformFeedback		MANGLE(BeginTransformFeedback)
#define glBeginTransformFeedbackNV		MANGLE(BeginTransformFeedbackNV)
#define glBeginVertexShaderEXT		MANGLE(BeginVertexShaderEXT)
#define glBeginVideoCaptureNV		MANGLE(BeginVideoCaptureNV)
#define glBindAttribLocationARB		MANGLE(BindAttribLocationARB)
#define glBindAttribLocation		MANGLE(BindAttribLocation)
#define glBindBufferARB		MANGLE(BindBufferARB)
#define glBindBufferBaseEXT		MANGLE(BindBufferBaseEXT)
#define glBindBufferBase		MANGLE(BindBufferBase)
#define glBindBufferBaseNV		MANGLE(BindBufferBaseNV)
#define glBindBuffer		MANGLE(BindBuffer)
#define glBindBufferOffsetEXT		MANGLE(BindBufferOffsetEXT)
#define glBindBufferOffsetNV		MANGLE(BindBufferOffsetNV)
#define glBindBufferRangeEXT		MANGLE(BindBufferRangeEXT)
#define glBindBufferRange		MANGLE(BindBufferRange)
#define glBindBufferRangeNV		MANGLE(BindBufferRangeNV)
#define glBindFragDataLocationEXT		MANGLE(BindFragDataLocationEXT)
#define glBindFragDataLocation		MANGLE(BindFragDataLocation)
#define glBindFragmentShaderATI		MANGLE(BindFragmentShaderATI)
#define glBindFramebufferEXT		MANGLE(BindFramebufferEXT)
#define glBindFramebuffer		MANGLE(BindFramebuffer)
#define glBindLightParameterEXT		MANGLE(BindLightParameterEXT)
#define glBindMaterialParameterEXT		MANGLE(BindMaterialParameterEXT)
#define glBindMultiTextureEXT		MANGLE(BindMultiTextureEXT)
#define glBindParameterEXT		MANGLE(BindParameterEXT)
#define glBindProgramARB		MANGLE(BindProgramARB)
#define glBindProgramNV		MANGLE(BindProgramNV)
#define glBindRenderbufferEXT		MANGLE(BindRenderbufferEXT)
#define glBindRenderbuffer		MANGLE(BindRenderbuffer)
#define glBindTexGenParameterEXT		MANGLE(BindTexGenParameterEXT)
#define glBindTextureEXT		MANGLE(BindTextureEXT)
#define glBindTexture		MANGLE(BindTexture)
#define glBindTextureUnitParameterEXT		MANGLE(BindTextureUnitParameterEXT)
#define glBindTransformFeedbackNV		MANGLE(BindTransformFeedbackNV)
#define glBindVertexArrayAPPLE		MANGLE(BindVertexArrayAPPLE)
#define glBindVertexArray		MANGLE(BindVertexArray)
#define glBindVertexShaderEXT		MANGLE(BindVertexShaderEXT)
#define glBindVideoCaptureStreamBufferNV		MANGLE(BindVideoCaptureStreamBufferNV)
#define glBindVideoCaptureStreamTextureNV		MANGLE(BindVideoCaptureStreamTextureNV)
#define glBinormal3bEXT		MANGLE(Binormal3bEXT)
#define glBinormal3bvEXT		MANGLE(Binormal3bvEXT)
#define glBinormal3dEXT		MANGLE(Binormal3dEXT)
#define glBinormal3dvEXT		MANGLE(Binormal3dvEXT)
#define glBinormal3fEXT		MANGLE(Binormal3fEXT)
#define glBinormal3fvEXT		MANGLE(Binormal3fvEXT)
#define glBinormal3iEXT		MANGLE(Binormal3iEXT)
#define glBinormal3ivEXT		MANGLE(Binormal3ivEXT)
#define glBinormal3sEXT		MANGLE(Binormal3sEXT)
#define glBinormal3svEXT		MANGLE(Binormal3svEXT)
#define glBinormalPointerEXT		MANGLE(BinormalPointerEXT)
#define glBitmap		MANGLE(Bitmap)
#define glBlendColorEXT		MANGLE(BlendColorEXT)
#define glBlendColor		MANGLE(BlendColor)
#define glBlendEquationEXT		MANGLE(BlendEquationEXT)
#define glBlendEquationi		MANGLE(BlendEquationi)
#define glBlendEquationIndexedAMD		MANGLE(BlendEquationIndexedAMD)
#define glBlendEquation		MANGLE(BlendEquation)
#define glBlendEquationSeparateATI		MANGLE(BlendEquationSeparateATI)
#define glBlendEquationSeparateEXT		MANGLE(BlendEquationSeparateEXT)
#define glBlendEquationSeparatei		MANGLE(BlendEquationSeparatei)
#define glBlendEquationSeparateIndexedAMD		MANGLE(BlendEquationSeparateIndexedAMD)
#define glBlendEquationSeparate		MANGLE(BlendEquationSeparate)
#define glBlendFunci		MANGLE(BlendFunci)
#define glBlendFuncIndexedAMD		MANGLE(BlendFuncIndexedAMD)
#define glBlendFunc		MANGLE(BlendFunc)
#define glBlendFuncSeparateEXT		MANGLE(BlendFuncSeparateEXT)
#define glBlendFuncSeparatei		MANGLE(BlendFuncSeparatei)
#define glBlendFuncSeparateIndexedAMD		MANGLE(BlendFuncSeparateIndexedAMD)
#define glBlendFuncSeparateINGR		MANGLE(BlendFuncSeparateINGR)
#define glBlendFuncSeparate		MANGLE(BlendFuncSeparate)
#define glBlitFramebufferEXT		MANGLE(BlitFramebufferEXT)
#define glBlitFramebuffer		MANGLE(BlitFramebuffer)
#define glBufferAddressRangeNV		MANGLE(BufferAddressRangeNV)
#define glBufferDataARB		MANGLE(BufferDataARB)
#define glBufferData		MANGLE(BufferData)
#define glBufferParameteriAPPLE		MANGLE(BufferParameteriAPPLE)
#define glBufferSubDataARB		MANGLE(BufferSubDataARB)
#define glBufferSubData		MANGLE(BufferSubData)
#define glCallList		MANGLE(CallList)
#define glCallLists		MANGLE(CallLists)
#define glCheckFramebufferStatusEXT		MANGLE(CheckFramebufferStatusEXT)
#define glCheckFramebufferStatus		MANGLE(CheckFramebufferStatus)
#define glCheckNamedFramebufferStatusEXT		MANGLE(CheckNamedFramebufferStatusEXT)
#define glClampColorARB		MANGLE(ClampColorARB)
#define glClampColor		MANGLE(ClampColor)
#define glClearAccum		MANGLE(ClearAccum)
#define glClearBufferfi		MANGLE(ClearBufferfi)
#define glClearBufferfv		MANGLE(ClearBufferfv)
#define glClearBufferiv		MANGLE(ClearBufferiv)
#define glClearBufferuiv		MANGLE(ClearBufferuiv)
#define glClearColorIiEXT		MANGLE(ClearColorIiEXT)
#define glClearColorIuiEXT		MANGLE(ClearColorIuiEXT)
#define glClearColor		MANGLE(ClearColor)
#define glClearDebugLogMESA		MANGLE(ClearDebugLogMESA)
#define glClearDepthdNV		MANGLE(ClearDepthdNV)
#define glClearDepth		MANGLE(ClearDepth)
#define glClearIndex		MANGLE(ClearIndex)
#define glClear		MANGLE(Clear)
#define glClearStencil		MANGLE(ClearStencil)
#define glClientActiveTextureARB		MANGLE(ClientActiveTextureARB)
#define glClientActiveTexture		MANGLE(ClientActiveTexture)
#define glClientActiveVertexStreamATI		MANGLE(ClientActiveVertexStreamATI)
#define glClientAttribDefaultEXT		MANGLE(ClientAttribDefaultEXT)
#define glClientWaitSync		MANGLE(ClientWaitSync)
#define glClipPlane		MANGLE(ClipPlane)
#define glColor3b		MANGLE(Color3b)
#define glColor3bv		MANGLE(Color3bv)
#define glColor3d		MANGLE(Color3d)
#define glColor3dv		MANGLE(Color3dv)
#define glColor3f		MANGLE(Color3f)
#define glColor3fVertex3fSUN		MANGLE(Color3fVertex3fSUN)
#define glColor3fVertex3fvSUN		MANGLE(Color3fVertex3fvSUN)
#define glColor3fv		MANGLE(Color3fv)
#define glColor3hNV		MANGLE(Color3hNV)
#define glColor3hvNV		MANGLE(Color3hvNV)
#define glColor3i		MANGLE(Color3i)
#define glColor3iv		MANGLE(Color3iv)
#define glColor3s		MANGLE(Color3s)
#define glColor3sv		MANGLE(Color3sv)
#define glColor3ub		MANGLE(Color3ub)
#define glColor3ubv		MANGLE(Color3ubv)
#define glColor3ui		MANGLE(Color3ui)
#define glColor3uiv		MANGLE(Color3uiv)
#define glColor3us		MANGLE(Color3us)
#define glColor3usv		MANGLE(Color3usv)
#define glColor4b		MANGLE(Color4b)
#define glColor4bv		MANGLE(Color4bv)
#define glColor4d		MANGLE(Color4d)
#define glColor4dv		MANGLE(Color4dv)
#define glColor4f		MANGLE(Color4f)
#define glColor4fNormal3fVertex3fSUN		MANGLE(Color4fNormal3fVertex3fSUN)
#define glColor4fNormal3fVertex3fvSUN		MANGLE(Color4fNormal3fVertex3fvSUN)
#define glColor4fv		MANGLE(Color4fv)
#define glColor4hNV		MANGLE(Color4hNV)
#define glColor4hvNV		MANGLE(Color4hvNV)
#define glColor4i		MANGLE(Color4i)
#define glColor4iv		MANGLE(Color4iv)
#define glColor4s		MANGLE(Color4s)
#define glColor4sv		MANGLE(Color4sv)
#define glColor4ub		MANGLE(Color4ub)
#define glColor4ubVertex2fSUN		MANGLE(Color4ubVertex2fSUN)
#define glColor4ubVertex2fvSUN		MANGLE(Color4ubVertex2fvSUN)
#define glColor4ubVertex3fSUN		MANGLE(Color4ubVertex3fSUN)
#define glColor4ubVertex3fvSUN		MANGLE(Color4ubVertex3fvSUN)
#define glColor4ubv		MANGLE(Color4ubv)
#define glColor4ui		MANGLE(Color4ui)
#define glColor4uiv		MANGLE(Color4uiv)
#define glColor4us		MANGLE(Color4us)
#define glColor4usv		MANGLE(Color4usv)
#define glColorFormatNV		MANGLE(ColorFormatNV)
#define glColorFragmentOp1ATI		MANGLE(ColorFragmentOp1ATI)
#define glColorFragmentOp2ATI		MANGLE(ColorFragmentOp2ATI)
#define glColorFragmentOp3ATI		MANGLE(ColorFragmentOp3ATI)
#define glColorMaski		MANGLE(ColorMaski)
#define glColorMaskIndexedEXT		MANGLE(ColorMaskIndexedEXT)
#define glColorMask		MANGLE(ColorMask)
#define glColorMaterial		MANGLE(ColorMaterial)
#define glColorPointerEXT		MANGLE(ColorPointerEXT)
#define glColorPointerListIBM		MANGLE(ColorPointerListIBM)
#define glColorPointer		MANGLE(ColorPointer)
#define glColorPointervINTEL		MANGLE(ColorPointervINTEL)
#define glColorSubTableEXT		MANGLE(ColorSubTableEXT)
#define glColorSubTable		MANGLE(ColorSubTable)
#define glColorTableEXT		MANGLE(ColorTableEXT)
#define glColorTable		MANGLE(ColorTable)
#define glColorTableParameterfv		MANGLE(ColorTableParameterfv)
#define glColorTableParameterfvSGI		MANGLE(ColorTableParameterfvSGI)
#define glColorTableParameteriv		MANGLE(ColorTableParameteriv)
#define glColorTableParameterivSGI		MANGLE(ColorTableParameterivSGI)
#define glColorTableSGI		MANGLE(ColorTableSGI)
#define glCombinerInputNV		MANGLE(CombinerInputNV)
#define glCombinerOutputNV		MANGLE(CombinerOutputNV)
#define glCombinerParameterfNV		MANGLE(CombinerParameterfNV)
#define glCombinerParameterfvNV		MANGLE(CombinerParameterfvNV)
#define glCombinerParameteriNV		MANGLE(CombinerParameteriNV)
#define glCombinerParameterivNV		MANGLE(CombinerParameterivNV)
#define glCombinerStageParameterfvNV		MANGLE(CombinerStageParameterfvNV)
#define glCompileShaderARB		MANGLE(CompileShaderARB)
#define glCompileShader		MANGLE(CompileShader)
#define glCompressedMultiTexImage1DEXT		MANGLE(CompressedMultiTexImage1DEXT)
#define glCompressedMultiTexImage2DEXT		MANGLE(CompressedMultiTexImage2DEXT)
#define glCompressedMultiTexImage3DEXT		MANGLE(CompressedMultiTexImage3DEXT)
#define glCompressedMultiTexSubImage1DEXT		MANGLE(CompressedMultiTexSubImage1DEXT)
#define glCompressedMultiTexSubImage2DEXT		MANGLE(CompressedMultiTexSubImage2DEXT)
#define glCompressedMultiTexSubImage3DEXT		MANGLE(CompressedMultiTexSubImage3DEXT)
#define glCompressedTexImage1DARB		MANGLE(CompressedTexImage1DARB)
#define glCompressedTexImage1D		MANGLE(CompressedTexImage1D)
#define glCompressedTexImage2DARB		MANGLE(CompressedTexImage2DARB)
#define glCompressedTexImage2D		MANGLE(CompressedTexImage2D)
#define glCompressedTexImage3DARB		MANGLE(CompressedTexImage3DARB)
#define glCompressedTexImage3D		MANGLE(CompressedTexImage3D)
#define glCompressedTexSubImage1DARB		MANGLE(CompressedTexSubImage1DARB)
#define glCompressedTexSubImage1D		MANGLE(CompressedTexSubImage1D)
#define glCompressedTexSubImage2DARB		MANGLE(CompressedTexSubImage2DARB)
#define glCompressedTexSubImage2D		MANGLE(CompressedTexSubImage2D)
#define glCompressedTexSubImage3DARB		MANGLE(CompressedTexSubImage3DARB)
#define glCompressedTexSubImage3D		MANGLE(CompressedTexSubImage3D)
#define glCompressedTextureImage1DEXT		MANGLE(CompressedTextureImage1DEXT)
#define glCompressedTextureImage2DEXT		MANGLE(CompressedTextureImage2DEXT)
#define glCompressedTextureImage3DEXT		MANGLE(CompressedTextureImage3DEXT)
#define glCompressedTextureSubImage1DEXT		MANGLE(CompressedTextureSubImage1DEXT)
#define glCompressedTextureSubImage2DEXT		MANGLE(CompressedTextureSubImage2DEXT)
#define glCompressedTextureSubImage3DEXT		MANGLE(CompressedTextureSubImage3DEXT)
#define glConvolutionFilter1DEXT		MANGLE(ConvolutionFilter1DEXT)
#define glConvolutionFilter1D		MANGLE(ConvolutionFilter1D)
#define glConvolutionFilter2DEXT		MANGLE(ConvolutionFilter2DEXT)
#define glConvolutionFilter2D		MANGLE(ConvolutionFilter2D)
#define glConvolutionParameterfEXT		MANGLE(ConvolutionParameterfEXT)
#define glConvolutionParameterf		MANGLE(ConvolutionParameterf)
#define glConvolutionParameterfvEXT		MANGLE(ConvolutionParameterfvEXT)
#define glConvolutionParameterfv		MANGLE(ConvolutionParameterfv)
#define glConvolutionParameteriEXT		MANGLE(ConvolutionParameteriEXT)
#define glConvolutionParameteri		MANGLE(ConvolutionParameteri)
#define glConvolutionParameterivEXT		MANGLE(ConvolutionParameterivEXT)
#define glConvolutionParameteriv		MANGLE(ConvolutionParameteriv)
#define glCopyBufferSubData		MANGLE(CopyBufferSubData)
#define glCopyColorSubTableEXT		MANGLE(CopyColorSubTableEXT)
#define glCopyColorSubTable		MANGLE(CopyColorSubTable)
#define glCopyColorTable		MANGLE(CopyColorTable)
#define glCopyColorTableSGI		MANGLE(CopyColorTableSGI)
#define glCopyConvolutionFilter1DEXT		MANGLE(CopyConvolutionFilter1DEXT)
#define glCopyConvolutionFilter1D		MANGLE(CopyConvolutionFilter1D)
#define glCopyConvolutionFilter2DEXT		MANGLE(CopyConvolutionFilter2DEXT)
#define glCopyConvolutionFilter2D		MANGLE(CopyConvolutionFilter2D)
#define glCopyImageSubDataNV		MANGLE(CopyImageSubDataNV)
#define glCopyMultiTexImage1DEXT		MANGLE(CopyMultiTexImage1DEXT)
#define glCopyMultiTexImage2DEXT		MANGLE(CopyMultiTexImage2DEXT)
#define glCopyMultiTexSubImage1DEXT		MANGLE(CopyMultiTexSubImage1DEXT)
#define glCopyMultiTexSubImage2DEXT		MANGLE(CopyMultiTexSubImage2DEXT)
#define glCopyMultiTexSubImage3DEXT		MANGLE(CopyMultiTexSubImage3DEXT)
#define glCopyPixels		MANGLE(CopyPixels)
#define glCopyTexImage1DEXT		MANGLE(CopyTexImage1DEXT)
#define glCopyTexImage1D		MANGLE(CopyTexImage1D)
#define glCopyTexImage2DEXT		MANGLE(CopyTexImage2DEXT)
#define glCopyTexImage2D		MANGLE(CopyTexImage2D)
#define glCopyTexSubImage1DEXT		MANGLE(CopyTexSubImage1DEXT)
#define glCopyTexSubImage1D		MANGLE(CopyTexSubImage1D)
#define glCopyTexSubImage2DEXT		MANGLE(CopyTexSubImage2DEXT)
#define glCopyTexSubImage2D		MANGLE(CopyTexSubImage2D)
#define glCopyTexSubImage3DEXT		MANGLE(CopyTexSubImage3DEXT)
#define glCopyTexSubImage3D		MANGLE(CopyTexSubImage3D)
#define glCopyTextureImage1DEXT		MANGLE(CopyTextureImage1DEXT)
#define glCopyTextureImage2DEXT		MANGLE(CopyTextureImage2DEXT)
#define glCopyTextureSubImage1DEXT		MANGLE(CopyTextureSubImage1DEXT)
#define glCopyTextureSubImage2DEXT		MANGLE(CopyTextureSubImage2DEXT)
#define glCopyTextureSubImage3DEXT		MANGLE(CopyTextureSubImage3DEXT)
#define glCreateDebugObjectMESA		MANGLE(CreateDebugObjectMESA)
#define glCreateProgram		MANGLE(CreateProgram)
#define glCreateProgramObjectARB		MANGLE(CreateProgramObjectARB)
#define glCreateShader		MANGLE(CreateShader)
#define glCreateShaderObjectARB		MANGLE(CreateShaderObjectARB)
#define glCreateShaderProgramEXT		MANGLE(CreateShaderProgramEXT)
#define glCullFace		MANGLE(CullFace)
#define glCullParameterdvEXT		MANGLE(CullParameterdvEXT)
#define glCullParameterfvEXT		MANGLE(CullParameterfvEXT)
#define glCurrentPaletteMatrixARB		MANGLE(CurrentPaletteMatrixARB)
#define glDeformationMap3dSGIX		MANGLE(DeformationMap3dSGIX)
#define glDeformationMap3fSGIX		MANGLE(DeformationMap3fSGIX)
#define glDeformSGIX		MANGLE(DeformSGIX)
#define glDeleteAsyncMarkersSGIX		MANGLE(DeleteAsyncMarkersSGIX)
#define glDeleteBuffersARB		MANGLE(DeleteBuffersARB)
#define glDeleteBuffers		MANGLE(DeleteBuffers)
#define glDeleteFencesAPPLE		MANGLE(DeleteFencesAPPLE)
#define glDeleteFencesNV		MANGLE(DeleteFencesNV)
#define glDeleteFragmentShaderATI		MANGLE(DeleteFragmentShaderATI)
#define glDeleteFramebuffersEXT		MANGLE(DeleteFramebuffersEXT)
#define glDeleteFramebuffers		MANGLE(DeleteFramebuffers)
#define glDeleteLists		MANGLE(DeleteLists)
#define glDeleteObjectARB		MANGLE(DeleteObjectARB)
#define glDeleteOcclusionQueriesNV		MANGLE(DeleteOcclusionQueriesNV)
#define glDeletePerfMonitorsAMD		MANGLE(DeletePerfMonitorsAMD)
#define glDeleteProgram		MANGLE(DeleteProgram)
#define glDeleteProgramsARB		MANGLE(DeleteProgramsARB)
#define glDeleteProgramsNV		MANGLE(DeleteProgramsNV)
#define glDeleteQueriesARB		MANGLE(DeleteQueriesARB)
#define glDeleteQueries		MANGLE(DeleteQueries)
#define glDeleteRenderbuffersEXT		MANGLE(DeleteRenderbuffersEXT)
#define glDeleteRenderbuffers		MANGLE(DeleteRenderbuffers)
#define glDeleteShader		MANGLE(DeleteShader)
#define glDeleteSync		MANGLE(DeleteSync)
#define glDeleteTexturesEXT		MANGLE(DeleteTexturesEXT)
#define glDeleteTextures		MANGLE(DeleteTextures)
#define glDeleteTransformFeedbacksNV		MANGLE(DeleteTransformFeedbacksNV)
#define glDeleteVertexArraysAPPLE		MANGLE(DeleteVertexArraysAPPLE)
#define glDeleteVertexArrays		MANGLE(DeleteVertexArrays)
#define glDeleteVertexShaderEXT		MANGLE(DeleteVertexShaderEXT)
#define glDepthBoundsdNV		MANGLE(DepthBoundsdNV)
#define glDepthBoundsEXT		MANGLE(DepthBoundsEXT)
#define glDepthFunc		MANGLE(DepthFunc)
#define glDepthMask		MANGLE(DepthMask)
#define glDepthRangedNV		MANGLE(DepthRangedNV)
#define glDepthRange		MANGLE(DepthRange)
#define glDetachObjectARB		MANGLE(DetachObjectARB)
#define glDetachShader		MANGLE(DetachShader)
#define glDetailTexFuncSGIS		MANGLE(DetailTexFuncSGIS)
#define glDisableClientStateIndexedEXT		MANGLE(DisableClientStateIndexedEXT)
#define glDisableClientState		MANGLE(DisableClientState)
#define glDisablei		MANGLE(Disablei)
#define glDisableIndexedEXT		MANGLE(DisableIndexedEXT)
#define glDisable		MANGLE(Disable)
#define glDisableVariantClientStateEXT		MANGLE(DisableVariantClientStateEXT)
#define glDisableVertexAttribAPPLE		MANGLE(DisableVertexAttribAPPLE)
#define glDisableVertexAttribArrayARB		MANGLE(DisableVertexAttribArrayARB)
#define glDisableVertexAttribArray		MANGLE(DisableVertexAttribArray)
#define glDrawArraysEXT		MANGLE(DrawArraysEXT)
#define glDrawArraysInstancedARB		MANGLE(DrawArraysInstancedARB)
#define glDrawArraysInstancedEXT		MANGLE(DrawArraysInstancedEXT)
#define glDrawArraysInstanced		MANGLE(DrawArraysInstanced)
#define glDrawArrays		MANGLE(DrawArrays)
#define glDrawBuffer		MANGLE(DrawBuffer)
#define glDrawBuffersARB		MANGLE(DrawBuffersARB)
#define glDrawBuffersATI		MANGLE(DrawBuffersATI)
#define glDrawBuffers		MANGLE(DrawBuffers)
#define glDrawElementArrayAPPLE		MANGLE(DrawElementArrayAPPLE)
#define glDrawElementArrayATI		MANGLE(DrawElementArrayATI)
#define glDrawElementsBaseVertex		MANGLE(DrawElementsBaseVertex)
#define glDrawElementsInstancedARB		MANGLE(DrawElementsInstancedARB)
#define glDrawElementsInstancedBaseVertex		MANGLE(DrawElementsInstancedBaseVertex)
#define glDrawElementsInstancedEXT		MANGLE(DrawElementsInstancedEXT)
#define glDrawElementsInstanced		MANGLE(DrawElementsInstanced)
#define glDrawElements		MANGLE(DrawElements)
#define glDrawMeshArraysSUN		MANGLE(DrawMeshArraysSUN)
#define glDrawPixels		MANGLE(DrawPixels)
#define glDrawRangeElementArrayAPPLE		MANGLE(DrawRangeElementArrayAPPLE)
#define glDrawRangeElementArrayATI		MANGLE(DrawRangeElementArrayATI)
#define glDrawRangeElementsBaseVertex		MANGLE(DrawRangeElementsBaseVertex)
#define glDrawRangeElementsEXT		MANGLE(DrawRangeElementsEXT)
#define glDrawRangeElements		MANGLE(DrawRangeElements)
#define glDrawTransformFeedbackNV		MANGLE(DrawTransformFeedbackNV)
#define glEdgeFlagFormatNV		MANGLE(EdgeFlagFormatNV)
#define glEdgeFlag		MANGLE(EdgeFlag)
#define glEdgeFlagPointerEXT		MANGLE(EdgeFlagPointerEXT)
#define glEdgeFlagPointerListIBM		MANGLE(EdgeFlagPointerListIBM)
#define glEdgeFlagPointer		MANGLE(EdgeFlagPointer)
#define glEdgeFlagv		MANGLE(EdgeFlagv)
#define glElementPointerAPPLE		MANGLE(ElementPointerAPPLE)
#define glElementPointerATI		MANGLE(ElementPointerATI)
#define glEnableClientStateIndexedEXT		MANGLE(EnableClientStateIndexedEXT)
#define glEnableClientState		MANGLE(EnableClientState)
#define glEnablei		MANGLE(Enablei)
#define glEnableIndexedEXT		MANGLE(EnableIndexedEXT)
#define glEnable		MANGLE(Enable)
#define glEnableVariantClientStateEXT		MANGLE(EnableVariantClientStateEXT)
#define glEnableVertexAttribAPPLE		MANGLE(EnableVertexAttribAPPLE)
#define glEnableVertexAttribArrayARB		MANGLE(EnableVertexAttribArrayARB)
#define glEnableVertexAttribArray		MANGLE(EnableVertexAttribArray)
#define glEndConditionalRender		MANGLE(EndConditionalRender)
#define glEndConditionalRenderNV		MANGLE(EndConditionalRenderNV)
#define glEndFragmentShaderATI		MANGLE(EndFragmentShaderATI)
#define glEndList		MANGLE(EndList)
#define glEnd		MANGLE(End)
#define glEndOcclusionQueryNV		MANGLE(EndOcclusionQueryNV)
#define glEndPerfMonitorAMD		MANGLE(EndPerfMonitorAMD)
#define glEndQueryARB		MANGLE(EndQueryARB)
#define glEndQuery		MANGLE(EndQuery)
#define glEndTransformFeedbackEXT		MANGLE(EndTransformFeedbackEXT)
#define glEndTransformFeedback		MANGLE(EndTransformFeedback)
#define glEndTransformFeedbackNV		MANGLE(EndTransformFeedbackNV)
#define glEndVertexShaderEXT		MANGLE(EndVertexShaderEXT)
#define glEndVideoCaptureNV		MANGLE(EndVideoCaptureNV)
#define glEvalCoord1d		MANGLE(EvalCoord1d)
#define glEvalCoord1dv		MANGLE(EvalCoord1dv)
#define glEvalCoord1f		MANGLE(EvalCoord1f)
#define glEvalCoord1fv		MANGLE(EvalCoord1fv)
#define glEvalCoord2d		MANGLE(EvalCoord2d)
#define glEvalCoord2dv		MANGLE(EvalCoord2dv)
#define glEvalCoord2f		MANGLE(EvalCoord2f)
#define glEvalCoord2fv		MANGLE(EvalCoord2fv)
#define glEvalMapsNV		MANGLE(EvalMapsNV)
#define glEvalMesh1		MANGLE(EvalMesh1)
#define glEvalMesh2		MANGLE(EvalMesh2)
#define glEvalPoint1		MANGLE(EvalPoint1)
#define glEvalPoint2		MANGLE(EvalPoint2)
#define glExecuteProgramNV		MANGLE(ExecuteProgramNV)
#define glExtractComponentEXT		MANGLE(ExtractComponentEXT)
#define glFeedbackBuffer		MANGLE(FeedbackBuffer)
#define glFenceSync		MANGLE(FenceSync)
#define glFinalCombinerInputNV		MANGLE(FinalCombinerInputNV)
#define glFinishAsyncSGIX		MANGLE(FinishAsyncSGIX)
#define glFinishFenceAPPLE		MANGLE(FinishFenceAPPLE)
#define glFinishFenceNV		MANGLE(FinishFenceNV)
#define glFinish		MANGLE(Finish)
#define glFinishObjectAPPLE		MANGLE(FinishObjectAPPLE)
#define glFinishTextureSUNX		MANGLE(FinishTextureSUNX)
#define glFlush		MANGLE(Flush)
#define glFlushMappedBufferRangeAPPLE		MANGLE(FlushMappedBufferRangeAPPLE)
#define glFlushMappedBufferRange		MANGLE(FlushMappedBufferRange)
#define glFlushPixelDataRangeNV		MANGLE(FlushPixelDataRangeNV)
#define glFlushRasterSGIX		MANGLE(FlushRasterSGIX)
#define glFlushVertexArrayRangeAPPLE		MANGLE(FlushVertexArrayRangeAPPLE)
#define glFlushVertexArrayRangeNV		MANGLE(FlushVertexArrayRangeNV)
#define glFogCoorddEXT		MANGLE(FogCoorddEXT)
#define glFogCoordd		MANGLE(FogCoordd)
#define glFogCoorddvEXT		MANGLE(FogCoorddvEXT)
#define glFogCoorddv		MANGLE(FogCoorddv)
#define glFogCoordfEXT		MANGLE(FogCoordfEXT)
#define glFogCoordf		MANGLE(FogCoordf)
#define glFogCoordFormatNV		MANGLE(FogCoordFormatNV)
#define glFogCoordfvEXT		MANGLE(FogCoordfvEXT)
#define glFogCoordfv		MANGLE(FogCoordfv)
#define glFogCoordhNV		MANGLE(FogCoordhNV)
#define glFogCoordhvNV		MANGLE(FogCoordhvNV)
#define glFogCoordPointerEXT		MANGLE(FogCoordPointerEXT)
#define glFogCoordPointerListIBM		MANGLE(FogCoordPointerListIBM)
#define glFogCoordPointer		MANGLE(FogCoordPointer)
#define glFogf		MANGLE(Fogf)
#define glFogFuncSGIS		MANGLE(FogFuncSGIS)
#define glFogfv		MANGLE(Fogfv)
#define glFogi		MANGLE(Fogi)
#define glFogiv		MANGLE(Fogiv)
#define glFragmentColorMaterialSGIX		MANGLE(FragmentColorMaterialSGIX)
#define glFragmentLightfSGIX		MANGLE(FragmentLightfSGIX)
#define glFragmentLightfvSGIX		MANGLE(FragmentLightfvSGIX)
#define glFragmentLightiSGIX		MANGLE(FragmentLightiSGIX)
#define glFragmentLightivSGIX		MANGLE(FragmentLightivSGIX)
#define glFragmentLightModelfSGIX		MANGLE(FragmentLightModelfSGIX)
#define glFragmentLightModelfvSGIX		MANGLE(FragmentLightModelfvSGIX)
#define glFragmentLightModeliSGIX		MANGLE(FragmentLightModeliSGIX)
#define glFragmentLightModelivSGIX		MANGLE(FragmentLightModelivSGIX)
#define glFragmentMaterialfSGIX		MANGLE(FragmentMaterialfSGIX)
#define glFragmentMaterialfvSGIX		MANGLE(FragmentMaterialfvSGIX)
#define glFragmentMaterialiSGIX		MANGLE(FragmentMaterialiSGIX)
#define glFragmentMaterialivSGIX		MANGLE(FragmentMaterialivSGIX)
#define glFramebufferDrawBufferEXT		MANGLE(FramebufferDrawBufferEXT)
#define glFramebufferDrawBuffersEXT		MANGLE(FramebufferDrawBuffersEXT)
#define glFramebufferReadBufferEXT		MANGLE(FramebufferReadBufferEXT)
#define glFramebufferRenderbufferEXT		MANGLE(FramebufferRenderbufferEXT)
#define glFramebufferRenderbuffer		MANGLE(FramebufferRenderbuffer)
#define glFramebufferTexture1DEXT		MANGLE(FramebufferTexture1DEXT)
#define glFramebufferTexture1D		MANGLE(FramebufferTexture1D)
#define glFramebufferTexture2DEXT		MANGLE(FramebufferTexture2DEXT)
#define glFramebufferTexture2D		MANGLE(FramebufferTexture2D)
#define glFramebufferTexture3DEXT		MANGLE(FramebufferTexture3DEXT)
#define glFramebufferTexture3D		MANGLE(FramebufferTexture3D)
#define glFramebufferTextureARB		MANGLE(FramebufferTextureARB)
#define glFramebufferTextureEXT		MANGLE(FramebufferTextureEXT)
#define glFramebufferTextureFaceARB		MANGLE(FramebufferTextureFaceARB)
#define glFramebufferTextureFaceEXT		MANGLE(FramebufferTextureFaceEXT)
#define glFramebufferTextureFace		MANGLE(FramebufferTextureFace)
#define glFramebufferTextureLayerARB		MANGLE(FramebufferTextureLayerARB)
#define glFramebufferTextureLayerEXT		MANGLE(FramebufferTextureLayerEXT)
#define glFramebufferTextureLayer		MANGLE(FramebufferTextureLayer)
#define glFramebufferTexture		MANGLE(FramebufferTexture)
#define glFrameTerminatorGREMEDY		MANGLE(FrameTerminatorGREMEDY)
#define glFrameZoomSGIX		MANGLE(FrameZoomSGIX)
#define glFreeObjectBufferATI		MANGLE(FreeObjectBufferATI)
#define glFrontFace		MANGLE(FrontFace)
#define glFrustum		MANGLE(Frustum)
#define glGenAsyncMarkersSGIX		MANGLE(GenAsyncMarkersSGIX)
#define glGenBuffersARB		MANGLE(GenBuffersARB)
#define glGenBuffers		MANGLE(GenBuffers)
#define glGenerateMipmapEXT		MANGLE(GenerateMipmapEXT)
#define glGenerateMipmap		MANGLE(GenerateMipmap)
#define glGenerateMultiTexMipmapEXT		MANGLE(GenerateMultiTexMipmapEXT)
#define glGenerateTextureMipmapEXT		MANGLE(GenerateTextureMipmapEXT)
#define glGenFencesAPPLE		MANGLE(GenFencesAPPLE)
#define glGenFencesNV		MANGLE(GenFencesNV)
#define glGenFragmentShadersATI		MANGLE(GenFragmentShadersATI)
#define glGenFramebuffersEXT		MANGLE(GenFramebuffersEXT)
#define glGenFramebuffers		MANGLE(GenFramebuffers)
#define glGenLists		MANGLE(GenLists)
#define glGenOcclusionQueriesNV		MANGLE(GenOcclusionQueriesNV)
#define glGenPerfMonitorsAMD		MANGLE(GenPerfMonitorsAMD)
#define glGenProgramsARB		MANGLE(GenProgramsARB)
#define glGenProgramsNV		MANGLE(GenProgramsNV)
#define glGenQueriesARB		MANGLE(GenQueriesARB)
#define glGenQueries		MANGLE(GenQueries)
#define glGenRenderbuffersEXT		MANGLE(GenRenderbuffersEXT)
#define glGenRenderbuffers		MANGLE(GenRenderbuffers)
#define glGenSymbolsEXT		MANGLE(GenSymbolsEXT)
#define glGenTexturesEXT		MANGLE(GenTexturesEXT)
#define glGenTextures		MANGLE(GenTextures)
#define glGenTransformFeedbacksNV		MANGLE(GenTransformFeedbacksNV)
#define glGenVertexArraysAPPLE		MANGLE(GenVertexArraysAPPLE)
#define glGenVertexArrays		MANGLE(GenVertexArrays)
#define glGenVertexShadersEXT		MANGLE(GenVertexShadersEXT)
#define glGetActiveAttribARB		MANGLE(GetActiveAttribARB)
#define glGetActiveAttrib		MANGLE(GetActiveAttrib)
#define glGetActiveUniformARB		MANGLE(GetActiveUniformARB)
#define glGetActiveUniformBlockiv		MANGLE(GetActiveUniformBlockiv)
#define glGetActiveUniformBlockName		MANGLE(GetActiveUniformBlockName)
#define glGetActiveUniform		MANGLE(GetActiveUniform)
#define glGetActiveUniformName		MANGLE(GetActiveUniformName)
#define glGetActiveUniformsiv		MANGLE(GetActiveUniformsiv)
#define glGetActiveVaryingNV		MANGLE(GetActiveVaryingNV)
#define glGetArrayObjectfvATI		MANGLE(GetArrayObjectfvATI)
#define glGetArrayObjectivATI		MANGLE(GetArrayObjectivATI)
#define glGetAttachedObjectsARB		MANGLE(GetAttachedObjectsARB)
#define glGetAttachedShaders		MANGLE(GetAttachedShaders)
#define glGetAttribLocationARB		MANGLE(GetAttribLocationARB)
#define glGetAttribLocation		MANGLE(GetAttribLocation)
#define glGetBooleanIndexedvEXT		MANGLE(GetBooleanIndexedvEXT)
#define glGetBooleani_v		MANGLE(GetBooleani_v)
#define glGetBooleanv		MANGLE(GetBooleanv)
#define glGetBufferParameteri64v		MANGLE(GetBufferParameteri64v)
#define glGetBufferParameterivARB		MANGLE(GetBufferParameterivARB)
#define glGetBufferParameteriv		MANGLE(GetBufferParameteriv)
#define glGetBufferParameterui64vNV		MANGLE(GetBufferParameterui64vNV)
#define glGetBufferPointervARB		MANGLE(GetBufferPointervARB)
#define glGetBufferPointerv		MANGLE(GetBufferPointerv)
#define glGetBufferSubDataARB		MANGLE(GetBufferSubDataARB)
#define glGetBufferSubData		MANGLE(GetBufferSubData)
#define glGetClipPlane		MANGLE(GetClipPlane)
#define glGetColorTableEXT		MANGLE(GetColorTableEXT)
#define glGetColorTable		MANGLE(GetColorTable)
#define glGetColorTableParameterfvEXT		MANGLE(GetColorTableParameterfvEXT)
#define glGetColorTableParameterfv		MANGLE(GetColorTableParameterfv)
#define glGetColorTableParameterfvSGI		MANGLE(GetColorTableParameterfvSGI)
#define glGetColorTableParameterivEXT		MANGLE(GetColorTableParameterivEXT)
#define glGetColorTableParameteriv		MANGLE(GetColorTableParameteriv)
#define glGetColorTableParameterivSGI		MANGLE(GetColorTableParameterivSGI)
#define glGetColorTableSGI		MANGLE(GetColorTableSGI)
#define glGetCombinerInputParameterfvNV		MANGLE(GetCombinerInputParameterfvNV)
#define glGetCombinerInputParameterivNV		MANGLE(GetCombinerInputParameterivNV)
#define glGetCombinerOutputParameterfvNV		MANGLE(GetCombinerOutputParameterfvNV)
#define glGetCombinerOutputParameterivNV		MANGLE(GetCombinerOutputParameterivNV)
#define glGetCombinerStageParameterfvNV		MANGLE(GetCombinerStageParameterfvNV)
#define glGetCompressedMultiTexImageEXT		MANGLE(GetCompressedMultiTexImageEXT)
#define glGetCompressedTexImageARB		MANGLE(GetCompressedTexImageARB)
#define glGetCompressedTexImage		MANGLE(GetCompressedTexImage)
#define glGetCompressedTextureImageEXT		MANGLE(GetCompressedTextureImageEXT)
#define glGetConvolutionFilterEXT		MANGLE(GetConvolutionFilterEXT)
#define glGetConvolutionFilter		MANGLE(GetConvolutionFilter)
#define glGetConvolutionParameterfvEXT		MANGLE(GetConvolutionParameterfvEXT)
#define glGetConvolutionParameterfv		MANGLE(GetConvolutionParameterfv)
#define glGetConvolutionParameterivEXT		MANGLE(GetConvolutionParameterivEXT)
#define glGetConvolutionParameteriv		MANGLE(GetConvolutionParameteriv)
#define glGetDebugLogLengthMESA		MANGLE(GetDebugLogLengthMESA)
#define glGetDebugLogMESA		MANGLE(GetDebugLogMESA)
#define glGetDetailTexFuncSGIS		MANGLE(GetDetailTexFuncSGIS)
#define glGetDoubleIndexedvEXT		MANGLE(GetDoubleIndexedvEXT)
#define glGetDoublev		MANGLE(GetDoublev)
#define glGetError		MANGLE(GetError)
#define glGetFenceivNV		MANGLE(GetFenceivNV)
#define glGetFinalCombinerInputParameterfvNV		MANGLE(GetFinalCombinerInputParameterfvNV)
#define glGetFinalCombinerInputParameterivNV		MANGLE(GetFinalCombinerInputParameterivNV)
#define glGetFloatIndexedvEXT		MANGLE(GetFloatIndexedvEXT)
#define glGetFloatv		MANGLE(GetFloatv)
#define glGetFogFuncSGIS		MANGLE(GetFogFuncSGIS)
#define glGetFragDataLocationEXT		MANGLE(GetFragDataLocationEXT)
#define glGetFragDataLocation		MANGLE(GetFragDataLocation)
#define glGetFragmentLightfvSGIX		MANGLE(GetFragmentLightfvSGIX)
#define glGetFragmentLightivSGIX		MANGLE(GetFragmentLightivSGIX)
#define glGetFragmentMaterialfvSGIX		MANGLE(GetFragmentMaterialfvSGIX)
#define glGetFragmentMaterialivSGIX		MANGLE(GetFragmentMaterialivSGIX)
#define glGetFramebufferAttachmentParameterivEXT		MANGLE(GetFramebufferAttachmentParameterivEXT)
#define glGetFramebufferAttachmentParameteriv		MANGLE(GetFramebufferAttachmentParameteriv)
#define glGetFramebufferParameterivEXT		MANGLE(GetFramebufferParameterivEXT)
#define glGetHandleARB		MANGLE(GetHandleARB)
#define glGetHistogramEXT		MANGLE(GetHistogramEXT)
#define glGetHistogram		MANGLE(GetHistogram)
#define glGetHistogramParameterfvEXT		MANGLE(GetHistogramParameterfvEXT)
#define glGetHistogramParameterfv		MANGLE(GetHistogramParameterfv)
#define glGetHistogramParameterivEXT		MANGLE(GetHistogramParameterivEXT)
#define glGetHistogramParameteriv		MANGLE(GetHistogramParameteriv)
#define glGetImageTransformParameterfvHP		MANGLE(GetImageTransformParameterfvHP)
#define glGetImageTransformParameterivHP		MANGLE(GetImageTransformParameterivHP)
#define glGetInfoLogARB		MANGLE(GetInfoLogARB)
#define glGetInstrumentsSGIX		MANGLE(GetInstrumentsSGIX)
#define glGetInteger64i_v		MANGLE(GetInteger64i_v)
#define glGetInteger64v		MANGLE(GetInteger64v)
#define glGetIntegerIndexedvEXT		MANGLE(GetIntegerIndexedvEXT)
#define glGetIntegeri_v		MANGLE(GetIntegeri_v)
#define glGetIntegerui64i_vNV		MANGLE(GetIntegerui64i_vNV)
#define glGetIntegerui64vNV		MANGLE(GetIntegerui64vNV)
#define glGetIntegerv		MANGLE(GetIntegerv)
#define glGetInvariantBooleanvEXT		MANGLE(GetInvariantBooleanvEXT)
#define glGetInvariantFloatvEXT		MANGLE(GetInvariantFloatvEXT)
#define glGetInvariantIntegervEXT		MANGLE(GetInvariantIntegervEXT)
#define glGetLightfv		MANGLE(GetLightfv)
#define glGetLightiv		MANGLE(GetLightiv)
#define glGetListParameterfvSGIX		MANGLE(GetListParameterfvSGIX)
#define glGetListParameterivSGIX		MANGLE(GetListParameterivSGIX)
#define glGetLocalConstantBooleanvEXT		MANGLE(GetLocalConstantBooleanvEXT)
#define glGetLocalConstantFloatvEXT		MANGLE(GetLocalConstantFloatvEXT)
#define glGetLocalConstantIntegervEXT		MANGLE(GetLocalConstantIntegervEXT)
#define glGetMapAttribParameterfvNV		MANGLE(GetMapAttribParameterfvNV)
#define glGetMapAttribParameterivNV		MANGLE(GetMapAttribParameterivNV)
#define glGetMapControlPointsNV		MANGLE(GetMapControlPointsNV)
#define glGetMapdv		MANGLE(GetMapdv)
#define glGetMapfv		MANGLE(GetMapfv)
#define glGetMapiv		MANGLE(GetMapiv)
#define glGetMapParameterfvNV		MANGLE(GetMapParameterfvNV)
#define glGetMapParameterivNV		MANGLE(GetMapParameterivNV)
#define glGetMaterialfv		MANGLE(GetMaterialfv)
#define glGetMaterialiv		MANGLE(GetMaterialiv)
#define glGetMinmaxEXT		MANGLE(GetMinmaxEXT)
#define glGetMinmax		MANGLE(GetMinmax)
#define glGetMinmaxParameterfvEXT		MANGLE(GetMinmaxParameterfvEXT)
#define glGetMinmaxParameterfv		MANGLE(GetMinmaxParameterfv)
#define glGetMinmaxParameterivEXT		MANGLE(GetMinmaxParameterivEXT)
#define glGetMinmaxParameteriv		MANGLE(GetMinmaxParameteriv)
#define glGetMultisamplefv		MANGLE(GetMultisamplefv)
#define glGetMultisamplefvNV		MANGLE(GetMultisamplefvNV)
#define glGetMultiTexEnvfvEXT		MANGLE(GetMultiTexEnvfvEXT)
#define glGetMultiTexEnvivEXT		MANGLE(GetMultiTexEnvivEXT)
#define glGetMultiTexGendvEXT		MANGLE(GetMultiTexGendvEXT)
#define glGetMultiTexGenfvEXT		MANGLE(GetMultiTexGenfvEXT)
#define glGetMultiTexGenivEXT		MANGLE(GetMultiTexGenivEXT)
#define glGetMultiTexImageEXT		MANGLE(GetMultiTexImageEXT)
#define glGetMultiTexLevelParameterfvEXT		MANGLE(GetMultiTexLevelParameterfvEXT)
#define glGetMultiTexLevelParameterivEXT		MANGLE(GetMultiTexLevelParameterivEXT)
#define glGetMultiTexParameterfvEXT		MANGLE(GetMultiTexParameterfvEXT)
#define glGetMultiTexParameterIivEXT		MANGLE(GetMultiTexParameterIivEXT)
#define glGetMultiTexParameterIuivEXT		MANGLE(GetMultiTexParameterIuivEXT)
#define glGetMultiTexParameterivEXT		MANGLE(GetMultiTexParameterivEXT)
#define glGetNamedBufferParameterivEXT		MANGLE(GetNamedBufferParameterivEXT)
#define glGetNamedBufferParameterui64vNV		MANGLE(GetNamedBufferParameterui64vNV)
#define glGetNamedBufferPointervEXT		MANGLE(GetNamedBufferPointervEXT)
#define glGetNamedBufferSubDataEXT		MANGLE(GetNamedBufferSubDataEXT)
#define glGetNamedFramebufferAttachmentParameterivEXT		MANGLE(GetNamedFramebufferAttachmentParameterivEXT)
#define glGetNamedProgramivEXT		MANGLE(GetNamedProgramivEXT)
#define glGetNamedProgramLocalParameterdvEXT		MANGLE(GetNamedProgramLocalParameterdvEXT)
#define glGetNamedProgramLocalParameterfvEXT		MANGLE(GetNamedProgramLocalParameterfvEXT)
#define glGetNamedProgramLocalParameterIivEXT		MANGLE(GetNamedProgramLocalParameterIivEXT)
#define glGetNamedProgramLocalParameterIuivEXT		MANGLE(GetNamedProgramLocalParameterIuivEXT)
#define glGetNamedProgramStringEXT		MANGLE(GetNamedProgramStringEXT)
#define glGetNamedRenderbufferParameterivEXT		MANGLE(GetNamedRenderbufferParameterivEXT)
#define glGetObjectBufferfvATI		MANGLE(GetObjectBufferfvATI)
#define glGetObjectBufferivATI		MANGLE(GetObjectBufferivATI)
#define glGetObjectParameterfvARB		MANGLE(GetObjectParameterfvARB)
#define glGetObjectParameterivAPPLE		MANGLE(GetObjectParameterivAPPLE)
#define glGetObjectParameterivARB		MANGLE(GetObjectParameterivARB)
#define glGetOcclusionQueryivNV		MANGLE(GetOcclusionQueryivNV)
#define glGetOcclusionQueryuivNV		MANGLE(GetOcclusionQueryuivNV)
#define glGetPerfMonitorCounterDataAMD		MANGLE(GetPerfMonitorCounterDataAMD)
#define glGetPerfMonitorCounterInfoAMD		MANGLE(GetPerfMonitorCounterInfoAMD)
#define glGetPerfMonitorCountersAMD		MANGLE(GetPerfMonitorCountersAMD)
#define glGetPerfMonitorCounterStringAMD		MANGLE(GetPerfMonitorCounterStringAMD)
#define glGetPerfMonitorGroupsAMD		MANGLE(GetPerfMonitorGroupsAMD)
#define glGetPerfMonitorGroupStringAMD		MANGLE(GetPerfMonitorGroupStringAMD)
#define glGetPixelMapfv		MANGLE(GetPixelMapfv)
#define glGetPixelMapuiv		MANGLE(GetPixelMapuiv)
#define glGetPixelMapusv		MANGLE(GetPixelMapusv)
#define glGetPixelTexGenParameterfvSGIS		MANGLE(GetPixelTexGenParameterfvSGIS)
#define glGetPixelTexGenParameterivSGIS		MANGLE(GetPixelTexGenParameterivSGIS)
#define glGetPointerIndexedvEXT		MANGLE(GetPointerIndexedvEXT)
#define glGetPointervEXT		MANGLE(GetPointervEXT)
#define glGetPointerv		MANGLE(GetPointerv)
#define glGetPolygonStipple		MANGLE(GetPolygonStipple)
#define glGetProgramEnvParameterdvARB		MANGLE(GetProgramEnvParameterdvARB)
#define glGetProgramEnvParameterfvARB		MANGLE(GetProgramEnvParameterfvARB)
#define glGetProgramEnvParameterIivNV		MANGLE(GetProgramEnvParameterIivNV)
#define glGetProgramEnvParameterIuivNV		MANGLE(GetProgramEnvParameterIuivNV)
#define glGetProgramInfoLog		MANGLE(GetProgramInfoLog)
#define glGetProgramivARB		MANGLE(GetProgramivARB)
#define glGetProgramiv		MANGLE(GetProgramiv)
#define glGetProgramivNV		MANGLE(GetProgramivNV)
#define glGetProgramLocalParameterdvARB		MANGLE(GetProgramLocalParameterdvARB)
#define glGetProgramLocalParameterfvARB		MANGLE(GetProgramLocalParameterfvARB)
#define glGetProgramLocalParameterIivNV		MANGLE(GetProgramLocalParameterIivNV)
#define glGetProgramLocalParameterIuivNV		MANGLE(GetProgramLocalParameterIuivNV)
#define glGetProgramNamedParameterdvNV		MANGLE(GetProgramNamedParameterdvNV)
#define glGetProgramNamedParameterfvNV		MANGLE(GetProgramNamedParameterfvNV)
#define glGetProgramParameterdvNV		MANGLE(GetProgramParameterdvNV)
#define glGetProgramParameterfvNV		MANGLE(GetProgramParameterfvNV)
#define glGetProgramRegisterfvMESA		MANGLE(GetProgramRegisterfvMESA)
#define glGetProgramStringARB		MANGLE(GetProgramStringARB)
#define glGetProgramStringNV		MANGLE(GetProgramStringNV)
#define glGetQueryivARB		MANGLE(GetQueryivARB)
#define glGetQueryiv		MANGLE(GetQueryiv)
#define glGetQueryObjecti64vEXT		MANGLE(GetQueryObjecti64vEXT)
#define glGetQueryObjectivARB		MANGLE(GetQueryObjectivARB)
#define glGetQueryObjectiv		MANGLE(GetQueryObjectiv)
#define glGetQueryObjectui64vEXT		MANGLE(GetQueryObjectui64vEXT)
#define glGetQueryObjectuivARB		MANGLE(GetQueryObjectuivARB)
#define glGetQueryObjectuiv		MANGLE(GetQueryObjectuiv)
#define glGetRenderbufferParameterivEXT		MANGLE(GetRenderbufferParameterivEXT)
#define glGetRenderbufferParameteriv		MANGLE(GetRenderbufferParameteriv)
#define glGetSeparableFilterEXT		MANGLE(GetSeparableFilterEXT)
#define glGetSeparableFilter		MANGLE(GetSeparableFilter)
#define glGetShaderInfoLog		MANGLE(GetShaderInfoLog)
#define glGetShaderiv		MANGLE(GetShaderiv)
#define glGetShaderSourceARB		MANGLE(GetShaderSourceARB)
#define glGetShaderSource		MANGLE(GetShaderSource)
#define glGetSharpenTexFuncSGIS		MANGLE(GetSharpenTexFuncSGIS)
#define glGetStringi		MANGLE(GetStringi)
#define glGetString		MANGLE(GetString)
#define glGetSynciv		MANGLE(GetSynciv)
#define glGetTexBumpParameterfvATI		MANGLE(GetTexBumpParameterfvATI)
#define glGetTexBumpParameterivATI		MANGLE(GetTexBumpParameterivATI)
#define glGetTexEnvfv		MANGLE(GetTexEnvfv)
#define glGetTexEnviv		MANGLE(GetTexEnviv)
#define glGetTexFilterFuncSGIS		MANGLE(GetTexFilterFuncSGIS)
#define glGetTexGendv		MANGLE(GetTexGendv)
#define glGetTexGenfv		MANGLE(GetTexGenfv)
#define glGetTexGeniv		MANGLE(GetTexGeniv)
#define glGetTexImage		MANGLE(GetTexImage)
#define glGetTexLevelParameterfv		MANGLE(GetTexLevelParameterfv)
#define glGetTexLevelParameteriv		MANGLE(GetTexLevelParameteriv)
#define glGetTexParameterfv		MANGLE(GetTexParameterfv)
#define glGetTexParameterIivEXT		MANGLE(GetTexParameterIivEXT)
#define glGetTexParameterIiv		MANGLE(GetTexParameterIiv)
#define glGetTexParameterIuivEXT		MANGLE(GetTexParameterIuivEXT)
#define glGetTexParameterIuiv		MANGLE(GetTexParameterIuiv)
#define glGetTexParameteriv		MANGLE(GetTexParameteriv)
#define glGetTexParameterPointervAPPLE		MANGLE(GetTexParameterPointervAPPLE)
#define glGetTextureImageEXT		MANGLE(GetTextureImageEXT)
#define glGetTextureLevelParameterfvEXT		MANGLE(GetTextureLevelParameterfvEXT)
#define glGetTextureLevelParameterivEXT		MANGLE(GetTextureLevelParameterivEXT)
#define glGetTextureParameterfvEXT		MANGLE(GetTextureParameterfvEXT)
#define glGetTextureParameterIivEXT		MANGLE(GetTextureParameterIivEXT)
#define glGetTextureParameterIuivEXT		MANGLE(GetTextureParameterIuivEXT)
#define glGetTextureParameterivEXT		MANGLE(GetTextureParameterivEXT)
#define glGetTrackMatrixivNV		MANGLE(GetTrackMatrixivNV)
#define glGetTransformFeedbackVaryingEXT		MANGLE(GetTransformFeedbackVaryingEXT)
#define glGetTransformFeedbackVarying		MANGLE(GetTransformFeedbackVarying)
#define glGetTransformFeedbackVaryingNV		MANGLE(GetTransformFeedbackVaryingNV)
#define glGetUniformBlockIndex		MANGLE(GetUniformBlockIndex)
#define glGetUniformBufferSizeEXT		MANGLE(GetUniformBufferSizeEXT)
#define glGetUniformfvARB		MANGLE(GetUniformfvARB)
#define glGetUniformfv		MANGLE(GetUniformfv)
#define glGetUniformIndices		MANGLE(GetUniformIndices)
#define glGetUniformivARB		MANGLE(GetUniformivARB)
#define glGetUniformiv		MANGLE(GetUniformiv)
#define glGetUniformLocationARB		MANGLE(GetUniformLocationARB)
#define glGetUniformLocation		MANGLE(GetUniformLocation)
#define glGetUniformOffsetEXT		MANGLE(GetUniformOffsetEXT)
#define glGetUniformui64vNV		MANGLE(GetUniformui64vNV)
#define glGetUniformuivEXT		MANGLE(GetUniformuivEXT)
#define glGetUniformuiv		MANGLE(GetUniformuiv)
#define glGetVariantArrayObjectfvATI		MANGLE(GetVariantArrayObjectfvATI)
#define glGetVariantArrayObjectivATI		MANGLE(GetVariantArrayObjectivATI)
#define glGetVariantBooleanvEXT		MANGLE(GetVariantBooleanvEXT)
#define glGetVariantFloatvEXT		MANGLE(GetVariantFloatvEXT)
#define glGetVariantIntegervEXT		MANGLE(GetVariantIntegervEXT)
#define glGetVariantPointervEXT		MANGLE(GetVariantPointervEXT)
#define glGetVaryingLocationNV		MANGLE(GetVaryingLocationNV)
#define glGetVertexAttribArrayObjectfvATI		MANGLE(GetVertexAttribArrayObjectfvATI)
#define glGetVertexAttribArrayObjectivATI		MANGLE(GetVertexAttribArrayObjectivATI)
#define glGetVertexAttribdvARB		MANGLE(GetVertexAttribdvARB)
#define glGetVertexAttribdv		MANGLE(GetVertexAttribdv)
#define glGetVertexAttribdvNV		MANGLE(GetVertexAttribdvNV)
#define glGetVertexAttribfvARB		MANGLE(GetVertexAttribfvARB)
#define glGetVertexAttribfv		MANGLE(GetVertexAttribfv)
#define glGetVertexAttribfvNV		MANGLE(GetVertexAttribfvNV)
#define glGetVertexAttribIivEXT		MANGLE(GetVertexAttribIivEXT)
#define glGetVertexAttribIiv		MANGLE(GetVertexAttribIiv)
#define glGetVertexAttribIuivEXT		MANGLE(GetVertexAttribIuivEXT)
#define glGetVertexAttribIuiv		MANGLE(GetVertexAttribIuiv)
#define glGetVertexAttribivARB		MANGLE(GetVertexAttribivARB)
#define glGetVertexAttribiv		MANGLE(GetVertexAttribiv)
#define glGetVertexAttribivNV		MANGLE(GetVertexAttribivNV)
#define glGetVertexAttribPointervARB		MANGLE(GetVertexAttribPointervARB)
#define glGetVertexAttribPointerv		MANGLE(GetVertexAttribPointerv)
#define glGetVertexAttribPointervNV		MANGLE(GetVertexAttribPointervNV)
#define glGetVideoCaptureivNV		MANGLE(GetVideoCaptureivNV)
#define glGetVideoCaptureStreamdvNV		MANGLE(GetVideoCaptureStreamdvNV)
#define glGetVideoCaptureStreamfvNV		MANGLE(GetVideoCaptureStreamfvNV)
#define glGetVideoCaptureStreamivNV		MANGLE(GetVideoCaptureStreamivNV)
#define glGetVideoi64vNV		MANGLE(GetVideoi64vNV)
#define glGetVideoivNV		MANGLE(GetVideoivNV)
#define glGetVideoui64vNV		MANGLE(GetVideoui64vNV)
#define glGetVideouivNV		MANGLE(GetVideouivNV)
#define glGlobalAlphaFactorbSUN		MANGLE(GlobalAlphaFactorbSUN)
#define glGlobalAlphaFactordSUN		MANGLE(GlobalAlphaFactordSUN)
#define glGlobalAlphaFactorfSUN		MANGLE(GlobalAlphaFactorfSUN)
#define glGlobalAlphaFactoriSUN		MANGLE(GlobalAlphaFactoriSUN)
#define glGlobalAlphaFactorsSUN		MANGLE(GlobalAlphaFactorsSUN)
#define glGlobalAlphaFactorubSUN		MANGLE(GlobalAlphaFactorubSUN)
#define glGlobalAlphaFactoruiSUN		MANGLE(GlobalAlphaFactoruiSUN)
#define glGlobalAlphaFactorusSUN		MANGLE(GlobalAlphaFactorusSUN)
#define glHint		MANGLE(Hint)
#define glHintPGI		MANGLE(HintPGI)
#define glHistogramEXT		MANGLE(HistogramEXT)
#define glHistogram		MANGLE(Histogram)
#define glIglooInterfaceSGIX		MANGLE(IglooInterfaceSGIX)
#define glImageTransformParameterfHP		MANGLE(ImageTransformParameterfHP)
#define glImageTransformParameterfvHP		MANGLE(ImageTransformParameterfvHP)
#define glImageTransformParameteriHP		MANGLE(ImageTransformParameteriHP)
#define glImageTransformParameterivHP		MANGLE(ImageTransformParameterivHP)
#define glIndexd		MANGLE(Indexd)
#define glIndexdv		MANGLE(Indexdv)
#define glIndexf		MANGLE(Indexf)
#define glIndexFormatNV		MANGLE(IndexFormatNV)
#define glIndexFuncEXT		MANGLE(IndexFuncEXT)
#define glIndexfv		MANGLE(Indexfv)
#define glIndexi		MANGLE(Indexi)
#define glIndexiv		MANGLE(Indexiv)
#define glIndexMask		MANGLE(IndexMask)
#define glIndexMaterialEXT		MANGLE(IndexMaterialEXT)
#define glIndexPointerEXT		MANGLE(IndexPointerEXT)
#define glIndexPointerListIBM		MANGLE(IndexPointerListIBM)
#define glIndexPointer		MANGLE(IndexPointer)
#define glIndexs		MANGLE(Indexs)
#define glIndexsv		MANGLE(Indexsv)
#define glIndexub		MANGLE(Indexub)
#define glIndexubv		MANGLE(Indexubv)
#define glInitNames		MANGLE(InitNames)
#define glInsertComponentEXT		MANGLE(InsertComponentEXT)
#define glInstrumentsBufferSGIX		MANGLE(InstrumentsBufferSGIX)
#define glInterleavedArrays		MANGLE(InterleavedArrays)
#define glIsAsyncMarkerSGIX		MANGLE(IsAsyncMarkerSGIX)
#define glIsBufferARB		MANGLE(IsBufferARB)
#define glIsBuffer		MANGLE(IsBuffer)
#define glIsBufferResidentNV		MANGLE(IsBufferResidentNV)
#define glIsEnabledi		MANGLE(IsEnabledi)
#define glIsEnabledIndexedEXT		MANGLE(IsEnabledIndexedEXT)
#define glIsEnabled		MANGLE(IsEnabled)
#define glIsFenceAPPLE		MANGLE(IsFenceAPPLE)
#define glIsFenceNV		MANGLE(IsFenceNV)
#define glIsFramebufferEXT		MANGLE(IsFramebufferEXT)
#define glIsFramebuffer		MANGLE(IsFramebuffer)
#define glIsList		MANGLE(IsList)
#define glIsNamedBufferResidentNV		MANGLE(IsNamedBufferResidentNV)
#define glIsObjectBufferATI		MANGLE(IsObjectBufferATI)
#define glIsOcclusionQueryNV		MANGLE(IsOcclusionQueryNV)
#define glIsProgramARB		MANGLE(IsProgramARB)
#define glIsProgram		MANGLE(IsProgram)
#define glIsProgramNV		MANGLE(IsProgramNV)
#define glIsQueryARB		MANGLE(IsQueryARB)
#define glIsQuery		MANGLE(IsQuery)
#define glIsRenderbufferEXT		MANGLE(IsRenderbufferEXT)
#define glIsRenderbuffer		MANGLE(IsRenderbuffer)
#define glIsShader		MANGLE(IsShader)
#define glIsSync		MANGLE(IsSync)
#define glIsTextureEXT		MANGLE(IsTextureEXT)
#define glIsTexture		MANGLE(IsTexture)
#define glIsTransformFeedbackNV		MANGLE(IsTransformFeedbackNV)
#define glIsVariantEnabledEXT		MANGLE(IsVariantEnabledEXT)
#define glIsVertexArrayAPPLE		MANGLE(IsVertexArrayAPPLE)
#define glIsVertexArray		MANGLE(IsVertexArray)
#define glIsVertexAttribEnabledAPPLE		MANGLE(IsVertexAttribEnabledAPPLE)
#define glLightEnviSGIX		MANGLE(LightEnviSGIX)
#define glLightf		MANGLE(Lightf)
#define glLightfv		MANGLE(Lightfv)
#define glLighti		MANGLE(Lighti)
#define glLightiv		MANGLE(Lightiv)
#define glLightModelf		MANGLE(LightModelf)
#define glLightModelfv		MANGLE(LightModelfv)
#define glLightModeli		MANGLE(LightModeli)
#define glLightModeliv		MANGLE(LightModeliv)
#define glLineStipple		MANGLE(LineStipple)
#define glLineWidth		MANGLE(LineWidth)
#define glLinkProgramARB		MANGLE(LinkProgramARB)
#define glLinkProgram		MANGLE(LinkProgram)
#define glListBase		MANGLE(ListBase)
#define glListParameterfSGIX		MANGLE(ListParameterfSGIX)
#define glListParameterfvSGIX		MANGLE(ListParameterfvSGIX)
#define glListParameteriSGIX		MANGLE(ListParameteriSGIX)
#define glListParameterivSGIX		MANGLE(ListParameterivSGIX)
#define glLoadIdentityDeformationMapSGIX		MANGLE(LoadIdentityDeformationMapSGIX)
#define glLoadIdentity		MANGLE(LoadIdentity)
#define glLoadMatrixd		MANGLE(LoadMatrixd)
#define glLoadMatrixf		MANGLE(LoadMatrixf)
#define glLoadName		MANGLE(LoadName)
#define glLoadProgramNV		MANGLE(LoadProgramNV)
#define glLoadTransposeMatrixdARB		MANGLE(LoadTransposeMatrixdARB)
#define glLoadTransposeMatrixd		MANGLE(LoadTransposeMatrixd)
#define glLoadTransposeMatrixfARB		MANGLE(LoadTransposeMatrixfARB)
#define glLoadTransposeMatrixf		MANGLE(LoadTransposeMatrixf)
#define glLockArraysEXT		MANGLE(LockArraysEXT)
#define glLogicOp		MANGLE(LogicOp)
#define glMakeBufferNonResidentNV		MANGLE(MakeBufferNonResidentNV)
#define glMakeBufferResidentNV		MANGLE(MakeBufferResidentNV)
#define glMap1d		MANGLE(Map1d)
#define glMap1f		MANGLE(Map1f)
#define glMap2d		MANGLE(Map2d)
#define glMap2f		MANGLE(Map2f)
#define glMapBufferARB		MANGLE(MapBufferARB)
#define glMapBuffer		MANGLE(MapBuffer)
#define glMapBufferRange		MANGLE(MapBufferRange)
#define glMapControlPointsNV		MANGLE(MapControlPointsNV)
#define glMapGrid1d		MANGLE(MapGrid1d)
#define glMapGrid1f		MANGLE(MapGrid1f)
#define glMapGrid2d		MANGLE(MapGrid2d)
#define glMapGrid2f		MANGLE(MapGrid2f)
#define glMapNamedBufferEXT		MANGLE(MapNamedBufferEXT)
#define glMapObjectBufferATI		MANGLE(MapObjectBufferATI)
#define glMapParameterfvNV		MANGLE(MapParameterfvNV)
#define glMapParameterivNV		MANGLE(MapParameterivNV)
#define glMapVertexAttrib1dAPPLE		MANGLE(MapVertexAttrib1dAPPLE)
#define glMapVertexAttrib1fAPPLE		MANGLE(MapVertexAttrib1fAPPLE)
#define glMapVertexAttrib2dAPPLE		MANGLE(MapVertexAttrib2dAPPLE)
#define glMapVertexAttrib2fAPPLE		MANGLE(MapVertexAttrib2fAPPLE)
#define glMaterialf		MANGLE(Materialf)
#define glMaterialfv		MANGLE(Materialfv)
#define glMateriali		MANGLE(Materiali)
#define glMaterialiv		MANGLE(Materialiv)
#define glMatrixFrustumEXT		MANGLE(MatrixFrustumEXT)
#define glMatrixIndexPointerARB		MANGLE(MatrixIndexPointerARB)
#define glMatrixIndexubvARB		MANGLE(MatrixIndexubvARB)
#define glMatrixIndexuivARB		MANGLE(MatrixIndexuivARB)
#define glMatrixIndexusvARB		MANGLE(MatrixIndexusvARB)
#define glMatrixLoaddEXT		MANGLE(MatrixLoaddEXT)
#define glMatrixLoadfEXT		MANGLE(MatrixLoadfEXT)
#define glMatrixLoadIdentityEXT		MANGLE(MatrixLoadIdentityEXT)
#define glMatrixLoadTransposedEXT		MANGLE(MatrixLoadTransposedEXT)
#define glMatrixLoadTransposefEXT		MANGLE(MatrixLoadTransposefEXT)
#define glMatrixMode		MANGLE(MatrixMode)
#define glMatrixMultdEXT		MANGLE(MatrixMultdEXT)
#define glMatrixMultfEXT		MANGLE(MatrixMultfEXT)
#define glMatrixMultTransposedEXT		MANGLE(MatrixMultTransposedEXT)
#define glMatrixMultTransposefEXT		MANGLE(MatrixMultTransposefEXT)
#define glMatrixOrthoEXT		MANGLE(MatrixOrthoEXT)
#define glMatrixPopEXT		MANGLE(MatrixPopEXT)
#define glMatrixPushEXT		MANGLE(MatrixPushEXT)
#define glMatrixRotatedEXT		MANGLE(MatrixRotatedEXT)
#define glMatrixRotatefEXT		MANGLE(MatrixRotatefEXT)
#define glMatrixScaledEXT		MANGLE(MatrixScaledEXT)
#define glMatrixScalefEXT		MANGLE(MatrixScalefEXT)
#define glMatrixTranslatedEXT		MANGLE(MatrixTranslatedEXT)
#define glMatrixTranslatefEXT		MANGLE(MatrixTranslatefEXT)
#define glMinmaxEXT		MANGLE(MinmaxEXT)
#define glMinmax		MANGLE(Minmax)
#define glMinSampleShading		MANGLE(MinSampleShading)
#define glMultiDrawArraysEXT		MANGLE(MultiDrawArraysEXT)
#define glMultiDrawArrays		MANGLE(MultiDrawArrays)
#define glMultiDrawElementArrayAPPLE		MANGLE(MultiDrawElementArrayAPPLE)
#define glMultiDrawElementsBaseVertex		MANGLE(MultiDrawElementsBaseVertex)
#define glMultiDrawElementsEXT		MANGLE(MultiDrawElementsEXT)
#define glMultiDrawElements		MANGLE(MultiDrawElements)
#define glMultiDrawRangeElementArrayAPPLE		MANGLE(MultiDrawRangeElementArrayAPPLE)
#define glMultiModeDrawArraysIBM		MANGLE(MultiModeDrawArraysIBM)
#define glMultiModeDrawElementsIBM		MANGLE(MultiModeDrawElementsIBM)
#define glMultiTexBufferEXT		MANGLE(MultiTexBufferEXT)
#define glMultiTexCoord1dARB		MANGLE(MultiTexCoord1dARB)
#define glMultiTexCoord1d		MANGLE(MultiTexCoord1d)
#define glMultiTexCoord1dvARB		MANGLE(MultiTexCoord1dvARB)
#define glMultiTexCoord1dv		MANGLE(MultiTexCoord1dv)
#define glMultiTexCoord1fARB		MANGLE(MultiTexCoord1fARB)
#define glMultiTexCoord1f		MANGLE(MultiTexCoord1f)
#define glMultiTexCoord1fvARB		MANGLE(MultiTexCoord1fvARB)
#define glMultiTexCoord1fv		MANGLE(MultiTexCoord1fv)
#define glMultiTexCoord1hNV		MANGLE(MultiTexCoord1hNV)
#define glMultiTexCoord1hvNV		MANGLE(MultiTexCoord1hvNV)
#define glMultiTexCoord1iARB		MANGLE(MultiTexCoord1iARB)
#define glMultiTexCoord1i		MANGLE(MultiTexCoord1i)
#define glMultiTexCoord1ivARB		MANGLE(MultiTexCoord1ivARB)
#define glMultiTexCoord1iv		MANGLE(MultiTexCoord1iv)
#define glMultiTexCoord1sARB		MANGLE(MultiTexCoord1sARB)
#define glMultiTexCoord1s		MANGLE(MultiTexCoord1s)
#define glMultiTexCoord1svARB		MANGLE(MultiTexCoord1svARB)
#define glMultiTexCoord1sv		MANGLE(MultiTexCoord1sv)
#define glMultiTexCoord2dARB		MANGLE(MultiTexCoord2dARB)
#define glMultiTexCoord2d		MANGLE(MultiTexCoord2d)
#define glMultiTexCoord2dvARB		MANGLE(MultiTexCoord2dvARB)
#define glMultiTexCoord2dv		MANGLE(MultiTexCoord2dv)
#define glMultiTexCoord2fARB		MANGLE(MultiTexCoord2fARB)
#define glMultiTexCoord2f		MANGLE(MultiTexCoord2f)
#define glMultiTexCoord2fvARB		MANGLE(MultiTexCoord2fvARB)
#define glMultiTexCoord2fv		MANGLE(MultiTexCoord2fv)
#define glMultiTexCoord2hNV		MANGLE(MultiTexCoord2hNV)
#define glMultiTexCoord2hvNV		MANGLE(MultiTexCoord2hvNV)
#define glMultiTexCoord2iARB		MANGLE(MultiTexCoord2iARB)
#define glMultiTexCoord2i		MANGLE(MultiTexCoord2i)
#define glMultiTexCoord2ivARB		MANGLE(MultiTexCoord2ivARB)
#define glMultiTexCoord2iv		MANGLE(MultiTexCoord2iv)
#define glMultiTexCoord2sARB		MANGLE(MultiTexCoord2sARB)
#define glMultiTexCoord2s		MANGLE(MultiTexCoord2s)
#define glMultiTexCoord2svARB		MANGLE(MultiTexCoord2svARB)
#define glMultiTexCoord2sv		MANGLE(MultiTexCoord2sv)
#define glMultiTexCoord3dARB		MANGLE(MultiTexCoord3dARB)
#define glMultiTexCoord3d		MANGLE(MultiTexCoord3d)
#define glMultiTexCoord3dvARB		MANGLE(MultiTexCoord3dvARB)
#define glMultiTexCoord3dv		MANGLE(MultiTexCoord3dv)
#define glMultiTexCoord3fARB		MANGLE(MultiTexCoord3fARB)
#define glMultiTexCoord3f		MANGLE(MultiTexCoord3f)
#define glMultiTexCoord3fvARB		MANGLE(MultiTexCoord3fvARB)
#define glMultiTexCoord3fv		MANGLE(MultiTexCoord3fv)
#define glMultiTexCoord3hNV		MANGLE(MultiTexCoord3hNV)
#define glMultiTexCoord3hvNV		MANGLE(MultiTexCoord3hvNV)
#define glMultiTexCoord3iARB		MANGLE(MultiTexCoord3iARB)
#define glMultiTexCoord3i		MANGLE(MultiTexCoord3i)
#define glMultiTexCoord3ivARB		MANGLE(MultiTexCoord3ivARB)
#define glMultiTexCoord3iv		MANGLE(MultiTexCoord3iv)
#define glMultiTexCoord3sARB		MANGLE(MultiTexCoord3sARB)
#define glMultiTexCoord3s		MANGLE(MultiTexCoord3s)
#define glMultiTexCoord3svARB		MANGLE(MultiTexCoord3svARB)
#define glMultiTexCoord3sv		MANGLE(MultiTexCoord3sv)
#define glMultiTexCoord4dARB		MANGLE(MultiTexCoord4dARB)
#define glMultiTexCoord4d		MANGLE(MultiTexCoord4d)
#define glMultiTexCoord4dvARB		MANGLE(MultiTexCoord4dvARB)
#define glMultiTexCoord4dv		MANGLE(MultiTexCoord4dv)
#define glMultiTexCoord4fARB		MANGLE(MultiTexCoord4fARB)
#define glMultiTexCoord4f		MANGLE(MultiTexCoord4f)
#define glMultiTexCoord4fvARB		MANGLE(MultiTexCoord4fvARB)
#define glMultiTexCoord4fv		MANGLE(MultiTexCoord4fv)
#define glMultiTexCoord4hNV		MANGLE(MultiTexCoord4hNV)
#define glMultiTexCoord4hvNV		MANGLE(MultiTexCoord4hvNV)
#define glMultiTexCoord4iARB		MANGLE(MultiTexCoord4iARB)
#define glMultiTexCoord4i		MANGLE(MultiTexCoord4i)
#define glMultiTexCoord4ivARB		MANGLE(MultiTexCoord4ivARB)
#define glMultiTexCoord4iv		MANGLE(MultiTexCoord4iv)
#define glMultiTexCoord4sARB		MANGLE(MultiTexCoord4sARB)
#define glMultiTexCoord4s		MANGLE(MultiTexCoord4s)
#define glMultiTexCoord4svARB		MANGLE(MultiTexCoord4svARB)
#define glMultiTexCoord4sv		MANGLE(MultiTexCoord4sv)
#define glMultiTexCoordPointerEXT		MANGLE(MultiTexCoordPointerEXT)
#define glMultiTexEnvfEXT		MANGLE(MultiTexEnvfEXT)
#define glMultiTexEnvfvEXT		MANGLE(MultiTexEnvfvEXT)
#define glMultiTexEnviEXT		MANGLE(MultiTexEnviEXT)
#define glMultiTexEnvivEXT		MANGLE(MultiTexEnvivEXT)
#define glMultiTexGendEXT		MANGLE(MultiTexGendEXT)
#define glMultiTexGendvEXT		MANGLE(MultiTexGendvEXT)
#define glMultiTexGenfEXT		MANGLE(MultiTexGenfEXT)
#define glMultiTexGenfvEXT		MANGLE(MultiTexGenfvEXT)
#define glMultiTexGeniEXT		MANGLE(MultiTexGeniEXT)
#define glMultiTexGenivEXT		MANGLE(MultiTexGenivEXT)
#define glMultiTexImage1DEXT		MANGLE(MultiTexImage1DEXT)
#define glMultiTexImage2DEXT		MANGLE(MultiTexImage2DEXT)
#define glMultiTexImage3DEXT		MANGLE(MultiTexImage3DEXT)
#define glMultiTexParameterfEXT		MANGLE(MultiTexParameterfEXT)
#define glMultiTexParameterfvEXT		MANGLE(MultiTexParameterfvEXT)
#define glMultiTexParameteriEXT		MANGLE(MultiTexParameteriEXT)
#define glMultiTexParameterIivEXT		MANGLE(MultiTexParameterIivEXT)
#define glMultiTexParameterIuivEXT		MANGLE(MultiTexParameterIuivEXT)
#define glMultiTexParameterivEXT		MANGLE(MultiTexParameterivEXT)
#define glMultiTexRenderbufferEXT		MANGLE(MultiTexRenderbufferEXT)
#define glMultiTexSubImage1DEXT		MANGLE(MultiTexSubImage1DEXT)
#define glMultiTexSubImage2DEXT		MANGLE(MultiTexSubImage2DEXT)
#define glMultiTexSubImage3DEXT		MANGLE(MultiTexSubImage3DEXT)
#define glMultMatrixd		MANGLE(MultMatrixd)
#define glMultMatrixf		MANGLE(MultMatrixf)
#define glMultTransposeMatrixdARB		MANGLE(MultTransposeMatrixdARB)
#define glMultTransposeMatrixd		MANGLE(MultTransposeMatrixd)
#define glMultTransposeMatrixfARB		MANGLE(MultTransposeMatrixfARB)
#define glMultTransposeMatrixf		MANGLE(MultTransposeMatrixf)
#define glNamedBufferDataEXT		MANGLE(NamedBufferDataEXT)
#define glNamedBufferSubDataEXT		MANGLE(NamedBufferSubDataEXT)
#define glNamedFramebufferRenderbufferEXT		MANGLE(NamedFramebufferRenderbufferEXT)
#define glNamedFramebufferTexture1DEXT		MANGLE(NamedFramebufferTexture1DEXT)
#define glNamedFramebufferTexture2DEXT		MANGLE(NamedFramebufferTexture2DEXT)
#define glNamedFramebufferTexture3DEXT		MANGLE(NamedFramebufferTexture3DEXT)
#define glNamedFramebufferTextureEXT		MANGLE(NamedFramebufferTextureEXT)
#define glNamedFramebufferTextureFaceEXT		MANGLE(NamedFramebufferTextureFaceEXT)
#define glNamedFramebufferTextureLayerEXT		MANGLE(NamedFramebufferTextureLayerEXT)
#define glNamedMakeBufferNonResidentNV		MANGLE(NamedMakeBufferNonResidentNV)
#define glNamedMakeBufferResidentNV		MANGLE(NamedMakeBufferResidentNV)
#define glNamedProgramLocalParameter4dEXT		MANGLE(NamedProgramLocalParameter4dEXT)
#define glNamedProgramLocalParameter4dvEXT		MANGLE(NamedProgramLocalParameter4dvEXT)
#define glNamedProgramLocalParameter4fEXT		MANGLE(NamedProgramLocalParameter4fEXT)
#define glNamedProgramLocalParameter4fvEXT		MANGLE(NamedProgramLocalParameter4fvEXT)
#define glNamedProgramLocalParameterI4iEXT		MANGLE(NamedProgramLocalParameterI4iEXT)
#define glNamedProgramLocalParameterI4ivEXT		MANGLE(NamedProgramLocalParameterI4ivEXT)
#define glNamedProgramLocalParameterI4uiEXT		MANGLE(NamedProgramLocalParameterI4uiEXT)
#define glNamedProgramLocalParameterI4uivEXT		MANGLE(NamedProgramLocalParameterI4uivEXT)
#define glNamedProgramLocalParameters4fvEXT		MANGLE(NamedProgramLocalParameters4fvEXT)
#define glNamedProgramLocalParametersI4ivEXT		MANGLE(NamedProgramLocalParametersI4ivEXT)
#define glNamedProgramLocalParametersI4uivEXT		MANGLE(NamedProgramLocalParametersI4uivEXT)
#define glNamedProgramStringEXT		MANGLE(NamedProgramStringEXT)
#define glNamedRenderbufferStorageEXT		MANGLE(NamedRenderbufferStorageEXT)
#define glNamedRenderbufferStorageMultisampleCoverageEXT		MANGLE(NamedRenderbufferStorageMultisampleCoverageEXT)
#define glNamedRenderbufferStorageMultisampleEXT		MANGLE(NamedRenderbufferStorageMultisampleEXT)
#define glNewList		MANGLE(NewList)
#define glNewObjectBufferATI		MANGLE(NewObjectBufferATI)
#define glNormal3b		MANGLE(Normal3b)
#define glNormal3bv		MANGLE(Normal3bv)
#define glNormal3d		MANGLE(Normal3d)
#define glNormal3dv		MANGLE(Normal3dv)
#define glNormal3f		MANGLE(Normal3f)
#define glNormal3fVertex3fSUN		MANGLE(Normal3fVertex3fSUN)
#define glNormal3fVertex3fvSUN		MANGLE(Normal3fVertex3fvSUN)
#define glNormal3fv		MANGLE(Normal3fv)
#define glNormal3hNV		MANGLE(Normal3hNV)
#define glNormal3hvNV		MANGLE(Normal3hvNV)
#define glNormal3i		MANGLE(Normal3i)
#define glNormal3iv		MANGLE(Normal3iv)
#define glNormal3s		MANGLE(Normal3s)
#define glNormal3sv		MANGLE(Normal3sv)
#define glNormalFormatNV		MANGLE(NormalFormatNV)
#define glNormalPointerEXT		MANGLE(NormalPointerEXT)
#define glNormalPointerListIBM		MANGLE(NormalPointerListIBM)
#define glNormalPointer		MANGLE(NormalPointer)
#define glNormalPointervINTEL		MANGLE(NormalPointervINTEL)
#define glNormalStream3bATI		MANGLE(NormalStream3bATI)
#define glNormalStream3bvATI		MANGLE(NormalStream3bvATI)
#define glNormalStream3dATI		MANGLE(NormalStream3dATI)
#define glNormalStream3dvATI		MANGLE(NormalStream3dvATI)
#define glNormalStream3fATI		MANGLE(NormalStream3fATI)
#define glNormalStream3fvATI		MANGLE(NormalStream3fvATI)
#define glNormalStream3iATI		MANGLE(NormalStream3iATI)
#define glNormalStream3ivATI		MANGLE(NormalStream3ivATI)
#define glNormalStream3sATI		MANGLE(NormalStream3sATI)
#define glNormalStream3svATI		MANGLE(NormalStream3svATI)
#define glObjectPurgeableAPPLE		MANGLE(ObjectPurgeableAPPLE)
#define glObjectUnpurgeableAPPLE		MANGLE(ObjectUnpurgeableAPPLE)
#define glOrtho		MANGLE(Ortho)
#define glPassTexCoordATI		MANGLE(PassTexCoordATI)
#define glPassThrough		MANGLE(PassThrough)
#define glPauseTransformFeedbackNV		MANGLE(PauseTransformFeedbackNV)
#define glPixelDataRangeNV		MANGLE(PixelDataRangeNV)
#define glPixelMapfv		MANGLE(PixelMapfv)
#define glPixelMapuiv		MANGLE(PixelMapuiv)
#define glPixelMapusv		MANGLE(PixelMapusv)
#define glPixelStoref		MANGLE(PixelStoref)
#define glPixelStorei		MANGLE(PixelStorei)
#define glPixelTexGenParameterfSGIS		MANGLE(PixelTexGenParameterfSGIS)
#define glPixelTexGenParameterfvSGIS		MANGLE(PixelTexGenParameterfvSGIS)
#define glPixelTexGenParameteriSGIS		MANGLE(PixelTexGenParameteriSGIS)
#define glPixelTexGenParameterivSGIS		MANGLE(PixelTexGenParameterivSGIS)
#define glPixelTexGenSGIX		MANGLE(PixelTexGenSGIX)
#define glPixelTransferf		MANGLE(PixelTransferf)
#define glPixelTransferi		MANGLE(PixelTransferi)
#define glPixelTransformParameterfEXT		MANGLE(PixelTransformParameterfEXT)
#define glPixelTransformParameterfvEXT		MANGLE(PixelTransformParameterfvEXT)
#define glPixelTransformParameteriEXT		MANGLE(PixelTransformParameteriEXT)
#define glPixelTransformParameterivEXT		MANGLE(PixelTransformParameterivEXT)
#define glPixelZoom		MANGLE(PixelZoom)
#define glPNTrianglesfATI		MANGLE(PNTrianglesfATI)
#define glPNTrianglesiATI		MANGLE(PNTrianglesiATI)
#define glPointParameterfARB		MANGLE(PointParameterfARB)
#define glPointParameterfEXT		MANGLE(PointParameterfEXT)
#define glPointParameterf		MANGLE(PointParameterf)
#define glPointParameterfSGIS		MANGLE(PointParameterfSGIS)
#define glPointParameterfvARB		MANGLE(PointParameterfvARB)
#define glPointParameterfvEXT		MANGLE(PointParameterfvEXT)
#define glPointParameterfv		MANGLE(PointParameterfv)
#define glPointParameterfvSGIS		MANGLE(PointParameterfvSGIS)
#define glPointParameteri		MANGLE(PointParameteri)
#define glPointParameteriNV		MANGLE(PointParameteriNV)
#define glPointParameteriv		MANGLE(PointParameteriv)
#define glPointParameterivNV		MANGLE(PointParameterivNV)
#define glPointSize		MANGLE(PointSize)
#define glPollAsyncSGIX		MANGLE(PollAsyncSGIX)
#define glPollInstrumentsSGIX		MANGLE(PollInstrumentsSGIX)
#define glPolygonMode		MANGLE(PolygonMode)
#define glPolygonOffsetEXT		MANGLE(PolygonOffsetEXT)
#define glPolygonOffset		MANGLE(PolygonOffset)
#define glPolygonStipple		MANGLE(PolygonStipple)
#define glPopAttrib		MANGLE(PopAttrib)
#define glPopClientAttrib		MANGLE(PopClientAttrib)
#define glPopMatrix		MANGLE(PopMatrix)
#define glPopName		MANGLE(PopName)
#define glPresentFrameDualFillNV		MANGLE(PresentFrameDualFillNV)
#define glPresentFrameKeyedNV		MANGLE(PresentFrameKeyedNV)
#define glPrimitiveRestartIndex		MANGLE(PrimitiveRestartIndex)
#define glPrimitiveRestartIndexNV		MANGLE(PrimitiveRestartIndexNV)
#define glPrimitiveRestartNV		MANGLE(PrimitiveRestartNV)
#define glPrioritizeTexturesEXT		MANGLE(PrioritizeTexturesEXT)
#define glPrioritizeTextures		MANGLE(PrioritizeTextures)
#define glProgramBufferParametersfvNV		MANGLE(ProgramBufferParametersfvNV)
#define glProgramBufferParametersIivNV		MANGLE(ProgramBufferParametersIivNV)
#define glProgramBufferParametersIuivNV		MANGLE(ProgramBufferParametersIuivNV)
#define glProgramCallbackMESA		MANGLE(ProgramCallbackMESA)
#define glProgramEnvParameter4dARB		MANGLE(ProgramEnvParameter4dARB)
#define glProgramEnvParameter4dvARB		MANGLE(ProgramEnvParameter4dvARB)
#define glProgramEnvParameter4fARB		MANGLE(ProgramEnvParameter4fARB)
#define glProgramEnvParameter4fvARB		MANGLE(ProgramEnvParameter4fvARB)
#define glProgramEnvParameterI4iNV		MANGLE(ProgramEnvParameterI4iNV)
#define glProgramEnvParameterI4ivNV		MANGLE(ProgramEnvParameterI4ivNV)
#define glProgramEnvParameterI4uiNV		MANGLE(ProgramEnvParameterI4uiNV)
#define glProgramEnvParameterI4uivNV		MANGLE(ProgramEnvParameterI4uivNV)
#define glProgramEnvParameters4fvEXT		MANGLE(ProgramEnvParameters4fvEXT)
#define glProgramEnvParametersI4ivNV		MANGLE(ProgramEnvParametersI4ivNV)
#define glProgramEnvParametersI4uivNV		MANGLE(ProgramEnvParametersI4uivNV)
#define glProgramLocalParameter4dARB		MANGLE(ProgramLocalParameter4dARB)
#define glProgramLocalParameter4dvARB		MANGLE(ProgramLocalParameter4dvARB)
#define glProgramLocalParameter4fARB		MANGLE(ProgramLocalParameter4fARB)
#define glProgramLocalParameter4fvARB		MANGLE(ProgramLocalParameter4fvARB)
#define glProgramLocalParameterI4iNV		MANGLE(ProgramLocalParameterI4iNV)
#define glProgramLocalParameterI4ivNV		MANGLE(ProgramLocalParameterI4ivNV)
#define glProgramLocalParameterI4uiNV		MANGLE(ProgramLocalParameterI4uiNV)
#define glProgramLocalParameterI4uivNV		MANGLE(ProgramLocalParameterI4uivNV)
#define glProgramLocalParameters4fvEXT		MANGLE(ProgramLocalParameters4fvEXT)
#define glProgramLocalParametersI4ivNV		MANGLE(ProgramLocalParametersI4ivNV)
#define glProgramLocalParametersI4uivNV		MANGLE(ProgramLocalParametersI4uivNV)
#define glProgramNamedParameter4dNV		MANGLE(ProgramNamedParameter4dNV)
#define glProgramNamedParameter4dvNV		MANGLE(ProgramNamedParameter4dvNV)
#define glProgramNamedParameter4fNV		MANGLE(ProgramNamedParameter4fNV)
#define glProgramNamedParameter4fvNV		MANGLE(ProgramNamedParameter4fvNV)
#define glProgramParameter4dNV		MANGLE(ProgramParameter4dNV)
#define glProgramParameter4dvNV		MANGLE(ProgramParameter4dvNV)
#define glProgramParameter4fNV		MANGLE(ProgramParameter4fNV)
#define glProgramParameter4fvNV		MANGLE(ProgramParameter4fvNV)
#define glProgramParameteriARB		MANGLE(ProgramParameteriARB)
#define glProgramParameteriEXT		MANGLE(ProgramParameteriEXT)
#define glProgramParameteri		MANGLE(ProgramParameteri)
#define glProgramParameters4dvNV		MANGLE(ProgramParameters4dvNV)
#define glProgramParameters4fvNV		MANGLE(ProgramParameters4fvNV)
#define glProgramStringARB		MANGLE(ProgramStringARB)
#define glProgramUniform1fEXT		MANGLE(ProgramUniform1fEXT)
#define glProgramUniform1fvEXT		MANGLE(ProgramUniform1fvEXT)
#define glProgramUniform1iEXT		MANGLE(ProgramUniform1iEXT)
#define glProgramUniform1ivEXT		MANGLE(ProgramUniform1ivEXT)
#define glProgramUniform1uiEXT		MANGLE(ProgramUniform1uiEXT)
#define glProgramUniform1uivEXT		MANGLE(ProgramUniform1uivEXT)
#define glProgramUniform2fEXT		MANGLE(ProgramUniform2fEXT)
#define glProgramUniform2fvEXT		MANGLE(ProgramUniform2fvEXT)
#define glProgramUniform2iEXT		MANGLE(ProgramUniform2iEXT)
#define glProgramUniform2ivEXT		MANGLE(ProgramUniform2ivEXT)
#define glProgramUniform2uiEXT		MANGLE(ProgramUniform2uiEXT)
#define glProgramUniform2uivEXT		MANGLE(ProgramUniform2uivEXT)
#define glProgramUniform3fEXT		MANGLE(ProgramUniform3fEXT)
#define glProgramUniform3fvEXT		MANGLE(ProgramUniform3fvEXT)
#define glProgramUniform3iEXT		MANGLE(ProgramUniform3iEXT)
#define glProgramUniform3ivEXT		MANGLE(ProgramUniform3ivEXT)
#define glProgramUniform3uiEXT		MANGLE(ProgramUniform3uiEXT)
#define glProgramUniform3uivEXT		MANGLE(ProgramUniform3uivEXT)
#define glProgramUniform4fEXT		MANGLE(ProgramUniform4fEXT)
#define glProgramUniform4fvEXT		MANGLE(ProgramUniform4fvEXT)
#define glProgramUniform4iEXT		MANGLE(ProgramUniform4iEXT)
#define glProgramUniform4ivEXT		MANGLE(ProgramUniform4ivEXT)
#define glProgramUniform4uiEXT		MANGLE(ProgramUniform4uiEXT)
#define glProgramUniform4uivEXT		MANGLE(ProgramUniform4uivEXT)
#define glProgramUniformMatrix2fvEXT		MANGLE(ProgramUniformMatrix2fvEXT)
#define glProgramUniformMatrix2x3fvEXT		MANGLE(ProgramUniformMatrix2x3fvEXT)
#define glProgramUniformMatrix2x4fvEXT		MANGLE(ProgramUniformMatrix2x4fvEXT)
#define glProgramUniformMatrix3fvEXT		MANGLE(ProgramUniformMatrix3fvEXT)
#define glProgramUniformMatrix3x2fvEXT		MANGLE(ProgramUniformMatrix3x2fvEXT)
#define glProgramUniformMatrix3x4fvEXT		MANGLE(ProgramUniformMatrix3x4fvEXT)
#define glProgramUniformMatrix4fvEXT		MANGLE(ProgramUniformMatrix4fvEXT)
#define glProgramUniformMatrix4x2fvEXT		MANGLE(ProgramUniformMatrix4x2fvEXT)
#define glProgramUniformMatrix4x3fvEXT		MANGLE(ProgramUniformMatrix4x3fvEXT)
#define glProgramUniformui64NV		MANGLE(ProgramUniformui64NV)
#define glProgramUniformui64vNV		MANGLE(ProgramUniformui64vNV)
#define glProgramVertexLimitNV		MANGLE(ProgramVertexLimitNV)
#define glProvokingVertexEXT		MANGLE(ProvokingVertexEXT)
#define glProvokingVertex		MANGLE(ProvokingVertex)
#define glPushAttrib		MANGLE(PushAttrib)
#define glPushClientAttribDefaultEXT		MANGLE(PushClientAttribDefaultEXT)
#define glPushClientAttrib		MANGLE(PushClientAttrib)
#define glPushMatrix		MANGLE(PushMatrix)
#define glPushName		MANGLE(PushName)
#define glRasterPos2d		MANGLE(RasterPos2d)
#define glRasterPos2dv		MANGLE(RasterPos2dv)
#define glRasterPos2f		MANGLE(RasterPos2f)
#define glRasterPos2fv		MANGLE(RasterPos2fv)
#define glRasterPos2i		MANGLE(RasterPos2i)
#define glRasterPos2iv		MANGLE(RasterPos2iv)
#define glRasterPos2s		MANGLE(RasterPos2s)
#define glRasterPos2sv		MANGLE(RasterPos2sv)
#define glRasterPos3d		MANGLE(RasterPos3d)
#define glRasterPos3dv		MANGLE(RasterPos3dv)
#define glRasterPos3f		MANGLE(RasterPos3f)
#define glRasterPos3fv		MANGLE(RasterPos3fv)
#define glRasterPos3i		MANGLE(RasterPos3i)
#define glRasterPos3iv		MANGLE(RasterPos3iv)
#define glRasterPos3s		MANGLE(RasterPos3s)
#define glRasterPos3sv		MANGLE(RasterPos3sv)
#define glRasterPos4d		MANGLE(RasterPos4d)
#define glRasterPos4dv		MANGLE(RasterPos4dv)
#define glRasterPos4f		MANGLE(RasterPos4f)
#define glRasterPos4fv		MANGLE(RasterPos4fv)
#define glRasterPos4i		MANGLE(RasterPos4i)
#define glRasterPos4iv		MANGLE(RasterPos4iv)
#define glRasterPos4s		MANGLE(RasterPos4s)
#define glRasterPos4sv		MANGLE(RasterPos4sv)
#define glReadBuffer		MANGLE(ReadBuffer)
#define glReadInstrumentsSGIX		MANGLE(ReadInstrumentsSGIX)
#define glReadPixels		MANGLE(ReadPixels)
#define glRectd		MANGLE(Rectd)
#define glRectdv		MANGLE(Rectdv)
#define glRectf		MANGLE(Rectf)
#define glRectfv		MANGLE(Rectfv)
#define glRecti		MANGLE(Recti)
#define glRectiv		MANGLE(Rectiv)
#define glRects		MANGLE(Rects)
#define glRectsv		MANGLE(Rectsv)
#define glReferencePlaneSGIX		MANGLE(ReferencePlaneSGIX)
#define glRenderbufferStorageEXT		MANGLE(RenderbufferStorageEXT)
#define glRenderbufferStorage		MANGLE(RenderbufferStorage)
#define glRenderbufferStorageMultisampleCoverageNV		MANGLE(RenderbufferStorageMultisampleCoverageNV)
#define glRenderbufferStorageMultisampleEXT		MANGLE(RenderbufferStorageMultisampleEXT)
#define glRenderbufferStorageMultisample		MANGLE(RenderbufferStorageMultisample)
#define glRenderMode		MANGLE(RenderMode)
#define glReplacementCodePointerSUN		MANGLE(ReplacementCodePointerSUN)
#define glReplacementCodeubSUN		MANGLE(ReplacementCodeubSUN)
#define glReplacementCodeubvSUN		MANGLE(ReplacementCodeubvSUN)
#define glReplacementCodeuiColor3fVertex3fSUN		MANGLE(ReplacementCodeuiColor3fVertex3fSUN)
#define glReplacementCodeuiColor3fVertex3fvSUN		MANGLE(ReplacementCodeuiColor3fVertex3fvSUN)
#define glReplacementCodeuiColor4fNormal3fVertex3fSUN		MANGLE(ReplacementCodeuiColor4fNormal3fVertex3fSUN)
#define glReplacementCodeuiColor4fNormal3fVertex3fvSUN		MANGLE(ReplacementCodeuiColor4fNormal3fVertex3fvSUN)
#define glReplacementCodeuiColor4ubVertex3fSUN		MANGLE(ReplacementCodeuiColor4ubVertex3fSUN)
#define glReplacementCodeuiColor4ubVertex3fvSUN		MANGLE(ReplacementCodeuiColor4ubVertex3fvSUN)
#define glReplacementCodeuiNormal3fVertex3fSUN		MANGLE(ReplacementCodeuiNormal3fVertex3fSUN)
#define glReplacementCodeuiNormal3fVertex3fvSUN		MANGLE(ReplacementCodeuiNormal3fVertex3fvSUN)
#define glReplacementCodeuiSUN		MANGLE(ReplacementCodeuiSUN)
#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN		MANGLE(ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN)
#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN		MANGLE(ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN)
#define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN		MANGLE(ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN)
#define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN		MANGLE(ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN)
#define glReplacementCodeuiTexCoord2fVertex3fSUN		MANGLE(ReplacementCodeuiTexCoord2fVertex3fSUN)
#define glReplacementCodeuiTexCoord2fVertex3fvSUN		MANGLE(ReplacementCodeuiTexCoord2fVertex3fvSUN)
#define glReplacementCodeuiVertex3fSUN		MANGLE(ReplacementCodeuiVertex3fSUN)
#define glReplacementCodeuiVertex3fvSUN		MANGLE(ReplacementCodeuiVertex3fvSUN)
#define glReplacementCodeuivSUN		MANGLE(ReplacementCodeuivSUN)
#define glReplacementCodeusSUN		MANGLE(ReplacementCodeusSUN)
#define glReplacementCodeusvSUN		MANGLE(ReplacementCodeusvSUN)
#define glRequestResidentProgramsNV		MANGLE(RequestResidentProgramsNV)
#define glResetHistogramEXT		MANGLE(ResetHistogramEXT)
#define glResetHistogram		MANGLE(ResetHistogram)
#define glResetMinmaxEXT		MANGLE(ResetMinmaxEXT)
#define glResetMinmax		MANGLE(ResetMinmax)
#define glResizeBuffersMESA		MANGLE(ResizeBuffersMESA)
#define glResumeTransformFeedbackNV		MANGLE(ResumeTransformFeedbackNV)
#define glRotated		MANGLE(Rotated)
#define glRotatef		MANGLE(Rotatef)
#define glSampleCoverageARB		MANGLE(SampleCoverageARB)
#define glSampleCoverage		MANGLE(SampleCoverage)
#define glSampleMapATI		MANGLE(SampleMapATI)
#define glSampleMaskEXT		MANGLE(SampleMaskEXT)
#define glSampleMaski		MANGLE(SampleMaski)
#define glSampleMaskIndexedNV		MANGLE(SampleMaskIndexedNV)
#define glSampleMaskSGIS		MANGLE(SampleMaskSGIS)
#define glSamplePatternEXT		MANGLE(SamplePatternEXT)
#define glSamplePatternSGIS		MANGLE(SamplePatternSGIS)
#define glScaled		MANGLE(Scaled)
#define glScalef		MANGLE(Scalef)
#define glScissor		MANGLE(Scissor)
#define glSecondaryColor3bEXT		MANGLE(SecondaryColor3bEXT)
#define glSecondaryColor3b		MANGLE(SecondaryColor3b)
#define glSecondaryColor3bvEXT		MANGLE(SecondaryColor3bvEXT)
#define glSecondaryColor3bv		MANGLE(SecondaryColor3bv)
#define glSecondaryColor3dEXT		MANGLE(SecondaryColor3dEXT)
#define glSecondaryColor3d		MANGLE(SecondaryColor3d)
#define glSecondaryColor3dvEXT		MANGLE(SecondaryColor3dvEXT)
#define glSecondaryColor3dv		MANGLE(SecondaryColor3dv)
#define glSecondaryColor3fEXT		MANGLE(SecondaryColor3fEXT)
#define glSecondaryColor3f		MANGLE(SecondaryColor3f)
#define glSecondaryColor3fvEXT		MANGLE(SecondaryColor3fvEXT)
#define glSecondaryColor3fv		MANGLE(SecondaryColor3fv)
#define glSecondaryColor3hNV		MANGLE(SecondaryColor3hNV)
#define glSecondaryColor3hvNV		MANGLE(SecondaryColor3hvNV)
#define glSecondaryColor3iEXT		MANGLE(SecondaryColor3iEXT)
#define glSecondaryColor3i		MANGLE(SecondaryColor3i)
#define glSecondaryColor3ivEXT		MANGLE(SecondaryColor3ivEXT)
#define glSecondaryColor3iv		MANGLE(SecondaryColor3iv)
#define glSecondaryColor3sEXT		MANGLE(SecondaryColor3sEXT)
#define glSecondaryColor3s		MANGLE(SecondaryColor3s)
#define glSecondaryColor3svEXT		MANGLE(SecondaryColor3svEXT)
#define glSecondaryColor3sv		MANGLE(SecondaryColor3sv)
#define glSecondaryColor3ubEXT		MANGLE(SecondaryColor3ubEXT)
#define glSecondaryColor3ub		MANGLE(SecondaryColor3ub)
#define glSecondaryColor3ubvEXT		MANGLE(SecondaryColor3ubvEXT)
#define glSecondaryColor3ubv		MANGLE(SecondaryColor3ubv)
#define glSecondaryColor3uiEXT		MANGLE(SecondaryColor3uiEXT)
#define glSecondaryColor3ui		MANGLE(SecondaryColor3ui)
#define glSecondaryColor3uivEXT		MANGLE(SecondaryColor3uivEXT)
#define glSecondaryColor3uiv		MANGLE(SecondaryColor3uiv)
#define glSecondaryColor3usEXT		MANGLE(SecondaryColor3usEXT)
#define glSecondaryColor3us		MANGLE(SecondaryColor3us)
#define glSecondaryColor3usvEXT		MANGLE(SecondaryColor3usvEXT)
#define glSecondaryColor3usv		MANGLE(SecondaryColor3usv)
#define glSecondaryColorFormatNV		MANGLE(SecondaryColorFormatNV)
#define glSecondaryColorPointerEXT		MANGLE(SecondaryColorPointerEXT)
#define glSecondaryColorPointerListIBM		MANGLE(SecondaryColorPointerListIBM)
#define glSecondaryColorPointer		MANGLE(SecondaryColorPointer)
#define glSelectBuffer		MANGLE(SelectBuffer)
#define glSelectPerfMonitorCountersAMD		MANGLE(SelectPerfMonitorCountersAMD)
#define glSeparableFilter2DEXT		MANGLE(SeparableFilter2DEXT)
#define glSeparableFilter2D		MANGLE(SeparableFilter2D)
#define glSetFenceAPPLE		MANGLE(SetFenceAPPLE)
#define glSetFenceNV		MANGLE(SetFenceNV)
#define glSetFragmentShaderConstantATI		MANGLE(SetFragmentShaderConstantATI)
#define glSetInvariantEXT		MANGLE(SetInvariantEXT)
#define glSetLocalConstantEXT		MANGLE(SetLocalConstantEXT)
#define glShadeModel		MANGLE(ShadeModel)
#define glShaderOp1EXT		MANGLE(ShaderOp1EXT)
#define glShaderOp2EXT		MANGLE(ShaderOp2EXT)
#define glShaderOp3EXT		MANGLE(ShaderOp3EXT)
#define glShaderSourceARB		MANGLE(ShaderSourceARB)
#define glShaderSource		MANGLE(ShaderSource)
#define glSharpenTexFuncSGIS		MANGLE(SharpenTexFuncSGIS)
#define glSpriteParameterfSGIX		MANGLE(SpriteParameterfSGIX)
#define glSpriteParameterfvSGIX		MANGLE(SpriteParameterfvSGIX)
#define glSpriteParameteriSGIX		MANGLE(SpriteParameteriSGIX)
#define glSpriteParameterivSGIX		MANGLE(SpriteParameterivSGIX)
#define glStartInstrumentsSGIX		MANGLE(StartInstrumentsSGIX)
#define glStencilClearTagEXT		MANGLE(StencilClearTagEXT)
#define glStencilFunc		MANGLE(StencilFunc)
#define glStencilFuncSeparateATI		MANGLE(StencilFuncSeparateATI)
#define glStencilFuncSeparate		MANGLE(StencilFuncSeparate)
#define glStencilMask		MANGLE(StencilMask)
#define glStencilMaskSeparate		MANGLE(StencilMaskSeparate)
#define glStencilOp		MANGLE(StencilOp)
#define glStencilOpSeparateATI		MANGLE(StencilOpSeparateATI)
#define glStencilOpSeparate		MANGLE(StencilOpSeparate)
#define glStopInstrumentsSGIX		MANGLE(StopInstrumentsSGIX)
#define glStringMarkerGREMEDY		MANGLE(StringMarkerGREMEDY)
#define glSwizzleEXT		MANGLE(SwizzleEXT)
#define glTagSampleBufferSGIX		MANGLE(TagSampleBufferSGIX)
#define glTangent3bEXT		MANGLE(Tangent3bEXT)
#define glTangent3bvEXT		MANGLE(Tangent3bvEXT)
#define glTangent3dEXT		MANGLE(Tangent3dEXT)
#define glTangent3dvEXT		MANGLE(Tangent3dvEXT)
#define glTangent3fEXT		MANGLE(Tangent3fEXT)
#define glTangent3fvEXT		MANGLE(Tangent3fvEXT)
#define glTangent3iEXT		MANGLE(Tangent3iEXT)
#define glTangent3ivEXT		MANGLE(Tangent3ivEXT)
#define glTangent3sEXT		MANGLE(Tangent3sEXT)
#define glTangent3svEXT		MANGLE(Tangent3svEXT)
#define glTangentPointerEXT		MANGLE(TangentPointerEXT)
#define glTbufferMask3DFX		MANGLE(TbufferMask3DFX)
#define glTessellationFactorAMD		MANGLE(TessellationFactorAMD)
#define glTessellationModeAMD		MANGLE(TessellationModeAMD)
#define glTestFenceAPPLE		MANGLE(TestFenceAPPLE)
#define glTestFenceNV		MANGLE(TestFenceNV)
#define glTestObjectAPPLE		MANGLE(TestObjectAPPLE)
#define glTexBufferARB		MANGLE(TexBufferARB)
#define glTexBufferEXT		MANGLE(TexBufferEXT)
#define glTexBuffer		MANGLE(TexBuffer)
#define glTexBumpParameterfvATI		MANGLE(TexBumpParameterfvATI)
#define glTexBumpParameterivATI		MANGLE(TexBumpParameterivATI)
#define glTexCoord1d		MANGLE(TexCoord1d)
#define glTexCoord1dv		MANGLE(TexCoord1dv)
#define glTexCoord1f		MANGLE(TexCoord1f)
#define glTexCoord1fv		MANGLE(TexCoord1fv)
#define glTexCoord1hNV		MANGLE(TexCoord1hNV)
#define glTexCoord1hvNV		MANGLE(TexCoord1hvNV)
#define glTexCoord1i		MANGLE(TexCoord1i)
#define glTexCoord1iv		MANGLE(TexCoord1iv)
#define glTexCoord1s		MANGLE(TexCoord1s)
#define glTexCoord1sv		MANGLE(TexCoord1sv)
#define glTexCoord2d		MANGLE(TexCoord2d)
#define glTexCoord2dv		MANGLE(TexCoord2dv)
#define glTexCoord2fColor3fVertex3fSUN		MANGLE(TexCoord2fColor3fVertex3fSUN)
#define glTexCoord2fColor3fVertex3fvSUN		MANGLE(TexCoord2fColor3fVertex3fvSUN)
#define glTexCoord2fColor4fNormal3fVertex3fSUN		MANGLE(TexCoord2fColor4fNormal3fVertex3fSUN)
#define glTexCoord2fColor4fNormal3fVertex3fvSUN		MANGLE(TexCoord2fColor4fNormal3fVertex3fvSUN)
#define glTexCoord2fColor4ubVertex3fSUN		MANGLE(TexCoord2fColor4ubVertex3fSUN)
#define glTexCoord2fColor4ubVertex3fvSUN		MANGLE(TexCoord2fColor4ubVertex3fvSUN)
#define glTexCoord2f		MANGLE(TexCoord2f)
#define glTexCoord2fNormal3fVertex3fSUN		MANGLE(TexCoord2fNormal3fVertex3fSUN)
#define glTexCoord2fNormal3fVertex3fvSUN		MANGLE(TexCoord2fNormal3fVertex3fvSUN)
#define glTexCoord2fVertex3fSUN		MANGLE(TexCoord2fVertex3fSUN)
#define glTexCoord2fVertex3fvSUN		MANGLE(TexCoord2fVertex3fvSUN)
#define glTexCoord2fv		MANGLE(TexCoord2fv)
#define glTexCoord2hNV		MANGLE(TexCoord2hNV)
#define glTexCoord2hvNV		MANGLE(TexCoord2hvNV)
#define glTexCoord2i		MANGLE(TexCoord2i)
#define glTexCoord2iv		MANGLE(TexCoord2iv)
#define glTexCoord2s		MANGLE(TexCoord2s)
#define glTexCoord2sv		MANGLE(TexCoord2sv)
#define glTexCoord3d		MANGLE(TexCoord3d)
#define glTexCoord3dv		MANGLE(TexCoord3dv)
#define glTexCoord3f		MANGLE(TexCoord3f)
#define glTexCoord3fv		MANGLE(TexCoord3fv)
#define glTexCoord3hNV		MANGLE(TexCoord3hNV)
#define glTexCoord3hvNV		MANGLE(TexCoord3hvNV)
#define glTexCoord3i		MANGLE(TexCoord3i)
#define glTexCoord3iv		MANGLE(TexCoord3iv)
#define glTexCoord3s		MANGLE(TexCoord3s)
#define glTexCoord3sv		MANGLE(TexCoord3sv)
#define glTexCoord4d		MANGLE(TexCoord4d)
#define glTexCoord4dv		MANGLE(TexCoord4dv)
#define glTexCoord4fColor4fNormal3fVertex4fSUN		MANGLE(TexCoord4fColor4fNormal3fVertex4fSUN)
#define glTexCoord4fColor4fNormal3fVertex4fvSUN		MANGLE(TexCoord4fColor4fNormal3fVertex4fvSUN)
#define glTexCoord4f		MANGLE(TexCoord4f)
#define glTexCoord4fVertex4fSUN		MANGLE(TexCoord4fVertex4fSUN)
#define glTexCoord4fVertex4fvSUN		MANGLE(TexCoord4fVertex4fvSUN)
#define glTexCoord4fv		MANGLE(TexCoord4fv)
#define glTexCoord4hNV		MANGLE(TexCoord4hNV)
#define glTexCoord4hvNV		MANGLE(TexCoord4hvNV)
#define glTexCoord4i		MANGLE(TexCoord4i)
#define glTexCoord4iv		MANGLE(TexCoord4iv)
#define glTexCoord4s		MANGLE(TexCoord4s)
#define glTexCoord4sv		MANGLE(TexCoord4sv)
#define glTexCoordFormatNV		MANGLE(TexCoordFormatNV)
#define glTexCoordPointerEXT		MANGLE(TexCoordPointerEXT)
#define glTexCoordPointerListIBM		MANGLE(TexCoordPointerListIBM)
#define glTexCoordPointer		MANGLE(TexCoordPointer)
#define glTexCoordPointervINTEL		MANGLE(TexCoordPointervINTEL)
#define glTexEnvf		MANGLE(TexEnvf)
#define glTexEnvfv		MANGLE(TexEnvfv)
#define glTexEnvi		MANGLE(TexEnvi)
#define glTexEnviv		MANGLE(TexEnviv)
#define glTexFilterFuncSGIS		MANGLE(TexFilterFuncSGIS)
#define glTexGend		MANGLE(TexGend)
#define glTexGendv		MANGLE(TexGendv)
#define glTexGenf		MANGLE(TexGenf)
#define glTexGenfv		MANGLE(TexGenfv)
#define glTexGeni		MANGLE(TexGeni)
#define glTexGeniv		MANGLE(TexGeniv)
#define glTexImage1D		MANGLE(TexImage1D)
#define glTexImage2D		MANGLE(TexImage2D)
#define glTexImage2DMultisample		MANGLE(TexImage2DMultisample)
#define glTexImage3DEXT		MANGLE(TexImage3DEXT)
#define glTexImage3D		MANGLE(TexImage3D)
#define glTexImage3DMultisample		MANGLE(TexImage3DMultisample)
#define glTexImage4DSGIS		MANGLE(TexImage4DSGIS)
#define glTexParameterf		MANGLE(TexParameterf)
#define glTexParameterfv		MANGLE(TexParameterfv)
#define glTexParameterIivEXT		MANGLE(TexParameterIivEXT)
#define glTexParameterIiv		MANGLE(TexParameterIiv)
#define glTexParameteri		MANGLE(TexParameteri)
#define glTexParameterIuivEXT		MANGLE(TexParameterIuivEXT)
#define glTexParameterIuiv		MANGLE(TexParameterIuiv)
#define glTexParameteriv		MANGLE(TexParameteriv)
#define glTexRenderbufferNV		MANGLE(TexRenderbufferNV)
#define glTexSubImage1DEXT		MANGLE(TexSubImage1DEXT)
#define glTexSubImage1D		MANGLE(TexSubImage1D)
#define glTexSubImage2DEXT		MANGLE(TexSubImage2DEXT)
#define glTexSubImage2D		MANGLE(TexSubImage2D)
#define glTexSubImage3DEXT		MANGLE(TexSubImage3DEXT)
#define glTexSubImage3D		MANGLE(TexSubImage3D)
#define glTexSubImage4DSGIS		MANGLE(TexSubImage4DSGIS)
#define glTextureBarrierNV		MANGLE(TextureBarrierNV)
#define glTextureBufferEXT		MANGLE(TextureBufferEXT)
#define glTextureColorMaskSGIS		MANGLE(TextureColorMaskSGIS)
#define glTextureImage1DEXT		MANGLE(TextureImage1DEXT)
#define glTextureImage2DEXT		MANGLE(TextureImage2DEXT)
#define glTextureImage3DEXT		MANGLE(TextureImage3DEXT)
#define glTextureLightEXT		MANGLE(TextureLightEXT)
#define glTextureMaterialEXT		MANGLE(TextureMaterialEXT)
#define glTextureNormalEXT		MANGLE(TextureNormalEXT)
#define glTextureParameterfEXT		MANGLE(TextureParameterfEXT)
#define glTextureParameterfvEXT		MANGLE(TextureParameterfvEXT)
#define glTextureParameteriEXT		MANGLE(TextureParameteriEXT)
#define glTextureParameterIivEXT		MANGLE(TextureParameterIivEXT)
#define glTextureParameterIuivEXT		MANGLE(TextureParameterIuivEXT)
#define glTextureParameterivEXT		MANGLE(TextureParameterivEXT)
#define glTextureRangeAPPLE		MANGLE(TextureRangeAPPLE)
#define glTextureRenderbufferEXT		MANGLE(TextureRenderbufferEXT)
#define glTextureSubImage1DEXT		MANGLE(TextureSubImage1DEXT)
#define glTextureSubImage2DEXT		MANGLE(TextureSubImage2DEXT)
#define glTextureSubImage3DEXT		MANGLE(TextureSubImage3DEXT)
#define glTrackMatrixNV		MANGLE(TrackMatrixNV)
#define glTransformFeedbackAttribsNV		MANGLE(TransformFeedbackAttribsNV)
#define glTransformFeedbackVaryingsEXT		MANGLE(TransformFeedbackVaryingsEXT)
#define glTransformFeedbackVaryings		MANGLE(TransformFeedbackVaryings)
#define glTransformFeedbackVaryingsNV		MANGLE(TransformFeedbackVaryingsNV)
#define glTranslated		MANGLE(Translated)
#define glTranslatef		MANGLE(Translatef)
#define glUniform1fARB		MANGLE(Uniform1fARB)
#define glUniform1f		MANGLE(Uniform1f)
#define glUniform1fvARB		MANGLE(Uniform1fvARB)
#define glUniform1fv		MANGLE(Uniform1fv)
#define glUniform1iARB		MANGLE(Uniform1iARB)
#define glUniform1i		MANGLE(Uniform1i)
#define glUniform1ivARB		MANGLE(Uniform1ivARB)
#define glUniform1iv		MANGLE(Uniform1iv)
#define glUniform1uiEXT		MANGLE(Uniform1uiEXT)
#define glUniform1ui		MANGLE(Uniform1ui)
#define glUniform1uivEXT		MANGLE(Uniform1uivEXT)
#define glUniform1uiv		MANGLE(Uniform1uiv)
#define glUniform2fARB		MANGLE(Uniform2fARB)
#define glUniform2f		MANGLE(Uniform2f)
#define glUniform2fvARB		MANGLE(Uniform2fvARB)
#define glUniform2fv		MANGLE(Uniform2fv)
#define glUniform2iARB		MANGLE(Uniform2iARB)
#define glUniform2i		MANGLE(Uniform2i)
#define glUniform2ivARB		MANGLE(Uniform2ivARB)
#define glUniform2iv		MANGLE(Uniform2iv)
#define glUniform2uiEXT		MANGLE(Uniform2uiEXT)
#define glUniform2ui		MANGLE(Uniform2ui)
#define glUniform2uivEXT		MANGLE(Uniform2uivEXT)
#define glUniform2uiv		MANGLE(Uniform2uiv)
#define glUniform3fARB		MANGLE(Uniform3fARB)
#define glUniform3f		MANGLE(Uniform3f)
#define glUniform3fvARB		MANGLE(Uniform3fvARB)
#define glUniform3fv		MANGLE(Uniform3fv)
#define glUniform3iARB		MANGLE(Uniform3iARB)
#define glUniform3i		MANGLE(Uniform3i)
#define glUniform3ivARB		MANGLE(Uniform3ivARB)
#define glUniform3iv		MANGLE(Uniform3iv)
#define glUniform3uiEXT		MANGLE(Uniform3uiEXT)
#define glUniform3ui		MANGLE(Uniform3ui)
#define glUniform3uivEXT		MANGLE(Uniform3uivEXT)
#define glUniform3uiv		MANGLE(Uniform3uiv)
#define glUniform4fARB		MANGLE(Uniform4fARB)
#define glUniform4f		MANGLE(Uniform4f)
#define glUniform4fvARB		MANGLE(Uniform4fvARB)
#define glUniform4fv		MANGLE(Uniform4fv)
#define glUniform4iARB		MANGLE(Uniform4iARB)
#define glUniform4i		MANGLE(Uniform4i)
#define glUniform4ivARB		MANGLE(Uniform4ivARB)
#define glUniform4iv		MANGLE(Uniform4iv)
#define glUniform4uiEXT		MANGLE(Uniform4uiEXT)
#define glUniform4ui		MANGLE(Uniform4ui)
#define glUniform4uivEXT		MANGLE(Uniform4uivEXT)
#define glUniform4uiv		MANGLE(Uniform4uiv)
#define glUniformBlockBinding		MANGLE(UniformBlockBinding)
#define glUniformBufferEXT		MANGLE(UniformBufferEXT)
#define glUniformMatrix2fvARB		MANGLE(UniformMatrix2fvARB)
#define glUniformMatrix2fv		MANGLE(UniformMatrix2fv)
#define glUniformMatrix2x3fv		MANGLE(UniformMatrix2x3fv)
#define glUniformMatrix2x4fv		MANGLE(UniformMatrix2x4fv)
#define glUniformMatrix3fvARB		MANGLE(UniformMatrix3fvARB)
#define glUniformMatrix3fv		MANGLE(UniformMatrix3fv)
#define glUniformMatrix3x2fv		MANGLE(UniformMatrix3x2fv)
#define glUniformMatrix3x4fv		MANGLE(UniformMatrix3x4fv)
#define glUniformMatrix4fvARB		MANGLE(UniformMatrix4fvARB)
#define glUniformMatrix4fv		MANGLE(UniformMatrix4fv)
#define glUniformMatrix4x2fv		MANGLE(UniformMatrix4x2fv)
#define glUniformMatrix4x3fv		MANGLE(UniformMatrix4x3fv)
#define glUniformui64NV		MANGLE(Uniformui64NV)
#define glUniformui64vNV		MANGLE(Uniformui64vNV)
#define glUnlockArraysEXT		MANGLE(UnlockArraysEXT)
#define glUnmapBufferARB		MANGLE(UnmapBufferARB)
#define glUnmapBuffer		MANGLE(UnmapBuffer)
#define glUnmapNamedBufferEXT		MANGLE(UnmapNamedBufferEXT)
#define glUnmapObjectBufferATI		MANGLE(UnmapObjectBufferATI)
#define glUpdateObjectBufferATI		MANGLE(UpdateObjectBufferATI)
#define glUseProgram		MANGLE(UseProgram)
#define glUseProgramObjectARB		MANGLE(UseProgramObjectARB)
#define glUseShaderProgramEXT		MANGLE(UseShaderProgramEXT)
#define glValidateProgramARB		MANGLE(ValidateProgramARB)
#define glValidateProgram		MANGLE(ValidateProgram)
#define glVariantArrayObjectATI		MANGLE(VariantArrayObjectATI)
#define glVariantbvEXT		MANGLE(VariantbvEXT)
#define glVariantdvEXT		MANGLE(VariantdvEXT)
#define glVariantfvEXT		MANGLE(VariantfvEXT)
#define glVariantivEXT		MANGLE(VariantivEXT)
#define glVariantPointerEXT		MANGLE(VariantPointerEXT)
#define glVariantsvEXT		MANGLE(VariantsvEXT)
#define glVariantubvEXT		MANGLE(VariantubvEXT)
#define glVariantuivEXT		MANGLE(VariantuivEXT)
#define glVariantusvEXT		MANGLE(VariantusvEXT)
#define glVertex2d		MANGLE(Vertex2d)
#define glVertex2dv		MANGLE(Vertex2dv)
#define glVertex2f		MANGLE(Vertex2f)
#define glVertex2fv		MANGLE(Vertex2fv)
#define glVertex2hNV		MANGLE(Vertex2hNV)
#define glVertex2hvNV		MANGLE(Vertex2hvNV)
#define glVertex2i		MANGLE(Vertex2i)
#define glVertex2iv		MANGLE(Vertex2iv)
#define glVertex2s		MANGLE(Vertex2s)
#define glVertex2sv		MANGLE(Vertex2sv)
#define glVertex3d		MANGLE(Vertex3d)
#define glVertex3dv		MANGLE(Vertex3dv)
#define glVertex3f		MANGLE(Vertex3f)
#define glVertex3fv		MANGLE(Vertex3fv)
#define glVertex3hNV		MANGLE(Vertex3hNV)
#define glVertex3hvNV		MANGLE(Vertex3hvNV)
#define glVertex3i		MANGLE(Vertex3i)
#define glVertex3iv		MANGLE(Vertex3iv)
#define glVertex3s		MANGLE(Vertex3s)
#define glVertex3sv		MANGLE(Vertex3sv)
#define glVertex4d		MANGLE(Vertex4d)
#define glVertex4dv		MANGLE(Vertex4dv)
#define glVertex4f		MANGLE(Vertex4f)
#define glVertex4fv		MANGLE(Vertex4fv)
#define glVertex4hNV		MANGLE(Vertex4hNV)
#define glVertex4hvNV		MANGLE(Vertex4hvNV)
#define glVertex4i		MANGLE(Vertex4i)
#define glVertex4iv		MANGLE(Vertex4iv)
#define glVertex4s		MANGLE(Vertex4s)
#define glVertex4sv		MANGLE(Vertex4sv)
#define glVertexArrayParameteriAPPLE		MANGLE(VertexArrayParameteriAPPLE)
#define glVertexArrayRangeAPPLE		MANGLE(VertexArrayRangeAPPLE)
#define glVertexArrayRangeNV		MANGLE(VertexArrayRangeNV)
#define glVertexAttrib1dARB		MANGLE(VertexAttrib1dARB)
#define glVertexAttrib1d		MANGLE(VertexAttrib1d)
#define glVertexAttrib1dNV		MANGLE(VertexAttrib1dNV)
#define glVertexAttrib1dvARB		MANGLE(VertexAttrib1dvARB)
#define glVertexAttrib1dv		MANGLE(VertexAttrib1dv)
#define glVertexAttrib1dvNV		MANGLE(VertexAttrib1dvNV)
#define glVertexAttrib1fARB		MANGLE(VertexAttrib1fARB)
#define glVertexAttrib1f		MANGLE(VertexAttrib1f)
#define glVertexAttrib1fNV		MANGLE(VertexAttrib1fNV)
#define glVertexAttrib1fvARB		MANGLE(VertexAttrib1fvARB)
#define glVertexAttrib1fv		MANGLE(VertexAttrib1fv)
#define glVertexAttrib1fvNV		MANGLE(VertexAttrib1fvNV)
#define glVertexAttrib1hNV		MANGLE(VertexAttrib1hNV)
#define glVertexAttrib1hvNV		MANGLE(VertexAttrib1hvNV)
#define glVertexAttrib1sARB		MANGLE(VertexAttrib1sARB)
#define glVertexAttrib1s		MANGLE(VertexAttrib1s)
#define glVertexAttrib1sNV		MANGLE(VertexAttrib1sNV)
#define glVertexAttrib1svARB		MANGLE(VertexAttrib1svARB)
#define glVertexAttrib1sv		MANGLE(VertexAttrib1sv)
#define glVertexAttrib1svNV		MANGLE(VertexAttrib1svNV)
#define glVertexAttrib2dARB		MANGLE(VertexAttrib2dARB)
#define glVertexAttrib2d		MANGLE(VertexAttrib2d)
#define glVertexAttrib2dNV		MANGLE(VertexAttrib2dNV)
#define glVertexAttrib2dvARB		MANGLE(VertexAttrib2dvARB)
#define glVertexAttrib2dv		MANGLE(VertexAttrib2dv)
#define glVertexAttrib2dvNV		MANGLE(VertexAttrib2dvNV)
#define glVertexAttrib2fARB		MANGLE(VertexAttrib2fARB)
#define glVertexAttrib2f		MANGLE(VertexAttrib2f)
#define glVertexAttrib2fNV		MANGLE(VertexAttrib2fNV)
#define glVertexAttrib2fvARB		MANGLE(VertexAttrib2fvARB)
#define glVertexAttrib2fv		MANGLE(VertexAttrib2fv)
#define glVertexAttrib2fvNV		MANGLE(VertexAttrib2fvNV)
#define glVertexAttrib2hNV		MANGLE(VertexAttrib2hNV)
#define glVertexAttrib2hvNV		MANGLE(VertexAttrib2hvNV)
#define glVertexAttrib2sARB		MANGLE(VertexAttrib2sARB)
#define glVertexAttrib2s		MANGLE(VertexAttrib2s)
#define glVertexAttrib2sNV		MANGLE(VertexAttrib2sNV)
#define glVertexAttrib2svARB		MANGLE(VertexAttrib2svARB)
#define glVertexAttrib2sv		MANGLE(VertexAttrib2sv)
#define glVertexAttrib2svNV		MANGLE(VertexAttrib2svNV)
#define glVertexAttrib3dARB		MANGLE(VertexAttrib3dARB)
#define glVertexAttrib3d		MANGLE(VertexAttrib3d)
#define glVertexAttrib3dNV		MANGLE(VertexAttrib3dNV)
#define glVertexAttrib3dvARB		MANGLE(VertexAttrib3dvARB)
#define glVertexAttrib3dv		MANGLE(VertexAttrib3dv)
#define glVertexAttrib3dvNV		MANGLE(VertexAttrib3dvNV)
#define glVertexAttrib3fARB		MANGLE(VertexAttrib3fARB)
#define glVertexAttrib3f		MANGLE(VertexAttrib3f)
#define glVertexAttrib3fNV		MANGLE(VertexAttrib3fNV)
#define glVertexAttrib3fvARB		MANGLE(VertexAttrib3fvARB)
#define glVertexAttrib3fv		MANGLE(VertexAttrib3fv)
#define glVertexAttrib3fvNV		MANGLE(VertexAttrib3fvNV)
#define glVertexAttrib3hNV		MANGLE(VertexAttrib3hNV)
#define glVertexAttrib3hvNV		MANGLE(VertexAttrib3hvNV)
#define glVertexAttrib3sARB		MANGLE(VertexAttrib3sARB)
#define glVertexAttrib3s		MANGLE(VertexAttrib3s)
#define glVertexAttrib3sNV		MANGLE(VertexAttrib3sNV)
#define glVertexAttrib3svARB		MANGLE(VertexAttrib3svARB)
#define glVertexAttrib3sv		MANGLE(VertexAttrib3sv)
#define glVertexAttrib3svNV		MANGLE(VertexAttrib3svNV)
#define glVertexAttrib4bvARB		MANGLE(VertexAttrib4bvARB)
#define glVertexAttrib4bv		MANGLE(VertexAttrib4bv)
#define glVertexAttrib4dARB		MANGLE(VertexAttrib4dARB)
#define glVertexAttrib4d		MANGLE(VertexAttrib4d)
#define glVertexAttrib4dNV		MANGLE(VertexAttrib4dNV)
#define glVertexAttrib4dvARB		MANGLE(VertexAttrib4dvARB)
#define glVertexAttrib4dv		MANGLE(VertexAttrib4dv)
#define glVertexAttrib4dvNV		MANGLE(VertexAttrib4dvNV)
#define glVertexAttrib4fARB		MANGLE(VertexAttrib4fARB)
#define glVertexAttrib4f		MANGLE(VertexAttrib4f)
#define glVertexAttrib4fNV		MANGLE(VertexAttrib4fNV)
#define glVertexAttrib4fvARB		MANGLE(VertexAttrib4fvARB)
#define glVertexAttrib4fv		MANGLE(VertexAttrib4fv)
#define glVertexAttrib4fvNV		MANGLE(VertexAttrib4fvNV)
#define glVertexAttrib4hNV		MANGLE(VertexAttrib4hNV)
#define glVertexAttrib4hvNV		MANGLE(VertexAttrib4hvNV)
#define glVertexAttrib4ivARB		MANGLE(VertexAttrib4ivARB)
#define glVertexAttrib4iv		MANGLE(VertexAttrib4iv)
#define glVertexAttrib4NbvARB		MANGLE(VertexAttrib4NbvARB)
#define glVertexAttrib4Nbv		MANGLE(VertexAttrib4Nbv)
#define glVertexAttrib4NivARB		MANGLE(VertexAttrib4NivARB)
#define glVertexAttrib4Niv		MANGLE(VertexAttrib4Niv)
#define glVertexAttrib4NsvARB		MANGLE(VertexAttrib4NsvARB)
#define glVertexAttrib4Nsv		MANGLE(VertexAttrib4Nsv)
#define glVertexAttrib4NubARB		MANGLE(VertexAttrib4NubARB)
#define glVertexAttrib4Nub		MANGLE(VertexAttrib4Nub)
#define glVertexAttrib4NubvARB		MANGLE(VertexAttrib4NubvARB)
#define glVertexAttrib4Nubv		MANGLE(VertexAttrib4Nubv)
#define glVertexAttrib4NuivARB		MANGLE(VertexAttrib4NuivARB)
#define glVertexAttrib4Nuiv		MANGLE(VertexAttrib4Nuiv)
#define glVertexAttrib4NusvARB		MANGLE(VertexAttrib4NusvARB)
#define glVertexAttrib4Nusv		MANGLE(VertexAttrib4Nusv)
#define glVertexAttrib4sARB		MANGLE(VertexAttrib4sARB)
#define glVertexAttrib4s		MANGLE(VertexAttrib4s)
#define glVertexAttrib4sNV		MANGLE(VertexAttrib4sNV)
#define glVertexAttrib4svARB		MANGLE(VertexAttrib4svARB)
#define glVertexAttrib4sv		MANGLE(VertexAttrib4sv)
#define glVertexAttrib4svNV		MANGLE(VertexAttrib4svNV)
#define glVertexAttrib4ubNV		MANGLE(VertexAttrib4ubNV)
#define glVertexAttrib4ubvARB		MANGLE(VertexAttrib4ubvARB)
#define glVertexAttrib4ubv		MANGLE(VertexAttrib4ubv)
#define glVertexAttrib4ubvNV		MANGLE(VertexAttrib4ubvNV)
#define glVertexAttrib4uivARB		MANGLE(VertexAttrib4uivARB)
#define glVertexAttrib4uiv		MANGLE(VertexAttrib4uiv)
#define glVertexAttrib4usvARB		MANGLE(VertexAttrib4usvARB)
#define glVertexAttrib4usv		MANGLE(VertexAttrib4usv)
#define glVertexAttribArrayObjectATI		MANGLE(VertexAttribArrayObjectATI)
#define glVertexAttribDivisorARB		MANGLE(VertexAttribDivisorARB)
#define glVertexAttribFormatNV		MANGLE(VertexAttribFormatNV)
#define glVertexAttribI1iEXT		MANGLE(VertexAttribI1iEXT)
#define glVertexAttribI1i		MANGLE(VertexAttribI1i)
#define glVertexAttribI1ivEXT		MANGLE(VertexAttribI1ivEXT)
#define glVertexAttribI1iv		MANGLE(VertexAttribI1iv)
#define glVertexAttribI1uiEXT		MANGLE(VertexAttribI1uiEXT)
#define glVertexAttribI1ui		MANGLE(VertexAttribI1ui)
#define glVertexAttribI1uivEXT		MANGLE(VertexAttribI1uivEXT)
#define glVertexAttribI1uiv		MANGLE(VertexAttribI1uiv)
#define glVertexAttribI2iEXT		MANGLE(VertexAttribI2iEXT)
#define glVertexAttribI2i		MANGLE(VertexAttribI2i)
#define glVertexAttribI2ivEXT		MANGLE(VertexAttribI2ivEXT)
#define glVertexAttribI2iv		MANGLE(VertexAttribI2iv)
#define glVertexAttribI2uiEXT		MANGLE(VertexAttribI2uiEXT)
#define glVertexAttribI2ui		MANGLE(VertexAttribI2ui)
#define glVertexAttribI2uivEXT		MANGLE(VertexAttribI2uivEXT)
#define glVertexAttribI2uiv		MANGLE(VertexAttribI2uiv)
#define glVertexAttribI3iEXT		MANGLE(VertexAttribI3iEXT)
#define glVertexAttribI3i		MANGLE(VertexAttribI3i)
#define glVertexAttribI3ivEXT		MANGLE(VertexAttribI3ivEXT)
#define glVertexAttribI3iv		MANGLE(VertexAttribI3iv)
#define glVertexAttribI3uiEXT		MANGLE(VertexAttribI3uiEXT)
#define glVertexAttribI3ui		MANGLE(VertexAttribI3ui)
#define glVertexAttribI3uivEXT		MANGLE(VertexAttribI3uivEXT)
#define glVertexAttribI3uiv		MANGLE(VertexAttribI3uiv)
#define glVertexAttribI4bvEXT		MANGLE(VertexAttribI4bvEXT)
#define glVertexAttribI4bv		MANGLE(VertexAttribI4bv)
#define glVertexAttribI4iEXT		MANGLE(VertexAttribI4iEXT)
#define glVertexAttribI4i		MANGLE(VertexAttribI4i)
#define glVertexAttribI4ivEXT		MANGLE(VertexAttribI4ivEXT)
#define glVertexAttribI4iv		MANGLE(VertexAttribI4iv)
#define glVertexAttribI4svEXT		MANGLE(VertexAttribI4svEXT)
#define glVertexAttribI4sv		MANGLE(VertexAttribI4sv)
#define glVertexAttribI4ubvEXT		MANGLE(VertexAttribI4ubvEXT)
#define glVertexAttribI4ubv		MANGLE(VertexAttribI4ubv)
#define glVertexAttribI4uiEXT		MANGLE(VertexAttribI4uiEXT)
#define glVertexAttribI4ui		MANGLE(VertexAttribI4ui)
#define glVertexAttribI4uivEXT		MANGLE(VertexAttribI4uivEXT)
#define glVertexAttribI4uiv		MANGLE(VertexAttribI4uiv)
#define glVertexAttribI4usvEXT		MANGLE(VertexAttribI4usvEXT)
#define glVertexAttribI4usv		MANGLE(VertexAttribI4usv)
#define glVertexAttribIFormatNV		MANGLE(VertexAttribIFormatNV)
#define glVertexAttribIPointerEXT		MANGLE(VertexAttribIPointerEXT)
#define glVertexAttribIPointer		MANGLE(VertexAttribIPointer)
#define glVertexAttribPointerARB		MANGLE(VertexAttribPointerARB)
#define glVertexAttribPointer		MANGLE(VertexAttribPointer)
#define glVertexAttribPointerNV		MANGLE(VertexAttribPointerNV)
#define glVertexAttribs1dvNV		MANGLE(VertexAttribs1dvNV)
#define glVertexAttribs1fvNV		MANGLE(VertexAttribs1fvNV)
#define glVertexAttribs1hvNV		MANGLE(VertexAttribs1hvNV)
#define glVertexAttribs1svNV		MANGLE(VertexAttribs1svNV)
#define glVertexAttribs2dvNV		MANGLE(VertexAttribs2dvNV)
#define glVertexAttribs2fvNV		MANGLE(VertexAttribs2fvNV)
#define glVertexAttribs2hvNV		MANGLE(VertexAttribs2hvNV)
#define glVertexAttribs2svNV		MANGLE(VertexAttribs2svNV)
#define glVertexAttribs3dvNV		MANGLE(VertexAttribs3dvNV)
#define glVertexAttribs3fvNV		MANGLE(VertexAttribs3fvNV)
#define glVertexAttribs3hvNV		MANGLE(VertexAttribs3hvNV)
#define glVertexAttribs3svNV		MANGLE(VertexAttribs3svNV)
#define glVertexAttribs4dvNV		MANGLE(VertexAttribs4dvNV)
#define glVertexAttribs4fvNV		MANGLE(VertexAttribs4fvNV)
#define glVertexAttribs4hvNV		MANGLE(VertexAttribs4hvNV)
#define glVertexAttribs4svNV		MANGLE(VertexAttribs4svNV)
#define glVertexAttribs4ubvNV		MANGLE(VertexAttribs4ubvNV)
#define glVertexBlendARB		MANGLE(VertexBlendARB)
#define glVertexBlendEnvfATI		MANGLE(VertexBlendEnvfATI)
#define glVertexBlendEnviATI		MANGLE(VertexBlendEnviATI)
#define glVertexFormatNV		MANGLE(VertexFormatNV)
#define glVertexPointerEXT		MANGLE(VertexPointerEXT)
#define glVertexPointerListIBM		MANGLE(VertexPointerListIBM)
#define glVertexPointer		MANGLE(VertexPointer)
#define glVertexPointervINTEL		MANGLE(VertexPointervINTEL)
#define glVertexStream1dATI		MANGLE(VertexStream1dATI)
#define glVertexStream1dvATI		MANGLE(VertexStream1dvATI)
#define glVertexStream1fATI		MANGLE(VertexStream1fATI)
#define glVertexStream1fvATI		MANGLE(VertexStream1fvATI)
#define glVertexStream1iATI		MANGLE(VertexStream1iATI)
#define glVertexStream1ivATI		MANGLE(VertexStream1ivATI)
#define glVertexStream1sATI		MANGLE(VertexStream1sATI)
#define glVertexStream1svATI		MANGLE(VertexStream1svATI)
#define glVertexStream2dATI		MANGLE(VertexStream2dATI)
#define glVertexStream2dvATI		MANGLE(VertexStream2dvATI)
#define glVertexStream2fATI		MANGLE(VertexStream2fATI)
#define glVertexStream2fvATI		MANGLE(VertexStream2fvATI)
#define glVertexStream2iATI		MANGLE(VertexStream2iATI)
#define glVertexStream2ivATI		MANGLE(VertexStream2ivATI)
#define glVertexStream2sATI		MANGLE(VertexStream2sATI)
#define glVertexStream2svATI		MANGLE(VertexStream2svATI)
#define glVertexStream3dATI		MANGLE(VertexStream3dATI)
#define glVertexStream3dvATI		MANGLE(VertexStream3dvATI)
#define glVertexStream3fATI		MANGLE(VertexStream3fATI)
#define glVertexStream3fvATI		MANGLE(VertexStream3fvATI)
#define glVertexStream3iATI		MANGLE(VertexStream3iATI)
#define glVertexStream3ivATI		MANGLE(VertexStream3ivATI)
#define glVertexStream3sATI		MANGLE(VertexStream3sATI)
#define glVertexStream3svATI		MANGLE(VertexStream3svATI)
#define glVertexStream4dATI		MANGLE(VertexStream4dATI)
#define glVertexStream4dvATI		MANGLE(VertexStream4dvATI)
#define glVertexStream4fATI		MANGLE(VertexStream4fATI)
#define glVertexStream4fvATI		MANGLE(VertexStream4fvATI)
#define glVertexStream4iATI		MANGLE(VertexStream4iATI)
#define glVertexStream4ivATI		MANGLE(VertexStream4ivATI)
#define glVertexStream4sATI		MANGLE(VertexStream4sATI)
#define glVertexStream4svATI		MANGLE(VertexStream4svATI)
#define glVertexWeightfEXT		MANGLE(VertexWeightfEXT)
#define glVertexWeightfvEXT		MANGLE(VertexWeightfvEXT)
#define glVertexWeighthNV		MANGLE(VertexWeighthNV)
#define glVertexWeighthvNV		MANGLE(VertexWeighthvNV)
#define glVertexWeightPointerEXT		MANGLE(VertexWeightPointerEXT)
#define glVideoCaptureNV		MANGLE(VideoCaptureNV)
#define glVideoCaptureStreamParameterdvNV		MANGLE(VideoCaptureStreamParameterdvNV)
#define glVideoCaptureStreamParameterfvNV		MANGLE(VideoCaptureStreamParameterfvNV)
#define glVideoCaptureStreamParameterivNV		MANGLE(VideoCaptureStreamParameterivNV)
#define glViewport		MANGLE(Viewport)
#define glWaitSync		MANGLE(WaitSync)
#define glWeightbvARB		MANGLE(WeightbvARB)
#define glWeightdvARB		MANGLE(WeightdvARB)
#define glWeightfvARB		MANGLE(WeightfvARB)
#define glWeightivARB		MANGLE(WeightivARB)
#define glWeightPointerARB		MANGLE(WeightPointerARB)
#define glWeightsvARB		MANGLE(WeightsvARB)
#define glWeightubvARB		MANGLE(WeightubvARB)
#define glWeightuivARB		MANGLE(WeightuivARB)
#define glWeightusvARB		MANGLE(WeightusvARB)
#define glWindowPos2dARB		MANGLE(WindowPos2dARB)
#define glWindowPos2d		MANGLE(WindowPos2d)
#define glWindowPos2dMESA		MANGLE(WindowPos2dMESA)
#define glWindowPos2dvARB		MANGLE(WindowPos2dvARB)
#define glWindowPos2dv		MANGLE(WindowPos2dv)
#define glWindowPos2dvMESA		MANGLE(WindowPos2dvMESA)
#define glWindowPos2fARB		MANGLE(WindowPos2fARB)
#define glWindowPos2f		MANGLE(WindowPos2f)
#define glWindowPos2fMESA		MANGLE(WindowPos2fMESA)
#define glWindowPos2fvARB		MANGLE(WindowPos2fvARB)
#define glWindowPos2fv		MANGLE(WindowPos2fv)
#define glWindowPos2fvMESA		MANGLE(WindowPos2fvMESA)
#define glWindowPos2iARB		MANGLE(WindowPos2iARB)
#define glWindowPos2i		MANGLE(WindowPos2i)
#define glWindowPos2iMESA		MANGLE(WindowPos2iMESA)
#define glWindowPos2ivARB		MANGLE(WindowPos2ivARB)
#define glWindowPos2iv		MANGLE(WindowPos2iv)
#define glWindowPos2ivMESA		MANGLE(WindowPos2ivMESA)
#define glWindowPos2sARB		MANGLE(WindowPos2sARB)
#define glWindowPos2s		MANGLE(WindowPos2s)
#define glWindowPos2sMESA		MANGLE(WindowPos2sMESA)
#define glWindowPos2svARB		MANGLE(WindowPos2svARB)
#define glWindowPos2sv		MANGLE(WindowPos2sv)
#define glWindowPos2svMESA		MANGLE(WindowPos2svMESA)
#define glWindowPos3dARB		MANGLE(WindowPos3dARB)
#define glWindowPos3d		MANGLE(WindowPos3d)
#define glWindowPos3dMESA		MANGLE(WindowPos3dMESA)
#define glWindowPos3dvARB		MANGLE(WindowPos3dvARB)
#define glWindowPos3dv		MANGLE(WindowPos3dv)
#define glWindowPos3dvMESA		MANGLE(WindowPos3dvMESA)
#define glWindowPos3fARB		MANGLE(WindowPos3fARB)
#define glWindowPos3f		MANGLE(WindowPos3f)
#define glWindowPos3fMESA		MANGLE(WindowPos3fMESA)
#define glWindowPos3fvARB		MANGLE(WindowPos3fvARB)
#define glWindowPos3fv		MANGLE(WindowPos3fv)
#define glWindowPos3fvMESA		MANGLE(WindowPos3fvMESA)
#define glWindowPos3iARB		MANGLE(WindowPos3iARB)
#define glWindowPos3i		MANGLE(WindowPos3i)
#define glWindowPos3iMESA		MANGLE(WindowPos3iMESA)
#define glWindowPos3ivARB		MANGLE(WindowPos3ivARB)
#define glWindowPos3iv		MANGLE(WindowPos3iv)
#define glWindowPos3ivMESA		MANGLE(WindowPos3ivMESA)
#define glWindowPos3sARB		MANGLE(WindowPos3sARB)
#define glWindowPos3s		MANGLE(WindowPos3s)
#define glWindowPos3sMESA		MANGLE(WindowPos3sMESA)
#define glWindowPos3svARB		MANGLE(WindowPos3svARB)
#define glWindowPos3sv		MANGLE(WindowPos3sv)
#define glWindowPos3svMESA		MANGLE(WindowPos3svMESA)
#define glWindowPos4dMESA		MANGLE(WindowPos4dMESA)
#define glWindowPos4dvMESA		MANGLE(WindowPos4dvMESA)
#define glWindowPos4fMESA		MANGLE(WindowPos4fMESA)
#define glWindowPos4fvMESA		MANGLE(WindowPos4fvMESA)
#define glWindowPos4iMESA		MANGLE(WindowPos4iMESA)
#define glWindowPos4ivMESA		MANGLE(WindowPos4ivMESA)
#define glWindowPos4sMESA		MANGLE(WindowPos4sMESA)
#define glWindowPos4svMESA		MANGLE(WindowPos4svMESA)
#define glWriteMaskEXT		MANGLE(WriteMaskEXT)

#endif /* GL_MANGLE_H */

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-21 13:33                   ` Geoff Gole
@ 2011-12-21 16:04                     ` Alan Mackenzie
  2011-12-21 16:48                       ` Geoff Gole
  2011-12-21 18:16                     ` Eli Zaretskii
  2011-12-23  1:56                     ` Kentaro NAKAZAWA
  2 siblings, 1 reply; 42+ messages in thread
From: Alan Mackenzie @ 2011-12-21 16:04 UTC (permalink / raw)
  To: Geoff Gole; +Cc: Kan-Ru Chen, emacs-devel

Hi, Geoff

On Wed, Dec 21, 2011 at 09:33:09PM +0800, Geoff Gole wrote:
> If another data point will help, I've also noticed *very* slow c-mode
> fontification in a script generated header,
> /usr/include/GL/gl_mangle.h. In case you don't have this header, a
> copy is attached.

> The file is basically several thousand #defines.

Thanks for the report.

The problem here is that CC Mode normally steps back and forth through a
source code using brace positions as "ladder rungs".  A sequence of
#defines is, sadly, a "brace desert".

If you're running GNU Emacs, an optimisation was introduced in Emacs
23.3 which gave a considerable speed-up to such code.  This optimisation
found its way into the XEmacs CC Mode package in September.  I _hope_
your version of Emacs is prior to one of these, in which case upgrading
will give you this benefit.

Otherwise, I'll be asking you if you're prepared to give me some
timings.

Here's hoping.....

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-21 16:04                     ` Alan Mackenzie
@ 2011-12-21 16:48                       ` Geoff Gole
  2011-12-21 18:06                         ` Alan Mackenzie
  0 siblings, 1 reply; 42+ messages in thread
From: Geoff Gole @ 2011-12-21 16:48 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Kan-Ru Chen, emacs-devel

> If you're running GNU Emacs, an optimisation was introduced in Emacs
> 23.3 which gave a considerable speed-up to such code.  This optimisation
> found its way into the XEmacs CC Mode package in September.  I _hope_
> your version of Emacs is prior to one of these, in which case upgrading
> will give you this benefit.
>
> Otherwise, I'll be asking you if you're prepared to give me some
> timings.

Well, M-x version gives me GNU Emacs 24.0.91.1 (i686-pc-linux-gnu,
GTK+ Version 2.12.12) of 2011-11-18, and cc-defs.el has c-version at
5.32.2.

I'd be happy to produce timings. What do you need?



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-21 16:48                       ` Geoff Gole
@ 2011-12-21 18:06                         ` Alan Mackenzie
  0 siblings, 0 replies; 42+ messages in thread
From: Alan Mackenzie @ 2011-12-21 18:06 UTC (permalink / raw)
  To: Geoff Gole; +Cc: Kan-Ru Chen, emacs-devel

Hi, Geoff.

On Thu, Dec 22, 2011 at 12:48:53AM +0800, Geoff Gole wrote:
> > If you're running GNU Emacs, an optimisation was introduced in Emacs
> > 23.3 which gave a considerable speed-up to such code.  This optimisation
> > found its way into the XEmacs CC Mode package in September.  I _hope_
> > your version of Emacs is prior to one of these, in which case upgrading
> > will give you this benefit.

> > Otherwise, I'll be asking you if you're prepared to give me some
> > timings.

> Well, M-x version gives me GNU Emacs 24.0.91.1 (i686-pc-linux-gnu,
> GTK+ Version 2.12.12) of 2011-11-18, and cc-defs.el has c-version at
> 5.32.2.

> I'd be happy to produce timings. What do you need?

Let's just agree on what we mean by "very slow".  I've just loaded
gl_mangle.h into an Emacs 24 pretest.  I've got a 2.6 GHz Athlon II
processor.  On doing M->, followed by scrolling a up a page at a time,
each operation is taking me less than 1 second.  Of course, once a page
gets fontified, scrolling over it then becomes instantaneous.

How fast/slow is this scrolling on your hardware/software?

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-21 13:33                   ` Geoff Gole
  2011-12-21 16:04                     ` Alan Mackenzie
@ 2011-12-21 18:16                     ` Eli Zaretskii
  2011-12-21 18:32                       ` Geoff Gole
  2011-12-23  1:56                     ` Kentaro NAKAZAWA
  2 siblings, 1 reply; 42+ messages in thread
From: Eli Zaretskii @ 2011-12-21 18:16 UTC (permalink / raw)
  To: Geoff Gole; +Cc: acm, kanru, emacs-devel

> Date: Wed, 21 Dec 2011 21:33:09 +0800
> From: Geoff Gole <geoffgole@gmail.com>
> Cc: Kan-Ru Chen <kanru@kanru.info>, emacs-devel@gnu.org
> 
> If another data point will help, I've also noticed *very* slow c-mode
> fontification in a script generated header,
> /usr/include/GL/gl_mangle.h. In case you don't have this header, a
> copy is attached.
> 
> The file is basically several thousand #defines.

FWIW, it's not particularly slow on my 6.5-year old hardware.  Much
faster than the previous data point.



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-21 18:16                     ` Eli Zaretskii
@ 2011-12-21 18:32                       ` Geoff Gole
  2011-12-21 19:35                         ` Eli Zaretskii
  0 siblings, 1 reply; 42+ messages in thread
From: Geoff Gole @ 2011-12-21 18:32 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: acm, kanru, emacs-devel

> How fast/slow is this scrolling on your hardware/software?

If I start an emacs -q, open the header in question, M->, M-v, emacs
takes a bit more than 2 minutes to respond. Scrolling in the fontified
area is smooth after this initial work. I see similar timings for
emacs -q -nw.

After M-x font-lock-mode scrolling is essentially instantaneous in
both those configurations.

I suspect hardware doesn't have much to do with this issue, but for
what it's worth I'm running on a core 2 duo.

> FWIW, it's not particularly slow on my 6.5-year old hardware. Much
faster than the previous data point.

Interesting. What version of emacs and cc-mode are you using?



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-21 18:32                       ` Geoff Gole
@ 2011-12-21 19:35                         ` Eli Zaretskii
  0 siblings, 0 replies; 42+ messages in thread
From: Eli Zaretskii @ 2011-12-21 19:35 UTC (permalink / raw)
  To: Geoff Gole; +Cc: acm, kanru, emacs-devel

> Date: Thu, 22 Dec 2011 02:32:08 +0800
> From: Geoff Gole <geoffgole@gmail.com>
> Cc: acm@muc.de, kanru@kanru.info, emacs-devel@gnu.org
> 
> > FWIW, it's not particularly slow on my 6.5-year old hardware. Much
> faster than the previous data point.
> 
> Interesting. What version of emacs and cc-mode are you using?

The latest trunk.

I now tried with 24.0.91, and there indeed M-> is much slower, more
than 2 minutes on my machine.



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-21 10:56                 ` Alan Mackenzie
  2011-12-21 13:33                   ` Geoff Gole
@ 2011-12-22 16:06                   ` Kan-Ru Chen
  1 sibling, 0 replies; 42+ messages in thread
From: Kan-Ru Chen @ 2011-12-22 16:06 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel

Alan Mackenzie <acm@muc.de> writes:

> It looks like my latest change is saving ~25% of the runtime.  That is
> not enough, not nearly enough.  Also, your hardware is _much_ faster than
> mine.  ;-)

In front of this file, the speed of the hardware seems less important
;-)

> This is going to be a lot of work, and I'm not going to be able to get it
> finished this year.  Sorry.  But I'm sure the bug can be fixed.  
>
> In the meantime, I suggest turning font-lock off for this file.

Thanks. Please take you time. I will blacklist this file.

-- 
Kanru



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-21 13:33                   ` Geoff Gole
  2011-12-21 16:04                     ` Alan Mackenzie
  2011-12-21 18:16                     ` Eli Zaretskii
@ 2011-12-23  1:56                     ` Kentaro NAKAZAWA
  2011-12-23 12:03                       ` Alan Mackenzie
  2012-01-06 22:08                       ` Alan Mackenzie
  2 siblings, 2 replies; 42+ messages in thread
From: Kentaro NAKAZAWA @ 2011-12-23  1:56 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Kan-Ru Chen, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 431 bytes --]

Hello. (sorry for my poor english ;)

Other pattern attached.
The file is very heavy at edit and undo.


Geoff Gole <geoffgole@gmail.com> writes:

> If another data point will help, I've also noticed *very* slow c-mode
> fontification in a script generated header,
> /usr/include/GL/gl_mangle.h. In case you don't have this header, a
> copy is attached.
>
> The file is basically several thousand #defines.
>

-- 
Kentaro Nakazawa

[-- Attachment #2: attribute.h --]
[-- Type: text/plain, Size: 13524 bytes --]

// -*- mode: c++ -*-

namespace NameSpace1 {
  namespace NameSpace2 {

    enum {
      kFooBarBazType_Attribute0000	= 0x0000,	// Comment0000
      kFooBarBazType_Attribute0001	= 0x0001,	// Comment0001
      kFooBarBazType_Attribute0002	= 0x0002,	// Comment0002
      kFooBarBazType_Attribute0003	= 0x0003,	// Comment0003
      kFooBarBazType_Attribute0004	= 0x0004,	// Comment0004
      kFooBarBazType_Attribute0005	= 0x0005,	// Comment0005
      kFooBarBazType_Attribute0006	= 0x0006,	// Comment0006
      kFooBarBazType_Attribute0007	= 0x0007,	// Comment0007
      kFooBarBazType_Attribute0008	= 0x0008,	// Comment0008
      kFooBarBazType_Attribute0009	= 0x0009,	// Comment0009
      kFooBarBazType_Attribute0010	= 0x000a,	// Comment0010
      kFooBarBazType_Attribute0011	= 0x000b,	// Comment0011
      kFooBarBazType_Attribute0012	= 0x000c,	// Comment0012
      kFooBarBazType_Attribute0013	= 0x000d,	// Comment0013
      kFooBarBazType_Attribute0014	= 0x000e,	// Comment0014
      kFooBarBazType_Attribute0015	= 0x000f,	// Comment0015
      kFooBarBazType_Attribute0016	= 0x0010,	// Comment0016
      kFooBarBazType_Attribute0017	= 0x0011,	// Comment0017
      kFooBarBazType_Attribute0018	= 0x0012,	// Comment0018
      kFooBarBazType_Attribute0019	= 0x0013,	// Comment0019
      kFooBarBazType_Attribute0020	= 0x0014,	// Comment0020
      kFooBarBazType_Attribute0021	= 0x0015,	// Comment0021
      kFooBarBazType_Attribute0022	= 0x0016,	// Comment0022
      kFooBarBazType_Attribute0023	= 0x0017,	// Comment0023
      kFooBarBazType_Attribute0024	= 0x0018,	// Comment0024
      kFooBarBazType_Attribute0025	= 0x0019,	// Comment0025
      kFooBarBazType_Attribute0026	= 0x001a,	// Comment0026
      kFooBarBazType_Attribute0027	= 0x001b,	// Comment0027
      kFooBarBazType_Attribute0028	= 0x001c,	// Comment0028
      kFooBarBazType_Attribute0029	= 0x001d,	// Comment0029
      kFooBarBazType_Attribute0030	= 0x001e,	// Comment0030
      kFooBarBazType_Attribute0031	= 0x001f,	// Comment0031
      kFooBarBazType_Attribute0032	= 0x0020,	// Comment0032
      kFooBarBazType_Attribute0033	= 0x0021,	// Comment0033
      kFooBarBazType_Attribute0034	= 0x0022,	// Comment0034
      kFooBarBazType_Attribute0035	= 0x0023,	// Comment0035
      kFooBarBazType_Attribute0036	= 0x0024,	// Comment0036
      kFooBarBazType_Attribute0037	= 0x0025,	// Comment0037
      kFooBarBazType_Attribute0038	= 0x0026,	// Comment0038
      kFooBarBazType_Attribute0039	= 0x0027,	// Comment0039
      kFooBarBazType_Attribute0040	= 0x0028,	// Comment0040
      kFooBarBazType_Attribute0041	= 0x0029,	// Comment0041
      kFooBarBazType_Attribute0042	= 0x002a,	// Comment0042
      kFooBarBazType_Attribute0043	= 0x002b,	// Comment0043
      kFooBarBazType_Attribute0044	= 0x002c,	// Comment0044
      kFooBarBazType_Attribute0045	= 0x002d,	// Comment0045
      kFooBarBazType_Attribute0046	= 0x002e,	// Comment0046
      kFooBarBazType_Attribute0047	= 0x002f,	// Comment0047
      kFooBarBazType_Attribute0048	= 0x0030,	// Comment0048
      kFooBarBazType_Attribute0049	= 0x0031,	// Comment0049
      kFooBarBazType_Attribute0050	= 0x0032,	// Comment0050
      kFooBarBazType_Attribute0051	= 0x0033,	// Comment0051
      kFooBarBazType_Attribute0052	= 0x0034,	// Comment0052
      kFooBarBazType_Attribute0053	= 0x0035,	// Comment0053
      kFooBarBazType_Attribute0054	= 0x0036,	// Comment0054
      kFooBarBazType_Attribute0055	= 0x0037,	// Comment0055
      kFooBarBazType_Attribute0056	= 0x0038,	// Comment0056
      kFooBarBazType_Attribute0057	= 0x0039,	// Comment0057
      kFooBarBazType_Attribute0058	= 0x003a,	// Comment0058
      kFooBarBazType_Attribute0059	= 0x003b,	// Comment0059
      kFooBarBazType_Attribute0060	= 0x003c,	// Comment0060
      kFooBarBazType_Attribute0061	= 0x003d,	// Comment0061
      kFooBarBazType_Attribute0062	= 0x003e,	// Comment0062
      kFooBarBazType_Attribute0063	= 0x003f,	// Comment0063
      kFooBarBazType_Attribute0064	= 0x0040,	// Comment0064
      kFooBarBazType_Attribute0065	= 0x0041,	// Comment0065
      kFooBarBazType_Attribute0066	= 0x0042,	// Comment0066
      kFooBarBazType_Attribute0067	= 0x0043,	// Comment0067
      kFooBarBazType_Attribute0068	= 0x0044,	// Comment0068
      kFooBarBazType_Attribute0069	= 0x0045,	// Comment0069
      kFooBarBazType_Attribute0070	= 0x0046,	// Comment0070
      kFooBarBazType_Attribute0071	= 0x0047,	// Comment0071
      kFooBarBazType_Attribute0072	= 0x0048,	// Comment0072
      kFooBarBazType_Attribute0073	= 0x0049,	// Comment0073
      kFooBarBazType_Attribute0074	= 0x004a,	// Comment0074
      kFooBarBazType_Attribute0075	= 0x004b,	// Comment0075
      kFooBarBazType_Attribute0076	= 0x004c,	// Comment0076
      kFooBarBazType_Attribute0077	= 0x004d,	// Comment0077
      kFooBarBazType_Attribute0078	= 0x004e,	// Comment0078
      kFooBarBazType_Attribute0079	= 0x004f,	// Comment0079
      kFooBarBazType_Attribute0080	= 0x0050,	// Comment0080
      kFooBarBazType_Attribute0081	= 0x0051,	// Comment0081
      kFooBarBazType_Attribute0082	= 0x0052,	// Comment0082
      kFooBarBazType_Attribute0083	= 0x0053,	// Comment0083
      kFooBarBazType_Attribute0084	= 0x0054,	// Comment0084
      kFooBarBazType_Attribute0085	= 0x0055,	// Comment0085
      kFooBarBazType_Attribute0086	= 0x0056,	// Comment0086
      kFooBarBazType_Attribute0087	= 0x0057,	// Comment0087
      kFooBarBazType_Attribute0088	= 0x0058,	// Comment0088
      kFooBarBazType_Attribute0089	= 0x0059,	// Comment0089
      kFooBarBazType_Attribute0090	= 0x005a,	// Comment0090
      kFooBarBazType_Attribute0091	= 0x005b,	// Comment0091
      kFooBarBazType_Attribute0092	= 0x005c,	// Comment0092
      kFooBarBazType_Attribute0093	= 0x005d,	// Comment0093
      kFooBarBazType_Attribute0094	= 0x005e,	// Comment0094
      kFooBarBazType_Attribute0095	= 0x005f,	// Comment0095
      kFooBarBazType_Attribute0096	= 0x0060,	// Comment0096
      kFooBarBazType_Attribute0097	= 0x0061,	// Comment0097
      kFooBarBazType_Attribute0098	= 0x0062,	// Comment0098
      kFooBarBazType_Attribute0099	= 0x0063,	// Comment0099
      kFooBarBazType_Attribute0100	= 0x0064,	// Comment0100
      kFooBarBazType_Attribute0101	= 0x0065,	// Comment0101
      kFooBarBazType_Attribute0102	= 0x0066,	// Comment0102
      kFooBarBazType_Attribute0103	= 0x0067,	// Comment0103
      kFooBarBazType_Attribute0104	= 0x0068,	// Comment0104
      kFooBarBazType_Attribute0105	= 0x0069,	// Comment0105
      kFooBarBazType_Attribute0106	= 0x006a,	// Comment0106
      kFooBarBazType_Attribute0107	= 0x006b,	// Comment0107
      kFooBarBazType_Attribute0108	= 0x006c,	// Comment0108
      kFooBarBazType_Attribute0109	= 0x006d,	// Comment0109
      kFooBarBazType_Attribute0110	= 0x006e,	// Comment0110
      kFooBarBazType_Attribute0111	= 0x006f,	// Comment0111
      kFooBarBazType_Attribute0112	= 0x0070,	// Comment0112
      kFooBarBazType_Attribute0113	= 0x0071,	// Comment0113
      kFooBarBazType_Attribute0114	= 0x0072,	// Comment0114
      kFooBarBazType_Attribute0115	= 0x0073,	// Comment0115
      kFooBarBazType_Attribute0116	= 0x0074,	// Comment0116
      kFooBarBazType_Attribute0117	= 0x0075,	// Comment0117
      kFooBarBazType_Attribute0118	= 0x0076,	// Comment0118
      kFooBarBazType_Attribute0119	= 0x0077,	// Comment0119
      kFooBarBazType_Attribute0120	= 0x0078,	// Comment0120
      kFooBarBazType_Attribute0121	= 0x0079,	// Comment0121
      kFooBarBazType_Attribute0122	= 0x007a,	// Comment0122
      kFooBarBazType_Attribute0123	= 0x007b,	// Comment0123
      kFooBarBazType_Attribute0124	= 0x007c,	// Comment0124
      kFooBarBazType_Attribute0125	= 0x007d,	// Comment0125
      kFooBarBazType_Attribute0126	= 0x007e,	// Comment0126
      kFooBarBazType_Attribute0127	= 0x007f,	// Comment0127
      kFooBarBazType_Attribute0128	= 0x0080,	// Comment0128
      kFooBarBazType_Attribute0129	= 0x0081,	// Comment0129
      kFooBarBazType_Attribute0130	= 0x0082,	// Comment0130
      kFooBarBazType_Attribute0131	= 0x0083,	// Comment0131
      kFooBarBazType_Attribute0132	= 0x0084,	// Comment0132
      kFooBarBazType_Attribute0133	= 0x0085,	// Comment0133
      kFooBarBazType_Attribute0134	= 0x0086,	// Comment0134
      kFooBarBazType_Attribute0135	= 0x0087,	// Comment0135
      kFooBarBazType_Attribute0136	= 0x0088,	// Comment0136
      kFooBarBazType_Attribute0137	= 0x0089,	// Comment0137
      kFooBarBazType_Attribute0138	= 0x008a,	// Comment0138
      kFooBarBazType_Attribute0139	= 0x008b,	// Comment0139
      kFooBarBazType_Attribute0140	= 0x008c,	// Comment0140
      kFooBarBazType_Attribute0141	= 0x008d,	// Comment0141
      kFooBarBazType_Attribute0142	= 0x008e,	// Comment0142
      kFooBarBazType_Attribute0143	= 0x008f,	// Comment0143
      kFooBarBazType_Attribute0144	= 0x0090,	// Comment0144
      kFooBarBazType_Attribute0145	= 0x0091,	// Comment0145
      kFooBarBazType_Attribute0146	= 0x0092,	// Comment0146
      kFooBarBazType_Attribute0147	= 0x0093,	// Comment0147
      kFooBarBazType_Attribute0148	= 0x0094,	// Comment0148
      kFooBarBazType_Attribute0149	= 0x0095,	// Comment0149
      kFooBarBazType_Attribute0150	= 0x0096,	// Comment0150
      kFooBarBazType_Attribute0151	= 0x0097,	// Comment0151
      kFooBarBazType_Attribute0152	= 0x0098,	// Comment0152
      kFooBarBazType_Attribute0153	= 0x0099,	// Comment0153
      kFooBarBazType_Attribute0154	= 0x009a,	// Comment0154
      kFooBarBazType_Attribute0155	= 0x009b,	// Comment0155
      kFooBarBazType_Attribute0156	= 0x009c,	// Comment0156
      kFooBarBazType_Attribute0157	= 0x009d,	// Comment0157
      kFooBarBazType_Attribute0158	= 0x009e,	// Comment0158
      kFooBarBazType_Attribute0159	= 0x009f,	// Comment0159
      kFooBarBazType_Attribute0160	= 0x00a0,	// Comment0160
      kFooBarBazType_Attribute0161	= 0x00a1,	// Comment0161
      kFooBarBazType_Attribute0162	= 0x00a2,	// Comment0162
      kFooBarBazType_Attribute0163	= 0x00a3,	// Comment0163
      kFooBarBazType_Attribute0164	= 0x00a4,	// Comment0164
      kFooBarBazType_Attribute0165	= 0x00a5,	// Comment0165
      kFooBarBazType_Attribute0166	= 0x00a6,	// Comment0166
      kFooBarBazType_Attribute0167	= 0x00a7,	// Comment0167
      kFooBarBazType_Attribute0168	= 0x00a8,	// Comment0168
      kFooBarBazType_Attribute0169	= 0x00a9,	// Comment0169
      kFooBarBazType_Attribute0170	= 0x00aa,	// Comment0170
      kFooBarBazType_Attribute0171	= 0x00ab,	// Comment0171
      kFooBarBazType_Attribute0172	= 0x00ac,	// Comment0172
      kFooBarBazType_Attribute0173	= 0x00ad,	// Comment0173
      kFooBarBazType_Attribute0174	= 0x00ae,	// Comment0174
      kFooBarBazType_Attribute0175	= 0x00af,	// Comment0175
      kFooBarBazType_Attribute0176	= 0x00b0,	// Comment0176
      kFooBarBazType_Attribute0177	= 0x00b1,	// Comment0177
      kFooBarBazType_Attribute0178	= 0x00b2,	// Comment0178
      kFooBarBazType_Attribute0179	= 0x00b3,	// Comment0179
      kFooBarBazType_Attribute0180	= 0x00b4,	// Comment0180
      kFooBarBazType_Attribute0181	= 0x00b5,	// Comment0181
      kFooBarBazType_Attribute0182	= 0x00b6,	// Comment0182
      kFooBarBazType_Attribute0183	= 0x00b7,	// Comment0183
      kFooBarBazType_Attribute0184	= 0x00b8,	// Comment0184
      kFooBarBazType_Attribute0185	= 0x00b9,	// Comment0185
      kFooBarBazType_Attribute0186	= 0x00ba,	// Comment0186
      kFooBarBazType_Attribute0187	= 0x00bb,	// Comment0187
      kFooBarBazType_Attribute0188	= 0x00bc,	// Comment0188
      kFooBarBazType_Attribute0189	= 0x00bd,	// Comment0189
      kFooBarBazType_Attribute0190	= 0x00be,	// Comment0190
      kFooBarBazType_Attribute0191	= 0x00bf,	// Comment0191
      kFooBarBazType_Attribute0192	= 0x00c0,	// Comment0192
      kFooBarBazType_Attribute0193	= 0x00c1,	// Comment0193
      kFooBarBazType_Attribute0194	= 0x00c2,	// Comment0194
      kFooBarBazType_Attribute0195	= 0x00c3,	// Comment0195
      kFooBarBazType_Attribute0196	= 0x00c4,	// Comment0196
      kFooBarBazType_Attribute0197	= 0x00c5,	// Comment0197
      kFooBarBazType_Attribute0198	= 0x00c6,	// Comment0198
      kFooBarBazType_Attribute0199	= 0x00c7,	// Comment0199
      kFooBarBazType_Attribute0200	= 0x00c8,	// Comment0200
      kFooBarBazType_Attribute0201	= 0x00c9,	// Comment0201
      kFooBarBazType_Attribute0202	= 0x00ca,	// Comment0202
      kFooBarBazType_Attribute0203	= 0x00cb,	// Comment0203
      kFooBarBazType_Attribute0204	= 0x00cc,	// Comment0204
      kFooBarBazType_Attribute0205	= 0x00cd,	// Comment0205
      kFooBarBazType_Attribute0206	= 0x00ce,	// Comment0206
      kFooBarBazType_Attribute0207	= 0x00cf,	// Comment0207
      kFooBarBazType_Attribute0208	= 0x00d0,	// Comment0208
      kFooBarBazType_Attribute0209	= 0x00d1,	// Comment0209
      kFooBarBazType_Attribute0210	= 0x00d2,	// Comment0210
      kFooBarBazType_Attribute0211	= 0x00d3,	// Comment0211
      kFooBarBazType_Attribute0212	= 0x00d4,	// Comment0212
      kFooBarBazType_Attribute0213	= 0x00d5,	// Comment0213
      kFooBarBazType_Attribute0214	= 0x00d6,	// Comment0214
      kFooBarBazType_Attribute0215	= 0x00d7,	// Comment0215
      kFooBarBazType_Attribute0216	= 0x00d8,	// Comment0216
      kFooBarBazType_Attribute0217	= 0x00d9,	// Comment0217
      kFooBarBazType_Attribute0218	= 0x00da,	// Comment0218
      kFooBarBazType_Attribute0219	= 0x00db,	// Comment0219
      kFooBarBazType_Attribute0220	= 0x00dc,	// Comment0220
      kFooBarBazType_Attribute0221	= 0x00dd,	// Comment0221
      kFooBarBazType_Attribute0222	= 0x00de,	// Comment0222
    };

  } // namespace Namespace2
} // namespace Namespace1

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-23  1:56                     ` Kentaro NAKAZAWA
@ 2011-12-23 12:03                       ` Alan Mackenzie
  2012-01-06 22:08                       ` Alan Mackenzie
  1 sibling, 0 replies; 42+ messages in thread
From: Alan Mackenzie @ 2011-12-23 12:03 UTC (permalink / raw)
  To: Kentaro NAKAZAWA; +Cc: Kan-Ru Chen, emacs-devel

Hello, Kentaro.

On Fri, Dec 23, 2011 at 10:56:15AM +0900, Kentaro NAKAZAWA wrote:
> Hello. (sorry for my poor english ;)

> Other pattern attached.
> The file is very heavy at edit and undo.


> Geoff Gole <geoffgole@gmail.com> writes:

> > If another data point will help, I've also noticed *very* slow c-mode
> > fontification in a script generated header,
> > /usr/include/GL/gl_mangle.h. In case you don't have this header, a
> > copy is attached.

> > The file is basically several thousand #defines.

Thanks for reporting this problem.  I think I can see where the code
needs fixing.  I should be able to get this done early next year.

> -- 
> Kentaro Nakazawa

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-23  1:56                     ` Kentaro NAKAZAWA
  2011-12-23 12:03                       ` Alan Mackenzie
@ 2012-01-06 22:08                       ` Alan Mackenzie
  2012-01-07  0:09                         ` Kentaro NAKAZAWA
  1 sibling, 1 reply; 42+ messages in thread
From: Alan Mackenzie @ 2012-01-06 22:08 UTC (permalink / raw)
  To: Kentaro NAKAZAWA; +Cc: Kan-Ru Chen, emacs-devel

Hello, Kentaro.

On Fri, Dec 23, 2011 at 10:56:15AM +0900, Kentaro NAKAZAWA wrote:
> Hello. (sorry for my poor english ;)

> Other pattern attached.
> The file is very heavy at edit and undo.


> Geoff Gole <geoffgole@gmail.com> writes:

> > If another data point will help, I've also noticed *very* slow c-mode
> > fontification in a script generated header,
> > /usr/include/GL/gl_mangle.h. In case you don't have this header, a
> > copy is attached.

> > The file is basically several thousand #defines.


> // -*- mode: c++ -*-

> namespace NameSpace1 {
>   namespace NameSpace2 {

>     enum {
>       kFooBarBazType_Attribute0000	= 0x0000,	// Comment0000
>       kFooBarBazType_Attribute0001	= 0x0001,	// Comment0001
>       kFooBarBazType_Attribute0002	= 0x0002,	// Comment0002
>       kFooBarBazType_Attribute0003	= 0x0003,	// Comment0003
>
> [....]
>
>       kFooBarBazType_Attribute0220	= 0x00dc,	// Comment0220
>       kFooBarBazType_Attribute0221	= 0x00dd,	// Comment0221
>       kFooBarBazType_Attribute0222	= 0x00de,	// Comment0222
>     };

>   } // namespace Namespace2
> } // namespace Namespace1

Would you try this patch and let me know how it goes, please.


*** orig/cc-fonts.el	2012-01-06 12:27:14.000000000 +0000
--- cc-fonts.el	2012-01-06 21:48:54.000000000 +0000
***************
*** 1394,1399 ****
--- 1394,1414 ----
  	      (c-fontify-recorded-types-and-refs)
  	      nil)
  
+ 	     ((and (not c-enums-contain-decls)
+ 		   ;; An optimisation quickly to eliminate scans of long enum
+ 		   ;; declarations in the next cond arm.
+ 		   (let ((paren-state (c-parse-state)))
+ 		     (and
+ 		      (numberp (car paren-state))
+ 		      (save-excursion
+ 			(goto-char (car paren-state))
+ 			(c-backward-token-2)
+ 			(or (looking-at c-brace-list-key))
+ 			(progn
+ 			  (c-backward-token-2)
+ 			  (looking-at c-brace-list-key))))))
+ 	      t)
+ 
  	     (t
  	      ;; Are we at a declarator?  Try to go back to the declaration
  	      ;; to check this.  If we get there, check whether a "typedef"
*** orig/cc-langs.el	2012-01-06 12:27:14.000000000 +0000
--- cc-langs.el	2012-01-06 12:54:00.000000000 +0000
***************
*** 2930,2935 ****
--- 2930,2941 ----
  		    ; generics is not yet coded in CC Mode.
  (c-lang-defvar c-recognize-<>-arglists (c-lang-const c-recognize-<>-arglists))
  
+ (c-lang-defconst c-enums-contain-decls
+   "Non-nil means that an enum structure can contain declarations."
+   t nil
+   java t)
+ (c-lang-defvar c-enums-contain-decls (c-lang-const c-enums-contain-decls))
+ 
  (c-lang-defconst c-recognize-paren-inits
    "Non-nil means that parenthesis style initializers exist,
  i.e. constructs like



> -- 
> Kentaro Nakazawa

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2012-01-06 22:08                       ` Alan Mackenzie
@ 2012-01-07  0:09                         ` Kentaro NAKAZAWA
  2012-01-07 13:50                           ` Alan Mackenzie
  0 siblings, 1 reply; 42+ messages in thread
From: Kentaro NAKAZAWA @ 2012-01-07  0:09 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Kan-Ru Chen, emacs-devel

Hello, Alan.

Alan Mackenzie <acm@muc.de> writes:

> Would you try this patch and let me know how it goes, please.
>
>
> *** orig/cc-fonts.el	2012-01-06 12:27:14.000000000 +0000
> --- cc-fonts.el	2012-01-06 21:48:54.000000000 +0000
> ***************
> *** 1394,1399 ****
> --- 1394,1414 ----
>   	      (c-fontify-recorded-types-and-refs)
>   	      nil)
>   
> + 	     ((and (not c-enums-contain-decls)
> + 		   ;; An optimisation quickly to eliminate scans of long enum
> + 		   ;; declarations in the next cond arm.
> + 		   (let ((paren-state (c-parse-state)))
> + 		     (and
> + 		      (numberp (car paren-state))
> + 		      (save-excursion
> + 			(goto-char (car paren-state))
> + 			(c-backward-token-2)
> + 			(or (looking-at c-brace-list-key))
> + 			(progn
> + 			  (c-backward-token-2)
> + 			  (looking-at c-brace-list-key))))))
> + 	      t)
> + 
>   	     (t
>   	      ;; Are we at a declarator?  Try to go back to the declaration
>   	      ;; to check this.  If we get there, check whether a "typedef"
> *** orig/cc-langs.el	2012-01-06 12:27:14.000000000 +0000
> --- cc-langs.el	2012-01-06 12:54:00.000000000 +0000
> ***************
> *** 2930,2935 ****
> --- 2930,2941 ----
>   		    ; generics is not yet coded in CC Mode.
>   (c-lang-defvar c-recognize-<>-arglists (c-lang-const c-recognize-<>-arglists))
>   
> + (c-lang-defconst c-enums-contain-decls
> +   "Non-nil means that an enum structure can contain declarations."
> +   t nil
> +   java t)
> + (c-lang-defvar c-enums-contain-decls (c-lang-const c-enums-contain-decls))
> + 
>   (c-lang-defconst c-recognize-paren-inits
>     "Non-nil means that parenthesis style initializers exist,
>   i.e. constructs like
>

Thank you for the patch.
I applied a patch, it came to be able to edit the attribute.h comfortably.
The original file with the problem is comfortable too.
However, some key words were not colored.

-- 
Kentaro Nakazawa



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2012-01-07  0:09                         ` Kentaro NAKAZAWA
@ 2012-01-07 13:50                           ` Alan Mackenzie
  2012-01-08  1:26                             ` Kentaro NAKAZAWA
  0 siblings, 1 reply; 42+ messages in thread
From: Alan Mackenzie @ 2012-01-07 13:50 UTC (permalink / raw)
  To: Kentaro NAKAZAWA; +Cc: Kan-Ru Chen, emacs-devel

Hi, Kentaro,

On Sat, Jan 07, 2012 at 09:09:01AM +0900, Kentaro NAKAZAWA wrote:
> Hello, Alan.

> Alan Mackenzie <acm@muc.de> writes:

> > Would you try this patch and let me know how it goes, please.

[ .... ]

> Thank you for the patch.
> I applied a patch, it came to be able to edit the attribute.h comfortably.
> The original file with the problem is comfortable too.
> However, some key words were not colored.

Could you be more specific, please - tell me which keywords weren't
fontified, and exactly what you did for this to happen.

Thanks!

> -- 
> Kentaro Nakazawa

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2012-01-07 13:50                           ` Alan Mackenzie
@ 2012-01-08  1:26                             ` Kentaro NAKAZAWA
  2012-01-08 10:05                               ` Alan Mackenzie
  2012-01-20 17:26                               ` Alan Mackenzie
  0 siblings, 2 replies; 42+ messages in thread
From: Kentaro NAKAZAWA @ 2012-01-08  1:26 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Kan-Ru Chen, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 413 bytes --]

Hello, Alan.

> Could you be more specific, please - tell me which keywords weren't
> fontified, and exactly what you did for this to happen.

The screen shot was appended. (emacs -Q)

action.cc.png:
http://ftp.gnome.org/pub/GNOME/sources/gtkmm/3.0/gtkmm-3.0.1.tar.bz2
gtkmm-3.0.1/gtk/gtkmm/action.cc

The method name is not fontified.
But I execute M-oM-o in function, fontified correctly.

-- 
Kentaro Nakazawa

[-- Attachment #2: attribute.h.png --]
[-- Type: image/png, Size: 232079 bytes --]

[-- Attachment #3: attribute.h.patched.png --]
[-- Type: image/png, Size: 211056 bytes --]

[-- Attachment #4: action.cc.png --]
[-- Type: image/png, Size: 105839 bytes --]

[-- Attachment #5: action.cc.patched.png --]
[-- Type: image/png, Size: 106373 bytes --]

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2012-01-08  1:26                             ` Kentaro NAKAZAWA
@ 2012-01-08 10:05                               ` Alan Mackenzie
  2012-01-20 17:26                               ` Alan Mackenzie
  1 sibling, 0 replies; 42+ messages in thread
From: Alan Mackenzie @ 2012-01-08 10:05 UTC (permalink / raw)
  To: Kentaro NAKAZAWA; +Cc: Kan-Ru Chen, emacs-devel

Hi, Kentaro.

On Sun, Jan 08, 2012 at 10:26:10AM +0900, Kentaro NAKAZAWA wrote:
> Hello, Alan.

> > Could you be more specific, please - tell me which keywords weren't
> > fontified, and exactly what you did for this to happen.

> The screen shot was appended. (emacs -Q)

> action.cc.png:
> http://ftp.gnome.org/pub/GNOME/sources/gtkmm/3.0/gtkmm-3.0.1.tar.bz2
> gtkmm-3.0.1/gtk/gtkmm/action.cc

> The method name is not fontified.
> But I execute M-oM-o in function, fontified correctly.

OK.  I think that's a separate bug.  I'll commit the patch I sent you to
the Emacs trunk.  I'll look at the new bug afterwards.

> -- 
> Kentaro Nakazawa

-- 
Alan Mackenzie (Nuremberg, Germany)



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-17 16:06               ` Kan-Ru Chen
  2011-12-21 10:56                 ` Alan Mackenzie
@ 2012-01-13 19:12                 ` Alan Mackenzie
  2012-01-14  9:12                   ` Kan-Ru Chen
  2012-01-15 21:12                 ` Alan Mackenzie
  2 siblings, 1 reply; 42+ messages in thread
From: Alan Mackenzie @ 2012-01-13 19:12 UTC (permalink / raw)
  To: Kan-Ru Chen; +Cc: Eli Zaretskii, emacs-devel

Hello, Kanru.

On Sun, Dec 18, 2011 at 12:06:00AM +0800, Kan-Ru Chen wrote:
> Alan Mackenzie <acm@muc.de> writes:

> Please forgive me for using the other files, it is closer to the real
> case. You can get the file from

> https://hg.mozilla.org/mozilla-central/raw-file/tip/dom/base/nsDOMClassInfo.cpp

That's some file.  ;-)

> (i) Loaded elp and instrumented the c- package.
> (ii) Loaded nsDOMClassInfo.cpp
> (iii) Done M-x c++-mode
> (iv) Done M-x elp-results (to clear the accumulated times)
> (v) C-s battery until failing to find 
> (vi) M-x elp-results.

> Before:

> c-beginning-of-decl-1                          201         13.065947999  0.0650047164
> c-beginning-of-statement-1                     229         13.061191     0.0570357685
> c-crosses-statement-barrier-p                  35466       11.622212999  0.0003277001
> c-font-lock-declarations                       16          9.4090929999  0.5880683124
> c-find-decl-spots                              16          9.4089879999  0.5880617499

> c-at-macro-vsemi-p                             46569       6.6139159999  0.0001420240
> c-in-literal                                   46569       5.4569670000  0.0001171802
> c-literal-limits                               51666       3.1393819999  6.076...e-05
> c-backward-sws                                 176682      1.6644079999  9.420...e-06
> c-beginning-of-macro                           104078      0.5568430000  5.350...e-06

> c-state-safe-place                             72459       0.3154430000  4.353...e-06
> c-parse-state                                  225         0.1421229999  0.0006316577
> c-parse-state-1                                225         0.1385559999  0.0006158044
> c-font-lock-enclosing-decls                    16          0.1365140000  0.0085321250
> c-append-to-state-cache                        196         0.0641449999  0.0003272704

> After:

> c-beginning-of-decl-1                          137         9.6732900000  0.0706079562
> c-beginning-of-statement-1                     165         9.6693369999  0.0586020424
> c-crosses-statement-barrier-p                  25584       8.5505400000  0.0003342143
> c-font-lock-declarations                       16          6.059768      0.3787355
> c-find-decl-spots                              16          6.059666      0.378729125

> c-at-macro-vsemi-p                             35149       4.7420429999  0.0001349126
> c-in-literal                                   35149       4.0154739999  0.0001142414
> c-literal-limits                               38962       2.5425719999  6.525...e-05
> c-backward-sws                                 128214      1.1421259999  8.907...e-06
> c-beginning-of-macro                           78145       0.3845660000  4.921...e-06

> c-state-safe-place                             54703       0.2419970000  4.423...e-06
> c-parse-state                                  317         0.1464209999  0.0004618958
> c-font-lock-enclosing-decls                    16          0.137945      0.0086215625
> c-parse-state-1                                317         0.1331939999  0.0004201703
> c-font-lock-declarators                        24          0.065522      0.0027300833

I've inserted some code which checks for macro invocation by looking for
an identifier followed by '('.  More or less.

Would you please try out the following patch.  It improves things
considerably, although it might not be quite the version which gets
committed.



*** orig/cc-engine.el	2011-12-15 09:06:28.000000000 +0000
--- cc-engine.el	2011-12-15 13:41:25.000000000 +0000
***************
*** 8073,8078 ****
--- 8073,8094 ----
  	    next-open-brace (c-pull-open-brace paren-state)))
      open-brace))
  
+ (defun c-cheap-inside-bracelist-p (paren-state)
+   ;; Return the position of the L-brace if point is inside a brace list
+   ;; initialization of an array, etc.  This is an approximate function,
+   ;; designed for speed over accuracy.  We simply search for "= {" (naturally
+   ;; with syntactic whitespace allowed).  PAREN-STATE is the normal thing that
+   ;; it is everywhere else.
+   (let (b-pos)
+     (save-excursion
+       (while
+ 	  (and (setq b-pos (c-pull-open-brace paren-state))
+ 	       (progn (goto-char b-pos)
+ 		      (c-backward-sws)
+ 		      (c-backward-token-2)
+ 		      (not (looking-at "=")))))
+       b-pos)))
+ 
  (defun c-inside-bracelist-p (containing-sexp paren-state)
    ;; return the buffer position of the beginning of the brace list
    ;; statement if we're inside a brace list, otherwise return nil.
*** orig/cc-fonts.el	2011-12-15 09:06:28.000000000 +0000
--- cc-fonts.el	2012-01-13 18:50:02.000000000 +0000
***************
*** 407,416 ****
  	      ;; `parse-sexp-lookup-properties' (when it exists).
  	      (parse-sexp-lookup-properties
  	       (cc-eval-when-compile
! 		 (boundp 'parse-sexp-lookup-properties))))
  	  (goto-char
  	   (let ((here (point)))
! 	     (if (eq (car (c-beginning-of-decl-1)) 'same)
  		 (point)
  	       here)))
  	  ,(c-make-font-lock-search-form regexp highlights))
--- 407,417 ----
  	      ;; `parse-sexp-lookup-properties' (when it exists).
  	      (parse-sexp-lookup-properties
  	       (cc-eval-when-compile
! 		 (boundp 'parse-sexp-lookup-properties)))
! 	      (BOD-limit (max (point-min) (- (point) 2000))))
  	  (goto-char
  	   (let ((here (point)))
! 	     (if (eq (car (c-beginning-of-decl-1 BOD-limit)) 'same)
  		 (point)
  	       here)))
  	  ,(c-make-font-lock-search-form regexp highlights))
***************
*** 1317,1323 ****
  	      (or (looking-at c-typedef-key)
  		  (goto-char start-pos)))
  
- 	    ;; Now analyze the construct.
  	    ;; In QT, "more" is an irritating keyword that expands to nothing.
  	    ;; We skip over it to prevent recognition of "more slots: <symbol>"
  	    ;; as a bitfield declaration.
--- 1318,1323 ----
***************
*** 1326,1331 ****
--- 1326,1333 ----
  			(concat "\\(more\\)\\([^" c-symbol-chars "]\\|$\\)")))
  	      (goto-char (match-end 1))
  	      (c-forward-syntactic-ws))
+ 
+ 	    ;; Now analyze the construct.
  	    (setq decl-or-cast (c-forward-decl-or-cast-1
  				match-pos context last-cast-end))
  
***************
*** 1394,1399 ****
--- 1396,1428 ----
  	      (c-fontify-recorded-types-and-refs)
  	      nil)
  
+ 	     ;; Restore point, since at this point in the code it has been
+ 	     ;; left undefined by c-forward-decl-or-cast-1 above.
+ 	     ((progn (goto-char start-pos) nil))
+ 
+ 	     ;; If point is inside a bracelist, there's no point checking it
+ 	     ;; being at a declarator.
+ 	     ((let ((paren-state (c-parse-state)))
+ 		(c-cheap-inside-bracelist-p paren-state))
+ 	      nil)
+ 
+ 	     ;; If point is just after a ")" which is followed by an
+ 	     ;; identifier which isn't a label, or at the matching "(", we're
+ 	     ;; at either a macro invocation, a cast, or a
+ 	     ;; for/while/etc. statement.  The cast case is handled above.
+ 	     ;; None of these cases can contain a declarator.
+ 	     ((or (and (eq (char-before match-pos) ?\))
+ 	     	       (c-on-identifier)
+ 	     	       (save-excursion (not (c-forward-label))))
+ 	     	  (and (eq (char-after) ?\()
+ 	     	       (save-excursion
+ 	     		 (and
+ 	     		  (progn (c-backward-token-2) (c-on-identifier))
+ 	     		  (save-excursion (not (c-forward-label)))
+ 	     		  (progn (c-backward-token-2)
+ 	     			 (eq (char-after) ?\())))))
+ 	      nil)
+ 
  	     (t
  	      ;; Are we at a declarator?  Try to go back to the declaration
  	      ;; to check this.  If we get there, check whether a "typedef"
***************
*** 1403,1408 ****
--- 1432,1440 ----
  		    c-recognize-knr-p) ; Strictly speaking, bogus, but it
  				       ; speeds up lisp.h tremendously.
  		(save-excursion
+ 		  (unless (or (eobp)
+ 			      (looking-at "\\s(\\|\\s)"))
+ 		    (forward-char))
  		  (setq bod-res (car (c-beginning-of-decl-1 decl-search-lim)))
  		  (if (and (eq bod-res 'same)
  			   (progn

> -- 
> Kanru

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2012-01-13 19:12                 ` Alan Mackenzie
@ 2012-01-14  9:12                   ` Kan-Ru Chen
  0 siblings, 0 replies; 42+ messages in thread
From: Kan-Ru Chen @ 2012-01-14  9:12 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Eli Zaretskii, emacs-devel

Hi!

Alan Mackenzie <acm@muc.de> writes:

> I've inserted some code which checks for macro invocation by looking for
> an identifier followed by '('.  More or less.
>
> Would you please try out the following patch.  It improves things
> considerably, although it might not be quite the version which gets
> committed.

Thanks! Now the speed is very acceptable after applied the patch :)

-- 
Kanru



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2011-12-17 16:06               ` Kan-Ru Chen
  2011-12-21 10:56                 ` Alan Mackenzie
  2012-01-13 19:12                 ` Alan Mackenzie
@ 2012-01-15 21:12                 ` Alan Mackenzie
  2012-01-22  4:20                   ` Kan-Ru Chen
  2 siblings, 1 reply; 42+ messages in thread
From: Alan Mackenzie @ 2012-01-15 21:12 UTC (permalink / raw)
  To: Kan-Ru Chen; +Cc: emacs-devel

Hello, Kanru!

On Sun, Dec 18, 2011 at 12:06:00AM +0800, Kan-Ru Chen wrote:
> Alan Mackenzie <acm@muc.de> writes:

> Please forgive me for using the other files, it is closer to the real
> case. You can get the file from

> https://hg.mozilla.org/mozilla-central/raw-file/tip/dom/base/nsDOMClassInfo.cpp

Ah yes, this wonderful file!

Here's another patch which contains more optimisations than my last
patch.  Could you apply it _instead_ of the previous patch, and let me
know how it goes, please.  The more serious editing you can do with it,
particularly on C++ files, the better.

Anyhow, here's the patch:


*** orig/cc-engine.el	2011-12-15 09:06:28.000000000 +0000
--- cc-engine.el	2012-01-15 19:20:01.000000000 +0000
***************
*** 2075,2081 ****
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;; We maintain a simple cache of positions which aren't in a literal, so as to
  ;; speed up testing for non-literality.
! (defconst c-state-nonlit-pos-interval 10000)
  ;; The approximate interval between entries in `c-state-nonlit-pos-cache'.
  
  (defvar c-state-nonlit-pos-cache nil)
--- 2075,2081 ----
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;; We maintain a simple cache of positions which aren't in a literal, so as to
  ;; speed up testing for non-literality.
! (defconst c-state-nonlit-pos-interval 3000)
  ;; The approximate interval between entries in `c-state-nonlit-pos-cache'.
  
  (defvar c-state-nonlit-pos-cache nil)
***************
*** 2130,2136 ****
      (widen)
      (save-excursion
        (let ((c c-state-nonlit-pos-cache)
! 	    pos npos lit)
  	;; Trim the cache to take account of buffer changes.
  	(while (and c (> (car c) c-state-nonlit-pos-cache-limit))
  	  (setq c (cdr c)))
--- 2130,2136 ----
      (widen)
      (save-excursion
        (let ((c c-state-nonlit-pos-cache)
! 	    pos npos lit macro-beg)
  	;; Trim the cache to take account of buffer changes.
  	(while (and c (> (car c) c-state-nonlit-pos-cache-limit))
  	  (setq c (cdr c)))
***************
*** 2140,2160 ****
  	  (setq c (cdr c)))
  	(setq pos (or (car c) (point-min)))
  
! 	(while (<= (setq npos (+ pos c-state-nonlit-pos-interval))
! 		   here)
! 	  (setq lit (car (cddr (c-state-pp-to-literal pos npos))))
! 	  (setq pos (or (cdr lit) npos)) ; end of literal containing npos.
  	  (goto-char pos)
  	  (when (and (c-beginning-of-macro) (/= (point) pos))
! 	    (c-syntactic-end-of-macro)
! 	    (or (eobp) (forward-char))
! 	    (setq pos (point)))
! 	  (setq c-state-nonlit-pos-cache (cons pos c-state-nonlit-pos-cache)))
  
  	(if (> pos c-state-nonlit-pos-cache-limit)
  	    (setq c-state-nonlit-pos-cache-limit pos))
  	pos))))
! 	
  (defun c-state-literal-at (here)
    ;; If position HERE is inside a literal, return (START . END), the
    ;; boundaries of the literal (which may be outside the accessible bit of the
--- 2140,2177 ----
  	  (setq c (cdr c)))
  	(setq pos (or (car c) (point-min)))
  
! 	(while
! 	    ;; Add an element to `c-state-nonlit-pos-cache' each iteration.
! 	    (and
! 	     (<= (setq npos (+ pos c-state-nonlit-pos-interval)) here)
! 	     (progn
! 	       (setq lit (car (cddr (c-state-pp-to-literal pos npos))))
! 	       (cond
! 		((null lit)
! 		 (setq pos npos)
! 		 t)
! 		((<= (cdr lit) here)
! 		 (setq pos (cdr lit))
! 		 t)
! 		(t
! 		 (setq pos (car lit))
! 		 nil))))
! 
  	  (goto-char pos)
  	  (when (and (c-beginning-of-macro) (/= (point) pos))
! 	      (setq macro-beg (point))
! 	      (c-syntactic-end-of-macro)
! 	      (or (eobp) (forward-char))
! 	      (setq pos (if (<= (point) here)
! 			    (point)
! 			  macro-beg)))
! 	    (setq c-state-nonlit-pos-cache (cons pos c-state-nonlit-pos-cache)))
  
  	(if (> pos c-state-nonlit-pos-cache-limit)
  	    (setq c-state-nonlit-pos-cache-limit pos))
  	pos))))
! ;;;; END OF NEW STOUGH, 2012-01-14
! 
  (defun c-state-literal-at (here)
    ;; If position HERE is inside a literal, return (START . END), the
    ;; boundaries of the literal (which may be outside the accessible bit of the
***************
*** 4362,4367 ****
--- 4379,4456 ----
  	      (t 'c)))			; Assuming the range is valid.
      range))
  
+ (defsubst c-determine-limit-get-base (start try-size)
+   ;; Get a "safe place" approximately TRY-SIZE characters before START.
+   ;; This doesn't preserve point.
+   (let* ((pos (max (- start try-size) (point-min)))
+ 	 (base (c-state-safe-place pos))
+ 	 (s (parse-partial-sexp base pos)))
+     (if (or (nth 4 s) (nth 3 s))	; comment or string
+ 	(nth 8 s)
+       (point))))
+ 
+ (defun c-determine-limit (how-far-back &optional start try-size)
+   ;; Return a buffer position HOW-FAR-BACK non-literal characters from START
+   ;; (default point).  This is done by going back further in the buffer then
+   ;; searching forward for literals.  The position found won't be in a
+   ;; literal.  We start searching for the sought position TRY-SIZE (default
+   ;; twice HOW-FAR-BACK) bytes back from START.  This function must be fast.
+   ;; :-)
+   (save-excursion
+     (let* ((start (or start (point)))
+ 	   (try-size (or try-size (* 2 how-far-back)))
+ 	   (base (c-determine-limit-get-base start try-size))
+ 	   (pos base)
+ 
+ 	   (s (parse-partial-sexp pos pos)) ; null state.
+ 	   stack elt size
+ 	   (count 0))
+       (while (< pos start)
+ 	;; Move forward one literal each time round this loop.
+ 	;; Move forward to the start of a comment or string.
+ 	(setq s (parse-partial-sexp
+ 		 pos
+ 		 start
+ 		 nil			; target-depth
+ 		 nil			; stop-before
+ 		 s			; state
+ 		 'syntax-table))	; stop-comment
+ 
+ 	;; Gather details of the non-literal-bit - starting pos and size.
+ 	(setq size (- (if (or (nth 4 s) (nth 3 s))
+ 			  (nth 8 s)
+ 			(point))
+ 		      pos))
+ 	(if (> size 0)
+ 	    (setq stack (cons (cons pos size) stack)))
+ 
+ 	;; Move forward to the end of the comment/string.
+ 	(if (or (nth 4 s) (nth 3 s))
+ 	    (setq s (parse-partial-sexp
+ 		     (point)
+ 		     start
+ 		     nil		; target-depth
+ 		     nil		; stop-before
+ 		     s			; state
+ 		     'syntax-table)))	; stop-comment
+ 	(setq pos (point)))
+     
+       ;; Now try and find enough non-literal characters recorded on the stack.
+       ;; Go back one recorded literal each time round this loop.
+       (while (and (< count how-far-back)
+ 		  stack)
+ 	(setq elt (car stack)
+ 	      stack (cdr stack))
+ 	(setq count (+ count (cdr elt))))
+ 
+       ;; Have we found enough yet?
+       (cond
+        ((>= count how-far-back)
+ 	(+ (car elt) (- count how-far-back)))
+        ((eq base (point-min))
+ 	(point-min))
+        (t
+ 	(c-determine-limit (- how-far-back count) base try-size))))))
  \f
  ;; `c-find-decl-spots' and accompanying stuff.
  
***************
*** 4498,4510 ****
    ;; Call CFD-FUN for each possible spot for a declaration, cast or
    ;; label from the point to CFD-LIMIT.
    ;;
!   ;; CFD-FUN is called with point at the start of the spot.  It's
!   ;; passed two arguments: The first is the end position of the token
!   ;; preceding the spot, or 0 for the implicit match at bob.  The
!   ;; second is a flag that is t when the match is inside a macro.  If
!   ;; CFD-FUN adds `c-decl-end' properties somewhere below the current
!   ;; spot, it should return non-nil to ensure that the next search
!   ;; will find them.
    ;;
    ;; Such a spot is:
    ;; o	The first token after bob.
--- 4587,4600 ----
    ;; Call CFD-FUN for each possible spot for a declaration, cast or
    ;; label from the point to CFD-LIMIT.
    ;;
!   ;; CFD-FUN is called with point at the start of the spot.  It's passed two
!   ;; arguments: The first is the end position of the token preceding the spot,
!   ;; or 0 for the implicit match at bob.  The second is a flag that is t when
!   ;; the match is inside a macro.  Point should be moved forward by at least
!   ;; one token.
!   ;;
!   ;; If CFD-FUN adds `c-decl-end' properties somewhere below the current spot,
!   ;; it should return non-nil to ensure that the next search will find them.
    ;;
    ;; Such a spot is:
    ;; o	The first token after bob.
***************
*** 4903,4909 ****
        (goto-char cfd-continue-pos)
        (if (= cfd-continue-pos cfd-limit)
  	  (setq cfd-match-pos cfd-limit)
! 	(c-find-decl-prefix-search)))))
  
  \f
  ;; A cache for found types.
--- 4993,5000 ----
        (goto-char cfd-continue-pos)
        (if (= cfd-continue-pos cfd-limit)
  	  (setq cfd-match-pos cfd-limit)
! 	(c-find-decl-prefix-search))))) ; Moves point, sets cfd-continue-pos,
! 					; cfd-match-pos, etc.
  
  \f
  ;; A cache for found types.
***************
*** 8073,8078 ****
--- 8164,8186 ----
  	    next-open-brace (c-pull-open-brace paren-state)))
      open-brace))
  
+ (defun c-cheap-inside-bracelist-p (paren-state)
+   ;; Return the position of the L-brace if point is inside a brace list
+   ;; initialization of an array, etc.  This is an approximate function,
+   ;; designed for speed over accuracy.  It will not find every bracelist, but
+   ;; a non-nil result is reliable.  We simply search for "= {" (naturally with
+   ;; syntactic whitespace allowed).  PAREN-STATE is the normal thing that it
+   ;; is everywhere else.
+   (let (b-pos)
+     (save-excursion
+       (while
+ 	  (and (setq b-pos (c-pull-open-brace paren-state))
+ 	       (progn (goto-char b-pos)
+ 		      (c-backward-sws)
+ 		      (c-backward-token-2)
+ 		      (not (looking-at "=")))))
+       b-pos)))
+ 
  (defun c-inside-bracelist-p (containing-sexp paren-state)
    ;; return the buffer position of the beginning of the brace list
    ;; statement if we're inside a brace list, otherwise return nil.
*** orig/cc-fonts.el	2011-12-15 09:06:28.000000000 +0000
--- cc-fonts.el	2012-01-15 18:41:00.000000000 +0000
***************
*** 407,416 ****
  	      ;; `parse-sexp-lookup-properties' (when it exists).
  	      (parse-sexp-lookup-properties
  	       (cc-eval-when-compile
! 		 (boundp 'parse-sexp-lookup-properties))))
  	  (goto-char
  	   (let ((here (point)))
! 	     (if (eq (car (c-beginning-of-decl-1)) 'same)
  		 (point)
  	       here)))
  	  ,(c-make-font-lock-search-form regexp highlights))
--- 407,418 ----
  	      ;; `parse-sexp-lookup-properties' (when it exists).
  	      (parse-sexp-lookup-properties
  	       (cc-eval-when-compile
! 		 (boundp 'parse-sexp-lookup-properties)))
! 	      (BOD-limit
! 	       (c-determine-limit 1000)))
  	  (goto-char
  	   (let ((here (point)))
! 	     (if (eq (car (c-beginning-of-decl-1 BOD-limit)) 'same)
  		 (point)
  	       here)))
  	  ,(c-make-font-lock-search-form regexp highlights))
***************
*** 1206,1211 ****
--- 1208,1214 ----
  	  ;; it finds any.  That's necessary so that we later will
  	  ;; stop inside them to fontify types there.
  	  (c-parse-and-markup-<>-arglists t)
+ 	  lbrace ; position of some {.
  	  ;; The font-lock package in Emacs is known to clobber
  	  ;; `parse-sexp-lookup-properties' (when it exists).
  	  (parse-sexp-lookup-properties
***************
*** 1317,1323 ****
  	      (or (looking-at c-typedef-key)
  		  (goto-char start-pos)))
  
- 	    ;; Now analyze the construct.
  	    ;; In QT, "more" is an irritating keyword that expands to nothing.
  	    ;; We skip over it to prevent recognition of "more slots: <symbol>"
  	    ;; as a bitfield declaration.
--- 1320,1325 ----
***************
*** 1326,1331 ****
--- 1328,1335 ----
  			(concat "\\(more\\)\\([^" c-symbol-chars "]\\|$\\)")))
  	      (goto-char (match-end 1))
  	      (c-forward-syntactic-ws))
+ 
+ 	    ;; Now analyze the construct.
  	    (setq decl-or-cast (c-forward-decl-or-cast-1
  				match-pos context last-cast-end))
  
***************
*** 1394,1408 ****
  	      (c-fontify-recorded-types-and-refs)
  	      nil)
  
  	     (t
  	      ;; Are we at a declarator?  Try to go back to the declaration
  	      ;; to check this.  If we get there, check whether a "typedef"
  	      ;; is there, then fontify the declarators accordingly.
! 	      (let ((decl-search-lim (max (- (point) 50000) (point-min)))
  		    paren-state bod-res encl-pos is-typedef 
  		    c-recognize-knr-p) ; Strictly speaking, bogus, but it
  				       ; speeds up lisp.h tremendously.
  		(save-excursion
  		  (setq bod-res (car (c-beginning-of-decl-1 decl-search-lim)))
  		  (if (and (eq bod-res 'same)
  			   (progn
--- 1398,1449 ----
  	      (c-fontify-recorded-types-and-refs)
  	      nil)
  
+ 	     ;; Restore point, since at this point in the code it has been
+ 	     ;; left undefined by c-forward-decl-or-cast-1 above.
+ 	     ((progn (goto-char start-pos) nil))
+ 
+ 	     ;; If point is inside a bracelist, there's no point checking it
+ 	     ;; being at a declarator.
+ 	     ((let ((paren-state (c-parse-state)))
+ 		(setq lbrace (c-cheap-inside-bracelist-p paren-state)))
+ 	      ;; Move past this bracelist to prevent an endless loop.
+ 	      (goto-char lbrace)
+ 	      (unless (c-safe (progn (forward-list) t))
+ 		(goto-char start-point)
+ 		(c-forward-token-2))
+ 	      nil)
+ 
+ 	     ;; If point is just after a ")" which is followed by an
+ 	     ;; identifier which isn't a label, or at the matching "(", we're
+ 	     ;; at either a macro invocation, a cast, or a
+ 	     ;; for/while/etc. statement.  The cast case is handled above.
+ 	     ;; None of these cases can contain a declarator.
+ 	     ((or (and (eq (char-before match-pos) ?\))
+ 	     	       (c-on-identifier)
+ 	     	       (save-excursion (not (c-forward-label))))
+ 	     	  (and (eq (char-after) ?\()
+ 	     	       (save-excursion
+ 	     		 (and
+ 	     		  (progn (c-backward-token-2) (c-on-identifier))
+ 	     		  (save-excursion (not (c-forward-label)))
+ 	     		  (progn (c-backward-token-2)
+ 	     			 (eq (char-after) ?\())))))
+ 	      (c-forward-token-2)	; Must prevent looping.
+ 	      nil)
+ 
  	     (t
  	      ;; Are we at a declarator?  Try to go back to the declaration
  	      ;; to check this.  If we get there, check whether a "typedef"
  	      ;; is there, then fontify the declarators accordingly.
! 	      (let ((decl-search-lim ;; (max (- (point) 50000) (point-min))
! 		     (c-determine-limit 1000))
  		    paren-state bod-res encl-pos is-typedef 
  		    c-recognize-knr-p) ; Strictly speaking, bogus, but it
  				       ; speeds up lisp.h tremendously.
  		(save-excursion
+ 		  (unless (or (eobp)
+ 			      (looking-at "\\s(\\|\\s)"))
+ 		    (forward-char))
  		  (setq bod-res (car (c-beginning-of-decl-1 decl-search-lim)))
  		  (if (and (eq bod-res 'same)
  			   (progn
***************
*** 1865,1873 ****
  	    `((,(c-make-font-lock-BO-decl-search-function
  		 (concat "\\<\\("
  			 (c-make-keywords-re nil
! 			   (append (c-lang-const c-type-list-kwds)
! 				   (c-lang-const c-ref-list-kwds)
! 				   (c-lang-const c-colon-type-list-kwds)))
  			 "\\)\\>")
  		 '((c-fontify-types-and-refs ((c-promote-possible-types t))
  		     (c-forward-keyword-clause 1)
--- 1906,1915 ----
  	    `((,(c-make-font-lock-BO-decl-search-function
  		 (concat "\\<\\("
  			 (c-make-keywords-re nil
! 			   (append (c-lang-const c-type-list-kwds) ; operator (C++).  import, implements, etc. (Java).
! 				   (c-lang-const c-ref-list-kwds)  ; namespace (C++).  package (Java).
! 				   (c-lang-const c-colon-type-list-kwds))) ; class, struct (C++).  The colon is what
! 			                                                   ; introduces an inheritance list.
  			 "\\)\\>")
  		 '((c-fontify-types-and-refs ((c-promote-possible-types t))
  		     (c-forward-keyword-clause 1)

> -- 
> Kanru

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2012-01-08  1:26                             ` Kentaro NAKAZAWA
  2012-01-08 10:05                               ` Alan Mackenzie
@ 2012-01-20 17:26                               ` Alan Mackenzie
  2012-02-06 16:14                                 ` Kentaro NAKAZAWA
  1 sibling, 1 reply; 42+ messages in thread
From: Alan Mackenzie @ 2012-01-20 17:26 UTC (permalink / raw)
  To: Kentaro NAKAZAWA; +Cc: bug-cc-mode, Kan-Ru Chen, emacs-devel

Hello, Kentaro.

On Sun, Jan 08, 2012 at 10:26:10AM +0900, Kentaro NAKAZAWA wrote:
> Hello, Alan.

> > Could you be more specific, please - tell me which keywords weren't
> > fontified, and exactly what you did for this to happen.

> The screen shot was appended. (emacs -Q)

OK, I got that.

> action.cc.png:
> http://ftp.gnome.org/pub/GNOME/sources/gtkmm/3.0/gtkmm-3.0.1.tar.bz2
> gtkmm-3.0.1/gtk/gtkmm/action.cc

> The method name is not fontified.
> But I execute M-oM-o in function, fontified correctly.

I don't see this problem, with the latest version of CC Mode (which has
been committed to savannah).  Maybe recent changes have solved it.

Could you please try again with the latest CC Mode version.  Thanks!

> -- 
> Kentaro Nakazawa

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2012-01-15 21:12                 ` Alan Mackenzie
@ 2012-01-22  4:20                   ` Kan-Ru Chen
  0 siblings, 0 replies; 42+ messages in thread
From: Kan-Ru Chen @ 2012-01-22  4:20 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel

Hi!

Alan Mackenzie <acm@muc.de> writes:

> Hello, Kanru!
>
> On Sun, Dec 18, 2011 at 12:06:00AM +0800, Kan-Ru Chen wrote:
>> Alan Mackenzie <acm@muc.de> writes:
>
>> Please forgive me for using the other files, it is closer to the real
>> case. You can get the file from
>
>> https://hg.mozilla.org/mozilla-central/raw-file/tip/dom/base/nsDOMClassInfo.cpp
>
> Ah yes, this wonderful file!
>
> Here's another patch which contains more optimisations than my last
> patch.  Could you apply it _instead_ of the previous patch, and let me
> know how it goes, please.  The more serious editing you can do with it,
> particularly on C++ files, the better.

Thanks!

This version works as well as previous one. It seems slightly faster
than previous one, though I didn't do any serious profiling.

-- 
Kanru



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: Slow fontification in C mode buffers
  2012-01-20 17:26                               ` Alan Mackenzie
@ 2012-02-06 16:14                                 ` Kentaro NAKAZAWA
  0 siblings, 0 replies; 42+ messages in thread
From: Kentaro NAKAZAWA @ 2012-02-06 16:14 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: bug-cc-mode, Kan-Ru Chen, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1217 bytes --]

Hello, Alan.

Thank you for the modified.
I try pretest 24.0.93 at my job on Windows7.
(ftp://alpha.gnu.org/gnu/emacs/pretest/windows/emacs-24.0.93-bin-i386.zip)

Unfortunately it is still slow... But very comfortable on linux (x11 and
console).
NTEmacs's font-lock is very very slow(?)

I attached other slow pattern.
it is a bit slow on linux, but is terribly slow on windows7.

Alan Mackenzie <acm@muc.de> writes:

> Hello, Kentaro.
>
> On Sun, Jan 08, 2012 at 10:26:10AM +0900, Kentaro NAKAZAWA wrote:
>> Hello, Alan.
>
>> > Could you be more specific, please - tell me which keywords weren't
>> > fontified, and exactly what you did for this to happen.
>
>> The screen shot was appended. (emacs -Q)
>
> OK, I got that.
>
>> action.cc.png:
>> http://ftp.gnome.org/pub/GNOME/sources/gtkmm/3.0/gtkmm-3.0.1.tar.bz2
>> gtkmm-3.0.1/gtk/gtkmm/action.cc
>
>> The method name is not fontified.
>> But I execute M-oM-o in function, fontified correctly.
>
> I don't see this problem, with the latest version of CC Mode (which has
> been committed to savannah).  Maybe recent changes have solved it.
>
> Could you please try again with the latest CC Mode version.  Thanks!
>
>> -- 
>> Kentaro Nakazawa

-- 
Kentaro Nakazawa

[-- Attachment #2: test.cc --]
[-- Type: text/plain, Size: 1547 bytes --]

class Test {
public:
	Test();
private:
	int m_test00;
	int m_test01;
	int m_test02;
	int m_test03;
	int m_test04;
	int m_test05;
	int m_test06;
	int m_test07;
	int m_test08;
	int m_test09;
	int m_test10;
	int m_test11;
	int m_test12;
	int m_test13;
	int m_test14;
	int m_test15;
	int m_test16;
	int m_test17;
	int m_test18;
	int m_test19;
	int m_test20;
	int m_test21;
	int m_test22;
	int m_test23;
	int m_test24;
	int m_test25;
	int m_test26;
	int m_test27;
	int m_test28;
	int m_test29;
	int m_test30;
	int m_test31;
	int m_test32;
	int m_test33;
	int m_test34;
	int m_test35;
	int m_test36;
	int m_test37;
	int m_test38;
	int m_test39;
	int m_test40;
	int m_test41;
	int m_test42;
	int m_test43;
	int m_test44;
	int m_test45;
	int m_test46;
	int m_test47;
};

Test::Test()
	: m_test00(0),
	  m_test01(0),
	  m_test02(0),
	  m_test03(0),
	  m_test04(0),
	  m_test05(0),
	  m_test06(0),
	  m_test07(0),
	  m_test08(0),
	  m_test09(0),
	  m_test10(0),
	  m_test11(0),
	  m_test12(0),
	  m_test13(0),
	  m_test14(0),
	  m_test15(0),
	  m_test16(0),
	  m_test17(0),
	  m_test18(0),
	  m_test19(0),
	  m_test20(0),
	  m_test21(0),
	  m_test22(0),
	  m_test23(0),
	  m_test24(0),
	  m_test25(0),
	  m_test26(0),
	  m_test27(0),
	  m_test28(0),
	  m_test29(0),
	  m_test30(0),
	  m_test31(0),
	  m_test32(0),
	  m_test33(0),
	  m_test34(0),
	  m_test35(0),
	  m_test36(0),
	  m_test37(0),
	  m_test38(0),
	  m_test39(0),
	  m_test40(0),
	  m_test41(0),
	  m_test42(0),
	  m_test43(0),
	  m_test44(0),
	  m_test45(0),
	  m_test46(0),
	  m_test47(0)
{
}

^ permalink raw reply	[flat|nested] 42+ messages in thread

end of thread, other threads:[~2012-02-06 16:14 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-03 13:19 Slow fontification in C mode buffers Eli Zaretskii
2011-12-03 15:03 ` Sujith
2011-12-03 15:14   ` Eli Zaretskii
2011-12-03 15:32     ` Sujith
2011-12-03 15:18 ` Alan Mackenzie
2011-12-03 16:19   ` Eli Zaretskii
2011-12-13 15:31   ` Kan-Ru Chen
2011-12-14 11:19     ` Alan Mackenzie
2011-12-14 11:30     ` Alan Mackenzie
2011-12-14 12:23       ` Alan Mackenzie
2011-12-14 13:14     ` Alan Mackenzie
2011-12-14 15:02       ` Kan-Ru Chen
2011-12-15 13:43     ` Alan Mackenzie
2011-12-15 16:16       ` Kan-Ru Chen
2011-12-15 18:12         ` Alan Mackenzie
2011-12-16  2:32           ` Kan-Ru Chen
2011-12-16 11:26             ` Alan Mackenzie
2011-12-17 16:06               ` Kan-Ru Chen
2011-12-21 10:56                 ` Alan Mackenzie
2011-12-21 13:33                   ` Geoff Gole
2011-12-21 16:04                     ` Alan Mackenzie
2011-12-21 16:48                       ` Geoff Gole
2011-12-21 18:06                         ` Alan Mackenzie
2011-12-21 18:16                     ` Eli Zaretskii
2011-12-21 18:32                       ` Geoff Gole
2011-12-21 19:35                         ` Eli Zaretskii
2011-12-23  1:56                     ` Kentaro NAKAZAWA
2011-12-23 12:03                       ` Alan Mackenzie
2012-01-06 22:08                       ` Alan Mackenzie
2012-01-07  0:09                         ` Kentaro NAKAZAWA
2012-01-07 13:50                           ` Alan Mackenzie
2012-01-08  1:26                             ` Kentaro NAKAZAWA
2012-01-08 10:05                               ` Alan Mackenzie
2012-01-20 17:26                               ` Alan Mackenzie
2012-02-06 16:14                                 ` Kentaro NAKAZAWA
2011-12-22 16:06                   ` Kan-Ru Chen
2012-01-13 19:12                 ` Alan Mackenzie
2012-01-14  9:12                   ` Kan-Ru Chen
2012-01-15 21:12                 ` Alan Mackenzie
2012-01-22  4:20                   ` Kan-Ru Chen
2011-12-03 21:15 ` Alan Mackenzie
2011-12-04  6:00   ` Eli Zaretskii

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).