MCPcopy Create free account
hub / github.com/KhronosGroup/glslang / tokenize

Method tokenize

glslang/MachineIndependent/Scan.cpp:832–941  ·  view source on GitHub ↗

Called by yylex to get the next token. Returning 0 implies end of input.

Source from the content-addressed store, hash-verified

830// Called by yylex to get the next token.
831// Returning 0 implies end of input.
832int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
833{
834 do {
835 parserToken = &token;
836 TPpToken ppToken;
837 int token = pp->tokenize(ppToken);
838 if (token == EndOfInput)
839 return 0;
840
841 tokenText = ppToken.name;
842 loc = ppToken.loc;
843 parserToken->sType.lex.loc = loc;
844 switch (token) {
845 case ';': afterType = false; afterBuffer = false; inDeclaratorList = false; afterDeclarator = false; angleBracketDepth = 0; squareBracketDepth = 0; parenDepth = 0; return SEMICOLON;
846 case ',':
847 // If we just processed a declarator (identifier after a type), this comma
848 // indicates that we're in a declarator list. Note that 'afterDeclarator' is
849 // only set when we are not inside a template parameter list, array expression,
850 // or function parameter list.
851 if (afterDeclarator) {
852 inDeclaratorList = true;
853 }
854 afterType = false;
855 afterDeclarator = false;
856 return COMMA;
857 case ':': return COLON;
858 case '=': afterType = false; inDeclaratorList = false; afterDeclarator = false; return EQUAL;
859 case '(': afterType = false; inDeclaratorList = false; afterDeclarator = false; parenDepth++; return LEFT_PAREN;
860 case ')': afterType = false; inDeclaratorList = false; afterDeclarator = false; if (parenDepth > 0) parenDepth--; return RIGHT_PAREN;
861 case '.': field = true; return DOT;
862 case '!': return BANG;
863 case '-': return DASH;
864 case '~': return TILDE;
865 case '+': return PLUS;
866 case '*': return STAR;
867 case '/': return SLASH;
868 case '%': return PERCENT;
869 case '<': angleBracketDepth++; return LEFT_ANGLE;
870 case '>': if (angleBracketDepth > 0) angleBracketDepth--; return RIGHT_ANGLE;
871 case '|': return VERTICAL_BAR;
872 case '^': return CARET;
873 case '&': return AMPERSAND;
874 case '?': return QUESTION;
875 case '[': squareBracketDepth++; return LEFT_BRACKET;
876 case ']': if (squareBracketDepth > 0) squareBracketDepth--; return RIGHT_BRACKET;
877 case '{': afterStruct = false; afterBuffer = false; inDeclaratorList = false; afterDeclarator = false; angleBracketDepth = 0; squareBracketDepth = 0; parenDepth = 0; return LEFT_BRACE;
878 case '}': inDeclaratorList = false; afterDeclarator = false; angleBracketDepth = 0; squareBracketDepth = 0; parenDepth = 0; return RIGHT_BRACE;
879 case '\\':
880 parseContext.error(loc, "illegal use of escape character", "\\", "");
881 break;
882
883 case PPAtomAddAssign: return ADD_ASSIGN;
884 case PPAtomSubAssign: return SUB_ASSIGN;
885 case PPAtomMulAssign: return MUL_ASSIGN;
886 case PPAtomDivAssign: return DIV_ASSIGN;
887 case PPAtomModAssign: return MOD_ASSIGN;
888
889 case PpAtomRight: return RIGHT_OP;

Callers 2

yylexFunction · 0.45
operator()Method · 0.45

Calls 2

NewPoolTStringFunction · 0.85
errorMethod · 0.45

Tested by

no test coverage detected