From 84b2f9c67e0e38d49730cf1053aea553ae2102fb Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 11 May 2018 15:47:48 -0400 Subject: [PATCH] Issue #55 - Support number->string --- runtime.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/runtime.c b/runtime.c index 63d422bc..791934f9 100644 --- a/runtime.c +++ b/runtime.c @@ -1884,6 +1884,21 @@ object Cyc_number2string2(void *data, object cont, int argc, object n, ...) snprintf(buffer, 1024, "%d", ((integer_type *) n)->value); } else if (type_of(n) == double_tag) { double2buffer(buffer, 1024, ((double_type *) n)->value); + } else if (type_of(n) == complex_num_tag) { + char rbuf[33], ibuf[33]; + const char *plus="+", *empty=""; + double dreal = creal(((complex_num_type *) n)->value); + double dimag = cimag(((complex_num_type *) n)->value); + double2buffer(rbuf, 32, dreal); + double2buffer(ibuf, 32, dimag); + if (dreal == 0.0) { + snprintf(buffer, 1024, "%si", ibuf); + } else { + snprintf(buffer, 1024, "%s%s%si", + rbuf, + (dimag < 0.0) ? empty : plus, + ibuf); + } } else { Cyc_rt_raise2(data, "number->string - Unexpected object", n); }