The following patch fixes the C macro parsing regular expression, which currently requires macros to have arguments and doesn't know about varargs. I've pasted it inline for the benefit of the archives, and attached a diff that won't get munged by Apple Mail.

If someone could review and check this in that'd be great.

Thanks,

Sam

- - - - - - - -

Two changes to the meta.preprocessor.macro.c parsing:

- Made macro arguments optional to correctly match basic macros, e.g:

    #define SPINAL_TAP_VOLUME 11

- Permitted a trailing ellipsis to match macros with varargs, e.g:

    #define ERR_IF(condition, function, format, args...)   \
    if (condition)                                         \
    {                                                      \
        fprintf(stderr, "%s:%d in %s(): " format,          \
                __FILE__, __LINE__, __FUNCTION__, ##args); \
        perror(" with " #function "() failed");            \
    }

- - - - - - - -

Index: Syntaxes/C.plist
===================================================================
--- Syntaxes/C.plist    (revision 6438)
+++ Syntaxes/C.plist    (working copy)
@@ -200,12 +200,17 @@
                <dict>
                        <key>begin</key>
                        <string>(?x)
-                               ^\s*\#\s*(define)\s+             # define
+                               ^\s*\#\s*(define)\s+                   # define
                                ((?&lt;id&gt;[a-zA-Z_][a-zA-Z0-9_]*))  # macro 
name
-                               (\()(
-                                       \s* \g&lt;id&gt; \s*              # 
first argument
-                                       (, \s* \g&lt;id&gt; \s*)*         # 
additional arguments
-                               )(\))
+                               (?:                                    # and 
optionally:
+                                   (\()                               # an 
open parenthesis
+                                       (
+                                           \s* \g&lt;id&gt; \s*       # first 
argument
+                                           (, \s* \g&lt;id&gt; \s*)*  # 
additional arguments
+                                           (?:\.\.\.)?                # 
varargs ellipsis?
+                                       )
+                                   (\))                               # a 
close parenthesis
+                               )?
                        </string>
                        <key>beginCaptures</key>
                        <dict>

- - - - - - - -

Attachment: meta.preprocessor.macro.c.diff.gz
Description: GNU Zip compressed data

_______________________________________________
textmate-dev mailing list
[email protected]
http://lists.macromates.com/mailman/listinfo/textmate-dev

Reply via email to