txlyre 6 天之前
父节点
当前提交
a6ed9ad3ae
共有 1 个文件被更改,包括 17 次插入7 次删除
  1. 17 7
      qic.c

+ 17 - 7
qic.c

@@ -2489,7 +2489,7 @@ node_t *_parse_stmt(list_t *tokens, size_t *pos, int allow_comma) {
   else if (MATCH(RETURN)) {
     node_t *a = NULL;
 
-    if (!AT(RCB) && !AT(EOF) && !CLIFF)
+    if (!AT(RCB) && !CLIFF)
       a = parse_expr(tokens, pos);
 
     return NODE1(RETURN, a);
@@ -2527,7 +2527,7 @@ node_t *_parse_stmt(list_t *tokens, size_t *pos, int allow_comma) {
   } else if (MATCH(THROW)) {
     node_t *a = NULL;
 
-    if (!CLIFF && !AT(COMMA) && !AT(RPAR) && !AT(RCB))
+    if (!CLIFF && !AT(COMMA) && !AT(RPAR) && !AT(RCB) && !AT(EOF))
       a = parse_expr(tokens, pos);
 
     return NODE1(THROW, a);
@@ -5725,13 +5725,23 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab,
     break;
 
   case N_THROW:
-    EMIT("qi_throw(state, ");
-    if (node->a)
+    if (!node->a) {
+      EMIT("qi_throw(state, state->nil);");
+    } else if (DEBUG) {
+      char *varname = tempvar();
+
+      EMIT("qi_value_t *%s = ", varname);
       compile_node(gbuf, buf, ctx, ltab, lstk, sstk, lbl, node->a);
-    else {
-      EMIT("state->nil");
+      EMIT(";\n");
+
+      emit_debug(buf, node);
+
+      EMIT("qi_throw(state, %s);", varname);
+    } else {
+      EMIT("qi_throw(state, ");
+      compile_node(gbuf, buf, ctx, ltab, lstk, sstk, lbl, node->a);
+      EMIT(");");
     }
-    EMIT(");");
     break;
 
   case N_LABEL: {