aboutsummaryrefslogtreecommitdiff
path: root/src/op/variable_access/get_local.c
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi.dcr@tutanota.com>2024-05-22 14:04:36 +0200
committerXavier Del Campo Romero <xavi.dcr@tutanota.com>2024-06-12 13:38:05 +0200
commit4f9a2c7a2d8464b04cc08075a7762c6d457090df (patch)
treeae8fe229a3a5ba60d08b74299d0c1850685bda86 /src/op/variable_access/get_local.c
parentf25b015e5b668028c34974bbb22faa4105c26690 (diff)
downloadnanowasm-sync-4f9a2c7a2d8464b04cc08075a7762c6d457090df.tar.gz
WIP
Diffstat (limited to 'src/op/variable_access/get_local.c')
-rw-r--r--src/op/variable_access/get_local.c19
1 files changed, 7 insertions, 12 deletions
diff --git a/src/op/variable_access/get_local.c b/src/op/variable_access/get_local.c
index 745a2e7..7c80450 100644
--- a/src/op/variable_access/get_local.c
+++ b/src/op/variable_access/get_local.c
@@ -51,22 +51,17 @@ static int get_f64(struct nw_interp *const i, const void *const data,
static int get_local(const varuint32 local_index, struct nw_interp *const i)
{
- struct nw_frame *fr;
+ struct nw_locals *l;
varuint32 idx;
- for (idx = local_index, fr = i->fp; fr; fr = fr->next)
- if (idx < fr->n_locals)
- break;
-
- if (!fr)
+ if (locals_get(local_index, i, &l, &idx))
{
- LOG("%s: cannot access local variable %lu\n", __func__,
- (unsigned long)local_index);
- i->exception = "local variable index out of bounds";
+ LOG("%s: locals_get failed\n", __func__);
return -1;
}
- static int (*const get[])(struct nw_interp *, const void *, varuint32) =
+ static int (*const get[])(struct nw_interp *, const void *,
+ varuint32) =
{
[VALUE_TYPE_I32] = get_i32,
[VALUE_TYPE_I64] = get_i64,
@@ -74,9 +69,9 @@ static int get_local(const varuint32 local_index, struct nw_interp *const i)
[VALUE_TYPE_F64] = get_f64,
};
- if (get[fr->local_type](i, fr + 1, idx))
+ if (get[l->type](i, l + 1, idx))
{
- LOG("%s: get type %d failed\n", __func__, fr->local_type);
+ LOG("%s: get type %d failed\n", __func__, l->type);
return -1;
}