Class: YTLJit::Runtime::Arena

Inherits:
Object
  • Object
show all
Defined in:
lib/ytljit/arena.rb,
ext/ytljit.c

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeArena

Returns a new instance of Arena.



4
5
6
# File 'lib/ytljit/arena.rb', line 4

def initialize
  @using = 0
end

Instance Attribute Details

#usingObject

Returns the value of attribute using.



8
9
10
# File 'lib/ytljit/arena.rb', line 8

def using
  @using
end

Instance Method Details

#[](offset) ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
# File 'ext/memory.c', line 154

VALUE
ytl_arena_ref(VALUE self, VALUE offset)
{
  struct ArenaHeader *arenah;
  int raw_offset;

  Data_Get_Struct(self, struct ArenaHeader, arenah);
  raw_offset = FIX2INT(offset);

  return ULONG2NUM(arenah->body->body[raw_offset]);
}

#[]=(offset, src) ⇒ Object



166
167
168
169
170
171
172
173
174
175
176
177
178
179
# File 'ext/memory.c', line 166

VALUE
ytl_arena_emit(VALUE self, VALUE offset, VALUE src)
{
  struct ArenaHeader *arenah;

  int raw_offset;

  Data_Get_Struct(self, struct ArenaHeader, arenah);
  raw_offset = NUM2ULONG(offset);

  arenah->body->body[raw_offset] = FIX2INT(src);

  return src;
}

#body_addressObject



198
199
200
201
202
203
204
205
206
# File 'ext/memory.c', line 198

VALUE
ytl_arena_address(VALUE self)
{
  struct ArenaHeader *arenah;

  Data_Get_Struct(self, struct ArenaHeader, arenah);

  return ULONG2NUM((uintptr_t)arenah->body->body);
}

#raw_addressObject



208
209
210
211
212
213
214
215
216
# File 'ext/memory.c', line 208

VALUE
ytl_arena_raw_address(VALUE self)
{
  struct ArenaHeader *arenah;

  Data_Get_Struct(self, struct ArenaHeader, arenah);

  return ULONG2NUM((uintptr_t)arenah);
}

#sizeObject



181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# File 'ext/memory.c', line 181

VALUE
ytl_arena_size(VALUE self)
{
  struct ArenaHeader *arenah;
  struct ArenaBody *arenab;

  int totsize;

  Data_Get_Struct(self, struct ArenaHeader, arenah);
  totsize = 0;
  for (arenab = arenah->body; arenab; arenab = arenab->next) {
    totsize += arenab->size;
  }

  return INT2FIX(totsize);
}

#to_sObject



218
219
220
221
222
223
224
225
226
227
228
229
230
# File 'ext/memory.c', line 218

VALUE
ytl_arena_to_s(VALUE self)
{
  struct ArenaHeader *arenah;

  Data_Get_Struct(self, struct ArenaHeader, arenah);

  return rb_sprintf("#<Arena %p size=%d body=%p last=%p>", 
		    (void *)self, 
		    ytl_arena_size(self) / 2,
		    (void *)arenah->body->body,
		    (void *)arenah->lastptr);
}