E1006: nesting_too_deep
E1006 nesting_too_deep — expressions or blocks nested too deeply.
A compile-time error of soma check, the checker of the Soma programming language (soma explain E1006).
The rule
The parser refuses expressions and blocks nested more than 400 levels deep, counting expressions and blocks together. The limit keeps the compiler from exhausting its stack on generated code. Flatten the expression, compute it differently, or split it into let bindings or a helper handler; here 420 nested (... + fee) become base + 420 * fee.
A program that triggers it
wrong.cell
cell Billing {
// generated: one fee per line item, folded into a single expression
on total(base: Int, fee: Int) {
return ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((base + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee)
}
}What soma check prints:
$ soma check wrong.cell
error: nested more than 400 levels deep (expressions and blocks together) — split it into `let` bindings or a helper handler
--> wrong.cell:4:215
|
4 | …((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((…
| ^
= code: E1006The fix
On line 2, // generated: one fee per line item, folded into a single expression becomes // generated: one fee per line item, 420 line items; on line 4, return ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((base + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) becomes return base + 420 * fee.
wrong.cell → right.cell
--- wrong.cell
+++ right.cell
@@ -1,6 +1,6 @@
cell Billing {
- // generated: one fee per line item, folded into a single expression
+ // generated: one fee per line item, 420 line items
on total(base: Int, fee: Int) {
- return ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((base + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee) + fee)
+ return base + 420 * fee
}
}With the fix, soma check accepts the program:
$ soma check right.cell
✓ All checks passed.