added experimental code to support byte trailer of a pointer object. the main purpose is to embed byte codes into the back of the compiled method object.

fixed buggy code using the freed pointer when reallocation has occurred - callers of clone_keyword(), clone_assignee(), clone_binsel()
This commit is contained in:
hyunghwan.chung
2015-07-01 15:01:39 +00:00
parent d6a9ca91fa
commit 60299cda5b
8 changed files with 723 additions and 80 deletions

View File

@ -39,6 +39,11 @@
/* define this to generate CTXTEMVAR instructions */
#define STIX_USE_CTXTEMPVAR
/* define this to allow an pointer(OOP) object to have trailing bytes
* this is used to embed bytes codes into the back of a compile method
* object instead of putting in in a separate byte array. */
#define STIX_USE_OBJECT_TRAILER
/* this is for gc debugging */
#define STIX_DEBUG_GC_001
@ -469,6 +474,14 @@ struct stix_compiler_t
#endif
#if defined(STIX_USE_OBJECT_TRAILER)
/* let it point to the trailer of the method */
# define SET_ACTIVE_METHOD_CODE(stix) ((stix)->active_code = (stix_byte_t*)&(stix)->active_method->slot[STIX_OBJ_GET_SIZE((stix)->active_method) + 1 - STIX_METHOD_NAMED_INSTVARS])
#else
/* let it point to the payload of the code byte array */
# define SET_ACTIVE_METHOD_CODE(stix) ((stix)->active_code = (stix)->active_method->code->slot)
#endif
#if defined(STIX_BCODE_LONG_PARAM_SIZE) && (STIX_BCODE_LONG_PARAM_SIZE == 1)
# define MAX_CODE_INDEX (0xFFu)
# define MAX_CODE_NTMPRS (0xFFu)
@ -660,8 +673,6 @@ enum stix_bcode_t
BCODE_JUMP_IF_FALSE_2 = 0x52, /* 82 */
BCODE_JUMP_IF_FALSE_3 = 0x53, /* 83 */
BCODE_STORE_INTO_CTXTEMPVAR_0 = 0x58, /* 88 */
BCODE_STORE_INTO_CTXTEMPVAR_1 = 0x59, /* 89 */
BCODE_STORE_INTO_CTXTEMPVAR_2 = 0x5A, /* 90 */
@ -849,6 +860,15 @@ stix_oop_t stix_allocoopobj (
stix_oow_t size
);
#if defined(STIX_USE_OBJECT_TRAILER)
stix_oop_t stix_allocoopobjwithtrailer (
stix_t* stix,
stix_oow_t size,
const stix_byte_t* tptr,
stix_oow_t tlen
);
#endif
stix_oop_t stix_alloccharobj (
stix_t* stix,
const stix_uch_t* ptr,
@ -867,6 +887,16 @@ stix_oop_t stix_allocwordobj (
stix_oow_t len
);
#if defined(STIX_USE_OBJECT_TRAILER)
stix_oop_t stix_instantiatewithtrailer (
stix_t* stix,
stix_oop_t _class,
stix_oow_t vlen,
const stix_byte_t* tptr,
stix_oow_t tlen
);
#endif
/* ========================================================================= */
/* sym.c */
/* ========================================================================= */