Macro bug or limitation?

When I had following in my ael file:

macro say_number(n) { if (${n} >= 1001 && ${n} <= 999999) { if (${n}/1000 != 1) { &say_number(${n}/1000); }; n=${n}%1000; if (${n}) { BackGround(1000_); &say_number(${n}); } else BackGround(1000); } else if (${n} = 1000) { BackGround(1000); } else if (${n} >= 901 && ${n} <= 999) { BackGround(900_); n=${n} % 900; &say_number(${n}); } else if (${n} = 900) { BackGround(900); } else if (${n} >= 801 && ${n} <= 899) { BackGround(800_); n=${n} % 800; &say_number(${n}); } else if (${n} = 800) { BackGround(800); } else if (${n} >= 701 && ${n} <= 799) { BackGround(700_); n=${n} % 700; &say_number(${n}); } else if (${n} = 700) { BackGround(700); } else if (${n} >= 601 && ${n} <= 699) { BackGround(600_); n=${n} % 600; &say_number(${n}); } else if (${n} = 600) { BackGround(600); } else if (${n} >= 501 && ${n} <= 599) { BackGround(500_); n=${n} % 500; &say_number(${n}); } else if (${n} = 500) { BackGround(500); } else if (${n} >= 401 && ${n} <= 499) { BackGround(400_); n=${n} % 400; &say_number(${n}); } else if (${n} = 400) { BackGround(400); } else if (${n} >= 301 && ${n} <= 399) { BackGround(300_); n=${n} % 300; &say_number(${n}); } else if (${n} = 300) { BackGround(300); } else if (${n} >= 201 && ${n} <= 299) { BackGround(200_); n=${n} % 200; &say_number(${n}); } else if (${n} = 200) { BackGround(200); } else if (${n} >= 101 && ${n} <= 199) { BackGround(100_); n=${n} % 100; &say_number(${n}); } else if (${n} = 100) { BackGround(100); } else if (${n} >= 81 && ${n} <= 99) { BackGround(40_); n=${n} % 80; &say_number(${n}); } else if (${n} = 80) { BackGround(80); } else if (${n} >= 61 && ${n} <= 79) { BackGround(60_); n=${n} % 60; &say_number(${n}); } else if (${n} = 60) { BackGround(60); } else if (${n} >= 41 && ${n} <= 59) { BackGround(40_); n=${n} % 40; &say_number(${n}); } else if (${n} = 40) { BackGround(40); } else if (${n} >= 21 && ${n} <= 39) { BackGround(20_); n=${n} % 20; &say_number(${n}); } else if (${n} >= 0 && ${n} <= 20) { BackGround(${n}); } };
Asterisk was restarting when using ael reload command.
I have configured logger.conf with option

and only thing it writes to log file when restarting is registering macro-say_number, then it restarts. Here’s piece of log file:

[Jul 29 22:48:40] VERBOSE[4004] logger.c: -- Registered extension context 'macro-say_number' [Jul 29 22:48:45] VERBOSE[4028] logger.c: Asterisk Event Logger Started /var/log/asterisk/event_log [Jul 29 22:48:45] VERBOSE[4028] logger.c: Asterisk Dynamic Loader Starting:

I came to conclusion that this behavior is caused by number of continuous else-if statements, which are currently 28. When I remove any 2 of them and number of continuous else-if blocks decreases to 26, asterisk doesn’t restart on ael reload command.

I’ve changed the code to following. Now it works.

macro say_number(n) { if (${n} >= 1001 && ${n} <= 999999) { if (${n} = 1000) { BackGround(1000); } else if (${n}/1000 != 1) { &say_number(${n}/1000); }; n=${n}%1000; if (${n}) { BackGround(1000_); &say_number(${n}); } else BackGround(1000); } else if (${n} >= 901 && ${n} <= 999) { if (${n} = 900) { BackGround(900); } else BackGround(900_); n=${n} % 900; &say_number(${n}); } else if (${n} >= 800 && ${n} <= 899) { if (${n} = 800) { BackGround(800); } else BackGround(800_); n=${n} % 800; &say_number(${n}); } else if (${n} >= 700 && ${n} <= 799) { if (${n} = 700) { BackGround(700); } else BackGround(700_); n=${n} % 700; &say_number(${n}); } else if (${n} >= 600 && ${n} <= 699) { if (${n} = 600) { BackGround(600); } else BackGround(600_); n=${n} % 600; &say_number(${n}); } else if (${n} >= 500 && ${n} <= 599) { if (${n} = 500) { BackGround(500); } else BackGround(500_); n=${n} % 500; &say_number(${n}); } else if (${n} >= 400 && ${n} <= 499) { if (${n} = 400) { BackGround(400); } else BackGround(400_); n=${n} % 400; &say_number(${n}); } else if (${n} >= 300 && ${n} <= 399) { if (${n} = 300) { BackGround(300); } else BackGround(300_); n=${n} % 300; &say_number(${n}); } else if (${n} >= 200 && ${n} <= 299) { if (${n} = 200) { BackGround(200); } else BackGround(200_); n=${n} % 200; &say_number(${n}); } else if (${n} >= 100 && ${n} <= 199) { if (${n} = 100) { BackGround(100); } else BackGround(100_); n=${n} % 100; &say_number(${n}); } else if (${n} >= 80 && ${n} <= 99) { if (${n} = 80) { BackGround(80); } else BackGround(40_); n=${n} % 80; &say_number(${n}); } else if (${n} >= 60 && ${n} <= 79) { if (${n} = 60) { BackGround(60); } else BackGround(60_); n=${n} % 60; &say_number(${n}); } else if (${n} >= 40 && ${n} <= 59) { if (${n} = 40) { BackGround(40); } else BackGround(40_); n=${n} % 40; &say_number(${n}); } else if (${n} >= 20 && ${n} <= 39) { if (${n} = 20) { BackGround(20); } else BackGround(20_); n=${n} % 20; &say_number(${n}); } else if (${n} >= 0 && ${n} <= 19) { BackGround(${n}); } };

Any idea?