mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-09 12:00:05 +00:00
Add missing check that a function call is not using the same name as a variable hiding the function's name. Also, support version 110 separate name spaces for functions and variable names.
git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@24480 e7fa87d3-cd2b-0410-9028-fcbf551c1848
This commit is contained in:
parent
623833fabc
commit
3a4687d782
Binary file not shown.
@ -16,6 +16,9 @@ int f(int a, int b, int c); // okay to redeclare
|
||||
bool b;
|
||||
float b(int a); // ERROR: redefinition
|
||||
|
||||
float c(int a);
|
||||
bool c; // ERROR: redefinition
|
||||
|
||||
float f; // ERROR: redefinition
|
||||
float tan; // okay, built-in is in an outer scope
|
||||
float sin(float x); // ERROR: can't redefine built-in functions
|
||||
@ -37,7 +40,7 @@ void main()
|
||||
|
||||
float sin; // okay
|
||||
sin;
|
||||
|
||||
sin(0.7); // ERROR, use of hidden function
|
||||
f(1,2,3);
|
||||
|
||||
float f; // hides f()
|
||||
@ -65,6 +68,9 @@ void main()
|
||||
S S = S(0); // 'S' is only visible as a struct and constructor
|
||||
S.x; // 'S' is now visible as a variable
|
||||
}
|
||||
|
||||
int degrees;
|
||||
degrees(3.2); // ERROR, use of hidden built-in function
|
||||
}
|
||||
|
||||
varying struct SSS { float f; } s; // ERROR
|
||||
|
74
Test/110scope.vert
Normal file
74
Test/110scope.vert
Normal file
@ -0,0 +1,74 @@
|
||||
#version 110
|
||||
|
||||
int f(int a, int b, int c)
|
||||
{
|
||||
int a = b; // ERROR, redefinition
|
||||
|
||||
{
|
||||
float a = float(a) + 1.0; // okay
|
||||
}
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
int f(int a, int b, int c); // okay to redeclare
|
||||
|
||||
bool b;
|
||||
float b(int a); // okay, b and b() are different
|
||||
|
||||
float c(int a);
|
||||
bool c; // okay, and c() are different
|
||||
|
||||
float f; // okay f and f() are different
|
||||
float tan; // okay, hides built-in function
|
||||
float sin(float x); // okay, can redefine built-in functions
|
||||
float cos(float x) // okay, can redefine built-in functions
|
||||
{
|
||||
return 1.0;
|
||||
}
|
||||
bool radians(bool x) // okay, can overload built-in functions
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
int g(); // okay
|
||||
g();
|
||||
|
||||
float sin; // okay
|
||||
sin;
|
||||
sin(0.7); // okay
|
||||
f(1,2,3);
|
||||
|
||||
float f;
|
||||
f = 3.0;
|
||||
|
||||
gl_Position = vec4(f);
|
||||
|
||||
for (int f = 0; f < 10; ++f)
|
||||
++f;
|
||||
|
||||
int x = 1;
|
||||
{
|
||||
float x = 2.0, /* 2nd x visible here */ y = x; // y is initialized to 2
|
||||
int z = z; // ERROR: z not previously defined.
|
||||
}
|
||||
{
|
||||
int x = x; // x is initialized to '1'
|
||||
}
|
||||
|
||||
struct S
|
||||
{
|
||||
int x;
|
||||
};
|
||||
{
|
||||
S S = S(0); // 'S' is only visible as a struct and constructor
|
||||
S.x; // 'S' is now visible as a variable
|
||||
}
|
||||
|
||||
int degrees;
|
||||
degrees(3.2);
|
||||
}
|
@ -16,6 +16,9 @@ int f(int a, int b, int c); // okay to redeclare
|
||||
bool b;
|
||||
float b(int a); // ERROR: redefinition
|
||||
|
||||
float c(int a);
|
||||
bool c; // ERROR: redefinition
|
||||
|
||||
float f; // ERROR: redefinition
|
||||
float tan; // ERROR: redefines built-in function
|
||||
float sin(float x); // ERROR: can't redefine built-in functions
|
||||
@ -37,7 +40,7 @@ void main()
|
||||
|
||||
float sin; // okay
|
||||
sin;
|
||||
|
||||
sin(0.7); // ERROR, use of hidden function
|
||||
f(1,2,3);
|
||||
|
||||
float f; // hides f()
|
||||
@ -65,4 +68,7 @@ void main()
|
||||
S S = S(0); // 'S' is only visible as a struct and constructor
|
||||
S.x; // 'S' is now visible as a variable
|
||||
}
|
||||
|
||||
int degrees;
|
||||
degrees(3.2); // ERROR, use of hidden built-in function
|
||||
}
|
||||
|
@ -16,6 +16,9 @@ int f(int a, int b, int c); // okay to redeclare
|
||||
bool b;
|
||||
float b(int a); // ERROR: redefinition
|
||||
|
||||
float c(int a);
|
||||
bool c; // ERROR: redefinition
|
||||
|
||||
float f; // ERROR: redefinition
|
||||
float tan; // okay, hides built-in function
|
||||
float sin(float x); // okay, can redefine built-in functions
|
||||
@ -37,7 +40,7 @@ void main()
|
||||
|
||||
float sin; // okay
|
||||
sin;
|
||||
|
||||
sin(0.7); // ERROR, use of hidden function
|
||||
f(1,2,3);
|
||||
|
||||
float f; // hides f()
|
||||
@ -65,4 +68,7 @@ void main()
|
||||
S S = S(0); // 'S' is only visible as a struct and constructor
|
||||
S.x; // 'S' is now visible as a variable
|
||||
}
|
||||
|
||||
int degrees;
|
||||
degrees(3.2); // ERROR, use of hidden built-in function
|
||||
}
|
||||
|
@ -1,14 +1,17 @@
|
||||
100scope.vert
|
||||
ERROR: 0:5: 'a' : redefinition
|
||||
ERROR: 0:17: 'b' : function name is redeclaration of existing name
|
||||
ERROR: 0:19: 'f' : redefinition
|
||||
ERROR: 0:21: 'redefinition of built-in function' : not supported with this profile: es
|
||||
ERROR: 0:22: 'redefinition of built-in function' : not supported with this profile: es
|
||||
ERROR: 0:35: 'local function declaration' : not supported with this profile: es
|
||||
ERROR: 0:54: 'z' : undeclared identifier
|
||||
ERROR: 0:54: 'z' : redefinition
|
||||
ERROR: 0:70: 'vertex-shader struct output' : not supported for this version or the enabled extensions
|
||||
ERROR: 9 compilation errors. No code generated.
|
||||
ERROR: 0:20: 'c' : redefinition
|
||||
ERROR: 0:22: 'f' : redefinition
|
||||
ERROR: 0:24: 'redefinition of built-in function' : not supported with this profile: es
|
||||
ERROR: 0:25: 'redefinition of built-in function' : not supported with this profile: es
|
||||
ERROR: 0:38: 'local function declaration' : not supported with this profile: es
|
||||
ERROR: 0:43: 'sin' : can't use function syntax on variable
|
||||
ERROR: 0:57: 'z' : undeclared identifier
|
||||
ERROR: 0:57: 'z' : redefinition
|
||||
ERROR: 0:73: 'degrees' : can't use function syntax on variable
|
||||
ERROR: 0:76: 'vertex-shader struct output' : not supported for this version or the enabled extensions
|
||||
ERROR: 12 compilation errors. No code generated.
|
||||
|
||||
|
||||
ERROR: node is still EOpNull!
|
||||
@ -29,87 +32,91 @@ ERROR: node is still EOpNull!
|
||||
0:8 1.000000
|
||||
0:11 Branch: Return with expression
|
||||
0:11 'a' (in highp int)
|
||||
0:22 Function Definition: cos(f1; (highp float)
|
||||
0:22 Function Parameters:
|
||||
0:22 'x' (in highp float)
|
||||
0:24 Sequence
|
||||
0:24 Branch: Return with expression
|
||||
0:24 Constant:
|
||||
0:24 1.000000
|
||||
0:26 Function Definition: radians(b1; (bool)
|
||||
0:26 Function Parameters:
|
||||
0:26 'x' (in bool)
|
||||
0:28 Sequence
|
||||
0:28 Branch: Return with expression
|
||||
0:28 Constant:
|
||||
0:28 true (const bool)
|
||||
0:33 Function Definition: main( (void)
|
||||
0:33 Function Parameters:
|
||||
0:25 Function Definition: cos(f1; (highp float)
|
||||
0:25 Function Parameters:
|
||||
0:25 'x' (in highp float)
|
||||
0:27 Sequence
|
||||
0:27 Branch: Return with expression
|
||||
0:27 Constant:
|
||||
0:27 1.000000
|
||||
0:29 Function Definition: radians(b1; (bool)
|
||||
0:29 Function Parameters:
|
||||
0:29 'x' (in bool)
|
||||
0:31 Sequence
|
||||
0:31 Branch: Return with expression
|
||||
0:31 Constant:
|
||||
0:31 true (const bool)
|
||||
0:36 Function Definition: main( (void)
|
||||
0:36 Function Parameters:
|
||||
0:? Sequence
|
||||
0:36 Function Call: g( (highp int)
|
||||
0:39 'sin' (highp float)
|
||||
0:41 Function Call: f(i1;i1;i1; (highp int)
|
||||
0:41 Constant:
|
||||
0:41 1 (const int)
|
||||
0:41 Constant:
|
||||
0:41 2 (const int)
|
||||
0:41 Constant:
|
||||
0:41 3 (const int)
|
||||
0:44 move second child to first child (highp float)
|
||||
0:44 'f' (highp float)
|
||||
0:39 Function Call: g( (highp int)
|
||||
0:42 'sin' (highp float)
|
||||
0:43 Constant:
|
||||
0:43 0.000000
|
||||
0:44 Function Call: f(i1;i1;i1; (highp int)
|
||||
0:44 Constant:
|
||||
0:44 3.000000
|
||||
0:46 move second child to first child (highp 4-component vector of float)
|
||||
0:46 'gl_Position' (invariant gl_Position highp 4-component vector of float)
|
||||
0:46 Construct vec4 (highp 4-component vector of float)
|
||||
0:46 'f' (highp float)
|
||||
0:48 Sequence
|
||||
0:48 Sequence
|
||||
0:48 move second child to first child (highp int)
|
||||
0:48 'f' (highp int)
|
||||
0:48 Constant:
|
||||
0:48 0 (const int)
|
||||
0:48 Loop with condition tested first
|
||||
0:48 Loop Condition
|
||||
0:48 Compare Less Than (bool)
|
||||
0:48 'f' (highp int)
|
||||
0:48 Constant:
|
||||
0:48 10 (const int)
|
||||
0:48 Loop Body
|
||||
0:49 Pre-Increment (highp int)
|
||||
0:49 'f' (highp int)
|
||||
0:48 Loop Terminal Expression
|
||||
0:48 Pre-Increment (highp int)
|
||||
0:48 'f' (highp int)
|
||||
0:44 1 (const int)
|
||||
0:44 Constant:
|
||||
0:44 2 (const int)
|
||||
0:44 Constant:
|
||||
0:44 3 (const int)
|
||||
0:47 move second child to first child (highp float)
|
||||
0:47 'f' (highp float)
|
||||
0:47 Constant:
|
||||
0:47 3.000000
|
||||
0:49 move second child to first child (highp 4-component vector of float)
|
||||
0:49 'gl_Position' (invariant gl_Position highp 4-component vector of float)
|
||||
0:49 Construct vec4 (highp 4-component vector of float)
|
||||
0:49 'f' (highp float)
|
||||
0:51 Sequence
|
||||
0:51 Sequence
|
||||
0:51 move second child to first child (highp int)
|
||||
0:51 'x' (highp int)
|
||||
0:51 'f' (highp int)
|
||||
0:51 Constant:
|
||||
0:51 1 (const int)
|
||||
0:53 Sequence
|
||||
0:53 Sequence
|
||||
0:53 move second child to first child (highp float)
|
||||
0:53 'x' (highp float)
|
||||
0:53 Constant:
|
||||
0:53 2.000000
|
||||
0:53 move second child to first child (highp float)
|
||||
0:53 'y' (highp float)
|
||||
0:53 'x' (highp float)
|
||||
0:57 Sequence
|
||||
0:57 Sequence
|
||||
0:57 move second child to first child (highp int)
|
||||
0:57 'x' (highp int)
|
||||
0:57 'x' (highp int)
|
||||
0:65 Sequence
|
||||
0:65 Sequence
|
||||
0:65 move second child to first child (structure{x})
|
||||
0:65 'S' (structure{x})
|
||||
0:65 Constant:
|
||||
0:65 0 (const int)
|
||||
0:66 x: direct index for structure (highp int)
|
||||
0:66 'S' (structure{x})
|
||||
0:66 Constant:
|
||||
0:66 0 (const int)
|
||||
0:51 0 (const int)
|
||||
0:51 Loop with condition tested first
|
||||
0:51 Loop Condition
|
||||
0:51 Compare Less Than (bool)
|
||||
0:51 'f' (highp int)
|
||||
0:51 Constant:
|
||||
0:51 10 (const int)
|
||||
0:51 Loop Body
|
||||
0:52 Pre-Increment (highp int)
|
||||
0:52 'f' (highp int)
|
||||
0:51 Loop Terminal Expression
|
||||
0:51 Pre-Increment (highp int)
|
||||
0:51 'f' (highp int)
|
||||
0:54 Sequence
|
||||
0:54 move second child to first child (highp int)
|
||||
0:54 'x' (highp int)
|
||||
0:54 Constant:
|
||||
0:54 1 (const int)
|
||||
0:56 Sequence
|
||||
0:56 Sequence
|
||||
0:56 move second child to first child (highp float)
|
||||
0:56 'x' (highp float)
|
||||
0:56 Constant:
|
||||
0:56 2.000000
|
||||
0:56 move second child to first child (highp float)
|
||||
0:56 'y' (highp float)
|
||||
0:56 'x' (highp float)
|
||||
0:60 Sequence
|
||||
0:60 Sequence
|
||||
0:60 move second child to first child (highp int)
|
||||
0:60 'x' (highp int)
|
||||
0:60 'x' (highp int)
|
||||
0:68 Sequence
|
||||
0:68 Sequence
|
||||
0:68 move second child to first child (structure{x})
|
||||
0:68 'S' (structure{x})
|
||||
0:68 Constant:
|
||||
0:68 0 (const int)
|
||||
0:69 x: direct index for structure (highp int)
|
||||
0:69 'S' (structure{x})
|
||||
0:69 Constant:
|
||||
0:69 0 (const int)
|
||||
0:73 Constant:
|
||||
0:73 0.000000
|
||||
0:? Linker Objects
|
||||
0:? 'b' (bool)
|
||||
0:? 'tan' (highp float)
|
||||
|
122
Test/baseResults/110scope.vert.out
Normal file
122
Test/baseResults/110scope.vert.out
Normal file
@ -0,0 +1,122 @@
|
||||
110scope.vert
|
||||
ERROR: 0:5: 'a' : redefinition
|
||||
ERROR: 0:57: 'z' : undeclared identifier
|
||||
ERROR: 0:57: 'z' : redefinition
|
||||
ERROR: 3 compilation errors. No code generated.
|
||||
|
||||
|
||||
ERROR: node is still EOpNull!
|
||||
0:3 Function Definition: f(i1;i1;i1; (int)
|
||||
0:3 Function Parameters:
|
||||
0:3 'a' (in int)
|
||||
0:3 'b' (in int)
|
||||
0:3 'c' (in int)
|
||||
0:? Sequence
|
||||
0:8 Sequence
|
||||
0:8 Sequence
|
||||
0:8 move second child to first child (float)
|
||||
0:8 'a' (float)
|
||||
0:8 add (float)
|
||||
0:8 Convert int to float (float)
|
||||
0:8 'a' (in int)
|
||||
0:8 Constant:
|
||||
0:8 1.000000
|
||||
0:11 Branch: Return with expression
|
||||
0:11 'a' (in int)
|
||||
0:25 Function Definition: cos(f1; (float)
|
||||
0:25 Function Parameters:
|
||||
0:25 'x' (in float)
|
||||
0:27 Sequence
|
||||
0:27 Branch: Return with expression
|
||||
0:27 Constant:
|
||||
0:27 1.000000
|
||||
0:29 Function Definition: radians(b1; (bool)
|
||||
0:29 Function Parameters:
|
||||
0:29 'x' (in bool)
|
||||
0:31 Sequence
|
||||
0:31 Branch: Return with expression
|
||||
0:31 Constant:
|
||||
0:31 true (const bool)
|
||||
0:36 Function Definition: main( (void)
|
||||
0:36 Function Parameters:
|
||||
0:? Sequence
|
||||
0:39 Function Call: g( (int)
|
||||
0:42 'sin' (float)
|
||||
0:43 Function Call: sin(f1; (float)
|
||||
0:43 Constant:
|
||||
0:43 0.700000
|
||||
0:44 Function Call: f(i1;i1;i1; (int)
|
||||
0:44 Constant:
|
||||
0:44 1 (const int)
|
||||
0:44 Constant:
|
||||
0:44 2 (const int)
|
||||
0:44 Constant:
|
||||
0:44 3 (const int)
|
||||
0:47 move second child to first child (float)
|
||||
0:47 'f' (float)
|
||||
0:47 Constant:
|
||||
0:47 3.000000
|
||||
0:49 move second child to first child (4-component vector of float)
|
||||
0:49 'gl_Position' (gl_Position 4-component vector of float)
|
||||
0:49 Construct vec4 (4-component vector of float)
|
||||
0:49 'f' (float)
|
||||
0:51 Sequence
|
||||
0:51 Sequence
|
||||
0:51 move second child to first child (int)
|
||||
0:51 'f' (int)
|
||||
0:51 Constant:
|
||||
0:51 0 (const int)
|
||||
0:51 Loop with condition tested first
|
||||
0:51 Loop Condition
|
||||
0:51 Compare Less Than (bool)
|
||||
0:51 'f' (int)
|
||||
0:51 Constant:
|
||||
0:51 10 (const int)
|
||||
0:51 Loop Body
|
||||
0:52 Pre-Increment (int)
|
||||
0:52 'f' (int)
|
||||
0:51 Loop Terminal Expression
|
||||
0:51 Pre-Increment (int)
|
||||
0:51 'f' (int)
|
||||
0:54 Sequence
|
||||
0:54 move second child to first child (int)
|
||||
0:54 'x' (int)
|
||||
0:54 Constant:
|
||||
0:54 1 (const int)
|
||||
0:56 Sequence
|
||||
0:56 Sequence
|
||||
0:56 move second child to first child (float)
|
||||
0:56 'x' (float)
|
||||
0:56 Constant:
|
||||
0:56 2.000000
|
||||
0:56 move second child to first child (float)
|
||||
0:56 'y' (float)
|
||||
0:56 'x' (float)
|
||||
0:60 Sequence
|
||||
0:60 Sequence
|
||||
0:60 move second child to first child (int)
|
||||
0:60 'x' (int)
|
||||
0:60 'x' (int)
|
||||
0:68 Sequence
|
||||
0:68 Sequence
|
||||
0:68 move second child to first child (structure{x})
|
||||
0:68 'S' (structure{x})
|
||||
0:68 Constant:
|
||||
0:68 0 (const int)
|
||||
0:69 x: direct index for structure (int)
|
||||
0:69 'S' (structure{x})
|
||||
0:69 Constant:
|
||||
0:69 0 (const int)
|
||||
0:73 Constant:
|
||||
0:73 183.346494
|
||||
0:? Linker Objects
|
||||
0:? 'b' (bool)
|
||||
0:? 'c' (bool)
|
||||
0:? 'f' (float)
|
||||
0:? 'tan' (float)
|
||||
|
||||
|
||||
Linked vertex stage:
|
||||
|
||||
|
||||
|
@ -14,7 +14,7 @@ ERROR: 0:32: 'length' : method does not accept any arguments
|
||||
ERROR: 0:33: 'flizbit' : only the length method is supported for array
|
||||
ERROR: 0:33: '=' : cannot convert from '7-element array of float' to 'int'
|
||||
ERROR: 0:34: 'flizbit' : only the length method is supported for array
|
||||
ERROR: 0:34: 'f' : no matching overloaded function found
|
||||
ERROR: 0:34: 'f' : can't use function syntax on variable
|
||||
ERROR: 0:34: 'a4' : redefinition
|
||||
ERROR: 0:35: 'arrays of arrays' : not supported with this profile: none
|
||||
ERROR: 0:36: 'arrays of arrays' : not supported with this profile: none
|
||||
@ -38,13 +38,14 @@ ERROR: 0:57: 'float' : overloaded functions must have the same return type
|
||||
ERROR: 0:87: 'overloadC' : no matching overloaded function found
|
||||
ERROR: 0:90: 'overloadC' : no matching overloaded function found
|
||||
ERROR: 0:95: 'overloadD' : ambiguous function signature match: multiple signatures match under implicit type conversion
|
||||
ERROR: 0:98: 'overloadB' : can't use function syntax on variable
|
||||
ERROR: 0:106: 'overloadC' : no matching overloaded function found
|
||||
ERROR: 0:107: 'overloadE' : no matching overloaded function found
|
||||
ERROR: 0:108: 'overloadE' : no matching overloaded function found
|
||||
ERROR: 0:111: 'overloadE' : no matching overloaded function found
|
||||
ERROR: 0:117: 'overloadF' : no matching overloaded function found
|
||||
ERROR: 0:121: 'gl_TexCoord array size' : must be less than gl_MaxTextureCoords (32)
|
||||
ERROR: 45 compilation errors. No code generated.
|
||||
ERROR: 46 compilation errors. No code generated.
|
||||
|
||||
|
||||
ERROR: node is still EOpNull!
|
||||
@ -138,10 +139,8 @@ ERROR: node is still EOpNull!
|
||||
0:95 Function Call: overloadD(f1;i1; (3-component vector of float)
|
||||
0:95 'i' (int)
|
||||
0:95 'i' (int)
|
||||
0:98 Function Call: overloadB(f1;f1; (2-component vector of float)
|
||||
0:98 Constant:
|
||||
0:98 1 (const int)
|
||||
0:98 'i' (int)
|
||||
0:98 0.000000
|
||||
0:100 Constant:
|
||||
0:100 0.000000
|
||||
0:101 Function Call: texture2D(s21;vf2; (4-component vector of float)
|
||||
|
@ -1,21 +1,24 @@
|
||||
300scope.vert
|
||||
ERROR: 0:5: 'a' : redefinition
|
||||
ERROR: 0:17: 'b' : function name is redeclaration of existing name
|
||||
ERROR: 0:19: 'f' : redefinition
|
||||
ERROR: 0:20: 'tan' : redefinition
|
||||
ERROR: 0:21: 'redefinition of built-in function' : not supported with this profile: es
|
||||
ERROR: 0:21: 'sin' : function name is redeclaration of existing name
|
||||
ERROR: 0:22: 'redefinition of built-in function' : not supported with this profile: es
|
||||
ERROR: 0:22: 'cos' : function name is redeclaration of existing name
|
||||
ERROR: 0:22: 'cos' : function already has a body
|
||||
ERROR: 0:24: 'return' : void function cannot return a value
|
||||
ERROR: 0:26: 'radians' : function name is redeclaration of existing name
|
||||
ERROR: 0:26: 'radians' : can't find function
|
||||
ERROR: 0:28: 'return' : void function cannot return a value
|
||||
ERROR: 0:35: 'local function declaration' : not supported with this profile: es
|
||||
ERROR: 0:54: 'z' : undeclared identifier
|
||||
ERROR: 0:54: 'z' : redefinition
|
||||
ERROR: 16 compilation errors. No code generated.
|
||||
ERROR: 0:20: 'c' : redefinition
|
||||
ERROR: 0:22: 'f' : redefinition
|
||||
ERROR: 0:23: 'tan' : redefinition
|
||||
ERROR: 0:24: 'redefinition of built-in function' : not supported with this profile: es
|
||||
ERROR: 0:24: 'sin' : function name is redeclaration of existing name
|
||||
ERROR: 0:25: 'redefinition of built-in function' : not supported with this profile: es
|
||||
ERROR: 0:25: 'cos' : function name is redeclaration of existing name
|
||||
ERROR: 0:25: 'cos' : function already has a body
|
||||
ERROR: 0:27: 'return' : void function cannot return a value
|
||||
ERROR: 0:29: 'radians' : function name is redeclaration of existing name
|
||||
ERROR: 0:29: 'radians' : can't find function
|
||||
ERROR: 0:31: 'return' : void function cannot return a value
|
||||
ERROR: 0:38: 'local function declaration' : not supported with this profile: es
|
||||
ERROR: 0:43: 'sin' : can't use function syntax on variable
|
||||
ERROR: 0:57: 'z' : undeclared identifier
|
||||
ERROR: 0:57: 'z' : redefinition
|
||||
ERROR: 0:73: 'degrees' : can't use function syntax on variable
|
||||
ERROR: 19 compilation errors. No code generated.
|
||||
|
||||
|
||||
ERROR: node is still EOpNull!
|
||||
@ -36,87 +39,91 @@ ERROR: node is still EOpNull!
|
||||
0:8 1.000000
|
||||
0:11 Branch: Return with expression
|
||||
0:11 'a' (in highp int)
|
||||
0:22 Function Definition: cos(f1; (highp float)
|
||||
0:22 Function Parameters:
|
||||
0:22 'x' (in highp float)
|
||||
0:24 Sequence
|
||||
0:24 Branch: Return with expression
|
||||
0:24 Constant:
|
||||
0:24 1.000000
|
||||
0:26 Function Definition: radians(b1; (bool)
|
||||
0:26 Function Parameters:
|
||||
0:26 'x' (in bool)
|
||||
0:28 Sequence
|
||||
0:28 Branch: Return with expression
|
||||
0:28 Constant:
|
||||
0:28 true (const bool)
|
||||
0:33 Function Definition: main( (void)
|
||||
0:33 Function Parameters:
|
||||
0:25 Function Definition: cos(f1; (highp float)
|
||||
0:25 Function Parameters:
|
||||
0:25 'x' (in highp float)
|
||||
0:27 Sequence
|
||||
0:27 Branch: Return with expression
|
||||
0:27 Constant:
|
||||
0:27 1.000000
|
||||
0:29 Function Definition: radians(b1; (bool)
|
||||
0:29 Function Parameters:
|
||||
0:29 'x' (in bool)
|
||||
0:31 Sequence
|
||||
0:31 Branch: Return with expression
|
||||
0:31 Constant:
|
||||
0:31 true (const bool)
|
||||
0:36 Function Definition: main( (void)
|
||||
0:36 Function Parameters:
|
||||
0:? Sequence
|
||||
0:36 Function Call: g( (highp int)
|
||||
0:39 'sin' (highp float)
|
||||
0:41 Function Call: f(i1;i1;i1; (highp int)
|
||||
0:41 Constant:
|
||||
0:41 1 (const int)
|
||||
0:41 Constant:
|
||||
0:41 2 (const int)
|
||||
0:41 Constant:
|
||||
0:41 3 (const int)
|
||||
0:44 move second child to first child (highp float)
|
||||
0:44 'f' (highp float)
|
||||
0:39 Function Call: g( (highp int)
|
||||
0:42 'sin' (highp float)
|
||||
0:43 Constant:
|
||||
0:43 0.000000
|
||||
0:44 Function Call: f(i1;i1;i1; (highp int)
|
||||
0:44 Constant:
|
||||
0:44 3.000000
|
||||
0:46 move second child to first child (highp 4-component vector of float)
|
||||
0:46 'gl_Position' (invariant gl_Position highp 4-component vector of float)
|
||||
0:46 Construct vec4 (highp 4-component vector of float)
|
||||
0:46 'f' (highp float)
|
||||
0:48 Sequence
|
||||
0:48 Sequence
|
||||
0:48 move second child to first child (highp int)
|
||||
0:48 'f' (highp int)
|
||||
0:48 Constant:
|
||||
0:48 0 (const int)
|
||||
0:48 Loop with condition tested first
|
||||
0:48 Loop Condition
|
||||
0:48 Compare Less Than (bool)
|
||||
0:48 'f' (highp int)
|
||||
0:48 Constant:
|
||||
0:48 10 (const int)
|
||||
0:48 Loop Body
|
||||
0:49 Pre-Increment (highp int)
|
||||
0:49 'f' (highp int)
|
||||
0:48 Loop Terminal Expression
|
||||
0:48 Pre-Increment (highp int)
|
||||
0:48 'f' (highp int)
|
||||
0:44 1 (const int)
|
||||
0:44 Constant:
|
||||
0:44 2 (const int)
|
||||
0:44 Constant:
|
||||
0:44 3 (const int)
|
||||
0:47 move second child to first child (highp float)
|
||||
0:47 'f' (highp float)
|
||||
0:47 Constant:
|
||||
0:47 3.000000
|
||||
0:49 move second child to first child (highp 4-component vector of float)
|
||||
0:49 'gl_Position' (invariant gl_Position highp 4-component vector of float)
|
||||
0:49 Construct vec4 (highp 4-component vector of float)
|
||||
0:49 'f' (highp float)
|
||||
0:51 Sequence
|
||||
0:51 Sequence
|
||||
0:51 move second child to first child (highp int)
|
||||
0:51 'x' (highp int)
|
||||
0:51 'f' (highp int)
|
||||
0:51 Constant:
|
||||
0:51 1 (const int)
|
||||
0:53 Sequence
|
||||
0:53 Sequence
|
||||
0:53 move second child to first child (highp float)
|
||||
0:53 'x' (highp float)
|
||||
0:53 Constant:
|
||||
0:53 2.000000
|
||||
0:53 move second child to first child (highp float)
|
||||
0:53 'y' (highp float)
|
||||
0:53 'x' (highp float)
|
||||
0:57 Sequence
|
||||
0:57 Sequence
|
||||
0:57 move second child to first child (highp int)
|
||||
0:57 'x' (highp int)
|
||||
0:57 'x' (highp int)
|
||||
0:65 Sequence
|
||||
0:65 Sequence
|
||||
0:65 move second child to first child (structure{x})
|
||||
0:65 'S' (structure{x})
|
||||
0:65 Constant:
|
||||
0:65 0 (const int)
|
||||
0:66 x: direct index for structure (highp int)
|
||||
0:66 'S' (structure{x})
|
||||
0:66 Constant:
|
||||
0:66 0 (const int)
|
||||
0:51 0 (const int)
|
||||
0:51 Loop with condition tested first
|
||||
0:51 Loop Condition
|
||||
0:51 Compare Less Than (bool)
|
||||
0:51 'f' (highp int)
|
||||
0:51 Constant:
|
||||
0:51 10 (const int)
|
||||
0:51 Loop Body
|
||||
0:52 Pre-Increment (highp int)
|
||||
0:52 'f' (highp int)
|
||||
0:51 Loop Terminal Expression
|
||||
0:51 Pre-Increment (highp int)
|
||||
0:51 'f' (highp int)
|
||||
0:54 Sequence
|
||||
0:54 move second child to first child (highp int)
|
||||
0:54 'x' (highp int)
|
||||
0:54 Constant:
|
||||
0:54 1 (const int)
|
||||
0:56 Sequence
|
||||
0:56 Sequence
|
||||
0:56 move second child to first child (highp float)
|
||||
0:56 'x' (highp float)
|
||||
0:56 Constant:
|
||||
0:56 2.000000
|
||||
0:56 move second child to first child (highp float)
|
||||
0:56 'y' (highp float)
|
||||
0:56 'x' (highp float)
|
||||
0:60 Sequence
|
||||
0:60 Sequence
|
||||
0:60 move second child to first child (highp int)
|
||||
0:60 'x' (highp int)
|
||||
0:60 'x' (highp int)
|
||||
0:68 Sequence
|
||||
0:68 Sequence
|
||||
0:68 move second child to first child (structure{x})
|
||||
0:68 'S' (structure{x})
|
||||
0:68 Constant:
|
||||
0:68 0 (const int)
|
||||
0:69 x: direct index for structure (highp int)
|
||||
0:69 'S' (structure{x})
|
||||
0:69 Constant:
|
||||
0:69 0 (const int)
|
||||
0:73 Constant:
|
||||
0:73 0.000000
|
||||
0:? Linker Objects
|
||||
0:? 'b' (bool)
|
||||
0:? 'gl_VertexID' (gl_VertexId highp int)
|
||||
|
@ -2,10 +2,13 @@
|
||||
Warning, version 430 is not yet complete; some version-specific features are present, but many are missing.
|
||||
ERROR: 0:5: 'a' : redefinition
|
||||
ERROR: 0:17: 'b' : function name is redeclaration of existing name
|
||||
ERROR: 0:19: 'f' : redefinition
|
||||
ERROR: 0:54: 'z' : undeclared identifier
|
||||
ERROR: 0:54: 'z' : redefinition
|
||||
ERROR: 5 compilation errors. No code generated.
|
||||
ERROR: 0:20: 'c' : redefinition
|
||||
ERROR: 0:22: 'f' : redefinition
|
||||
ERROR: 0:43: 'sin' : can't use function syntax on variable
|
||||
ERROR: 0:57: 'z' : undeclared identifier
|
||||
ERROR: 0:57: 'z' : redefinition
|
||||
ERROR: 0:73: 'degrees' : can't use function syntax on variable
|
||||
ERROR: 8 compilation errors. No code generated.
|
||||
|
||||
|
||||
ERROR: node is still EOpNull!
|
||||
@ -26,90 +29,94 @@ ERROR: node is still EOpNull!
|
||||
0:8 1.000000
|
||||
0:11 Branch: Return with expression
|
||||
0:11 'a' (in int)
|
||||
0:22 Function Definition: cos(f1; (float)
|
||||
0:22 Function Parameters:
|
||||
0:22 'x' (in float)
|
||||
0:24 Sequence
|
||||
0:24 Branch: Return with expression
|
||||
0:24 Constant:
|
||||
0:24 1.000000
|
||||
0:26 Function Definition: radians(b1; (bool)
|
||||
0:26 Function Parameters:
|
||||
0:26 'x' (in bool)
|
||||
0:28 Sequence
|
||||
0:28 Branch: Return with expression
|
||||
0:28 Constant:
|
||||
0:28 true (const bool)
|
||||
0:33 Function Definition: main( (void)
|
||||
0:33 Function Parameters:
|
||||
0:25 Function Definition: cos(f1; (float)
|
||||
0:25 Function Parameters:
|
||||
0:25 'x' (in float)
|
||||
0:27 Sequence
|
||||
0:27 Branch: Return with expression
|
||||
0:27 Constant:
|
||||
0:27 1.000000
|
||||
0:29 Function Definition: radians(b1; (bool)
|
||||
0:29 Function Parameters:
|
||||
0:29 'x' (in bool)
|
||||
0:31 Sequence
|
||||
0:31 Branch: Return with expression
|
||||
0:31 Constant:
|
||||
0:31 true (const bool)
|
||||
0:36 Function Definition: main( (void)
|
||||
0:36 Function Parameters:
|
||||
0:? Sequence
|
||||
0:36 Function Call: g( (int)
|
||||
0:39 'sin' (float)
|
||||
0:41 Function Call: f(i1;i1;i1; (int)
|
||||
0:41 Constant:
|
||||
0:41 1 (const int)
|
||||
0:41 Constant:
|
||||
0:41 2 (const int)
|
||||
0:41 Constant:
|
||||
0:41 3 (const int)
|
||||
0:44 move second child to first child (float)
|
||||
0:44 'f' (float)
|
||||
0:39 Function Call: g( (int)
|
||||
0:42 'sin' (float)
|
||||
0:43 Constant:
|
||||
0:43 0.000000
|
||||
0:44 Function Call: f(i1;i1;i1; (int)
|
||||
0:44 Constant:
|
||||
0:44 3.000000
|
||||
0:46 move second child to first child (4-component vector of float)
|
||||
0:46 gl_Position: direct index for structure (invariant gl_Position 4-component vector of float)
|
||||
0:46 '__anon__0' (out block{gl_Position,gl_PointSize,gl_ClipDistance,gl_ClipVertex,gl_FrontColor,gl_BackColor,gl_FrontSecondaryColor,gl_BackSecondaryColor,gl_TexCoord,gl_FogFragCoord})
|
||||
0:46 Constant:
|
||||
0:46 0 (const uint)
|
||||
0:46 Construct vec4 (4-component vector of float)
|
||||
0:46 'f' (float)
|
||||
0:48 Sequence
|
||||
0:48 Sequence
|
||||
0:48 move second child to first child (int)
|
||||
0:48 'f' (int)
|
||||
0:48 Constant:
|
||||
0:48 0 (const int)
|
||||
0:48 Loop with condition tested first
|
||||
0:48 Loop Condition
|
||||
0:48 Compare Less Than (bool)
|
||||
0:48 'f' (int)
|
||||
0:48 Constant:
|
||||
0:48 10 (const int)
|
||||
0:48 Loop Body
|
||||
0:49 Pre-Increment (int)
|
||||
0:49 'f' (int)
|
||||
0:48 Loop Terminal Expression
|
||||
0:48 Pre-Increment (int)
|
||||
0:48 'f' (int)
|
||||
0:44 1 (const int)
|
||||
0:44 Constant:
|
||||
0:44 2 (const int)
|
||||
0:44 Constant:
|
||||
0:44 3 (const int)
|
||||
0:47 move second child to first child (float)
|
||||
0:47 'f' (float)
|
||||
0:47 Constant:
|
||||
0:47 3.000000
|
||||
0:49 move second child to first child (4-component vector of float)
|
||||
0:49 gl_Position: direct index for structure (invariant gl_Position 4-component vector of float)
|
||||
0:49 '__anon__0' (out block{gl_Position,gl_PointSize,gl_ClipDistance,gl_ClipVertex,gl_FrontColor,gl_BackColor,gl_FrontSecondaryColor,gl_BackSecondaryColor,gl_TexCoord,gl_FogFragCoord})
|
||||
0:49 Constant:
|
||||
0:49 0 (const uint)
|
||||
0:49 Construct vec4 (4-component vector of float)
|
||||
0:49 'f' (float)
|
||||
0:51 Sequence
|
||||
0:51 Sequence
|
||||
0:51 move second child to first child (int)
|
||||
0:51 'x' (int)
|
||||
0:51 'f' (int)
|
||||
0:51 Constant:
|
||||
0:51 1 (const int)
|
||||
0:53 Sequence
|
||||
0:53 Sequence
|
||||
0:53 move second child to first child (float)
|
||||
0:53 'x' (float)
|
||||
0:53 Constant:
|
||||
0:53 2.000000
|
||||
0:53 move second child to first child (float)
|
||||
0:53 'y' (float)
|
||||
0:53 'x' (float)
|
||||
0:57 Sequence
|
||||
0:57 Sequence
|
||||
0:57 move second child to first child (int)
|
||||
0:57 'x' (int)
|
||||
0:57 'x' (int)
|
||||
0:65 Sequence
|
||||
0:65 Sequence
|
||||
0:65 move second child to first child (structure{x})
|
||||
0:65 'S' (structure{x})
|
||||
0:65 Constant:
|
||||
0:65 0 (const int)
|
||||
0:66 x: direct index for structure (int)
|
||||
0:66 'S' (structure{x})
|
||||
0:66 Constant:
|
||||
0:66 0 (const int)
|
||||
0:51 0 (const int)
|
||||
0:51 Loop with condition tested first
|
||||
0:51 Loop Condition
|
||||
0:51 Compare Less Than (bool)
|
||||
0:51 'f' (int)
|
||||
0:51 Constant:
|
||||
0:51 10 (const int)
|
||||
0:51 Loop Body
|
||||
0:52 Pre-Increment (int)
|
||||
0:52 'f' (int)
|
||||
0:51 Loop Terminal Expression
|
||||
0:51 Pre-Increment (int)
|
||||
0:51 'f' (int)
|
||||
0:54 Sequence
|
||||
0:54 move second child to first child (int)
|
||||
0:54 'x' (int)
|
||||
0:54 Constant:
|
||||
0:54 1 (const int)
|
||||
0:56 Sequence
|
||||
0:56 Sequence
|
||||
0:56 move second child to first child (float)
|
||||
0:56 'x' (float)
|
||||
0:56 Constant:
|
||||
0:56 2.000000
|
||||
0:56 move second child to first child (float)
|
||||
0:56 'y' (float)
|
||||
0:56 'x' (float)
|
||||
0:60 Sequence
|
||||
0:60 Sequence
|
||||
0:60 move second child to first child (int)
|
||||
0:60 'x' (int)
|
||||
0:60 'x' (int)
|
||||
0:68 Sequence
|
||||
0:68 Sequence
|
||||
0:68 move second child to first child (structure{x})
|
||||
0:68 'S' (structure{x})
|
||||
0:68 Constant:
|
||||
0:68 0 (const int)
|
||||
0:69 x: direct index for structure (int)
|
||||
0:69 'S' (structure{x})
|
||||
0:69 Constant:
|
||||
0:69 0 (const int)
|
||||
0:73 Constant:
|
||||
0:73 0.000000
|
||||
0:? Linker Objects
|
||||
0:? 'b' (bool)
|
||||
0:? 'tan' (float)
|
||||
|
@ -45,6 +45,7 @@ switch.frag
|
||||
tokenLength.vert
|
||||
100Limits.vert
|
||||
100scope.vert
|
||||
110scope.vert
|
||||
300scope.vert
|
||||
400.frag
|
||||
420.vert
|
||||
|
@ -9,5 +9,5 @@
|
||||
// source have to figure out how to create revision.h just to get a build
|
||||
// going. However, if it is not updated, it can be a version behind.
|
||||
|
||||
#define GLSLANG_REVISION "24420"
|
||||
#define GLSLANG_DATE "2013/12/09 17:25:14"
|
||||
#define GLSLANG_REVISION "24468"
|
||||
#define GLSLANG_DATE "2013/12/11 11:57:40"
|
||||
|
@ -2904,6 +2904,11 @@ const TFunction* TParseContext::findFunction(TSourceLoc loc, const TFunction& ca
|
||||
{
|
||||
const TFunction* function = 0;
|
||||
|
||||
if (symbolTable.isFunctionNameVariable(call.getName())) {
|
||||
error(loc, "can't use function syntax on variable", call.getName().c_str(), "");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (profile == EEsProfile || version < 120)
|
||||
function = findFunctionExact(loc, call, builtIn);
|
||||
else if (version < 400)
|
||||
|
@ -170,6 +170,8 @@ void InitializeStageSymbolTable(TBuiltIns& builtIns, int version, EProfile profi
|
||||
IdentifyBuiltIns(version, profile, language, *symbolTables[language]);
|
||||
if (profile == EEsProfile && version >= 300)
|
||||
(*symbolTables[language]).setNoBuiltInRedeclarations();
|
||||
if (version == 110)
|
||||
(*symbolTables[language]).setSeparateNameSpaces();
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -322,11 +322,11 @@ TSymbolTableLevel* TSymbolTableLevel::clone() const
|
||||
TVariable* container = anon->getAnonContainer().clone();
|
||||
container->changeName(NewPoolTString(""));
|
||||
// insert the whole container
|
||||
symTableLevel->insert(*container);
|
||||
symTableLevel->insert(*container, false);
|
||||
containerCopied[anon->getAnonId()] = true;
|
||||
}
|
||||
} else
|
||||
symTableLevel->insert(*iter->second->clone());
|
||||
symTableLevel->insert(*iter->second->clone(), false);
|
||||
}
|
||||
|
||||
return symTableLevel;
|
||||
@ -338,6 +338,7 @@ void TSymbolTable::copyTable(const TSymbolTable& copyOf)
|
||||
|
||||
uniqueId = copyOf.uniqueId;
|
||||
noBuiltInRedeclarations = copyOf.noBuiltInRedeclarations;
|
||||
separateNameSpaces = copyOf.separateNameSpaces;
|
||||
for (unsigned int i = copyOf.adoptedLevels; i < copyOf.table.size(); ++i)
|
||||
table.push_back(copyOf.table[i]->clone());
|
||||
}
|
||||
|
@ -283,7 +283,7 @@ public:
|
||||
TSymbolTableLevel() : defaultPrecision(0), anonId(0) { }
|
||||
~TSymbolTableLevel();
|
||||
|
||||
bool insert(TSymbol& symbol)
|
||||
bool insert(TSymbol& symbol, bool separateNameSpaces)
|
||||
{
|
||||
//
|
||||
// returning true means symbol was added to the table with no semantic errors
|
||||
@ -316,7 +316,7 @@ public:
|
||||
const TString& insertName = symbol.getMangledName();
|
||||
if (symbol.getAsFunction()) {
|
||||
// make sure there isn't a variable of this name
|
||||
if (level.find(name) != level.end())
|
||||
if (! separateNameSpaces && level.find(name) != level.end())
|
||||
return false;
|
||||
|
||||
// insert, and whatever happens is okay
|
||||
@ -367,6 +367,34 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
// See if there is a variable at this level having the given non-function-style name.
|
||||
// Return true if name is found, and set variable to true if the name was a variable.
|
||||
bool findFunctionVariableName(const TString& name, bool& variable) const
|
||||
{
|
||||
tLevel::const_iterator candidate = level.lower_bound(name);
|
||||
if (candidate != level.end()) {
|
||||
const TString& candidateName = (*candidate).first;
|
||||
TString::size_type parenAt = candidateName.find_first_of('(');
|
||||
if (parenAt == candidateName.npos) {
|
||||
// not a mangled name
|
||||
if (candidateName == name) {
|
||||
// found a variable name match
|
||||
variable = true;
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
// a mangled name
|
||||
if (candidateName.compare(0, parenAt, name) == 0) {
|
||||
// found a function name match
|
||||
variable = false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Use this to do a lazy 'push' of precision defaults the first time
|
||||
// a precision statement is seen in a new scope. Leave it at 0 for
|
||||
// when no push was needed. Thus, it is not the current defaults,
|
||||
@ -415,7 +443,7 @@ protected:
|
||||
|
||||
class TSymbolTable {
|
||||
public:
|
||||
TSymbolTable() : uniqueId(0), noBuiltInRedeclarations(false), adoptedLevels(0)
|
||||
TSymbolTable() : uniqueId(0), noBuiltInRedeclarations(false), separateNameSpaces(false), adoptedLevels(0)
|
||||
{
|
||||
//
|
||||
// This symbol table cannot be used until push() is called.
|
||||
@ -438,6 +466,7 @@ public:
|
||||
}
|
||||
uniqueId = symTable.uniqueId;
|
||||
noBuiltInRedeclarations = symTable.noBuiltInRedeclarations;
|
||||
separateNameSpaces = symTable.separateNameSpaces;
|
||||
}
|
||||
|
||||
//
|
||||
@ -459,6 +488,7 @@ public:
|
||||
bool atGlobalLevel() { return isGlobalLevel(currentLevel()); }
|
||||
|
||||
void setNoBuiltInRedeclarations() { noBuiltInRedeclarations = true; }
|
||||
void setSeparateNameSpaces() { separateNameSpaces = true; }
|
||||
|
||||
void push()
|
||||
{
|
||||
@ -477,7 +507,7 @@ public:
|
||||
symbol.setUniqueId(++uniqueId);
|
||||
|
||||
// make sure there isn't a function of this variable name
|
||||
if (! symbol.getAsFunction() && table[currentLevel()]->hasFunctionName(symbol.getName()))
|
||||
if (! separateNameSpaces && ! symbol.getAsFunction() && table[currentLevel()]->hasFunctionName(symbol.getName()))
|
||||
return false;
|
||||
|
||||
// check for not overloading or redefining a built-in function
|
||||
@ -490,7 +520,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
return table[currentLevel()]->insert(symbol);
|
||||
return table[currentLevel()]->insert(symbol, separateNameSpaces);
|
||||
}
|
||||
|
||||
//
|
||||
@ -517,12 +547,12 @@ public:
|
||||
TSymbol* copyUp(TSymbol* shared)
|
||||
{
|
||||
TSymbol* copy = copyUpDeferredInsert(shared);
|
||||
table[globalLevel]->insert(*copy);
|
||||
table[globalLevel]->insert(*copy, separateNameSpaces);
|
||||
if (shared->getAsVariable())
|
||||
return copy;
|
||||
else {
|
||||
// get copy of an anonymous member's container
|
||||
table[currentLevel()]->insert(*copy);
|
||||
table[currentLevel()]->insert(*copy, separateNameSpaces);
|
||||
// return the copy of the anonymous member
|
||||
return table[currentLevel()]->find(shared->getName());
|
||||
}
|
||||
@ -545,6 +575,23 @@ public:
|
||||
return symbol;
|
||||
}
|
||||
|
||||
bool isFunctionNameVariable(const TString& name) const
|
||||
{
|
||||
if (separateNameSpaces)
|
||||
return false;
|
||||
|
||||
int level = currentLevel();
|
||||
do {
|
||||
bool variable;
|
||||
bool found = table[level]->findFunctionVariableName(name, variable);
|
||||
if (found)
|
||||
return variable;
|
||||
--level;
|
||||
} while (level >= 0);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void findFunctionNameList(const TString& name, TVector<TFunction*>& list, bool& builtIn)
|
||||
{
|
||||
// For user levels, return the set found in the first scope with a match
|
||||
@ -606,6 +653,7 @@ protected:
|
||||
std::vector<TSymbolTableLevel*> table;
|
||||
int uniqueId; // for unique identification in code generation
|
||||
bool noBuiltInRedeclarations;
|
||||
bool separateNameSpaces;
|
||||
unsigned int adoptedLevels;
|
||||
};
|
||||
|
||||
|
@ -91,7 +91,7 @@ void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit)
|
||||
else if (vertices != unit.vertices)
|
||||
error(infoSink, "Contradictory layout max_vertices values");
|
||||
|
||||
if (vertexSpacing == ElgNone)
|
||||
if (vertexSpacing == EvsNone)
|
||||
vertexSpacing = unit.vertexSpacing;
|
||||
else if (vertexSpacing != unit.vertexSpacing)
|
||||
error(infoSink, "Contradictory input vertex spacing");
|
||||
|
Loading…
Reference in New Issue
Block a user