1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
diff -wNaur -xCVS cicb-5.1.1b3/icb/parse.c cicb/icb/parse.c
--- cicb-5.1.1b3/icb/parse.c 2009-03-23 02:51:53.000000000 -0400
+++ cicb/icb/parse.c 2013-07-05 02:16:27.000000000 -0400
@@ -1,4 +1,4 @@
-/* $Id: parse.c,v 1.20 2009/03/23 06:51:53 hoche Exp $ */
+/* $Id: parse.c,v 1.21 2013/07/05 06:16:27 hoche Exp $ */
/* parse a line from the user */
@@ -8,6 +8,9 @@
#define ARRAY_SIZE(x) (sizeof (x) / sizeof (x[0]))
+#define TCL_CONTINUE_ERROR_MSG "invoked \"continue\" outside of a loop"
+#define TCL_IGNORE 666
+
/* This is similar to Tcl_VarEval, but it treats each string as a separate
list element, rather than concat-ing the strings together and then
@@ -76,6 +79,14 @@
if (status == TCL_CONTINUE) {
send_command (cmd, args);
status = TCL_OK;
+ } else if (status == TCL_ERROR) {
+
+ /* handle the dreaded "invoked continue" message */
+ char *errmsg = (char*)Tcl_GetStringResult (interp);
+ if (strcmp(errmsg, TCL_CONTINUE_ERROR_MSG) == 0) {
+ send_command (cmd, args);
+ status = TCL_IGNORE;
+ }
}
return status;
@@ -122,7 +133,9 @@
putl (result, PL_SL);
}
error_mode = 0;
-
+ } else if (status == TCL_IGNORE) {
+ /* do nothing */
+ error_mode = 0;
} else {
/* Report an error. */
char* errmsg = "";
|