py: work towards working closures.
This commit is contained in:
@@ -688,6 +688,17 @@ static void emit_native_load_fast(emit_t *emit, qstr qstr, int local_num) {
|
||||
#endif
|
||||
}
|
||||
|
||||
static void emit_native_load_deref(emit_t *emit, qstr qstr, int local_num) {
|
||||
// not implemented
|
||||
// in principle could support this quite easily (ldr r0, [r0, #0]) and then get closed over variables!
|
||||
assert(0);
|
||||
}
|
||||
|
||||
static void emit_native_load_closure(emit_t *emit, qstr qstr, int local_num) {
|
||||
// not implemented
|
||||
assert(0);
|
||||
}
|
||||
|
||||
static void emit_native_load_name(emit_t *emit, qstr qstr) {
|
||||
emit_pre(emit);
|
||||
emit_call_with_imm_arg(emit, RT_F_LOAD_NAME, rt_load_name, qstr, REG_ARG_1);
|
||||
@@ -700,17 +711,6 @@ static void emit_native_load_global(emit_t *emit, qstr qstr) {
|
||||
emit_post_push_reg(emit, VTYPE_PYOBJ, REG_RET);
|
||||
}
|
||||
|
||||
static void emit_native_load_deref(emit_t *emit, qstr qstr, int local_num) {
|
||||
// not implemented
|
||||
// in principle could support this quite easily (ldr r0, [r0, #0]) and then get closed over variables!
|
||||
assert(0);
|
||||
}
|
||||
|
||||
static void emit_native_load_closure(emit_t *emit, qstr qstr, int local_num) {
|
||||
// not implemented
|
||||
assert(0);
|
||||
}
|
||||
|
||||
static void emit_native_load_attr(emit_t *emit, qstr qstr) {
|
||||
// depends on type of subject:
|
||||
// - integer, function, pointer to integers: error
|
||||
@@ -771,6 +771,11 @@ static void emit_native_store_fast(emit_t *emit, qstr qstr, int local_num) {
|
||||
}
|
||||
}
|
||||
|
||||
static void emit_native_store_deref(emit_t *emit, qstr qstr, int local_num) {
|
||||
// not implemented
|
||||
assert(0);
|
||||
}
|
||||
|
||||
static void emit_native_store_name(emit_t *emit, qstr qstr) {
|
||||
// rt_store_name, but needs conversion of object (maybe have rt_viper_store_name(obj, type))
|
||||
vtype_kind_t vtype;
|
||||
@@ -785,11 +790,6 @@ static void emit_native_store_global(emit_t *emit, qstr qstr) {
|
||||
assert(0);
|
||||
}
|
||||
|
||||
static void emit_native_store_deref(emit_t *emit, qstr qstr, int local_num) {
|
||||
// not implemented
|
||||
assert(0);
|
||||
}
|
||||
|
||||
static void emit_native_store_attr(emit_t *emit, qstr qstr) {
|
||||
vtype_kind_t vtype_base, vtype_val;
|
||||
emit_pre_pop_reg_reg(emit, &vtype_base, REG_ARG_1, &vtype_val, REG_ARG_3); // arg1 = base, arg3 = value
|
||||
@@ -825,6 +825,11 @@ static void emit_native_delete_fast(emit_t *emit, qstr qstr, int local_num) {
|
||||
assert(0);
|
||||
}
|
||||
|
||||
static void emit_native_delete_deref(emit_t *emit, qstr qstr, int local_num) {
|
||||
// not supported
|
||||
assert(0);
|
||||
}
|
||||
|
||||
static void emit_native_delete_name(emit_t *emit, qstr qstr) {
|
||||
// not implemented
|
||||
// use rt_delete_name
|
||||
@@ -837,11 +842,6 @@ static void emit_native_delete_global(emit_t *emit, qstr qstr) {
|
||||
assert(0);
|
||||
}
|
||||
|
||||
static void emit_native_delete_deref(emit_t *emit, qstr qstr, int local_num) {
|
||||
// not supported
|
||||
assert(0);
|
||||
}
|
||||
|
||||
static void emit_native_delete_attr(emit_t *emit, qstr qstr) {
|
||||
// not supported
|
||||
assert(0);
|
||||
@@ -1280,24 +1280,24 @@ const emit_method_table_t EXPORT_FUN(method_table) = {
|
||||
emit_native_load_const_verbatim_quoted_str,
|
||||
emit_native_load_const_verbatim_end,
|
||||
emit_native_load_fast,
|
||||
emit_native_load_name,
|
||||
emit_native_load_global,
|
||||
emit_native_load_deref,
|
||||
emit_native_load_closure,
|
||||
emit_native_load_name,
|
||||
emit_native_load_global,
|
||||
emit_native_load_attr,
|
||||
emit_native_load_method,
|
||||
emit_native_load_build_class,
|
||||
emit_native_store_fast,
|
||||
emit_native_store_deref,
|
||||
emit_native_store_name,
|
||||
emit_native_store_global,
|
||||
emit_native_store_deref,
|
||||
emit_native_store_attr,
|
||||
emit_native_store_subscr,
|
||||
emit_native_store_locals,
|
||||
emit_native_delete_fast,
|
||||
emit_native_delete_deref,
|
||||
emit_native_delete_name,
|
||||
emit_native_delete_global,
|
||||
emit_native_delete_deref,
|
||||
emit_native_delete_attr,
|
||||
emit_native_delete_subscr,
|
||||
emit_native_dup_top,
|
||||
|
||||
Reference in New Issue
Block a user