@@ -28,59 +28,48 @@ rb_call_info_kw_arg_bytes(int keyword_len)
2828 return sizeof (struct rb_call_info_kw_arg ) + sizeof (VALUE ) * (keyword_len - 1 );
2929}
3030
31- enum iseq_mark_ary_index {
32- ISEQ_MARK_ARY_COVERAGE ,
33- ISEQ_MARK_ARY_FLIP_CNT ,
34- ISEQ_MARK_ARY_ORIGINAL_ISEQ ,
35- ISEQ_MARK_ARY_INITIAL_SIZE
36- };
37-
38- static inline VALUE
39- iseq_mark_ary_create (int flip_cnt )
31+ static inline void
32+ iseq_mark_ary_create (rb_iseq_t * iseq , int flip_cnt )
4033{
41- VALUE ary = rb_ary_tmp_new (ISEQ_MARK_ARY_INITIAL_SIZE );
42- rb_ary_push (ary , Qnil ); /* ISEQ_MARK_ARY_COVERAGE */
43- rb_ary_push (ary , INT2FIX (flip_cnt )); /* ISEQ_MARK_ARY_FLIP_CNT */
44- rb_ary_push (ary , Qnil ); /* ISEQ_MARK_ARY_ORIGINAL_ISEQ */
45- return ary ;
34+ RB_OBJ_WRITE (iseq , & iseq -> body -> variable .coverage , Qnil );
35+ RB_OBJ_WRITE (iseq , & iseq -> body -> variable .original_iseq , Qnil );
36+ iseq -> body -> variable .flip_count = flip_cnt ;
4637}
4738
48- #define ISEQ_MARK_ARY (iseq ) (iseq)->body->mark_ary
49-
50- #define ISEQ_COVERAGE (iseq ) RARRAY_AREF(ISEQ_MARK_ARY(iseq), ISEQ_MARK_ARY_COVERAGE)
51- #define ISEQ_COVERAGE_SET (iseq , cov ) RARRAY_ASET(ISEQ_MARK_ARY(iseq), ISEQ_MARK_ARY_COVERAGE, cov)
39+ #define ISEQ_COVERAGE (iseq ) iseq->body->variable.coverage
40+ #define ISEQ_COVERAGE_SET (iseq , cov ) RB_OBJ_WRITE(iseq, &iseq->body->variable.coverage, cov)
5241#define ISEQ_LINE_COVERAGE (iseq ) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_LINES)
5342#define ISEQ_BRANCH_COVERAGE (iseq ) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_BRANCHES)
5443
55- #define ISEQ_FLIP_CNT (iseq ) FIX2INT(RARRAY_AREF(ISEQ_MARK_ARY( iseq), ISEQ_MARK_ARY_FLIP_CNT))
44+ #define ISEQ_FLIP_CNT (iseq ) ( iseq)->body->variable.flip_count
5645
5746static inline int
5847ISEQ_FLIP_CNT_INCREMENT (const rb_iseq_t * iseq )
5948{
60- int cnt = ISEQ_FLIP_CNT ( iseq ) ;
61- RARRAY_ASET ( ISEQ_MARK_ARY ( iseq ), ISEQ_MARK_ARY_FLIP_CNT , INT2FIX ( cnt + 1 )) ;
49+ int cnt = iseq -> body -> variable . flip_count ;
50+ iseq -> body -> variable . flip_count += 1 ;
6251 return cnt ;
6352}
6453
6554static inline VALUE *
6655ISEQ_ORIGINAL_ISEQ (const rb_iseq_t * iseq )
6756{
68- VALUE str = RARRAY_AREF ( ISEQ_MARK_ARY ( iseq ), ISEQ_MARK_ARY_ORIGINAL_ISEQ ) ;
57+ VALUE str = iseq -> body -> variable . original_iseq ;
6958 if (RTEST (str )) return (VALUE * )RSTRING_PTR (str );
7059 return NULL ;
7160}
7261
7362static inline void
7463ISEQ_ORIGINAL_ISEQ_CLEAR (const rb_iseq_t * iseq )
7564{
76- RARRAY_ASET ( ISEQ_MARK_ARY ( iseq ), ISEQ_MARK_ARY_ORIGINAL_ISEQ , Qnil );
65+ RB_OBJ_WRITE ( iseq , & iseq -> body -> variable . original_iseq , Qnil );
7766}
7867
7968static inline VALUE *
8069ISEQ_ORIGINAL_ISEQ_ALLOC (const rb_iseq_t * iseq , long size )
8170{
8271 VALUE str = rb_str_tmp_new (size * sizeof (VALUE ));
83- RARRAY_ASET ( ISEQ_MARK_ARY ( iseq ), ISEQ_MARK_ARY_ORIGINAL_ISEQ , str );
72+ RB_OBJ_WRITE ( iseq , & iseq -> body -> variable . original_iseq , str );
8473 return (VALUE * )RSTRING_PTR (str );
8574}
8675
0 commit comments