mirror of
https://github.com/libretro/RetroArch
synced 2025-04-18 14:42:30 +00:00
(glslang) Further simplifications of InfoSink - get rid of message() and prefix() -
we want simple string concatenation/addition instead of all these layers
This commit is contained in:
parent
a2e525a1b6
commit
a176a935da
17
deps/glslang/glslang/glslang/Include/InfoSink.h
vendored
17
deps/glslang/glslang/glslang/Include/InfoSink.h
vendored
@ -76,17 +76,6 @@ public:
|
|||||||
TInfoSinkBase& operator<<(const TString& t) { append(t); return *this; }
|
TInfoSinkBase& operator<<(const TString& t) { append(t); return *this; }
|
||||||
TInfoSinkBase& operator+(const char* s) { append(s); return *this; }
|
TInfoSinkBase& operator+(const char* s) { append(s); return *this; }
|
||||||
const char* c_str() const { return sink.c_str(); }
|
const char* c_str() const { return sink.c_str(); }
|
||||||
void prefix(TPrefixType message) {
|
|
||||||
switch(message) {
|
|
||||||
case EPrefixNone: break;
|
|
||||||
case EPrefixWarning: append("WARNING: "); break;
|
|
||||||
case EPrefixError: append("ERROR: "); break;
|
|
||||||
case EPrefixInternalError: append("INTERNAL ERROR: "); break;
|
|
||||||
case EPrefixUnimplemented: append("UNIMPLEMENTED: "); break;
|
|
||||||
case EPrefixNote: append("NOTE: "); break;
|
|
||||||
default: append("UNKNOWN ERROR: "); break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void location(const TSourceLoc& loc) {
|
void location(const TSourceLoc& loc) {
|
||||||
char locText[24];
|
char locText[24];
|
||||||
snprintf(locText, 24, ":%d", loc.line);
|
snprintf(locText, 24, ":%d", loc.line);
|
||||||
@ -94,12 +83,6 @@ public:
|
|||||||
append(locText);
|
append(locText);
|
||||||
append(": ");
|
append(": ");
|
||||||
}
|
}
|
||||||
void message(TPrefixType message, const char* s, const TSourceLoc& loc) {
|
|
||||||
prefix(message);
|
|
||||||
location(loc);
|
|
||||||
append(s);
|
|
||||||
append("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
void append(const char* s);
|
void append(const char* s);
|
||||||
|
|
||||||
|
@ -44,29 +44,6 @@ extern int yyparse(glslang::TParseContext*);
|
|||||||
|
|
||||||
namespace glslang {
|
namespace glslang {
|
||||||
|
|
||||||
//
|
|
||||||
// Used to output syntax, parsing, and semantic errors.
|
|
||||||
//
|
|
||||||
|
|
||||||
void TParseContextBase::outputMessage(const TSourceLoc& loc, const char* szReason,
|
|
||||||
const char* szToken,
|
|
||||||
const char* szExtraInfoFormat,
|
|
||||||
TPrefixType prefix, va_list args)
|
|
||||||
{
|
|
||||||
const int maxSize = MaxTokenLength + 200;
|
|
||||||
char szExtraInfo[maxSize];
|
|
||||||
|
|
||||||
safe_vsprintf(szExtraInfo, maxSize, szExtraInfoFormat, args);
|
|
||||||
|
|
||||||
infoSink.info.prefix(prefix);
|
|
||||||
infoSink.info.location(loc);
|
|
||||||
infoSink.info << "'" << szToken << "' : " << szReason << " " << szExtraInfo << "\n";
|
|
||||||
|
|
||||||
if (prefix == EPrefixError) {
|
|
||||||
++numErrors;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void C_DECL TParseContextBase::error(const TSourceLoc& loc, const char* szReason, const char* szToken,
|
void C_DECL TParseContextBase::error(const TSourceLoc& loc, const char* szReason, const char* szToken,
|
||||||
const char* szExtraInfoFormat, ...)
|
const char* szExtraInfoFormat, ...)
|
||||||
{
|
{
|
||||||
@ -74,7 +51,13 @@ void C_DECL TParseContextBase::error(const TSourceLoc& loc, const char* szReason
|
|||||||
return;
|
return;
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, szExtraInfoFormat);
|
va_start(args, szExtraInfoFormat);
|
||||||
outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
|
const int maxSize = MaxTokenLength + 200;
|
||||||
|
char szExtraInfo[maxSize];
|
||||||
|
safe_vsprintf(szExtraInfo, maxSize, szExtraInfoFormat, args);
|
||||||
|
infoSink.info.append("ERROR: ");
|
||||||
|
infoSink.info.location(loc);
|
||||||
|
infoSink.info << "'" << szToken << "' : " << szReason << " " << szExtraInfo << "\n";
|
||||||
|
++numErrors;
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
if ((messages & EShMsgCascadingErrors) == 0)
|
if ((messages & EShMsgCascadingErrors) == 0)
|
||||||
@ -88,7 +71,12 @@ void C_DECL TParseContextBase::warn(const TSourceLoc& loc, const char* szReason,
|
|||||||
return;
|
return;
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, szExtraInfoFormat);
|
va_start(args, szExtraInfoFormat);
|
||||||
outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixWarning, args);
|
const int maxSize = MaxTokenLength + 200;
|
||||||
|
char szExtraInfo[maxSize];
|
||||||
|
safe_vsprintf(szExtraInfo, maxSize, szExtraInfoFormat, args);
|
||||||
|
infoSink.info.append("WARNING: ");
|
||||||
|
infoSink.info.location(loc);
|
||||||
|
infoSink.info << "'" << szToken << "' : " << szReason << " " << szExtraInfo << "\n";
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,7 +85,13 @@ void C_DECL TParseContextBase::ppError(const TSourceLoc& loc, const char* szReas
|
|||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, szExtraInfoFormat);
|
va_start(args, szExtraInfoFormat);
|
||||||
outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
|
const int maxSize = MaxTokenLength + 200;
|
||||||
|
char szExtraInfo[maxSize];
|
||||||
|
safe_vsprintf(szExtraInfo, maxSize, szExtraInfoFormat, args);
|
||||||
|
infoSink.info.append("ERROR: ");
|
||||||
|
infoSink.info.location(loc);
|
||||||
|
infoSink.info << "'" << szToken << "' : " << szReason << " " << szExtraInfo << "\n";
|
||||||
|
++numErrors;
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
if ((messages & EShMsgCascadingErrors) == 0)
|
if ((messages & EShMsgCascadingErrors) == 0)
|
||||||
@ -109,7 +103,12 @@ void C_DECL TParseContextBase::ppWarn(const TSourceLoc& loc, const char* szReaso
|
|||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, szExtraInfoFormat);
|
va_start(args, szExtraInfoFormat);
|
||||||
outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixWarning, args);
|
const int maxSize = MaxTokenLength + 200;
|
||||||
|
char szExtraInfo[maxSize];
|
||||||
|
safe_vsprintf(szExtraInfo, maxSize, szExtraInfoFormat, args);
|
||||||
|
infoSink.info.append("WARNING: ");
|
||||||
|
infoSink.info.location(loc);
|
||||||
|
infoSink.info << "'" << szToken << "' : " << szReason << " " << szExtraInfo << "\n";
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -220,9 +220,6 @@ protected:
|
|||||||
virtual const char* getGlobalUniformBlockName() const { return ""; }
|
virtual const char* getGlobalUniformBlockName() const { return ""; }
|
||||||
virtual void setUniformBlockDefaults(TType&) const { }
|
virtual void setUniformBlockDefaults(TType&) const { }
|
||||||
virtual void finalizeGlobalUniformBlockLayout(TVariable&) { }
|
virtual void finalizeGlobalUniformBlockLayout(TVariable&) { }
|
||||||
virtual void outputMessage(const TSourceLoc&, const char* szReason, const char* szToken,
|
|
||||||
const char* szExtraInfoFormat, TPrefixType prefix,
|
|
||||||
va_list args);
|
|
||||||
virtual void trackLinkage(TSymbol& symbol);
|
virtual void trackLinkage(TSymbol& symbol);
|
||||||
virtual void makeEditable(TSymbol*&);
|
virtual void makeEditable(TSymbol*&);
|
||||||
virtual TVariable* getEditableVariable(const char* name);
|
virtual TVariable* getEditableVariable(const char* name);
|
||||||
|
@ -1506,7 +1506,10 @@ int TScanContext::tokenizeIdentifier()
|
|||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
_parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc);
|
_parseContext.infoSink.info.append("INTERNAL ERROR: ");
|
||||||
|
_parseContext.infoSink.info.location(loc);
|
||||||
|
_parseContext.infoSink.info.append("Unknown glslang keyword");
|
||||||
|
_parseContext.infoSink.info.append("\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1101,7 +1101,7 @@ struct DoPreprocessing {
|
|||||||
bool success = true;
|
bool success = true;
|
||||||
if (_parseContext.getNumErrors() > 0) {
|
if (_parseContext.getNumErrors() > 0) {
|
||||||
success = false;
|
success = false;
|
||||||
_parseContext.infoSink.info.prefix(EPrefixError);
|
_parseContext.infoSink.info.append("ERROR: ");
|
||||||
_parseContext.infoSink.info << _parseContext.getNumErrors() << " compilation errors. No code generated.\n\n";
|
_parseContext.infoSink.info << _parseContext.getNumErrors() << " compilation errors. No code generated.\n\n";
|
||||||
}
|
}
|
||||||
return success;
|
return success;
|
||||||
@ -1132,7 +1132,7 @@ struct DoFullParse{
|
|||||||
else
|
else
|
||||||
success = intermediate.postProcess(intermediate.getTreeRoot(), _parseContext.getLanguage());
|
success = intermediate.postProcess(intermediate.getTreeRoot(), _parseContext.getLanguage());
|
||||||
} else if (! success) {
|
} else if (! success) {
|
||||||
_parseContext.infoSink.info.prefix(EPrefixError);
|
_parseContext.infoSink.info.append("ERROR: ");
|
||||||
_parseContext.infoSink.info << _parseContext.getNumErrors() << " compilation errors. No code generated.\n\n";
|
_parseContext.infoSink.info << _parseContext.getNumErrors() << " compilation errors. No code generated.\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -510,7 +510,10 @@ void TParseVersions::profileRequires(const TSourceLoc& loc, int profileMask, int
|
|||||||
for (int i = 0; i < numExtensions; ++i) {
|
for (int i = 0; i < numExtensions; ++i) {
|
||||||
switch (getExtensionBehavior(extensions[i])) {
|
switch (getExtensionBehavior(extensions[i])) {
|
||||||
case EBhWarn:
|
case EBhWarn:
|
||||||
infoSink.info.message(EPrefixWarning, ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), loc);
|
infoSink.info.append("WARNING: ");
|
||||||
|
infoSink.info.location(loc);
|
||||||
|
infoSink.info.append(("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str());
|
||||||
|
infoSink.info.append("\n");
|
||||||
// fall through
|
// fall through
|
||||||
case EBhRequire:
|
case EBhRequire:
|
||||||
case EBhEnable:
|
case EBhEnable:
|
||||||
@ -562,8 +565,13 @@ void TParseVersions::checkDeprecated(const TSourceLoc& loc, int profileMask, int
|
|||||||
if (forwardCompatible)
|
if (forwardCompatible)
|
||||||
error(loc, "deprecated, may be removed in future release", featureDesc, "");
|
error(loc, "deprecated, may be removed in future release", featureDesc, "");
|
||||||
else if (! suppressWarnings())
|
else if (! suppressWarnings())
|
||||||
infoSink.info.message(EPrefixWarning, (TString(featureDesc) + " deprecated in version " +
|
{
|
||||||
String(depVersion) + "; may be removed in future release").c_str(), loc);
|
infoSink.info.append("WARNING: ");
|
||||||
|
infoSink.info.location(loc);
|
||||||
|
infoSink.info.append((TString(featureDesc) + " deprecated in version " +
|
||||||
|
String(depVersion) + "; may be removed in future release").c_str());
|
||||||
|
infoSink.info.append("\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -605,11 +613,17 @@ bool TParseVersions::checkExtensionsRequested(const TSourceLoc& loc, int numExte
|
|||||||
for (int i = 0; i < numExtensions; ++i) {
|
for (int i = 0; i < numExtensions; ++i) {
|
||||||
TExtensionBehavior behavior = getExtensionBehavior(extensions[i]);
|
TExtensionBehavior behavior = getExtensionBehavior(extensions[i]);
|
||||||
if (behavior == EBhDisable && relaxedErrors()) {
|
if (behavior == EBhDisable && relaxedErrors()) {
|
||||||
infoSink.info.message(EPrefixWarning, "The following extension must be enabled to use this feature:", loc);
|
infoSink.info.append("WARNING: ");
|
||||||
|
infoSink.info.location(loc);
|
||||||
|
infoSink.info.append("The following extension must be enabled to use this feature:");
|
||||||
|
infoSink.info.append("\n");
|
||||||
behavior = EBhWarn;
|
behavior = EBhWarn;
|
||||||
}
|
}
|
||||||
if (behavior == EBhWarn) {
|
if (behavior == EBhWarn) {
|
||||||
infoSink.info.message(EPrefixWarning, ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), loc);
|
infoSink.info.append("WARNING: ");
|
||||||
|
infoSink.info.location(loc);
|
||||||
|
infoSink.info.append(("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str());
|
||||||
|
infoSink.info.append("\n");
|
||||||
warned = true;
|
warned = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1251,7 +1251,10 @@ static void OutputConstantUnion(TInfoSink& out, const TIntermTyped* node, const
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
out.info.message(EPrefixInternalError, "Unknown constant", node->getLoc());
|
out.info.append("INTERNAL ERROR: ");
|
||||||
|
out.info.location(node->getLoc());
|
||||||
|
out.info.append("Unknown constant");
|
||||||
|
out.info.append("\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ namespace glslang {
|
|||||||
//
|
//
|
||||||
void TIntermediate::error(TInfoSink& infoSink, const char* message)
|
void TIntermediate::error(TInfoSink& infoSink, const char* message)
|
||||||
{
|
{
|
||||||
infoSink.info.prefix(EPrefixError);
|
infoSink.info.append("ERROR: ");
|
||||||
infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
|
infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
|
||||||
|
|
||||||
++numErrors;
|
++numErrors;
|
||||||
@ -64,7 +64,7 @@ void TIntermediate::error(TInfoSink& infoSink, const char* message)
|
|||||||
// Link-time warning.
|
// Link-time warning.
|
||||||
void TIntermediate::warn(TInfoSink& infoSink, const char* message)
|
void TIntermediate::warn(TInfoSink& infoSink, const char* message)
|
||||||
{
|
{
|
||||||
infoSink.info.prefix(EPrefixWarning);
|
infoSink.info.append("WARNING: ");
|
||||||
infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
|
infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -435,7 +435,7 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
|
|||||||
// compile-time or link-time error to have different values specified for the stride for the same buffer."
|
// compile-time or link-time error to have different values specified for the stride for the same buffer."
|
||||||
if (xfbBuffers[b].stride != TQualifier::layoutXfbStrideEnd && xfbBuffers[b].implicitStride > xfbBuffers[b].stride) {
|
if (xfbBuffers[b].stride != TQualifier::layoutXfbStrideEnd && xfbBuffers[b].implicitStride > xfbBuffers[b].stride) {
|
||||||
error(infoSink, "xfb_stride is too small to hold all buffer entries:");
|
error(infoSink, "xfb_stride is too small to hold all buffer entries:");
|
||||||
infoSink.info.prefix(EPrefixError);
|
infoSink.info.append("ERROR: ");
|
||||||
infoSink.info << " xfb_buffer " << (unsigned int)b << ", xfb_stride " << xfbBuffers[b].stride << ", minimum stride needed: " << xfbBuffers[b].implicitStride << "\n";
|
infoSink.info << " xfb_buffer " << (unsigned int)b << ", xfb_stride " << xfbBuffers[b].stride << ", minimum stride needed: " << xfbBuffers[b].implicitStride << "\n";
|
||||||
}
|
}
|
||||||
if (xfbBuffers[b].stride == TQualifier::layoutXfbStrideEnd)
|
if (xfbBuffers[b].stride == TQualifier::layoutXfbStrideEnd)
|
||||||
@ -446,11 +446,11 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
|
|||||||
// multiple of 4, or a compile-time or link-time error results."
|
// multiple of 4, or a compile-time or link-time error results."
|
||||||
if (xfbBuffers[b].containsDouble && ! IsMultipleOfPow2(xfbBuffers[b].stride, 8)) {
|
if (xfbBuffers[b].containsDouble && ! IsMultipleOfPow2(xfbBuffers[b].stride, 8)) {
|
||||||
error(infoSink, "xfb_stride must be multiple of 8 for buffer holding a double:");
|
error(infoSink, "xfb_stride must be multiple of 8 for buffer holding a double:");
|
||||||
infoSink.info.prefix(EPrefixError);
|
infoSink.info.append("ERROR: ");
|
||||||
infoSink.info << " xfb_buffer " << (unsigned int)b << ", xfb_stride " << xfbBuffers[b].stride << "\n";
|
infoSink.info << " xfb_buffer " << (unsigned int)b << ", xfb_stride " << xfbBuffers[b].stride << "\n";
|
||||||
} else if (! IsMultipleOfPow2(xfbBuffers[b].stride, 4)) {
|
} else if (! IsMultipleOfPow2(xfbBuffers[b].stride, 4)) {
|
||||||
error(infoSink, "xfb_stride must be multiple of 4:");
|
error(infoSink, "xfb_stride must be multiple of 4:");
|
||||||
infoSink.info.prefix(EPrefixError);
|
infoSink.info.append("ERROR: ");
|
||||||
infoSink.info << " xfb_buffer " << (unsigned int)b << ", xfb_stride " << xfbBuffers[b].stride << "\n";
|
infoSink.info << " xfb_buffer " << (unsigned int)b << ", xfb_stride " << xfbBuffers[b].stride << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -458,7 +458,7 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
|
|||||||
// implementation-dependent constant gl_MaxTransformFeedbackInterleavedComponents."
|
// implementation-dependent constant gl_MaxTransformFeedbackInterleavedComponents."
|
||||||
if (xfbBuffers[b].stride > (unsigned int)(4 * resources.maxTransformFeedbackInterleavedComponents)) {
|
if (xfbBuffers[b].stride > (unsigned int)(4 * resources.maxTransformFeedbackInterleavedComponents)) {
|
||||||
error(infoSink, "xfb_stride is too large:");
|
error(infoSink, "xfb_stride is too large:");
|
||||||
infoSink.info.prefix(EPrefixError);
|
infoSink.info.append("ERROR: ");
|
||||||
infoSink.info << " xfb_buffer " << (unsigned int)b << ", components (1/4 stride) needed are " << xfbBuffers[b].stride/4 << ", gl_MaxTransformFeedbackInterleavedComponents is " << resources.maxTransformFeedbackInterleavedComponents << "\n";
|
infoSink.info << " xfb_buffer " << (unsigned int)b << ", components (1/4 stride) needed are " << xfbBuffers[b].stride/4 << ", gl_MaxTransformFeedbackInterleavedComponents is " << resources.maxTransformFeedbackInterleavedComponents << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -855,7 +855,10 @@ EHlslTokenClass HlslScanContext::tokenizeIdentifier()
|
|||||||
return keyword;
|
return keyword;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
_parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc);
|
_parseContext.infoSink.info.append("INTERNAL ERROR: ");
|
||||||
|
_parseContext.infoSink.info.location(loc);
|
||||||
|
_parseContext.infoSink.info.append("Unknown glslang keyword");
|
||||||
|
_parseContext.infoSink.info.append("\n");
|
||||||
return EHTokNone;
|
return EHTokNone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user