diff options
| author | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2024-05-22 14:04:36 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2024-06-12 13:38:05 +0200 |
| commit | 4f9a2c7a2d8464b04cc08075a7762c6d457090df (patch) | |
| tree | ae8fe229a3a5ba60d08b74299d0c1850685bda86 /src/op/variable_access/get_local.c | |
| parent | f25b015e5b668028c34974bbb22faa4105c26690 (diff) | |
| download | nanowasm-sync-4f9a2c7a2d8464b04cc08075a7762c6d457090df.tar.gz | |
WIP
Diffstat (limited to 'src/op/variable_access/get_local.c')
| -rw-r--r-- | src/op/variable_access/get_local.c | 19 |
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; } |
