4249{
4252 YY_EXTRA_TYPE state = preYYget_extra(
p->yyscanner);
4253 struct yyguts_t *yyg = (
struct yyguts_t*)
p->yyscanner;
4254
4255#ifdef FLEX_DEBUG
4257#endif
4258
4260
4261
4262
4266 state->curlyCount=0;
4267 state->lexRulesPart=false;
4268 state->nospaces=
FALSE;
4269 state->inputBuf=&input;
4270 state->inputBufPos=0;
4271 state->outputBuf=&output;
4272 state->includeStack.clear();
4273 state->expandedDict.clear();
4274 state->contextDefines.clear();
4275 state->pragmaSet.clear();
4276 state->condGuardCount=0;
4277 state->condGuardErrorLine=0;
4278 while (!state->levelGuard.empty()) state->levelGuard.pop();
4279 while (!state->condStack.empty()) state->condStack.pop();
4280
4282
4283 state->inputFileDef = state->yyFileDef;
4284
4285
4287
4288 state->yyLineNr = 1;
4289 state->yyColNr = 1;
4290 state->ifcount = 0;
4291
4292 BEGIN( Start );
4293
4294 state->expectGuard =
guessSection(fileName).isHeader();
4295 state->guardName.clear();
4296 state->lastGuardName.clear();
4297 state->guardExpr.clear();
4298
4299 preYYlex(yyscanner);
4300
4301 while (!state->condStack.empty())
4302 {
4303 const std::unique_ptr<preYY_CondCtx> &ctx = state->condStack.top();
4304 QCString sectionInfo = " ";
4305 if (ctx->sectionId!=
" ") sectionInfo.
sprintf(
" with label '%s' ",
qPrint(ctx->sectionId.stripWhiteSpace()));
4306 warn(ctx->fileName,ctx->lineNr,
"Conditional section{}does not have "
4307 "a corresponding \\endcond command within this file.",sectionInfo);
4308 state->condStack.pop();
4309 }
4310
4312
4313 if (!state->levelGuard.empty())
4314 {
4315 if (yyextra->condGuardErrorLine!=0)
4316 {
4317 warn(yyextra->condGuardErrorFileName,yyextra->condGuardErrorLine,
"{}",yyextra->condGuardErrorMessage);
4318 }
4319 else
4320 {
4321 warn(state->fileName,state->yyLineNr,
"More #if's than #endif's found (might be in an included file).");
4322 }
4323 }
4324
4326 {
4329 std::string contents;
4331 {
4332 contents=output;
4333 }
4334 else
4335 {
4336 int line=1;
4337 bool startOfLine = true;
4338 size_t content_size = output.size() +
4339 output.size()*6/40;
4340
4341 contents.reserve(content_size);
4342 size_t pos=0;
4343 while (pos<output.size())
4344 {
4345 if (startOfLine)
4346 {
4347 char lineNrStr[15];
4348 snprintf(lineNrStr,15,"%05d ",line++);
4349 contents+=lineNrStr;
4350 }
4351 contents += output[pos];
4352 startOfLine = output[pos]=='\n';
4353 pos++;
4354 }
4355 }
4357 if (!contents.empty() && contents[contents.length()-1]!='\n')
4358 {
4360 }
4362 if (yyextra->contextDefines.size()>0)
4363 {
4366 for (auto &kv : yyextra->contextDefines)
4367 {
4369 }
4370 for (auto &kv : yyextra->localDefines)
4371 {
4373 }
4375 }
4376 else
4377 {
4379 }
4380 }
4381
4382 {
4384 for (const auto &inc : state->includeRelations)
4385 {
4386 auto toKind = [](
bool local,
bool imported) ->
IncludeKind
4387 {
4388 if (local)
4389 {
4390 if (imported)
4391 {
4393 }
4395 }
4396 else if (imported)
4397 {
4399 }
4401 };
4402 if (inc->fromFileDef)
4403 {
4404 inc->fromFileDef->addIncludeDependency(inc->toFileDef,inc->includeName,toKind(inc->local,inc->imported));
4405 }
4406 if (inc->toFileDef && inc->fromFileDef)
4407 {
4408 inc->toFileDef->addIncludedByDependency(inc->fromFileDef,inc->fromFileDef->docName(),toKind(inc->local,inc->imported));
4409 }
4410 }
4411
4413 }
4414
4415
4416}
static bool isFlagSet(const DebugMask mask)
static void print(DebugMask mask, int prio, fmt::format_string< Args... > fmt, Args &&... args)
static DefinesPerFileList macroDefinitions
QCString & sprintf(const char *format,...)
#define Config_getBool(name)
DirIterator end(const DirIterator &) noexcept
#define warn(file, line, fmt,...)
static void initPredefined(yyscan_t yyscanner, const QCString &fileName)
static void setFileName(yyscan_t yyscanner, const QCString &name)
static void forceEndCondSection(yyscan_t yyscanner)
static std::mutex g_updateGlobals
static std::mutex g_debugMutex
const char * qPrint(const char *s)
EntryType guessSection(const QCString &name)