mirror of
https://github.com/RPCS3/glslang.git
synced 2024-11-27 05:00:28 +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;
|
bool b;
|
||||||
float b(int a); // ERROR: redefinition
|
float b(int a); // ERROR: redefinition
|
||||||
|
|
||||||
|
float c(int a);
|
||||||
|
bool c; // ERROR: redefinition
|
||||||
|
|
||||||
float f; // ERROR: redefinition
|
float f; // ERROR: redefinition
|
||||||
float tan; // okay, built-in is in an outer scope
|
float tan; // okay, built-in is in an outer scope
|
||||||
float sin(float x); // ERROR: can't redefine built-in functions
|
float sin(float x); // ERROR: can't redefine built-in functions
|
||||||
@ -37,7 +40,7 @@ void main()
|
|||||||
|
|
||||||
float sin; // okay
|
float sin; // okay
|
||||||
sin;
|
sin;
|
||||||
|
sin(0.7); // ERROR, use of hidden function
|
||||||
f(1,2,3);
|
f(1,2,3);
|
||||||
|
|
||||||
float f; // hides f()
|
float f; // hides f()
|
||||||
@ -65,6 +68,9 @@ void main()
|
|||||||
S S = S(0); // 'S' is only visible as a struct and constructor
|
S S = S(0); // 'S' is only visible as a struct and constructor
|
||||||
S.x; // 'S' is now visible as a variable
|
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
|
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;
|
bool b;
|
||||||
float b(int a); // ERROR: redefinition
|
float b(int a); // ERROR: redefinition
|
||||||
|
|
||||||
|
float c(int a);
|
||||||
|
bool c; // ERROR: redefinition
|
||||||
|
|
||||||
float f; // ERROR: redefinition
|
float f; // ERROR: redefinition
|
||||||
float tan; // ERROR: redefines built-in function
|
float tan; // ERROR: redefines built-in function
|
||||||
float sin(float x); // ERROR: can't redefine built-in functions
|
float sin(float x); // ERROR: can't redefine built-in functions
|
||||||
@ -37,7 +40,7 @@ void main()
|
|||||||
|
|
||||||
float sin; // okay
|
float sin; // okay
|
||||||
sin;
|
sin;
|
||||||
|
sin(0.7); // ERROR, use of hidden function
|
||||||
f(1,2,3);
|
f(1,2,3);
|
||||||
|
|
||||||
float f; // hides f()
|
float f; // hides f()
|
||||||
@ -65,4 +68,7 @@ void main()
|
|||||||
S S = S(0); // 'S' is only visible as a struct and constructor
|
S S = S(0); // 'S' is only visible as a struct and constructor
|
||||||
S.x; // 'S' is now visible as a variable
|
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;
|
bool b;
|
||||||
float b(int a); // ERROR: redefinition
|
float b(int a); // ERROR: redefinition
|
||||||
|
|
||||||
|
float c(int a);
|
||||||
|
bool c; // ERROR: redefinition
|
||||||
|
|
||||||
float f; // ERROR: redefinition
|
float f; // ERROR: redefinition
|
||||||
float tan; // okay, hides built-in function
|
float tan; // okay, hides built-in function
|
||||||
float sin(float x); // okay, can redefine built-in functions
|
float sin(float x); // okay, can redefine built-in functions
|
||||||
@ -37,7 +40,7 @@ void main()
|
|||||||
|
|
||||||
float sin; // okay
|
float sin; // okay
|
||||||
sin;
|
sin;
|
||||||
|
sin(0.7); // ERROR, use of hidden function
|
||||||
f(1,2,3);
|
f(1,2,3);
|
||||||
|
|
||||||
float f; // hides f()
|
float f; // hides f()
|
||||||
@ -65,4 +68,7 @@ void main()
|
|||||||
S S = S(0); // 'S' is only visible as a struct and constructor
|
S S = S(0); // 'S' is only visible as a struct and constructor
|
||||||
S.x; // 'S' is now visible as a variable
|
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
|
100scope.vert
|
||||||
ERROR: 0:5: 'a' : redefinition
|
ERROR: 0:5: 'a' : redefinition
|
||||||
ERROR: 0:17: 'b' : function name is redeclaration of existing name
|
ERROR: 0:17: 'b' : function name is redeclaration of existing name
|
||||||
ERROR: 0:19: 'f' : redefinition
|
ERROR: 0:20: 'c' : redefinition
|
||||||
ERROR: 0:21: 'redefinition of built-in function' : not supported with this profile: es
|
ERROR: 0:22: 'f' : redefinition
|
||||||
ERROR: 0:22: 'redefinition of built-in function' : not supported with this profile: es
|
ERROR: 0:24: '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:25: 'redefinition of built-in function' : not supported with this profile: es
|
||||||
ERROR: 0:54: 'z' : undeclared identifier
|
ERROR: 0:38: 'local function declaration' : not supported with this profile: es
|
||||||
ERROR: 0:54: 'z' : redefinition
|
ERROR: 0:43: 'sin' : can't use function syntax on variable
|
||||||
ERROR: 0:70: 'vertex-shader struct output' : not supported for this version or the enabled extensions
|
ERROR: 0:57: 'z' : undeclared identifier
|
||||||
ERROR: 9 compilation errors. No code generated.
|
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!
|
ERROR: node is still EOpNull!
|
||||||
@ -29,87 +32,91 @@ ERROR: node is still EOpNull!
|
|||||||
0:8 1.000000
|
0:8 1.000000
|
||||||
0:11 Branch: Return with expression
|
0:11 Branch: Return with expression
|
||||||
0:11 'a' (in highp int)
|
0:11 'a' (in highp int)
|
||||||
0:22 Function Definition: cos(f1; (highp float)
|
0:25 Function Definition: cos(f1; (highp float)
|
||||||
0:22 Function Parameters:
|
0:25 Function Parameters:
|
||||||
0:22 'x' (in highp float)
|
0:25 'x' (in highp float)
|
||||||
0:24 Sequence
|
0:27 Sequence
|
||||||
0:24 Branch: Return with expression
|
0:27 Branch: Return with expression
|
||||||
0:24 Constant:
|
0:27 Constant:
|
||||||
0:24 1.000000
|
0:27 1.000000
|
||||||
0:26 Function Definition: radians(b1; (bool)
|
0:29 Function Definition: radians(b1; (bool)
|
||||||
0:26 Function Parameters:
|
0:29 Function Parameters:
|
||||||
0:26 'x' (in bool)
|
0:29 'x' (in bool)
|
||||||
0:28 Sequence
|
0:31 Sequence
|
||||||
0:28 Branch: Return with expression
|
0:31 Branch: Return with expression
|
||||||
0:28 Constant:
|
0:31 Constant:
|
||||||
0:28 true (const bool)
|
0:31 true (const bool)
|
||||||
0:33 Function Definition: main( (void)
|
0:36 Function Definition: main( (void)
|
||||||
0:33 Function Parameters:
|
0:36 Function Parameters:
|
||||||
0:? Sequence
|
0:? Sequence
|
||||||
0:36 Function Call: g( (highp int)
|
0:39 Function Call: g( (highp int)
|
||||||
0:39 'sin' (highp float)
|
0:42 'sin' (highp float)
|
||||||
0:41 Function Call: f(i1;i1;i1; (highp int)
|
0:43 Constant:
|
||||||
0:41 Constant:
|
0:43 0.000000
|
||||||
0:41 1 (const int)
|
0:44 Function Call: f(i1;i1;i1; (highp 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:44 Constant:
|
0:44 Constant:
|
||||||
0:44 3.000000
|
0:44 1 (const int)
|
||||||
0:46 move second child to first child (highp 4-component vector of float)
|
0:44 Constant:
|
||||||
0:46 'gl_Position' (invariant gl_Position highp 4-component vector of float)
|
0:44 2 (const int)
|
||||||
0:46 Construct vec4 (highp 4-component vector of float)
|
0:44 Constant:
|
||||||
0:46 'f' (highp float)
|
0:44 3 (const int)
|
||||||
0:48 Sequence
|
0:47 move second child to first child (highp float)
|
||||||
0:48 Sequence
|
0:47 'f' (highp float)
|
||||||
0:48 move second child to first child (highp int)
|
0:47 Constant:
|
||||||
0:48 'f' (highp int)
|
0:47 3.000000
|
||||||
0:48 Constant:
|
0:49 move second child to first child (highp 4-component vector of float)
|
||||||
0:48 0 (const int)
|
0:49 'gl_Position' (invariant gl_Position highp 4-component vector of float)
|
||||||
0:48 Loop with condition tested first
|
0:49 Construct vec4 (highp 4-component vector of float)
|
||||||
0:48 Loop Condition
|
0:49 'f' (highp float)
|
||||||
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:51 Sequence
|
0:51 Sequence
|
||||||
0:51 move second child to first child (highp int)
|
0:51 Sequence
|
||||||
0:51 'x' (highp int)
|
0:51 move second child to first child (highp int)
|
||||||
0:51 Constant:
|
0:51 'f' (highp int)
|
||||||
0:51 1 (const int)
|
0:51 Constant:
|
||||||
0:53 Sequence
|
0:51 0 (const int)
|
||||||
0:53 Sequence
|
0:51 Loop with condition tested first
|
||||||
0:53 move second child to first child (highp float)
|
0:51 Loop Condition
|
||||||
0:53 'x' (highp float)
|
0:51 Compare Less Than (bool)
|
||||||
0:53 Constant:
|
0:51 'f' (highp int)
|
||||||
0:53 2.000000
|
0:51 Constant:
|
||||||
0:53 move second child to first child (highp float)
|
0:51 10 (const int)
|
||||||
0:53 'y' (highp float)
|
0:51 Loop Body
|
||||||
0:53 'x' (highp float)
|
0:52 Pre-Increment (highp int)
|
||||||
0:57 Sequence
|
0:52 'f' (highp int)
|
||||||
0:57 Sequence
|
0:51 Loop Terminal Expression
|
||||||
0:57 move second child to first child (highp int)
|
0:51 Pre-Increment (highp int)
|
||||||
0:57 'x' (highp int)
|
0:51 'f' (highp int)
|
||||||
0:57 'x' (highp int)
|
0:54 Sequence
|
||||||
0:65 Sequence
|
0:54 move second child to first child (highp int)
|
||||||
0:65 Sequence
|
0:54 'x' (highp int)
|
||||||
0:65 move second child to first child (structure{x})
|
0:54 Constant:
|
||||||
0:65 'S' (structure{x})
|
0:54 1 (const int)
|
||||||
0:65 Constant:
|
0:56 Sequence
|
||||||
0:65 0 (const int)
|
0:56 Sequence
|
||||||
0:66 x: direct index for structure (highp int)
|
0:56 move second child to first child (highp float)
|
||||||
0:66 'S' (structure{x})
|
0:56 'x' (highp float)
|
||||||
0:66 Constant:
|
0:56 Constant:
|
||||||
0:66 0 (const int)
|
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:? Linker Objects
|
||||||
0:? 'b' (bool)
|
0:? 'b' (bool)
|
||||||
0:? 'tan' (highp float)
|
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: 'flizbit' : only the length method is supported for array
|
||||||
ERROR: 0:33: '=' : cannot convert from '7-element array of float' to 'int'
|
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: '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:34: 'a4' : redefinition
|
||||||
ERROR: 0:35: 'arrays of arrays' : not supported with this profile: none
|
ERROR: 0:35: 'arrays of arrays' : not supported with this profile: none
|
||||||
ERROR: 0:36: '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:87: 'overloadC' : no matching overloaded function found
|
||||||
ERROR: 0:90: '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: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:106: 'overloadC' : no matching overloaded function found
|
||||||
ERROR: 0:107: 'overloadE' : 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:108: 'overloadE' : no matching overloaded function found
|
||||||
ERROR: 0:111: '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:117: 'overloadF' : no matching overloaded function found
|
||||||
ERROR: 0:121: 'gl_TexCoord array size' : must be less than gl_MaxTextureCoords (32)
|
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!
|
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 Function Call: overloadD(f1;i1; (3-component vector of float)
|
||||||
0:95 'i' (int)
|
0:95 'i' (int)
|
||||||
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 Constant:
|
0:98 0.000000
|
||||||
0:98 1 (const int)
|
|
||||||
0:98 'i' (int)
|
|
||||||
0:100 Constant:
|
0:100 Constant:
|
||||||
0:100 0.000000
|
0:100 0.000000
|
||||||
0:101 Function Call: texture2D(s21;vf2; (4-component vector of float)
|
0:101 Function Call: texture2D(s21;vf2; (4-component vector of float)
|
||||||
|
@ -1,21 +1,24 @@
|
|||||||
300scope.vert
|
300scope.vert
|
||||||
ERROR: 0:5: 'a' : redefinition
|
ERROR: 0:5: 'a' : redefinition
|
||||||
ERROR: 0:17: 'b' : function name is redeclaration of existing name
|
ERROR: 0:17: 'b' : function name is redeclaration of existing name
|
||||||
ERROR: 0:19: 'f' : redefinition
|
ERROR: 0:20: 'c' : redefinition
|
||||||
ERROR: 0:20: 'tan' : redefinition
|
ERROR: 0:22: 'f' : redefinition
|
||||||
ERROR: 0:21: 'redefinition of built-in function' : not supported with this profile: es
|
ERROR: 0:23: 'tan' : redefinition
|
||||||
ERROR: 0:21: 'sin' : function name is redeclaration of existing name
|
ERROR: 0:24: '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:24: 'sin' : function name is redeclaration of existing name
|
||||||
ERROR: 0:22: 'cos' : function name is redeclaration of existing name
|
ERROR: 0:25: 'redefinition of built-in function' : not supported with this profile: es
|
||||||
ERROR: 0:22: 'cos' : function already has a body
|
ERROR: 0:25: 'cos' : function name is redeclaration of existing name
|
||||||
ERROR: 0:24: 'return' : void function cannot return a value
|
ERROR: 0:25: 'cos' : function already has a body
|
||||||
ERROR: 0:26: 'radians' : function name is redeclaration of existing name
|
ERROR: 0:27: 'return' : void function cannot return a value
|
||||||
ERROR: 0:26: 'radians' : can't find function
|
ERROR: 0:29: 'radians' : function name is redeclaration of existing name
|
||||||
ERROR: 0:28: 'return' : void function cannot return a value
|
ERROR: 0:29: 'radians' : can't find function
|
||||||
ERROR: 0:35: 'local function declaration' : not supported with this profile: es
|
ERROR: 0:31: 'return' : void function cannot return a value
|
||||||
ERROR: 0:54: 'z' : undeclared identifier
|
ERROR: 0:38: 'local function declaration' : not supported with this profile: es
|
||||||
ERROR: 0:54: 'z' : redefinition
|
ERROR: 0:43: 'sin' : can't use function syntax on variable
|
||||||
ERROR: 16 compilation errors. No code generated.
|
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!
|
ERROR: node is still EOpNull!
|
||||||
@ -36,87 +39,91 @@ ERROR: node is still EOpNull!
|
|||||||
0:8 1.000000
|
0:8 1.000000
|
||||||
0:11 Branch: Return with expression
|
0:11 Branch: Return with expression
|
||||||
0:11 'a' (in highp int)
|
0:11 'a' (in highp int)
|
||||||
0:22 Function Definition: cos(f1; (highp float)
|
0:25 Function Definition: cos(f1; (highp float)
|
||||||
0:22 Function Parameters:
|
0:25 Function Parameters:
|
||||||
0:22 'x' (in highp float)
|
0:25 'x' (in highp float)
|
||||||
0:24 Sequence
|
0:27 Sequence
|
||||||
0:24 Branch: Return with expression
|
0:27 Branch: Return with expression
|
||||||
0:24 Constant:
|
0:27 Constant:
|
||||||
0:24 1.000000
|
0:27 1.000000
|
||||||
0:26 Function Definition: radians(b1; (bool)
|
0:29 Function Definition: radians(b1; (bool)
|
||||||
0:26 Function Parameters:
|
0:29 Function Parameters:
|
||||||
0:26 'x' (in bool)
|
0:29 'x' (in bool)
|
||||||
0:28 Sequence
|
0:31 Sequence
|
||||||
0:28 Branch: Return with expression
|
0:31 Branch: Return with expression
|
||||||
0:28 Constant:
|
0:31 Constant:
|
||||||
0:28 true (const bool)
|
0:31 true (const bool)
|
||||||
0:33 Function Definition: main( (void)
|
0:36 Function Definition: main( (void)
|
||||||
0:33 Function Parameters:
|
0:36 Function Parameters:
|
||||||
0:? Sequence
|
0:? Sequence
|
||||||
0:36 Function Call: g( (highp int)
|
0:39 Function Call: g( (highp int)
|
||||||
0:39 'sin' (highp float)
|
0:42 'sin' (highp float)
|
||||||
0:41 Function Call: f(i1;i1;i1; (highp int)
|
0:43 Constant:
|
||||||
0:41 Constant:
|
0:43 0.000000
|
||||||
0:41 1 (const int)
|
0:44 Function Call: f(i1;i1;i1; (highp 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:44 Constant:
|
0:44 Constant:
|
||||||
0:44 3.000000
|
0:44 1 (const int)
|
||||||
0:46 move second child to first child (highp 4-component vector of float)
|
0:44 Constant:
|
||||||
0:46 'gl_Position' (invariant gl_Position highp 4-component vector of float)
|
0:44 2 (const int)
|
||||||
0:46 Construct vec4 (highp 4-component vector of float)
|
0:44 Constant:
|
||||||
0:46 'f' (highp float)
|
0:44 3 (const int)
|
||||||
0:48 Sequence
|
0:47 move second child to first child (highp float)
|
||||||
0:48 Sequence
|
0:47 'f' (highp float)
|
||||||
0:48 move second child to first child (highp int)
|
0:47 Constant:
|
||||||
0:48 'f' (highp int)
|
0:47 3.000000
|
||||||
0:48 Constant:
|
0:49 move second child to first child (highp 4-component vector of float)
|
||||||
0:48 0 (const int)
|
0:49 'gl_Position' (invariant gl_Position highp 4-component vector of float)
|
||||||
0:48 Loop with condition tested first
|
0:49 Construct vec4 (highp 4-component vector of float)
|
||||||
0:48 Loop Condition
|
0:49 'f' (highp float)
|
||||||
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:51 Sequence
|
0:51 Sequence
|
||||||
0:51 move second child to first child (highp int)
|
0:51 Sequence
|
||||||
0:51 'x' (highp int)
|
0:51 move second child to first child (highp int)
|
||||||
0:51 Constant:
|
0:51 'f' (highp int)
|
||||||
0:51 1 (const int)
|
0:51 Constant:
|
||||||
0:53 Sequence
|
0:51 0 (const int)
|
||||||
0:53 Sequence
|
0:51 Loop with condition tested first
|
||||||
0:53 move second child to first child (highp float)
|
0:51 Loop Condition
|
||||||
0:53 'x' (highp float)
|
0:51 Compare Less Than (bool)
|
||||||
0:53 Constant:
|
0:51 'f' (highp int)
|
||||||
0:53 2.000000
|
0:51 Constant:
|
||||||
0:53 move second child to first child (highp float)
|
0:51 10 (const int)
|
||||||
0:53 'y' (highp float)
|
0:51 Loop Body
|
||||||
0:53 'x' (highp float)
|
0:52 Pre-Increment (highp int)
|
||||||
0:57 Sequence
|
0:52 'f' (highp int)
|
||||||
0:57 Sequence
|
0:51 Loop Terminal Expression
|
||||||
0:57 move second child to first child (highp int)
|
0:51 Pre-Increment (highp int)
|
||||||
0:57 'x' (highp int)
|
0:51 'f' (highp int)
|
||||||
0:57 'x' (highp int)
|
0:54 Sequence
|
||||||
0:65 Sequence
|
0:54 move second child to first child (highp int)
|
||||||
0:65 Sequence
|
0:54 'x' (highp int)
|
||||||
0:65 move second child to first child (structure{x})
|
0:54 Constant:
|
||||||
0:65 'S' (structure{x})
|
0:54 1 (const int)
|
||||||
0:65 Constant:
|
0:56 Sequence
|
||||||
0:65 0 (const int)
|
0:56 Sequence
|
||||||
0:66 x: direct index for structure (highp int)
|
0:56 move second child to first child (highp float)
|
||||||
0:66 'S' (structure{x})
|
0:56 'x' (highp float)
|
||||||
0:66 Constant:
|
0:56 Constant:
|
||||||
0:66 0 (const int)
|
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:? Linker Objects
|
||||||
0:? 'b' (bool)
|
0:? 'b' (bool)
|
||||||
0:? 'gl_VertexID' (gl_VertexId highp int)
|
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.
|
Warning, version 430 is not yet complete; some version-specific features are present, but many are missing.
|
||||||
ERROR: 0:5: 'a' : redefinition
|
ERROR: 0:5: 'a' : redefinition
|
||||||
ERROR: 0:17: 'b' : function name is redeclaration of existing name
|
ERROR: 0:17: 'b' : function name is redeclaration of existing name
|
||||||
ERROR: 0:19: 'f' : redefinition
|
ERROR: 0:20: 'c' : redefinition
|
||||||
ERROR: 0:54: 'z' : undeclared identifier
|
ERROR: 0:22: 'f' : redefinition
|
||||||
ERROR: 0:54: 'z' : redefinition
|
ERROR: 0:43: 'sin' : can't use function syntax on variable
|
||||||
ERROR: 5 compilation errors. No code generated.
|
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!
|
ERROR: node is still EOpNull!
|
||||||
@ -26,90 +29,94 @@ ERROR: node is still EOpNull!
|
|||||||
0:8 1.000000
|
0:8 1.000000
|
||||||
0:11 Branch: Return with expression
|
0:11 Branch: Return with expression
|
||||||
0:11 'a' (in int)
|
0:11 'a' (in int)
|
||||||
0:22 Function Definition: cos(f1; (float)
|
0:25 Function Definition: cos(f1; (float)
|
||||||
0:22 Function Parameters:
|
0:25 Function Parameters:
|
||||||
0:22 'x' (in float)
|
0:25 'x' (in float)
|
||||||
0:24 Sequence
|
0:27 Sequence
|
||||||
0:24 Branch: Return with expression
|
0:27 Branch: Return with expression
|
||||||
0:24 Constant:
|
0:27 Constant:
|
||||||
0:24 1.000000
|
0:27 1.000000
|
||||||
0:26 Function Definition: radians(b1; (bool)
|
0:29 Function Definition: radians(b1; (bool)
|
||||||
0:26 Function Parameters:
|
0:29 Function Parameters:
|
||||||
0:26 'x' (in bool)
|
0:29 'x' (in bool)
|
||||||
0:28 Sequence
|
0:31 Sequence
|
||||||
0:28 Branch: Return with expression
|
0:31 Branch: Return with expression
|
||||||
0:28 Constant:
|
0:31 Constant:
|
||||||
0:28 true (const bool)
|
0:31 true (const bool)
|
||||||
0:33 Function Definition: main( (void)
|
0:36 Function Definition: main( (void)
|
||||||
0:33 Function Parameters:
|
0:36 Function Parameters:
|
||||||
0:? Sequence
|
0:? Sequence
|
||||||
0:36 Function Call: g( (int)
|
0:39 Function Call: g( (int)
|
||||||
0:39 'sin' (float)
|
0:42 'sin' (float)
|
||||||
0:41 Function Call: f(i1;i1;i1; (int)
|
0:43 Constant:
|
||||||
0:41 Constant:
|
0:43 0.000000
|
||||||
0:41 1 (const int)
|
0:44 Function Call: f(i1;i1;i1; (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:44 Constant:
|
0:44 Constant:
|
||||||
0:44 3.000000
|
0:44 1 (const int)
|
||||||
0:46 move second child to first child (4-component vector of float)
|
0:44 Constant:
|
||||||
0:46 gl_Position: direct index for structure (invariant gl_Position 4-component vector of float)
|
0:44 2 (const int)
|
||||||
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:44 Constant:
|
||||||
0:46 Constant:
|
0:44 3 (const int)
|
||||||
0:46 0 (const uint)
|
0:47 move second child to first child (float)
|
||||||
0:46 Construct vec4 (4-component vector of float)
|
0:47 'f' (float)
|
||||||
0:46 'f' (float)
|
0:47 Constant:
|
||||||
0:48 Sequence
|
0:47 3.000000
|
||||||
0:48 Sequence
|
0:49 move second child to first child (4-component vector of float)
|
||||||
0:48 move second child to first child (int)
|
0:49 gl_Position: direct index for structure (invariant gl_Position 4-component vector of float)
|
||||||
0:48 'f' (int)
|
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:48 Constant:
|
0:49 Constant:
|
||||||
0:48 0 (const int)
|
0:49 0 (const uint)
|
||||||
0:48 Loop with condition tested first
|
0:49 Construct vec4 (4-component vector of float)
|
||||||
0:48 Loop Condition
|
0:49 'f' (float)
|
||||||
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:51 Sequence
|
0:51 Sequence
|
||||||
0:51 move second child to first child (int)
|
0:51 Sequence
|
||||||
0:51 'x' (int)
|
0:51 move second child to first child (int)
|
||||||
0:51 Constant:
|
0:51 'f' (int)
|
||||||
0:51 1 (const int)
|
0:51 Constant:
|
||||||
0:53 Sequence
|
0:51 0 (const int)
|
||||||
0:53 Sequence
|
0:51 Loop with condition tested first
|
||||||
0:53 move second child to first child (float)
|
0:51 Loop Condition
|
||||||
0:53 'x' (float)
|
0:51 Compare Less Than (bool)
|
||||||
0:53 Constant:
|
0:51 'f' (int)
|
||||||
0:53 2.000000
|
0:51 Constant:
|
||||||
0:53 move second child to first child (float)
|
0:51 10 (const int)
|
||||||
0:53 'y' (float)
|
0:51 Loop Body
|
||||||
0:53 'x' (float)
|
0:52 Pre-Increment (int)
|
||||||
0:57 Sequence
|
0:52 'f' (int)
|
||||||
0:57 Sequence
|
0:51 Loop Terminal Expression
|
||||||
0:57 move second child to first child (int)
|
0:51 Pre-Increment (int)
|
||||||
0:57 'x' (int)
|
0:51 'f' (int)
|
||||||
0:57 'x' (int)
|
0:54 Sequence
|
||||||
0:65 Sequence
|
0:54 move second child to first child (int)
|
||||||
0:65 Sequence
|
0:54 'x' (int)
|
||||||
0:65 move second child to first child (structure{x})
|
0:54 Constant:
|
||||||
0:65 'S' (structure{x})
|
0:54 1 (const int)
|
||||||
0:65 Constant:
|
0:56 Sequence
|
||||||
0:65 0 (const int)
|
0:56 Sequence
|
||||||
0:66 x: direct index for structure (int)
|
0:56 move second child to first child (float)
|
||||||
0:66 'S' (structure{x})
|
0:56 'x' (float)
|
||||||
0:66 Constant:
|
0:56 Constant:
|
||||||
0:66 0 (const int)
|
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:? Linker Objects
|
||||||
0:? 'b' (bool)
|
0:? 'b' (bool)
|
||||||
0:? 'tan' (float)
|
0:? 'tan' (float)
|
||||||
|
@ -45,6 +45,7 @@ switch.frag
|
|||||||
tokenLength.vert
|
tokenLength.vert
|
||||||
100Limits.vert
|
100Limits.vert
|
||||||
100scope.vert
|
100scope.vert
|
||||||
|
110scope.vert
|
||||||
300scope.vert
|
300scope.vert
|
||||||
400.frag
|
400.frag
|
||||||
420.vert
|
420.vert
|
||||||
|
@ -9,5 +9,5 @@
|
|||||||
// source have to figure out how to create revision.h just to get a build
|
// 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.
|
// going. However, if it is not updated, it can be a version behind.
|
||||||
|
|
||||||
#define GLSLANG_REVISION "24420"
|
#define GLSLANG_REVISION "24468"
|
||||||
#define GLSLANG_DATE "2013/12/09 17:25:14"
|
#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;
|
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)
|
if (profile == EEsProfile || version < 120)
|
||||||
function = findFunctionExact(loc, call, builtIn);
|
function = findFunctionExact(loc, call, builtIn);
|
||||||
else if (version < 400)
|
else if (version < 400)
|
||||||
|
@ -170,6 +170,8 @@ void InitializeStageSymbolTable(TBuiltIns& builtIns, int version, EProfile profi
|
|||||||
IdentifyBuiltIns(version, profile, language, *symbolTables[language]);
|
IdentifyBuiltIns(version, profile, language, *symbolTables[language]);
|
||||||
if (profile == EEsProfile && version >= 300)
|
if (profile == EEsProfile && version >= 300)
|
||||||
(*symbolTables[language]).setNoBuiltInRedeclarations();
|
(*symbolTables[language]).setNoBuiltInRedeclarations();
|
||||||
|
if (version == 110)
|
||||||
|
(*symbolTables[language]).setSeparateNameSpaces();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -322,11 +322,11 @@ TSymbolTableLevel* TSymbolTableLevel::clone() const
|
|||||||
TVariable* container = anon->getAnonContainer().clone();
|
TVariable* container = anon->getAnonContainer().clone();
|
||||||
container->changeName(NewPoolTString(""));
|
container->changeName(NewPoolTString(""));
|
||||||
// insert the whole container
|
// insert the whole container
|
||||||
symTableLevel->insert(*container);
|
symTableLevel->insert(*container, false);
|
||||||
containerCopied[anon->getAnonId()] = true;
|
containerCopied[anon->getAnonId()] = true;
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
symTableLevel->insert(*iter->second->clone());
|
symTableLevel->insert(*iter->second->clone(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
return symTableLevel;
|
return symTableLevel;
|
||||||
@ -338,6 +338,7 @@ void TSymbolTable::copyTable(const TSymbolTable& copyOf)
|
|||||||
|
|
||||||
uniqueId = copyOf.uniqueId;
|
uniqueId = copyOf.uniqueId;
|
||||||
noBuiltInRedeclarations = copyOf.noBuiltInRedeclarations;
|
noBuiltInRedeclarations = copyOf.noBuiltInRedeclarations;
|
||||||
|
separateNameSpaces = copyOf.separateNameSpaces;
|
||||||
for (unsigned int i = copyOf.adoptedLevels; i < copyOf.table.size(); ++i)
|
for (unsigned int i = copyOf.adoptedLevels; i < copyOf.table.size(); ++i)
|
||||||
table.push_back(copyOf.table[i]->clone());
|
table.push_back(copyOf.table[i]->clone());
|
||||||
}
|
}
|
||||||
|
@ -283,7 +283,7 @@ public:
|
|||||||
TSymbolTableLevel() : defaultPrecision(0), anonId(0) { }
|
TSymbolTableLevel() : defaultPrecision(0), anonId(0) { }
|
||||||
~TSymbolTableLevel();
|
~TSymbolTableLevel();
|
||||||
|
|
||||||
bool insert(TSymbol& symbol)
|
bool insert(TSymbol& symbol, bool separateNameSpaces)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// returning true means symbol was added to the table with no semantic errors
|
// returning true means symbol was added to the table with no semantic errors
|
||||||
@ -316,7 +316,7 @@ public:
|
|||||||
const TString& insertName = symbol.getMangledName();
|
const TString& insertName = symbol.getMangledName();
|
||||||
if (symbol.getAsFunction()) {
|
if (symbol.getAsFunction()) {
|
||||||
// make sure there isn't a variable of this name
|
// 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;
|
return false;
|
||||||
|
|
||||||
// insert, and whatever happens is okay
|
// insert, and whatever happens is okay
|
||||||
@ -367,6 +367,34 @@ public:
|
|||||||
return false;
|
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
|
// 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
|
// 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,
|
// when no push was needed. Thus, it is not the current defaults,
|
||||||
@ -415,7 +443,7 @@ protected:
|
|||||||
|
|
||||||
class TSymbolTable {
|
class TSymbolTable {
|
||||||
public:
|
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.
|
// This symbol table cannot be used until push() is called.
|
||||||
@ -438,6 +466,7 @@ public:
|
|||||||
}
|
}
|
||||||
uniqueId = symTable.uniqueId;
|
uniqueId = symTable.uniqueId;
|
||||||
noBuiltInRedeclarations = symTable.noBuiltInRedeclarations;
|
noBuiltInRedeclarations = symTable.noBuiltInRedeclarations;
|
||||||
|
separateNameSpaces = symTable.separateNameSpaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -459,6 +488,7 @@ public:
|
|||||||
bool atGlobalLevel() { return isGlobalLevel(currentLevel()); }
|
bool atGlobalLevel() { return isGlobalLevel(currentLevel()); }
|
||||||
|
|
||||||
void setNoBuiltInRedeclarations() { noBuiltInRedeclarations = true; }
|
void setNoBuiltInRedeclarations() { noBuiltInRedeclarations = true; }
|
||||||
|
void setSeparateNameSpaces() { separateNameSpaces = true; }
|
||||||
|
|
||||||
void push()
|
void push()
|
||||||
{
|
{
|
||||||
@ -477,7 +507,7 @@ public:
|
|||||||
symbol.setUniqueId(++uniqueId);
|
symbol.setUniqueId(++uniqueId);
|
||||||
|
|
||||||
// make sure there isn't a function of this variable name
|
// 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;
|
return false;
|
||||||
|
|
||||||
// check for not overloading or redefining a built-in function
|
// 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* copyUp(TSymbol* shared)
|
||||||
{
|
{
|
||||||
TSymbol* copy = copyUpDeferredInsert(shared);
|
TSymbol* copy = copyUpDeferredInsert(shared);
|
||||||
table[globalLevel]->insert(*copy);
|
table[globalLevel]->insert(*copy, separateNameSpaces);
|
||||||
if (shared->getAsVariable())
|
if (shared->getAsVariable())
|
||||||
return copy;
|
return copy;
|
||||||
else {
|
else {
|
||||||
// get copy of an anonymous member's container
|
// 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 the copy of the anonymous member
|
||||||
return table[currentLevel()]->find(shared->getName());
|
return table[currentLevel()]->find(shared->getName());
|
||||||
}
|
}
|
||||||
@ -545,6 +575,23 @@ public:
|
|||||||
return symbol;
|
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)
|
void findFunctionNameList(const TString& name, TVector<TFunction*>& list, bool& builtIn)
|
||||||
{
|
{
|
||||||
// For user levels, return the set found in the first scope with a match
|
// For user levels, return the set found in the first scope with a match
|
||||||
@ -606,6 +653,7 @@ protected:
|
|||||||
std::vector<TSymbolTableLevel*> table;
|
std::vector<TSymbolTableLevel*> table;
|
||||||
int uniqueId; // for unique identification in code generation
|
int uniqueId; // for unique identification in code generation
|
||||||
bool noBuiltInRedeclarations;
|
bool noBuiltInRedeclarations;
|
||||||
|
bool separateNameSpaces;
|
||||||
unsigned int adoptedLevels;
|
unsigned int adoptedLevels;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit)
|
|||||||
else if (vertices != unit.vertices)
|
else if (vertices != unit.vertices)
|
||||||
error(infoSink, "Contradictory layout max_vertices values");
|
error(infoSink, "Contradictory layout max_vertices values");
|
||||||
|
|
||||||
if (vertexSpacing == ElgNone)
|
if (vertexSpacing == EvsNone)
|
||||||
vertexSpacing = unit.vertexSpacing;
|
vertexSpacing = unit.vertexSpacing;
|
||||||
else if (vertexSpacing != unit.vertexSpacing)
|
else if (vertexSpacing != unit.vertexSpacing)
|
||||||
error(infoSink, "Contradictory input vertex spacing");
|
error(infoSink, "Contradictory input vertex spacing");
|
||||||
|
Loading…
Reference in New Issue
Block a user