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 = (arenah->body->size / sizeof(VALUE)) - 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
180
181
182
183
184
185
# File 'ext/memory.c', line 166

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

  int raw_offset;
  int newsize;
  VALUE *newlastptr;

  Data_Get_Struct(self, struct ArenaHeader, arenah);
  raw_offset = (arenah->body->size / sizeof(VALUE)) - NUM2ULONG(offset);

  arenah->body->body[raw_offset] = FIX2INT(src);
  newlastptr = arenah->body->body + raw_offset;
  if (newlastptr < arenah->lastptr) {
    arenah->lastptr = newlastptr;
  }

  return src;
}

#body_addressObject



204
205
206
207
208
209
210
211
212
# File 'ext/memory.c', line 204

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



214
215
216
217
218
219
220
221
222
# File 'ext/memory.c', line 214

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

  Data_Get_Struct(self, struct ArenaHeader, arenah);

  return ULONG2NUM((uintptr_t)arenah);
}

#sizeObject



187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# File 'ext/memory.c', line 187

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



224
225
226
227
228
229
230
231
232
233
234
235
236
# File 'ext/memory.c', line 224

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);
}