種類: コンパイル時のエラー。
原因: if文による条件判定で、並列する条件の数が多すぎると、このエラーになるみたいです。
対策: エラーをなくすだけなら、条件を減らせばいいと思います。
ここで問題にしているif文というのは、要するに、次のようなものです。
[パターン1] | if (条件1 && 条件2 && 条件3) { | 処理A | }
入れ子式に書き直せば、こんな感じになります。
[パターン2] | if (条件1) { | if (条件2) { | if (条件3) { | 処理A | } | } | }
いずれのパターンにしても、一度に判定できる条件の数は、最大で15個です。
条件の数が多すぎると、「BlockStack overflow」というエラーになります。
一度に判定できる条件の数が15個なのは、C言語の標準的な規格に基づく制限らしいです。
メッセージの文面をみる限り、これも一種のスタックオーバーフローのようです。 当然、自動変数などを置くためのスタックとは別物の話だと思いますが、何がどう違うのかはわかりません。
このエラーは、純粋に実験的な手続きのなかで発見したものです。
筆者自身は、このエラーに悩まされたことはありません。
そういう意味では、非常にマイナーなエラーなんじゃないかと思うのですが、とりあえず、せっかくだから紹介しておきます。