[asterisk-commits] murf: branch murf/AEL2-1.2 r57052 -
/team/murf/AEL2-1.2/pbx/pbx_ael2.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Wed Feb 28 10:45:48 MST 2007
Author: murf
Date: Wed Feb 28 11:45:48 2007
New Revision: 57052
URL: http://svn.digium.com/view/asterisk?view=rev&rev=57052
Log:
Backported the fix made in 57049 (errors reduced to warnings because the missing element could be in extensions.conf; goto a label in a catch not found -- fixed).
Modified:
team/murf/AEL2-1.2/pbx/pbx_ael2.c
Modified: team/murf/AEL2-1.2/pbx/pbx_ael2.c
URL: http://svn.digium.com/view/asterisk/team/murf/AEL2-1.2/pbx/pbx_ael2.c?view=diff&rev=57052&r1=57051&r2=57052
==============================================================================
--- team/murf/AEL2-1.2/pbx/pbx_ael2.c (original)
+++ team/murf/AEL2-1.2/pbx/pbx_ael2.c Wed Feb 28 11:45:48 2007
@@ -1261,9 +1261,10 @@
errs++;
}
} else {
- ast_log(LOG_ERROR,"Error: file %s, line %d-%d: goto: no context %s could be found that matches the goto target!\n",
+ /* here is where code would go to check for target existence in extensions.conf files */
+ ast_log(LOG_WARNING,"Warning: file %s, line %d-%d: goto: no context %s could be found that matches the goto target!\n",
item->filename, item->startline, item->endline, item->u1.list->u1.str);
- errs++;
+ warns++; /* this is just a warning, because this context could be in extensions.conf or somewhere */
}
}
}
@@ -1542,9 +1543,28 @@
item->u2.statements == pval list of statements in context body
*/
/* printf(" matching in CATCH\n"); */
- if ((x=match_pval(item->u2.statements))) {
- /* printf("CATCH: Responded with pval match %x\n", x); */
- return x;
+ if (!strcmp(match_exten,"*") || extension_matches(item, match_exten, item->u1.str) ) {
+ /* printf("Descending into matching catch %s => %s\n", match_exten, item->u1.str); */
+ if (strcmp(match_label,"1") == 0) {
+ if (item->u2.statements) {
+ struct pval *p5 = item->u2.statements;
+ while (p5 && p5->type == PV_LABEL) /* find the first non-label statement in this context. If it exists, there's a "1" */
+ p5 = p5->next;
+ if (p5)
+ return p5;
+ else
+ return 0;
+ }
+ else
+ return 0;
+ }
+
+ if ((x=match_pval(item->u2.statements))) {
+ /* printf("CATCH: Responded with pval match %x\n", (unsigned int)x); */
+ return x;
+ }
+ } else {
+ /* printf("Skipping catch %s\n", item->u1.str); */
}
break;
@@ -1723,6 +1743,7 @@
/* printf(" --- Got args %s, %s\n", exten, label); */
struct pval *ret;
struct pval *p3;
+ struct pval *startpt = ((curr_cont->type==PV_MACRO)?curr_cont->u3.macro_statements: curr_cont->u2.statements);
count_labels = 0;
return_on_context_match = 0;
@@ -1736,7 +1757,7 @@
/* the target of the goto could be in an included context!! Fancy that!! */
/* look for includes in the current context */
- for (p3=curr_cont->u2.statements; p3; p3=p3->next) {
+ for (p3=startpt; p3; p3=p3->next) {
if (p3->type == PV_INCLUDES) {
struct pval *p4;
for (p4=p3->u1.list; p4; p4=p4->next) {
@@ -1763,19 +1784,25 @@
/* printf(" --- Got args %s, %s\n", exten, label); */
struct pval *ret;
struct pval *p3;
+ struct pval *startpt;
count_labels = 0;
return_on_context_match = 0;
match_context = "*";
match_exten = exten;
match_label = label;
- ret = match_pval(curr_cont->u2.statements);
+ if (curr_cont->type == PV_MACRO)
+ startpt = curr_cont->u3.macro_statements;
+ else
+ startpt = curr_cont->u2.statements;
+
+ ret = match_pval(startpt);
if (ret)
return ret;
/* the target of the goto could be in an included context!! Fancy that!! */
/* look for includes in the current context */
- for (p3=curr_cont->u2.statements; p3; p3=p3->next) {
+ for (p3=startpt; p3; p3=p3->next) {
if (p3->type == PV_INCLUDES) {
struct pval *p4;
for (p4=p3->u1.list; p4; p4=p4->next) {
@@ -2267,9 +2294,10 @@
*/
macro_def = find_macro(item->u1.str);
if (!macro_def) {
- ast_log(LOG_ERROR, "Error: file %s, line %d-%d: macro call to non-existent %s !\n",
+ /* here is a good place to check to see if the definition is in extensions.conf! */
+ ast_log(LOG_WARNING, "Error: file %s, line %d-%d: macro call to non-existent %s ! Hopefully it is present in extensions.conf! \n",
item->filename, item->startline, item->endline, item->u1.str);
- errs++;
+ warns++;
} else if (macro_def->type != PV_MACRO) {
ast_log(LOG_ERROR,"Error: file %s, line %d-%d: macro call to %s references a context, not a macro!\n",
item->filename, item->startline, item->endline, item->u1.str);
More information about the asterisk-commits
mailing list