makepad-platform 0.3.0

Makepad platform layer
onmessage = async function(e) {
    let thread_info = e.data;
    
    function chars_to_string(chars_ptr, len) {
        let out = "";
        let array = new Uint32Array(thread_info.memory.buffer, chars_ptr, len);
        for (let i = 0; i < len; i ++) {
            out += String.fromCharCode(array[i]);
        }
        return out
    }
    
    let env = {
        memory: thread_info.memory,
        
        js_console_error: (chars_ptr, len) => {
            console.error(chars_to_string(chars_ptr, len))
        },
        
        js_console_log: (chars_ptr, len) => {
            console.log(chars_to_string(chars_ptr, len))
        },
        js_post_signal: (signal_hi, signal_lo) => {
            postMessage({
                message_type: "signal",
                signal_hi,
                signal_lo
            });
        }
    };
    
    WebAssembly.instantiate(thread_info.module, {env}).then(wasm => {
        
        wasm.exports.__stack_pointer.value = thread_info.stack_ptr;
        wasm.exports.__wasm_init_tls(thread_info.tls_ptr);
        
        wasm.exports.wasm_thread_entrypoint(thread_info.closure_ptr);
        
        close();
    }, error => {
        console.error("Cannot instantiate wasm" + error);
    })
}