wip - class_load instruction for out-of-class method definition
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
a0e47d79f9
commit
816b6d54f4
12
lib/decode.c
12
lib/decode.c
@ -373,6 +373,18 @@ int hcl_decode (hcl_t* hcl, const hcl_code_t* code, hcl_oow_t start, hcl_oow_t e
|
|||||||
LOG_INST_0 (hcl, "throw");
|
LOG_INST_0 (hcl, "throw");
|
||||||
break;
|
break;
|
||||||
/* -------------------------------------------------------- */
|
/* -------------------------------------------------------- */
|
||||||
|
case HCL_CODE_CLASS_LOAD_X2:
|
||||||
|
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||||
|
FETCH_PARAM_CODE_TO (hcl, b2);
|
||||||
|
b1 = (b1 << (8 * HCL_CODE_LONG_PARAM_SIZE)) | b2;
|
||||||
|
goto class_load;
|
||||||
|
|
||||||
|
case HCL_CODE_CLASS_LOAD_X:
|
||||||
|
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||||
|
class_load:
|
||||||
|
LOG_INST_1 (hcl, "class_load @%zu", b1);
|
||||||
|
break;
|
||||||
|
|
||||||
case HCL_CODE_CLASS_ENTER:
|
case HCL_CODE_CLASS_ENTER:
|
||||||
{
|
{
|
||||||
hcl_oow_t b3;
|
hcl_oow_t b3;
|
||||||
|
25
lib/exec.c
25
lib/exec.c
@ -3797,6 +3797,31 @@ if (do_throw(hcl, hcl->_nil, fetched_instruction_pointer) <= -1)
|
|||||||
break;
|
break;
|
||||||
/* -------------------------------------------------------- */
|
/* -------------------------------------------------------- */
|
||||||
|
|
||||||
|
case HCL_CODE_CLASS_LOAD_X2:
|
||||||
|
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||||
|
FETCH_PARAM_CODE_TO (hcl, b2);
|
||||||
|
b1 = (b1 << (8 * HCL_CODE_LONG_PARAM_SIZE)) | b2;
|
||||||
|
goto class_load;
|
||||||
|
|
||||||
|
case HCL_CODE_CLASS_LOAD_X:
|
||||||
|
{
|
||||||
|
hcl_oop_t t;
|
||||||
|
FETCH_PARAM_CODE_TO (hcl, b1);
|
||||||
|
class_load:
|
||||||
|
/* push the class indiciated by the literal at the given literal frame index
|
||||||
|
* to the class stack */
|
||||||
|
LOG_INST_1 (hcl, "class_load @%zu", b1);
|
||||||
|
/* this literal must be a symbol. find a class with the symbol and push it */
|
||||||
|
t = hcl->active_function->literal_frame[b1];
|
||||||
|
if (!t || !HCL_IS_SYMBOL(hcl, t))
|
||||||
|
{
|
||||||
|
/* TODO: critical vm error.. */
|
||||||
|
}
|
||||||
|
/* TODO: find class with this name */
|
||||||
|
HCL_CLSTACK_PUSH (hcl, t);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case HCL_CODE_CLASS_ENTER:
|
case HCL_CODE_CLASS_ENTER:
|
||||||
{
|
{
|
||||||
/* push superclass
|
/* push superclass
|
||||||
|
@ -1324,7 +1324,10 @@ enum hcl_bcode_t
|
|||||||
HCL_CODE_THROW = 0xDB, /* 219 */
|
HCL_CODE_THROW = 0xDB, /* 219 */
|
||||||
|
|
||||||
HCL_CODE_POP_INTO_CTXTEMPVAR_X = 0xDC, /* 220 ## */
|
HCL_CODE_POP_INTO_CTXTEMPVAR_X = 0xDC, /* 220 ## */
|
||||||
/* UNUSED - 0xDD - 0xDF */
|
HCL_CODE_CLASS_LOAD_X = 0xDD, /* 221 ## */
|
||||||
|
HCL_CODE_CLASS_LOAD_X2 = 0xDE, /* 222 ## */
|
||||||
|
|
||||||
|
/* UNUSED - 0xDF - 0xDF */
|
||||||
|
|
||||||
HCL_CODE_PUSH_CTXTEMPVAR_X = 0xE0, /* 224 ## */
|
HCL_CODE_PUSH_CTXTEMPVAR_X = 0xE0, /* 224 ## */
|
||||||
HCL_CODE_CLASS_ENTER = 0xE1, /* 225 ## */
|
HCL_CODE_CLASS_ENTER = 0xE1, /* 225 ## */
|
||||||
|
Loading…
Reference in New Issue
Block a user