/src/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp
Line | Count | Source |
1 | | // |
2 | | // Copyright (C) 2002-2005 3Dlabs Inc. Ltd. |
3 | | // Copyright (C) 2013 LunarG, Inc. |
4 | | // Copyright (C) 2015-2018 Google, Inc. |
5 | | // All rights reserved. |
6 | | // |
7 | | // Redistribution and use in source and binary forms, with or without |
8 | | // modification, are permitted provided that the following conditions |
9 | | // are met: |
10 | | // |
11 | | // Redistributions of source code must retain the above copyright |
12 | | // notice, this list of conditions and the following disclaimer. |
13 | | // |
14 | | // Redistributions in binary form must reproduce the above |
15 | | // copyright notice, this list of conditions and the following |
16 | | // disclaimer in the documentation and/or other materials provided |
17 | | // with the distribution. |
18 | | // |
19 | | // Neither the name of 3Dlabs Inc. Ltd. nor the names of its |
20 | | // contributors may be used to endorse or promote products derived |
21 | | // from this software without specific prior written permission. |
22 | | // |
23 | | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
24 | | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
25 | | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
26 | | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
27 | | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
28 | | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
29 | | // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
30 | | // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
31 | | // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
32 | | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
33 | | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
34 | | // POSSIBILITY OF SUCH DAMAGE. |
35 | | // |
36 | | /****************************************************************************\ |
37 | | Copyright (c) 2002, NVIDIA Corporation. |
38 | | |
39 | | NVIDIA Corporation("NVIDIA") supplies this software to you in |
40 | | consideration of your agreement to the following terms, and your use, |
41 | | installation, modification or redistribution of this NVIDIA software |
42 | | constitutes acceptance of these terms. If you do not agree with these |
43 | | terms, please do not use, install, modify or redistribute this NVIDIA |
44 | | software. |
45 | | |
46 | | In consideration of your agreement to abide by the following terms, and |
47 | | subject to these terms, NVIDIA grants you a personal, non-exclusive |
48 | | license, under NVIDIA's copyrights in this original NVIDIA software (the |
49 | | "NVIDIA Software"), to use, reproduce, modify and redistribute the |
50 | | NVIDIA Software, with or without modifications, in source and/or binary |
51 | | forms; provided that if you redistribute the NVIDIA Software, you must |
52 | | retain the copyright notice of NVIDIA, this notice and the following |
53 | | text and disclaimers in all such redistributions of the NVIDIA Software. |
54 | | Neither the name, trademarks, service marks nor logos of NVIDIA |
55 | | Corporation may be used to endorse or promote products derived from the |
56 | | NVIDIA Software without specific prior written permission from NVIDIA. |
57 | | Except as expressly stated in this notice, no other rights or licenses |
58 | | express or implied, are granted by NVIDIA herein, including but not |
59 | | limited to any patent rights that may be infringed by your derivative |
60 | | works or by other works in which the NVIDIA Software may be |
61 | | incorporated. No hardware is licensed hereunder. |
62 | | |
63 | | THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT |
64 | | WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, |
65 | | INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, |
66 | | NON-INFRINGEMENT, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR |
67 | | ITS USE AND OPERATION EITHER ALONE OR IN COMBINATION WITH OTHER |
68 | | PRODUCTS. |
69 | | |
70 | | IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, |
71 | | INCIDENTAL, EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED |
72 | | TO, LOST PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
73 | | USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY |
74 | | OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE |
75 | | NVIDIA SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, |
76 | | TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF |
77 | | NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
78 | | \****************************************************************************/ |
79 | | |
80 | | #include <cstdlib> |
81 | | #include <locale> |
82 | | |
83 | | #include "PpContext.h" |
84 | | |
85 | | namespace glslang { |
86 | | |
87 | | TPpContext::TPpContext(TParseContextBase& pc, const std::string& rootFileName, TShader::Includer& inclr) : |
88 | 612 | preamble(nullptr), strings(nullptr), previous_token('\n'), parseContext(pc), includer(inclr), inComment(false), |
89 | 612 | rootFileName(rootFileName), |
90 | 612 | currentSourceFile(rootFileName), |
91 | 612 | disableEscapeSequences(false), |
92 | 612 | inElseSkip(false) |
93 | 612 | { |
94 | 612 | ifdepth = 0; |
95 | 41.0k | for (elsetracker = 0; elsetracker <= maxIfNesting; elsetracker++) |
96 | 40.3k | elseSeen[elsetracker] = false; |
97 | 612 | elsetracker = 0; |
98 | | |
99 | 612 | strtodStream.imbue(std::locale::classic()); |
100 | 612 | } |
101 | | |
102 | | TPpContext::~TPpContext() |
103 | 612 | { |
104 | 612 | delete [] preamble; |
105 | | |
106 | | // free up the inputStack |
107 | 619 | while (! inputStack.empty()) |
108 | 7 | popInput(); |
109 | 612 | } |
110 | | |
111 | | void TPpContext::setInput(TInputScanner& input, bool versionWillBeError) |
112 | 282 | { |
113 | 282 | assert(inputStack.size() == 0); |
114 | | |
115 | 282 | pushInput(new tStringInput(this, input)); |
116 | | |
117 | 282 | errorOnVersion = versionWillBeError; |
118 | 282 | versionSeen = false; |
119 | 282 | } |
120 | | |
121 | | } // end namespace glslang |