@@ -70,9 +70,9 @@ static REBOOL Equal_Object(REBVAL *val, REBVAL *arg)
70
70
return TRUE;
71
71
}
72
72
73
- static void Append_Obj (REBSER * obj , REBVAL * arg )
73
+ static void Append_Obj (REBSER * obj , REBVAL * arg , REBCNT part )
74
74
{
75
- REBCNT i , len ;
75
+ REBCNT i , n , len ;
76
76
REBVAL * word , * val ;
77
77
REBINT * binds ; // for binding table
78
78
@@ -102,7 +102,7 @@ static void Append_Obj(REBSER *obj, REBVAL *arg)
102
102
Collect_Object (obj );
103
103
104
104
// Examine word/value argument block
105
- for (word = arg ; NOT_END (word ); word += 2 ) {
105
+ for (word = arg , n = 0 ; ++ n < part && NOT_END (word ); word += 2 , n ++ ) {
106
106
107
107
if (!IS_WORD (word ) && !IS_SET_WORD (word )) {
108
108
// release binding table
@@ -138,7 +138,7 @@ static void Append_Obj(REBSER *obj, REBVAL *arg)
138
138
Append_Frame (obj , 0 , VAL_WORD_SYM (word ));
139
139
140
140
// Set new values to obj words
141
- for (word = arg ; NOT_END (word ); word += 2 ) {
141
+ for (word = arg , n = 0 ; ++ n < part && NOT_END (word ); word += 2 , n ++ ) {
142
142
143
143
i = binds [VAL_WORD_CANON (word )];
144
144
val = FRM_VALUE (obj , i );
@@ -440,7 +440,11 @@ static REBSER *Trim_Object(REBSER *obj)
440
440
case A_INSERT :
441
441
TRAP_PROTECT (VAL_SERIES (value ));
442
442
if (IS_OBJECT (value )) {
443
- Append_Obj (VAL_OBJ_FRAME (value ), arg );
443
+ if (DS_REF (AN_DUP )) {
444
+ n = Int32 (DS_ARG (AN_COUNT ));
445
+ if (n <= 0 ) break ;
446
+ }
447
+ Append_Obj (VAL_OBJ_FRAME (value ), arg , Partial1 (arg , D_ARG (AN_LENGTH )));
444
448
return R_ARG1 ;
445
449
}
446
450
else
0 commit comments