diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h index d578719a..6076a34d 100644 --- a/glslang/Include/Common.h +++ b/glslang/Include/Common.h @@ -190,6 +190,13 @@ inline const TString String(const int i, const int base = 10) struct TSourceLoc { void init() { name = nullptr; string = 0; line = 0; column = 0; } + // Returns the name if it exists. Otherwise, returns the string number. + std::string getStringNameOrNum(bool quoteStringName = true) const + { + if (name != nullptr) + return quoteStringName ? ("\"" + std::string(name) + "\"") : name; + return std::to_string(string); + } const char* name; // descriptive name for this string int string; int line; diff --git a/glslang/Include/InfoSink.h b/glslang/Include/InfoSink.h index 61f0cd60..a321ebcc 100644 --- a/glslang/Include/InfoSink.h +++ b/glslang/Include/InfoSink.h @@ -98,12 +98,8 @@ public: void location(const TSourceLoc& loc) { const int maxSize = 24; char locText[maxSize]; - if (loc.name != nullptr) { - append(loc.name); - snprintf(locText, maxSize, ":%d", loc.line); - } else { - snprintf(locText, maxSize, "%d:%d", loc.string, loc.line); - } + snprintf(locText, maxSize, ":%d", loc.line); + append(loc.getStringNameOrNum(false).c_str()); append(locText); append(": "); } diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp index df2de58b..63dede79 100644 --- a/glslang/MachineIndependent/preprocessor/Pp.cpp +++ b/glslang/MachineIndependent/preprocessor/Pp.cpp @@ -620,13 +620,7 @@ int TPpContext::CPPinclude(TPpToken* ppToken) std::ostringstream content; content << "#line " << forNextLine << " " << "\"" << sourceName << "\"\n"; content << replacement << (replacement.back() == '\n' ? "" : "\n"); - content << "#line " << directiveLoc.line + forNextLine << " "; - if (directiveLoc.name != nullptr) { - content << "\"" << directiveLoc.name << "\""; - } else { - content << directiveLoc.string; - } - content << "\n"; + content << "#line " << directiveLoc.line + forNextLine << " " << directiveLoc.getStringNameOrNum() << "\n"; pushInput(new TokenizableString(directiveLoc, content.str(), this)); } // At EOF, there's no "current" location anymore. @@ -1015,13 +1009,9 @@ int TPpContext::MacroExpand(int atom, TPpToken* ppToken, bool expandUndef, bool return 1; case PpAtomFileMacro: { - if (const char* current_file = parseContext.getCurrentLoc().name) { + if (parseContext.getCurrentLoc().name) parseContext.ppRequireExtensions(ppToken->loc, 1, &E_GL_GOOGLE_cpp_style_line_directive, "filename-based __FILE__"); - sprintf(ppToken->name, "\"%s\"", current_file); - } else { - ppToken->ival = parseContext.getCurrentLoc().string; - sprintf(ppToken->name, "%d", ppToken->ival); - } + sprintf(ppToken->name, "%s", ppToken->loc.getStringNameOrNum().c_str()); UngetToken(PpAtomConstInt, ppToken); return 1; }