experiments...
This commit is contained in:
parent
bfba16a757
commit
b8fd5c6712
52
lib/comp.c
52
lib/comp.c
@ -196,12 +196,12 @@ static int emit_single_param_instruction (hcl_t* hcl, int cmd, hcl_oow_t param_1
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case BCODE_PUSH_INSTVAR_0:
|
||||
case BCODE_STORE_INTO_INSTVAR_0:
|
||||
case BCODE_POP_INTO_INSTVAR_0:
|
||||
case HCL_CODE_PUSH_INSTVAR_0:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_0:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_0:
|
||||
case HCL_CODE_PUSH_TEMPVAR_0:
|
||||
case HCL_CODE_STORE_INTO_TEMPVAR_0:
|
||||
case BCODE_POP_INTO_TEMPVAR_0:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_0:
|
||||
if (param_1 < 8)
|
||||
{
|
||||
/* low 3 bits to hold the parameter */
|
||||
@ -235,7 +235,7 @@ static int emit_single_param_instruction (hcl_t* hcl, int cmd, hcl_oow_t param_1
|
||||
|
||||
case HCL_CODE_PUSH_OBJECT_0:
|
||||
case HCL_CODE_STORE_INTO_OBJECT_0:
|
||||
case BCODE_POP_INTO_OBJECT_0:
|
||||
case HCL_CODE_POP_INTO_OBJECT_0:
|
||||
case HCL_CODE_JUMP_FORWARD_0:
|
||||
case HCL_CODE_JUMP_BACKWARD_0:
|
||||
case HCL_CODE_CALL_0:
|
||||
@ -284,7 +284,7 @@ write_long:
|
||||
hcl_seterrnum (hcl, HCL_ERANGE);
|
||||
return -1;
|
||||
}
|
||||
#if (HCL_BCODE_LONG_PARAM_SIZE == 2)
|
||||
#if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2)
|
||||
if (emit_byte_instruction(hcl, bc) <= -1 ||
|
||||
emit_byte_instruction(hcl, (param_1 >> 8) & 0xFF) <= -1 ||
|
||||
emit_byte_instruction(hcl, param_1 & 0xFF) <= -1) return -1;
|
||||
@ -300,7 +300,7 @@ write_long2:
|
||||
hcl_seterrnum (hcl, HCL_ERANGE);
|
||||
return -1;
|
||||
}
|
||||
#if (HCL_BCODE_LONG_PARAM_SIZE == 2)
|
||||
#if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2)
|
||||
if (emit_byte_instruction(hcl, bc) <= -1 ||
|
||||
emit_byte_instruction(hcl, (param_1 >> 24) & 0xFF) <= -1 ||
|
||||
emit_byte_instruction(hcl, (param_1 >> 16) & 0xFF) <= -1 ||
|
||||
@ -321,13 +321,13 @@ static int emit_double_param_instruction (hcl_t* hcl, int cmd, hcl_oow_t param_1
|
||||
switch (cmd)
|
||||
{
|
||||
case HCL_CODE_STORE_INTO_CTXTEMPVAR_0:
|
||||
case BCODE_POP_INTO_CTXTEMPVAR_0:
|
||||
case HCL_CODE_POP_INTO_CTXTEMPVAR_0:
|
||||
case HCL_CODE_PUSH_CTXTEMPVAR_0:
|
||||
case BCODE_PUSH_OBJVAR_0:
|
||||
case BCODE_STORE_INTO_OBJVAR_0:
|
||||
case BCODE_POP_INTO_OBJVAR_0:
|
||||
case BCODE_SEND_MESSAGE_0:
|
||||
case BCODE_SEND_MESSAGE_TO_SUPER_0:
|
||||
case HCL_CODE_PUSH_OBJVAR_0:
|
||||
case HCL_CODE_STORE_INTO_OBJVAR_0:
|
||||
case HCL_CODE_POP_INTO_OBJVAR_0:
|
||||
case HCL_CODE_SEND_MESSAGE_0:
|
||||
case HCL_CODE_SEND_MESSAGE_TO_SUPER_0:
|
||||
if (param_1 < 4 && param_2 < 0xFF)
|
||||
{
|
||||
/* low 2 bits of the instruction code is the first parameter */
|
||||
@ -361,7 +361,7 @@ write_long:
|
||||
hcl_seterrnum (hcl, HCL_ERANGE);
|
||||
return -1;
|
||||
}
|
||||
#if (HCL_BCODE_LONG_PARAM_SIZE == 2)
|
||||
#if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2)
|
||||
if (emit_byte_instruction(hcl, bc) <= -1 ||
|
||||
emit_byte_instruction(hcl, param_1 >> 8) <= -1 ||
|
||||
emit_byte_instruction(hcl, param_1 & 0xFF) <= -1 ||
|
||||
@ -381,7 +381,7 @@ write_long2:
|
||||
hcl_seterrnum (hcl, HCL_ERANGE);
|
||||
return -1;
|
||||
}
|
||||
#if (HCL_BCODE_LONG_PARAM_SIZE == 2)
|
||||
#if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2)
|
||||
if (emit_byte_instruction(hcl, bc) <= -1 ||
|
||||
emit_byte_instruction(hcl, (param_1 >> 24) & 0xFF) <= -1 ||
|
||||
emit_byte_instruction(hcl, (param_1 >> 16) & 0xFF) <= -1 ||
|
||||
@ -470,7 +470,7 @@ static HCL_INLINE void patch_long_jump (hcl_t* hcl, hcl_ooi_t jip, hcl_ooi_t jum
|
||||
jump_offset -= MAX_CODE_JUMP;
|
||||
}
|
||||
|
||||
#if (HCL_BCODE_LONG_PARAM_SIZE == 2)
|
||||
#if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2)
|
||||
patch_instruction (hcl, jip + 1, jump_offset >> 8);
|
||||
patch_instruction (hcl, jip + 2, jump_offset & 0xFF);
|
||||
#else
|
||||
@ -1037,7 +1037,7 @@ static int compile_lambda (hcl_t* hcl, hcl_oop_t src, int defun)
|
||||
HCL_ASSERT (hcl, hcl->code.bc.len < HCL_SMOOI_MAX); /* guaranteed in emit_byte_instruction() */
|
||||
jump_inst_pos = hcl->code.bc.len;
|
||||
/* specifying MAX_CODE_JUMP causes emit_single_param_instruction() to
|
||||
* produce the long jump instruction (BCODE_JUMP_FORWARD_X) */
|
||||
* produce the long jump instruction (HCL_CODE_JUMP_FORWARD_X) */
|
||||
if (emit_single_param_instruction(hcl, HCL_CODE_JUMP_FORWARD_0, MAX_CODE_JUMP) <= -1) return -1;
|
||||
|
||||
SWITCH_TOP_CFRAME (hcl, COP_COMPILE_OBJECT_LIST, obj);
|
||||
@ -1948,7 +1948,7 @@ static HCL_INLINE int patch_nearest_post_if_body (hcl_t* hcl)
|
||||
if (emit_single_param_instruction (hcl, HCL_CODE_JUMP_FORWARD_0, MAX_CODE_JUMP) <= -1) return -1;
|
||||
|
||||
/* HCL_CODE_LONG_PARAM_SIZE + 1 => size of the long JUMP_FORWARD instruction */
|
||||
jump_offset = hcl->code.bc.len - jip - (HCL_BCODE_LONG_PARAM_SIZE + 1);
|
||||
jump_offset = hcl->code.bc.len - jip - (HCL_HCL_CODE_LONG_PARAM_SIZE + 1);
|
||||
|
||||
if (jump_offset > MAX_CODE_JUMP * 2)
|
||||
{
|
||||
@ -2100,7 +2100,7 @@ static HCL_INLINE int post_and_expr (hcl_t* hcl)
|
||||
jip = HCL_OOP_TO_SMOOI(cf->operand);
|
||||
|
||||
/* patch the jump insruction emitted after each expression inside the 'and' expression */
|
||||
jump_offset = hcl->code.bc.len - jip - (HCL_BCODE_LONG_PARAM_SIZE + 1);
|
||||
jump_offset = hcl->code.bc.len - jip - (HCL_HCL_CODE_LONG_PARAM_SIZE + 1);
|
||||
patch_long_jump (hcl, jip, jump_offset);
|
||||
|
||||
POP_CFRAME(hcl);
|
||||
@ -2167,7 +2167,7 @@ static HCL_INLINE int post_or_expr (hcl_t* hcl)
|
||||
jip = HCL_OOP_TO_SMOOI(cf->operand);
|
||||
|
||||
/* patch the jump insruction emitted after each expression inside the 'and' expression */
|
||||
jump_offset = hcl->code.bc.len - jip - (HCL_BCODE_LONG_PARAM_SIZE + 1);
|
||||
jump_offset = hcl->code.bc.len - jip - (HCL_HCL_CODE_LONG_PARAM_SIZE + 1);
|
||||
patch_long_jump (hcl, jip, jump_offset);
|
||||
|
||||
POP_CFRAME(hcl);
|
||||
@ -2222,7 +2222,7 @@ static HCL_INLINE int post_if_body (hcl_t* hcl)
|
||||
}
|
||||
|
||||
/* HCL_CODE_LONG_PARAM_SIZE + 1 => size of the long JUMP_FORWARD_IF_FALSE instruction */
|
||||
jump_offset = hcl->code.bc.len - jip - (HCL_BCODE_LONG_PARAM_SIZE + 1);
|
||||
jump_offset = hcl->code.bc.len - jip - (HCL_HCL_CODE_LONG_PARAM_SIZE + 1);
|
||||
|
||||
if (jump_offset > MAX_CODE_JUMP * 2)
|
||||
{
|
||||
@ -2303,12 +2303,12 @@ static HCL_INLINE int post_while_body (hcl_t* hcl)
|
||||
|
||||
HCL_ASSERT (hcl, hcl->code.bc.len < HCL_SMOOI_MAX);
|
||||
jump_offset = hcl->code.bc.len - cf->u.post_while.cond_pos + 1;
|
||||
if (jump_offset > 3) jump_offset += HCL_BCODE_LONG_PARAM_SIZE;
|
||||
if (jump_offset > 3) jump_offset += HCL_HCL_CODE_LONG_PARAM_SIZE;
|
||||
if (emit_single_param_instruction (hcl, HCL_CODE_JUMP_BACKWARD_0, jump_offset) <= -1) return -1;
|
||||
|
||||
jip = HCL_OOP_TO_SMOOI(cf->operand);
|
||||
/* HCL_CODE_LONG_PARAM_SIZE + 1 => size of the long JUMP_FORWARD_IF_FALSE/JUMP_FORWARD_IF_TRUE instruction */
|
||||
jump_offset = hcl->code.bc.len - jip - (HCL_BCODE_LONG_PARAM_SIZE + 1);
|
||||
jump_offset = hcl->code.bc.len - jip - (HCL_HCL_CODE_LONG_PARAM_SIZE + 1);
|
||||
if (jump_offset > MAX_CODE_JUMP * 2)
|
||||
{
|
||||
HCL_DEBUG1 (hcl, "code in loop body too big - size %zu\n", jump_offset);
|
||||
@ -2335,7 +2335,7 @@ static int update_break (hcl_t* hcl)
|
||||
jip = HCL_OOP_TO_SMOOI(cf->operand);
|
||||
|
||||
/* HCL_CODE_LONG_PARAM_SIZE + 1 => size of the long JUMP_FORWARD instruction */
|
||||
jump_offset = hcl->code.bc.len - jip - (HCL_BCODE_LONG_PARAM_SIZE + 1);
|
||||
jump_offset = hcl->code.bc.len - jip - (HCL_HCL_CODE_LONG_PARAM_SIZE + 1);
|
||||
|
||||
/* no explicit about jump_offset. because break can only place inside
|
||||
* a loop, the same check in post_while_body() must assert
|
||||
@ -2469,7 +2469,7 @@ static HCL_INLINE int emit_lambda (hcl_t* hcl)
|
||||
hcl->c->tv.size = hcl->c->blk.tmprcnt[hcl->c->blk.depth];
|
||||
|
||||
/* HCL_CODE_LONG_PARAM_SIZE + 1 => size of the long JUMP_FORWARD instruction */
|
||||
block_code_size = hcl->code.bc.len - jip - (HCL_BCODE_LONG_PARAM_SIZE + 1);
|
||||
block_code_size = hcl->code.bc.len - jip - (HCL_HCL_CODE_LONG_PARAM_SIZE + 1);
|
||||
|
||||
if (block_code_size == 0)
|
||||
{
|
||||
@ -2479,7 +2479,7 @@ static HCL_INLINE int emit_lambda (hcl_t* hcl)
|
||||
block_code_size++;
|
||||
}
|
||||
|
||||
if (emit_byte_instruction (hcl, HCL_CODE_RETURN_FROM_BLOCK) <= -1) return -1;
|
||||
if (emit_byte_instruction(hcl, HCL_CODE_RETURN_FROM_BLOCK) <= -1) return -1;
|
||||
block_code_size++;
|
||||
|
||||
if (block_code_size > MAX_CODE_JUMP * 2)
|
||||
|
160
lib/decode.c
160
lib/decode.c
@ -44,7 +44,7 @@
|
||||
|
||||
#define FETCH_BYTE_CODE(hcl) (cdptr[ip++])
|
||||
#define FETCH_BYTE_CODE_TO(hcl,v_ooi) (v_ooi = FETCH_BYTE_CODE(hcl))
|
||||
#if (HCL_BCODE_LONG_PARAM_SIZE == 2)
|
||||
#if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2)
|
||||
# define FETCH_PARAM_CODE_TO(hcl,v_ooi) \
|
||||
do { \
|
||||
v_ooi = FETCH_BYTE_CODE(hcl); \
|
||||
@ -85,17 +85,17 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
|
||||
switch (bcode)
|
||||
{
|
||||
case BCODE_PUSH_INSTVAR_X:
|
||||
case HCL_CODE_PUSH_INSTVAR_X:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
goto push_instvar;
|
||||
case BCODE_PUSH_INSTVAR_0:
|
||||
case BCODE_PUSH_INSTVAR_1:
|
||||
case BCODE_PUSH_INSTVAR_2:
|
||||
case BCODE_PUSH_INSTVAR_3:
|
||||
case BCODE_PUSH_INSTVAR_4:
|
||||
case BCODE_PUSH_INSTVAR_5:
|
||||
case BCODE_PUSH_INSTVAR_6:
|
||||
case BCODE_PUSH_INSTVAR_7:
|
||||
case HCL_CODE_PUSH_INSTVAR_0:
|
||||
case HCL_CODE_PUSH_INSTVAR_1:
|
||||
case HCL_CODE_PUSH_INSTVAR_2:
|
||||
case HCL_CODE_PUSH_INSTVAR_3:
|
||||
case HCL_CODE_PUSH_INSTVAR_4:
|
||||
case HCL_CODE_PUSH_INSTVAR_5:
|
||||
case HCL_CODE_PUSH_INSTVAR_6:
|
||||
case HCL_CODE_PUSH_INSTVAR_7:
|
||||
b1 = bcode & 0x7; /* low 3 bits */
|
||||
push_instvar:
|
||||
LOG_INST_1 (hcl, "push_instvar %zu", b1);
|
||||
@ -103,33 +103,33 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
|
||||
/* ------------------------------------------------- */
|
||||
|
||||
case BCODE_STORE_INTO_INSTVAR_X:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_X:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
goto store_instvar;
|
||||
case BCODE_STORE_INTO_INSTVAR_0:
|
||||
case BCODE_STORE_INTO_INSTVAR_1:
|
||||
case BCODE_STORE_INTO_INSTVAR_2:
|
||||
case BCODE_STORE_INTO_INSTVAR_3:
|
||||
case BCODE_STORE_INTO_INSTVAR_4:
|
||||
case BCODE_STORE_INTO_INSTVAR_5:
|
||||
case BCODE_STORE_INTO_INSTVAR_6:
|
||||
case BCODE_STORE_INTO_INSTVAR_7:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_0:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_1:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_2:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_3:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_4:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_5:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_6:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_7:
|
||||
b1 = bcode & 0x7; /* low 3 bits */
|
||||
store_instvar:
|
||||
LOG_INST_1 (hcl, "store_into_instvar %zu", b1);
|
||||
break;
|
||||
|
||||
case BCODE_POP_INTO_INSTVAR_X:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_X:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
goto pop_into_instvar;
|
||||
case BCODE_POP_INTO_INSTVAR_0:
|
||||
case BCODE_POP_INTO_INSTVAR_1:
|
||||
case BCODE_POP_INTO_INSTVAR_2:
|
||||
case BCODE_POP_INTO_INSTVAR_3:
|
||||
case BCODE_POP_INTO_INSTVAR_4:
|
||||
case BCODE_POP_INTO_INSTVAR_5:
|
||||
case BCODE_POP_INTO_INSTVAR_6:
|
||||
case BCODE_POP_INTO_INSTVAR_7:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_0:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_1:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_2:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_3:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_4:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_5:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_6:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_7:
|
||||
b1 = bcode & 0x7; /* low 3 bits */
|
||||
pop_into_instvar:
|
||||
LOG_INST_1 (hcl, "pop_into_instvar %zu", b1);
|
||||
@ -138,7 +138,7 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
/* ------------------------------------------------- */
|
||||
case HCL_CODE_PUSH_TEMPVAR_X:
|
||||
case HCL_CODE_STORE_INTO_TEMPVAR_X:
|
||||
case BCODE_POP_INTO_TEMPVAR_X:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_X:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
goto handle_tempvar;
|
||||
|
||||
@ -158,14 +158,14 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
case HCL_CODE_STORE_INTO_TEMPVAR_5:
|
||||
case HCL_CODE_STORE_INTO_TEMPVAR_6:
|
||||
case HCL_CODE_STORE_INTO_TEMPVAR_7:
|
||||
case BCODE_POP_INTO_TEMPVAR_0:
|
||||
case BCODE_POP_INTO_TEMPVAR_1:
|
||||
case BCODE_POP_INTO_TEMPVAR_2:
|
||||
case BCODE_POP_INTO_TEMPVAR_3:
|
||||
case BCODE_POP_INTO_TEMPVAR_4:
|
||||
case BCODE_POP_INTO_TEMPVAR_5:
|
||||
case BCODE_POP_INTO_TEMPVAR_6:
|
||||
case BCODE_POP_INTO_TEMPVAR_7:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_0:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_1:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_2:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_3:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_4:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_5:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_6:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_7:
|
||||
b1 = bcode & 0x7; /* low 3 bits */
|
||||
handle_tempvar:
|
||||
|
||||
@ -193,7 +193,7 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
case HCL_CODE_PUSH_LITERAL_X2:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
FETCH_PARAM_CODE_TO (hcl, b2);
|
||||
#if (HCL_BCODE_LONG_PARAM_SIZE == 2)
|
||||
#if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2)
|
||||
b1 = (b1 << 16) | b2;
|
||||
#else
|
||||
b1 = (b1 << 8) | b2;
|
||||
@ -220,7 +220,7 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
/* ------------------------------------------------- */
|
||||
case HCL_CODE_PUSH_OBJECT_X:
|
||||
case HCL_CODE_STORE_INTO_OBJECT_X:
|
||||
case BCODE_POP_INTO_OBJECT_X:
|
||||
case HCL_CODE_POP_INTO_OBJECT_X:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
goto handle_object;
|
||||
|
||||
@ -232,10 +232,10 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
case HCL_CODE_STORE_INTO_OBJECT_1:
|
||||
case HCL_CODE_STORE_INTO_OBJECT_2:
|
||||
case HCL_CODE_STORE_INTO_OBJECT_3:
|
||||
case BCODE_POP_INTO_OBJECT_0:
|
||||
case BCODE_POP_INTO_OBJECT_1:
|
||||
case BCODE_POP_INTO_OBJECT_2:
|
||||
case BCODE_POP_INTO_OBJECT_3:
|
||||
case HCL_CODE_POP_INTO_OBJECT_0:
|
||||
case HCL_CODE_POP_INTO_OBJECT_1:
|
||||
case HCL_CODE_POP_INTO_OBJECT_2:
|
||||
case HCL_CODE_POP_INTO_OBJECT_3:
|
||||
b1 = bcode & 0x3; /* low 2 bits */
|
||||
handle_object:
|
||||
if ((bcode >> 3) & 1)
|
||||
@ -331,7 +331,7 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
|
||||
case HCL_CODE_PUSH_CTXTEMPVAR_X:
|
||||
case HCL_CODE_STORE_INTO_CTXTEMPVAR_X:
|
||||
case BCODE_POP_INTO_CTXTEMPVAR_X:
|
||||
case HCL_CODE_POP_INTO_CTXTEMPVAR_X:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
FETCH_PARAM_CODE_TO (hcl, b2);
|
||||
goto handle_ctxtempvar;
|
||||
@ -343,10 +343,10 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
case HCL_CODE_STORE_INTO_CTXTEMPVAR_1:
|
||||
case HCL_CODE_STORE_INTO_CTXTEMPVAR_2:
|
||||
case HCL_CODE_STORE_INTO_CTXTEMPVAR_3:
|
||||
case BCODE_POP_INTO_CTXTEMPVAR_0:
|
||||
case BCODE_POP_INTO_CTXTEMPVAR_1:
|
||||
case BCODE_POP_INTO_CTXTEMPVAR_2:
|
||||
case BCODE_POP_INTO_CTXTEMPVAR_3:
|
||||
case HCL_CODE_POP_INTO_CTXTEMPVAR_0:
|
||||
case HCL_CODE_POP_INTO_CTXTEMPVAR_1:
|
||||
case HCL_CODE_POP_INTO_CTXTEMPVAR_2:
|
||||
case HCL_CODE_POP_INTO_CTXTEMPVAR_3:
|
||||
b1 = bcode & 0x3; /* low 2 bits */
|
||||
FETCH_BYTE_CODE_TO (hcl, b2);
|
||||
|
||||
@ -373,25 +373,25 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
break;
|
||||
/* -------------------------------------------------------- */
|
||||
|
||||
case BCODE_PUSH_OBJVAR_X:
|
||||
case BCODE_STORE_INTO_OBJVAR_X:
|
||||
case BCODE_POP_INTO_OBJVAR_X:
|
||||
case HCL_CODE_PUSH_OBJVAR_X:
|
||||
case HCL_CODE_STORE_INTO_OBJVAR_X:
|
||||
case HCL_CODE_POP_INTO_OBJVAR_X:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
FETCH_PARAM_CODE_TO (hcl, b2);
|
||||
goto handle_objvar;
|
||||
|
||||
case BCODE_PUSH_OBJVAR_0:
|
||||
case BCODE_PUSH_OBJVAR_1:
|
||||
case BCODE_PUSH_OBJVAR_2:
|
||||
case BCODE_PUSH_OBJVAR_3:
|
||||
case BCODE_STORE_INTO_OBJVAR_0:
|
||||
case BCODE_STORE_INTO_OBJVAR_1:
|
||||
case BCODE_STORE_INTO_OBJVAR_2:
|
||||
case BCODE_STORE_INTO_OBJVAR_3:
|
||||
case BCODE_POP_INTO_OBJVAR_0:
|
||||
case BCODE_POP_INTO_OBJVAR_1:
|
||||
case BCODE_POP_INTO_OBJVAR_2:
|
||||
case BCODE_POP_INTO_OBJVAR_3:
|
||||
case HCL_CODE_PUSH_OBJVAR_0:
|
||||
case HCL_CODE_PUSH_OBJVAR_1:
|
||||
case HCL_CODE_PUSH_OBJVAR_2:
|
||||
case HCL_CODE_PUSH_OBJVAR_3:
|
||||
case HCL_CODE_STORE_INTO_OBJVAR_0:
|
||||
case HCL_CODE_STORE_INTO_OBJVAR_1:
|
||||
case HCL_CODE_STORE_INTO_OBJVAR_2:
|
||||
case HCL_CODE_STORE_INTO_OBJVAR_3:
|
||||
case HCL_CODE_POP_INTO_OBJVAR_0:
|
||||
case HCL_CODE_POP_INTO_OBJVAR_1:
|
||||
case HCL_CODE_POP_INTO_OBJVAR_2:
|
||||
case HCL_CODE_POP_INTO_OBJVAR_3:
|
||||
/* b1 -> variable index to the object indicated by b2.
|
||||
* b2 -> object index stored in the literal frame. */
|
||||
b1 = bcode & 0x3; /* low 2 bits */
|
||||
@ -418,22 +418,22 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
break;
|
||||
|
||||
/* -------------------------------------------------------- */
|
||||
case BCODE_SEND_MESSAGE_X:
|
||||
case BCODE_SEND_MESSAGE_TO_SUPER_X:
|
||||
case HCL_CODE_SEND_MESSAGE_X:
|
||||
case HCL_CODE_SEND_MESSAGE_TO_SUPER_X:
|
||||
/* b1 -> number of arguments
|
||||
* b2 -> selector index stored in the literal frame */
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
FETCH_PARAM_CODE_TO (hcl, b2);
|
||||
goto handle_send_message;
|
||||
|
||||
case BCODE_SEND_MESSAGE_0:
|
||||
case BCODE_SEND_MESSAGE_1:
|
||||
case BCODE_SEND_MESSAGE_2:
|
||||
case BCODE_SEND_MESSAGE_3:
|
||||
case BCODE_SEND_MESSAGE_TO_SUPER_0:
|
||||
case BCODE_SEND_MESSAGE_TO_SUPER_1:
|
||||
case BCODE_SEND_MESSAGE_TO_SUPER_2:
|
||||
case BCODE_SEND_MESSAGE_TO_SUPER_3:
|
||||
case HCL_CODE_SEND_MESSAGE_0:
|
||||
case HCL_CODE_SEND_MESSAGE_1:
|
||||
case HCL_CODE_SEND_MESSAGE_2:
|
||||
case HCL_CODE_SEND_MESSAGE_3:
|
||||
case HCL_CODE_SEND_MESSAGE_TO_SUPER_0:
|
||||
case HCL_CODE_SEND_MESSAGE_TO_SUPER_1:
|
||||
case HCL_CODE_SEND_MESSAGE_TO_SUPER_2:
|
||||
case HCL_CODE_SEND_MESSAGE_TO_SUPER_3:
|
||||
b1 = bcode & 0x3; /* low 2 bits */
|
||||
FETCH_BYTE_CODE_TO (hcl, b2);
|
||||
|
||||
@ -443,7 +443,7 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
|
||||
/* -------------------------------------------------------- */
|
||||
|
||||
case BCODE_PUSH_RECEIVER:
|
||||
case HCL_CODE_PUSH_RECEIVER:
|
||||
LOG_INST_0 (hcl, "push_receiver");
|
||||
break;
|
||||
|
||||
@ -459,11 +459,11 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
LOG_INST_0 (hcl, "push_false");
|
||||
break;
|
||||
|
||||
case BCODE_PUSH_CONTEXT:
|
||||
case HCL_CODE_PUSH_CONTEXT:
|
||||
LOG_INST_0 (hcl, "push_context");
|
||||
break;
|
||||
|
||||
case BCODE_PUSH_PROCESS:
|
||||
case HCL_CODE_PUSH_PROCESS:
|
||||
LOG_INST_0 (hcl, "push_process");
|
||||
break;
|
||||
|
||||
@ -530,7 +530,7 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
|
||||
/* -------------------------------------------------------- */
|
||||
|
||||
case BCODE_DUP_STACKTOP:
|
||||
case HCL_CODE_DUP_STACKTOP:
|
||||
LOG_INST_0 (hcl, "dup_stacktop");
|
||||
break;
|
||||
|
||||
@ -538,11 +538,11 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
LOG_INST_0 (hcl, "pop_stacktop");
|
||||
break;
|
||||
|
||||
case BCODE_RETURN_STACKTOP:
|
||||
case HCL_CODE_RETURN_STACKTOP:
|
||||
LOG_INST_0 (hcl, "return_stacktop");
|
||||
break;
|
||||
|
||||
case BCODE_RETURN_RECEIVER:
|
||||
case HCL_CODE_RETURN_RECEIVER:
|
||||
LOG_INST_0 (hcl, "return_receiver");
|
||||
break;
|
||||
|
||||
@ -562,7 +562,7 @@ int hcl_decode (hcl_t* hcl, hcl_oow_t start, hcl_oow_t end)
|
||||
HCL_ASSERT (hcl, b2 >= b1);
|
||||
break;
|
||||
|
||||
case BCODE_SEND_BLOCK_COPY:
|
||||
case HCL_CODE_SEND_BLOCK_COPY:
|
||||
LOG_INST_0 (hcl, "send_block_copy");
|
||||
break;
|
||||
|
||||
|
174
lib/exec.c
174
lib/exec.c
@ -89,7 +89,7 @@ static HCL_INLINE const char* proc_state_to_string (int state)
|
||||
|
||||
#define FETCH_BYTE_CODE(hcl) ((hcl)->code.bc.arr->slot[(hcl)->ip++])
|
||||
#define FETCH_BYTE_CODE_TO(hcl, v_oow) (v_oow = FETCH_BYTE_CODE(hcl))
|
||||
#if (HCL_BCODE_LONG_PARAM_SIZE == 2)
|
||||
#if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2)
|
||||
# define FETCH_PARAM_CODE_TO(hcl, v_oow) \
|
||||
do { \
|
||||
v_oow = FETCH_BYTE_CODE(hcl); \
|
||||
@ -1411,17 +1411,17 @@ static int execute (hcl_t* hcl)
|
||||
/* ------------------------------------------------- */
|
||||
|
||||
#if 0
|
||||
case BCODE_PUSH_INSTVAR_X:
|
||||
case HCL_CODE_PUSH_INSTVAR_X:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
goto push_instvar;
|
||||
case BCODE_PUSH_INSTVAR_0:
|
||||
case BCODE_PUSH_INSTVAR_1:
|
||||
case BCODE_PUSH_INSTVAR_2:
|
||||
case BCODE_PUSH_INSTVAR_3:
|
||||
case BCODE_PUSH_INSTVAR_4:
|
||||
case BCODE_PUSH_INSTVAR_5:
|
||||
case BCODE_PUSH_INSTVAR_6:
|
||||
case BCODE_PUSH_INSTVAR_7:
|
||||
case HCL_CODE_PUSH_INSTVAR_0:
|
||||
case HCL_CODE_PUSH_INSTVAR_1:
|
||||
case HCL_CODE_PUSH_INSTVAR_2:
|
||||
case HCL_CODE_PUSH_INSTVAR_3:
|
||||
case HCL_CODE_PUSH_INSTVAR_4:
|
||||
case HCL_CODE_PUSH_INSTVAR_5:
|
||||
case HCL_CODE_PUSH_INSTVAR_6:
|
||||
case HCL_CODE_PUSH_INSTVAR_7:
|
||||
b1 = bcode & 0x7; /* low 3 bits */
|
||||
push_instvar:
|
||||
LOG_INST_1 (hcl, "push_instvar %zu", b1);
|
||||
@ -1431,17 +1431,17 @@ static int execute (hcl_t* hcl)
|
||||
|
||||
/* ------------------------------------------------- */
|
||||
|
||||
case BCODE_STORE_INTO_INSTVAR_X:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_X:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
goto store_instvar;
|
||||
case BCODE_STORE_INTO_INSTVAR_0:
|
||||
case BCODE_STORE_INTO_INSTVAR_1:
|
||||
case BCODE_STORE_INTO_INSTVAR_2:
|
||||
case BCODE_STORE_INTO_INSTVAR_3:
|
||||
case BCODE_STORE_INTO_INSTVAR_4:
|
||||
case BCODE_STORE_INTO_INSTVAR_5:
|
||||
case BCODE_STORE_INTO_INSTVAR_6:
|
||||
case BCODE_STORE_INTO_INSTVAR_7:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_0:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_1:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_2:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_3:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_4:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_5:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_6:
|
||||
case HCL_CODE_STORE_INTO_INSTVAR_7:
|
||||
b1 = bcode & 0x7; /* low 3 bits */
|
||||
store_instvar:
|
||||
LOG_INST_1 (hcl, "store_into_instvar %zu", b1);
|
||||
@ -1450,17 +1450,17 @@ static int execute (hcl_t* hcl)
|
||||
break;
|
||||
|
||||
/* ------------------------------------------------- */
|
||||
case BCODE_POP_INTO_INSTVAR_X:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_X:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
goto pop_into_instvar;
|
||||
case BCODE_POP_INTO_INSTVAR_0:
|
||||
case BCODE_POP_INTO_INSTVAR_1:
|
||||
case BCODE_POP_INTO_INSTVAR_2:
|
||||
case BCODE_POP_INTO_INSTVAR_3:
|
||||
case BCODE_POP_INTO_INSTVAR_4:
|
||||
case BCODE_POP_INTO_INSTVAR_5:
|
||||
case BCODE_POP_INTO_INSTVAR_6:
|
||||
case BCODE_POP_INTO_INSTVAR_7:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_0:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_1:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_2:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_3:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_4:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_5:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_6:
|
||||
case HCL_CODE_POP_INTO_INSTVAR_7:
|
||||
b1 = bcode & 0x7; /* low 3 bits */
|
||||
pop_into_instvar:
|
||||
LOG_INST_1 (hcl, "pop_into_instvar %zu", b1);
|
||||
@ -1473,7 +1473,7 @@ static int execute (hcl_t* hcl)
|
||||
/* ------------------------------------------------- */
|
||||
case HCL_CODE_PUSH_TEMPVAR_X:
|
||||
case HCL_CODE_STORE_INTO_TEMPVAR_X:
|
||||
case BCODE_POP_INTO_TEMPVAR_X:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_X:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
goto handle_tempvar;
|
||||
|
||||
@ -1493,14 +1493,14 @@ static int execute (hcl_t* hcl)
|
||||
case HCL_CODE_STORE_INTO_TEMPVAR_5:
|
||||
case HCL_CODE_STORE_INTO_TEMPVAR_6:
|
||||
case HCL_CODE_STORE_INTO_TEMPVAR_7:
|
||||
case BCODE_POP_INTO_TEMPVAR_0:
|
||||
case BCODE_POP_INTO_TEMPVAR_1:
|
||||
case BCODE_POP_INTO_TEMPVAR_2:
|
||||
case BCODE_POP_INTO_TEMPVAR_3:
|
||||
case BCODE_POP_INTO_TEMPVAR_4:
|
||||
case BCODE_POP_INTO_TEMPVAR_5:
|
||||
case BCODE_POP_INTO_TEMPVAR_6:
|
||||
case BCODE_POP_INTO_TEMPVAR_7:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_0:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_1:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_2:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_3:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_4:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_5:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_6:
|
||||
case HCL_CODE_POP_INTO_TEMPVAR_7:
|
||||
{
|
||||
hcl_oop_context_t ctx;
|
||||
hcl_ooi_t bx;
|
||||
@ -1590,7 +1590,7 @@ static int execute (hcl_t* hcl)
|
||||
case HCL_CODE_PUSH_LITERAL_X2:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
FETCH_PARAM_CODE_TO (hcl, b2);
|
||||
#if (HCL_BCODE_LONG_PARAM_SIZE == 2)
|
||||
#if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2)
|
||||
b1 = (b1 << 16) | b2;
|
||||
#else
|
||||
b1 = (b1 << 8) | b2;
|
||||
@ -1618,7 +1618,7 @@ static int execute (hcl_t* hcl)
|
||||
/* ------------------------------------------------- */
|
||||
case HCL_CODE_PUSH_OBJECT_X:
|
||||
case HCL_CODE_STORE_INTO_OBJECT_X:
|
||||
case BCODE_POP_INTO_OBJECT_X:
|
||||
case HCL_CODE_POP_INTO_OBJECT_X:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
goto handle_object;
|
||||
|
||||
@ -1630,10 +1630,10 @@ static int execute (hcl_t* hcl)
|
||||
case HCL_CODE_STORE_INTO_OBJECT_1:
|
||||
case HCL_CODE_STORE_INTO_OBJECT_2:
|
||||
case HCL_CODE_STORE_INTO_OBJECT_3:
|
||||
case BCODE_POP_INTO_OBJECT_0:
|
||||
case BCODE_POP_INTO_OBJECT_1:
|
||||
case BCODE_POP_INTO_OBJECT_2:
|
||||
case BCODE_POP_INTO_OBJECT_3:
|
||||
case HCL_CODE_POP_INTO_OBJECT_0:
|
||||
case HCL_CODE_POP_INTO_OBJECT_1:
|
||||
case HCL_CODE_POP_INTO_OBJECT_2:
|
||||
case HCL_CODE_POP_INTO_OBJECT_3:
|
||||
{
|
||||
hcl_oop_cons_t ass;
|
||||
|
||||
@ -1781,7 +1781,7 @@ static int execute (hcl_t* hcl)
|
||||
|
||||
case HCL_CODE_PUSH_CTXTEMPVAR_X:
|
||||
case HCL_CODE_STORE_INTO_CTXTEMPVAR_X:
|
||||
case BCODE_POP_INTO_CTXTEMPVAR_X:
|
||||
case HCL_CODE_POP_INTO_CTXTEMPVAR_X:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
FETCH_PARAM_CODE_TO (hcl, b2);
|
||||
goto handle_ctxtempvar;
|
||||
@ -1793,10 +1793,10 @@ static int execute (hcl_t* hcl)
|
||||
case HCL_CODE_STORE_INTO_CTXTEMPVAR_1:
|
||||
case HCL_CODE_STORE_INTO_CTXTEMPVAR_2:
|
||||
case HCL_CODE_STORE_INTO_CTXTEMPVAR_3:
|
||||
case BCODE_POP_INTO_CTXTEMPVAR_0:
|
||||
case BCODE_POP_INTO_CTXTEMPVAR_1:
|
||||
case BCODE_POP_INTO_CTXTEMPVAR_2:
|
||||
case BCODE_POP_INTO_CTXTEMPVAR_3:
|
||||
case HCL_CODE_POP_INTO_CTXTEMPVAR_0:
|
||||
case HCL_CODE_POP_INTO_CTXTEMPVAR_1:
|
||||
case HCL_CODE_POP_INTO_CTXTEMPVAR_2:
|
||||
case HCL_CODE_POP_INTO_CTXTEMPVAR_3:
|
||||
{
|
||||
hcl_ooi_t i;
|
||||
hcl_oop_context_t ctx;
|
||||
@ -1840,25 +1840,25 @@ static int execute (hcl_t* hcl)
|
||||
}
|
||||
/* -------------------------------------------------------- */
|
||||
|
||||
case BCODE_PUSH_OBJVAR_X:
|
||||
case BCODE_STORE_INTO_OBJVAR_X:
|
||||
case BCODE_POP_INTO_OBJVAR_X:
|
||||
case HCL_CODE_PUSH_OBJVAR_X:
|
||||
case HCL_CODE_STORE_INTO_OBJVAR_X:
|
||||
case HCL_CODE_POP_INTO_OBJVAR_X:
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
FETCH_PARAM_CODE_TO (hcl, b2);
|
||||
goto handle_objvar;
|
||||
|
||||
case BCODE_PUSH_OBJVAR_0:
|
||||
case BCODE_PUSH_OBJVAR_1:
|
||||
case BCODE_PUSH_OBJVAR_2:
|
||||
case BCODE_PUSH_OBJVAR_3:
|
||||
case BCODE_STORE_INTO_OBJVAR_0:
|
||||
case BCODE_STORE_INTO_OBJVAR_1:
|
||||
case BCODE_STORE_INTO_OBJVAR_2:
|
||||
case BCODE_STORE_INTO_OBJVAR_3:
|
||||
case BCODE_POP_INTO_OBJVAR_0:
|
||||
case BCODE_POP_INTO_OBJVAR_1:
|
||||
case BCODE_POP_INTO_OBJVAR_2:
|
||||
case BCODE_POP_INTO_OBJVAR_3:
|
||||
case HCL_CODE_PUSH_OBJVAR_0:
|
||||
case HCL_CODE_PUSH_OBJVAR_1:
|
||||
case HCL_CODE_PUSH_OBJVAR_2:
|
||||
case HCL_CODE_PUSH_OBJVAR_3:
|
||||
case HCL_CODE_STORE_INTO_OBJVAR_0:
|
||||
case HCL_CODE_STORE_INTO_OBJVAR_1:
|
||||
case HCL_CODE_STORE_INTO_OBJVAR_2:
|
||||
case HCL_CODE_STORE_INTO_OBJVAR_3:
|
||||
case HCL_CODE_POP_INTO_OBJVAR_0:
|
||||
case HCL_CODE_POP_INTO_OBJVAR_1:
|
||||
case HCL_CODE_POP_INTO_OBJVAR_2:
|
||||
case HCL_CODE_POP_INTO_OBJVAR_3:
|
||||
{
|
||||
hcl_oop_oop_t t;
|
||||
|
||||
@ -1900,22 +1900,22 @@ static int execute (hcl_t* hcl)
|
||||
|
||||
/* -------------------------------------------------------- */
|
||||
#if 0
|
||||
case BCODE_SEND_MESSAGE_X:
|
||||
case BCODE_SEND_MESSAGE_TO_SUPER_X:
|
||||
case HCL_CODE_SEND_MESSAGE_X:
|
||||
case HCL_CODE_SEND_MESSAGE_TO_SUPER_X:
|
||||
/* b1 -> number of arguments
|
||||
* b2 -> selector index stored in the literal frame */
|
||||
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||
FETCH_PARAM_CODE_TO (hcl, b2);
|
||||
goto handle_send_message;
|
||||
|
||||
case BCODE_SEND_MESSAGE_0:
|
||||
case BCODE_SEND_MESSAGE_1:
|
||||
case BCODE_SEND_MESSAGE_2:
|
||||
case BCODE_SEND_MESSAGE_3:
|
||||
case BCODE_SEND_MESSAGE_TO_SUPER_0:
|
||||
case BCODE_SEND_MESSAGE_TO_SUPER_1:
|
||||
case BCODE_SEND_MESSAGE_TO_SUPER_2:
|
||||
case BCODE_SEND_MESSAGE_TO_SUPER_3:
|
||||
case HCL_CODE_SEND_MESSAGE_0:
|
||||
case HCL_CODE_SEND_MESSAGE_1:
|
||||
case HCL_CODE_SEND_MESSAGE_2:
|
||||
case HCL_CODE_SEND_MESSAGE_3:
|
||||
case HCL_CODE_SEND_MESSAGE_TO_SUPER_0:
|
||||
case HCL_CODE_SEND_MESSAGE_TO_SUPER_1:
|
||||
case HCL_CODE_SEND_MESSAGE_TO_SUPER_2:
|
||||
case HCL_CODE_SEND_MESSAGE_TO_SUPER_3:
|
||||
{
|
||||
hcl_oop_char_t selector;
|
||||
|
||||
@ -1934,7 +1934,7 @@ static int execute (hcl_t* hcl)
|
||||
#endif
|
||||
/* -------------------------------------------------------- */
|
||||
|
||||
case BCODE_PUSH_RECEIVER:
|
||||
case HCL_CODE_PUSH_RECEIVER:
|
||||
LOG_INST_0 (hcl, "push_receiver");
|
||||
HCL_STACK_PUSH (hcl, hcl->active_context->origin->receiver_or_source);
|
||||
break;
|
||||
@ -1954,12 +1954,12 @@ static int execute (hcl_t* hcl)
|
||||
HCL_STACK_PUSH (hcl, hcl->_false);
|
||||
break;
|
||||
|
||||
case BCODE_PUSH_CONTEXT:
|
||||
case HCL_CODE_PUSH_CONTEXT:
|
||||
LOG_INST_0 (hcl, "push_context");
|
||||
HCL_STACK_PUSH (hcl, (hcl_oop_t)hcl->active_context);
|
||||
break;
|
||||
|
||||
case BCODE_PUSH_PROCESS:
|
||||
case HCL_CODE_PUSH_PROCESS:
|
||||
LOG_INST_0 (hcl, "push_process");
|
||||
HCL_STACK_PUSH (hcl, (hcl_oop_t)hcl->processor->active);
|
||||
break;
|
||||
@ -2098,7 +2098,7 @@ static int execute (hcl_t* hcl)
|
||||
|
||||
/* -------------------------------------------------------- */
|
||||
|
||||
case BCODE_DUP_STACKTOP:
|
||||
case HCL_CODE_DUP_STACKTOP:
|
||||
{
|
||||
hcl_oop_t t;
|
||||
LOG_INST_0 (hcl, "dup_stacktop");
|
||||
@ -2120,13 +2120,13 @@ static int execute (hcl_t* hcl)
|
||||
HCL_STACK_POP (hcl);
|
||||
break;
|
||||
|
||||
case BCODE_RETURN_STACKTOP:
|
||||
case HCL_CODE_RETURN_STACKTOP:
|
||||
LOG_INST_0 (hcl, "return_stacktop");
|
||||
return_value = HCL_STACK_GETTOP(hcl);
|
||||
HCL_STACK_POP (hcl);
|
||||
goto handle_return;
|
||||
|
||||
case BCODE_RETURN_RECEIVER:
|
||||
case HCL_CODE_RETURN_RECEIVER:
|
||||
LOG_INST_0 (hcl, "return_receiver");
|
||||
return_value = hcl->active_context->origin->receiver_or_source;
|
||||
|
||||
@ -2288,7 +2288,7 @@ static int execute (hcl_t* hcl)
|
||||
hcl_oow_t joff;
|
||||
HCL_ASSERT (hcl, hcl->code.bc.arr->slot[hcl->ip] == HCL_CODE_JUMP_FORWARD_X);
|
||||
joff = hcl->code.bc.arr->slot[hcl->ip + 1];
|
||||
#if (HCL_BCODE_LONG_PARAM_SIZE == 2)
|
||||
#if (HCL_HCL_CODE_LONG_PARAM_SIZE == 2)
|
||||
joff = (joff << 8) | hcl->code.bc.arr->slot[hcl->ip + 2];
|
||||
#endif
|
||||
|
||||
@ -2307,9 +2307,9 @@ HCL_DEBUG1(hcl, "**** MAKE BLOCK joff = %zu\n", joff);
|
||||
|
||||
/* the long forward jump instruction has the format of
|
||||
* 11000100 KKKKKKKK or 11000100 KKKKKKKK KKKKKKKK
|
||||
* depending on HCL_BCODE_LONG_PARAM_SIZE. change 'ip' to point to
|
||||
* depending on HCL_HCL_CODE_LONG_PARAM_SIZE. change 'ip' to point to
|
||||
* the instruction after the jump. */
|
||||
blkctx->ip = HCL_SMOOI_TO_OOP(hcl->ip + HCL_BCODE_LONG_PARAM_SIZE + 1);
|
||||
blkctx->ip = HCL_SMOOI_TO_OOP(hcl->ip + HCL_HCL_CODE_LONG_PARAM_SIZE + 1);
|
||||
/* stack pointer below the bottom. this base block context
|
||||
* has an empty stack anyway. */
|
||||
blkctx->sp = HCL_SMOOI_TO_OOP(-1);
|
||||
@ -2331,7 +2331,7 @@ HCL_DEBUG1(hcl, "**** MAKE BLOCK joff = %zu\n", joff);
|
||||
break;
|
||||
}
|
||||
|
||||
case BCODE_SEND_BLOCK_COPY:
|
||||
case HCL_CODE_SEND_BLOCK_COPY:
|
||||
{
|
||||
hcl_ooi_t nargs, ntmprs;
|
||||
hcl_oop_context_t rctx;
|
||||
@ -2375,8 +2375,8 @@ HCL_DEBUG1(hcl, "**** MAKE BLOCK joff = %zu\n", joff);
|
||||
* blkctx->home is set here to the active context.
|
||||
* it's redundant to have them pushed to the stack
|
||||
* though it is to emulate the message sending of
|
||||
* blockCopy:withNtmprs:. BCODE_MAKE_BLOCK has been
|
||||
* added to replace BCODE_SEND_BLOCK_COPY and pusing
|
||||
* blockCopy:withNtmprs:. HCL_CODE_MAKE_BLOCK has been
|
||||
* added to replace HCL_CODE_SEND_BLOCK_COPY and pusing
|
||||
* arguments to the stack.
|
||||
*
|
||||
* blkctx->origin is set here by copying the origin
|
||||
@ -2385,9 +2385,9 @@ HCL_DEBUG1(hcl, "**** MAKE BLOCK joff = %zu\n", joff);
|
||||
|
||||
/* the extended jump instruction has the format of
|
||||
* 0000XXXX KKKKKKKK or 0000XXXX KKKKKKKK KKKKKKKK
|
||||
* depending on HCL_BCODE_LONG_PARAM_SIZE. change 'ip' to point to
|
||||
* depending on HCL_HCL_CODE_LONG_PARAM_SIZE. change 'ip' to point to
|
||||
* the instruction after the jump. */
|
||||
blkctx->ip = HCL_SMOOI_TO_OOP(hcl->ip + HCL_BCODE_LONG_PARAM_SIZE + 1);
|
||||
blkctx->ip = HCL_SMOOI_TO_OOP(hcl->ip + HCL_HCL_CODE_LONG_PARAM_SIZE + 1);
|
||||
blkctx->sp = HCL_SMOOI_TO_OOP(-1);
|
||||
/* the number of arguments for a block context is local to the block */
|
||||
blkctx->method_or_nargs = HCL_SMOOI_TO_OOP(nargs);
|
||||
|
228
lib/hcl-prv.h
228
lib/hcl-prv.h
@ -31,7 +31,7 @@
|
||||
#include "hcl-utl.h"
|
||||
|
||||
/* you can define this to either 1 or 2 */
|
||||
#define HCL_BCODE_LONG_PARAM_SIZE 2
|
||||
#define HCL_HCL_CODE_LONG_PARAM_SIZE 2
|
||||
|
||||
/* this is useful for debugging. hcl_gc() can be called
|
||||
* while hcl has not been fully initialized when this is defined*/
|
||||
@ -312,7 +312,7 @@ struct hcl_compiler_t
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(HCL_BCODE_LONG_PARAM_SIZE) && (HCL_BCODE_LONG_PARAM_SIZE == 1)
|
||||
#if defined(HCL_HCL_CODE_LONG_PARAM_SIZE) && (HCL_HCL_CODE_LONG_PARAM_SIZE == 1)
|
||||
# define MAX_CODE_INDEX (0xFFu)
|
||||
# define MAX_CODE_NTMPRS (0xFFu)
|
||||
# define MAX_CODE_NARGS (0xFFu)
|
||||
@ -321,7 +321,7 @@ struct hcl_compiler_t
|
||||
# define MAX_CODE_JUMP (0xFFu)
|
||||
# define MAX_CODE_PARAM (0xFFu)
|
||||
# define MAX_CODE_PARAM2 (0xFFFFu)
|
||||
#elif defined(HCL_BCODE_LONG_PARAM_SIZE) && (HCL_BCODE_LONG_PARAM_SIZE == 2)
|
||||
#elif defined(HCL_HCL_CODE_LONG_PARAM_SIZE) && (HCL_HCL_CODE_LONG_PARAM_SIZE == 2)
|
||||
# define MAX_CODE_INDEX (0xFFFFu)
|
||||
# define MAX_CODE_NTMPRS (0xFFFFu)
|
||||
# define MAX_CODE_NARGS (0xFFFFu)
|
||||
@ -331,7 +331,7 @@ struct hcl_compiler_t
|
||||
# define MAX_CODE_PARAM (0xFFFFu)
|
||||
# define MAX_CODE_PARAM2 (0xFFFFFFFFu)
|
||||
#else
|
||||
# error Unsupported HCL_BCODE_LONG_PARAM_SIZE
|
||||
# error Unsupported HCL_HCL_CODE_LONG_PARAM_SIZE
|
||||
#endif
|
||||
|
||||
|
||||
@ -402,75 +402,75 @@ SHORT INSTRUCTION CODE LONG INSTRUCTION C
|
||||
|
||||
enum hcl_bcode_t
|
||||
{
|
||||
BCODE_STORE_INTO_INSTVAR_0 = 0x00,
|
||||
BCODE_STORE_INTO_INSTVAR_1 = 0x01,
|
||||
BCODE_STORE_INTO_INSTVAR_2 = 0x02,
|
||||
BCODE_STORE_INTO_INSTVAR_3 = 0x03,
|
||||
HCL_CODE_STORE_INTO_INSTVAR_0 = 0x00,
|
||||
HCL_CODE_STORE_INTO_INSTVAR_1 = 0x01,
|
||||
HCL_CODE_STORE_INTO_INSTVAR_2 = 0x02,
|
||||
HCL_CODE_STORE_INTO_INSTVAR_3 = 0x03,
|
||||
|
||||
BCODE_STORE_INTO_INSTVAR_4 = 0x04,
|
||||
BCODE_STORE_INTO_INSTVAR_5 = 0x05,
|
||||
BCODE_STORE_INTO_INSTVAR_6 = 0x06,
|
||||
BCODE_STORE_INTO_INSTVAR_7 = 0x07,
|
||||
HCL_CODE_STORE_INTO_INSTVAR_4 = 0x04,
|
||||
HCL_CODE_STORE_INTO_INSTVAR_5 = 0x05,
|
||||
HCL_CODE_STORE_INTO_INSTVAR_6 = 0x06,
|
||||
HCL_CODE_STORE_INTO_INSTVAR_7 = 0x07,
|
||||
|
||||
BCODE_POP_INTO_INSTVAR_0 = 0x08,
|
||||
BCODE_POP_INTO_INSTVAR_1 = 0x09,
|
||||
BCODE_POP_INTO_INSTVAR_2 = 0x0A,
|
||||
BCODE_POP_INTO_INSTVAR_3 = 0x0B,
|
||||
HCL_CODE_POP_INTO_INSTVAR_0 = 0x08,
|
||||
HCL_CODE_POP_INTO_INSTVAR_1 = 0x09,
|
||||
HCL_CODE_POP_INTO_INSTVAR_2 = 0x0A,
|
||||
HCL_CODE_POP_INTO_INSTVAR_3 = 0x0B,
|
||||
|
||||
BCODE_POP_INTO_INSTVAR_4 = 0x0C,
|
||||
BCODE_POP_INTO_INSTVAR_5 = 0x0D,
|
||||
BCODE_POP_INTO_INSTVAR_6 = 0x0E,
|
||||
BCODE_POP_INTO_INSTVAR_7 = 0x0F,
|
||||
HCL_CODE_POP_INTO_INSTVAR_4 = 0x0C,
|
||||
HCL_CODE_POP_INTO_INSTVAR_5 = 0x0D,
|
||||
HCL_CODE_POP_INTO_INSTVAR_6 = 0x0E,
|
||||
HCL_CODE_POP_INTO_INSTVAR_7 = 0x0F,
|
||||
|
||||
BCODE_PUSH_INSTVAR_0 = 0x10,
|
||||
BCODE_PUSH_INSTVAR_1 = 0x11,
|
||||
BCODE_PUSH_INSTVAR_2 = 0x12,
|
||||
BCODE_PUSH_INSTVAR_3 = 0x13,
|
||||
HCL_CODE_PUSH_INSTVAR_0 = 0x10,
|
||||
HCL_CODE_PUSH_INSTVAR_1 = 0x11,
|
||||
HCL_CODE_PUSH_INSTVAR_2 = 0x12,
|
||||
HCL_CODE_PUSH_INSTVAR_3 = 0x13,
|
||||
|
||||
BCODE_PUSH_INSTVAR_4 = 0x14,
|
||||
BCODE_PUSH_INSTVAR_5 = 0x15,
|
||||
BCODE_PUSH_INSTVAR_6 = 0x16,
|
||||
BCODE_PUSH_INSTVAR_7 = 0x17,
|
||||
HCL_CODE_PUSH_INSTVAR_4 = 0x14,
|
||||
HCL_CODE_PUSH_INSTVAR_5 = 0x15,
|
||||
HCL_CODE_PUSH_INSTVAR_6 = 0x16,
|
||||
HCL_CODE_PUSH_INSTVAR_7 = 0x17,
|
||||
|
||||
HCL_CODE_PUSH_TEMPVAR_0 = 0x18,
|
||||
HCL_CODE_PUSH_TEMPVAR_1 = 0x19,
|
||||
HCL_CODE_PUSH_TEMPVAR_2 = 0x1A,
|
||||
HCL_CODE_PUSH_TEMPVAR_3 = 0x1B,
|
||||
HCL_CODE_PUSH_TEMPVAR_0 = 0x18,
|
||||
HCL_CODE_PUSH_TEMPVAR_1 = 0x19,
|
||||
HCL_CODE_PUSH_TEMPVAR_2 = 0x1A,
|
||||
HCL_CODE_PUSH_TEMPVAR_3 = 0x1B,
|
||||
|
||||
HCL_CODE_PUSH_TEMPVAR_4 = 0x1C,
|
||||
HCL_CODE_PUSH_TEMPVAR_5 = 0x1D,
|
||||
HCL_CODE_PUSH_TEMPVAR_6 = 0x1E,
|
||||
HCL_CODE_PUSH_TEMPVAR_7 = 0x1F,
|
||||
HCL_CODE_PUSH_TEMPVAR_4 = 0x1C,
|
||||
HCL_CODE_PUSH_TEMPVAR_5 = 0x1D,
|
||||
HCL_CODE_PUSH_TEMPVAR_6 = 0x1E,
|
||||
HCL_CODE_PUSH_TEMPVAR_7 = 0x1F,
|
||||
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_0 = 0x20,
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_1 = 0x21,
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_2 = 0x22,
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_3 = 0x23,
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_0 = 0x20,
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_1 = 0x21,
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_2 = 0x22,
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_3 = 0x23,
|
||||
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_4 = 0x24,
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_5 = 0x25,
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_6 = 0x26,
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_7 = 0x27,
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_4 = 0x24,
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_5 = 0x25,
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_6 = 0x26,
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_7 = 0x27,
|
||||
|
||||
BCODE_POP_INTO_TEMPVAR_0 = 0x28,
|
||||
BCODE_POP_INTO_TEMPVAR_1 = 0x29,
|
||||
BCODE_POP_INTO_TEMPVAR_2 = 0x2A,
|
||||
BCODE_POP_INTO_TEMPVAR_3 = 0x2B,
|
||||
HCL_CODE_POP_INTO_TEMPVAR_0 = 0x28,
|
||||
HCL_CODE_POP_INTO_TEMPVAR_1 = 0x29,
|
||||
HCL_CODE_POP_INTO_TEMPVAR_2 = 0x2A,
|
||||
HCL_CODE_POP_INTO_TEMPVAR_3 = 0x2B,
|
||||
|
||||
BCODE_POP_INTO_TEMPVAR_4 = 0x2C,
|
||||
BCODE_POP_INTO_TEMPVAR_5 = 0x2D,
|
||||
BCODE_POP_INTO_TEMPVAR_6 = 0x2E,
|
||||
BCODE_POP_INTO_TEMPVAR_7 = 0x2F,
|
||||
HCL_CODE_POP_INTO_TEMPVAR_4 = 0x2C,
|
||||
HCL_CODE_POP_INTO_TEMPVAR_5 = 0x2D,
|
||||
HCL_CODE_POP_INTO_TEMPVAR_6 = 0x2E,
|
||||
HCL_CODE_POP_INTO_TEMPVAR_7 = 0x2F,
|
||||
|
||||
HCL_CODE_PUSH_LITERAL_0 = 0x30,
|
||||
HCL_CODE_PUSH_LITERAL_1 = 0x31,
|
||||
HCL_CODE_PUSH_LITERAL_2 = 0x32,
|
||||
HCL_CODE_PUSH_LITERAL_3 = 0x33,
|
||||
HCL_CODE_PUSH_LITERAL_0 = 0x30,
|
||||
HCL_CODE_PUSH_LITERAL_1 = 0x31,
|
||||
HCL_CODE_PUSH_LITERAL_2 = 0x32,
|
||||
HCL_CODE_PUSH_LITERAL_3 = 0x33,
|
||||
|
||||
HCL_CODE_PUSH_LITERAL_4 = 0x34,
|
||||
HCL_CODE_PUSH_LITERAL_5 = 0x35,
|
||||
HCL_CODE_PUSH_LITERAL_6 = 0x36,
|
||||
HCL_CODE_PUSH_LITERAL_7 = 0x37,
|
||||
HCL_CODE_PUSH_LITERAL_4 = 0x34,
|
||||
HCL_CODE_PUSH_LITERAL_5 = 0x35,
|
||||
HCL_CODE_PUSH_LITERAL_6 = 0x36,
|
||||
HCL_CODE_PUSH_LITERAL_7 = 0x37,
|
||||
|
||||
/* -------------------------------------- */
|
||||
|
||||
@ -479,10 +479,10 @@ enum hcl_bcode_t
|
||||
HCL_CODE_STORE_INTO_OBJECT_2 = 0x3A,
|
||||
HCL_CODE_STORE_INTO_OBJECT_3 = 0x3B,
|
||||
|
||||
BCODE_POP_INTO_OBJECT_0 = 0x3C,
|
||||
BCODE_POP_INTO_OBJECT_1 = 0x3D,
|
||||
BCODE_POP_INTO_OBJECT_2 = 0x3E,
|
||||
BCODE_POP_INTO_OBJECT_3 = 0x3F,
|
||||
HCL_CODE_POP_INTO_OBJECT_0 = 0x3C,
|
||||
HCL_CODE_POP_INTO_OBJECT_1 = 0x3D,
|
||||
HCL_CODE_POP_INTO_OBJECT_2 = 0x3E,
|
||||
HCL_CODE_POP_INTO_OBJECT_3 = 0x3F,
|
||||
|
||||
HCL_CODE_PUSH_OBJECT_0 = 0x40,
|
||||
HCL_CODE_PUSH_OBJECT_1 = 0x41,
|
||||
@ -500,15 +500,15 @@ enum hcl_bcode_t
|
||||
HCL_CODE_JUMP_BACKWARD_3 = 0x4B, /* 75 */
|
||||
|
||||
#if 0
|
||||
BCODE_JUMP_BACKWARD_IF_FALSE_0 = 0x4C, /* 76 */
|
||||
BCODE_JUMP_BACKWARD_IF_FALSE_1 = 0x4D, /* 77 */
|
||||
BCODE_JUMP_BACKWARD_IF_FALSE_2 = 0x4E, /* 78 */
|
||||
BCODE_JUMP_BACKWARD_IF_FALSE_3 = 0x4F, /* 79 */
|
||||
HCL_CODE_JUMP_BACKWARD_IF_FALSE_0 = 0x4C, /* 76 */
|
||||
HCL_CODE_JUMP_BACKWARD_IF_FALSE_1 = 0x4D, /* 77 */
|
||||
HCL_CODE_JUMP_BACKWARD_IF_FALSE_2 = 0x4E, /* 78 */
|
||||
HCL_CODE_JUMP_BACKWARD_IF_FALSE_3 = 0x4F, /* 79 */
|
||||
|
||||
BCODE_JUMP_BACKWARD_IF_TRUE_0 = 0x50, /* 80 */
|
||||
BCODE_JUMP_BACKWARD_IF_TRUE_1 = 0x51, /* 81 */
|
||||
BCODE_JUMP_BACKWARD_IF_TRUE_2 = 0x52, /* 82 */
|
||||
BCODE_JUMP_BACKWARD_IF_TRUE_3 = 0x53, /* 83 */
|
||||
HCL_CODE_JUMP_BACKWARD_IF_TRUE_0 = 0x50, /* 80 */
|
||||
HCL_CODE_JUMP_BACKWARD_IF_TRUE_1 = 0x51, /* 81 */
|
||||
HCL_CODE_JUMP_BACKWARD_IF_TRUE_2 = 0x52, /* 82 */
|
||||
HCL_CODE_JUMP_BACKWARD_IF_TRUE_3 = 0x53, /* 83 */
|
||||
#endif
|
||||
|
||||
HCL_CODE_CALL_0 = 0x54, /* 84 */
|
||||
@ -521,65 +521,65 @@ enum hcl_bcode_t
|
||||
HCL_CODE_STORE_INTO_CTXTEMPVAR_2 = 0x5A, /* 90 */
|
||||
HCL_CODE_STORE_INTO_CTXTEMPVAR_3 = 0x5B, /* 91 */
|
||||
|
||||
BCODE_POP_INTO_CTXTEMPVAR_0 = 0x5C, /* 92 */
|
||||
BCODE_POP_INTO_CTXTEMPVAR_1 = 0x5D, /* 93 */
|
||||
BCODE_POP_INTO_CTXTEMPVAR_2 = 0x5E, /* 94 */
|
||||
BCODE_POP_INTO_CTXTEMPVAR_3 = 0x5F, /* 95 */
|
||||
HCL_CODE_POP_INTO_CTXTEMPVAR_0 = 0x5C, /* 92 */
|
||||
HCL_CODE_POP_INTO_CTXTEMPVAR_1 = 0x5D, /* 93 */
|
||||
HCL_CODE_POP_INTO_CTXTEMPVAR_2 = 0x5E, /* 94 */
|
||||
HCL_CODE_POP_INTO_CTXTEMPVAR_3 = 0x5F, /* 95 */
|
||||
|
||||
HCL_CODE_PUSH_CTXTEMPVAR_0 = 0x60, /* 96 */
|
||||
HCL_CODE_PUSH_CTXTEMPVAR_1 = 0x61, /* 97 */
|
||||
HCL_CODE_PUSH_CTXTEMPVAR_2 = 0x62, /* 98 */
|
||||
HCL_CODE_PUSH_CTXTEMPVAR_3 = 0x63, /* 99 */
|
||||
|
||||
BCODE_PUSH_OBJVAR_0 = 0x64,
|
||||
BCODE_PUSH_OBJVAR_1 = 0x65,
|
||||
BCODE_PUSH_OBJVAR_2 = 0x66,
|
||||
BCODE_PUSH_OBJVAR_3 = 0x67,
|
||||
HCL_CODE_PUSH_OBJVAR_0 = 0x64,
|
||||
HCL_CODE_PUSH_OBJVAR_1 = 0x65,
|
||||
HCL_CODE_PUSH_OBJVAR_2 = 0x66,
|
||||
HCL_CODE_PUSH_OBJVAR_3 = 0x67,
|
||||
|
||||
BCODE_STORE_INTO_OBJVAR_0 = 0x68,
|
||||
BCODE_STORE_INTO_OBJVAR_1 = 0x69,
|
||||
BCODE_STORE_INTO_OBJVAR_2 = 0x6A,
|
||||
BCODE_STORE_INTO_OBJVAR_3 = 0x6B,
|
||||
HCL_CODE_STORE_INTO_OBJVAR_0 = 0x68,
|
||||
HCL_CODE_STORE_INTO_OBJVAR_1 = 0x69,
|
||||
HCL_CODE_STORE_INTO_OBJVAR_2 = 0x6A,
|
||||
HCL_CODE_STORE_INTO_OBJVAR_3 = 0x6B,
|
||||
|
||||
BCODE_POP_INTO_OBJVAR_0 = 0x6C,
|
||||
BCODE_POP_INTO_OBJVAR_1 = 0x6D,
|
||||
BCODE_POP_INTO_OBJVAR_2 = 0x6E,
|
||||
BCODE_POP_INTO_OBJVAR_3 = 0x6F,
|
||||
HCL_CODE_POP_INTO_OBJVAR_0 = 0x6C,
|
||||
HCL_CODE_POP_INTO_OBJVAR_1 = 0x6D,
|
||||
HCL_CODE_POP_INTO_OBJVAR_2 = 0x6E,
|
||||
HCL_CODE_POP_INTO_OBJVAR_3 = 0x6F,
|
||||
|
||||
BCODE_SEND_MESSAGE_0 = 0x70,
|
||||
BCODE_SEND_MESSAGE_1 = 0x71,
|
||||
BCODE_SEND_MESSAGE_2 = 0x72,
|
||||
BCODE_SEND_MESSAGE_3 = 0x73,
|
||||
HCL_CODE_SEND_MESSAGE_0 = 0x70,
|
||||
HCL_CODE_SEND_MESSAGE_1 = 0x71,
|
||||
HCL_CODE_SEND_MESSAGE_2 = 0x72,
|
||||
HCL_CODE_SEND_MESSAGE_3 = 0x73,
|
||||
|
||||
BCODE_SEND_MESSAGE_TO_SUPER_0 = 0x74,
|
||||
BCODE_SEND_MESSAGE_TO_SUPER_1 = 0x75,
|
||||
BCODE_SEND_MESSAGE_TO_SUPER_2 = 0x76,
|
||||
BCODE_SEND_MESSAGE_TO_SUPER_3 = 0x77,
|
||||
HCL_CODE_SEND_MESSAGE_TO_SUPER_0 = 0x74,
|
||||
HCL_CODE_SEND_MESSAGE_TO_SUPER_1 = 0x75,
|
||||
HCL_CODE_SEND_MESSAGE_TO_SUPER_2 = 0x76,
|
||||
HCL_CODE_SEND_MESSAGE_TO_SUPER_3 = 0x77,
|
||||
|
||||
/* UNUSED 0x78 - 0x7F */
|
||||
|
||||
BCODE_STORE_INTO_INSTVAR_X = 0x80, /* 128 */
|
||||
HCL_CODE_STORE_INTO_INSTVAR_X = 0x80, /* 128 */
|
||||
|
||||
|
||||
BCODE_PUSH_RECEIVER = 0x81, /* 129 */
|
||||
HCL_CODE_PUSH_RECEIVER = 0x81, /* 129 */
|
||||
HCL_CODE_PUSH_NIL = 0x82, /* 130 */
|
||||
HCL_CODE_PUSH_TRUE = 0x83, /* 131 */
|
||||
HCL_CODE_PUSH_FALSE = 0x84, /* 132 */
|
||||
BCODE_PUSH_CONTEXT = 0x85, /* 133 */
|
||||
BCODE_PUSH_PROCESS = 0x86, /* 134 */
|
||||
HCL_CODE_PUSH_CONTEXT = 0x85, /* 133 */
|
||||
HCL_CODE_PUSH_PROCESS = 0x86, /* 134 */
|
||||
/* UNUSED135 */
|
||||
|
||||
BCODE_POP_INTO_INSTVAR_X = 0x88, /* 136 ## */
|
||||
HCL_CODE_POP_INTO_INSTVAR_X = 0x88, /* 136 ## */
|
||||
|
||||
HCL_CODE_PUSH_NEGONE = 0x89, /* 137 */
|
||||
HCL_CODE_PUSH_ZERO = 0x8A, /* 138 */
|
||||
HCL_CODE_PUSH_ONE = 0x8B, /* 139 */
|
||||
HCL_CODE_PUSH_TWO = 0x8C, /* 140 */
|
||||
|
||||
BCODE_PUSH_INSTVAR_X = 0x90, /* 144 ## */
|
||||
HCL_CODE_PUSH_INSTVAR_X = 0x90, /* 144 ## */
|
||||
HCL_CODE_PUSH_TEMPVAR_X = 0x98, /* 152 ## */
|
||||
HCL_CODE_STORE_INTO_TEMPVAR_X = 0xA0, /* 160 ## */
|
||||
BCODE_POP_INTO_TEMPVAR_X = 0xA8, /* 168 ## */
|
||||
HCL_CODE_POP_INTO_TEMPVAR_X = 0xA8, /* 168 ## */
|
||||
|
||||
HCL_CODE_PUSH_LITERAL_X = 0xB0, /* 176 ## */
|
||||
HCL_CODE_PUSH_LITERAL_X2 = 0xB1, /* 177 */
|
||||
@ -589,7 +589,7 @@ enum hcl_bcode_t
|
||||
HCL_CODE_PUSH_CHARLIT = 0xB4, /* 180 */
|
||||
|
||||
HCL_CODE_STORE_INTO_OBJECT_X = 0xB8, /* 184 ## */
|
||||
BCODE_POP_INTO_OBJECT_X = 0xBC, /* 188 ## */
|
||||
HCL_CODE_POP_INTO_OBJECT_X = 0xBC, /* 188 ## */
|
||||
HCL_CODE_PUSH_OBJECT_X = 0xC0, /* 192 ## */
|
||||
|
||||
HCL_CODE_JUMP_FORWARD_X = 0xC4, /* 196 ## */
|
||||
@ -606,38 +606,38 @@ enum hcl_bcode_t
|
||||
HCL_CODE_CALL_X = 0xD4, /* 212 */
|
||||
|
||||
HCL_CODE_STORE_INTO_CTXTEMPVAR_X = 0xD8, /* 216 ## */
|
||||
BCODE_POP_INTO_CTXTEMPVAR_X = 0xDC, /* 220 ## */
|
||||
HCL_CODE_POP_INTO_CTXTEMPVAR_X = 0xDC, /* 220 ## */
|
||||
HCL_CODE_PUSH_CTXTEMPVAR_X = 0xE0, /* 224 ## */
|
||||
|
||||
BCODE_PUSH_OBJVAR_X = 0xE4, /* 228 ## */
|
||||
BCODE_STORE_INTO_OBJVAR_X = 0xE8, /* 232 ## */
|
||||
BCODE_POP_INTO_OBJVAR_X = 0xEC, /* 236 ## */
|
||||
HCL_CODE_PUSH_OBJVAR_X = 0xE4, /* 228 ## */
|
||||
HCL_CODE_STORE_INTO_OBJVAR_X = 0xE8, /* 232 ## */
|
||||
HCL_CODE_POP_INTO_OBJVAR_X = 0xEC, /* 236 ## */
|
||||
|
||||
/* UNUSED 237 */
|
||||
HCL_CODE_MAKE_BYTEARRAY = 0xEE, /* 238 */
|
||||
HCL_CODE_POP_INTO_BYTEARRAY = 0xEF, /* 239 */
|
||||
|
||||
BCODE_SEND_MESSAGE_X = 0xF0, /* 240 ## */
|
||||
HCL_CODE_SEND_MESSAGE_X = 0xF0, /* 240 ## */
|
||||
|
||||
/* UNUSED 241 */
|
||||
|
||||
HCL_CODE_MAKE_DIC = 0xF2, /* 242 */
|
||||
HCL_CODE_POP_INTO_DIC = 0xF3, /* 243 */
|
||||
BCODE_SEND_MESSAGE_TO_SUPER_X = 0xF4, /* 244 ## */
|
||||
HCL_CODE_SEND_MESSAGE_TO_SUPER_X = 0xF4, /* 244 ## */
|
||||
|
||||
/* -------------------------------------- */
|
||||
|
||||
HCL_CODE_MAKE_ARRAY = 0xF5, /* 245 */
|
||||
HCL_CODE_POP_INTO_ARRAY = 0xF6, /* 246 */
|
||||
|
||||
BCODE_DUP_STACKTOP = 0xF7,
|
||||
HCL_CODE_DUP_STACKTOP = 0xF7,
|
||||
HCL_CODE_POP_STACKTOP = 0xF8,
|
||||
BCODE_RETURN_STACKTOP = 0xF9, /* ^something */
|
||||
BCODE_RETURN_RECEIVER = 0xFA, /* ^self */
|
||||
HCL_CODE_RETURN_STACKTOP = 0xF9, /* ^something */
|
||||
HCL_CODE_RETURN_RECEIVER = 0xFA, /* ^self */
|
||||
HCL_CODE_RETURN_FROM_BLOCK = 0xFB, /* return the stack top from a block */
|
||||
/* UNUSED 252 */
|
||||
HCL_CODE_MAKE_BLOCK = 0xFD, /* 253 */
|
||||
BCODE_SEND_BLOCK_COPY = 0xFE, /* 254 */
|
||||
HCL_CODE_SEND_BLOCK_COPY = 0xFE, /* 254 */
|
||||
HCL_CODE_NOOP = 0xFF /* 255 */
|
||||
};
|
||||
|
||||
|
58
lib/hcl.c
58
lib/hcl.c
@ -93,9 +93,46 @@ static void free_heap (hcl_t* hcl, void* ptr)
|
||||
hcl_freemem (hcl, ptr);
|
||||
}
|
||||
|
||||
static int push_code_container (hcl_t* hcl)
|
||||
{
|
||||
hcl_code_container_t* cc;
|
||||
|
||||
cc = hcl_callocmem(hcl, HCL_SIZEOF(*cc));
|
||||
if (HCL_UNLIKELY(!cc)) return -1;
|
||||
|
||||
cc->_par = hcl->ccstk;
|
||||
hcl->ccstk = cc;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void pop_code_container (hcl_t* hcl)
|
||||
{
|
||||
hcl_code_container_t* cc = hcl->ccstk;
|
||||
|
||||
if (cc->bc.arr)
|
||||
{
|
||||
hcl_freengcobj (hcl, (hcl_oop_t)cc->bc.arr);
|
||||
cc->bc.arr = HCL_NULL;
|
||||
cc->bc.len = 0;
|
||||
}
|
||||
|
||||
if (cc->lit.arr)
|
||||
{
|
||||
hcl_freengcobj (hcl, (hcl_oop_t)cc->lit.arr);
|
||||
cc->lit.arr = HCL_NULL;
|
||||
cc->lit.len = 0;
|
||||
}
|
||||
|
||||
hcl->ccstk = cc->_par;
|
||||
hcl_freemem (hcl, cc);
|
||||
}
|
||||
|
||||
|
||||
int hcl_init (hcl_t* hcl, hcl_mmgr_t* mmgr, hcl_oow_t heapsz, const hcl_vmprim_t* vmprim)
|
||||
{
|
||||
int modtab_inited = 0;
|
||||
int n;
|
||||
|
||||
if (!vmprim->syserrstrb && !vmprim->syserrstru)
|
||||
{
|
||||
@ -135,9 +172,10 @@ int hcl_init (hcl_t* hcl, hcl_mmgr_t* mmgr, hcl_oow_t heapsz, const hcl_vmprim_t
|
||||
* reallocation fails */
|
||||
/* +1 required for consistency with put_oocs and put_ooch in logfmt.c */
|
||||
hcl->log.ptr = (hcl_ooch_t*)hcl_allocmem(hcl, (hcl->log.capa + 1) * HCL_SIZEOF(*hcl->log.ptr));
|
||||
if (!hcl->log.ptr) goto oops;
|
||||
if (HCL_UNLIKELY(!hcl->log.ptr)) goto oops;
|
||||
|
||||
if (hcl_rbt_init(&hcl->modtab, hcl, HCL_SIZEOF(hcl_ooch_t), 1) <= -1) goto oops;
|
||||
n = hcl_rbt_init(&hcl->modtab, hcl, HCL_SIZEOF(hcl_ooch_t), 1);
|
||||
if (HCL_UNLIKELY(n <= -1)) goto oops;
|
||||
modtab_inited = 1;
|
||||
hcl_rbt_setstyle(&hcl->modtab, hcl_get_rbt_style(HCL_RBT_STYLE_INLINE_COPIERS));
|
||||
|
||||
@ -154,14 +192,18 @@ int hcl_init (hcl_t* hcl, hcl_mmgr_t* mmgr, hcl_oow_t heapsz, const hcl_vmprim_t
|
||||
/*hcl->permheap = hcl_makeheap (hcl, what is the best size???);
|
||||
if (!hcl->curheap) goto oops; */
|
||||
hcl->curheap = hcl_makeheap(hcl, heapsz);
|
||||
if (!hcl->curheap) goto oops;
|
||||
if (HCL_UNLIKELY(!hcl->curheap)) goto oops;
|
||||
hcl->newheap = hcl_makeheap(hcl, heapsz);
|
||||
if (!hcl->newheap) goto oops;
|
||||
if (HCL_UNLIKELY(!hcl->newheap)) goto oops;
|
||||
|
||||
n = push_code_container(hcl);
|
||||
if (HCL_UNLIKELY(n <= -1)) goto oops;
|
||||
|
||||
if (hcl->vmprim.dl_startup) hcl->vmprim.dl_startup (hcl);
|
||||
return 0;
|
||||
|
||||
oops:
|
||||
if (hcl->ccstk) pop_code_container(hcl);
|
||||
if (hcl->newheap) hcl_killheap (hcl, hcl->newheap);
|
||||
if (hcl->curheap) hcl_killheap (hcl, hcl->curheap);
|
||||
if (hcl->permheap) hcl_killheap (hcl, hcl->permheap);
|
||||
@ -253,6 +295,8 @@ void hcl_fini (hcl_t* hcl)
|
||||
hcl->code.lit.len = 0;
|
||||
}
|
||||
|
||||
while (hcl->ccstk) pop_code_container(hcl);
|
||||
|
||||
if (hcl->p.s.ptr)
|
||||
{
|
||||
hcl_freemem (hcl, hcl->p.s.ptr);
|
||||
@ -320,6 +364,12 @@ void hcl_reset (hcl_t* hcl)
|
||||
hcl->code.bc.len = 0;
|
||||
hcl->code.lit.len = 0;
|
||||
|
||||
/* keep the base container */
|
||||
HCL_ASSERT (hcl, hcl->ccstk != HCL_NULL);
|
||||
while (hcl->ccstk->_par) pop_code_container(hcl);
|
||||
hcl->ccstk->bc.len = 0;
|
||||
hcl->ccstk->lit.len = 0;
|
||||
|
||||
/* clean up object memory */
|
||||
hcl_gc (hcl);
|
||||
}
|
||||
|
35
lib/hcl.h
35
lib/hcl.h
@ -1091,6 +1091,25 @@ typedef struct hcl_compiler_t hcl_compiler_t;
|
||||
|
||||
#define HCL_ERRMSG_CAPA (2048)
|
||||
|
||||
typedef struct hcl_code_container_t hcl_code_container_t;
|
||||
struct hcl_code_container_t
|
||||
{
|
||||
struct
|
||||
{
|
||||
hcl_oop_byte_t arr; /* byte code array - not part of object memory */
|
||||
hcl_oow_t len;
|
||||
} bc;
|
||||
|
||||
struct
|
||||
{
|
||||
hcl_oop_oop_t arr; /* literal array - not part of object memory */
|
||||
hcl_oow_t len;
|
||||
} lit;
|
||||
|
||||
hcl_code_container_t* _par;
|
||||
};
|
||||
|
||||
|
||||
struct hcl_t
|
||||
{
|
||||
hcl_oow_t _instsize;
|
||||
@ -1241,20 +1260,8 @@ struct hcl_t
|
||||
} xbuf; /* buffer to support sprintf */
|
||||
} sprintf;
|
||||
|
||||
struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
hcl_oop_byte_t arr; /* byte code array - not part of object memory */
|
||||
hcl_oow_t len;
|
||||
} bc;
|
||||
|
||||
struct
|
||||
{
|
||||
hcl_oop_oop_t arr; /* literal array - not part of object memory */
|
||||
hcl_oow_t len;
|
||||
} lit;
|
||||
} code;
|
||||
hcl_code_container_t* ccstk; /* byte-code container stack */
|
||||
hcl_code_container_t code; /* byte-code structure generated by compilers */
|
||||
|
||||
/* == PRINTER == */
|
||||
struct
|
||||
|
Loading…
x
Reference in New Issue
Block a user