Skip to content

Commit 6d14eea

Browse files
committed
FIX: REDUCE/into of non-block doesn't insert into target
fixes: metaeducation/rebol-issues#2061
1 parent f4c48b7 commit 6d14eea

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

src/core/n-control.c

+22-7
Original file line numberDiff line numberDiff line change
@@ -684,17 +684,32 @@ enum {
684684
/*
685685
***********************************************************************/
686686
{
687-
if (IS_BLOCK(D_ARG(1))) {
688-
REBSER *ser = VAL_SERIES(D_ARG(1));
689-
REBCNT index = VAL_INDEX(D_ARG(1));
690-
REBVAL *val = D_REF(5) ? D_ARG(6) : 0;
687+
REBVAL *val = D_ARG(1);
688+
REBVAL *into = D_REF(5) ? D_ARG(6) : 0;
689+
690+
if (IS_BLOCK(val)) {
691+
REBSER *ser = VAL_SERIES(val);
692+
REBCNT index = VAL_INDEX(val);
691693

692694
if (D_REF(2))
693-
Reduce_Block_No_Set(ser, index, val);
695+
Reduce_Block_No_Set(ser, index, into);
694696
else if (D_REF(3))
695-
Reduce_Only(ser, index, D_ARG(4), val);
697+
Reduce_Only(ser, index, D_ARG(4), into);
696698
else
697-
Reduce_Block(ser, index, val);
699+
Reduce_Block(ser, index, into);
700+
return R_TOS;
701+
}
702+
else if (into != 0) {
703+
REBINT start = DSP + 1;
704+
if (IS_WORD(val)) {
705+
val = Get_Var(val);
706+
DS_PUSH(val);
707+
}
708+
else if (IS_PATH(val)) {
709+
Do_Path(&val, 0); // pushes val on stack
710+
}
711+
else DS_PUSH(val);
712+
Copy_Stack_Values(start, into);
698713
return R_TOS;
699714
}
700715

0 commit comments

Comments
 (0)