summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2017-02-01 21:17:33 +0200
committerArnold D. Robbins <arnold@skeeve.com>2017-02-01 21:17:33 +0200
commit7b46fc2f6243d91e01b6e74fd69b193b4eddb05b (patch)
tree6676ab378c77fcf5cca94fe370d18a4c896be15f
parent85e1012dab425dc50bc3faa2a3f28a9a47dac017 (diff)
downloadgawk-7b46fc2f6243d91e01b6e74fd69b193b4eddb05b.tar.gz
Improve making of profile number code and also MPFR case thereof.
-rw-r--r--ChangeLog6
-rw-r--r--awkgram.c26
-rw-r--r--awkgram.y26
3 files changed, 26 insertions, 32 deletions
diff --git a/ChangeLog b/ChangeLog
index 1d42e9ed..8a0dfc3f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,12 @@
gawk_mb_cur_max. Thanks to Andrew Schorr for making me look
at this code.
+ Unrelated:
+
+ * awkgram.y (make_profile_number): Renamed to ...
+ (set_profile_next): New function. All calls adjusted. Also improved
+ use at MPFR number case.
+
2017-01-27 Andrew J. Schorr <aschorr@telemetry-investments.com>
* interpret.h [UNFIELD]: Fix condition for assignment from
diff --git a/awkgram.c b/awkgram.c
index c6f47dbd..5b55cf51 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -97,7 +97,7 @@ static int include_source(INSTRUCTION *file);
static int load_library(INSTRUCTION *file);
static void next_sourcefile(void);
static char *tokexpand(void);
-static NODE *make_profile_number(double d, const char *str, size_t len);
+static NODE *set_profile_text(NODE *n, const char *str, size_t len);
#define instruction(t) bcalloc(t, 1, 0)
@@ -3810,7 +3810,7 @@ regular_print:
if ((yyvsp[0])->opcode == Op_match_rec) {
(yyvsp[0])->opcode = Op_nomatch;
(yyvsp[-1])->opcode = Op_push_i;
- (yyvsp[-1])->memory = make_profile_number(0.0, "0", 1);
+ (yyvsp[-1])->memory = set_profile_text(make_number(0.0), "0", 1);
(yyval) = list_append(list_append(list_create((yyvsp[-1])),
instruction(Op_field_spec)), (yyvsp[0]));
} else {
@@ -6440,12 +6440,7 @@ retry:
errno = 0;
IEEE_FMT(r->mpg_numbr, tval);
}
- yylval->memory = r;
- if (do_pretty_print) {
- yylval->memory->stptr = estrdup(tokstart, strlen(tokstart)-1);
- yylval->memory->stlen = strlen(tokstart)-1;
- yylval->memory->flags |= NUMCONSTSTR;
- }
+ yylval->memory = set_profile_text(r, tokstart, strlen(tokstart)-1);
return lasttok = YNUMBER;
}
#endif
@@ -6453,7 +6448,7 @@ retry:
d = nondec2awknum(tokstart, strlen(tokstart), NULL);
else
d = atof(tokstart);
- yylval->memory = make_profile_number(d, tokstart, strlen(tokstart) - 1);
+ yylval->memory = set_profile_text(make_number(d), tokstart, strlen(tokstart) - 1);
if (d <= INT32_MAX && d >= INT32_MIN && d == (int32_t) d)
yylval->memory->flags |= NUMINT;
return lasttok = YNUMBER;
@@ -6763,7 +6758,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
INSTRUCTION *expr;
expr = list_create(instruction(Op_push_i));
- expr->nexti->memory = make_profile_number(0.0, "0", 1);
+ expr->nexti->memory = set_profile_text(make_number(0.0), "0", 1);
(void) mk_expression_list(subn,
list_append(expr, instruction(Op_field_spec)));
}
@@ -6811,7 +6806,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
r->sub_flags |= GENSUB;
if (nexp == 3) {
ip = instruction(Op_push_i);
- ip->memory = make_profile_number(0.0, "0", 1);
+ ip->memory = set_profile_text(make_number(0.0), "0", 1);
(void) mk_expression_list(subn,
list_append(list_create(ip), instruction(Op_field_spec)));
}
@@ -6840,7 +6835,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
list = list_create(r);
(void) list_prepend(list, instruction(Op_field_spec));
(void) list_prepend(list, instruction(Op_push_i));
- list->nexti->memory = make_profile_number(0.0, "0", 1);
+ list->nexti->memory = set_profile_text(make_number(0.0), "0", 1);
return list;
} else {
arg = subn->nexti;
@@ -7647,7 +7642,7 @@ mk_binary(INSTRUCTION *s1, INSTRUCTION *s2, INSTRUCTION *op)
}
op->opcode = Op_push_i;
- // We don't need to call make_profile_number() here since
+ // We don't need to call set_profile_text() here since
// optimizing is disabled when doing pretty printing.
op->memory = make_number(res);
unref(n1);
@@ -8711,12 +8706,11 @@ is_identchar(int c)
return (is_alnum(c) || c == '_');
}
-/* make_profile_number --- make a number that can be printed when profiling */
+/* set_profile_text --- make a number that can be printed when profiling */
static NODE *
-make_profile_number(double d, const char *str, size_t len)
+set_profile_text(NODE *n, const char *str, size_t len)
{
- NODE *n = make_number(d);
if (do_pretty_print) {
// extra byte in case need to add minus sign in negate_num
n->stptr = estrdup(str, len + 1);
diff --git a/awkgram.y b/awkgram.y
index 80278810..541cebf1 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -57,7 +57,7 @@ static int include_source(INSTRUCTION *file);
static int load_library(INSTRUCTION *file);
static void next_sourcefile(void);
static char *tokexpand(void);
-static NODE *make_profile_number(double d, const char *str, size_t len);
+static NODE *set_profile_text(NODE *n, const char *str, size_t len);
#define instruction(t) bcalloc(t, 1, 0)
@@ -1710,7 +1710,7 @@ non_post_simp_exp
if ($2->opcode == Op_match_rec) {
$2->opcode = Op_nomatch;
$1->opcode = Op_push_i;
- $1->memory = make_profile_number(0.0, "0", 1);
+ $1->memory = set_profile_text(make_number(0.0), "0", 1);
$$ = list_append(list_append(list_create($1),
instruction(Op_field_spec)), $2);
} else {
@@ -4020,12 +4020,7 @@ retry:
errno = 0;
IEEE_FMT(r->mpg_numbr, tval);
}
- yylval->memory = r;
- if (do_pretty_print) {
- yylval->memory->stptr = estrdup(tokstart, strlen(tokstart)-1);
- yylval->memory->stlen = strlen(tokstart)-1;
- yylval->memory->flags |= NUMCONSTSTR;
- }
+ yylval->memory = set_profile_text(r, tokstart, strlen(tokstart)-1);
return lasttok = YNUMBER;
}
#endif
@@ -4033,7 +4028,7 @@ retry:
d = nondec2awknum(tokstart, strlen(tokstart), NULL);
else
d = atof(tokstart);
- yylval->memory = make_profile_number(d, tokstart, strlen(tokstart) - 1);
+ yylval->memory = set_profile_text(make_number(d), tokstart, strlen(tokstart) - 1);
if (d <= INT32_MAX && d >= INT32_MIN && d == (int32_t) d)
yylval->memory->flags |= NUMINT;
return lasttok = YNUMBER;
@@ -4343,7 +4338,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
INSTRUCTION *expr;
expr = list_create(instruction(Op_push_i));
- expr->nexti->memory = make_profile_number(0.0, "0", 1);
+ expr->nexti->memory = set_profile_text(make_number(0.0), "0", 1);
(void) mk_expression_list(subn,
list_append(expr, instruction(Op_field_spec)));
}
@@ -4391,7 +4386,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
r->sub_flags |= GENSUB;
if (nexp == 3) {
ip = instruction(Op_push_i);
- ip->memory = make_profile_number(0.0, "0", 1);
+ ip->memory = set_profile_text(make_number(0.0), "0", 1);
(void) mk_expression_list(subn,
list_append(list_create(ip), instruction(Op_field_spec)));
}
@@ -4420,7 +4415,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
list = list_create(r);
(void) list_prepend(list, instruction(Op_field_spec));
(void) list_prepend(list, instruction(Op_push_i));
- list->nexti->memory = make_profile_number(0.0, "0", 1);
+ list->nexti->memory = set_profile_text(make_number(0.0), "0", 1);
return list;
} else {
arg = subn->nexti;
@@ -5227,7 +5222,7 @@ mk_binary(INSTRUCTION *s1, INSTRUCTION *s2, INSTRUCTION *op)
}
op->opcode = Op_push_i;
- // We don't need to call make_profile_number() here since
+ // We don't need to call set_profile_text() here since
// optimizing is disabled when doing pretty printing.
op->memory = make_number(res);
unref(n1);
@@ -6291,12 +6286,11 @@ is_identchar(int c)
return (is_alnum(c) || c == '_');
}
-/* make_profile_number --- make a number that can be printed when profiling */
+/* set_profile_text --- make a number that can be printed when profiling */
static NODE *
-make_profile_number(double d, const char *str, size_t len)
+set_profile_text(NODE *n, const char *str, size_t len)
{
- NODE *n = make_number(d);
if (do_pretty_print) {
// extra byte in case need to add minus sign in negate_num
n->stptr = estrdup(str, len + 1);