commit 9166df41d0892f915cd386989fb25f4ffda4408e
parent 959e3cf982e564cd5f4791fe3205faeda805935f
Author: William Casarin <jb55@jb55.com>
Date: Thu, 21 Dec 2017 06:44:12 -0800
op_size: fix
Diffstat:
3 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/script.c b/script.c
@@ -479,9 +479,9 @@ script_eval(const u8 *script, size_t script_size, struct stack *stack,
// (in -- in size)
if (stack_size(stack) < 1)
SCRIPTERR("INVALID_STACK_OPERATION");
- struct num sn;
- sn_from_int(stack_size(stack) - 1, &sn);
- struct val val = sn_to_val(&sn);
+ struct val val = stack_top_val(stack, -1);
+ u32 size = val_size(val);
+ val = val_from_int(size);
stack_push_val(stack, val);
}
break;
diff --git a/val.c b/val.c
@@ -159,6 +159,20 @@ val_copy(struct val a) {
}
}
+u32
+val_size(struct val val) {
+ u8 *data;
+ u32 len;
+
+ switch (val.type) {
+ case VT_DATA:
+ data = byte_pool_get(val.ind, &len);
+ return len;
+ default:
+ return 1;
+ }
+}
+
/* struct val */
/* val_int(s64 n) { */
/* struct val val; */
diff --git a/val.h b/val.h
@@ -32,6 +32,7 @@ struct val {
STATIC_ASSERT(sizeof(struct val) <= 4, val_doesnt_fit_in_stack);
struct val val_copy(struct val a);
+u32 val_size(struct val val);
int
val_eq(struct val a, struct val b, int require_minimal);