add wf and w16 fns to blob
This commit is contained in:
@@ -195,6 +195,46 @@ static JSValue js_blob_write_number(JSContext *ctx, JSValueConst this_val,
|
|||||||
return JS_NULL;
|
return JS_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// blob.w16(value) - write a 16-bit value (short)
|
||||||
|
static JSValue js_blob_w16(JSContext *ctx, JSValueConst this_val,
|
||||||
|
int argc, JSValueConst *argv) {
|
||||||
|
if (argc < 1)
|
||||||
|
return JS_ThrowTypeError(ctx, "w16(value) requires 1 argument");
|
||||||
|
|
||||||
|
blob *bd = js2blob(ctx, this_val);
|
||||||
|
if (!bd)
|
||||||
|
return JS_ThrowTypeError(ctx, "w16: not called on a blob");
|
||||||
|
|
||||||
|
int32_t value;
|
||||||
|
if (JS_ToInt32(ctx, &value, argv[0]) < 0) return JS_EXCEPTION;
|
||||||
|
|
||||||
|
int16_t short_val = (int16_t)value;
|
||||||
|
if (blob_write_bytes(bd, &short_val, sizeof(int16_t)) < 0)
|
||||||
|
return JS_ThrowTypeError(ctx, "w16: cannot write to stone blob or OOM");
|
||||||
|
|
||||||
|
return JS_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// blob.wf(value) - write a float (32-bit)
|
||||||
|
static JSValue js_blob_wf(JSContext *ctx, JSValueConst this_val,
|
||||||
|
int argc, JSValueConst *argv) {
|
||||||
|
if (argc < 1)
|
||||||
|
return JS_ThrowTypeError(ctx, "wf(value) requires 1 argument");
|
||||||
|
|
||||||
|
blob *bd = js2blob(ctx, this_val);
|
||||||
|
if (!bd)
|
||||||
|
return JS_ThrowTypeError(ctx, "wf: not called on a blob");
|
||||||
|
|
||||||
|
double d;
|
||||||
|
if (JS_ToFloat64(ctx, &d, argv[0]) < 0) return JS_EXCEPTION;
|
||||||
|
|
||||||
|
float f = (float)d;
|
||||||
|
if (blob_write_bytes(bd, &f, sizeof(float)) < 0)
|
||||||
|
return JS_ThrowTypeError(ctx, "wf: cannot write to stone blob or OOM");
|
||||||
|
|
||||||
|
return JS_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// blob.write_fit(value, len)
|
// blob.write_fit(value, len)
|
||||||
static JSValue js_blob_write_fit(JSContext *ctx, JSValueConst this_val,
|
static JSValue js_blob_write_fit(JSContext *ctx, JSValueConst this_val,
|
||||||
int argc, JSValueConst *argv) {
|
int argc, JSValueConst *argv) {
|
||||||
@@ -471,6 +511,8 @@ static const JSCFunctionListEntry js_blob_funcs[] = {
|
|||||||
JS_CFUNC_DEF("write_fit", 2, js_blob_write_fit),
|
JS_CFUNC_DEF("write_fit", 2, js_blob_write_fit),
|
||||||
JS_CFUNC_DEF("write_text", 1, js_blob_write_text),
|
JS_CFUNC_DEF("write_text", 1, js_blob_write_text),
|
||||||
JS_CFUNC_DEF("write_pad", 1, js_blob_write_pad),
|
JS_CFUNC_DEF("write_pad", 1, js_blob_write_pad),
|
||||||
|
JS_CFUNC_DEF("wf", 1, js_blob_wf),
|
||||||
|
JS_CFUNC_DEF("w16", 1, js_blob_w16),
|
||||||
|
|
||||||
// Read methods
|
// Read methods
|
||||||
JS_CFUNC_DEF("read_logical", 1, js_blob_read_logical),
|
JS_CFUNC_DEF("read_logical", 1, js_blob_read_logical),
|
||||||
@@ -516,7 +558,7 @@ void *js_get_blob_data(JSContext *js, size_t *size, JSValue v)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (b->length % 8 != 0) {
|
if (b->length % 8 != 0) {
|
||||||
JS_ThrowReferenceError(js, "attempted to read data from a non-byte aligned blob");
|
JS_ThrowReferenceError(js, "attempted to read data from a non-byte aligned blob [length is %d]", b->length);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1441,8 +1441,8 @@ void JS_FreeRuntime(JSRuntime *rt)
|
|||||||
printf("Secondary object leaks: %d\n", count);
|
printf("Secondary object leaks: %d\n", count);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (!list_empty(&rt->gc_obj_list))
|
// if (!list_empty(&rt->gc_obj_list))
|
||||||
printf("Object leaks!\n");
|
// printf("Object leaks!\n");
|
||||||
// assert(list_empty(&rt->gc_obj_list));
|
// assert(list_empty(&rt->gc_obj_list));
|
||||||
|
|
||||||
/* free the classes */
|
/* free the classes */
|
||||||
|
|||||||
Reference in New Issue
Block a user