From 5ec25a49523ba05761d568862f0081c02171af6d Mon Sep 17 00:00:00 2001 From: Oldes Date: Mon, 10 Feb 2020 18:31:36 +0100 Subject: [PATCH] FIX: MOLD/FLAT on MAP values does not remove line breaks fixes: https://github.com/rebol/rebol-issues/issues/2401 --- src/core/s-mold.c | 10 ++++++++-- src/tests/units/mold-test.r3 | 25 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/core/s-mold.c b/src/core/s-mold.c index 7935ff35d2..6983cc07e7 100644 --- a/src/core/s-mold.c +++ b/src/core/s-mold.c @@ -841,6 +841,7 @@ STOID Mold_Map(REBVAL *value, REB_MOLD *mold, REBFLG molded) { REBSER *mapser = VAL_SERIES(value); REBVAL *val; + REBOOL indented = !GET_MOPT(mold, MOPT_INDENT); // Prevent endless mold loop: if (Find_Same_Block(MOLD_LOOP, value) > 0) { @@ -858,7 +859,12 @@ STOID Mold_Map(REBVAL *value, REB_MOLD *mold, REBFLG molded) mold->indent++; for (val = BLK_HEAD(mapser); NOT_END(val) && NOT_END(val+1); val += 2) { if (!IS_NONE(val+1)) { - if (molded) New_Indented_Line(mold); + if (molded) { + if(indented) + New_Indented_Line(mold); + else if (val > BLK_HEAD(mapser)) + Append_Byte(mold->series, ' '); + } Emit(mold, "V V", val, val+1); if (!molded) Append_Byte(mold->series, '\n'); } @@ -866,7 +872,7 @@ STOID Mold_Map(REBVAL *value, REB_MOLD *mold, REBFLG molded) mold->indent--; if (molded) { - New_Indented_Line(mold); + if(indented) New_Indented_Line(mold); Append_Byte(mold->series, ']'); } diff --git a/src/tests/units/mold-test.r3 b/src/tests/units/mold-test.r3 index c61ca1338f..5148a5e729 100644 --- a/src/tests/units/mold-test.r3 +++ b/src/tests/units/mold-test.r3 @@ -269,6 +269,31 @@ Rebol [ ===end-group=== +===start-group=== "mold map!" + --test-- "mold map!" + m: make map! [ + a: 1 + b: 2 + c: [ + 3 4 + ] + ] + + --assert (mold m) = {make map! [ + a: 1 + b: 2 + c: [ + 3 4 + ] +]} + + --test-- "mold/flat map!" + ;@@ https://github.com/rebol/rebol-issues/issues/2401 + + --assert "make map! [a: 1 b: 2 c: [3 4]]" = mold/flat m + +===end-group=== + ===start-group=== "mold binary!" bb: system/options/binary-base ;store original value bin: #{FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}