SkSL DSL now reports the C++ line numbers of errors
This is done a best-effort basis. Positions will only be reported in
Clang and GCC, and may not be reported in every possible situation.
Change-Id: I7efb15781546b95e667fee34e488366174bb5f36
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/374600
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/tests/SkSLDSLTest.cpp b/tests/SkSLDSLTest.cpp
index 0055f78..ac73b93 100644
--- a/tests/SkSLDSLTest.cpp
+++ b/tests/SkSLDSLTest.cpp
@@ -96,8 +96,10 @@
REPORTER_ASSERT(r, !whitespace_insensitive_compare("a b c d", "\n\n\nabc"));
}
-static SkSL::String stringize(DSLStatement& stmt) { return stmt.release()->description(); }
-static SkSL::String stringize(DSLExpression& expr) { return expr.release()->description(); }
+static SkSL::String stringize(DSLStatement& stmt) { return stmt.release()->description(); }
+static SkSL::String stringize(DSLPossibleStatement& stmt) { return stmt.release()->description(); }
+static SkSL::String stringize(DSLExpression& expr) { return expr.release()->description(); }
+static SkSL::String stringize(DSLPossibleExpression& expr) { return expr.release()->description(); }
static SkSL::String stringize(SkSL::IRNode& node) { return node.description(); }
template <typename T>
@@ -379,17 +381,17 @@
{
ExpectError error(r, "error: type mismatch: '+' cannot operate on 'bool2', 'float'\n");
- (Bool2(true) + a).release();
+ DSLExpression((Bool2(true) + a)).release();
}
{
ExpectError error(r, "error: type mismatch: '+=' cannot operate on 'float', 'bool2'\n");
- (a += Bool2(true)).release();
+ DSLExpression((a += Bool2(true))).release();
}
{
ExpectError error(r, "error: cannot assign to this expression\n");
- (1.0 += a).release();
+ DSLExpression((1.0 += a)).release();
}
}
@@ -410,17 +412,17 @@
{
ExpectError error(r, "error: type mismatch: '-' cannot operate on 'bool2', 'int'\n");
- (Bool2(true) - a).release();
+ DSLExpression(Bool2(true) - a).release();
}
{
ExpectError error(r, "error: type mismatch: '-=' cannot operate on 'int', 'bool2'\n");
- (a -= Bool2(true)).release();
+ DSLExpression(a -= Bool2(true)).release();
}
{
ExpectError error(r, "error: cannot assign to this expression\n");
- (1.0 -= a).release();
+ DSLExpression(1.0 -= a).release();
}
}
@@ -441,17 +443,17 @@
{
ExpectError error(r, "error: type mismatch: '*' cannot operate on 'bool2', 'float'\n");
- (Bool2(true) * a).release();
+ DSLExpression(Bool2(true) * a).release();
}
{
ExpectError error(r, "error: type mismatch: '*=' cannot operate on 'float', 'bool2'\n");
- (a *= Bool2(true)).release();
+ DSLExpression(a *= Bool2(true)).release();
}
{
ExpectError error(r, "error: cannot assign to this expression\n");
- (1.0 *= a).release();
+ DSLExpression(1.0 *= a).release();
}
}
@@ -475,28 +477,28 @@
{
ExpectError error(r, "error: type mismatch: '/' cannot operate on 'bool2', 'float'\n");
- (Bool2(true) / a).release();
+ DSLExpression(Bool2(true) / a).release();
}
{
ExpectError error(r, "error: type mismatch: '/=' cannot operate on 'float', 'bool2'\n");
- (a /= Bool2(true)).release();
+ DSLExpression(a /= Bool2(true)).release();
}
{
ExpectError error(r, "error: cannot assign to this expression\n");
- (1.0 /= a).release();
+ DSLExpression(1.0 /= a).release();
}
{
ExpectError error(r, "error: division by zero\n");
- (a /= 0).release();
+ DSLExpression(a /= 0).release();
}
{
Var c(kFloat2, "c");
ExpectError error(r, "error: division by zero\n");
- (c /= Float2(Float(0), 1)).release();
+ DSLExpression(c /= Float2(Float(0), 1)).release();
}
}
@@ -517,28 +519,28 @@
{
ExpectError error(r, "error: type mismatch: '%' cannot operate on 'bool2', 'int'\n");
- (Bool2(true) % a).release();
+ DSLExpression(Bool2(true) % a).release();
}
{
ExpectError error(r, "error: type mismatch: '%=' cannot operate on 'int', 'bool2'\n");
- (a %= Bool2(true)).release();
+ DSLExpression(a %= Bool2(true)).release();
}
{
ExpectError error(r, "error: cannot assign to this expression\n");
- (1 %= a).release();
+ DSLExpression(1 %= a).release();
}
{
ExpectError error(r, "error: division by zero\n");
- (a %= 0).release();
+ DSLExpression(a %= 0).release();
}
{
Var c(kInt2, "c");
ExpectError error(r, "error: division by zero\n");
- (c %= Int2(Int(0), 1)).release();
+ DSLExpression(c %= Int2(Int(0), 1)).release();
}
}
@@ -559,17 +561,17 @@
{
ExpectError error(r, "error: type mismatch: '<<' cannot operate on 'bool2', 'int'\n");
- (Bool2(true) << a).release();
+ DSLExpression(Bool2(true) << a).release();
}
{
ExpectError error(r, "error: type mismatch: '<<=' cannot operate on 'int', 'bool2'\n");
- (a <<= Bool2(true)).release();
+ DSLExpression(a <<= Bool2(true)).release();
}
{
ExpectError error(r, "error: cannot assign to this expression\n");
- (1 <<= a).release();
+ DSLExpression(1 <<= a).release();
}
}
@@ -590,17 +592,17 @@
{
ExpectError error(r, "error: type mismatch: '>>' cannot operate on 'bool2', 'int'\n");
- (Bool2(true) >> a).release();
+ DSLExpression(Bool2(true) >> a).release();
}
{
ExpectError error(r, "error: type mismatch: '>>=' cannot operate on 'int', 'bool2'\n");
- (a >>= Bool2(true)).release();
+ DSLExpression(a >>= Bool2(true)).release();
}
{
ExpectError error(r, "error: cannot assign to this expression\n");
- (1 >>= a).release();
+ DSLExpression(1 >>= a).release();
}
}
@@ -621,17 +623,17 @@
{
ExpectError error(r, "error: type mismatch: '&' cannot operate on 'bool2', 'int'\n");
- (Bool2(true) & a).release();
+ DSLExpression(Bool2(true) & a).release();
}
{
ExpectError error(r, "error: type mismatch: '&=' cannot operate on 'int', 'bool2'\n");
- (a &= Bool2(true)).release();
+ DSLExpression(a &= Bool2(true)).release();
}
{
ExpectError error(r, "error: cannot assign to this expression\n");
- (1 &= a).release();
+ DSLExpression(1 &= a).release();
}
}
@@ -652,17 +654,17 @@
{
ExpectError error(r, "error: type mismatch: '|' cannot operate on 'bool2', 'int'\n");
- (Bool2(true) | a).release();
+ DSLExpression(Bool2(true) | a).release();
}
{
ExpectError error(r, "error: type mismatch: '|=' cannot operate on 'int', 'bool2'\n");
- (a |= Bool2(true)).release();
+ DSLExpression(a |= Bool2(true)).release();
}
{
ExpectError error(r, "error: cannot assign to this expression\n");
- (1 |= a).release();
+ DSLExpression(1 |= a).release();
}
}
@@ -683,17 +685,17 @@
{
ExpectError error(r, "error: type mismatch: '^' cannot operate on 'bool2', 'int'\n");
- (Bool2(true) ^ a).release();
+ DSLExpression(Bool2(true) ^ a).release();
}
{
ExpectError error(r, "error: type mismatch: '^=' cannot operate on 'int', 'bool2'\n");
- (a ^= Bool2(true)).release();
+ DSLExpression(a ^= Bool2(true)).release();
}
{
ExpectError error(r, "error: cannot assign to this expression\n");
- (1 ^= a).release();
+ DSLExpression(1 ^= a).release();
}
}
@@ -711,7 +713,7 @@
{
ExpectError error(r, "error: type mismatch: '&&' cannot operate on 'bool', 'int'\n");
- (a && 5).release();
+ DSLExpression(a && 5).release();
}
}
@@ -729,7 +731,7 @@
{
ExpectError error(r, "error: type mismatch: '||' cannot operate on 'bool', 'int'\n");
- (a || 5).release();
+ DSLExpression(a || 5).release();
}
}
@@ -754,7 +756,7 @@
{
ExpectError error(r, "error: type mismatch: '==' cannot operate on 'int', 'bool2'\n");
- (a == Bool2(true)).release();
+ DSLExpression(a == Bool2(true)).release();
}
}
@@ -769,7 +771,7 @@
{
ExpectError error(r, "error: type mismatch: '!=' cannot operate on 'int', 'bool2'\n");
- (a != Bool2(true)).release();
+ DSLExpression(a != Bool2(true)).release();
}
}
@@ -784,7 +786,7 @@
{
ExpectError error(r, "error: type mismatch: '>' cannot operate on 'int', 'bool2'\n");
- (a > Bool2(true)).release();
+ DSLExpression(a > Bool2(true)).release();
}
}
@@ -799,7 +801,7 @@
{
ExpectError error(r, "error: type mismatch: '>=' cannot operate on 'int', 'bool2'\n");
- (a >= Bool2(true)).release();
+ DSLExpression(a >= Bool2(true)).release();
}
}
@@ -814,7 +816,7 @@
{
ExpectError error(r, "error: type mismatch: '<' cannot operate on 'int', 'bool2'\n");
- (a < Bool2(true)).release();
+ DSLExpression(a < Bool2(true)).release();
}
}
@@ -829,7 +831,7 @@
{
ExpectError error(r, "error: type mismatch: '<=' cannot operate on 'int', 'bool2'\n");
- (a <= Bool2(true)).release();
+ DSLExpression(a <= Bool2(true)).release();
}
}
@@ -841,7 +843,7 @@
{
ExpectError error(r, "error: '!' cannot operate on 'int'\n");
- (!a).release();
+ DSLExpression(!a).release();
}
}
@@ -853,7 +855,7 @@
{
ExpectError error(r, "error: '~' cannot operate on 'bool'\n");
- (~b).release();
+ DSLExpression(~b).release();
}
}
@@ -868,22 +870,22 @@
{
ExpectError error(r, "error: '++' cannot operate on 'bool'\n");
- (++b).release();
+ DSLExpression(++b).release();
}
{
ExpectError error(r, "error: '++' cannot operate on 'bool'\n");
- (b++).release();
+ DSLExpression(b++).release();
}
{
ExpectError error(r, "error: cannot assign to this expression\n");
- (++(a + 1)).release();
+ DSLExpression(++(a + 1)).release();
}
{
ExpectError error(r, "error: cannot assign to this expression\n");
- ((a + 1)++).release();
+ DSLExpression((a + 1)++).release();
}
}
@@ -898,22 +900,22 @@
{
ExpectError error(r, "error: '--' cannot operate on 'bool'\n");
- (--b).release();
+ DSLExpression(--b).release();
}
{
ExpectError error(r, "error: '--' cannot operate on 'bool'\n");
- (b--).release();
+ DSLExpression(b--).release();
}
{
ExpectError error(r, "error: cannot assign to this expression\n");
- (--(a + 1)).release();
+ DSLExpression(--(a + 1)).release();
}
{
ExpectError error(r, "error: cannot assign to this expression\n");
- ((a + 1)--).release();
+ DSLExpression((a + 1)--).release();
}
}
@@ -1122,12 +1124,12 @@
{
ExpectError error(r, "error: expected 'bool', but found 'int'\n");
- Select(a, 1, -1).release();
+ DSLExpression x = Select(a, 1, -1);
}
{
ExpectError error(r, "error: ternary operator result mismatch: 'float2', 'float3'\n");
- Select(a > 0, Float2(1), Float3(1)).release();
+ DSLExpression x = Select(a > 0, Float2(1), Float3(1));
}
}
@@ -1159,18 +1161,18 @@
{
ExpectError error(r, "error: duplicate case value '0'\n");
- Switch(0, Case(0), Case(0)).release();
+ DSLStatement(Switch(0, Case(0), Case(0))).release();
}
{
ExpectError error(r, "error: duplicate default case\n");
- Switch(0, Default(a = 0), Default(a = 1)).release();
+ DSLStatement(Switch(0, Default(a = 0), Default(a = 1))).release();
}
{
ExpectError error(r, "error: case value must be a constant integer\n");
Var b(kInt);
- Switch(0, Case(b)).release();
+ DSLStatement(Switch(0, Case(b))).release();
}
{
@@ -1240,7 +1242,7 @@
{
ExpectError error(r, "error: expected 'bool', but found 'int'\n");
- While(7, Block()).release();
+ DSLStatement x = While(7, Block());
}
}
@@ -1253,17 +1255,17 @@
{
ExpectError error(r, "error: expected 'int', but found 'bool'\n");
- a[true].release();
+ DSLExpression x = a[true];
}
{
ExpectError error(r, "error: expected array, but found 'int'\n");
- b[0].release();
+ DSLExpression x = b[0];
}
{
ExpectError error(r, "error: index -1 out of range for 'int[5]'\n");
- a[-1].release();
+ DSLExpression x = a[-1];
}
}