From c33f635536e1a9d28382b54ea0c137dcd4a1155f Mon Sep 17 00:00:00 2001 From: Judah Caruso Date: Wed, 21 May 2025 15:02:30 -0600 Subject: [PATCH] separate out base modules --- _run_all_tests.jai | 4 +- array/module.jai | 9 ++ array.jai => array/static_array.jai | 7 +- base.jai | 29 ------ encoding/json.jai | 14 ++- math/vec.jai | 39 +++----- memory.jai => memory/module.jai | 47 +++++++-- macros.jai => meta/macros.jai | 12 ++- meta/module.jai | 49 +++++++++ module.jai | 19 ---- test/module.jai | 19 ++-- {hmm => thirdparty/hmm}/HandmadeMath.h | 0 {hmm => thirdparty/hmm}/README | 0 {hmm => thirdparty/hmm}/examples/degrees.jai | 0 {hmm => thirdparty/hmm}/examples/radians.jai | 0 {hmm => thirdparty/hmm}/examples/turns.jai | 0 {hmm => thirdparty/hmm}/generate.jai | 0 {hmm => thirdparty/hmm}/hmm_nosimd.jai | 0 {hmm => thirdparty/hmm}/hmm_simd.jai | 0 .../hmm}/linux/.need-to-run-generate | 0 .../hmm}/mac/hmm_degrees_nosimd.a | Bin .../hmm}/mac/hmm_degrees_nosimd.dylib | Bin .../hmm}/mac/hmm_degrees_simd.a | Bin .../hmm}/mac/hmm_degrees_simd.dylib | Bin .../hmm}/mac/hmm_radians_nosimd.a | Bin .../hmm}/mac/hmm_radians_nosimd.dylib | Bin .../hmm}/mac/hmm_radians_simd.a | Bin .../hmm}/mac/hmm_radians_simd.dylib | Bin .../hmm}/mac/hmm_turns_nosimd.a | Bin .../hmm}/mac/hmm_turns_nosimd.dylib | Bin {hmm => thirdparty/hmm}/mac/hmm_turns_simd.a | Bin .../hmm}/mac/hmm_turns_simd.dylib | Bin {hmm => thirdparty/hmm}/module.jai | 0 .../hmm}/win/.need-to-run-generate | 0 {raylib => thirdparty/raylib}/README | 0 .../raylib}/examples/basic-window.jai | 0 .../raylib}/examples/input-keys.jai | 0 {raylib => thirdparty/raylib}/generate.jai | 0 {raylib => thirdparty/raylib}/lib/raylib.h | 0 {raylib => thirdparty/raylib}/lib/raymath.h | 0 {raylib => thirdparty/raylib}/lib/rlgl.h | 0 .../raylib}/linux/libraygui.a | Bin .../raylib}/linux/libraygui.so | Bin .../raylib}/linux/libraylib.a | Bin .../raylib}/linux/libraylib.so | Bin .../raylib}/linux/libraylib.so.5.5.0 | Bin .../raylib}/linux/libraylib.so.550 | Bin {raylib => thirdparty/raylib}/mac/libraygui.a | Bin .../raylib}/mac/libraygui.dylib | Bin .../raylib}/mac/libraylib.5.5.0.dylib | Bin .../raylib}/mac/libraylib.550.dylib | Bin {raylib => thirdparty/raylib}/mac/libraylib.a | Bin .../raylib}/mac/libraylib.dylib | Bin {raylib => thirdparty/raylib}/module.jai | 0 {raylib => thirdparty/raylib}/raylib.jai | 0 {raylib => thirdparty/raylib}/rlgl/module.jai | 0 {raylib => thirdparty/raylib}/rlgl/rlgl.jai | 0 .../raylib}/wasm/libraygui.a | Bin .../raylib}/wasm/libraylib.a | Bin .../raylib}/win/libraygui.dll | Bin .../raylib}/win/libraygui.lib | Bin .../raylib}/win/librayguidll.lib | Bin .../raylib}/win/libraylib.dll | Bin .../raylib}/win/libraylib.lib | Bin .../raylib}/win/libraylibdll.lib | Bin .../remotery}/examples/it-works.jai | 0 .../remotery}/generate.jai | 0 .../remotery}/lib/Remotery.c | 0 .../remotery}/lib/Remotery.h | 0 .../remotery}/lib/RemoteryMetal.mm | 0 .../remotery}/mac/remotery.a | Bin .../remotery}/mac/remotery.dylib | Bin {remotery => thirdparty/remotery}/module.jai | 0 .../remotery}/remotery.jai | 0 .../remotery}/vis/Code/Console.js | 0 .../remotery}/vis/Code/DataViewReader.js | 0 .../remotery}/vis/Code/GLCanvas.js | 0 .../remotery}/vis/Code/GridWindow.js | 0 .../remotery}/vis/Code/MouseInteraction.js | 0 .../remotery}/vis/Code/NameMap.js | 0 .../remotery}/vis/Code/PixelTimeRange.js | 0 .../remotery}/vis/Code/Remotery.js | 0 .../remotery}/vis/Code/SampleGlobals.js | 0 .../remotery}/vis/Code/Shaders/Grid.js | 0 .../remotery}/vis/Code/Shaders/Shared.js | 0 .../remotery}/vis/Code/Shaders/Timeline.js | 0 .../remotery}/vis/Code/Shaders/Window.js | 0 .../remotery}/vis/Code/ThreadFrame.js | 0 .../remotery}/vis/Code/TimelineMarkers.js | 0 .../remotery}/vis/Code/TimelineRow.js | 0 .../remotery}/vis/Code/TimelineWindow.js | 0 .../remotery}/vis/Code/TitleWindow.js | 0 .../remotery}/vis/Code/TraceDrop.js | 0 .../remotery}/vis/Code/WebGL.js | 0 .../remotery}/vis/Code/WebGLFont.js | 0 .../remotery}/vis/Code/WebSocketConnection.js | 0 .../Fonts/FiraCode/FiraCode-Regular.ttf | Bin .../vis/Styles/Fonts/FiraCode/LICENSE | 0 .../remotery}/vis/Styles/Remotery.css | 0 .../extern/BrowserLib/Core/Code/Animation.js | 0 .../vis/extern/BrowserLib/Core/Code/Bind.js | 0 .../extern/BrowserLib/Core/Code/Convert.js | 0 .../vis/extern/BrowserLib/Core/Code/Core.js | 0 .../vis/extern/BrowserLib/Core/Code/DOM.js | 0 .../extern/BrowserLib/Core/Code/Keyboard.js | 0 .../extern/BrowserLib/Core/Code/LocalStore.js | 0 .../vis/extern/BrowserLib/Core/Code/Mouse.js | 0 .../BrowserLib/Core/Code/MurmurHash3.js | 0 .../BrowserLib/WindowManager/Code/Button.js | 0 .../BrowserLib/WindowManager/Code/ComboBox.js | 0 .../WindowManager/Code/Container.js | 0 .../BrowserLib/WindowManager/Code/EditBox.js | 0 .../BrowserLib/WindowManager/Code/Grid.js | 0 .../BrowserLib/WindowManager/Code/Label.js | 0 .../BrowserLib/WindowManager/Code/Treeview.js | 0 .../WindowManager/Code/TreeviewItem.js | 0 .../BrowserLib/WindowManager/Code/Window.js | 0 .../WindowManager/Code/WindowManager.js | 0 .../WindowManager/Styles/WindowManager.css | 0 .../remotery}/vis/index.html | 0 types/module.jai | 39 ++++++++ utils.jai | 93 ------------------ 122 files changed, 182 insertions(+), 198 deletions(-) create mode 100644 array/module.jai rename array.jai => array/static_array.jai (94%) delete mode 100644 base.jai rename memory.jai => memory/module.jai (78%) rename macros.jai => meta/macros.jai (97%) create mode 100644 meta/module.jai delete mode 100644 module.jai rename {hmm => thirdparty/hmm}/HandmadeMath.h (100%) rename {hmm => thirdparty/hmm}/README (100%) rename {hmm => thirdparty/hmm}/examples/degrees.jai (100%) rename {hmm => thirdparty/hmm}/examples/radians.jai (100%) rename {hmm => thirdparty/hmm}/examples/turns.jai (100%) rename {hmm => thirdparty/hmm}/generate.jai (100%) rename {hmm => thirdparty/hmm}/hmm_nosimd.jai (100%) rename {hmm => thirdparty/hmm}/hmm_simd.jai (100%) rename {hmm => thirdparty/hmm}/linux/.need-to-run-generate (100%) rename {hmm => thirdparty/hmm}/mac/hmm_degrees_nosimd.a (100%) rename {hmm => thirdparty/hmm}/mac/hmm_degrees_nosimd.dylib (100%) rename {hmm => thirdparty/hmm}/mac/hmm_degrees_simd.a (100%) rename {hmm => thirdparty/hmm}/mac/hmm_degrees_simd.dylib (100%) rename {hmm => thirdparty/hmm}/mac/hmm_radians_nosimd.a (100%) rename {hmm => thirdparty/hmm}/mac/hmm_radians_nosimd.dylib (100%) rename {hmm => thirdparty/hmm}/mac/hmm_radians_simd.a (100%) rename {hmm => thirdparty/hmm}/mac/hmm_radians_simd.dylib (100%) rename {hmm => thirdparty/hmm}/mac/hmm_turns_nosimd.a (100%) rename {hmm => thirdparty/hmm}/mac/hmm_turns_nosimd.dylib (100%) rename {hmm => thirdparty/hmm}/mac/hmm_turns_simd.a (100%) rename {hmm => thirdparty/hmm}/mac/hmm_turns_simd.dylib (100%) rename {hmm => thirdparty/hmm}/module.jai (100%) rename {hmm => thirdparty/hmm}/win/.need-to-run-generate (100%) rename {raylib => thirdparty/raylib}/README (100%) rename {raylib => thirdparty/raylib}/examples/basic-window.jai (100%) rename {raylib => thirdparty/raylib}/examples/input-keys.jai (100%) rename {raylib => thirdparty/raylib}/generate.jai (100%) rename {raylib => thirdparty/raylib}/lib/raylib.h (100%) rename {raylib => thirdparty/raylib}/lib/raymath.h (100%) rename {raylib => thirdparty/raylib}/lib/rlgl.h (100%) rename {raylib => thirdparty/raylib}/linux/libraygui.a (100%) rename {raylib => thirdparty/raylib}/linux/libraygui.so (100%) rename {raylib => thirdparty/raylib}/linux/libraylib.a (100%) rename {raylib => thirdparty/raylib}/linux/libraylib.so (100%) rename {raylib => thirdparty/raylib}/linux/libraylib.so.5.5.0 (100%) rename {raylib => thirdparty/raylib}/linux/libraylib.so.550 (100%) rename {raylib => thirdparty/raylib}/mac/libraygui.a (100%) rename {raylib => thirdparty/raylib}/mac/libraygui.dylib (100%) rename {raylib => thirdparty/raylib}/mac/libraylib.5.5.0.dylib (100%) rename {raylib => thirdparty/raylib}/mac/libraylib.550.dylib (100%) rename {raylib => thirdparty/raylib}/mac/libraylib.a (100%) rename {raylib => thirdparty/raylib}/mac/libraylib.dylib (100%) rename {raylib => thirdparty/raylib}/module.jai (100%) rename {raylib => thirdparty/raylib}/raylib.jai (100%) rename {raylib => thirdparty/raylib}/rlgl/module.jai (100%) rename {raylib => thirdparty/raylib}/rlgl/rlgl.jai (100%) rename {raylib => thirdparty/raylib}/wasm/libraygui.a (100%) rename {raylib => thirdparty/raylib}/wasm/libraylib.a (100%) rename {raylib => thirdparty/raylib}/win/libraygui.dll (100%) rename {raylib => thirdparty/raylib}/win/libraygui.lib (100%) rename {raylib => thirdparty/raylib}/win/librayguidll.lib (100%) rename {raylib => thirdparty/raylib}/win/libraylib.dll (100%) rename {raylib => thirdparty/raylib}/win/libraylib.lib (100%) rename {raylib => thirdparty/raylib}/win/libraylibdll.lib (100%) rename {remotery => thirdparty/remotery}/examples/it-works.jai (100%) rename {remotery => thirdparty/remotery}/generate.jai (100%) rename {remotery => thirdparty/remotery}/lib/Remotery.c (100%) rename {remotery => thirdparty/remotery}/lib/Remotery.h (100%) rename {remotery => thirdparty/remotery}/lib/RemoteryMetal.mm (100%) rename {remotery => thirdparty/remotery}/mac/remotery.a (100%) rename {remotery => thirdparty/remotery}/mac/remotery.dylib (100%) rename {remotery => thirdparty/remotery}/module.jai (100%) rename {remotery => thirdparty/remotery}/remotery.jai (100%) rename {remotery => thirdparty/remotery}/vis/Code/Console.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/DataViewReader.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/GLCanvas.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/GridWindow.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/MouseInteraction.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/NameMap.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/PixelTimeRange.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/Remotery.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/SampleGlobals.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/Shaders/Grid.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/Shaders/Shared.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/Shaders/Timeline.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/Shaders/Window.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/ThreadFrame.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/TimelineMarkers.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/TimelineRow.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/TimelineWindow.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/TitleWindow.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/TraceDrop.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/WebGL.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/WebGLFont.js (100%) rename {remotery => thirdparty/remotery}/vis/Code/WebSocketConnection.js (100%) rename {remotery => thirdparty/remotery}/vis/Styles/Fonts/FiraCode/FiraCode-Regular.ttf (100%) rename {remotery => thirdparty/remotery}/vis/Styles/Fonts/FiraCode/LICENSE (100%) rename {remotery => thirdparty/remotery}/vis/Styles/Remotery.css (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/Core/Code/Animation.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/Core/Code/Bind.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/Core/Code/Convert.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/Core/Code/Core.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/Core/Code/DOM.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/Core/Code/Keyboard.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/Core/Code/LocalStore.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/Core/Code/Mouse.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/Core/Code/MurmurHash3.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/WindowManager/Code/Button.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/WindowManager/Code/ComboBox.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/WindowManager/Code/Container.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/WindowManager/Code/EditBox.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/WindowManager/Code/Grid.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/WindowManager/Code/Label.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/WindowManager/Code/Treeview.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/WindowManager/Code/TreeviewItem.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/WindowManager/Code/Window.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/WindowManager/Code/WindowManager.js (100%) rename {remotery => thirdparty/remotery}/vis/extern/BrowserLib/WindowManager/Styles/WindowManager.css (100%) rename {remotery => thirdparty/remotery}/vis/index.html (100%) create mode 100644 types/module.jai delete mode 100644 utils.jai diff --git a/_run_all_tests.jai b/_run_all_tests.jai index 90c5c9a..5385af0 100644 --- a/_run_all_tests.jai +++ b/_run_all_tests.jai @@ -2,9 +2,11 @@ compiler :: #import "Compiler"; compiler.set_build_options_dc(.{ do_output = false }); - #import,file "./module.jai"(true); + #import,file "./array/module.jai"(true); #import,file "./encoding/module.jai"(true); #import,file "./hash/module.jai"(true); + #import,file "./memory/module.jai"(true); + #import,file "./meta/module.jai"(true); rmath :: #import,file "./math/module.jai"(.radians, true); // dmath :: #import,file "./math/module.jai"(.degrees, true); diff --git a/array/module.jai b/array/module.jai new file mode 100644 index 0000000..acaa857 --- /dev/null +++ b/array/module.jai @@ -0,0 +1,9 @@ +#module_parameters(RUN_TESTS := false); + +#load "static_array.jai"; + +#scope_module; + +#if RUN_TESTS { + test :: #import,file "../test/module.jai"; +} diff --git a/array.jai b/array/static_array.jai similarity index 94% rename from array.jai rename to array/static_array.jai index 1643101..37f45b0 100644 --- a/array.jai +++ b/array/static_array.jai @@ -2,7 +2,7 @@ Static_Array :: struct(capacity: int, T: Type) { items: [capacity]T; count: int; - Default :: #run default_of(T); + Default :: #run mem.default_of(T); } operator [] :: inline (a: Static_Array, index: int, loc := #caller_location) -> a.T #no_abc { @@ -77,12 +77,15 @@ make_dynamic :: (a: *Static_Array) -> [..]a.T { #scope_file; +mem :: #import,file "../memory/module.jai"; +basic :: #import "Basic"; // @future + ensure_array_has_room :: (array: *Static_Array, count: int, loc := #caller_location) #expand { basic.assert(array.count + count <= array.capacity, "attempt to add too many elements! want: %, Max: %", array.count + count, array.capacity, loc = loc); } #if RUN_TESTS #run { - test :: #import,file "./test/module.jai"; + test :: #import,file "../test/module.jai"; test.run("basic operations", (t) => { a: Static_Array(10, int); diff --git a/base.jai b/base.jai deleted file mode 100644 index 873bab0..0000000 --- a/base.jai +++ /dev/null @@ -1,29 +0,0 @@ -uint :: #type u64; -sint :: #type s64; -rune :: #type u32; -rawptr :: #type *void; - -Default_Align :: #run 2 * align_of(rawptr); - -align_of :: ($T: Type) -> uint #expand { - return #run -> uint { - info := type_info(struct{ p: u8; t: T; }); - return info.members[1].offset_in_bytes.(uint); - }; -} - -default_of :: ($T: Type) -> T #expand { - default: T; - return default; -} - -zero_of :: ($T: Type) -> T #expand { - zero: T = ---; - memset(*zero, 0, size_of(T)); - return zero; -} - -bitcast :: ($T: Type, expr: Code) -> T #expand { - value := expr; - return (*value).(*T).*; -} diff --git a/encoding/json.jai b/encoding/json.jai index 58e3c23..c10b28c 100644 --- a/encoding/json.jai +++ b/encoding/json.jai @@ -342,8 +342,8 @@ Parser :: struct { allocator: Allocator; data: []u8; error: string; - offset: uint; - line: uint; + offset: u64; + line: u64; } Token :: struct { @@ -387,7 +387,7 @@ get_next_token :: (p: *Parser) -> Token { } // Comments - if c == #char "/" && p.offset + 1 < p.data.count.(uint) && p.data[p.offset+1] == #char "/" { + if c == #char "/" && p.offset + 1 < p.data.count.(u64) && p.data[p.offset+1] == #char "/" { capture_while(p, c => c != #char "\n"); return get_next_token(p); } @@ -583,7 +583,7 @@ skip_whitespace :: (p: *Parser) { } capture_while :: (p: *Parser, proc: (u8) -> bool) -> string { - basic.assert(p.offset < p.data.count.(uint)); + basic.assert(p.offset < p.data.count.(u64)); capture := p.data; capture.data += p.offset; @@ -595,17 +595,15 @@ capture_while :: (p: *Parser, proc: (u8) -> bool) -> string { p.offset += 1; } - capture.count = ((p.data.data + p.offset) - capture.data).(sint); + capture.count = ((p.data.data + p.offset) - capture.data).(s64); return capture.(string); } at_end :: inline (p: *Parser) -> bool { - return p.offset >= p.data.count.(uint); + return p.offset >= p.data.count.(u64); } basic :: #import "Basic"; strings :: #import "String"; -#import,file "../base.jai"; - diff --git a/math/vec.jai b/math/vec.jai index 232802f..f61e309 100644 --- a/math/vec.jai +++ b/math/vec.jai @@ -127,34 +127,34 @@ operator / :: inline (l: Vec, r: Vec(l.N, l.T)) -> Vec(l.N, l.T) #no_abc { } operator + :: inline (l: Vec, r: $R) -> Vec(l.N, l.T) #no_abc #symmetric -#modify { return is_type_scalar(R), "type is not integer or float"; } { +#modify { return types.is_scalar(R), "type is not integer or float"; } { res: Vec(l.N, l.T) = ---; for l res[it_index] = it + r; return res; } operator - :: inline (l: Vec, r: $R) -> Vec(l.N, l.T) #no_abc -#modify { return is_type_scalar(R), "type is not integer or float"; } { +#modify { return types.is_scalar(R), "type is not integer or float"; } { res: Vec(l.N, l.T) = ---; for l res[it_index] = it - r; return res; } operator - :: inline (l: $R, r: Vec) -> Vec(l.N, l.T) #no_abc -#modify { return is_type_scalar(R), "type is not integer or float"; } { +#modify { return types.is_scalar(R), "type is not integer or float"; } { res: Vec(l.N, l.T) = ---; for l res[it_index] = r - it; return res; } operator * :: inline (l: Vec, r: $R) -> Vec(l.N, l.T) #no_abc #symmetric -#modify { return is_type_scalar(R), "type is not integer or float"; } { +#modify { return types.is_scalar(R), "type is not integer or float"; } { res: Vec(l.N, l.T) = ---; for l res[it_index] = it*r; return res; } operator / :: inline (l: Vec, r: $R) -> Vec(l.N, l.T) #no_abc -#modify { return is_type_scalar(R), "type is not integer or float"; } { +#modify { return types.is_scalar(R), "type is not integer or float"; } { res: Vec(l.N, l.T) = ---; for l res[it_index] = it/r; return res; @@ -289,7 +289,7 @@ reflect :: (v: Vec2, p: Vec2) -> Vec2 #no_abc { } round :: (v: Vec($N, $T)) -> Vec(N, T) #no_abc -#modify { return is_type_float(T), "Used non-float vector on round"; } { +#modify { return types.is_float(T), "Used non-float vector on round"; } { r: Vec(N, T) = ---; n := N - 1; while n >= 0 { @@ -310,37 +310,37 @@ Vec4 :: Vec(4, float); Quat :: Vec4; v2f :: (x: $T = 0, y: T = 0) -> Vec2 -#modify { return is_type_float(T), "use v2i for integer arguments"; } +#modify { return types.is_float(T), "use v2i for integer arguments"; } #expand { return .{ x = x, y = y }; } v2i :: (x: $T = 0, y: T = 0) -> Vec(2, T) -#modify { return is_type_integer(T), "use v2f for float arguments"; } +#modify { return types.is_integer(T), "use v2f for float arguments"; } #expand { return .{ x = x, y = y }; } v3f :: (x: $T = 0, y: T = 0, z: T = 0) -> Vec3 -#modify { return is_type_float(T), "use v3i for integer arguments"; } +#modify { return types.is_float(T), "use v3i for integer arguments"; } #expand { return .{ x = x, y = y, z = z }; } v3i :: (x: $T = 0, y: T = 0, z: T = 0) -> Vec(3, T) -#modify { return is_type_integer(T), "use v3f for float arguments"; } +#modify { return types.is_integer(T), "use v3f for float arguments"; } #expand { return .{ x = x, y = y, z = z }; } v4f :: (x: $T = 0, y: T = 0, z: T = 0, w: T = 0) -> Vec4 -#modify { return is_type_float(T), "use v4i for integer arguments"; } +#modify { return types.is_float(T), "use v4i for integer arguments"; } #expand { return .{ x = x, y = y, z = z, w = w }; } v4i :: (x: $T = 0, y: T = 0, z: T = 0, w: T = 0) -> Vec(4, T) -#modify { return is_type_integer(T), "use v4f for float arguments"; } +#modify { return types.is_integer(T), "use v4f for float arguments"; } #expand { return .{ x = x, y = y, z = z, w = w }; } @@ -351,16 +351,5 @@ quat :: (x: float = 0, y: float = 0, z: float = 0, w: float = 0) -> Quat #expand #scope_file -math :: #import "Math"; - -is_type_integer :: (t: Type) -> bool { - return t.(*Type_Info).type == .INTEGER; -} - -is_type_float :: (t: Type) -> bool { - return t.(*Type_Info).type == .FLOAT; -} - -is_type_scalar :: (t: Type) -> bool { - return is_type_integer(t) || is_type_float(t); -} +types :: #import,file "../types/module.jai"; +math :: #import "Math"; // @future diff --git a/memory.jai b/memory/module.jai similarity index 78% rename from memory.jai rename to memory/module.jai index 56c396f..058778d 100644 --- a/memory.jai +++ b/memory/module.jai @@ -1,13 +1,40 @@ +#module_parameters(RUN_TESTS := false); + Kilobyte :: 1024; Megabyte :: 1024 * Kilobyte; Gigabyte :: 1024 * Megabyte; -power_of_two :: (x: uint) -> bool { +Default_Align :: #run 2 * align_of(*void); + +align_of :: ($T: Type) -> u64 #expand { + return #run -> u64 { + info := type_info(struct{ p: u8; t: T; }); + return info.members[1].offset_in_bytes.(u64); + }; +} + +default_of :: ($T: Type) -> T #expand { + default: T; + return default; +} + +zero_of :: ($T: Type) -> T #expand { + zero: T = ---; + memset(*zero, 0, size_of(T)); + return zero; +} + +bitcast :: ($T: Type, expr: Code) -> T #expand { + value := expr; + return (*value).(*T).*; +} + +power_of_two :: (x: u64) -> bool { if x == 0 return false; return x & (x - 1) == 0; } -align_forward :: (ptr: uint, align: uint = Default_Align) -> uint { +align_forward :: (ptr: u64, align: u64 = Default_Align) -> u64 { basic.assert(power_of_two(align), "alignment must be a power of two"); p := ptr; @@ -32,7 +59,7 @@ init_or_zero :: inline (ptr: *$T, custom_init: (*T) = null) { make :: ($T: Type, reserved := 0, $init := true) -> [..]T #modify { - ok, info := type_is_array(T); + ok, info := types.is_array(T); if ok && info.array_type == .RESIZABLE { T = compiler.get_type(info.element_type); return true; @@ -41,7 +68,7 @@ make :: ($T: Type, reserved := 0, $init := true) -> [..]T return false; } { - size := align_forward(size_of(T) * basic.max(reserved, 0).(uint)).(sint); + size := align_forward(size_of(T) * basic.max(reserved, 0).(u64)).(s64); data := basic.alloc(size); #if init if size != 0 { @@ -57,7 +84,7 @@ make :: ($T: Type, reserved := 0, $init := true) -> [..]T } make :: ($T: Type, $init := true) -> *T -#modify { return !type_is_array(T); } +#modify { return !types.is_array(T); } { ptr := basic.alloc(size_of(T)).(*T); #if init init_or_zero(ptr); @@ -127,7 +154,7 @@ arena_alloc :: (a: *Arena, count: int, alignment := Default_Align, loc := #calle basic.assert(power_of_two(alignment)); end := a.memory.(*u8) + a.offset; - ptr := align_forward(end.(uint), alignment); + ptr := align_forward(end.(u64), alignment); total_size := (count + ptr.(*u8) - end.(*u8)).(u64); basic.assert(a.offset + total_size <= a.memory_size, "arena: out of memory", loc = loc); @@ -136,11 +163,17 @@ arena_alloc :: (a: *Arena, count: int, alignment := Default_Align, loc := #calle return ptr.(*void); } +#scope_module; + +types :: #import,file "../types/module.jai"; #scope_file; +basic :: #import "Basic"; // @future +compiler :: #import "Compiler"; // @future + #if RUN_TESTS #run { - test :: #import,file "./test/module.jai"; + test :: #import,file "../test/module.jai"; test.run("make:dynamic arrays", (t) => { a1 := make([..]int); diff --git a/macros.jai b/meta/macros.jai similarity index 97% rename from macros.jai rename to meta/macros.jai index 0ce8d23..3dd0b2f 100644 --- a/macros.jai +++ b/meta/macros.jai @@ -129,8 +129,8 @@ c_call :: (call: Code, ctx: #Context) #expand { for_expansion :: (v: *Named_Block, code: Code, _: For_Flags) #expand { #insert #run basic.tprint(#string END for `%: 0..0 { - `it :: #run zero_of(void); - `it_index :: #run zero_of(void); + `it :: #run mem.zero_of(void); + `it_index :: #run mem.zero_of(void); #insert,scope(code) code; } END, @@ -242,9 +242,6 @@ Unrolled_Loop :: struct(N: int, T: Type = void) { } } -pp :: #import "Program_Print"; -compiler :: #import "Compiler"; - #if RUN_TESTS #run { test.run("this_block", (t) => { i := 0; @@ -300,3 +297,8 @@ compiler :: #import "Compiler"; }); } +mem :: #import,file "../memory/module.jai"; + +basic :: #import "Basic"; // @future +pp :: #import "Program_Print"; // @future +compiler :: #import "Compiler"; // @future diff --git a/meta/module.jai b/meta/module.jai new file mode 100644 index 0000000..566d013 --- /dev/null +++ b/meta/module.jai @@ -0,0 +1,49 @@ +#module_parameters(RUN_TESTS := false); + +// Can be passed directly to using,map +remap_snake_to_pascal :: (names: []string) { + for names { + names[it_index] = snake_to_pascal(it); + } +} + +snake_to_pascal :: (name: string) -> string { + basic :: #import "Basic"; // @future + b: basic.String_Builder; + + upper := true; + for i: 0..name.count - 1 { + c := name[i]; + if c == #char "_" { + upper = true; + continue; + } + + if upper { + basic.append(*b, basic.to_upper(c)); + upper = false; + } else { + basic.append(*b, c); + } + } + + return basic.builder_to_string(*b); +} + + +#load "macros.jai"; + +#scope_module; + +#if RUN_TESTS { + test :: #import,file "../test/module.jai"; + + #run test.run("snake_to_pascal", t => { + test.expect(t, snake_to_pascal("some_name") == "SomeName"); + test.expect(t, snake_to_pascal("_some_name") == "SomeName"); + test.expect(t, snake_to_pascal("some__name") == "SomeName"); + test.expect(t, snake_to_pascal("some_name_") == "SomeName"); + test.expect(t, snake_to_pascal("X_Y_Z") == "XYZ"); + test.expect(t, snake_to_pascal("XY_Z") == "XYZ"); + }); +} diff --git a/module.jai b/module.jai deleted file mode 100644 index 0fd0c08..0000000 --- a/module.jai +++ /dev/null @@ -1,19 +0,0 @@ -#module_parameters(RUN_TESTS := false); - -#load "base.jai"; -#load "utils.jai"; -#load "memory.jai"; -#load "macros.jai"; -#load "array.jai"; - - -#scope_module; - -basic :: #import "Basic"; -compiler :: #import "Compiler"; - -#if RUN_TESTS { - // so files within this module can use 'test' without directly importing it. - test :: #import,file "test/module.jai"; -} - diff --git a/test/module.jai b/test/module.jai index 376c660..f09ddcf 100644 --- a/test/module.jai +++ b/test/module.jai @@ -12,8 +12,8 @@ */ T :: struct { location: Source_Code_Location; - expects_run: sint; - expects_ok: sint; + expects_run: s64; + expects_ok: s64; failed: bool; } @@ -41,8 +41,11 @@ expect :: (t: *T, cond: bool, message := "", args: ..Any, loc := #caller_locatio } run :: (name: string, proc: Proc, loc := #caller_location) { - filename := strings.path_filename(loc.fully_pathed_filename); - basic.print("%,%: %...", filename, loc.line_number, name); + idx := strings.find_index_from_left(loc.fully_pathed_filename, "./") + 2; + path := loc.fully_pathed_filename; + path.data += idx; + path.count -= idx; + basic.print("%,%: %...", path, loc.line_number, name); t: T; proc(*t); @@ -58,8 +61,6 @@ run :: (name: string, proc: Proc, loc := #caller_location) { #scope_file; -#import,file "../base.jai"; - -basic :: #import "Basic"; -strings :: #import "String"; -compiler :: #import "Compiler"; +basic :: #import "Basic"; // @future +strings :: #import "String"; // @future +compiler :: #import "Compiler"; // @future diff --git a/hmm/HandmadeMath.h b/thirdparty/hmm/HandmadeMath.h similarity index 100% rename from hmm/HandmadeMath.h rename to thirdparty/hmm/HandmadeMath.h diff --git a/hmm/README b/thirdparty/hmm/README similarity index 100% rename from hmm/README rename to thirdparty/hmm/README diff --git a/hmm/examples/degrees.jai b/thirdparty/hmm/examples/degrees.jai similarity index 100% rename from hmm/examples/degrees.jai rename to thirdparty/hmm/examples/degrees.jai diff --git a/hmm/examples/radians.jai b/thirdparty/hmm/examples/radians.jai similarity index 100% rename from hmm/examples/radians.jai rename to thirdparty/hmm/examples/radians.jai diff --git a/hmm/examples/turns.jai b/thirdparty/hmm/examples/turns.jai similarity index 100% rename from hmm/examples/turns.jai rename to thirdparty/hmm/examples/turns.jai diff --git a/hmm/generate.jai b/thirdparty/hmm/generate.jai similarity index 100% rename from hmm/generate.jai rename to thirdparty/hmm/generate.jai diff --git a/hmm/hmm_nosimd.jai b/thirdparty/hmm/hmm_nosimd.jai similarity index 100% rename from hmm/hmm_nosimd.jai rename to thirdparty/hmm/hmm_nosimd.jai diff --git a/hmm/hmm_simd.jai b/thirdparty/hmm/hmm_simd.jai similarity index 100% rename from hmm/hmm_simd.jai rename to thirdparty/hmm/hmm_simd.jai diff --git a/hmm/linux/.need-to-run-generate b/thirdparty/hmm/linux/.need-to-run-generate similarity index 100% rename from hmm/linux/.need-to-run-generate rename to thirdparty/hmm/linux/.need-to-run-generate diff --git a/hmm/mac/hmm_degrees_nosimd.a b/thirdparty/hmm/mac/hmm_degrees_nosimd.a similarity index 100% rename from hmm/mac/hmm_degrees_nosimd.a rename to thirdparty/hmm/mac/hmm_degrees_nosimd.a diff --git a/hmm/mac/hmm_degrees_nosimd.dylib b/thirdparty/hmm/mac/hmm_degrees_nosimd.dylib similarity index 100% rename from hmm/mac/hmm_degrees_nosimd.dylib rename to thirdparty/hmm/mac/hmm_degrees_nosimd.dylib diff --git a/hmm/mac/hmm_degrees_simd.a b/thirdparty/hmm/mac/hmm_degrees_simd.a similarity index 100% rename from hmm/mac/hmm_degrees_simd.a rename to thirdparty/hmm/mac/hmm_degrees_simd.a diff --git a/hmm/mac/hmm_degrees_simd.dylib b/thirdparty/hmm/mac/hmm_degrees_simd.dylib similarity index 100% rename from hmm/mac/hmm_degrees_simd.dylib rename to thirdparty/hmm/mac/hmm_degrees_simd.dylib diff --git a/hmm/mac/hmm_radians_nosimd.a b/thirdparty/hmm/mac/hmm_radians_nosimd.a similarity index 100% rename from hmm/mac/hmm_radians_nosimd.a rename to thirdparty/hmm/mac/hmm_radians_nosimd.a diff --git a/hmm/mac/hmm_radians_nosimd.dylib b/thirdparty/hmm/mac/hmm_radians_nosimd.dylib similarity index 100% rename from hmm/mac/hmm_radians_nosimd.dylib rename to thirdparty/hmm/mac/hmm_radians_nosimd.dylib diff --git a/hmm/mac/hmm_radians_simd.a b/thirdparty/hmm/mac/hmm_radians_simd.a similarity index 100% rename from hmm/mac/hmm_radians_simd.a rename to thirdparty/hmm/mac/hmm_radians_simd.a diff --git a/hmm/mac/hmm_radians_simd.dylib b/thirdparty/hmm/mac/hmm_radians_simd.dylib similarity index 100% rename from hmm/mac/hmm_radians_simd.dylib rename to thirdparty/hmm/mac/hmm_radians_simd.dylib diff --git a/hmm/mac/hmm_turns_nosimd.a b/thirdparty/hmm/mac/hmm_turns_nosimd.a similarity index 100% rename from hmm/mac/hmm_turns_nosimd.a rename to thirdparty/hmm/mac/hmm_turns_nosimd.a diff --git a/hmm/mac/hmm_turns_nosimd.dylib b/thirdparty/hmm/mac/hmm_turns_nosimd.dylib similarity index 100% rename from hmm/mac/hmm_turns_nosimd.dylib rename to thirdparty/hmm/mac/hmm_turns_nosimd.dylib diff --git a/hmm/mac/hmm_turns_simd.a b/thirdparty/hmm/mac/hmm_turns_simd.a similarity index 100% rename from hmm/mac/hmm_turns_simd.a rename to thirdparty/hmm/mac/hmm_turns_simd.a diff --git a/hmm/mac/hmm_turns_simd.dylib b/thirdparty/hmm/mac/hmm_turns_simd.dylib similarity index 100% rename from hmm/mac/hmm_turns_simd.dylib rename to thirdparty/hmm/mac/hmm_turns_simd.dylib diff --git a/hmm/module.jai b/thirdparty/hmm/module.jai similarity index 100% rename from hmm/module.jai rename to thirdparty/hmm/module.jai diff --git a/hmm/win/.need-to-run-generate b/thirdparty/hmm/win/.need-to-run-generate similarity index 100% rename from hmm/win/.need-to-run-generate rename to thirdparty/hmm/win/.need-to-run-generate diff --git a/raylib/README b/thirdparty/raylib/README similarity index 100% rename from raylib/README rename to thirdparty/raylib/README diff --git a/raylib/examples/basic-window.jai b/thirdparty/raylib/examples/basic-window.jai similarity index 100% rename from raylib/examples/basic-window.jai rename to thirdparty/raylib/examples/basic-window.jai diff --git a/raylib/examples/input-keys.jai b/thirdparty/raylib/examples/input-keys.jai similarity index 100% rename from raylib/examples/input-keys.jai rename to thirdparty/raylib/examples/input-keys.jai diff --git a/raylib/generate.jai b/thirdparty/raylib/generate.jai similarity index 100% rename from raylib/generate.jai rename to thirdparty/raylib/generate.jai diff --git a/raylib/lib/raylib.h b/thirdparty/raylib/lib/raylib.h similarity index 100% rename from raylib/lib/raylib.h rename to thirdparty/raylib/lib/raylib.h diff --git a/raylib/lib/raymath.h b/thirdparty/raylib/lib/raymath.h similarity index 100% rename from raylib/lib/raymath.h rename to thirdparty/raylib/lib/raymath.h diff --git a/raylib/lib/rlgl.h b/thirdparty/raylib/lib/rlgl.h similarity index 100% rename from raylib/lib/rlgl.h rename to thirdparty/raylib/lib/rlgl.h diff --git a/raylib/linux/libraygui.a b/thirdparty/raylib/linux/libraygui.a similarity index 100% rename from raylib/linux/libraygui.a rename to thirdparty/raylib/linux/libraygui.a diff --git a/raylib/linux/libraygui.so b/thirdparty/raylib/linux/libraygui.so similarity index 100% rename from raylib/linux/libraygui.so rename to thirdparty/raylib/linux/libraygui.so diff --git a/raylib/linux/libraylib.a b/thirdparty/raylib/linux/libraylib.a similarity index 100% rename from raylib/linux/libraylib.a rename to thirdparty/raylib/linux/libraylib.a diff --git a/raylib/linux/libraylib.so b/thirdparty/raylib/linux/libraylib.so similarity index 100% rename from raylib/linux/libraylib.so rename to thirdparty/raylib/linux/libraylib.so diff --git a/raylib/linux/libraylib.so.5.5.0 b/thirdparty/raylib/linux/libraylib.so.5.5.0 similarity index 100% rename from raylib/linux/libraylib.so.5.5.0 rename to thirdparty/raylib/linux/libraylib.so.5.5.0 diff --git a/raylib/linux/libraylib.so.550 b/thirdparty/raylib/linux/libraylib.so.550 similarity index 100% rename from raylib/linux/libraylib.so.550 rename to thirdparty/raylib/linux/libraylib.so.550 diff --git a/raylib/mac/libraygui.a b/thirdparty/raylib/mac/libraygui.a similarity index 100% rename from raylib/mac/libraygui.a rename to thirdparty/raylib/mac/libraygui.a diff --git a/raylib/mac/libraygui.dylib b/thirdparty/raylib/mac/libraygui.dylib similarity index 100% rename from raylib/mac/libraygui.dylib rename to thirdparty/raylib/mac/libraygui.dylib diff --git a/raylib/mac/libraylib.5.5.0.dylib b/thirdparty/raylib/mac/libraylib.5.5.0.dylib similarity index 100% rename from raylib/mac/libraylib.5.5.0.dylib rename to thirdparty/raylib/mac/libraylib.5.5.0.dylib diff --git a/raylib/mac/libraylib.550.dylib b/thirdparty/raylib/mac/libraylib.550.dylib similarity index 100% rename from raylib/mac/libraylib.550.dylib rename to thirdparty/raylib/mac/libraylib.550.dylib diff --git a/raylib/mac/libraylib.a b/thirdparty/raylib/mac/libraylib.a similarity index 100% rename from raylib/mac/libraylib.a rename to thirdparty/raylib/mac/libraylib.a diff --git a/raylib/mac/libraylib.dylib b/thirdparty/raylib/mac/libraylib.dylib similarity index 100% rename from raylib/mac/libraylib.dylib rename to thirdparty/raylib/mac/libraylib.dylib diff --git a/raylib/module.jai b/thirdparty/raylib/module.jai similarity index 100% rename from raylib/module.jai rename to thirdparty/raylib/module.jai diff --git a/raylib/raylib.jai b/thirdparty/raylib/raylib.jai similarity index 100% rename from raylib/raylib.jai rename to thirdparty/raylib/raylib.jai diff --git a/raylib/rlgl/module.jai b/thirdparty/raylib/rlgl/module.jai similarity index 100% rename from raylib/rlgl/module.jai rename to thirdparty/raylib/rlgl/module.jai diff --git a/raylib/rlgl/rlgl.jai b/thirdparty/raylib/rlgl/rlgl.jai similarity index 100% rename from raylib/rlgl/rlgl.jai rename to thirdparty/raylib/rlgl/rlgl.jai diff --git a/raylib/wasm/libraygui.a b/thirdparty/raylib/wasm/libraygui.a similarity index 100% rename from raylib/wasm/libraygui.a rename to thirdparty/raylib/wasm/libraygui.a diff --git a/raylib/wasm/libraylib.a b/thirdparty/raylib/wasm/libraylib.a similarity index 100% rename from raylib/wasm/libraylib.a rename to thirdparty/raylib/wasm/libraylib.a diff --git a/raylib/win/libraygui.dll b/thirdparty/raylib/win/libraygui.dll similarity index 100% rename from raylib/win/libraygui.dll rename to thirdparty/raylib/win/libraygui.dll diff --git a/raylib/win/libraygui.lib b/thirdparty/raylib/win/libraygui.lib similarity index 100% rename from raylib/win/libraygui.lib rename to thirdparty/raylib/win/libraygui.lib diff --git a/raylib/win/librayguidll.lib b/thirdparty/raylib/win/librayguidll.lib similarity index 100% rename from raylib/win/librayguidll.lib rename to thirdparty/raylib/win/librayguidll.lib diff --git a/raylib/win/libraylib.dll b/thirdparty/raylib/win/libraylib.dll similarity index 100% rename from raylib/win/libraylib.dll rename to thirdparty/raylib/win/libraylib.dll diff --git a/raylib/win/libraylib.lib b/thirdparty/raylib/win/libraylib.lib similarity index 100% rename from raylib/win/libraylib.lib rename to thirdparty/raylib/win/libraylib.lib diff --git a/raylib/win/libraylibdll.lib b/thirdparty/raylib/win/libraylibdll.lib similarity index 100% rename from raylib/win/libraylibdll.lib rename to thirdparty/raylib/win/libraylibdll.lib diff --git a/remotery/examples/it-works.jai b/thirdparty/remotery/examples/it-works.jai similarity index 100% rename from remotery/examples/it-works.jai rename to thirdparty/remotery/examples/it-works.jai diff --git a/remotery/generate.jai b/thirdparty/remotery/generate.jai similarity index 100% rename from remotery/generate.jai rename to thirdparty/remotery/generate.jai diff --git a/remotery/lib/Remotery.c b/thirdparty/remotery/lib/Remotery.c similarity index 100% rename from remotery/lib/Remotery.c rename to thirdparty/remotery/lib/Remotery.c diff --git a/remotery/lib/Remotery.h b/thirdparty/remotery/lib/Remotery.h similarity index 100% rename from remotery/lib/Remotery.h rename to thirdparty/remotery/lib/Remotery.h diff --git a/remotery/lib/RemoteryMetal.mm b/thirdparty/remotery/lib/RemoteryMetal.mm similarity index 100% rename from remotery/lib/RemoteryMetal.mm rename to thirdparty/remotery/lib/RemoteryMetal.mm diff --git a/remotery/mac/remotery.a b/thirdparty/remotery/mac/remotery.a similarity index 100% rename from remotery/mac/remotery.a rename to thirdparty/remotery/mac/remotery.a diff --git a/remotery/mac/remotery.dylib b/thirdparty/remotery/mac/remotery.dylib similarity index 100% rename from remotery/mac/remotery.dylib rename to thirdparty/remotery/mac/remotery.dylib diff --git a/remotery/module.jai b/thirdparty/remotery/module.jai similarity index 100% rename from remotery/module.jai rename to thirdparty/remotery/module.jai diff --git a/remotery/remotery.jai b/thirdparty/remotery/remotery.jai similarity index 100% rename from remotery/remotery.jai rename to thirdparty/remotery/remotery.jai diff --git a/remotery/vis/Code/Console.js b/thirdparty/remotery/vis/Code/Console.js similarity index 100% rename from remotery/vis/Code/Console.js rename to thirdparty/remotery/vis/Code/Console.js diff --git a/remotery/vis/Code/DataViewReader.js b/thirdparty/remotery/vis/Code/DataViewReader.js similarity index 100% rename from remotery/vis/Code/DataViewReader.js rename to thirdparty/remotery/vis/Code/DataViewReader.js diff --git a/remotery/vis/Code/GLCanvas.js b/thirdparty/remotery/vis/Code/GLCanvas.js similarity index 100% rename from remotery/vis/Code/GLCanvas.js rename to thirdparty/remotery/vis/Code/GLCanvas.js diff --git a/remotery/vis/Code/GridWindow.js b/thirdparty/remotery/vis/Code/GridWindow.js similarity index 100% rename from remotery/vis/Code/GridWindow.js rename to thirdparty/remotery/vis/Code/GridWindow.js diff --git a/remotery/vis/Code/MouseInteraction.js b/thirdparty/remotery/vis/Code/MouseInteraction.js similarity index 100% rename from remotery/vis/Code/MouseInteraction.js rename to thirdparty/remotery/vis/Code/MouseInteraction.js diff --git a/remotery/vis/Code/NameMap.js b/thirdparty/remotery/vis/Code/NameMap.js similarity index 100% rename from remotery/vis/Code/NameMap.js rename to thirdparty/remotery/vis/Code/NameMap.js diff --git a/remotery/vis/Code/PixelTimeRange.js b/thirdparty/remotery/vis/Code/PixelTimeRange.js similarity index 100% rename from remotery/vis/Code/PixelTimeRange.js rename to thirdparty/remotery/vis/Code/PixelTimeRange.js diff --git a/remotery/vis/Code/Remotery.js b/thirdparty/remotery/vis/Code/Remotery.js similarity index 100% rename from remotery/vis/Code/Remotery.js rename to thirdparty/remotery/vis/Code/Remotery.js diff --git a/remotery/vis/Code/SampleGlobals.js b/thirdparty/remotery/vis/Code/SampleGlobals.js similarity index 100% rename from remotery/vis/Code/SampleGlobals.js rename to thirdparty/remotery/vis/Code/SampleGlobals.js diff --git a/remotery/vis/Code/Shaders/Grid.js b/thirdparty/remotery/vis/Code/Shaders/Grid.js similarity index 100% rename from remotery/vis/Code/Shaders/Grid.js rename to thirdparty/remotery/vis/Code/Shaders/Grid.js diff --git a/remotery/vis/Code/Shaders/Shared.js b/thirdparty/remotery/vis/Code/Shaders/Shared.js similarity index 100% rename from remotery/vis/Code/Shaders/Shared.js rename to thirdparty/remotery/vis/Code/Shaders/Shared.js diff --git a/remotery/vis/Code/Shaders/Timeline.js b/thirdparty/remotery/vis/Code/Shaders/Timeline.js similarity index 100% rename from remotery/vis/Code/Shaders/Timeline.js rename to thirdparty/remotery/vis/Code/Shaders/Timeline.js diff --git a/remotery/vis/Code/Shaders/Window.js b/thirdparty/remotery/vis/Code/Shaders/Window.js similarity index 100% rename from remotery/vis/Code/Shaders/Window.js rename to thirdparty/remotery/vis/Code/Shaders/Window.js diff --git a/remotery/vis/Code/ThreadFrame.js b/thirdparty/remotery/vis/Code/ThreadFrame.js similarity index 100% rename from remotery/vis/Code/ThreadFrame.js rename to thirdparty/remotery/vis/Code/ThreadFrame.js diff --git a/remotery/vis/Code/TimelineMarkers.js b/thirdparty/remotery/vis/Code/TimelineMarkers.js similarity index 100% rename from remotery/vis/Code/TimelineMarkers.js rename to thirdparty/remotery/vis/Code/TimelineMarkers.js diff --git a/remotery/vis/Code/TimelineRow.js b/thirdparty/remotery/vis/Code/TimelineRow.js similarity index 100% rename from remotery/vis/Code/TimelineRow.js rename to thirdparty/remotery/vis/Code/TimelineRow.js diff --git a/remotery/vis/Code/TimelineWindow.js b/thirdparty/remotery/vis/Code/TimelineWindow.js similarity index 100% rename from remotery/vis/Code/TimelineWindow.js rename to thirdparty/remotery/vis/Code/TimelineWindow.js diff --git a/remotery/vis/Code/TitleWindow.js b/thirdparty/remotery/vis/Code/TitleWindow.js similarity index 100% rename from remotery/vis/Code/TitleWindow.js rename to thirdparty/remotery/vis/Code/TitleWindow.js diff --git a/remotery/vis/Code/TraceDrop.js b/thirdparty/remotery/vis/Code/TraceDrop.js similarity index 100% rename from remotery/vis/Code/TraceDrop.js rename to thirdparty/remotery/vis/Code/TraceDrop.js diff --git a/remotery/vis/Code/WebGL.js b/thirdparty/remotery/vis/Code/WebGL.js similarity index 100% rename from remotery/vis/Code/WebGL.js rename to thirdparty/remotery/vis/Code/WebGL.js diff --git a/remotery/vis/Code/WebGLFont.js b/thirdparty/remotery/vis/Code/WebGLFont.js similarity index 100% rename from remotery/vis/Code/WebGLFont.js rename to thirdparty/remotery/vis/Code/WebGLFont.js diff --git a/remotery/vis/Code/WebSocketConnection.js b/thirdparty/remotery/vis/Code/WebSocketConnection.js similarity index 100% rename from remotery/vis/Code/WebSocketConnection.js rename to thirdparty/remotery/vis/Code/WebSocketConnection.js diff --git a/remotery/vis/Styles/Fonts/FiraCode/FiraCode-Regular.ttf b/thirdparty/remotery/vis/Styles/Fonts/FiraCode/FiraCode-Regular.ttf similarity index 100% rename from remotery/vis/Styles/Fonts/FiraCode/FiraCode-Regular.ttf rename to thirdparty/remotery/vis/Styles/Fonts/FiraCode/FiraCode-Regular.ttf diff --git a/remotery/vis/Styles/Fonts/FiraCode/LICENSE b/thirdparty/remotery/vis/Styles/Fonts/FiraCode/LICENSE similarity index 100% rename from remotery/vis/Styles/Fonts/FiraCode/LICENSE rename to thirdparty/remotery/vis/Styles/Fonts/FiraCode/LICENSE diff --git a/remotery/vis/Styles/Remotery.css b/thirdparty/remotery/vis/Styles/Remotery.css similarity index 100% rename from remotery/vis/Styles/Remotery.css rename to thirdparty/remotery/vis/Styles/Remotery.css diff --git a/remotery/vis/extern/BrowserLib/Core/Code/Animation.js b/thirdparty/remotery/vis/extern/BrowserLib/Core/Code/Animation.js similarity index 100% rename from remotery/vis/extern/BrowserLib/Core/Code/Animation.js rename to thirdparty/remotery/vis/extern/BrowserLib/Core/Code/Animation.js diff --git a/remotery/vis/extern/BrowserLib/Core/Code/Bind.js b/thirdparty/remotery/vis/extern/BrowserLib/Core/Code/Bind.js similarity index 100% rename from remotery/vis/extern/BrowserLib/Core/Code/Bind.js rename to thirdparty/remotery/vis/extern/BrowserLib/Core/Code/Bind.js diff --git a/remotery/vis/extern/BrowserLib/Core/Code/Convert.js b/thirdparty/remotery/vis/extern/BrowserLib/Core/Code/Convert.js similarity index 100% rename from remotery/vis/extern/BrowserLib/Core/Code/Convert.js rename to thirdparty/remotery/vis/extern/BrowserLib/Core/Code/Convert.js diff --git a/remotery/vis/extern/BrowserLib/Core/Code/Core.js b/thirdparty/remotery/vis/extern/BrowserLib/Core/Code/Core.js similarity index 100% rename from remotery/vis/extern/BrowserLib/Core/Code/Core.js rename to thirdparty/remotery/vis/extern/BrowserLib/Core/Code/Core.js diff --git a/remotery/vis/extern/BrowserLib/Core/Code/DOM.js b/thirdparty/remotery/vis/extern/BrowserLib/Core/Code/DOM.js similarity index 100% rename from remotery/vis/extern/BrowserLib/Core/Code/DOM.js rename to thirdparty/remotery/vis/extern/BrowserLib/Core/Code/DOM.js diff --git a/remotery/vis/extern/BrowserLib/Core/Code/Keyboard.js b/thirdparty/remotery/vis/extern/BrowserLib/Core/Code/Keyboard.js similarity index 100% rename from remotery/vis/extern/BrowserLib/Core/Code/Keyboard.js rename to thirdparty/remotery/vis/extern/BrowserLib/Core/Code/Keyboard.js diff --git a/remotery/vis/extern/BrowserLib/Core/Code/LocalStore.js b/thirdparty/remotery/vis/extern/BrowserLib/Core/Code/LocalStore.js similarity index 100% rename from remotery/vis/extern/BrowserLib/Core/Code/LocalStore.js rename to thirdparty/remotery/vis/extern/BrowserLib/Core/Code/LocalStore.js diff --git a/remotery/vis/extern/BrowserLib/Core/Code/Mouse.js b/thirdparty/remotery/vis/extern/BrowserLib/Core/Code/Mouse.js similarity index 100% rename from remotery/vis/extern/BrowserLib/Core/Code/Mouse.js rename to thirdparty/remotery/vis/extern/BrowserLib/Core/Code/Mouse.js diff --git a/remotery/vis/extern/BrowserLib/Core/Code/MurmurHash3.js b/thirdparty/remotery/vis/extern/BrowserLib/Core/Code/MurmurHash3.js similarity index 100% rename from remotery/vis/extern/BrowserLib/Core/Code/MurmurHash3.js rename to thirdparty/remotery/vis/extern/BrowserLib/Core/Code/MurmurHash3.js diff --git a/remotery/vis/extern/BrowserLib/WindowManager/Code/Button.js b/thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Button.js similarity index 100% rename from remotery/vis/extern/BrowserLib/WindowManager/Code/Button.js rename to thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Button.js diff --git a/remotery/vis/extern/BrowserLib/WindowManager/Code/ComboBox.js b/thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/ComboBox.js similarity index 100% rename from remotery/vis/extern/BrowserLib/WindowManager/Code/ComboBox.js rename to thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/ComboBox.js diff --git a/remotery/vis/extern/BrowserLib/WindowManager/Code/Container.js b/thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Container.js similarity index 100% rename from remotery/vis/extern/BrowserLib/WindowManager/Code/Container.js rename to thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Container.js diff --git a/remotery/vis/extern/BrowserLib/WindowManager/Code/EditBox.js b/thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/EditBox.js similarity index 100% rename from remotery/vis/extern/BrowserLib/WindowManager/Code/EditBox.js rename to thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/EditBox.js diff --git a/remotery/vis/extern/BrowserLib/WindowManager/Code/Grid.js b/thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Grid.js similarity index 100% rename from remotery/vis/extern/BrowserLib/WindowManager/Code/Grid.js rename to thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Grid.js diff --git a/remotery/vis/extern/BrowserLib/WindowManager/Code/Label.js b/thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Label.js similarity index 100% rename from remotery/vis/extern/BrowserLib/WindowManager/Code/Label.js rename to thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Label.js diff --git a/remotery/vis/extern/BrowserLib/WindowManager/Code/Treeview.js b/thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Treeview.js similarity index 100% rename from remotery/vis/extern/BrowserLib/WindowManager/Code/Treeview.js rename to thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Treeview.js diff --git a/remotery/vis/extern/BrowserLib/WindowManager/Code/TreeviewItem.js b/thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/TreeviewItem.js similarity index 100% rename from remotery/vis/extern/BrowserLib/WindowManager/Code/TreeviewItem.js rename to thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/TreeviewItem.js diff --git a/remotery/vis/extern/BrowserLib/WindowManager/Code/Window.js b/thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Window.js similarity index 100% rename from remotery/vis/extern/BrowserLib/WindowManager/Code/Window.js rename to thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Window.js diff --git a/remotery/vis/extern/BrowserLib/WindowManager/Code/WindowManager.js b/thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/WindowManager.js similarity index 100% rename from remotery/vis/extern/BrowserLib/WindowManager/Code/WindowManager.js rename to thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/WindowManager.js diff --git a/remotery/vis/extern/BrowserLib/WindowManager/Styles/WindowManager.css b/thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Styles/WindowManager.css similarity index 100% rename from remotery/vis/extern/BrowserLib/WindowManager/Styles/WindowManager.css rename to thirdparty/remotery/vis/extern/BrowserLib/WindowManager/Styles/WindowManager.css diff --git a/remotery/vis/index.html b/thirdparty/remotery/vis/index.html similarity index 100% rename from remotery/vis/index.html rename to thirdparty/remotery/vis/index.html diff --git a/types/module.jai b/types/module.jai new file mode 100644 index 0000000..47ae4e2 --- /dev/null +++ b/types/module.jai @@ -0,0 +1,39 @@ +// These return the bool first so you can check in a conditional, +// rather than having to do '_, ok := ...' + +check_tag :: ($$T: Type, tag: Type_Info_Tag) -> bool, *Type_Info { + #if is_constant(T) { + info :: type_info(T); + if info.type == tag return true, info; + } + else { + info := T.(*Type_Info); + if info.type == tag return true, info; + } + + return false, null; +} + +is_integer :: ($$T: Type) -> bool, *Type_Info_Integer { + ok, info := check_tag(T, .INTEGER); + return ok, info.(*Type_Info_Integer); +} + +is_float :: ($$T: Type) -> bool, *Type_Info_Float { + ok, info := check_tag(T, .FLOAT); + return ok, info.(*Type_Info_Float); +} + +is_scalar :: (t: Type) -> bool { + return is_integer(t) || is_float(t); +} + +is_array :: ($$T: Type) -> bool, *Type_Info_Array { + ok, info := check_tag(T, .ARRAY); + return ok, info.(*Type_Info_Array); +} + +is_struct :: ($$T: Type) -> bool, *Type_Info_Struct { + ok, info := check_tag(T, .STRUCT); + return ok, info.(*Type_Info_Struct); +} diff --git a/utils.jai b/utils.jai deleted file mode 100644 index e8131f5..0000000 --- a/utils.jai +++ /dev/null @@ -1,93 +0,0 @@ -// These return the bool first so you can check in a conditional, -// rather than having to do '_, ok := ...' - -check_type_tag :: ($$T: Type, tag: Type_Info_Tag) -> bool, *Type_Info { - #if is_constant(T) { - info :: type_info(T); - if info.type == tag return true, info; - } - else { - info := T.(*Type_Info); - if info.type == tag return true, info; - } - - return false, null; -} - -type_is_integer :: ($$T: Type) -> bool, *Type_Info_Integer { - ok, info := check_type_tag(T, .INTEGER); - return ok, info.(*Type_Info_Integer); -} - -type_is_float :: ($$T: Type) -> bool, *Type_Info_Float { - ok, info := check_type_tag(T, .FLOAT); - return ok, info.(*Type_Info_Float); -} - -type_is_array :: ($$T: Type) -> bool, *Type_Info_Array { - ok, info := check_type_tag(T, .ARRAY); - return ok, info.(*Type_Info_Array); -} - -type_is_struct :: ($$T: Type) -> bool, *Type_Info_Struct { - ok, info := check_type_tag(T, .STRUCT); - return ok, info.(*Type_Info_Struct); -} - -// Can be passed directly to using,map -remap_snake_to_pascal :: (names: []string) { - for names { - names[it_index] = snake_to_pascal(it); - } -} - -snake_to_pascal :: (name: string) -> string { - b: basic.String_Builder; - - upper := true; - for i: 0..name.count - 1 { - c := name[i]; - if c == #char "_" { - upper = true; - continue; - } - - if upper { - basic.append(*b, basic.to_upper(c)); - upper = false; - } else { - basic.append(*b, c); - } - } - - return basic.builder_to_string(*b); -} - -rune_width :: (r: rune) -> int { - if r < 0 return -1; - - if r <= 0x7F return 1; - if r <= 0x7FF return 2; - - if r >= 0xD800 && - r <= 0xDFFF return -1; - - if r <= 0xFFFF return 3; - if r <= 0x10FFFF return 4; - - return -1; -} - - -#scope_file; - -#if RUN_TESTS #run { - test.run("snake_to_pascal", t => { - test.expect(t, snake_to_pascal("some_name") == "SomeName"); - test.expect(t, snake_to_pascal("_some_name") == "SomeName"); - test.expect(t, snake_to_pascal("some__name") == "SomeName"); - test.expect(t, snake_to_pascal("some_name_") == "SomeName"); - test.expect(t, snake_to_pascal("X_Y_Z") == "XYZ"); - test.expect(t, snake_to_pascal("XY_Z") == "XYZ"); - }); -}