Improved error reporting in DSLParser::swizzle

With this change, it will either match or improve on the reports we
currently get from SkSLParser.

Change-Id: I9b3c0f0c2225bf47fec141a1c01c94d9c2ab6a6b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/443056
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
This commit is contained in:
Ethan Nicholas 2021-08-28 19:50:03 -04:00 committed by SkCQ
parent c898d04fb7
commit be8f73d714

View File

@ -1496,12 +1496,12 @@ skstd::optional<DSLWrapper<DSLExpression>> DSLParser::swizzle(int offset, DSLExp
return base.field(swizzleMask, this->position(offset));
}
int length = swizzleMask.length();
if (length > 4) {
this->error(offset, "too many components in swizzle mask");
return skstd::nullopt;
}
SkSL::SwizzleComponent::Type components[4];
for (int i = 0; i < length; ++i) {
if (i >= 4) {
this->error(offset, "too many components in swizzle mask");
return {{DSLExpression::Poison()}};
}
switch (swizzleMask[i]) {
case '0': components[i] = SwizzleComponent::ZERO; break;
case '1': components[i] = SwizzleComponent::ONE; break;
@ -1524,7 +1524,7 @@ skstd::optional<DSLWrapper<DSLExpression>> DSLParser::swizzle(int offset, DSLExp
default:
this->error(offset,
String::printf("invalid swizzle component '%c'", swizzleMask[i]).c_str());
return skstd::nullopt;
return {{DSLExpression::Poison()}};
}
}
switch (length) {