sysjs: automatically cast numbers to f64 & remove dead code

This commit is contained in:
Ali Chraghi 2022-12-25 16:47:37 +03:30 committed by Stephen Gutekanst
parent 2de36ad75b
commit 7df12a0cae
3 changed files with 23 additions and 24 deletions

View file

@ -70,24 +70,24 @@ pub const Context = struct {
pub fn createPlayer(self: *Context, device: main.Device, writeFn: main.WriteFn, options: main.Player.Options) !backends.BackendPlayer { pub fn createPlayer(self: *Context, device: main.Device, writeFn: main.WriteFn, options: main.Player.Options) !backends.BackendPlayer {
const context_options = js.createMap(); const context_options = js.createMap();
defer context_options.deinit(); defer context_options.deinit();
context_options.set("sampleRate", js.createNumber(@intToFloat(f64, options.sample_rate))); context_options.set("sampleRate", js.createNumber(options.sample_rate));
const audio_context = js.constructType("AudioContext", &.{context_options.toValue()}); const audio_context = js.constructType("AudioContext", &.{context_options.toValue()});
const gain_node = audio_context.call("createGain", &.{ const gain_node = audio_context.call("createGain", &.{
js.createNumber(1), js.createNumber(1),
js.createNumber(0), js.createNumber(0),
js.createNumber(@intToFloat(f64, device.channels.len)), js.createNumber(device.channels.len),
}).view(.object); }).view(.object);
const process_node = audio_context.call("createScriptProcessor", &.{ const process_node = audio_context.call("createScriptProcessor", &.{
js.createNumber(channel_size), js.createNumber(channel_size),
js.createNumber(@intToFloat(f64, device.channels.len)), js.createNumber(device.channels.len),
}).view(.object); }).view(.object);
var player = try self.allocator.create(Player); var player = try self.allocator.create(Player);
errdefer self.allocator.destroy(player); errdefer self.allocator.destroy(player);
var captures = try self.allocator.alloc(js.Value, 1); var captures = try self.allocator.alloc(js.Value, 1);
captures[0] = js.createNumber(@intToFloat(f64, @ptrToInt(player))); captures[0] = js.createNumber(@ptrToInt(player));
const document = js.global().get("document").view(.object); const document = js.global().get("document").view(.object);
defer document.deinit(); defer document.deinit();
@ -190,7 +190,7 @@ pub const Player = struct {
self.buf_js.copyBytes(self.buf[i * channel_size_bytes .. (i + 1) * channel_size_bytes]); self.buf_js.copyBytes(self.buf[i * channel_size_bytes .. (i + 1) * channel_size_bytes]);
const buf_f32_js = js.constructType("Float32Array", &.{ self.buf_js.get("buffer"), self.buf_js.get("byteOffset"), js.createNumber(channel_size) }); const buf_f32_js = js.constructType("Float32Array", &.{ self.buf_js.get("buffer"), self.buf_js.get("byteOffset"), js.createNumber(channel_size) });
defer buf_f32_js.deinit(); defer buf_f32_js.deinit();
_ = output_buffer.call("copyToChannel", &.{ buf_f32_js.toValue(), js.createNumber(@intToFloat(f64, i)) }); _ = output_buffer.call("copyToChannel", &.{ buf_f32_js.toValue(), js.createNumber(i) });
} }
return js.createUndefined(); return js.createUndefined();

View file

@ -131,7 +131,6 @@ const sysjs = {
default: default:
return 0; return 0;
} }
break;
case "number": case "number":
return 1; return 1;
case "boolean": case "boolean":
@ -173,27 +172,21 @@ const sysjs = {
} }
}, },
readObject(block, memory) { readObject(block) {
switch (block.getU8(0)) { switch (block.getU8(0)) {
case 0: case 0:
case 6: case 6:
return values[block.getU64(8)]; return values[block.getU64(8)];
break;
case 1: case 1:
return block.getF64(8); return block.getF64(8);
break;
case 2: case 2:
return Boolean(block.getU8(8)); return Boolean(block.getU8(8));
break;
case 3: case 3:
return values[block.getU64(8)]; return values[block.getU64(8)];
break;
case 4: case 4:
return null; return null;
break;
case 5: case 5:
return undefined; return undefined;
break;
} }
}, },
@ -232,8 +225,7 @@ const sysjs = {
zigSetProperty(id, name, len, set_ptr) { zigSetProperty(id, name, len, set_ptr) {
let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer);
values[id][memory.getString(name, len)] = sysjs.readObject( values[id][memory.getString(name, len)] = sysjs.readObject(
memory.slice(set_ptr), memory.slice(set_ptr)
memory
); );
}, },
@ -249,7 +241,7 @@ const sysjs = {
zigSetIndex(id, index, set_ptr) { zigSetIndex(id, index, set_ptr) {
let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer);
values[id][index] = sysjs.readObject(memory.slice(set_ptr), memory); values[id][index] = sysjs.readObject(memory.slice(set_ptr));
}, },
zigDeleteIndex(id, index) { zigDeleteIndex(id, index) {
@ -289,15 +281,15 @@ const sysjs = {
zigValueEqual(val, other) { zigValueEqual(val, other) {
let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer);
const val_js = sysjs.readObject(memory.slice(val), memory); const val_js = sysjs.readObject(memory.slice(val));
const other_js = sysjs.readObject(memory.slice(other), memory); const other_js = sysjs.readObject(memory.slice(other));
return val_js === other_js; return val_js === other_js;
}, },
zigValueInstanceOf(val, other) { zigValueInstanceOf(val, other) {
let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer);
const val_js = sysjs.readObject(memory.slice(val), memory); const val_js = sysjs.readObject(memory.slice(val));
const other_js = sysjs.readObject(memory.slice(other), memory); const other_js = sysjs.readObject(memory.slice(other));
return val_js instanceof other_js; return val_js instanceof other_js;
}, },
@ -305,7 +297,7 @@ const sysjs = {
let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer);
let argv = []; let argv = [];
for (let i = 0; i < args_len; i += 1) { for (let i = 0; i < args_len; i += 1) {
argv.push(sysjs.readObject(memory.slice(args + i * 16), memory)); argv.push(sysjs.readObject(memory.slice(args + i * 16)));
} }
let result = func.apply(this_param, argv); let result = func.apply(this_param, argv);
@ -349,7 +341,7 @@ const sysjs = {
let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer);
let argv = []; let argv = [];
for (let i = 0; i < args_len; i += 1) { for (let i = 0; i < args_len; i += 1) {
argv.push(sysjs.readObject(memory.slice(args + i * 16), memory)); argv.push(sysjs.readObject(memory.slice(args + i * 16)));
} }
return sysjs.addValue(new values[id](...argv)); return sysjs.addValue(new values[id](...argv));

View file

@ -228,8 +228,15 @@ pub fn createString(string: []const u8) String {
return .{ .ref = js.zigCreateString(string.ptr, @intCast(u32, string.len)) }; return .{ .ref = js.zigCreateString(string.ptr, @intCast(u32, string.len)) };
} }
pub fn createNumber(num: f64) Value { pub fn createNumber(num: anytype) Value {
return .{ .tag = .num, .val = .{ .num = num } }; switch (@typeInfo(@TypeOf(num))) {
.Int,
.Float,
.ComptimeInt,
.ComptimeFloat,
=> return .{ .tag = .num, .val = .{ .num = std.math.lossyCast(f64, num) } },
else => @compileError("expected integer, found " ++ @typeName(@TypeOf(num))),
}
} }
pub fn createBool(val: bool) Value { pub fn createBool(val: bool) Value {