From: John Kessenich Date: Tue, 12 Nov 2013 22:01:32 +0000 (+0000) Subject: Fix line-continuation bug. X-Git-Tag: upstream/0.1~842 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=029d746bad818aa8d212188c09983b15ab8c0822;p=platform%2Fupstream%2Fglslang.git Fix line-continuation bug. git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@24021 e7fa87d3-cd2b-0410-9028-fcbf551c1848 --- diff --git a/Test/baseResults/lineContinuation.vert.out b/Test/baseResults/lineContinuation.vert.out index b66a25f..6c61ad8 100644 --- a/Test/baseResults/lineContinuation.vert.out +++ b/Test/baseResults/lineContinuation.vert.out @@ -11,6 +11,16 @@ ERROR: node is still EOpNull! 0:20 'gl_Position' (gl_Position highp 4-component vector of float) 0:20 Construct vec4 (highp 4-component vector of float) 0:20 'foo' (highp float) +0:22 Function Definition: foo2(vf4; (highp 4-component vector of float) +0:22 Function Parameters: +0:22 'a' (in highp 4-component vector of float) +0:24 Sequence +0:24 Sequence +0:24 move second child to first child (highp 4-component vector of float) +0:24 'b' (highp 4-component vector of float) +0:24 'a' (in highp 4-component vector of float) +0:25 Branch: Return with expression +0:25 'b' (highp 4-component vector of float) 0:? Linker Objects 0:? 'foo' (highp float) 0:? 'gl_VertexID' (gl_VertexId highp int) diff --git a/Test/baseResults/lineContinuation100.vert.out b/Test/baseResults/lineContinuation100.vert.out index 640dbee..9b890c5 100644 --- a/Test/baseResults/lineContinuation100.vert.out +++ b/Test/baseResults/lineContinuation100.vert.out @@ -6,7 +6,8 @@ ERROR: 0:13: 'line continuation' : not supported for this version or the enabled ERROR: 0:14: 'line continuation' : not supported for this version or the enabled extensions ERROR: 0:15: 'line continuation' : not supported for this version or the enabled extensions ERROR: 0:18: '#error' : e3 -ERROR: 8 compilation errors. No code generated. +ERROR: 0:24: 'line continuation' : not supported for this version or the enabled extensions +ERROR: 9 compilation errors. No code generated. ERROR: node is still EOpNull! 0:20 Function Definition: main( (void) @@ -16,6 +17,16 @@ ERROR: node is still EOpNull! 0:20 'gl_Position' (gl_Position highp 4-component vector of float) 0:20 Construct vec4 (highp 4-component vector of float) 0:20 'foo' (highp float) +0:22 Function Definition: foo2(vf4; (highp 4-component vector of float) +0:22 Function Parameters: +0:22 'a' (in highp 4-component vector of float) +0:24 Sequence +0:24 Sequence +0:24 move second child to first child (highp 4-component vector of float) +0:24 'b' (highp 4-component vector of float) +0:24 'a' (in highp 4-component vector of float) +0:25 Branch: Return with expression +0:25 'b' (highp 4-component vector of float) 0:? Linker Objects 0:? 'foo' (highp float) diff --git a/Test/lineContinuation.vert b/Test/lineContinuation.vert index eb2f819..1115027 100644 --- a/Test/lineContinuation.vert +++ b/Test/lineContinuation.vert @@ -11,10 +11,16 @@ oo; // same as 'float foo;' #error e2 #define MAIN void main() \ -{ \ + { \ gl_Position = vec4(foo); \ } #error e3 MAIN + +vec4 foo2(vec4 a) +{ + vec4 b = a; \ + return b; +} diff --git a/Test/lineContinuation100.vert b/Test/lineContinuation100.vert index 0b0cc30..ec1d862 100644 --- a/Test/lineContinuation100.vert +++ b/Test/lineContinuation100.vert @@ -11,10 +11,16 @@ oo; // same as 'float foo;' #error e2 #define MAIN void main() \ -{ \ + { \ gl_Position = vec4(foo); \ } #error e3 MAIN + +vec4 foo2(vec4 a) +{ + vec4 b = a; \ + return b; +} diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp index 2f6fd24..dc1692b 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -90,7 +90,7 @@ bool TInputScanner::consumeComment() break; } else { // it's a '\', so we need to keep going, after skipping what's escaped - + // read the skipped character c = get(); diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp index aed147c..0b9a09c 100644 --- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp +++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp @@ -256,10 +256,9 @@ int TPpContext::sourceScan(TPpContext* pp, InputSrc*, TPpToken* ppToken) int len, ch, ii; unsigned ival = 0; + ppToken->ival = 0; + ch = pp->currentInput->getch(pp, pp->currentInput, ppToken); for (;;) { - ppToken->ival = 0; - ch = pp->currentInput->getch(pp, pp->currentInput, ppToken); - while (ch == ' ' || ch == '\t' || ch == '\r') { ppToken->ival = 1; ch = pp->currentInput->getch(pp, pp->currentInput, ppToken); @@ -281,7 +280,7 @@ int TPpContext::sourceScan(TPpContext* pp, InputSrc*, TPpToken* ppToken) case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': - case 'z': + case 'z': case '\\' : do { if (ch == '\\') { // escaped character @@ -311,6 +310,10 @@ int TPpContext::sourceScan(TPpContext* pp, InputSrc*, TPpToken* ppToken) ch == '_' || ch == '\\'); + // line continuation with no token before or after makes len == 0, and need to start over skipping white space, etc. + if (len == 0) + continue; + tokenText[len] = '\0'; pp->currentInput->ungetch(pp, pp->currentInput, ch, ppToken); ppToken->atom = pp->LookUpAddString(tokenText); @@ -706,6 +709,9 @@ int TPpContext::sourceScan(TPpContext* pp, InputSrc*, TPpToken* ppToken) return CPP_ERROR_SY; } } + + ppToken->ival = 0; + ch = pp->currentInput->getch(pp, pp->currentInput, ppToken); } }