changed the byte code for push_intlit and push_negintlit.
added a new byte code push_charlit
This commit is contained in:
parent
0504fbde72
commit
ab5dee8c77
@ -95,7 +95,12 @@
|
|||||||
#method(#class) main
|
#method(#class) main
|
||||||
{
|
{
|
||||||
| v1 v2 |
|
| v1 v2 |
|
||||||
System logNl: 'START OF MAIN'.
|
|
||||||
|
v2 := 'have fun'.
|
||||||
|
|
||||||
|
v2 at: 0 put: $H.
|
||||||
|
|
||||||
|
System logNl: ('START OF MAIN - ' , v2).
|
||||||
|
|
||||||
v1 := MyConsole output.
|
v1 := MyConsole output.
|
||||||
v1 clear.
|
v1 clear.
|
||||||
|
@ -1694,6 +1694,7 @@ static int emit_single_param_instruction (stix_t* stix, int cmd, stix_oow_t para
|
|||||||
case BCODE_JUMP2_BACKWARD:
|
case BCODE_JUMP2_BACKWARD:
|
||||||
case BCODE_PUSH_INTLIT:
|
case BCODE_PUSH_INTLIT:
|
||||||
case BCODE_PUSH_NEGINTLIT:
|
case BCODE_PUSH_NEGINTLIT:
|
||||||
|
case BCODE_PUSH_CHARLIT:
|
||||||
bc = cmd;
|
bc = cmd;
|
||||||
goto write_long;
|
goto write_long;
|
||||||
}
|
}
|
||||||
@ -1706,9 +1707,14 @@ write_short:
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
write_long:
|
write_long:
|
||||||
|
if (param_1 > MAX_CODE_PARAM)
|
||||||
|
{
|
||||||
|
stix->errnum = STIX_ERANGE;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
#if (STIX_BCODE_LONG_PARAM_SIZE == 2)
|
#if (STIX_BCODE_LONG_PARAM_SIZE == 2)
|
||||||
if (emit_byte_instruction(stix, bc) <= -1 ||
|
if (emit_byte_instruction(stix, bc) <= -1 ||
|
||||||
emit_byte_instruction(stix, param_1 >> 8) <= -1 ||
|
emit_byte_instruction(stix, (param_1 >> 8) & 0xFF) <= -1 ||
|
||||||
emit_byte_instruction(stix, param_1 & 0xFF) <= -1) return -1;
|
emit_byte_instruction(stix, param_1 & 0xFF) <= -1) return -1;
|
||||||
#else
|
#else
|
||||||
if (emit_byte_instruction(stix, bc) <= -1 ||
|
if (emit_byte_instruction(stix, bc) <= -1 ||
|
||||||
@ -1759,13 +1765,19 @@ write_short:
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
write_long:
|
write_long:
|
||||||
|
if (param_1 > MAX_CODE_PARAM || param_2 > MAX_CODE_PARAM)
|
||||||
|
{
|
||||||
|
stix->errnum = STIX_ERANGE;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
#if (STIX_BCODE_LONG_PARAM_SIZE == 2)
|
#if (STIX_BCODE_LONG_PARAM_SIZE == 2)
|
||||||
if (emit_byte_instruction(stix, bc) <= -1 ||
|
if (emit_byte_instruction(stix, bc) <= -1 ||
|
||||||
emit_byte_instruction(stix, param_1 >> 8) <= -1 ||
|
emit_byte_instruction(stix, (param_1 >> 8) & 0xFF) <= -1 ||
|
||||||
emit_byte_instruction(stix, param_1 & 0xFF) <= -1 ||
|
emit_byte_instruction(stix, param_1 & 0xFF) <= -1 ||
|
||||||
emit_byte_instruction(stix, param_2 >> 8) <= -1 ||
|
emit_byte_instruction(stix, (param_2 >> 8) & 0xFF) <= -1 ||
|
||||||
emit_byte_instruction(stix, param_2 & 0xFF) <= -1) return -1;
|
emit_byte_instruction(stix, param_2 & 0xFF) <= -1) return -1;
|
||||||
#else
|
#else
|
||||||
|
|
||||||
if (emit_byte_instruction(stix, bc) <= -1 ||
|
if (emit_byte_instruction(stix, bc) <= -1 ||
|
||||||
emit_byte_instruction(stix, param_1) <= -1 ||
|
emit_byte_instruction(stix, param_1) <= -1 ||
|
||||||
emit_byte_instruction(stix, param_2) <= -1) return -1;
|
emit_byte_instruction(stix, param_2) <= -1) return -1;
|
||||||
@ -1773,7 +1785,7 @@ write_long:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int emit_push_smint_literal (stix_t* stix, stix_ooi_t i)
|
static int emit_push_smooi_literal (stix_t* stix, stix_ooi_t i)
|
||||||
{
|
{
|
||||||
stix_oow_t index;
|
stix_oow_t index;
|
||||||
|
|
||||||
@ -1807,6 +1819,20 @@ static int emit_push_smint_literal (stix_t* stix, stix_ooi_t i)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int emit_push_character_literal (stix_t* stix, stix_ooch_t ch)
|
||||||
|
{
|
||||||
|
stix_oow_t index;
|
||||||
|
|
||||||
|
if (ch >= 0 && ch <= MAX_CODE_PARAM)
|
||||||
|
{
|
||||||
|
return emit_single_param_instruction (stix, BCODE_PUSH_CHARLIT, ch);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (add_literal(stix, STIX_CHAR_TO_OOP(ch), &index) <= -1 ||
|
||||||
|
emit_single_param_instruction(stix, BCODE_PUSH_LITERAL_0, index) <= -1) return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
/* ---------------------------------------------------------------------
|
/* ---------------------------------------------------------------------
|
||||||
* Compiler
|
* Compiler
|
||||||
* --------------------------------------------------------------------- */
|
* --------------------------------------------------------------------- */
|
||||||
@ -1848,11 +1874,6 @@ static int add_literal (stix_t* stix, stix_oop_t lit, stix_oow_t* index)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static STIX_INLINE int add_character_literal (stix_t* stix, stix_ooch_t ch, stix_oow_t* index)
|
|
||||||
{
|
|
||||||
return add_literal (stix, STIX_CHAR_TO_OOP(ch), index);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int add_string_literal (stix_t* stix, const stix_oocs_t* str, stix_oow_t* index)
|
static int add_string_literal (stix_t* stix, const stix_oocs_t* str, stix_oow_t* index)
|
||||||
{
|
{
|
||||||
stix_oop_t lit;
|
stix_oop_t lit;
|
||||||
@ -3068,8 +3089,8 @@ static int compile_block_expression (stix_t* stix)
|
|||||||
if (emit_double_param_instruction(stix, BCODE_MAKE_BLOCK, block_arg_count, stix->c->mth.tmpr_count/*block_tmpr_count*/) <= -1) return -1;
|
if (emit_double_param_instruction(stix, BCODE_MAKE_BLOCK, block_arg_count, stix->c->mth.tmpr_count/*block_tmpr_count*/) <= -1) return -1;
|
||||||
#else
|
#else
|
||||||
if (emit_byte_instruction(stix, BCODE_PUSH_CONTEXT) <= -1 ||
|
if (emit_byte_instruction(stix, BCODE_PUSH_CONTEXT) <= -1 ||
|
||||||
emit_push_smint_literal(stix, block_arg_count) <= -1 ||
|
emit_push_smooi_literal(stix, block_arg_count) <= -1 ||
|
||||||
emit_push_smint_literal(stix, stix->c->mth.tmpr_count/*block_tmpr_count*/) <= -1 ||
|
emit_push_smooi_literal(stix, stix->c->mth.tmpr_count/*block_tmpr_count*/) <= -1 ||
|
||||||
emit_byte_instruction(stix, BCODE_SEND_BLOCK_COPY) <= -1) return -1;
|
emit_byte_instruction(stix, BCODE_SEND_BLOCK_COPY) <= -1) return -1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -3520,8 +3541,7 @@ static int compile_expression_primary (stix_t* stix, const stix_oocs_t* ident, c
|
|||||||
|
|
||||||
case STIX_IOTOK_CHARLIT:
|
case STIX_IOTOK_CHARLIT:
|
||||||
STIX_ASSERT (stix->c->tok.name.len == 1);
|
STIX_ASSERT (stix->c->tok.name.len == 1);
|
||||||
if (add_character_literal(stix, stix->c->tok.name.ptr[0], &index) <= -1 ||
|
if (emit_push_character_literal(stix, stix->c->tok.name.ptr[0]) <= -1) return -1;
|
||||||
emit_single_param_instruction(stix, BCODE_PUSH_LITERAL_0, index) <= -1) return -1;
|
|
||||||
GET_TOKEN (stix);
|
GET_TOKEN (stix);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -3549,7 +3569,7 @@ static int compile_expression_primary (stix_t* stix, const stix_oocs_t* ident, c
|
|||||||
|
|
||||||
if (STIX_OOP_IS_SMOOI(tmp))
|
if (STIX_OOP_IS_SMOOI(tmp))
|
||||||
{
|
{
|
||||||
if (emit_push_smint_literal(stix, STIX_OOP_TO_SMOOI(tmp)) <= -1) return -1;
|
if (emit_push_smooi_literal(stix, STIX_OOP_TO_SMOOI(tmp)) <= -1) return -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -445,6 +445,10 @@ return -1;
|
|||||||
LOG_INST_1 (stix, "push_negintlit %zd", -b1);
|
LOG_INST_1 (stix, "push_negintlit %zd", -b1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case BCODE_PUSH_CHARLIT:
|
||||||
|
FETCH_PARAM_CODE_TO (stix, b1);
|
||||||
|
LOG_INST_1 (stix, "push_charlit %zd", b1);
|
||||||
|
break;
|
||||||
/* -------------------------------------------------------- */
|
/* -------------------------------------------------------- */
|
||||||
|
|
||||||
case BCODE_DUP_STACKTOP:
|
case BCODE_DUP_STACKTOP:
|
||||||
|
@ -3789,6 +3789,11 @@ return -1;
|
|||||||
STIX_STACK_PUSH (stix, STIX_SMOOI_TO_OOP(-b1));
|
STIX_STACK_PUSH (stix, STIX_SMOOI_TO_OOP(-b1));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case BCODE_PUSH_CHARLIT:
|
||||||
|
FETCH_PARAM_CODE_TO (stix, b1);
|
||||||
|
LOG_INST_1 (stix, "push_charlit %zd", b1);
|
||||||
|
STIX_STACK_PUSH (stix, STIX_CHAR_TO_OOP(b1));
|
||||||
|
break;
|
||||||
/* -------------------------------------------------------- */
|
/* -------------------------------------------------------- */
|
||||||
|
|
||||||
case BCODE_DUP_STACKTOP:
|
case BCODE_DUP_STACKTOP:
|
||||||
|
@ -887,8 +887,10 @@ enum stix_bcode_t
|
|||||||
BCODE_PUSH_ONE = 0x8A, /* 138 */
|
BCODE_PUSH_ONE = 0x8A, /* 138 */
|
||||||
BCODE_PUSH_TWO = 0x8B, /* 139 */
|
BCODE_PUSH_TWO = 0x8B, /* 139 */
|
||||||
|
|
||||||
BCODE_PUSH_INTLIT = 0xB1, /* 177 */
|
/* UNUSED - 0xB1 */
|
||||||
BCODE_PUSH_NEGINTLIT = 0xB2, /* 178 */
|
BCODE_PUSH_INTLIT = 0xB2, /* 178 */
|
||||||
|
BCODE_PUSH_NEGINTLIT = 0xB3, /* 179 */
|
||||||
|
BCODE_PUSH_CHARLIT = 0xB4, /* 180 */
|
||||||
|
|
||||||
/* UNUSED 0xE8 - 0xF7 */
|
/* UNUSED 0xE8 - 0xF7 */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user