bool Preprocessor::HandleToken(size_t line_no, const std::string & line){ Tokenizer tok; tok.set_input(line); if (tok.next_token() != "#"){ return false; } if (!tok.next_token()){ return false; } if (tok == "section"){ return HandleSection(line_no, tok); } if (limitSection == "" || currentSection == limitSection){ if (tok == "version"){ return HandleVersion(line_no, tok); } if (tok == "pragma"){ return HandlePragma(line_no, tok); } if (tok == "include"){ return HandleInclude(line_no, tok); } } return false; }
static int CPPpragma(yystypepp * yylvalpp) { char SrcStrName[2]; char** allTokens; int tokenCount = 0; int maxTokenCount = 10; const char* SrcStr; int i; int token = cpp->currentInput->scan(cpp->currentInput, yylvalpp); if (token=='\n') { DecLineNumber(); CPPErrorToInfoLog("#pragma"); IncLineNumber(); return token; } allTokens = (char**)malloc(sizeof(char*) * maxTokenCount); while (token != '\n') { if (tokenCount >= maxTokenCount) { maxTokenCount *= 2; allTokens = (char**)realloc((char**)allTokens, sizeof(char*) * maxTokenCount); } switch (token) { case CPP_IDENTIFIER: SrcStr = GetAtomString(atable, yylvalpp->sc_ident); allTokens[tokenCount] = (char*)malloc(strlen(SrcStr) + 1); strcpy(allTokens[tokenCount++], SrcStr); break; case CPP_INTCONSTANT: SrcStr = yylvalpp->symbol_name; allTokens[tokenCount] = (char*)malloc(strlen(SrcStr) + 1); strcpy(allTokens[tokenCount++], SrcStr); break; case CPP_FLOATCONSTANT: SrcStr = yylvalpp->symbol_name; allTokens[tokenCount] = (char*)malloc(strlen(SrcStr) + 1); strcpy(allTokens[tokenCount++], SrcStr); break; case -1: // EOF CPPShInfoLogMsg("#pragma directive must end with a newline"); goto freeMemoryAndReturnToken; default: SrcStrName[0] = token; SrcStrName[1] = '\0'; allTokens[tokenCount] = (char*)malloc(2); strcpy(allTokens[tokenCount++], SrcStrName); } token = cpp->currentInput->scan(cpp->currentInput, yylvalpp); } HandlePragma((const char**)allTokens, tokenCount); freeMemoryAndReturnToken: for (i = 0; i < tokenCount; ++i) { free (allTokens[i]); } free (allTokens); return token; } // CPPpragma