Skip to content

Commit 79724fc

Browse files
committed
FIX: MOLD/FLAT has no effect when used on VECTOR
Fixes: metaeducation/rebol-issues#2349
1 parent 4dd6013 commit 79724fc

File tree

2 files changed

+28
-8
lines changed

2 files changed

+28
-8
lines changed

src/core/t-vector.c

+14-7
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,10 @@ enum {
5353
VTSF64,
5454
};
5555

56-
#define VECT_TYPE(s) ((s)->size & 0xff)
56+
static REBCNT bit_sizes[4] = { 8, 16, 32, 64 };
5757

58-
static REBCNT bit_sizes[4] = {8, 16, 32, 64};
58+
#define VECT_TYPE(s) ((s)->size & 0xff)
59+
#define VECT_BIT_SIZE(bits) (bit_sizes[bits & 3])
5960

6061
REBU64 f_to_u64(float n) {
6162
union {
@@ -621,6 +622,7 @@ void Set_Vector_Row(REBSER *ser, REBVAL *blk)
621622
union {REBU64 i; REBDEC d;} v;
622623
REBYTE buf[32];
623624
REBYTE l;
625+
REBOOL indented = !GET_MOPT(mold, MOPT_INDENT);
624626

625627
if (GET_MOPT(mold, MOPT_MOLD_ALL)) {
626628
len = VAL_TAIL(value);
@@ -635,8 +637,11 @@ void Set_Vector_Row(REBSER *ser, REBVAL *blk)
635637
Pre_Mold(value, mold);
636638
if (!GET_MOPT(mold, MOPT_MOLD_ALL)) Append_Byte(mold->series, '[');
637639
if (bits >= VTUI08 && bits <= VTUI64) Append_Bytes(mold->series, "unsigned ");
638-
Emit(mold, "N I I [", type+1, bit_sizes[bits & 3], len);
639-
if (len) New_Indented_Line(mold);
640+
Emit(mold, "N I I [", type+1, VECT_BIT_SIZE(bits), len);
641+
if (indented && len > 10) {
642+
mold->indent = 1;
643+
New_Indented_Line(mold);
644+
}
640645
}
641646

642647
c = 0;
@@ -648,8 +653,7 @@ void Set_Vector_Row(REBSER *ser, REBVAL *blk)
648653
l = Emit_Decimal(buf, v.d, 0, '.', mold->digits);
649654
}
650655
Append_Bytes_Len(mold->series, buf, l);
651-
652-
if ((++c > 7) && (n+1 < vect->tail)) {
656+
if (indented && (++c > 9) && (n+1 < vect->tail)) {
653657
New_Indented_Line(mold);
654658
c = 0;
655659
}
@@ -660,7 +664,10 @@ void Set_Vector_Row(REBSER *ser, REBVAL *blk)
660664
if (len) mold->series->tail--; // remove final space
661665

662666
if (molded) {
663-
if (len) New_Indented_Line(mold);
667+
if (indented && len > 10) {
668+
mold->indent = 0;
669+
New_Indented_Line(mold);
670+
}
664671
Append_Byte(mold->series, ']');
665672
if (!GET_MOPT(mold, MOPT_MOLD_ALL)) {
666673
Append_Byte(mold->series, ']');

src/tests/units/series-test.r3

+14-1
Original file line numberDiff line numberDiff line change
@@ -213,11 +213,24 @@ Rebol [
213213
--assert v = do load mold v
214214

215215
--test-- "Conversion from VECTOR to BINARY"
216+
;@@ https://github.com/rebol/rebol-issues/issues/2347
216217
--assert #{0102} = to binary! make vector! [integer! 8 [1 2]]
217218
--assert #{01000200} = to binary! make vector! [integer! 16 [1 2]]
218219
--assert #{0100000002000000} = to binary! make vector! [integer! 32 [1 2]]
219220
--assert 1 = to integer! head reverse to binary! make vector! [integer! 64 [1]]
221+
--assert #{0000803F} = to binary! make vector! [decimal! 32 [1.0]]
222+
--assert 1.0 = to decimal! head reverse to binary! make vector! [decimal! 64 [1.0]]
223+
224+
--test-- "MOLD/flat on vector"
225+
;@@ https://github.com/rebol/rebol-issues/issues/2349
226+
--assert (mold/flat make vector! [integer! 8 12]) = {make vector! [integer! 8 12 [0 0 0 0 0 0 0 0 0 0 0 0]]}
227+
--assert (mold/all/flat make vector! [integer! 8 12]) = "#[vector! integer! 8 12 [0 0 0 0 0 0 0 0 0 0 0 0]]"
228+
--assert (mold make vector! [integer! 8 2]) = {make vector! [integer! 8 2 [0 0]]}
229+
--assert (mold make vector! [integer! 8 20]) = {make vector! [integer! 8 20 [
230+
0 0 0 0 0 0 0 0 0 0
231+
0 0 0 0 0 0 0 0 0 0
232+
]]}
220233

221234
===end-group===
222235

223-
~~~end-file~~~
236+
~~~end-file~~~

0 commit comments

Comments
 (0)