| Jeroen Demeyer on Tue, 12 Jan 2016 15:46:58 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Support trailing semicolon in gp_read_str_multiline() |
Dear pari-dev,Attached patch changes gp_read_str_multiline() to look at trailing a semicolon. If there is, the output is silenced (i.e. gnil is returned).
In other words, gp_read_str_multiline("a = 1") will return a t_INT 1 while gp_read_str_multiline("a = 1;") will return gnil.
Cheers, Jeroen.
commit fa8256f515c94b953430bf2944a10bf62f312151
Author: Jeroen Demeyer <jdemeyer@cage.ugent.be>
Date: Tue Jan 12 15:30:48 2016 +0100
Support final semicolon to silence output in gp_read_str_multiline()
diff --git a/src/language/es.c b/src/language/es.c
index 3c7a5e9..2e56178 100644
--- a/src/language/es.c
+++ b/src/language/es.c
@@ -214,6 +214,10 @@ init_filtre(filtre_t *F, Buffer *buf)
/** INPUT METHODS **/
/** **/
/********************************************************************/
+
+static int
+is_silent(char *s) {return s[strlen(s) - 1] == ';';}
+
/* create */
Buffer *
new_buffer(void)
@@ -261,17 +265,28 @@ gp_read_stream(FILE *fi)
delete_buffer(b); return x;
}
+/* flags for gp_read_from_input */
+#define READ_LOOP 1
+#define READ_ALWAYS_RETURN 2
+
static GEN
-gp_read_from_input(input_method* IM, int loop)
+gp_read_from_input(input_method* IM, unsigned int flags)
{
Buffer *b = new_buffer();
GEN x = gnil;
filtre_t F;
do {
+ char *s;
init_filtre(&F, b);
if (!input_loop(&F, IM)) break;
- if (*(b->buf)) x = readseq(b->buf);
- } while (loop);
+ s = b->buf;
+ if (s[0])
+ {
+ x = readseq(s);
+ if ((flags & READ_ALWAYS_RETURN) == 0 && x != gnil && is_silent(s))
+ x = gnil;
+ }
+ } while (flags & READ_LOOP);
delete_buffer(b);
return x;
}
@@ -330,7 +345,7 @@ gp_read_str_multiline(const char *s)
IM.getline = &file_input;
IM.free = 0;
- return gp_read_from_input(&IM, 1);
+ return gp_read_from_input(&IM, READ_LOOP);
}
GEN