|
14 | 14 | namespace Sass {
|
15 | 15 |
|
16 | 16 | // simple endless recursion protection
|
17 |
| - const unsigned int maxRecursion = 500; |
18 |
| - static unsigned int recursions = 0; |
| 17 | + const size_t maxRecursion = 500; |
19 | 18 |
|
20 | 19 | Expand::Expand(Context& ctx, Env* env, Backtrace* bt, std::vector<Selector_List_Obj>* stack)
|
21 | 20 | : ctx(ctx),
|
22 | 21 | eval(Eval(*this)),
|
| 22 | + recursions(0), |
| 23 | + in_keyframes(false), |
| 24 | + at_root_without_rule(false), |
| 25 | + old_at_root_without_rule(false), |
23 | 26 | env_stack(std::vector<Env*>()),
|
24 | 27 | block_stack(std::vector<Block_Ptr>()),
|
25 | 28 | call_stack(std::vector<AST_Node_Obj>()),
|
26 | 29 | selector_stack(std::vector<Selector_List_Obj>()),
|
27 | 30 | media_block_stack(std::vector<Media_Block_Ptr>()),
|
28 |
| - backtrace_stack(std::vector<Backtrace*>()), |
29 |
| - in_keyframes(false), |
30 |
| - at_root_without_rule(false), |
31 |
| - old_at_root_without_rule(false) |
| 31 | + backtrace_stack(std::vector<Backtrace*>()) |
32 | 32 | {
|
33 | 33 | env_stack.push_back(0);
|
34 | 34 | env_stack.push_back(env);
|
@@ -685,12 +685,13 @@ namespace Sass {
|
685 | 685 |
|
686 | 686 | Statement_Ptr Expand::operator()(Mixin_Call_Ptr c)
|
687 | 687 | {
|
688 |
| - recursions ++; |
689 | 688 |
|
690 | 689 | if (recursions > maxRecursion) {
|
691 | 690 | throw Exception::StackError(*c);
|
692 | 691 | }
|
693 | 692 |
|
| 693 | + recursions ++; |
| 694 | + |
694 | 695 | Env* env = environment();
|
695 | 696 | std::string full_name(c->name() + "[m]");
|
696 | 697 | if (!env->has(full_name)) {
|
|
0 commit comments