[e-cvs] cvs commit: e/src/jsrc/org/erights/e/elang/syntax EBuilder.java EParser.java e.y
markm@eros.cs.jhu.edu
markm@eros.cs.jhu.edu
Thu, 23 Aug 2001 04:57:07 -0400
markm 01/08/23 04:57:07
Modified: src/jsrc/org/erights/e/elang/syntax EBuilder.java
EParser.java e.y
Log:
new when-catch-finally. Thanks Alan Karp.
Revision Changes Path
1.72 +34 -34 e/src/jsrc/org/erights/e/elang/syntax/EBuilder.java
Index: EBuilder.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/syntax/EBuilder.java,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -r1.71 -r1.72
--- EBuilder.java 2001/04/15 19:49:25 1.71
+++ EBuilder.java 2001/08/23 08:57:06 1.72
@@ -1439,20 +1439,22 @@
* <pre>
* when (eExpr) -> auds(patt1) {
* body1
- * } catch patt2 {
- * body2
- * }
+ * } catch ... {
+ * ...
+ * } ... # possibly more catches & a finally clause
* </pre>
* expands to
* <pre>
* Ref whenResolved(eExpr, def auds(resolution) :void {
- * if (Ref isBroken(resolution)) {
- * def patt2 := Ref optProblem(resolution)
- * body2
- * } else {
+ * try {
+ * if (Ref isBroken(resolution)) {
+ * throw(Ref optProblem(resolution))
+ * }
* def patt1 := resolution
* body1
- * }
+ * } catch ... {
+ * ...
+ * } ... # possibly more catches & a finally clause
* })
* </pre>
*/
@@ -1460,31 +1462,29 @@
Object[] auds,
Pattern patt1,
EExpr body1,
- Pattern patt2,
- EExpr body2)
+ Object catchers,
+ Object optFinally)
{
String resolution = newTemp("resolution");
EExpr resExpr = noun(resolution);
Pattern resPatt = finalPattern(resolution);
+ EExpr cond = ifx(call(REF, "isBroken", list(resExpr)),
+ call(THROW,
+ "run",
+ list(call(REF, "optProblem", list(resExpr)))));
if (! (patt1 instanceof IgnorePattern)) {
body1 = sequence(define(patt1, resExpr),
body1);
}
- body2 = sequence(define(patt2,
- call(REF,
- "optProblem",
- list(resExpr))),
- body2);
- EExpr sndBody = ifx(call(REF, "isBroken", list(resExpr)),
- body2,
- body1);
+ body1 = sequence(cond, body1);
+ body1 = tryx(body1, catchers, optFinally);
return call(REF,
"whenResolved",
list(eExpr,
methObject(auds,
methHead("run", list(resPatt), VOID),
- sndBody)));
+ body1)));
}
/**
@@ -1505,14 +1505,15 @@
* body2
* }
* </pre>
- * which then expands according to the base case.
+ * which then expands according to the base case explained in
+ * {@link #whenBase}
*/
private EExpr whenList(EExpr[] eExprs,
Object[] auds,
Pattern[] patts,
EExpr body1,
- Pattern patt2,
- EExpr body2)
+ Object catchers,
+ Object optFinally)
{
int len = eExprs.length;
if (len <= 0) {
@@ -1539,14 +1540,18 @@
auds,
patt1,
body1,
- patt2,
- body2);
+ catchers,
+ optFinally);
}
+
-
+ /**
+ *
+ */
/*package*/ EExpr when(Object headList,
Object bodyExpr,
- Object mCatcher)
+ Object catchers,
+ Object optFinally)
{
EExpr[] eExprs = null;
Object[] auds = null;
@@ -1562,17 +1567,12 @@
reserved("alternate when syntax");
}
- EExpr body1 = (EExpr)bodyExpr;
- Matcher catcher = (Matcher)mCatcher;
- Pattern patt2 = catcher.pattern();
- EExpr body2 = catcher.body();
-
return whenList(eExprs,
auds,
patts,
- body1,
- patt2,
- body2);
+ (EExpr)bodyExpr,
+ catchers,
+ optFinally);
}
1.80 +262 -261 e/src/jsrc/org/erights/e/elang/syntax/EParser.java
Index: EParser.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/syntax/EParser.java,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -r1.79 -r1.80
--- EParser.java 2001/08/13 20:38:10 1.79
+++ EParser.java 2001/08/23 08:57:06 1.80
@@ -346,9 +346,9 @@
43, 43, 89, 89, 38, 13, 13, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 44,
44, 50, 47, 47, 47, 91, 92, 94, 94, 95,
- 95, 93, 93, 51, 51, 54, 52, 52, 57, 57,
- 96, 96, 96, 96, 98, 98, 98, 98, 97, 97,
- 97, 100, 100, 101, 101, 102, 102, 99, 99, 90,
+ 95, 93, 93, 51, 51, 54, 96, 52, 52, 57,
+ 57, 97, 97, 97, 97, 99, 99, 99, 99, 98,
+ 98, 98, 101, 101, 102, 102, 103, 103, 100, 100,
90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
@@ -357,7 +357,7 @@
90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
- 90, 90, 90, 90,
+ 90, 90, 90, 90, 90,
};
final static short yylen[] = { 2,
1, 1, 2, 1, 1, 3, 3, 1, 3, 1,
@@ -371,7 +371,7 @@
6, 2, 3, 6, 4, 4, 5, 6, 7, 2,
4, 1, 4, 5, 6, 1, 1, 1, 1, 1,
1, 1, 3, 2, 1, 3, 3, 1, 3, 3,
- 5, 3, 4, 2, 3, 3, 4, 4, 1, 1,
+ 5, 3, 4, 2, 3, 3, 4, 5, 1, 1,
4, 2, 2, 4, 2, 3, 2, 3, 2, 1,
3, 3, 5, 5, 4, 4, 0, 1, 1, 0,
5, 4, 0, 1, 3, 1, 2, 2, 3, 3,
@@ -387,9 +387,9 @@
1, 3, 3, 2, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
7, 6, 7, 1, 1, 0, 0, 1, 3, 1,
- 3, 1, 3, 1, 2, 3, 0, 2, 7, 3,
- 1, 2, 2, 4, 2, 4, 2, 4, 2, 5,
- 4, 2, 3, 1, 4, 2, 2, 0, 3, 1,
+ 3, 1, 3, 1, 1, 2, 3, 0, 2, 7,
+ 3, 1, 2, 2, 4, 2, 4, 2, 4, 2,
+ 5, 4, 2, 3, 1, 4, 2, 2, 0, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -398,19 +398,19 @@
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
+ 1, 1, 1, 1, 1,
};
final static short yydefred[] = { 0,
234, 0, 0, 0, 2, 0, 246, 0, 0, 0,
- 300, 301, 302, 303, 304, 305, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
- 320, 321, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
- 340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
- 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
- 360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
- 370, 371, 372, 373, 374, 375, 376, 377, 378, 379,
- 380, 381, 382, 383, 384, 0, 0, 0, 0, 0,
+ 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
+ 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
+ 321, 322, 323, 324, 325, 326, 327, 328, 329, 330,
+ 331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
+ 341, 342, 343, 344, 345, 346, 347, 348, 349, 350,
+ 351, 352, 353, 354, 355, 356, 357, 358, 359, 360,
+ 361, 362, 363, 364, 365, 366, 367, 368, 369, 370,
+ 371, 372, 373, 374, 375, 376, 377, 378, 379, 380,
+ 381, 382, 383, 384, 385, 0, 0, 0, 0, 0,
0, 188, 3, 0, 189, 0, 174, 0, 167, 172,
247, 96, 97, 98, 99, 100, 102, 0, 0, 0,
0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -438,60 +438,60 @@
0, 0, 180, 178, 181, 0, 177, 0, 103, 0,
0, 0, 266, 0, 264, 265, 202, 198, 0, 0,
0, 115, 0, 109, 0, 0, 0, 239, 0, 0,
- 266, 116, 0, 274, 0, 0, 0, 110, 126, 0,
- 266, 0, 0, 76, 75, 73, 74, 130, 244, 0,
- 106, 107, 0, 0, 0, 0, 0, 0, 155, 0,
- 0, 0, 221, 128, 0, 0, 0, 0, 0, 112,
- 0, 9, 0, 16, 0, 0, 0, 0, 0, 0,
+ 266, 116, 0, 275, 274, 0, 0, 236, 110, 126,
+ 0, 266, 0, 0, 76, 75, 73, 74, 130, 244,
+ 0, 106, 107, 0, 0, 0, 0, 0, 0, 155,
+ 0, 0, 0, 221, 128, 0, 0, 0, 0, 0,
+ 112, 0, 9, 0, 16, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 148, 0, 147, 0, 131, 166, 0, 0, 163,
- 0, 0, 0, 0, 0, 7, 0, 190, 191, 185,
- 0, 0, 0, 0, 179, 165, 0, 135, 0, 224,
- 0, 0, 136, 0, 0, 0, 0, 0, 0, 0,
- 0, 86, 0, 0, 0, 0, 117, 275, 0, 0,
- 0, 229, 118, 0, 0, 0, 0, 0, 289, 280,
- 243, 0, 242, 240, 121, 0, 0, 124, 0, 0,
- 0, 0, 0, 0, 113, 0, 0, 21, 23, 0,
- 18, 22, 19, 25, 29, 31, 32, 40, 39, 36,
- 37, 38, 33, 34, 35, 43, 44, 45, 42, 46,
- 0, 0, 54, 0, 51, 0, 59, 0, 56, 57,
- 67, 66, 63, 65, 61, 62, 64, 71, 70, 69,
- 0, 0, 79, 0, 0, 0, 93, 149, 192, 194,
- 162, 0, 156, 0, 0, 159, 11, 152, 150, 152,
- 183, 182, 0, 0, 223, 236, 199, 200, 0, 209,
- 0, 111, 134, 133, 0, 0, 87, 236, 0, 278,
- 0, 0, 228, 0, 0, 0, 292, 0, 294, 0,
- 0, 0, 0, 267, 260, 219, 0, 226, 0, 0,
- 24, 203, 0, 0, 0, 0, 94, 0, 169, 171,
- 0, 0, 0, 0, 268, 0, 222, 0, 88, 0,
- 272, 0, 276, 0, 0, 230, 297, 296, 0, 293,
- 291, 0, 0, 0, 281, 267, 0, 0, 299, 0,
- 220, 0, 81, 0, 84, 95, 151, 184, 142, 0,
- 0, 0, 0, 0, 0, 267, 0, 89, 0, 0,
- 0, 231, 0, 282, 285, 287, 0, 283, 0, 290,
- 261, 0, 80, 141, 0, 0, 0, 0, 0, 0,
- 269, 0, 0, 210, 273, 262, 0, 295, 279, 0,
- 0, 0, 204, 0, 215, 0, 0, 0, 218, 211,
- 213, 271, 263, 0, 284, 286, 288, 214, 0, 212,
- 0, 227, 216, 0, 217,
+ 0, 0, 148, 0, 147, 0, 131, 166, 0, 0,
+ 163, 0, 0, 0, 0, 0, 7, 0, 190, 191,
+ 185, 0, 0, 0, 0, 179, 165, 0, 135, 0,
+ 224, 0, 0, 136, 0, 0, 0, 0, 0, 0,
+ 0, 0, 86, 0, 0, 0, 0, 117, 276, 0,
+ 0, 0, 229, 0, 0, 0, 0, 0, 0, 0,
+ 290, 281, 243, 0, 242, 240, 121, 0, 0, 124,
+ 0, 0, 0, 0, 0, 0, 113, 0, 0, 21,
+ 23, 0, 18, 22, 19, 25, 29, 31, 32, 40,
+ 39, 36, 37, 38, 33, 34, 35, 43, 44, 45,
+ 42, 46, 0, 0, 54, 0, 51, 0, 59, 0,
+ 56, 57, 67, 66, 63, 65, 61, 62, 64, 71,
+ 70, 69, 0, 0, 79, 0, 0, 0, 93, 149,
+ 192, 194, 162, 0, 156, 0, 0, 159, 11, 152,
+ 150, 152, 183, 182, 0, 0, 223, 236, 199, 200,
+ 0, 209, 0, 111, 134, 133, 0, 0, 87, 236,
+ 0, 279, 0, 0, 228, 0, 118, 0, 0, 293,
+ 0, 295, 0, 0, 0, 0, 267, 260, 219, 0,
+ 226, 0, 0, 24, 203, 0, 0, 0, 0, 94,
+ 0, 169, 171, 0, 0, 0, 0, 268, 0, 222,
+ 0, 88, 0, 272, 0, 277, 0, 0, 230, 298,
+ 297, 0, 294, 292, 0, 0, 0, 282, 267, 0,
+ 0, 300, 0, 220, 0, 81, 0, 84, 95, 151,
+ 184, 142, 0, 0, 0, 0, 0, 0, 267, 0,
+ 89, 0, 0, 0, 231, 0, 283, 286, 288, 0,
+ 284, 0, 291, 261, 0, 80, 141, 0, 0, 0,
+ 0, 0, 0, 269, 0, 0, 210, 273, 262, 0,
+ 296, 280, 0, 0, 0, 204, 0, 215, 0, 0,
+ 0, 218, 211, 213, 271, 263, 0, 285, 287, 289,
+ 214, 0, 212, 0, 227, 216, 0, 217,
};
final static short yydgoto[] = { 3,
- 188, 5, 399, 198, 146, 368, 335, 147, 6, 148,
- 149, 150, 151, 532, 561, 152, 283, 105, 154, 155,
- 156, 540, 157, 158, 159, 555, 160, 559, 161, 563,
- 162, 570, 163, 164, 165, 166, 241, 382, 167, 168,
+ 188, 5, 400, 198, 146, 368, 335, 147, 6, 148,
+ 149, 150, 151, 534, 563, 152, 283, 105, 154, 155,
+ 156, 542, 157, 158, 159, 557, 160, 561, 161, 565,
+ 162, 572, 163, 164, 165, 166, 241, 383, 167, 168,
318, 169, 242, 170, 218, 264, 354, 256, 213, 372,
- 373, 497, 230, 498, 171, 172, 234, 202, 478, 479,
- 319, 343, 472, 183, 243, 184, 185, 186, 187, 107,
+ 373, 498, 230, 374, 171, 172, 234, 202, 479, 480,
+ 319, 343, 473, 183, 243, 184, 185, 186, 187, 107,
108, 109, 110, 195, 196, 344, 345, 214, 215, 244,
- 601, 684, 708, 729, 355, 356, 501, 502, 245, 111,
- 250, 517, 652, 646, 686, 666, 383, 667, 509, 505,
- 618, 619,
+ 603, 687, 711, 732, 355, 356, 502, 503, 245, 111,
+ 250, 519, 655, 649, 689, 499, 669, 384, 670, 511,
+ 507, 621, 622,
};
-final static short yysindex[] = { -307,
- 0,10032, 0,11908, 0, -327, 0,16723, 48,16723,
+final static short yysindex[] = { -320,
+ 0,10200, 0,12076, 0, -308, 0,16891, 54,16891,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -500,75 +500,75 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -313, -313, 6675, -313, -28,
- 54, 0, 0, 99, 0, -160, 0, 120, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,12378,10150,10150,
-13432, 0,10032, 6794, 48, 8301, 48, 65, 65,13312,
- 48, 0, 48,13432, -313, -313, -313, -313, -316, -313,
- 10, 0, -51,15154, 9104, -313, 0, 0, 53, 0,
- 0, 362, -204, -185, 0, -16, 49, 34, 119, 2,
- 0, -182, 8635, 0, 188, 0, 0, -115, 0, 0,
- 0, 0, 0, 174, -313, -165, 201,12968,16723, -313,
- 0, -140, 233, -8, 240, -2, 0,11908, 296, 82,
- 135, -313, 46, 0, 0, -22, -313,13432, 122, 0,
- 0, 65, -71, 0, 0,16723,16723, 254, 271, 0,
- 0, 359, 65, 29, 0, 65, -140, 131, 0, 65,
- -313, -313, 0, 375, 278, 0, 0, -313, 389, 65,
- 65, 278,15272, 0,16723,12968,12968,12968,16723, 37,
- 354, 31, 0, 409, 0, 416, 0, 0, 202, -313,
- 0, 204, 9566, 118, 0, 65,16723,16723, 348, 353,
- 0, 91, 99,14356, 0, 8759,11908, -313, -313, 0,
- 0, 0, 0, 0, -313, 0, 0, 0, 0, 0,
- 0, 0, -313, -313, -313, -313, -313, -313, -313, -313,
- -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
- -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
- -313, -313,16723, 90, -313, 455, 0, 0, -11, -313,
- 451,10032, -313, 0, 0,13894, 0, -313, 453, -313,
- 0, 373, -313, 0, -313, 0, 0, 376, 378,12378,
- 381, 383, 0, 0, 0, 46, 0,12378, 0, 242,
- 65,10032, 0, 242, 0, 0, 0, 0, 257, 258,
- 9566, 0, -313, 0,11908, 243,15390, 0, 479, -313,
- 0, 0, -60, 0, 164, -313, 249, 0, 0, -313,
- 0, 163, 146, 0, 0, 0, 0, 0, 0, -313,
- 0, 0, -316, -313, 0, 410,11908, 411, 0, 503,
- 9566, -313, 0, 0, 174, 201, 288, 289, -313, 0,
- 65, 0, 9104, 0,12378,11908,11908,12031,11908,12378,
-12378,12378,12501,10032,10032,12501,12501,12501,12378,12378,
-12378,12378,12378,12378,12378,12501,12378,12501,12501,12501,
-12501,12501,12501,12501,12501,15508, 458, 508, -313, 514,
- 515, 0, 455, 0,12378, 0, 0,12378, 99, 0,
-10032, -313,10032, -313, 6794, 0, 8759, 0, 0, 0,
- -313,16723,10032,16030, 0, 0,10150, 0, 287, 0,
- 65, -313, 0, 432, 433, 519,16723, 65, -94, -313,
- 531, 0, 535, -313,10032, 65, 0, 0, 161, 167,
- 279, 0, 0,16319, 538, -313, -313, -313, 0, 0,
- 0, 37, 0, 0, 0, -313, 459, 0, 527, 545,
-12378, 462, 464,11908, 0, 99, -185, 0, 0, -26,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- -76, -76, 0, 119, 0, 119, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- -313, 553, 0, -313, 554, -313, 0, 0, 0, 0,
- 0,10494, 0,10494, -140, 0, 0, 0, 0, 0,
- 0, 0, -71,10150, 0, 0, 0, 0, 527, 0,
- 552, 0, 0, 0, 559, -313, 0, 0, 65, 0,
- -313, -313, 0, -313, 543, 543, 0, 3, 0, 543,
- -48, 561,16723, 0, 0, 0, 527, 0, 0, 0,
- 0, 0, 305, 563, -313, 565, 0, 566, 0, 0,
- 483, 485, 242, 65, 0, -46, 0, -313, 0, 570,
- 0, 332, 0,13432,10032, 0, 0, 0, -313, 0,
- 0, -313,15626,15626, 0, 0, -313, 543, 0, 491,
- 0, -313, 0, 577, 0, 0, 0, 0, 0, 242,
- 48,15744,15744, -313, -195, 0,16723, 0, -313, 495,
- 581, 0,16319, 0, 0, 0, 498, 0, -209, 0,
- 0, 309, 0, 0, -80, 9566, -10, 65, 175, 65,
- 0, -313, 499, 0, 0, 0,10032, 0, 0, -313,
-15626,15626, 0, 48, 0, 584,11908, 9566, 0, 0,
- 0, 0, 0, 346, 0, 0, 0, 0, 527, 0,
- 585, 0, 0, 527, 0,
+ 0, 0, 0, 0, 0, -272, -272, 6843, -272, 31,
+ 49, 0, 0, 118, 0, -93, 0, 136, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,12546,10318,10318,
+13600, 0,10200, 6962, 54, 8469, 54, 92, 92,13480,
+ 54, 0, 54,13600, -272, -272, -272, -272, -279, -272,
+ 8, 0, -84,15322, 9272, -272, 0, 0, 132, 0,
+ 0, 358, -164, -147, 0, -35, 47, 116, 120, -19,
+ 0, -151, 8803, 0, 208, 0, 0, -36, 0, 0,
+ 0, 0, 0, 192, -272, -131, 201,13136,16891, -272,
+ 0, -129, 225, -23, 233, -4, 0,12076, 287, 73,
+ 76, -272, 85, 0, 0, 97, -272,13600, 20, 0,
+ 0, 92, -45, 0, 0,16891,16891, 216, 223, 0,
+ 0, 313, 92, -57, 0, 92, -129, 86, 0, 92,
+ -272, -272, 0, 329, 282, 0, 0, -272, 367, 92,
+ 92, 282,15440, 0,16891,13136,13136,13136,16891, 2,
+ 320, 7, 0, 372, 0, 380, 0, 0, 165, -272,
+ 0, 166, 9734, 94, 0, 92,16891,16891, 318, 321,
+ 0, 51, 118,14524, 0, 8927,12076, -272, -272, 0,
+ 0, 0, 0, 0, -272, 0, 0, 0, 0, 0,
+ 0, 0, -272, -272, -272, -272, -272, -272, -272, -272,
+ -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
+ -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
+ -272, -272,16891, 89, -272, 410, 0, 0, 122, -272,
+ 408,10200, -272, 0, 0,14062, 0, -272, 409, -272,
+ 0, 333, -272, 0, -272, 0, 0, 328, 336,12546,
+ 349, 353, 0, 0, 0, 85, 0,12546, 0, 207,
+ 92,10200, 0, 207, 0, 0, 0, 0, 224, 226,
+ 9734, 0, -272, 0,12076, 206,15558, 0, 453, -272,
+ 0, 0, -176, 0, 0, 195, -272, 0, 0, 0,
+ -272, 0, 95, 117, 0, 0, 0, 0, 0, 0,
+ -272, 0, 0, -279, -272, 0, 387,12076, 389, 0,
+ 476, 9734, -272, 0, 0, 192, 201, 269, 276, -272,
+ 0, 92, 0, 9272, 0,12546,12076,12076,12199,12076,
+12546,12546,12546,12669,10200,10200,12669,12669,12669,12546,
+12546,12546,12546,12546,12546,12546,12669,12546,12669,12669,
+12669,12669,12669,12669,12669,12669,15676, 442, 497, -272,
+ 499, 503, 0, 410, 0,12546, 0, 0,12546, 118,
+ 0,10200, -272,10200, -272, 6962, 0, 8927, 0, 0,
+ 0, -272,16891,10200,16198, 0, 0,10318, 0, 277,
+ 0, 92, -272, 0, 421, 423, 508,16891, 92, -75,
+ -272, 510, 0, 512, -272,10200, 92, 0, 0, 140,
+ 146, 205, 0, 286, 281,16487, 520, -272, -272, -272,
+ 0, 0, 0, 2, 0, 0, 0, -272, 437, 0,
+ 505, 528,12546, 445, 446,12076, 0, 118, -147, 0,
+ 0, -21, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -117, -117, 0, 120, 0, 120, 0, -19,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -272, 532, 0, -272, 533, -272, 0, 0,
+ 0, 0, 0,10662, 0,10662, -129, 0, 0, 0,
+ 0, 0, 0, 0, -45,10318, 0, 0, 0, 0,
+ 505, 0, 531, 0, 0, 0, 536, -272, 0, 0,
+ 92, 0, -272, -272, 0, -272, 0, 521, 521, 0,
+ 3, 0, 521, -106, 537,16891, 0, 0, 0, 505,
+ 0, 0, 0, 0, 0, 217, 540, -272, 542, 0,
+ 543, 0, 0, 460, 462, 207, 92, 0, -26, 0,
+ -272, 0, 550, 0, 310, 0,13600,10200, 0, 0,
+ 0, -272, 0, 0, -272,15794,15794, 0, 0, -272,
+ 521, 0, 468, 0, -272, 0, 553, 0, 0, 0,
+ 0, 0, 207, 54,15912,15912, -272, -107, 0,16891,
+ 0, -272, 470, 561, 0,16487, 0, 0, 0, 477,
+ 0, -169, 0, 0, 227, 0, 0, -98, 9734, -25,
+ 92, 100, 92, 0, -272, 479, 0, 0, 0,10200,
+ 0, 0, -272,15794,15794, 0, 54, 0, 564,12076,
+ 9734, 0, 0, 0, 0, 0, 279, 0, 0, 0,
+ 0, 505, 0, 568, 0, 0, 505, 0,
};
-final static short yyrindex[] = { 6207,
- 0, 154, 0, 19, 0, 5377, 0, 0, 0, 0,
+final static short yyrindex[] = { 6365,
+ 0, 133, 0, 74, 0, 5602, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -577,87 +577,87 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,12845,16841, -39,11438, 0,
- 0, 0, 0, 5196, 0, 0, 0, 5914, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 154, -95, 247,
- 0, 0, 154, 154, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,16841,12845,12845,12845,10621,11438,
- 0, 0, 0, 0, 154, 627, 0, 0, 27, 0,
- 915, 539, 0, 5947, 0, 4574, 4991, 4781, 4330, 4159,
- 0, 4120, 3742, 0, 2051, 0, 0, 0, 0, 0,
- 0, 0, 0, 5486,11438, 0, 5522, 154, 0,14238,
- 0, -19, 0, 35, 0, 537, 0, 154, 0, 0,
- 0,11561, 0, 0, 0, 0,11561, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,14696, 0, 0, 347, 0, 0, 0,
-15862,10968, 0, 2466, 0, 0, 0,11438, 0, 0,
- 0, 0, 0, 0, 0, 154, 154, 154, 0, 70,
- 0, 0, 0, 38, 0, 0, 0, 0, 0,11091,
- 0, 0, -29, 510, 0, 0, 0, 0, 0, 0,
- 7256, 0, 793, 0, 0, 50, 150,11561,11438, 0,
- 0, 0, 0, 0,11438, 0, 0, 0, 0, 0,
- 0, 0,11438,11438,11561,11561,11561,11561, 9222, 9222,
-11561,11561,11561,11561,11561,11561,11561,11561,11561,11561,
-11561,11561,11561,11561,11561,11561,11561,11561,11561,11561,
-15862,10621, 0, 2619,10968, 0, 0, 0, 0,11561,
- 0, 154,11561, 0, 0, 0, 0, 9222, 5776, 9222,
- 0, 5812, 6331, 0, -3, 0, 0, 0, 0, 154,
-16959,16487, 0, 0, 0, 0, 0, 154, 0, 363,
- 0, 154, 0, 363, 0, 0, 0, 0, 0, 0,
- -29, 0,16841, 0, 154, 1483, 0, 0, 0,10968,
- 0, 0, 1898, 0, 0,11438, 0, 0, 0,16201,
- 0, -109, 0, 0, 0, 0, 0, 0, 0,11438,
- 0, 0,11438,11438, 1330, 0, -63, 0, 0, 0,
- -29,11561, 0, 0, 7596, 7718, 0, 0,11438, 0,
- 0, 0, 154, 0, 154, 154, 154, 154, 154, 154,
- 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
- 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
- 154, 154, 154, 154, 154, 0, 0, 3034,10968, 0,
- 0, 0, 0, 0, 154, 0, 0, 154, -23, 0,
- 154, 9688, 154, 9688, 154, 0, -7, 0, 0, 0,
-11438, 0, 154, 0, 0, 0, 247, 0, 0, 0,
- 0, -66, 0, 0, 0, 0, 0, 0, 0,10968,
- 3187, 0, 0, -68, 154, 0, 0, 0, 0, 0,
- 0, 0, 0, 594, 0, -56,16201,16841, 0, 0,
- 0, 0, 0, 0, 0, 511, 0, 0, 510, 0,
- 154, 0, 0, 154, 0, 7134, 5982, 0, 0,11438,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4817, 4952, 0, 4366, 0, 4745, 0, 4195, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-10968, 3602, 0,10968, 0,10968, 0, 0, 0, 0,
- 0, 154, 0, 154, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -95, 0, 0, 0, 0, 510, 0,
-14814, 0, 0, 0, 0,10968, 0, 0, 0, 0,
-13776, 9222, 0,11438, -24, -24, 0, 596, 0, -109,
- 513, 0, 0, 0, 0, 0, 510, 0, 8058, 8180,
- 0, 0, 0, 0,10968, 0, 0, 0, 0, 0,
- 0, 0, 363, 0, 0, -93, 0,16841, 0, 0,
- 0, 516, 0, 0, 154, 0, 0, 0,16605, 0,
- 0, 511, 0, 0, 0, 0, 511, -109, 0, 0,
- 0,11438, 0, 0, 0, 0, 0, 0, 0, 363,
- 0, 0, 0, -66, 517, 0, 0, 0, -85, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 518, 0,
- 0, 0, 0, 0, 0, -29, 510, 0, 510, 0,
- 0, 511, 0, 0, 0, 0, 154, 0, 0, 511,
- 0, 0, 0, 0, 0, 0, 154, -29, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 510, 0,
- 0, 0, 0, 510, 0,
+ 0, 0, 0, 0, 0,13013,17009, -43,11606, 0,
+ 0, 0, 0, 580, 0, 0, 0, 6065, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 133, -86, -81,
+ 0, 0, 133, 133, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,17009,13013,13013,13013,10789,11606,
+ 0, 0, 0, 0, 133, 610, 0, 0, 26, 0,
+ 1114, 5318, 0, 6150, 0, 4926, 845, 5133, 4682, 4511,
+ 0, 4472, 4094, 0, 2403, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5340,11606, 0, 5714, 133, 0,14406,
+ 0, -17, 0, 11, 0, 518, 0, 133, 0, 0,
+ 0,11729, 0, 0, 0, 0,11729, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,14864, 0, 0, 331, 0, 0, 0,
+16030,11136, 0, 2818, 0, 0, 0,11606, 0, 0,
+ 0, 0, 0, 0, 0, 133, 133, 133, 0, 17,
+ 0, 0, 0, 34, 0, 0, 0, 0, 0,11259,
+ 0, 0, -11, 490, 0, 0, 0, 0, 0, 0,
+ 7424, 0, 733, 0, 0, 128, 555,11729,11606, 0,
+ 0, 0, 0, 0,11606, 0, 0, 0, 0, 0,
+ 0, 0,11606,11606,11729,11729,11729,11729, 9390, 9390,
+11729,11729,11729,11729,11729,11729,11729,11729,11729,11729,
+11729,11729,11729,11729,11729,11729,11729,11729,11729,11729,
+16030,10789, 0, 2971,11136, 0, 0, 0, 0,11729,
+ 0, 133,11729, 0, 0, 0, 0, 9390, 5982, 9390,
+ 0, 6015, 6499, 0, -3, 0, 0, 0, 0, 133,
+17127,16655, 0, 0, 0, 0, 0, 133, 0, 352,
+ 0, 133, 0, 352, 0, 0, 0, 0, 0, 0,
+ -11, 0,17009, 0, 133, 1835, 0, 0, 0,11136,
+ 0, 0, 2250, 0, 0, 0,11606, 0, 0, 0,
+16369, 0, -67, 0, 0, 0, 0, 0, 0, 0,
+11606, 0, 0,11606,11606, 1267, 0, -39, 0, 0,
+ 0, -11,11729, 0, 0, 7764, 7886, 0, 0,11606,
+ 0, 0, 0, 133, 0, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 0, 0, 3386,11136,
+ 0, 0, 0, 0, 0, 133, 0, 0, 133, -8,
+ 0, 133, 9856, 133, 9856, 133, 0, -22, 0, 0,
+ 0,11606, 0, 133, 0, 0, 0, -81, 0, 0,
+ 0, 0, -80, 0, 0, 0, 0, 0, 0, 0,
+11136, 3539, 0, 0, -56, 133, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1682, 576, 0, -96,16369,17009,
+ 0, 0, 0, 0, 0, 0, 0, 501, 0, 0,
+ 490, 0, 133, 0, 0, 133, 0, 7302, 6200, 0,
+ 0,11606, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5169, 5304, 0, 4718, 0, 5097, 0, 4547,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,11136, 3954, 0,11136, 0,11136, 0, 0,
+ 0, 0, 0, 133, 0, 133, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -86, 0, 0, 0, 0,
+ 490, 0,14982, 0, 0, 0, 0,11136, 0, 0,
+ 0, 0,13944, 9390, 0,11606, 0, -10, -10, 0,
+ 587, 0, -67, 504, 0, 0, 0, 0, 0, 490,
+ 0, 8226, 8348, 0, 0, 0, 0,11136, 0, 0,
+ 0, 0, 0, 0, 0, 352, 0, 0, -42, 0,
+17009, 0, 0, 0, 506, 0, 0, 133, 0, 0,
+ 0,16773, 0, 0, 501, 0, 0, 0, 0, 501,
+ -67, 0, 0, 0,11606, 0, 0, 0, 0, 0,
+ 0, 0, 352, 0, 0, 0, -80, 507, 0, 0,
+ 0, -20, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 509, 0, 0, 0, 0, 0, 0, -11, 490,
+ 0, 490, 0, 0, 501, 0, 0, 0, 0, 133,
+ 0, 0, 501, 0, 0, 0, 0, 0, 0, 133,
+ -11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 490, 0, 0, 0, 0, 490, 0,
};
final static short yygindex[] = { 0,
- 1, 0, 404, 14, 0, -5, 250, 374, -136, -137,
- 0, -263, 221, 0, 114, 0, 0, 51, 224, 228,
- -248, -149, -167, -14, -62, 0, 13, 205, 126, -1,
- 206, 0, 0, -77, 0, 0, 23, -118, -232, 21,
- 0, -4, 0, 361, 0, -121, -233, 386, 0, 420,
- 0, 0, 0, 276, 165, 0, 0, -114, -321, 0,
- 0, -258, -340, -229, -146, -61, 0, 0, -113, 329,
- -257, 0, 0, 0, 0, 311, 0, 0, 0, -214,
- 0, 0, -18, -251, -559, -15, 0, 45, 268, 0,
- -264, -561, 20, 0, 0, 0, -579, 0, -555, 162,
- 0, -21,
+ 1, 0, 275, 12, 0, 68, 232, 370, -138, -153,
+ 0, -201, 221, 0, 179, 0, 0, 50, 222, 212,
+ -267, -286, 57, -18, -50, 0, -14, 197, 58, 78,
+ 194, 0, 0, -122, 0, 0, -48, -120, -225, 90,
+ 0, -7, 0, 311, 0, -121, -260, 377, 0, 412,
+ 264, 144, 0, 267, 160, 0, 0, -110, -290, 0,
+ 0, -270, -310, -236, -174, -69, 0, 0, -112, 327,
+ -529, 0, 0, 0, 0, 308, 0, 0, 0, -217,
+ 0, 0, -31, -249, -593, -32, 0, 41, 265, 0,
+ -223, -578, 9, 0, 0, 0, 0, -579, 0, -539,
+ 151, 0, -29,
};
-final static int YYTABLESIZE=17338;
+final static int YYTABLESIZE=17506;
//These two tables are not statically initialized, but rather
//initialized on first use, so that a failure to initialize them
@@ -679,7 +679,7 @@
yytable = (short[])obInp.readObject();
yycheck = (short[])obInp.readObject();
long hash = EYaccFixer.checkhash(yytable, yycheck);
- if (hash != -6617099290233459027L) {
+ if (hash != 2899208771068227488L) {
throw new RuntimeException(rName + " bad checkhash: " +
hash);
}
@@ -848,7 +848,7 @@
"prim : CLASS classHead body",
"prim : SWITCH parenExpr caseList",
"prim : TRY body catchList finallyClause",
-"prim : WHEN whenHead body catchClause",
+"prim : WHEN whenHead body catches finallyClause",
"prim : ifExpr",
"prim : macro",
"prim : '$' '{' LiteralInteger '}'",
@@ -1005,7 +1005,8 @@
"matchList : emptyList",
"matchList : matchList matcher br",
"catchList : emptyList",
-"catchList : catchList catchClause",
+"catchList : catches",
+"catches : catchList catchClause",
"catchClause : CATCH pattern body",
"finallyClause :",
"finallyClause : FINALLY body",
@@ -1117,7 +1118,7 @@
"reserved : WSTRING",
};
-//#line 1075 "e.y"
+//#line 1083 "e.y"
/**
*
@@ -1549,7 +1550,7 @@
*/
static public final IntTable TheTokenTable = tokenTable(TheTokens);
-//#line 4942 "EParser.java"
+//#line 4977 "EParser.java"
//###############################################################
// method: yylexdebug : check lexer state
//###############################################################
@@ -2061,7 +2062,7 @@
break;
case 118:
//#line 468 "e.y"
-{ yyval = when(val_peek(2),val_peek(1),val_peek(0)); }
+{ yyval = when(val_peek(3),val_peek(2),val_peek(1),val_peek(0)); }
break;
case 121:
//#line 474 "e.y"
@@ -2592,95 +2593,95 @@
//#line 964 "e.y"
{ yyval = with(val_peek(2), val_peek(1)); }
break;
-case 275:
-//#line 973 "e.y"
+case 276:
+//#line 981 "e.y"
{ yyval = with(val_peek(1), val_peek(0)); }
break;
-case 276:
-//#line 977 "e.y"
+case 277:
+//#line 985 "e.y"
{ yyval = matcher(val_peek(1), val_peek(0)); }
break;
-case 277:
-//#line 984 "e.y"
+case 278:
+//#line 992 "e.y"
{ yyval = null; }
break;
-case 278:
-//#line 985 "e.y"
+case 279:
+//#line 993 "e.y"
{ yyval = val_peek(0); }
break;
-case 279:
-//#line 996 "e.y"
+case 280:
+//#line 1004 "e.y"
{ yyval = oType(val_peek(6), val_peek(2)); }
break;
-case 280:
-//#line 997 "e.y"
+case 281:
+//#line 1005 "e.y"
{ yyval = oType(val_peek(2), list(val_peek(1))); }
break;
-case 284:
-//#line 1004 "e.y"
-{ yyval = with(val_peek(3),val_peek(1)); }
-break;
case 285:
-//#line 1008 "e.y"
-{ yyval = list(val_peek(0)); }
+//#line 1012 "e.y"
+{ yyval = with(val_peek(3),val_peek(1)); }
break;
case 286:
-//#line 1009 "e.y"
-{ yyval = with(val_peek(3),val_peek(0)); }
+//#line 1016 "e.y"
+{ yyval = list(val_peek(0)); }
break;
case 287:
-//#line 1011 "e.y"
-{ reserved("on event"); }
+//#line 1017 "e.y"
+{ yyval = with(val_peek(3),val_peek(0)); }
break;
case 288:
-//#line 1012 "e.y"
+//#line 1019 "e.y"
{ reserved("on event"); }
break;
case 289:
-//#line 1019 "e.y"
-{ yyval = mType(val_peek(1),list(),val_peek(0)); }
+//#line 1020 "e.y"
+{ reserved("on event"); }
break;
case 290:
-//#line 1020 "e.y"
-{ yyval = mType(val_peek(4),val_peek(2),val_peek(0)); }
+//#line 1027 "e.y"
+{ yyval = mType(val_peek(1),list(),val_peek(0)); }
break;
case 291:
-//#line 1021 "e.y"
-{ yyval = mType("run",val_peek(2),val_peek(0)); }
+//#line 1028 "e.y"
+{ yyval = mType(val_peek(4),val_peek(2),val_peek(0)); }
break;
case 292:
-//#line 1025 "e.y"
-{ yyval = val_peek(0); }
+//#line 1029 "e.y"
+{ yyval = mType("run",val_peek(2),val_peek(0)); }
break;
case 293:
-//#line 1026 "e.y"
-{ yyval = val_peek(1); }
+//#line 1033 "e.y"
+{ yyval = val_peek(0); }
break;
case 294:
-//#line 1030 "e.y"
-{ yyval = list(val_peek(0)); }
+//#line 1034 "e.y"
+{ yyval = val_peek(1); }
break;
case 295:
-//#line 1031 "e.y"
-{ yyval = with(val_peek(3),val_peek(0)); }
+//#line 1038 "e.y"
+{ yyval = list(val_peek(0)); }
break;
case 296:
-//#line 1038 "e.y"
-{ yyval = pType(val_peek(1),val_peek(0)); }
+//#line 1039 "e.y"
+{ yyval = with(val_peek(3),val_peek(0)); }
break;
case 297:
-//#line 1039 "e.y"
-{ yyval = pType(null,val_peek(0)); }
+//#line 1046 "e.y"
+{ yyval = pType(val_peek(1),val_peek(0)); }
break;
case 298:
-//#line 1043 "e.y"
-{ yyval = null; }
+//#line 1047 "e.y"
+{ yyval = pType(null,val_peek(0)); }
break;
case 299:
-//#line 1044 "e.y"
+//#line 1051 "e.y"
+{ yyval = null; }
+break;
+case 300:
+//#line 1052 "e.y"
{ yyval = val_peek(0); }
break;
-//#line 6070 "EParser.java"
+//#line 6105 "EParser.java"
//########## END OF USER-SUPPLIED ACTIONS ##########
}//switch
//#### Now let's reduce... ####
1.75 +10 -2 e/src/jsrc/org/erights/e/elang/syntax/e.y
Index: e.y
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/syntax/e.y,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -r1.74 -r1.75
--- e.y 2001/08/13 20:38:11 1.74
+++ e.y 2001/08/23 08:57:07 1.75
@@ -465,7 +465,7 @@
| TRY body catchList finallyClause { $$ = tryx($2,$3,$4); }
- | WHEN whenHead body catchClause { $$ = when($2,$3,$4); }
+ | WHEN whenHead body catches finallyClause { $$ = when($2,$3,$4,$5); }
| ifExpr
@@ -970,7 +970,15 @@
*/
catchList:
emptyList
- | catchList catchClause { $$ = with($1, $2); }
+ | catches
+ ;
+
+/**
+ * Middle path of a 'when' expression -- an least one catch clause is
+ * required
+ */
+catches:
+ catchList catchClause { $$ = with($1, $2); }
;
catchClause: