substitute more macros for the slot field access.
simplified code by getting rid of SET_ACTIVE_METHOD_CODE() and making related changes
This commit is contained in:
parent
981882de7e
commit
b13892d586
@ -333,7 +333,7 @@ found:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dic->bucket->slot[x] = moo->_nil; /* the value is nil. no MOO_STORE_OOP */
|
MOO_OBJ_SET_OOP_VAL (dic->bucket, x, moo->_nil); /* the value is nil. no MOO_STORE_OOP */
|
||||||
|
|
||||||
tally--;
|
tally--;
|
||||||
dic->tally = MOO_SMOOI_TO_OOP(tally);
|
dic->tally = MOO_SMOOI_TO_OOP(tally);
|
||||||
|
@ -91,7 +91,7 @@ static MOO_INLINE const char* proc_state_to_string (int state)
|
|||||||
STORE_ACTIVE_IP (moo); \
|
STORE_ACTIVE_IP (moo); \
|
||||||
(moo)->active_context = (v_ctx); \
|
(moo)->active_context = (v_ctx); \
|
||||||
(moo)->active_method = (moo_oop_method_t)(moo)->active_context->origin->method_or_nargs; \
|
(moo)->active_method = (moo_oop_method_t)(moo)->active_context->origin->method_or_nargs; \
|
||||||
SET_ACTIVE_METHOD_CODE(moo); \
|
(moo)->active_code = MOO_METHOD_GET_CODE_BYTE((moo)->active_method); \
|
||||||
LOAD_ACTIVE_IP (moo); \
|
LOAD_ACTIVE_IP (moo); \
|
||||||
(moo)->processor->active->current_context = (moo)->active_context; \
|
(moo)->processor->active->current_context = (moo)->active_context; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
@ -1024,7 +1024,7 @@ void moo_gc (moo_t* moo)
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (moo->active_method) SET_ACTIVE_METHOD_CODE (moo); /* update moo->active_code */
|
if (moo->active_method) moo->active_code = MOO_METHOD_GET_CODE_BYTE(moo->active_method); /* update moo->active_code */
|
||||||
if (gcfin_count > 0) moo->sem_gcfin_sigreq = 1;
|
if (gcfin_count > 0) moo->sem_gcfin_sigreq = 1;
|
||||||
|
|
||||||
/* TODO: include some gc statstics like number of live objects, gc performance, etc */
|
/* TODO: include some gc statstics like number of live objects, gc performance, etc */
|
||||||
|
@ -661,14 +661,6 @@ struct moo_compiler_t
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MOO_USE_METHOD_TRAILER)
|
|
||||||
/* let it point to the trailer of the method */
|
|
||||||
# define SET_ACTIVE_METHOD_CODE(moo) ((moo)->active_code = (moo_oob_t*)&(moo)->active_method->literal_frame[MOO_OBJ_GET_SIZE((moo)->active_method) + 1 - MOO_METHOD_NAMED_INSTVARS])
|
|
||||||
#else
|
|
||||||
/* let it point to the payload of the code byte array */
|
|
||||||
# define SET_ACTIVE_METHOD_CODE(moo) ((moo)->active_code = (moo)->active_method->code->slot)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(MOO_BCODE_LONG_PARAM_SIZE) && (MOO_BCODE_LONG_PARAM_SIZE == 1)
|
#if defined(MOO_BCODE_LONG_PARAM_SIZE) && (MOO_BCODE_LONG_PARAM_SIZE == 1)
|
||||||
# define MAX_CODE_INDEX (0xFFu)
|
# define MAX_CODE_INDEX (0xFFu)
|
||||||
# define MAX_CODE_NTMPRS (0xFFu)
|
# define MAX_CODE_NTMPRS (0xFFu)
|
||||||
|
@ -515,7 +515,7 @@ struct moo_obj_word_t
|
|||||||
#define MOO_OBJ_GET_WORD_VAL(oop,idx) ((((moo_oop_word_t)(oop))->slot)[idx])
|
#define MOO_OBJ_GET_WORD_VAL(oop,idx) ((((moo_oop_word_t)(oop))->slot)[idx])
|
||||||
#define MOO_OBJ_GET_LIWORD_VAL(oop,idx) ((((moo_oop_liword_t)(oop))->slot)[idx])
|
#define MOO_OBJ_GET_LIWORD_VAL(oop,idx) ((((moo_oop_liword_t)(oop))->slot)[idx])
|
||||||
|
|
||||||
/*#define MOO_OBJ_SET_OOP_VAL(oop,idx,val) ((((moo_oop_oop_t)(oop))->slot)[idx] = (val)) - I must use MOO_STORE_OOP() instead.*/
|
#define MOO_OBJ_SET_OOP_VAL(oop,idx,val) ((((moo_oop_oop_t)(oop))->slot)[idx] = (val)) /* NOTE: MOO_STORE_OOP() */
|
||||||
#define MOO_OBJ_SET_CHAR_VAL(oop,idx,val) ((((moo_oop_char_t)(oop))->slot)[idx] = (val))
|
#define MOO_OBJ_SET_CHAR_VAL(oop,idx,val) ((((moo_oop_char_t)(oop))->slot)[idx] = (val))
|
||||||
#define MOO_OBJ_SET_BYTE_VAL(oop,idx,val) ((((moo_oop_byte_t)(oop))->slot)[idx] = (val))
|
#define MOO_OBJ_SET_BYTE_VAL(oop,idx,val) ((((moo_oop_byte_t)(oop))->slot)[idx] = (val))
|
||||||
#define MOO_OBJ_SET_HALFWORD_VAL(oop,idx,val) ((((moo_oop_halfword_t)(oop))->slot)[idx] = (val))
|
#define MOO_OBJ_SET_HALFWORD_VAL(oop,idx,val) ((((moo_oop_halfword_t)(oop))->slot)[idx] = (val))
|
||||||
@ -680,18 +680,16 @@ struct moo_method_t
|
|||||||
};
|
};
|
||||||
|
|
||||||
#if defined(MOO_USE_METHOD_TRAILER)
|
#if defined(MOO_USE_METHOD_TRAILER)
|
||||||
|
/* the first byte after the main payload is the trailer size
|
||||||
/* if m is to be type-cast to moo_oop_method_t, the macro must be
|
* the code bytes are placed after the trailer size.
|
||||||
* redefined to this:
|
*
|
||||||
* (&((moo_oop_method_t)m)>slot[MOO_OBJ_GET_SIZE(m) + 1 - MOO_METHOD_NAMED_INSTVARS])
|
* code bytes -> ((moo_oob_t*)&((moo_oop_oop_t)m)->slot[MOO_OBJ_GET_SIZE(m) + 1]) or
|
||||||
*/
|
* ((moo_oob_t*)&((moo_oop_method_t)m)->literal_frame[MOO_OBJ_GET_SIZE(m) + 1 - MOO_METHOD_NAMED_INSTVARS])
|
||||||
|
* size -> ((moo_oow_t)((moo_oop_oop_t)m)->slot[MOO_OBJ_GET_SIZE(m)])*/
|
||||||
/*((moo_oob_t*)&((moo_oop_oop_t)m)->slot[MOO_OBJ_GET_SIZE(m) + 1])*/
|
|
||||||
# define MOO_METHOD_GET_CODE_BYTE(m) MOO_OBJ_GET_TRAILER_BYTE(m)
|
# define MOO_METHOD_GET_CODE_BYTE(m) MOO_OBJ_GET_TRAILER_BYTE(m)
|
||||||
/*((moo_oow_t)((moo_oop_oop_t)m)->slot[MOO_OBJ_GET_SIZE(m)])*/
|
|
||||||
# define MOO_METHOD_GET_CODE_SIZE(m) MOO_OBJ_GET_TRAILER_SIZE(m)
|
# define MOO_METHOD_GET_CODE_SIZE(m) MOO_OBJ_GET_TRAILER_SIZE(m)
|
||||||
#else
|
#else
|
||||||
# define MOO_METHOD_GET_CODE_BYTE(m) ((m)->code->slot)
|
# define MOO_METHOD_GET_CODE_BYTE(m) MOO_OBJ_GET_BYTE_SLOT(((m)->code)
|
||||||
# define MOO_METHOD_GET_CODE_SIZE(m) MOO_OBJ_GET_SIZE((m)->code)
|
# define MOO_METHOD_GET_CODE_SIZE(m) MOO_OBJ_GET_SIZE((m)->code)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -80,7 +80,11 @@ moo_oop_t moo_allocoopobj (moo_t* moo, moo_oow_t size)
|
|||||||
MOO_OBJ_SET_SIZE (hdr, size);
|
MOO_OBJ_SET_SIZE (hdr, size);
|
||||||
MOO_OBJ_SET_CLASS (hdr, moo->_nil);
|
MOO_OBJ_SET_CLASS (hdr, moo->_nil);
|
||||||
|
|
||||||
while (size > 0) hdr->slot[--size] = moo->_nil;
|
while (size > 0)
|
||||||
|
{
|
||||||
|
size = size - 1;
|
||||||
|
MOO_OBJ_SET_OOP_VAL (hdr, size, moo->_nil);
|
||||||
|
}
|
||||||
|
|
||||||
return (moo_oop_t)hdr;
|
return (moo_oop_t)hdr;
|
||||||
}
|
}
|
||||||
@ -102,18 +106,22 @@ moo_oop_t moo_allocoopobjwithtrailer (moo_t* moo, moo_oow_t size, const moo_oob_
|
|||||||
MOO_OBJ_SET_SIZE (hdr, size);
|
MOO_OBJ_SET_SIZE (hdr, size);
|
||||||
MOO_OBJ_SET_CLASS (hdr, moo->_nil);
|
MOO_OBJ_SET_CLASS (hdr, moo->_nil);
|
||||||
|
|
||||||
for (i = 0; i < size; i++) hdr->slot[i] = moo->_nil;
|
for (i = 0; i < size; i++)
|
||||||
|
{
|
||||||
|
MOO_OBJ_SET_OOP_VAL (hdr, i, moo->_nil);
|
||||||
|
}
|
||||||
|
|
||||||
/* [NOTE] this is not converted to a SmallInteger object. it is a special slot handled by GC for an object with the TRAILER bit set */
|
/* [NOTE] this is not converted to a SmallInteger object. it is a special slot handled by GC for an object with the TRAILER bit set */
|
||||||
hdr->slot[size] = (moo_oop_t)blen;
|
MOO_OBJ_SET_OOP_VAL (hdr, size, (moo_oop_t)blen);
|
||||||
|
|
||||||
|
/* the trailer part is just composed of raw bytes from the moo core's perspective. */
|
||||||
if (bptr)
|
if (bptr)
|
||||||
{
|
{
|
||||||
MOO_MEMCPY (&hdr->slot[size + 1], bptr, blen);
|
MOO_MEMCPY ((moo_oob_t*)MOO_OBJ_GET_OOP_PTR(hdr, size + 1), bptr, blen);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MOO_MEMSET (&hdr->slot[size + 1], 0, blen);
|
MOO_MEMSET ((moo_oob_t*)MOO_OBJ_GET_OOP_PTR(hdr, size + 1), 0, blen);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (moo_oop_t)hdr;
|
return (moo_oop_t)hdr;
|
||||||
@ -275,7 +283,7 @@ moo_oop_t moo_instantiate (moo_t* moo, moo_oop_class_t _class, const void* vptr,
|
|||||||
while (i > 0)
|
while (i > 0)
|
||||||
{
|
{
|
||||||
--i;
|
--i;
|
||||||
MOO_STORE_OOP (moo, &((moo_oop_oop_t)oop)->slot[i], ((moo_oop_oop_t)_class->initv[0])->slot[i]);
|
MOO_STORE_OOP (moo, MOO_OBJ_GET_OOP_PTR(oop, i), MOO_OBJ_GET_OOP_VAL(_class->initv[0], i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -361,7 +369,7 @@ moo_oop_t moo_instantiatewithtrailer (moo_t* moo, moo_oop_class_t _class, moo_oo
|
|||||||
while (i > 0)
|
while (i > 0)
|
||||||
{
|
{
|
||||||
--i;
|
--i;
|
||||||
MOO_STORE_OOP (moo, &((moo_oop_oop_t)oop)->slot[i], ((moo_oop_oop_t)_class->initv[0])->slot[i]);
|
MOO_STORE_OOP (moo, MOO_OBJ_GET_OOP_PTR(oop, i), MOO_OBJ_GET_OOP_VAL(_class->initv[0], i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -441,7 +441,7 @@ moo_pfrc_t moo_pf_basic_at_put (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case MOO_OBJ_TYPE_OOP:
|
case MOO_OBJ_TYPE_OOP:
|
||||||
MOO_STORE_OOP (moo, MOO_OBJ_GET_OOP_PTR(rcv, idx), val); /*((moo_oop_oop_t)rcv)->slot[idx] = val;*/
|
MOO_STORE_OOP (moo, MOO_OBJ_GET_OOP_PTR(rcv, idx), val);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -713,19 +713,36 @@ moo_pfrc_t moo_pf_basic_shift (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MOO_OBJ_TYPE_OOP:
|
case MOO_OBJ_TYPE_OOP:
|
||||||
MOO_MEMMOVE (&((moo_oop_oop_t)rcv)->slot[didx],
|
|
||||||
&((moo_oop_oop_t)rcv)->slot[sidx],
|
|
||||||
ssz * MOO_SIZEOF(((moo_oop_oop_t)rcv)->slot[0]));
|
|
||||||
|
|
||||||
if (didx > sidx)
|
if (didx > sidx)
|
||||||
{
|
{
|
||||||
/* no need to use MOO_STORE_OOP because moo->_nil is the assigning value */
|
moo_oow_t i;
|
||||||
while (sidx < didx) ((moo_oop_oop_t)rcv)->slot[sidx++] = moo->_nil;
|
for (i = ssz; i > 0; )
|
||||||
|
{
|
||||||
|
MOO_STORE_OOP (moo, MOO_OBJ_GET_OOP_PTR(rcv, didx + i), MOO_OBJ_GET_OOP_VAL(rcv, sidx + i));
|
||||||
|
}
|
||||||
|
|
||||||
|
while (sidx < didx)
|
||||||
|
{
|
||||||
|
/* no need to use MOO_STORE_OOP because moo->_nil is the assigned value */
|
||||||
|
MOO_OBJ_SET_OOP_VAL (rcv, sidx, moo->_nil);
|
||||||
|
sidx = sidx + 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* no need to use MOO_STORE_OOP because moo->_nil is the assigning value */
|
moo_oow_t i;
|
||||||
while (didx > sidx) ((moo_oop_oop_t)rcv)->slot[(didx++) + ssz] = moo->_nil;
|
for (i = 0; i < ssz; i++)
|
||||||
|
{
|
||||||
|
--i;
|
||||||
|
MOO_STORE_OOP (moo, MOO_OBJ_GET_OOP_PTR(rcv, didx + i), MOO_OBJ_GET_OOP_VAL(rcv, sidx + i));
|
||||||
|
}
|
||||||
|
|
||||||
|
while (didx > sidx)
|
||||||
|
{
|
||||||
|
/* no need to use MOO_STORE_OOP because moo->_nil is the assigned value */
|
||||||
|
MOO_OBJ_SET_OOP_VAL (rcv, didx + ssz, moo->_nil);
|
||||||
|
didx = didx + 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user