@@ -684,17 +684,32 @@ enum {
684
684
/*
685
685
***********************************************************************/
686
686
{
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 );
691
693
692
694
if (D_REF (2 ))
693
- Reduce_Block_No_Set (ser , index , val );
695
+ Reduce_Block_No_Set (ser , index , into );
694
696
else if (D_REF (3 ))
695
- Reduce_Only (ser , index , D_ARG (4 ), val );
697
+ Reduce_Only (ser , index , D_ARG (4 ), into );
696
698
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 );
698
713
return R_TOS ;
699
714
}
700
715
0 commit comments