• R/O
  • SSH

quipu: 提交

quipu mercurial repository


Commit MetaInfo

修订版aa6e37f2dc8ebd2682a72d141fd995e4310c9e4a (tree)
时间2018-08-17 03:41:21
作者Agustina Arzille <avarzille@rise...>
CommiterAgustina Arzille

Log Message

Several fixes to the serialization interfaces

更改概述

差异

diff -r a065e0df4306 -r aa6e37f2dc8e array.cpp
--- a/array.cpp Thu Aug 16 04:42:23 2018 +0000
+++ b/array.cpp Thu Aug 16 15:41:21 2018 -0300
@@ -337,7 +337,8 @@
337337
338338 valref ret (interp, alloc_array (interp, len));
339339 for (int i = 0; i < len; ++i)
340- xaref(*ret, i) = xdeserialize (interp, strm);
340+ if ((xaref (*ret, i) = xdeserialize (interp, strm)) == UNBOUND)
341+ qp_return (UNBOUND);
341342
342343 qp_return (*ret);
343344 }
diff -r a065e0df4306 -r aa6e37f2dc8e builtins.cpp
--- a/builtins.cpp Thu Aug 16 04:42:23 2018 +0000
+++ b/builtins.cpp Thu Aug 16 15:41:21 2018 -0300
@@ -86,10 +86,10 @@
8686 object xdeserialize (interpreter *interp, stream *strm)
8787 {
8888 int tp = strm->getb (interp);
89+ object ret = UNBOUND;
90+
8991 if (tp < 0)
90- interp->raise2 ("io-error", "deserialize: unexpected end of input");
91-
92- object ret = UNBOUND;
92+ qp_return (ret);
9393
9494 switch (tp)
9595 {
diff -r a065e0df4306 -r aa6e37f2dc8e compiler.cpp
--- a/compiler.cpp Thu Aug 16 04:42:23 2018 +0000
+++ b/compiler.cpp Thu Aug 16 15:41:21 2018 -0300
@@ -2347,7 +2347,7 @@
23472347 raw_acc<array> fvals;
23482348 valref expr (interp, NIL);
23492349
2350- while (true)
2350+ for (ctable.cmp.ip = interp ; ; )
23512351 {
23522352 if ((*expr = rd.read_sexpr ()) == EOS)
23532353 break;
diff -r a065e0df4306 -r aa6e37f2dc8e cons.cpp
--- a/cons.cpp Thu Aug 16 04:42:23 2018 +0000
+++ b/cons.cpp Thu Aug 16 15:41:21 2018 -0300
@@ -434,14 +434,14 @@
434434 int len = 0, ret = 0;
435435
436436 ret += strm->write (interp, &len);
437- for ( ; ; ++len)
437+ while (true)
438438 {
439439 if (*tmp == NIL)
440440 break;
441441
442442 valref head (interp, xcar (*tmp));
443443 ret += xserialize (interp, strm, *head);
444- *tmp = xcdr (*tmp);
444+ *tmp = xcdr (*tmp), ++len;
445445
446446 if (!xcons_p (*tmp))
447447 {
@@ -451,6 +451,9 @@
451451 }
452452 }
453453
454+ if (len == 0)
455+ return (ret);
456+
454457 valref pos2 (interp, strm->tell (interp));
455458 if (!strm->seek (interp, *pos1, SEEK_SET))
456459 return (-1);
@@ -470,16 +473,16 @@
470473
471474 bool dotted = len < 0 ? (len = -len, true) : false;
472475 valref ret (interp, alloc_cons (interp, len));
473- cons *outp = as_cons (*ret);
476+ object *outp = &*ret;
474477
475478 for (int i = 0; i < len; ++i)
476479 {
477- outp->car = xdeserialize (interp, strm);
478- outp = as_cons (outp->cdr);
480+ xcar(*outp) = xdeserialize (interp, strm);
481+ outp = &xcdr(*outp);
479482 }
480483
481484 if (dotted)
482- outp->cdr = xdeserialize (interp, strm);
485+ *outp = xdeserialize (interp, strm);
483486
484487 qp_return (*ret);
485488 }
diff -r a065e0df4306 -r aa6e37f2dc8e floatp.cpp
--- a/floatp.cpp Thu Aug 16 04:42:23 2018 +0000
+++ b/floatp.cpp Thu Aug 16 15:41:21 2018 -0300
@@ -374,13 +374,13 @@
374374 {
375375 int sign, cls;
376376 double v = get_dbl (obj, sign, cls);
377- return (strm->write (interp, &v, sizeof (v)));
377+ return (strm->write (interp, &v));
378378 }
379379
380380 object deserialize_f (interpreter *interp, stream *strm)
381381 {
382382 double v;
383- qp_return (strm->read (interp, &v, sizeof (v)) < (int)sizeof (v) ?
383+ qp_return (strm->read (interp, &v) < (int)sizeof (v) ?
384384 UNBOUND : fltobj (interp, v));
385385 }
386386
@@ -1234,8 +1234,7 @@
12341234 xl = -xl;
12351235 #endif
12361236
1237- return (strm->write (interp, &expo, sizeof (expo)) +
1238- strm->write (interp, &xl, sizeof (xl)) +
1237+ return (strm->write (interp, &expo) + strm->write (interp, &xl) +
12391238 strm->write (interp, lp->data, F_ABS (lp->len) * sizeof (*lp->data)));
12401239 }
12411240
diff -r a065e0df4306 -r aa6e37f2dc8e integer.cpp
--- a/integer.cpp Thu Aug 16 04:42:23 2018 +0000
+++ b/integer.cpp Thu Aug 16 15:41:21 2018 -0300
@@ -960,7 +960,7 @@
960960 int serialize_i (interpreter *interp, stream *strm, object obj)
961961 {
962962 int val = as_int (obj);
963- return (strm->write (interp, &val, sizeof (val)));
963+ return (strm->write (interp, &val));
964964 }
965965
966966 int serialize_I (interpreter *interp, stream *strm, object obj)
@@ -969,7 +969,7 @@
969969 const bigint *bi = get_bigint (obj, sv);
970970
971971 sv = sv < 0 ? -bi->len : bi->len;
972- ret += strm->write (interp, &sv, sizeof (sv));
972+ ret += strm->write (interp, &sv);
973973 ret += strm->write (interp, bi->data, bi->len * sizeof (*bi->data));
974974 return (ret);
975975 }
diff -r a065e0df4306 -r aa6e37f2dc8e stream.cpp
--- a/stream.cpp Thu Aug 16 04:42:23 2018 +0000
+++ b/stream.cpp Thu Aug 16 15:41:21 2018 -0300
@@ -418,6 +418,9 @@
418418 if (this->ops.seek != seek_stub && (whence == SEEK_SET ||
419419 whence == SEEK_CUR || whence == SEEK_END))
420420 {
421+ if (this->need_wflush () && !this->wflush (interp))
422+ return (ret);
423+
421424 ret = this->xseek (interp, spos::decode (off), whence);
422425 if (ret)
423426 {
diff -r a065e0df4306 -r aa6e37f2dc8e symbol.cpp
--- a/symbol.cpp Thu Aug 16 04:42:23 2018 +0000
+++ b/symbol.cpp Thu Aug 16 15:41:21 2018 -0300
@@ -347,11 +347,8 @@
347347 object pkg = as_symbol(obj)->pkg;
348348
349349 int pn = pkg_number (pkg);
350-
351- if (pn != 0)
352- ret += strm->write (interp, &pn);
353- else
354- ret += xserialize (interp, strm, as_package(pkg)->name);
350+ ret += xserialize (interp, strm, pn != 0 ?
351+ intobj (pn) : as_package(pkg)->name);
355352
356353 return (ret);
357354 }
diff -r a065e0df4306 -r aa6e37f2dc8e table.cpp
--- a/table.cpp Thu Aug 16 04:42:23 2018 +0000
+++ b/table.cpp Thu Aug 16 15:41:21 2018 -0300
@@ -741,6 +741,8 @@
741741 if (tst < 0 || (tst != 0xff &&
742742 (*e2 = xdeserialize (interp, strm)) == UNBOUND))
743743 qp_return (UNBOUND);
744+ else if (tst == 0xff)
745+ strm->getb (interp);
744746
745747 float mv_ratio;
746748 uint32_t nelem;
diff -r a065e0df4306 -r aa6e37f2dc8e tree.cpp
--- a/tree.cpp Thu Aug 16 04:42:23 2018 +0000
+++ b/tree.cpp Thu Aug 16 15:41:21 2018 -0300
@@ -540,9 +540,6 @@
540540 strm->read (interp, &nelem) != (int)sizeof (nelem))
541541 qp_return (UNBOUND);
542542
543- if (strm->read (interp, &hw) != (int)sizeof (hw))
544- qp_return (UNBOUND);
545-
546543 valref ret (interp, alloc_tree (interp, *tmp));
547544
548545 for (uint32_t i = 0; i < nelem; ++i)
Show on old repository browser