ERR/E5.1: lambda-specific raise-not-failable hint
A closure literal whose body raises but is annotated non-failable (or has no ! in its return) now gets a lambda-specific diagnostic telling the user to declare the failable return explicitly, instead of the generic "raise is only valid inside a failable function". Failability is never inferred for a lambda, so a raising lambda with no ! is a hard error that should point at the fix. New in_lambda_body flag (save/restore for nesting) set around the lambda body lowering in lowerLambda; diagRaiseNotFailable branches on it. Top-level functions keep the generic message. Test: 1043-errors-lambda-raise-annotation-hint.sx.
This commit is contained in:
@@ -0,0 +1 @@
|
||||
1
|
||||
@@ -0,0 +1,5 @@
|
||||
error: lambda body raises; declare its return type explicitly with `-> (T, !)` or `-> (T, !Named)`
|
||||
--> /Users/agra/projects/sx/examples/1043-errors-lambda-raise-annotation-hint.sx:18:61
|
||||
|
|
||||
18 | print("{}\n", take(closure((x: s32) -> s32 { if x < 0 { raise error.Neg; } return x; }), -1));
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
Reference in New Issue
Block a user