90
90
{
91
91
if (ANY_SERIES (value ) || IS_MAP (value ) || IS_BITSET (value ))
92
92
Protect_Series (value , flags );
93
- else if (IS_OBJECT ( value ) || IS_MODULE (value ))
93
+ else if (ANY_OBJECT (value ))
94
94
Protect_Object (value , flags );
95
95
}
96
96
@@ -741,8 +741,9 @@ enum {
741
741
{
742
742
REBVAL * val = D_ARG (1 );
743
743
REBVAL * into = D_REF (5 ) ? D_ARG (6 ) : 0 ;
744
+ REBCNT type = VAL_TYPE (val );
744
745
745
- if (IS_BLOCK ( val ) || IS_PAREN ( val ) ) {
746
+ if (type == REB_BLOCK || type == REB_PAREN ) {
746
747
REBSER * ser = VAL_SERIES (val );
747
748
REBCNT index = VAL_INDEX (val );
748
749
@@ -753,9 +754,12 @@ enum {
753
754
else
754
755
Reduce_Block (ser , index , into );
755
756
756
- if (!into )
757
- SET_TYPE (DS_TOP , VAL_TYPE (val ));
758
-
757
+ if (type == REB_PAREN )
758
+ // there must be also test, if the result is a block,
759
+ // because it can be also THROWN! see issue-1760
760
+ if (!into && IS_BLOCK (DS_TOP ))
761
+ SET_TYPE (DS_TOP , REB_PAREN );
762
+
759
763
return R_TOS ;
760
764
}
761
765
else if (into != 0 ) {
@@ -809,12 +813,11 @@ enum {
809
813
REBVAL * blk = VAL_BLK_DATA (D_ARG (2 ));
810
814
REBVAL * result ;
811
815
REBOOL all = D_REF (5 );
812
- REBOOL is_case = D_REF (6 );
813
816
REBOOL found = FALSE;
814
817
815
818
// Find value in case block...
816
819
for (; NOT_END (blk ); blk ++ ) {
817
- if (!IS_BLOCK (blk ) && 0 == Cmp_Value (DS_ARG (1 ), blk , is_case )) { // avoid stack move
820
+ if (!IS_BLOCK (blk ) && 0 == Cmp_Value (DS_ARG (1 ), blk , FALSE )) { // avoid stack move
818
821
// Skip forward to block...
819
822
for (; !IS_BLOCK (blk ) && NOT_END (blk ); blk ++ );
820
823
if (IS_END (blk )) break ;
0 commit comments