aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2023-03-22 12:18:09 +0100
committerGitHub <noreply@github.com>2023-03-22 12:18:09 +0100
commit5ae44b25dad9be1bcd3bf062f0d2b2fc81f328b8 (patch)
treed8f806db5e61e456046731790b8a9355895b5b42
parente58915e12fdfc499b10adec4f3f0a61c7aa821ea (diff)
parentb2ecb37b358446a2be5e644961e9e7f8552f88d5 (diff)
Merge pull request #2397 from DragosPopse/master
Made most libraries panic on js targets instead of not compiling
-rw-r--r--core/dynlib/lib_js.odin15
-rw-r--r--core/os/os_js.odin277
-rw-r--r--core/thread/thread_js.odin55
-rw-r--r--vendor/wasm/js/dom_all_targets.odin36
-rw-r--r--vendor/wasm/js/events_all_targets.odin288
-rw-r--r--vendor/wasm/js/memory_all_targets.odin14
-rw-r--r--vendor/wasm/js/memory_js.odin (renamed from vendor/wasm/js/memory.odin)0
7 files changed, 683 insertions, 2 deletions
diff --git a/core/dynlib/lib_js.odin b/core/dynlib/lib_js.odin
new file mode 100644
index 000000000..37dab8758
--- /dev/null
+++ b/core/dynlib/lib_js.odin
@@ -0,0 +1,15 @@
+//+build js
+//+private
+package dynlib
+
+_load_library :: proc(path: string, global_symbols := false) -> (Library, bool) {
+ return
+}
+
+_unload_library :: proc(library: Library) -> bool {
+ return
+}
+
+_symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) {
+ return
+}
diff --git a/core/os/os_js.odin b/core/os/os_js.odin
index f2563f217..5d7eb784e 100644
--- a/core/os/os_js.odin
+++ b/core/os/os_js.odin
@@ -1,4 +1,277 @@
+//+build js
package os
-// +build js
-#panic("package os does not support a js target") \ No newline at end of file
+import "core:intrinsics"
+import "core:runtime"
+import "core:unicode/utf16"
+
+is_path_separator :: proc(c: byte) -> bool {
+ return c == '/' || c == '\\'
+}
+
+open :: proc(path: string, mode: int = O_RDONLY, perm: int = 0) -> (Handle, Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+close :: proc(fd: Handle) -> Errno {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+flush :: proc(fd: Handle) -> (err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+
+write :: proc(fd: Handle, data: []byte) -> (int, Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+@(private="file")
+read_console :: proc(handle: Handle, b: []byte) -> (n: int, err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+read :: proc(fd: Handle, data: []byte) -> (int, Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+seek :: proc(fd: Handle, offset: i64, whence: int) -> (i64, Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+file_size :: proc(fd: Handle) -> (i64, Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+@(private)
+MAX_RW :: 1<<30
+
+@(private)
+pread :: proc(fd: Handle, data: []byte, offset: i64) -> (int, Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+@(private)
+pwrite :: proc(fd: Handle, data: []byte, offset: i64) -> (int, Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+read_at :: proc(fd: Handle, data: []byte, offset: i64) -> (n: int, err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+write_at :: proc(fd: Handle, data: []byte, offset: i64) -> (n: int, err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+
+// NOTE(bill): Uses startup to initialize it
+//stdin := get_std_handle(uint(win32.STD_INPUT_HANDLE))
+//stdout := get_std_handle(uint(win32.STD_OUTPUT_HANDLE))
+//stderr := get_std_handle(uint(win32.STD_ERROR_HANDLE))
+
+
+get_std_handle :: proc "contextless" (h: uint) -> Handle {
+ context = runtime.default_context()
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+exists :: proc(path: string) -> bool {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+is_file :: proc(path: string) -> bool {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+is_dir :: proc(path: string) -> bool {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+// NOTE(tetra): GetCurrentDirectory is not thread safe with SetCurrentDirectory and GetFullPathName
+//@private cwd_lock := win32.SRWLOCK{} // zero is initialized
+
+get_current_directory :: proc(allocator := context.allocator) -> string {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+set_current_directory :: proc(path: string) -> (err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+
+change_directory :: proc(path: string) -> (err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+make_directory :: proc(path: string, mode: u32 = 0) -> (err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+remove_directory :: proc(path: string) -> (err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+
+@(private)
+is_abs :: proc(path: string) -> bool {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+@(private)
+fix_long_path :: proc(path: string) -> string {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+link :: proc(old_name, new_name: string) -> (err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+unlink :: proc(path: string) -> (err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+
+rename :: proc(old_path, new_path: string) -> (err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+ftruncate :: proc(fd: Handle, length: i64) -> (err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+truncate :: proc(path: string, length: i64) -> (err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+remove :: proc(name: string) -> Errno {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+pipe :: proc() -> (r, w: Handle, err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+read_dir :: proc(fd: Handle, n: int, allocator := context.allocator) -> (fi: []File_Info, err: Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+Handle :: distinct uintptr
+File_Time :: distinct u64
+Errno :: distinct int
+
+
+INVALID_HANDLE :: ~Handle(0)
+
+
+
+O_RDONLY :: 0x00000
+O_WRONLY :: 0x00001
+O_RDWR :: 0x00002
+O_CREATE :: 0x00040
+O_EXCL :: 0x00080
+O_NOCTTY :: 0x00100
+O_TRUNC :: 0x00200
+O_NONBLOCK :: 0x00800
+O_APPEND :: 0x00400
+O_SYNC :: 0x01000
+O_ASYNC :: 0x02000
+O_CLOEXEC :: 0x80000
+
+
+ERROR_NONE: Errno : 0
+ERROR_FILE_NOT_FOUND: Errno : 2
+ERROR_PATH_NOT_FOUND: Errno : 3
+ERROR_ACCESS_DENIED: Errno : 5
+ERROR_INVALID_HANDLE: Errno : 6
+ERROR_NOT_ENOUGH_MEMORY: Errno : 8
+ERROR_NO_MORE_FILES: Errno : 18
+ERROR_HANDLE_EOF: Errno : 38
+ERROR_NETNAME_DELETED: Errno : 64
+ERROR_FILE_EXISTS: Errno : 80
+ERROR_INVALID_PARAMETER: Errno : 87
+ERROR_BROKEN_PIPE: Errno : 109
+ERROR_BUFFER_OVERFLOW: Errno : 111
+ERROR_INSUFFICIENT_BUFFER: Errno : 122
+ERROR_MOD_NOT_FOUND: Errno : 126
+ERROR_PROC_NOT_FOUND: Errno : 127
+ERROR_DIR_NOT_EMPTY: Errno : 145
+ERROR_ALREADY_EXISTS: Errno : 183
+ERROR_ENVVAR_NOT_FOUND: Errno : 203
+ERROR_MORE_DATA: Errno : 234
+ERROR_OPERATION_ABORTED: Errno : 995
+ERROR_IO_PENDING: Errno : 997
+ERROR_NOT_FOUND: Errno : 1168
+ERROR_PRIVILEGE_NOT_HELD: Errno : 1314
+WSAEACCES: Errno : 10013
+WSAECONNRESET: Errno : 10054
+
+// Windows reserves errors >= 1<<29 for application use
+ERROR_FILE_IS_PIPE: Errno : 1<<29 + 0
+ERROR_FILE_IS_NOT_DIR: Errno : 1<<29 + 1
+ERROR_NEGATIVE_OFFSET: Errno : 1<<29 + 2
+
+// "Argv" arguments converted to Odin strings
+args := _alloc_command_line_arguments()
+
+
+
+
+
+last_write_time :: proc(fd: Handle) -> (File_Time, Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+last_write_time_by_name :: proc(name: string) -> (File_Time, Errno) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+
+heap_alloc :: proc(size: int, zero_memory := true) -> rawptr {
+ unimplemented("core:os procedure not supported on JS target")
+}
+heap_resize :: proc(ptr: rawptr, new_size: int) -> rawptr {
+ unimplemented("core:os procedure not supported on JS target")
+}
+heap_free :: proc(ptr: rawptr) {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+get_page_size :: proc() -> int {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+@(private)
+_processor_core_count :: proc() -> int {
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+exit :: proc "contextless" (code: int) -> ! {
+ context = runtime.default_context()
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+
+current_thread_id :: proc "contextless" () -> int {
+ context = runtime.default_context()
+ unimplemented("core:os procedure not supported on JS target")
+}
+
+
+
+_alloc_command_line_arguments :: proc() -> []string {
+ return nil
+}
+
diff --git a/core/thread/thread_js.odin b/core/thread/thread_js.odin
new file mode 100644
index 000000000..5821ab238
--- /dev/null
+++ b/core/thread/thread_js.odin
@@ -0,0 +1,55 @@
+//+build js
+package thread
+
+import "core:intrinsics"
+import "core:sync"
+import "core:mem"
+
+Thread_State :: enum u8 {
+ Started,
+ Joined,
+ Done,
+}
+
+Thread_Os_Specific :: struct {
+ flags: bit_set[Thread_State; u8],
+}
+
+_thread_priority_map := [Thread_Priority]i32{
+ .Normal = 0,
+ .Low = -2,
+ .High = +2,
+}
+
+_create :: proc(procedure: Thread_Proc, priority := Thread_Priority.Normal) -> ^Thread {
+ unimplemented("core:thread procedure not supported on js target")
+}
+
+_start :: proc(t: ^Thread) {
+ unimplemented("core:thread procedure not supported on js target")
+}
+
+_is_done :: proc(t: ^Thread) -> bool {
+ unimplemented("core:thread procedure not supported on js target")
+}
+
+_join :: proc(t: ^Thread) {
+ unimplemented("core:thread procedure not supported on js target")
+}
+
+_join_multiple :: proc(threads: ..^Thread) {
+ unimplemented("core:thread procedure not supported on js target")
+}
+
+_destroy :: proc(thread: ^Thread) {
+ unimplemented("core:thread procedure not supported on js target")
+}
+
+_terminate :: proc(using thread : ^Thread, exit_code: int) {
+ unimplemented("core:thread procedure not supported on js target")
+}
+
+_yield :: proc() {
+ unimplemented("core:thread procedure not supported on js target")
+}
+
diff --git a/vendor/wasm/js/dom_all_targets.odin b/vendor/wasm/js/dom_all_targets.odin
new file mode 100644
index 000000000..7b3ad1a64
--- /dev/null
+++ b/vendor/wasm/js/dom_all_targets.odin
@@ -0,0 +1,36 @@
+//+build !js
+package wasm_js_interface
+
+import "core:runtime"
+
+
+get_element_value_string :: proc "contextless" (id: string, buf: []byte) -> string {
+ context = runtime.default_context()
+ panic("vendor:wasm/js not supported on non JS targets")
+}
+
+
+get_element_min_max :: proc "contextless" (id: string) -> (min, max: f64) {
+ context = runtime.default_context()
+ panic("vendor:wasm/js not supported on non JS targets")
+}
+
+
+Rect :: struct {
+ x, y, width, height: f64,
+}
+
+get_bounding_client_rect :: proc "contextless" (id: string) -> (rect: Rect) {
+ context = runtime.default_context()
+ panic("vendor:wasm/js not supported on non JS targets")
+}
+
+window_get_rect :: proc "contextless" () -> (rect: Rect) {
+ context = runtime.default_context()
+ panic("vendor:wasm/js not supported on non JS targets")
+}
+
+window_get_scroll :: proc "contextless" () -> (x, y: f64) {
+ context = runtime.default_context()
+ panic("vendor:wasm/js not supported on non JS targets")
+}
diff --git a/vendor/wasm/js/events_all_targets.odin b/vendor/wasm/js/events_all_targets.odin
new file mode 100644
index 000000000..2bc7e8ceb
--- /dev/null
+++ b/vendor/wasm/js/events_all_targets.odin
@@ -0,0 +1,288 @@
+//+build !js
+package wasm_js_interface
+
+
+Event_Kind :: enum u32 {
+ Invalid,
+
+ Load,
+ Unload,
+ Error,
+ Resize,
+ Visibility_Change,
+ Fullscreen_Change,
+ Fullscreen_Error,
+
+ Click,
+ Double_Click,
+ Mouse_Move,
+ Mouse_Over,
+ Mouse_Out,
+ Mouse_Up,
+ Mouse_Down,
+
+ Key_Up,
+ Key_Down,
+ Key_Press,
+
+ Scroll,
+ Wheel,
+
+ Focus,
+ Submit,
+ Blur,
+ Change,
+ Select,
+
+ Animation_Start,
+ Animation_End,
+ Animation_Iteration,
+ Animation_Cancel,
+
+ Copy,
+ Cut,
+ Paste,
+
+ // Drag,
+ // Drag_Start,
+ // Drag_End,
+ // Drag_Enter,
+ // Drag_Leave,
+ // Drag_Over,
+ // Drop,
+
+ Pointer_Cancel,
+ Pointer_Down,
+ Pointer_Enter,
+ Pointer_Leave,
+ Pointer_Move,
+ Pointer_Over,
+ Pointer_Up,
+ Got_Pointer_Capture,
+ Lost_Pointer_Capture,
+ Pointer_Lock_Change,
+ Pointer_Lock_Error,
+
+ Selection_Change,
+ Selection_Start,
+
+ Touch_Cancel,
+ Touch_End,
+ Touch_Move,
+ Touch_Start,
+
+ Transition_Start,
+ Transition_End,
+ Transition_Run,
+ Transition_Cancel,
+
+ Context_Menu,
+
+ Custom,
+
+}
+event_kind_string := [Event_Kind]string{
+ .Invalid = "",
+
+ .Load = "load",
+ .Unload = "unload",
+ .Error = "error",
+ .Resize = "resize",
+ .Visibility_Change = "visibilitychange",
+ .Fullscreen_Change = "fullscreenchange",
+ .Fullscreen_Error = "fullscreenerror",
+
+ .Click = "click",
+ .Double_Click = "dblclick",
+ .Mouse_Move = "mousemove",
+ .Mouse_Over = "mouseover",
+ .Mouse_Out = "mouseout",
+ .Mouse_Up = "mouseup",
+ .Mouse_Down = "mousedown",
+
+ .Key_Up = "keyup",
+ .Key_Down = "keydown",
+ .Key_Press = "keypress",
+
+ .Scroll = "scroll",
+ .Wheel = "wheel",
+
+ .Focus = "focus",
+ .Submit = "submit",
+ .Blur = "blur",
+ .Change = "change",
+ .Select = "select",
+
+ .Animation_Start = "animationstart",
+ .Animation_End = "animationend",
+ .Animation_Iteration = "animationiteration",
+ .Animation_Cancel = "animationcancel",
+
+ .Copy = "copy",
+ .Cut = "cut",
+ .Paste = "paste",
+
+ // .Drag, = "drag",
+ // .Drag_Start, = "dragstart",
+ // .Drag_End, = "dragend",
+ // .Drag_Enter, = "dragenter",
+ // .Drag_Leave, = "dragleave",
+ // .Drag_Over, = "dragover",
+ // .Drop, = "drop",
+
+ .Pointer_Cancel = "pointercancel",
+ .Pointer_Down = "pointerdown",
+ .Pointer_Enter = "pointerenter",
+ .Pointer_Leave = "pointerleave",
+ .Pointer_Move = "pointermove",
+ .Pointer_Over = "pointerover",
+ .Pointer_Up = "pointerup",
+ .Got_Pointer_Capture = "gotpointercapture",
+ .Lost_Pointer_Capture = "lostpointercapture",
+ .Pointer_Lock_Change = "pointerlockchange",
+ .Pointer_Lock_Error = "pointerlockerror",
+
+ .Selection_Change = "selectionchange",
+ .Selection_Start = "selectionstart",
+
+ .Transition_Start = "transitionstart",
+ .Transition_End = "transitionend",
+ .Transition_Run = "transitionrun",
+ .Transition_Cancel = "transitioncancel",
+
+ .Touch_Cancel = "touchcancel",
+ .Touch_End = "touchend",
+ .Touch_Move = "touchmove",
+ .Touch_Start = "touchstart",
+
+ .Context_Menu = "contextmenu",
+
+ .Custom = "?custom?",
+}
+
+Delta_Mode :: enum u32 {
+ Pixel = 0,
+ Line = 1,
+ Page = 2,
+}
+
+Key_Location :: enum u8 {
+ Standard = 0,
+ Left = 1,
+ Right = 2,
+ Numpad = 3,
+}
+
+KEYBOARD_MAX_KEY_SIZE :: 16
+KEYBOARD_MAX_CODE_SIZE :: 16
+
+Event_Target_Kind :: enum u32 {
+ Element = 0,
+ Document = 1,
+ Window = 2,
+}
+
+Event_Phase :: enum u8 {
+ None = 0,
+ Capturing_Phase = 1,
+ At_Target = 2,
+ Bubbling_Phase = 3,
+}
+
+Event_Option :: enum u8 {
+ Bubbles = 0,
+ Cancelable = 1,
+ Composed = 2,
+}
+Event_Options :: distinct bit_set[Event_Option; u8]
+
+Event :: struct {
+ kind: Event_Kind,
+ target_kind: Event_Target_Kind,
+ current_target_kind: Event_Target_Kind,
+ id: string,
+ timestamp: f64,
+
+ phase: Event_Phase,
+ options: Event_Options,
+ is_composing: bool,
+ is_trusted: bool,
+
+ using data: struct #raw_union #align 8 {
+ scroll: struct {
+ delta: [2]f64,
+ },
+ visibility_change: struct {
+ is_visible: bool,
+ },
+ wheel: struct {
+ delta: [3]f64,
+ delta_mode: Delta_Mode,
+ },
+
+ key: struct {
+ key: string,
+ code: string,
+ location: Key_Location,
+
+ ctrl: bool,
+ shift: bool,
+ alt: bool,
+ meta: bool,
+
+ repeat: bool,
+
+ _key_buf: [KEYBOARD_MAX_KEY_SIZE]byte,
+ _code_buf: [KEYBOARD_MAX_KEY_SIZE]byte,
+ },
+
+ mouse: struct {
+ screen: [2]i64,
+ client: [2]i64,
+ offset: [2]i64,
+ page: [2]i64,
+ movement: [2]i64,
+
+ ctrl: bool,
+ shift: bool,
+ alt: bool,
+ meta: bool,
+
+ button: i16,
+ buttons: bit_set[0..<16; u16],
+ },
+ },
+
+
+ user_data: rawptr,
+ callback: proc(e: Event),
+}
+
+
+add_event_listener :: proc(id: string, kind: Event_Kind, user_data: rawptr, callback: proc(e: Event), use_capture := false) -> bool {
+ panic("vendor:wasm/js not supported on non JS targets")
+}
+
+remove_event_listener :: proc(id: string, kind: Event_Kind, user_data: rawptr, callback: proc(e: Event)) -> bool {
+ panic("vendor:wasm/js not supported on non JS targets")
+}
+
+add_window_event_listener :: proc(kind: Event_Kind, user_data: rawptr, callback: proc(e: Event), use_capture := false) -> bool {
+ panic("vendor:wasm/js not supported on non JS targets")
+}
+
+remove_window_event_listener :: proc(kind: Event_Kind, user_data: rawptr, callback: proc(e: Event)) -> bool {
+ panic("vendor:wasm/js not supported on non JS targets")
+}
+
+remove_event_listener_from_event :: proc(e: Event) -> bool {
+ panic("vendor:wasm/js not supported on non JS targets")
+}
+
+add_custom_event_listener :: proc(id: string, name: string, user_data: rawptr, callback: proc(e: Event), use_capture := false) -> bool {
+ panic("vendor:wasm/js not supported on non JS targets")
+}
+remove_custom_event_listener :: proc(id: string, name: string, user_data: rawptr, callback: proc(e: Event)) -> bool {
+ panic("vendor:wasm/js not supported on non JS targets")
+}
+
diff --git a/vendor/wasm/js/memory_all_targets.odin b/vendor/wasm/js/memory_all_targets.odin
new file mode 100644
index 000000000..e1de6a696
--- /dev/null
+++ b/vendor/wasm/js/memory_all_targets.odin
@@ -0,0 +1,14 @@
+//+build !js
+package wasm_js_interface
+
+import "core:mem"
+
+PAGE_SIZE :: 64 * 1024
+page_alloc :: proc(page_count: int) -> (data: []byte, err: mem.Allocator_Error) {
+ panic("vendor:wasm/js not supported on non-js targets")
+}
+
+page_allocator :: proc() -> mem.Allocator {
+ panic("vendor:wasm/js not supported on non-js targets")
+}
+
diff --git a/vendor/wasm/js/memory.odin b/vendor/wasm/js/memory_js.odin
index efbf89445..efbf89445 100644
--- a/vendor/wasm/js/memory.odin
+++ b/vendor/wasm/js/memory_js.odin