aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2016-03-03 21:01:00 +0200
committerArnold D. Robbins <arnold@skeeve.com>2016-03-03 21:01:00 +0200
commit596cc77d097139e34be50240a60e849d423a3f4a (patch)
treebec1fd0aba6da95ea24921b132af1d50cc48fb23
parent7ea8855c0c000f407499073c930ca4bd92994af8 (diff)
parentd78adb29468012f54dd029e021d83eb668f19a7d (diff)
downloadegawk-596cc77d097139e34be50240a60e849d423a3f4a.tar.gz
egawk-596cc77d097139e34be50240a60e849d423a3f4a.tar.bz2
egawk-596cc77d097139e34be50240a60e849d423a3f4a.zip
Merge branch 'master' into feature/cmake
-rw-r--r--ChangeLog20
-rw-r--r--debug.c19
-rw-r--r--profile.c42
3 files changed, 61 insertions, 20 deletions
diff --git a/ChangeLog b/ChangeLog
index 25a83a6e..afff64f4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2016-03-03 Arnold D. Robbins <arnold@skeeve.com>
+
+ * profile.c (pp_list): Unconditionally compute delimlen. Avoids
+ compiler warning.
+
+2016-03-02 Arnold D. Robbins <arnold@skeeve.com>
+
+ * debug.c (print_instruction): Improvements in instruction dump
+ for if and else.
+
+2016-03-01 Arnold D. Robbins <arnold@skeeve.com>
+
+ * debug.c (print_instruction): For Op_comment, add notation as
+ to whether it's a full comment or an end of line comment.
+
+2016-02-29 Arnold D. Robbins <arnold@skeeve.com>
+
+ * profile.c (pp_list): Handle the case of nargs equal to zero.
+ Thanks to Hermann Peifer for the report.
+
2016-02-28 Arnold D. Robbins <arnold@skeeve.com>
* profile.c (pprint): Fix copy-paste error in else handling.
diff --git a/debug.c b/debug.c
index 01e30ee3..7bf3450a 100644
--- a/debug.c
+++ b/debug.c
@@ -3796,6 +3796,15 @@ print_instruction(INSTRUCTION *pc, Func_print print_func, FILE *fp, int in_dump)
switch (pc->opcode) {
+ case Op_K_if:
+ print_func(fp, "[branch_if = %p] [branch_else = %p] [branch_else->lasti = %p]\n",
+ pc->branch_if, pc->branch_else, pc->branch_else->lasti);
+ break;
+
+ case Op_K_else:
+ print_func(fp, "[branch_end = %p]\n", pc->branch_end);
+ break;
+
case Op_var_update:
print_func(fp, "[update_%s()]\n", get_spec_varname(pc->update_var));
break;
@@ -3998,7 +4007,14 @@ print_instruction(INSTRUCTION *pc, Func_print print_func, FILE *fp, int in_dump)
print_func(fp, " [do_reference = %s]\n",
pc->do_reference ? "true" : "false");
break;
-
+
+ case Op_comment:
+ print_memory(pc->memory, func, print_func, fp);
+ fprintf(fp, " {%s}\n",
+ pc->memory->comment_type == EOL_COMMENT ?
+ "eol" : "full");
+ break;
+
case Op_push_i:
case Op_push:
case Op_push_arg:
@@ -4016,7 +4032,6 @@ print_instruction(INSTRUCTION *pc, Func_print print_func, FILE *fp, int in_dump)
case Op_quotient_i:
case Op_mod_i:
case Op_assign_concat:
- case Op_comment:
print_memory(pc->memory, func, print_func, fp);
/* fall through */
default:
diff --git a/profile.c b/profile.c
index 64aeaa9c..43875600 100644
--- a/profile.c
+++ b/profile.c
@@ -1539,33 +1539,39 @@ pp_list(int nargs, const char *paren, const char *delim)
}
delimlen = strlen(delim);
- len = -delimlen;
- for (i = 1; i <= nargs; i++) {
- r = pp_args[i] = pp_pop();
- len += r->pp_len + delimlen;
- }
- if (paren != NULL) {
- assert(strlen(paren) == 2);
- len += 2;
+ if (nargs == 0)
+ len = 2;
+ else {
+ len = -delimlen;
+ for (i = 1; i <= nargs; i++) {
+ r = pp_args[i] = pp_pop();
+ len += r->pp_len + delimlen;
+ }
+ if (paren != NULL) {
+ assert(strlen(paren) == 2);
+ len += 2;
+ }
}
emalloc(str, char *, len + 1, "pp_list");
s = str;
if (paren != NULL)
*s++ = paren[0];
- r = pp_args[nargs];
- memcpy(s, r->pp_str, r->pp_len);
- s += r->pp_len;
- pp_free(r);
- for (i = nargs - 1; i > 0; i--) {
- if (delimlen > 0) {
- memcpy(s, delim, delimlen);
- s += delimlen;
- }
- r = pp_args[i];
+ if (nargs > 0) {
+ r = pp_args[nargs];
memcpy(s, r->pp_str, r->pp_len);
s += r->pp_len;
pp_free(r);
+ for (i = nargs - 1; i > 0; i--) {
+ if (delimlen > 0) {
+ memcpy(s, delim, delimlen);
+ s += delimlen;
+ }
+ r = pp_args[i];
+ memcpy(s, r->pp_str, r->pp_len);
+ s += r->pp_len;
+ pp_free(r);
+ }
}
if (paren != NULL)
*s++ = paren[1];