Fix token-pasting macros not working in preprocessor directives. (#2453)
authorrdb <rdb@users.noreply.github.com>
Fri, 6 Nov 2020 17:51:07 +0000 (18:51 +0100)
committerGitHub <noreply@github.com>
Fri, 6 Nov 2020 17:51:07 +0000 (10:51 -0700)
Fixes #2443

Test/baseResults/tokenPaste.vert.out
Test/tokenPaste.vert
glslang/MachineIndependent/preprocessor/Pp.cpp

index b5ba9a5..5ae1f75 100644 (file)
@@ -3,11 +3,11 @@ ERROR: 0:38: '##' : unexpected location
 ERROR: 0:40: '##' : unexpected location; end of replacement list 
 ERROR: 0:49: '##' : combined tokens are too long 
 ERROR: 0:52: '##' : not supported for these tokens 
-ERROR: 0:69: '##' : combined token is invalid 
-ERROR: 0:82: 'macro expansion' : Too few args in Macro rec
-ERROR: 0:82: '##' : unexpected location 
-ERROR: 0:82: '##' : unexpected location 
-ERROR: 0:86: '##' : unexpected location; end of argument 
+ERROR: 0:81: '##' : combined token is invalid 
+ERROR: 0:94: 'macro expansion' : Too few args in Macro rec
+ERROR: 0:94: '##' : unexpected location 
+ERROR: 0:94: '##' : unexpected location 
+ERROR: 0:98: '##' : unexpected location; end of argument 
 ERROR: 9 compilation errors.  No code generated.
 
 
@@ -18,35 +18,35 @@ ERROR: node is still EOpNull!
 0:52      'a' ( global int)
 0:52      Constant:
 0:52        11 (const int)
-0:58  Sequence
-0:58    move second child to first child ( temp int)
-0:58      'cop' ( global int)
-0:58      Constant:
-0:58        160 (const int)
-0:59  Sequence
-0:59    move second child to first child ( temp bool)
-0:59      'dop' ( global bool)
-0:59      Constant:
-0:59        true (const bool)
-0:63  Function Definition: ShouldntExpandToThis( ( global void)
-0:63    Function Parameters: 
-0:65    Sequence
-0:65      Sequence
-0:65        move second child to first child ( temp int)
-0:65          'e' ( temp int)
-0:65          Constant:
-0:65            16 (const int)
-0:66      right shift second child into first child ( temp int)
-0:66        'e' ( temp int)
-0:66        Constant:
-0:66          2 (const int)
-0:69      Sequence
-0:69        move second child to first child ( temp bool)
-0:69          'f' ( temp bool)
-0:69          Compare Greater Than ( temp bool)
-0:69            'e' ( temp int)
-0:69            Constant:
-0:69              5 (const int)
+0:70  Sequence
+0:70    move second child to first child ( temp int)
+0:70      'cop' ( global int)
+0:70      Constant:
+0:70        160 (const int)
+0:71  Sequence
+0:71    move second child to first child ( temp bool)
+0:71      'dop' ( global bool)
+0:71      Constant:
+0:71        true (const bool)
+0:75  Function Definition: ShouldntExpandToThis( ( global void)
+0:75    Function Parameters: 
+0:77    Sequence
+0:77      Sequence
+0:77        move second child to first child ( temp int)
+0:77          'e' ( temp int)
+0:77          Constant:
+0:77            16 (const int)
+0:78      right shift second child into first child ( temp int)
+0:78        'e' ( temp int)
+0:78        Constant:
+0:78          2 (const int)
+0:81      Sequence
+0:81        move second child to first child ( temp bool)
+0:81          'f' ( temp bool)
+0:81          Compare Greater Than ( temp bool)
+0:81            'e' ( temp int)
+0:81            Constant:
+0:81              5 (const int)
 0:?   Linker Objects
 0:?     'SecondExpansion' ( global int)
 0:?     'PostPasteExpansion' ( global int)
@@ -60,6 +60,8 @@ ERROR: node is still EOpNull!
 0:?     'foo875' ( uniform float)
 0:?     'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF012345' ( global float)
 0:?     'a' ( global int)
+0:?     'seahorse_var' ( uniform float)
+0:?     'sealion_var' ( uniform float)
 0:?     'aop' ( const int)
 0:?       10 (const int)
 0:?     'bop' ( const int)
@@ -83,16 +85,16 @@ ERROR: node is still EOpNull!
 0:52      'a' ( global int)
 0:52      Constant:
 0:52        11 (const int)
-0:58  Sequence
-0:58    move second child to first child ( temp int)
-0:58      'cop' ( global int)
-0:58      Constant:
-0:58        160 (const int)
-0:59  Sequence
-0:59    move second child to first child ( temp bool)
-0:59      'dop' ( global bool)
-0:59      Constant:
-0:59        true (const bool)
+0:70  Sequence
+0:70    move second child to first child ( temp int)
+0:70      'cop' ( global int)
+0:70      Constant:
+0:70        160 (const int)
+0:71  Sequence
+0:71    move second child to first child ( temp bool)
+0:71      'dop' ( global bool)
+0:71      Constant:
+0:71        true (const bool)
 0:?   Linker Objects
 0:?     'SecondExpansion' ( global int)
 0:?     'PostPasteExpansion' ( global int)
@@ -106,6 +108,8 @@ ERROR: node is still EOpNull!
 0:?     'foo875' ( uniform float)
 0:?     'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF012345' ( global float)
 0:?     'a' ( global int)
+0:?     'seahorse_var' ( uniform float)
+0:?     'sealion_var' ( uniform float)
 0:?     'aop' ( const int)
 0:?       10 (const int)
 0:?     'bop' ( const int)
index 40de6f9..c4515d4 100644 (file)
@@ -51,6 +51,18 @@ float simplePaste(ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
 // non-identifiers
 int a = simplePaste(11,12);
 
+// should work in #if as well
+#define seahorse 1
+#define sealion 0
+#define marine_animal(suffix) (sea ## suffix)
+
+#if marine_animal(horse) // should pass
+uniform float seahorse_var;
+#endif
+#if !marine_animal(lion) // should pass
+uniform float sealion_var;
+#endif
+
 // operators
 #define MAKE_OP(L, R) L ## R\r
 const int aop = 10;\r
index a0a626f..aa1e0d7 100644 (file)
@@ -455,6 +455,7 @@ int TPpContext::eval(int token, int precedence, bool shortCircuit, int& res, boo
                 token = scanToken(ppToken);
             }
         } else {
+            token = tokenPaste(token, *ppToken);
             token = evalToToken(token, shortCircuit, res, err, ppToken);
             return eval(token, precedence, shortCircuit, res, err, ppToken);
         }