|
|
@@ -3855,8 +3855,8 @@ void compile_block(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab,
|
|
|
|
|
|
for (size_t i = 0; i < block->length; i++) {
|
|
|
node_t *n = block->data[i];
|
|
|
- if (n->tag == N_CONST || n->tag == N_ENUM || n->tag == N_FUNCDEF || n->tag == N_CLASS ||
|
|
|
- n->tag == N_PASS)
|
|
|
+ if (n->tag == N_CONST || n->tag == N_ENUM || n->tag == N_FUNCDEF ||
|
|
|
+ n->tag == N_CLASS || n->tag == N_PASS)
|
|
|
continue;
|
|
|
|
|
|
if (DEBUG)
|
|
|
@@ -6038,7 +6038,8 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab,
|
|
|
node->l->data[i], varname, i);
|
|
|
} break;
|
|
|
|
|
|
- case N_CONST: case N_ENUM:
|
|
|
+ case N_CONST:
|
|
|
+ case N_ENUM:
|
|
|
break;
|
|
|
|
|
|
case N_IF:
|
|
|
@@ -6240,29 +6241,24 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab,
|
|
|
EMIT("qi_decl(state, \"%s\", state->nil);\n", node->l->data[i]);
|
|
|
}
|
|
|
|
|
|
- EMIT("for (qi_size_t length = _qi_length(state, %s), i = 0; i < length; "
|
|
|
- "i++) {\n",
|
|
|
- varname);
|
|
|
+ EMIT("while (!qi_iter_end(state, %s)) {\n", varname);
|
|
|
+ EMIT("qi_value_t *el = qi_iter_next(state, %s);\n", varname);
|
|
|
|
|
|
if (node->tag == N_FOROFUNPACK || node->tag == N_FOROFVARUNPACK) {
|
|
|
for (size_t i = 0; i < node->l->length; i++)
|
|
|
if (strcmp(node->l->data[i], "_") == 0) {
|
|
|
- EMIT("(void)(qi_index(state, qi_index(state, %s, "
|
|
|
- "qi_make_number(state, i)), qi_make_number(state, %d)));\n",
|
|
|
- varname, i);
|
|
|
+ EMIT("(void)(qi_index(state, el, "
|
|
|
+ "qi_make_number(state, %d)));\n",
|
|
|
+ i);
|
|
|
} else {
|
|
|
- EMIT("qi_set(state, false, \"%s\", qi_index(state, qi_index(state, %s, "
|
|
|
- "qi_make_number(state, i)), qi_make_number(state, %d)));\n",
|
|
|
- node->l->data[i], varname, i);
|
|
|
+ EMIT("qi_set(state, false, \"%s\", qi_index(state, "
|
|
|
+ "el, qi_make_number(state, %d)));\n",
|
|
|
+ node->l->data[i], i);
|
|
|
}
|
|
|
} else {
|
|
|
- if (strcmp(node->t->text, "_") == 0) {
|
|
|
- EMIT("(void)(qi_index(state, %s, qi_make_number(state, i)));\n",
|
|
|
- varname);
|
|
|
- } else {
|
|
|
- EMIT("qi_set(state, false, \"%s\", qi_index(state, %s, "
|
|
|
- "qi_make_number(state, i)));\n",
|
|
|
- node->t->text, varname);
|
|
|
+ if (strcmp(node->t->text, "_") != 0) {
|
|
|
+ EMIT("qi_set(state, false, \"%s\", el);\n",
|
|
|
+ node->t->text);
|
|
|
}
|
|
|
}
|
|
|
|