@@ -1661,12 +1661,20 @@ extern REBSER *Scan_Full_Block(SCAN_STATE *scan_state, REBYTE mode_char);
1661
1661
case TOKEN_CONSTRUCT :
1662
1662
block = Scan_Full_Block (scan_state , ']' );
1663
1663
value = BLK_TAIL (emitbuf );
1664
- emitbuf -> tail ++ ; // Protect the block from GC
1665
- if (!Construct_Value (value , block )) {
1666
- if (IS_END (value )) Set_Block (value , block );
1667
- Trap1 (RE_MALCONSTRUCT , value );
1664
+ // make sure that there was not an error... transcode "#["
1665
+ if (!IS_ERROR (value )){
1666
+ emitbuf -> tail ++ ; // Protect the block from GC
1667
+ if (!Construct_Value (value , block )) {
1668
+ if (IS_END (value )) Set_Block (value , block );
1669
+ if (GET_FLAG (scan_state -> opts , SCAN_RELAX )) {
1670
+ block = Make_Error (RE_MALCONSTRUCT , value , 0 , 0 );
1671
+ SET_ERROR (value , RE_PAST_END , block );
1672
+ } else {
1673
+ Trap1 (RE_MALCONSTRUCT , value );
1674
+ }
1675
+ }
1676
+ emitbuf -> tail -- ; // Unprotect
1668
1677
}
1669
- emitbuf -> tail -- ; // Unprotect
1670
1678
break ;
1671
1679
1672
1680
case TOKEN_MAP :
@@ -1720,6 +1728,7 @@ extern REBSER *Scan_Full_Block(SCAN_STATE *scan_state, REBYTE mode_char);
1720
1728
goto exit_block ;
1721
1729
}
1722
1730
}
1731
+
1723
1732
1724
1733
// Check for end of path:
1725
1734
if (mode_char == '/' ) {
0 commit comments