Browse Source

Remove pointer magic when creating strings

Caedo 2 năm trước cách đây
mục cha
commit
b185d9e701
2 tập tin đã thay đổi với 11 bổ sung14 xóa
  1. 4 7
      vendor/wasm/js/events.odin
  2. 7 7
      vendor/wasm/js/runtime.js

+ 4 - 7
vendor/wasm/js/events.odin

@@ -1,8 +1,6 @@
 //+build js wasm32, js wasm64p32
 package wasm_js_interface
 
-import "core:runtime"
-
 foreign import dom_lib "odin_dom"
 
 Event_Kind :: enum u32 {
@@ -235,6 +233,8 @@ Event :: struct {
 
 			repeat: bool,
 
+			_key_len:  int,
+			_code_len: int,
 			_key_buf:  [KEYBOARD_MAX_KEY_SIZE]byte,
 			_code_buf: [KEYBOARD_MAX_KEY_SIZE]byte,
 		},
@@ -350,11 +350,8 @@ do_event_callback :: proc(user_data: rawptr, callback: proc(e: Event)) {
 		init_event_raw(&event)
 
 		if event.kind == .Key_Up || event.kind == .Key_Down || event.kind == .Key_Press {
-			key := transmute(^runtime.Raw_String) &event.key.key
-			key.data = &event.key._key_buf[0]
-
-			code := transmute(^runtime.Raw_String) &event.key.code
-			code.data = &event.key._code_buf[0] 
+			event.key.key = string(event.key._key_buf[:event.key._key_len]) 
+			event.key.code = string(event.key._code_buf[:event.key._code_len]) 
 		}
 
 		callback(event)

+ 7 - 7
vendor/wasm/js/runtime.js

@@ -1423,13 +1423,11 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement) {
 					wmi.storeI16(off(2), e.button);
 					wmi.storeU16(off(2), e.buttons);
 				} else if (e instanceof KeyboardEvent) {
-					// NOTE: we set string data pointers on the 
-					// native side, so skip those for now and
-					// set only string length
-					const keyPtr = off(W);
-					wmi.storeI32(off(W), e.key.length);
-					const codePtr = off(W);
-					wmi.storeI32(off(W), e.code.length);
+					// Note: those strigs are constructed
+					// on the native side from buffers that
+					// are filled later, so skip them 
+					const keyPtr  = off(W*2, W);
+					const codePtr = off(W*2, W);
 
 					wmi.storeU8(off(1), e.location);
 
@@ -1440,6 +1438,8 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement) {
 
 					wmi.storeU8(off(1), !!e.repeat);
 
+					wmi.storeI32(off(W), e.key.length)
+					wmi.storeI32(off(W), e.code.length)
 					wmi.storeString(off(16, 1), e.key);
 					wmi.storeString(off(16, 1), e.code);
 				} else if (e instanceof WheelEvent) {