|
|
@@ -380,8 +380,6 @@ typedef struct {
|
|
|
T_DEFER,
|
|
|
T_REQUIRE,
|
|
|
T_TRY,
|
|
|
- T_CATCH,
|
|
|
- T_FINALLY,
|
|
|
T_THROW,
|
|
|
T_GOTO,
|
|
|
T_CLASS,
|
|
|
@@ -903,10 +901,6 @@ token_t *next_token(char *source, size_t *pos) {
|
|
|
return TK(REQUIRE);
|
|
|
else if (strcmp(name, "try") == 0)
|
|
|
return TK(TRY);
|
|
|
- else if (strcmp(name, "catch") == 0)
|
|
|
- return TK(CATCH);
|
|
|
- else if (strcmp(name, "finally") == 0)
|
|
|
- return TK(FINALLY);
|
|
|
else if (strcmp(name, "throw") == 0)
|
|
|
return TK(THROW);
|
|
|
else if (strcmp(name, "goto") == 0)
|
|
|
@@ -1165,7 +1159,7 @@ struct _node_t {
|
|
|
N_LOGOR,
|
|
|
N_LOGAND,
|
|
|
|
|
|
- N_CATCH,
|
|
|
+ N_TRY,
|
|
|
|
|
|
N_EXPRS_END,
|
|
|
|
|
|
@@ -1191,7 +1185,6 @@ struct _node_t {
|
|
|
N_DEFER,
|
|
|
N_PASS,
|
|
|
N_REQUIRE,
|
|
|
- N_TRY,
|
|
|
N_THROW,
|
|
|
N_LABEL,
|
|
|
N_GOTO,
|
|
|
@@ -1573,10 +1566,10 @@ node_t *parse_primary(list_t *tokens, size_t *pos) {
|
|
|
MATCH(AND);
|
|
|
|
|
|
return NODET(REFERENCE, tokens->data[(*pos)++]);
|
|
|
- } else if (MATCH(CATCH)) {
|
|
|
+ } else if (MATCH(TRY)) {
|
|
|
node_t *a = parse_expr(tokens, pos);
|
|
|
|
|
|
- return NODE1(CATCH, a);
|
|
|
+ return NODE1(TRY, a);
|
|
|
} else if (MATCH(FUNC))
|
|
|
return parse_func(tokens, pos, 1);
|
|
|
else if (MATCH(LPAR)) {
|
|
|
@@ -2769,27 +2762,7 @@ node_t *_parse_stmt(list_t *tokens, size_t *pos, int allow_comma) {
|
|
|
return NODE1(DEFER, a);
|
|
|
} else if (MATCH(PASS))
|
|
|
return NODE0(PASS);
|
|
|
- else if (MATCH(TRY)) {
|
|
|
- node_t *a = BLOCK();
|
|
|
- token_t *t = NULL;
|
|
|
-
|
|
|
- EXPECT(CATCH, "catch");
|
|
|
-
|
|
|
- if (!AT(COLON) && !AT(LCB) && !CLIFF) {
|
|
|
- if (!AT(NAME))
|
|
|
- PARSE_ERROR("expected identifier");
|
|
|
-
|
|
|
- t = tokens->data[(*pos)++];
|
|
|
- }
|
|
|
-
|
|
|
- node_t *b = BLOCK();
|
|
|
- node_t *c = NULL;
|
|
|
-
|
|
|
- if (MATCH(FINALLY))
|
|
|
- c = BLOCK();
|
|
|
-
|
|
|
- return NODE3t(TRY, a, b, c, t);
|
|
|
- } else if (MATCH(THROW)) {
|
|
|
+ else if (MATCH(THROW)) {
|
|
|
node_t *a = NULL;
|
|
|
|
|
|
if (!CLIFF && !AT(COMMA) && !AT(RPAR) && !AT(RCB) && !AT(EOF))
|
|
|
@@ -6568,49 +6541,6 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab,
|
|
|
EMIT("qi_old_scope(state);\n");
|
|
|
} break;
|
|
|
|
|
|
- case N_TRY:
|
|
|
- EMIT("qi_try(state, {\n");
|
|
|
- LBPUSH();
|
|
|
- CTXPUSH("gap");
|
|
|
- CTXPUSH("trap");
|
|
|
- compile_node(gbuf, buf, ctx, table_new(), list_new(), list_new(), lbl,
|
|
|
- node->a);
|
|
|
- CTXPOP();
|
|
|
- CTXPOP();
|
|
|
- LBPOP();
|
|
|
- EMIT("}, {\n");
|
|
|
- if (node->t)
|
|
|
- EMIT("qi_decl(state, \"%s\", trap->value);\n", node->t->text);
|
|
|
- LBPUSH();
|
|
|
- CTXPUSH("gap");
|
|
|
- compile_node(gbuf, buf, ctx, table_new(), list_new(), list_new(), lbl,
|
|
|
- node->b);
|
|
|
- CTXPOP();
|
|
|
- LBPOP();
|
|
|
-
|
|
|
- if (node->c) {
|
|
|
- NEWGID();
|
|
|
-
|
|
|
- buffer_t *tbuf = buffer_new();
|
|
|
-
|
|
|
- buffer_fmt(tbuf, "void __%s%d(qi_state_t *state) {\n", PREFIX, gid);
|
|
|
- LBPUSH();
|
|
|
- CTXPUSH("gap");
|
|
|
- compile_node(gbuf, tbuf, ctx, table_new(), list_new(), list_new(), lbl,
|
|
|
- node->c);
|
|
|
- CTXPOP();
|
|
|
- LBPOP();
|
|
|
-
|
|
|
- buffer_fmt(tbuf, "\n}\n");
|
|
|
-
|
|
|
- buffer_appendb(gbuf, tbuf);
|
|
|
-
|
|
|
- EMIT("}, __%s%d);\n", PREFIX, gid);
|
|
|
- } else {
|
|
|
- EMIT("}, NULL);\n");
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
case N_THROW:
|
|
|
if (!node->a) {
|
|
|
EMIT("qi_throw(state, state->nil);");
|
|
|
@@ -6631,7 +6561,7 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab,
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
- case N_CATCH: {
|
|
|
+ case N_TRY: {
|
|
|
NEWGID();
|
|
|
|
|
|
buffer_t *tbuf = buffer_new();
|