Mercurial > repos > rhope
diff runtime/builtin.c @ 48:a24eb366195c
Fixed some bugs introduced in previous commit and moved definition of integer methods out of runtime and into the compiler
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 02 Mar 2010 00:18:49 -0500 |
parents | 640f541e9116 |
children | 689fb73e7612 |
line wrap: on
line diff
--- a/runtime/builtin.c Tue Dec 22 01:22:09 2009 -0500 +++ b/runtime/builtin.c Tue Mar 02 00:18:49 2010 -0500 @@ -10,25 +10,6 @@ blueprint * bp; switch(type) { - case TYPE_INT32: - bp = register_type_byid(TYPE_INT32, sizeof(int32_t), NULL, NULL, NULL); - add_method(bp, METHOD_ADD, MethodName(_PL_,Int32)); - add_method(bp, METHOD_SUB, MethodName(_MN_,Int32)); - add_method(bp, METHOD_MUL, MethodName(_TM_,Int32)); - add_method(bp, METHOD_DIV, MethodName(_DV_,Int32)); - add_method(bp, METHOD_LSHIFT, MethodName(LShift,Int32)); - add_method(bp, METHOD_RSHIFT, MethodName(RShift,Int32)); - add_method(bp, METHOD_LESS, MethodName(_LT_,Int32)); - add_method(bp, METHOD_GREATER, MethodName(_GT_,Int32)); - break; - case TYPE_BOOLEAN: - bp = register_type_byid(TYPE_BOOLEAN, sizeof(int32_t), NULL, NULL, NULL); - add_method(bp, METHOD_IF, MethodName(If,Boolean)); - val_yes = (t_Boolean *)new_object(TYPE_BOOLEAN); - val_yes->val = 1; - val_no = (t_Boolean *)new_object(TYPE_BOOLEAN); - val_no->val = 0; - break; case TYPE_BLUEPRINT: bp = register_type_byid(TYPE_BLUEPRINT, sizeof(blueprint *), NULL, NULL, NULL); break; @@ -49,10 +30,37 @@ if(get_blueprint(cdata->params[0]) == get_blueprint_byid(TYPE_INT32)) { - printf("%d\n", ((t_Int32 *)(cdata->params[0]))->num); + printf("%d\n", ((t_Int32 *)(cdata->params[0]))->Num); } else { puts("Don't know how to print this type"); } release_ref(cdata->params[0]); Ret(0, make_Int32(0)) EndFunc +object * make_Int32(int32_t val) +{ + t_Int32 * obj; + object * ret = new_object(TYPE_INT32); + obj = (t_Int32 *)ret; + obj->Num = val; + return ret; +} + +#define lval ((t_Boolean *)(cdata->params[0]))->Val + +MethodNoLocals(If,Boolean, + NumParams 1, + CallSpace 1) + + Param(0, TYPE_BOOLEAN) + + if(lval) + { + Ret(1, NULL) + } else { + Ret(1, cdata->params[0]); + Ret(0, NULL) + } +EndFunc + +