1 // 2 //Copyright (C) 2013 LunarG, Inc. 3 // 4 //All rights reserved. 5 // 6 //Redistribution and use in source and binary forms, with or without 7 //modification, are permitted provided that the following conditions 8 //are met: 9 // 10 // Redistributions of source code must retain the above copyright 11 // notice, this list of conditions and the following disclaimer. 12 // 13 // Redistributions in binary form must reproduce the above 14 // copyright notice, this list of conditions and the following 15 // disclaimer in the documentation and/or other materials provided 16 // with the distribution. 17 // 18 // Neither the name of 3Dlabs Inc. Ltd. nor the names of its 19 // contributors may be used to endorse or promote products derived 20 // from this software without specific prior written permission. 21 // 22 //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23 //"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24 //LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 25 //FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 26 //COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 27 //INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 28 //BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 29 //LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 30 //CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 //LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 32 //ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33 //POSSIBILITY OF SUCH DAMAGE. 34 // 35 36 // 37 // This holds context specific to the GLSL scanner, which 38 // sits between the preprocessor scanner and parser. 39 // 40 41 #include "ParseHelper.h" 42 43 namespace glslang { 44 45 class TPpContext; 46 class TPpToken; 47 class TParserToken; 48 49 class TScanContext { 50 public: 51 explicit TScanContext(TParseContextBase& pc) : parseContext(pc), afterType(false), field(false) { } 52 virtual ~TScanContext() { } 53 54 static void fillInKeywordMap(); 55 static void deleteKeywordMap(); 56 57 int tokenize(TPpContext*, TParserToken&); 58 59 protected: 60 TScanContext(TScanContext&); 61 TScanContext& operator=(TScanContext&); 62 63 int tokenizeIdentifier(); 64 int identifierOrType(); 65 int reservedWord(); 66 int identifierOrReserved(bool reserved); 67 int es30ReservedFromGLSL(int version); 68 int nonreservedKeyword(int esVersion, int nonEsVersion); 69 int precisionKeyword(); 70 int matNxM(); 71 int dMat(); 72 int firstGenerationImage(bool inEs310); 73 int secondGenerationImage(); 74 75 TParseContextBase& parseContext; 76 bool afterType; // true if we've recognized a type, so can only be looking for an identifier 77 bool field; // true if we're on a field, right after a '.' 78 TSourceLoc loc; 79 TParserToken* parserToken; 80 TPpToken* ppToken; 81 82 const char* tokenText; 83 int keyword; 84 }; 85 86 } // end namespace glslang 87