AVX-512: Handle curly braces in multi-line macro parameters
authorJin Kyu Song <jin.kyu.song@intel.com>
Thu, 22 Aug 2013 02:29:08 +0000 (19:29 -0700)
committerCyrill Gorcunov <gorcunov@gmail.com>
Thu, 22 Aug 2013 15:37:25 +0000 (19:37 +0400)
Multi-line macro uses curly braces for enclosing a parameter
containing comma(s). Passing curly braces as a part of a parameter
which is already enclosed with braces confuses the macro expander.

Escape character '\' is prefixed in this case.
e.g.) mmacro {1,2,3}, {4,\{5,6\}}
      mmacro gets 2 parameters of '1,2,3' and '4,{5,6}'

Signed-off-by: Jin Kyu Song <jin.kyu.song@intel.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
preproc.c

index e2b12e4..b878e4b 100644 (file)
--- a/preproc.c
+++ b/preproc.c
@@ -208,6 +208,7 @@ enum pp_token_type {
     TOK_PREPROC_Q, TOK_PREPROC_QQ,
     TOK_PASTE,              /* %+ */
     TOK_INDIRECT,           /* %[...] */
+    TOK_BRACE,              /* \{...\} */
     TOK_SMAC_PARAM,         /* MUST BE LAST IN THE LIST!!! */
     TOK_MAX = INT_MAX       /* Keep compiler from reducing the range */
 };
@@ -1103,6 +1104,10 @@ static Token *tokenize(char *line)
             type = TOK_COMMENT;
             while (*p)
                 p++;
+        } else if (p[0] == '\\' && (p[1] == '{' || p[1] == '}')) {
+            type = TOK_BRACE;
+            p += 2;
+            line++;
         } else {
             /*
              * Anything else is an operator of some kind. We check