@@ -16,13 +16,24 @@ static size_t
|
16 | 16 | os_memsize_of_irep(mrb_state* state, const struct mrb_irep *irep) |
17 | 17 | { |
18 | 18 | size_t size; |
19 | | -int i; |
20 | 19 | |
21 | 20 | size = (irep->slen * sizeof(mrb_sym)) + |
22 | | - (irep->plen * sizeof(mrb_code)) + |
23 | | - (irep->ilen * sizeof(mrb_code)); |
| 21 | + (irep->plen * sizeof(mrb_pool_value)) + |
| 22 | + (irep->ilen * sizeof(mrb_code)) + |
| 23 | + (irep->rlen * sizeof(struct mrb_irep*)); |
24 | 24 | |
25 | | -for (i = 0; i < irep->rlen; i++) { |
| 25 | +for (int i = 0; i < irep->plen; i++) { |
| 26 | +const mrb_pool_value *p = &irep->pool[i]; |
| 27 | +if ((p->tt & IREP_TT_NFLAG) == 0) { /* string pool value */ |
| 28 | +size += (p->tt>>2); |
| 29 | + } |
| 30 | +else if (p->tt == IREP_TT_BIGINT) { /* bigint pool value */ |
| 31 | +size += p->u.str[0]; |
| 32 | + } |
| 33 | + } |
| 34 | + |
| 35 | +for (int i = 0; i < irep->rlen; i++) { |
| 36 | +size += sizeof(struct mrb_irep); /* size of irep structure */ |
26 | 37 | size += os_memsize_of_irep(state, irep->reps[i]); |
27 | 38 | } |
28 | 39 | return size; |
|