ちょっとした事情で20回ほど再帰呼び出しする関数をSassで書いたらコンパイラーが落ちた。これは単に関数にバグがあっただけだった。100回程再帰呼び出しする関数を書いてみたが、これは落ちた……と思ったらこれも間違えて無限ループさせてただけだった……。ちゃんと書いてちゃんと限界を確認した。
以下のようなテスト・コードを書き、$max
を書きかえて限界を探った。
$initial: 0;
$max: 302;
@function loop($i) {
$i: $i + 1;
@if ($i < $max) {
@return loop($i);
} @else {
@return $i;
}
}
.test {
z-index: loop($initial);
}
コンパイラーが落ちず、出力されるCSSでz-index
プロパティーの値が$initial + $max
と等しくなれば良い。手元の環境(Sass v3.4.9)では302までは問題なく通り、303にするとstack level too deep (SystemStackError)で落ちた。
再帰呼び出しの内容にもよるかもしれないが、数十回くらいまでなら再帰呼び出ししても問題なさそうだ。