view runtime/builtin.c @ 74:a844c623c7df

Add support for Worker type
author Mike Pavone <pavone@retrodev.com>
date Thu, 01 Jul 2010 21:32:08 -0400
parents f7bcf3db1342
children e09c2d1d6d5b
line wrap: on
line source

#include "builtin.h"
#include "object.h"
#include "integer.h"
#include "bool.h"
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void register_builtin_type(uint32_t type)
{
	blueprint * bp;
	switch(type)
	{
	case TYPE_BLUEPRINT:
		bp = register_type_byid(TYPE_BLUEPRINT, sizeof(blueprint *), NULL, NULL, NULL);
		break;
	}
}

void register_builtin_types()
{
	uint32_t i;
	for(i = 0; i < TYPE_FIRST_USER; ++i)
		register_builtin_type(i);
}
object * make_Int64(int64_t val)
{
	t_Int64 * obj;
	object * ret = new_object(TYPE_INT64);
	obj = (t_Int64 *)ret;
	obj->Num = val;
	return ret;
}


object * make_Int32(int32_t val)
{
	t_Int32 * obj;
	object * ret = new_object(TYPE_INT32);
	obj = (t_Int32 *)ret;
	obj->Num = val;
	return ret;
}

object * make_Int16(int16_t val)
{
	t_Int16 * obj;
	object * ret = new_object(TYPE_INT16);
	obj = (t_Int16 *)ret;
	obj->Num = val;
	return ret;
}

object * make_Int8(int8_t val)
{
	t_Int8 * obj;
	object * ret = new_object(TYPE_INT8);
	obj = (t_Int8 *)ret;
	obj->Num = val;
	return ret;
}

object * make_UInt64(uint64_t val)
{
	t_UInt64 * obj;
	object * ret = new_object(TYPE_UINT64);
	obj = (t_UInt64 *)ret;
	obj->Num = val;
	return ret;
}

object * make_UInt32(uint32_t val)
{
	t_UInt32 * obj;
	object * ret = new_object(TYPE_UINT32);
	obj = (t_UInt32 *)ret;
	obj->Num = val;
	return ret;
}

object * make_UInt16(uint16_t val)
{
	t_UInt16 * obj;
	object * ret = new_object(TYPE_UINT16);
	obj = (t_UInt16 *)ret;
	obj->Num = val;
	return ret;
}

object * make_UInt8(uint8_t val)
{
	t_UInt8 * obj;
	object * ret = new_object(TYPE_UINT8);
	obj = (t_UInt8 *)ret;
	obj->Num = val;
	return ret;
}

object * make_String(char * text)
{
	object * params[1];
	t_Array * arr = (t_Array *)_internal_array_allocnaked(strlen(text), make_Blueprint(TYPE_UINT8));
	arr->payload.Length = arr->payload.Storage;
	memcpy(((char *)arr) + sizeof(t_Array), text, arr->payload.Length);
	
	params[0] = (object *)arr;
	rhope(FUNC_String, params, 1, 1);
	
	return params[0];
}

object * make_Bool(int32_t val)
{
	t_Boolean * b = (t_Boolean *)new_object(TYPE_BOOLEAN);
	b->Val = val != 0;
	return (object*)b;
}

object * make_Worker(int32_t index, int16_t initialsize, int16_t initialcount)
{
	t_Worker * worker = (t_Worker *)_internal_worker_alloc(initialsize);
	worker->payload.Index = index;
	worker->payload.Count = initialcount;
	return (object *)worker;
}