Mercurial > repos > rhope
view runtime/array.c @ 50:689fb73e7612
Add support for various integer literals and add support for raw pointers to objects and raw pointers to arrays in the FFI
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 16 Apr 2010 01:57:04 -0400 |
parents | 3e20ed8959c4 |
children | 70af7fa155d0 |
line wrap: on
line source
#include "integer.h" #include "object.h" void _internal_array_copyout(object * array, int32_t index, object * dest) { t_Array * arr = (t_Array *)array; memcpy(((char *)dest) + sizeof(object), ((char *)array) + sizeof(t_Array) + arr->payload.Eltype->bp->size * index, get_blueprint(dest)->size); } void _internal_array_copyin(object * array, int32_t index, object * val) { t_Array * arr = (t_Array *)array; memcpy(((char *)array) + sizeof(t_Array) + arr->payload.Eltype->bp->size * index, ((char *)val) + sizeof(object), arr->payload.Eltype->bp->size); } object * _internal_array_getboxed(object * array, int32_t index) { object * ret; object ** intarr = (object *)(((char *) array) + sizeof(t_Array)); ret = add_ref(intarr[index]); release_ref(array); return ret; } void _internal_array_setboxed(object *array, int32_t index, object * val) { object ** intarr = (object *)(((char *) array) + sizeof(t_Array)); intarr[index] = val; } object *_internal_array_allocboxed(int32_t size) { t_Array * ret = (t_Array *)new_multisize(TYPE_ARRAY, sizeof(nt_Array)+sizeof(object *)*size); ret->payload.Length = 0; ret->payload.Storage = size; ret->payload.Eltype = (t_Blueprint *)make_Blueprint(0); return ret; } object * _internal_array_allocnaked(int32_t size , object * type) { t_Array * ret; t_Blueprint * bp = (t_Blueprint *)type; if (bp->bp->size < 0) { return _internal_array_allocboxed(size); } ret = (t_Array *)new_multisize(TYPE_ARRAY, sizeof(nt_Array)+bp->bp->size*size); ret->payload.Length = 0; ret->payload.Storage = size; ret->payload.Eltype = bp; return ret; }