@@ -9038,9 +9038,6 @@ compile_op_asgn1(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node
9038
9038
unsigned int flag = 0 ;
9039
9039
int asgnflag = 0 ;
9040
9040
ID id = RNODE_OP_ASGN1 (node )-> nd_mid ;
9041
- int boff = 0 ;
9042
- int keyword_len = 0 ;
9043
- struct rb_callinfo_kwarg * keywords = NULL ;
9044
9041
9045
9042
/*
9046
9043
* a[x] (op)= y
@@ -9074,32 +9071,14 @@ compile_op_asgn1(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node
9074
9071
case NODE_ZLIST :
9075
9072
argc = INT2FIX (0 );
9076
9073
break ;
9077
- case NODE_BLOCK_PASS :
9078
- boff = 1 ;
9079
- /* fall through */
9080
9074
default :
9081
- argc = setup_args (iseq , ret , RNODE_OP_ASGN1 (node )-> nd_index , & flag , & keywords );
9082
- if (flag & VM_CALL_KW_SPLAT ) {
9083
- if (boff ) {
9084
- ADD_INSN (ret , node , splatkw );
9085
- }
9086
- else {
9087
- /* Make sure to_hash is only called once and not twice */
9088
- ADD_INSN (ret , node , dup );
9089
- ADD_INSN (ret , node , splatkw );
9090
- ADD_INSN (ret , node , pop );
9091
- }
9092
- }
9075
+ argc = setup_args (iseq , ret , RNODE_OP_ASGN1 (node )-> nd_index , & flag , NULL );
9093
9076
CHECK (!NIL_P (argc ));
9094
9077
}
9095
- int dup_argn = FIX2INT (argc ) + 1 + boff ;
9096
- if (keywords ) {
9097
- keyword_len = keywords -> keyword_len ;
9098
- dup_argn += keyword_len ;
9099
- }
9078
+ int dup_argn = FIX2INT (argc ) + 1 ;
9100
9079
ADD_INSN1 (ret , node , dupn , INT2FIX (dup_argn ));
9101
9080
flag |= asgnflag ;
9102
- ADD_SEND_R (ret , node , idAREF , argc , NULL , INT2FIX (flag & ~( VM_CALL_ARGS_SPLAT_MUT | VM_CALL_KW_SPLAT_MUT )), keywords );
9081
+ ADD_SEND_R (ret , node , idAREF , argc , NULL , INT2FIX (flag & ~VM_CALL_ARGS_SPLAT_MUT ), NULL );
9103
9082
9104
9083
if (id == idOROP || id == idANDOP ) {
9105
9084
/* a[x] ||= y or a[x] &&= y
@@ -9127,57 +9106,17 @@ compile_op_asgn1(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node
9127
9106
ADD_INSN1 (ret , node , setn , INT2FIX (dup_argn + 1 ));
9128
9107
}
9129
9108
if (flag & VM_CALL_ARGS_SPLAT ) {
9130
- if (flag & VM_CALL_KW_SPLAT ) {
9131
- ADD_INSN1 (ret , node , topn , INT2FIX (2 + boff ));
9132
- if (!(flag & VM_CALL_ARGS_SPLAT_MUT )) {
9133
- ADD_INSN1 (ret , node , splatarray , Qtrue );
9134
- flag |= VM_CALL_ARGS_SPLAT_MUT ;
9135
- }
9109
+ if (!(flag & VM_CALL_ARGS_SPLAT_MUT )) {
9136
9110
ADD_INSN (ret , node , swap );
9137
- ADD_INSN1 (ret , node , pushtoarray , INT2FIX (1 ));
9138
- ADD_INSN1 (ret , node , setn , INT2FIX (2 + boff ));
9139
- ADD_INSN (ret , node , pop );
9140
- }
9141
- else {
9142
- if (boff > 0 ) {
9143
- ADD_INSN1 (ret , node , dupn , INT2FIX (3 ));
9144
- ADD_INSN (ret , node , swap );
9145
- ADD_INSN (ret , node , pop );
9146
- }
9147
- if (!(flag & VM_CALL_ARGS_SPLAT_MUT )) {
9148
- ADD_INSN (ret , node , swap );
9149
- ADD_INSN1 (ret , node , splatarray , Qtrue );
9150
- ADD_INSN (ret , node , swap );
9151
- flag |= VM_CALL_ARGS_SPLAT_MUT ;
9152
- }
9153
- ADD_INSN1 (ret , node , pushtoarray , INT2FIX (1 ));
9154
- if (boff > 0 ) {
9155
- ADD_INSN1 (ret , node , setn , INT2FIX (3 ));
9156
- ADD_INSN (ret , node , pop );
9157
- ADD_INSN (ret , node , pop );
9158
- }
9159
- }
9160
- ADD_SEND_R (ret , node , idASET , argc , NULL , INT2FIX (flag ), keywords );
9161
- }
9162
- else if (flag & VM_CALL_KW_SPLAT ) {
9163
- if (boff > 0 ) {
9164
- ADD_INSN1 (ret , node , topn , INT2FIX (2 ));
9111
+ ADD_INSN1 (ret , node , splatarray , Qtrue );
9165
9112
ADD_INSN (ret , node , swap );
9166
- ADD_INSN1 (ret , node , setn , INT2FIX (3 ));
9167
- ADD_INSN (ret , node , pop );
9113
+ flag |= VM_CALL_ARGS_SPLAT_MUT ;
9168
9114
}
9169
- ADD_INSN (ret , node , swap );
9170
- ADD_SEND_R (ret , node , idASET , FIXNUM_INC (argc , 1 ), NULL , INT2FIX (flag ), keywords );
9171
- }
9172
- else if (keyword_len ) {
9173
- ADD_INSN1 (ret , node , opt_reverse , INT2FIX (keyword_len + boff + 1 ));
9174
- ADD_INSN1 (ret , node , opt_reverse , INT2FIX (keyword_len + boff + 0 ));
9175
- ADD_SEND_R (ret , node , idASET , FIXNUM_INC (argc , 1 ), NULL , INT2FIX (flag ), keywords );
9115
+ ADD_INSN1 (ret , node , pushtoarray , INT2FIX (1 ));
9116
+ ADD_SEND_R (ret , node , idASET , argc , NULL , INT2FIX (flag ), NULL );
9176
9117
}
9177
9118
else {
9178
- if (boff > 0 )
9179
- ADD_INSN (ret , node , swap );
9180
- ADD_SEND_R (ret , node , idASET , FIXNUM_INC (argc , 1 ), NULL , INT2FIX (flag ), keywords );
9119
+ ADD_SEND_R (ret , node , idASET , FIXNUM_INC (argc , 1 ), NULL , INT2FIX (flag ), NULL );
9181
9120
}
9182
9121
ADD_INSN (ret , node , pop );
9183
9122
ADD_INSNL (ret , node , jump , lfin );
@@ -9196,58 +9135,29 @@ compile_op_asgn1(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node
9196
9135
}
9197
9136
if (flag & VM_CALL_ARGS_SPLAT ) {
9198
9137
if (flag & VM_CALL_KW_SPLAT ) {
9199
- ADD_INSN1 (ret , node , topn , INT2FIX (2 + boff ));
9138
+ ADD_INSN1 (ret , node , topn , INT2FIX (2 ));
9200
9139
if (!(flag & VM_CALL_ARGS_SPLAT_MUT )) {
9201
9140
ADD_INSN1 (ret , node , splatarray , Qtrue );
9202
9141
flag |= VM_CALL_ARGS_SPLAT_MUT ;
9203
9142
}
9204
9143
ADD_INSN (ret , node , swap );
9205
9144
ADD_INSN1 (ret , node , pushtoarray , INT2FIX (1 ));
9206
- ADD_INSN1 (ret , node , setn , INT2FIX (2 + boff ));
9145
+ ADD_INSN1 (ret , node , setn , INT2FIX (2 ));
9207
9146
ADD_INSN (ret , node , pop );
9208
9147
}
9209
9148
else {
9210
- if (boff > 0 ) {
9211
- ADD_INSN1 (ret , node , dupn , INT2FIX (3 ));
9212
- ADD_INSN (ret , node , swap );
9213
- ADD_INSN (ret , node , pop );
9214
- }
9215
9149
if (!(flag & VM_CALL_ARGS_SPLAT_MUT )) {
9216
9150
ADD_INSN (ret , node , swap );
9217
9151
ADD_INSN1 (ret , node , splatarray , Qtrue );
9218
9152
ADD_INSN (ret , node , swap );
9219
9153
flag |= VM_CALL_ARGS_SPLAT_MUT ;
9220
9154
}
9221
9155
ADD_INSN1 (ret , node , pushtoarray , INT2FIX (1 ));
9222
- if (boff > 0 ) {
9223
- ADD_INSN1 (ret , node , setn , INT2FIX (3 ));
9224
- ADD_INSN (ret , node , pop );
9225
- ADD_INSN (ret , node , pop );
9226
- }
9227
- }
9228
- ADD_SEND_R (ret , node , idASET , argc , NULL , INT2FIX (flag ), keywords );
9229
- }
9230
- else if (flag & VM_CALL_KW_SPLAT ) {
9231
- if (boff > 0 ) {
9232
- ADD_INSN1 (ret , node , topn , INT2FIX (2 ));
9233
- ADD_INSN (ret , node , swap );
9234
- ADD_INSN1 (ret , node , setn , INT2FIX (3 ));
9235
- ADD_INSN (ret , node , pop );
9236
9156
}
9237
- ADD_INSN (ret , node , swap );
9238
- ADD_SEND_R (ret , node , idASET , FIXNUM_INC (argc , 1 ), NULL , INT2FIX (flag ), keywords );
9239
- }
9240
- else if (keyword_len ) {
9241
- ADD_INSN (ret , node , dup );
9242
- ADD_INSN1 (ret , node , opt_reverse , INT2FIX (keyword_len + boff + 2 ));
9243
- ADD_INSN1 (ret , node , opt_reverse , INT2FIX (keyword_len + boff + 1 ));
9244
- ADD_INSN (ret , node , pop );
9245
- ADD_SEND_R (ret , node , idASET , FIXNUM_INC (argc , 1 ), NULL , INT2FIX (flag ), keywords );
9157
+ ADD_SEND_R (ret , node , idASET , argc , NULL , INT2FIX (flag ), NULL );
9246
9158
}
9247
9159
else {
9248
- if (boff > 0 )
9249
- ADD_INSN (ret , node , swap );
9250
- ADD_SEND_R (ret , node , idASET , FIXNUM_INC (argc , 1 ), NULL , INT2FIX (flag ), keywords );
9160
+ ADD_SEND_R (ret , node , idASET , FIXNUM_INC (argc , 1 ), NULL , INT2FIX (flag ), NULL );
9251
9161
}
9252
9162
ADD_INSN (ret , node , pop );
9253
9163
}
0 commit comments