issue #110 C code gen - update to emit go to error block

pull/167/head
Dibyendu Majumdar 6 years ago
parent 37a98cdbc7
commit 5dbaf0b391

@ -772,9 +772,12 @@ static void emit_gettable_ai(struct function *fn, int A, int B,
membuff_add_string(&fn->body, "if (ukey < (lua_Unsigned)(t->ravi_array.len)) {\n");
membuff_add_string(&fn->body, " setivalue(ra, iptr[ukey]);\n");
membuff_add_string(&fn->body, "} else {\n");
// membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_array_out_of_bounds);
// membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_array_out_of_bounds);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_array_out_of_bounds);
#endif`
membuff_add_string(&fn->body, "}\n");
}
@ -793,9 +796,12 @@ static void emit_gettable_af(struct function *fn, int A, int B,
membuff_add_string(&fn->body, "if (ukey < (lua_Unsigned)(t->ravi_array.len)) {\n");
membuff_add_string(&fn->body, " setfltvalue(ra, nptr[ukey]);\n");
membuff_add_string(&fn->body, "} else {\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_array_out_of_bounds);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_array_out_of_bounds);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_array_out_of_bounds);
#endif
membuff_add_string(&fn->body, "}\n");
}
@ -829,10 +835,13 @@ static void emit_settable_ai(struct function *fn, int A, int B,
membuff_add_string(&fn->body, "ukey = (lua_Unsigned)(ivalue(rb));\n");
membuff_add_string(&fn->body, "iptr = (lua_Integer *)t->ravi_array.data;\n");
membuff_add_string(&fn->body, "if (!tointeger(rc, &i)) {\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_integer_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_integer_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_integer_expected);
#endif
membuff_add_string(&fn->body, "}\n");
membuff_add_string(&fn->body, "if (ukey < (lua_Unsigned)(t->ravi_array.len)) {\n");
membuff_add_string(&fn->body, " iptr[ukey] = i;\n");
@ -871,10 +880,13 @@ static void emit_settable_af(struct function *fn, int A, int B,
membuff_add_string(&fn->body, "ukey = (lua_Unsigned)(ivalue(rb));\n");
membuff_add_string(&fn->body, "nptr = (lua_Number *)t->ravi_array.data;\n");
membuff_add_string(&fn->body, "if (!tonumber(rc, &n)) {\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_integer_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_integer_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_integer_expected);
#endif
membuff_add_string(&fn->body, "}\n");
membuff_add_string(&fn->body, "if (ukey < (lua_Unsigned)(t->ravi_array.len)) {\n");
membuff_add_string(&fn->body, " nptr[ukey] = n;\n");
@ -1366,9 +1378,12 @@ static void emit_op_movef(struct function *fn, int A, int B, int pc) {
membuff_add_string(&fn->body,
"if (tonumber(rb, &n)) { setfltvalue(ra, n); }\n");
membuff_add_string(&fn->body, "else {\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_number_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_number_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_number_expected);
#endif
membuff_add_string(&fn->body, "}\n");
}
@ -1379,10 +1394,13 @@ static void emit_op_moveai(struct function *fn, int A, int B, int pc) {
membuff_add_string(&fn->body,
"if (ttisiarray(rb)) { setobjs2s(L, ra, rb); }\n");
membuff_add_string(&fn->body, "else {\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_integer_array_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_integer_array_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_integer_array_expected);
#endif
membuff_add_string(&fn->body, "}\n");
}
@ -1393,10 +1411,13 @@ static void emit_op_moveaf(struct function *fn, int A, int B, int pc) {
membuff_add_string(&fn->body,
"if (ttisfarray(rb)) { setobjs2s(L, ra, rb); }\n");
membuff_add_string(&fn->body, "else {\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_number_array_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_number_array_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_number_array_expected);
#endif
membuff_add_string(&fn->body, "}\n");
}
@ -1407,9 +1428,12 @@ static void emit_op_movetab(struct function *fn, int A, int B, int pc) {
membuff_add_string(&fn->body,
"if (ttisLtable(rb)) { setobjs2s(L, ra, rb); }\n");
membuff_add_string(&fn->body, "else {\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_table_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_table_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_table_expected);
#endif
membuff_add_string(&fn->body, "}\n");
}
@ -1420,10 +1444,13 @@ static void emit_op_toint(struct function *fn, int A, int pc) {
membuff_add_string(&fn->body,
"if (tointeger(ra, &i)) { setivalue(ra, i); }\n");
membuff_add_string(&fn->body, "else {\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_integer_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_integer_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_integer_expected);
#endif
membuff_add_string(&fn->body, "}\n");
}
@ -1434,9 +1461,12 @@ static void emit_op_toflt(struct function *fn, int A, int pc) {
membuff_add_string(&fn->body,
"if (tonumber(ra, &n)) { setfltvalue(ra, n); }\n");
membuff_add_string(&fn->body, "else {\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_number_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_number_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_number_expected);
#endif
membuff_add_string(&fn->body, "}\n");
}
@ -1444,10 +1474,13 @@ static void emit_op_toai(struct function *fn, int A, int pc) {
(void)pc;
emit_reg(fn, "ra", A);
membuff_add_string(&fn->body, "if (!ttisiarray(ra)) {\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_integer_array_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_integer_array_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_integer_array_expected);
#endif
membuff_add_string(&fn->body, "}\n");
}
@ -1455,10 +1488,13 @@ static void emit_op_toaf(struct function *fn, int A, int pc) {
(void)pc;
emit_reg(fn, "ra", A);
membuff_add_string(&fn->body, "if (!ttisfarray(ra)) {\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_number_array_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_number_array_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_number_array_expected);
#endif
membuff_add_string(&fn->body, "}\n");
}
@ -1466,9 +1502,12 @@ static void emit_op_totab(struct function *fn, int A, int pc) {
(void)pc;
emit_reg(fn, "ra", A);
membuff_add_string(&fn->body, "if (!ttisLtable(ra)) {\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_table_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_table_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_table_expected);
#endif
membuff_add_string(&fn->body, "}\n");
}
@ -1535,19 +1574,28 @@ static void emit_op_forprep(struct function *fn, int A, int pc,
membuff_add_string(&fn->body, "}\n");
membuff_add_string(&fn->body, "else {\n");
membuff_add_fstring(&fn->body, " if (!tonumber(rb, &nlimit_%d)) {\n", A);
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_for_limit_must_be_number);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_for_limit_must_be_number);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_for_limit_must_be_number);
#endif
membuff_add_string(&fn->body, " }\n");
membuff_add_fstring(&fn->body, " if (!tonumber(rc, &nstep_%d)) {\n", A);
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_for_step_must_be_number);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_for_step_must_be_number);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_for_step_must_be_number);
#endif
membuff_add_string(&fn->body, " }\n");
membuff_add_fstring(&fn->body, " if (!tonumber(ra, &ninit_%d)) {\n", A);
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_for_initial_value_must_be_number);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
#if 1
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_for_initial_value_must_be_number);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
#else
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_for_initial_value_must_be_number);
#endif
membuff_add_string(&fn->body, " }\n");
membuff_add_fstring(&fn->body, " ninit_%d -= nstep_%d;\n", A, A);
membuff_add_string(&fn->body, "}\n");

Loading…
Cancel
Save