AEL, after parsing, but before compiling, traverses the dialplan
tree, and makes several checks:
- Macro calls to non-existent macros.
- Macro calls to contexts.
- Macro calls with argument count not matching the definition.
- application call to macro. (missing the '&')
- application calls to "GotoIf", "GotoIfTime", "while",
"endwhile", "Random", and "execIf", will generate a message to
consider converting the call to AEL goto, while, etc. constructs.
- goto a label in an empty extension.
- goto a non-existent label, either a within-extension,
within-context, or in a different context, or in any included
contexts. Will even check "sister" context references.
- All the checks done on the time values in the dial plan, are
done on the time values in the ifTime() and includes times:
o the time range has to have two times separated by a dash;
o the times have to be in range of 0 to 24 hours.
o The weekdays have to match the internal list, if they are provided;
o the day of the month, if provided, must be in range of 1 to 31;
o the month name or names have to match those in the internal list.
- (0.5) If an expression is wrapped in $[ ... ], and the compiler
will wrap it again, a warning is issued.
- (0.5) If an expression had operators (you know,
+,-,*,/,issued. Maybe someone forgot to wrap a variable name?
- (0.12) check for duplicate context names.
- (0.12) check for abstract contexts that are not included by any context.
- (0.13) Issue a warning if a label is a numeric value.
There are a subset of checks that have been removed until the proposed
AAL (Asterisk Argument Language) is developed and incorporated into Asterisk.
These checks will be:
- (if the application argument analyzer is working: the presence
of the 'j' option is reported as error.
- if options are specified, that are not available in an
application.
- if you specify too many arguments to an application.
- a required argument is not present in an application call.
- Switch-case using "known" variables that applications set, that
does not cover all the possible values. (a "default" case will
solve this problem. Each "unhandled" value is listed.
- a Switch construct is used, which is uses a known variable, and
the application that would set that variable is not called in
the same extension. This is a warning only...
- Calls to applications not in the "applist" database (installed
in /var/lib/asterisk/applist" on most systems).
- In an assignment statement, if the assignment is to a function,
the function name used is checked to see if it one of the
currently known functions. A warning is issued if it is not.
lmadsen
2010-01-14