Compare commits

..

6133 Commits

Author SHA1 Message Date
gingerBill b4ca044ae0 Merge pull request #3846 from Feoramund/add-more-net-tests
Add more `core:net` tests
2024-07-01 17:56:07 +01:00
gingerBill a2b23de0a7 Sanity check for a nullptr 2024-07-01 12:24:46 +01:00
gingerBill 42ff711114 Fix #3515 2024-07-01 12:22:18 +01:00
gingerBill 544959326b Add intrinsics.type_struct_has_implicit_padding #3844 2024-07-01 12:13:35 +01:00
gingerBill 942f3f5220 Add non_zero_* variants for #soa dynamic array 2024-07-01 12:04:29 +01:00
gingerBill 8ddfcf174d Add #soa support to append directly 2024-07-01 11:51:28 +01:00
gingerBill 4086a62167 Fix showing error when not meant to 2024-07-01 11:50:35 +01:00
gingerBill 3a43928184 Add #no_broadcast to append_soa 2024-07-01 11:47:33 +01:00
gingerBill 7f6fe91896 Add #soa forms to reserve, clear, and resize 2024-07-01 11:37:21 +01:00
gingerBill 11617af8f5 Add support for make(#soa[]T) etc 2024-07-01 11:34:50 +01:00
gingerBill 4a2b87672c Unify #soa code for structs and arrays 2024-07-01 11:11:06 +01:00
gingerBill fb0b95bcad Merge pull request #3760 from Feoramund/refactor-show-error-on-line
Refactor `show_error_on_line`
2024-07-01 11:03:29 +01:00
gingerBill 1a4edad63e Merge pull request #3848 from laytan/wasm-c-abi-indirect-multifield-struct
make structs with multiple fields always return indirect in wasm c abi
2024-07-01 11:02:49 +01:00
Laytan Laats ef6a73c7ef fix not setting cc before using it in abi computations 2024-07-01 01:30:44 +02:00
Laytan Laats e3dde8caf8 make structs with multiple fields always return indirect in wasm c abi 2024-07-01 00:50:10 +02:00
Feoramund 8e64265aed Replace unneeded transmute 2024-06-30 16:39:22 -04:00
Feoramund 1e7dfd0e34 Add more core:net tests
- UDP send & read
- DNS resolution
- Nonblocking socket option
2024-06-30 16:39:22 -04:00
gingerBill 13ace1dac9 Merge pull request #3839 from flysand7/tlhelp-fix
[sys/windows]: Fix the value for TH32CS_SNAPPROCESS constant
2024-06-30 20:15:33 +01:00
Jeroen van Rijn efd933e221 Merge pull request #3842 from karl-zylinski/fix-poly-bitset-size
Fix for bit_set[$T] proc params always being generated as i8
2024-06-30 21:10:42 +02:00
Karl Zylinski e0face1ac8 Make types like bit_set[$T] have their upper and lower bits overwritten by upper/lower from the source types when checking if polymorphic type is assignable. This fixes an issue where an i8 was always generated for bit_sets with generic elements, because it couldn't figure out upper/lower when check_bit_set_type was run. Fixes #2860 2024-06-30 20:36:51 +02:00
Jeroen van Rijn 4fbd22b668 Merge pull request #3840 from H0mTanks/master
Add missing enum member for WSAEWOULDBLOCK in TCP_Send_Error for windows.
2024-06-30 11:29:31 +02:00
h0mtanks 2b615b09f0 fixed whitespace 2024-06-30 13:47:11 +05:30
h0mtanks d1603ebac4 added missing would_block enum member 2024-06-30 13:42:55 +05:30
flysand7 561b96b20d [sys/windows]: Fix the value for TH32CS_SNAPPROCESS constant 2024-06-30 13:34:08 +11:00
gingerBill afe24a0d4d Merge pull request #3838 from flysand7/windows-tlhelp
[core/windows]: Bind tlhelp.h functions from kernel32.dll
2024-06-30 02:52:35 +01:00
flysand7 2737ccab3d [core/windows]: Bind tlhelp.h functions from kernel32.dll 2024-06-30 12:35:42 +11:00
Feoramund 8ed5cb283b Re-implement the error squiggles with visual width 2024-06-29 18:55:12 -04:00
Feoramund 8b305a4c67 Add UCG library to Odin compiler 2024-06-29 18:42:56 -04:00
gingerBill 80592f0f51 Add -disallow-do in CI 2024-06-29 22:50:23 +01:00
gingerBill af3401631a Remove the -disallow-do aspect from -strict-style 2024-06-29 22:48:43 +01:00
gingerBill 5637ed9ecd Merge pull request #3836 from laytan/run-wasi-demo-in-ci
wasi: make the demo run on wasi and run it in CI
2024-06-29 22:30:31 +01:00
Laytan Laats 604551eb2d wasi: make the demo run on wasi and run it in CI 2024-06-29 23:15:31 +02:00
Jeroen van Rijn 476d0087c8 Fix bug in div3 fast path. 2024-06-29 23:14:12 +02:00
gingerBill 34fce83d66 Improve -strict-style rules for if-else statements 2024-06-29 20:04:34 +01:00
gingerBill b1a1da6618 Add -vet-tabs 2024-06-29 19:54:31 +01:00
gingerBill e296d6fb90 Fix loads of indentation issues with mixing spaces and tabs 2024-06-29 19:50:51 +01:00
gingerBill 90244a0849 Fix accidental deletion in the -strict-style help comment 2024-06-29 19:41:45 +01:00
gingerBill f4abdf716e Move microarch stuff to a separate file 2024-06-29 19:29:20 +01:00
gingerBill f64d1df90b Add note regarding -strict-style 2024-06-29 19:27:26 +01:00
gingerBill 888bf28076 -strict-style implies -disallow-do 2024-06-29 19:26:11 +01:00
gingerBill 103eccf104 More style improvements 2024-06-29 19:23:58 +01:00
gingerBill 663661db53 Update core to -strict-style 2024-06-29 19:16:32 +01:00
gingerBill 835e8bf87a Update -strict-style 2024-06-29 19:15:33 +01:00
gingerBill 2187f3e7ff -strict-style enforce 1TBS (mostly) 2024-06-29 19:14:24 +01:00
gingerBill 5413a8b744 Even more style fixes 2024-06-29 19:11:36 +01:00
gingerBill 3f9a58808c More style improvements 2024-06-29 19:07:34 +01:00
gingerBill e8517e2694 -strict-style: enforce case to be in the same column as switch 2024-06-29 18:56:45 +01:00
gingerBill 96330996a6 Fix indentation 2024-06-29 18:51:39 +01:00
gingerBill b0cbda4ee0 Fix indentation of tests 2024-06-29 18:51:28 +01:00
gingerBill 930c929294 Indentation fixes 2024-06-29 18:49:57 +01:00
gingerBill 7f05b4caf2 Fix generation for unicode entities 2024-06-29 18:43:09 +01:00
gingerBill 6db748b4a4 Remove debug message 2024-06-29 16:18:43 +01:00
gingerBill a935ade0d2 Keep -sanitize:address happy with bit_field loads 2024-06-29 16:18:07 +01:00
gingerBill ff2d042313 Remove unneeded transmute 2024-06-29 13:54:15 +01:00
gingerBill 913c08a33e Add bit_field to demo.odin 2024-06-29 12:56:46 +01:00
gingerBill c88a1bef91 Add another -vet-cast check 2024-06-29 12:40:04 +01:00
gingerBill 706adb1232 Update for transmute -vet-cast 2024-06-29 12:16:43 +01:00
gingerBill b9861a0cf6 cast to transmute 2024-06-29 12:14:21 +01:00
gingerBill e46d772b6d Add check for integer casts 2024-06-29 12:13:41 +01:00
gingerBill c18c0a3364 Adhere to -vet-cast 2024-06-29 12:07:21 +01:00
gingerBill d6b8544f50 Add internal flag for testing stuff 2024-06-29 12:04:31 +01:00
gingerBill 4b71c47fd5 Check for unneeded transmute with -vet-cast 2024-06-29 12:02:31 +01:00
gingerBill 704530497b Rename -vet-identical-cast to -vet-cast; with minor code clean up 2024-06-29 11:44:45 +01:00
gingerBill 4be0fc05bb Merge pull request #3832 from Feoramund/vet-identical-cast
Add `-vet-identical-cast`
2024-06-29 11:37:35 +01:00
gingerBill 52aa7085e4 Use f32 as the immediate type for addition and subtraction for complex32/quaternion64 2024-06-29 11:09:54 +01:00
gingerBill 9113f389d8 Merge pull request #3831 from Feoramund/fix-darwin-test-runner-cancel
Let Darwin safely panic in a test
2024-06-29 11:01:01 +01:00
gingerBill 55e9b8d994 Use explicit calling conventions 2024-06-29 10:48:41 +01:00
gingerBill ee2a0c4010 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-06-29 10:47:15 +01:00
gingerBill f974002839 Use f32 operations rather than f16 in complex32 and quaternion64 to improve accuracy and performance 2024-06-29 10:47:09 +01:00
gingerBill 83b575aec2 Merge pull request #3833 from karl-zylinski/consistent-default-dynamic-array-capacity
Consistent dynamic array default capacity and avoid unnecessary dynamic array allocations
2024-06-29 10:38:22 +01:00
gingerBill 906afa4154 Allow for when x in y { (minor oversight in syntax) 2024-06-29 10:13:15 +01:00
Karl Zylinski 679f9b4e41 Made default capacity of dynamic arrays more consistent.
Before this if you do `arr: [dynamic]int` and then append to arr, then it will have capacity 8.
But if you did `arr := make([dynamic]int, context.temp_allocator)` then arr would have capacity 16.

Now both `arr: [dynamic]int` and `arr := make([dynamic]int, context.temp_allocator)` will resut in arr having zero 0. The only reason to use `make` without an explicit len or cap now is because you want to set it up for a non-default allocator. After the first call to `append` it will now in both cases have capacity 8.

I also updated the documentation on the strings builder, both to reflect this, and also to fix it incorrectly saying that len would be 'max(16,len)', which wasn't true even before these changes.
2024-06-29 08:57:21 +02:00
Feoramund b3caae6db4 Keep -vet happy 2024-06-28 23:14:03 -04:00
Feoramund 6496432b80 Add -vet-identical-cast 2024-06-28 23:14:03 -04:00
Feoramund 0ea0fac2f9 Call pthread_cancel on Darwin, with advisory comment 2024-06-28 20:47:37 -04:00
Feoramund 13539d3be1 Catch SIGTRAP in the test runner
Fixes `panic` for Darwin.
2024-06-28 19:43:03 -04:00
Feoramund 929cc48703 Merge Darwin signals into other UNIX-likes
They're all the same.
2024-06-28 19:03:43 -04:00
Jeroen van Rijn 06652bebce Merge pull request #3829 from Feoramund/fix-vetted-test-name
Let `-vet` be used with `-define:ODIN_TEST_NAMES`
2024-06-28 23:06:25 +02:00
Feoramund 574342af6f Let -vet be used with -define:ODIN_TEST_NAMES 2024-06-28 15:58:22 -04:00
Jeroen van Rijn 007832488d Merge pull request #3827 from Feoramund/require-runtime-linalg-import
Require `base:runtime` import in `core:math/linalg`
2024-06-28 17:44:10 +02:00
Feoramund 2af121752a Require base:runtime import in core:math/linalg 2024-06-28 11:34:35 -04:00
gingerBill 0c8924ea85 Merge pull request #3822 from jasonKercher/os2-rebase
os2 linux round 2
2024-06-28 15:43:18 +01:00
jason 6a894195cb revert os2/process 2024-06-28 09:45:22 -04:00
jason dc954307d7 fix assumption about std handles in os2/file.odin 2024-06-28 07:55:33 -04:00
jason a15cbc474d change error strings to an enumerated array in rodata; print_error takes a file argument 2024-06-28 07:45:24 -04:00
gingerBill 37afd469c6 Merge pull request #3339 from axxeny/patch-1
fix comments in core:container/queue.
2024-06-28 12:00:34 +01:00
gingerBill 853173a11b Merge pull request #3517 from timosperisen/patch-1
Update builder.odin
2024-06-28 12:00:23 +01:00
gingerBill a1ae6f161b Merge pull request #3502 from ARtemachka/master
Fix typo in core_builtin
2024-06-28 12:00:10 +01:00
gingerBill 883f6c129a Merge pull request #3643 from korvahkh/fix-omitempty-comma
encoding/json: Fix struct marshal() emitting comma after omitted field
2024-06-28 11:50:31 +01:00
gingerBill 861d51b760 Merge pull request #3825 from Valakor/wgpu
wgpu_native fixes
2024-06-28 11:49:35 +01:00
gingerBill 17efb87eef Add -custom-attribute 2024-06-28 11:44:39 +01:00
gingerBill 1747fdc3f0 Fix signature 2024-06-28 11:07:54 +01:00
gingerBill bef3ca98f0 Fix signature 2024-06-28 11:01:57 +01:00
gingerBill e15c5c4692 Fix missing import 2024-06-28 10:32:16 +01:00
gingerBill 9a4ffa79db Add missing libraries to examples/all 2024-06-28 10:17:00 +01:00
gingerBill ec38215842 Fix #3803 2024-06-28 10:09:46 +01:00
gingerBill 67e9a6fd9b Improve error reporting on "Failed to parse fail" and show the line error if possible 2024-06-28 10:04:08 +01:00
gingerBill 4824050c99 Merge pull request #3792 from Feoramund/core-uuid
Add `core:encoding/uuid`
2024-06-28 09:49:23 +01:00
gingerBill 35651cfc17 Improve tokenization for false integer literals but not effect possible float literals 2024-06-28 09:24:34 +01:00
gingerBill dde7cb6e7f Improve error message for #3754 2024-06-28 09:21:33 +01:00
gingerBill 862a04376f Improve tokenizing wrong number literals 2024-06-28 09:16:01 +01:00
gingerBill 5a9698e8cb Properly fix #3820 2024-06-28 09:08:57 +01:00
gingerBill 0c8a81d298 Fix #3819 2024-06-28 08:57:31 +01:00
gingerBill 06ff08b9cf Fix #3820 2024-06-28 08:53:05 +01:00
gingerBill 52ea63f89c Fix #3471 2024-06-28 08:43:25 +01:00
gingerBill f883cd5053 Initialize default context in heap_allocator_other.odin 2024-06-28 08:33:12 +01:00
Matthew Pohlmann 4bf9de7237 SupportedLimitsExtras.chain should be a ChainedStructOut to properly chain from SupportedLimits 2024-06-27 21:53:16 -07:00
Matthew Pohlmann 0a504c2647 Some fixes to wgpu_native.
1. LogCallback should have the "c" calling convention and takes a
   userdata pointer like other callbacks.
2. DevicePoll's wrappedSubmissionIndex argument is an optional in/out
   parameter. The previous wrapper method was broken since it passed a
   non-nil structure to the underlying API with invalid members.
2024-06-27 21:41:48 -07:00
Jeroen van Rijn d31f88bfaa Merge pull request #3823 from laytan/enforce-global-foreign-import-variables
disallow non-global foreign import of variables on wasm
2024-06-28 02:11:50 +02:00
Laytan Laats b79d7e6917 disallow non-global foreign import of variables on wasm 2024-06-28 01:34:09 +02:00
Jeroen van Rijn ed7d34beb0 Avoid sporadic wasm crash 2024-06-28 00:39:51 +02:00
Jeroen van Rijn aba274cf75 Merge pull request #3821 from Kelimion/clang_override
Allow `ODIN_CLANG_PATH=clang-path` overrides for link stage.
2024-06-27 23:36:39 +02:00
Jeroen van Rijn 140ee036ce wasm error is no longer relevant 2024-06-27 23:29:36 +02:00
Jeroen van Rijn 58cd75350b Allow ODIN_CLANG_PATH=clang-path overrides
Link using `clang`, unless overridden by `ODIN_CLANG_PATH` environment variable.

Fixes #3783
2024-06-27 23:21:58 +02:00
jason f24f72c280 convert all to use sys/linux over sys/unix; new implementations for pipe, process and env 2024-06-27 17:14:48 -04:00
jason f22754fc90 sys/linux: fix some syscalls and types; add more to Sig_Action and Sig_Info; Pid int->i32 2024-06-27 16:29:47 -04:00
Jeroen van Rijn a0a48bfe34 Fix alignment. 2024-06-27 21:56:26 +02:00
Jeroen van Rijn 9f8b84c212 Merge pull request #3815 from laytan/tlsf-fixes
tlsf: destroy first pool & properly zero memory
2024-06-27 19:50:24 +02:00
Laytan Laats 1c199f52d6 tlsf: destroy first pool & properly zero memory 2024-06-27 19:27:07 +02:00
gingerBill 521182a100 Merge pull request #3813 from tadeohepperle/fix-vulkan-codegen-arrays-as-proc-args
Fix `vender:vulkan` codegen for procedures with fixed size arrays are arguments
2024-06-27 16:34:17 +01:00
Jeroen van Rijn aa27cd4b0b Allow core:odin to parse @(require) import 2024-06-27 16:14:16 +02:00
gingerBill b1d06ea03f Merge pull request #3808 from karl-zylinski/fix-append-elem-max-confusion
Replace `max(8, 1)` in _append_elem with just `8` and a comment.
2024-06-26 21:14:08 +01:00
Jeroen van Rijn e37afa3ada Merge pull request #3814 from Kelimion/fix_fixed
Fix core:math/fixed.
2024-06-26 20:46:46 +02:00
Tadeo hepperle b834bd32f5 fix typo 2024-06-26 20:31:43 +02:00
Jeroen van Rijn 3726f0b73c Merge pull request #3812 from Feoramund/add-table-decorations
Add `write_decorated_table` to `text/table`
2024-06-26 20:15:11 +02:00
Jeroen van Rijn c33bf7673f Fix core:math/fixed. 2024-06-26 20:12:55 +02:00
Tadeo hepperle 67e69f7196 Merge branch 'master' into fix-vulkan-codegen-arrays-as-proc-args 2024-06-26 19:31:00 +02:00
Tadeo hepperle 18dadd94e3 fix proc parsing 2024-06-26 19:30:21 +02:00
Feoramund ba354e0524 Add documentation for write_decorated_table 2024-06-26 12:53:34 -04:00
Feoramund f13d30ad23 Add write_decorated_table API 2024-06-26 12:50:43 -04:00
Jeroen van Rijn 8d1827838f Merge pull request #3807 from karl-zylinski/ctprint
Added fmt.ctprint
2024-06-25 22:52:48 +02:00
Karl Zylinski f227a40652 Replace max(8, 1) in _append_elem with just 8 and a comment. 2024-06-25 22:48:14 +02:00
Karl Zylinski 4e2d12c540 Added fmt.ctprint 2024-06-25 22:32:20 +02:00
Jeroen van Rijn 5d1d98cef3 Merge pull request #3806 from NicknEma/windows_fixes
Update CommandLineToArgvW return type
2024-06-25 12:22:27 +02:00
NicknEma 845613c404 Update CommandLineToArgvW return type
It now returns a multi-pointer so it can be iterated without any casting.
2024-06-25 12:10:17 +02:00
gingerBill 93441a043a Make runtime.heap_alloc contextless 2024-06-25 09:38:49 +01:00
gingerBill c098739484 Remove @(warning) and #warning(...) 2024-06-25 09:36:59 +01:00
Jeroen van Rijn e42029c5ed wgpu ld -> dl 2024-06-25 01:35:26 +02:00
Jeroen van Rijn d97fe41834 Mark deux 2024-06-24 22:45:12 +02:00
Jeroen van Rijn d3d73590d3 Fix CSV comments. 2024-06-24 22:43:14 +02:00
Jeroen van Rijn 185e39e53d Merge pull request #3791 from Feoramund/fix-text-table-alignment
Refactor `core:text/table`
2024-06-24 21:59:33 +02:00
Feoramund 8b05ec1765 Add string caching example documentation 2024-06-24 15:11:43 -04:00
Feoramund fbd609fa37 Add complete example showcasing Unicode support 2024-06-24 15:04:45 -04:00
Feoramund f325a08e57 Make core:text/table examples more complete
They should be completely copy-and-paste friendly now, without the
assumption of someone using `using table`.
2024-06-24 15:04:45 -04:00
Feoramund 7a43404ea1 Add Width_Proc documentation 2024-06-24 15:04:45 -04:00
Feoramund 7da96c484d Remove table.dirty 2024-06-24 14:28:05 -04:00
Feoramund e397bdf11d Let WIDTH_PROC be specified as proc argument to write_*_table 2024-06-24 13:38:59 -04:00
Feoramund 67b4cb0038 Crunch the ranges 2024-06-24 13:18:54 -04:00
Jeroen van Rijn 8eafd9eb82 wgpu import 2024-06-23 22:19:29 +02:00
Feoramund ca58d7771b Use new API from_nanoseconds in uuid 2024-06-22 18:36:42 -04:00
Feoramund 8a4a3ed66e Change how Time is constructed in uuid 2024-06-22 18:21:32 -04:00
Feoramund 4481f9c695 Clarify some uuid legacy documentation 2024-06-22 18:21:32 -04:00
Feoramund 5a75cac5b9 Add API for creating custom version 8 UUIDs 2024-06-22 18:21:32 -04:00
Feoramund e9b882be05 Add vendor-specific version 8 UUID generation (hashing) 2024-06-22 18:21:32 -04:00
Feoramund 859cbf7d72 Test if v1 and v6 UUID node is set correctly 2024-06-22 18:21:32 -04:00
Feoramund d559feb701 Add uuid test for timestamps 2024-06-22 18:21:32 -04:00
Feoramund f6344577d3 Add UUID sorting tests 2024-06-22 18:21:32 -04:00
Feoramund 339b2b23f6 Add unsafe_write to uuid package 2024-06-22 18:21:32 -04:00
Feoramund 8b8f8c7f7d Address minor organizational issues 2024-06-22 18:21:32 -04:00
Feoramund 95a9c9b016 Fix indentation 2024-06-22 18:21:32 -04:00
Feoramund 9b3a104640 Add buffer-based to_string to uuid package 2024-06-22 18:21:32 -04:00
Feoramund 9b265b2309 Improve time-related API in uuid package
- Let timestamps be specified by the user.
- Change `time_v*` to `raw_time_v*` and implement an API that returns
  timestamps from the `time` package.
2024-06-22 18:21:32 -04:00
Feoramund ea771d0cb7 Update uuid package documentation 2024-06-22 18:21:31 -04:00
Feoramund fcdba334ea Require CSPRNG in UUID generation where applicable 2024-06-22 18:21:31 -04:00
Feoramund 3aa232a894 Move v3 and v5 UUID procs to uuid/legacy 2024-06-22 18:21:31 -04:00
Feoramund 9866b54d59 Add version 6 UUID generation 2024-06-22 18:21:31 -04:00
Feoramund 525bfca4ef Add version 1 UUID generation 2024-06-22 18:21:31 -04:00
Feoramund 4cfbd83b10 Add version 7 UUID generation 2024-06-22 18:21:31 -04:00
Feoramund fee81985b4 Make UUID namespaces @(rodata) 2024-06-22 18:21:31 -04:00
Feoramund 6da99b888a Make UUID Identfier only a distinct byte array 2024-06-22 18:21:31 -04:00
Feoramund 31873ed466 Fix wrong comments 2024-06-22 18:21:31 -04:00
Feoramund 4dacddd85e Add core:encoding/uuid 2024-06-22 18:21:27 -04:00
Jeroen van Rijn 3af9d31bd5 Add time.from_nanoseconds 2024-06-23 00:19:24 +02:00
Jeroen van Rijn dae9a8dfff Merge pull request #3796 from Feoramund/fix-lack-of-str-arg-or-cont
Fix print segfault by missing argument in `or_*` shadowed error
2024-06-22 17:57:02 +02:00
Feoramund f58eded5d2 Fix print segfault by missing argument in or_* shadowed error 2024-06-22 11:45:43 -04:00
Jeroen van Rijn 13c58948f4 Merge pull request #3793 from Kelimion/build_test_only
Add `-build-mode:test`
2024-06-21 16:12:13 +02:00
Jeroen van Rijn 9f696a646f Add -build-mode:test. 2024-06-21 16:02:55 +02:00
gingerBill bad4a6237e Delete misc/roadmap.md 2024-06-21 00:02:12 +01:00
Feoramund bf44a94065 Update core:text/table documentation 2024-06-20 18:22:03 -04:00
Feoramund 82d92dc46c Use log.error instead of eprintf 2024-06-20 17:53:45 -04:00
Feoramund b81458073e Add new API to core:text/table
- `header/row_of_values`, same `header/row`, more verbose name
- `aligned_header/row_of_values`, set alignment for an entire row
- `header/row_of_aligned_values`, set alignment per value
2024-06-20 17:53:45 -04:00
Feoramund 585747bbbf Clarify error message 2024-06-20 17:53:34 -04:00
Feoramund 99c955d124 Remove unneeded loc argument 2024-06-20 15:26:00 -04:00
Feoramund fd28199178 Optimize printing of markdown tables
Check only once if the table has a header row, instead of every row.
2024-06-20 15:01:09 -04:00
Feoramund dd099d9dd6 Add Unicode support to core:text/table 2024-06-20 15:01:09 -04:00
Feoramund 2241ca8e72 Use tabs to indent HTML tables 2024-06-20 13:06:32 -04:00
Feoramund b66b960e7e Don't build HTML tables
`build` only recalculates length and width information, and this is not
needed for HTML tables.
2024-06-20 13:06:32 -04:00
Feoramund 4a3684c5e8 Rename write_ascii_table to write_plain_table 2024-06-20 13:06:28 -04:00
Jeroen van Rijn 91cc006e8f Fix unaligned store for rand 2024-06-20 17:54:37 +02:00
Jeroen van Rijn ac4577ca66 Merge pull request #3790 from Feoramund/optimize-common-rng-dest-size
Optimize default RNG for the common case
2024-06-20 17:41:13 +02:00
Feoramund 1dfc89567e Optimize default RNG for the common case 2024-06-20 11:27:51 -04:00
gingerBill 28e33d86de Merge pull request #3776 from IllusionMan1212/os2-read-fix
fix(os2): check for 0 bytes read and return EOF
2024-06-20 15:37:41 +01:00
gingerBill dab3c832e0 Add #warning(<string>) builtin compile time procedure 2024-06-20 15:32:30 +01:00
Jeroen van Rijn 94a8c38d86 Add GetNumberOfConsoleInputEvents 2024-06-20 15:19:25 +02:00
gingerBill 8c760e140f Move import to a windows specific file 2024-06-20 12:38:09 +01:00
gingerBill 3db7780a2c Add vendor:wgpu to examples/all 2024-06-20 12:20:06 +01:00
gingerBill 8b446fc88d Fix wgpu paths for Windows 2024-06-20 12:18:26 +01:00
gingerBill c9884906d9 Add #directory 2024-06-20 12:15:55 +01:00
gingerBill 5dc98336a8 Merge pull request #3524 from Feoramund/freebsd-amd64-syscall-errno
Add `intrinsics.syscall_bsd`
2024-06-20 11:47:01 +01:00
gingerBill 23351ca8be Merge pull request #3137 from laytan/show-defineable
Add flags to show/export defineable values and warn if a -define is unused in the project
2024-06-20 11:45:52 +01:00
gingerBill 56383e45a7 Fix #3768 2024-06-20 11:44:00 +01:00
gingerBill 7184792f7a Merge pull request #3740 from laytan/wgpu
Add `vendor:wgpu`
2024-06-20 11:39:58 +01:00
gingerBill d4aa6c3288 Merge pull request #3788 from Beefster09/builder-utils
Add to_cstring for Builders
2024-06-20 11:34:03 +01:00
gingerBill 7703bc595c Merge pull request #3789 from Feoramund/unicode-annex-11
Measure `East_Asian_Width` during grapheme decoding
2024-06-20 11:32:06 +01:00
Feoramund e620645a03 Measure East_Asian_Width during grapheme decoding 2024-06-19 22:35:36 -04:00
Justin Snyder 1a6bb59125 drop unnecessary defer 2024-06-19 18:25:42 -06:00
Justin Snyder 271782d2f4 fix typo
apparently i had a moment of dyslexia
2024-06-19 17:53:34 -06:00
Justin Snyder 1b7c4c2efe trim added null byte 2024-06-19 17:35:16 -06:00
Jeroen van Rijn 4380934283 Merge pull request #3787 from jasonKercher/more-windows-comm
Add more bindings for comm ports and console events
2024-06-19 23:32:12 +02:00
Jeroen van Rijn 21806e5fa5 Merge pull request #3786 from fabiansperber/fix-d3d11-infoqueue
Fix d3d11 IInfoQueue_VTable & Add LoadLibraryExW
2024-06-19 23:26:40 +02:00
jason 93e67f6bec make -strict-style happy 2024-06-19 17:15:09 -04:00
jason 6b1e76985c move DCB to types.odin; add more bindings for comm functions 2024-06-19 17:04:18 -04:00
Fabian Sperber 0e9bf86123 Fix d3d11 IInfoQueue_VTable & Add LoadLibraryExW
- wrong order & was missing PushStorageFilter & PushRetrievalFilter
2024-06-19 22:22:26 +02:00
Justin Snyder 8f2c4a7ecf Add builder to_cstring 2024-06-19 11:55:19 -06:00
jason e6d84d18d3 Merge remote-tracking branch 'origin/master' into more-windows-comm 2024-06-19 12:33:13 -04:00
jason a9b6d28291 save before merging from upstream 2024-06-19 12:33:05 -04:00
Jeroen van Rijn 2797dc6452 Merge pull request #3785 from mgavioli/new_i18n_API
Separate I18N calls for immutable and for pluraliseable strings. Fixes #3687
2024-06-19 11:50:24 +02:00
Jeroen van Rijn 322b7f1f2f Spell check i18n.odin. 2024-06-19 11:41:58 +02:00
Jeroen van Rijn e0de52efa1 Spell check doc.odin. 2024-06-19 11:15:17 +02:00
Maurizio M. Gavioli 53755824fb Separate the I18N calls for immutable strings and for pluraliseable strings.
Also update tests.
2024-06-19 10:10:26 +02:00
Jeroen van Rijn 7064166da2 Merge pull request #3767 from Feoramund/use-rng-context-in-test-runner
Setup `context.random_generator` in test runner
2024-06-19 09:51:13 +02:00
Feoramund d4803583ff Work around Windows test failure
I am uncertain why this works, but it does. Previously, `rtti_test` was
failing due to non-zero data appearing in the `l_buggy` `Buggy_Struct`.

The issue was caused by calling `runtime.default_random_generator` with
a pointer to the state, somehow. The pointer could be on the stack or in
the heap; it did not matter.

I found two workarounds.

- One is to move the RNG setup behind the call to `free_all`.
- The other is to construct the random generator manually.

Despite my digging and testing, I could find no reason as to why this
works or what the fundamental issue was to begin with. If anyone comes
upon this in the future with direct access to a Windows machine, I
recommend stepping through the program with a debugger to investigate
more deeply into why this happens.
2024-06-18 23:21:04 -04:00
Jeroen van Rijn dff8a9153e Merge pull request #3781 from Feoramund/add-missing-test-imports
Add missing imports to `core` test suite
2024-06-18 18:20:02 +02:00
Feoramund e3f4772d01 Fix removal of temporary file in core:flags test 2024-06-18 11:06:49 -04:00
IllusionMan1212 c987b964c8 fix(os2): check for 0 bytes read and return EOF 2024-06-18 17:03:54 +02:00
Feoramund 6b25d17ef9 Add missing imports to core test suite 2024-06-18 10:38:43 -04:00
gingerBill 3d9db56410 Minor formatting changes to unicode stuff 2024-06-18 12:53:56 +01:00
gingerBill 02cd53d42c Merge pull request #3700 from Feoramund/core-flags
Add package `core:flags`
2024-06-18 12:48:57 +01:00
gingerBill de23965ecb Merge pull request #3775 from Feoramund/unicode-graphemes
Add grapheme analysis facilities to `core:unicode`
2024-06-18 12:48:31 +01:00
gingerBill e8c17ac356 Merge pull request #3778 from Feoramund/fix-2824
Allow custom `main` when `-no-entry-point` is set
2024-06-18 12:46:33 +01:00
gingerBill dc03e8380d Merge pull request #3779 from karl-zylinski/clarify-usage-of-temp-allocator-arena
Clarify when the arena in base:runtime should be used
2024-06-18 12:45:43 +01:00
Jeroen van Rijn aad7ddf2d1 Merge pull request #3780 from destroycomputers/fix/rbtree/key-ordering-constraint
Loosen constraint on the Key type in rb & avl tree
2024-06-18 13:42:36 +02:00
destroycomputers de44dd5412 Loosen constraint on the Key type in rb & avl tree
The current constraint on the `init_ordered' function accepts only
numeric types. While one still can init a non-numerically-keyed tree by
passing a comparator explicitly, the reason to disallow non-numeric
ordered types is nowhere to be found.
2024-06-18 13:31:45 +02:00
Karl Zylinski 11e586494b Clarify that the arena in base:runtime shouldn't be used for anything but the default temp allocator. This is done by renaming the file in which it lives, and also by improving the comment above Arena :: struct {. This should avoid some confusion where people end up using the Arena in base:runtime because they thought it was the 'default arena'. 2024-06-18 12:48:16 +02:00
Jeroen van Rijn dd364c0c0f Merge pull request #3777 from Feoramund/fix-3047
Forbid private test cases
2024-06-18 12:09:58 +02:00
Feoramund 0196cc46e3 Allow custom main when -no-entry-point is set 2024-06-18 01:49:55 -04:00
Feoramund eb5a66c944 Forbid private test cases 2024-06-18 01:28:05 -04:00
Feoramund 9e4899d35c Add tests for decode_grapheme_clusters 2024-06-17 21:57:32 -04:00
Feoramund 63973f431e Make core:unicode letter procs @(require_results) 2024-06-17 21:57:32 -04:00
Feoramund 1620a69398 Add decode_grapheme_clusters to core:unicode/utf8 2024-06-17 21:57:32 -04:00
Feoramund 1a93dfd28f Fix indentation 2024-06-17 13:24:47 -04:00
gingerBill f280ba8511 Merge pull request #3756 from matias-eduardo/empty_structs_hash_fmt
Handle empty structs in hash (#v) fmt
2024-06-16 19:54:28 +01:00
Jeroen van Rijn a66ce4f871 Merge pull request #3773 from Kelimion/res_path_bug
Fix `rc.exe` bug with double-quoted `.res` path.
2024-06-16 19:27:13 +02:00
Jeroen van Rijn fe3baae7a6 Merge pull request #3772 from Feoramund/fix-constant-wrong-type-bitset
Fix `bit_set` construction crash on constant non-integer field
2024-06-16 19:15:50 +02:00
Jeroen van Rijn eebc0dd026 Fix rc.exe bug with double-quoted .res path. 2024-06-16 19:11:54 +02:00
Feoramund 78a5a27212 Fix bit_set construction crash on constant non-integer field 2024-06-16 12:27:42 -04:00
Jeroen van Rijn 339bafe6ff Merge pull request #3770 from skaman/fix-slice-unique
Fix `slice.unique` wrong result
2024-06-16 13:48:21 +02:00
Jeroen van Rijn 0268be1925 Add tests for slice.unique and slice.unique_proc 2024-06-16 13:41:25 +02:00
Sandro Cavazzoni e41878a64f Fix slice.unique wrong result
When you try to make this array unique `[]int{1, 2, 4, 4, 5}` you get
`[]int{1, 4, 5}` instead of `[]int{1, 2, 4, 5}`.
Our index `i` should be increased even with both indices `i` and `j`
have the same value
2024-06-16 11:36:20 +02:00
Feoramund 8b31cddaba Keep -vet happy 2024-06-15 15:49:05 -04:00
Feoramund aab5338134 Add tests for core:math/rand 2024-06-15 15:49:05 -04:00
Feoramund 1a52cf1f1c Use test's random generator
This removes the `create` calls when a test was only setting up a
generator, and it replaces them with `reset` when run in a loop.
2024-06-15 15:49:05 -04:00
Feoramund 5dfd303fd1 Setup default context.random_generator for tests 2024-06-15 15:44:56 -04:00
gingerBill a619ea3bcd Merge pull request #3766 from Feoramund/fix-rng-state
Fix `default_random_generator_proc` not using state
2024-06-15 20:36:10 +01:00
Feoramund 53140dca15 Fix default_random_generator_proc not using state 2024-06-15 12:54:30 -04:00
Jeroen van Rijn ed99e77433 Merge pull request #3765 from Feoramund/add-short-test-logs
Add `ODIN_TEST_SHORT_LOGS` define
2024-06-15 18:01:49 +02:00
gingerBill bacb915ff8 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-06-15 16:24:07 +01:00
gingerBill e41ad2bf16 to_random_generator -> random_generator 2024-06-15 16:24:01 +01:00
gingerBill 4c7469a264 Merge pull request #3764 from Feoramund/test-runner-fixes
Fix half-implemented features in the test runner
2024-06-15 16:19:58 +01:00
Feoramund 753516c392 Add ODIN_TEST_SHORT_LOGS define
Strips out the procedure, date, and time information, for when you just
need to know the file, line, and message.
2024-06-15 11:18:40 -04:00
Feoramund f353adc7fb Prefer log.error over fail_now in this case 2024-06-15 10:53:21 -04:00
Feoramund bb823d5ba0 Make testing.fail_now divergent
This is in line with the old way it worked on Windows.
2024-06-15 10:53:21 -04:00
gingerBill 1c940e3968 Remove dead variable 2024-06-15 15:53:16 +01:00
gingerBill c97ffbecbc Fix rand in container tests 2024-06-15 15:50:35 +01:00
gingerBill 2380720fa2 Fix core:sync/chan for rand 2024-06-15 15:46:48 +01:00
Feoramund 784408358d Call cleanups after test signal 2024-06-15 10:46:47 -04:00
gingerBill 149ecafdef Remove the need for rand in core:math/big 2024-06-15 15:43:57 +01:00
gingerBill 7ec17ecf98 Update core:math/rand to use context.random_generator and remove rand.Rand 2024-06-15 15:33:24 +01:00
gingerBill 318d5e4a7e Add Reset mode 2024-06-15 15:17:23 +01:00
gingerBill eaec8a2bbf Add runtime.default_random_generator 2024-06-15 15:08:49 +01:00
gingerBill c2a01096c4 Remove unneeded reassignment of r 2024-06-15 14:49:09 +01:00
gingerBill 827cb24023 Add random_generator.odin 2024-06-15 14:47:37 +01:00
gingerBill dc4ec8638c Add runtime.Random_Generator interface 2024-06-15 14:45:57 +01:00
Jeroen van Rijn 94ec647923 Merge pull request #3750 from Kelimion/dcb_bitfield
Update kernel32 struct DCB.
2024-06-15 12:14:27 +02:00
Feoramund 51a013fcf1 Work around BSD lack of core:net support 2024-06-15 01:32:48 -04:00
Feoramund f28c6c3bba Keep -vet happy 2024-06-15 00:50:12 -04:00
Feoramund 53e2cdf7af Add core:flags to examples/all 2024-06-15 00:28:47 -04:00
Feoramund 76575e834b Raise error on spaced UNIX-style flag with no value 2024-06-15 00:24:59 -04:00
Feoramund 42a5a2cf17 Fix memory leak in core:flags validation 2024-06-15 00:01:33 -04:00
Feoramund c3acdeb310 Add -- parsing to UNIX-style core:flags
This will allow a user to indicate all arguments after `--` are parsed
into the variadic array.
2024-06-14 23:59:01 -04:00
Feoramund d4e2fa0377 Refactor show_error_on_line
This should adequately solve any issues with Unicode alignment by
sidestepping the issue entirely. With this change, we make use of the
built-in ANSI facilities of the terminal to underline the text.

If the terminal does not support underlining, there are still the
fallback bold markers at the start and end of error locations.
2024-06-14 18:28:47 -04:00
Feoramund 582154f20d Remove unused code from tokenizer 2024-06-14 15:44:50 -04:00
Jeroen van Rijn 908a6ff2d4 Elide unnecessary condition 2024-06-14 21:34:05 +02:00
Jeroen van Rijn 09b3f5a7a7 Merge pull request #3757 from thetarnav/patch-2
Add `#no_bounds_check` to `slice.equal`
2024-06-14 21:27:21 +02:00
Jeroen van Rijn fa4fbbe1ce Merge pull request #3758 from jones-josh/master
Fix big.shrink not actually shrinking
2024-06-14 20:27:03 +02:00
Josh Jones 759139089f Fix big.shrink not actually shrinking 2024-06-14 19:58:13 +02:00
Damian Tarnawski 8ba644dd79 Add #no_bounds_check to slice.equal 2024-06-14 19:45:54 +02:00
Feoramund 8626d38db1 Fix displaying emptiness when error is on first line 2024-06-14 13:02:54 -04:00
Jeroen van Rijn b19bf5bbda Merge pull request #3732 from FrancisTheCat/master
add missing functions to core:sys/windows
2024-06-14 17:57:23 +02:00
Feoramund ca481dc52d Fix displaying error on wrong line with token at EOL
Previously, this would get a token on text like "\n*\n" where `*`
is the token's position, and it would advance off that line.
2024-06-14 11:51:03 -04:00
Franz Höltermann c3302615a3 Merge branch 'master' of https://github.com/FrancisTheCat/Odin 2024-06-14 17:43:09 +02:00
Franz Höltermann 3c3f0f90c2 Fixed WinEventFlags 2024-06-14 17:41:21 +02:00
FrancisTheCat cd5fa8523f Merge branch 'odin-lang:master' into master 2024-06-14 16:34:21 +02:00
Franz Höltermann ec7b77fc0f Improved win32 bindings according to Kelimions suggestions with enums and bitsets 2024-06-14 16:32:41 +02:00
Matias Fernandez 4baf101f15 Handle empty structs in fmt with hash 2024-06-14 05:36:23 -04:00
Jeroen van Rijn ff4787070d Revert "Merge pull request #3744 from Mango0x45/master"
This reverts commit 45044de0b7, reversing
changes made to 20c17ba6f9.
2024-06-14 00:06:55 +02:00
Jeroen van Rijn 54a3cfb540 Merge pull request #3753 from Feoramund/fix-silent-token-fail
Fix compiler silently returning if `parse_packages` fails
2024-06-13 19:33:02 +02:00
Feoramund c560553c21 Fix compiler silently returning if parse_packages fails 2024-06-13 13:01:51 -04:00
Jeroen van Rijn 45044de0b7 Merge pull request #3744 from Mango0x45/master
Pad ‘^~~~^’-style diagnostic ranges properly
2024-06-13 17:34:17 +02:00
Jeroen van Rijn c9c7d3270d Merge branch 'master' of https://github.com/Mango0x45/Odin into pr/3744 2024-06-13 17:27:00 +02:00
Thomas Voss 9f7ac1469f Generate ranges of the correct length 2024-06-13 17:24:56 +02:00
Jeroen van Rijn ca9d1f940d Just change squiggle_extra type to i32. 2024-06-13 17:23:30 +02:00
Thomas Voss 9f190f3937 Generate ranges of the correct length 2024-06-13 17:00:13 +02:00
Thomas Voss 657c516360 Pad ‘^~~~^’-style diagnostic ranges properly 2024-06-13 16:23:34 +02:00
Jeroen van Rijn 20c17ba6f9 Merge pull request #3751 from Kelimion/custom_formatter
Add example of a custom formatter.
2024-06-13 11:42:38 +02:00
Jeroen van Rijn 3d4e23d741 Add example of a custom formatter. 2024-06-13 11:33:37 +02:00
Jeroen van Rijn 50564a301e Update kernel32 struct DCB. 2024-06-13 10:22:44 +02:00
Jeroen van Rijn f8f6f2dada Merge pull request #3749 from Feoramund/fix-w
Improve support for `%w`
2024-06-13 10:07:48 +02:00
korvahkh 104ca2ce22 Merge branch 'odin-lang:master' into fix-omitempty-comma 2024-06-13 01:27:44 +00:00
Feoramund abe5c2ca83 Add test for %w 2024-06-12 21:07:15 -04:00
Feoramund 0c9f487783 Fix and document %w verb for core:fmt 2024-06-12 20:35:50 -04:00
gingerBill a67df07392 Merge pull request #3742 from karl-zylinski/fix-raymath-matrix-to-float
Make rl.MatrixToFloatV do same thing in Odin as in C
2024-06-12 23:15:48 +01:00
Jeroen van Rijn 05972eb26b Merge pull request #3746 from jasonKercher/add-commtimeouts
add COMMTIMEOUTS, get/setCommTimeouts
2024-06-12 21:50:10 +02:00
gingerBill 4ccc473e97 Merge pull request #3745 from karl-zylinski/rlgl-add-missing-types
rlgl: Pull in raylib and expose missing types
2024-06-12 20:48:22 +01:00
gingerBill 90815452ca Merge pull request #3747 from Feoramund/fix-3739
Fix #3739
2024-06-12 20:48:02 +01:00
jasonkercher a804463a57 add COMMTIMEOUTS, get/setCommTimeouts 2024-06-12 15:31:59 -04:00
Feoramund 33270f14a4 Fix #3739 2024-06-12 15:31:43 -04:00
Karl Zylinski c7ea4ec71c rlgl: Pull in raylib and expose missing types, so it is the same as rlgl.h. This makes rlgl less stand-alone, but I left some notes in rlgl.odin how to easily make it stand-alone if one really wants to. 2024-06-12 21:13:12 +02:00
Karl Zylinski d37b5a7b67 Make rl.MatrixToFloatV transpose the matrix before transmuting it to [16]f32, so it does the same thing as the raymath version implemented in C. 2024-06-12 19:54:14 +02:00
Feoramund 1128bd1d7f Use syscall_bsd on NetBSD 2024-06-12 13:34:36 -04:00
Feoramund 20c32c807d Fix info.init_os_version on FreeBSD
It's possible for the return string to be longer than 128 characters
these days, so I've increased it to 1024, same as the other BSDs.

SYSCTL was otherwise erring out due to lack of buffer space.
2024-06-12 13:10:19 -04:00
Feoramund 5b5402fb23 Add intrinsics.syscall_bsd
This is a BSD-style syscall that checks for a high Carry Flag as the
error state. If the CF is high, the boolean return value is false, and
if it is low (no errors) then the boolean return value is true.
2024-06-12 13:07:13 -04:00
Laytan Laats 108b8feb35 Add vendor:wgpu 2024-06-12 17:22:02 +02:00
Jeroen van Rijn 603581aa53 Merge pull request #3738 from Kelimion/xml_attr
Xml attr
2024-06-12 14:06:40 +02:00
gingerBill c5f7788652 Check to see if matrices are exactly the same type 2024-06-12 12:54:57 +01:00
gingerBill f57c03c170 Improve matrix type hinting rules a little 2024-06-12 12:40:29 +01:00
Jeroen van Rijn 2fe961cbcd Fold XML attribute whitespace. 2024-06-12 13:30:00 +02:00
Jeroen van Rijn ebadff555d Update XML reader to normalize whitespace, part 1. 2024-06-12 12:52:48 +02:00
gingerBill cb45aa58fd Merge pull request #3731 from karl-zylinski/rlgl-subpackage
Move rlgl to vendor:raylib/rlgl
2024-06-12 11:51:16 +01:00
gingerBill e87c5bca58 Merge pull request #3737 from karl-zylinski/raylib-shader-location-index-any-int
Made rl.SetShaderValue etc take a c.int like in original raylib
2024-06-11 21:45:40 +01:00
Jeroen van Rijn 0398388a59 Merge pull request #3729 from Feoramund/fix-3460
Fix #3460
2024-06-11 20:32:37 +02:00
Karl Zylinski 1a22f82f94 Changed rl.SetShaderValue etc to take a c.int like in original raylib.h. You should be able to use other values than the ShaderLocationIndex enum, that enum is only for build in things in raylib. Added #any_int on those procs so you can pass both int and also a ShaderLocationIndex. 2024-06-11 18:03:20 +02:00
gingerBill 35a845b93f Fix indentation 2024-06-11 13:12:41 +01:00
gingerBill 3ff8952813 Replace panic(fmt.tprintf( antipattern with fmt.panicf 2024-06-11 13:11:14 +01:00
gingerBill 56c5e93fd1 Merge pull request #3728 from Feoramund/mem-any-int
Use `#any_int` for `reserve_*` and `resize_*` procs
2024-06-11 12:52:50 +01:00
gingerBill 39b166edd3 Merge pull request #3733 from Feoramund/ci-freebsd
Add FreeBSD to the CI
2024-06-11 12:51:42 +01:00
gingerBill eaf1d88287 Merge pull request #3734 from Feoramund/fix-3730
Fix #3730
2024-06-11 12:50:41 +01:00
gingerBill 1dc90103bd Make verification ignorable with a define flag 2024-06-11 12:30:24 +01:00
gingerBill 0b02c67cdf Minor clean up for backend 2024-06-11 12:19:52 +01:00
gingerBill 9b0e87544a Unify LLVMVerifyFunction invocations into on place 2024-06-11 12:07:22 +01:00
Feoramund 61c630bbf8 Fix #3730 2024-06-11 05:23:43 -04:00
Feoramund 0e6bcd0dbb Add FreeBSD to CI 2024-06-11 04:16:42 -04:00
Feoramund fc88de12c2 Implement absolute_path_from_handle for FreeBSD 2024-06-11 04:16:42 -04:00
Feoramund a3da796d54 Fix file_size on FreeBSD
It was using the generic UNIX `fstat` implemented in Odin, which is more
than what is needed here.

This also avoids the issue of needing a proper
`absolute_path_from_handle` implementation for it to work without error.
2024-06-11 03:55:41 -04:00
Feoramund 40e99ebb10 Fix file open O_* flags on FreeBSD 2024-06-11 03:55:41 -04:00
Feoramund c68560c573 Use correct __error link name for FreeBSD 2024-06-11 03:55:41 -04:00
Feoramund 76292c8ed5 Forbid all BSDs from running core:net tests
`net` is not yet implemented on them.
2024-06-11 03:55:41 -04:00
Franz Höltermann c6c00c706a Merge branch 'master' of https://github.com/odin-lang/Odin 2024-06-11 09:37:20 +02:00
Franz Höltermann 6454c6f087 Added some missing functions to core/sys/windows 2024-06-11 09:35:59 +02:00
Karl Zylinski c9e732d141 rlgl.RLGL_VERSION -> rlgl.VERSION 2024-06-11 08:59:30 +02:00
Karl Zylinski d2cd96c3c8 Made rlgl.odin work as a subpackage of raylib. So now you import vendor:raylib/rlgl. Instead of rl.rlBegin(rl.RL_TRIANGLES) you now type rlgl.Begin(rlgl.TRIANGLES). 2024-06-11 08:46:44 +02:00
Karl Zylinski 34af2bb8ad Moved rlgl.odin to subpackage 'raylib/rlgl' 2024-06-11 08:34:45 +02:00
Feoramund bd198aeada Fix #3460 2024-06-10 23:37:54 -04:00
Feoramund 50464bdce3 Use #any_int for reserve_* and resize_* procs
Resolves #3088
2024-06-10 20:51:58 -04:00
gingerBill f1779c85de Fix #3727 2024-06-10 18:50:53 +01:00
gingerBill 903e254e36 Merge pull request #3725 from laytan/add-forced-shutdown-to-test-runner
add forced shutdown to new test runner
2024-06-10 15:08:09 +01:00
gingerBill eef2aef021 Fix #3724 2024-06-10 15:07:45 +01:00
gingerBill c1e81dc14d Fix #3726 2024-06-10 15:05:24 +01:00
gingerBill fa3cae2bb0 Add intrinsics.procedure_of
```odin
foo :: proc(x: $T) { fmt.println(x) }
bar :: intrinsics.procedure_of(foo(int(123))) // parameters are never ran at compile time, similar to `size_of`
bar(333) // prints 333
```
2024-06-10 15:02:34 +01:00
Laytan Laats 71929f737b add forced shutdown to new test runner
Currently, a Ctrl+c starts a graceful shutdown of the tests and runner.
Sometimes tests get stuck and this would never complete.

This simply adds an extra step, if Ctrl+c is given for the second time,
just `os.exit` right away.
2024-06-10 15:35:23 +02:00
gingerBill 1945218f6d Improve parsing for label: #reverse for and label: #partial switch 2024-06-10 14:18:33 +01:00
Jeroen van Rijn bedeaa34d9 Merge pull request #3723 from Feoramund/use-final-march
Use `get_final_microarchitecture()` for `ODIN_MICROARCH_STRING`
2024-06-10 11:40:01 +02:00
Feoramund 71a812e7fe Use get_final_microarchitecture() for ODIN_MICROARCH_STRING 2024-06-10 05:30:16 -04:00
Jeroen van Rijn 741ee00b64 Merge pull request #3721 from Feoramund/add-tuning-consts
Add compilation-related constants
2024-06-10 10:31:12 +02:00
Jeroen van Rijn d3ae70264e Merge pull request #3720 from Feoramund/fix-force-inline-err-typo
Fix typo in a `#force_inline` error message
2024-06-10 10:25:09 +02:00
Jeroen van Rijn c8b376f07f Merge pull request #3719 from Feoramund/fix-orbranch-error
Fix `or_or_<branch>` error message
2024-06-10 10:21:05 +02:00
Feoramund ff7fcb6d38 Add compilation-related constants
`ODIN_VERSION_HASH` is the `git` SHA hash of the commit the Odin
compiler was built with.

`ODIN_MICROARCH_STRING` is the string passed to `-microarch` when
the program was built.

`ODIN_OPTIMIZATION_MODE` is an enum value of which optimization mode was
used to build the program.
2024-06-10 03:47:20 -04:00
Feoramund 45d1328a85 Fix typo in a #force_inline error message 2024-06-10 00:50:16 -04:00
Feoramund 8702bf00d5 Remove _ in Syntax_Error verbose message 2024-06-09 22:47:43 -04:00
Feoramund 9d28f2e18c Fix or_or_<branch> error messages 2024-06-09 22:46:45 -04:00
Jeroen van Rijn 5985c6e3df Merge pull request #3718 from Feoramund/add-missing-big-atoi-alias
Add missing `string_to_int` alias in `core:math/big`
2024-06-10 03:58:56 +02:00
Jeroen van Rijn 82e2d1916f Merge pull request #3717 from Feoramund/big-combo
Add permutation & combination procs to `core:math/big`
2024-06-10 03:47:55 +02:00
Feoramund 70820c2c40 Add missing string_to_int alias in core:math/big 2024-06-09 21:42:31 -04:00
Feoramund fe5c278fca Add test for core:math/big permutation & combination procs 2024-06-09 20:42:09 -04:00
Feoramund f0d65112b8 Rename math/big test package
This is in line with the other tests, and it does not seem to affect
building the library.
2024-06-09 20:42:07 -04:00
Feoramund 5fbd876db1 Add permutation & combination procedures to core:math/big 2024-06-09 20:42:04 -04:00
Jeroen van Rijn 4ea593bde0 Merge pull request #3716 from Feoramund/slice-permute
Add in-place permutation iterator to `core:slice`
2024-06-09 22:42:43 +02:00
Feoramund 047b505836 Add test for slice.permute 2024-06-09 16:15:43 -04:00
Feoramund 1f64d8d5bd Add slice.permute 2024-06-09 16:15:41 -04:00
gingerBill 7c529e990d Add -target:freestanding_arm32 (experimental) 2024-06-09 17:48:46 +01:00
gingerBill 828870004b Change indentation 2024-06-09 17:15:08 +01:00
Jeroen van Rijn 7e60e21934 Merge pull request #3714 from Kelimion/png_cleanup
PNG cleanup
2024-06-09 18:09:17 +02:00
Jeroen van Rijn 5be7d8e32d Clean up PNG code. 2024-06-09 17:59:59 +02:00
Jeroen van Rijn fc2ba81be0 Merge branch 'master' into png_cleanup 2024-06-09 17:13:43 +02:00
gingerBill edcbca51c3 Merge pull request #3684 from odin-lang/tlsf-allocator
`core:mem/tlsf` - "Two-Level Segregated Fit" memory allocator
2024-06-09 15:54:46 +01:00
Jeroen van Rijn 3c7e2659ac Merge branch 'master' into tlsf-allocator 2024-06-09 16:42:23 +02:00
Jeroen van Rijn 6b88d0a820 Use new blend helper 2024-06-09 16:37:27 +02:00
Jeroen van Rijn d2a2c1e74e Image: Add improved blending method and test it. 2024-06-09 16:10:06 +02:00
gingerBill ef7c6b9895 Re Fix #3713 2024-06-09 14:07:07 +01:00
gingerBill c17981ac38 Add edge case to error_operand_no_value 2024-06-09 14:02:01 +01:00
gingerBill 4b52f7fe2b Fix #3713 2024-06-09 13:35:22 +01:00
gingerBill 8fcfd8c506 Fix sign flag 2024-06-09 13:21:22 +01:00
gingerBill e0d0dc704c Make f32(u8) etc do an immediate cast to f32(u32(u8)) in code generation 2024-06-09 13:20:48 +01:00
Jeroen van Rijn 14f08ff02b Merge pull request #3712 from laytan/fix-large-ints-amd64sysv-abi
fix large ints amd64 sysv abi
2024-06-09 11:01:31 +02:00
Jeroen van Rijn 5d5ef78de9 Merge pull request #3711 from laytan/fix-swizzle-crash
fix swizzle crash due to wrong alignment
2024-06-09 11:00:15 +02:00
Jeroen van Rijn e595bdc805 Merge pull request #3710 from laytan/fix-unreachable-with-complex-param-or-return-inits
fix unreachable hit when param and/or return have complex inits
2024-06-09 10:59:26 +02:00
Laytan Laats 6d862cc4e5 fix unreachable hit when param and/or return have complex inits
Fixes #3630
2024-06-09 04:43:19 +02:00
Laytan Laats 3628154849 fix swizzle crash due to wrong alignment
Fixes #3691
2024-06-09 03:33:23 +02:00
Laytan Laats 9ad9236c3b fix large ints amd64 sysv abi
Fixes #3707
2024-06-09 02:47:05 +02:00
Jeroen van Rijn 0d698c7b53 Merge pull request #3709 from Feoramund/stop-low-swizzle
Prevent panic when `swizzle` called with < 2 indices
2024-06-08 23:14:55 +02:00
Feoramund 49f147cc86 Prevent panic when swizzle called with < 2 indices
The requirement for at least 2 indices has been sourced from
`lb_addr_swizzle` in `llvm_backend_general.cpp`, where there is an
assert to ensure the swizzle_count is `1 < n <= 4`.
2024-06-08 17:05:00 -04:00
Jeroen van Rijn e5bf6fd3aa Merge pull request #3708 from Feoramund/ignore-bmp-assets
Add `*.bmp` to core tests `.gitignore`
2024-06-08 22:45:08 +02:00
Feoramund 5c8f78a25a Add *.bmp to core tests .gitignore 2024-06-08 16:43:45 -04:00
Jeroen van Rijn 1f4cfd52fd Merge pull request #3706 from leidegre/os_read_dir_windows
Fixed error handling in read_dir on Windows
2024-06-08 17:14:49 +02:00
gingerBill be0774acc8 Add error message on return a constant slice value from a procedure 2024-06-08 16:07:28 +01:00
Jeroen van Rijn de7d3e2487 Update dir_windows.odin 2024-06-08 17:00:38 +02:00
gingerBill 7e994b6d21 Remove empty line preventing a suggestion from happening 2024-06-08 15:42:19 +01:00
John Leidegren 35e57fdef8 Fixed error handling in read_dir on Windows 2024-06-08 15:58:34 +02:00
gingerBill 371749d474 Make certain procedures "contextless" for microui 2024-06-08 14:48:04 +01:00
Jeroen van Rijn 575e5a255b Merge pull request #3704 from Feoramund/fix-fmt-p-verb
Fix `%p` pointers not printing leading `0x`
2024-06-07 23:00:29 +02:00
Jeroen van Rijn 323a6e0728 Nuke ancient comment. 2024-06-07 22:19:01 +02:00
Feoramund affd48c791 Add #caller_location to check in fmt tests
This makes it much easier to track down which line failed.
2024-06-07 16:08:37 -04:00
Feoramund b65589d036 Add %p tests for fmt 2024-06-07 16:07:11 -04:00
Feoramund 61c481bd81 Fix %p pointers not printing leading 0x 2024-06-07 15:27:43 -04:00
Jeroen van Rijn 96c06185dd Merge pull request #3701 from laytan/fix-thread-deadlock
Fix thread deadlock
2024-06-07 20:39:40 +02:00
Laytan Laats 00dfff7ee0 core/thread: fix a deadlock situation on unix 2024-06-07 20:28:09 +02:00
Laytan Laats b35e72c82b core/sync: fix wrong timeout calculation, time.Duration is ns already 2024-06-07 20:27:33 +02:00
Feoramund edb685f04b Add package core:flags 2024-06-07 13:16:13 -04:00
Jeroen van Rijn 7c977bb859 Merge pull request #3699 from laytan/macos-14.5
add MacOS 14.5 to 'core:sys/info' and 'odin report'
2024-06-07 17:44:09 +02:00
Laytan Laats 072825ac5a add MacOS 14.5 to 'core:sys/info' and 'odin report' 2024-06-07 17:42:41 +02:00
Jeroen van Rijn 4c45f7d3ae Merge pull request #3698 from laytan/utilize-odin-test-instead-of-scrips-to-run-tests
Utilise `odin test` instead of scripts to run tests
2024-06-07 17:36:23 +02:00
Jeroen van Rijn 11137cfec5 Merge pull request #3697 from laytan/add-error-message-for-unknown-test-log-level
add error message for unknown test log level
2024-06-07 17:11:48 +02:00
Laytan Laats e627fcb0e6 fix not printing Error: when terminal has no color support 2024-06-07 16:58:23 +02:00
Laytan Laats 29250f2657 fix regression in test_issue_2395 2024-06-07 16:33:38 +02:00
Laytan Laats 9122c20d4b update actions/checkout 2024-06-07 15:57:09 +02:00
Laytan Laats 0a528777e8 utilize odin test -all-packages instead of (make/bat) scripts for running tests 2024-06-07 15:50:00 +02:00
Laytan Laats f2be35f1f0 remove caught unused define 2024-06-07 15:22:14 +02:00
Laytan Laats ee93d7c05e add error message for unknown test log level
It would previously just be a compilation error about a missing
return statement.
2024-06-07 15:13:09 +02:00
Laytan Laats 315695b4f8 collect and show docs of defineables 2024-06-07 15:08:41 +02:00
gingerBill 68781f8dd3 Remove unnecessary Wait_Signal checks 2024-06-07 00:11:00 +01:00
gingerBill 1d99bc0f87 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-06-06 23:55:54 +01:00
gingerBill 7044a7d776 Try to fix a possible race condition with polymorphic record parameters 2024-06-06 23:55:48 +01:00
Jeroen van Rijn 4b6fe2baa7 Merge pull request #3696 from Kelimion/bmp_save
BMP save
2024-06-07 00:23:55 +02:00
Jeroen van Rijn ed060819f3 Test roundtripping BMP 2024-06-07 00:14:15 +02:00
Jeroen van Rijn 566119ff83 Add saving of 24 and 32-bit images to BMP format. 2024-06-06 23:53:15 +02:00
gingerBill 08612423b9 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-06-06 21:03:44 +01:00
gingerBill ff37a7435c Add parentheses around the foreign import paths 2024-06-06 21:03:35 +01:00
Laytan Laats fa08690686 explicit integer conversions 2024-06-06 19:49:51 +02:00
Laytan Laats b818a77131 check if -define is actually used 2024-06-06 19:46:01 +02:00
Laytan Laats 9a95049393 -show-defineables and -export-defineables 2024-06-06 19:44:54 +02:00
Jeroen van Rijn b196b84ef2 Merge pull request #3695 from laytan/fix-linking-on-weird-linuxes
fix linking on weird linuxes
2024-06-06 19:37:31 +02:00
Laytan e2eb3cdd8a fix linking on weird linuxes 2024-06-06 19:23:36 +02:00
gingerBill d0dbe9a1bd Merge branch 'master' of https://github.com/odin-lang/Odin 2024-06-06 17:59:19 +01:00
gingerBill 039bb8794a Improve matrix_align_of logic when it has invalid inputs. 2024-06-06 17:59:12 +01:00
gingerBill f010544eff Merge pull request #3609 from Kelimion/bmp
Add core:image/bmp
2024-06-06 16:29:35 +01:00
Jeroen van Rijn 4a290f47ad Re-add BMP test suite download. 2024-06-06 16:55:03 +02:00
Jeroen van Rijn 678fdae966 Rebased. 2024-06-06 16:32:18 +02:00
gingerBill 3a9b86628a Add @(rodata) and @(static, rodata) where appropriate 2024-06-06 15:23:52 +01:00
gingerBill bea47db495 Allow @(rodata) on @(static) variables 2024-06-06 15:20:47 +01:00
gingerBill 9ef43fc782 Add @(rodata) 2024-06-06 15:16:34 +01:00
Jeroen van Rijn 28ea9425fd Add core:mem tests. 2024-06-06 14:59:19 +02:00
Jeroen van Rijn 72f6b5479d Fix fls_uint 2024-06-06 14:42:19 +02:00
Jeroen van Rijn 0b6d73c86e Add original LICENSE 2024-06-06 14:29:28 +02:00
gingerBill 971229fe66 Fix #3686 2024-06-06 13:27:55 +01:00
gingerBill c4ef8e7f6c Merge branch 'master' of https://github.com/odin-lang/Odin 2024-06-06 13:02:16 +01:00
gingerBill 155516b897 Fix -ignore-warnings 2024-06-06 13:02:08 +01:00
Jeroen van Rijn 9b66b0c8e6 Merge pull request #3694 from rope-hmg/master
Updated SDL_CreateTexture to take `PixelFormatEnum` instead of `u32`
2024-06-06 13:03:16 +02:00
Hector 483015fe57 Updated SDL_CreateTexture to take PixelFormatEnum instead of u32 2024-06-06 11:47:59 +01:00
gingerBill a73741d3b7 Merge pull request #3690 from laytan/orcas
Runtime support for orca
2024-06-06 11:03:51 +01:00
Jeroen van Rijn fb2849e02e Merge pull request #3693 from colrdavidson/x11-title-change-support
Add support functions for title changes, cursor config, and dnd
2024-06-06 11:48:16 +02:00
Colin Davidson 70592630a4 add support for title changes, cursor config, and dnd 2024-06-06 02:39:48 -07:00
Jeroen van Rijn fcfc1cb97f Nightly ZIP level 9 2024-06-05 22:26:03 +02:00
Jeroen van Rijn cdd90a9a0b Merge pull request #3688 from Kelimion/nightly
Rewrite upload_b2 nightly action against B2 SDK
2024-06-05 21:11:25 +02:00
Jeroen van Rijn 460ffe1aee Rewrite upload_b2 nightly action against B2 SDK 2024-06-05 21:04:35 +02:00
laytan 08382cb05d orca windows 2024-06-05 19:28:40 +02:00
Laytan Laats 8455e159f5 improve orca target 2024-06-05 20:57:39 +02:00
gingerBill 76d3be7912 Merge pull request #3683 from andreas-jonsson/test-make-cleanup
Minor cleanup of makefiles and scripts
2024-06-05 15:44:27 +01:00
gingerBill 97f0f72080 Merge pull request #3685 from markersniffen/sniffen
D3D11.odin - fix VIDEO_SUPPORT flag
2024-06-05 15:43:55 +01:00
gingerBill a667878d23 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-06-05 15:43:21 +01:00
gingerBill cbabcb0907 Fix #3682 2024-06-05 15:43:15 +01:00
gingerBill fac9ce5d83 Change to init from create 2024-06-05 15:30:35 +01:00
gingerBill d3342c2381 core:mem/tlsf - "Two-Level Segregated Fit" memory allocator 2024-06-05 15:15:39 +01:00
Mark Sniffen cd4375061c D3D11 - fixed VIDEO_SUPPORT flag 2024-06-05 10:11:18 -04:00
Andreas T Jonsson f0e98372fb Minor cleanup of makefiles and scripts 2024-06-05 15:37:02 +02:00
gingerBill a747e47582 Merge pull request #3675 from Feoramund/fix-partial-infinity
Fix partial parsing of `infinity`
2024-06-05 12:48:44 +01:00
gingerBill adcda88501 Merge pull request #3680 from andreas-jonsson/netbsd-arm64
ARM64 support for NetBSD
2024-06-05 12:47:29 +01:00
gingerBill e7190aab41 Merge pull request #3681 from andreas-jonsson/netbsd-lwp-self
Proper thread identification on NetBSD
2024-06-05 12:47:23 +01:00
Andreas T Jonsson 929437c7bc Fixed broken import 2024-06-05 11:17:13 +02:00
Andreas T Jonsson ed6667ebf2 Propper thread identification on NetBSD 2024-06-05 11:06:14 +02:00
Andreas T Jonsson 58f07698e8 Added arm64 support for NetBSD 2024-06-05 10:18:47 +02:00
Jeroen van Rijn c406bbb6e3 Merge pull request #3679 from Feoramund/fix-typos
Fix some typos
2024-06-05 09:30:10 +02:00
Feoramund b2f9f0af68 Fix some typos 2024-06-04 19:01:30 -04:00
Feoramund 25feff3eb4 Permit parsing of incomplete infinity but do not return true
To clarify, `parse_f64` will indeed take `infi` to mean `+Inf` and
return that as the value, but it will not return `ok = true`. It treats
it as `inf` followed by any other trailing character.

`parse_f64_prefix` is the lenient one which will return true so long as
it finds some meaningful value.
2024-06-04 18:55:13 -04:00
Feoramund 1fc6ff91b2 Add test for infinity with trailing characters 2024-06-04 18:55:13 -04:00
gingerBill 2c580aa6fb Merge pull request #3676 from laytan/fix-passing-pointer-to-constant-to-non-odin-cc
fix passing pointer to constant in non-odin cc
2024-06-04 23:12:46 +01:00
Jeroen van Rijn f0a6fb4057 Merge pull request #3678 from Feoramund/fix-p-f64-p-doc
Strike incorrect note from `parse_f64_prefix` doc
2024-06-05 00:02:34 +02:00
Jeroen van Rijn 448c0d8dd3 Merge pull request #3677 from Feoramund/parse-compquat
Add `parse_complex/quaternion*` to `core:strconv`
2024-06-04 23:58:43 +02:00
Feoramund b4cfae222c Strike incorrect note from parse_f64_prefix doc 2024-06-04 17:50:19 -04:00
Feoramund 265e6aa781 Add parse_complex/quaternion* to core:strconv 2024-06-04 17:12:55 -04:00
Jeroen van Rijn 9d234998c0 Update create_nightly_json 2024-06-04 22:44:49 +02:00
Jeroen van Rijn c2ddf4266f Update delete_old_binaries.py 2024-06-04 22:26:51 +02:00
gingerBill a0b1b8d1c3 Merge pull request #3673 from laytan/implement-foreign-import-improvements-on-vendor
Implement `#exists(path)` and use it to provide good errors for common missing vendor libraries
2024-06-04 19:57:09 +01:00
Laytan Laats dbaf1a1ce0 compile stb_vorbis 2024-06-04 20:26:21 +02:00
Feoramund c656a9e4cd Fix and subsume test_issue_2087 into strconv test suite
The full "infinity" strings were expected to be partial consumes, but
this is not the case. That has been fixed and the relevant extra tests
from that file have been added to this test suite.

Fixes #2670
2024-06-04 14:23:48 -04:00
Laytan Laats cd99625dd3 ci: compile needed libraries 2024-06-04 20:21:52 +02:00
Feoramund 7d670f6562 Add initial test suite for core:strconv 2024-06-04 14:20:31 -04:00
laytan 2a526058b3 fix passing pointer to constant in non-odin cc 2024-06-04 20:15:47 +02:00
Laytan Laats 3e159736cd use #exists to provide good errors for common missing libraries 2024-06-04 20:13:51 +02:00
Feoramund d33668fa91 Fix partial parsing of "infinity" in parse_f64_prefix
It was previously reporting an invalid number of characters parsed for
any string other than "inf", "+inf", or "-inf".
2024-06-04 13:24:46 -04:00
Laytan Laats b47a15733d implement #exists(path) 2024-06-04 19:06:13 +02:00
Laytan Laats 4f5b2bd127 fix crash when you have 2 #load_directory calls with the same path 2024-06-04 19:01:50 +02:00
gingerBill 3b7100f8e5 raygui: change c.int to their correct enum types 2024-06-04 16:17:49 +01:00
gingerBill 6b386631dd Improve error message suggestion for passing enums to integers 2024-06-04 16:16:27 +01:00
gingerBill 11b1a48bf0 Fix extra_linker_flags for raylib on windows 2024-06-04 15:54:57 +01:00
gingerBill 72ce111a95 Keep -vet happy 2024-06-04 15:51:19 +01:00
gingerBill 606608c02b Utilize foreign import constant strings for foreign imports 2024-06-04 15:49:17 +01:00
gingerBill eacf2918ad Merge pull request #3469 from hodgka/raylib_resizable_doc_patch
Fixed typo in raylib documentation
2024-06-04 15:41:15 +01:00
gingerBill afcccfdec5 Merge pull request #3615 from puzzleddev/export-dependencies
Add build flag to export dependencies.
2024-06-04 15:40:54 +01:00
gingerBill 60a064984d Merge pull request #3670 from colrdavidson/x11-tweaks
Correct X11 prefix issues
2024-06-04 15:02:03 +01:00
gingerBill 0504c12f04 Merge pull request #3672 from laytan/fix-old-llvm-debug-info
fix debug info IR error on LLVM < 13
2024-06-04 15:01:30 +01:00
Laytan Laats 7d29389834 fix debug info IR error on LLVM < 13 2024-06-04 14:41:42 +02:00
Colin Davidson 52ba3357ee oops, missed shuffling a few x-funcs 2024-06-04 04:48:24 -07:00
Jeroen van Rijn 78a67ef31e Merge pull request #3667 from Feoramund/fix-fmt-compquat-sign
Fix printing of duplicate signs in complex and quaternion types
2024-06-04 13:32:13 +02:00
Jeroen van Rijn f9d59ef6d4 Merge branch 'master' into fix-fmt-compquat-sign 2024-06-04 13:25:57 +02:00
Jeroen van Rijn c3b94b9e1d Merge pull request #3646 from Feoramund/multi-test
Refactor the test runner
2024-06-04 13:23:52 +02:00
Jeroen van Rijn 02f11dfded Merge branch 'master' of github.com:odin-lang/Odin 2024-06-04 11:27:01 +02:00
Jeroen van Rijn 303d86ab7e Complete nightly scripts update to new b2 cli version 2024-06-04 11:26:57 +02:00
Jeroen van Rijn 50374d9396 Merge pull request #3640 from harold-b/fix-darwin-libc-open
Fix open() foreign libc signature on Darwin
2024-06-04 10:54:08 +02:00
Jeroen van Rijn dfffc57536 Merge pull request #3668 from colrdavidson/x11-tweaks
add a few more x11 funcs, fix egl bug
2024-06-04 10:53:57 +02:00
Colin Davidson e46e22e21b add a few more x11 funcs, fix egl bug 2024-06-04 01:12:10 -07:00
Feoramund eb93779f63 Fix duplicate sign printing of complex and quaternion types
Negative zero wasn't being detected (so it would appear as `+-0`), and
`+Inf` was appearing as `++Inf` when imaginary.
2024-06-03 19:51:17 -04:00
Feoramund d2a9122176 Add fmt tests for printing complex and quaternion types 2024-06-03 19:48:09 -04:00
Jeroen van Rijn 36627d7d29 Merge pull request #3666 from Feoramund/add-missing-compquat
Add missing `Raw_*` complex and quaternion types
2024-06-04 01:28:18 +02:00
Jeroen van Rijn f745a1c470 b2 uri 2024-06-04 00:22:49 +02:00
gingerBill 17225131f7 Try / rather than 2024-06-03 23:12:24 +01:00
gingerBill c8f9af64db Add print to delete_old_binaries.py 2024-06-03 23:01:39 +01:00
gingerBill 0ef0894213 Fix to bl.tok = path 2024-06-03 22:55:24 +01:00
gingerBill dc6a8e5ffb Fix typo 2024-06-03 22:44:12 +01:00
gingerBill 5b5106baee Try updating nightly stuff 2024-06-03 22:36:54 +01:00
gingerBill 4dac577caa Add attributes to Foreign_Import_Decl in clone 2024-06-03 22:21:54 +01:00
gingerBill 8e9716ea2f Add ast.Foreign_Import_Decl to ast.clone 2024-06-03 22:20:39 +01:00
Feoramund d7f6def8ad Add aliases for Raw_* complex/quaternion types into core:mem 2024-06-03 17:18:27 -04:00
gingerBill 50b4a63fe1 Add ast.Foreign_Impot_Decl.fullpaths to walk.odin 2024-06-03 22:02:35 +01:00
Jeroen van Rijn 2cb3028086 Merge pull request #3664 from reduf/fix-signatures-of-some-functions
Fix signatures of two Win32 functions
2024-06-03 22:06:07 +02:00
Feoramund 88598c2c64 Make use of runtime.Raw_* types in core:math/linalg 2024-06-03 15:58:33 -04:00
Feoramund 97f1d12e04 Add missing Raw_* types for complex and quaternion 2024-06-03 15:41:14 -04:00
Feoramund 4e1dd4ced2 Move Raw_Complex/Quaternion types to base:runtime 2024-06-03 15:40:28 -04:00
Laurent Dufresne 1617060f46 Fix type of two Win32 functions 2024-06-03 20:41:31 +02:00
Feoramund 0ff130d82b Fix ad hoc printf in test runner signal handler 2024-06-02 23:36:04 -04:00
Feoramund fa29974dab Use Warning log level for reporting memory leaks
Works well with `-define:ODIN_TEST_LOG_LEVEL=warning`.
2024-06-02 23:21:44 -04:00
Feoramund 7764ab2ab0 Prevent test runner deadlock on NetBSD
Add `pthread_testcancel` to `core:sys/unix`
2024-06-02 21:27:36 -04:00
Feoramund 6a5633df2d Fix wrong PTHREAD_CANCEL_ASYNCHRONOUS on FreeBSD and OpenBSD
The test runner was deadlocking when a test raised a signal on FreeBSD.

This is untested on OpenBSD, but I have referenced this file:
https://github.com/openbsd/src/blob/master/include/pthread.h
2024-06-02 20:41:25 -04:00
Feoramund c8539fe411 Revert "Disable NetBSD tests until 'undefined reference to stdout' is solved."
This reverts commit 21a1ddfbae.
2024-06-02 19:29:27 -04:00
Feoramund ac9484206b Fix STDIN, STDOUT, STDERR handles for BSDs
Tested on FreeBSD 14.0 and NetBSD 10.0

OpenBSD is untested, but link names were sourced from:
https://github.com/openbsd/src/blob/master/include/stdio.h

According to this, OpenBSD shares the same layout as NetBSD.

FreeBSD has the same as Darwin in this regard.
2024-06-02 19:29:27 -04:00
Jeroen van Rijn 10d354aea8 Merge pull request #3662 from Feoramund/fix-3660
Fix #3660 and #3661
2024-06-02 23:22:16 +02:00
Feoramund f030603f0d Fix #3660
This also prevents a segfault if you do `odin build .odin -file`
2024-06-02 16:47:46 -04:00
Feoramund f77ce359ce Be pedantic about not overwriting Odin errors
I was encountering bounds-check error messages being overwritten during
a test, if the test failed for another reason and sent a log message.

The original intent of having this check inside of the above `if` block
was that if a test sent an error message, then it was assumed an
overwrite would be safe, but it's completely possible for a test to fail
for a legitimate reason, then do an unrelated bounds check somewhere
else that would be buried under the animation.

This change will make sure that, no matter what, the progress display
will not trigger a clear if a signal was raised. There's still no
guarantee that bounds-check messages will be printed properly, and it's
best to redirect STDERR.

The only way that can be fixed is if they get a similar hook to
`context.assertion_failure_proc`.
2024-06-02 15:51:26 -04:00
Feoramund 3f1249c27e Tell user about ODIN_TEST_RANDOM_SEED option 2024-06-02 15:34:13 -04:00
Feoramund 8d8c42e962 Use T.seed in tests where applicable 2024-06-02 15:30:23 -04:00
Jeroen van Rijn 60d0c03134 Strip old test runner back out of internal, issues and vendor 2024-06-02 21:15:25 +02:00
Jeroen van Rijn 9d8d864400 Plug leak in AES tests. 2024-06-02 21:12:24 +02:00
Jeroen van Rijn 21a1ddfbae Disable NetBSD tests until 'undefined reference to stdout' is solved. 2024-06-02 21:03:22 +02:00
Feoramund 890fe07c6e Disable FANCY_OUTPUT in Odin test scripts
This should tidy up the CI output logs a bit.
2024-06-02 14:54:32 -04:00
Feoramund d581dbbec5 Keep test runner main thread from using 100% of a CPU core 2024-06-02 14:54:32 -04:00
Feoramund 5e3e958574 Add -define:ODIN_TEST_LOG_LEVEL to set lowest log level 2024-06-02 14:54:32 -04:00
Feoramund 6a9203328b Log thread count at test run start
Provides a helpful info message about the option to change how many
threads are used per run.
2024-06-02 14:54:32 -04:00
Feoramund 5db65aa796 Make it easier to learn about ODIN_TEST_CLIPBOARD 2024-06-02 14:54:32 -04:00
Feoramund cb00b8022b Add note about SIGSEGV edge case on UNIX-likes 2024-06-02 14:54:32 -04:00
Feoramund 4875f745c8 Remove Windows test runner in favor of libc implementation 2024-06-02 14:54:32 -04:00
Feoramund ccdbd4b6ce Simplify casts in mem.Rollback_Stack procs 2024-06-02 14:54:32 -04:00
Feoramund 9dcf345795 Set thread pool is_running to false on shutdown 2024-06-02 14:54:32 -04:00
Feoramund 21064fbb60 Clear thread pool task data on restart 2024-06-02 14:54:32 -04:00
Feoramund 45fa9d8148 Expand documentation comment for ODIN_TEST_NAMES 2024-06-02 14:54:32 -04:00
Feoramund cb8faf5b74 Remove -test-name in favor of test runner option
`-define:ODIN_TEST_NAMES=...` is capable of selecting test by package
and name or name only, with the ability to access packages included by
`-all-packages`.
2024-06-02 14:54:32 -04:00
Feoramund 6a5d51f0d6 Use more concise way of satisfying -vet 2024-06-02 14:54:31 -04:00
Feoramund 433ca538bf Be specific about platforms not implementing test runner signal handler 2024-06-02 14:54:31 -04:00
Feoramund d1723664a7 Catch SIGILL, SIGFPE, SIGSEGV in the test runner 2024-06-02 14:54:31 -04:00
Feoramund fb37572c4c Rename signal_handler.odin to signal_handler_libc.odin 2024-06-02 14:54:31 -04:00
Jeroen van Rijn 6050bc3bf6 Add missing benchmarks build.bat. 2024-06-02 14:54:31 -04:00
Jeroen van Rijn 306169699c Update ci.yml 2024-06-02 14:54:31 -04:00
Jeroen van Rijn 3354212f8e Update ci.yml
Disable benchmark on Windows for a moment.
2024-06-02 14:54:31 -04:00
Jeroen van Rijn 54dae06ad1 Update CI 2024-06-02 14:54:31 -04:00
Jeroen van Rijn 8d93379e29 Factor benchmarks out into tests\benchmark\<pkg> 2024-06-02 14:54:29 -04:00
Jeroen van Rijn 62b7d8de97 Port tests\core\net 2024-06-02 14:47:09 -04:00
Jeroen van Rijn dacb0f7786 Port tests\core\thread 2024-06-02 14:47:09 -04:00
Jeroen van Rijn 5b1ffba915 Port testing\core\time 2024-06-02 14:47:09 -04:00
Jeroen van Rijn a406ff7063 Port tests\core\strings 2024-06-02 14:47:09 -04:00
Jeroen van Rijn 9ba02e888d Port tests\core\slice 2024-06-02 14:47:09 -04:00
Jeroen van Rijn ed0384c102 Port tests\core\runtime 2024-06-02 14:47:09 -04:00
Jeroen van Rijn 80b115748f Port tests\core\reflect 2024-06-02 14:47:09 -04:00
Jeroen van Rijn 9829a02571 Port tests\core\odin 2024-06-02 14:47:09 -04:00
Jeroen van Rijn 8383a45b62 Port tests\core\text\match 2024-06-02 14:47:09 -04:00
Jeroen van Rijn b0faab29e0 Port tests\core\math, math\linalg\glsl and math\noise 2024-06-02 14:47:09 -04:00
Jeroen van Rijn d7bfbe0552 Port testing\core\text\i18n 2024-06-02 14:47:08 -04:00
Jeroen van Rijn 39fd73fe17 Port testing\core\hash 2024-06-02 14:47:08 -04:00
Jeroen van Rijn 6f7c5a7577 Port tests\core\fmt 2024-06-02 14:47:08 -04:00
Jeroen van Rijn d334b8c72a Port tests\core\path\filepath 2024-06-02 14:47:08 -04:00
Jeroen van Rijn 9d0f4833bf Port tests\core\encoding\xml
Made them run in parallel as well.
2024-06-02 14:47:08 -04:00
Jeroen van Rijn 6641a6f6c9 Port tests\core\encoding\varint 2024-06-02 14:47:08 -04:00
Jeroen van Rijn 601df0e8f7 Port tests\core\encoding\json 2024-06-02 14:47:08 -04:00
Jeroen van Rijn 1b32e27aa4 Port tests\core\encoding\hxa
And fix a few leaks in `core:encoding/hxa` while at it.
2024-06-02 14:47:08 -04:00
Jeroen van Rijn 3404dea8ac Port tests\encoding\hex 2024-06-02 14:47:08 -04:00
Jeroen van Rijn 40b20fb473 Port tests\core\c\libc 2024-06-02 14:47:08 -04:00
Feoramund b74b956fda Remove unneeded import 2024-06-02 14:47:08 -04:00
Feoramund 1f6a6f2cd3 Support deterministic random seeding of tests
Add a new option `ODIN_TEST_RANDOM_SEED` which is picked from the cycle
counter at startup, if it's not specified by the user.

This number is sent to every test in the `T` struct and reset every test
(just in case).
2024-06-02 14:47:07 -04:00
Jeroen van Rijn a27b167218 Update tests\core\encoding\cbor to use new test runner.
It was leaky and required a substantial number of `loc := #caller_location` additions to parts of the core library to make it easier to track down how and where it leaked.

The tests now run fine multi-threaded.
2024-06-02 14:47:07 -04:00
Jeroen van Rijn 6a1649d8aa Update using new defaults for memory + reporting width 2024-06-02 14:47:07 -04:00
Feoramund 84ad71fdb3 Support ODIN_TEST_PROGRESS_WIDTH=0
This will automatically calculate how wide the progress bars should be
based on the package with the greatest number of tests.

The progress width is now capped to 100.
2024-06-02 14:47:07 -04:00
Feoramund 49fa66370f Report test memory usage only if there's an issue
Adds new option `ODIN_TEST_ALWAYS_REPORT_MEMORY`, for when you always
want to see the memory usage report.
2024-06-02 14:47:07 -04:00
Feoramund e1a3c0e21d Track memory in the test runner by default 2024-06-02 14:47:07 -04:00
Feoramund bf42e39b1c Be specific about int size for Rollback_Stack asserts
This should fix tests failing on 32-bit platforms.
2024-06-02 14:47:07 -04:00
Jeroen van Rijn c531427ee5 Update -define for crypto 2024-06-02 14:47:07 -04:00
Feoramund b7e1ae7073 Change test runner options to SCREAMING_SNAKE_CASE
This commit also changes the name of `test_select` to `ODIN_TEST_NAMES`,
to better conform with the already-existing `-test-name:<name>` option.
2024-06-02 14:47:07 -04:00
Feoramund e11f3d2520 Fix missing - for define in tests/core/build.bat 2024-06-02 14:47:07 -04:00
Feoramund dcfda195d2 Send terminal control code to STDOUT instead
`STDERR` might be redirected, and this code signals to the terminal to
show the cursor again. Otherwise, the cursor will be invisible.
2024-06-02 14:47:07 -04:00
Feoramund a1c5bebac7 Fix ANSI redraw eating last log line 2024-06-02 14:47:07 -04:00
Feoramund 89d8df28be Combine multi-line attributes onto one line 2024-06-02 14:47:07 -04:00
Feoramund dffc3af86c Remove safe_heap_allocator from test runner
I was under the impression that the default `context.allocator` was not
thread-safe, but I've been told that this is not the case.
2024-06-02 14:47:06 -04:00
Feoramund eadfbb1318 Forbid singleton allocations from shrinking their block offset 2024-06-02 14:47:06 -04:00
Feoramund 1afc235359 Use plain sort for internal_tests 2024-06-02 14:47:06 -04:00
Feoramund 09ef08f035 Add more sanity checking to mem.Rollback_Stack 2024-06-02 14:47:06 -04:00
Feoramund 0f675fa436 Use uintptr where applicable in mem.Rollback_Stack 2024-06-02 14:47:06 -04:00
Feoramund 568b746c98 Fix indentation 2024-06-02 14:47:06 -04:00
Jeroen van Rijn a0b2ea6d6e Update tests\core\crypto 2024-06-02 14:46:59 -04:00
Jeroen van Rijn a463e282db Update core:container tests 2024-06-02 14:34:31 -04:00
Jeroen van Rijn e3181c13c6 Update core:compress tests 2024-06-02 14:34:31 -04:00
Jeroen van Rijn 22c092f846 Delete duplicated flag. 2024-06-02 14:34:31 -04:00
Jeroen van Rijn eb3d6d7d75 Update core:image tests to use new runner. 2024-06-02 14:34:31 -04:00
Feoramund 852f694bee Get tests passing again
`T` no longer has a writer assigned to it.

`test_core_cbor.odin` has global state and is run with `odin test`,
so I've set it to use only one thread.
2024-06-02 14:34:31 -04:00
Feoramund 87ea4a2652 Temporarily disable Windows-specific test runner
I do not have a Windows machine to test the refactored test runner, and
I am unsure if it would even run correctly on Windows without this
disabled.
2024-06-02 14:34:31 -04:00
Feoramund d03024088a Remove unneeded code 2024-06-02 14:34:31 -04:00
Feoramund b6c4dfb68d Refactor the test runner
Changes

- Support multi-threaded testing.
- Support `set_fail_timeout` on all platforms.
- Display an animated progress report.
- Setup all tests with a context logger.
- Give all tests their own separate custom allocators.
- Support tracking test memory usage.
- Display a summary of the failed tests at the end.
- Let users select only specific tests to run.
- Support copying failed tests to the clipboard to run again.
- Support catching SIGINT (CTRL-C) to cancel early.
- Record context in cleanup procs.
- Write all log messages to STDERR for easy redirection.
- Possibly more I've forgotten.

New Options

- `-define:test_threads=N`: Specify thread count.
- `-define:test_thread_memory=B`: Specify initial memory block size in bytes to each thread.
- `-define:test_track_memory=true`: Track the memory usage of individual tests.
- `-define:test_fancy=false`: Disable animated progress report.
- `-define:test_select=package.test_name,...`: Run only select tests.
- `-define:test_clipboard=true`: Copy names of failed tests to the clipboard.
- `-define:test_progress_width=24`: Change the width of the animated progress bars.
2024-06-02 14:34:31 -04:00
Feoramund 95c2e020ff Share libc signal definitions with more platforms
I confirmed that these 3 platforms share the same signal definitions
from these sources.

Haiku: https://github.com/haiku/haiku/blob/master/headers/posix/signal.h
OpenBSD: https://github.com/openbsd/src/blob/master/sys/sys/signal.h
NetBSD: http://fxr.watson.org/fxr/source/sys/signal.h?v=NETBSD
2024-06-02 14:34:30 -04:00
Feoramund 50dffaf131 Add mem.Rollback_Stack 2024-06-02 14:34:30 -04:00
Feoramund fc4f6b87bb Add core:encoding/ansi package 2024-06-02 14:34:30 -04:00
Feoramund 8137b9dd75 Add mem.tracking_allocator_reset 2024-06-02 14:34:30 -04:00
Feoramund 558c330028 Add task-stopping functionality to thread.Pool 2024-06-02 14:34:30 -04:00
Feoramund 1875e7c36a Make log.do_*_header argument orders consistent 2024-06-02 14:34:30 -04:00
Feoramund 7d4da6eaa7 Fix trailing space with only .Date log option 2024-06-02 14:34:30 -04:00
Feoramund 8ae375dbff Move log timestamping out to do_time_header proc 2024-06-02 14:34:30 -04:00
Jeroen van Rijn c07a46abc9 Merge pull request #3635 from Yawning/feature/aes
core/crypto: Add AES
2024-06-01 21:42:59 +02:00
Yawning Angel c751e4b2eb core/crypto/aes: Add AES implementation 2024-06-01 22:55:42 +09:00
Yawning Angel 1ade62b630 core/crypto/_aes/ct64: Add GHASH 2024-06-01 22:55:42 +09:00
Yawning Angel cba58924a8 core/crypto/_aes: 64-bit portable implementation 2024-06-01 22:55:42 +09:00
Yawning Angel f49575f1fb core/simd/x86: Add the AES-NI intrinsics 2024-06-01 22:55:42 +09:00
gingerBill 72a5e74ef3 Merge pull request #3658 from laytan/wasm64p32-runtime-fixes
wasm: fix runtime.js even more for wasm64p32
2024-05-31 23:17:52 +01:00
gingerBill 881340fd3b Merge pull request #3659 from thetarnav/unreachable
Add unreachable to base/builtin/builtin.odin
2024-05-31 23:17:08 +01:00
Damian Tarnawski 451dc645df Add unreachable to base/builtin/builtin.odin 2024-05-31 21:55:40 +02:00
Laytan Laats 8a521648b9 wasm: fix runtime.js even more for wasm64p32
- make the int size configurable in the `runWasm` call, no more
  constants to hunt down and change
- make storeU64 and storeI64 handle bigints, this is needed in the
  odin_dom library
- fix alignment issues within init_event_raw
2024-05-31 20:57:15 +02:00
gingerBill 5628cfabe5 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-05-31 16:35:38 +01:00
gingerBill 31a9b3f428 core:encoding/ini 2024-05-31 16:35:30 +01:00
Jeroen van Rijn e12ff63b16 Merge pull request #3657 from laytan/fix-wasm64p32-procs
wasm: fix target wasm64p32 runtime procs
2024-05-31 17:03:52 +02:00
Laytan Laats 3a0ec3d6a8 wasm: fix target wasm64p32 runtime procs
LLVM generates calls with `i32` regardless of target, so if a call to
any of these procs was generated this failed to compile.

I opted to fix by changing from `int` to `i32` on wasm64p32 and adding
`#any_int` so existing code keeps working.
2024-05-31 16:32:27 +02:00
gingerBill ffded3d557 Merge pull request #3655 from iErik/master
core:sys/linux - Add support for Unix Domain Socket addresses
2024-05-31 10:32:19 +01:00
gingerBill ae63fd9230 Fix #3649 2024-05-30 23:08:42 +01:00
gingerBill 6d9957d7e4 Fix types again 2024-05-30 21:59:01 +01:00
gingerBill e737122ce8 Add experimental target orca_wasm32 2024-05-30 21:58:27 +01:00
gingerBill 8db87170a9 Clean up handle_link_name handling of link_suffix 2024-05-30 21:53:23 +01:00
gingerBill ba1e9c8abe Fix #3651 2024-05-30 21:50:30 +01:00
gingerBill 66acbb7fed Add @(link_suffix=<string>) 2024-05-30 21:48:23 +01:00
Erik Isidore 0514ee0410 PR#3655 - small linter issue correction 2024-05-30 16:12:20 -03:00
gingerBill 7bcf33c881 Merge pull request #3656 from laytan/microui-optional-clipboard
microui: make clipboard optional during init
2024-05-30 17:37:35 +01:00
Laytan Laats 6bbe7d88b8 microui: make clipboard optional during init
Clipboard is an optional addition to the microui functionality, but the
init function makes it look like it is required. Additionally, a bunch of
the examples both on the Odin-Lang/examples repo and others are now
"broken".
2024-05-30 16:19:33 +02:00
gingerBill 7058d6f320 Merge pull request #3652 from Dudejoe870/compile-time-hash
Add #hash built-in directive for compile-time string hashing
2024-05-30 11:30:26 +01:00
gingerBill f86bb11f84 Merge pull request #3653 from laytan/fix-wheel-event-js-wsam
wasm: fix the WheelEvent not storing data properly
2024-05-30 11:13:44 +01:00
gingerBill 5391605961 Merge pull request #3654 from laytan/darwin-fix-sdkpath
darwin: fix sysroot retrieval for some systems
2024-05-30 11:13:32 +01:00
Erik Isidore f6e699cd22 core:sys/linux - Add support for Unix Domain Socket addresses 2024-05-30 00:14:00 -03:00
Laytan Laats eeb057b76d darwin: fix sysroot retrieval for some systems
Got a report on Discord that the current way didn't work for a user,
this change did work and I confirmed with @harold-b (who initially added
this) that it also works for them and is actually a better way.
2024-05-30 01:53:38 +02:00
Laytan Laats 692ca13ffd wasm: fix the WheelEvent not storing data properly
A `WheelEvent` is also an instanceof `MouseEvent` so it was never
hitting the if statement for the `WheelEvent`.
2024-05-30 01:49:30 +02:00
Dudejoe870 9b78061c8f Initial hash directive implementation 2024-05-28 22:42:10 -05:00
gingerBill ba8672ad29 Merge pull request #3650 from yay/destroy-multi-logger-no-pointer
Take logger itself, not a pointer to logger in multi-logger destructor.
2024-05-29 00:49:02 +01:00
Vitalii Kravchenko 223c987db2 Take logger itself, not a pointer to logger in multi-logger destructor. 2024-05-28 21:13:25 +01:00
gingerBill 74524b6050 Merge pull request #3644 from odin-lang/foreign-import-improvements
Allow `foreign import` import paths to be evaluated in the semantic phase rather than parsing
2024-05-28 12:18:15 +01:00
Jeroen van Rijn 23852c16be Merge pull request #3647 from Feoramund/fix-core-data-comments
Make `ODIN_OS`, `ODIN_BUILD_MODE` comments congruent to underlying data
2024-05-28 09:14:44 +02:00
Jeroen van Rijn 4c6b824658 Merge pull request #3648 from Feoramund/rem-unused-prime-code
Remove unused code in `internal_random_prime`
2024-05-28 08:55:04 +02:00
Feoramund 01ad69413a Remove unused code in internal_random_prime 2024-05-28 01:36:44 -04:00
Feoramund fa6e07d976 Make ODIN_OS, ODIN_BUILD_MODE comments congruent to underlying data
Sourced from `src/checker.cpp`.
2024-05-28 01:32:20 -04:00
gingerBill d91054b615 Change parser to use ^Expr rather than string for the foreign import paths 2024-05-28 00:27:13 +01:00
gingerBill a1b8749e74 Delay checking foreign import paths until after global scope is checked 2024-05-28 00:23:23 +01:00
gingerBill 38fffff06a Begin moving foreign import import paths to be evaluated in the semantic phase rather than parsing. 2024-05-27 23:51:43 +01:00
korvahkh a7a6ff8c69 encoding/json: Fix struct marshal() emitting comma after omitted field
Previously:
```odin
package main

import "core:fmt"
import "core:encoding/json"

T :: struct {
	a: string `json:",omitempty"`,
	b: string,
}

main :: proc() {
	data, _ := json.marshal(T{b = "foo"})
	fmt.println(string(data))
}
```
would output:
```
{,"b":"foo"}
```

which is not correct.

Also cleaned up some whitespace while I'm at it.
2024-05-27 16:59:46 -05:00
gingerBill 74ac2667e7 Merge pull request #3642 from 2nafish117/fix-pitch-from-quat
Fix pitch_from_quaternion
2024-05-27 22:24:46 +01:00
shashank fb6248925a fix pitch_from_quaternion 2024-05-27 23:38:50 +05:30
Harold Brenes 2ecf909be0 Fix open() foreign libc signature on Darwin 2024-05-27 11:55:58 -04:00
Jeroen van Rijn 75f1215ed2 Merge pull request #3639 from yay/destroy-file-logger-no-pointer
Make destroy_file_logger take logger instead of logger pointer.
2024-05-27 17:25:59 +02:00
Vitalii Kravchenko bdc4daca54 Make destroy_file_logger take logger instead of logger pointer. 2024-05-27 16:19:44 +01:00
gingerBill 6d163cee8a Merge pull request #3638 from harold-b/fix-darwin-libc-proc-sigs
Fix a few darwin libc signatures with incorrect parameters.
2024-05-27 02:06:50 +01:00
Harold Brenes cfd4fc835b Fix a few darwin libc signatures with incorrect parameters. 2024-05-26 19:40:08 -04:00
gingerBill 8421950546 Merge pull request #3637 from laytan/revert-clang++-detection
revert `$(llvm-config --bindir)/clang++` to get the cpp compiler
2024-05-26 19:16:32 +01:00
Laytan Laats 5027cfb618 revert $(llvm-config --bindir)/clang++ to get the cpp compiler
A few reports of either people not having this clang++ or having it but
it not finding system headers. On top of that, the reason we added this
in the first place was a bug that surfaced on clang-18 which we've since
fixed.

Order will now be clang++ from path, then the llvm bindir clang++, then an
error.

This can all still be overwritten with `CXX=blah make` like before.
2024-05-26 20:11:07 +02:00
gingerBill 149ae70be1 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-05-26 12:17:09 +01:00
gingerBill 64bdb3a097 Fix #3630 (first part) 2024-05-26 12:17:03 +01:00
gingerBill ef7a155f9a Merge pull request #3633 from korvahkh/fix-slice-has-affix
Fix slice.has_prefix & slice.has_suffix
2024-05-25 21:48:31 +01:00
korvahkh 58ae96c821 Fix slice.has_prefix & slice.has_suffix
The needle was the element type instead of the slice type.
2024-05-25 15:52:35 -05:00
Jeroen van Rijn cfadca04f9 Merge pull request #3628 from IllusionMan1212/bitset-json-marshalling-fix
fix(core/encoding/json): remove Unsupported_Type return when marshalling bit_set
2024-05-25 08:34:59 +02:00
IllusionMan1212 65a4a56a83 fix(core/encoding/json): remove Unsupported_Type return when marshalling bit_set 2024-05-25 00:45:30 +02:00
Jeroen van Rijn fb22c59d1b Merge pull request #3625 from Kelimion/iso8061
Add dedicated ISO 8601 parser.
2024-05-24 23:56:20 +02:00
Jeroen van Rijn b945e3e708 Limit to max of 9 fraction second digits, part deux. 2024-05-24 23:48:18 +02:00
Jeroen van Rijn 1473374bba Limit to max of 9 fraction second digits. 2024-05-24 23:45:46 +02:00
Jeroen van Rijn 3526042f1e Add dedicated ISO 8601 parser. 2024-05-24 23:40:14 +02:00
Jeroen van Rijn e1c4b9b06a Allow lowercase z TZ indicator. 2024-05-24 19:16:24 +02:00
Jeroen van Rijn ff34970d79 Merge pull request #3623 from yay/allow-space-in-rfc-3339
Allow space (in addition to T and t) as RFC 3339 date/time separator.
2024-05-24 19:10:04 +02:00
Vitalii Kravchenko ff94ca9e42 Allow space (in addition to T and t) as RFC 3339 date/time separator. 2024-05-24 18:03:52 +01:00
gingerBill 590db0838a Fix types 2024-05-24 17:21:00 +01:00
Jeroen van Rijn d698d4cdae Merge pull request #3621 from laytan/enable-default-temp-allocator-wasm
wasm: enable default temp allocator
2024-05-24 15:42:51 +02:00
Jeroen van Rijn d99e1616cf Merge pull request #3620 from Kelimion/deprecate_odin_printer
Deprecate `core:odin/printer` in favor of OLS.
2024-05-24 15:02:59 +02:00
Laytan Laats aa72050586 wasm: enable default temp allocator
After #3592 I think it makes sense to also enable the temp allocator by default
2024-05-24 15:01:02 +02:00
Jeroen van Rijn b7cecc5762 Keep -vet happy. 2024-05-24 14:57:48 +02:00
Jeroen van Rijn 5c06480ce0 Add core:container/rbtree to examples/all 2024-05-24 14:55:21 +02:00
Jeroen van Rijn dc744411c5 Deprecate core:odin/printer + format in favor of OLS. 2024-05-24 14:49:11 +02:00
Jeroen van Rijn e2af3652c5 Merge pull request #3619 from Kelimion/csv_iterator
Add iterator_next(&r) to CSV.
2024-05-24 14:06:42 +02:00
Jeroen van Rijn 479d301e92 Merge pull request #3614 from Kelimion/rbtree
Add `core:container/rbtree`
2024-05-24 14:04:56 +02:00
Jeroen van Rijn 11e57fd3fd Address concerns. 2024-05-24 13:58:30 +02:00
tim4242 0cba33075f Add the option to export dependencies as JSON. 2024-05-24 13:44:38 +02:00
Jeroen van Rijn 2a4ddbb7be Remove core:mem import in example. 2024-05-24 13:35:32 +02:00
Jeroen van Rijn 3b739dc5cc Add iterator_next(&r) to CSV. 2024-05-24 13:26:12 +02:00
gingerBill 0658778a30 Merge pull request #3611 from hstormo/textbox
vendor/microui: nicer textbox
2024-05-24 11:51:09 +01:00
gingerBill 1081e9ac09 Fix enum definition for bit_set use 2024-05-24 11:41:56 +01:00
Jeroen van Rijn c43d189a33 Fix package line. 2024-05-24 01:43:17 +02:00
tim4242 8664b88c8f Improved depdendency formatting to support paths containing spaces 2024-05-24 01:20:45 +02:00
tim4242 7934e92d14 Initial dependency file generation 2024-05-24 01:04:41 +02:00
Håkon Stormo 4328562e2c Satisfy -vet 2024-05-23 23:50:26 +02:00
Håkon Stormo ee79c409b4 microui: use the text_edit procs 2024-05-23 23:28:58 +02:00
Håkon Stormo d3bbe29faa text_edit: better handle failure to resize underlying buffer 2024-05-23 23:28:39 +02:00
Jeroen van Rijn 410876b36a Add core:container/rbtree
Add a red-black tree with configurable $Key and $Value.
Also includes tests that verify it maintains RB invariants, doesn't leak.

Originally based on the CC0 implementation from literateprograms.org.
But reworked to the same API used by @Yawning's excellent `core:container/avl` for ease of use.
2024-05-23 23:00:00 +02:00
Håkon Stormo f411fcedb0 microui: textbox cut/copy/paste 2024-05-23 21:38:37 +02:00
Håkon Stormo 043ddd83a9 microui: textbox selection 2024-05-23 21:36:31 +02:00
gingerBill 7dc1f114b9 Add shadow suggestion 2024-05-22 22:22:41 +01:00
gingerBill f3f08c264f Be very particular with the cases for the error notes 2024-05-22 21:55:48 +01:00
gingerBill 2f35ee9671 Improve errors a lot for assigning procedures of the wrong signature 2024-05-22 21:52:15 +01:00
gingerBill 856537f0ce Fix #3603 2024-05-20 15:54:53 +01:00
gingerBill bc706f8b0c Fix indexing type when using a #row_major matrix 2024-05-20 15:04:15 +01:00
gingerBill a68c635c00 Remove constant indexing for matrix value propagation 2024-05-20 15:00:43 +01:00
gingerBill f600562ca5 Improve fmt parsing of struct field tags 2024-05-20 14:45:49 +01:00
gingerBill 5ed93563a1 Merge pull request #3606 from Kelimion/fmtfix
Fix the way '%32b' and other prefixed numbers are written.
2024-05-20 14:29:50 +01:00
gingerBill c49a291347 Merge pull request #3607 from Szwagi/fix-atomic-memory-order
Fix Odin to LLVM memory order mapping for .Relaxed and .Consume
2024-05-20 14:29:06 +01:00
Kamil T f6ef395057 Fix Odin to LLVM memory order mapping for .Relaxed and .Consume 2024-05-20 13:57:08 +01:00
Jeroen van Rijn e0d3d68ce5 Fix the way '%32b' and other prefixed numbers are written. 2024-05-20 14:42:13 +02:00
gingerBill 46b3e7b6fa Fix for &v in &fixed_array 2024-05-20 13:36:32 +01:00
gingerBill a80011c830 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-05-20 13:32:22 +01:00
gingerBill 542c3d7561 Improve "Expected a type" syntax error 2024-05-20 13:32:16 +01:00
gingerBill f641399870 Merge pull request #3604 from matias-eduardo/master
remove extra newline in enumerated array hash fmt
2024-05-20 10:52:41 +01:00
gingerBill 891fefe117 Merge pull request #3592 from laytan/wasm-gpa
add a default heap/general purpose allocator for wasm to `base:runtime`
2024-05-20 10:38:09 +01:00
gingerBill 5473758467 Add intrinsics type_is_matrix_row_major & type_is_matrix_column_major 2024-05-20 10:15:21 +01:00
gingerBill 8eb7fe1859 Merge pull request #3482 from andreas-jonsson/netbsd-ci
NetBSD CI setup
2024-05-20 10:03:32 +01:00
gingerBill 8dec4f6ed3 Merge pull request #3570 from jasonKercher/linux-arm32
Get the compiler to build and work on arm32 Linux
2024-05-20 00:05:57 +01:00
gingerBill b6d5be8593 Merge pull request #3593 from harold-b/fix-build-sysroot-macos
Attempt to automatically resolve the sysroot on build_odin.sh on macOS
2024-05-19 23:59:44 +01:00
gingerBill 1207d64c64 Fix intrinsics.ptr_sub 2024-05-19 23:55:45 +01:00
Matias Fernandez a9629679ed remove extra newline in enumerated array hash fmt 2024-05-18 23:24:05 -04:00
Jeroen van Rijn c091b0d060 Merge pull request #3602 from Kelimion/qoifix
Apply fix to QOI decoder as well.
2024-05-18 19:48:37 +02:00
Jeroen van Rijn 58a1bb32e5 Apply fix to QOI decoder as well. 2024-05-18 19:41:07 +02:00
Jeroen van Rijn 5b92425e93 Merge pull request #3601 from Kelimion/qoifix
Fix qoi encoding bug.
2024-05-18 14:06:25 +02:00
Jeroen van Rijn 7955f4ddf1 Fix qoi encode bug. 2024-05-18 13:59:50 +02:00
gingerBill 98f8624447 Merge pull request #3594 from laytan/runtime-wasm64p32-fixes
correctly load/store uint&int in the runtime.js for wasm64p32
2024-05-17 17:32:36 +01:00
Laytan Laats e08b51ed73 correctly load/store uint&int in the runtime.js for wasm64p32 2024-05-17 16:32:34 +02:00
Jeroen van Rijn cf10c6d993 Merge pull request #3598 from Kelimion/i18n-fix
i18n: Add section merge + duplicate key detection to gettext.
2024-05-17 15:57:17 +02:00
Jeroen van Rijn f8c4ee3d3c i18n: Add section merge + duplicate key detection to gettext. 2024-05-17 15:50:37 +02:00
Jeroen van Rijn 419641ad8f Merge pull request #3596 from Kelimion/i18n-fix
Fix .mo contexts
2024-05-17 14:26:57 +02:00
Jeroen van Rijn 6139da3d41 Fix .mo contexts
Fixes #3590

- `get("key")`
- `get("context", "key")`
2024-05-17 14:15:56 +02:00
Jeroen van Rijn b51eb53d04 Merge pull request #3595 from Kelimion/i18n-fix
Fix .mo parser: Number of plurals
2024-05-17 12:15:40 +02:00
Jeroen van Rijn 5a76b3c7c5 Fix .mo parser: Number of plurals
Fixes #3591

Added plur.mo to tests
2024-05-17 12:00:20 +02:00
Harold Brenes f1b291ed62 Attempt to automatically resolve the sysroot on build_odin.sh on macOS 2024-05-16 17:53:41 -04:00
Laytan Laats f42b1c4973 add a default heap/general purpose allocator for wasm to base:runtime 2024-05-16 23:08:40 +02:00
gingerBill ab8e3db7e9 Remove bad code 2024-05-16 17:18:37 +01:00
gingerBill 575b268e88 Fix more #soa changes 2024-05-16 17:15:38 +01:00
gingerBill 7cf62f00c3 Correct #soa RTTI usage 2024-05-16 16:30:45 +01:00
gingerBill c9b1c99a40 Fix soa_zip and soa_unzip 2024-05-16 16:27:09 +01:00
gingerBill 32245e93a1 Fix #3514 along with soa.a[i] bounds checking 2024-05-16 16:18:21 +01:00
gingerBill 330d6117e3 Fix #3589 2024-05-16 15:43:08 +01:00
gingerBill b2dc5cc812 Fix error reporting for enforce new switch/for syntax 2024-05-16 15:32:15 +01:00
gingerBill a344bc4c0e Remove the old switch/for semantics entirely and enforce switch &x in y 2024-05-16 14:39:16 +01:00
gingerBill e71cd871c4 Reimplement -build-mode:static/-build-mode:lib 2024-05-16 14:27:05 +01:00
Andreas T Jonsson a93bbf6f92 Merge branch 'master' into netbsd-ci 2024-05-16 13:48:44 +02:00
gingerBill f9fd8f0c25 Merge pull request #3439 from andreas-jonsson/netbsd
NetBSD support
2024-05-15 10:33:52 +01:00
gingerBill 59c33dd9fc Add Fstat_Callback for File.user_fstat 2024-05-14 18:57:03 +01:00
gingerBill 6f9dcb4e02 Add missing @(require_results) 2024-05-14 18:46:45 +01:00
gingerBill 2b43535961 Fix typo 2024-05-14 18:45:47 +01:00
gingerBill 61826594c9 Add comment state to prefer virtual.Arena over runtime.Arena 2024-05-14 18:37:23 +01:00
gingerBill 9a487ccb6f Delete dead code 2024-05-14 18:35:24 +01:00
gingerBill 453fc5182b Remove all uses of context stuff in os2 2024-05-14 18:34:05 +01:00
gingerBill 450b9ceaec Add @(require_results) everywhere in os2 2024-05-14 18:25:15 +01:00
gingerBill 48c1822709 Move utility stuff to internal_util.odin 2024-05-14 18:14:44 +01:00
gingerBill 91b7cdaad2 Mock out temp_file.odin stuff 2024-05-14 18:11:50 +01:00
gingerBill 361be301fa Use internal temp_allocator() 2024-05-14 17:24:37 +01:00
gingerBill ecd7846ec3 Clean up allocator stuff into allocators.odin 2024-05-14 17:10:53 +01:00
gingerBill e05315831f Fix #3586 2024-05-14 00:18:38 +01:00
gingerBill 7734b12f9a Fix #3587 2024-05-14 00:16:32 +01:00
gingerBill 20f8f9012d Attempt at fixing #3588 2024-05-14 00:11:57 +01:00
gingerBill 0cf9dcd314 Make .. ranges a complete error rather than a warning now.
This should have been an error years ago.
2024-05-13 18:15:29 +01:00
gingerBill 8fa20fb875 Extra check for field being nullptr 2024-05-13 14:44:53 +01:00
gingerBill 1b593fc1ca Correct core:intrinsics to base:intrinsics 2024-05-13 13:27:44 +01:00
gingerBill 215ef3d985 Make core:runtime etc a warning, and an error with -vet 2024-05-13 13:26:47 +01:00
gingerBill 8808e5584a If only warnings exist on print_all_errors, next time it is called, clear the error list.
This is mostly only syntax errors too
2024-05-13 13:26:22 +01:00
gingerBill 54ebfa6179 Fix hanging on thread.join for windows where the thread had not been started 2024-05-13 12:58:18 +01:00
gingerBill 4bdc8548bd Fix #3554 2024-05-13 12:55:49 +01:00
gingerBill 6dc0ee3877 Fix #3577 2024-05-13 12:54:01 +01:00
gingerBill 8d687a959d Fix #3516 2024-05-13 12:52:28 +01:00
gingerBill 8b4a8e4d80 Fix #3569 2024-05-13 12:49:12 +01:00
gingerBill 90f26368d9 Merge pull request #3572 from Feoramund/fix-unix-nonstart-thread-stall
Fix joining non-`Started` threads from blocking main thread
2024-05-13 12:45:02 +01:00
gingerBill e4ec7cc3f3 Merge pull request #3580 from Feoramund/suggest-test-all-packages
Suggest `-all-packages` flag when testing empty directory
2024-05-13 12:42:48 +01:00
gingerBill 34c8739b69 Fix #3578 2024-05-13 12:42:06 +01:00
gingerBill d1217340f5 Fix #3573 2024-05-13 12:26:01 +01:00
gingerBill 4eab735b13 Minor clean up of is_terminating code
This does not fix all known issues with it
2024-05-13 12:24:50 +01:00
gingerBill f8d235b6f5 Fix #3581 due to typo 2024-05-13 12:02:02 +01:00
gingerBill 7905f0533f Fix #3582 by disallowing it 2024-05-13 12:01:16 +01:00
gingerBill 3fb0d52a74 Fix #3585 2024-05-13 11:57:04 +01:00
gingerBill 07a538cd82 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-05-13 11:54:05 +01:00
gingerBill facae34354 Fix #3584 2024-05-13 11:53:59 +01:00
Andreas T Jonsson 5541f60233 Check examples/all on NetBSD 2024-05-13 10:02:48 +02:00
Andreas T Jonsson bde8407ce8 Merge branch 'netbsd' into netbsd-ci 2024-05-13 10:01:12 +02:00
Andreas T Jonsson 6298d4a36c Fixed some build tags in vendor libs 2024-05-13 10:00:19 +02:00
Andreas T Jonsson 3e181af409 Merge branch 'netbsd' into netbsd-ci 2024-05-13 09:44:27 +02:00
Andreas T Jonsson 88528f7613 Updated makefiles to exclude some tests on BSDs 2024-05-13 09:41:54 +02:00
Andreas T Jonsson 5d82f0cad5 Merge branch 'master' into netbsd 2024-05-13 09:21:32 +02:00
Feoramund 971201182a Fix read_directory() skipping directories on UNIX-likes 2024-05-12 19:52:36 -04:00
Feoramund 1935811b2c Suggest -all-packages if testing empty directory 2024-05-12 19:51:19 -04:00
Jeroen van Rijn 1183f4794b Merge pull request #3579 from Kelimion/test_string_compare
Test string compare
2024-05-12 23:52:39 +02:00
Jeroen van Rijn 23545c3f37 Enable in Makefile 2024-05-12 23:47:42 +02:00
Jeroen van Rijn 41b8f06f51 Add 1 more each for < and > 2024-05-12 23:43:05 +02:00
Jeroen van Rijn 55d21f4c2f Test string compare
To avoid regression of the bug fixed in f8581537e4.
2024-05-12 23:38:17 +02:00
gingerBill f8581537e4 Fix >= for strings
How did this not get noticed?!?!
2024-05-12 20:25:13 +01:00
gingerBill 0f76c22c46 Check for illegal use of distinct 2024-05-12 17:48:06 +01:00
gingerBill 6bfaf4a093 Fix another oversight for bit_field endian with 1-byte types 2024-05-11 22:36:17 +01:00
gingerBill f650690f61 Merge pull request #3574 from jasonKercher/i386-syscall6
fix 6 argument syscall on i386
2024-05-11 21:50:49 +01:00
gingerBill 321e4c45b0 Merge pull request #3576 from korvahkh/json-marshal-no-nil
encoding/json: Properly marshal `#no_nil` unions
2024-05-11 21:50:26 +01:00
korvahkh 9b759f39fc encoding/json: Properly marshal #no_nil unions
Previously the first variant of a `#no_nil` would always be output as
`null`, and following variants would be treated as the wrong type.
2024-05-11 14:36:56 -05:00
Jeroen van Rijn 3a3ae6d0df Fix and re-enable .doc tests. 2024-05-11 19:25:35 +02:00
gingerBill ad0053b798 Make doc writer use the old "Ordered Insertion" based PtrMap 2024-05-11 16:24:37 +01:00
gingerBill 8e263de4aa Fix error message handling 2024-05-11 13:59:06 +01:00
gingerBill 811d53b305 Generalize to any 1-byte element in bit_field 2024-05-11 13:48:19 +01:00
gingerBill aea28d5189 Allow edge-case where backing type of a bit_field is (array of) u8, to allow any endian type 2024-05-11 13:47:33 +01:00
jason 20752d904b fix 6 argument syscall on i386 2024-05-10 23:06:49 -04:00
Feoramund 33c6f75a2e Fix joining non-Started threads from blocking main thread 2024-05-10 17:24:45 -04:00
jasonkercher 2183140e71 arm32 now compiles and runs demo 2024-05-10 13:24:43 -04:00
Andreas T Jonsson f428e30211 Minor code cleanup 2024-05-10 17:49:56 +02:00
Jeroen van Rijn 2250eb3e78 Enable core:fmt tests. 2024-05-10 17:05:18 +02:00
gingerBill aebb5a5178 Merge pull request #3506 from IllusionMan1212/windows-hid
core/sys/windows: added various procedures and constants for the hid library
2024-05-10 16:03:13 +01:00
gingerBill b4d0b1d17d Merge pull request #3544 from ntn9995/fix-parser-empty-or-no-pkg
Fix core:odin/parser crashing on empty and/or no package files
2024-05-10 16:01:16 +01:00
gingerBill 20d35acce1 Fix parser 2024-05-10 15:59:14 +01:00
gingerBill 6c4672c158 Merge pull request #3566 from Feoramund/fmt-refactor
Refactor `wprintf`
2024-05-10 15:56:26 +01:00
gingerBill 3095f46d7e Add runtime.Typeid_Bit_Field 2024-05-10 15:50:47 +01:00
ikarus 3add85e7a7 fix typo & free memory when skipping empty files 2024-05-10 14:51:09 +01:00
gingerBill ad5c9469d8 Fix #3522 2024-05-10 14:22:43 +01:00
gingerBill 710bb4369f Fix #3567 2024-05-10 13:55:15 +01:00
Andreas T Jonsson a9b94f4019 Merge branch 'netbsd' into netbsd-ci 2024-05-10 13:34:02 +02:00
gingerBill 944fdd11f2 Keep -vet happy 2024-05-10 12:03:08 +01:00
gingerBill 07739b48ee Merge pull request #3565 from wschiefer/update-d3d12
Update d3d12 API
2024-05-10 12:00:39 +01:00
gingerBill b269fd00f0 Merge pull request #3560 from wschiefer/add-more-win32-console-apis
Add more win32 console APIs
2024-05-10 12:00:28 +01:00
gingerBill 04c391074d Merge pull request #3561 from wschiefer/update-dxgi
Adding DXGI 1.5 & 1.6 APIs
2024-05-10 12:00:11 +01:00
Andreas T Jonsson a45e69e656 Removed dead code 2024-05-10 09:12:56 +02:00
Andreas T Jonsson b72c2edabb Merge branch 'master' into netbsd 2024-05-10 09:04:52 +02:00
Andreas T Jonsson 273e4c6b4c Changed target data layout 2024-05-10 08:47:51 +02:00
Andreas T Jonsson f1491280ab Fixed invalid alignment 2024-05-10 08:16:10 +02:00
Feoramund fb2549a7da Extend test suite for fmt 2024-05-09 19:44:16 -04:00
Feoramund 11180e36ae Amend fmt documentation 2024-05-09 19:38:44 -04:00
Feoramund 8c111f1baf Fix %e printing incorrect precision
For example, `%.2e` with 30.56 as the value would produce `30.60e+01`,
as opposed to C's printf producing `30.6e+01`.
2024-05-09 19:37:17 -04:00
Feoramund 5e149d2cae Refactor wprintf
- Extracts common code between C and Python-like syntax into its own
   sub-procedures.
 - Fixes Python-like syntax from treating `}` as a verb.
 - Makes C-like syntax treat ' ' as a missing verb.
 - Fixes EXTRA arguments being formatted with options that were
   previously set, instead using default options now.
 - Makes error messaging more consistent between C and Python-like
   syntax.
 - Requires argument index to be specified immediately before the verb
   in C-like syntax, per the documentation, instead of after `%` _or_
   before the verb.
 - Tracks argument usage through a `bit_set`, allowing for reporting of
   unused arguments even when reordered.
 - Moves exit for C-like syntax if next byte is `%` to beginning of
   block instead of needlessly trying to parse through all options.
 - Pops next unused argument for unspecified formatters like `%i` or
   `{}`, instead of taking the argument after the last one used.
 - Fixes unspecified precision `%.f` from not setting precision to zero,
   per the documentation.
2024-05-09 19:28:04 -04:00
Jeroen van Rijn 41bd8cf714 Merge pull request #3563 from laytan/fix-duplicate-suggestions
fix duplicate suggestions and add missing newline
2024-05-09 20:20:18 +02:00
Jeroen van Rijn 1604f37cb8 Merge pull request #3564 from laytan/fix-some-vet-style-failures
fix a couple of `-vet-style` failures
2024-05-09 20:19:46 +02:00
Waldemar Schiefer 935865a978 Update d3d12 API 2024-05-09 19:46:02 +02:00
Laytan d7fdccb08c fix a couple of -vet-style failures after f54977336b 2024-05-09 19:39:48 +02:00
Laytan 98827c867d fix duplicate suggestions and add missing newline 2024-05-09 19:21:39 +02:00
Jeroen van Rijn 8a1e7bb6fb Merge pull request #3562 from Kelimion/bitset_to_enum_slice
Bitset to enum slice
2024-05-09 18:03:42 +02:00
Jeroen van Rijn 8f706a14f8 Add allocator param. 2024-05-09 17:58:48 +02:00
Jeroen van Rijn e5af98eabe Simplify bitset_to_enum_slice 2024-05-09 17:55:50 +02:00
Jeroen van Rijn 858c78b844 Pass new -vet-style check. 2024-05-09 17:47:19 +02:00
Jeroen van Rijn a61d8daec1 Add make version of bitset to slice. 2024-05-09 17:44:39 +02:00
Waldemar Schiefer cceac781e7 Add DXGI 1.5 & 1.6 APIs 2024-05-09 17:36:26 +02:00
Jeroen van Rijn 113feacbc7 Merge pull request #3559 from Kelimion/bitset_to_enum_slice
Add slice.enum_slice_to_bitset & slice.bitset_to_enum_slice
2024-05-09 17:21:04 +02:00
Jeroen van Rijn 7bcf3b1a0d Add slice.enum_slice_to_bitset & slice.bitset_to_enum_slice 2024-05-09 17:15:45 +02:00
gingerBill f54977336b With -vet-style, give suggestion of separating where clauses with a comma rather than '&&'
This improves the error messages
2024-05-09 15:56:00 +01:00
gingerBill b0f0e4d02a Add intrinsics type_bit_set_elem_type & type_bit_set_underlying_type 2024-05-09 15:47:09 +01:00
Waldemar Schiefer abcbb8b47a Add more win32 console APIs 2024-05-09 16:41:09 +02:00
gingerBill d85c8f0b2c Fix #3555 2024-05-09 10:58:57 +01:00
gingerBill 97e9c50d11 Fix #3556 2024-05-09 10:44:06 +01:00
gingerBill 9b75656400 Merge pull request #3308 from laytan/llvm-18
Support LLVM 18 (non-windows targets for now)
2024-05-08 13:39:57 +01:00
ikarus 60b6c798a5 tabs for indentation 2024-05-08 09:07:53 +01:00
IllusionMan1212 ad3675cdd6 core/sys/windows: added various procedures and constants related to the hid library 2024-05-07 21:18:25 +02:00
Laytan Laats 9d1db48549 remove is_packed bodge 2024-05-07 17:25:17 +02:00
Laytan b0b60fe7ed fix segfault in release builds of the compiler with clang++-18 2024-05-07 16:52:46 +02:00
Laytan 87b099b5aa fix merge conflict 2024-05-07 16:52:46 +02:00
Laytan Laats 77efdcd899 fix packed gep loads with wrong alignment 2024-05-07 16:52:46 +02:00
Laytan Laats 58c0abb98d revert wrong approach in fixing the load alignment 2024-05-07 16:52:46 +02:00
Laytan d93cc18dac fix packed gep loads with wrong alignment 2024-05-07 16:52:46 +02:00
Laytan Laats ecddf3b7f1 llvm-18: cleanup 2024-05-07 16:52:46 +02:00
Laytan Laats a3821615dc llvm-18: fix windows build error because of include 2024-05-07 16:52:46 +02:00
Laytan Laats f9a7d2bf04 llvm-18: enable static map calls on non amd64sysv targets 2024-05-07 16:52:46 +02:00
Laytan c219ca5b1b llvm-18: fix undocumented breaking change on i128 alignment 2024-05-07 16:52:46 +02:00
Laytan Laats f64e8ffd64 llvm-18: fix linking the compiler with clang-18 2024-05-07 16:52:46 +02:00
Laytan Laats e3e04ffa22 llvm-18: enable sroa and static map calls 2024-05-07 16:52:46 +02:00
Laytan 043dd98e91 fix demo out of bounds error 2024-05-07 16:52:46 +02:00
Laytan b91e7f5c51 llvm-18: linux (amd64) 2024-05-07 16:52:46 +02:00
Laytan Laats bb58926b7a llvm 18: general unix and darwin specifics 2024-05-07 16:52:46 +02:00
gingerBill 1d3c061add Fix typo 2024-05-07 15:52:13 +01:00
gingerBill de5ce90fa7 Add metadata to packed structs field accesses to state it is packed 2024-05-07 15:28:09 +01:00
gingerBill 3f7a369aa1 Check for specialization in typeid/T for parapoly records 2024-05-07 14:53:02 +01:00
gingerBill 94b4af5d36 Merge pull request #3540 from VictorSohier/handle-fixed-soa-arrays
Handle fixed soa arrays
2024-05-07 14:33:25 +01:00
gingerBill e378516011 Merge pull request #3547 from hnakamur/pass_size_to_epoll_create
sys/linux: Pass size to epoll_create
2024-05-07 14:33:18 +01:00
Jeroen van Rijn 2b1afa0762 Merge pull request #3521 from Su3h7aM/correct-clang++
Uses correct `clang++` binary for non-standard versions
2024-05-07 13:25:59 +02:00
gingerBill 0cec2d7827 Fix #3527 2024-05-07 11:51:06 +01:00
gingerBill 8d96c68528 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-05-07 11:42:53 +01:00
gingerBill 0da6a3e214 Fix #3530 2024-05-07 11:42:48 +01:00
gingerBill 41d38bf964 Merge pull request #3468 from Feoramund/fix-pthread-cancel
Fix discrepancy with pthread cancelability state
2024-05-07 11:30:07 +01:00
gingerBill 05a1704898 Fix #3464 2024-05-07 11:24:21 +01:00
gingerBill 1818df786d Free memory for the error messages just in case 2024-05-07 11:21:12 +01:00
gingerBill b23f1dd5ff Merge neighbouring error messages with the same location 2024-05-07 11:19:16 +01:00
Jeroen van Rijn 96abe8627c Merge pull request #3551 from Feoramund/fix-max-bitfield-size
Fix lack of adding to `total_bit_size`
2024-05-07 00:47:15 +02:00
Feoramund 6ec7845249 Fix #3531
Individual `bit_field` size was not being added to the total size.
Error message was changed to be more explicit.
2024-05-06 18:30:04 -04:00
Victor Sohier 56b62996c3 Remove breakpoint hook 2024-05-06 18:20:20 -04:00
Victor Sohier 6cb0f5d8c5 Explicitly handle previously implicitly handled case 2024-05-06 18:04:35 -04:00
Hiroaki Nakamura df53fec828 sys/linux: Pass size to epoll_create
Without this fix, you can see a random size value is passed to
epoll_create by using strace.
2024-05-06 21:44:59 +09:00
ikarus 16fbfd0418 ignore empty files and errors on no package 2024-05-06 09:25:22 +01:00
Victor Sohier a9b18c1ec0 Formatting 2024-05-05 21:15:41 -04:00
Victor Sohier 8e4f9cb777 Fix: Fixed #soa arrays 2024-05-05 21:08:33 -04:00
gingerBill 15f7148eae Merge pull request #3526 from laytan/target-features
Improve target features support
2024-05-05 21:50:57 +01:00
gingerBill 1e5267c8e7 Merge pull request #3532 from laytan/fix-invalid-json
fix invalid JSON when an error does not have a position
2024-05-05 16:48:12 +01:00
gingerBill 96a4cecee5 Merge pull request #3536 from laytan/linux-fix-open-bits
sys/linux: fix open bits
2024-05-05 16:47:42 +01:00
gingerBill 8ba36ca85c Merge pull request #3535 from Feoramund/freebsd-arm64-minimal
Minimally support compiling Odin on FreeBSD arm64
2024-05-05 16:47:28 +01:00
Laytan Laats eaab17f8fb sys/linux: fix open bits 2024-05-05 14:16:21 +02:00
Feoramund 1165d65c94 Minimally support compiling Odin on FreeBSD arm64
This is enough to get Odin itself compiling and the demo running.
2024-05-05 07:26:45 -04:00
Laytan Laats ee818304f3 fix invalid JSON when an error does not have a position 2024-05-05 00:01:14 +02:00
Su3h7aM 30ff15e538 build: uses correct clang++ binary for non-standard versions 2024-05-03 13:20:51 -03:00
gingerBill 17a01a81d8 Merge pull request #3528 from laytan/fix-some-sync-issues
Fix some sync issues
2024-05-03 17:14:50 +01:00
gingerBill 595726e6c5 Merge pull request #3369 from joakin/fix-dynamic-library-from-vendor-on-linux
Fix vendor dynamic libraries not working on Linux
2024-05-03 17:14:32 +01:00
gingerBill fed03e896c Merge pull request #3525 from Feoramund/fix-more-error-racecond
Fix more race conditions in error reporting
2024-05-03 17:14:13 +01:00
gingerBill 2201f365a1 Allow #no_alias on multi-pointers 2024-05-03 14:51:02 +01:00
gingerBill f2505b096d Improve error message's suggestion for if !integer 2024-05-03 14:22:30 +01:00
gingerBill 242307dd44 Revert to old StringMap internal layout 2024-05-03 12:34:12 +01:00
Laytan Laats 8aab395c70 darwin: fix minimum os version check not being inclusive 2024-05-02 21:18:49 +02:00
Laytan Laats 8506e64345 sync: fix deadlock in one shot event 2024-05-02 20:49:29 +02:00
Andreas T Jonsson 1d3845abf5 Added prebuilt clang17 2024-05-02 16:52:46 +02:00
Andreas T Jonsson ecaa26710b Fixed invalid package name 2024-05-02 14:50:13 +02:00
Andreas T Jonsson 9de9223578 Use custom llvm binaries 2024-05-02 14:38:54 +02:00
Andreas T Jonsson 021271091a Merge branch 'netbsd' into netbsd-ci 2024-05-02 09:34:17 +02:00
Andreas T Jonsson 7feff1c113 Merged with master 2024-05-02 09:27:46 +02:00
Laytan Laats 25f1d0906d compiler: improve target features support 2024-05-02 00:59:52 +02:00
Feoramund 67b786c738 Fix more race conditions in error reporting 2024-05-01 16:41:02 -04:00
Jeroen van Rijn fd582015fe Remove stray binary. 2024-04-30 20:58:36 +02:00
Jeroen van Rijn 58e12f0b17 Merge pull request #3520 from flysand7/sys-linux-oflags
[sys/linux]: Fix bit numbers for open flags
2024-04-30 20:40:24 +02:00
flysand7 9ffa4a4eb1 [sys/linux]: Fix bit numbers for open flags 2024-05-01 05:24:02 +11:00
gingerBill eb06cb5d23 Merge pull request #3518 from laytan/sysinfo-arm-additions
sys/info: add arm feature detection, fix Linux implementation, show more CPU info on Darwin
2024-04-30 12:48:48 +01:00
gingerBill 5c1201fa42 Fix #3459 2024-04-30 09:10:00 +01:00
Laytan Laats c0ca26ac17 sys/info: add missing @(private)'s 2024-04-30 00:24:09 +02:00
Laytan Laats b41395e3b4 sys/info: update doc.odin 2024-04-30 00:24:09 +02:00
Laytan Laats d40c207fde sys/info: retrieve better CPU description on Darwin
Previously either `ARM` or `ARM64`, now you get something like `Apple
M1`
2024-04-30 00:24:09 +02:00
Laytan Laats 8660718ebe sys/info: add feature detection for Darwin and Linux ARM 2024-04-30 00:24:09 +02:00
Laytan Laats 485afb011c sys/info: improve platform_linux
1. fix the `linux.open` call, passing `{ .RDONLY }` becomes `0x00000001`
   while `RDONLY` is supposed to be `0x00000000`
2. fix the case where `/etc/os-release` starts with `PRETTY_NAME`
   `strings.index` was used but was checking `> 0` while `0` is valid
3. remove unneccesary temporary allocations
4. simplify the logic
2024-04-30 00:24:09 +02:00
Laytan Laats 9e94e9dac1 sys/info: remove unneccesary build tags 2024-04-30 00:24:09 +02:00
Laytan Laats cebe6bd982 sys/unix: add sysctlbyname for darwin 2024-04-30 00:24:09 +02:00
Laytan Laats c58da76562 sys/darwin: fix sysctl and sysctlbyname syscalls 2024-04-30 00:24:09 +02:00
Laytan Laats e896efdaeb sys/info: add easy way of getting the MacOS version 2024-04-30 00:24:09 +02:00
Timo 2918baa3e8 Update builder.odin
Modify documentation-text for procedure write_f64 :

change type f32 to f64
2024-04-29 20:22:53 +02:00
gingerBill ff0973e0f5 Merge pull request #3513 from thetarnav/patch-2
Remove instrinsics and utf16 imports from os/os_js
2024-04-29 16:51:45 +01:00
Damian Tarnawski ae322739b5 Remove instrinsics and utf16 imports from os/os_js 2024-04-29 16:59:52 +02:00
gingerBill f6345d20f7 Merge pull request #3508 from Feoramund/fmt-alloc-print-reqres
Require results for non-buffered `print` procs
2024-04-29 12:04:58 +01:00
gingerBill 227aab8f39 Merge pull request #3507 from IllusionMan1212/glsl-fix
fix(linalg/glsl): incorrect quat by vector3 multiplication
2024-04-29 12:04:07 +01:00
gingerBill d6824ea607 Merge pull request #3505 from Feoramund/allow-disabled-init-procs
Allow `@(init)` procs to be `@(disabled)`
2024-04-29 12:03:54 +01:00
gingerBill 2f88ded81a Merge pull request #3504 from Feoramund/fix-racecond-error-va
Fix race condition in `error_va`
2024-04-29 12:03:26 +01:00
Feoramund bbebb4ad60 Fix unseen print call in demo 2024-04-28 17:20:52 -04:00
Feoramund 700f9c94bd Combine adjacent sbprint*/to_string calls
The `sbprint*` procs already return a string conversion.
2024-04-28 17:18:46 -04:00
Feoramund c712de0cd0 Require results for non-buffered print procs 2024-04-28 17:17:01 -04:00
IllusionMan1212 1f5f417116 fix(linalg/glsl): incorrect quat by vector3 multiplication 2024-04-28 21:44:34 +02:00
Feoramund a573161abd Allow @(init) procs to be @(disabled) 2024-04-28 14:42:04 -04:00
Feoramund f1c13d6bd8 Fix race condition in error_va
If the error count exceeded `MAX_ERROR_COLLECTOR_COUNT`, multiple
threads could print and exit simultaneously, causing a segfault.

This change moves the mutex lock back before the conditional.
2024-04-28 14:03:11 -04:00
Artsiom Babukh 805bb69c6c Fix typo in core_builtin 2024-04-28 15:27:34 +00:00
gingerBill a37826e646 Merge pull request #3268 from olesya-wo/core-mem-tracking_allocator-improve
Improved statistics for core/mem/Tracking_Allocator
2024-04-28 16:01:01 +01:00
gingerBill 3b4169c903 Merge pull request #3495 from Feoramund/fix-rune-literal-error-double-reporting
Fix invalid rune literal reported twice
2024-04-28 15:22:05 +01:00
gingerBill 0eb97dba6e Merge pull request #3496 from laytan/allow-default-to-nil-allocator-on-wasm
wasm: allow `-default-to-nil-allocator`
2024-04-28 15:21:45 +01:00
gingerBill fa5e6d2d84 Merge pull request #3497 from laytan/fix-buddy-allocator-wrong-query-info
fix: buddy allocator wrong query info pointer
2024-04-28 15:21:35 +01:00
gingerBill 4668dafa2b Merge pull request #3498 from laytan/add-fprint-to-wasm
wasm: add the `fprint` procedures to `fmt`
2024-04-28 15:21:27 +01:00
Laytan Laats cc5faecced wasm: add the fprint procedures to fmt
This makes the `log` package work on wasm
2024-04-28 16:10:04 +02:00
Laytan Laats 0530f86a48 fix: buddy allocator wrong query info pointer 2024-04-28 16:09:03 +02:00
Laytan Laats 4fea5720a5 wasm: allow -default-to-nil-allocator 2024-04-28 16:05:41 +02:00
gingerBill 30cfdd73b0 Add extra asserts 2024-04-28 14:45:59 +01:00
gingerBill 950fd2d5ce Rename trace_linux.odin to trace_cpp.odin 2024-04-28 13:52:52 +01:00
gingerBill 74d75fb7fb Correct types on windows 2024-04-28 13:51:46 +01:00
gingerBill 7ee2c1084f Update doc.odin 2024-04-28 13:51:10 +01:00
gingerBill c0b7dd7da6 Remove need for allocator and MAX_FRAMES in trace.frames 2024-04-28 13:05:19 +01:00
gingerBill be09584ea5 Increase MAX_FRAMES 2024-04-28 12:56:53 +01:00
gingerBill 5ac8e8f9fd Add doc.odin 2024-04-28 12:52:02 +01:00
gingerBill 2eea06fc73 Set in_resolve for linux 2024-04-28 12:51:10 +01:00
gingerBill 0fa269811a Change layout of Frame_Location 2024-04-28 12:49:17 +01:00
gingerBill 6c185a5dca Add core:debug/trace for Linux 2024-04-28 12:43:27 +01:00
gingerBill f428f26c8e Merge branch 'master' of https://github.com/odin-lang/Odin 2024-04-28 12:05:21 +01:00
gingerBill 44c9b988bb Add default debug/trace to do nothing 2024-04-28 12:05:15 +01:00
Feoramund 29987c20c0 Fix invalid rune literal reported twice
The tokenizer and the parser were reporting it in different positions.
This way, they'll report in the same spot.
2024-04-28 07:02:21 -04:00
gingerBill 51d4dde63c Merge pull request #3494 from Feoramund/fix-3481
Clear unused `global_error_collector.curr_error`
2024-04-28 11:59:18 +01:00
gingerBill 362aa82f59 Begin work on core:debug/trace 2024-04-28 11:58:16 +01:00
Feoramund ebfbe4d260 Clear unused global_error_collector.curr_error
This should cleanly prevent acknowledging duplicate errors on the same
position as seems to be the intent based on the prior `else if`
condition.
2024-04-28 06:44:28 -04:00
gingerBill e71cf96bbc Keep -vet happy 2024-04-28 11:35:51 +01:00
gingerBill 383c17e842 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-04-28 11:31:55 +01:00
gingerBill 00b1a41540 Add stack frame procedures for core:sys/windows 2024-04-28 11:31:50 +01:00
Jeroen van Rijn 8fd318ea7a Merge pull request #3492 from DreepyYunky/Add-SetMenu
Add `SetMenu()`
2024-04-27 20:04:15 +02:00
Yunky 1deb53cddb Add SetMenu 2024-04-27 18:58:46 +01:00
gingerBill 05b5b8503d Merge pull request #3491 from Feoramund/fix-json-omitempty
Fix `omitempty` in `json.marshal`
2024-04-27 15:32:21 +01:00
gingerBill 5e1b376e22 Disallow for x in bitset_or_map if x is a variable that matches the "key" 2024-04-27 10:34:17 +01:00
Feoramund 309a770cbf Fix omitempty in json.marshal 2024-04-27 05:24:59 -04:00
gingerBill 393e4a9db6 Generalize Odin call-based "iterators" to work with more than 2-values: for x, y, z, w in iterate(&it)
It has an artificial limitation of 100 values because if you need for than that, you're doing something wrong.
2024-04-27 09:53:02 +01:00
gingerBill efae99971b Fix missing _ = 2024-04-27 09:19:50 +01:00
gingerBill 4454849252 Add attributes to procedures in text/scanner 2024-04-27 09:16:36 +01:00
gingerBill c752d0b541 Fix printing of big endian integers in a bit_field 2024-04-27 09:16:18 +01:00
gingerBill 5969796fbf Merge pull request #3490 from odin-lang/new-string-map
Change layout of compiler hash map types
2024-04-27 09:03:05 +01:00
gingerBill 6520794764 Fix wrong allocator usage 2024-04-27 08:50:05 +01:00
gingerBill 9d3f835e31 Merge pull request #3462 from Yawning/feature/math-sys-rand
core:math/rand: Use `crypto.rand_bytes()` for the system RNG
2024-04-27 08:43:02 +01:00
gingerBill 70aa2ff90a Merge pull request #3489 from Feoramund/fix-build-freebsd
Fix wrong llvm-config in build script for FreeBSD
2024-04-27 08:40:23 +01:00
gingerBill a60a7f64b9 Merge pull request #3483 from laytan/negative-improvements
improve some Negative_Read/Negative_Write logic
2024-04-27 08:38:29 +01:00
gingerBill 2368014d06 Merge pull request #3486 from Feoramund/fix-chan-memleak
Fix memory leak in `sync/chan`
2024-04-27 08:37:52 +01:00
Feoramund 92402a75f6 Fix wrong llvm-config in build script for FreeBSD 2024-04-26 18:40:59 -04:00
gingerBill 4bea5dbac1 Correct map usage 2024-04-26 15:09:08 +01:00
gingerBill 2b26384b89 Implement dumb PtrMap 2024-04-26 15:04:46 +01:00
gingerBill c685b404ea Implement dumb StringMap 2024-04-26 14:15:22 +01:00
gingerBill a3e77dcc3b Minor clean up 2024-04-26 13:25:08 +01:00
gingerBill 7305478261 Minor changes 2024-04-26 13:12:23 +01:00
gingerBill 94e0707456 Fix minor bug 2024-04-26 13:12:15 +01:00
Feoramund f95bb77f72 Fix memory leak in sync/chan 2024-04-26 05:19:52 -04:00
Andreas T Jonsson 6bbdbb4447 Added missing core:sys/info package for NetBSD 2024-04-26 11:04:27 +02:00
Andreas T Jonsson 22fa420c4f Should pass 0 as the rest of futex arguments 2024-04-25 22:22:59 +02:00
Andreas T Jonsson 9a008d10f3 Merge branch 'master' into netbsd 2024-04-25 22:04:40 +02:00
Andreas T Jonsson 3000508c02 Switched to native futex on NetBSD 2024-04-25 21:50:34 +02:00
Laytan Laats d3bd1c2110 improve some Negative_Read/Negative_Write logic
Returns the actual error if one is set, instead of swallowing it for the
less descriptive negative error.

Also fixes a out-of-bounds slice error in `bufio.writer_write` because
it wasn't checking the returned `m`.
2024-04-25 19:08:48 +02:00
gingerBill f745fff640 Merge pull request #3467 from laytan/clang-18-linking-backport
fix linking with clang-18
2024-04-25 16:09:17 +01:00
Andreas T Jonsson c1ff7894df Should only run BSD tests 2024-04-25 13:47:55 +02:00
gingerBill 8f4e3b552e Merge pull request #3478 from laytan/fix-send-event-proc-signature
sys/darwin/foundation: fix Application->sendEvent signature
2024-04-25 12:32:10 +01:00
gingerBill 1ea353dbf7 Merge pull request #3479 from laytan/support-0-sized-return-arm64-abi
compiler: support returning 0 sized types in arm64 abi
2024-04-25 12:31:56 +01:00
Andreas T Jonsson b6eaadb9a8 Fixed invalid git path 2024-04-25 13:31:33 +02:00
Andreas T Jonsson f53abf736b Print the path of the git safe directory 2024-04-25 13:25:46 +02:00
Andreas T Jonsson 4c9c0899a9 Added git safe directory config 2024-04-25 13:14:09 +02:00
Andreas T Jonsson 2b8836e29a Fixed broken export 2024-04-25 13:03:19 +02:00
Andreas T Jonsson 101abb3004 Simple CI setup for NetBSD 2024-04-25 12:46:55 +02:00
Andreas T Jonsson ce80c37c75 Fixed potential memory leak 2024-04-25 11:04:44 +02:00
Andreas T Jonsson 642391eb49 Implemented absolute_path_from_handle for NetBSD 2024-04-25 09:45:28 +02:00
Andreas T Jonsson 8ffe577a15 Added missing build tags in core 2024-04-25 09:43:54 +02:00
gingerBill e3d41f0a9e Merge branch 'master' of https://github.com/odin-lang/Odin 2024-04-24 20:55:22 +01:00
gingerBill 3b53c99576 Improve support for big-endian bit_fields 2024-04-24 20:55:18 +01:00
Laytan Laats a4cec2e8b8 sys/darwin/foundation: fix Application->sendEvent signature 2024-04-24 19:51:08 +02:00
Laytan Laats e8c5bb4629 compiler: support returning 0 sized types in arm64 abi 2024-04-24 19:50:39 +02:00
gingerBill c72a269b7c Merge pull request #3477 from laytan/fix-macos-versions
ci: fix macOS versions
2024-04-24 17:48:45 +01:00
gingerBill 94d35d9918 Disallow mixing endian types within a bit_field 2024-04-24 17:31:31 +01:00
Laytan Laats 448827c0e4 ci: fix macOS versions 2024-04-24 18:29:28 +02:00
gingerBill 04278cd654 Remove line info in message with -json-errors 2024-04-24 17:13:53 +01:00
gingerBill 15942fbf25 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-04-24 17:01:16 +01:00
gingerBill 214537b420 Improve codegen for bit_field [N]T compound literals 2024-04-24 17:01:09 +01:00
gingerBill c330e5b5c1 Improve codegen for bit_field compound literals with an integer backing 2024-04-24 14:46:34 +01:00
gingerBill ec5a84a537 Improve code generation for loading bit_field fields 2024-04-24 13:10:58 +01:00
gingerBill 5b6c96cd18 Merge pull request #3466 from laytan/fix-proc-args-debug-info
fix direct proc args debug info
2024-04-23 13:07:25 +01:00
Yawning Angel e2fa9be7e2 core/math/rand: Use core:crypto for the system RNG
This removes some code duplication and expands support for the system
RNG to all targets that `core:crypto` supports.
2024-04-23 11:47:43 +09:00
Yawning Angel a6eb64df6c core/crypto: Add a HAS_RAND_BYTES constant 2024-04-23 11:47:43 +09:00
alec hodgkinson 3b632b4d90 Fixed typo in raylib documentation 2024-04-22 15:13:52 -07:00
Feoramund 9cdb7b2584 Fix discrepancy with pthread cancelability state 2024-04-22 17:16:33 -04:00
Laytan d1a1e8f646 fix linking with clang-18
Because we currently just use the clang from the user's path linking
suddenly breaks when the user updates their system clang to 18 with an
error about an unknown option -arch.

I had already fixed it for my LLVM 18 PR but it seems like a good idea
to get this in already to avoid that breakage (had a few people come to
the Discord with it and an issue).

This fixes #3461
2024-04-22 20:58:54 +02:00
gingerBill 75fcd50b9a Merge branch 'master' of https://github.com/odin-lang/Odin 2024-04-22 18:41:51 +01:00
gingerBill c6a446fe87 Add check for build. and run. typos 2024-04-22 18:41:48 +01:00
Laytan Laats 90369b669b fix direct proc args debug info 2024-04-22 19:36:24 +02:00
gingerBill f5719ae47c Merge pull request #3465 from thetarnav/fmt-printfln-js
Add printfln and eprintfln procs to fmt_js.odin
2024-04-22 16:01:36 +01:00
Andreas T Jonsson 384137d4e9 Use PHYSMEM64 on NetBSD
I realize we should use PHYSMEM64 on NetBSD. So we can not share code with FreeBSD.
2024-04-22 10:15:52 +02:00
Andreas T Jonsson 1b15d8b453 Added build tag
Added build tag to rand_bsd.odin and fixed build warning.
2024-04-22 09:32:19 +02:00
Damian Tarnawski 2a70faca14 Add printfln and eprintfln functions to fmt_js.odin 2024-04-21 22:37:04 +02:00
Yawning Angel 902e877467 repo: Add more test binaries to .gitignore 2024-04-21 21:22:05 +09:00
Jeroen van Rijn caa8863c97 Merge pull request #3455 from Hyrtwol/normalize-path
Normalize ODIN_ROOT path
2024-04-20 12:08:12 +02:00
Thomas la Cour ebb1a07dd0 spelling 2024-04-20 09:37:30 +02:00
Thomas la Cour 0a16f7a6f1 normalize_path 2024-04-20 09:37:30 +02:00
gingerBill 3620e62ff7 Merge pull request #3453 from GoNZooo/gonz.add-nosignal-broken-pipe
fix(net/linux): add `NOSIGNAL` to `send` options
2024-04-19 14:05:49 +01:00
gingerBill d84b29866f Merge pull request #3447 from matias-eduardo/fix-soa-hash-formatting
fix #soa '%#v' formatting
2024-04-19 14:05:15 +01:00
Andreas T Jonsson 50cbb802b7 Fixed bug report information for NetBSD 2024-04-19 14:44:35 +02:00
Rickard Andersson 68f663ea85 fix(net): fix return type for send_tcp
Was `.Connection_Closed` but this is only inferrable if our return type
is not a sub-union of another.
2024-04-19 15:39:04 +03:00
Rickard Andersson efc84cd390 docs(net): add comment about EPIPE -> Connection_Closed 2024-04-19 15:37:20 +03:00
gingerBill ea49331799 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-04-19 13:33:02 +01:00
gingerBill 059175de3b Do not print column of a runtime.Source_Code_Location if the column == 0 2024-04-19 13:32:55 +01:00
Rickard Andersson 7b95562827 feat(net): turn EPIPE into Connection_Closed 2024-04-19 15:29:28 +03:00
Rickard Andersson c44f618b7d fix(net): add NOSIGNAL to send options
This is a better default than not having it, since it turns errors that
would be signals into error values instead. We could take these as
options but given that we currently don't I think this at the very least
improves on the status quo.
2024-04-19 15:17:21 +03:00
joakin 60ef4fda4d Recognize dynamic library names like libraylib.so.5.0.0 2024-04-19 13:35:53 +02:00
Andreas T Jonsson a23c378513 Make the linter happy 2024-04-19 12:32:09 +02:00
Andreas T Jonsson dd95a8d11d More std lib fixes
Just selecting the same codepath as other BSD's for the most part.
2024-04-19 10:42:09 +02:00
Jeroen van Rijn 1b143b9fa3 Merge pull request #3452 from mgavioli/Fix_i18n_get-section_number_default
Fix #3451 - `core:text/i18n` default `number` value in `get_*_section`
2024-04-19 09:24:17 +02:00
Maurizio M. Gavioli ec7e75a57f Fix #3451 - core:text/i18n default number value in get_*_section proc.
In the to procs `get_single_section()` and `get_by_section()` the `number` parameter should have a default of `1` rather than `0`.

See the issue for more details.
2024-04-19 08:23:28 +02:00
gingerBill 20223345a4 Return partial reads 2024-04-19 00:33:31 +01:00
gingerBill 3812d5e002 Only override the comma value on *_init if it is "invalid" 2024-04-19 00:19:02 +01:00
Andreas T Jonsson 07fc07822d Added some libc bindings for NetBSD 2024-04-18 16:22:07 +02:00
Andreas T Jonsson 41d4dfbcd5 Fixed concurrency issue
Fixed broken thread policy causing deadlocks.
2024-04-18 16:20:49 +02:00
gingerBill 2416380f34 Enforce as global constant 2024-04-18 12:56:18 +01:00
gingerBill 5200e3fe7a Set __$ti- stuff to be private linkage 2024-04-18 12:45:20 +01:00
gingerBill b72d49ceb5 Set linkage to private for __$type_info_data 2024-04-18 12:41:05 +01:00
gingerBill 689982a38d Force runtime type table to be in rodata/rdata section 2024-04-18 12:22:41 +01:00
gingerBill 334e08c750 Update numerous package declaration names 2024-04-18 12:17:39 +01:00
gingerBill f84a092977 Fix typo. 2024-04-18 11:28:46 +01:00
gingerBill aad41fc762 Fix #3445 2024-04-18 11:27:42 +01:00
gingerBill ece78d22d2 Add -no-type-assert and ODIN_NO_TYPE_ASSERT 2024-04-18 11:22:31 +01:00
gingerBill 5c52f3cf2f Add ODIN_NO_BOUNDS_CHECK 2024-04-18 11:13:44 +01:00
gingerBill 889cd5461c Add @(optimization_mode="size") to runtime.print_type 2024-04-18 11:00:47 +01:00
gingerBill 6127339c56 Add #force_no_inline to many of the runtime print procedures 2024-04-18 10:59:02 +01:00
Andreas T Jonsson 38640d5d9e Updated core lib and did cleanup
Updated core with some path related functions and did some minor code cleanup.
Most of the standard library function is just a matter of copy what is there for the other BSDs.
2024-04-18 10:12:42 +02:00
Matias Fernandez e296b050ee fix #soa '%#v' formatting 2024-04-17 22:54:30 -04:00
gingerBill 9bbe26f80f Merge pull request #3441 from Chickenkeeper/copy-from-string-docs-fix
Correct `copy_from_string` docs
2024-04-17 13:50:08 +01:00
gingerBill 7cd2bc26f4 Clear error message on collisions with using on struct fields 2024-04-17 13:31:32 +01:00
Andreas T Jonsson 2055f2b933 Fixed link warnings
Hardlink libc functions to the correct version on NetBSD 10 since we do not use the micro-magic from C.
2024-04-17 09:46:57 +02:00
Andreas T Jonsson 80067a959b Added thread name
Call pthread_setname_np with the correct number of arguments on NetBSD.
2024-04-17 09:42:41 +02:00
Chris 6dcf38b85b Correct copy_from_string docs 2024-04-16 21:36:54 +01:00
gingerBill a61ae7c861 Fix #3427 2024-04-16 13:31:49 +01:00
Andreas T Jonsson 4558f3992a Initial commit of NetBSD port 2024-04-16 14:27:29 +02:00
gingerBill 8a0f9ae108 Print to string buffer before printing errors 2024-04-16 13:15:23 +01:00
Jeroen van Rijn fd1eb17771 Merge pull request #3437 from Feoramund/fisher-yates-shuffle
Implement Fisher-Yates shuffle
2024-04-16 10:28:35 +02:00
Feoramund 3e449e93dd Implement Fisher-Yates shuffle 2024-04-15 17:07:05 -04:00
Jeroen van Rijn 436c5dc40c Merge pull request #3436 from karl-zylinski/fix-vet-unused-in-dynlib
Fix for dynlib:initialize_symbols not passing -vet-unused
2024-04-15 21:55:12 +02:00
Karl Zylinski 0729f2b4fb Fix for dynlib:initialize_symbols not passing -vet-unused 2024-04-15 21:26:30 +02:00
gingerBill 76229cabfa Fix typo 2024-04-15 15:44:03 +01:00
gingerBill a7e492e2c2 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-04-15 15:40:43 +01:00
gingerBill 69db9c6390 Add loads of nil checks when doing s.builder 2024-04-15 15:40:32 +01:00
Jeroen van Rijn 6def86bb4b Merge pull request #3431 from Feoramund/fix-randprime-2ndmsb
Fix `big.internal_random_prime` with `Second_MSB_On`
2024-04-15 16:30:16 +02:00
gingerBill 38c1fd5824 Keep -vet happy 2024-04-15 14:35:51 +01:00
gingerBill d5e6d722d3 Merge pull request #3045 from laytan/cbor
encoding/cbor
2024-04-15 14:28:52 +01:00
gingerBill 2af777b6cb Merge pull request #3419 from puzzleddev/fixup-d3d12-thiscall-affected-methods
Fixup vendor/d3d12 calling convention mistakes
2024-04-15 13:19:19 +01:00
gingerBill 5bda2546f7 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-04-15 12:43:50 +01:00
gingerBill 36644a3c09 Add template specialization for compared against "" with String internally 2024-04-15 12:43:45 +01:00
gingerBill 7e582dd671 Add basic suggestion to missing package name 2024-04-15 12:43:27 +01:00
gingerBill c7ac28f6a1 Merge pull request #3434 from flysand7/sys-linux-fixes
[sys/linux]: Fix syscall calls for open and fstat
2024-04-15 12:28:59 +01:00
flysand7 4bfa1ea76c [sys/linux]: Fix syscall calls for open and fstat 2024-04-15 22:16:03 +11:00
gingerBill 758ace844c Merge pull request #3428 from mgavioli/fix_core_docs
Fix the format of some `doc.odin` files of the `core` library…
2024-04-15 12:12:20 +01:00
gingerBill b9d7b8d616 Merge pull request #3429 from flysand7/sys-linux-wait4-fix
[sys/linux]: Fix signature on wait4 syscall
2024-04-15 11:51:51 +01:00
Feoramund a294f067a9 Fix big.internal_random_prime with Second_MSB_On 2024-04-15 05:49:15 -04:00
gingerBill 2e29687cee Fix #3425 2024-04-15 10:28:14 +01:00
flysand7 a0e25be196 [sys/linux]: Fix signature on wait4 syscall 2024-04-15 11:16:52 +11:00
Maurizio M. Gavioli a0cff82320 Fix the format of some doc.odin files of the core library which did not made into the documentation.
`c/frontend/tokenizer`:
   add proper "Example:" header to demo example code,
   removed empty lines.
`container/bit_array`:
   moved comment before package;
   aligned narrative lines to left margin;
   converted case lines into bulleted lines ("- ");
   converted individual examples to single-tab-indented preformatted text.
`dynlib`:
   removed "//+build ignore" line;
   added newline at EOF.
`image/netpmb`:
   converted indented lines of "Reading", "Wrting" and "Some syntax..." into bulleted lists;
   "Formats" indented lines kept as they are as the preformatted text seems relevant to keep the alignments;
   doubly indented lines kept as single-indented to keep them different (as the format does not allow for two-level bulleted lists);
   removed empy lines.
`os/os2`:	WIP, not modified
`sys/info`:
   removed "//+build ignore" line;
   converted tab-indented initial description into regular left-margin comment;
   moved uncommented sample code within the doc comment as an "Example:";
   moved simple- and double-tabbed separate comments with sample Windows and macOS outputs within the doc comment as bulleted headlines with preformatted output listings;
   removed now empty comments and blank lines after the package line.
`text/i18n`:
   removed "//+build ignore" line;
   moved the pacakge line at the end;
   de-indented the tab-indented introductory narrative;
   moved sample code comments into the doc comment as tab-indented code with a proper "Example:" heading;
   removed "```" MD attempts at code formatting.
`text/table`:
   unindented the comment lines of a descriptive kind;
   headlines of major subdivisions are marked as bold;
   kept code samples as tab-indented preformatted text (as there are several of them, the standard "Example:" and "Output:" headings cannot be used) removing the "```" MD attempts at code formatting;
   removed in-between blank lines.
2024-04-14 17:18:08 +02:00
Jeroen van Rijn d510d5e49f Merge pull request #3426 from Kelimion/crlf
Tell Git to always treat Makefile and build_odin.sh as Nix EOL
2024-04-14 16:51:42 +02:00
Jeroen van Rijn 9591eb2ed5 Tell Git to always treat Makefile and build_odin.sh as Nix EOL 2024-04-14 16:41:10 +02:00
gingerBill 21969fec61 Merge pull request #3421 from laytan/add-odin-root-command
add `odin root` command
2024-04-13 22:44:53 +01:00
gingerBill 6ee818b394 Merge pull request #3422 from wrapperup/add-dxc-vendor-docs
Add dxc to all_vendor.odin, fix dxc build on freebsd/openbsd
2024-04-13 22:42:03 +01:00
wrapperup b22e43c335 add freebsd, openbsd to dxcdef_unix.odin 2024-04-13 15:27:02 -04:00
gingerBill 6dc9fdb718 Merge pull request #3420 from laytan/fix-wasm-runtime-store-string-with-unicode
fix wasm runtime.js storeString to support Unicode
2024-04-13 20:15:41 +01:00
wrapperup f252084b1f add dxc to all_vendor.odin 2024-04-13 15:05:51 -04:00
Laytan Laats 9f97056c14 add 'odin root' command 2024-04-13 20:08:57 +02:00
Laytan Laats d2ca91b830 fix wasm runtime.js storeString to support Unicode 2024-04-13 19:34:13 +02:00
gingerBill 59705035f9 Merge pull request #3365 from yay/core-foundation-security
Core Foundation and Security core packages.
2024-04-13 10:56:24 +01:00
Vitalii Kravchenko befb0f7868 Core Foundation and Security vendor libraries. 2024-04-13 00:11:42 +01:00
tim4242 d5bb67e9e6 Fixup vendor/d3d12 calling convention mistakes 2024-04-12 20:47:02 +02:00
Jeroen van Rijn f086b4710a Merge pull request #3418 from blob1807/add-url-fragment-to-split-join-url
core:net Add support for URL fragments
2024-04-12 17:19:29 +02:00
blob1807 a4d16e97a1 Fix CI's parser 2024-04-13 01:14:55 +10:00
blob1807 6348b56c8b Move rounded tests 2024-04-13 00:57:36 +10:00
blob1807 2d1260bec9 uniformity change
small change to check things uniform
2024-04-13 00:47:49 +10:00
blob1807 c753711d86 Added support for URL fragments
Added support for a URL's fragment/anchor to `split_url` & `join_url` in `core:net` plus 4 new tests to cover it.
2024-04-13 00:39:32 +10:00
gingerBill 5726b7d954 Remove warning on clang 2024-04-12 14:51:22 +01:00
gingerBill 4240e0025e Improve scalar -> array assignment when the scalar is constant in LLVM 2024-04-12 14:20:46 +01:00
gingerBill caa344c88d Simplify scalar -> array conversions in LLVM to use a loop after a certain size 2024-04-12 14:05:36 +01:00
gingerBill 46b9bd8c0e Improve error messages for switch and for r-values with a suggestion 2024-04-12 13:35:14 +01:00
gingerBill 3426af2d6c Fix #3415 2024-04-12 12:33:25 +01:00
gingerBill efc3f9916e Fix #3414 2024-04-12 12:30:16 +01:00
Jeroen van Rijn 95bc1892f5 Merge pull request #3413 from hodgka/trig_funcs_doc
Added docs for trig function procedure groups
2024-04-11 19:02:41 +02:00
alec hodgkinson 4cdadeedc3 Added docs for trig function procedure groups 2024-04-11 09:55:43 -07:00
gingerBill cb0a57eaa9 Add -target:freestanding_amd64_win64 2024-04-11 17:18:51 +01:00
gingerBill aab122ede8 Remove ? 2024-04-11 15:59:22 +01:00
gingerBill 503964c769 Add @(static) check 2024-04-11 15:57:13 +01:00
gingerBill b2e887be36 Change stack overflow check to >256 KiB 2024-04-11 15:55:01 +01:00
gingerBill f36fb6d1ef Add nil checks 2024-04-11 15:41:01 +01:00
gingerBill 45d7a670ce Fix @(static) error message bug 2024-04-11 15:34:34 +01:00
gingerBill 86e82dc182 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-04-11 15:24:42 +01:00
gingerBill b6d2ac11b8 Add -vet-unused-variables and `-vet-unused-imports (-vet-unused is both) 2024-04-11 15:24:36 +01:00
gingerBill 6c38ae3658 Remove #optional_ok from docs 2024-04-11 15:24:08 +01:00
Jeroen van Rijn 532d477705 Merge pull request #3121 from RilleP/parsing-package-fixes
core:odin parsing fixes
2024-04-11 15:19:10 +02:00
gingerBill 0abbf3ba0a Fix #3412 2024-04-11 13:57:37 +01:00
RilleP 330c161625 remove semicolon 2024-04-11 09:36:28 +02:00
gingerBill 97db075e45 Add #panic to tell of moved package 2024-04-10 20:32:55 +01:00
RilleP 730f992bff fix indentation 2024-04-10 19:16:38 +02:00
RilleP 95a38d5a96 Merge branch 'master' into parsing-package-fixes 2024-04-10 19:10:33 +02:00
gingerBill 13e459980b Fix ptr_to_bit_field.field 2024-04-10 16:18:44 +01:00
gingerBill 3b5e515a22 Fix #3386 - fixed.to_string 2024-04-10 14:35:14 +01:00
gingerBill 3ad95d6be3 Add append_u128 2024-04-10 14:35:00 +01:00
gingerBill abd5fc606c Fix #3407 2024-04-10 14:12:41 +01:00
gingerBill 6678242280 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-04-10 13:40:31 +01:00
gingerBill fd487f66bc Add json:"name,omitempty" 2024-04-10 13:40:25 +01:00
gingerBill d0dc7395e9 Allow for comma-separate json names json:"name,flag" 2024-04-10 13:29:10 +01:00
Jeroen van Rijn 2ba2bc1fec Merge pull request #3288 from Yawning/feature/even-moar-crypto
core/crypto: Even more improvments
2024-04-10 14:19:25 +02:00
gingerBill 97e2d8916a Merge branch 'master' of https://github.com/odin-lang/Odin 2024-04-10 12:32:32 +01:00
gingerBill 3dfd61dd4f Make intrinsics.overflow_* NOT #optional_ok 2024-04-10 12:32:26 +01:00
gingerBill 0f39b9ef22 Merge pull request #3403 from iciuperca/master
Avoid loop index shadowing in vendor:OpenGL
2024-04-10 12:01:08 +01:00
gingerBill af67cc7afe Merge pull request #3397 from wrapperup/add-movefile-flags
Add flags for windows `MoveFileEx`
2024-04-10 12:01:01 +01:00
gingerBill 53558313d8 Merge pull request #3402 from Chickenkeeper/using-param-error-typo-fix
Fix typo in using parameter error message
2024-04-10 11:53:08 +01:00
Jeroen van Rijn 8a6a3e883c Merge pull request #3406 from laytan/bit-field-core-parser
add bit_field to `core:odin`
2024-04-10 03:12:40 +02:00
Laytan Laats af6d2480fa add bit_field parsing to core:odin/parser
Also adds it to the core type thingy like it is in the compiler.
2024-04-10 01:01:32 +02:00
iciuperca c644f79573 Avoid loop index shadowing
The inner loop uses the same index variable name "i" as the parent.

This causes an error message with -vet -strict-style
2024-04-09 18:24:57 +01:00
Chris 219eb58c08 Fix typo in using parameter error message 2024-04-09 12:03:41 +01:00
gingerBill 2207a01494 Merge pull request #3400 from Chickenkeeper/datetime-using-parameter-fix
Remove using parameter from validate_datetime
2024-04-09 12:03:11 +01:00
Chris 60478c0e07 Remove using from validate_datetime 2024-04-09 10:57:51 +01:00
wrapperup 9b496e82f3 add movefile flags 2024-04-09 01:50:16 -04:00
Yawning Angel fa1d681e65 tests/core/crypto: Start adding comprehensive curve25519 tests 2024-04-09 14:37:59 +09:00
Yawning Angel 893c3bef9a core/crypto/ed25519: Initial import 2024-04-09 14:37:59 +09:00
Yawning Angel d96f8bb5c1 core/crypto/ristretto255: Initial import 2024-04-09 14:37:59 +09:00
Yawning Angel 563c527419 core/crypto/_edwards25519: Initial import 2024-04-09 14:37:59 +09:00
Yawning Angel fec42a6d74 core/crypto/_fiat/field_scalar25519: Initial import 2024-04-09 10:23:58 +09:00
Yawning Angel 4defe88dec core/crypto/_fiat/field_poly1305: Mark more functions contextless 2024-04-09 10:23:58 +09:00
Yawning Angel 36f3001d59 core/crypto/_fiat/field_poly1305: Use multiply to calculate the mask 2024-04-09 10:23:58 +09:00
Yawning Angel 1ce279e6a1 core/crypto/_fiat/field_curve25519: Mark more functions contextless 2024-04-09 10:23:58 +09:00
Yawning Angel c951cbdbbc core/crypto/_fiat: odinfmt (NFC) 2024-04-09 10:23:58 +09:00
Yawning Angel 31aba5a728 core/crypto/_fiat/field_poly1305: Move routines (NFC) 2024-04-09 10:23:58 +09:00
Yawning Angel 9a418fd27b core/crypto/_fiat/field_curve25519: Move routines (NFC) 2024-04-09 10:23:58 +09:00
Yawning Angel f9b9521bf0 core/crypto/_fiat/field_curve25519: Use multiply to calculate the mask
Largely for consistency with the generic code, either is valid with Odin
semantics, but this is easier to comprehend.
2024-04-09 10:23:58 +09:00
Yawning Angel b155fdf8c9 core/crypto: Add has_rand_bytes
This allows runtime detection as to if `rand_bytes` is supported or not,
and lets us enable the test-case on all of the supported targets.
2024-04-09 10:23:58 +09:00
Yawning Angel a43a5b053c core/crypto: Add more documentation about assumptions (NFC) 2024-04-09 10:23:58 +09:00
gingerBill a14f0d8f58 Merge pull request #3396 from laytan/fix-nasm-check
fix nasm check
2024-04-09 00:09:13 +01:00
gingerBill 25f781d64b Merge branch 'master' of https://github.com/odin-lang/Odin 2024-04-08 23:58:36 +01:00
gingerBill 9933ca8b56 Make map_total_allocation_size public; Add map_total_allocation_size_from_value 2024-04-08 23:58:30 +01:00
Laytan Laats 9c958ee66d fix nasm check 2024-04-08 20:43:52 +02:00
gingerBill a00d96c0de Merge pull request #3395 from odin-lang/darwin-reorganization
Move `vendor:darwin/Foundation` to `core:sys/darwin/Foundation`
2024-04-08 16:30:44 +01:00
gingerBill ecac3aef32 Change allocator to permanent 2024-04-08 16:18:14 +01:00
gingerBill ec45504631 Obfuscate #line 2024-04-08 16:14:47 +01:00
gingerBill 810cf22e5d Obfuscate #file and #procedure when -obfuscate-source-code-locations is enabled 2024-04-08 16:08:35 +01:00
gingerBill ef82f3e71e Move vendor:darwin/Foundation to core:sys/darwin/Foundation 2024-04-08 13:47:46 +01:00
gingerBill 16dc79fc5c Add "type" field to -json-errors 2024-04-08 13:36:23 +01:00
gingerBill 2aca370a0a Merge pull request #3394 from laytan/wasm-fixes
Wasm fixes
2024-04-08 13:33:29 +01:00
Laytan Laats ce196529dc enable the required target feature atomics when using them in wasm 2024-04-08 13:56:04 +02:00
Laytan Laats 9d8bb7f4e4 fix _end being called before the actual end when using the step function 2024-04-08 13:54:23 +02:00
Laytan Laats 667883b3d5 fix js_wasm time.tick_now, performance.now() returns a float 2024-04-08 13:53:16 +02:00
gingerBill 114ddc4a10 Fix printing error when field name could not be found 2024-04-08 12:06:06 +01:00
gingerBill 0df9c8bffc Improve error messages for people using keywords instead of identifiers 2024-04-08 12:04:33 +01:00
Jeroen van Rijn 0a73ed0799 Merge pull request #3390 from Lperlind/master
Update "core:runtime" to "base:runtime"
2024-04-07 01:09:47 +02:00
Lucas Perlind a71cd07b36 Update "core:runtime" to "base:runtime" 2024-04-07 09:02:01 +10:00
gingerBill 2bb20a2c1c Merge pull request #3388 from laytan/fix-raygui-symbol
fix raygui `GuiFade` being renamed to `GuiSetAlpha`
2024-04-06 22:52:08 +01:00
gingerBill 352d526b94 Merge pull request #3389 from laytan/fix-wasm-atomics
fix wasm atomics
2024-04-06 22:51:58 +01:00
Laytan Laats b150f49c46 fix wasm atomics
Fixes #2745
2024-04-06 23:32:38 +02:00
Laytan Laats d83532d29e fix raygui GuiFade being renamed to GuiSetAlpha 2024-04-06 20:20:16 +02:00
gingerBill 83d3bc74b0 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-04-06 16:59:07 +01:00
gingerBill fbf01543d1 Remove duplicate table 2024-04-06 16:59:02 +01:00
gingerBill 8a98ee800a Merge pull request #3379 from atomicptr/task/add-sdl-sempost
Add missing SDL2_SemPost binding
2024-04-06 16:12:41 +01:00
gingerBill f72e3f689b Merge pull request #3383 from oskarnp/or_return_crash
Fix checker crash when or_return used for non-existing proc
2024-04-06 16:10:09 +01:00
Jeroen van Rijn cd6153a125 Merge pull request #3385 from blob1807/fixed-removed-undefined-var
core:math/fixed Removed undefined & usused vars in init_from_parts
2024-04-06 14:01:25 +02:00
blob1807 fde4e8c905 Removed undefined & usused vars
Removed undefined& usused vars in init_from_parts
2024-04-06 21:49:50 +10:00
oskarnp ca46484ae3 Fix checker crash when or_return/or_break/or_continue used for non-existing proc 2024-04-06 11:02:43 +02:00
Jeroen van Rijn 280adc8a85 Merge pull request #3381 from Yawning/fix/chacha20poly1305
core/crypto/poly1305: The final addition is NOT mod p
2024-04-05 16:57:31 +02:00
Yawning Angel a45721e9ad core/crypto/poly1305: The final addition is NOT mod p 2024-04-05 23:45:41 +09:00
Christopher Kaster 8d399fa7c0 add missing SDL2_SemPost binding 2024-04-05 09:00:57 +02:00
gingerBill 1422e5bc26 Merge pull request #3377 from laytan/fix-amd64-sysv-abi
fix amd64 sysv abi to pass asan everywhere
2024-04-05 00:06:56 +01:00
Laytan Laats 133b45d843 fix amd64 sysv abi to pass asan everywhere
I verified the PR by running the entire test suite of Odin itself with
`-sanitize:address` and also the ols test suite (which caused unique problems
before).

A test has also been added with some problematic code, Windows seems to
have problems with asan in CI or in general so it is not ran there.

The LB_ABI_COMPUTE_RETURN_TYPES block has been removed entirely because
it was unused, I got pretty confused why it didn't effect anything at
first.

Fixes #3211
2024-04-04 23:45:23 +02:00
gingerBill 510574aa7f Merge pull request #3373 from laytan/add-some-windows-wsa-symbols
add some wsa based additions to `core:sys/windows`
2024-04-04 20:40:31 +01:00
gingerBill 3fd3bf2d4d Merge pull request #3371 from mailgerigk/windows-setevent
Add windows.SetEvent
2024-04-04 18:09:21 +01:00
gingerBill fbff2b4fd6 Merge pull request #3372 from laytan/fix-lbarg-ignore-logic
fix lbArg_Ignore logic
2024-04-04 18:09:12 +01:00
gingerBill 7f0ca315b3 Merge pull request #3374 from laytan/fix-128-ints-alignment-arm64
fix 128 bit int alignment on arm64
2024-04-04 18:06:01 +01:00
Laytan Laats 31407d9b1b fix 128 bit int alignment on arm64
Fixes #2403
2024-04-04 18:39:41 +02:00
gingerBill 83e2f5ff74 Add better error messages with suggestions for using context as an identifier 2024-04-04 17:01:31 +01:00
gingerBill 2375ac22a7 Improve error messages for A variable declaration must be an identifier 2024-04-04 16:57:08 +01:00
gingerBill b979fd4c43 Remove consecutive linking libraries 2024-04-04 16:14:05 +01:00
gingerBill 0e5a482c42 Default to "smart" linker behaviour; Add -min-link-libs to use minimize link libs if wanted 2024-04-04 16:11:26 +01:00
Laytan Laats 1af84e082c add some wsa based additions to core:sys/windows 2024-04-04 17:09:12 +02:00
gingerBill d248cddf90 Remove dead newline 2024-04-04 16:07:55 +01:00
Laytan Laats a7056f2b4f fix lbArg_Ignore logic
Fixes #2698
2024-04-04 16:58:22 +02:00
gerigk 62cebe1bc9 Add windows.SetEvent 2024-04-04 16:00:01 +02:00
gingerBill 99aff7e3fb Merge pull request #3370 from laytan/fix-objc-proc-group-edge-case
fix objc proc group edge case
2024-04-04 13:03:27 +01:00
Laytan Laats 5339e1e1b6 fix objc proc group edge case
Fixes #2648
2024-04-03 21:21:46 +02:00
gingerBill 5fe0788cff Minimize code duplication in core:mem by using the base:runtime calls 2024-04-03 11:47:39 +01:00
gingerBill e42b16b106 Merge pull request #3366 from laytan/fix-vet-scope-bug
fix vet scope bug skipping some scopes
2024-04-03 11:40:01 +01:00
gingerBill a1d9442380 Merge pull request #3367 from laytan/fix-stack-overflow-warning
fix -vet warning for stack overflows not showing up
2024-04-03 11:39:25 +01:00
Laytan Laats b754c1e072 fix -vet warning for stack overflows not showing up
Due to the placement of this code, the warning would only ever be added
if the variable was also either unused or shadowed.
2024-04-03 01:05:54 +02:00
Laytan Laats 3a0df80066 correct newly found vets 2024-04-03 00:52:58 +02:00
gingerBill a9bfb3ac2e Clarity warning and error printing 2024-04-02 23:39:14 +01:00
gingerBill 692a47f080 Fix printing of warnings 2024-04-02 23:36:36 +01:00
Laytan Laats 21fcf7c874 fix vet scope bug skipping some scopes
Fixes #3146
2024-04-02 23:59:38 +02:00
gingerBill 05d07983c3 Merge pull request #3363 from laytan/fix-c-varargs-named-args
fix named arguments and untyped nil with #c_vararg
2024-04-02 18:36:10 +01:00
Laytan Laats fc30bde0f6 fix untyped nil into c varargs
Fixes #2842
2024-04-02 18:49:35 +02:00
Laytan Laats a8d8696e2f fix named arguments with #c_vararg
Previously `args=1`, `args={}`, `args={1, 2, 3}` would all crash the
compiler. Now it passes them correctly, and if given a compound literal,
the values are expanded into the call so you can use a named arg while
passing multiple values.

Fixes #3168
2024-04-02 17:25:11 +02:00
gingerBill 66f9ef9a00 Merge pull request #3361 from yay/ns-application-activate
Add NSApplication.activate to Foundation bindings.
2024-04-02 06:59:13 +01:00
Vitalii Kravchenko fdd4ef3c59 Add NSApplication.active to Foundation bindings. 2024-04-02 02:35:00 +01:00
Jeroen van Rijn f9f6fbfe1f Merge pull request #3360 from laytan/debug-info-fixes
fix wrong type in map debug info
2024-04-01 19:12:24 +02:00
Laytan Laats 4fc96e1ca5 change unneeded permanent allocation to temporary 2024-04-01 19:06:05 +02:00
Laytan Laats cfc85fd737 fix wrong type in map debug info 2024-04-01 18:42:10 +02:00
Jeroen van Rijn 6b7e9f0a2d Merge pull request #3359 from Kelimion/tests_digests
Add SHA3-512 digests verification to test assets.
2024-04-01 18:24:36 +02:00
Jeroen van Rijn b3580fa63a Make it a HMAC. 2024-04-01 18:20:14 +02:00
gingerBill 406aa587e2 Merge pull request #3358 from laytan/debug-info-fixes
debug info fixes/refactor
2024-04-01 16:53:56 +01:00
Jeroen van Rijn b2f432c223 Add SHA3-512 digests verification to test assets. 2024-04-01 17:18:31 +02:00
Laytan Laats 7c2352ea08 remove soa handling in debug info, fields are already added in checker 2024-04-01 16:51:16 +02:00
Laytan Laats 9647cb74ad debug info fixes/refactor
This fixes (on my end) #3340, #3117, #2945, #2922, and #2762

A general refactor of debug info generation in order to fix issues and
increase stability.

What I believe is the root cause of a bunch of issues is that we use the
temporary metadata/forward declarations too much (/ hold onto them for
too long). It seems to cause problems with the reference counting inside
LLVM.

This PR reduces the use of these forward declarations to a minimum, it
creates it, fills in the fields, and resolves it, instead of waiting
until the end of generating code.

Some smaller issues I came across have also been solved.
2024-04-01 16:28:44 +02:00
gingerBill bb72ff9c35 Fix nested ERROR_BLOCK bug 2024-04-01 14:28:11 +01:00
gingerBill 397c2aa201 Merge pull request #3318 from flysand7/os2-file-pipe-read
[core/os2]: Fix read_entire_file for reads from pipe and console.
2024-04-01 13:38:10 +01:00
gingerBill b47d73c651 Fix type checking for invalid enum backing type 2024-04-01 13:34:30 +01:00
flysand7 3ee9184537 [core/os2]: Fix memory leak on read_entire_file 2024-04-01 23:32:16 +11:00
gingerBill 2938def707 Remove dead comment 2024-04-01 13:27:51 +01:00
gingerBill 84686c70c5 Error message when RTTI is disabled when iterating over an enum type or a bit_set of enum with for in 2024-04-01 13:16:49 +01:00
gingerBill 3fa02427b3 Unify error message logic for ranges over bit_set 2024-04-01 13:12:09 +01:00
gingerBill b862691d75 Support for in with bit_set 2024-04-01 13:08:07 +01:00
gingerBill f482cc8374 Fix error message 2024-04-01 12:33:56 +01:00
gingerBill 030b8d3f66 Merge pull request #3354 from serberoth/issue-3349
Patch for #3349 to address API concerns for Darwin platform in core:os
2024-04-01 12:25:17 +01:00
Jeroen van Rijn 0d8dadb084 Merge pull request #3357 from DragosPopse/win32-coinit-fix
Fixed windows.COINIT.MULTITHREADED declaration.
2024-03-31 20:41:13 +02:00
Dragos Popescu d0674cb70f Fixed windows.COINIT.MULTITHREADED declaration. It's supposed to be 0 rather than 3 2024-03-31 21:29:49 +03:00
nicola 3975b5e736 :Updated core:os for darwin to include flush function and match close to api documentation returning errno 2024-03-30 16:48:52 -04:00
gingerBill 2bdf5f58ef Enforce error on old style for/switch l-value 2024-03-30 14:23:47 +00:00
gingerBill 8e1a2094a7 Fix debug info for map 2024-03-30 13:46:23 +00:00
gingerBill 9271372fef Fix #field_align issues, by simplifying the LLVM struct type generation 2024-03-30 13:06:51 +00:00
gingerBill 4edcaa6124 Try storing a pointer to a fake metadata type in the debug info for a map 2024-03-30 10:29:20 +00:00
gingerBill d84d65ba45 Merge pull request #3348 from rick-masters/fix_convert_smaller_float_endian
Implement endian conversions for smaller float types.
2024-03-29 22:13:58 +00:00
gingerBill 28fb1ba83d Merge pull request #3350 from laytan/fix-gb.h-for-fsanitize-address
fix gb.h to be able to use -fsanitize=address
2024-03-29 22:13:32 +00:00
gingerBill db95ed7cdd Merge pull request #3353 from laytan/fix-incomplete-types-resize-segfault
fix a segfault when incomplete types array resizes while processing
2024-03-29 22:13:01 +00:00
Laytan Laats e6a552e0ce fix gb.h to be able to use -fsanitize=address 2024-03-29 22:51:58 +01:00
Laytan Laats 915f63b3f9 fix a segfault when incomplete types array resizes while processing 2024-03-29 22:42:12 +01:00
rick-masters e1b545860f Implement endian conversions for smaller float types. 2024-03-29 11:05:27 +00:00
Jeroen van Rijn 8899f42478 Merge pull request #3347 from harold-b/macos-timing-fix
Fix incorrect timings on macOS
2024-03-29 10:15:16 +01:00
Harold Brenes 13b8a5b73d Reverting to calculated frequency timings method on macOS, but fixed 2024-03-29 05:04:40 -04:00
Harold Brenes b84a660806 Fix incorrect timings on macOS 2024-03-28 21:09:37 -04:00
Jeroen van Rijn d325c8ad23 Merge pull request #3346 from laytan/add-macos-14.4.1
add MacOS 14.4.1 to sys/info and odin report
2024-03-28 19:43:57 +01:00
Laytan Laats b7fd51a251 add MacOS 14.4.1 to sys/info and odin report 2024-03-28 19:39:18 +01:00
Jeroen van Rijn 7325120ca9 Merge pull request #3345 from laytan/speed-up-path-to-fullpath
fix not setting ok in cached code path
2024-03-28 19:27:31 +01:00
Laytan Laats 9a5a39c07d fix not setting ok in cached code path 2024-03-28 19:16:55 +01:00
Jeroen van Rijn 9b43aa3c94 Merge pull request #3344 from laytan/speed-up-path-to-fullpath
compiler: speed up path_to_fullpath on Linux/MacOS
2024-03-28 19:02:39 +01:00
Laytan Laats 63f30a8207 speed up path_to_fullpath on Linux/MacOS
We did some profiling for #3343 and this seems to be the biggest
problem. `realpath` is expensive, and we are locking here for no reason
that I can think of.

This improves the "check procedure bodies" timing (of the linked issue)
from 2.4s to .4s on my machine.
2024-03-28 18:44:21 +01:00
gingerBill 308e9112f2 Disable packing on ARM64 and AMD64 2024-03-28 10:58:40 +00:00
gingerBill 58d0635f48 Merge pull request #3342 from FrancisTheCat/master
Json: Improved unmarshalling of `using _: T` fields
2024-03-27 18:57:34 +00:00
FrancisTheCat 2ccb326a41 Merge branch 'odin-lang:master' into master 2024-03-27 17:52:29 +01:00
gingerBill cf9bdc134c Fix #3341 2024-03-27 16:48:51 +00:00
FrancisTheCat 29e4e85152 Merge branch 'odin-lang:master' into master 2024-03-27 16:43:02 +01:00
Franz Höltermann a422aba578 Json: improved unmarshalling of using _: T fields.
`using _: T` fields will now have their members unmarshalled to their
parent types reflecting the new behaviour of json.marshall.

Example:
```go
A :: struct {
    using _: B,
}

B :: struct {
    field: string,
}

data := `{"field": "Hello World"}`

a: A
json.unmarshal_string(data, &a)
```
2024-03-27 15:46:44 +01:00
gingerBill 7b387fd3aa Improve C-like syntax mistakes error messages 2024-03-27 13:10:46 +00:00
gingerBill 12ec9bce7d Fix parsing bug on bit_set[;x] 2024-03-27 13:05:15 +00:00
gingerBill b378eb2df3 Fix free bug not using the correct allocator 2024-03-27 12:54:52 +00:00
gingerBill 6422c090f2 Make hash procedures contextless where possible 2024-03-27 12:54:37 +00:00
gingerBill 3bc7c51325 Merge pull request #3283 from laytan/darwin-new-wait-on-address-api
darwin: use new wait on address API if possible
2024-03-27 11:20:32 +00:00
gingerBill f57cc6beb1 Merge pull request #3331 from laytan/darwin-fix-entrypoint-warning-dylibs
darwin: fix linker warning when building dynamic library
2024-03-27 11:19:11 +00:00
gingerBill 2031d2769a Merge branch 'master' of https://github.com/odin-lang/Odin 2024-03-27 00:58:35 +00:00
gingerBill 83c9739a7d Update year 2024-03-27 00:58:21 +00:00
gingerBill d9ba698b7b Merge pull request #3337 from FrancisTheCat/master
Json: Improve marshalling of `using _: T` fields
2024-03-27 00:57:03 +00:00
Arseniy Poroshin 77a0e50298 fix comments in core:container/queue. 2024-03-26 22:39:43 +00:00
Laytan Laats 19d566ebc5 darwin: fix linker warning when building dynamic library
Trying to fix all linker warnings that macOS comes up with, when
building a dynamic library it currently emits `ld: warning: ignoring -e, not used for output type`
2024-03-26 21:00:14 +01:00
Franz Höltermann 92a5666c1c Json: fields on structs like 'using _: T' will now have T's fields
marshalled directly into the parent type without an '"_":{ ... }'.
This seems like desirable behavior to me, since you can't access the
fields with 'Parent_Type._.field' either.
2024-03-26 20:22:51 +01:00
gingerBill 63d6b4752b Fix type info layout for wasm64p32 targets 2024-03-26 17:16:12 +00:00
gingerBill 6588fe35b3 Fix wasm abi 2024-03-26 16:47:29 +00:00
gingerBill fa84272d5e Merge pull request #3335 from rick-masters/fix_incomplete_struct_type
Don't add type info for incomplete structs.
2024-03-26 16:08:12 +00:00
rick-masters c90a6ab0d5 Remove accidentally added test binary. 2024-03-26 15:08:32 +00:00
gingerBill 0989eac681 Add extra sanity check for nullptr 2024-03-26 14:57:06 +00:00
rick-masters b8c0a02164 Don't add type info for incomplete structs. 2024-03-26 14:34:56 +00:00
gingerBill df526549e2 Fix min/max for wasm 2024-03-26 14:31:28 +00:00
gingerBill 1009182f7b Fix another #soa race condition bug 2024-03-26 14:13:55 +00:00
gingerBill 620dd2c812 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-03-26 13:06:46 +00:00
gingerBill 533ba63c82 Fix #3327 #3204 #3200 2024-03-26 13:06:39 +00:00
gingerBill 2165303f5e Merge pull request #3332 from laytan/darwin-be-less-annoying-about-library-versions
darwin: be less annoying about "incompatible" library versions
2024-03-26 11:16:25 +00:00
gingerBill c59f6d548b Merge pull request #3333 from blob1807/change-time-sleep-doc
time.accurate_sleep Windows Doc update
2024-03-26 11:15:55 +00:00
blob1807 8eed65ad4c Update time.odin 2024-03-26 11:20:05 +10:00
blob1807 bc0a2b8d39 Update time.odin 2024-03-26 11:17:44 +10:00
blob1807 a405c72d4d Updated windows time period call
Updated win32.time_begin_period to windows.timeBeginPeriod
Added a note about calling windows.timeEndPeriod once you don't need accurate_sleep, as per MS's docs https://learn.microsoft.com/en-us/windows/win32/api/timeapi/nf-timeapi-timebeginperiod#remarks
2024-03-26 11:13:27 +10:00
Laytan Laats b26a685b76 darwin: be less annoying about "incompatible" library versions
After #3316 we set a default minimum version, now this will warn if you
link with a library that is targeting later versions.

This might be a bit annoying, especially when the user hasn't actually
given Odin a minimum target.

So this PR makes these warnings only show when you explicitly give a
target version (afaik that is the only thing that -mmacosx-min-version
actually does for us because we don't use it to compile anything, just
to link).
2024-03-25 22:11:20 +01:00
gingerBill 3a8971c260 Merge pull request #3330 from laytan/remove-mistaken-dll
remove mistakenly added dll
2024-03-25 17:14:36 +00:00
Laytan Laats ed742efc33 remove mistakenly added dll
Just noticed I oopsied the glfw dll into the repo
2024-03-25 18:11:41 +01:00
gingerBill 06ee9117d2 Merge pull request #3124 from laytan/update-releases-llvm-version
update LLVM to 17 for CI/releases
2024-03-25 16:36:38 +00:00
gingerBill e100d9264f Merge pull request #3329 from laytan/fix-darwin_amd64-f16-emulation-on-older-microarches
darwin: fix amd64 f16 emulation
2024-03-25 16:35:57 +00:00
gingerBill 53b02c5e6f Fix printing errors issue 2024-03-25 14:46:45 +00:00
gingerBill 50618759a6 Fix error reporting for type cycles 2024-03-25 13:44:00 +00:00
gingerBill 600ca83386 Merge pull request #3326 from rick-masters/fix_fields_wait_signal
Fix fields_wait_signal futex.
2024-03-25 13:29:08 +00:00
gingerBill e5629dafd0 Potentially fix a race condition with parapoly types (related to #3328) 2024-03-25 13:23:43 +00:00
Laytan Laats a2167587ae Merge branch 'fix-darwin_amd64-f16-emulation-on-older-microarches' of github.com:laytan/Odin into update-releases-llvm-version 2024-03-25 14:15:18 +01:00
Laytan Laats b2a35683a4 darwin: fix amd64 f16 emulation
Fixes #3222
2024-03-25 14:07:49 +01:00
Laytan Laats dcc263c618 re-enable core tests on macos arm 2024-03-25 14:05:07 +01:00
Laytan Laats 3b34cf6dbb Also update to LLVM 17 for general CI 2024-03-25 14:05:07 +01:00
Laytan ae9f026f4b llvm 17 on macos arm releases 2024-03-25 14:05:07 +01:00
Laytan Laats 46093bad1e update LLVM to 17 for releases 2024-03-25 14:05:07 +01:00
flysand7 c843002d07 [core/os2]: Move .Broken_Pipe to General_Error enum 2024-03-25 23:35:01 +11:00
rick-masters 6d4f30de1a Fix fields_wait_signal futex. 2024-03-24 16:28:55 +00:00
gingerBill 68ff945419 Remove old error message for #3062 2024-03-24 14:39:42 +00:00
gingerBill cab53e12b7 Add assert message to tell me people to report the bug 2024-03-24 13:53:09 +00:00
gingerBill d92767cb77 Fix #3226 2024-03-24 13:49:51 +00:00
gingerBill 670fc70f1f Remove private attributes for #3227 2024-03-24 13:46:26 +00:00
gingerBill 223a336eb4 Fix #3249 2024-03-24 13:45:10 +00:00
gingerBill 1ea1229516 Fix #3319 2024-03-24 13:42:37 +00:00
gingerBill 6da6393735 Fix #3320 2024-03-24 13:40:10 +00:00
gingerBill 87688936c6 Improve error messages for some wrong constant value attributes 2024-03-24 13:36:50 +00:00
gingerBill 590e52cc05 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-03-24 13:33:37 +00:00
gingerBill 398af659e5 Fix #3323 2024-03-24 13:33:30 +00:00
gingerBill 2e416c1a48 Merge pull request #3316 from laytan/fix-ld-warnings-and-set-default-minimum-version
darwin: fix ld warnings and set minimum os version
2024-03-24 13:26:35 +00:00
gingerBill 34247b2658 Fix resize bug caused by typo 2024-03-24 12:24:44 +00:00
gingerBill 45d7dd8f27 Fix resize zeroing behaviour 2024-03-24 12:20:39 +00:00
gingerBill 09d7f1337b Merge pull request #3317 from laytan/arm64-abi-fixes
darwin: arm64 abi fixes
2024-03-24 00:41:52 +00:00
flysand7 0f944bc0a1 [core/os2]: Reading from unsized files 2024-03-24 10:52:48 +11:00
Laytan Laats 07a9969a41 darwin: arm64 abi fixes
Since commit b4fe9677a1 some core tests
segfault during build, upon investigation it is because some arg types
were of size 0 and you can't have a 0 sized int.

It also applies the earlier fix for parameters to the return types, this
fixes #3223

Thought I would put this PR up, but I am in no way an expert in abi so
feel free to close for a better fix if there is one.

I am able to run the entire core test suite with `-sanitize:address`
with these changes.
2024-03-23 23:17:01 +01:00
Laytan Laats 15c1e8274d darwin: fix ld warnings and set minimum os version 2024-03-23 22:12:05 +01:00
gingerBill 517d7ae0b0 Add error block around error_line calls 2024-03-23 17:51:56 +00:00
gingerBill efb0933965 Improve error suggestion and propagation for x->y 2024-03-23 16:57:35 +00:00
gingerBill eb51cc6835 Improve error propagation for (*x).y style errors from C-programmers 2024-03-23 16:53:40 +00:00
gingerBill 1d46adb598 Treat *x as an unary operator to improve error messages for common C-programmer mistakes 2024-03-23 16:51:04 +00:00
gingerBill 61aa4558dc Fix #3314 2024-03-23 16:41:50 +00:00
gingerBill 194d3fe6bd Ignore wrong types 2024-03-23 14:59:35 +00:00
gingerBill 624b870f28 Add some basic escape analysis errors for return &x 2024-03-23 14:58:10 +00:00
gingerBill eb61cf6043 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-03-23 12:56:09 +00:00
gingerBill 7abb459861 Add missing field flags in debug printing 2024-03-23 12:56:04 +00:00
gingerBill e9ac7d5fab Merge pull request #3311 from laytan/fix-simd128-wasm
fix wasm with `-target-features:"simd128"`
2024-03-23 10:42:36 +00:00
Laytan Laats bb5dab342a fix wasm with -target-features:"simd128"
the required procs within wasm would compile to take native v128
arguments in, but the procs are supposed to take in i64's causing bad wasm
modules.

Fixes #3263
2024-03-22 17:04:15 +01:00
gingerBill 7d6e9ef39c Merge branch 'master' of https://github.com/odin-lang/Odin 2024-03-21 20:44:00 +00:00
gingerBill d47ba09743 Fix at error printing bug 2024-03-21 20:43:52 +00:00
gingerBill 5c9da66595 Merge pull request #3294 from laytan/update-glfw-from-3.3.8-to-3.4
glfw: update from 3.3.8 to 3.4
2024-03-21 15:43:25 +00:00
gingerBill 9cbb9d8551 Merge pull request #3304 from mailgerigk/master
Remove entry point when compiled with no-entry-point as shared library
2024-03-21 15:19:38 +00:00
gingerBill 6b6f72e7bd Fix #3305 2024-03-21 14:59:47 +00:00
gingerBill c8cdb22f0b Disallow for x in y.(T) and for x in y.? 2024-03-21 14:42:48 +00:00
gingerBill 6e2efce670 Fix missing ERROR_BLOCK(); calls 2024-03-21 12:05:15 +00:00
gingerBill 6d7afd3fa9 Update format version 2024-03-21 11:59:45 +00:00
gingerBill 006ea11c56 Update doc-format for #by_ptr and #no_broadcast parameters 2024-03-21 11:58:32 +00:00
gingerBill 010ffc486c Minor clean up of #no_broadcast handling 2024-03-21 11:54:40 +00:00
gingerBill 29e5f94c2a Add #no_broadcast procedure parameter to disallow automatic array programming broadcasting on procedure arguments 2024-03-21 11:52:48 +00:00
mailgerigk 6a0d2ffcac Merge branch 'odin-lang:master' into master 2024-03-21 00:26:42 +01:00
gingerBill fc587c507a Merge branch 'master' of https://github.com/odin-lang/Odin 2024-03-20 22:44:43 +00:00
gingerBill 65cb382135 Fix error handling for type switch statement 2024-03-20 22:44:35 +00:00
Jeroen van Rijn 8f0d74c08d Merge pull request #3292 from Kelimion/rfc3339
Add WiP datetime package and tests.
2024-03-20 23:23:27 +01:00
gerigk 800014e40c Remove entry point when compiled with no-entry-point as shared library 2024-03-20 23:18:08 +01:00
Jeroen van Rijn fda283c55e More better validation. 2024-03-20 23:09:09 +01:00
gingerBill f39b34a8b7 Fix error message 2024-03-20 18:17:06 +00:00
gingerBill 1cc5e23801 Fix #3299 2024-03-20 18:16:46 +00:00
gingerBill 8e0806be2d Fix #3301 2024-03-20 18:09:57 +00:00
gingerBill c17adc98f5 Try doing <{i64, i32}> instead of [i64, i64] for ARM64 12-byte parameters 2024-03-20 17:39:00 +00:00
gingerBill d381b77164 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-03-20 17:27:12 +00:00
gingerBill e804fbd891 Force packed structs in ABI parameters 2024-03-20 17:27:05 +00:00
Jeroen van Rijn ed5fd15f6e Ensmallen Date struct. 2024-03-20 18:13:29 +01:00
Jeroen van Rijn 89ca15014c Ensmallen Time struct. 2024-03-20 18:09:07 +01:00
gingerBill a5efcfdd78 Merge pull request #3303 from laytan/allow-darwin-cross-arch-linking
darwin: allow cross linking darwin_amd64 from darwin_arm64
2024-03-20 16:56:24 +00:00
Jeroen van Rijn 9c144dd24f Change Ordinal from int to i64 2024-03-20 17:56:22 +01:00
gingerBill c0f9e8d6a3 Merge pull request #3302 from laytan/missing-cmark-api
commonmark: add missing on_exit api
2024-03-20 16:56:11 +00:00
Laytan Laats f312adb26a darwin: allow cross linking darwin_amd64 from darwin_arm64 2024-03-20 17:44:35 +01:00
Laytan Laats 9c879e5e17 commonmark: add missing on_exit api 2024-03-20 17:42:20 +01:00
gingerBill b4fe9677a1 Change ARM64 ABI for integer-like parameters 2024-03-20 16:06:50 +00:00
gingerBill 1951bc45a6 Fix #3133 by show the line of the syntax error 2024-03-20 13:55:47 +00:00
gingerBill ba77a9464c Add suggestion for x: ^T; y = x to be x^ 2024-03-20 13:36:14 +00:00
gingerBill b1dae2d59a Add x: T; y: ^T = x suggestion to do &x 2024-03-20 13:28:17 +00:00
gingerBill 1514d64964 Update ARM64 ABI return type 2024-03-20 11:12:43 +00:00
gingerBill e4c502e79b Add offset (in bytes) field to -json-errors 2024-03-20 11:06:02 +00:00
gingerBill 553a244fec Fix bounds checking 2024-03-20 10:24:39 +00:00
gingerBill 3bff922b6f m[i] on #row_major matrices will reduce the i-th row-vector 2024-03-20 10:23:57 +00:00
gingerBill 56004c56fc Merge pull request #3295 from kavalee/parser-newline-fix
Fixed issue #3264 regarding `core:odin/parser` compound literal not allowing a newline
2024-03-20 10:09:55 +00:00
gingerBill 863ee0b8d1 Merge pull request #3297 from laytan/linker-improvements
linker improvements
2024-03-20 10:09:45 +00:00
Jeroen van Rijn 89ba8b4139 Merge pull request #3298 from laytan/update-macos-releases
update macOS releases for `core:sys/info` and `odin report`
2024-03-20 00:23:53 +01:00
Laytan Laats d0b3b18e26 update macOS releases for core:sys/info and odin report 2024-03-20 00:14:01 +01:00
gingerBill cd7137af60 Update raylib to use #row_major matrices 2024-03-19 21:16:04 +00:00
gingerBill 18fb665bf6 Correct matrix builtins for #row_major 2024-03-19 21:15:47 +00:00
gingerBill a750fc0ba6 Add #row_major matrix[R, C]T
As well as `#column_major matrix[R, C]T` as an alias for just `matrix[R, C]T`.
This is because some libraries require a row_major internal layout but still want to be used with row or major oriented vectors.
2024-03-19 21:05:23 +00:00
Laytan Laats a555862522 linker improvements
`path_to_fullpath` did different things on Windows&Unix, an attempt to
bring them closer together was made here.
This was prompted by the compiler completely ignoring
`foreign import "foo.dylib"` when `foo.dylib` does not exist (because
`path_to_fullpath` returns an empty string).
Causing just unresolved symbol errors, when on Windows it would pass
along the path to the linker and actually say it doesn't exist, which
is now also the case for Unix.
This also fixes some checker errors that relied on the Windows
behaviour, for example: `Error: File name, , cannot be as a library name
as it is not a valid identifier`.

Made `-no-crt` require either `-default-to-nil-allocator` or
`-default-to-panic-allocator` on Unix, the current default allocators
rely on libc and this was not obvious and would immediately bring up
unresolved symbol errors for the linked memory management functions, or
just link with libc anyways because it was foreign imported.

Added a suggestion to install `nasm` with the user's package manager
when assembling using `nasm` fails on Unix, I saw some confusion about
it in the Discord.

Ignore explicit foreign imports of libc. It is already linked in later
on in the linking process and would otherwise (at least on macOS) cause
linker warnings for duplicate libraries. This also makes it so when
using `-no-crt` and importing something that requires libc, linker
errors are given (like I would expect), instead of silently still
linking with libc because it was foreign imported.
2024-03-19 19:57:35 +01:00
gingerBill 433109ff52 Replace gb_exit(1) with exit_with_errors() where appropriate 2024-03-19 16:29:45 +00:00
gingerBill ba428fecdb Add -json-errors 2024-03-19 16:25:09 +00:00
gingerBill 17cc7a2c5e General clean-up for error.cpp 2024-03-19 15:42:59 +00:00
gingerBill 9a2fc6cf4c Serialize errors to make them sortable, deterministic, and generally more control 2024-03-19 15:34:29 +00:00
gingerBill 8ff788f4ff Add better suggestion for [?]T mistake 2024-03-19 13:38:13 +00:00
gingerBill 80ecf5b68a On x: [?]T = {...}, minimize errors by using the [?]T expression as a kind of hint 2024-03-19 13:32:37 +00:00
gingerBill 5159f30c9c Fix error block handling 2024-03-19 13:10:35 +00:00
gingerBill d5daa9fda5 Minimize error propagation of bad array syntax by treating this like a type 2024-03-19 13:05:28 +00:00
gingerBill 89315986d4 Add suggestion when mistyping an array backwards e.g. T[] 2024-03-19 12:37:11 +00:00
Aaron Kavaler 096b4f5454 fixed issue #3264 regarding core:odin/parser not allowing a newline at the end of a compound literal 2024-03-18 20:33:02 -07:00
Laytan Laats 65e68f11f8 glfw: update from 3.3.8 to 3.4 2024-03-18 23:54:26 +01:00
gingerBill ec9ac59323 Unify "Did you mean" strings 2024-03-18 21:37:40 +00:00
gingerBill 97be7feb99 Add list of C identifier suggestions (types and keywords) 2024-03-18 17:32:26 +00:00
gingerBill 00344e1323 Add check to people trying to foreign import C files. 2024-03-18 16:56:01 +00:00
Laytan Laats dd92d3054d add ODIN_ prefix to the new constant 2024-03-18 17:22:58 +01:00
Jeroen van Rijn 07ef969546 Fix test label. 2024-03-18 17:05:40 +01:00
Jeroen van Rijn 72c15d7699 Add WiP datetime package and tests.
A new package `core:time/datetime` has been added which can represent moments much further in the past and future than `core:time`.
It is based on *the* reference work on the subject, Calendrical Calculations Ultimate Edition, Reingold & Dershowitz.

More procedures will be added to it in the future, to for example calculate the 3rd Thursday in March to figure out holidays.
The package has been tested for more than a year and can handle dates 25 quadrillion years into the past and future with 64-bit day ordinals, or 5 million with 32-bit ones.

This also fixes a longstanding bug where converting between YYYY-MM:DD hh:mm:ss and `time.Time` and back could result in a mismatch.

RFC 3339 timestamps can now also be parsed using the `core:time` package.
2024-03-18 16:47:16 +01:00
gingerBill 009b6f44e3 Add loads of checks for common mistakes for C programmer 2024-03-18 15:18:10 +00:00
gingerBill ebd3065aa2 Add error message for C programmers which do Foo{.x = 123} rather than Foo{x = 123} 2024-03-18 14:17:13 +00:00
gingerBill 6cb74b63ec Fix #3286 2024-03-18 12:39:34 +00:00
gingerBill effc71ca43 Fix case: bug with by-ref unions 2024-03-18 12:20:53 +00:00
gingerBill 43d695a990 Fix for x in y where y is an "optional ok" value, but ignores #optional_allocator_error values 2024-03-18 11:21:06 +00:00
gingerBill 19eb2a8890 Fix #3282 2024-03-16 22:24:34 +00:00
gingerBill 3875fb08e8 Fix #3284 2024-03-16 22:12:17 +00:00
Laytan Laats 9c455b2213 darwin: use new wait on address API if possible 2024-03-15 21:43:16 +01:00
gingerBill 04f0fbf23a Merge pull request #3272 from iansimonson/add_getrusage_darwin
Add getrusage syscall for mac/darwin
2024-03-14 19:45:25 +00:00
gingerBill 51d6a254cf Merge pull request #3277 from kavalee/slice-unique-fixes
fixed slice.unique and slice.unique_proc
2024-03-14 19:40:18 +00:00
Ian Simonson 835effdef1 Use c.long rather than int 2024-03-14 09:36:57 -07:00
Ian Simonson c7bec2962e Fix __darwin_suseconds_t definition
__darwin_suseconds_t is defined as long which on macos
64 bit systems is equivalent to 8 bytes. It is equivalent
to Odin int type _not_ i32
2024-03-14 07:21:26 -07:00
Aaron Kavaler ac634acd4b fixed slice.unique and slice.unique_proc 2024-03-13 19:19:31 -07:00
Ian Simonson 34c4389d75 No need for timeval definition
It already existed so lets just use that rather than
redeclaring it
2024-03-13 14:58:56 -07:00
Ian Simonson 8917a7ef88 Make RUsage more inline with macos man page
Swap to tabs to adhere to the Odin Core library standard
and also rename the rusage fields to match the actual
definitions from the macos bsd man pages
2024-03-13 14:51:17 -07:00
gingerBill 45d5066029 Merge pull request #3274 from iansimonson/darwin_munmap_syscall_fix
Fix syscall_munmap in darwin
2024-03-13 20:17:31 +00:00
gingerBill b47eeac414 Merge pull request #3275 from Chickenkeeper/bit-set-error-message-fix
Improve bit_set error message
2024-03-13 20:17:06 +00:00
Chris 5cc936245c Improve bit_set error message 2024-03-13 19:50:41 +00:00
gingerBill e68d3c8bbc Merge pull request #3143 from Pariatech/cgltf-linux-build
Adding linux & darwin makefile for cgltf
2024-03-13 17:47:18 +00:00
Ian Simonson d7b1901b16 Fix syscall_munmap in darwin
this was using the .mmap syscall number when it should be
using the .munmap syscall number
2024-03-13 10:39:50 -07:00
gingerBill 97d6bf6d8f Merge branch 'master' of https://github.com/odin-lang/Odin 2024-03-13 16:30:28 +00:00
gingerBill 271f84ab5b Expect stream as a field directly on os2.File 2024-03-13 16:30:22 +00:00
gingerBill 75b60fdb12 Merge pull request #3273 from Chickenkeeper/mutex-allocator-fix
Make Mutex_Allocator use Ada_Case
2024-03-13 15:45:52 +00:00
Chris 55141bdbb1 Make Mutex_Allocator use Ada_Case 2024-03-13 15:29:02 +00:00
gingerBill 5f2496226f Change return to panic 2024-03-13 15:17:21 +00:00
gingerBill dee66b8451 Fix typo due to deletion 2024-03-13 15:14:31 +00:00
gingerBill 4aec2de7bd Merge branch 'master' of https://github.com/odin-lang/Odin 2024-03-13 15:12:19 +00:00
gingerBill ac10f504e4 Add infinite loop check and early out in map_insert_hash_dynamic 2024-03-13 15:12:14 +00:00
Ian Simonson 26d107ce64 Add getrusage syscall for mac/darwin
The syscall number existed but the wrapper for calling it
did not. Also adds the RUsage struct to receive the data.

Naming is kept the same as in sys/linux
2024-03-13 08:07:12 -07:00
gingerBill d62c92f5a9 Merge pull request #3267 from harold-b/copy-dirent-path
Retain copies of `dirent->name` for .odin files when using `read_directory`
2024-03-13 12:23:28 +00:00
gingerBill 5c1646a6b3 Merge pull request #3271 from rick-masters/too_many_poly_args
Fix check for too many arguments to a polymorphic record type
2024-03-13 12:23:19 +00:00
Pariatech b539bb2693 Update vendor/cgltf/src/Makefile
missing darwin folder

Co-authored-by: Laytan <laytanlaats@hotmail.com>
2024-03-13 07:37:42 -04:00
rick-masters 7bc962b852 Fix variable used to index polymorphic parameter. 2024-03-12 23:58:20 +00:00
rick-masters f7ec628cb2 Fix check for too many arguments to a polymorphic record type. 2024-03-12 23:57:13 +00:00
Jeroen van Rijn 23f3898b4e Merge pull request #3270 from edyu/master
Expose internal invmod and int_exponent_mod with more consistent naming
2024-03-12 19:06:10 +01:00
Ed Yu dd74a57c44 Expose internal invmod and int_exponent_mod with more consistent naming 2024-03-12 11:01:09 -07:00
olesya-wo 51a4d97f03 type conversion fix 2024-03-12 18:25:54 +03:00
olesya-wo d979129a50 Naming and type changes 2024-03-12 16:32:17 +03:00
gingerBill d6353daf91 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-03-12 12:11:53 +00:00
gingerBill c7c6852057 Support swizzle selector syntax .xyzw for #simd vectors 2024-03-12 12:11:48 +00:00
olesya-wo 9045c9ed0c Improved statistics for core/mem/Tracking_Allocator 2024-03-12 13:53:31 +03:00
Harold Brenes b543be0d15 Copy file names fromdirent into FileInfo during read_directory 2024-03-11 18:09:41 -04:00
gingerBill 47837b206e Merge pull request #3266 from nnym/master
Use a POSIX-compliant equality operator in `build_odin.sh`.
2024-03-11 13:00:01 +00:00
gingerBill 9a41a450e7 Add builtin map_upsert 2024-03-11 12:30:24 +00:00
Muhammad f20d0202fa Use a POSIX-compliant equality operator. 2024-03-11 06:05:42 +00:00
gingerBill 8721d03cfe Merge pull request #3199 from JamesDSource/soa
Add into_dynamic_soa, unordered_remove_soa, and ordered_remove_soa
2024-03-09 16:56:04 +00:00
gingerBill d06575dd49 Merge pull request #3149 from IllusionMan1212/missing-x11-funcs
vendor/x11: added XQueryExtension, XGetEventData, and XFreeEventData
2024-03-09 16:53:11 +00:00
gingerBill 568b07473f Merge pull request #3148 from IllusionMan1212/cookie-struct-fix
vendor/x11: fix "display" with no pointer in XGenericEventCookie
2024-03-09 16:52:53 +00:00
gingerBill 04666746d7 Merge pull request #3261 from spindlebink/fix-orthonormalize
Properly initialize return matrices in linalg.orthonormalize
2024-03-09 15:51:53 +00:00
spindlebink b2e7eb4db4 Properly initialize return matrices in linalg.orthonormalize 2024-03-09 09:10:25 -06:00
gingerBill f88af59372 Merge pull request #3258 from deckarep/patch-1
Base/runtime (darwin): Incorrect write syscall on Darwin - fixes stderr output.
2024-03-09 11:11:09 +00:00
Ralph Caraveo a974c08aff Incorrect write syscall on Darwin - fixes stderr output.
On macos, Odin was previously swallowing errors that would be reported via stderr. 

I've confirmed with @laytan on Discord that this fixes the issue.
2024-03-08 16:19:59 -08:00
Jeroen van Rijn fc9d3ec5a7 Merge branch 'master' of github.com:odin-lang/Odin 2024-03-08 18:06:13 +01:00
Jeroen van Rijn db03c86544 Fix typo in big.internal_invmod
Fixes #3253
2024-03-08 18:05:34 +01:00
gingerBill 51d12acab3 Enforce linalg 2024-03-08 13:28:15 +00:00
gingerBill 032e193d0d Merge branch 'master' of https://github.com/odin-lang/Odin 2024-03-08 13:20:33 +00:00
gingerBill 0f83ab466f Minor change to spacing when printing a map 2024-03-08 13:20:27 +00:00
gingerBill 53ce945034 Merge pull request #3230 from avanspector/haiku
Add Haiku OS support
2024-03-08 11:15:13 +00:00
gingerBill 0e168dd292 Merge pull request #3241 from Hyrtwol/sys-windows
Gathered what I made for sys/windows
2024-03-07 15:26:31 +00:00
gingerBill 5ff6a25bdc Improve formatting for %# on maps 2024-03-07 13:45:52 +00:00
gingerBill b6b8e640f5 Replace b with _ as it is not needed 2024-03-07 13:41:54 +00:00
gingerBill 573402c97e Begin work on %w - 'w'rite as valid Odin literals 2024-03-07 13:39:44 +00:00
gingerBill e01701ce0e Fix typo 2024-03-07 12:32:46 +00:00
gingerBill f9b14500be Add default_commit_size to virtual.Arena 2024-03-07 12:30:34 +00:00
gingerBill 4bb7cd5e4b Add bit_field option to core_type in the compiler 2024-03-07 11:31:00 +00:00
gingerBill 6d5b1800fe Fix typo 2024-03-06 16:34:17 +00:00
gingerBill 0f5328973e Add mem.Mutex_Allocator 2024-03-06 16:33:54 +00:00
gingerBill 65277ddd6b Add missing attribute 2024-03-06 16:30:39 +00:00
gingerBill 46718d6d85 Add Query_Info to Buddy_Allocator 2024-03-06 16:26:10 +00:00
gingerBill 2a0543d2f0 Add mem.Buddy_Allocator 2024-03-06 16:14:45 +00:00
gingerBill 792f06a234 Fix indentation 2024-03-06 15:29:07 +00:00
gingerBill 14f7619cdc Merge pull request #3069 from pcleavelin/master
Respect `-lld` CLI arg on non-windows machines
2024-03-06 15:25:16 +00:00
gingerBill ffa3669d02 Add virtual.Arena utilities: new, new_aligned, make 2024-03-06 15:23:56 +00:00
gingerBill b1903b915b Change to IEEE 754-2008 conformance for min/max runtime operations. 2024-03-06 15:16:11 +00:00
gingerBill a7bab89c93 Unify min/max semantics for simd_(min|max) 2024-03-06 15:07:21 +00:00
gingerBill a1ee9e7035 Change min/max runtime behaviour to match IEEE 754-2019 2024-03-06 15:04:46 +00:00
gingerBill c05a92ab3e Merge pull request #3215 from blob1807/json-better-enum-support
core:encoding/json Add support for writing enum value names
2024-03-06 14:56:19 +00:00
gingerBill 5789df5c0c Disable core library tests for ARM (Silly CI) 2024-03-06 14:54:23 +00:00
gingerBill 78c05a49a3 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-03-06 14:52:04 +00:00
gingerBill 8d496dc3d0 Fix #3173 2024-03-06 14:51:56 +00:00
gingerBill 703eab2f15 Merge pull request #3229 from Yawning/feature/moar-crypto
core/crypto: More improvements/additions
2024-03-06 14:49:15 +00:00
gingerBill 04bfc926ee Merge pull request #3238 from laytan/libc-free-raylib-and-rectpack
makes raylib and stb_rect_pack free of libc
2024-03-06 14:11:41 +00:00
gingerBill 791c9c16ba Merge pull request #3242 from laytan/fix-cgltf-binding
fix minor cgltf binding issue
2024-03-06 14:11:27 +00:00
gingerBill 6d3a57b4ac Zero intrinsics.alloca 2024-03-06 13:48:37 +00:00
gingerBill c7b8f1fb0a Use intrinsics.alloca rather than context.temp_allocator in json.unmarshal_object 2024-03-06 13:42:38 +00:00
gingerBill 462f3f4abd Merge branch 'master' of https://github.com/odin-lang/Odin 2024-03-06 11:49:24 +00:00
gingerBill 5eef29290c Fix #3250 2024-03-06 11:49:17 +00:00
gingerBill a944aa406d Merge pull request #3246 from edyu/master
For invmod, b has to be > 1, fix a logic typo
2024-03-05 14:00:52 +00:00
gingerBill 8c6c2543da Merge pull request #2999 from laytan/crypto-random-bytes-on-freebsd-and-darwin
add crypto.rand_bytes for Darwin and BSD
2024-03-05 12:55:37 +00:00
gingerBill 7ae22b7ce5 Update are_types_identical for bit_field 2024-03-04 20:22:49 +00:00
gingerBill 3e295734cb Correct is_type_comparable for bit_field 2024-03-04 20:10:34 +00:00
Ed Yu de41c2256d For invmod, b has to be > 1, fix a logic typo 2024-03-04 10:16:19 -08:00
Laytan Laats 9a5f3fed8c encoding/cbor: fix conflict 2024-03-04 17:29:30 +01:00
Laytan Laats 04bd3cc525 encoding/cbor: rename diagnose to to_diagnostic_format to be clearer 2024-03-04 17:26:19 +01:00
Laytan 9fc8587e2c encoding/cbor: untouch net/common.odin 2024-03-04 17:26:19 +01:00
Laytan 2a39c60fe4 encoding/cbor: respect default to panic allocator 2024-03-04 17:26:19 +01:00
Laytan b11d839fb6 encoding/cbor: make temp allocations more explicit 2024-03-04 17:26:19 +01:00
Laytan 0076c07076 encoding/cbor: core -> base 2024-03-04 17:26:19 +01:00
Laytan a664d9804f encoding/cbor: remove usage of incl_elem and excl_elem 2024-03-04 17:26:19 +01:00
Laytan Laats c4e45d509a encoding/cbor: adhere to new quaternion rules of master 2024-03-04 17:26:19 +01:00
Laytan Laats c1cf6c1a95 encoding/cbor: add general docs and example 2024-03-04 17:26:19 +01:00
Laytan Laats 317931a3c5 encoding/cbor: deterministically store bit sets as big endian 2024-03-04 17:26:19 +01:00
Laytan Laats 759d095548 encoding/cbor: ignore struct fields with cbor:"-" 2024-03-04 17:26:19 +01:00
Laytan Laats 7854aa22d9 encoding/cbor: fix unused import 2024-03-04 17:26:19 +01:00
Laytan Laats 72d5b87b52 encoding/cbor: clean 2024-03-04 17:26:19 +01:00
Laytan Laats 154e0d41c6 encoding/cbor: fix wrong allocator bug 2024-03-04 17:26:19 +01:00
Laytan Laats 3fccc77829 encoding/cbor: clean and fixup some allocations 2024-03-04 17:26:19 +01:00
Laytan Laats 85f1a60cf3 encoding/cbor: cleanup comments about tags 2024-03-04 17:26:19 +01:00
Laytan Laats cb8bb8bfd8 encoding/cbor: cleanup default temp allocator 2024-03-04 17:26:19 +01:00
Laytan Laats 46b58ad48d encoding/cbor: don't zero bytes we are going to write/read to/from anyway 2024-03-04 17:26:19 +01:00
Laytan Laats 7283b5e75c encoding/cbor: minor things 2024-03-04 17:26:19 +01:00
Laytan Laats 21e6e28a3a encoding/cbor: add decoder flags and protect from malicious untrusted input 2024-03-04 17:26:19 +01:00
Laytan Laats d77ae9abab encoding/cbor: fully support marshal/unmarshal of unions 2024-03-04 17:26:19 +01:00
Laytan Laats 363769d4d3 encoding/cbor: cleanup base64 tag 2024-03-04 17:26:19 +01:00
Laytan Laats b6c47e7963 encoding/base64: add decode_into, add tests 2024-03-04 17:26:17 +01:00
Laytan Laats 5533a327eb encoding/cbor: initial package implementation 2024-03-04 17:25:34 +01:00
blob1807 b419615002 Apply suggestions from code review
Fixing spelling mistakes pointed out & fixed by layton.

Co-authored-by: Laytan <laytanlaats@hotmail.com>
2024-03-04 21:20:13 +10:00
Yawning Angel c044e295ce vendor/botan: Remove
This is infrequently maintained, and has been a strict subset of what is
available in `core:crypto` for a while.  Instead of improving the
bindings, it is better to spend resources improving `core:crypto`.
2024-03-04 18:20:56 +09:00
Yawning Angel 87ab3f5dc8 tests/core/crypto: Use the tests/common boilerplate 2024-03-04 18:20:56 +09:00
Yawning Angel fa8dd5a13b core/crypto: Misc cleanups and documentation improvements 2024-03-04 17:50:45 +09:00
Yawning Angel b818ebc02f core/crypto/kmac: Initial import 2024-03-04 17:50:45 +09:00
Yawning Angel c04a53e453 core/crypto/tuplehash: Initial import 2024-03-04 17:50:43 +09:00
Yawning Angel 15287a771f core/crypto/shake: Support cSHAKE 2024-03-04 17:50:24 +09:00
Yawning Angel 2db31cf0d5 core/crypto/_sha3: Cleanups, prepare for cSHAKE 2024-03-04 14:51:38 +09:00
Yawning Angel 550e798c1b core/crypto/hkdf: Initial import 2024-03-04 14:51:38 +09:00
Yawning Angel 290168f862 core/crypto/pbkdf2: Initial import 2024-03-04 14:51:38 +09:00
Yawning Angel 2f2a92866b core/crypto/hmac: Add a clone method 2024-03-04 14:51:38 +09:00
blob1807 116edb9052 convert spaces to tabs 2024-03-04 15:09:17 +10:00
blob1807 9070e613a4 Return underlining value instead of panicing
when no name it found.

Renamed use_enum_value_names to use_enum_names
it get the same point across & inline with the
reflect procs
2024-03-04 15:06:30 +10:00
Thomas la Cour 6243160ecd Cleanup of ShowCursor after Bill pushed a fix 2024-03-03 19:53:34 +01:00
Thomas la Cour 980ee3310f didn't help :/ so removed it to see if it can build again 2024-03-03 19:53:34 +01:00
Thomas la Cour c5d5d055ac Trying to resolve a strange nameclash on ShowCursor seems like raylib is also defining that. Unsure why exactly this is related so for now just tried to change the name here to _ShowCursor :/ 2024-03-03 19:53:34 +01:00
Thomas la Cour a783d4ce5b Callback types 2024-03-03 19:53:33 +01:00
Thomas la Cour a7b09a24b7 Waveform Functions
https://learn.microsoft.com/en-us/windows/win32/multimedia/waveform-functions
2024-03-03 19:53:33 +01:00
Thomas la Cour 602e000379 hid usage flags
https://learn.microsoft.com/en-us/windows-hardware/drivers/hid/hid-usages
2024-03-03 19:53:33 +01:00
Thomas la Cour f93074a082 A few extra gdi procs for icons, cursors and drawing 2024-03-03 19:53:33 +01:00
Thomas la Cour 28f05e8aaa SHChangeNotify + flags
https://learn.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shchangenotify
2024-03-03 19:53:33 +01:00
Thomas la Cour 9eb1596939 Flags for GlobalAlloc
https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-globalalloc
2024-03-03 19:53:33 +01:00
Thomas la Cour 8412352e5a bitmap v5 header
https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapv5header
2024-03-03 19:53:33 +01:00
Jeroen van Rijn 4c35633e01 math.big constants were no longer initialized
Fixes #3243
2024-03-03 15:09:38 +01:00
Laytan Laats b1371d5c7a fix minor cgltf binding issue 2024-03-01 20:33:23 +01:00
Laytan Laats 3ada83a503 clean imports 2024-03-01 20:32:07 +01:00
Laytan Laats 50ded324e0 move va_list into core:c 2024-03-01 20:30:19 +01:00
gingerBill 674bd94f72 Add check to see if raylib is imported with ShowCursor on sys/windows 2024-03-01 18:30:23 +00:00
gingerBill ff24cfe314 Fix debug issue with maps 2024-03-01 14:00:14 +00:00
gingerBill bc191d4f84 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-03-01 13:36:12 +00:00
gingerBill 5c20676c76 Fix type for SDL LoadFile(_RW) 2024-03-01 13:36:06 +00:00
gingerBill 11b7be1640 Merge pull request #3203 from listeriaceae/master
port math.round from Golang
2024-03-01 11:33:43 +00:00
gingerBill 6ae8288142 Merge pull request #3240 from laytan/macos-self-contained-releases
reduce dynamic library dependencies for macos release
2024-03-01 11:33:20 +00:00
gingerBill 7f1069cb0b Add Recursive_Mutex procedures to procedure groups 2024-03-01 11:31:13 +00:00
blob1807 41fbaaf1d3 changed to use reflect.enum_name_from_value_any 2024-03-01 14:53:39 +10:00
blob1807 f14babe419 Merge branch 'odin-lang:master' into json-better-enum-support 2024-03-01 14:24:51 +10:00
avanspector 0bb2327d76 Merge branch 'haiku' of https://github.com/avanspector/Odin into haiku 2024-03-01 00:43:13 +01:00
avanspector f92042e7dd Merge branch 'odin-lang:master' into haiku 2024-03-01 00:42:28 +01:00
avanspector 1861ecff86 Merge branch 'haiku' of https://github.com/avanspector/Odin into haiku 2024-03-01 00:42:08 +01:00
avanspector d4d9f55556 Update threading.cpp 2024-03-01 00:41:28 +01:00
Laytan Laats 23cd64ec35 reduce dynamic library dependencies for macos release 2024-02-29 23:39:18 +01:00
Laytan Laats 6734a7096a makes raylib and stb_rect_pack free of libc 2024-02-29 23:33:25 +01:00
gingerBill 3263e54144 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-02-29 20:20:43 +00:00
gingerBill 6805b85f89 Fix leap year bug 2024-02-29 20:20:37 +00:00
gingerBill 88c97cbbd0 Merge pull request #3237 from laytan/macos-self-contained-releases
fix releases being a zip of a zip
2024-02-29 16:16:04 +00:00
Laytan Laats 17b1c8d338 fix releases being a zip of a zip 2024-02-29 17:00:20 +01:00
gingerBill 0a5c85f8e3 Merge pull request #3207 from Tetralux/printfln
Add `fmt.*printfln`
2024-02-29 14:04:38 +00:00
gingerBill 9c20df5b1b Merge pull request #3201 from Yawning/feature/avl
core/container/avl: Add an AVL tree implementation
2024-02-29 14:02:45 +00:00
avanspector 5d6b4eda1e Merge branch 'odin-lang:master' into haiku 2024-02-29 03:16:04 +01:00
avanspector 290ada7f90 add exit to core:os 2024-02-28 22:43:55 +01:00
avanspector bf37bee4f7 improve core:sys 2024-02-28 22:29:06 +01:00
gingerBill 7df7fec6f7 Keep -vet happy 2024-02-28 18:27:49 +00:00
gingerBill e423a6d692 Make types distinct 2024-02-28 18:25:29 +00:00
gingerBill f4c74a9f32 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-02-28 18:25:06 +00:00
gingerBill dce176fa39 Remove unnecessary use of transmute 2024-02-28 18:24:59 +00:00
gingerBill d666ff3744 Merge pull request #3135 from colrdavidson/basic_egl
Add support for basic EGL on Linux
2024-02-28 14:42:49 +00:00
gingerBill 1678391db3 Merge pull request #3224 from laytan/macos-self-contained-releases
Make MacOS releases self contained / bundle LLVM
2024-02-28 13:44:50 +00:00
gingerBill d1174f66bc Fix #3233 2024-02-28 13:41:54 +00:00
gingerBill 84a7e03178 Merge pull request #3220 from laytan/promote-types-in-c-varargs
Promote types in `#c_varargs` according to C rules
2024-02-28 10:49:28 +00:00
gingerBill 1bffc8baac Merge pull request #3228 from EddieWoodley/glfw-raw-mouse-supported
vendor/glfw: Add RawMouseMotionSupported to wrapper
2024-02-28 10:48:08 +00:00
gingerBill c558b694eb Merge pull request #3232 from karl-zylinski/raylib-5-binding-errors
Additional fixes for errors in Raylib bindings since Raylib 4 -> 5 upgrade.
2024-02-28 10:46:41 +00:00
gingerBill a06bde729b Merge pull request #3234 from odin-lang/rtti-table-layout
Change `runtime.type_table` layout to allow RTTI to be constantly initialized
2024-02-27 16:25:47 +00:00
gingerBill 5107bdc06b Make lb_type_info use a procedure to load the global value 2024-02-27 15:45:53 +00:00
gingerBill 5137d12d36 Fix lb_type_info for the new layout 2024-02-27 15:40:45 +00:00
gingerBill c6ee025063 Add type info generation for bit_field 2024-02-27 15:27:51 +00:00
gingerBill 826cf1508b Remove __$startup_type_info procedure 2024-02-27 15:09:33 +00:00
gingerBill 51edf01162 Change type info table to be initializable constantly
[]Type_Info -> []^Type_Info
2024-02-27 15:07:55 +00:00
avanspector 87f6f3a1fe Merge branch 'haiku' of https://github.com/avanspector/Odin into haiku 2024-02-27 02:38:19 +01:00
avanspector fca691a066 fix core:thread and a memory leak
in the future probably native non-pthread implementation for haiku will be required
2024-02-27 02:38:06 +01:00
avanspector 494cac02d7 Merge branch 'odin-lang:master' into haiku 2024-02-27 02:00:19 +01:00
avanspector 38c69b9691 small fixes 2024-02-27 01:59:17 +01:00
Colin Davidson deb8922181 Merge branch 'master' into basic_egl 2024-02-26 12:17:53 -05:00
Karl Zylinski cdda8f0eb9 Additional fixes for errors in Raylib bindings since Raylib 4 -> 5 upgrade. 2024-02-26 17:16:45 +01:00
gingerBill cba8cb2201 Merge pull request #3231 from karl-zylinski/raylib-model-animation-binding-fix
Fix ModelAnimation in raylib.odin missing a field
2024-02-26 12:57:39 +00:00
Karl Zylinski ae67f37fc1 Fix ModelAnimation in raylib.odin missing a field. 2024-02-26 13:32:16 +01:00
avanspector 8d4bb35bcc Update futex_haiku.odin 2024-02-26 08:14:05 +01:00
avanspector 180902468f Revert "fix haiku"
This reverts commit 7290c69257.
2024-02-26 08:09:58 +01:00
avanspector 7290c69257 fix haiku 2024-02-26 08:07:17 +01:00
avanspector 3ebf5dcc0e fix haiku 2024-02-26 07:59:53 +01:00
avanspector 9d4c2ba0d8 fix haiku 2024-02-26 07:43:10 +01:00
avanspector 1d79521e81 fix sys/haiku 2024-02-26 06:18:33 +01:00
avanspector 31d7ef5696 Update os_haiku.odin 2024-02-26 06:16:13 +01:00
avanspector 8c621453ae update sys/haiku 2024-02-26 06:13:54 +01:00
avanspector c712af3bc2 Update os_haiku.odin 2024-02-26 04:54:21 +01:00
avanspector f0a89f8d5d add sys/haiku 2024-02-26 04:41:30 +01:00
avanspector 9b839621a9 Update os_haiku.odin 2024-02-25 18:49:42 +01:00
avanspector 66456714e1 update pthread 2024-02-25 18:45:00 +01:00
avanspector fc8e5b8a61 Update os_haiku.odin 2024-02-25 18:31:14 +01:00
avanspector 05cfc89283 fix core:os 2024-02-25 18:20:03 +01:00
avanspector dc5cf23066 add haiku to unix 2024-02-25 16:50:04 +01:00
avanspector 2e80879e88 Update os_haiku.odin 2024-02-25 16:24:50 +01:00
avanspector dfa0ccf976 Update entry_unix.odin 2024-02-25 03:46:52 +01:00
avanspector 6c16860be6 fix runtime and libc 2024-02-25 03:43:41 +01:00
avanspector d032cff23b Update os_specific_haiku.odin 2024-02-25 03:38:15 +01:00
avanspector c3746d9f56 fix core and libc 2024-02-25 03:32:35 +01:00
avanspector 0fa6ba726f add haiku build token 2024-02-25 03:03:12 +01:00
avanspector b03f17dd8d add haiku to base:runtime and core:c/libc 2024-02-25 02:59:45 +01:00
avanspector 24c8b15409 small fixes 2024-02-25 02:38:35 +01:00
avanspector 028a79e66c Update threading.cpp 2024-02-25 02:34:41 +01:00
avanspector 0a6673220b Merge branch 'haiku' of https://github.com/avanspector/Odin into haiku 2024-02-25 02:24:58 +01:00
avanspector 88add0b6b1 Improve Haiku support 2024-02-25 02:24:52 +01:00
Eddie Woodley 8a78b0d241 vendor/glfw Add RawMouseMotionSupported to wrapper 2024-02-24 23:06:05 +00:00
avanspector 824c831190 Implement futex 2024-02-24 23:46:55 +01:00
Yawning Angel 874d6ccb60 core/container/avl: Initial import 2024-02-24 14:05:15 +09:00
Yawning Angel db3279e7da test/core/container: Refactor for multiple container types 2024-02-24 14:05:15 +09:00
Yawning Angel 9251e06143 tests/core: Bring the Makefile more in-sync with build.bat 2024-02-24 14:05:15 +09:00
gingerBill a642ea0b28 Add intrinsics.type_bit_set_backing_type 2024-02-23 11:38:23 +00:00
gingerBill 00fc4c4e1b Make that warning an error with -vet-style 2024-02-22 20:21:21 +00:00
gingerBill 9ea11da00f Add warning when using bit_field when a bit_set would be a much better idea. 2024-02-22 20:10:56 +00:00
gingerBill a8909f06ae Improve parsing for bit_field 2024-02-22 20:10:38 +00:00
Laytan Laats ee543a304a Zip so compiler keeps executable permissions 2024-02-22 21:04:08 +01:00
gingerBill 5c5b78cbbe Improve bit_field printing 2024-02-22 19:48:44 +00:00
gingerBill 54515af8cc Add field tags to bit_field 2024-02-22 19:41:48 +00:00
Laytan Laats b894df2125 Make MacOS releases self contained / bundle LLVM 2024-02-22 20:38:25 +01:00
gingerBill 3f193d7446 Format change 2024-02-22 19:27:13 +00:00
gingerBill e127d21fed Check for pseudo-fields before bit fields 2024-02-22 19:24:50 +00:00
gingerBill 3060225f46 Simplify usage code 2024-02-22 19:24:16 +00:00
gingerBill c14b9d461a Support using of a bit_field within a struct 2024-02-22 19:14:16 +00:00
gingerBill 8060e3170e Remove debug message 2024-02-22 18:53:02 +00:00
gingerBill 980947b355 Give a better error message when the user uses context as if it was an identifier in a field list. 2024-02-22 18:52:17 +00:00
gingerBill fd987b29ff Improve error handling with assignments to bit_field using constants 2024-02-22 18:47:43 +00:00
gingerBill afcc2889ec Support compound literals for bit_field 2024-02-22 18:41:15 +00:00
gingerBill 5f001f6d51 Allow casting between a bit_field and its backing type 2024-02-22 18:15:13 +00:00
gingerBill fc07211772 Change hack a little 2024-02-22 17:43:37 +00:00
gingerBill c9e37a08be Add backing type of a bit_field to the doc-format 2024-02-22 17:41:22 +00:00
gingerBill dcbcf75269 Add doc-format support for bit_field 2024-02-22 17:37:42 +00:00
gingerBill 59479b2ba6 Fix typo 2024-02-22 17:26:32 +00:00
gingerBill 007bd993a6 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-02-22 17:24:48 +00:00
gingerBill 5a84a08225 Add general support for bit_fields 2024-02-22 17:24:42 +00:00
Laytan Laats bb23648c71 Also convert and promote bit_set types for #c_varargs 2024-02-22 18:17:52 +01:00
gingerBill a4b8c1ea17 Begin work adding bit_field 2024-02-22 15:55:54 +00:00
Jeroen van Rijn 20e75cd463 Merge pull request #3221 from Tetralux/net/reservedports
[net] Better error code for binding a privileged port without root access
2024-02-22 16:23:15 +01:00
Tetralux d74ddb2d91 fixup 2024-02-22 15:01:55 +00:00
Tetralux ec0831da70 [net] Better error code for binding a privileged port without root access on Darwin
This condition results in os.EACCESS, which we were translating to Broadcast_Disabled.
This was the case because binding to the broadcast address on a UDP port, without setting the BROADCAST flag, also results in this error.

Given the fact that reserved ports also produce this error, we now check for this condition in net.bind() and translate it to a custom, clearer error:
Privileged_Port_Without_Root.
2024-02-22 14:55:27 +00:00
gingerBill b12ba1508e Update vulkan bindings for to work with the new keyword bit_field 2024-02-22 14:09:12 +00:00
gingerBill f3b0b82461 Fix futex 2024-02-22 14:04:31 +00:00
gingerBill fea38f6910 Minor changes to futex implementation on Linux 2024-02-22 14:01:39 +00:00
gingerBill 213b2fd0f8 Add bit_field as a keyword 2024-02-22 14:01:23 +00:00
gingerBill 42d595f6a1 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-02-22 13:59:27 +00:00
gingerBill 656de10ba4 Minor changes to sync/chan (HIGHLY EXPERIMENTAL) 2024-02-22 13:59:22 +00:00
Laytan Laats f6f3a760bc Promote types in #c_varargs according to C rules 2024-02-21 22:05:11 +01:00
gingerBill bafc791f1c Merge pull request #3219 from laytan/fix-terminators-in-defer
Fix divergent proc call in `defer`
2024-02-21 18:53:40 +00:00
Laytan Laats 1fc256dd90 Fix divergent proc call in defer
Fixes #3216
Fixes #2985
2024-02-21 19:43:34 +01:00
gingerBill 41549b502b Basic concept of core:sync/chan 2024-02-21 15:24:24 +00:00
gingerBill f989f4df3e Add sync.One_Shot_Event 2024-02-21 13:08:12 +00:00
gingerBill 21d1c0e5a4 Revert change since it is not needed 2024-02-21 12:58:26 +00:00
gingerBill d7b7804215 if -> while in wait_signal_until_available to check for spurious wake-ups 2024-02-21 12:55:26 +00:00
gingerBill 8472338bfa Add reflect.enum_name_from_value and reflect.enum_name_from_value_any 2024-02-21 12:43:09 +00:00
gingerBill 1de1d97429 Merge pull request #3213 from laytan/add-backend-info-to-odin-report
Add backend info to odin report
2024-02-21 12:33:06 +00:00
gingerBill f21ead4f78 Merge pull request #3212 from laytan/improve-net-tests
Improve net tests
2024-02-21 12:32:43 +00:00
blob1807 a95cead8e7 add all inter types to switch 2024-02-21 14:05:50 +10:00
blob1807 c276b1c0bc replace spaces with tabs 2024-02-21 11:51:29 +10:00
blob1807 b39ef29ec6 add missing comma 2024-02-21 11:15:35 +10:00
blob1807 b2b8b14955 Add better support for Enums in json
Can now output enum value's name instead of its underlineing value
2024-02-21 11:07:03 +10:00
blob1807 7e0473dded Revert json union fix 2024-02-21 11:03:15 +10:00
Laytan Laats e6bd79c882 Make sure we are listening before starting the client 2024-02-20 23:54:11 +01:00
Laytan Laats 9e417592e3 Add logs to flaky test 2024-02-20 23:45:15 +01:00
Laytan Laats db87c34613 Add backend info to odin report 2024-02-20 23:23:56 +01:00
Laytan Laats 159257597a Convert weird DOS line-endings to UNIX 2024-02-20 23:22:05 +01:00
Laytan Laats bdd6a86d73 Remove flaky test
It wasn't testing the right thing in the previous
iteration.
And in this iteration the behaviour is a timeout on Unix, and
nothing on Windows.
2024-02-20 23:15:18 +01:00
Laytan Laats 1ab3ec5731 Improve net tests
Watching the sporadic CI failures it seems to come from these tests a
lot of the time, this PR cleans up and simplifies (while testing the
same things):

1. Lots of tests were using threads without a need for it
2. Tests had hardcoded `time.sleep` calls which is never a good idea
3. An unclear abstraction was implemented without a real need
4. They weren't being ran on non-windows
5. The `client_connects_to_open_but_not_accepting_port` was not doing
   what you wanted to test for, the `tcp_server` proc was returning, and
   then `dial` was called, which meant that the server already closed
   and you got a refusal error. Now it correctly listens without
   accepting, which even results in a different error because the kernel
   buffer would have buffered the send
2024-02-20 23:06:18 +01:00
blob1807 004cd4933d Merge branch 'master' of https://github.com/blob1807/Odin 2024-02-21 00:43:27 +10:00
blob1807 14ee2181cb Fix bug https://github.com/odin-lang/Odin/issues/3173 2024-02-21 00:42:11 +10:00
gingerBill b43c1f2b5b Merge pull request #3134 from laytan/non-universal-binaries-raylib
vendor/raylib: change to non-universal binaries
2024-02-19 14:18:44 +00:00
Tetralux b1e608bfba [fmt] Add *printfln()
Adds the following procedures, which just call through to the `printf` versions, with `newline = true`; a new parameter
also added in this commit.
In all cases, `wprintf` is the one that ultimately writes the newline, if requested.

- printfln
- fprintfln
- eprintfln
- aprintfln
- tprintfln
- bprintfln
- caprintfln
- ctprintfln
- sbprintfln
- wprintfln
2024-02-18 16:14:59 +00:00
gingerBill 57c5455827 Merge pull request #3206 from flysand7/linux-fdflags-fix
[sys/linux]: Fix numeric values for socket fd flags
2024-02-18 14:56:31 +00:00
flysand7 cc185d98b4 [sys/linux]: Fix numeric values for socket fd flags 2024-02-18 23:04:41 +11:00
Juan Ignacio Díaz cd61251d39 add Go license 2024-02-17 11:49:07 -03:00
gingerBill 43a199b57b Merge branch 'master' of https://github.com/odin-lang/Odin 2024-02-17 13:42:02 +00:00
gingerBill fa1875a8f1 Minor changes to os2 2024-02-17 13:41:54 +00:00
James Duran 44aae76294 Fix syntax mistake again
Sorry for being blind
2024-02-16 10:55:55 -08:00
James Duran 009cebe8bf Fix Syntax Mistake 2024-02-16 10:50:54 -08:00
James Duran 9399cb53b6 Make into_dynamic_soa more concise and remove builtin tag from it 2024-02-16 10:46:46 -08:00
gingerBill bed81c8829 Merge pull request #3197 from laytan/update-miniaudio
Update miniaudio to 0.11.21
2024-02-16 18:08:29 +00:00
Juan Ignacio Díaz 7a592cbb31 port math.round from Golang 2024-02-16 13:23:44 -03:00
Slendi c178f7199d Get Odin to compile on Haiku
This patch makes Odin to compile on Haiku which is a good first step.
Now, all that's needed to do is to figure out how to do futexes, which
I am blaming for the program crashing.
2024-02-15 15:51:28 +02:00
James Duran a4d3777ab2 Added into_dynamic_soa, unordered_remove_soa, and ordered_remove_soa 2024-02-14 16:51:09 -08:00
Laytan Laats e931c82b9b miniaudio: add version mismatch check 2024-02-14 21:55:15 +01:00
laytan a7f0275093 miniaudio: update .lib to 0.11.21 2024-02-14 21:17:12 +01:00
laytan 9ab2fbea00 miniaudio: update .lib 2024-02-14 21:07:57 +01:00
Laytan Laats 7fe86ed565 miniaudio: fix wrong sizes for ma_device 2024-02-14 21:00:26 +01:00
Laytan Laats 16584779fb miniaudio: update to 0.11.21 2024-02-14 19:57:57 +01:00
gingerBill c5c2a4d09d Fix typo 2024-02-13 17:13:39 +00:00
gingerBill 912c326d8b Fix typo that causes map info debug issues 2024-02-13 17:06:04 +00:00
gingerBill d496dbf3a0 Fix race condition with #soa 2024-02-13 16:54:41 +00:00
Laytan Laats 88e6980b13 fix build tags 2024-02-13 17:34:40 +01:00
Laytan Laats 0d413b8136 implement part of core foundation framework bindings for err message 2024-02-13 17:34:40 +01:00
Laytan Laats 32a4a5e601 remove darwin from bsd filename 2024-02-13 17:34:40 +01:00
Laytan Laats 91cf0826c1 use Security.framework with SecRandomCopyBytes for rand_bytes on darwin 2024-02-13 17:34:40 +01:00
Laytan Laats 3bc172c70b add crypto.rand_bytes for Darwin and FreeBSD 2024-02-13 17:34:00 +01:00
gingerBill cbfb32c34c Fix race condition with regards to #soa arrays by using the fields mutex 2024-02-13 16:21:41 +00:00
gingerBill 5cd57a3a7f Use Raw_Map as the debug information for a map 2024-02-13 15:50:07 +00:00
gingerBill 563ce2bd81 Merge pull request #3193 from Lperlind/master
Add ID3DUserDefinedAnnotation
2024-02-13 14:17:20 +00:00
Lucas Perlind 9469b90b01 Add ID3DUserDefinedAnnotation 2024-02-13 17:13:17 +11:00
gingerBill d2e1ec13f0 Merge pull request #3192 from Lperlind/revert-the-matrices
Revert the matrices
2024-02-12 23:44:36 +00:00
Lucas Perlind 6df07a2c0a Remove bounds checking on a lot of linalg 2024-02-13 10:23:29 +11:00
Lucas Perlind c0d407a2b4 Revert "Change minor/adjoint to be row, col from c, r to be consistent with [row, col] syntax; Add #no_bounds_check were appropriate"
This reverts commit 5dd2e38aff.
2024-02-13 10:13:34 +11:00
gingerBill f378367fe7 Store cell data in map debug metadata 2024-02-12 15:17:06 +00:00
gingerBill c291fffce1 Add metadata type to maps debug information to aid debuggers knowing what is in it it 2024-02-12 12:29:37 +00:00
gingerBill 900fe95ba0 Split out linalg.identity between matrices and array-based matrix 2024-02-12 12:08:43 +00:00
gingerBill 5dd2e38aff Change minor/adjoint to be row, col from c, r to be consistent with [row, col] syntax; Add #no_bounds_check were appropriate 2024-02-12 11:54:24 +00:00
gingerBill 5ad8ebba9f Merge pull request #3188 from Tetralux/fixchdir
[os] Fix os.change_directory(), os.set_current_directory()
2024-02-12 11:24:45 +00:00
gingerBill e7719eed65 Merge pull request #3189 from mothfuzz/json_unmarshal_enumerated_enums_fix
remove return statement from case Type_Info_Enumerated_Array
2024-02-12 11:23:51 +00:00
Kay 5f49b8997a remove return statement from case Type_Info_Enumerated_Array, as it causes early exit in JSON unmarshalling. 2024-02-12 01:45:11 -06:00
Tetralux d6734c85b8 [os] Fix os.change_directory(), os.set_current_directory()
- set_current_directory() was leaking the wstring path string because it wasn't using the temp allocator.
- change_directory() wasn't calling SetCurrentDirectoryW() under the lock!
2024-02-12 06:03:51 +00:00
gingerBill 4ca23499fa Add raymath procedures (with numerous deprecated attributes to suggest to use array programming) 2024-02-10 16:31:03 +00:00
gingerBill e201a2fabb Add rand.choice_enum 2024-02-10 15:13:09 +00:00
gingerBill 5c4485f657 Add #load_directory(path: string) > []runtime.Load_Directory_File 2024-02-09 15:18:29 +00:00
gingerBill bae2a6fc1e Merge pull request #3184 from Lperlind/master
Add more window procedures
2024-02-09 11:59:12 +00:00
Lucas Perlind 8777fa1c04 Add more window procedures 2024-02-09 14:04:16 +11:00
gingerBill d771b3286d Merge pull request #3182 from laytan/fix-instrumentation-in-debug-mode
fix instrumentation in debug mode
2024-02-08 21:36:43 +00:00
Laytan 0e6dd56ac1 fix instrumentation in debug mode 2024-02-08 22:29:45 +01:00
gingerBill 9127e584c5 Merge pull request #3181 from laytan/fix-no-crt-on-linux
fix -no-crt on Linux
2024-02-08 21:07:42 +00:00
Laytan eab0e730a0 fix -no-crt on Linux 2024-02-08 19:48:37 +01:00
gingerBill 7128bc4b34 Add core:relative
This will eventually replace the #relative types
2024-02-08 15:15:16 +00:00
gingerBill 7b672ac72a Disallow mixture of polymorphic $ names and normal identifiers within record parameters 2024-02-08 14:03:03 +00:00
gingerBill 8f4ab3c07d Add check for a procedure 2024-02-08 13:49:27 +00:00
gingerBill dc5cfacc0a Fix edge case for procedures 2024-02-08 13:45:18 +00:00
gingerBill 3aea2e1fff Merge branch 'master' of https://github.com/odin-lang/Odin 2024-02-08 13:41:07 +00:00
gingerBill 59933b244d Allow polymorphic checking with intrinsics.type_is_subtype_of(Derived_Type, Poly_Type) 2024-02-08 13:41:02 +00:00
gingerBill 42aca72d9f Correct the logic for parapoly records to match that of procedures (polymorphic non-typeid parameters) 2024-02-08 13:21:41 +00:00
gingerBill 7034a31745 Merge pull request #3180 from z64/z64/fix
Remove invalid allocator assignment to slice
2024-02-08 12:39:49 +00:00
Zac Nowicki 9d0786ded7 Remove invalid allocator assignment to slice
`T` is `#soa[]$E`, which does not carry an allocator.
2024-02-08 04:14:16 -05:00
gingerBill 4c51706941 Merge pull request #3179 from laytan/fix-ci
fix ci
2024-02-07 19:09:04 +00:00
Laytan Laats a8c4f46747 fix ci 2024-02-07 19:53:52 +01:00
gingerBill 8e367d221b Merge branch 'master' of https://github.com/odin-lang/Odin 2024-02-07 17:16:05 +00:00
gingerBill a08250ac5b Improve error handling for missing library collection provided by the compiler 2024-02-07 17:15:59 +00:00
gingerBill 131c71ea76 Merge pull request #3142 from jay-j/feature/gl-allow-geometry-shaders
Expose OpenGL shader procs to allow creation of pipelines with geometry shaders
2024-02-07 16:09:58 +00:00
gingerBill 9db04fe446 Merge pull request #3156 from laytan/spall-instrumentation
Make spall able to be used in instrumentation procedures
2024-02-07 12:16:20 +00:00
gingerBill abaa906f34 Fix lb_hasher_proc_for_type 2024-02-07 11:05:38 +00:00
gingerBill fa093d9b09 Add runtime.map_insert_and_check_for_previous 2024-02-06 23:58:22 +00:00
gingerBill 4035a226da Fix filepath.rel allocation behaviour 2024-02-06 23:39:20 +00:00
gingerBill df5ee2dd06 Merge pull request #3178 from laytan/fix-virtual-static-reset-logic
mem/virtual: fix arena_static_reset_to inverted logic
2024-02-06 23:31:07 +00:00
Laytan 9b4cd0743c mem/virtual: fix arena_static_reset_to inverted logic 2024-02-06 20:24:38 +01:00
laytan 3f090ed523 fix for instrumenting on Windows 2024-02-06 19:55:09 +01:00
gingerBill 79173ef119 Merge pull request #3136 from Yawning/feature/crypto-hash
core:crypto/hash - Add and refactor
2024-02-06 17:40:45 +00:00
Yawning Angel 44758f2a60 core/crypto: Stop using context.temp_allocator
The max digest size for the foreseeable future will be 512 bits, and the
max block size is currently 1152 bits (SHA3-224).  If people add more
exotic hash algorithms without bumping the constants when required,
tests will fail.

The stream buffer will currently be 576 bytes, which is "fine" to just
stick on the stack, and is a sensible multiple of the more common block
size of 64 bytes.
2024-02-07 02:33:53 +09:00
gingerBill 1f0b24b735 Remove unneeded casts 2024-02-06 17:22:13 +00:00
gingerBill 327853ab92 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-02-06 17:20:13 +00:00
gingerBill a6878fcd91 Clean up code for initialize_symbols 2024-02-06 17:20:07 +00:00
gingerBill 61202b5abd Merge pull request #3174 from thetarnav/webgl2-matrix-flatten-2
Use `intrinsics.matrix_flatten` in `webgl2.odin`
2024-02-06 17:00:33 +00:00
Yawning Angel 56516ee8b2 core/crypto/poly1305: Relax the tag length check on the verify helper 2024-02-07 00:42:01 +09:00
Yawning Angel 1cc639bc93 core/crypto/hmac: Initial import 2024-02-07 00:42:01 +09:00
Yawning Angel 2357293e05 core/crypto/hash: Make the low level interface allocator-less
Just (ab)using reflect to victory is probably fine.
2024-02-07 00:37:18 +09:00
Yawning Angel 7a8b1669b0 core/crypto: Expose the block sizes for every hash algorithm
While I just went and made this private, this information is required
for keying HMAC.
2024-02-07 00:37:18 +09:00
Yawning Angel bc160d2eb7 tests/core/crypto: Reorganize
All of our crypto is modern now unless exiled to the legacy sub-package,
so move the test cases for the currently un-unified algorithms into the
main test driver file, and rename the benchmark driver to reflect
reality.
2024-02-07 00:37:18 +09:00
Yawning Angel b02b85d242 core/crypto/shake: SHAKE is an XOF, not a hash 2024-02-07 00:37:18 +09:00
Yawning Angel 1d151c4c92 tests/core/crypto: Cleanup/modernize a bit 2024-02-07 00:37:18 +09:00
Yawning Angel 899fab64d9 core/crypto: Documentation cleanups 2024-02-07 00:37:18 +09:00
Yawning Angel 00ab3beed9 core:crypto/hash: Add a generic higher level hash interface
There is a lot of code duplicated in convenience methods in each hash
implementation, and having a generic hash type makes implementing
higher-level constructs such as HMAC significantly easier down the road.
2024-02-07 00:37:18 +09:00
Yawning Angel ca10fc2d47 repo: Add yet another test binary to .gitignore 2024-02-07 00:37:18 +09:00
gingerBill 1ed6a484ac Merge pull request #3175 from Murtagy/patch-1
Update raylib.odin
2024-02-06 14:59:35 +00:00
gingerBill b0675358c3 Add angle_between and matrix2_rotate 2024-02-06 14:09:05 +00:00
Murtagy 456dd22dc4 Update raylib.odin 2024-02-05 21:38:17 +03:00
Laytan 02b8fefa30 indent doc.odin, makes it render nicely on the documentation site 2024-02-05 18:59:08 +01:00
Laytan 95808fd2e7 remove unneeded no instrumentation comment, are all foreign procs anyway 2024-02-05 18:54:37 +01:00
Laytan e63d71c23b implement bsd's, same as darwin 2024-02-05 18:48:17 +01:00
Damian Tarnawski 23a49ce65b USe intrinsics.matrix_flatten in webgl2.odin 2024-02-05 18:28:03 +01:00
Laytan Laats ca6300c860 spall instrumentation 2024-02-05 16:54:22 +01:00
gingerBill 1ebb7f8e9d Merge pull request #3170 from flysand7/run-args-fix
Make run args take the first '--' as the start of the args, instead of the last '--'
2024-02-05 13:58:32 +00:00
gingerBill 4685cf1085 Merge pull request #3140 from JustinRyanH/master
Implement `last_write_time` and `last_write_time_by_name` for Darwin
2024-02-05 13:57:28 +00:00
gingerBill 80a0b161b0 Force 128-bit calls on wasm 2024-02-05 13:51:16 +00:00
gingerBill 27feb5998c Add require to 128-bit and f16 casts 2024-02-05 13:49:10 +00:00
gingerBill e88db2818b force requiring the 128-bit calls on WASM targets 2024-02-05 13:48:08 +00:00
gingerBill 19535d8721 Add require flags to 128-bit integer procedures 2024-02-05 11:11:28 +00:00
flysand7 8ea8fbeccb Make run args take the first '--' as the start of the args, instead of the last '--' 2024-02-04 14:25:53 +11:00
Jeroen van Rijn 4e300ff90a Merge pull request #3167 from Murtagy/patch-1
Typo in comment in raylib
2024-02-03 17:04:10 +01:00
Murtagy 7bf25a4cf2 typo in comment 2024-02-03 18:43:34 +03:00
gingerBill 5f0f9f477e Merge pull request #3161 from laytan/fix-no-crt-darwin
fix -no-crt on Darwin
2024-02-03 12:30:00 +00:00
gingerBill dd7c65a89c Merge pull request #2998 from laytan/os-improvements
OS improvements
2024-02-03 12:29:39 +00:00
gingerBill 8620281191 Merge pull request #3163 from laytan/arm-releases-and-ci
Add MacOS ARM releases and CI
2024-02-03 12:25:49 +00:00
gingerBill c311a60aaf Merge pull request #3164 from FourteenBrush/master
Fix compiler panic: "src/parser.cpp(128): Panic: Unhandled Ast or branch expression"
2024-02-03 12:24:54 +00:00
gingerBill 2993490c75 Merge pull request #3165 from korvahkh/fix-dyn-array-init
Fix #3155
2024-02-03 12:24:40 +00:00
gingerBill 60b324d4ed Merge pull request #3166 from mothfuzz/patch-2
Change ClearMask to ColorMask in webgl.odin
2024-02-03 12:24:10 +00:00
Kay 89a2fdd106 Change ClearMask to ColorMask in webgl.odin
https://registry.khronos.org/OpenGL-Refpages/gl4/html/glColorMask.xhtml
2024-02-02 23:42:37 -06:00
korvahkh 8530829ca4 Fix dynamic array index = value with const value initializing to 0 2024-02-02 15:27:39 -06:00
FourteenBrush 0e5d7801dd Fix code style 2024-02-02 21:17:10 +01:00
Laytan Laats d5db49a3b0 name the workflows 2024-02-02 21:10:35 +01:00
Laytan Laats 606f11ebe8 fix hxa test use after free, skip weird pow test failure 2024-02-02 21:10:11 +01:00
Laytan Laats 07a4f4d017 add MacOS ARM target to CI and releases 2024-02-02 21:09:57 +01:00
FourteenBrush d463adfe4f Merge remote-tracking branch 'upstream/master' 2024-02-02 21:01:52 +01:00
FourteenBrush 16bd19ed43 Fix Unhandled Ast_OrBranchExpr 2024-02-02 21:00:00 +01:00
Laytan Laats eb811e8341 fix -no-crt on Darwin 2024-02-02 19:49:40 +01:00
Justin Hurstwright 8a63b6dff7 fix: remove returns ErrNo for Windows, FreeBSD, Unix 2024-02-02 09:10:25 -06:00
Justin Hurstwright 829654e3a2 steal the last_write from freebsd implementation 2024-02-02 09:10:25 -06:00
gingerBill cec08114fd Mock out comments 2024-02-02 14:57:22 +00:00
gingerBill bf90b61908 Fix type_elem_type for complex32 and quaternion64 2024-02-02 14:52:42 +00:00
gingerBill ae0a5b1a87 RUNTIME_REQUIRE :: false 2024-02-02 12:03:14 +00:00
gingerBill 55ff9b857e Add contextless where missing 2024-02-02 11:51:26 +00:00
gingerBill e7122a0950 Minimize extra dependencies if u128/i128 and f16 are not used 2024-02-02 11:42:22 +00:00
gingerBill 539cec7496 Move Tracking_Allocator to its own file. 2024-02-01 13:01:38 +00:00
gingerBill 000709b594 Make file_console_logger.odin be ignored on freestanding targets 2024-01-31 22:01:35 +00:00
gingerBill c51f94b600 Merge pull request #2978 from thetarnav/patch-2
Many small typos and fixes to wasm bindings
2024-01-31 21:02:03 +00:00
gingerBill b703d5ca58 Merge pull request #3157 from jakubtomsu/fix-generic-fixed-soa-ptr
Fix polymorphic fixed SOA pointers
2024-01-31 20:49:30 +00:00
jakubtomsu aff345f57f Allow fixed SOA structs 2024-01-31 21:38:05 +01:00
gingerBill a4664f82cc Fix dummy code 2024-01-31 14:10:18 +00:00
gingerBill 9fb090d1b8 Merge pull request #3141 from laytan/add-all-packages-flag-for-tests
Add `odin test -all-packages` to be able to test an entire project
2024-01-31 11:59:54 +00:00
gingerBill 4a2ad3b13a Merge pull request #3152 from laytan/fix-no-base-collection-in-releases
Fix not having the base collection in releases
2024-01-31 11:58:53 +00:00
Laytan Laats 9d5afee24b Fix not having the base collection in releases 2024-01-30 21:15:56 +01:00
gingerBill 6736205723 Merge pull request #3138 from FourteenBrush/master
Add a testing.expectf proc as a way to avoid a tprintf call.
2024-01-29 17:33:29 +00:00
gingerBill f0a7f1812f Rename runtime.os_write to runtime.stderr_write 2024-01-29 16:29:56 +00:00
gingerBill 9c9ae5987a Fix #3150 2024-01-29 16:21:26 +00:00
gingerBill f588593ff1 Merge pull request #3147 from odin-lang/base-work
`base` library collection work
2024-01-29 16:18:38 +00:00
gingerBill a626adac8e Use long-form names and alias with short-form UNIX-like names 2024-01-29 13:33:39 +00:00
gingerBill 338793b68e Remove use of incl in vendor:nanovg 2024-01-29 13:11:14 +00:00
gingerBill 59575d9b22 Remove incl and excl 2024-01-29 12:52:41 +00:00
gingerBill b58a0b60d0 Add matrix related intrinsics to dummy file 2024-01-29 11:48:50 +00:00
gingerBill 3a4c82abf8 Move core:(builtin|intrinsics) to base: 2024-01-29 11:46:16 +00:00
IllusionMan1212 301b9eef31 vendor/x11: added XQueryExtension, XGetEventData, and XFreeEventData 2024-01-29 06:22:33 +02:00
IllusionMan1212 36ed8fe55d vendor/x11: change display to be a ^Display in XGenericEventCookie struct 2024-01-29 05:54:14 +02:00
gingerBill 946cf52df1 Merge branch 'master' into base-work 2024-01-28 23:50:31 +00:00
gingerBill a78f062499 Fix semantics for casting between polymorphic specialized procedures 2024-01-28 23:49:59 +00:00
gingerBill 3c47503780 Improve foreign variable fuzzy type checking 2024-01-28 23:35:01 +00:00
gingerBill 6da82e038d Fix types for BSD 2024-01-28 23:27:30 +00:00
gingerBill 38af752cd1 Fix typo 2024-01-28 23:24:05 +00:00
gingerBill 0428f508d8 Fix typo of _heap_resize 2024-01-28 23:21:59 +00:00
gingerBill 3c24584290 Remove cyclic import hack for package runtime 2024-01-28 23:12:48 +00:00
gingerBill 535b8a9483 Remove core:os dependency completely from base:runtime 2024-01-28 23:11:38 +00:00
gingerBill 038086d1d9 Alias heap calls from base:runtime is core:os 2024-01-28 22:47:55 +00:00
gingerBill 9a16bc5fc5 Remove core:os dependency for base:runtime 2024-01-28 22:40:46 +00:00
gingerBill eee8e0faa2 Make //+private 2024-01-28 22:20:12 +00:00
gingerBill 3e7e779abf Replace core:* to base:* where appropriate 2024-01-28 22:18:51 +00:00
gingerBill 6a07effdd2 Freestanding - default to nil allocator; wasm - default to panic allocator 2024-01-28 22:15:28 +00:00
gingerBill 395e0fb225 -default-to-panic-allocator 2024-01-28 22:09:20 +00:00
gingerBill 9be9f0bb2c Remove core:os dependency for runtime.os_write on linux 2024-01-28 22:05:13 +00:00
gingerBill 9e7cc8cf93 Remove core:os dependency from base:runtime; change to base:intrinsics 2024-01-28 21:59:43 +00:00
gingerBill 2743bf7e44 Remove sdl.stack_* calls 2024-01-28 21:42:36 +00:00
gingerBill d95c28f41b Fix demo docs 2024-01-28 21:39:18 +00:00
gingerBill e57224d6e4 Fix demo 2024-01-28 21:30:08 +00:00
gingerBill f67691c457 Move matrix related procedures to the different linalg packages 2024-01-28 21:28:54 +00:00
gingerBill d04c82e547 Move matrix compiler builtins to intrinsics; alias within core_builtin_matrix.odin 2024-01-28 21:20:30 +00:00
gingerBill 09fa1c29cd Move core:runtime to base:runtime; keep alias around 2024-01-28 21:05:53 +00:00
gingerBill ddcaa0de53 Remove core:mem dependency from core:reflect 2024-01-28 20:52:01 +00:00
gingerBill 621b3c7829 Add missing clone for Struct_Type 2024-01-28 17:34:32 +00:00
gingerBill 68df35b378 Add #field_align(N)
It sets the minimum alignment for the fields within a struct. This cannot be used with `#packed`, but can be used with `#align(N)`.
If `#align(N)` is less than `#field_align(N)`, then a warning will be printed.
2024-01-28 17:33:29 +00:00
gingerBill c1d853a24e Remove dead code 2024-01-28 17:32:34 +00:00
gingerBill 30636f5114 Change return values from Struct_Tag to string 2024-01-28 15:48:19 +00:00
Patrick Cleavelin 7b9ea9eca0 Merge branch 'odin-lang:master' into master 2024-01-27 14:12:19 -06:00
Gabriel Pariat 89404147f6 fix whitespace 2024-01-27 14:10:32 -05:00
Gabriel Pariat 29d4bdc80b Revert "fix whitespace"
This reverts commit 594078cc1d.
2024-01-27 14:09:08 -05:00
Gabriel Pariat 594078cc1d fix whitespace 2024-01-27 14:08:14 -05:00
Gabriel Pariat ab68e4c6c4 change ordering 2024-01-27 14:06:58 -05:00
Gabriel Pariat 4956f9dad3 fix typo 2024-01-27 14:04:43 -05:00
Gabriel Pariat fd090c6672 adding linux + unix makefile for cgltf 2024-01-27 14:00:02 -05:00
jay-j b46b3010ec Expose OpenGL shader procedures to allow creation of shader pipelines with geometry shaders 2024-01-26 19:43:47 -08:00
Laytan Laats 31914e9cb9 Add odin test -all-packages to be able to test an entire project 2024-01-26 18:27:05 +01:00
gingerBill da6edb3764 Merge pull request #3139 from flysand7/file-attrib
sys/windows: Make `INVALID_FILE_ATTRIBUTES` a `u32` constant
2024-01-26 15:05:23 +00:00
gingerBill 9a9625f885 Fix #3053 2024-01-26 13:04:47 +00:00
gingerBill 15b40a4f29 Fix #3122 2024-01-26 12:56:16 +00:00
gingerBill 5406acc8fa Fix type_ptr_set_update 2024-01-26 12:47:39 +00:00
flysand7 d5b0ec712b os/os2: Remove file attribute casting from core:os2 2024-01-26 09:07:12 +11:00
FourteenBrush 766d6aa946 Fix typo 2024-01-25 12:05:19 +01:00
FourteenBrush 895ebb95d5 Need to unpack args 2024-01-25 11:44:53 +01:00
flysand7 af636eedde os: Fix casting errors in other files 2024-01-25 21:32:24 +11:00
flysand7 57b7822e12 Merge branch 'master' into unsigned-file-attrib 2024-01-25 20:57:18 +11:00
flysand7 03736d8bcb sys/windows: Make INVALID_FILE_ATTRIBUTES a u32 constant 2024-01-25 20:52:39 +11:00
FourteenBrush 3a5d80b291 Forgot to include loc param 2024-01-25 10:20:23 +01:00
FourteenBrush 967ccfc7cc Merge branch 'master' of https://github.com/FourteenBrush/Odin 2024-01-25 10:15:25 +01:00
FourteenBrush 712ae1c5ac Add testing.expectf 2024-01-25 10:08:09 +01:00
Colin Davidson f93f2dfd5c Add support for basic EGL on Linux 2024-01-24 13:24:25 -08:00
Laytan Laats 9ac619f4a2 vendor/raylib: change to non-universal binaries
We already have 2 different folders for the different architectures, so
this does should not have any usage impact.

Main motivation for doing this is hombrew requiring non-universal
binaries in their installation, so this is a step to getting homebrew
and vendor to play nice.
2024-01-24 20:58:14 +01:00
Jeroen van Rijn 9cfd4a953e Merge pull request #3132 from KyleNBurke/patch-1
Remove mention of `map` in builtin resize proc group
2024-01-24 16:41:27 +01:00
Kyle Burke 14e2cc17d6 Remove mention of map in builtin resize proc group 2024-01-24 09:39:47 -06:00
gingerBill 5f41741e8c Merge pull request #3126 from DanielGavin/parser-fix-paran
Improve recovery from faulty parameters in parse_proc_type
2024-01-24 11:23:49 +00:00
gingerBill 8a067bc1fc Merge pull request #3127 from laytan/fix-wasm-and-llvm-17
fix for wasm on llvm 17
2024-01-24 11:23:16 +00:00
gingerBill cfdf2bfb77 Merge pull request #3129 from DragosPopse/assert-fix
`fmt.assertf` now correctly gets disabled on `-disable-assert`. `log.assert/f` procs. `@cold` trick on everything fixed.
2024-01-24 11:21:37 +00:00
gingerBill 2f8316840e Merge pull request #3131 from flysand7/non-zeroed
os2: Add .Resize_Non_Zeroed allocation mode to os2/heap_windows
2024-01-24 11:21:09 +00:00
flysand7 a660098106 os2: Add .Resize_Non_Zeroed allocation mode to os2/heap_windows 2024-01-24 15:51:47 +11:00
Dragos Popescu 90d1f9ab27 Removed return value of assertf. assertf now correctly responds to -disable-assert. Added log.assert and log.assertf. All asserts now do the @cold trick, first added to builtin.assert 2024-01-23 20:56:13 +02:00
Laytan Laats 2097b09abb fix for wasm on llvm 17 2024-01-22 21:07:17 +01:00
DanielGavin f63f28302e Recover from faulty parameter in parse_proc_type 2024-01-22 20:35:26 +01:00
gingerBill 98b539ac5c Merge pull request #2912 from karl-zylinski/marshal-sort-maps-by-key-and-clone-value
JSON: Option to sort marshaled maps before outputting + clone_value proc + small improvements
2024-01-22 14:05:15 +00:00
Karl Zylinski 9d067ae562 Made sure temp guard for sorting map keys in json marshal code ignores temp allocator 2024-01-22 14:35:05 +01:00
Rikard Petré 239d4e1076 odin/tokenizer: Reset insert_semicolon to false in tokenizer.init to fix bug when tokenizing multiple files. 2024-01-20 16:09:41 +01:00
Rikard Petré 99825a28d7 odin/parser: Allow semicolon after return statement for the case:
if x do return y;
else do return z;
2024-01-20 16:00:41 +01:00
Rikard Petré 144504a752 odin/parser: Fix parsing of struct literal/call expression when closing brace/paren is on a new line without a comma after the last argument. 2024-01-20 15:57:14 +01:00
Jeroen van Rijn 5a542c7ad5 Merge pull request #3119 from Kelimion/location_call
Clarify #location error message when not a call.
2024-01-20 14:42:42 +01:00
Jeroen van Rijn 73f57c5933 Clarify #location error message when not a call. 2024-01-20 14:27:50 +01:00
Jeroen van Rijn 2071d7ba84 Merge pull request #3116 from Kelimion/hot_reload
Add hot reload support to `dynlib.initialize_symbols`
2024-01-19 18:51:34 +01:00
Jeroen van Rijn e8102a40d0 Add hot reload support to dynlib.initialize_symbols 2024-01-19 18:43:02 +01:00
gingerBill 737677f1b6 Merge pull request #3108 from Kelimion/subsystem
Add WINDOWS_SUBSYSTEM constant
2024-01-19 15:38:13 +00:00
Jeroen van Rijn fc047a8043 Expand -subsystem option on Windows
W:\Odin>odin run sketch.odin -file -subsystem:foo
Invalid -subsystem string, got oo. Expected one of:
        BOOT_APPLICATION, CONSOLE (default), EFI_APPLICATION, EFI_BOOT_SERVICE_DRIVER, EFI_ROM, EFI_RUNTIME_DRIVER, NATIVE, POSIX, WINDOWS (or WINDOW), WINDOWSCE

We now also set the constant ODIN_WINDOWS_SUBSYSTEM, which is "" for non-Windows targets.
2024-01-18 19:12:39 +01:00
Jeroen van Rijn ae52e245ea Add WINDOWS_SUBSYSTEM constant bool
true when -subsystem:windows for Windows targets, false otherwise.
2024-01-18 17:42:03 +01:00
gingerBill b8bfc715bf Merge pull request #3109 from flysand7/sys-linux-tiny-fix
[sys/linux]: Remove +build comments in files with documentation
2024-01-18 15:59:50 +00:00
Damian Tarnawski b0aa08f85b Correct wasm page_allocator switch cases 2024-01-18 10:33:40 +01:00
Damian Tarnawski d6ee5e89fa Merge branch 'odin-lang:master' into patch-2 2024-01-18 10:30:21 +01:00
Damian Tarnawski a263da0bbe Fix window_get_scroll proc not returning loaded values 2024-01-18 10:27:09 +01:00
Damian Tarnawski 9cb02aa51d Add missing Resize_Non_Zeroed case to page allocator 2024-01-18 10:26:43 +01:00
gingerBill 799f4379d8 Keep vet happy 2024-01-17 22:51:49 +00:00
gingerBill bd51b21386 Fix typo 2024-01-17 22:47:23 +00:00
gingerBill 276284cbec Fix typo 2024-01-17 22:44:28 +00:00
gingerBill a8021f03a6 Rename to Map_File_* 2024-01-17 22:43:35 +00:00
gingerBill c35d5d4c42 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-01-17 22:41:28 +00:00
gingerBill 248a0bfa5f Add virtual.map_file 2024-01-17 22:41:22 +00:00
flysand7 34791707fd [sys/linux]: Remove +build comments in files with documentation 2024-01-18 09:16:40 +11:00
gingerBill 37ae9eb609 Merge pull request #3001 from colrdavidson/unsafe_mem
add non-zeroing append and resize
2024-01-17 21:39:27 +00:00
Colin Davidson b6838731f5 oops, indentation 2024-01-17 13:30:03 -08:00
Colin Davidson 991c1d4446 add resize_non_zeroed to query features 2024-01-17 13:27:19 -08:00
Colin Davidson d0bb1fb844 bring log allocator up to date 2024-01-17 13:11:10 -08:00
Jeroen van Rijn ea43c030aa Merge pull request #3107 from ktsiligkiris/documentation/fix_xml_docs
Fix comments for proper rendering in documentation in encoding/xml
2024-01-17 21:10:49 +01:00
Kostas Tsiligkiris d54f34a162 Fix comments in xml_reader.odin for better rendering in documentation 2024-01-17 21:58:38 +02:00
Kostas Tsiligkiris a86cfa6e97 Fix filename in example 2024-01-17 21:38:33 +02:00
Jeroen van Rijn 1b83f4a18b Merge pull request #3082 from edyu/master
Fix math/fixed floor/ceil/round
2024-01-17 19:13:22 +01:00
gingerBill 90ac400ec5 stdcall -> system 2024-01-17 17:25:23 +00:00
gingerBill 75c659fa41 Change stdcall -> system 2024-01-17 17:04:54 +00:00
gingerBill 8cfff254c9 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-01-17 16:54:58 +00:00
gingerBill 8c2eb5df78 stdcall -> system 2024-01-17 16:54:50 +00:00
gingerBill a2f0ac0fd2 Merge pull request #3093 from avanspector/master
Add shell environment for Nix
2024-01-17 16:48:14 +00:00
gingerBill 2987fc65a1 Merge pull request #3043 from laytan/check-float-value-succeeded
check if string could be converted from float
2024-01-17 16:47:41 +00:00
gingerBill c5bab58180 Merge pull request #3076 from xb-bx/mprotect-fix-for-linux-and-darwin
virtual.protect returns inverted result on linux and darwin platforms
2024-01-17 16:46:39 +00:00
gingerBill 5ad88ea169 Merge pull request #3104 from codename-irvin/dev
Add freestanding aarch64 target
2024-01-17 16:45:34 +00:00
gingerBill 72d6b9b683 Replace stdcall with system 2024-01-17 16:43:27 +00:00
gingerBill 2f2c086382 Fix foreign import names 2024-01-17 16:35:28 +00:00
gingerBill d9fafa7000 Have default foreign import system paths 2024-01-17 16:32:26 +00:00
gingerBill 12e53f2336 Fix imports to be case sensitive correct 2024-01-17 16:26:18 +00:00
gingerBill a2e729c303 Remove //+build darwin 2024-01-17 16:06:59 +00:00
gingerBill 7b89174a26 Remove //+build windows tag 2024-01-17 15:57:37 +00:00
gingerBill 1d7f7a55d2 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-01-17 15:51:34 +00:00
gingerBill 766485ccab Add README.md 2024-01-17 15:51:29 +00:00
gingerBill 6642aa94d5 Change examples/all 2024-01-17 15:50:00 +00:00
Jeroen van Rijn 1c9ec27d36 Merge pull request #3105 from FourteenBrush/patch-1
Fix typo in bytes.scrub
2024-01-17 13:54:37 +01:00
FourteenBrush 05e27fa92d Fix typo in bytes.scrub 2024-01-17 13:37:06 +01:00
gingerBill 7954a7a6f3 Add darwin libraries back to normal examples/all to fix documentation generation 2024-01-17 12:27:03 +00:00
gingerBill 1d621295b1 Fix #1934 raylib IsGestureDetected 2024-01-17 12:26:44 +00:00
Kostas Tsiligkiris 02c2aff41b Fix formatting of package documentation string 2024-01-17 07:04:00 +02:00
Kostas Tsiligkiris 5476d43441 Move package xml before copyright
Having the same copyright on all files made the documentation script
to include it multiple times in the package information.
2024-01-17 07:00:25 +02:00
Laytan Laats b25e85a8bb check if string could be converted from float 2024-01-17 00:15:24 +01:00
Damian Tarnawski 190103883c Fix uniform matrix functions in WebGLInterface 2024-01-16 21:45:52 +01:00
codename-irvin d460dd2bdc Merge branch 'master' into dev 2024-01-16 15:42:47 -05:00
gingerBill 7ee7f4b064 Merge pull request #3077 from laytan/add-libc-to-stream
c/libc: add `to_stream` proc
2024-01-16 18:09:44 +00:00
gingerBill f2d3376c0b Merge pull request #3084 from stan680/semaphore-fix
Fix loop condition in semaphore_wait
2024-01-16 18:09:02 +00:00
codename-irvin 0fcd2f1d88 Use default calling convention for arm target for now - not 100% sure this is correct 2024-01-16 10:47:25 -05:00
codename-irvin 76f52dd6c9 Add freestanding aarch64 target 2024-01-15 19:49:34 -05:00
Jeroen van Rijn ae0be9c785 Merge pull request #3096 from ktsiligkiris/documentation/fix-format
[DOC] Fix documentation formatting in site
2024-01-14 16:03:57 +01:00
Kostas Tsiligkiris 3f6f00d8e5 [DOC] Fix documentation formatting in site
The comments that were added automatically in odin site, contained
tabs, so the first line of a two line comment was properly rendered in
the site, but the second line of the comment (because it included tabs
in the beginning of the line) was rendered as preformattted text. I
think that the proposed changes will fix this problem in the
documentation site.

An example of the problematic rendering of documentation is
https://pkg.odin-lang.org/core/compress/#COMPRESS_OUTPUT_ALLOCATE_MAX
2024-01-14 13:22:18 +02:00
Jeroen van Rijn c58eeca1b2 Merge pull request #3095 from laytan/macos-add-common-library-paths
darwin: add library paths for default Homebrew and MacPorts locations
2024-01-13 21:51:07 +01:00
Laytan Laats 5032839abc darwin: add library paths for default Homebrew and MacPorts locations 2024-01-13 21:38:30 +01:00
Jeroen van Rijn 2b1d85968d Merge pull request #3094 from laytan/fix-miniaudio-import
vendor/miniaudio: fix import for MacOS
2024-01-13 21:31:13 +01:00
Laytan Laats 5896469f3b vendor/miniaudio: fix import for macos
Using `system:miniaudio` is suboptimal, we already provide the
`Makefile` that builds the `lib/miniaudio.a` and this works on MacOS.
This PR makes linking with that library the default.
2024-01-13 21:14:02 +01:00
avanspector 70c150fc83 Fix gcc build
Although gcc is not officially supported, this little fix lets it to build Odin
2024-01-13 19:27:42 +01:00
avanspector 2411febf83 add shell environment for Nix 2024-01-13 19:25:13 +01:00
Jeroen van Rijn 5e7b031a1d Add RAD Debugger file to .gitignore. 2024-01-13 16:10:32 +01:00
gingerBill ef05e0858d Merge pull request #3092 from jon-lipstate/cpu_features_fix
cpu_features - fix shift direction
2024-01-13 11:54:31 +00:00
Jon Lipstate 880a18f124 fix shift direction 2024-01-12 22:28:38 -08:00
gingerBill 5d94887e76 Merge pull request #3083 from Lperlind/master
Fix linalg shadowing error
2024-01-13 00:05:14 +00:00
gingerBill 577049c69e Merge pull request #3086 from karl-zylinski/patch-1
Added comment on SetConfigFlags in Raylib bindings that it must be called before window creation
2024-01-13 00:04:46 +00:00
Karl Zylinski 46f46e645c Added comment on SetConfigFlags in Raylib bindings that it must be called before window creation 2024-01-11 11:20:14 +01:00
Jeroen van Rijn b13aa5db37 Merge pull request #3085 from Platin21/fix/macos-versions
Adds new MacOS Versions and Fixes Kernel Matching
2024-01-10 18:31:17 +01:00
Jeroen van Rijn 2990747cf8 Reindent and align and f ix Ventura kernel+version swap. 2024-01-10 18:26:14 +01:00
Platin21 62c30795e6 Fixed indentation 2024-01-10 17:27:31 +01:00
Platin21 bb94f4d129 Fixed version matching 2024-01-10 17:24:53 +01:00
Stan Irvin-Wilmot 7b53dbeb8a fix loop condition on compare_exhange_strong result in semaphore_wait - it was backwards so would loop on success and bail on fail 2024-01-10 15:53:00 +00:00
Platin21 120ef168bf Added macOS versions for a lot of revisions 2024-01-10 16:42:25 +01:00
gingerBill 72dfb73c9d Merge branch 'master' of https://github.com/odin-lang/Odin 2024-01-09 11:01:24 +00:00
gingerBill 67dcd916e8 Update instrumentation signature to support runtime.Source_Code_Location as last parameter. 2024-01-09 11:01:18 +00:00
Ed Yu 7f6f971284 Fix math/fixed floor/ceil/round 2024-01-08 18:56:12 -08:00
Lucas Perlind 67d5b97ff9 Fix linalg shadowing error 2024-01-09 10:24:12 +11:00
Jeroen van Rijn efb2b05040 Merge pull request #3078 from Kelimion/pq_peek
Add `peek` to priority queue.
2024-01-08 19:39:57 +01:00
Jeroen van Rijn 656e62d724 Add peek to priority queue. 2024-01-08 19:33:30 +01:00
Laytan Laats ce8801c37f c/libc: add to_stream proc
Adds the `to_stream` procedure to `core:c/libc` to improve usability of
the core collection when you have to use libc.
2024-01-08 19:20:06 +01:00
xb-bx c6c710465a fix 2024-01-08 19:54:39 +02:00
gingerBill f3dc1f6e3b Merge pull request #3075 from FrancisTheCat/fix-sort_by_indices_overwrite
Fixed type of temporary slice in sort_by_indices_overwrite
2024-01-08 16:39:08 +00:00
Franz Höltermann 873b7f8588 Fixed type of temporary slice in sort_by_indices_overwrite 2024-01-08 17:11:06 +01:00
Jeroen van Rijn 7d3dfb1046 Merge pull request #3006 from hwchen/hwchen/last_index_any
fix strings.last_index_any for single char
2024-01-08 15:57:36 +01:00
gingerBill f4782157d3 Implement instrumentation pass 2024-01-07 21:34:44 +00:00
Damian Tarnawski 8de7d2f18f Hoist STRING_SIZE constant 2024-01-07 22:25:27 +01:00
gingerBill aff8f06e3c Add frontend stuff instrumentation tooling
//+no-instrumentation
@(no_instrumentation)
@(instrumentation_enter)
@(instrumentation_exit)
2024-01-07 19:56:00 +00:00
Damian Tarnawski 0bf1b6c2f1 Fix typo in WebGLInterface class 2024-01-07 20:19:44 +01:00
Damian Tarnawski 2017ebc1b5 Fix copyTexSubImage2D and copyTexSubImage3D method calls 2024-01-07 16:49:51 +01:00
Damian Tarnawski da56a75ad6 Fix WebGLInterface function names 2024-01-07 16:49:12 +01:00
gingerBill 1e1228fb37 Merge pull request #3024 from Yawning/fix/simd-x86
core:simd/x86: Various fixes
2024-01-07 11:57:22 +00:00
Yawning Angel 8d7c37e384 core/simd/x86: Use the none calling convention for intrinsics
The LLVM intrinsics that live under `llvm.x86` are not actual functions,
so trying to invoke them as such using the platform's native C
calling convention causes incorrect types to be emitted in the IR.

Thanks to laytanl for assistance in testing.
2024-01-07 20:04:40 +09:00
Yawning Angel cd65a15d81 src: enable_target_feature should add features, not overwrite
`llvm_features` being empty is the default state, and implies the
presence of certain features.

Previously if any target features were explicitly enabled by the
`enable_target_feature` attribute, they were added comma separated
to `llvm_features`.

For example: `lzcnt,popcnt,...,sse4.2,sse`

This was causing LLVM to try to target a CPU that *ONLY* has the
explicitly enabled features.  This now will prefix explicitly enabled
features with a `+`, and preserve the existing `llvm_features` string
by appending to it if it is set.
2024-01-07 20:04:40 +09:00
Yawning Angel 9235e82451 core/simd/x86: Correct a target feature name 2024-01-07 20:04:40 +09:00
Yawning Angel ecee0e2db2 repo: Add more test binaries to .gitignore 2024-01-07 20:04:40 +09:00
Damian Tarnawski 0580eebd2a Pass height to webgl.readPixels 2024-01-06 22:28:24 +01:00
Damian Tarnawski 909a5016ee Correct glIsEnabled in wasm.webgl 2024-01-06 22:17:01 +01:00
Damian Tarnawski c2c89e54a5 Correct spelling of FramebufferRenderbuffer 2024-01-06 21:03:27 +01:00
Damian Tarnawski 6389d9c11f Merge branch 'master' into patch-2 2024-01-06 21:02:37 +01:00
Jeroen van Rijn 2784e8ea51 Merge pull request #3072 from laytan/add-dynlib-last_error
dynlib: add last_error procedure
2024-01-06 02:13:53 +01:00
Laytan Laats 85b71708dd dynlib: add last_error procedure 2024-01-06 02:08:11 +01:00
Jeroen van Rijn 649b5fa528 Add bool return to dynlib.initialize_symbols. 2024-01-06 02:04:09 +01:00
Jeroen van Rijn d6a89d667d Add dynlib.initialize_symbols (#3071)
```
package example

import "core:dynlib"
import "core:fmt"

Symbols :: struct {
	// `foo_` is prefixed, so we look for the symbol `foo_add`.
	add: proc "c" (int, int) -> int,
	// We use the tag here to override the symbol to look for, namely `bar_sub`.
	sub: proc "c" (int, int) -> int `dynlib:"bar_sub"`,

	// Exported global (if exporting an i32, the type must be ^i32 because the symbol is a pointer to the export.)
	// If it's not a pointer or procedure type, we'll skip the struct field.
	hellope: ^i32,

	// Handle to free library.
	// We can have more than one of these so we can match symbols for more than one DLL with one struct.
	_my_lib_handle: dynlib.Library,
}

main :: proc() {
	sym: Symbols

	// Load symbols from `lib.dll` into Symbols struct.
	// Each struct field is prefixed with `foo_` before lookup in the DLL's symbol table.
	// The library's Handle (to unload) will be stored in `sym._my_lib_handle`. This way you can load multiple DLLs in one struct.
	count := dynlib.initialize_symbols(&sym, "lib.dll", "foo_", "_my_lib_handle")
	defer dynlib.unload_library(sym._my_lib_handle)
	fmt.printf("%v symbols loaded from lib.dll (%p).\n", count, sym._my_lib_handle)

	if count > 0 {
		fmt.println("42 + 42 =", sym.add(42, 42))
		fmt.println("84 - 13 =", sym.sub(84, 13))
		fmt.println("hellope =", sym.hellope^)
	}
}
```
2024-01-06 01:31:27 +01:00
gingerBill b408ec6bac Remove distinct from the specific types 2024-01-05 14:48:39 +00:00
gingerBill 8545f316ff Fix the type inference in builtin.quaternion 2024-01-05 14:45:03 +00:00
gingerBill 3bf7b416e7 Fix builtin.quaternion generation 2024-01-05 14:36:58 +00:00
gingerBill 0b83e3dae5 Enforce naming the parameters with builtin.quaternion to reduce confusion 2024-01-05 14:29:14 +00:00
gingerBill d7d23e65ea Clean up error block usage 2024-01-05 13:47:00 +00:00
gingerBill 2820bbc269 Add @(entry_point_only) for procedures 2024-01-05 13:38:30 +00:00
Patrick Cleavelin 59aa05170d respect -lld CLI arg 2024-01-04 13:55:36 -06:00
gingerBill 70c5153471 Merge branch 'master' of https://github.com/odin-lang/Odin 2024-01-03 21:00:35 +00:00
gingerBill 5961d4b316 Merge pull request #2983 from perogycook/raylib5
Raylib5 bindings with fixes
2024-01-03 18:32:45 +00:00
Jeroen van Rijn b59c80d6fd Merge pull request #3068 from laytan/json-unmarshal-union
encoding/json: try to unmarshal into union variants
2024-01-03 19:13:36 +01:00
Laytan Laats 8c10f4cdde encoding/json: try to unmarshal into union variants 2024-01-03 19:02:30 +01:00
gingerBill 0cc72b536f Merge pull request #3066 from laytan/darwin-actually-honor-no-crt
darwin: actually honor no-crt by not linking with `-lSystem -lm`
2024-01-03 17:25:41 +00:00
Laytan Laats 8a7c2ea9d0 darwin: actually honor no-crt by not linking with -lSystem -lm 2024-01-02 21:44:51 +01:00
Jeroen van Rijn cb1c10ce83 Merge pull request #3067 from Platin21/fix/macos-no-duplicated-linkage
Fix/macos no duplicated linkage
2024-01-02 21:35:41 +01:00
Platin21 37c2e9bec3 Fixed Typo / Added check for 1 2024-01-02 21:14:17 +01:00
Platin21 4626cd03da Adds missing space 2024-01-02 21:04:44 +01:00
Platin21 3850be2e11 Fixed git issue.. 2024-01-02 21:04:03 +01:00
Platin21 4c9aa30a1e Merge remote-tracking branch 'origin/master' into fix/macos-min-version 2024-01-02 20:55:20 +01:00
Platin21 da977cf1e6 Adds new flag for linker to know if it should link the system library or not 2024-01-02 20:55:15 +01:00
Jeroen van Rijn ee97c5958f Merge pull request #3065 from Platin21/fix/macos-min-version
Removes macOS min version and supports default latest
2024-01-02 20:07:26 +01:00
Platin21 778bbee17c Removes macOS min version and supports default latest 2024-01-02 19:49:44 +01:00
Jeroen van Rijn 4efef08c94 Update core:encoding to Unicode 15.1 table. 2024-01-02 18:03:32 +01:00
gingerBill 87c835268a Merge pull request #2917 from flysand7/sys-linux-additions
[sys/linux]: Fixes and additions
2024-01-02 14:23:40 +00:00
gingerBill 83ed0b37cd Merge pull request #3036 from laytan/error-when-c-vararg-is-not-on-last-param
error when #c_vararg is not applied to the last parameter
2024-01-02 14:22:24 +00:00
gingerBill dc49cf766f Merge pull request #3048 from ThomasL81/master
Fixing a pdb linker error when the path contains spaces
2024-01-02 14:18:44 +00:00
gingerBill 933754193a Merge pull request #3049 from igordreher/dxgi_bit_set
[vendor:directx/dxgi] change u32 flags to bit_sets
2024-01-02 14:18:09 +00:00
gingerBill 76eef47491 Merge pull request #3054 from igordreher/win_error
[core:sys/windows] add System Error Codes enum
2024-01-02 14:16:36 +00:00
gingerBill 0e21f45076 Merge pull request #3057 from korvahkh/fix-nil-default-arg
Fix #3056
2024-01-02 14:14:35 +00:00
gingerBill 9bfe3a94f4 Merge pull request #3061 from flysand7/glfw-set-joystick-callback-fix
Fix the declaration of SetJoystickCallback
2024-01-02 14:13:53 +00:00
gingerBill a2009220a2 Merge pull request #3063 from aragalie/patch-1
remove duplication
2024-01-02 14:13:42 +00:00
gingerBill b410383aaf Merge branch 'master' of https://github.com/odin-lang/Odin 2024-01-01 16:11:13 +00:00
Alex Ragalie b47736260a remove duplication 2023-12-31 21:57:39 +01:00
flysand7 5154bb551a Fix the declaration of glfwSetJoystickCallback 2023-12-31 15:03:50 +11:00
Jeroen van Rijn 89084befb0 Remove unnecessary []byte -> []byte conversion. 2023-12-30 21:59:33 +01:00
gingerBill f3caa4aee3 Add bin/lld-link.exe 2023-12-30 13:53:15 +00:00
gingerBill 3ec253f385 Add bin/wasm-ld.exe 2023-12-30 13:52:37 +00:00
korvahkh 759e342872 Fix #3056 2023-12-29 22:39:34 -06:00
Igor Dreher 120b1101fb [core:sys/windows] add System Error Codes enum
Copied error values from https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499-
and subsequent pages to an enum
2023-12-29 11:06:50 -03:00
Jeroen van Rijn 252fd0e928 Merge pull request #3052 from laytan/fix-type-assign-at
fix typo in assign_at_elems
2023-12-28 17:44:20 +01:00
Laytan Laats 1fa2af213d fix typo in assign_at_elems 2023-12-28 17:10:08 +01:00
Igor Dreher de84db85cb [vendor:directx/dxgi] change u32 flags to bit_sets 2023-12-28 09:42:37 -03:00
Jeroen van Rijn 33d85adf34 Merge pull request #3051 from laytan/fix-double-execution-of-tests
fix double execution of tests
2023-12-27 15:58:19 +01:00
Laytan Laats 383d485e2a fix double execution of tests 2023-12-27 15:34:11 +01:00
Jeroen van Rijn 68d2b7bb89 Disable doc tests for now. 2023-12-27 15:29:40 +01:00
Jeroen van Rijn d667809e0a Merge pull request #3050 from laytan/fix-load-directive-with-absolute-paths
fix load directive with absolute paths
2023-12-27 15:21:43 +01:00
Laytan Laats 64ed4389ff fix load directive with absolute paths 2023-12-27 15:00:33 +01:00
Thomas Louis 4701b31b55 Fixing a pdb linker error when the path contains spaces 2023-12-27 11:36:38 +01:00
Jeroen van Rijn e52cc73d50 Fix generic_float.odin 2023-12-21 22:37:26 +01:00
Jeroen van Rijn ac0ed13b35 Merge pull request #3039 from chikega/patch-1
Update demo.odin
2023-12-21 22:32:09 +01:00
Gary Chike 269957b9fb Update demo.odin
Appears that 'to' and 'abstract' were inverted.
2023-12-21 16:23:00 -05:00
gingerBill 464a675adc Merge branch 'master' of https://github.com/odin-lang/Odin 2023-12-21 17:05:31 +00:00
gingerBill 55f3e99f63 Fix %g in fmt, and make %v default to %g for floats 2023-12-21 17:05:24 +00:00
Jeroen van Rijn 49fb0acfc9 Merge pull request #3037 from laytan/fix-wrong-string-type-assert
fix wrong string type assert
2023-12-20 01:05:10 +01:00
Laytan Laats 09db245e4c fix wrong string type assert
Fixes #2846
2023-12-20 00:56:36 +01:00
Laytan Laats bc7972fbaf error when #c_vararg is not applied to the last parameter
Fixes #2981
2023-12-20 00:17:11 +01:00
Jeroen van Rijn 6f80d2dc36 Merge pull request #3033 from laytan/use-stack-buffer-for-log-allocator
use stack buffer for log allocator to avoid logging it's own allocations
2023-12-20 00:06:51 +01:00
Laytan Laats 46250168d6 use stack buffer for log allocator to avoid logging it's own allocations 2023-12-19 23:26:23 +01:00
gingerBill 509712f771 Merge pull request #3031 from Kithuppi/fix-vulkan-bindings
Fix vulkan bindings
2023-12-19 12:32:26 +00:00
gingerBill 4b38dbe133 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-12-19 12:32:10 +00:00
gingerBill ad0ffa4833 Update .gitattributes with * text=auto 2023-12-19 12:32:05 +00:00
gingerBill b89fc9191c Merge pull request #3030 from keyle/patch-1
Add vendor:cmark support for macOS
2023-12-18 22:27:27 +00:00
gingerBill 829e4cc67e Fix assign_at_elems to match the same logic as assign_at_elem_string 2023-12-18 22:22:08 +00:00
gingerBill beb4699b46 Check test procedures after all minimum dependency set calls are done 2023-12-18 22:09:10 +00:00
Walther Chen 031b0cc534 fix strings.last_index_any for single char 2023-12-18 11:55:45 -05:00
gingerBill ee504aa596 Merge pull request #3032 from laytan/runtime-arena-edge-cases
Runtime arena edge cases
2023-12-18 15:51:00 +00:00
Laytan baa5ea9258 fix not passing arg everywhere 2023-12-18 16:41:55 +01:00
Laytan 9a490e4e0d fix big alignment 2023-12-18 16:38:51 +01:00
Laytan Laats 252de70b0f fix same problem in virtual arena 2023-12-18 15:41:36 +01:00
Laytan Laats 4ae021cd4c add other failing test and fix them 2023-12-18 15:17:27 +01:00
Laytan Laats af962526df switch tests around 2023-12-18 14:46:37 +01:00
Laytan Laats 6024af172c add failing test for runtime arena edge case 2023-12-18 14:40:49 +01:00
Kithuppi 8bd5a9bb9e generate new bindings 2023-12-18 13:38:57 +02:00
Karl Zylinski a9166f52f8 Raylib 5.0 IsMouseButtonUp workaround: Better use of when clause to make sure we remove the workaround later. 2023-12-18 11:30:20 +01:00
Karl Zylinski 9bdd4c73a5 Raylib workaround: Fix comment typo 2023-12-18 11:20:15 +01:00
Karl Zylinski 2362be11bf Raylib 5.0 bug workaround: Check VERSION and panic if VERSION != 5.0, in which case there is info in the message about how to remove the workaround. 2023-12-18 11:19:11 +01:00
keyle 5b8a76c583 Add support for macOS 2023-12-18 16:50:41 +10:00
Karl Zylinski 2a0e4f7a8c Workaround for bug in Raylib 5 making IsMouseButtonUp not work properly. 2023-12-17 19:48:19 +01:00
Kithuppi ece82eecc3 fix C bit field parsing 2023-12-17 16:39:03 +02:00
gingerBill 67d02043fe Merge pull request #3027 from Yawning/fix/build-constraints
core: Fixed build constraints
2023-12-17 14:28:50 +00:00
Yawning Angel 29c80c238d core: Fixed build constraints
Multiple constraints on the same line are combined with logical OR,
while combining multiple negated constraints needs to be done with
logical AND (each constraint on a separate line).
2023-12-17 23:02:46 +09:00
Michael a4606e4da8 IsMouseButtonUp hack for now 2023-12-16 16:50:22 -07:00
Jeroen van Rijn d4df3f6383 Merge pull request #3025 from laytan/log-allocator-memory-format
log allocator: use %m to format size and fix formatting bugs
2023-12-16 01:32:18 +01:00
Laytan Laats 58ff3dd1ed log allocator: add option to switch between bytes and human format 2023-12-16 01:27:38 +01:00
Laytan Laats cf8c9a6be4 log allocator: fix the formatting for query info/features and errors 2023-12-16 00:55:59 +01:00
Laytan Laats ea709451e8 log allocator: use %m to format size 2023-12-15 23:43:35 +01:00
gingerBill d47a403d29 Fix: Bill was a numpty 2023-12-15 11:02:40 +00:00
gingerBill 1606f756b3 Remove neighbouring duplicates from neighbouring sorted array of entities; fixes duplicate tests 2023-12-15 10:59:34 +00:00
Laytan Laats 0b2f357bbe fix eof logic 2023-12-14 18:05:06 +01:00
Laytan Laats 9a1c4dc56d implement a max read/write at a time for non-windows (windows already has this) 2023-12-14 18:05:06 +01:00
Laytan Laats 7eabeda870 make sure an eof is also returned from the file streams on non-windows 2023-12-14 18:05:06 +01:00
gingerBill 2e9298891e Merge pull request #3019 from DanielGavin/parser-fix
Fixed crash in `core:odin/parser` with `#reverse`
2023-12-14 15:16:01 +00:00
gingerBill f8b85339af Merge pull request #3020 from Lperlind/master
Format hidpi.odin
2023-12-14 15:15:51 +00:00
Lucas Perlind 12b8f91249 Format hidpi.odin 2023-12-14 10:29:50 +11:00
DanielGavin 8e395cc6e9 Fixed crash in core:odin/parser with #reverse 2023-12-13 20:08:26 +01:00
gingerBill feba52002e Reduce repetition on initializing global type info member arrays 2023-12-13 17:46:00 +00:00
gingerBill ca2b2c498e Add -obfuscate-source-code-locations 2023-12-13 16:47:34 +00:00
gingerBill 6e9e469abd Merge pull request #3008 from laytan/fix-stat-struct-layout-linux-arm64
fix struct stat layout linux arm64
2023-12-13 15:24:38 +00:00
gingerBill 0490ba46f4 Merge pull request #3015 from Lperlind/master
Add Hidpi to Windows
2023-12-13 15:24:25 +00:00
gingerBill e0652ee2f4 Minor fix to call expr in tilde with variadic parameters 2023-12-13 13:10:51 +00:00
gingerBill bc99bacb21 Update Tilde 2023-12-13 12:38:01 +00:00
gingerBill 173527d631 Remove random tag 2023-12-13 01:53:15 +00:00
gingerBill f8cb2bcad2 Add slice.unique and slice.unique_proc 2023-12-13 01:50:26 +00:00
gingerBill b011487778 Reimplement binary_search_by to be simpler 2023-12-13 01:37:15 +00:00
gingerBill c8cc130744 Fix the implementation of binary_search_by to work with a normal ordering call, rather than the backwards version.
WHY THE HECK WAS IT THIS WAY IN THE FIRST PLACE?!
2023-12-13 01:24:03 +00:00
gingerBill fe0244606b Revert 2023-12-13 01:20:53 +00:00
gingerBill 036fa6482c Use cmp_proc in binary_search 2023-12-13 01:18:05 +00:00
gingerBill 04ca22b9ea Add to core:slice reduce_reverse, filter_reverse, repeat 2023-12-13 00:35:23 +00:00
gingerBill bf9ae77fbd Remove duplicates from init/fini procedure list 2023-12-12 17:29:52 +00:00
gingerBill 4adfc120ba Merge branch 'master' of https://github.com/odin-lang/Odin 2023-12-12 17:11:42 +00:00
gingerBill d8bb93accc Fix race condition caused by lack of checking specialized parapoly procedures as a dependency (#2968) 2023-12-12 17:10:59 +00:00
Lucas Perlind e410908ce8 Add Hidpi to Windows 2023-12-12 12:14:18 +11:00
Laytan Laats d278c852cc clean up field names 2023-12-08 23:43:30 +01:00
Michael 364b64718f Merge branch 'odin-lang:master' into raylib5 2023-12-08 00:06:31 +01:00
Michael 61335089c6 added some commas 2023-12-08 00:05:51 +01:00
Jeroen van Rijn 040b90ce76 Merge pull request #3011 from xtactis/binary_search_by_fix/3007
Fix for bug in binary_search_by implementation
2023-12-07 18:26:34 +01:00
Matija Dizdar 843b2350eb added #no_bounds_check back into binary_search_by 2023-12-06 21:48:37 +01:00
Matija Dizdar 526d338300 removed incorrect requirement for key type to be ordered in binary_search_by 2023-12-06 21:29:18 +01:00
Laytan Laats a6aca5d6d1 fix struct stat layout linux arm64 2023-12-06 17:17:45 +01:00
Michael 05c67c3243 Merge branch 'odin-lang:master' into raylib5 2023-12-05 23:51:34 +01:00
gingerBill 31b1aef44e Merge pull request #3003 from karl-zylinski/patch-1
virtual arena: Actually use DEFAULT_ARENA_STATIC_RESERVE_SIZE as default value on arena_init_static
2023-12-05 16:04:25 +00:00
gingerBill a8c09d77ff Merge pull request #3004 from flysand7/strings-doc
strings: Fix up documentation of split_n
2023-12-05 16:04:07 +00:00
flysand7 5665ae02bc type error 2023-12-06 00:33:09 +11:00
flysand7 92d3a681cd Merge branch 'master' into sys-linux-additions 2023-12-06 00:23:41 +11:00
flysand7 cb66ed52ce [sys/linux]: Fix epoll_wait on arm64 2023-12-06 00:09:10 +11:00
flysand7 2e1b2dc3ba strings: Fix up documentation of split_n 2023-12-05 23:17:19 +11:00
Karl Zylinski 65333181fc virtual arena: Actually use DEFAULT_ARENA_STATIC_RESERVE_SIZE as default value on arena_init_static 2023-12-04 21:15:46 +01:00
Michael 30ad923558 Update raygui.odin for Mac targets 2023-12-04 20:14:05 +01:00
Michael a31ab31e96 Add files via upload 2023-12-04 20:09:12 +01:00
Michael ac760a0bdd MacOS-arm64 Raygui libs 2023-12-04 20:08:31 +01:00
Michael fbf0180411 Delete vendor/raylib/macos-arm64/libraygui.a 2023-12-04 20:07:29 +01:00
Michael 198ac00994 New Raygui libs for Windows 2023-12-04 17:31:32 +01:00
Michael 603764dbca Delete vendor/raylib/windows/raygui.lib 2023-12-04 17:30:51 +01:00
Michael cb04333480 Delete vendor/raylib/windows/raygui.dll 2023-12-04 17:30:38 +01:00
Michael 0e169fd1c2 Delete vendor/raylib/windows/rayguidll.lib 2023-12-04 17:30:13 +01:00
Michael 68cf51c8f8 Merge branch 'odin-lang:master' into raylib5 2023-12-04 16:49:35 +01:00
gingerBill 65afe6f70d Merge pull request #3002 from laytan/fix-write-on-x86_64-darwin
fix write on x86_64 Darwin
2023-12-04 14:06:19 +00:00
Laytan Laats 291a064725 fix write on x86_64 Darwin 2023-12-04 14:57:02 +01:00
Colin Davidson bfbeb23f54 add resize non zeroed in more places 2023-12-04 03:09:13 -08:00
Colin Davidson 58e4a011c7 add non-zeroing append and resize 2023-12-04 00:08:13 -08:00
Michael 3de15987bd Merge branch 'odin-lang:master' into raylib5 2023-12-03 22:07:23 +01:00
Jeroen van Rijn c5c46c5073 Silence writable string warnings when compiling Odin on Linux. 2023-12-03 18:08:18 +01:00
gingerBill abe896a7be Merge pull request #2984 from mtarik34b/add-min-index-and-max-index-procs
Add min_index and max_index procedures
2023-12-02 12:58:15 +00:00
gingerBill f00df0afe9 Merge pull request #2992 from flysand7/x11-fix
[x11/xlib]: Fix some foreign declarations
2023-12-02 12:38:11 +00:00
gingerBill 35f21abc7b Merge pull request #2993 from flysand7/sdl-fix
[vendor/sdl]: Fix fourcc codes for pixel formats to match FOURCC definition
2023-12-02 12:37:57 +00:00
gingerBill b1977dfa4b Merge pull request #2996 from flga/master
runtime: panic_allocator should use panic_allocator_proc
2023-12-02 12:37:31 +00:00
flga e23eba0914 runtime: panic_allocator should use panic_allocator_proc 2023-12-01 19:21:58 +00:00
flysand7 4b245e2d83 [vendor/sdl]: Fix fourcc codes for pixel formats to match FOURCC definition 2023-12-01 12:15:48 +11:00
flysand7 f169d8c396 [x11/xlib]: Fix some foreign declarations 2023-12-01 12:00:45 +11:00
Michael 39f8437f4d Merge branch 'odin-lang:master' into raylib5 2023-11-29 13:12:02 +01:00
Jeroen van Rijn 4aa8834d39 Add os.args to demo. 2023-11-27 21:01:27 +01:00
Jeroen van Rijn f79efd43e4 Fix missing clamp in core:math/big random. 2023-11-27 12:43:24 +01:00
Michael 058132e7e6 fixed names 2023-11-26 07:50:11 -07:00
Michael 9b7c5f2b1b Delete vendor/raylib/linux/libraygui.so.3.6 2023-11-26 07:49:12 -07:00
Michael 06e61c7315 Delete vendor/raylib/linux/raygui.a 2023-11-26 07:48:47 -07:00
Michael 1b23dbb228 Delete vendor/raylib/linux/libraygui.a 2023-11-26 07:48:36 -07:00
Michael cc2ba146a6 Delete vendor/raylib/linux/raygui.so 2023-11-26 07:48:26 -07:00
Michael 3bbdc93882 Updated dynlibs 2023-11-26 07:45:42 -07:00
Michael 0091193c04 added missing enums
GuiTextAlignmentVertical and GuiTextWrapMode
2023-11-26 01:45:55 -07:00
Michael 1b5bcc1a99 Added GuiToggleSlider 2023-11-26 08:29:29 +00:00
Tarık B 5a661dc67b Add min_index and max_index procedures 2023-11-26 08:33:50 +01:00
Michael fb48131f3c More minor fixes 2023-11-26 07:25:53 +00:00
Michael 9300c99d65 Merge branch 'odin-lang:master' into raylib5 2023-11-26 00:00:47 -07:00
Michael 9366bf44a6 Fixed a bunch of tab/space issues 2023-11-26 06:55:56 +00:00
Jeroen van Rijn e8e3501443 Merge pull request #2979 from rope-hmg/master
Binary search improvements
2023-11-25 17:48:09 +01:00
Hector 9f96382558 Removed some accidental semi-colons and converted indentation to tabs. 2023-11-25 16:36:51 +00:00
Hector 82088e4a75 Used strings.builder_reset instead of clear for the string builder 2023-11-25 16:26:29 +00:00
Hector b12bfe407d Updated to tabs and used provided test methods. 2023-11-25 16:21:48 +00:00
Damian Tarnawski 1e726bb3e0 Fix scroll and visibilitychange event handling 2023-11-25 16:07:36 +01:00
Hector 1db5e1250f Binary search improvements
Modified the algorithm so that the index is either the location of the
element if found or the index at which to insert the element to maintain
sorted order.

Also added some tests to verify the above claim.
2023-11-25 13:48:48 +00:00
Damian Tarnawski e0ecae66fd Fix set_element_value_string parameter name 2023-11-25 14:35:48 +01:00
Damian Tarnawski 0df7fe4247 Fix alignment 2023-11-25 14:23:41 +01:00
Damian Tarnawski 84a8e17482 Correct some typos in runtime.js 2023-11-25 14:22:17 +01:00
Jeroen van Rijn cabaac5a68 Merge pull request #2976 from mtarik34b/improve-command-line-help-and-usage
Improve command line help/usage and its formatting
2023-11-25 11:06:34 +01:00
Jeroen van Rijn 2bb5c4cafc Merge pull request #2973 from flysand7/dial_tcp_bug
[net]: Fix passing the wrong socket to `linux.connect` on linux
2023-11-25 10:39:14 +01:00
Tarık B bfff322eb9 Fix oversights, apply minor improvements 2023-11-25 10:24:22 +01:00
Tarık B dd60802db4 Apply consistent usage of third-person singular 2023-11-25 10:24:22 +01:00
Tarık B 6db42cfaec Standardize to consistent 3-space indentation for inline comments
Inline comments in a cohesive block of multiple lines are aligned with 3-space
indentation to the length of the longest line.
2023-11-25 10:24:22 +01:00
Tarık B 21f5b41150 Remove redundant example 2023-11-25 10:24:22 +01:00
Tarık B 1f007a46ee Fix newly introduced capitalization and punctuation error 2023-11-25 10:24:22 +01:00
Tarık B 4fa4feb669 Increase indentation for -vet extra check listing 2023-11-25 10:24:22 +01:00
Tarık B 5fd3fc4c7c Unify showing of available options 2023-11-25 10:24:22 +01:00
Tarık B ee2d3e00fd Capitalize first word of sentences 2023-11-25 10:24:22 +01:00
Tarık B 6f65ed6cc8 Add period at the end of sentences. 2023-11-25 10:24:22 +01:00
Tarık B 70525a12ca Fix typo 2023-11-25 10:24:22 +01:00
Tarık B 914950592c Fix indentation 2023-11-25 10:24:22 +01:00
Jeroen van Rijn 3c021f9c52 Merge pull request #2923 from flysand7/raylib-fix
Pre-compiled raygui on linux
2023-11-24 14:18:49 +01:00
Jeroen van Rijn 9ea88f1353 Merge pull request #2918 from flysand7/math-doc
[math]: Fix the doc comments on `F64_*` constants
2023-11-24 14:16:19 +01:00
Jeroen van Rijn 4d89249caf Merge pull request #2939 from laytan/allow-larger-thread-poly-data
Allow larger thread poly data
2023-11-24 14:06:24 +01:00
flysand7 ff0e976ff3 [net]: Fix passing the wrong socket to on linux 2023-11-24 23:57:53 +11:00
Jeroen van Rijn 0df1645422 Merge pull request #2942 from flga/master
core:sys/linux: make Perf_Read_Format a bitset
2023-11-24 13:53:14 +01:00
Jeroen van Rijn bb6d73953c Merge pull request #2972 from flysand7/net-socket-any
[net]: Add send_any, recv_any variants to proc groups for Any_Socket
2023-11-24 13:42:48 +01:00
Jeroen van Rijn c9c14bab8a Merge pull request #2946 from laytan/fix-test-name-flag
fix -test-name flag
2023-11-24 13:42:10 +01:00
Jeroen van Rijn 7c6117bb8f Merge pull request #2947 from flysand7/vendor-x11
[vendor/x11]: Add most of the basic xlib bindings
2023-11-24 13:41:28 +01:00
Jeroen van Rijn ae40946198 Merge pull request #2950 from laytan/fix-nil-exceptions-with-incomplete-code-parse
fix nil exceptions with incomplete code parse
2023-11-24 13:39:58 +01:00
flysand7 8063569cdd [net]: Add send_any, recv_any variants to proc groups for Any_Socket 2023-11-24 23:27:12 +11:00
Jeroen van Rijn dab72d5615 Merge pull request #2952 from Pingar5/master
Add various missing windows procedures
2023-11-24 13:23:47 +01:00
Jeroen van Rijn 89493b70a9 Merge pull request #2966 from evertonse/master
Check for llvm-config14 on unix
2023-11-24 13:20:25 +01:00
gingerBill c12eb3ec93 Improve returning a struct directly for certain ABIs; reuse the temp callee return struct memory when needed 2023-11-24 11:44:20 +00:00
gingerBill 7343ed0cac Merge branch 'master' of https://github.com/odin-lang/Odin 2023-11-24 10:57:25 +00:00
gingerBill 3102abf1aa mem zero rather than store to a union where the variant is of size zero 2023-11-24 10:57:18 +00:00
flysand7 03282c1234 [sys/linux]: Add epoll syscalls 2023-11-24 09:39:36 +11:00
gingerBill 490c8daedd Merge pull request #2970 from jakubtomsu/check-blank-ident-proc-params
Fix procedure parameter checking with blank identifiers
2023-11-23 21:04:18 +00:00
jakubtomsu e78ee90ac2 Remove code that skipped checking blank params 2023-11-23 20:58:26 +01:00
gingerBill f809788f75 Add missing type information for soa structs 2023-11-23 17:31:00 +00:00
gingerBill 0888c69b57 Remove unneeded typeid_of 2023-11-23 17:16:21 +00:00
gingerBill ab39644156 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-11-23 16:56:24 +00:00
gingerBill 4c1a9d2b3f Fix &x[i] of ^#soa types 2023-11-23 16:56:18 +00:00
Jeroen van Rijn f6308ab5b9 Merge pull request #2899 from jakubtomsu/more-sys-windows
More `core:sys/windows` bindings (primarily MiniDump and SHGetKnownFolderPath)
2023-11-23 16:26:29 +01:00
gingerBill 3baf8d92c3 Add assert to disallow -no-crt when importing core:c/libc 2023-11-23 01:20:19 +00:00
gingerBill 34065865a0 Merge pull request #2969 from Skytrias/Skytrias-text-edit-additions
`core:text/edit` Add setup_once and clear_all, clean up old code and add a few comments
2023-11-22 23:17:39 +00:00
Michael Kutowski 3d90e580c5 check to see if s.builder is nil 2023-11-23 00:04:06 +01:00
Michael Kutowski f635d3d8af forgot to use the old package name 2023-11-23 00:02:48 +01:00
Michael Kutowski 29f1b79d70 Add setup_once and clear_all, tidy up old code and add a few comments 2023-11-22 23:56:58 +01:00
gingerBill 955be66f1a Merge pull request #2894 from jakubtomsu/union-tag-intrinsics
New built-in procedures for unions
2023-11-22 16:26:15 +00:00
jakubtomsu a0e6ae6f33 return uintptr from type_union_tag_offset 2023-11-22 17:15:27 +01:00
Laytan Laats 08d032859f use start pos as end pos if end node is nil 2023-11-22 16:16:43 +01:00
gingerBill 4af77aeff6 Lower MAP_MIN_LOG2_CAPACITY from 6 to 3 (64->8) 2023-11-22 15:04:41 +00:00
Brennen Shaughnessy 6749639eb1 Add various missing windows procedures 2023-11-22 09:29:56 -05:00
Jeroen van Rijn 8a56bb3b5f Merge pull request #2944 from Kelimion/microarch-help
Add -microarch:?
2023-11-22 14:13:57 +01:00
gingerBill 37e79f9cca Merge pull request #2962 from FragmentedCurve/issue_2601
Return value of _umtx_op on FreeBSD wasn't checked correctly
2023-11-22 12:58:00 +00:00
gingerBill a4c64002c5 Merge pull request #2967 from reavencode/master
Add DwmGetWindowAttribute to core/sys/windows
2023-11-22 12:54:25 +00:00
Jeroen van Rijn 63b6e8216c Fix errant tab in alignment. 2023-11-22 02:57:43 +01:00
evertonse 3e7b5670fb Check for llvm-config14 on unix 2023-11-21 18:48:47 -03:00
reavencode e2e18324ed Add DwmGetWindowAttribute to core/sys/windows 2023-11-21 22:44:46 +01:00
Jeroen van Rijn 924039c01b Merge pull request #2965 from Skytrias/master
win32 add ToUnicode conversion
2023-11-21 21:09:46 +01:00
Michael Kutowski 2af2a035dc Merge branch 'odin-lang:master' into master 2023-11-21 21:05:16 +01:00
skytrias f97ccca514 added ToUnicode to win32 2023-11-21 21:01:05 +01:00
Jeroen van Rijn 25e9255157 Fix string_extension_position 2023-11-21 16:53:14 +01:00
laytan 2e64866838 fix self_cleanup causing join to fail 2023-11-20 21:23:12 +01:00
sean arooni b21b5ef222 Updated bindings and libs for Raylib 5.0 2023-11-19 13:43:26 -05:00
Paco Pascal d9fab5e824 Return value of _umtx_op on FreeBSD wasn't checked correctly 2023-11-18 20:56:22 -05:00
Jeroen van Rijn 0424404140 Merge pull request #2961 from Kelimion/unhandled_eof
Fix unhandled EOF in streaming io on Windows
2023-11-18 18:18:31 +01:00
Jeroen van Rijn db89c2ccd0 Remap EOF for Windows in stream proc 2023-11-18 18:13:56 +01:00
Jeroen van Rijn 0c97f6aa4e Fix unhandled EOF in streaming io on Windows 2023-11-18 18:01:14 +01:00
Jeroen van Rijn af78ad2a87 Merge pull request #2956 from Yawning/feature/crypto-cleanup
core/crypto: cleanup and bugfixes
2023-11-17 12:55:47 +01:00
Yawning Angel 9cc5cd9d40 core/crypto: Update the documentation (NFC) 2023-11-17 19:54:06 +09:00
Yawning Angel 59950bcad6 core/crypto: Exile keccak, md5 and sha1 to legacy
In an perfect world these would just be removed, but the world is
imperfect, and people are forced to interact/interface with things
that are broken.
2023-11-17 19:32:11 +09:00
Yawning Angel 4587a55486 core/crypto/sm3: API cleanup
- sm3.Sm3_Context -> sm3.Context
2023-11-17 19:32:09 +09:00
Yawning Angel 7640fb0483 core/crypto/shake: API cleanup
- shake.Shake_Context -> shake.Context
2023-11-17 19:31:51 +09:00
Yawning Angel b8f9deb3d8 core/crypto/sha3: API cleanup
- sha3.Sha3_Context -> sha3.Context
2023-11-17 19:31:51 +09:00
Yawning Angel 92aad90c6b core/crypto/sha2: API cleanup
- sha2.Sha256_Context -> sha2.Context_256
- sha2.Sha512_Context -> sha2.Context_512
2023-11-17 19:31:51 +09:00
Yawning Angel 506adfb105 core/crypto/sha1: API cleanup
-sha1.Sha1_Context -> Context
2023-11-17 19:31:51 +09:00
Yawning Angel e819eebc63 core/crypto/md5: API cleanup
- md5.Md5_Context -> md5.Context
2023-11-17 19:31:51 +09:00
Yawning Angel 841e73fcd5 core/crypto/keccak: API cleanup
- keccak.Keccak_Context -> keccak.Context
2023-11-17 19:31:51 +09:00
Yawning Angel aa821991b8 core/crypto/blake2: API cleanup and bug fixes
- blake2s.Blake2s_Context -> blake2s.Context
- blake2b.Blake2b_Context -> blake2b.Context
- Fix the BLAKE2s low level API (context type was incorrect)
- Support the configurable output size
2023-11-17 19:31:51 +09:00
Yawning Angel b71afdc3ee core/crypto/sha2: Refactor update/final
This is largely modeled off the SM3 versions of these routines, since
the relevant parts of the code are the same between SHA-256 and SM3,
and the alterations required to support SHA-512 are relatively simple.

The prior versions of update and the transform would leak memory, and
doing things this way also reduces the context buffer sizes by 1 block.
2023-11-17 19:31:51 +09:00
Yawning Angel bc139ba6c6 core/crypto/util: Remove, no longer needed 2023-11-17 19:31:51 +09:00
Yawning Angel 8af6da5de1 core/crypto/whirlpool: Remove, historical/exotic 2023-11-17 19:31:51 +09:00
Yawning Angel 0b86038482 core/crypto/tiger: Remove, historical/exotic 2023-11-17 19:31:51 +09:00
Yawning Angel 8d943f5902 core/crypto/streebog: Remove, exotic 2023-11-17 19:31:51 +09:00
Yawning Angel 32b27c690d vendor/botan/skein512: Remove, use SHA-3 2023-11-17 19:31:51 +09:00
Yawning Angel 3494a6dcd8 core/crypto/ripemd: Remove, historical/exotic 2023-11-17 19:31:51 +09:00
Yawning Angel 235fec23af core/crypto/md4: Remove, badly broken 2023-11-17 19:31:51 +09:00
Yawning Angel 97b066f112 core/crypto/md2: Remove, badly broken 2023-11-17 19:31:51 +09:00
Yawning Angel a99c0b3e4a core/crypto/jh: Remove, use SHA-3 2023-11-17 19:31:51 +09:00
Yawning Angel 2a6fb3a387 core/crypto/haval: Remove, badly broken 2023-11-17 19:31:51 +09:00
Yawning Angel 65204f13a8 core/crypto/groestl: Remove, use SHA-3 2023-11-17 19:31:51 +09:00
Yawning Angel 8438d66e6b core/crypto/gost: Remove, exotic 2023-11-17 19:31:51 +09:00
Yawning Angel 44c8da7bf2 core/crypto/blake: Remove, use BLAKE2b/BLAKE2s 2023-11-17 19:31:51 +09:00
Yawning Angel 41fdcfeecf core/crypto/sha2: Add SHA-512/256 2023-11-17 19:31:51 +09:00
Yawning Angel 70ba4b5321 core/crypto: Add more assertions to the low level API
Assertions here are "fine" and it matches what the code that has the
checks in init/update/final already does.
2023-11-17 19:31:51 +09:00
Yawning Angel 71da3ef925 core/crypto/sha2: Fix overflow for large amounts of hashed data 2023-11-17 19:31:51 +09:00
Yawning Angel 582bd760b7 core/crypto/shake: Add a TODO comment (NFC) 2023-11-17 19:31:51 +09:00
Yawning Angel e86bb3a795 core/crypto: Change hash asserts to panics
Assertions can be disabled, but at the point where cryptographic
anything is involved, a single branch has an infinitesimally small
performance impact.

The correct thing to do is to punch the caller in the face if they do
something that is blatantly incorrect, especially in a security critical
setting.
2023-11-17 19:31:51 +09:00
Yawning Angel e3a836f93c core/crypto/sha2: Fix hash_stream_224 and hash_stream_256 2023-11-17 19:31:51 +09:00
Yawning Angel 31b42a53fc core/crypto/siphash: Fix the low-level API
The `update` and `final` routines were written with the assumption that
update will only be called once, and that the underlying data does not
change between the calls.
2023-11-17 19:31:51 +09:00
Yawning Angel b71d3c739a core/crypto/sm3: Cleanups
- Use `encoding/endian`
- Use `math/bits`
- Add `@(private)` annotations to internals
2023-11-17 19:31:50 +09:00
Yawning Angel a162b51588 core/crypto/siphash: Cleanups
- Use `encoding/endian`
- Use `math/bits`
- Add `@(private)` annotations to internals
- Minor optimization
2023-11-17 16:53:29 +09:00
Yawning Angel 7c1119f217 core/crypto/_sha3: Cleanups
- Use `math/bits`
2023-11-17 16:53:29 +09:00
Yawning Angel b0397581db core/crypto/sha2: Cleanups
- Use `encoding/endian`
- Use `math/bits`
- Add `@(private)` annotations to internals
2023-11-17 16:53:29 +09:00
Yawning Angel c7dc1220b3 core/crypto/sha1: Cleanups
- Use `encoding/endian`
- Use `math/bits`
- Add `@(private)` annotations to internals
2023-11-17 16:53:29 +09:00
Yawning Angel d16acdc89c core/crypto/md5: Cleanups
- Use `encoding/endian`
- Use `math/bits`
- Add `@(private)` annotations to internals
2023-11-17 16:53:29 +09:00
Yawning Angel 1279ebe948 core/crypto/poly1305: Cleanups
- Use `encoding/endian`
2023-11-17 16:53:29 +09:00
Yawning Angel aa5a95a4d1 core/crypto/chacha20poly1305: Cleanups
- Use `encoding/endian`
2023-11-17 16:53:29 +09:00
Yawning Angel fa1cb28c8f core/crypto/chacha20: Cleanups
- Use `encoding/endian`
- Use `math/bits`
2023-11-17 16:53:29 +09:00
Yawning Angel 3902273d68 core/crypto/_blake2: Cleanups
- Use `encoding/endian`
- Add `@(private)` annotations to internals
- Add some descriptive comments in the unrolled compression functions
2023-11-17 16:53:29 +09:00
Yawning Angel 811132ccbd core/crypto/sm3: odinfmt (NFC) 2023-11-17 16:53:29 +09:00
Yawning Angel 391b3090c9 core/crypto/siphash: odinfmt (NFC) 2023-11-17 16:53:29 +09:00
Yawning Angel d50380709d core/crypto/sha3: odinfmt (NFC) 2023-11-17 16:53:29 +09:00
Yawning Angel 14a46c6d5e core/crypto/sha2: odinfmt (NFC) 2023-11-17 16:53:29 +09:00
Yawning Angel b4e3da84c5 core/crypto/sha1: odinfmt (NFC) 2023-11-17 16:53:29 +09:00
Yawning Angel 9d627e453a core/crypto/md5: odinfmt (NFC) 2023-11-17 16:53:29 +09:00
Yawning Angel d6e0e5d3f6 core/crypto/blake2: odinfmt (NFC) 2023-11-17 16:53:29 +09:00
Yawning Angel 12b370ddc1 repo: Add more test binaries to .gitignore 2023-11-17 16:53:29 +09:00
Laytan Laats 50f86dc14f Fix shadowing 2023-11-15 19:08:05 +01:00
Laytan Laats 9078ddaf5a Allow larger thread poly data
The poly data currently has the restriction of being less than a
pointer's size, but there is much more space in the `Thread.user_args`
array which can be utilized, this commit allows you to pass types that are
larger than pointer length as long as the total size of the poly data is
less than that of the `Thread.user_args`.
2023-11-15 19:08:03 +01:00
Jeroen van Rijn 8028033513 Merge pull request #2957 from laytan/no-crt-and-compile-assembly-on-darwin
-no-crt on darwin_arm64 and assembly compilation on darwin
2023-11-15 18:46:35 +01:00
Laytan Laats 6b9202dfbf -no-crt and assembly compilation on darwin 2023-11-15 18:06:27 +01:00
Jeroen van Rijn 04c928fb9e Clear up core:container/queue 2023-11-15 15:20:52 +01:00
Jeroen van Rijn 354d00963c Merge pull request #2954 from laytan/add-suggestion-passing-slice-into-variadic-arg
checker: suggest ..[]T when passing a slice to variadic arg ..T
2023-11-14 17:08:24 +01:00
Laytan Laats 9e5e49a65d checker: suggest ..[]T when passing a slice to variadic arg ..T 2023-11-14 16:56:52 +01:00
Jeroen van Rijn 8a849bd1bd Merge pull request #2953 from Yawning/feature/endian-use-intrinsics
feature/endian: use intrinsics
2023-11-14 15:34:04 +01:00
Yawning Angel 1b3fb11a31 core/encoding/endian: Tidy up a comment (NFC) 2023-11-14 23:07:51 +09:00
Yawning Angel b30ceab864 core/encoding/endian: Use intrinsics for loads/stores
- Use `intrinsics.unaligned_load`/`intrinsics.unaligned_store`
- Make all the routines contextless
- Add unchecked variants for code that "Knows What It Is Doing(TM)"
2023-11-14 23:07:51 +09:00
Jeroen van Rijn 3e1791aa5c Fix typos 2023-11-13 20:54:19 +01:00
flysand7 2cb5cc774d [vendor/x11]: Add build guards for other xlib files 2023-11-13 19:51:35 +11:00
flysand7 5f7843a13d [vendor/x11]: Correct system import for linux 2023-11-13 19:49:23 +11:00
flysand7 1b770fc3b2 [vendor/x11]: Correction on XPutImage definition 2023-11-13 19:45:26 +11:00
flysand7 79d3c3be66 [vendor/x11]: Add xlib utility functions, make compileable with -strict-style 2023-11-13 19:40:06 +11:00
flysand7 55d42492ac [vendor/x11]: Add some client to window management communication functions 2023-11-13 11:59:36 +11:00
flysand7 9737c2ad0b [examples]: Import x11/xlib instead of x11 2023-11-13 11:28:39 +11:00
Jeroen van Rijn b9a813a69d Merge pull request #2951 from FourteenBrush/master
Expose strings.ascii_set_* functions
2023-11-12 17:56:44 +01:00
FourteenBrush e0ac454ed0 Expose strings.ascii_set_* functions 2023-11-12 17:33:33 +01:00
flysand7 1db95aa09d [vendor/x11]: Fix XDefaultScreen 2023-11-12 21:30:45 +11:00
flysand7 c0bbe1e23d [vendor/x11]: Add a special type for mouse events 2023-11-12 21:09:41 +11:00
flysand7 9e35361eb8 [vendor/x11]: Fix definition for EventType 2023-11-12 20:59:07 +11:00
flysand7 cce42f4a6b [vendor/x11]: Fix XOpenDisplay 2023-11-12 20:48:32 +11:00
Laytan Laats bd19081543 fix nil exceptions with incomplete code parse
This makes the parser more fault tolerant because the different
parse_foo procs return nil when in an invalid state, which is fine most
of the time but when creating a node it would crash accessing its
position.
2023-11-12 01:53:14 +01:00
Jeroen van Rijn dd9b0ae4e5 Make pow2_f{16,32,64} contextless for consistency. 2023-11-11 14:06:48 +01:00
Jeroen van Rijn 3b5d28f0ee Merge pull request #2948 from flysand7/fix-do
[core]: Remove `do` keyword from the core library
2023-11-11 13:16:12 +01:00
Jeroen van Rijn 0ca39c70a5 Add -microarch:? to help text. 2023-11-11 13:07:12 +01:00
flysand7 270348b112 [core]: Remove do keyword from the core library 2023-11-11 20:36:38 +11:00
flysand7 e67473d89a [vendor/x11]: Add most of the basic xlib bindings 2023-11-11 20:20:40 +11:00
Laytan Laats 086478e8f2 fix -test-name flag 2023-11-11 02:34:59 +01:00
flga 5a8da5dcdb core:sys/linux: rename Perf_Read_Format_Flags 2023-11-10 19:41:01 +00:00
Jeroen van Rijn f6f4734fee Re-add break. 2023-11-10 20:22:20 +01:00
Jeroen van Rijn f903951016 Facored out get_default_microarchitecture
Moved `generic` -> `x86-64-v2` selection into its own procedure so that `llvm_backend.cpp` and `main.cpp` can share the same logic.
2023-11-10 20:14:00 +01:00
Jeroen van Rijn e19460cbd7 Add -microarch:? 2023-11-10 19:37:08 +01:00
flga 6de2b7700f core:sys/linux: make Perf_Read_Format a bitset 2023-11-10 12:58:53 +00:00
flysand7 4e145cf69c [sys/linux]: Fix time(2) syscall not taking a pointer on ARM64 2023-11-10 08:32:49 +11:00
flysand7 341087a82b [sys/linux]: Fix creat(2) syscall not returning file descriptor 2023-11-10 08:31:52 +11:00
flysand7 851fd1f8d1 Fix missing return statement 2023-11-10 08:30:38 +11:00
flysand7 ce43b04688 time on arm64 2023-11-10 05:33:25 +11:00
flysand7 ff1ab74b3c [sys/linux]: Fix missing return; Remove TODO for select() 2023-11-10 05:24:24 +11:00
flysand7 aed67ba665 [sys/linux]: Fix arch-specific issues 2023-11-10 05:14:42 +11:00
Jeroen van Rijn 70c1f9d0e1 Merge pull request #2937 from Kelimion/fix_net_split
Fix net.split_url
2023-11-09 17:02:48 +01:00
Jeroen van Rijn 761a079789 Fix net.split_url
Resolves issue #2924
2023-11-09 16:56:54 +01:00
Jeroen van Rijn 4116d66c59 Merge pull request #2936 from laytan/fix-linux-accept
fix linux.accept, addrlen should be a pointer to the length
2023-11-09 14:36:00 +01:00
Laytan fc6edf65d7 fix linux.accept, addrlen should be a pointer to the length instead of the length itself 2023-11-09 14:17:22 +01:00
flysand7 548ab2e1b6 [sys/linux]: utimensat takes array of two 2023-11-08 11:07:50 +11:00
flysand7 13a3c0e57c [sys/linux]: Fix syscalls: lseek, preadv, pwritev; Make read*/write* syscalls take byte slice instead of generic slice 2023-11-08 11:01:28 +11:00
Jeroen van Rijn 9834ceed42 Merge pull request #2933 from flga/master
sys/linux: munmap was not using the correct syscall
2023-11-08 00:37:32 +01:00
flga 4266a7c166 sys/linux: munmap was not using the correct syscall 2023-11-07 23:19:14 +00:00
Jeroen van Rijn 639cc9faa8 Merge pull request #2932 from laytan/use-verb-for-fmt-bit-set
allow integer verbs in fmt_bit_set
2023-11-07 21:22:11 +01:00
Laytan Laats e2cecafa66 allow integer verbs in fmt_bit_set 2023-11-07 21:09:42 +01:00
gingerBill 4bcb68a973 Merge pull request #2919 from jakubtomsu/d3d12-descriptor-heap-type-fix
Tiny fix to `DESCRIPTOR_HEAP_TYPE` from `vendor:directx/d3d12`
2023-11-07 10:47:43 +00:00
gingerBill 7131772754 Merge pull request #2927 from karl-zylinski/raylib-color-fixed-array
Raylib: use fixed array instead of struct for rl.Color
2023-11-07 10:47:28 +00:00
gingerBill c2e5602ee5 Merge pull request #2929 from divanburger/dial_bug_fix
Fix use of unitialized socket in socket_linux.odin#_dial_tcp_from_endpoint
2023-11-07 10:47:07 +00:00
Jeroen van Rijn 8714fd77a0 Temporarily disable vendor tests on macOS (botan) 2023-11-06 22:24:02 +01:00
Divan Burger c20839c461 Fix use of unitialized socket in socket_linux.odin#_dial_tcp_from_endpoint 2023-11-06 23:19:12 +02:00
Karl Zylinski 51229a29f8 Raylib: use fixed array instead of struct for rl.Color. This makes swizzling etc work, but the memory layout is still the same 2023-11-06 15:23:21 +01:00
Jeroen van Rijn 59675949da Merge pull request #2926 from karl-zylinski/raylib-shared-use-shared-runtime
RAYLIB_SHARED: use /NODEFAULTLIB:msvcrt
2023-11-06 15:11:25 +01:00
gingerBill 6564ce0fb0 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-11-06 13:59:12 +00:00
gingerBill c36ac4bdfd Bodge: fix matrix_flatten issue in Win64 ABI 2023-11-06 13:59:06 +00:00
Karl Zylinski 764ce2a4b0 RAYLIB_SHARED: use /NODEFAULTLIB:msvcrt instead of /NODEFAULTLIB:libcmt. This fixes linker errors. 2023-11-06 14:58:34 +01:00
flysand7 d400a5a108 [vendor/raylib]: Add pre-compiled libraries on linux; Minor changes in bindings 2023-11-05 15:03:08 +11:00
Jeroen van Rijn 744eb7c6d8 Delete test artifact. 2023-11-04 22:47:59 +01:00
Jeroen van Rijn 1b79e2ca5f Merge pull request #2921 from Kelimion/pow2
Add math.pow2_f{16,32,64}
2023-11-04 22:46:24 +01:00
Jeroen van Rijn 4cb0edc90b Work around LLVM idiocy. 2023-11-04 22:42:32 +01:00
Jeroen van Rijn 6201280468 Add math.pow2_f{16,32,64}, fast floating point 2^x where x is an integer. 2023-11-04 22:14:44 +01:00
jakubtomsu 9e36e28217 Update d3d12.odin 2023-11-04 17:40:13 +01:00
gingerBill 5edb2c5688 Fix #2913 2023-11-04 14:53:42 +00:00
gingerBill ce5e7998ba Add warning for things like 1.0 / some_int 2023-11-04 11:22:06 +00:00
flysand7 4a4aca6829 [math]: Fix the doc comments on F64_* constants 2023-11-04 20:30:14 +11:00
flysand7 f26ed39e86 [sys/linux]: Fix compilation errors and -strict-style errors 2023-11-04 13:57:28 +11:00
flysand7 574d2baf09 [sys/linux]: Documentation improvements 2023-11-04 13:35:13 +11:00
flysand7 1e622979f8 [sys/linux]: Add more syscalls 2023-11-04 12:46:45 +11:00
jakubtomsu 1f969fdc75 Fix tabs 2023-11-03 15:06:46 +01:00
gingerBill e206d6ba35 Add allocator parameter to fmt's aprint and aprintln 2023-11-03 13:26:33 +00:00
flysand7 7faa146004 WIP 2023-11-03 00:56:20 +11:00
gingerBill ef5eb4b612 A docs.odin explaining what are the required entities in core:runtime by the compiler 2023-11-01 13:59:39 +00:00
gingerBill 864b29f7f1 Add missing calls 2023-11-01 13:57:20 +00:00
Jeroen van Rijn 4d498b668a Merge pull request #2910 from laytan/fix-empty-pass-because-trailing-comma
Fix empty pass because of trailing comma
2023-11-01 12:11:37 +01:00
Karl Zylinski 75cb2c68cc Cleanup of json.clone_value 2023-11-01 00:57:27 +01:00
Karl Zylinski 942e91f94c Added temp allocator guard to json.marshal, in case we temp alloc when sorting map kesy 2023-11-01 00:46:01 +01:00
Karl Zylinski d8f06ed557 Reversed order of sort_maps_by_key check in marshal.odin to make PR comparison clearer. 2023-11-01 00:37:27 +01:00
Karl Zylinski a73ff00b02 Indentation fix. 2023-11-01 00:33:59 +01:00
Karl Zylinski a58a08c0c3 JSON: Option to sort marshaled maps before outputting. Also added a json.clone_value proc 2023-11-01 00:23:17 +01:00
Jeroen van Rijn 62d0b0ae72 Merge pull request #2911 from flysand7/sys-unix-net-fix
sys/linux: Fix EFAULT on recvfrom
2023-11-01 00:14:23 +01:00
flysand7 2c9ef2e1bc sys/linux: Fix EFAULT on recvfrom 2023-11-01 10:06:30 +11:00
Laytan 9b68671082 Fix empty pass because of trailing comma 2023-10-31 19:29:54 +01:00
jakubtomsu 5c533e477d Fix indentation and style 2023-10-31 16:32:53 +01:00
gingerBill 03ab6add5c Merge pull request #2897 from jcmdln/editorconfig
editorconfig: Use 2-column spaces in YAML
2023-10-31 12:45:22 +00:00
gingerBill 052633b73c Merge pull request #2876 from flysand7/new-sys-unix
sys/unix implementation
2023-10-31 12:43:28 +00:00
gingerBill bf9a8032a1 Merge pull request #2906 from karl-zylinski/slice-clone-loc
Added loc := #caller_location to slice.clone and slice.clone_to_dynamic
2023-10-31 12:26:03 +00:00
gingerBill eb261f5b28 Merge branch 'master' into new-sys-unix 2023-10-31 12:16:25 +00:00
Jeroen van Rijn f5febb633c Temporarily disable RTTI test on Windows. 2023-10-31 13:12:17 +01:00
Karl Zylinski d2ac3c2228 Make slice.clone and slice.clone_to_dynamic take a loc parameter 2023-10-30 21:19:21 +01:00
gingerBill 51caa930ca Merge pull request #2905 from odin-lang/llvm-17-custom-passes
Explicit Optimization Passes for LLVM-17 Passes
2023-10-30 15:00:55 +00:00
gingerBill b7af4e7f6b Explicitly write out the passes for each level and remove certain passes 2023-10-30 12:31:24 +00:00
Jeroen van Rijn 82cd30a145 Add test for RTTI 2023-10-30 13:06:45 +01:00
Jeroen van Rijn 8caae16113 Merge pull request #2902 from flysand7/vendor-darwin
Only build vendor:darwin on darwin
2023-10-30 10:12:36 +01:00
Jeroen van Rijn dc789c43b6 Merge pull request #2904 from AquaGeneral/master
Fixed typo "fot" and clarified slashpath.ext
2023-10-30 10:12:19 +01:00
Jeroen van Rijn 2e73fb25af Merge pull request #2903 from flysand7/i386-syscall-asm-fix
Fix-up inline asm for i386 syscalls emit
2023-10-30 10:07:56 +01:00
flysand7 1577d60d02 move darwin-specific packages in all_vendor_darwin.odin 2023-10-30 20:05:58 +11:00
Jesse Stiller 3bd1918c5e Fixed typo "fot" and clarified slashpath.ext 2023-10-30 11:57:44 +10:00
flysand7 263b3141b5 Merge branch 'master' into vendor-darwin 2023-10-30 10:32:47 +11:00
flysand7 82263a8b38 Merge branch 'master' into i386-syscall-asm-fix 2023-10-30 10:32:11 +11:00
gingerBill 61ad2a1345 TEST: Add sroa passes back 2023-10-29 20:45:19 +00:00
gingerBill d589914956 Ignore store undef calls 2023-10-29 20:43:02 +00:00
gingerBill f54a026acc Remove trailing comma 2023-10-29 20:33:29 +00:00
gingerBill fc06d7011d Use default passes without coro, openmp, and sroa passes 2023-10-29 20:31:53 +00:00
gingerBill ed7c9ec619 Test: use custom passes for -o:speed 2023-10-29 20:13:03 +00:00
gingerBill 1d9f6346d4 Force dynamic map calls on non-windows targets 2023-10-29 17:23:24 +00:00
flysand7 a3a3156ddd Fix-up inline asm for i386 syscalls emit 2023-10-30 02:03:35 +11:00
flysand7 70bd4a5ab6 Only build vendor:darwin on darwin 2023-10-29 15:03:48 +11:00
jakubtomsu 21247721b4 Add WaitFor* Ex variants 2023-10-28 20:39:46 +02:00
jakubtomsu 4436d24440 Merge branch 'odin-lang:master' into more-sys-windows 2023-10-27 19:13:04 +02:00
jakubtomsu 7a16618ec6 SHGetKnownFolderPath etc. 2023-10-27 19:12:49 +02:00
jakubtomsu 2b2abc6b9f Dbghelp 2023-10-27 19:12:25 +02:00
gingerBill 034aead930 Only make static map get calls inlineable outside of debug builds 2023-10-27 14:55:54 +01:00
gingerBill c8a5bafc6b Fix static map calls and default to them! 2023-10-27 14:53:48 +01:00
gingerBill 0a7b9338f6 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-10-27 13:03:28 +01:00
gingerBill bc0fa1240b Disable using giant packed struct for type info table for the time being 2023-10-27 13:03:21 +01:00
Jeroen van Rijn 292398dbe2 Merge pull request #2896 from thetarnav/js-rand
Add system_random and random_bytes for js target
2023-10-27 12:52:27 +02:00
Damian Tarnawski 49da19e013 Replace Math.random with crypto.getRandomValues for _system_number 2023-10-27 12:06:35 +02:00
jakubtomsu 056840975f Merge branch 'odin-lang:master' into union-tag-intrinsics 2023-10-27 11:23:37 +02:00
jakubtomsu 160b23f991 Remove len,cap,min,max and implement type_union_base_tag_value, type_union_variant_count 2023-10-27 11:23:26 +02:00
flysand7 bbd4c1054e convert spaces to tabs 2023-10-27 11:30:13 +11:00
jcmdln 152ac61faf editorconfig: Use 2-column spaces in YAML 2023-10-26 20:18:48 -04:00
flysand7 4d65b1ab9c Implement new sys/unix package 2023-10-27 10:51:21 +11:00
Damian Tarnawski 8b2f62000a Use wasmMemoryInterface for rand_bytes 2023-10-27 00:50:29 +02:00
Damian Tarnawski 166803a2a5 Rename rand to rand_f64 2023-10-27 00:18:41 +02:00
Damian Tarnawski 11a2b2a942 Add system_random and random_bytes for js target 2023-10-27 00:05:38 +02:00
gingerBill 0a492acaa1 Merge pull request #2891 from flysand7/glfw-fixes
GLFW binding fixes
2023-10-26 15:22:16 +01:00
gingerBill e86d7f1fb0 Merge pull request #2895 from jakubtomsu/fix-builtin-const-int-checks
Fix incorrect type condition in some built-in procs
2023-10-26 15:21:47 +01:00
Jeroen van Rijn 962d599996 Fix reading from /sys/ pseudo fx 2023-10-26 14:30:04 +02:00
jakubtomsu ba536d67b4 Change and to or 2023-10-25 22:17:38 +02:00
jakubtomsu a573d076e4 Delete test.odin 2023-10-25 20:24:42 +02:00
jakubtomsu 625cb03284 Rename type_union_tag to type_union_tag_type 2023-10-25 20:23:24 +02:00
jakubtomsu 2f8d60ec47 Fix indentation 2023-10-25 17:33:27 +02:00
jakubtomsu 37e33af342 Merge branch 'odin-lang:master' into union-tag-intrinsics 2023-10-25 15:47:39 +02:00
jakubtomsu f7e0516254 Fix the intrinsics, add min and max 2023-10-25 15:47:18 +02:00
gingerBill 8e4bdcfb98 Remove disabled attribute from unimplemented 2023-10-25 11:41:24 +01:00
gingerBill f3f0ab6e2c On -disable-assert, panic will still work but not print the caller location 2023-10-25 11:34:09 +01:00
jakubtomsu eafe57e923 Merge branch 'odin-lang:master' into union-tag-intrinsics 2023-10-25 09:46:38 +02:00
jakubtomsu c76ab138eb Naming, use variant index instead of tag 2023-10-24 22:15:33 +02:00
gingerBill 5a771732bd Merge pull request #2888 from thetarnav/wasm-i64
Correct loadI64 and storeI64 methods in runtime.js
2023-10-24 11:45:08 +01:00
gingerBill 9b6647a019 Merge pull request #2886 from flysand7/linux-no-crt
Allow no CRT linking on Linux
2023-10-24 11:32:23 +01:00
flysand7 7e40a5a711 Change bool to b32 2023-10-24 10:28:11 +11:00
flysand7 27cbd0d931 GLFW binding fixes 2023-10-24 10:23:38 +11:00
jakubtomsu 16c176dc89 Implement new union intrinsics and add support for len/cap 2023-10-23 22:03:06 +02:00
Jeroen van Rijn 12c316cd6b Merge pull request #2889 from jakubtomsu/fix-simd-bit-and-not-typo
Fix bit_* calls in `core:simd/x86`
2023-10-22 22:24:28 +02:00
jakubtomsu b06583133a Fix the other bit_* intrinsic calls 2023-10-22 20:59:19 +02:00
jakubtomsu a2e6fc5909 change and_not to bit_and_not 2023-10-22 20:52:35 +02:00
Damian Tarnawski 058065ce75 Correct loadI64 and storeI64 methods in runtime.js 2023-10-22 18:54:52 +02:00
Jeroen van Rijn 75a2015260 Add clear_soa (for #soa[dynamic]T) 2023-10-22 13:21:22 +02:00
Jeroen van Rijn 18776aa6b9 Merge pull request #2887 from SentientCoffee/map-shrink-return-values
Fix a `shrink(map[T]U)` bug in the core lib
2023-10-21 20:17:35 +02:00
Daniel 4cf48daa75 Fix a shrink(map[T]U) bug in the core lib
Fixed this error from `core:runtime`:
```odin
odin/core/runtime/core_builtin.odin(387:3) Error: Expected 2 return values, got 1 (Allocator_Error)
        return map_shrink_dynamic((^Raw_Map)(m), map_info(T), loc)
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
```
2023-10-21 13:27:56 -04:00
flysand7 361aeac0cc remove binary 2023-10-22 01:59:04 +11:00
flysand7 2e66d621b5 Implement -no-crt entry point on linux 2023-10-22 01:58:35 +11:00
Jeroen van Rijn 566a11a585 Merge pull request #2884 from flysand7/editor-config
Editor config
2023-10-20 15:46:14 +02:00
flysand7 abb9fb3345 wildcard editorconfig 2023-10-21 00:32:08 +11:00
flysand7 05a9652f76 convert procs_windows_amd64.asm to tabs 2023-10-20 23:31:09 +11:00
flysand7 ba5df8edca add .editorconfig 2023-10-20 23:30:00 +11:00
gingerBill 9afee7e8d2 Merge pull request #2883 from flysand7/chkstk
Implement stack probing on windows.
2023-10-20 11:32:22 +01:00
flysand7 c458186f68 Implement __chkstk 2023-10-20 21:12:49 +11:00
Jeroen van Rijn f9da0a59e4 Merge pull request #2882 from thetarnav/js-time
Fix calling `time.now()` in wasm js runtime
2023-10-19 19:23:18 +02:00
Damian Tarnawski c19af95db0 Fix calling time.now() in wasm js runtime 2023-10-19 18:45:04 +02:00
Jeroen van Rijn 840459bdb0 Merge pull request #2879 from jcmdln/license-audit
Ensure required licenses are in distributable bundles
2023-10-19 00:45:01 +02:00
jcmdln 798660c007 Ensure required licenses are in distributable bundles 2023-10-18 17:20:12 -04:00
Jeroen van Rijn c039977048 Merge pull request #2878 from laytan/remove-build-artifacts
remove build artifacts
2023-10-18 18:47:48 +02:00
Laytan 7a9737b3d4 remove build artifacts 2023-10-18 18:31:07 +02:00
Jeroen van Rijn 0f5d562625 Merge pull request #2873 from jcmdln/fix-linux-releases
Linux: Copy and link against libLLVM*.so to fix releases
2023-10-17 02:27:06 +02:00
jcmdln 21f9e7f5e5 Fix Linux release pipeline which expects to bundle libLLVM*.so 2023-10-16 16:33:26 -04:00
gingerBill 6ee7b05b27 Merge pull request #2850 from jcmdln/linux-llvm-17
Support LLVM >=17.0.1 on Darwin and Linux
2023-10-16 16:15:59 +01:00
gingerBill e4c7e9903e Merge pull request #2841 from Ldash4/upstream/fix-enet-bindings
Make enet packet flags use bitset
2023-10-16 11:37:39 +01:00
gingerBill a96100d875 Merge pull request #2864 from flysand7/vendor-shared-fix
Allow for shared object linking of vendor libraries
2023-10-16 11:37:19 +01:00
gingerBill 10c67051f2 Merge pull request #2870 from reluctant-git-user/patch-1
Update stdio.odin
2023-10-16 11:34:11 +01:00
gingerBill a3fbd09ef9 Merge pull request #2871 from reluctant-git-user/master
Update microui.odin; slider 'step' parameter was not working
2023-10-16 11:33:51 +01:00
jcmdln 51248270e1 Remove [[ for POSIX shell support 2023-10-15 12:18:51 -04:00
jcmdln 8fe431e53e Only check LLVM_VERSION_MAJOR >= 17 for PassBuilder inclusion 2023-10-15 12:03:56 -04:00
reluctant-git-user 61a7d88490 Update microui.odin; slider 'step' parameter was not working 2023-10-15 17:36:15 +03:00
reluctant-git-user 496765c043 Update stdio.odin
snprintf() prototype fix
2023-10-15 17:09:41 +03:00
Jeroen van Rijn a62039882e Merge pull request #2867 from flysand7/linux-asm
Implement foreign asm (x86) imports for linux and osx
2023-10-15 12:53:32 +02:00
flysand7 a2a05e40e6 implemented foreign asm imports on linux/osx 2023-10-15 21:25:55 +11:00
gingerBill 45d08ea992 Merge pull request #2861 from seventh-chord/master
llvm: specify calling convention on call
2023-10-15 11:24:42 +01:00
gingerBill c9c7aa2e90 Merge pull request #2838 from GoNZooo/gonz.return-out-of-memory-in-json-parse
fix(json): return `.Out_Of_Memory` when out of memory on parse
2023-10-15 11:23:34 +01:00
jcmdln d0037fcf6b Allow running in POSIX shells 2023-10-14 22:01:38 -04:00
jcmdln b25fba6175 Fix typo in GIT_SHA collection 2023-10-14 18:10:42 -04:00
jcmdln afcdbf1ba6 Don't implicitly try 'llvm-config-14', try fallback or set LLVM_CONFIG; Restore FreeBSD llvm-config discovery 2023-10-14 18:07:20 -04:00
jcmdln 8eff75a484 Hoist GIT_SHA discovery 2023-10-14 17:51:28 -04:00
jcmdln e232cabfab Remove extra newlines 2023-10-14 17:46:34 -04:00
jcmdln e5ed388191 Ensure user defined LLVM_CONFIG is respected 2023-10-14 17:45:27 -04:00
jcmdln c0ac3de272 Hunt for supported 'llvm-config' executable 2023-10-14 17:41:19 -04:00
jcmdln abde9a99c3 Fix typos in references to OS_ARCH, OS_NAME 2023-10-14 17:32:41 -04:00
jcmdln bdc74a03c0 Refactor to improve handling of LLVM_VERSION checks 2023-10-14 16:58:34 -04:00
gingerBill 2783461e69 Merge pull request #2847 from thetarnav/js-runtime-patch
Update wasm `runtime.js`
2023-10-14 19:58:28 +01:00
flysand7 0f9c75dc08 Fix miniaudio config; add trailing commas 2023-10-14 21:47:38 +11:00
flysand7 cf937c6341 add 'shared' config to vendor libraries 2023-10-14 21:21:34 +11:00
flysand7 77210ffa56 rename dynamic to shared 2023-10-14 20:26:34 +11:00
Morten Hauke Solvang fb5bb1cd83 llvm: specify calling convention on call
Looks like the compiler only was specifying the calling convention on
function declarations, but not on function calls.
But LLVM seems to produce "bad" code when optimizing with level -O2
unless you specify the same calling convention on the call too.
2023-10-13 21:21:54 +02:00
gingerBill 23c4615f5e Disallow direct return a compound literal of a slice with elements 2023-10-13 12:19:48 +01:00
jcmdln fa2b68dac6 Fix MAX_LLVM_VERSION panic messages 2023-10-12 01:47:51 -04:00
jcmdln bd86cb22e0 Support LLVM >=17.0.1 on Darwin and Linux 2023-10-11 21:06:42 -04:00
gingerBill ec2635131b Merge pull request #2853 from RehkitzDev/master
added webgl GetParameter
2023-10-10 16:03:06 +01:00
gingerBill 6b3cfdfb2b Merge pull request #2856 from fabiansperber/fix-odin-parser-or_branch
core/odin Add `or_break` and `or_continue` semicolon handling
2023-10-10 16:02:56 +01:00
Fabian Sperber bce66e3b42 Add or_break and or_continue to the list of tokens that have an automatic semicolon added at the end of the line 2023-10-09 21:48:04 +02:00
gingerBill cffa035c1b Add ERROR_BLOCK() to check_unique_package_names 2023-10-09 13:36:15 +01:00
Rehkitzdev 1097192554 added webgl GetParameter 2023-10-08 04:02:55 +02:00
Jeroen van Rijn 0c10b951a9 Merge pull request #2833 from simonwashere/darwin_net_interface
darwin  enumerate_interfaces
2023-10-07 15:47:21 +02:00
Damian Tarnawski ab2907cd51 Correct stripNewline function 2023-10-06 20:11:25 +02:00
Damian Tarnawski ea8d3d4531 Define stripNewline function 2023-10-06 20:06:43 +02:00
Damian Tarnawski 256e4a0081 Don't pass true for littleEndian where it's not needed. 2023-10-06 20:03:26 +02:00
simon e7adfff9bf bugfix: darwin net flags 2023-10-06 16:41:13 +01:00
Damian Tarnawski 721c9e2c97 Fix typo 2023-10-06 17:26:39 +02:00
Damian Tarnawski 42c7e39c99 Update wasm runtime.js
- polyfill `Math.ldexp` method
- pass Math mathods streight through to exports object
  (they don't use `this`)
- Don't pass `"utf-8"` encodings to `TextEncoder` and `TextDecoder`
  (encoder doesn't take params and decoder has utf-8 as default)
2023-10-06 17:18:31 +02:00
gingerBill 96778c69bc Merge pull request #2836 from jakubtomsu/fix-zero-length-enum-array
Allow zero-length enum array (to stay consistent with `[0]T`)
2023-10-06 15:06:40 +01:00
L4 4adcc403c2 Make enet packet flags use bitset 2023-10-02 22:32:22 +02:00
gingerBill 2cca005056 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-10-02 20:59:49 +01:00
gingerBill d27109640e Partial pseudo-revert 2023-10-02 20:59:43 +01:00
Rickard Andersson 931e0d4687 cleanup: remove unused import 2023-10-02 15:21:09 +03:00
Rickard Andersson 2e3224a138 testing: add test for Out_Of_Memory return 2023-10-02 15:17:06 +03:00
Rickard Andersson cfa3765d50 fix: guard against empty key value in parse_object_body 2023-10-02 15:10:12 +03:00
Jeroen van Rijn 1287e8c734 Merge pull request #2839 from Tetralux/aprintf-ally
[fmt] Add allocator parameter to `fmt.aprintf`
2023-10-02 11:23:26 +02:00
Rickard Andersson 11e884aec5 docs: add note about checking for alloc error 2023-10-02 12:20:18 +03:00
Rickard Andersson 55a1ba710b fix: use runtime.map_insert to not overallocate 2023-10-02 11:59:37 +03:00
Rickard Andersson 0a8b266c71 fix(json): return .Out_Of_Memory when out of memory on parse
Previously this would silently simply not do anything and the object
would be empty/incomplete when parsed instead.
2023-10-02 11:50:16 +03:00
Tetralux 7a6ac3ea92 [fmt] Add allocator parameter to fmt.aprintf
This allows you to do `fmt.aprintf("Hello, %v!", name, allocator = ally)`.
2023-10-02 02:46:26 +00:00
jakubtomsu 394c12f68d Remove unnecessary check zero fields check 2023-10-01 13:13:09 +02:00
jakubtomsu 1a57ad233d Fix field count in enumerated array type info 2023-10-01 13:09:08 +02:00
jakubtomsu c268463413 Allow zero-length enumerated arrays 2023-10-01 12:21:44 +02:00
Jeroen van Rijn 81fe93127d Make core:net test os.exit(1) on failure. 2023-09-30 22:47:49 +02:00
Jeroen van Rijn aa5716d3f9 Allow any order of query strings in net.join_url tests. 2023-09-30 22:36:50 +02:00
gingerBill f9c6f6856b Fix #2261 2023-09-30 20:32:24 +01:00
gingerBill b9cc2606f2 Remove default value 2023-09-30 20:26:52 +01:00
gingerBill 5023313c03 Minor cleanups to the core library 2023-09-30 20:26:04 +01:00
simon 98f9f7d42e darwin _enumerate_interfaces 2023-09-30 20:09:29 +01:00
gingerBill 3e0fd63682 Fix or_break code generation issue 2023-09-30 18:58:28 +01:00
gingerBill 1f643b5816 Remove -vet-extra 2023-09-30 18:29:18 +01:00
gingerBill 14adcb9db8 Use or_break and or_continue where appropriate in the core library 2023-09-30 15:34:39 +01:00
gingerBill 41a22bd83d or_break and or_continue to core:odin packages 2023-09-30 15:09:59 +01:00
gingerBill 648b83d6ea Add or_break and or_continue constructs 2023-09-30 15:04:17 +01:00
Jeroen van Rijn 4e97b83312 Merge pull request #2832 from Kelimion/big_int_literal_hex
Change large math/big test literals to hex.
2023-09-30 11:30:31 +02:00
Jeroen van Rijn 07cd6cd670 Change large math/big test literals to hex.
In September 2022, the Python team addressed a possible DoS issue converting big integers to and from base 10 strings: https://github.com/python/cpython/issues/95778

Converting to/from base 10 is a quadratic operation, so they limited it to 4300 digits: https://discuss.python.org/t/int-str-conversions-broken-in-latest-python-bugfix-releases/18889/83

Github CI still uses an old Python version which parsed our test suite just fine. This patch converts them to hex literals to ensure our test doesn't break when Github does update to a non-vulnerable Python version released after September 2022.
2023-09-30 11:16:36 +02:00
gingerBill 3fae38a2f8 Correct get_file_line_as_string to fix #2829 2023-09-29 12:17:15 +01:00
gingerBill 23054138c2 Remove debug message 2023-09-29 12:12:14 +01:00
gingerBill 63f755554b Rename simd bitwise operations from intrinsics.simd_and to intrinsics.simd_bit_and etc 2023-09-28 16:42:08 +01:00
gingerBill 2ac463f003 Rename bitwise operations to bit_or etc 2023-09-28 16:40:01 +01:00
gingerBill 77227c2ff5 Merge pull request #2805 from odin-lang/llvm-17
Support LLVM 17.0.1
2023-09-28 16:01:26 +01:00
gingerBill 2afccd7fbd Revert llvm@17 to llvm@13 on macOS 2023-09-27 14:09:08 +01:00
gingerBill 991181104b Update CI macOS to use llvm@17 2023-09-27 14:06:51 +01:00
gingerBill 70aff9fbb2 Update src/build_settings.cpp
Co-authored-by: Laytan Laats <laytanlaats@hotmail.com>
2023-09-27 14:01:45 +01:00
gingerBill 2370884722 Merge pull request #2827 from Lperlind/fixup-bad-rand-merge
Fixed up missing output for rand
2023-09-27 11:45:00 +01:00
gingerBill c529b1b73a Generate the global type info member values even if the count is 0 2023-09-27 11:44:29 +01:00
gingerBill acc29fbceb Merge branch 'master' into llvm-17 2023-09-27 11:38:11 +01:00
Lucas Perlind 7cc5177078 Fixed up missing output for rand examples 2023-09-27 16:34:19 +10:00
gingerBill fc93ea7aa3 Fix #2820 2023-09-26 15:15:31 +01:00
gingerBill 4c22982732 Rename files to not start with _ 2023-09-26 13:15:21 +01:00
gingerBill fb935541c9 Fix #2809 - disallow files to start with _ 2023-09-26 13:10:18 +01:00
gingerBill 47023b2e6c Fix #2812 2023-09-26 13:04:47 +01:00
gingerBill f4a390201c Fix #2819 2023-09-26 13:02:40 +01:00
gingerBill d358ebd7e6 Potentially fix race condition #2463 #2814 2023-09-26 12:57:26 +01:00
gingerBill 9711dd1381 Fix #2816 2023-09-26 12:41:33 +01:00
gingerBill 4c328d83ba Fix #2817 2023-09-26 12:40:35 +01:00
gingerBill 9911b132d2 Fix #2818 (enforce #partial label: switch) 2023-09-26 12:35:24 +01:00
gingerBill 534e5978d8 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-09-26 12:21:49 +01:00
gingerBill c08bf1204f Add cstring specific comparison procedures to fix comparisons like cstring("") != cstring(nil) 2023-09-26 12:21:43 +01:00
gingerBill 94d68c1f22 Fix ptr != ptr type cast problem in LLVM 17 2023-09-26 11:58:12 +01:00
gingerBill 0ca379ed03 Fix typo 2023-09-25 17:06:00 +01:00
gingerBill 0ed2d8b127 Merge pull request #2813 from mtarik34b/fix-mismatches-with-max-error-count-flag
Fix various mismatches with the specified -max-error-count flag
2023-09-25 16:44:05 +01:00
gingerBill 3bee571e1f Use giant struct only in 17 2023-09-25 16:43:28 +01:00
Tarık B 0b78544796 Fix various mismatches with the specified -max-error-count flag 2023-09-22 17:12:16 +02:00
gingerBill 361f71deed Use llvm_const_array wrapper 2023-09-22 15:35:24 +01:00
gingerBill 61f39ae0a0 Use a giant packed struct working for type info table 2023-09-22 15:32:32 +01:00
gingerBill 082324d7b9 Begin work on making the type info table be constantly initialized 2023-09-22 14:39:51 +01:00
gingerBill 5e99289d7a Minor clean up 2023-09-22 12:11:39 +01:00
gingerBill e14a4e79ae Merge pull request #2808 from karl-zylinski/write-128-bit-int-buf-size
Fix for crash when using io.write_u128/io.write_i128 due to buffer being too small
2023-09-22 11:38:07 +01:00
Karl Zylinski 39c85cafa2 Fix for crash when using io.write_u128/io.write_i128 due to buffer being too small 2023-09-22 08:26:41 +02:00
gingerBill fa6be4ec58 Revert build.bat 2023-09-21 17:27:17 +01:00
gingerBill 25b8461bfb Update LLVM-C.dll 2023-09-21 17:09:00 +01:00
gingerBill ac43dd0777 Remove debug text 2023-09-21 17:08:45 +01:00
gingerBill 963559676e Fix build times for -o:<string> in LLVM-17 2023-09-21 16:48:00 +01:00
gingerBill 20ce8c4c51 Allow for zero passes 2023-09-21 12:45:11 +01:00
gingerBill 098c09835b Add ODIN_SANITIZER_FLAGS global constant 2023-09-21 11:34:40 +01:00
gingerBill 4aa9d34b3d Add attributes for sanitize_memory and sanitize_thread 2023-09-21 11:20:13 +01:00
gingerBill 38d2a0ddb9 Add sanitize_address attribute to all normal packages 2023-09-21 11:13:26 +01:00
gingerBill 735bb147e2 Add asan lib for Windows 2023-09-21 11:03:25 +01:00
gingerBill 7a511308ef Re-configure the new pass system 2023-09-21 10:54:02 +01:00
gingerBill bc401fa392 Fix wrong import due to grep-replace 2023-09-21 10:41:42 +01:00
gingerBill 96fbafe359 Update ABI breaking changes for f16 types (due to LLVM 15+) 2023-09-21 10:38:44 +01:00
gingerBill e82b0ea4cd Add -o:aggressive for LLVM 17 2023-09-21 09:48:53 +01:00
gingerBill 2160484b62 Support -sanitize:<string> for address, memory, thread for LLVM 17 2023-09-21 09:40:33 +01:00
gingerBill f0ab58dfbb Begin work with adding the new pass system 2023-09-20 10:39:48 +01:00
gingerBill c23b5825bb Merge pull request #2804 from bytesiz3d/fix-unquote-string
Fix bug with index increment in `core:encoding/json.unquote_string`
2023-09-20 10:16:51 +01:00
Abdelrahman Farid f1872f495a Fix bug with index increment in unquote_string 2023-09-19 22:19:05 +03:00
Abdelrahman Farid 9ed36445b9 Add test for utf8 multibyte strings 2023-09-19 22:18:23 +03:00
gingerBill 5043c10d70 Check for LLVM versions 2023-09-19 16:21:34 +01:00
gingerBill e748d2f2af Update to LLVM-17 2023-09-19 16:15:26 +01:00
gingerBill ecde06e3a3 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-09-19 15:12:50 +01:00
gingerBill 3505c1d790 Fix constant literals using the wrong type 2023-09-19 15:12:44 +01:00
gingerBill 150a72f75e Merge pull request #2769 from RLGingerBiscuit/json-marshal-stuff
json.marshal: Don't output spaces if pretty=false
2023-09-18 10:47:02 +01:00
gingerBill f96579824b Merge pull request #2791 from ftphikari/master
[core:sys/windows] Added couple of procedures
2023-09-15 11:22:30 +01:00
gingerBill 2aa3cabd85 Merge pull request #2782 from AbdelHameed-Hamed/dxc-unix-bindings
Add unix bindings for DXC.
2023-09-14 20:08:49 +01:00
AbdelHameed-Hamed 06d26df046 Move API into one file and use "system" calling convention, and move data definitions into platform specific files. 2023-09-14 19:24:44 +02:00
gingerBill 6e49b1cad7 Merge pull request #2784 from laytan/fmt-memory-sizes
Add formatting of bytes into the best unit of measurement
2023-09-14 11:00:48 +01:00
gingerBill d928f425ec Merge pull request #2789 from fabiansperber/fix-odin-parser
Fix issues with core:odin parser
2023-09-14 11:00:11 +01:00
gingerBill ed3a9aed12 Merge pull request #2790 from Lperlind/master
Further improve on NSBlock
2023-09-14 10:59:48 +01:00
hikari aaccaa19bf [vendor:directx/d3d11] Added CalcSubresource helper macro 2023-09-13 23:47:18 +03:00
gingerBill 35857d3103 Fix wrong type 2023-09-12 23:01:49 +01:00
Laytan Laats d47b0eeee7 update doc 2023-09-12 16:51:21 +02:00
Laytan Laats 287beaff35 use KiB etc. instead of KB 2023-09-12 16:49:42 +02:00
gingerBill 8e9d1c7ebf Make procedures contextless where possible 2023-09-12 11:52:05 +01:00
gingerBill 53380632a1 Swap order of prev and next 2023-09-12 11:44:54 +01:00
gingerBill 984a95b8c7 Update Tilde 2023-09-11 23:36:39 +01:00
gingerBill 72118fcc6a Fix #2794 (Fix typo for IsWindowState) 2023-09-11 16:14:28 +01:00
hikari 1b06f809de [core:sys/windows] Added SuspendThread 2023-09-08 00:02:27 +03:00
hikari 19fe508fb2 [core:sys/windows] Added couple of procedures 2023-09-07 23:58:19 +03:00
gingerBill aaaff9b66c Fix bug: Disallow non-specialized polymorphic in typeid assignment 2023-09-06 17:33:38 +01:00
gingerBill c660b43105 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-09-06 16:55:50 +01:00
Lucas Perlind 92b24fd02d Further improve on NSBlock
* Correct setting the isa of the NSBlock
* Make global blocks managed by the odin runtime
* Make local blocks copy to a malloc block that is managed by the objc runtime
* Add method to create blocks that take a paramater
2023-09-06 15:03:17 +10:00
Fabian Sperber 886d0de040 Remove auto_cast from field_flags
- auto_cast is parsed as its own expression
2023-09-05 23:14:55 +02:00
Fabian Sperber 16d797cb01 Add #const field flag 2023-09-05 22:57:40 +02:00
Fabian Sperber bbf9678756 Fix parsing #force_inline call expression with or_return 2023-09-05 22:35:30 +02:00
gingerBill d60c619c44 Merge pull request #2785 from DanielGavin/odin-core-reverse
Add #reverse to `odin/parser`.
2023-09-05 18:57:08 +01:00
gingerBill e7abc05931 Merge pull request #2787 from laytan/fix-commonmark
fix commonmark import
2023-09-05 18:56:58 +01:00
Laytan Laats 12dd912ce9 fix commonmark import 2023-09-04 20:48:03 +02:00
DanielGavin 64a63b3879 Add #reverse to odin/parser. 2023-09-03 16:15:03 +02:00
Laytan Laats 93caf5b311 use memory formatting in tracking allocator doc 2023-09-01 22:05:04 +02:00
Laytan Laats aab2fa1af9 fix test case 2023-09-01 19:53:24 +02:00
Laytan Laats 4cf176de0b actually run the test 2023-09-01 19:51:53 +02:00
Laytan Laats 735cfcd290 Add formatting of bytes into the best unit of measurement 2023-09-01 19:17:07 +02:00
gingerBill 4aa4317c28 Merge pull request #2780 from laytan/fix-ternary-with-union-of-enum
fix #2779 ternary with a union of enum
2023-08-31 15:19:27 +01:00
AbdelHameed-Hamed d0ef6d2a9b Add unix bindings for DXC. 2023-08-31 11:50:29 +02:00
Jeroen van Rijn 434c84043d Merge pull request #2781 from Lperlind/master
Add more darwin bindings
2023-08-31 10:08:02 +02:00
Lucas Perlind 747116aeb0 Add more darwin bindings 2023-08-31 17:37:32 +10:00
Laytan Laats a182dc78f4 fix #2779 ternary with a union of enum 2023-08-31 02:31:11 +02:00
gingerBill 1a316c8a18 Merge pull request #2776 from Lperlind/master
Add more NS bindings and correctly link NS block
2023-08-30 01:48:06 +01:00
Lucas Perlind 46e7fa52b3 Add more NS bindings and correctly link NS block 2023-08-30 10:18:17 +10:00
Jeroen van Rijn 52ea3748b4 Merge pull request #2775 from laytan/fix-overlapped-entry-type
Fix the OVERLAPPED_ENTRY type definition
2023-08-29 10:56:01 +02:00
Laytan Laats 0a2678973b Fix the OVERLAPPED_ENTRY type definition 2023-08-29 10:44:21 +02:00
gingerBill 04129c5bd5 Update Tilde 2023-08-27 23:45:39 +01:00
Jeroen van Rijn 6f363dcae3 Merge pull request #2774 from Pix-xiP/master
Updating to be the correct function name in documentation.
2023-08-27 16:47:45 +02:00
Pix 8c4bd76280 Updating to be the correct function name in documentation. 2023-08-27 21:03:49 +08:00
Jeroen van Rijn 92f385e7b5 Merge pull request #2773 from Tetralux/minor-net-cleanup
[net] Assorted cleanup
2023-08-27 13:37:56 +02:00
Jeroen van Rijn ac4e259e29 Merge pull request #2771 from laytan/fix-queue-reserve
fix queue reserve always doubling in size when there is enough space
2023-08-26 19:23:17 +02:00
Laytan Laats 076b20a9a5 fix queue reserve always doubling in size when there is enough space 2023-08-26 19:09:04 +02:00
gingerBill 0b0230adce Update Tilde 2023-08-26 13:14:49 +01:00
Tetralux e51915a529 [net] Assorted cleanup
- Remove some old comments

- Fix some doc comments

- Improve some doc comments

- Unify name of the errors related to UDP packet sizes
   (i.e: recv buffer too small, and message too big to send)
2023-08-26 11:47:03 +00:00
RLGingerBiscuit 187a475b84 json.marshal: Don't output spaces if pretty=false 2023-08-25 17:33:41 +01:00
gingerBill 39c0a619eb Merge pull request #2767 from Lperlind/master
Correct run loop linking
2023-08-25 11:20:07 +01:00
Lucas Perlind 29f7eaad78 Correct run loop linking 2023-08-25 13:46:03 +10:00
gingerBill 8f086a6957 Add NSSet 2023-08-24 23:31:21 +01:00
gingerBill 8f512001b6 Shut up the type checker 2023-08-24 16:49:56 +01:00
gingerBill 1d25522a3b Update vendor:darwin/Foundation to implement Event, Color, Screen, and other fixes 2023-08-24 16:43:13 +01:00
Jeroen van Rijn fdb538538a Merge pull request #2765 from Despacito696969/master
Commit `a040be9` but for `core:sort`
2023-08-23 16:24:59 +02:00
Despacito696969 2feb1bf847 Commit a040be9 but for core:sort 2023-08-23 15:46:32 +02:00
Jeroen van Rijn 74bbb1167f Fix #2763
Fixes #2763
2023-08-22 20:18:54 +02:00
gingerBill 515163864f Add optional flush := true to many of the core:fmt procedures 2023-08-22 17:24:12 +01:00
gingerBill 1cdb975c91 Add attribute @(require) import "foo" to replace/supplement _ :: foo 2023-08-22 12:05:25 +01:00
gingerBill cd42d26eb3 Fix variadic parapoly bug 2023-08-21 12:19:38 +01:00
gingerBill 8bc96652cd Merge branch 'master' of https://github.com/odin-lang/Odin 2023-08-21 11:15:22 +01:00
gingerBill 1631a2bac1 Update Tilde 2023-08-21 11:15:16 +01:00
Jeroen van Rijn 501635ca26 Merge pull request #2760 from Lperlind/cocoa-import
Always include Cocoa for NSFoundation
2023-08-21 07:20:35 +02:00
Lucas Perlind edcd335b90 Always include Cocoa for NSFoundation 2023-08-21 11:36:39 +10:00
gingerBill 0cb9908f27 Update Tilde 2023-08-19 12:26:59 +01:00
gingerBill 61858f5899 Merge pull request #2755 from Lperlind/improve-float-rand
Better guarantee boundaries of floating point rand
2023-08-19 11:07:28 +01:00
Jeroen van Rijn c5911679d1 Merge pull request #2757 from Kelimion/fix_2756
`_buffer_grow`: Preserve allocator if already set via init_buffer_allocator
2023-08-18 22:27:03 +02:00
Jeroen van Rijn 99d6a077fe _buffer_grow: Preserve allocator if already set via init_buffer_allocator
Fixes #2756
2023-08-18 22:16:59 +02:00
Lucas Perlind 8b680254ee Better guarantee boundaries of floating point rand 2023-08-18 11:19:01 +10:00
gingerBill b873651da7 Merge pull request #2748 from Caedo/js-events-fix
Fix issues with js events not being initialized properly
2023-08-17 16:40:54 +01:00
Caedo b185d9e701 Remove pointer magic when creating strings 2023-08-16 20:33:17 +02:00
Jeroen van Rijn b635622cac Merge pull request #2751 from Lperlind/rand-doc-float
Update rand documentation about floats
2023-08-16 13:48:01 +02:00
Lucas Perlind b31d8b1ad0 Update rand documentation about floats 2023-08-16 21:13:56 +10:00
gingerBill 2153cb7e0a Merge pull request #2721 from Kartoffelsaft/dynamic-pool-alloc
Return .Invalid_Argument in pool allocator to avoid potential segfaults
2023-08-16 12:02:21 +01:00
gingerBill 15033eab28 Fix comparison of two nil unions against each other 2023-08-16 11:52:40 +01:00
gingerBill 8b4c530062 Disable HAS_VALGRIND logic for BlockingMutex (fixes #2703) 2023-08-16 11:02:09 +01:00
gingerBill 9ff9587b7b Remove unused code in gb.h; Minimize use of heap_allocator() in parser 2023-08-16 00:41:49 +01:00
gingerBill d8acbda548 Update to llvm@13 for Mac
Brew has broke llvm@11
2023-08-15 21:25:14 +01:00
Benjamin Findley 7e4a65114a fix whitespace 2023-08-15 08:49:27 -07:00
gingerBill d9a2d29d00 Update demo.odin to #align(N) style 2023-08-15 15:59:38 +01:00
gingerBill 27931249ce Scale by 3/2 rather than 5/4 2023-08-15 15:45:12 +01:00
gingerBill 52318d0e0e Improve heuristic for committing memory with virtual.alloc_from_memory_block 2023-08-15 15:42:28 +01:00
gingerBill 8d673789be Align committed to a page size 2023-08-15 15:20:23 +01:00
gingerBill 646c4c7458 alloc_from_memory_block to commit amounts equal to multiples of the DEFAULT_PAGE_SIZE 2023-08-15 15:12:12 +01:00
gingerBill 2cc22d118d Require parentheses for #align(N) 2023-08-15 14:55:02 +01:00
Caedo 1182f41f99 Fix issues with js events not being initialized properly 2023-08-15 14:56:04 +02:00
gingerBill 098d1d2b5e Merge pull request #2716 from laytan/add-libraygui-macos-arm64
add libraygui.a for macos-arm64
2023-08-15 11:19:20 +01:00
gingerBill 31c85f0ec5 Merge pull request #2719 from laytan/add-waitgroup-to-wait-proc-group
add wait group to wait proc group
2023-08-15 11:19:09 +01:00
gingerBill 091d1f8c75 Merge pull request #2747 from Pix-xiP/loc-into-strings
#caller_location into the strings package
2023-08-15 11:16:12 +01:00
gingerBill 6c50e6ef34 Use or_return on resize/reserve 2023-08-15 11:13:43 +01:00
gingerBill 67f48aca96 Fix _random_u64 2023-08-15 11:06:12 +01:00
gingerBill fc64e787a3 Change to LLVM@13 for ci.yml on Mac 2023-08-15 10:55:37 +01:00
gingerBill d13bed9a0a Change algorithm to work on 64-bit integers rather than 32-bit integers internally 2023-08-15 10:53:59 +01:00
gingerBill 904c48b11a Fix range comment from (0, n] to [0, n) 2023-08-15 10:36:00 +01:00
Pix 2ab5eb7213 Strings makes added caller function 2023-08-15 12:31:06 +08:00
Pix 5ce541e9ef Intern add location to init. 2023-08-15 12:30:50 +08:00
Pix 0cf9c22033 Builder makes added caller location 2023-08-15 12:30:40 +08:00
Benjamin Findley 38e06f13d6 prevent potential segfaults when using large allocations from dynamic pool 2023-08-11 11:49:31 -07:00
Laytan Laats ccc94f6832 add wait group to wait proc group 2023-08-11 20:21:42 +02:00
gingerBill 589820639c Correct lb_run_function_pass_manager behaviour 2023-08-10 14:35:09 +01:00
Laytan Laats 68b9260c9b add libraygui.a for macos-arm64 2023-08-09 00:36:21 +02:00
gingerBill 49b2447113 Merge pull request #2710 from guifes/raygui
raygui bindings
2023-08-08 16:13:51 +01:00
gingerBill 89c50bbd82 Adhere to -vet-style 2023-08-08 16:01:22 +01:00
gingerBill 2b3f3e11d3 Make trailing commas followed by a closing token on the same an error with -vet-style 2023-08-08 16:01:08 +01:00
gingerBill 4100cfec86 Fix typo 2023-08-08 15:31:17 +01:00
gingerBill cad3a50e4e Add ODIN_PLATFORM_SUBTARGET 2023-08-08 15:28:21 +01:00
gingerBill 4d9ee55468 Fix add_constant_switch_case 2023-08-08 15:23:01 +01:00
gingerBill b72f009d87 Disallow aliasing of any and typeid 2023-08-08 15:10:57 +01:00
gingerBill 2181e0fc27 Make for init; ; {} an error without an explicit cond or post 2023-08-08 15:07:00 +01:00
gingerBill cd74cdfdaf Remove switch in in favour of switch _ in 2023-08-08 14:57:25 +01:00
gingerBill 49ab935ae9 Disallow for in in favour of for _ in 2023-08-08 14:56:12 +01:00
Guilherme Fernandes 6879c9d8df Tabs for identation and spaces for aligment 2023-08-08 13:22:26 +01:00
gingerBill 939bf4bb5d Add experimental -subtarget:ios 2023-08-08 11:35:51 +01:00
gingerBill 7861dfd667 Fix tilde extension when trying to build as assembly (unsupported currently) 2023-08-08 11:16:14 +01:00
gingerBill c5fc28de7d Merge pull request #2714 from wjlroe/fix-cycle-count-intrinsic-on-darwin
Fix read_cycle_counter intrinsic on arm64
2023-08-07 23:18:55 +01:00
Guilherme Fernandes 535d290293 Removing contextual comment 2023-08-07 22:35:30 +01:00
Guilherme Fernandes a0dd975686 Adjusting identation 2023-08-07 22:35:30 +01:00
Guilherme Fernandes f48531efaf Removing unecessary line
Not sure what the context is for it, grabbed it from raylib's bindings. Tested without it, everything works fine.
2023-08-07 22:35:30 +01:00
Guilherme Fernandes c6a4116082 Fixing return value missing 2023-08-07 22:35:30 +01:00
Guilherme Fernandes aecd6b85e6 Improving style
minValue: c.int, maxValue: c.int
minValue, maxValue: c.int
2023-08-07 22:35:30 +01:00
Guilherme Fernandes 55439ef293 Fixing minor typo: minValu -> minValue 2023-08-07 22:35:17 +01:00
Guilherme Fernandes d4cf103676 Adding whitespaces to detach procedure declaration from category comments 2023-08-07 22:26:19 +01:00
Guilherme Fernandes 489fb087a4 Fixing identation to use tabs 2023-08-07 22:26:18 +01:00
Guilherme Fernandes ff904ae174 Fixing Error: Redeclaration of 'VERSION' in this scope 2023-08-07 22:26:18 +01:00
Guilherme Fernandes d8db5ec7b6 Moving raygui to vendor/raylib
Removing raylib import and raylib package references
2023-08-07 22:25:04 +01:00
William Roe 5d8b78cb88 Fix read_cycle_counter intrinsic on arm64
Running this code with the hard-coded x9 register results in not 
returning the cycle count, but some other value.

This code (using $0 as the register), works on arm64 Linux and Darwin.
2023-08-07 21:18:56 +01:00
gingerBill 9736402dfd Fix docs typo 2023-08-07 15:34:28 +01:00
gingerBill 0600054ad4 Remove temporary assert 2023-08-07 15:21:18 +01:00
gingerBill b782fca75b Fix using bug 2023-08-07 15:18:45 +01:00
gingerBill 0230b88078 Tilde: #soa pointers 2023-08-07 15:11:15 +01:00
gingerBill 55c9fb7c5c Tilde: Begin work on #soa 2023-08-07 15:04:03 +01:00
gingerBill 8201a9ce6e Tilde: for in for enum types 2023-08-07 14:53:31 +01:00
gingerBill 561a94cc50 Tilde: Fix type info for enums 2023-08-07 14:50:06 +01:00
gingerBill 0636887931 Tilde: Add in/not_in for maps 2023-08-07 14:43:11 +01:00
gingerBill 0c1b39d881 Mock out map get/set functionality 2023-08-07 14:40:42 +01:00
gingerBill 67ffae7e32 Merge pull request #2655 from hchac/stdlib-parser-fixes
Match C++ parser allowing named arguments after variadic
2023-08-07 11:45:14 +01:00
gingerBill 488a38a96d Merge pull request #2649 from hchac/allow-newline-field-list-separator
Match C++ parser behavior in allowing newlines before a closing brace.
2023-08-07 11:45:08 +01:00
gingerBill 77e5854a16 Merge branch 'master' into stdlib-parser-fixes 2023-08-07 11:02:01 +01:00
gingerBill 2a42dab108 Merge pull request #2661 from Beefster09/fixed-f64-conversion
Fix conversions between fixed point numbers and f64
2023-08-07 11:00:42 +01:00
Guilherme Fernandes 092d103d24 Adding raygui bindings
Including binaries for Windows only at the moment.
2023-08-07 09:44:55 +01:00
gingerBill 12b7df550f Merge pull request #2701 from Alkamist/nanovg-leak-fix
Fix small memory leak in nanovg.
2023-08-05 17:07:35 +01:00
gingerBill 006bd2fe17 Merge pull request #2696 from hwchen/hwchen/fix-parse-call-expr-ellipses
core:odin/parser allow args after varargs in parse_call_expr
2023-08-05 17:07:28 +01:00
gingerBill d252768ac5 Merge pull request #2652 from ftphikari/master
[vendor:directx/d3d_compiler] Added default include file handler
2023-08-05 16:59:43 +01:00
gingerBill dd7c2c0574 Update demo for #relative multi-pointers 2023-08-05 16:09:19 +01:00
gingerBill c91898a888 Remove #relative slices; Replace with #relative multi-pointers 2023-08-05 16:05:39 +01:00
gingerBill afa8eb2d6f Fix #2699 2023-08-05 15:04:14 +01:00
gingerBill 1481015dc4 Fix #2690 2023-08-05 15:01:21 +01:00
gingerBill 8cdedd4cd2 Add raw_data(^matrix[R, C]T) -> [^]T 2023-08-05 12:35:27 +01:00
gingerBill 985e4eed60 Fix #2697 2023-08-04 16:00:10 +01:00
gingerBill 9d0583e0d2 Add missing import 2023-08-04 15:57:50 +01:00
gingerBill 9aed26a234 Remove the use of import within when 2023-08-04 15:54:44 +01:00
gingerBill 3323d5c76c Disallow import declarations within a when statement 2023-08-04 15:45:25 +01:00
Walther Chen 4b9afd787c core:odin/parser allow args after varargs in parse_call_expr 2023-08-03 22:45:21 -04:00
Alkamist cedf01d094 Fix small memory leak in nanovg. 2023-08-03 18:36:12 -04:00
gingerBill 4a71603a77 Add hasher proc generation 2023-08-03 14:46:22 +01:00
gingerBill aadc8477b9 Generate equal proc for unions 2023-08-03 13:42:14 +01:00
gingerBill 9bf111bd3d Add comments for tilde building 2023-08-03 13:26:42 +01:00
gingerBill 8060da2132 Toggle tilde backend in the build script 2023-08-03 13:16:23 +01:00
gingerBill b495a302b0 Merge branch 'master' into tilde 2023-08-03 13:14:09 +01:00
gingerBill 9453b2387b Merge pull request #2669 from laytan/check-disabled-when-generating-parapoly
Fix #2666 by checking for disabled when generating parapoly procs
2023-08-01 14:45:36 +01:00
gingerBill a4de59c8ee Merge pull request #2686 from ryuukk/patch-8
Assign element to Slice not Array when alloc a Type_Slice
2023-08-01 14:45:19 +01:00
gingerBill fab40080e4 Merge pull request #2693 from hasanyasin/master
Add -show-system-calls flag info to cli usage help
2023-08-01 14:45:03 +01:00
Hasan Yasin Ozturk fb30bda7d7 Add -show-system-calls flag info to cli usage help 2023-08-01 15:51:22 +03:00
gingerBill 65206fe33e Go through loads of TODOs 2023-08-01 11:39:04 +01:00
gingerBill 2f094134a3 Remove -strict-style-init-only 2023-08-01 11:14:52 +01:00
gingerBill 69e1f42aed Replace a lot of warnings with errors; remove deprecated stuff 2023-08-01 11:11:15 +01:00
gingerBill c35c58b023 Add -vet-style and -vet-semicolon 2023-08-01 11:03:15 +01:00
gingerBill 4b57aec1c6 Fix typo 2023-07-31 17:30:03 +01:00
gingerBill 2038bd0c15 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-07-31 17:27:39 +01:00
gingerBill 19b24fcce2 Add require_results for proc groups 2023-07-31 17:27:23 +01:00
Jeroen van Rijn ed3354b433 Merge pull request #2692 from hasanyasin/master
Fix dropped "dev-" prefix from version tag
2023-07-31 16:55:37 +02:00
Hasan Yasin Ozturk 963eeee361 Fix dropped "dev-" prefix from version tag
In commit c3a31666, "dev-" prefix was dropped unintentionally. This commit fixes
that.
2023-07-31 17:46:45 +03:00
Jeroen van Rijn c3a316664a Merge pull request #2691 from hasanyasin/master
Set version date to commit date instead of build date
2023-07-31 16:39:32 +02:00
Hasan Yasin Ozturk 3d16880d95 Set version date to commit date instead of build date
Fixes #2688

This commit updates `build_odin.sh` and `build.bat` so that date of the commit
is used for the version tag, instead of the build time.
2023-07-31 17:29:56 +03:00
gingerBill be6f355665 Keep -vet happy by removing using 2023-07-31 12:32:30 +01:00
gingerBill 5dba08fb3b Keep -vet happy 2023-07-31 12:19:25 +01:00
gingerBill f17077c05c Remove debug code 2023-07-31 12:11:31 +01:00
gingerBill 8aa36072fc Remove using where easily possible 2023-07-31 12:11:17 +01:00
gingerBill 44ea82f845 Clean up usage of using throughout core and vendor 2023-07-31 11:46:40 +01:00
gingerBill 0de7df9eab Improve //+vet; remove using in many places; add //+vet !using-stmt where necessary 2023-07-31 11:37:14 +01:00
gingerBill 60e509b1e0 Add separate -vet flags; -vet-using-* flags; //+vet file flags 2023-07-31 11:09:19 +01:00
Jeroen van Rijn 551c379f1b Merge pull request #2687 from Kelimion/xml-value-fix
Fix #2684
2023-07-28 16:01:01 +02:00
gingerBill c39a360372 Update Tilde for the new TB_Passes approach 2023-07-28 14:57:04 +01:00
Jeroen van Rijn 683ee75703 Fix #2684 2023-07-28 15:53:39 +02:00
gingerBill f6d1724835 BODGE for finding procedure symbols
Related to a dependency graph race condition bug (THIS NEEDS TO BE FIXED)
2023-07-28 12:12:06 +01:00
ryuukk a99da47b0d Assign element to Slice not Array when alloc a Type_Slice 2023-07-27 22:13:55 +02:00
gingerBill 0f217c715e Fix dependency issue; Allow polymorphic procedures in tilde 2023-07-25 15:15:35 +01:00
gingerBill c4033c215e Support non-constant global slices 2023-07-25 14:37:19 +01:00
gingerBill e914d551e7 Basic support for global variables 2023-07-25 13:56:28 +01:00
gingerBill c6e4b8ed5c Move mutable value decl stuff to a separate procedure 2023-07-25 13:49:19 +01:00
gingerBill ab398f3704 Implement @(static) local variables 2023-07-25 13:46:40 +01:00
ftphikari 699aec331d Merge branch 'odin-lang:master' into master 2023-07-25 15:32:18 +03:00
gingerBill baea6a1da8 Generate anonymous procedure literals 2023-07-25 13:31:22 +01:00
hikari d2375a79f2 [vendor:directx/d3d11] Added missing UUIDs for shader reflection 2023-07-25 14:42:08 +03:00
gingerBill ba48093666 Fill out type information data 2023-07-25 12:19:59 +01:00
gingerBill d4b87f1672 Continue filling in the global type info data 2023-07-25 11:46:53 +01:00
gingerBill e4006eb583 Update tilde 2023-07-25 01:11:57 +01:00
gingerBill b934e4b564 Implement basic runtime type information
This allows for `runtime.println_any` to work!
2023-07-25 00:33:43 +01:00
gingerBill 28c97a9467 Begin work on setting up type information table 2023-07-24 17:12:23 +01:00
gingerBill 28fca190ee Fix transmute(uintptr)ptr etc 2023-07-24 16:09:01 +01:00
gingerBill 78116e0ea2 Implement for in statements for array-like values 2023-07-24 15:46:54 +01:00
gingerBill 5a50afa1fd Implement for in interval statements 2023-07-24 15:28:51 +01:00
gingerBill cf77a0e2b4 Update Tilde to fix reg alloc bug 2023-07-24 15:18:20 +01:00
gingerBill e2593a6883 Update Tilde for testing reg spill stuff 2023-07-24 14:01:10 +01:00
gingerBill 00a44d1ddb Mock out type info initialize stuff 2023-07-24 13:06:01 +01:00
gingerBill d8445fd9df Multithread tilde backend 2023-07-24 12:53:16 +01:00
gingerBill 304db907f5 Generate object name for them module 2023-07-24 12:19:22 +01:00
gingerBill b09cdc0f25 Hook up Tilde to the linker code 2023-07-24 12:01:23 +01:00
gingerBill bd81c6f5b4 Move linker code into separate file 2023-07-24 11:53:18 +01:00
gingerBill 4051dd9522 Update Tilde to get basic "Hello World" working with runtime.print_string 2023-07-24 11:30:07 +01:00
gingerBill 360cb9eb9a Add tb.lib to build.bat 2023-07-24 10:28:56 +01:00
gingerBill 241a939c29 Update Tilde 2023-07-24 10:27:55 +01:00
gingerBill 2f9c5d2d0b Minor clean up to builtin procs 2023-07-23 22:07:21 +01:00
gingerBill 99c812b02d Begin working on a minimum build 2023-07-23 21:44:50 +01:00
gingerBill d82c2ce50f Update Tilde; Add min and max 2023-07-22 12:21:29 +01:00
gingerBill 6c12156b1a Simplify procedure argument handling 2023-07-22 11:16:29 +01:00
gingerBill eec3b3009f Begin work on builtin procedures 2023-07-22 10:16:28 +01:00
Jeroen van Rijn 5ac7fe453f Merge pull request #2676 from jasonKercher/fix-2667
coalesce tombstones in map insert
2023-07-22 10:29:15 +02:00
gingerBill 4654b41c3e Implement call expressions 2023-07-22 09:06:44 +01:00
gingerBill b09ea17f0e Support multiple return values for non-odin calling conventions 2023-07-22 08:48:13 +01:00
gingerBill 99ebfc337e Support multiple return values 2023-07-22 08:33:30 +01:00
gingerBill e5f9458905 Update Tilde to get procedure passing rules 2023-07-22 07:56:13 +01:00
jason f9c083073e coalesce tombstones in map insert 2023-07-21 15:44:39 -04:00
gingerBill ec0a9a5f8a Copy lvalues on multi-valued assignments to allow for a, b = b, a on large types (minor bodge) 2023-07-21 13:05:39 +01:00
gingerBill 47b924990f Count extra stuff 2023-07-20 02:04:59 +01:00
gingerBill 215bebb01a Remove dead code 2023-07-20 02:00:20 +01:00
gingerBill 9fffa19c51 Mock out more global stuff 2023-07-20 01:58:46 +01:00
gingerBill b54f3d4ee9 Mock out more global value stuff 2023-07-20 01:54:36 +01:00
gingerBill bcdcad5847 Add global string constants 2023-07-20 01:24:19 +01:00
gingerBill 737b8e42e4 Global constants for arrays 2023-07-20 00:48:52 +01:00
gingerBill c61e7c05da Begin working on global constants 2023-07-20 00:34:24 +01:00
gingerBill a919828003 Add complex and quaternion global stuff 2023-07-19 23:27:06 +01:00
gingerBill 0bd33882b6 Basic constant compound literal support 2023-07-19 21:43:42 +01:00
gingerBill e0e55a649c Rename tilde_backend* files to tilde* 2023-07-19 20:50:15 +01:00
gingerBill f32d71eca0 Mock out any type switch statement 2023-07-19 20:44:37 +01:00
Laytan Laats 74338733ba Fix #2666 by checking for disabled when generating parapoly procs 2023-07-19 20:27:34 +02:00
gingerBill 5fb98609cd Implement type switch statement for unions 2023-07-19 18:03:42 +01:00
gingerBill 19633ece80 Simplification of the ValueDecl code 2023-07-19 15:51:56 +01:00
gingerBill fb04103352 Add defer statements; add implicit context pointer to context stack 2023-07-19 15:37:33 +01:00
gingerBill 9abf43b0d2 Mock out defer handling logic (before handling defer statements) 2023-07-19 15:24:07 +01:00
gingerBill 7f97274ecc Wrap Tilde's goto pseudo-instruction 2023-07-19 14:31:32 +01:00
gingerBill b2edab193f Support branch statements break/continue/fallthrough 2023-07-19 14:19:01 +01:00
gingerBill 184563bbe1 Add trivial switch statement check to use a jump table 2023-07-19 13:58:56 +01:00
gingerBill 73f25ed182 Add basic switch statement
Implement as naive if-else chain
2023-07-19 13:37:56 +01:00
gingerBill 533f6a552c Add for and += assignments 2023-07-19 13:15:13 +01:00
gingerBill 32ac319525 Implement if statements 2023-07-19 12:55:44 +01:00
gingerBill 569397bd7e Update TB 2023-07-19 11:39:37 +01:00
gingerBill 3535d16c3a Implement Ternary If Expression 2023-07-18 18:58:56 +01:00
gingerBill 7f4efa90c8 Mock out cg_emit_comp 2023-07-18 16:51:37 +01:00
gingerBill bab3cd988e Mock out cg_emit_unary_arith 2023-07-18 13:42:37 +01:00
gingerBill feda213c0c Mock out cg_append_tuple_values 2023-07-18 13:30:59 +01:00
gingerBill c6593e8cde Mock out binary expressions and variable declarations 2023-07-18 13:27:47 +01:00
gingerBill 4d8d3919c0 Update tilde; procedure type determination from debug types 2023-07-18 13:16:35 +01:00
hikari 20dc8b222d [vendor:directx/dxgi] Removed GetDebugInterface
Since Windows 8.1 `DXGIGetDebugInterface1` is present, which eliminates the need for `GetDebugInterface`. Odin does not support Windows versions that Microsoft doesn't support, so anything Windows 7 and earlier is basically useless anyway.
2023-07-18 02:35:05 +03:00
gingerBill 55733171c1 Planning for multi-valued expressions in the tilde backend 2023-07-17 23:16:50 +01:00
gingerBill 988926b59d Flesh out debug procedure type 2023-07-17 22:51:18 +01:00
gingerBill d72f8da6d7 Move debug type code its own file 2023-07-17 22:37:40 +01:00
gingerBill 0b697b24bd Implement debug type for procs 2023-07-17 22:33:13 +01:00
gingerBill b2c75dc3a2 Mostly fill in cg_debug_type 2023-07-17 22:18:15 +01:00
gingerBill b5b3f1fb42 Mock out struct_ep calls 2023-07-17 17:28:12 +01:00
gingerBill bd73834e19 Update Tilde; mock out cg_build_return_stmt
128-bit types are broken
2023-07-17 16:56:10 +01:00
gingerBill 7f43c24297 Merge branch 'master' into tilde 2023-07-17 16:23:01 +01:00
gingerBill 1b3657122c Uncomment procedures in procedure group 2023-07-17 16:02:18 +01:00
gingerBill 0f28857c59 Improve type inference for procedure group stuff 2023-07-17 13:03:58 +01:00
gingerBill 88485d5467 Improve scoring for polymorphic procedures 2023-07-17 12:57:33 +01:00
gingerBill 921530dd01 Fix to allow procedure groups on objective-c types 2023-07-17 12:43:56 +01:00
gingerBill dcf3023d93 Fix bug caused by incorrect assert 2023-07-17 12:06:48 +01:00
hikari 6ac2c5c6dc [core:sys/windows] Added a couple of procedures 2023-07-17 02:40:49 +03:00
gingerBill 45b3ae31af Mock out more of the ep procedures 2023-07-17 00:31:44 +01:00
Jeroen van Rijn b12c46b28a Merge pull request #2659 from Pingar5/master
Fixed typo in GGPO bindings
2023-07-17 01:11:32 +02:00
gingerBill 66a20264ab Mock out cg_emit_arith 2023-07-17 00:06:03 +01:00
gingerBill d2d243cca8 Mock out cg_emit_conv 2023-07-16 23:41:51 +01:00
Justin Snyder d4194962b0 Update fixed.odin 2023-07-15 23:43:14 -06:00
Brennen Shaughnessy 635d671ee7 Fixed typo in GGPO bindings 2023-07-15 15:59:58 -04:00
gingerBill ee8372145d Begin working on proper expressions 2023-07-15 14:26:47 +01:00
gingerBill ccb736411b Basic context creation 2023-07-15 13:30:31 +01:00
gingerBill e2e5641a45 Update TB; Fix calling nullptr TB_Node* problems 2023-07-15 13:15:50 +01:00
ftphikari 7ca0b256eb [core:sys/windows] Added missing MONITORINFOEXW type 2023-07-14 23:02:56 +03:00
gingerBill ca442defbb Mocking out call related stuff 2023-07-14 17:34:00 +01:00
gingerBill b17ebeb6f6 Mock out more of the addr related stuff 2023-07-14 17:03:28 +01:00
gingerBill a8afcf1ca9 cg_emit_load/cg_emit_store 2023-07-14 16:03:21 +01:00
gingerBill 6545cc2d48 Stub out expr and const files 2023-07-14 14:54:49 +01:00
gingerBill 2a10c8fe5c Begin work on building statements 2023-07-14 13:01:17 +01:00
gingerBill 7cd2d14b64 Very start of working on Tilde Backend for Odin 2023-07-14 11:58:18 +01:00
gingerBill fc5abfd68b Update Tilde 2023-07-14 11:56:13 +01:00
hchac cb5c821989 Matching C++ parser changes from commit 67ca9166d3.
Without these changes the core library parser fails to parse:

 - core/fmt/fmt.odin:

     Line 126 (and others):
       sbprint(&str, ..args, sep=sep)

 - core/fmt/fmt_os.odin:

     Line 17 (and others):
       return wprint(w, ..args, sep=sep)

 - core/log/log.odin:

     Line 79 (and others):
       logf(.Debug,   fmt_str, ..args, location=location)

 - core/runtime/core_builtin.odin:

     Line 475 (and others):
       return append_elems(array, ..args, loc=loc)
2023-07-13 15:38:10 -04:00
ftphikari ab7652010b [vendor:directx/dxgi] Rename debug_interface_init to InitDebugInterface 2023-07-13 17:41:21 +03:00
ftphikari 7990566f6b Code review fixes 2023-07-13 17:16:32 +03:00
ftphikari b6baee5f77 [vendor:directx/dxgi] Added GetDebugInterface 2023-07-13 02:11:46 +03:00
ftphikari 24c3ec235a [vendor:directx/d3d_compiler] Added default include file handler 2023-07-12 00:56:01 +03:00
Jeroen van Rijn 204c0fa4d8 Merge pull request #2650 from hchac/remove-core-odin-from-gitignore
Don't gitignore folders named odin.
2023-07-11 22:58:56 +02:00
gingerBill 3a0b66d5df Merge pull request #2625 from laytan/exit-code-1-on-test-failure
exit with code 1 on `odin test` failure
2023-07-11 21:50:18 +01:00
gingerBill 07d3122c14 Merge pull request #2651 from erjohnson/arena-static-bootstrap-doc-fix
Fix small doc mistakes in arena.odin
2023-07-11 21:49:06 +01:00
Eric Johnson c6957e4e31 Fix small doc mistakes in arena.odin 2023-07-11 13:41:12 -07:00
hchac 8068a3899d Don't gitignore folders named odin. 2023-07-11 16:23:54 -04:00
hchac 4c0e9f1f89 Match CPP parser behavior in allowing newlines before a closing brace. 2023-07-11 16:15:06 -04:00
Laytan Laats 3cce972125 fix indentation 2023-07-11 19:34:59 +02:00
Laytan Laats 52700d6a84 use lb_emit_select instead of lb_emit_if for exit check 2023-07-11 19:30:44 +02:00
Jeroen van Rijn 0c80a4b836 Merge pull request #2640 from z64/z64/mutex
Improve Mutex struct documentation
2023-07-11 14:01:02 +02:00
Zac Nowicki 46f408cc9f Fixup link format 2023-07-11 07:43:36 -04:00
Jeroen van Rijn 5c068a9062 Merge pull request #2647 from ryuukk/patch-6
core:sys/windows: Deprecate htons, htonl, ntohl, ntohs in favor of endian specific integers
2023-07-11 08:11:50 +02:00
ryuukk e1fae5b902 Fix attribute 2023-07-11 03:51:28 +02:00
ryuukk 20e5e95ff8 Deprecate htons, htonl, ntohl, ntohs 2023-07-11 03:45:08 +02:00
Jeroen van Rijn a238f78855 Merge pull request #2645 from Pix-xiP/fix-raylib-gesture
GetGestureDetected proc returns a Gesture not a Gestures bit_set
2023-07-10 17:25:02 +02:00
Jeroen van Rijn 5b96712ed0 Merge pull request #2642 from ryuukk/patch-4
core:sys/windows: Add definitions for network byte order conversion procs
2023-07-10 17:04:09 +02:00
Pix f141078073 GetGestureDetecetd should return a Gestures bit_set not a Gesture. 2023-07-10 22:24:16 +08:00
Jeroen van Rijn d47fed16a9 Merge pull request #2643 from ryuukk/patch-5
core:sys/windows: Add CopyFileW proc
2023-07-10 11:21:37 +02:00
ryuukk bc43a8d38d Add CopyFileW 2023-07-10 06:02:38 +02:00
ryuukk ccd5685cee Fix doc links 2023-07-10 05:57:12 +02:00
ryuukk f0f8177a19 Add definitions for network byte order conversion procs 2023-07-10 05:56:26 +02:00
Zac Nowicki 363b701925 Improve Mutex struct documentation 2023-07-09 08:30:16 -04:00
Jeroen van Rijn 0a897e2fae Merge pull request #2638 from ramn/handle_nils_in_expect_value
Fix #2637
2023-07-09 00:28:02 +02:00
ramn 5f53d815d1 fix: make -vet not complain 2023-07-09 00:15:01 +02:00
ramn 7b89f25818 Fix #2637
where testing.expect_value can't compare nils
2023-07-08 23:46:51 +02:00
gingerBill 8ebb84ad1e Basic global struct example 2023-07-08 13:02:17 +01:00
gingerBill f0e77a309d Hellope World! with Tilde 2023-07-08 12:43:20 +01:00
gingerBill 7ab531bd21 Add -tilde for working on the new compiler 2023-07-08 12:07:11 +01:00
gingerBill d7af6de9b9 Add tilde 2023-07-08 11:54:44 +01:00
gingerBill 3072479c3c Generalize name mangling rule to have a singular definition for a name separator 2023-07-07 23:52:56 +01:00
gingerBill 62031c24a2 Add extra mutex guards around module value access 2023-07-07 23:35:16 +01:00
gingerBill aa38889704 Fix issue with pointer casting internal llvm intrinsics 2023-07-07 23:23:47 +01:00
gingerBill 17562e476f Remove math usage of raw LLVM intrinsic prototypes 2023-07-07 23:13:37 +01:00
gingerBill 6495f2cf98 Fix #2593 2023-07-07 23:09:46 +01:00
gingerBill ea20b644cc Fix #2624 2023-07-07 23:07:41 +01:00
gingerBill bf848637aa Fix #2629 2023-07-07 23:06:15 +01:00
gingerBill 759f846b2b Fix [2]union{T} comparison against nil 2023-07-07 23:03:46 +01:00
gingerBill 3758be55f5 Fix #2630 2023-07-07 22:56:20 +01:00
gingerBill 8f4c59b080 Add core:math/cmpl to all_main.odin 2023-07-07 22:29:53 +01:00
gingerBill 1ff6212ffa Always call lb_run_remove_dead_instruction_pass to fix -debug issues 2023-07-07 22:28:31 +01:00
Jeroen van Rijn b60d29ae9a Merge pull request #2627 from laytan/add-address-family-type-definition
add `ADDRESS_FAMILY` to darwin (currently only available in linux)
2023-07-03 22:45:28 +02:00
Laytan Laats 38d71e668d add ADDRESS_FAMILY to darwin (currently only available in linux) 2023-07-03 19:56:56 +02:00
Laytan Laats 7cdf37eaf6 exit with code 1 on odin test failure 2023-07-03 01:22:36 +02:00
Jeroen van Rijn 8d9adfd548 Merge pull request #2623 from laytan/fix-2615-cant-iterate-untyped-string
Fix #2615: can't iterate untyped string
2023-07-02 23:06:35 +02:00
Laytan Laats a3e2d90f4c add test 2023-07-02 23:00:37 +02:00
Laytan Laats fc81008ab5 Fix #2615: can't iterate untyped string 2023-07-02 22:18:25 +02:00
Jeroen van Rijn a1eae6304f Merge pull request #2622 from laytan/detect-unix-colors-support
detect unix color support
2023-07-02 21:34:34 +02:00
Laytan Laats 49058620f0 fix spacing 2023-07-02 21:25:48 +02:00
Laytan Laats f68a3639b4 use more common detection method and add FORCE_COLOR and NO_COLOR support 2023-07-02 21:11:19 +02:00
Laytan Laats f4e87c9720 ignore stderr in tput call 2023-07-02 20:20:10 +02:00
Laytan Laats 23bf7973fa detect unix color support 2023-07-02 19:56:46 +02:00
Jeroen van Rijn 67e0751124 Merge pull request #2621 from DanielGavin/vulkan-flags2
Add support for vulkan FlagBits2
2023-07-02 19:34:20 +02:00
DanielGavin f76559daf6 Remove whitespaces 2023-07-02 18:28:37 +02:00
DanielGavin 5e99ff6769 Add support FlagBits2 2023-07-02 18:24:37 +02:00
gingerBill 1ecb4aa9aa Begin work on core:math/cmplx
`complex*` types only at the moment, `quaternion*` types coming later
2023-06-28 13:20:23 +01:00
gingerBill a2b3c72647 Improve accuracy of abs or complex* types 2023-06-28 13:18:36 +01:00
gingerBill 0180a4fcd4 Add math.sincos 2023-06-28 12:57:09 +01:00
gingerBill abca3ceac8 Keep -vet happy 2023-06-28 12:20:12 +01:00
gingerBill 866a9fdf19 Actually add math.hypot 2023-06-28 12:19:45 +01:00
gingerBill 20e954a864 Add math.hypot 2023-06-28 12:16:49 +01:00
gingerBill 03e40b333a Merge branch 'master' of https://github.com/odin-lang/Odin 2023-06-28 11:57:43 +01:00
gingerBill ebed66d4ce General code style clean up for vendor:nanovg 2023-06-28 11:57:37 +01:00
gingerBill 9e9f3c485b General code style clean up for vendor:fontstash 2023-06-28 11:36:27 +01:00
gingerBill d50a844720 Replace mem with runtime in core:slice 2023-06-28 11:04:51 +01:00
Jeroen van Rijn 89e559296e Merge pull request #2612 from laytan/master
only run nightly upload if workflow is ran on main repo
2023-06-28 07:53:40 +02:00
Laytan Laats d352e2fa31 only run nightly upload if workflow is ran on main repo 2023-06-27 23:33:18 +02:00
Jeroen van Rijn 71bc452764 Merge pull request #2611 from GoNZooo/gonz.add-unix-setenv
fix(os): use `setenv` instead of `putenv`
2023-06-27 20:54:49 +02:00
Rickard Andersson f048ad13b5 fix(set_env): use clone_to_cstring instead of unsafe_to_cstring 2023-06-27 21:48:53 +03:00
Rickard Andersson d03d5d8f03 style: use tabs
:[
2023-06-27 21:46:00 +03:00
Rickard Andersson 6ff0ce15e7 cleanup: remove leftover line 2023-06-27 21:42:20 +03:00
Rickard Andersson 330b393e16 fix(os): use setenv instead of putenv
`setenv` doesn't copy the value that is put, which means that the
previous code had a bug where we free'd the temporary memory and the
environment was accidentally cleared right after the function finished.
2023-06-27 21:37:10 +03:00
gingerBill a820246f64 Keep -vet happy 2023-06-26 23:00:39 +01:00
gingerBill 1bf4c8c9ba Merge pull request #2268 from Skytrias/skytrias-vendor-additions
fontstash / nanovg vendor additions
2023-06-26 22:59:11 +01:00
skytrias ca1d437435 add build flags restrictions 2023-06-26 21:28:54 +02:00
gingerBill 8b8310711e Fix #2594 zero sized union code generation 2023-06-26 17:36:27 +01:00
gingerBill cdcb64b0d0 Add missing -strict-style check 2023-06-26 17:06:42 +01:00
gingerBill 3c0f1caa41 Fix #2606 2023-06-26 17:03:40 +01:00
gingerBill 8182ba4ee0 Improve internal names for parapoly records 2023-06-26 16:48:43 +01:00
gingerBill 3d9328fd79 Default to panic allocator for wasm targets 2023-06-26 15:55:52 +01:00
gingerBill 6c6f9f7d25 Fix fmt implementation for js 2023-06-26 15:55:35 +01:00
gingerBill c8f475174e Fix tests for -strict-style 2023-06-26 15:51:08 +01:00
gingerBill 3dec55f009 Replace x in &y Use &v in y syntax through core & vendor for switch/for statements 2023-06-26 15:42:57 +01:00
gingerBill 00d60e28c2 Allow switch &v in ... work to be consistent with for &e in ... 2023-06-26 15:41:53 +01:00
gingerBill ea00619c3b for &e, i in array and for k, &v in map (alternative to passing the iterable by pointer) 2023-06-26 15:20:40 +01:00
skytrias bbe50bdaf1 -strict-style fix 2023-06-23 16:21:52 +02:00
skytrias 6b59aee336 cleanup with -vet and add to all_vendor 2023-06-23 16:18:40 +02:00
gingerBill 26a5614572 Merge branch 'master' into skytrias-vendor-additions 2023-06-23 14:33:01 +01:00
gingerBill 19ea090633 Merge pull request #2584 from odin-lang/new-io
New and Improved `io.Stream` interface
2023-06-23 12:12:17 +01:00
gingerBill 9841b11a54 Merge pull request #2597 from odin-lang/ordered-named-arguments
Allowing for Positional and Named Arguments in Procedure Calls
2023-06-23 12:11:46 +01:00
gingerBill 5a6d5374d7 Update WebGL procedures to contextless calling convention 2023-06-22 14:30:02 +01:00
gingerBill 9099bc0b6e Merge pull request #2599 from RehkitzDev/master
fixed dynlib wasm stub
2023-06-22 12:56:23 +01:00
Rehkitzdev e3b43b6e1c fixed dynlib wasm stub 2023-06-22 13:35:22 +02:00
gingerBill b0d801f629 Merge pull request #2582 from ftphikari/master
[core:thread] Added self_cleanup flag to properly auto-clean threads
2023-06-21 18:21:48 +01:00
gingerBill c48057081e Fix nullptr entity case 2023-06-21 14:39:23 +01:00
gingerBill ea76e09ea7 Fix empty varargs 2023-06-21 14:30:39 +01:00
gingerBill c9fb078c0f Handle #c_vararg 2023-06-21 14:07:14 +01:00
gingerBill 1800030356 Correct deferred procedures 2023-06-21 14:01:46 +01:00
gingerBill 43ba2c6226 Fix constant parameter passing 2023-06-21 12:10:07 +01:00
gingerBill 735181dc0e Remove unnecessary indent 2023-06-21 01:33:37 +01:00
gingerBill 8a890fd3d3 Remove new_and_improved in the name 2023-06-21 01:32:35 +01:00
gingerBill 15e31e47fa Remove in order requirement for named parameters 2023-06-21 01:24:57 +01:00
gingerBill 9b54b99bf6 Use positional and named arguments within the core library 2023-06-21 01:17:05 +01:00
gingerBill 67ca9166d3 Allow named arguments variadic expansion .. 2023-06-21 01:03:21 +01:00
gingerBill b2ced834ba Minor code reshuffle 2023-06-21 00:43:51 +01:00
gingerBill 18746c1444 Refactor call argument checking to a single procedure 2023-06-21 00:40:02 +01:00
gingerBill 09f366bec7 Correct purely named argument handling 2023-06-21 00:03:56 +01:00
gingerBill 3998d0c81e Make error checks diverging where possible 2023-06-20 22:55:47 +01:00
gingerBill 2a002c3882 Fix scoring for untyped ternary expressions 2023-06-20 22:55:33 +01:00
gingerBill fb756e3463 Correct procedure group handling 2023-06-20 21:02:57 +01:00
gingerBill 3c5661b51b Allow for positional and named arguments in procedure calls 2023-06-20 20:29:40 +01:00
gingerBill 26e06ba6a6 Correct check_call_arguments_new_and_improved logic 2023-06-20 16:08:26 +01:00
gingerBill 7c57dde255 Start work on parapoly args for new and improved 2023-06-20 13:47:10 +01:00
gingerBill 9ec927b9e9 Try to get make everything work with parapoly 2023-06-20 00:30:29 +01:00
gingerBill 15a0d9f900 Begin to handle split arguments correctly 2023-06-19 23:46:06 +01:00
gingerBill f26e3c6509 Improve proc group selection with named arguments 2023-06-19 22:26:43 +01:00
gingerBill 6568625dea Fix line error printing for error messages 2023-06-19 22:12:47 +01:00
gingerBill 427f212170 Begin work in procedure calls 2023-06-19 13:56:00 +01:00
Jeroen van Rijn c1fb8eaf1a Merge pull request #2591 from GoNZooo/g.add-poll-for-unix
feat(os_linux): add `poll` & `ppoll`
2023-06-17 08:27:42 +02:00
Rickard Andersson 37469dc9c2 fix(poll): make interface more odinary
We take `fds` as a normal slice and get the length from it instead of
bothering with a second parameter.
2023-06-15 16:10:00 +03:00
Rickard Andersson dce57627c9 fix: remove redefinition of timespec
They are in the same package, so it's accessible anyway.
2023-06-15 08:54:42 +03:00
gingerBill 2992ca5df1 Basic support for new procedure code (non-polymorphic, non-proc-group) 2023-06-15 01:37:55 +01:00
Rickard Andersson a5ed5883c7 cleanup: more tabs 2023-06-14 23:59:09 +03:00
Rickard Andersson 0036509f74 cleanup(os_linux/poll): use tabs everywhere
:(
2023-06-14 23:51:33 +03:00
Rickard Andersson 003c470a4d fix(os_linux): make when for arm64 check correct order
Also remove `sys_select` since we aren't using it anyway
2023-06-14 23:38:00 +03:00
Rickard Andersson d6540d9077 fix(os_linux): call ppoll instead on arm64 2023-06-14 23:26:43 +03:00
Rickard Andersson 091c515fea cleanup(os_linux): remove select 2023-06-14 22:34:57 +03:00
Rickard Andersson 4f2b9835f5 feat(unix): add poll 2023-06-14 22:13:36 +03:00
gingerBill 242d3b3c4d Begin work allowing mixture of named and unnamed 2023-06-14 15:40:52 +01:00
gingerBill c66ac9725e Separate out logic for checking mixture of named and unnamed parameters 2023-06-14 14:56:33 +01:00
gingerBill feacc5cd11 Basic enforcement of ordered named arguments/parameters for procedures 2023-06-14 14:03:08 +01:00
gingerBill 3a761395be Add basic optimization for comparisons against the empty string "" 2023-06-14 12:49:33 +01:00
gingerBill a78d6fe0b3 Use i64 instead of int for internal procedures 2023-06-14 12:31:57 +01:00
gingerBill 08e466938f Merge branch 'master' into new-io 2023-06-14 12:07:04 +01:00
gingerBill e036155bdb Merge pull request #2586 from thetarnav/patch-1
Replace `0` with `os.ERROR_NONE` in `demo.odin`
2023-06-14 12:05:52 +01:00
gingerBill 2149afabe1 Merge pull request #2590 from inbelic/inbelic/fix-no_nil-variants-err
[check-type] fix faulty #no_nil variants error
2023-06-14 12:05:34 +01:00
finn ec32967daa [check-type] fix faulty #no_nil variants error
- when checking the variants of a union type we will skip adding
  the variants if we have an unspecialized polymorphic, hence our
  union_type variants will be empty and have a count of 0

- so when checking if we violate the #no_nil error, if we are in the
  unspecialized polymorphic case and there exists at least one variant
  in the original variants then we should not raise this error

- test checks that we do not raise the error anymore, and that we still
  detect the #no_nil error in the described circumstances
2023-06-13 22:07:01 +02:00
gingerBill fc4a5e61c2 Add ODIN_IGNORE_MSVC_CHECK check to build.bat 2023-06-13 13:21:15 +01:00
gingerBill e9608c9d05 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-06-13 13:15:05 +01:00
gingerBill 581eebb197 Fix a race condition when produced anonymous procedure literals with -use-separate-modules 2023-06-13 13:14:59 +01:00
Jeroen van Rijn 10fa67fdaa Merge pull request #2589 from jlreymendez/master
fix: read file from windows was not returning platform error correctly
2023-06-13 09:48:50 +02:00
José Rey Méndez 10f2136675 fix: read file from windows was not returning platform error correctly 2023-06-12 19:28:41 -03:00
Jeroen van Rijn d97dd99d91 Merge pull request #2588 from laytan/fix-darwin-fcntl
fix fcntl binding on darwin
2023-06-12 16:16:49 +02:00
gingerBill 296674e18b Rename ODIN_DISALLOW_RTTI to ODIN_NO_RTTI; Remove dead command line flags 2023-06-12 14:53:05 +01:00
gingerBill 52a926dd90 Deprecate -disallow-rtti in favour of -no-rtti 2023-06-12 14:49:00 +01:00
Laytan Laats d38ea63c78 fix fcntl binding on darwin 2023-06-12 15:37:39 +02:00
gingerBill 2022a7615a Make all id suffixes use atomics where possible 2023-06-12 14:10:18 +01:00
gingerBill dca0fae781 Improve lb_generate_anonymous_proc_lit (again) 2023-06-12 13:42:51 +01:00
gingerBill e16c6c1b6b Replace procedure strings.concatenate 2023-06-12 12:58:47 +01:00
gingerBill ede9881458 Keep compilers happy 2023-06-12 12:54:36 +01:00
gingerBill a7f8c78358 Change how "$anon" mangling works to use an atomic value instead 2023-06-12 12:52:17 +01:00
Jeroen van Rijn 3a90b40425 Merge pull request #2587 from GoNZooo/g.fix-early-exit-on-no-hosts
fix(dns): don't exit early on no hosts in hosts file
2023-06-12 12:51:37 +02:00
Rickard Andersson 454709559b fix(dns): don't exit early on no hosts in hosts file
If we don't have any hosts specified we'll still not generate any
overrides which is fine, but we'll continue onto actually trying to
resolve the hostname we came into the function for initially.
2023-06-12 13:38:12 +03:00
Damian Tarnawski c3933cead4 Replace 0 with os.ERROR_NONE in demo.odin 2023-06-11 23:41:26 +02:00
gingerBill 420f93ce78 Ignore BSD's for stream.odin 2023-06-08 22:38:15 +01:00
gingerBill 2a212a7556 Put stream into the impl 2023-06-08 17:00:38 +01:00
gingerBill 145a7a24e8 Use io.Stream as the internal interface for os2.File 2023-06-08 16:55:01 +01:00
gingerBill 6c040497ef Update os2 to new io.Stream 2023-06-08 16:45:13 +01:00
gingerBill 9ee4b76cd9 Just make the io.Reader etc aliases 2023-06-08 16:38:57 +01:00
gingerBill 3f6775e29b Update to new io interface 2023-06-08 16:35:24 +01:00
gingerBill 4c17e2e97e Merge pull request #2552 from jcmoyer/fix-2466
Use compound literal storage for ValueDecl lvals
2023-06-08 12:34:40 +01:00
Jeroen van Rijn eac53fed59 Merge pull request #2583 from JamesDSource/master
Correct Timeval struct to use microseconds on darwin and linux (Issue #2489)
2023-06-08 09:39:25 +02:00
James Duran fed0c2ea26 Fix Timeval for darwin and linux 2023-06-07 21:55:08 -07:00
gingerBill 21c1618d94 Add botan libraries to all/all_vendor.odin 2023-06-08 00:28:35 +01:00
gingerBill d37699f51a Add bsd to mem/virtual 2023-06-07 23:07:31 +01:00
gingerBill d82bfa98a7 Remove redundant comments 2023-06-07 23:01:08 +01:00
gingerBill 9b15bda055 Add missing packages to examples/all 2023-06-07 22:48:39 +01:00
gingerBill 635842b322 Add more text packages to examples/all 2023-06-07 22:40:46 +01:00
hikari 3b8515beb0 [core:thread] Seeing if this fixes network tests 2023-06-07 20:52:41 +03:00
hikari 7b62b81ebd [core:thread] Fix compilation 2023-06-07 20:03:19 +03:00
hikari dcf4e51787 [core:thread] Added self_cleanup flag to properly auto-clean threads 2023-06-07 19:11:16 +03:00
gingerBill 7dc09ed450 Add ODIN_COMPILE_TIMESTAMP (unix timestamp in nanoseconds) 2023-06-07 15:49:12 +01:00
gingerBill 349641e95f Fix #2572 2023-06-07 13:08:15 +01:00
gingerBill 9941ec85d8 Fix #2578 (check for fallthrough) 2023-06-07 12:18:21 +01:00
gingerBill ef944b903b "Fix" #2580 2023-06-07 12:13:20 +01:00
gingerBill 0c477f2c6b Merge pull request #2289 from Lperlind/staging/fix_os_args
Fix out of range error with _alloc_command_line_arguments in darwin
2023-06-07 12:06:43 +01:00
gingerBill 151396507e Merge pull request #1309 from Yawning/fix/freebsd-syscall
src: "Fix" the system call intrinsic for FreeBSD
2023-06-07 12:04:57 +01:00
gingerBill 8441c0c51e Merge pull request #2577 from Tetralux/refactor-init-context
[thread] Refactor handling of 'init_context' + add doc comments for it
2023-06-07 11:51:30 +01:00
gingerBill ae7bf468d1 Merge pull request #2573 from inbelic/inbelic/fmt-zero-padding
[fmt] fix zero-padding behaviour of numbers
2023-06-07 11:44:53 +01:00
gingerBill 907ef82d4b Merge pull request #2470 from odin-lang/separate-int-word-sizes
Separate int size from word/pointer size
2023-06-07 02:20:06 +01:00
gingerBill 7a1ab62987 Fix endianness for wasm64p32 2023-06-07 01:19:40 +01:00
gingerBill 295cfc905c Fix typo in wasm64p32 abi 2023-06-07 00:53:31 +01:00
gingerBill 204924927a Ignore non-variable parameters 2023-06-07 00:35:11 +01:00
gingerBill f622a8393c Change ABI for wasm64p32 on slices and structs 2023-06-07 00:30:14 +01:00
gingerBill d75df7fd8a Rename procs 2023-06-07 00:12:54 +01:00
gingerBill 2bc5e0ebd7 Fix non-constant compound literals of slices 2023-06-07 00:10:39 +01:00
gingerBill ca6cef9a7d Fix wasm intrinsics; fix len for strings and slices 2023-06-06 23:11:42 +01:00
gingerBill 1c2a30d7e9 Fix constant slice initialization for wasm64p32 2023-06-06 22:51:51 +01:00
gingerBill 4a75a1e839 Merge branch 'master' into separate-int-word-sizes 2023-06-06 22:42:04 +01:00
gingerBill 6a2ff3a371 Merge pull request #2571 from jakubtomsu/builtin-soa-procs-improvements
Update SOA dynamic array procs to match non-SOA
2023-06-06 22:40:27 +01:00
gingerBill 7ce1386d1a Merge pull request #2575 from RehkitzDev/master
added webgl bindFramebuffer
2023-06-06 22:39:17 +01:00
gingerBill d6f45e4d76 Fix fmt for js 2023-06-06 22:38:43 +01:00
gingerBill 356f66784f Fix @(default_calling_convention) check on wasm 2023-06-06 22:36:36 +01:00
Jeroen van Rijn 166ab7b600 Merge pull request #2579 from apahl/patch-1
Documentation: Tracking_Allocator example is leaking memory
2023-06-06 15:20:38 +02:00
Axel Pahl 1cdb0abf80 Update core/mem/doc.odin 2023-06-06 15:17:18 +02:00
gingerBill 0defd1d141 Correct printing in fmt for ODIN_ERROR_POS_STYLE 2023-06-06 11:17:34 +01:00
gingerBill 24ed07b6d5 Add error requiring an explicit calling convention for foreign procedures 2023-06-06 11:12:14 +01:00
gingerBill ecad730945 Fix map_get typo 2023-06-06 11:08:09 +01:00
gingerBill efb7fd919b Minor fix to internal using logic with LLVM causing a compiler bug 2023-06-06 10:58:36 +01:00
Tetralux 5d6b923244 [thread] Refactor handling of 'init_context' + add doc comments for it 2023-06-03 08:08:18 +00:00
Rehkitzdev d8752da7d5 added webgl bindFramebuffer 2023-06-02 22:19:32 +02:00
finn 6952124988 [fmt] fix zero-padding behaviour of numbers
- when formatting a negative number with left zero-padding we expect the
  padding to be placed between the minus (-) sign and the number
- currently the padding is placed before the sign
2023-06-01 16:04:07 +02:00
jakubtomsu a6c93e2c41 Update SOA dynamic array procs to match non-SOA 2023-06-01 13:42:26 +02:00
gingerBill 788f3c22bf Merge branch 'master' of https://github.com/odin-lang/Odin 2023-05-31 22:23:53 +01:00
gingerBill c194dfbdf7 Remove thread.init_context = context 2023-05-31 22:23:47 +01:00
gingerBill 5e996a1c02 Merge pull request #2568 from RehkitzDev/master
fixed webgl BindFramebuffer parameter
2023-05-31 20:48:00 +01:00
Rehkitzdev b52bf11ea5 fixed webgl BindFramebuffer parameter 2023-05-31 21:44:30 +02:00
gingerBill 7915dde43c Merge pull request #2504 from jon-lipstate/attr_error
helpful error on custom-attrs
2023-05-31 14:08:33 +01:00
gingerBill 7675b9c28f Merge pull request #2564 from Lperlind/rand-docs
Document core:math/rand and add 'possible output'
2023-05-31 14:08:21 +01:00
Lucas Perlind ebe5636307 Document core:math/rand and add 'possible output'
Possible output allows us to just type check a test
and have some sort of output field in the docs but
not actually verify it matches stdout
2023-05-31 09:49:12 +10:00
gingerBill 6fe2df1d7d Add more documentation to numerous @builtin procedures in package runtime 2023-05-30 23:42:21 +01:00
gingerBill 5376d32772 Parse leading comment above attribute for value declarations 2023-05-30 23:06:04 +01:00
gingerBill 2924e478ee Improve check_decl_attributes logic for is_runtime 2023-05-30 20:36:43 +01:00
gingerBill 297700ad11 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-05-30 20:26:27 +01:00
gingerBill 9d29914304 Don't strip builtin attribute form AST 2023-05-30 20:26:22 +01:00
jon lipstate b223bc0302 Merge branch 'odin-lang:master' into attr_error 2023-05-30 08:23:28 -07:00
gingerBill 3562a38f8c Merge pull request #2558 from laytan/implement-set-blocking-darwin
implement non blocking sockets for darwin
2023-05-30 02:15:20 +01:00
gingerBill 201544ef8b Merge pull request #2559 from wiremoons/patch-1
Update build_odin.sh to better support optimisation on Arm CPUs
2023-05-30 02:13:46 +01:00
gingerBill 837ba6c33b Minor change to #reverse for logic; add comments explaining it 2023-05-30 00:21:40 +01:00
gingerBill 3ab01dbc00 Fix type switch debug information on -o:none 2023-05-30 00:05:52 +01:00
gingerBill c241edaa30 Add missing procedure for #reverse on strings 2023-05-30 00:05:24 +01:00
gingerBill e0530df98a Support #reverse for strings 2023-05-29 23:45:21 +01:00
gingerBill 6cbce9fdff Merge pull request #2563 from charles-l/master
WASM: Use BasicC ABI convention for arguments that have `proc "c"`
2023-05-29 23:33:58 +01:00
gingerBill c1eb536726 Change to "contextless" from "c"` 2023-05-29 23:30:48 +01:00
gingerBill b848ae7abb Improve error message for #reverse on an interval 2023-05-29 23:27:42 +01:00
gingerBill f07453d0ae Support #reverse on #soa arrays 2023-05-29 23:24:03 +01:00
charles 052051244f WASM: Use BasicC ABI convention for arguments that have a proc "c" annotation 2023-05-29 18:20:25 -04:00
gingerBill 97490c6445 Basic support for #reverse for in on normal arrays 2023-05-29 23:17:06 +01:00
gingerBill 1247d36a12 Fix #2562 caused by inlining of procedure call 2023-05-29 22:57:42 +01:00
gingerBill f3a463000d Fix #2561 - ARM64 ABI bug for homogenous structs with more than 4 elements 2023-05-29 22:50:28 +01:00
gingerBill c38842ecb2 Merge pull request #2535 from jasonKercher/fix2515
Fix #2515 - Implement backward shift on `map` on insert and reseed hashes on resize
2023-05-29 22:41:46 +01:00
gingerBill 8b825b23b1 Add missing comma 2023-05-29 15:18:38 +01:00
gingerBill d2f62730bc Fix #2560 2023-05-29 14:55:27 +01:00
Simon Rowe d167d18bb3 Update build_odin.sh to better support optimisation on Arm CPUs
The `build_odin` flags include the option `release-native`.

The current `EXTRAFLAGS` set however don't work for Arm CPUs as they dont support `-march=native`.

Added code to detect CPU and either set the preferred flag for Arm CPUs (ie `-mcpu=native`) or keep the current default.

Information on preferred Arm CPU optimisation flag taken from here: https://community.arm.com/arm-community-blogs/b/tools-software-ides-blog/posts/compiler-flags-across-architectures-march-mtune-and-mcpu

Changes tested on an Apple Silicon M1 CPU (arm64) using HomeBrew installed llvm as follows:

```
Homebrew clang version 14.0.6                                                                                                                    
Target: arm64-apple-darwin22.5.0                                                                                                                 
Thread model: posix                                                                                                                              
InstalledDir: /opt/homebrew/opt/llvm@14/bin
```
2023-05-28 15:08:14 +01:00
Jeroen van Rijn 508d7c3336 Merge pull request #2557 from laytan/fix-weird-errno-on-darwin
fix weird errno returned on darwin
2023-05-27 23:26:45 +02:00
Laytan Laats 2b31d85cd4 implement non blocking sockets for darwin 2023-05-27 22:40:05 +02:00
Laytan Laats e350c37e6f fix weird errno returned on darwin 2023-05-27 21:49:39 +02:00
gingerBill 319a465429 Correct queue usage of runtime.Allocator_Error 2023-05-27 15:26:27 +01:00
gingerBill 9371325246 Fix typo 2023-05-25 12:19:41 +01:00
gingerBill 2fda3cf988 Remove os dependency in primitives_openbsd.odin 2023-05-25 12:17:39 +01:00
gingerBill 03b7194c97 Remove os dependency for futex_openbsd.odin 2023-05-25 12:05:58 +01:00
gingerBill 39bff40a75 Make many core:unicode/utf8 procedures "contextless" 2023-05-25 11:58:42 +01:00
gingerBill 3dc6edfd2d Merge branch 'master' of https://github.com/odin-lang/Odin 2023-05-25 11:58:09 +01:00
gingerBill 762747273e Add mutex to mem.Tracking_Allocator 2023-05-25 11:58:02 +01:00
gingerBill 0f392a95ae Merge pull request #2549 from NoahR02/update-vulkan
Update Vulkan
2023-05-24 23:17:06 +01:00
gingerBill 29786b0024 Merge pull request #2555 from ryhor-spivak/fix_windowplacement
Remove rcDevice field from WINDOWPLACEMENT
2023-05-24 23:14:42 +01:00
gingerBill 32ca50a097 Fix special printing for certain named types with fmt.printf related procedures 2023-05-24 20:54:30 +01:00
Ryhor Spivak 8012e6fa43 Remove rcDevice field from WINDOWPLACEMENT. Add WaitMessage and SetWindowPlacement.
rcDevice is under #ifdef _MAC in WinUser.h and _MAC is defined only for PowerPC Mac builds.
2023-05-24 15:14:30 +03:00
gingerBill 54b7cefb09 Fix lua.MAXSTACK 2023-05-24 10:21:53 +01:00
gingerBill 3a61350f4b Add debug messages to docs_writer.cpp 2023-05-22 21:48:32 +01:00
gingerBill bdbbaf6c88 Disable stable_type_cache for the time being 2023-05-22 21:34:20 +01:00
gingerBill 24a1a8a626 Keep -vet happy 2023-05-22 20:48:49 +01:00
gingerBill 38b64dc5df Improve doc_writer.cpp performance 2023-05-22 20:48:13 +01:00
gingerBill e3360a0e5d Merge branch 'master' of https://github.com/odin-lang/Odin 2023-05-22 20:44:07 +01:00
gingerBill 4181444734 Add vendor:darwin/MetalKit to examples/all 2023-05-22 20:44:01 +01:00
gingerBill 7958708641 Add missing class method to NS.Number 2023-05-22 20:43:41 +01:00
gingerBill 40a8ed535a Add @(require_results) to core:math/ease 2023-05-22 20:43:19 +01:00
Jeroen van Rijn c7d571f0b5 Merge pull request #2553 from laytan/fix-2550-json-unicode-issue
fix #2550 json encoding should use surrogate pairs per RFC7159
2023-05-22 18:28:59 +02:00
Laytan Laats 5d54b710e7 fix #2550 json encoding should use surrogate pairs per RFC7159 2023-05-22 17:22:33 +02:00
gingerBill 248f14a1ef Correct entity flag generation 2023-05-22 15:29:01 +01:00
gingerBill b76fc58543 Inline are_types_identical_unique_tuples to improve odin_doc_type performance 2023-05-22 15:23:24 +01:00
gingerBill 9fc9981a9e Update calling convention to the most appropriate
- "odin" if the `context` is needed for `assert`
- "contextless" if multiple return values are needed (better for optimizations)
- "c" otherwise
2023-05-22 15:04:33 +01:00
gingerBill 8f563df7c5 Use proc "c" calling convention in NS Foundation package 2023-05-22 14:59:24 +01:00
gingerBill 730192adc4 Add procedure groups for Device_newBuffer and Texture_newTextureView 2023-05-22 14:51:46 +01:00
gingerBill 8bf32ac697 Minor change to handling of propagation of errors with --- as a value 2023-05-22 12:53:29 +01:00
gingerBill 540f724b1f Fix --- on variable declarations 2023-05-22 12:42:02 +01:00
gingerBill d5a8f2298e Restrict --- to variable declarations only 2023-05-22 12:37:26 +01:00
gingerBill 18c5a53685 Add @(require_results) and contextless to procedures in core:math/bits 2023-05-22 12:13:44 +01:00
gingerBill a1172d31f4 Add @(require_results) to core:math/fixed 2023-05-22 12:11:53 +01:00
gingerBill 396debb9cb Add @(require_results) to core:math/linalg's glsl and hlsl packages 2023-05-22 12:11:18 +01:00
gingerBill c4cb2f2378 Add "contextless" to core:math/linalg procedures 2023-05-22 12:07:37 +01:00
gingerBill 74ce99e0d7 Add @(require_results) core:math/linalg procedures 2023-05-22 12:05:56 +01:00
gingerBill 89a233ccd2 Add @(require_results) to core:math/noise 2023-05-22 12:00:17 +01:00
gingerBill 2df6cabee0 Add @(require_results) to core:math/rand 2023-05-22 11:59:44 +01:00
gingerBill 82023cd629 Add @(require_results) to core:math procedures 2023-05-22 11:58:01 +01:00
gingerBill 1e17f44991 Improve error handling for resize and reserve procedures 2023-05-22 11:47:36 +01:00
gingerBill 600c97cc0f Add missing Allocator_Error and @(require_results) to many procedures 2023-05-22 11:34:38 +01:00
gingerBill 7298054974 Add require_results to make builtin procedures 2023-05-22 11:19:13 +01:00
J.C. Moyer 4d5a442d1f Use compound literal storage for ValueDecl lvals
Prior to this commit, if a variable was initialized using a compound
literal, its associated storage would not be set. This commit makes the
variable always take on the storage of the compound literal.

Fixes #2466
2023-05-21 16:43:34 -04:00
J.C. Moyer 249f42f054 Add test for #2466 2023-05-21 16:42:48 -04:00
NoahR02 87788142bf Generate the new vulkan files 2023-05-20 19:15:32 -04:00
NoahR02 f0b08a6c67 Add required metal types 2023-05-20 19:14:19 -04:00
NoahR02 a144a49a9a Parse vulkan video constants in seperate section and
add MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT to the base constants
2023-05-20 19:07:34 -04:00
NoahR02 2167f1b567 Make sure the 's' is after Flags and not the ext name 2023-05-20 18:58:40 -04:00
NoahR02 c5c723b80c Parse C bit fields in parse_structs 2023-05-20 18:42:49 -04:00
NoahR02 66461c9dbc Parse Vulkan Video headers 2023-05-20 18:28:39 -04:00
NoahR02 d77103e53e Add MicromapUsageEXT** to convert_type
We should probably parse this in parse_structs.
2023-05-20 18:18:50 -04:00
Jeroen van Rijn 963908e508 Merge pull request #2548 from ntn9995/fix_stb_truetype
add missing fields to fontinfo
2023-05-20 15:33:11 +02:00
ikarus 9e5677ab02 add missing fields to fontinfo 2023-05-20 20:07:41 +07:00
gingerBill 46bb9bc5c7 Enforce an icmp when casting to i1 to correct behaviour for booleans which are not 0 or 1 2023-05-20 12:41:30 +01:00
Jeroen van Rijn 118ab60588 Merge pull request #2521 from elusivePorpoise/main
remove misleading defer if example
2023-05-19 22:01:13 +02:00
Elusive Porpoise 223ae61c89 added error printing 2023-05-19 11:36:53 -07:00
Jeroen van Rijn 1f4baba06e Merge pull request #2479 from Naught00/master
Change default executable extension for non-Windows platforms
2023-05-19 20:09:39 +02:00
Mark Naughton fa1ce7d5d1 Fix accidental check in 2023-05-19 18:56:35 +01:00
Mark Naughton 775a488a36 Fix windows write_directory() 2023-05-19 18:53:43 +01:00
Mark Naughton 018904f0ec Add write permissions check on output folder 2023-05-19 18:37:55 +01:00
Jeroen van Rijn b358641e7d Merge pull request #2547 from laytan/parse-address-can-return-nil
fix parse_address can return nil
2023-05-19 19:28:24 +02:00
Laytan Laats ff745e0ad8 fix parse_address can return nil 2023-05-19 19:14:25 +02:00
gingerBill 4201834b18 Make intrinsics.type_merge form a union of the types; ignoring duplicates 2023-05-19 12:11:18 +01:00
gingerBill 2631e07bea Add intrinsics.type_merge 2023-05-19 11:18:20 +01:00
Jeroen van Rijn 76a1851cb8 Merge pull request #2546 from kstreets/master
Fix #2545 - Typo in vec4 lerping procedures
2023-05-18 22:40:44 +02:00
KyleRhoads45 87a1792677 Fix #2545 - Typo in vec4 lerping procedures 2023-05-18 13:19:22 -07:00
Mark Naughton 413077a5d9 Fix single-file package case 2023-05-18 13:23:17 +01:00
gingerBill d56fdd2937 Add fmt:"s,0" tags to UTF-16 strings in dxgi.odin 2023-05-18 12:00:23 +01:00
gingerBill 6639b7d017 Merge pull request #2500 from Ahsan-Sarbaz/master
Fixed a bug in DXGI
2023-05-18 11:57:55 +01:00
gingerBill 7702a488e5 Merge pull request #2474 from cshenton/patch-1
Add Dynamic Resource Root Signature flags
2023-05-18 11:56:35 +01:00
gingerBill 3108752a0c Fix #2518 2023-05-18 11:55:37 +01:00
gingerBill 56c0d32ea0 Fix #2526 2023-05-18 11:52:16 +01:00
gingerBill c0e84b0592 Fix #2536 2023-05-18 11:39:18 +01:00
gingerBill f2e590be7a Fix #2544 2023-05-18 11:35:47 +01:00
gingerBill 60ec3594ab Remove unused variable 2023-05-18 11:29:27 +01:00
gingerBill 49d1f6aca0 Merge branch 'master' into separate-int-word-sizes 2023-05-18 11:26:57 +01:00
gingerBill 49cd9648b0 Merge pull request #2512 from jasonKercher/master
update os2 to match core changes
2023-05-18 11:26:16 +01:00
gingerBill 1692dcf8d5 Merge pull request #2514 from ryuukk/patch-2
Missing cast
2023-05-18 11:26:02 +01:00
gingerBill 5ec4719124 Merge pull request #2523 from jcmoyer/fix-2056
Zero non-diagonal elements when converting to matrix
2023-05-18 11:25:44 +01:00
gingerBill 911c98e235 Merge pull request #2525 from laytan/fix-buffer-init-cap-0-wrong-allocator
fix bytes.buffer_init_allocator not using given allocator if len/cap is 0
2023-05-18 11:24:27 +01:00
gingerBill 535c64c318 Merge pull request #2534 from Tetralux/fix-append-nothing-loc
[runtime] Pass along #caller_location in append_nothing()
2023-05-18 11:23:46 +01:00
gingerBill 171f38b9b5 Allow implicit conversion between boolean types within or_return
This is to improve the experience using third-party code, especially foreign C-like code which may use a distinct boolean or a different sized one
2023-05-18 11:06:02 +01:00
jason b2645b3201 add rehash to map_shrink_dynamic 2023-05-17 00:06:31 -04:00
jason a9936d1570 implement random map seed 2023-05-16 23:49:55 -04:00
jason 3032a4274d implement backward shift during map insertion 2023-05-16 16:56:32 -04:00
Jeroen van Rijn 31c21a054b Merge pull request #2543 from Yawning/fix/cpuid-test
core/sys/info: Fix the CPUID check
2023-05-16 17:04:42 +02:00
Yawning Angel def4fdc3f3 core/sys/info: Fix the CPUID check
This needs to test that the n-th bit is set.
2023-05-16 23:52:15 +09:00
Jeroen van Rijn 3fed1af7df Merge pull request #2542 from Yawning/bug/cpuid-osxsave
core/sys/info: Workaround extremely rare XGETBV issues
2023-05-16 16:07:43 +02:00
Yawning Angel adb4692ce8 core/sys/info: Workaround extremely rare XGETBV issues
Someone ran into this on Discord, so adopt the same workaround that
chrome did, by checking both OSXSAVE and XSAVE before calling XGETBV.

The old way of detecting AVX is correct per Intel, but such is life.
2023-05-16 22:56:16 +09:00
gingerBill bb4ff84a4a Add extra mutex for error block stuff 2023-05-16 11:52:02 +01:00
Jeroen van Rijn 5d2c1b175e Merge pull request #2541 from laytan/add-hex-and-expand-percent-decoding
fix hex.encode and add tests for the package
2023-05-15 22:32:27 +02:00
Laytan Laats 2ab6de8ee4 fix hex.encode and add tests for the package 2023-05-15 20:52:07 +02:00
Jeroen van Rijn 1896ae5d15 Merge pull request #2533 from laytan/add-hex-and-expand-percent-decoding
add encoding/hex and use it to expand the percent decoding chars
2023-05-15 19:25:31 +02:00
Laytan Laats 6e4fab19a2 fix indentation and simplify hex.decode_sequence 2023-05-15 18:40:36 +02:00
gingerBill 103dcfe897 Merge pull request #2539 from powerc9000/patch-6
lua MAXSTACK should be 1000000 on 32 bits OR greater
2023-05-14 22:05:28 +01:00
Clay Murray 8caadbacf7 lua MAXSTACK should be 1000000 on 32 bits OR greater
Code only checks if 4 bytes for `rawptr` size. However lua defines the macro (that I assume the odin code is based on) as:

```
/*
@@ LUAI_IS32INT is true iff 'int' has (at least) 32 bits.
*/
#define LUAI_IS32INT	((UINT_MAX >> 30) >= 3)
```

This error broke `upvalues` because it would be looking for the wrong index for lua to find them at.
2023-05-14 14:00:38 -06:00
Jeroen van Rijn 870d776875 Merge pull request #2537 from CORDEA/feature/join-url-queries
Join URL queries with &
2023-05-14 09:03:10 +02:00
Yoshihiro Tanaka 59e66ffe49 Add test for net.split_url 2023-05-14 12:15:20 +09:00
Yoshihiro Tanaka 418a0132d0 Join URL queries with & 2023-05-14 12:15:20 +09:00
Laytan Laats a381846034 add encoding/hex and use it to expand the percent decoding chars 2023-05-14 03:23:24 +02:00
Tetralux 1c5ce75d9f [runtime] Pass along #caller_location in append_nothing() 2023-05-12 23:05:28 +00:00
gingerBill 8693a045bb Revert "Change intrinsics.read_cycle_counter on ARM64"
This reverts commit b567679eb6.
2023-05-12 11:50:49 +01:00
gingerBill b567679eb6 Change intrinsics.read_cycle_counter on ARM64 2023-05-12 11:34:01 +01:00
Jeroen van Rijn e6c8d3d1db Merge pull request #2532 from j0-1/j0-1-patch-1
Fixed incorrect header and typo
2023-05-11 22:28:37 +02:00
j0-1 12c4afd824 Fixed incorrect header and typo 2023-05-11 11:26:16 -07:00
Jeroen van Rijn 968a07ed7a Merge pull request #2531 from jasonKercher/fix2530
add nil check to heap_alloc calls (issue 2530)
2023-05-11 20:20:03 +02:00
jason f9c600a760 add nil check to heap_alloc calls (issue 2530) 2023-05-11 14:04:09 -04:00
Jeroen van Rijn 82561cfbac Merge pull request #2528 from matias-eduardo/patch-1
Patch "no_copy" typo in parser.cpp
2023-05-10 09:11:46 +02:00
matias 277ae4e2b0 Patch "no_copy" typo in parser.cpp 2023-05-10 02:58:17 -04:00
Jeroen van Rijn 0f9e747583 Merge pull request #2520 from matias-eduardo/master
Allow for custom sleep duration in tsc frequency fallback
2023-05-09 23:03:47 +02:00
Matias Fernandez 4e146a75b6 Allow user to pass in scale directly in spall.context_create 2023-05-09 16:43:26 -04:00
Jeroen van Rijn 33d0e2037b Merge pull request #2524 from laytan/fix-url-parse-leak
fix leak in url_parse
2023-05-09 21:46:51 +02:00
Laytan Laats 7a04b7262e fix bytes.buffer_init_allocator not using given allocator if len/cap is 0 2023-05-09 21:25:15 +02:00
Laytan Laats f2d5e4b995 fix leak in url_parse 2023-05-09 21:05:16 +02:00
J.C. Moyer ada42aa184 Add test for issue #2056 2023-05-09 12:37:12 -04:00
J.C. Moyer ed580b3060 Zero non-diagonal elements when converting to matrix
Fixes #2056
2023-05-09 12:00:38 -04:00
Jeroen van Rijn 29e4762011 Merge pull request #2519 from colrdavidson/revert-2462-master
Revert "Fix: header directories in Unix build script"
2023-05-09 08:27:47 +02:00
Elusive Porpoise eff4833840 remove misleading example 2023-05-08 23:13:27 -07:00
Matias Fernandez 9867037aa2 Revert "Add the waits that support I/O completion routines in kernel32.odin"
This reverts commit 46da53ba15.
2023-05-09 00:16:17 -04:00
Matias Fernandez 57c14f6a9b Allow custom sleep on tsc fallback.
This gives the user more control over the spectrum of precision vs. load time on Windows. Spall's output with much lower sleep times is still useful in my experience.

NOTE: A better API might be to allow the user to pass the freq as a param to "create_context" in case they already paid for it beforehand, but this seems fine for now.
2023-05-09 00:03:58 -04:00
Matias Fernandez 1ed105205c Merge branch 'master' of https://github.com/matias-eduardo/Odin 2023-05-08 23:52:21 -04:00
Colin Davidson 8233f49beb Revert "Fix: header directories in Unix build script" 2023-05-08 20:13:33 -07:00
Jeroen van Rijn 2c01a4613c Merge pull request #2516 from colrdavidson/read_at_fix
Make read_at and write_at more consistent between platforms
2023-05-07 08:52:37 +02:00
Colin Davidson b0eda47b26 prevent infinite-loop on EOF 2023-05-06 17:52:08 -07:00
Colin Davidson 291111e626 oops. define e 2023-05-06 17:23:44 -07:00
Colin Davidson 47693da4aa Make read_at and write_at more consistent between platforms 2023-05-06 17:14:11 -07:00
Jeroen van Rijn 9f39209712 Merge pull request #2513 from laytan/add-time-weekday
add time.weekday proc
2023-05-06 20:20:13 +02:00
Laytan Laats c47dcbbe2f fix spacing 2023-05-06 19:39:39 +02:00
ryuukk f313538ea5 Missing cast 2023-05-06 18:00:33 +02:00
Laytan Laats 956ffdf654 add time.weekday proc 2023-05-05 20:55:59 +02:00
jason ef4a527c36 default to O_NOCTTY in open 2023-05-04 11:46:39 -04:00
jason 3fe0680ad5 update os2 for recent core changes 2023-05-04 10:00:06 -04:00
gingerBill 182b269e46 Merge pull request #2511 from zhibog/botan3
Add Botan3 libraries and use VS 2022 for Windows builds
2023-05-03 22:14:17 +01:00
zhibog 05856ac93e Change nightly to VS 2022 too 2023-05-03 21:51:40 +02:00
zhibog 60c29e195a Windows requires the botan-3 naming due to the new release 2023-05-03 21:35:06 +02:00
zhibog 6b23662ce6 Fix typo 2023-05-03 21:15:50 +02:00
zhibog 77d6364405 Try Windows 2022, since the windows tests failed. Likely because I compiled them on a newer version of VS. Also added another when statement to make sure Linux still uses botan-2, because they haven't updated 2023-05-03 21:12:27 +02:00
zhibog 077a611a5e Add Botan 3.0, comment some tests, due to removed algorithms 2023-05-03 20:55:11 +02:00
gingerBill e82146bf17 Merge branch 'master' into separate-int-word-sizes 2023-05-03 17:06:37 +01:00
gingerBill 0c3522133d Fix indentation 2023-05-03 14:22:38 +01:00
Jeroen van Rijn 1223e8cf7f Merge pull request #2502 from jon-lipstate/ba-cleanup
Bit_Array: Update docs, add unsafe_get/set, round up on Create
2023-05-03 08:52:22 +02:00
Jon Lipstate bcb01bdc52 added set overload, made make explicit 2023-05-02 18:21:52 -07:00
gingerBill dfb5f8ea2c Merge pull request #2507 from powerc9000/patch-5
Fix check for continuation byte in core/text/text_edit
2023-05-02 22:04:44 +01:00
Clay Murray 02eab95dd1 Fix check for continuation byte in core/text/text_edit 2023-05-02 14:14:24 -06:00
gingerBill 67a1e6e46a Merge branch 'master' of https://github.com/odin-lang/Odin 2023-05-02 14:45:12 +01:00
gingerBill fda1e4409c When using -debug, default to -o:none unless explicitly specified 2023-05-02 14:44:56 +01:00
Jeroen van Rijn 703c1b0fcf Merge branch 'master' of github.com:odin-lang/Odin 2023-05-02 14:16:21 +02:00
Jeroen van Rijn e1654e9dd3 Don't test Botan on MacOS for now
Homebrew decided to update the formula for Botan to support version 3.0 of the package only.

Until we update the bindings and the Windows library to match, we can't test on Mac.
2023-05-02 14:16:07 +02:00
gingerBill f8bdd42027 Revert "Unify foreign import for vendor:sdl2"
This reverts commit b2b88f1d99.
2023-05-02 12:06:41 +01:00
Jon Lipstate f5dcbf517b helpful errors custom-attrs 2023-04-30 18:36:00 -07:00
Jon Lipstate 075193af1d update docs, add unsafe_get/set, add round up to create 2023-04-30 16:56:05 -07:00
Ahsan-Sarbaz 808e7ed4ae Fixed Bug in DXGI 2023-05-01 00:16:20 +05:00
gingerBill f0ba5d3821 Merge pull request #2490 from eltociear/patch-1
Fix typo in marshal.odin
2023-04-28 12:17:35 +01:00
gingerBill 88f6b5f16b Merge pull request #2492 from GiveMeFox/patch-1
Update README.md
2023-04-27 14:33:26 +01:00
gingerBill 68e6e1b779 Merge pull request #2496 from AquaGeneral/master
linalg/extended radians and degrees fixed
2023-04-27 14:33:00 +01:00
Jesse Stiller 9528325777 linalg/extended radians and degrees fixed
Renamed them to `to_degrees` and `to_radians` to match the same scalar functions in math--plus it helps clarify exactly what they do. And fixed a bug where the array overloads weren't being indexed.
2023-04-27 20:49:59 +10:00
gingerBill b3aa6afba9 Fix #2481 2023-04-27 11:35:14 +01:00
gingerBill 716fe2f427 Fix typo #2485 2023-04-27 11:32:19 +01:00
gingerBill 7df1cc075c Fix #2487 2023-04-27 11:31:05 +01:00
gingerBill b0f0a02d3c Make !x be an untyped boolean 2023-04-27 11:26:15 +01:00
gingerBill 7cda64e52d Add parentheses around or_return uses in an unary expression 2023-04-27 11:17:23 +01:00
gingerBill d6d34bd62f Add extra nullptr check 2023-04-27 11:16:02 +01:00
gingerBill 68dde07d5d Require parentheses around certain uses of or_return expressions 2023-04-27 11:13:05 +01:00
gingerBill fad4ae8eb2 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-04-27 10:58:22 +01:00
gingerBill acd8a4bc95 Unify check_constant_parameter_value logic 2023-04-27 10:58:17 +01:00
Jeroen van Rijn 6714e05183 Merge pull request #2494 from jon-lipstate/strings_docfix
Strings docfix
2023-04-27 10:01:01 +02:00
Jon Lipstate f9b5f2b7b1 update builder sample 2023-04-26 18:04:24 -07:00
Jon Lipstate 67fa5df89c fix typo, add builder sample 2023-04-26 18:00:14 -07:00
gingerBill 023cc9ca54 Partially buffer fmt.fprint* related calls using a bufio.Writer 2023-04-27 00:24:00 +01:00
GiveMeFox b7924de5c6 Update README.md
updated the discord link
2023-04-26 22:49:31 +02:00
Mark Naughton 4b4481ea27 Simplify extension addition logic 2023-04-26 16:39:47 +01:00
Ikko Eltociear Ashimine 47be46ae60 Fix typo in marshal.odin
seperation -> separation
2023-04-27 00:03:36 +09:00
Mark Naughton e84802468b Use buildpath instead of init_filename 2023-04-26 15:48:59 +01:00
gingerBill 623d789529 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-04-26 15:28:37 +01:00
gingerBill 827f36e2c0 Update to Metal 3 2023-04-26 15:28:30 +01:00
Mark Naughton 1a5ed4eb7f Fix .bin not being applied for relative directory 2023-04-26 14:10:22 +01:00
Mark Naughton 5151403aaa Fix Windows version of get_current_directory 2023-04-25 12:08:15 +01:00
Jeroen van Rijn d5772c939a Merge pull request #2483 from jprukner/fix-alias-which-check
Fix which command check
2023-04-25 08:32:45 +02:00
Jan Prukner 19097bc5bc add redirect to /dev/null 2023-04-25 07:06:36 +02:00
Jan Prukner dbebe9e92c Fix which command check
The function have_witch failed because which is an alias in my environment.

This change makes the function work even if which command is an alias.
2023-04-24 21:47:27 +02:00
gingerBill be0a543077 Merge pull request #2480 from jakubtomsu/soa-ptr-formatting-fix
Fix panic during fixed-size #soa array pointer formatting in `core:fmt`
2023-04-24 16:43:41 +01:00
Mark Naughton 67b6a8ee89 Add Windows equivalent of get_current_directory 2023-04-24 14:26:53 +01:00
Mark Naughton 780375d865 Add .bin extension in extra case 2023-04-24 12:57:59 +01:00
Mark Naughton cbcf94669e Add get_current_directory() 2023-04-24 12:57:34 +01:00
Matias Fernandez 46da53ba15 Add the waits that support I/O completion routines in kernel32.odin 2023-04-23 22:08:12 -04:00
Mark Naughton 06e8d03fba Use last element for directory collision check 2023-04-23 21:15:08 +01:00
jakubtomsu 65bf7f6653 Remove typo 2023-04-23 20:00:25 +02:00
Mark Naughton a6b9341593 Add .bin extension the case of a collision
The directory name is used to determine the executable name. In the case
that the directory and output executable are in conflict, a .bin
extension is added.
2023-04-23 18:53:00 +01:00
Mark Naughton 47610725ea Change default executable extension
Putting a program into your path on a UNIX system with a
file extension means that you have to type the extension out for every
invocation of the program. A better default is to have no extension at
all since most people will end up removing it anyway.

This change does not affect Windows since the .exe extension is set
after the default extension if compiling on Windows.
2023-04-23 17:02:56 +01:00
Jeroen van Rijn 341ba34773 Merge pull request #2478 from matias-eduardo/master
Add IsWindow to user32.odin
2023-04-23 09:59:36 +02:00
Matias Fernandez 3b2864d8a6 Add IsWindow to user32.odin
This is useful for checking if window has been closed without going through the WindowProc.
2023-04-22 17:49:16 -04:00
Charlie Shenton c7d4af5c79 Add Dynamic Resource Root Signature flags
Add flag values associated with dynamics resources (ResourceDescriptorHeap and SamplerDescriptorHeap) see https://microsoft.github.io/DirectX-Specs/d3d/HLSL_SM_6_6_DynamicResources.html for details
2023-04-22 16:39:01 +10:00
gingerBill f2ec438166 Add ifdef block 2023-04-21 12:50:36 +01:00
gingerBill a95b064d6d Fix memory leak caused by awful realloc usage on Linux 2023-04-21 13:29:38 +01:00
Jeroen van Rijn c503a75873 Merge pull request #2472 from Kelimion/resolv_fix
Fix #2471
2023-04-21 10:04:27 +02:00
Jeroen van Rijn 9a982cc5b5 Fix #2471 2023-04-21 08:35:21 +02:00
gingerBill 685f7d0fea Rename word_size to ptr_size internally to make it clearer 2023-04-20 12:18:13 +01:00
gingerBill f5d9ca64f9 Begin work on new pseudo-architecture: wasm64p32 2023-04-20 12:02:32 +01:00
gingerBill cde442fa2c Add internal padding to types where ptr size != int size 2023-04-20 11:55:18 +01:00
gingerBill 84f966cb8f Begin work on separating int and word sizes (i.e. size_of(int) might not equal size_of(uintptr)) 2023-04-20 11:46:41 +01:00
gingerBill b2b88f1d99 Unify foreign import for vendor:sdl2 2023-04-20 11:27:36 +01:00
gingerBill 9d23a392a6 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-04-20 11:27:14 +01:00
gingerBill 57214c63cb Merge pull request #2457 from jakubtomsu/master
Handle unmarshalling unknown values in `core:encoding/json`
2023-04-20 11:27:09 +01:00
gingerBill 6726df4d58 Allow aliasing foreign import name 2023-04-20 11:20:15 +01:00
gingerBill 02a58c1247 Merge pull request #2464 from ap29600/simd_unaligned_load
Improve code generation for `intrinsics.unaligned_load/store` on `#simd` types
2023-04-20 10:33:32 +01:00
gingerBill 72a7b35513 Merge pull request #2450 from destroycomputers/master
Fix intrinsics.alloca code generation
2023-04-20 10:25:43 +01:00
gingerBill 2d699fd13b Fix again append on zero sized types 2023-04-19 15:34:40 +01:00
gingerBill 13c321b8fb Fix missing cast in array_elems 2023-04-19 15:31:51 +01:00
Jeroen van Rijn fa42a788c8 Preserve port when calling net.resolve with hostname:port. 2023-04-18 18:24:27 +02:00
gingerBill 843eaf8893 Fix race condition with -use-separate-modules due to type determination 2023-04-18 17:20:50 +01:00
gingerBill 30fa8f8ac2 Add missing enum 2023-04-18 16:08:54 +01:00
gingerBill 0ec4e8d5d4 Inline static map calls for map get, and improve readability of the LLVM IR 2023-04-18 15:17:16 +01:00
Andrea Piseri af63eff8d7 improve code generation for intrinsics.unaligned_load/store on #simd types
the default implementation calls memcpy on an `alloca` constant, which
seems to heavily confuse the optimizer and produces overall suboptimal
code.

Introducing this specialization simplifies the intermediate
representation produced, resulting in more efficient code.
2023-04-16 15:01:30 +02:00
Jeroen van Rijn b5d2dd617d Merge pull request #2462 from lefp/master
Fix: header directories in Unix build script
2023-04-16 10:45:04 +02:00
Peter Lef 8d951ab7f1 Fix: header directories in Unix build script 2023-04-16 04:16:31 -04:00
gingerBill e24315eed8 Improve grammar 2023-04-15 16:16:16 +01:00
gingerBill dc55e88588 Add @(deferred_*_by_ptr=<proc>) 2023-04-15 16:04:04 +01:00
gingerBill 7abaf77292 Add struct #no_copy 2023-04-15 15:47:18 +01:00
gingerBill e79883e4fd Add #no_copy to sync primitives 2023-04-15 15:41:30 +01:00
gingerBill 5da76ae34b Add struct #no_copy 2023-04-15 15:37:32 +01:00
jakubtomsu a6d5f9877f Convert indentation to tabs 2023-04-14 17:27:52 +02:00
jakubtomsu 994825671d Handle unmarshalling to json.Value 2023-04-14 15:05:25 +02:00
Jeroen van Rijn b7b5043aea Merge pull request #2455 from nektro/patch-1
build_odin.sh: fix typo introduced in detection of llvm-config-11-64
2023-04-12 21:19:12 +02:00
Meghan 1bf4a6f711 build_odin.sh: fix typo introduced in detection of llvm-config-11-64
appeared in https://github.com/odin-lang/Odin/commit/b22d71a74e5cd9ad6f810a2a7d155523bb7c0782
2023-04-12 12:18:11 -07:00
Jeroen van Rijn 073f51e284 Merge pull request #2453 from TriedAngle/patch-1
Fix: `Unable to find LLVM-config` on Ubuntu
2023-04-12 20:04:19 +02:00
TryAngle b5784bc2ef Fix: Unable to find LLVM-config on Ubuntu
appends a check for llvm-config-14 on linux
2023-04-11 15:08:31 +02:00
Jeroen van Rijn b42bb5be26 Only try to parse git hash if .git is present
Closes 2451
2023-04-11 11:55:29 +02:00
destroycomputers b6f356c211 Fix intrinsics.alloca code generation
There was a disconnect between the declared return type for alloca
intrinsic in check_builtin.cpp (multi_pointer(t_u8)) and the generated
result type in llvm_backend_proc.cpp (t_u8_ptr).

This allowed slicing the return type, but in the code generation process
the type of the expression wasn't sliceable, which triggered the assert.

Fixes #2139
2023-04-11 01:11:01 +02:00
Jeroen van Rijn b052da1065 Merge pull request #2446 from RestartFU/master
fix SendInput procedure in core:sys/windows/user32.odin
2023-04-09 09:34:05 +02:00
RestartFU 586e85281e fix SendInput function in user32 2023-04-08 23:13:37 +00:00
Jeroen van Rijn ec3ea3752f Add Vulkan-Wayland to wrapper generator
Closes #2442
2023-04-08 13:26:38 +02:00
Jeroen van Rijn 8294480cb4 Merge pull request #2443 from limaak/fix/darwin-arm64-build-sh
build_odin.sh - fix build on darwin arm64
2023-04-08 10:21:17 +02:00
Jeroen van Rijn 6fe8692b98 Merge pull request #2445 from Lperlind/documentation/strings_returns
Document return values of strings and add allocator errors where possible
2023-04-08 10:05:39 +02:00
Jeroen van Rijn d8e0a86600 Revert "Add VK Wayland"
This reverts commit 8b29b07f5a.
2023-04-08 09:54:02 +02:00
Jeroen van Rijn 8b29b07f5a Add VK Wayland
Closes #2442
2023-04-08 09:51:34 +02:00
Jeroen van Rijn 1d6936fafc Merge pull request #2444 from Yawning/fix/modern-crypto-cleanups
core/crypto: Cleanups/fixes
2023-04-08 09:34:28 +02:00
kamil-beker b22d71a74e build_odin.sh - fix build on darwin arm64
Done:
- use ARCH variable properly
- refactor have_which() to use POSIX compliant command - ref
- use command instead of which for the same reason as above.
- run shfmt for consistency.
2023-04-08 08:54:53 +02:00
Yawning Angel 7fc2081543 core/crypto: Add private attributes for internals
These constants and internal routines are not intended for use outside
the actual implementations themselves.
2023-04-08 10:15:00 +09:00
Yawning Angel b8c2b0105b core/crypto: Disable optimization for the ct byte compare
Hedge against the possibility of a compiler getting clever enough to
optimize this pattern as well.
2023-04-08 10:11:04 +09:00
Yawning Angel d72db2698b core/crypto/_fiat: Hedge against LLVM cleverness
Recent LLVM is getting smart to the point where the optimizer can change
a traditional constant-time conditional swap into a pointer swap.

Ensure that this does not happen by force-disabling optimization.
Additionally, disable inlining the relevant routines such that manual
inspection in optimized builds is still reasonably easy to do.
2023-04-08 09:57:47 +09:00
Lucas Perlind e0d9092df8 Document return values of strings and add allocator errors where
possible
2023-04-07 20:39:01 +10:00
Jeroen van Rijn f863264af6 Merge pull request #2441 from Lperlind/doc/fixup
Re-enable documentation CI and improve error messages
2023-04-07 07:30:38 +02:00
Jeroen van Rijn 14736c2a8b Merge pull request #2440 from jon-lipstate/doc_fixed
resolve doc-test issues
2023-04-07 07:24:16 +02:00
Lucas Perlind 0af1b75a02 Re-enable documentation CI and improve error messages 2023-04-07 09:16:50 +10:00
Jon Lipstate 7a8aa03e54 doc tests verified 2023-04-06 14:58:57 -07:00
Jon Lipstate 846c0f7cfc add decimal subpackage ref 2023-04-06 09:56:27 -07:00
Jon Lipstate 1886193c6c resolve doc-test issues 2023-04-06 09:44:57 -07:00
Jeroen van Rijn 100e907890 Temporarily disable doc tests. 2023-04-06 16:09:44 +02:00
Jeroen van Rijn 383c222553 Merge pull request #2421 from jon-lipstate/strconv_docs
Code Docs for strconv
2023-04-06 15:38:32 +02:00
gingerBill ae6e76bbb3 Merge pull request #2435 from Lperlind/master
Fix type comparison not accounting for parapoly params
2023-04-06 12:56:25 +01:00
Jon Lipstate ed7284add2 parens 2023-04-06 00:14:46 -07:00
Jon Lipstate 9ecbd70daa parens 2023-04-06 00:02:57 -07:00
Jon Lipstate b8989d9bf9 strconv docs 2023-04-05 23:52:11 -07:00
Jon Lipstate 0f1c5b3891 correct errors 2023-04-05 22:22:16 -07:00
Jon Lipstate 41ff7a6010 Merge branch 'master' into strconv_docs 2023-04-05 22:20:21 -07:00
gingerBill 0234f50da1 Merge pull request #2439 from karl-zylinski/master
SJSON parser: Fix for broken single letter keys
2023-04-05 21:49:06 +01:00
Karl Zylinski d7cc166eab Fix for skip_alphanum in JSON tokenizer not checking if first character is non-alphanum. This broke any single-character key when using SJSON specification in combination with not using quoted strings. 2023-04-05 22:37:05 +02:00
gingerBill eef44425c3 Default zlib foreign import 2023-04-05 17:39:56 +01:00
gingerBill 167b320cdd Remove cmark from all_vendor.odin 2023-04-05 17:35:53 +01:00
gingerBill dcf53236ff Generalize the foreign import for unsupported platforms 2023-04-05 17:31:43 +01:00
gingerBill 5b1a531755 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-04-05 17:26:56 +01:00
gingerBill 97b2d1fe5c Update README.md 2023-04-05 17:26:48 +01:00
gingerBill c5af69ffa6 Add vendor:lua/5.1 2023-04-05 17:25:30 +01:00
gingerBill 12d56103d9 Minor fixes 2023-04-05 16:52:27 +01:00
gingerBill 8ff713f3bb Add vendor:lua/5.2 2023-04-05 16:52:17 +01:00
gingerBill 03972d565e Alignment fix 2023-04-05 16:31:25 +01:00
gingerBill 4dcf253330 Add vendor:lua/5.3 2023-04-05 16:30:08 +01:00
gingerBill 012f386057 Add linux binaries 2023-04-05 16:16:48 +01:00
gingerBill 3fa684d6ba Update examples/all/all_vendor.odin 2023-04-05 16:08:57 +01:00
gingerBill 8c327567c0 Minor change to L_loadbuffer's signature 2023-04-05 16:05:39 +01:00
gingerBill 31bc982a53 Fix typo 2023-04-05 16:00:58 +01:00
gingerBill cbd2d89637 Add LICENSE 2023-04-05 15:58:06 +01:00
gingerBill 67151d39e1 Add README.md 2023-04-05 15:56:56 +01:00
gingerBill d715158fe3 Add vendor:lua/5.4 2023-04-05 15:55:55 +01:00
Jeroen van Rijn 75c0eef6ac Merge pull request #2438 from Naught00/master
Add script for removing platform-specific libs
2023-04-05 12:42:38 +02:00
Mark Naughton 4030c5a689 Add assert_vendor to Darwin and *BSD 2023-04-05 11:34:41 +01:00
Mark Naughton 119cafd963 Add assert_vendor() sub-routine 2023-04-05 11:28:54 +01:00
Mark Naughton 5fc54ec7e5 Add script for removing platform-specific libs 2023-04-05 11:09:31 +01:00
Jeroen van Rijn fb0b9de7a9 Merge pull request #2423 from jon-lipstate/wsapoll
Winsock updates, iocp calls
2023-04-05 09:08:07 +02:00
Jon Lipstate 2c9156e2c1 repaired autoformatter 2023-04-04 23:57:52 -07:00
Jon Lipstate 236347b5bc retain runtime load sample 2023-04-04 23:11:01 -07:00
Jon Lipstate c5d2b01923 remove runtime signatures to prevent ffi collisions 2023-04-04 23:03:19 -07:00
Jon Lipstate bf75fd9d34 Revert "remove keyedevent"
This reverts commit 219343f3c0.
2023-04-04 22:02:37 -07:00
Jon Lipstate 9a8c69d1c0 remove duplicate 2023-04-04 22:01:44 -07:00
Jon Lipstate 6c943722f3 add non Ex variant 2023-04-04 22:00:22 -07:00
Jon Lipstate 219343f3c0 remove keyedevent 2023-04-04 11:47:26 -07:00
gingerBill 36b2f13ee0 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-04-04 12:11:18 +01:00
gingerBill 70ce878dfb Add -max-error-count:<integer> 2023-04-04 12:11:12 +01:00
Jeroen van Rijn 9c1612f122 Merge pull request #2437 from elusivePorpoise/master
sys/windows: add a bunch of consts, a function and rename a struct
2023-04-04 09:56:05 +02:00
Jon Lipstate 6cba4d3483 iocp support 2023-04-04 00:42:38 -07:00
Jon Lipstate 738cf837de additional winsock apis, doc links 2023-04-04 00:32:34 -07:00
Jon Lipstate 2550918f27 Merge remote-tracking branch 'origin' into wsapoll 2023-04-03 23:57:28 -07:00
Elusive Porpoise aa5a222c6d Add creation, thread priority, and copy file flags. 2023-04-03 22:33:40 -07:00
Elusive Porpoise 2795f09fa8 Add GetStartupInfoW. Rename StartupInfo to StartupInfoW. 2023-04-03 22:27:47 -07:00
gingerBill adcaace03c Fix allow_field_separator for foreign import 2023-04-03 21:09:26 +01:00
Jeroen van Rijn f205df1996 Merge pull request #2436 from Lperlind/batch-fail
Make tests scripts error if a test fails
2023-04-03 08:56:43 +02:00
Lucas Perlind c59ad24856 Make tests scripts error if a test fails
Additionally fixes tests that were found broken because
of this.
2023-04-03 16:49:14 +10:00
Jeroen van Rijn 2b9b0ac62e Merge pull request #2434 from Lperlind/documentation/stylistic-changes
Small improvements strings documentation
2023-04-03 08:37:48 +02:00
Lucas Perlind 08bc6a1698 Fix type comparison not accounting for parapoly params 2023-04-03 12:47:28 +10:00
Lucas Perlind 67e6f57192 Small improvements strings documentation
* Use new 'Returns:' and 'Inputs:' keywords used by the website generator
* Make order item order resemble website, i.e. 'Returns:' comes before
  'Example:'
* Add a few missing input items
* Add a few missing return items
2023-04-03 08:44:14 +10:00
Jeroen van Rijn 24ddb8506f Merge pull request #2430 from Lperlind/documentation/enforced_names
Enforce example names in documentation
2023-04-01 08:36:37 +02:00
Lucas Perlind 6ff0cc0b40 Enforce example names in documentation 2023-04-01 09:13:15 +11:00
Jeroen van Rijn 7620fe1ac6 Merge pull request #2429 from Lperlind/master
Add documentation tester and make it a part of CI workflow
2023-03-30 09:45:45 +02:00
Lucas Perlind 22e0f5ecd0 Add documentation tester and make it apart of CI workflow 2023-03-30 18:14:57 +11:00
Jeroen van Rijn fce2042375 Merge pull request #2428 from elusivePorpoise/pr2428
relocations and add some error consts to winmm
2023-03-29 22:18:55 +02:00
Elusive Porpoise 57594153a1 relocations and add some error consts to winmm
Summary:

Test Plan:
2023-03-29 13:06:42 -07:00
Jeroen van Rijn ff93ea5bf1 Merge pull request #2426 from elusivePorpoise/pr2426
Add TIMECAPS stuff
2023-03-29 22:05:26 +02:00
Elusive Porpoise 4a54676f31 Add TIMECAPS stuff
Summary:

Test Plan:
2023-03-29 12:10:44 -07:00
Jeroen van Rijn 0d900521bc Merge pull request #2424 from Naught00/master
Change help text to output to stdout
2023-03-29 17:34:01 +02:00
Mark Naughton bd7ffcc048 Change help text to output to stdout 2023-03-29 16:30:02 +01:00
gingerBill 2f771bee7b Merge pull request #2412 from oskarnp/text_table
text/table: Initial implementation
2023-03-29 15:08:33 +01:00
Jeroen van Rijn ae5214c1f2 Merge pull request #2422 from Lperlind/documentation-fixup
Fix website formatting and incorrect examples
2023-03-29 07:29:46 +02:00
Jon Lipstate 24493e89ad WSAPoll 2023-03-28 22:17:39 -07:00
Lucas Perlind 84d8798ad3 Fix website formatting and incorrect examples 2023-03-29 12:19:05 +11:00
Jon Lipstate 0570c84a83 initial 2023-03-28 15:40:48 -07:00
Jon Lipstate a3860e23c6 doc decimal 2023-03-28 13:09:21 -07:00
Jeroen van Rijn ab7e1e01de Merge pull request #2420 from jon-lipstate/string_docs
string code docs
2023-03-28 21:05:13 +02:00
Jon Lipstate bbafc3fbd6 harmonize to use null for c-string endings 2023-03-28 11:57:12 -07:00
Jon Lipstate 194fa7cd98 rename nul to null, allocation clarifications 2023-03-28 11:51:39 -07:00
Jeroen van Rijn 4c12addcaf Update builtin.odin 2023-03-28 20:29:30 +02:00
Jeroen van Rijn 0bd27381c3 Typo 2023-03-28 20:23:08 +02:00
Jon Lipstate 6dce07790a add backticks on variables, code review comments 2023-03-28 11:07:33 -07:00
Jon Lipstate 203ae32b79 pr pickups 2023-03-28 10:24:41 -07:00
Jeroen van Rijn 3c493194c9 Remove old deprecated demos
They're so outdated they'll likely lead to confusion now.
2023-03-28 15:14:02 +02:00
Jeroen van Rijn 692764aad3 Document offset_of
Closes #2419
2023-03-28 15:01:10 +02:00
Jon Lipstate 937e5de1d8 add missing eof newline 2023-03-27 22:23:13 -07:00
Jon Lipstate 7de67f8c1b markdown compliant spaces 2023-03-27 22:20:24 -07:00
Jon Lipstate f5d66bcb6f transform into odin-site parsable format 2023-03-27 22:00:53 -07:00
Jon Lipstate bf82c40964 string code docs 2023-03-27 20:09:51 -07:00
Jeroen van Rijn aa6299f114 Merge pull request #2411 from jon-lipstate/fmt_docs
Fmt docs
2023-03-27 11:19:12 +02:00
Jeroen van Rijn 7ffca8ed58 Fix caprintf comment 2023-03-27 11:12:21 +02:00
Jeroen van Rijn 030405dbb6 Update fmt.odin
Fix hardcoded 64 bit, use assert instead of branched panic.
2023-03-27 11:06:29 +02:00
oskarnp 8862f9118b Fix typos in doc 2023-03-27 09:31:24 +02:00
oskarnp e2e98672bd Fix typo 2023-03-26 21:51:57 +02:00
oskarnp 51f295cacc Rename init procs 2023-03-26 21:46:36 +02:00
oskarnp 0c50ac3396 Remove unnecessary #partial switch 2023-03-26 21:45:37 +02:00
oskarnp 2da81a4a26 Remove unnecessary C style loop 2023-03-26 21:44:31 +02:00
oskarnp b6d4853a33 Fix cell alignment to default to Left using ZII 2023-03-26 21:41:16 +02:00
oskarnp 020b147222 Move helper procs into utility.odin 2023-03-26 21:33:27 +02:00
jon lipstate 34b037f19b Update fmt.odin
Update example to use set/register procs.
2023-03-26 11:23:37 -07:00
oskarnp 88ee5d1a6d text/table: Initial implementation 2023-03-26 16:10:27 +02:00
Jon Lipstate 0892d84c17 corrected bprint 2023-03-25 23:55:37 -07:00
Jon Lipstate 2501d50f9c fmt docs 2023-03-25 23:45:53 -07:00
Jeroen van Rijn 1e4a4181e2 Typo 2023-03-25 07:37:43 +01:00
Jeroen van Rijn 3e1daa002c Merge pull request #2407 from igordreher/json.destroy_value
Add allocator parameter to `json.detroy_value`
2023-03-25 07:34:01 +01:00
Jeroen van Rijn 4c13dee18f Update types.odin
Use `context.allocator := allocator` idiom.
2023-03-25 07:33:34 +01:00
Igor Dreher 95497626e3 Add allocator parameter to json.detroy_value 2023-03-24 21:01:23 -03:00
Jeroen van Rijn 9ada48054f Merge pull request #2406 from aloussase/master
Fix typo in warning message in parser
2023-03-24 21:38:48 +01:00
Alexander Goussas 99d6c58971 Fix typo in warning message in parser 2023-03-24 15:37:17 -05:00
gingerBill b974b3ccfd Merge pull request #2405 from rasa-silva/fix_raylib_bindings
Fix raylib bindings for MeasureTextEx
2023-03-24 14:23:30 +00:00
Ricardo Silva 75cf45f0be Fix raylib bindings for MeasureTextEx 2023-03-24 14:16:46 +00:00
Jeroen van Rijn d337a11e83 Add tests for string case conversion 2023-03-24 11:47:45 +01:00
Jeroen van Rijn a86386d882 Merge pull request #2404 from Kelimion/save_to_buffer
Rename `save_to_memory` for consistency.
2023-03-24 11:06:05 +01:00
Jeroen van Rijn bbf40bf318 Rename save_to_memory for consistency. 2023-03-24 10:47:33 +01:00
Jeroen van Rijn b054585066 Merge pull request #2402 from oskarnp/fix-ada-case
Fix strings.to_ada_case()
2023-03-24 10:40:52 +01:00
gingerBill 90c44c34a9 Make core:image packages work on js platform (wasm32) by not requiring core:os 2023-03-23 20:53:19 +00:00
oskarnp e449cc9e2d Fix strings.to_ada_case() 2023-03-23 21:30:24 +01:00
Jeroen van Rijn 909ed93cd3 Merge pull request #2400 from Lperlind/documentation/raylib
Improve raylib overview formatting on pkg website
2023-03-22 12:38:30 +01:00
Jeroen van Rijn 9c97b11ab9 Remove stray backtick 2023-03-22 12:21:25 +01:00
Jeroen van Rijn 5ae44b25da Merge pull request #2397 from DragosPopse/master
Made most libraries panic on js targets instead of not compiling
2023-03-22 12:18:09 +01:00
Dragos Popescu b2ecb37b35 Changed js panics to unimplemented where sensible 2023-03-22 12:10:27 +01:00
Dragos Popescu 144d034475 Merge branch 'odin-lang:master' into master 2023-03-22 12:08:45 +01:00
Lucas Perlind 50d8dc91cf Improve raylib overview formatting on pkg website 2023-03-22 20:19:53 +11:00
gingerBill e58915e12f Fix typo!!!! 2023-03-21 19:20:44 +00:00
gingerBill 7f8c2a44a4 Add newlines to improve documentation generation 2023-03-21 19:20:11 +00:00
gingerBill d986eee36b Fix typo 2023-03-21 15:28:52 +00:00
gingerBill b3e712e0b8 Correctly handle end comment for doc generation 2023-03-21 15:22:11 +00:00
gingerBill 05434daa69 Merge pull request #2398 from odin-lang/raylib-4.5
raylib 4.5
2023-03-21 14:22:37 +00:00
gingerBill 2c4a478987 Add @(extra_linker_flags=<string>) 2023-03-21 13:30:58 +00:00
gingerBill a80ca23937 Keep -vet and -strict-style happy 2023-03-21 13:23:06 +00:00
gingerBill ba02ef8f25 Change trailing comma require to -strict-style only 2023-03-21 13:16:03 +00:00
Dragos Popescu ef3d8bdc42 Fixed more compile time errors when including os and thread to js targets 2023-03-21 04:17:31 +01:00
Dragos Popescu 951511704d Responded to PR review. Made dynlib return false on js instead of panic 2023-03-20 21:57:51 +01:00
Dragos Popescu 23aae6ab0f Merge branch 'odin-lang:master' into master 2023-03-20 21:52:03 +01:00
gingerBill 3748e117a9 Merge pull request #2370 from fabiansperber/parser_fix
Fix core:odin/parser #force_inline/force_no_inline call expression when it's a statement
2023-03-20 19:48:58 +00:00
Fabian Sperber 33798b8b80 Need to forward the name of the directive, not the hash token 2023-03-20 20:09:30 +01:00
gingerBill 2e85083d0a Add msvcrt.lib to raylib on Windows 2023-03-20 16:34:03 +00:00
gingerBill 23b8a9033a Update vendor:raylib to raylib 4.5 2023-03-20 16:27:34 +00:00
gingerBill 313b6874b1 Merge pull request #2382 from fabiansperber/freestanding-hide-default-temp-allocator
Remove usage of global_default_temp_allocator_data when not needed
2023-03-20 12:06:34 +00:00
gingerBill 6004412365 Merge pull request #2396 from WraithGlade/patch-1
Fixed incorrect precision value in `fmt` doc.
2023-03-20 12:05:37 +00:00
Dragos Popescu adac039a2b Made most libraries panic on js targets instead of not compiling 2023-03-20 04:08:48 +01:00
WraithGlade adcc865c70 Fixed incorrect precision value in fmt doc.
It seems like `%.2f` is the correct implementation of "precision 2" for displaying floats, not `$.3f`. It prints two decimal places.

Either that or the next case (`%8.3f`) would be wrong instead, if it's the other way around. 

So, there's a mistake here one way or the other at the least.
2023-03-19 22:06:39 -04:00
gingerBill fe533fb809 Improve llreg integer type generation for SysV ABI 2023-03-19 01:29:53 +00:00
gingerBill fa62963da7 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-03-19 00:52:09 +00:00
gingerBill 1f5bb99548 Improve SysV ABI for multiple return values that fit into a single register; Fixes #2384 2023-03-19 00:51:57 +00:00
Jeroen van Rijn f1cd56c28a Merge pull request #2394 from krixano/master
Add SetConsoleCursorInfo and GetConsoleCursorInfo to sys/windows package
2023-03-18 21:57:14 +01:00
Christian Seibold 852c8b533c Add SetConsoleCursorInfo and GetConsoleCursorInfo to sys/windows package 2023-03-18 15:43:31 -05:00
Jeroen van Rijn 582a72574e Merge pull request #2392 from Pingar5/master
Added parameter names to all ENet procs
2023-03-18 14:17:28 +01:00
Brennen Shaughnessy b249ddde48 Added parameter names to all ENet procs 2023-03-18 09:09:45 -04:00
Jeroen van Rijn b020ba2b5f Merge pull request #2391 from ftphikari/master
sys/windows: added some functions and types for input hooks and tray …
2023-03-18 08:06:55 +01:00
hikari 03c6862d51 sys/windows: added some functions and types for input hooks and tray icons 2023-03-18 06:44:16 +02:00
gingerBill b7f953b2ee Merge branch 'master' of https://github.com/odin-lang/Odin 2023-03-17 11:48:04 +00:00
gingerBill 0b064765c9 Add reflect.struct_field_value 2023-03-17 11:47:39 +00:00
Jeroen van Rijn eb3ddce706 Merge pull request #2390 from MoustaphaSaad/fix-linalg-refract
Fix #2389
2023-03-16 23:46:08 +01:00
Mostafa Saad 5fdc9fa3b6 Fix #2389 2023-03-17 00:29:50 +02:00
gingerBill bfb231fb8a Simplify copy elision on variable declarations 2023-03-16 17:24:29 +00:00
gingerBill 74fb74d9cb Keep -vet happy 2023-03-16 16:41:22 +00:00
gingerBill 97d7e295dd Fix to split_multi_iterator 2023-03-16 16:35:30 +00:00
gingerBill 0727e91aeb Simplify the implementation of strings.split_multi; add strings.index_multi 2023-03-16 16:30:48 +00:00
gingerBill 8dc70f797c Increase use of temporary_allocator() where possible 2023-03-16 15:16:17 +00:00
gingerBill 2cf8a9da6f Merge branch 'master' of https://github.com/odin-lang/Odin 2023-03-16 15:05:06 +00:00
gingerBill c1c7128634 Minimize severe memory usage by enforcing the heap_allocator() in places 2023-03-16 15:04:57 +00:00
Jeroen van Rijn 0e9ef50e63 Update build flag 2023-03-16 15:16:09 +01:00
gingerBill e05944601a Minor fixes 2023-03-16 13:35:38 +00:00
gingerBill 49cf0125a9 Fix minor memory leak 2023-03-16 13:01:06 +00:00
gingerBill 0602a16ad6 Reserve memory for procedures when generating the LLVM IR 2023-03-16 12:44:03 +00:00
gingerBill 09a0dad115 Add contextless to internal parse_hex call 2023-03-16 12:43:10 +00:00
Jeroen van Rijn 243a3f5006 Fix #2386 2023-03-16 12:35:05 +01:00
Jeroen van Rijn 33ca85bd4e Fix #2385 2023-03-16 10:59:19 +01:00
Jeroen van Rijn ca15eb26f0 Merge pull request #2378 from markodevv/directx12-message-callback
Add RegisterMessageCallback for d3d12
2023-03-16 08:20:26 +01:00
Jeroen van Rijn 28eebc14d0 Merge pull request #2387 from elusivePorpoise/main
add SetConsoleOutputCP
2023-03-16 07:15:20 +01:00
Elusive Porpoise 4210aa9ab9 add SetConsoleOuputCP 2023-03-15 17:15:25 -07:00
gingerBill 5bbdbadc25 Remove where ORD(E) on procedures that don't need it 2023-03-14 14:05:23 +00:00
gingerBill 00f24a3249 Merge pull request #2380 from flysand7/master
Add -no-thread-local flag
2023-03-14 13:04:34 +00:00
gingerBill d8a798372b Merge pull request #2383 from eisbehr/target-features-fix
Fix: -target-feature list missing commas
2023-03-14 12:49:43 +00:00
Florian Behr 8d5c865814 Fix missing commas in -target-featues string by adding missing i increment. 2023-03-14 13:39:08 +01:00
bumbread 5134d6bc63 rename -no-tls to -no-thread-local 2023-03-14 16:32:42 +11:00
Marko ede57720fd Fix brace style and indentation 2023-03-13 23:08:15 +01:00
Fabian Sperber 830d2007a6 Remove usage of global_default_temp_allocator_data when there is no default allocator (freestanding, JS or --default-to-nil-allocator) 2023-03-13 20:12:54 +01:00
bumbread 5f3b6c9722 Added -no-tls flag 2023-03-13 20:25:13 +11:00
gingerBill 93f7d3bfb9 Allow case nil within a type switch statement (experimental idea) 2023-03-12 16:33:21 +00:00
gingerBill f0ef10aa57 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-03-12 12:39:41 +00:00
gingerBill bf91fcc6f7 Improve type checking on polymorphic unions 2023-03-12 12:39:31 +00:00
Jeroen van Rijn 2d894a0164 Merge pull request #2377 from jon-lipstate/spall_pkg_name
resolve doc/spall package name conflict
2023-03-11 10:00:14 +01:00
Marko 731b9c902f Add RegisterMessageCallback for d3d12 2023-03-11 05:25:17 +01:00
Jon Lipstate ac0f3c8433 resolve doc/spall package name conflict 2023-03-10 19:24:11 -08:00
Jeroen van Rijn 56bfbbf501 Merge pull request #2375 from wjlroe/patch-1
Fix documentation example of strings.to_upper
2023-03-10 17:12:52 +01:00
William Roe 63b5d472fa Fix documentation example of strings.to_upper
This looks like it was a copy/paste mistake
2023-03-10 16:07:06 +00:00
Jeroen van Rijn 233e3c76fd Merge pull request #2373 from colrdavidson/spall_flushes
log buffer flushes to trace
2023-03-10 08:04:46 +01:00
Colin Davidson 2334dadb6a add main scope 2023-03-09 16:34:43 -08:00
Colin Davidson 6f4f2754d6 add basic usage example 2023-03-09 16:05:16 -08:00
Colin Davidson 30ced04137 log buffer flushes to trace 2023-03-09 15:26:27 -08:00
gingerBill c39bd7e089 Fix range loop & vals debug info 2023-03-09 15:57:29 +00:00
gingerBill 3470d986f0 Fix debug symbols for range loops 2023-03-09 15:48:02 +00:00
gingerBill 7c0257fcda Fix value elision on declaration 2023-03-09 15:39:41 +00:00
Jeroen van Rijn 9af6d6c9c6 Merge pull request #2369 from Sokus/non-blocking-socket-mode
Add `set_blocking` for network sockets
2023-03-08 14:35:40 +01:00
Sokus 1ecab2fcbc Add set_blocking for network sockets 2023-03-08 13:30:12 +01:00
gingerBill a262c0bbf3 Separate out the read_reg into three non-parapoly procedures 2023-03-07 16:25:46 +00:00
gingerBill 7f3f164736 Update help usage 2023-03-07 15:32:32 +00:00
gingerBill 085db569f1 Add -o:none optimization mode (useful for -debug builds) 2023-03-07 15:31:55 +00:00
gingerBill 133af6f826 Remove delete with wrong allocator 2023-03-07 15:24:59 +00:00
gingerBill 1c2301e2f1 Use atof in float_from_string to allow for debug C-like semantic purposes 2023-03-06 19:52:03 +00:00
gingerBill ef999f660b Remove debug code 2023-03-06 19:46:50 +00:00
gingerBill fad330acd1 Fix bug with nil pointer 2023-03-06 15:21:20 +00:00
gingerBill 8f1af2630d Fix typo in parse_components 2023-03-06 13:40:06 +00:00
gingerBill eea92a3371 Add booleans to print_any_single 2023-03-06 13:33:29 +00:00
gingerBill ff275df5ea Fix parsing C-like hex floats 2023-03-06 12:39:52 +00:00
Jeroen van Rijn 6e56e5457d Merge pull request #2363 from colrdavidson/tsc_multiplatform_fix
add null-impl for tsc_frequency for alt-platforms
2023-03-05 09:13:26 +01:00
Colin Davidson afaa5f2deb add null-impl for tsc_frequency for alt-platforms 2023-03-04 22:40:14 -08:00
gingerBill 0674b1b6ee Merge pull request #2314 from SentientCoffee/pr/win32_console_text_attributes
Add win32 SetConsoleTextAttribute for setting cmd prompt colors
2023-03-04 15:19:34 +00:00
Jeroen van Rijn 1ef8602f19 Merge pull request #2359 from colrdavidson/core_net_update
manually merge core_net
2023-03-04 15:02:35 +01:00
Jeroen van Rijn ee597fc9b8 Add .None to Linux & Darwin, too. 2023-03-04 11:12:11 +01:00
Jeroen van Rijn e254581a1b Apply #shared_nil to Network_Error 2023-03-04 10:39:20 +01:00
Jeroen van Rijn 38ea140b3f Update addr.odin
Fix comment
2023-03-04 10:04:55 +01:00
Jeroen van Rijn d939d6079a Don't try to check core:net on the BSDs. 2023-03-03 18:24:26 +01:00
Colin Davidson 6e9475d61d add core_net to examples 2023-03-03 09:09:50 -08:00
Jeroen van Rijn f6134422e6 Fix one last review comment. 2023-03-03 17:50:49 +01:00
Jeroen van Rijn 5c05038af0 Finish cleaning up core_net. 2023-03-03 17:26:44 +01:00
Jeroen van Rijn 5da5ebff13 More coalescing. 2023-03-03 17:12:21 +01:00
Jeroen van Rijn 798932523e Coalesce socket_windows 2023-03-03 15:21:40 +01:00
Jeroen van Rijn 5267a864db Coalesce more. 2023-03-03 14:15:15 +01:00
Jeroen van Rijn f02334237a Merge branch 'master' into pr/2359 2023-03-03 13:01:49 +01:00
Jeroen van Rijn d5ea492ef5 Make more private. 2023-03-03 13:00:43 +01:00
Jeroen van Rijn 96ac405952 Alignment + unnecessary allocator param. 2023-03-03 12:04:36 +01:00
Colin Davidson 38d58e818c ripple bill-suggestions 2023-03-02 06:56:54 -08:00
gingerBill 2d71ab6f29 Improve error message on undefined operators 2023-03-02 14:54:27 +00:00
Colin Davidson 090723179b Merge branch 'master' into core_net_update 2023-03-02 06:50:25 -08:00
Colin Davidson 5b55fbff23 cleanup openbsd errors more 2023-03-02 06:47:05 -08:00
Colin Davidson 64f200dc74 big error cleanup 2023-03-02 06:43:20 -08:00
gingerBill 99e2f0c91e Merge pull request #2357 from JeppeSS/sys-windows-additions
Added missing Windows functions for console manipulation
2023-03-02 13:21:38 +00:00
Jeroen van Rijn c02ff3af27 Update comments 2023-03-02 13:45:12 +01:00
gingerBill 553f338f6f Merge pull request #2360 from Lperlind/documentation/dynlib
Document core:dynlib
2023-03-02 12:07:32 +00:00
Lucas Perlind bb72c804fb Document core:dynlib 2023-03-02 19:20:45 +11:00
Colin Davidson 13c6352b8e catch alloc error on wstring_to_utf8 convert 2023-03-01 18:55:02 -08:00
Colin Davidson 707c2b3d7a remove win32 ref 2023-03-01 18:24:37 -08:00
Colin Davidson 14eed79a21 make baby pandas (and Jeroen) happy 2023-03-01 08:33:48 -08:00
Colin Davidson 2ca30e3acd more test cleanup 2023-03-01 08:27:07 -08:00
Colin Davidson caf9716bf1 more cleanup ripple 2023-03-01 08:21:53 -08:00
Colin Davidson d569daae33 more manual type carryover 2023-03-01 08:17:41 -08:00
Colin Davidson 28f7f57247 manually start merging core_net 2023-03-01 07:58:30 -08:00
Jeppe Skov ffc592c7cf Added missing Windows functions for console manipulation
This commit adds several missing types and functions to the Windows implementation to enable manipulation of console windows. The types added include 'SMALL_RECT', 'CONSOLE_SCREEN_BUFFER_INFO', and 'PCONSOLE_SCREEN_BUFFER_INFO'. The functions added include 'GetConsoleScreenBufferInfo', 'SetConsoleScreenBufferSize', and 'SetConsoleWindowInfo'. These functions were necessary to properly manage the console window.
2023-02-28 23:18:10 +01:00
Jeroen van Rijn 3567c006e6 Merge pull request #2356 from flysand7/master
Add option to link to glfw3 dynamically
2023-02-28 18:01:32 +01:00
bumbread b9db450a7d Fix missing underscore 2023-03-01 03:43:59 +11:00
bumbread 0d65c6dcf7 Add option to link to glfw3 dynamically 2023-03-01 03:05:04 +11:00
gingerBill dfee7c103e Document virtual.Arena 2023-02-28 13:07:52 +00:00
gingerBill 025fc2685d Add docs to core:path/filepath 2023-02-28 12:55:13 +00:00
gingerBill 5b5154eda0 Add temp allocator guard; clean up indentation 2023-02-28 12:38:36 +00:00
gingerBill ecf65303cd Make arena_free_all keep the first memory block for a .Growing arena 2023-02-28 12:37:05 +00:00
gingerBill 8ea6972496 Merge pull request #2327 from odin-lang/new-temp-allocator
New default `context.temp_allocator`
2023-02-28 12:22:45 +00:00
gingerBill 9afd9f9bea Merge branch 'master' into new-temp-allocator 2023-02-28 12:15:54 +00:00
gingerBill c8d3a9121b Merge pull request #2354 from elusivePorpoise/master
FindFirstChangeNotification series of calls
2023-02-28 10:49:42 +00:00
gingerBill f0950e2286 Merge pull request #2355 from colrdavidson/os_linux_cleanup
os/linux cleanup
2023-02-28 10:48:09 +00:00
Colin Davidson edd78ae129 cleanup of os/linux 2023-02-28 01:17:43 -08:00
Elusive Porpoise 8738695bd8 FindFirstChangeNotification series of calls 2023-02-27 18:43:43 -08:00
gingerBill 76cb3b7874 Add better fallback for ast_token 2023-02-27 16:15:19 +00:00
gingerBill 02a098eb48 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-02-27 15:58:42 +00:00
gingerBill 1f17a391c6 Improve error line squiggle logic 2023-02-27 15:58:32 +00:00
Jeroen van Rijn a8fb346fd7 Merge pull request #2350 from Kelimion/d3d_license
Add license for dxcompiler libs.
2023-02-26 19:54:53 +01:00
Jeroen van Rijn 96fb5eb0ba Add license for dxcompiler libs. 2023-02-26 19:48:44 +01:00
gingerBill 9c7656d59a Add core:prof/spall 2023-02-26 14:00:39 +00:00
gingerBill a53bff5645 Fix typed #caller_location bug. 2023-02-26 13:52:02 +00:00
gingerBill a9182cfd8c Allow compound literals to access fields through using 2023-02-26 13:26:35 +00:00
gingerBill de6c0f682f Merge pull request #2343 from Hyp-X/pr-heapflags
Fix d3d12 HEAP_FLAG_ALLOW_ONLY_BUFFERS flags
2023-02-24 11:58:30 +00:00
gingerBill 9cfcb43725 Merge pull request #2345 from Hyp-X/pr-dxc
Add vendor:directx/dxc package
2023-02-24 11:57:59 +00:00
gingerBill d9b590c76e Merge pull request #2344 from Hyp-X/pr-more-shader-reflection
Add d3d12shader missing types and UUID's
2023-02-24 11:51:11 +00:00
Hyp-X 450c535e9a Add vendor:directx/dxc package:
DirectX Shader Compiler
2023-02-24 11:34:00 +01:00
Hyp-X 0dc166e594 Add d3d12shader missing types and UUID's 2023-02-24 10:02:12 +01:00
Hyp-X 8ba080a66d Fix d3d12 HEAP_FLAG_ALLOW_ONLY_BUFFERS flags 2023-02-23 17:15:13 +01:00
gingerBill 7801582819 Merge pull request #2341 from Hyp-X/pr-getresourceallocationinfo
Fix d3d12 GetResourceAllocationInfo signature
2023-02-23 15:48:02 +00:00
gingerBill bc882e678d Merge pull request #2340 from Hyp-X/pr-shader-reflection-fix
Fixed d3d12 shader reflection vtables
2023-02-23 15:40:15 +00:00
gingerBill 58e173f279 Merge pull request #2339 from Hyp-X/pr-dxgidebug
Add dxgidebug.h implementation to dxgi package
2023-02-23 15:40:02 +00:00
Hyp-X b7d7b9d6b3 Fix d3d12 GetResourceAllocationInfo signature 2023-02-23 16:30:28 +01:00
Hyp-X cf091a48b4 Fixed d3d12 shader reflection vtables 2023-02-23 14:48:58 +01:00
Hyp-X d9bfe9e5d4 Add dxgidebug.h implementation to dxgi package 2023-02-23 14:39:39 +01:00
gingerBill 245a6697ef Improve truncated verbose line error 2023-02-22 22:57:11 +00:00
gingerBill 6226c2978d Change padding of showing the error in line 2023-02-22 22:04:00 +00:00
gingerBill 3d325e52c6 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-02-22 21:50:51 +00:00
gingerBill 6a6d7701f9 Improve error bounds for check_comparison 2023-02-22 21:50:49 +00:00
Jeroen van Rijn 50c688f0f7 Merge pull request #2338 from Tetralux/fix-here
Remove debug print
2023-02-22 22:49:52 +01:00
Tetralux ef99d03f21 Remove debug print 2023-02-22 21:43:42 +00:00
gingerBill af265250c2 Merge pull request #2336 from colrdavidson/tsc_freq
Add TSC frequency getter
2023-02-22 21:22:10 +00:00
Colin Davidson c6f463b8c9 shuffle tsc around a little 2023-02-22 12:28:24 -08:00
gingerBill b7d75e2f1d Override to have ansi colors if env has ODIN_TERMINAL=ansi 2023-02-22 12:41:53 +00:00
gingerBill 6aa54cbe9a Begin work on adding colours to error messages on Windows Terminals 2023-02-22 12:31:51 +00:00
gingerBill 090e30f07b Make -verbose-errors the default; -terse-errors to disable it 2023-02-22 11:48:10 +00:00
gingerBill f5d507a9b9 Improve errors about conversions of constant integers 2023-02-22 11:30:08 +00:00
Colin Davidson 8e5e43f335 add sleep-fallback and invariant check 2023-02-21 17:48:49 -08:00
gingerBill b9f7b2fdfa Improve error message for typed constants that cannot be represented by a type 2023-02-21 23:16:25 +00:00
gingerBill 59a601f2cf Improve error messages when trying to access a non-existent field on a type 2023-02-21 23:08:02 +00:00
gingerBill b6a5c5f5d2 Improve some error messages when casting a constant value which needs to be truncated/rounded 2023-02-21 17:24:22 +00:00
gingerBill a2f02b8b32 Fix bug with for in statements and pointer intervals 2023-02-21 16:31:22 +00:00
gingerBill ee4ed126e1 Improve error message for accidentally using a type as an expression statement 2023-02-21 16:25:28 +00:00
gingerBill c36dc91849 Minor changes in runtime 2023-02-21 16:24:28 +00:00
Colin Davidson 91dccf8d62 more function name changes 2023-02-21 06:46:36 -08:00
Colin Davidson 1fc3a25f47 block all x86 tsc functions in when block 2023-02-21 06:28:55 -08:00
Colin Davidson 7322b63991 adjust func names 2023-02-21 06:22:19 -08:00
Colin Davidson f860b09065 use the libc call on darwin so sysctlbyname works 2023-02-21 05:38:07 -08:00
Colin Davidson 45b742be23 sort out units to make things happier 2023-02-19 20:50:30 -08:00
Colin Davidson d325ee4b91 more typo. yay. 2023-02-19 20:45:56 -08:00
Colin Davidson 87d6910bb8 intrinsics typo 2023-02-19 20:44:49 -08:00
Colin Davidson 9c9300ed58 derp. raw-syscalls 2023-02-19 20:44:00 -08:00
Colin Davidson e559cf32fe oops, add intrinsics import 2023-02-19 20:39:36 -08:00
Colin Davidson f2202db517 make darwin syscalls contextless 2023-02-19 20:38:46 -08:00
Colin Davidson fb735883be add a tsc frequency get for windows 2023-02-19 20:33:48 -08:00
Colin Davidson 6a2ef1f4f3 add osx support 2023-02-19 20:23:35 -08:00
Colin Davidson 051c9cb564 begin adding tsc frequency getters 2023-02-19 20:08:11 -08:00
gingerBill eb60ec3899 Fix unreachable error 2023-02-19 12:53:22 +00:00
gingerBill 233f47cc99 Fix #2329 2023-02-19 12:47:14 +00:00
gingerBill c386c72d10 Check for procedure literals in $ parameters 2023-02-19 12:11:57 +00:00
gingerBill 20eacc4a84 Fix issue that conflicts with constant parapoly procedures and deferred_* procedures 2023-02-19 12:10:28 +00:00
Jeroen van Rijn a28699b42d Merge pull request #2335 from colrdavidson/add_panel
Add open file dialog panel to foundation
2023-02-19 08:32:01 +01:00
Colin Davidson 4d74d5bc99 Add user-defaults config to enable force-smooth-scrolling for SDL 2023-02-18 19:54:40 -08:00
Colin Davidson ed371f2b0d Add open file dialog panel to foundation 2023-02-18 14:56:51 -08:00
gingerBill 66f2881a78 Allow comparisons between empty struct{} and union{} 2023-02-17 17:02:37 +00:00
gingerBill 7d4e9497eb Reduce stack usage of some type switch cases 2023-02-17 16:51:57 +00:00
gingerBill c08809e29d Improve handling of passing constants to implicit immutable const ref parameters 2023-02-17 14:49:37 +00:00
gingerBill 99460c9e32 Minimize stack wastage with compound literals defining variables 2023-02-17 14:26:22 +00:00
gingerBill d86df8321c Fix #2330 2023-02-17 13:08:20 +00:00
gingerBill 806f56ca38 Remove debug string 2023-02-17 13:04:09 +00:00
gingerBill c40b6c7c2f Add constant data to the identifier directly 2023-02-17 13:02:41 +00:00
gingerBill 896b7145b3 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-02-17 13:01:12 +00:00
gingerBill 8a2a70a3c2 Fix overriding procedure information for literals 2023-02-17 13:00:37 +00:00
gingerBill 97352538ad Merge pull request #2332 from thePHTest/master
Fix #by_ptr argument overrides for Linux
2023-02-16 10:22:25 +00:00
Phil Homan c6c4ad6188 fix #by_ptr argument overrides for Linux 2023-02-15 16:51:00 -08:00
gingerBill 210f47b8ab Merge branch 'master' of https://github.com/odin-lang/Odin 2023-02-15 11:32:02 +00:00
gingerBill 94c1331c07 Implement @(fini) (opposite of @(init)) 2023-02-15 11:31:51 +00:00
gingerBill d6407e9636 Merge pull request #2331 from colrdavidson/platform_file_cleanup
make file access a little more normal across platforms
2023-02-15 11:07:42 +00:00
Colin Davidson df58a00564 fix errno/signatures 2023-02-14 18:43:48 -08:00
Colin Davidson d546677ae7 fix typo 2023-02-14 18:39:09 -08:00
Colin Davidson 04b1023988 make file access a little more normal across platforms 2023-02-14 18:34:03 -08:00
gingerBill 9a81071687 Merge branch 'master' into new-temp-allocator 2023-02-14 23:59:49 +00:00
gingerBill 48685e8bf1 Remove set volatile for store 2023-02-14 23:52:36 +00:00
gingerBill 0f697a0f26 Move in_multi_assignment check tighter 2023-02-14 23:52:23 +00:00
gingerBill 8ddb493b96 Add #optional_allocator_error to make_map 2023-02-14 10:28:04 +00:00
gingerBill 039d9938b9 Fix return value 2023-02-10 17:20:14 +00:00
gingerBill f50ea649f6 Minor fix 2023-02-10 17:15:40 +00:00
gingerBill 6e647a88eb Keep -vet happy 2023-02-10 16:36:50 +00:00
gingerBill 986cba584e Add runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD where appropriate 2023-02-10 16:23:33 +00:00
gingerBill b427a4c8c9 Minor change to arena_temp_end 2023-02-10 14:44:46 +00:00
gingerBill 133ee70a5b Add default_temp_allocator_temp_begin and default_temp_allocator_temp_end 2023-02-10 14:36:57 +00:00
gingerBill 494612827a Add Arena_Temp 2023-02-10 14:30:41 +00:00
gingerBill 1113f23475 Remove unused variable 2023-02-10 14:10:06 +00:00
gingerBill 8626f58773 Replace current default context.temp_allocator to use a growing arena rather than a ring buffer 2023-02-10 13:18:33 +00:00
gingerBill 7032867421 Pass #caller_location down correctly 2023-02-10 13:18:03 +00:00
gingerBill e6239ca3c2 Warn on 'expand_to_tuple' has been replaced with 'expand_values' 2023-02-10 13:17:04 +00:00
gingerBill 162628000f Calculate the size needed before allocating 2023-02-10 11:55:08 +00:00
gingerBill 55b79c078c Remove := context.allocator usage in package os2 2023-02-10 11:46:29 +00:00
gingerBill 570b127869 Fix crash when a variable declaration must be an identifier 2023-02-08 11:46:33 +00:00
gingerBill 6179d4feb1 Rename to Type_Info_Parameters 2023-02-08 11:23:21 +00:00
gingerBill 2ff5d016d5 Merge pull request #2326 from ftphikari/master
Updated documentation to reflect changes from commit 8a16fd7
2023-02-08 11:09:23 +00:00
hikari 854a95327a Updated documentation to reflect changes from commit 8a16fd7 2023-02-08 12:24:10 +02:00
gingerBill 8a16fd7699 Rename built-in procedure to expand_values 2023-02-07 15:39:39 +00:00
gingerBill 7bbcf22deb Remove dead code (sort/map.odin) 2023-02-05 18:33:53 +00:00
gingerBill 0324281634 Enforce dynamic map calls for the time being 2023-02-03 15:17:30 +00:00
gingerBill de0a3e0ab9 Minor change to byval for readonly parameters 2023-02-03 15:07:44 +00:00
gingerBill d26110da7f Change attributes for the static map get 2023-02-03 14:25:30 +00:00
gingerBill 60e73d91f6 Remove internal readonly attribute 2023-02-03 13:42:23 +00:00
gingerBill 5eeb436626 Temporarily make all map get calls dynamic 2023-02-03 12:43:21 +00:00
gingerBill 802333e454 Fix arena.free_all 2023-02-03 12:40:52 +00:00
gingerBill eb457d688d Make static map calls the default; add -dynamic-map-calls 2023-02-03 12:16:58 +00:00
gingerBill fcc920ed39 Fix typo 2023-02-02 00:24:36 +00:00
gingerBill 4e70256109 Fix when within foreign block (again) 2023-02-02 00:22:54 +00:00
gingerBill 2e4d6d2577 Fix when within foreign blocks at the file scope 2023-02-01 23:41:13 +00:00
gingerBill 51ae21a029 Separate check_stmt code into separate procedures 2023-02-01 23:40:42 +00:00
gingerBill f59846377d Improve ternary logic for untyped nil stuff 2023-01-30 15:29:59 +00:00
gingerBill 8e8eb9e5cd Improve ternary if expression type inference rues
Allow for expression like this

    `x: union{f32} = f32(123) if cond else nil`
2023-01-30 12:54:11 +00:00
gingerBill 88b578ca11 Add for C++ for loop uses 2023-01-30 12:53:36 +00:00
gingerBill 4cb16db4e9 Remove @(require_results) from one procedure 2023-01-30 12:51:56 +00:00
gingerBill 338d483682 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-01-30 11:58:39 +00:00
gingerBill 0ce59a9e2b Use C++ for rather than for_array macro 2023-01-29 11:28:36 +00:00
gingerBill 8d43cc840a Add @(require_results) to package reflect 2023-01-29 11:28:05 +00:00
gingerBill 9ae1bfb69d Merge pull request #2317 from ftphikari/master
vendor/d3d11: fixed function definition
2023-01-28 23:45:23 +00:00
hikari 6ec7284467 vendor/d3d11: fixed function definition 2023-01-29 01:38:28 +02:00
gingerBill 0ccc570ef2 Merge pull request #2316 from Hyp-X/master
Fix decimal_to_float_bits for floats >= 1
2023-01-28 23:31:57 +00:00
Hyp-X a3bb7d3028 Fix decimal_to_float_bits for floats >= 1 2023-01-28 14:40:44 +01:00
gingerBill c45ca1bfcc Correct arena_temp_end usage when no allocation ever happens for that arena 2023-01-28 12:09:24 +00:00
gingerBill 94edf89b20 Use a separate arena for heap_allocator 2023-01-28 11:53:05 +00:00
gingerBill 8d6ce0b693 Add mutex to virtual.Arena; add virtual.arena_temp_ignore 2023-01-28 11:51:58 +00:00
gingerBill ccf4b48865 Add extra checks for multiple assignments when emitting stores 2023-01-27 11:47:00 +00:00
gingerBill 96eae94103 Merge branch 'master' of https://github.com/odin-lang/Odin 2023-01-27 11:12:17 +00:00
gingerBill db8b2e69dd Fix slice.reverse 2023-01-27 11:12:10 +00:00
Jeroen van Rijn 82821580c7 Merge pull request #2315 from SentientCoffee/pr/os_read_file_location
Add caller location info to `os.read_entire_file()`
2023-01-27 12:00:56 +01:00
Daniel d23d7cf0f2 Add caller location info to os.read_entire_file()
This helps people using the mem.Tracking_Allocator to more easily
pinpoint where they leaked memory in their own code, rather than
having the leaks be reported as if they were in the core library
itself.
2023-01-27 02:42:16 -05:00
Daniel 34cb558279 Add win32 SetConsoleTextAttributes for setting cmd prompt colors 2023-01-25 14:17:20 -05:00
gingerBill 450a602230 Fix json.marshal for map[string]string 2023-01-24 12:05:43 +00:00
gingerBill 36764779cf Add extra add_type_info_type calls 2023-01-23 14:09:55 +00:00
gingerBill 97595c4b50 Use a LUT for shift_left 2023-01-23 14:00:02 +00:00
gingerBill ea9fe397e5 Fix typo in decimal_to_float_bits 2023-01-23 12:46:03 +00:00
gingerBill c482432966 Disable arena guards 2023-01-23 12:29:59 +00:00
gingerBill 55176e52fc Use heap_allocator() with -debug; Reinstate the arena guards 2023-01-23 11:38:18 +00:00
gingerBill 4eb08bb096 Change current requirements for valgrind targets 2023-01-23 10:20:04 +00:00
gingerBill 881ef69063 Use ~{} syntax 2023-01-23 10:14:21 +00:00
gingerBill 761a19689d Escape $ in asm 2023-01-23 10:09:22 +00:00
gingerBill f438153b81 Change to use ODIN_VALGRIND_SUPPORT 2023-01-23 09:29:39 +00:00
gingerBill 117c0cceb1 Add helgrind markers to package sync 2023-01-23 09:24:21 +00:00
gingerBill c949e404c3 Fix bug when . is passed to remove_extension_from_path 2023-01-20 13:01:00 +00:00
gingerBill 3d2a6c5895 Fix #2282 caused by a typo 2023-01-20 11:37:40 +00:00
gingerBill 8f4ffbe1da Fix #2299 by handling very large value cases correctly 2023-01-20 11:23:15 +00:00
gingerBill 8f3b6738ff Merge pull request #2273 from ap29600/core_slice_rotate_fix
Fix `core:slice.rotate_left`
2023-01-19 11:13:40 +00:00
gingerBill d50c6d72db Merge pull request #2310 from Lperlind/staging/ns-application-delegate-fix
Fix a few bindings in NSApplicationDelegate
2023-01-19 11:03:21 +00:00
gingerBill 15c5e92d63 Merge pull request #2309 from Lperlind/staging/ns-window-delegate
Fully implement NSWindowDelegate
2023-01-19 11:03:02 +00:00
gingerBill 041c7c8284 Remove tools directory 2023-01-19 10:33:46 +00:00
Lucas Perlind f040ef41cb Fix a few bindings in NSApplicationDelegate 2023-01-19 21:18:30 +11:00
Lucas Perlind 91ab184175 Fully implement NSWindowDelegate 2023-01-19 19:12:14 +11:00
gingerBill 48a64a2c88 Minor fix to string_compare 2023-01-18 16:48:11 +00:00
gingerBill 7f3795a231 Improve odin doc string printing (Fixes #2246) 2023-01-18 16:17:02 +00:00
gingerBill eb1d00ced6 Fix #2264 2023-01-18 16:05:30 +00:00
gingerBill f41c91d36b Fix #2274 2023-01-18 15:41:49 +00:00
gingerBill 6909e0d774 Minor changes to Semaphore to make it trivially copyable 2023-01-18 15:41:39 +00:00
gingerBill d52921edd4 Merge pull request #2308 from Lperlind/staging/ns-application-delegate
(almost) Fully implement NSApplicationDelegate
2023-01-18 12:21:39 +00:00
gingerBill dcca40033e Merge pull request #2307 from Sanian-Creations/update_vendor-sdl2
Removed multiple "SDL_" prefixes that were missed
2023-01-18 12:21:31 +00:00
Lucas Perlind fed65742df (almost) Fully implement NSApplicationDelegate 2023-01-17 18:53:17 +11:00
Sanian b918acd871 Removed some more SDL_'s in sdl_render.odin 2023-01-16 23:45:03 +01:00
Sanian a046c41c7c Removed another missed SDL_ in sdl_mouse.odin
`sdl2.SDL_MouseWheelDirection` is now `sdl2.MouseWheelDirection`
2023-01-16 23:41:11 +01:00
Sanian 2513403014 Removed an SDL_ prefix that was missed 2023-01-16 22:46:46 +01:00
gingerBill 4a8564aff7 Update threading.cpp to have helgrind annotations 2023-01-16 19:23:13 +00:00
gingerBill edb23db2ae Fix potential race condition when determining the package name 2023-01-16 18:31:40 +00:00
gingerBill 0b01cfd853 Fix minor possible race condition 2023-01-16 18:18:08 +00:00
gingerBill 0d059aa797 Replace BlockingMutex with RwMutex 2023-01-16 18:08:28 +00:00
gingerBill 65c0255e7e Replace RecursiveMutex with a BlockingMutex 2023-01-16 18:05:58 +00:00
gingerBill b289a27c4e Move the mutex up a little 2023-01-16 17:04:37 +00:00
gingerBill d085283f20 Fix cnd_timedwait 2023-01-16 15:32:23 +00:00
gingerBill b6ca10cd5e Fix memory leak in os.get_current_directory on failure on *nix systems 2023-01-16 15:29:45 +00:00
gingerBill 7416f72565 Make static value atomic too 2023-01-16 15:12:34 +00:00
gingerBill b51be71a6f Remove initialization on static atomic 2023-01-16 15:11:24 +00:00
gingerBill e488cf4601 Enforce atomic on hasher id 2023-01-16 15:09:29 +00:00
gingerBill 5d397804f7 Fix #2286 by printing an error correctly 2023-01-16 13:22:37 +00:00
gingerBill a5a7226885 Remove auto_cast 2023-01-16 12:09:09 +00:00
gingerBill 2dca39b557 Remove auto_cast procedure field flag
Fixes #2285
2023-01-16 12:06:03 +00:00
gingerBill b55fa268bf Fix #2267 by making it an error 2023-01-16 12:03:46 +00:00
gingerBill c819c350d6 Add error message for atomic intrinsics to prevent arbitrary types 2023-01-16 11:58:14 +00:00
gingerBill d55248ab0f Fix #2301 2023-01-16 11:45:15 +00:00
gingerBill 68b2d4b9e2 Fix #2305 2023-01-16 11:41:58 +00:00
gingerBill 54f02f59db Fix compiler error on clang 2023-01-16 11:03:24 +00:00
gingerBill 64047cbf05 Fix #2304 2023-01-16 11:02:42 +00:00
gingerBill b0619980b2 Add /NOIMPLIB /NOEXP on MSVC linker by default when building an executable 2023-01-14 13:42:29 +00:00
gingerBill 9aa9429135 Update debugf usage 2023-01-14 13:42:04 +00:00
gingerBill 518f30e523 Bring PtrMap inline with StringMap 2023-01-14 13:23:17 +00:00
gingerBill 868aa4c14a Minor changes to StringMap allocation 2023-01-14 12:58:45 +00:00
gingerBill 1ab90de493 Minimize StringMap structure usage 2023-01-14 12:33:42 +00:00
gingerBill 1064bcd060 Clean up use of StringMap 2023-01-13 12:13:26 +00:00
gingerBill 1e21125527 Split out object generation more 2023-01-12 21:49:53 +00:00
gingerBill 4a8c37dd52 Prepare for arbitrary separate modules 2023-01-12 21:45:02 +00:00
gingerBill 3b22c6620c Begin to generalize modules away from AstPackage * in -use-separate-modules 2023-01-12 17:13:25 +00:00
gingerBill 402a165b60 Correct missing procedures in other build modules which cause a linkage problem 2023-01-12 16:59:16 +00:00
gingerBill 34f9170189 Fix race condition with polymorphic record generation 2023-01-12 16:06:09 +00:00
gingerBill 38136e15fc add_deps_from_child_to_parent always 2023-01-12 15:44:55 +00:00
gingerBill e97bf2ef35 Minimize contention on the deps for decls 2023-01-12 15:38:23 +00:00
gingerBill d6c54148d9 Minor clean up 2023-01-12 15:23:59 +00:00
gingerBill cbe3791b42 Replace all queues with MPSCQueue where possible 2023-01-12 13:11:17 +00:00
gingerBill b470ceb470 Correct mpsc_dequeue 2023-01-12 12:59:09 +00:00
gingerBill c15db05199 Implement MPSCQueue 2023-01-12 12:41:53 +00:00
gingerBill 9428f792ed Comment out allocator guards for the time being 2023-01-12 01:09:36 +00:00
gingerBill 520ff731de Add ArenaTemp to the compiler 2023-01-12 00:47:20 +00:00
gingerBill e9cfe698ba Make the heap_allocator just be the permanent_allocator
This improves the speed of the compiler with very little memory increase (which surprised me, Ginger Bill)
2023-01-12 00:20:25 +00:00
gingerBill 5fa66ac6a8 Fix random race condition for poly records 2023-01-12 00:18:58 +00:00
gingerBill 320062157f Merge pull request #2288 from odin-lang/compiler-improvements-2023-01
Multithreading Compiler Improvements 2023-01
2023-01-11 22:14:53 +00:00
gingerBill d7d6608142 Remove unneeded CI stage 2023-01-11 22:08:25 +00:00
gingerBill 7f2ef2ac67 Move check for type info above 2023-01-11 21:52:04 +00:00
gingerBill 7124d541a1 General optimizations 2023-01-11 18:10:27 +00:00
gingerBill 3c7e45a46f Remove possible race condition in type_size_of/type_align_of 2023-01-11 17:45:18 +00:00
gingerBill 6ec014e980 Make -threaded-checker the default not (opt out with -no-threaded-checker) 2023-01-11 17:27:06 +00:00
gingerBill 9b47a5eddb Fix macro issue 2023-01-11 00:49:04 +00:00
gingerBill 3e8c63ad31 Add Odin check -threaded-checker test for windows 2023-01-10 20:46:00 +00:00
gingerBill 15469758de Merge branch 'master' into compiler-improvements-2023-01 2023-01-10 16:25:38 +00:00
gingerBill 86511d44e4 Merge pull request #2300 from MarenFayre/float-format
Clean up float_fmt logic
2023-01-10 15:46:54 +00:00
MarenFayre fd4633eb25 Clean up float_fmt logic 2023-01-10 15:03:53 +01:00
gingerBill b0756f9e29 Merge pull request #2297 from MarenFayre/d-parsing
Fix off by one error in %d parsing
2023-01-10 12:24:13 +00:00
gingerBill c3ff1e9591 Merge pull request #2298 from MarenFayre/left-pad
Fix left padding format specifier and float formatting
2023-01-10 12:24:07 +00:00
gingerBill dd3fac7523 Merge pull request #2292 from colrdavidson/get_core_count
add get core count
2023-01-10 11:42:02 +00:00
MarenFayre 13029d06b2 Removed unneeded semicolon. 2023-01-09 10:39:46 +01:00
MarenFayre 68173f4bc7 Remove unused formatting flag 2023-01-08 20:24:08 +01:00
MarenFayre c979c2fafa Fix left padding format specifier and float formatting 2023-01-08 20:00:42 +01:00
MarenFayre 658435f1b9 Fix off by one error in %d parsing 2023-01-08 19:59:48 +01:00
Colin Davidson 3935957979 remove unused c import 2023-01-06 13:53:32 -08:00
Colin Davidson a36640bcfc more windows fixes 2023-01-06 13:51:25 -08:00
Colin Davidson 171d5b4012 more windows kerfuffle 2023-01-06 13:45:21 -08:00
Colin Davidson 1cc893f21c Merge branch 'master' into get_core_count 2023-01-06 13:34:16 -08:00
Colin Davidson 6ff2db47b4 shuffle to private/public wrapper 2023-01-06 13:33:47 -08:00
gingerBill a11b6a9e5f Merge pull request #2265 from JooperGH/more_dwmapi_bindings
More dwmapi bindings
2023-01-06 12:18:10 +00:00
gingerBill 978568684c Merge pull request #2295 from matias-eduardo/patch-1
Add GetKeyboardState to user32
2023-01-06 12:16:51 +00:00
gingerBill e8e7d3ea31 Merge pull request #2293 from colrdavidson/fix_futexes
fix futex error handling
2023-01-06 12:09:44 +00:00
matias c03cc21908 Add GetKeyboardState to user32 2023-01-06 07:04:38 -04:00
gingerBill 8ef406324b Multi thread more of the backend where possible 2023-01-05 17:26:51 +00:00
gingerBill 23d0c52bf4 Refactor llvm backend code into separate procedures to make it simpler to profile 2023-01-05 16:42:02 +00:00
gingerBill 5eee8077dd enum-ifiy function pass managers for lbModule 2023-01-05 15:56:45 +00:00
gingerBill 029cb6581b Unify function pass managers for auxiliary procedures (e.g. startup type info, runtime, objc names) 2023-01-05 12:54:53 +00:00
gingerBill 025e87d974 Multithread LLVM procedure generation 2023-01-05 12:39:57 +00:00
gingerBill 213a0499a1 Begin multithreading the llvm backend when -use-separate-modules is enabled 2023-01-05 12:29:16 +00:00
gingerBill 1517f1d779 Add uncomment add_type_info_type calls for type assertions 2023-01-05 11:54:21 +00:00
Colin Davidson 50a2493fd3 add get thread count to openbsd 2023-01-05 01:48:00 -08:00
Colin Davidson b455ccd261 fix more things? 2023-01-05 01:37:50 -08:00
Colin Davidson a58650728e fix futex error handling 2023-01-05 01:27:37 -08:00
Colin Davidson b22ddb1453 fix windows structs 2023-01-05 01:25:18 -08:00
Colin Davidson cb7dd12222 name raw union 2023-01-05 01:18:44 -08:00
Colin Davidson 0484bdbb7e fix darwin/freebsd 2023-01-05 01:14:51 -08:00
Colin Davidson 8f39c45e9b use raw_union? 2023-01-05 01:11:46 -08:00
Colin Davidson 944396128b add get core count 2023-01-05 01:06:55 -08:00
gingerBill bbb2164e38 Inline map gets; cast explicitly on TOMBSTONE checking 2023-01-05 01:25:37 +00:00
gingerBill be23d83fc8 Remove unnecessary check is align_formula* et al 2023-01-05 00:47:09 +00:00
gingerBill 291ea33939 Initialize TypePath constructor like to keep the Futex constructor happy 2023-01-04 22:34:59 +00:00
gingerBill 9455918eec Fix min dep type info problem caused by const ref of map_set 2023-01-04 22:20:18 +00:00
gingerBill 8a99b8af3e Narrow mutex usage 2023-01-04 15:55:10 +00:00
gingerBill 12e42d92d3 Localize GenProcsData to the entity itself 2023-01-04 15:35:24 +00:00
gingerBill faa735d0c7 Localize gen_types mutexes 2023-01-04 15:15:12 +00:00
gingerBill d4e18109da Move walking of dependencies for procedures to just before calculating the min dep set 2023-01-04 13:52:38 +00:00
gingerBill d06a0e7093 Improve the PtrSet to be as simple and small as possible 2023-01-04 13:30:27 +00:00
gingerBill b3a55b8b6f Remove unused procedures 2023-01-03 18:42:13 +00:00
gingerBill ec69101101 Convert minimum_dependency_type_info_set to use a PtrMap 2023-01-03 18:39:37 +00:00
gingerBill 17fa8cb6ef Add extra mutex to TypePth just in case 2023-01-03 18:21:42 +00:00
gingerBill 855ebceadc Minimize add_type_info_type usage 2023-01-03 17:26:05 +00:00
gingerBill 2720e98127 Add +ignore along with +build ignore 2023-01-03 17:25:51 +00:00
gingerBill bb80c1b059 Add type_and_value_mutex to DeclInfo 2023-01-03 17:07:53 +00:00
gingerBill 85e390deba Minimize calling of Ast::thread_safe_file() when cloning 2023-01-03 15:57:09 +00:00
gingerBill dc317c8cd8 Make BlockingMutex 2023-01-03 15:50:31 +00:00
gingerBill 774fea1e63 Use RwMutex for gen_procs 2023-01-03 15:47:25 +00:00
gingerBill 485c606672 Clarify RwLocks for add_dependenies_from_unpacking 2023-01-03 15:37:35 +00:00
gingerBill 3dee3205b2 Use RwMutex for DeclInfo `deps 2023-01-03 15:34:52 +00:00
gingerBill c7a704d345 Use RwMutex for the Scope 2023-01-03 15:26:47 +00:00
gingerBill 0fb3032b73 General improves to alloc_ast_node and other unnecessary checks 2023-01-03 14:45:09 +00:00
gingerBill 69934c3b0b More for_array(i, y) to for (x : y) translations 2023-01-03 13:04:09 +00:00
gingerBill 7380b7e61b Add more uses of C++ style for loops over for_array macro 2023-01-03 12:37:41 +00:00
gingerBill 747a11a954 Allow all set entry types to be implicitly cast to their key/value type to allow for easier iteration 2023-01-03 12:18:35 +00:00
gingerBill 252be0fb41 Make all maps use heap allocator implicitly 2023-01-03 11:59:52 +00:00
gingerBill 600f2b7284 Use heap_allocator for all hash set types 2023-01-03 11:53:59 +00:00
gingerBill 670274ad8f More explicit uses of mutexes 2023-01-02 23:56:37 +00:00
gingerBill e10fe91eba Narrow global gen_procs_mutex further 2023-01-02 23:50:48 +00:00
gingerBill fd62ee14cd Code moving around 2023-01-02 23:31:38 +00:00
gingerBill 8ece92f1f6 Minimize the parapoly mutex usage a bit 2023-01-02 23:21:16 +00:00
gingerBill 69b075782b Use a package local mutex for add_type_and_value 2023-01-02 22:40:28 +00:00
gingerBill 6bd3a9d422 Be very explicit where the gen_procs_mutex can be unlock 2023-01-02 22:23:49 +00:00
gingerBill bc9ee8e1a4 Remove loops within futex signals on Linux 2023-01-02 22:13:49 +00:00
gingerBill d36c3c2590 Re enable type_and_value_mutex 2023-01-02 22:06:05 +00:00
gingerBill 52b319dbfd Fix darwin's futex implementation in the compiler 2023-01-02 21:53:41 +00:00
gingerBill 318d92f9a8 Comment out type_and_value_mutex usage 2023-01-02 21:37:21 +00:00
gingerBill 7ffffeeccc Comment out many mutex guards in type_(size|align)_of_internal 2023-01-02 21:35:40 +00:00
gingerBill f16d8e77b3 Narrow fullpath_mutex usage 2023-01-02 20:55:49 +00:00
gingerBill 5b335bb88c Narrow g_type_mutex usage 2023-01-02 20:48:24 +00:00
gingerBill df2767311f Use mutex_try_lock in check_proc_info 2023-01-02 20:42:22 +00:00
gingerBill 09c26e6be0 Narrow type info mutex usage 2023-01-02 20:38:37 +00:00
gingerBill d2ec2d1606 Remove another use of a global mutex 2023-01-02 19:46:55 +00:00
gingerBill 0d87b2e8db Use local mutexes rather than a global one for the dependency insertion 2023-01-02 19:39:35 +00:00
gingerBill 1568971732 Fix pool running 2023-01-02 18:04:16 +00:00
gingerBill 0e040be941 Add define for darwin 2023-01-02 17:49:16 +00:00
gingerBill 9737b65d9c Explicitly call store for futex 2023-01-02 17:18:59 +00:00
gingerBill ad52003077 Remove some unneeded checks 2023-01-02 17:15:29 +00:00
gingerBill c386509112 Minor clean up of thread pool code 2023-01-02 17:06:29 +00:00
gingerBill c293f5b7eb Remove unneeded mutex 2023-01-02 16:56:05 +00:00
gingerBill fa562ec5d6 Remove unneeded local_entity_map 2023-01-02 15:40:25 +00:00
gingerBill 529383f5b1 Correct a race condition when checking the procedure body 2023-01-02 15:30:04 +00:00
gingerBill f01cff7ff0 Multithread checker 2023-01-02 12:31:00 +00:00
gingerBill 015fe924b8 Remove use of queues for procedure checking. 2023-01-02 12:28:38 +00:00
gingerBill a5ce8a8c0b Multi thread check_export_entities 2023-01-02 01:31:14 +00:00
gingerBill bfdcf900ef Remove global_ prefix from global_thread_pool_* procedures 2023-01-02 00:56:06 +00:00
gingerBill 54f89dd84b Multithread check_collect_entities_all using new thread pool 2023-01-02 00:53:11 +00:00
gingerBill da479c7628 Minor style change 2023-01-02 00:35:12 +00:00
gingerBill 3c90a05957 Replace condition+mutex with futex 2023-01-02 00:26:17 +00:00
gingerBill d16ddf7926 Use C++ style for loop over for_array macro in parser.cpp where posible 2023-01-01 16:32:51 +00:00
gingerBill 5c519f0e8d Remove the synchronization primitive init/destroy calls 2023-01-01 16:19:21 +00:00
gingerBill 74e6d9144e Get around the std::atomic issue 2023-01-01 16:15:35 +00:00
gingerBill 20d451396d Begin work on futex-ifying the threading primitives 2023-01-01 15:06:57 +00:00
gingerBill 60d0390ef8 Unify compiler Futex interface 2023-01-01 14:48:31 +00:00
gingerBill 782f1b4718 Merge pull request #2278 from wjlroe/stb-darwin-universal-libraries
Universal stb libraries for macOS (Intel & Apple Silicon)
2023-01-01 14:10:35 +00:00
gingerBill 85f0a1067c Merge pull request #2280 from DragosPopse/master
Fixed empty output_path.name when building a folder with no subfolders
2023-01-01 14:09:51 +00:00
gingerBill c08ff891ad Merge pull request #2287 from odin-lang/compiler-improvements-2022-12
Compiler improvements 2022 12
2023-01-01 13:29:20 +00:00
gingerBill 168cec1e9d Merge pull request #2283 from colrdavidson/threadpool-swap
move to work-stealing threadpool
2023-01-01 13:28:36 +00:00
gingerBill 28fb35f2f7 Merge pull request #2263 from odin-lang/compiler-improvements-2022-12
Compiler Improvements for 2022-12
2023-01-01 13:26:43 +00:00
gingerBill c1384afe2f Merge branch 'master' into compiler-improvements-2022-12 2023-01-01 13:10:49 +00:00
gingerBill 547c7bce1b Merge pull request #2284 from thePHTest/master
fixup are_types_identical for comparing procs and checking if parameter names differ
2022-12-30 11:19:31 +00:00
Phil 0bb93d40d3 fixup are_types_identical for comparing procs and checking if parameter names differ 2022-12-29 16:10:13 -08:00
Colin Davidson 27ba1d596c rework openbsd futexes a little 2022-12-29 12:00:16 -08:00
Colin Davidson 98e5523f2f cover openbsd too 2022-12-29 11:46:43 -08:00
Colin Davidson 223b66f422 oops if->elif 2022-12-29 11:06:35 -08:00
Colin Davidson 04a4dbcdaf add freebsd support 2022-12-29 11:05:31 -08:00
Colin Davidson ef9e31cb31 fix ulock/uwait imports 2022-12-28 22:08:39 -08:00
Colin Davidson e019673a18 fix build 2022-12-28 21:52:41 -08:00
Colin Davidson 5f27f2dd7f move to work-stealing threadpool 2022-12-28 21:44:17 -08:00
Dragos Popescu cfccf73cdd Merge branch 'odin-lang:master' into master 2022-12-26 19:22:47 +02:00
Dragos 465d003b1e Patched empty output_path.name when building a folder 2022-12-26 19:21:24 +02:00
Mikkel Hjortshøj 1d6f7680a1 Update stale.yml
Update stale action to *not* delete issues/PRs anymore and only mark them as stale, also update the version
2022-12-24 15:44:32 +01:00
Skytrias f36e19e86f fix GL2 2022-12-24 11:47:57 +01:00
Skytrias 86fada718e optional constants, starting GL2 fixes 2022-12-24 11:30:15 +01:00
Skytrias 2a94b66f4d test 2022-12-24 11:19:12 +01:00
Michael Kutowski 4ee413aa32 Merge branch 'odin-lang:master' into skytrias-vendor-additions 2022-12-24 10:39:01 +01:00
Jeroen van Rijn 5d0f9c428a Merge pull request #2279 from ftphikari/master
Replaced opaque bit-shifts with readable constants for memory units
2022-12-24 07:32:29 +01:00
hikari d904ae5191 Replaced opaque bit-shifts with readable constants for memory units 2022-12-24 08:27:15 +02:00
William Roe 8a822bdd9a Update stb macOS libraries to be universal
This updates all the darwin stb libraries to be built as universal
libraries - meaning they contain both Intel and Apple Silicon versions.
This should make these more generally compatible.

Also, add stb_vorbis.a in the same way. Not sure why it was missing
before.
2022-12-23 23:15:14 +00:00
William Roe d1a3842e39 Add Darwin-target for building vendor/stb macos universal libs
This Darwin-specific target builds each stb library with macOS-specific
options so that the results are universal static libraries that should
work on Intel (x86_64) and Apple Silicon (arm64) machines. They also
should work on macOS 10.12 and above (which should match what Odin
compiles for).

The default Makefile target will build the darwin rule if its invoked on
a macOS machine, otherwise it'll invoke the more general unix target.
2022-12-23 23:15:14 +00:00
Lucas Perlind 2d824e4809 Fix out or range error with _alloc_command_line_arguments in darwin 2022-12-23 09:37:30 +11:00
gingerBill 00823ca88c Remove a few TODOs 2022-12-22 13:03:34 +00:00
gingerBill ffa14c3aad Remove need the MPMC in single threaded case 2022-12-22 12:58:23 +00:00
gingerBill 41b32f0da4 Clean up mutex usage in the parser 2022-12-22 12:45:23 +00:00
gingerBill c53b2198a8 Add minor comment 2022-12-22 12:02:14 +00:00
gingerBill 9b278db993 Revert "Change tav to be a pointer internally"
This reverts commit e98f1a28e6.
2022-12-22 12:01:41 +00:00
gingerBill e98f1a28e6 Change tav to be a pointer internally 2022-12-22 11:53:13 +00:00
gingerBill c8f05b7c0c Merge pull request #2269 from Skytrias/luapattern
Add lua pattern matching to core:text with tests
2022-12-22 11:08:10 +00:00
gingerBill b00c4a6a8f Merge pull request #2272 from sir-w7/fix/darwin_mem_leak
Fixed memory leak in dir_darwin.odin.
2022-12-22 10:58:59 +00:00
gingerBill 84e1fb2cee Merge pull request #2275 from Platin21/fix/dir-opening-macOS
Fix/dir opening mac os
2022-12-22 10:49:41 +00:00
Platin21 b983ac548c Moves check up and sets flag to rdonly if dir is opened.. 2022-12-22 01:36:04 +01:00
Platin21 fb562ea708 Adds error casting from last error if open fails 2022-12-22 01:26:06 +01:00
Platin21 cdeeeafc3f Fixed issues with dir opening on macOS 2022-12-22 01:22:31 +01:00
gingerBill b9a2426e57 Merge branch 'master' into compiler-improvements-2022-12 2022-12-21 23:59:31 +00:00
gingerBill 81037b3091 Change the order of the args and ret for Arm64 ABI 2022-12-21 23:56:34 +00:00
Jooper fc3c76f946 Fixed CI error 2022-12-21 22:18:13 +00:00
Andrea Piseri 3fa971a510 Add the inner for loop back in the logic
This could be easier to predict in cases where one of `left` and `right`
is significantly greater than the other, and as such the same branch is
taken multiple times in a row
2022-12-21 22:10:02 +01:00
skytrias 63a0395a79 refactor SPECIALS_TABLE 2022-12-21 22:08:03 +01:00
Andrea Piseri 191223bb3c Fix non-generic cast in core:slice.rotate_left 2022-12-21 21:58:01 +01:00
gingerBill 6f0bad816e Merge pull request #2248 from tstibor/fix_test_out
Enable -out:<filepath> for build and runs with the attribute @(test)
2022-12-21 20:38:54 +00:00
skytrias 94af3c2887 package name changed 2022-12-21 21:38:21 +01:00
skytrias e5d0417a6c folder name changed 2022-12-21 21:36:50 +01:00
gingerBill c02bda2427 Merge pull request #2256 from Lperlind/staging/small_array_utilities
Add more utility procedures to small array
2022-12-21 20:28:40 +00:00
Andrea Piseri 385d2a143c Fix core:slice.rotate_left
This commit includes two fixes:
- a temporary cast to make the function compile
- a fix to a logic error that caused the function to hang or return
  incorrect results
2022-12-21 21:09:22 +01:00
sir-w7 67c1b364c4 Fixed memory leak in dir_darwin.odin. 2022-12-21 07:25:13 -08:00
Lucas Perlind f029b4beb1 Add more utility procedures to small array 2022-12-21 13:00:33 +11:00
skytrias 9474c99795 add freeLoadedData flag in case you dont want to remove font memory (e.g. #load) 2022-12-21 01:36:00 +01:00
gingerBill 3040361fac Correct type_ptr_set_update and type_ptr_set_exists 2022-12-20 14:59:00 +00:00
gingerBill 44caa96d50 Set the file's filename and directory in init_ast_file 2022-12-20 14:56:44 +00:00
skytrias 1bea0f3772 fix styling issues and use switches in cases its necessary, add comments to helpers 2022-12-20 15:48:10 +01:00
gingerBill eb0775ad53 Move mutex use around in thread pool 2022-12-20 14:45:01 +00:00
gingerBill 8fc9566a83 Use *_set_update where possible 2022-12-20 14:19:55 +00:00
gingerBill 134c7db4d2 Combine join and destroy for threads 2022-12-20 14:08:24 +00:00
gingerBill a0e3a99dd1 Remove need for semaphore in Thread 2022-12-20 14:07:14 +00:00
gingerBill 0edda2bea7 Clarify ThreadPool interface; Move import_mutex guarding to just the string set 2022-12-20 12:46:33 +00:00
skytrias ff7f139fd7 add iter_index and update tests to use easier matcher setup 2022-12-20 12:59:32 +01:00
Michael Kutowski 84a7f222ff mention fontstash and nanovg in reamde 2022-12-20 12:27:23 +01:00
skytrias d29423c24e add fontstash and nanovg port from heimdall 2022-12-20 12:17:23 +01:00
JooperGH 86a606e716 App bar bindings 2022-12-19 16:31:32 +00:00
JooperGH 1e97588e7b One last binding 2022-12-19 15:29:07 +00:00
JooperGH 3ccc0b5aa6 HRGB and Rect functions 2022-12-19 15:22:05 +00:00
JooperGH 5464a605b1 CreateSolidBrush and FillRect 2022-12-19 13:21:16 +00:00
JooperGH 5519749aa4 Added uxtheme bindings 2022-12-19 11:54:15 +00:00
JooperGH 4a70265bfb Merge branch 'master' of https://github.com/odin-lang/Odin into more_dwmapi_bindings 2022-12-19 11:46:35 +00:00
JooperGH de0d860880 Added more DWMAPI bindings 2022-12-19 11:43:16 +00:00
gingerBill a13e2f4578 Fix minor race condition 2022-12-19 00:29:40 +00:00
gingerBill 01b508f182 Use usize for bounds checking in Array and Slice (compiler) 2022-12-18 23:26:44 +00:00
gingerBill 2a8fa8612d Use fetch_add rather than += 2022-12-18 23:24:34 +00:00
gingerBill e27046098b Add missing gb_internal 2022-12-18 22:58:34 +00:00
gingerBill ca8b148fdc Add gb_internal to path procedures 2022-12-18 22:52:18 +00:00
gingerBill c1f5be24e2 Remove dead code in the compiler 2022-12-18 22:49:10 +00:00
gingerBill 6cdec65ca1 gb_internal LLVM backend 2022-12-18 22:32:05 +00:00
skytrias 967afd8bbb try helper procedures / structs 2022-12-18 23:11:23 +01:00
skytrias 0ae1812f90 small fixes and oob checks, stop infinite loops on empty matches 2022-12-18 23:11:23 +01:00
skytrias eb5523d5d3 case insensitive helper call 2022-12-18 23:11:23 +01:00
skytrias 3f4bbbec29 add proper unicode walking 2022-12-18 23:11:23 +01:00
skytrias 70bd220f34 balanced string, frontier pattern, gsub_with and their tests added 2022-12-18 23:11:23 +01:00
skytrias bd3596f012 create lua strlib text package and tests 2022-12-18 23:11:23 +01:00
gingerBill 66ce990e0b gb_internal to docs and other auxiliary files 2022-12-18 21:51:04 +00:00
gingerBill 690666537c Add gb_internal to checker 2022-12-18 21:46:27 +00:00
gingerBill 056ba1ed13 Even more gb_internal everywhere 2022-12-18 21:24:45 +00:00
gingerBill 93a1f2bf61 Merge remote-tracking branch 'remotes/Odin-GitHub/master' into compiler-improvements-2022-12 2022-12-18 21:17:19 +00:00
gingerBill ac5f5a33e9 gb_internal a lot 2022-12-18 21:17:07 +00:00
gingerBill 0829ac30f7 Merge pull request #2249 from tstibor/fix_odinfmt
Update odinfmt with new filepath.Walk_Proc signature
2022-12-15 10:11:42 +00:00
Thomas Stibor 9d50a04905 Update odinfmt with new filepath.Walk_Proc signature
Commit f9f4551e8d introduced
the additional parameter: `user_data: rawptr` to `filepath.Walk_Proc` callback.
This commit updates odinfmt to meet this new additional parameter.
2022-12-15 09:23:43 +01:00
Thomas Stibor 1ca7da6914 Enable -out:<filepath> for build and runs with the attribute @(test)
According to the odin help command
$ odin help test
...
-out:<filepath>
	Set the file name of the outputted executable
	Example: -out:foo.exe

building and running tests the executable output filepath shall be
specified. However, the -out parameter is disabled, resulting in error message:

Unknown flag for 'odin test': 'out'
'out' is supported with the following commands:
	run, build

Omitting the -out parameter results in default filepath '01.bin' (on Linux).
However, it is desirable for user specifying the output filepath, e.g. by
using this Makefile snippet:

TARGET=main
FLAGS=-warnings-as-errors -verbose-errors

all: run

run:
        @odin run . $(FLAGS) -out:$(TARGET)

test:
        @odin test . $(FLAGS) -out:$(TARGET)

clean:
        @rm -f $(TARGET)

In addition a typo is fixed.
2022-12-14 14:26:32 +01:00
gingerBill 56e050fbc9 Merge pull request #2245 from Said6289/small-typo-in-linalg-any
Fix typo in linalg.any
2022-12-13 11:37:59 +00:00
Said Al Attrach 70e48e39a4 Fix typo in linalg.any 2022-12-13 12:18:58 +01:00
gingerBill 2b0c04f27e Merge pull request #2244 from ftphikari/master
sys/windows: add GetMonitorInfoW
2022-12-13 11:18:35 +00:00
hikari 1ddbe16d28 sys/windows: add GetMonitorInfoW 2022-12-13 10:25:18 +02:00
Jeroen van Rijn 09c1128d9e Merge pull request #2242 from Tetralux/fix-shrink-array
[runtime] Fix typo in shrink_dynamic_array()
2022-12-11 20:14:21 +01:00
Tetralux 588c52a854 [runtime] Fix typo in shrink_dynamic_array() 2022-12-11 09:10:17 +00:00
Jeroen van Rijn 86ec3bcb44 Merge pull request #2238 from awwdev/reflect-procs-aliasing-runtime
Aliasing some procs to avoid code repetition
2022-12-09 19:36:59 +01:00
Jeroen van Rijn 9fc606de48 Merge pull request #2239 from awwdev/patch-3
Fix typo err: runtime.Allocator to Allocator_Error
2022-12-09 19:33:02 +01:00
André (counter) 7fbee88061 Fix typo err: runtime.Allocator to Allocator_Error 2022-12-09 19:20:03 +01:00
André (counter) b3be2cdf9d Aliasing some procs to avoid code repetition
Aliasing some procedures within package reflect so they reference procedures from package runtime.
This avoids redundancy and potential deviation.
Not 100% sure about the ODIN_DISALLOW_RTTI part but I think it should be congruent as well.
2022-12-09 18:14:47 +01:00
gingerBill ff6b76986a Use C++11 loops for some arrays 2022-12-09 12:32:54 +00:00
gingerBill 5c3624eb86 Fix map looping 2022-12-09 12:18:49 +00:00
gingerBill 144e357fd2 Add extra check 2022-12-09 11:37:15 +00:00
gingerBill be22f0d1e1 Fix variable shadow in compiler 2022-12-09 11:32:52 +00:00
gingerBill 34a048f7da Replace compiler for loops for the hash-table types to simplify code usage 2022-12-09 11:29:28 +00:00
gingerBill ffe953b43d Make os.get_last_error contextless 2022-12-08 16:04:03 +00:00
gingerBill b8eacfc7b6 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-12-08 15:58:44 +00:00
gingerBill f8452bf1fc Add different variants for once_do 2022-12-08 15:58:39 +00:00
gingerBill 20943a81c1 Make sync calls contextless where possible 2022-12-08 15:55:53 +00:00
gingerBill 1c4e75e83f Merge pull request #2234 from ftphikari/master
sys/windows: add DescribePixelFormat
2022-12-08 14:59:48 +00:00
gingerBill 9cb9964c2d Remove old code 2022-12-08 00:52:11 +00:00
gingerBill 1f8f94276e Initialize the multiple return value map in lb_create_dummy_procedure 2022-12-07 16:44:26 +00:00
hikari 0d7c89e84a sys/windows: add DescribePixelFormat 2022-12-07 14:33:12 +02:00
gingerBill a5bdb4a8e8 Merge pull request #2208 from odin-lang/multiple-return-abi-experiment
Multiple Return ABI Changes and Improvements
2022-12-07 11:42:23 +00:00
gingerBill 521ed28632 Keep -vet happy 2022-12-06 19:57:41 +00:00
gingerBill d6300314c0 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-12-06 19:55:24 +00:00
gingerBill 27130259cc Coalesce tombstones on delete_key to reduce all map slots from being filled on insertion
This is a bodge and will need to be replaced with an actual solution involving backward shift deletion rather than relying on tombstone slots in the first place.
2022-12-06 19:55:17 +00:00
Jeroen van Rijn b4fb295bb3 Merge pull request #2232 from DragosPopse/master
Added CSIDL_PROFILE in core:sys/windows
2022-12-06 03:22:32 +01:00
Dragos Popescu f7e608628b Merge branch 'odin-lang:master' into master 2022-12-06 02:59:53 +01:00
Dragos Popescu 605d66845a core:sys/windows: Added CSIDL_PROFILE 2022-12-06 02:58:33 +01:00
Jeroen van Rijn 37ec3d7006 Merge pull request #2231 from ftphikari/master
sys/windows: fix wgl function loading in accordance with OpenGL wiki
2022-12-06 01:06:08 +01:00
hikari 89eb351d2b sys/windows: wgl style fix 2022-12-06 02:01:35 +02:00
hikari abaacfe78d sys/windows: fix wgl function loading in accordance with OpenGL wiki 2022-12-06 01:53:19 +02:00
gingerBill f9f4551e8d Add user_data: rawptr to filepath.Walk_Proc callback 2022-12-05 22:31:35 +00:00
Jeroen van Rijn daf005d1ab Merge pull request #2230 from ftphikari/master
sys/windows: added helper gl proc
2022-12-05 23:05:31 +01:00
hikari ce1ee962f5 OpenGL: updated README 2022-12-06 00:00:05 +02:00
hikari d0e4edfb43 sys/windows: added helper gl proc 2022-12-05 23:58:31 +02:00
Jeroen van Rijn 749e5067fb Merge pull request #2228 from DragosPopse/master
-ignore-unknown-attributes: fixed compiler error caused by values being type checked
2022-12-03 00:23:50 +01:00
Dragos Popescu 75dcaf6d8d -ignore-unknown-attributes: fixed the attribute value being type checked in variable declarations 2022-12-03 00:11:18 +01:00
Jeroen van Rijn 00a0a1e95d Merge pull request #2227 from thePHTest/master
correct compare_exact_values(x,y) for TypeId and Procedure
2022-12-02 22:20:43 +01:00
Phil 7a4106077a correct compare_exact_values(x,y) for TypeId and Procedure 2022-12-02 13:13:01 -08:00
Jeroen van Rijn 9c8eaeb988 Merge pull request #2225 from ftphikari/master
sys/windows: add CreateWaitableTimerExW
2022-12-02 04:38:40 +01:00
hikari 7ed28e8a84 sys/windows: add CreateWaitableTimerExW 2022-12-02 05:24:30 +02:00
gingerBill a3d53a6288 Merge pull request #2203 from janivanecky/content_layout_rect
Add NSWindow::content_layout_rect
2022-11-29 19:51:19 +00:00
gingerBill 2127dc56b1 Add math.pow10 2022-11-29 14:31:56 +00:00
gingerBill e59e34d334 Change order of map_free_dynamic in usage 2022-11-29 12:27:32 +00:00
gingerBill 4fd97c3ba6 Remove panic 2022-11-29 12:22:37 +00:00
gingerBill 107c7a36d0 Treat .Mode_Not_Implemented as not an error when doing runtime.map_free_dynamic 2022-11-29 12:20:01 +00:00
gingerBill dcf2c43863 Add aliases for fnv* no_a forms 2022-11-29 11:55:01 +00:00
gingerBill 0c25f7cdc5 Improve core:math procedures and add loads of unit tests 2022-11-29 11:39:44 +00:00
gingerBill e5c243ee93 Fix atan2 by swapping the arguments internally 2022-11-29 09:19:45 +00:00
ftphikari e9b6a8fc9a sys/windows: add SHGetFolderPathW (#2213)
* sys/windows: add SHGetFolderPathW
* sys/windows: add some hittest constants
2022-11-28 18:47:15 +01:00
Jeroen van Rijn a27c00862c Merge pull request #2216 from oskarnp/auto_vcvarsall_build
Automatically initialize x64 environment if CL.exe is missing
2022-11-26 18:01:10 +01:00
Oskar Nordquist a06f75b6fb Automatically initialize x64 environment if CL.exe is missing + make sure found CL.exe is for x64 (credit to mmozeiko) 2022-11-26 11:50:06 -05:00
gingerBill d88b052d2d Naïve optimization of named _split_ multiple return valued when defer is never used
This is a naïve optimization but it helps a lot in the general case where callee temporary stack variables
are not allocated to represent the named return values by using that specific memory.

In the future, try to check if a specific named return value is ever used a `defer` within a procedure or not,
or is ever passed to a nested procedure call (e.g. possibly escapes).
2022-11-25 23:57:55 +00:00
gingerBill 615eccb6d1 Correct return ptr semantics for split returns 2022-11-24 14:26:45 +00:00
gingerBill d3c65b6ba5 Make split multiple return logic only work for the native Odin calling conventions 2022-11-24 13:16:02 +00:00
gingerBill 90415e4a6e Add split multiple return to different ABIs 2022-11-24 12:14:19 +00:00
gingerBill 7352c312e0 Fix type for split returns code 2022-11-24 11:20:28 +00:00
gingerBill 0befadde1d Basic copy elision support for multiple return values 2022-11-24 01:27:39 +00:00
gingerBill aef8b25a8e Listen to past Bill's wisdom 2022-11-23 23:54:12 +00:00
gingerBill ae81117f70 Merge branch 'master' into multiple-return-abi-experiment 2022-11-23 23:43:00 +00:00
gingerBill d6cb105d5f Fix LLVM type cycle nonsense with procedure types 2022-11-23 23:32:34 +00:00
gingerBill b7b9a016d3 Merge branch 'master' into multiple-return-abi-experiment 2022-11-23 22:48:56 +00:00
gingerBill 5ac36b5f25 HACK: Get around debugging type generation for slices and dynamic arrays of *nix systems 2022-11-23 22:46:02 +00:00
gingerBill 22bcf1ba70 Extra check for slices and dynamic arrays for -debug 2022-11-23 22:31:21 +00:00
gingerBill 51c705edf1 Add extra check to debug information of named composite types 2022-11-23 21:59:53 +00:00
gingerBill 708a1b0cd3 Clean up return logic for split multiple return ABI experiment 2022-11-23 16:42:26 +00:00
gingerBill 7ab591667a Basic support for new ABI experiment on Win64 2022-11-23 16:25:09 +00:00
gingerBill e45401bfb4 Fix #2207 2022-11-23 14:14:22 +00:00
Jeroen van Rijn 6b652afb8e Merge pull request #2206 from thisisnotnull/fix-wprintf
fix wprintf return value
2022-11-22 16:53:23 +01:00
gingerBill 0a0db23b17 Remove copy elision code 2022-11-22 15:49:27 +00:00
thisisnotnull 76b85c0622 fix wprintf return value 2022-11-21 21:39:43 +01:00
gingerBill 6fa0679be9 Fix #2109 2022-11-21 13:12:44 +00:00
gingerBill afea221d64 Make structs with the same fields but different tags different types
Fixes #2105
2022-11-21 13:10:49 +00:00
gingerBill b9ec2de4db strconv.parse_f64 - accurately parse floats 2022-11-21 13:00:24 +00:00
gingerBill 3dfd53aee0 Improve error handling for trailing commas #2136 2022-11-21 11:56:59 +00:00
gingerBill b54fc8ff95 Fix UUID 2022-11-21 11:53:49 +00:00
gingerBill 8745942255 Fix #2174 2022-11-21 11:42:43 +00:00
gingerBill c7be30e0ea Fix #2172 2022-11-21 11:38:29 +00:00
gingerBill 1baa47c78e Fix #2179 2022-11-21 11:31:35 +00:00
gingerBill 0b33df4e9d Fix #2186 2022-11-21 11:30:21 +00:00
gingerBill 4c40495742 Fix #2188 2022-11-21 11:23:10 +00:00
gingerBill 824b97d250 Fix #2197 2022-11-21 11:14:29 +00:00
gingerBill 5bbab05161 Fix #2199 2022-11-21 11:02:52 +00:00
gingerBill 83558a1352 Fix #2201 2022-11-21 11:01:01 +00:00
gingerBill cb183e968a Fix #2202 2022-11-21 10:30:59 +00:00
gingerBill 27d56d0da4 Fix #2125 2022-11-21 10:25:34 +00:00
gingerBill c663566cd5 Fixed comparison against nil for maps 2022-11-20 01:34:57 +00:00
gingerBill 13d052027f Merge pull request #2204 from colrdavidson/fix_wasm_mem
fix missing wasm memory case
2022-11-19 10:17:40 +00:00
Colin Davidson 7076cf69e4 fix missing wasm memory case 2022-11-18 23:41:47 -08:00
Jan Ivanecky 6ae8adaa45 Add NSWindow::content_layout_rect 2022-11-17 17:57:34 -05:00
gingerBill 15bbdb2030 Merge pull request #2181 from odin-lang/map-dev
New `map` internals
2022-11-17 15:29:28 +00:00
Jeroen van Rijn 48c9c1682c Merge pull request #2198 from Kelimion/ms-craziness
Fix microsoft_craziness.h
2022-11-15 14:02:11 +01:00
Jeroen van Rijn d3c5143292 Fix microsoft_craziness.h 2022-11-15 13:57:02 +01:00
Jeroen van Rijn 3949e2220f Test new map when used as a set.
map[K]struct{} works fine.
2022-11-15 01:27:29 +01:00
Jeroen van Rijn 9ed4f95c1a Merge pull request #2196 from Skytrias/opengl-defines
Add missing OpenGL constants based on GLAD
2022-11-15 01:13:50 +01:00
Michael Kutowski 8daecf7532 Update constants.odin 2022-11-15 01:06:03 +01:00
Michael Kutowski 11d665c25a Update enums.odin 2022-11-15 01:05:38 +01:00
Jeroen van Rijn 98a086b91b Merge pull request #2194 from mifreundorfer/fix-scratch-allocator
Handle freeing nil in scratch allocator
2022-11-14 22:04:00 +01:00
Michael Freundorfer f323a179d9 Handle freeing nil in scratch allocator 2022-11-14 21:44:20 +01:00
Jeroen van Rijn c6f282d20b Merge pull request #2193 from ftphikari/master
sys/windows: add ShellExecuteExW
2022-11-14 21:06:27 +01:00
hikari ba49a9100d sys/windows: add ShellExecuteExW 2022-11-14 21:58:12 +02:00
Jeroen van Rijn 6fe77155b5 Merge pull request #2191 from Kelimion/build_float
Don't write leading + unless +Inf or we ask for it.
2022-11-14 16:46:10 +01:00
Jeroen van Rijn 677e7ff642 Don't write leading + unless +Inf or we ask for it. 2022-11-14 16:32:50 +01:00
gingerBill 682b5fa0d3 Merge pull request #2190 from colrdavidson/write_float
add floats to string builder
2022-11-14 12:42:49 +00:00
gingerBill ab00db2ebd Add write_(f16|f32|f64) calls 2022-11-14 12:37:55 +00:00
Colin Davidson 0a0e8f36eb add floats to string builder 2022-11-14 04:30:14 -08:00
gingerBill bbe44b49bc Correct map_insert 2022-11-14 11:47:56 +00:00
gingerBill 25bec19b1f Revert "Minor improvement to multi return value reducing stack usage" 2022-11-13 23:56:05 +00:00
gingerBill 81f83d5780 Fix prototype 2022-11-13 23:51:59 +00:00
gingerBill d2019e3e4d Enforce pointer cast 2022-11-13 23:50:45 +00:00
gingerBill 489e8dc592 Add @(require_results) to map procedures where possible 2022-11-13 23:47:00 +00:00
gingerBill 3edb3d8d8c Simplify the handling of the hashing calls for maps 2022-11-13 23:24:08 +00:00
gingerBill a705a2e38b Minor improvement to multi return value reducing stack usage 2022-11-13 22:55:32 +00:00
Jeroen van Rijn 7dfbda58d9 Fix CI typo. 2022-11-13 16:38:22 +01:00
Jeroen van Rijn 9b88a38e54 map tests for Linux and Mac 2022-11-13 16:32:24 +01:00
Jeroen van Rijn 16a494347c map: Add tests for update + delete. 2022-11-13 16:24:20 +01:00
gingerBill ad0f11668b Correct map_reserve_dynamic caused by an bizarre code generation bug 2022-11-13 14:53:58 +00:00
Jeroen van Rijn 699cabeb1c Update tests/internal/build.bat 2022-11-12 17:36:20 +01:00
Jeroen van Rijn 7207f4b0c5 Add tests/internal/build.bat 2022-11-12 17:31:26 +01:00
Jeroen van Rijn 9c1b464c94 Add tests for new map implementation. 2022-11-12 17:25:42 +01:00
gingerBill 04a1e7d638 Correct json/unmarshal.odin 2022-11-11 16:15:21 +00:00
gingerBill 7cfbd87f57 Merge branch 'master' into map-dev 2022-11-11 15:56:14 +00:00
gingerBill e9e05a3783 Fix typo 2022-11-11 15:55:55 +00:00
gingerBill 2b83f27f06 Merge branch 'master' into map-dev 2022-11-11 15:54:33 +00:00
gingerBill 3d0e194298 Check for non-zero sized elements for intrinsics.ptr_sub 2022-11-11 15:54:13 +00:00
gingerBill fcd8860990 Make intrinsics.ptr_sub use explicit integer arithmetic internally 2022-11-11 15:52:49 +00:00
gingerBill 22840ddf97 Add noinline LLVM attribute to static map procedures 2022-11-11 15:35:05 +00:00
gingerBill f9576c2f5b Add internal linkage to static map calls 2022-11-11 15:28:20 +00:00
gingerBill 16fc961010 Begin work on map static set 2022-11-11 14:45:22 +00:00
gingerBill d2701d8b13 Make __dynamic_map_set take the hash rather than compute it internally 2022-11-11 13:04:38 +00:00
gingerBill a0bd31646b Make map get internal calls take the hash value rather than compute it internally 2022-11-11 13:02:23 +00:00
gingerBill 0d37da54b4 Add minor optimization for lb_map_cell_index_static 2022-11-11 11:41:28 +00:00
gingerBill 5d47e2a166 Change map_reserve_dynamic no do anything when current capacity is greater than specified for the reserve 2022-11-11 11:24:34 +00:00
gingerBill 035c75d6a9 Add contextless where appropriate 2022-11-11 11:23:59 +00:00
gingerBill b475481788 Get deleted key and value for delete_key 2022-11-11 11:19:34 +00:00
gingerBill 033525fe13 Force inline of hasher proc where possible 2022-11-11 11:10:26 +00:00
gingerBill 8852d090b6 Correct static map get; make get take a pointer to simplify compiler internals 2022-11-10 12:46:53 +00:00
gingerBill ac259ac790 Unify reserve and grow code 2022-11-10 12:34:01 +00:00
gingerBill 7b4a87d37c Correct iterate_map 2022-11-10 12:33:49 +00:00
gingerBill f6fc3ebe37 Add reflect/iterator.odin 2022-11-10 12:27:12 +00:00
gingerBill 5c106abe3f Make map_alloc_dynamic handle the nil_allocator() 2022-11-10 12:01:40 +00:00
gingerBill db748b7a05 Correct logic for __dynamic_map_set 2022-11-09 23:10:18 +00:00
gingerBill f2f2d532f5 Add extra calls to Tracking_Allocator 2022-11-09 22:31:49 +00:00
gingerBill 1bcec3f769 Change map internal calls to use a pointer 2022-11-09 22:21:36 +00:00
gingerBill b035ee2bcd Swap hashes 2022-11-09 22:05:28 +00:00
gingerBill 0424fb486b Rewrite map_insert_hash_dynamic 2022-11-09 21:00:17 +00:00
gingerBill 3858422f1d Use mem_resize where possible 2022-11-09 20:59:49 +00:00
gingerBill d4f343751e Inline __dynamic_map_set code where possible 2022-11-08 21:57:18 +00:00
gingerBill 79baddc157 Merge pull request #2176 from jaspergeer/fix-untyped-segfault
fix #2129 Segfault in compiler when void function used for its return value
2022-11-08 21:23:12 +00:00
gingerBill bcf437dc11 Check for existence before setting
Test code
2022-11-08 21:21:19 +00:00
gingerBill 503eb470a7 Do an extra check before insertion for pre-existing keys
This is test code
2022-11-08 21:10:38 +00:00
gingerBill 667af1be58 Correct map_insert_hash_dynamic and map_insert_dynamic 2022-11-08 20:44:52 +00:00
gingerBill 366779f8c7 Fix bug with allocator not getting set on a map 2022-11-08 16:06:10 +00:00
gingerBill dae299b781 Make map_free_dynamic take the total size of the allocation 2022-11-08 15:40:30 +00:00
gingerBill 2f29894b45 Minor change to map_cell_index_static 2022-11-08 15:15:00 +00:00
gingerBill 0819d05a0b Fix for in for map 2022-11-08 15:07:57 +00:00
gingerBill 6a4e44607c Fix json marshal for maps 2022-11-08 14:59:09 +00:00
gingerBill a71daee545 Allow for -use-static-map-calls which generates a get procedure per map; add runtime.map_get 2022-11-08 14:58:05 +00:00
gingerBill 046dd55032 Change __dynamic_map_get signature 2022-11-08 13:02:32 +00:00
gingerBill 2fc3da3fde Change Raw_Map.len to int from uintptr 2022-11-08 12:29:20 +00:00
gingerBill a74093784c Add intrinsics.map_cell_info and intrinsics.map_info 2022-11-08 12:24:00 +00:00
gingerBill ed58374964 Make Map_Info store pointers to cell info rather than inline 2022-11-08 12:18:36 +00:00
gingerBill 6dd4d1a924 Correct reflection usage of maps 2022-11-08 11:50:55 +00:00
gingerBill d77269dee2 Disallow zero sized map keys 2022-11-08 11:42:42 +00:00
gingerBill ea263b8cc5 Add runtime.map_exists_dynamic 2022-11-08 11:29:09 +00:00
gingerBill 45f0c812af Correct reflect.map_entry_info_slice 2022-11-08 11:21:45 +00:00
gingerBill 810a1eee41 Remove the need for type->Map.internal_type and replace with the definition of runtime.Raw_Map 2022-11-08 11:13:46 +00:00
gingerBill e3e225d21b Support for in loops for map 2022-11-08 11:04:37 +00:00
gingerBill 50e10ceb3b Correct hashing for map types 2022-11-08 01:20:08 +00:00
gingerBill da774e3fd2 General modifications 2022-11-08 00:38:31 +00:00
gingerBill 2c3febd620 Correct fmt printing to be robust 2022-11-07 23:35:44 +00:00
gingerBill bce62b98d4 Basic fmt printing for map 2022-11-07 23:32:59 +00:00
gingerBill e914a8710d Basic get and set support for new map 2022-11-07 23:17:37 +00:00
gingerBill c96e0afbf1 Begin work on implementing the new map internals 2022-11-07 23:02:21 +00:00
gingerBill f1c24f434b -default-to-nil-allocator also enables -no-dynamic-literals 2022-11-07 10:24:14 +00:00
Jasper Geer e8517e1d02 check for nullptr when evaluating untypedness 2022-11-04 16:29:04 -04:00
gingerBill 92e406cef0 Implement asin in native Odin 2022-11-04 14:30:18 +00:00
gingerBill 269913ede0 Implement acos in native Odin 2022-11-04 14:26:31 +00:00
gingerBill 2ed16240a7 Add core:text/edit 2022-11-04 14:08:19 +00:00
gingerBill ff36b754cb Fix atrig functions 2022-11-04 13:53:28 +00:00
gingerBill 503b897677 Fix formatting 2022-11-04 12:31:53 +00:00
gingerBill d69c74665a Add @(require_results) 2022-11-04 12:31:39 +00:00
gingerBill fcf081283c Move LICENSE 2022-11-04 12:23:48 +00:00
gingerBill 7a6e8543a6 Use #by_ptr and @(require_results) were useful 2022-11-04 12:21:01 +00:00
gingerBill f30755a871 Update README.md 2022-11-04 11:59:37 +00:00
gingerBill 503220e4c1 Add README.md 2022-11-04 11:59:26 +00:00
gingerBill 051814a69c Wrap parse procedures to allow for multiple return values 2022-11-04 11:59:20 +00:00
gingerBill 21843da9e3 Add //+build windows 2022-11-04 11:47:42 +00:00
gingerBill 30f49f81c1 Use slices and Odin string where possible due to struct field ordering 2022-11-04 11:44:49 +00:00
gingerBill 439f4776e4 Add cgltf to build_vendor.bat 2022-11-04 11:40:07 +00:00
gingerBill b743f56fb9 Fix +build ignore 2022-11-04 11:39:54 +00:00
gingerBill 1fc3f6cb2e Add vendor:cgltf 2022-11-04 11:39:38 +00:00
gingerBill df19c48da8 Add doc.odin 2022-11-03 13:36:00 +00:00
gingerBill f7211408fc Merge pull request #1544 from FancyKillerPanda/build_ignore
Changed `//+ignore` to `//+build ignore` and emit a warning for unknown tags
2022-11-03 12:58:26 +00:00
gingerBill 30db316e16 Merge pull request #2141 from ChuuniMage/patch-2
Add caprintf and ctprintf to fmt
2022-11-03 12:57:46 +00:00
gingerBill 8c01e952f3 Merge pull request #2072 from odin-lang/allocator-mode-alloc-non-zeroed
Add `Allocator_Mode.Alloc_Non_Zerored`
2022-11-03 12:57:23 +00:00
gingerBill 3e66b88031 Merge pull request #2147 from jaspergeer/tighten-slice-string-cast-error
fix #2095 "Suggestion: the expression may be casted to string" in response to erroneous cast to string
2022-11-03 12:47:44 +00:00
gingerBill f76316f889 Merge branch 'master' into allocator-mode-alloc-non-zeroed 2022-11-03 12:47:11 +00:00
gingerBill 32477a88ef Merge pull request #2165 from JopStro/master
Implement os open for wasi_wasm32 target
2022-11-03 12:43:55 +00:00
gingerBill e8bc576b23 Rename fnv32 and fnv64 to fnv32_no_a and fnv64_no_a 2022-11-03 11:44:19 +00:00
gingerBill 2eea6f2490 Merge pull request #2173 from Hyp-X/master
d3d12: Fixed RESOURCE_STATE_GENERIC_READ flags
2022-11-03 10:37:32 +00:00
Hyp-X 1d9d79542c d3d12: Fixed RESOURCE_STATE_GENERIC_READ flags 2022-11-03 10:49:45 +01:00
gingerBill 1a6d4c955a Add more bit_sets to direct packages 2022-11-02 23:12:43 +00:00
gingerBill 717522efe4 Correct more flags for d3d12 2022-11-02 22:45:05 +00:00
gingerBill 8d06d9c23d Merge branch 'master' of https://github.com/odin-lang/Odin 2022-11-02 16:43:36 +00:00
gingerBill 765c1546c5 Make many d3d12 flags enums into bit_set 2022-11-02 16:43:29 +00:00
Jeroen van Rijn 7ec6fd30f0 Merge pull request #2171 from Kelimion/os_read_windows
Fix os.read implementation on Windows.
2022-11-02 17:03:20 +01:00
Jeroen van Rijn 0ca773114a Fix os.read implementation on Windows. 2022-11-02 16:48:39 +01:00
gingerBill 9e1576418f Update README.md 2022-11-02 15:07:09 +00:00
gingerBill b7ea169c81 Fixed #2170 2022-11-02 11:36:49 +00:00
gingerBill 3b583cbac7 Add debug symbols for global constants of integers, bools, enums, runes, & pointers.
Variables are namespaced with `pkg::name` or `name` if built-in or the initial package for convenience.
2022-11-02 00:05:51 +00:00
gingerBill 382bd87667 Merge pull request #2169 from odin-lang/location-byval
Ad-hoc pass source code location directly by pointer without stack copy
2022-11-01 15:52:40 +00:00
Jeroen van Rijn 6cc07dc24e Merge branch 'master' of github.com:odin-lang/Odin 2022-11-01 15:49:10 +01:00
Jeroen van Rijn 01cdd22a01 Temporarily disable certain tests. 2022-11-01 15:48:27 +01:00
gingerBill 35331e6973 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-11-01 14:45:57 +00:00
gingerBill c18e98e8c5 Add extra check in add_entity_and_decl_info #2161 2022-11-01 14:45:51 +00:00
Jeroen van Rijn 3cd553565f Merge pull request #2168 from Kelimion/target_version
Add -minimum-os-version flag
2022-11-01 15:18:06 +01:00
Jeroen van Rijn 9eec9f5788 Add -minimum-os-version flag
Allow for Darwin targets to specify the minimum OS version:
e.g. -minimum-os-version:12.0.0
2022-11-01 15:04:44 +01:00
gingerBill 2b7ca2bdd6 Fix #2160 (deep subtyping through using of _) 2022-11-01 13:14:20 +00:00
gingerBill 411c0add3b Add safety check for #2161 2022-11-01 13:03:35 +00:00
JopStro 18d7ecc1a5 wasi: Add FD_FILESTAT_GET to default file open rights 2022-11-01 12:56:36 +00:00
gingerBill 4812601e78 Fix #2167 context.assertion_failure_proc = nil (context field assignments) 2022-11-01 12:56:17 +00:00
Jeroen van Rijn 2d5779b660 Add missing newline. 2022-11-01 00:47:16 +01:00
Jeroen van Rijn fd53e8b955 Merge pull request #2166 from Kelimion/clarify-define-help
Clarify -define help.
2022-11-01 00:46:17 +01:00
Jeroen van Rijn 53a030c65b Clarify -define help. 2022-11-01 00:38:54 +01:00
JopStro 91ad6b42c5 rename default_dir to current_dir 2022-10-31 21:46:47 +00:00
JopStro dad10ef800 create _yeild stub for wasi_wasm32 target to avoid compile error 2022-10-31 21:22:55 +00:00
JopStro 71eb21aab7 implement open for wasi_wasm32 target 2022-10-31 21:21:10 +00:00
Jeroen van Rijn f8228e305a Merge pull request #2164 from colrdavidson/fix-osx-read
terminate read if we read EOF
2022-10-31 14:44:40 +01:00
Colin Davidson 0e7109cab2 terminate read if we read EOF 2022-10-31 06:08:18 -07:00
gingerBill c39ef1b25c Ad-hoc pass source code location directly by pointer without stack copy 2022-10-31 00:25:53 +00:00
gingerBill 9da37ed394 Optimize #caller_location and #location to use read only data section where possible 2022-10-31 00:04:15 +00:00
gingerBill 8fa571c283 Use direct parameter value in lb_find_ident when possible 2022-10-30 22:58:44 +00:00
gingerBill 83f3ae14d5 Improve SysV ABI LLVM IR generation for development purposes 2022-10-30 22:50:24 +00:00
gingerBill 6a14c3edb4 Make raw_data an intrinsic rather a @(builtin) runtime procedure 2022-10-30 22:05:29 +00:00
Jeroen van Rijn 2cd895c50b Merge pull request #2159 from jceipek/fix-stb-darwin-lib-refs
Fix STB lib import references on `ODIN_OS == .Darwin`
2022-10-30 05:01:24 +01:00
Julian Ceipek ee89c0458f Fix STB lib import references on ODIN_OS == .Darwin 2022-10-29 22:19:01 -04:00
Jeroen van Rijn cee847a68c Merge pull request #2156 from Kelimion/remove_opt
Remove formerly deprecated `-opt` flag.
2022-10-28 21:47:31 +02:00
Jeroen van Rijn 413f96553a Remove formerly deprecated -opt flag. 2022-10-28 21:38:20 +02:00
Jeroen van Rijn 662ed4a67c Merge pull request #2154 from Kelimion/llvm-15-check
Panic if LLVM > 14.
2022-10-27 03:08:02 +02:00
Jeroen van Rijn 85a263130d Add LLVM > 14 check to main.cpp for Darwin. 2022-10-27 02:55:38 +02:00
Jeroen van Rijn d19ae37af1 Panic if LLVM > 14. 2022-10-27 02:39:18 +02:00
Jeroen van Rijn 22672a816e Merge pull request #2153 from oskarnp/fix-fmt-string-width
Fix behavior of fmt_string() to not truncate strings to width
2022-10-26 17:54:26 +02:00
Oskar Nordquist dcb873c88d Fix behavior of fmt_string() to not truncate strings to width 2022-10-26 11:21:42 -04:00
gingerBill 62ab2987b6 Change name to windows_set_file_info_times 2022-10-26 16:08:49 +01:00
gingerBill 7bcde35651 Heavily improve time handling on Windows for time.now() and os.File_Info 2022-10-26 16:05:49 +01:00
JasperGeer 4b8721a0bb check addressing mode instead 2022-10-26 10:11:10 -04:00
gingerBill 7743e34596 Fix typo 2022-10-26 15:01:35 +01:00
gingerBill 4003b76fd3 Add GetSystemTimePreciseAsFileTime 2022-10-26 15:00:25 +01:00
gingerBill c27ed1896f Merge branch 'master' of https://github.com/odin-lang/Odin 2022-10-26 13:37:40 +01:00
gingerBill 7d217269b5 Add Arena_Kind.Buffer to core:mem/virtual 2022-10-26 13:37:20 +01:00
Jeroen van Rijn a3c8882648 Merge pull request #2151 from nowheredevel/master
Fix printf typo in documentation
2022-10-26 01:53:46 +02:00
nowheredevel 4389059834 Fix printf typo in documentation 2022-10-25 19:06:15 -04:00
Jeroen van Rijn a55e90fefd Merge pull request #2149 from Kelimion/which
Detect `which` and complain if not found.
2022-10-25 16:56:42 +02:00
Jeroen van Rijn f58f922487 Detect which and complain if not found. 2022-10-25 16:45:38 +02:00
JasperGeer 1a0930f841 don't suggest u8 slice cast to string for u8 slice literal 2022-10-23 19:41:07 -04:00
gingerBill a5f8c3f692 Update many enums to bit_sets for D3D11 2022-10-23 13:17:37 +01:00
Jeroen van Rijn 92fb65cf2e Fix #defined(I). 2022-10-23 04:32:45 +02:00
Jeroen van Rijn a51943e27f Add core:math/rand.choice 2022-10-23 04:18:58 +02:00
Jeroen van Rijn 03c834e410 Merge pull request #2145 from jaspergeer/fix-scalar-cast-to-non-square-matrix
fix #2130 Assertion failure in compiler on cast of scalar to non-square matrix
2022-10-21 22:27:15 +02:00
Jasper Geer 989107094c throw type checker error when scalar cast to non-square matrix 2022-10-21 15:41:58 -04:00
Jeroen van Rijn fd8956b8f4 Merge pull request #2144 from Kelimion/glfw
Add RawMouseMotionSupported
2022-10-21 19:28:44 +02:00
Jeroen van Rijn 648e3c65ea Add RawMouseMotionSupported 2022-10-21 19:20:15 +02:00
gingerBill d5047e621d Merge pull request #2134 from jrfondren/errno-linkfix
fix core:c/libc.errno link_name for Linux and FreeBSD
2022-10-21 15:48:43 +01:00
gingerBill 8fbdef01d6 Merge pull request #2142 from jceipek/fix-objc_allocateClassPair
Fix signature for `objc_allocateClassPair` and add `objc_registerClassPair` to enable Objective-C subclassing
2022-10-21 11:08:00 +01:00
ChuuniMage 9dee943fae Update fmt.odin
Feedback regarding internal `fmt` reference addressed
2022-10-21 14:50:46 +11:00
Julian Ceipek 8ceb691cec Fix indentation 2022-10-20 21:38:43 -04:00
Julian Ceipek f26516f6fa Add objc_registerClassPair to allow subclassing 2022-10-20 21:18:11 -04:00
Julian Ceipek fda8e8a30b Use c.size_t to match C declaration more directly 2022-10-20 21:16:53 -04:00
Julian Ceipek 2242178d96 Fix signature for objc_allocateClassPair 2022-10-20 21:07:14 -04:00
ChuuniMage a459bc13dc Add caprintf and ctprintf to fmt
Formatted cstring procs to work with ubiquitous cstring APIs
2022-10-21 10:23:10 +11:00
gingerBill 53e84b7f31 Remove doubly linked list of Platform_Memory_Block fields 2022-10-19 23:39:47 +01:00
gingerBill 098f51aa80 Allow transmute to be constant for integers of the same internal endianness 2022-10-19 16:59:38 +01:00
gingerBill 765969e6a3 Revert default_resize_bytes_align logic to previous behaviour 2022-10-19 16:06:36 +01:00
gingerBill 8086c14dcc Merge branch 'master' of https://github.com/odin-lang/Odin 2022-10-18 10:28:25 +01:00
gingerBill 80ce1b7d85 Allow for N = -1 in wstring_to_utf8 2022-10-18 10:28:17 +01:00
Julian Fondren 9f55404845 fix core:c/libc.errno link_name for Linux and FreeBSD
Although the FreeBSD link matches Darwin, its EILSEQ still matches Linux.

Confirmed with the following program:

```odin
package main
import "core:c/libc"

main :: proc() {
	libc.printf("%d\n", libc.errno()^) // 0
	_ = libc.fopen("nonexistent file", "r")
	libc.printf("%d\n", libc.errno()^) // 2
}
```

on Linux:

	Odin: dev-2022-10:075040ae
	OS:   Manjaro Linux, Linux 5.10.147-1-MANJARO
	CPU:  Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
	RAM:  15953 MiB

and FreeBSD:

	Odin: dev-2022-10:075040ae
	OS:   FreeBSD: Unknown
	CPU:  Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
	RAM:  990 MiB

FreeBSD uname -r: 13.0-RELEASE
2022-10-17 22:32:10 -05:00
gingerBill 075040ae05 Update sort_private.odin 2022-10-18 00:06:21 +01:00
gingerBill aa799d6a0d Merge pull request #2124 from odin-lang/virtual-arena-unification
`core:mem/virtual` - Unify `Static_Arena` and `Growing_Arena` into `Arena`
2022-10-17 11:46:44 +01:00
gingerBill 58e607e960 Merge pull request #2128 from Lperlind/staging/better_using_blank
Fix assert in issue #1555 and improve error messages with 'using _'
2022-10-17 11:45:57 +01:00
gingerBill ff51c5ee56 Wrap intrinsics.overflow_add to safe_add 2022-10-15 12:52:07 +01:00
Lucas Perlind 73c1f08776 Improve error messages with 'using _' 2022-10-15 19:46:17 +11:00
gingerBill 412ca36230 Merge pull request #2127 from terids/vendor-vulkan-fix
Fix GetInstanceProcAddr crash
2022-10-14 12:22:08 +01:00
terids 06d1df4cae Fix GetInstanceProcAddr crash
It was trying to initialise itself with itself when calling load_proc_addresses(Instance)
Discord bug channel reference https://discord.com/channels/568138951836172421/585072813954564100/1030265964572450867
2022-10-14 02:03:57 +01:00
gingerBill 7662808bc9 Add overflow_add checks to alloc_from_memory_block 2022-10-13 12:53:33 +01:00
gingerBill d48828dd80 Add overflow check when using a growing arena 2022-10-13 12:45:17 +01:00
gingerBill b725e01cdd Add @(require_results) to many procedures 2022-10-13 11:10:16 +01:00
gingerBill 874c1f076d Merge pull request #2126 from ftphikari/master
sys/windows: add SHFileOperationW
2022-10-13 11:04:01 +01:00
hikari 2c14f0a109 sys/windows: add ITaskbarList interfaces 2022-10-13 11:19:05 +03:00
gingerBill cf4afc2e7b Inline assert condition 2022-10-12 21:26:50 +01:00
gingerBill 5ed06f7eb8 Rename constants; minor rearrange of Arena layout 2022-10-12 21:23:45 +01:00
gingerBill 765cd66b30 Clean up minimum_block_size default implicit initialization 2022-10-12 21:20:31 +01:00
gingerBill 5a8fbc230d Sanity corrections to virtual calls 2022-10-12 21:16:34 +01:00
gingerBill 5c62211f00 Inline resize logic for virtual.Arena 2022-10-12 20:44:36 +01:00
gingerBill 835b8ffa22 Update total_used for arena_static_reset_to 2022-10-12 20:30:48 +01:00
gingerBill b84108c4b5 Inline align forward offset code 2022-10-12 20:28:51 +01:00
gingerBill 6642e1fc9d Unify Static_Arena and Growing_Arena into Arena 2022-10-12 19:10:04 +01:00
hikari c909e8e4b8 sys/windows: add SHFileOperationW 2022-10-12 04:35:41 +03:00
gingerBill 9bdbb45517 Merge pull request #2110 from elusivePorpoise/master
os2/file_windows fix
2022-10-11 22:37:29 +01:00
gingerBill 1b5860e574 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-10-11 21:22:05 +01:00
gingerBill 047d45584e Fix #2016 when passing an untyped integer to a generic typeid parameter 2022-10-11 21:21:56 +01:00
elusivePorpoise 721486f875 Merge branch 'odin-lang:master' into master 2022-10-11 02:20:30 -07:00
gingerBill 29f2ecd228 Merge pull request #2101 from ftphikari/master
sys/windows: add a bunch of stuff
2022-10-10 22:08:30 +01:00
gingerBill 970ac22647 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-10-10 21:49:03 +01:00
gingerBill 419eab5059 Force call site attributes for procedures (relating to #2121 causing ABI issues for intrinsics.objc_send) 2022-10-10 21:48:56 +01:00
hikari a1935bc1f4 sys/windows: replace A with W 2022-10-10 20:40:41 +03:00
gingerBill fc06c8ed9f Merge pull request #2120 from jceipek/fix-nsapplication-shouldTerminateAfterLastWindowClosed
Fix signature for `shouldTerminateAfterLastWindowClosed` delegate proc
2022-10-10 12:01:36 +01:00
gingerBill 7952b26e8b Merge pull request #2115 from Lperlind/staging/soa_ptr_debug_fix
Generate debug info for Type_SoaPointer
2022-10-10 11:56:51 +01:00
hikari fa6cfde4b0 sys/windows: add free disk space function binding 2022-10-10 07:26:32 +03:00
Jeroen van Rijn 4c78ba2152 Fix #2122 2022-10-09 21:34:43 +02:00
Jeroen van Rijn 9870e43ac0 Merge pull request #2119 from odin-lang/revert-2118-fix-2112
Revert "Fix #2112"
2022-10-09 21:23:35 +02:00
Julian Ceipek 63086c7eaf Use NS.BOOL instead of bool 2022-10-09 14:31:26 -04:00
Julian Ceipek ef0c6fc4b3 Fix signature for shouldTerminateAfterLastWindowClosed delegate proc 2022-10-08 23:52:12 -04:00
Jeroen van Rijn 159c5311c3 Revert "Fix #2112" 2022-10-08 23:01:06 +02:00
Jeroen van Rijn b6a65fac36 Merge pull request #2118 from Kelimion/fix-2112
Fix #2112
2022-10-08 19:06:27 +02:00
Jeroen van Rijn ab7367ae47 Fix #2112 2022-10-08 19:00:05 +02:00
Jeroen van Rijn 457f509b5f Merge pull request #2117 from janivanecky/cocoa_window
Add glfw.GetCocoaWindow
2022-10-08 17:09:28 +02:00
Jan Ivanecky 7e5c063d98 Add glfw.GetCocoaWindow 2022-10-08 17:03:55 +02:00
Jeroen van Rijn dfabd0e0ad Merge pull request #2116 from janivanecky/objc_methods
Add class_getInstanceMethod, method_setImplementation bindings
2022-10-08 16:39:38 +02:00
Jan Ivanecky 141133e326 Add class_getInstanceMethod, method_setImplementation bindings 2022-10-08 16:29:49 +02:00
Lucas Perlind e188a542da llvm_backend_debug: Add debug info for soa pointer
This fixes issue #2113
2022-10-08 17:08:28 +11:00
Lucas Perlind 64f1e8b7a2 Github CI: Add test case for issue 2113 2022-10-08 17:07:29 +11:00
Jeroen van Rijn 62440df051 Merge pull request #2111 from janivanecky/ns_window_methods
Add additional NSWindow methods
2022-10-08 01:22:18 +02:00
Jan Ivanecky 5362e883f4 Add additional NSWindow methods 2022-10-08 00:47:42 +02:00
Phuk Ng Yu 8b06fd0935 os2/file_windows fix 2022-10-07 00:06:46 -07:00
hikari bb9b58b8c4 sys/windows: add some constants 2022-10-07 03:53:14 +03:00
gingerBill ee070c9bd3 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-10-04 10:18:40 +01:00
gingerBill aebafdcd08 update virtual.growing_arena_bootstrap_new 2022-10-04 10:18:32 +01:00
ftphikari 2b4fce8684 Merge branch 'odin-lang:master' into master 2022-10-04 09:10:00 +03:00
Jeroen van Rijn de8f6709f7 Disable issues tests for the moment. 2022-10-04 02:07:54 +02:00
Jeroen van Rijn 683753db96 Merge pull request #2104 from matias-eduardo/patch-3
Add a few Fiber functions to windows/kernel32.odin
2022-10-04 01:52:46 +02:00
matias d13dc7eca7 Add a few Fiber functions to kernel32.odin
This is not the complete set, but a start.
2022-10-03 11:35:27 -04:00
Jeroen van Rijn e56920e445 Merge pull request #2103 from rasa-silva/darwin_version_update
Update Darwin release map
2022-10-03 16:23:56 +02:00
Ricardo Silva 1c9aad4d7b Update Darwin release map 2022-10-03 14:49:35 +01:00
Jeroen van Rijn 79fe30321a [tests] Skip issues test on Windows for now. 2022-10-02 20:56:30 +02:00
gingerBill 35ee7f3cba Add system:legacy_stdio_definitions.lib to .odin for Windows 2022-10-02 11:58:17 +01:00
gingerBill 4c2e86b063 Merge pull request #2102 from yay/darwin-read-write
Darwin: allow reading/writing files larger than max(i32)
2022-10-02 11:51:00 +01:00
Vitalii Kravchenko d52a9b61af Fix indentation 2022-10-02 07:47:22 +01:00
Vitalii Kravchenko 8a5b39f734 Darwin: allow reading/writing files larger than max(i32) 2022-10-02 07:40:28 +01:00
hikari ce09cb0bdb sys/windows: add comctl32 2022-10-01 17:13:17 +03:00
hikari b7fd91817e Merge remote-tracking branch 'origin/master' 2022-10-01 17:12:57 +03:00
hikari a728047281 sys/windows: add a bunch of stuff 2022-10-01 17:12:23 +03:00
gingerBill 775c9648f9 Merge pull request #2099 from Skytrias/skytrias-json-unused-field
allow json struct unused fields
2022-09-30 20:46:32 +01:00
Michael Kutowski f65bdf5733 else statement to allow skipping unused struct fields 2022-09-30 19:40:41 +02:00
Jeroen van Rijn 213d930f8c Merge pull request #2096 from flplv/master
Fix llvm copy on nightly ci
2022-09-29 03:20:59 +02:00
Felipe Lavratti fae025aac8 Fix llvm copy on nightly ci 2022-09-29 01:48:40 +01:00
Jeroen van Rijn 97477ee51c Merge pull request #2093 from flplv/master
Change llvm-copy-to-zip path to use real one, instead of link
2022-09-28 17:14:35 +02:00
Felipe Lavratti 99894686cf Change llvm-copy-to-zip path to use real one, instead of link 2022-09-28 16:08:05 +01:00
Jeroen van Rijn 1162e30768 Merge pull request #2092 from Kelimion/strconv
[strconv] Add parsing of Inf & NaN
2022-09-28 16:45:27 +02:00
Jeroen van Rijn cd910b1512 [strconv] Add parsing of Inf & NaN 2022-09-28 16:41:26 +02:00
gingerBill efa86ddf46 Merge pull request #2085 from matias-eduardo/patch-2
Add WSATRY_AGAIN to windows/types.odin
2022-09-27 23:08:24 +01:00
gingerBill d8f60cd7f2 Merge pull request #2090 from ftphikari/master
sys/windows: add a couple of functions and constants, fix formatting
2022-09-27 23:08:07 +01:00
gingerBill c4d19dfa92 Use uint instead of int to improve code generation for bounds checking 2022-09-27 22:31:46 +01:00
gingerBill 35e70f4be1 Add node data for union when using intrinsics.type_convert_variants_to_pointers 2022-09-27 22:30:00 +01:00
ftphikari eb6c388f13 Merge branch 'odin-lang:master' into master 2022-09-27 11:06:05 +03:00
hikari 42144d957b Merge remote-tracking branch 'origin/master' 2022-09-27 11:05:46 +03:00
hikari d1c778680b sys/windows: add a couple of functions and constants, fix formatting 2022-09-27 11:05:01 +03:00
gingerBill 0fe006157e Remove extra pointer indirection 2022-09-27 00:18:19 +01:00
gingerBill 4d208dc092 Override lbArgKind to be indirect for #by_ptr parameters 2022-09-27 00:10:05 +01:00
matias 162e86663f Add WSATRY_AGAIN to windows/types.odin
Not sure if the intent is to only add the defines that are commonly used in this file in order to keep things lean, rather than the complete list of WSA error codes from winerror.h into winerror.odin. I can close this and redo by adding all the WSA codes into winerror.odin and deleting these instead if preferred.
2022-09-26 01:54:27 -04:00
gingerBill 83ffb68bb7 Fix typo in map_insert 2022-09-23 12:09:46 +01:00
Jeroen van Rijn 4705321988 Merge pull request #2074 from Tetralux/serial-dcb
[sys/windows] Add DCB structure, SetCommState, GetCommState
2022-09-22 17:20:54 +02:00
Tetralux 37a2356485 [sys/windows] Add DCB structure, SetCommState, GetCommState
These are the procedures for configuring a serial port.

You simply open the port with CreateFile (os.open), followed by a call to GetCommState,
setting the DCB as desired, followed by a SetCommState call.

The DCB structure uses C bitfields, so a configuration struct is provided along with a helper procedure to make it easier
to initialize in Odin code.
This makes it possible to initialize a DCB structure with one call to the helper:
```
dcb: DCB
windows.init_dcb_with_config(&dcb, {
	BaudRate = 115200,
	ByteSize = 8,
	Parity = .None,
	StopBits = .One,
})
```
(The parity and the stopbits are actually optional in this example, as their zero-values are None and One, respectively.)
2022-09-22 15:14:14 +00:00
gingerBill 5cf473b31c Fix typo 2022-09-22 15:19:24 +01:00
gingerBill a7484f16cb Merge branch 'master' of https://github.com/odin-lang/Odin 2022-09-22 15:17:42 +01:00
gingerBill 6c8aad0afb Make intrinsics.{count_ones, count_zeros, count_trailing_zeros, count_leading_zeros} work at compile time 2022-09-22 15:17:36 +01:00
gingerBill c767d55e9a Fix typo 2022-09-22 12:21:43 +01:00
gingerBill 7f601c9535 Add Allocator_Mode.Alloc_Non_Zerored 2022-09-22 12:12:57 +01:00
Jeroen van Rijn 12cc7388e7 Merge pull request #2071 from colrdavidson/fix-target-features
fix target features to make wasm intrinsics happy
2022-09-22 04:05:27 +02:00
Colin Davidson 2ff61bdfc7 fix target features to make wasm intrinsics happy 2022-09-21 18:35:56 -07:00
gingerBill eb0d7465e2 Fix libc.aligned_alloc for Windows (thanks Microsoft(!)) 2022-09-22 01:22:48 +01:00
gingerBill 07d798c61a Fix libc.aligned_alloc on Windows 2022-09-22 01:17:58 +01:00
gingerBill b426e8577b cap(Enum) (equivalent to max(Enum)-min(Enum)+1) 2022-09-22 01:09:18 +01:00
gingerBill 532133d648 Minor technical improvement 2022-09-22 00:55:28 +01:00
gingerBill c056a0d108 Add slice.enumerated_array 2022-09-22 00:52:37 +01:00
gingerBill 6fe1825db9 Improve error message for slicing an enumerated array 2022-09-22 00:47:23 +01:00
gingerBill b15968f140 Improve suggestions for certain assignments 2022-09-22 00:42:03 +01:00
gingerBill 0ddf1bf660 Minor style change 2022-09-22 00:36:31 +01:00
gingerBill dade5b5ef2 Improve error message for check_is_expressible (Cannot convert X to Y from Z) 2022-09-22 00:34:36 +01:00
gingerBill 3aea9a7c20 Improve error messages for compile time known bounds checking 2022-09-22 00:30:10 +01:00
gingerBill 0dce7769f4 Clean up private internal constant global handling 2022-09-22 00:18:03 +01:00
gingerBill 4b73438833 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-09-22 00:05:46 +01:00
gingerBill 8c3f01fbfa Correct parapoly determination of generated internal type of a map 2022-09-22 00:05:11 +01:00
Jeroen van Rijn b7abacfa7e Enable libc complex test. 2022-09-22 01:01:40 +02:00
gingerBill 3383e9c556 Merge pull request #2070 from 13419596/master
Correcting libc pow bindings
2022-09-21 23:48:25 +01:00
gingerBill 0380601bb4 Fix map_insert 2022-09-21 23:47:33 +01:00
13419596 4b4c2a2abd Correcting libc pow bindings
Adding tests that libc pow(f) functions
- have two arguments
- behave as expected for simple inputs.
2022-09-21 17:15:28 -05:00
Jeroen van Rijn b1542d4e98 Merge pull request #2065 from yay/core-os-indent-fix
Fix indent
2022-09-21 18:39:24 +02:00
Vitaly Kravchenko d469c2da48 Fix indent 2022-09-21 17:31:37 +01:00
gingerBill 29c5e390aa Merge pull request #2063 from odin-lang/map-header-changes
Map header changes
2022-09-21 16:07:36 +01:00
Jeroen van Rijn 3455e5690c [examples/all] Make OS-specific for zlib, cmark 2022-09-21 16:54:21 +02:00
Jeroen van Rijn 0ca8a5e186 Add vendor:zlib to examples/all; prefix vendor packages. 2022-09-21 16:45:01 +02:00
Jeroen van Rijn cb85d00e9e Merge pull request #2064 from awwdev/patch-2
removed do
2022-09-21 16:23:54 +02:00
André (counter) 8ce1ce85ad removed do 2022-09-21 16:03:52 +02:00
gingerBill a6d3cbe824 Correct json.unmarshal for maps 2022-09-21 13:10:06 +01:00
gingerBill 9b9aa9c353 Remove more dead code for map header stuff 2022-09-21 13:08:40 +01:00
gingerBill 831620bfc4 Remove header cache code 2022-09-21 13:06:02 +01:00
gingerBill 4f50988799 Remove debug code 2022-09-21 13:03:30 +01:00
gingerBill ff97a73152 Reduce unnecessary map gets 2022-09-21 13:03:13 +01:00
gingerBill 769d8dd038 Simplify __get_map_header stuff 2022-09-21 12:13:05 +01:00
gingerBill 1d793ea338 Split header table data and the map pointer 2022-09-21 12:09:05 +01:00
gingerBill 5337413c56 Temporary patch for lb_gen_map_header 2022-09-21 11:36:14 +01:00
gingerBill 380905618a Merge branch 'master' of https://github.com/odin-lang/Odin 2022-09-21 11:31:58 +01:00
gingerBill 3ff56e4405 Correct get_fullpath_relative to remove all trailing path separators (/ and \) 2022-09-21 11:31:52 +01:00
Jeroen van Rijn 58297774f7 Merge pull request #2061 from flplv/main
Changed nightly build for linux to include the llvm library file
2022-09-21 03:41:15 +02:00
Felipe Lavratti 5e9ff85fa8 Changed nightly build for linux to include the llvm library file 2022-09-21 00:50:34 +01:00
gingerBill eb7a9c55b0 Improve parapoly support for ^T to [^]$V and vice versa 2022-09-20 22:47:53 +01:00
Jeroen van Rijn 6157af56e9 Merge pull request #2059 from sumofat/pr_fix_stbi_darwin
Pr fix darwin libdir 2
2022-09-18 14:38:35 +02:00
ray.garner d6f84887ff Fix darwin libs for vendor stbi 2022-09-18 21:35:13 +09:00
gingerBill 729ffeee09 Begin work on core:debug/pe 2022-09-17 18:45:33 +01:00
gingerBill 0092995f9d Update .gitignore 2022-09-17 17:54:12 +01:00
gingerBill 3fb69d59bb Minor correction to __get_map_header 2022-09-17 17:48:38 +01:00
gingerBill cb207afdf3 Merge pull request #2055 from odin-lang/map-index-internal
Map Internals Improvements
2022-09-17 15:30:53 +01:00
gingerBill 756c1b7bcb Correct slice/ptr.odin calls 2022-09-17 15:12:32 +01:00
gingerBill cd484979a8 General clean up minor with rearrangements and removing unneeded procedures 2022-09-17 15:09:39 +01:00
gingerBill 9e3ea92829 Inline many calls and delete unused procedures 2022-09-17 14:59:16 +01:00
gingerBill c37de9459e Minor refactor of the dynamic_map_internal.odin stuff 2022-09-17 14:46:52 +01:00
gingerBill 4d512c2cf6 Correct lb_gen_map_header initialization 2022-09-17 13:40:29 +01:00
gingerBill 81f10f53ad Correct delete_key 2022-09-17 13:22:23 +01:00
gingerBill fbf036a654 Wrap __dynamic_map_find for certain cases 2022-09-17 13:11:29 +01:00
gingerBill 40bcfc7c8d Update json/unmarshal.odin for the new runtime.__dynamic_map_set 2022-09-17 13:05:14 +01:00
gingerBill bfe0ffd6e6 Minor clean up 2022-09-17 13:02:06 +01:00
gingerBill 8ee6bb5d4b Add contextless where possible in dynamic_map_internal.odin 2022-09-17 13:00:19 +01:00
gingerBill 0ebc2add03 Use a cache when generating the map header to minimize stack wastage 2022-09-17 12:56:03 +01:00
gingerBill 7840c1b89f Change __dynamic_map_get and __dynamic_map_set to use separate parameters rather than take a singular struct 2022-09-17 12:48:12 +01:00
gingerBill 0428d5ae2e Catch missing areas of Map_Index usage 2022-09-17 12:27:34 +01:00
gingerBill b967ae2739 Change internal map indices to use a distinct uint rather than just int 2022-09-17 12:21:23 +01:00
gingerBill c462496bd5 Merge pull request #2048 from odin-lang/pow2-map
Use pow of two capacity for hash maps to allow for `& (n-1)` instead of `% n`
2022-09-17 11:28:42 +01:00
gingerBill a903e5024c Chnage next_pow2 to ceil_to_pow2 2022-09-17 11:18:26 +01:00
gingerBill 7cce55e2fc Merge pull request #2051 from graphitemaster/dale/vendor-zlib
Vendor zlib
2022-09-17 11:17:07 +01:00
gingerBill 99a1a10286 Fixed #2044 Uninitialised constant struct member values can cause crash
Foo :: struct {
    x: i32,
    data: sa.Small_Array(10, i32),
}

defaultFoo :: Foo{
    x = 1,
    // The 'data' value is not set!
}

fmt.println(defaultFoo.data) // caused the bug
2022-09-17 11:01:56 +01:00
gingerBill 9640b49319 Fix #1435 type switch statements of empty union types 2022-09-17 10:42:54 +01:00
gingerBill 1bc0e66ed1 Improve error message for using offset_of within a struct itself of that struct 2022-09-17 10:36:49 +01:00
gingerBill 117d32dfc4 Enforce constant pointer cast on global procedure variable initialization x := proc() {} 2022-09-17 10:26:57 +01:00
gingerBill 320b84df4f Fix #2052 typo in linalg.max_single 2022-09-17 10:20:52 +01:00
gingerBill 98eaf5c6c0 Fix #2054 Differing behaviours with defer statements for single vs multiple return values caused by naïve ABI optimization 2022-09-17 10:20:04 +01:00
Jeroen van Rijn 9842019205 [examples] Add math/noise, align imports. 2022-09-15 18:01:15 +02:00
Jeroen van Rijn 479278be4e Merge pull request #2053 from z64/master
Fix -verbose-error source lines from having last char cut off with LF files
2022-09-15 16:09:15 +02:00
Zac Nowicki 4767311a22 Fix -verbose-error source lines from having last char cut off
Fixes #1226
2022-09-15 07:09:38 -04:00
gingerBill f50fc33749 Clean up of the core library to make the stream vtables not be pointers directly. 2022-09-15 10:00:50 +01:00
Jeroen van Rijn 8aba92da9b [zlib] Add statically linked x64 library. 2022-09-14 23:27:28 +02:00
Jeroen van Rijn 59f3e10f0a [zlib] Add LICENSE, update README 2022-09-14 23:08:52 +02:00
Dale Weiler 8b82bcef7d vendor zlib 2022-09-14 16:09:13 -04:00
gingerBill 1e595f2e26 Add missing import 2022-09-14 18:27:02 +01:00
gingerBill 28ad4f8623 Use json field tag for json.marshal 2022-09-14 18:21:12 +01:00
gingerBill a3c04db828 Revert "Just get the value directly and store it in another global variable"
This reverts commit 190c3ab0cd.
2022-09-14 17:57:12 +01:00
gingerBill 3ea7af4c9c Minor fix to lb_big_int_to_llvm 2022-09-14 17:51:33 +01:00
gingerBill 190c3ab0cd Just get the value directly and store it in another global variable
// global
x := &Foo{}
2022-09-14 17:50:31 +01:00
gingerBill 53c7cf895c Merge branch 'master' of https://github.com/odin-lang/Odin 2022-09-14 16:52:09 +01:00
gingerBill db1b7b2d21 Allow for ignored fields in struct for json.unmarshal 2022-09-14 16:52:01 +01:00
Jeroen van Rijn 7cd7886111 Merge pull request #2050 from ftphikari/master
sys/windows: add definitions
2022-09-14 12:36:51 +02:00
hikari 164ba944ac sys/windows: add definitions 2022-09-14 11:42:19 +03:00
Jeroen van Rijn e7fb2cf73b Merge pull request #2049 from eadesmet/master
Added support for ID3D11InfoQueue
2022-09-13 02:02:57 +02:00
eadesmet 023cc8b572 Added support for ID3D11InfoQueue 2022-09-12 18:19:12 -04:00
gingerBill 0ff5ff6ff2 Use pow of two capacity for hash maps to allow for & (n-1) instead of % n 2022-09-12 21:22:45 +01:00
gingerBill a35d6a6f8d Improve mem/virtual handling of out of memory on Windows 2022-09-12 17:06:32 +01:00
gingerBill 663b62e45f Fix ODIN_BUILD_PROJECT_NAME 2022-09-12 14:43:50 +01:00
gingerBill 6910182011 Fix debug generation for named results 2022-09-12 14:12:31 +01:00
gingerBill bba47b6f54 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-09-12 13:44:34 +01:00
gingerBill ef372bd861 Replace #optional_second with #optional_allocator_error 2022-09-12 13:08:32 +01:00
gingerBill fbbfe438dc Improve debug info to named return values 2022-09-12 13:08:05 +01:00
Jeroen van Rijn 7e495a5fe5 Merge pull request #2045 from ShimmyShaman/master
small doc fix for strings.last_index_any
2022-09-11 21:45:40 +02:00
Adam Rasburn 0f036eebc0 doc fix for strings.last_index_any 2022-09-12 07:37:15 +12:00
gingerBill e008eeac6a Simplify package io by removing different unnecessary types and calls 2022-09-11 15:42:08 +01:00
Jeroen van Rijn 25e330500f Merge pull request #2043 from Kelimion/tga_tests
Tga tests
2022-09-10 20:29:47 +02:00
Jeroen van Rijn fa20988f51 Merge branch 'master' into tga_tests 2022-09-10 20:22:49 +02:00
Jeroen van Rijn 99f4cc3006 [core:image/tga] Add tests. 2022-09-10 20:22:10 +02:00
Jeroen van Rijn a1487e4814 Merge pull request #2040 from ryancsh/master
Add windows.timeGetTime()
2022-09-10 20:16:04 +02:00
Ryan Chan 183a02c584 Add windows.timeGetTime()
Here is the windows documentation for it: https://docs.microsoft.com/en-us/windows/win32/api/timeapi/nf-timeapi-timegettime
2022-09-10 16:54:34 +04:00
gingerBill 913e8b2e02 Unify debug parameter code 2022-09-10 10:03:51 +01:00
gingerBill 5800e085e8 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-09-09 23:07:16 +01:00
gingerBill 623d687192 Split debug info generation for direct and indirect parameters 2022-09-09 23:07:09 +01:00
gingerBill fcb668663b Merge pull request #2037 from odin-lang/revert-2026-revert-init-window-workaround
Revert "Remove the workaround for NSWindow initWithContentFrame"
2022-09-09 10:47:25 +01:00
gingerBill ad98efe1fd Revert "Remove the workaround for NSWindow initWithContentFrame" 2022-09-09 10:47:02 +01:00
gingerBill 3fae8b49db Fix pointer cast of constant procedure values 2022-09-08 17:27:13 +01:00
gingerBill 8fb9db3deb Revert build.bat 2022-09-08 17:18:54 +01:00
gingerBill 0859ccc5c0 Disable buggy escape analysis 2022-09-08 17:13:37 +01:00
gingerBill 0c9ddd51a4 Keep -vet happy 2022-09-08 16:55:40 +01:00
gingerBill f77709e67e Add intrinsics.type_convert_variants_to_pointers and reflect.get_union_as_ptr_variants 2022-09-08 16:52:51 +01:00
gingerBill 81e3b64ecd Add ODIN_BUILD_PROJECT_NAME and //+build-project-name
This allows for condition inclusion of files, similar to `+build` or `ODIN_BUILD`, but relies on the directory name of the project to be the same as specified

Example:

    odin build foo/bar/baz

    ODIN_BUILD_PROJECT_NAME == "baz"

    //+build_project_name baz
2022-09-08 16:35:25 +01:00
gingerBill 39728b8bfb Add the builtin procedures abs, clamp min, max to core:math as aliases 2022-09-08 15:08:53 +01:00
gingerBill 3b5998af12 Fix typo for pow in runtime.js 2022-09-08 14:48:37 +01:00
gingerBill eea19f8112 Merge pull request #2034 from odin-lang/debug-improvements
Debug symbol improvements for procedure parameters
2022-09-08 11:10:43 +01:00
gingerBill 268fb22bca Use llvm.dbg.declare for procedure parameters rather than llvm.dbg.value 2022-09-07 23:47:33 +01:00
Jeroen van Rijn 37e23a19b5 Merge pull request #2033 from thePHTest/poly-proc
fix sort_by_indices_allocate
2022-09-07 19:58:42 +02:00
Phil 7d55bfc120 fix sort_by_indices_allocate 2022-09-07 10:53:56 -07:00
gingerBill ab1741ab38 Add Windows 32-bit build system error 2022-09-07 12:27:15 +01:00
gingerBill af76d26771 Simplify win32 resource file linking 2022-09-07 11:22:43 +01:00
gingerBill d2097e9fdd Add inline debug generation for assembly target flag (#2028) 2022-09-07 11:17:33 +01:00
gingerBill d325c36eb8 Fix procedure pointer cast 2022-09-07 11:14:59 +01:00
gingerBill 79b55d5e2b Merge branch 'master' of https://github.com/odin-lang/Odin 2022-09-07 11:09:32 +01:00
gingerBill 0c9aaed9f7 Fix #2029 Eumerated array of procs literal crashes the compiler with an llvm error 2022-09-07 11:09:22 +01:00
gingerBill 82d5f48fa7 Merge pull request #2032 from rasa-silva/fix_strings_justify
Fix `strings.*_justify` to take into account the string length
2022-09-07 10:49:09 +01:00
Ricardo Silva 2239e43faf Fix strings.*_justify 2022-09-07 08:56:23 +01:00
Jeroen van Rijn 70b0ade8c3 Merge pull request #2027 from thePHTest/poly-proc
fix polymorphic proc parameters error handling
2022-09-06 20:33:47 +02:00
Phil 86b6d01242 fix polymorphic proc parameters error handling 2022-09-06 11:04:18 -07:00
gingerBill 826a3b3012 Begin work in helgrind calls 2022-09-06 13:50:23 +01:00
gingerBill 35d622c131 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-09-06 12:57:28 +01:00
gingerBill 4bdd2ff93c Make valgrind calls a no-op on non-supported platforms rather than print an error 2022-09-06 12:57:22 +01:00
gingerBill 6fffed179b Merge pull request #2026 from hasenj/revert-init-window-workaround
Remove the workaround for NSWindow initWithContentFrame
2022-09-06 11:21:47 +01:00
Hasen Judy e6b91d3d7c Remove the workaround for NSWindow initWithContentFrame
Reverts #1841

Resolves #1825
2022-09-06 16:56:17 +09:00
Jeroen van Rijn 99a7bf9faa Merge pull request #2022 from Kelimion/sysinfo
Add `core:sys/info` system information querying package.
2022-09-06 00:34:11 +02:00
Jeroen van Rijn 44eb478437 Merge pull request #2023 from Kelimion/help-verb
Help verb
2022-09-05 22:35:13 +02:00
Jeroen van Rijn fc2cd3e1d5 Add help verb, e.g. odin help build. 2022-09-05 22:28:16 +02:00
Jeroen van Rijn a5a9347308 Improve error message when you use -file as the verb. 2022-09-05 21:59:56 +02:00
Jeroen van Rijn b6ed117726 [sys/info] Indentation nitpick. 2022-09-05 19:18:18 +02:00
Jeroen van Rijn 4b23decb08 Silence vet some more. 2022-09-05 19:04:18 +02:00
Jeroen van Rijn a70ea6579d Silence -vet. 2022-09-05 18:55:33 +02:00
Jeroen van Rijn cade30b117 [sys/info] Add to examples\all 2022-09-05 18:48:50 +02:00
Jeroen van Rijn 1ca641f718 [sys/info] Add doc.odin with explanation. 2022-09-05 18:39:57 +02:00
Jeroen van Rijn 6222e7be78 Merge branch 'master' into sysinfo 2022-09-05 18:28:18 +02:00
Jeroen van Rijn c7deff4d2e Merge pull request #2021 from Kelimion/refactor_odin_report
Refactor odin report
2022-09-05 18:13:44 +02:00
Jeroen van Rijn 590615ba52 [odin report] Improve macOS detection. 2022-09-05 18:06:34 +02:00
gingerBill b1dafcfe6d Fix #1992 size_of a relative slice crashes the compiler 2022-09-05 16:40:57 +01:00
gingerBill 4998cf80c1 Fix #2017 mismatched types in binary matrix expression for flt * (mat * vec) 2022-09-05 16:35:56 +01:00
gingerBill 37e23133e9 Fix #2018 type assertion on untyped nil within a ternary if expression 2022-09-05 16:06:40 +01:00
gingerBill 91fd9c1ef2 Fix #2020 transmute from array to #simd code generation 2022-09-05 16:04:20 +01:00
gingerBill 12687a63f4 Merge pull request #1951 from IanLilleyT/wstring_allocation
smaller allocation for non-null-terminated wstring
2022-09-05 15:48:43 +01:00
gingerBill d699d872d9 Merge pull request #2019 from jaspergeer/fix-ternary-if-type-operands
fix panic when typeid used as operand for ternary if expression
2022-09-05 15:47:10 +01:00
Jeroen van Rijn fb2cbe471b odin report: Add FreeBSD OS & RAM detection. 2022-09-05 15:00:29 +02:00
JasperGeer 17894add95 Remove redundant code 2022-09-04 16:37:40 -04:00
JasperGeer 23d93f6846 Remove unnecessary or 2022-09-04 16:17:29 -04:00
JasperGeer 2e3dd8dd0b Err on types passed as operands to ternary if expressions 2022-09-04 15:31:05 -04:00
Jeroen van Rijn 426f02906b [sys/info] Add OpenBSD detection support. 2022-09-04 20:37:38 +02:00
Jeroen van Rijn 2d12ba3ac0 Merge branch 'master' into sysinfo 2022-09-04 19:09:34 +02:00
Jeroen van Rijn 21335e6459 Merge branch 'master' into sysinfo 2022-09-04 19:08:31 +02:00
Jeroen van Rijn 8421cb6d21 Merge pull request #2016 from Kelimion/openbsd_path_fix
Allow Odin to find itself if it's in PATH on OpenBSD, because reasons.
2022-09-04 17:09:03 +02:00
Jeroen van Rijn cac72a9423 Allow Odin to find itself if it's in PATH on OpenBSD, because reasons. 2022-09-04 19:01:32 +02:00
Jeroen van Rijn 9266b81aff Merge pull request #2015 from Kelimion/futex_macos
Use __ulock_wait macOS; fix #1959
2022-09-04 13:24:05 +02:00
Jeroen van Rijn 52475b1761 Use __ulock_wait macOS; fix #1959 2022-09-04 13:11:06 +02:00
Jeroen van Rijn 2f6347b924 [sys/info] Add detection for Tiger, Leopard, Snow Leopard, Lion, Mountain Lion, Mavericks, Yosemite 2022-09-03 20:49:19 +02:00
Jeroen van Rijn eb5456f9c7 Merge pull request #2013 from kevinsjoberg/fix-odinfmt-build-errors
Fix odinfmt build errors
2022-09-03 20:11:40 +02:00
Kevin Sjöberg f914fd0219 maybe property does not exist anymore
In commit 3ec70c5517, the `#maybe`
functionality was merged with the standard 'union' functionality, and
thus, the `maybe` property was removed.
2022-09-03 20:03:02 +02:00
Kevin Sjöberg c94ca4c0cb Use Megabyte constant
In commit 698fcb7813, the size procedures
were replaced with constants instead.
2022-09-03 19:52:02 +02:00
Jeroen van Rijn 31a192454c Merge pull request #2012 from Kelimion/fix_1999
Fix #1999
2022-09-03 19:16:30 +02:00
Jeroen van Rijn 4b2246ba9f Fix #1999
Tested on Windows and Linux.
2022-09-03 18:47:05 +02:00
Jeroen van Rijn 0ffffb12da Merge branch 'master' into sysinfo 2022-09-03 17:00:14 +02:00
Jeroen van Rijn 4c857bf031 FreeBSD: Autodetect LLVM version. 2022-09-03 16:59:58 +02:00
Jeroen van Rijn 3f3f4fafff [sys/info] Move FreeBSD sysctl to sys/unix. 2022-09-03 16:53:03 +02:00
Jeroen van Rijn 4367ae4acf Merge branch 'sysinfo' of github.com:Kelimion/Odin into sysinfo 2022-09-03 16:30:44 +02:00
Jeroen van Rijn 4eafb0ce7f [sys/info] Move macOS sysctl to sys/unix. 2022-09-03 16:30:31 +02:00
Jeroen van Rijn 7a4891b6b9 [sys/info] Grab FreeBSD kernel info using sysctl. 2022-09-03 15:26:28 +02:00
Jeroen van Rijn 0171c276f0 [sys/info] Support FreeBSD 13 2022-09-03 02:33:36 +02:00
Jeroen van Rijn 0743dd195d [sys/info] Add detection for El Capitan, Sierra, High Sierra, Mojave 2022-09-02 22:46:24 +02:00
Jeroen van Rijn d1a204a784 [sys/info] Add detection for Catalina, Big Sur, Monterey. 2022-09-02 21:15:34 +02:00
gingerBill c2809c2948 Improve basic escape analysis 2022-09-02 16:23:16 +01:00
Jeroen van Rijn 99e5a14703 Merge pull request #2010 from jockus/OpenGL-GL_DEBUG
Add GL_DEBUG config that falls back to ODIN_DEBUG to preserve previou…
2022-09-02 15:27:15 +02:00
Joakim Hentula 0efc79bcb9 Add GL_DEBUG config that falls back to ODIN_DEBUG to preserve previous behaviour, but allows debug builds without OpenGL debug features 2022-09-02 13:30:45 +01:00
Jeroen van Rijn 57dea0e4d8 Merge pull request #2009 from rasa-silva/fix_path_clone_macos
Fix allocation on darwin `absolute_path_from_handle`
2022-09-02 12:40:14 +02:00
Ricardo Silva 706d0c3a91 Fix allocation on darwin absolute_path_from_handle 2022-09-02 11:30:32 +01:00
Jeroen van Rijn 1637de3ebb [sys/info] Parse xnu kernel version 2022-09-02 04:11:02 +02:00
Jeroen van Rijn 45691a4622 [sys/info] Add sysctl MIBs for MacOS. 2022-09-02 02:14:48 +02:00
Jeroen van Rijn 9e47c72b98 [sys/info] Better sysctl wrapper 2022-09-02 01:45:04 +02:00
Jeroen van Rijn f5d13dc568 [sys/info] Add MacOS memory size 2022-09-02 01:26:58 +02:00
Jeroen van Rijn a36c1cd54a Merge branch 'master' into sysinfo 2022-09-02 00:35:06 +02:00
gingerBill 74458ab096 Merge pull request #1989 from Kelimion/cmark
Add CMark bindings
2022-09-01 23:02:30 +01:00
Jeroen van Rijn c39b1a31db vendor:cmark -> vendor:commonmark 2022-09-01 23:44:38 +02:00
Jeroen van Rijn 635c7fa153 Merge branch 'master' into cmark 2022-09-01 23:42:15 +02:00
Jeroen van Rijn b7ac0a9e8d Merge pull request #2006 from thePHTest/sort_with_indices
fix sort_by_with_indices for zero and one length slices
2022-09-01 22:21:44 +02:00
Phil 3f3ae4b2b6 fix sort_by_with_indices for zero and one length slices: 2022-09-01 13:14:10 -07:00
Jeroen van Rijn c2423dc07f Merge pull request #2005 from thePHTest/sort_with_indices
have sort_with_indices allocate. Add a couple convenience procs for using the indices result to sort other slices.
2022-09-01 21:42:16 +02:00
Phil 1296630160 cleanup tests 2022-09-01 12:34:08 -07:00
Phil 63eec25044 add sort_by_indices overload and test 2022-09-01 12:32:33 -07:00
Phil 7a9b0731cf add tests for sort_by_indices 2022-09-01 12:13:15 -07:00
Phil d45661c405 cleanup slice sorting with indices changes 2022-09-01 11:51:45 -07:00
Phil 002bec256a have sort_with_indices allocate. Add a couple convenience procs for using the indices result to sort other slices. 2022-09-01 11:46:59 -07:00
Jeroen van Rijn 01e8668357 Merge branch 'master' into sysinfo 2022-09-01 18:30:26 +02:00
Jeroen van Rijn 000861cba8 Merge pull request #2003 from Kelimion/tests
Add tests for `slice.sort_with_indices`
2022-09-01 18:19:47 +02:00
Jeroen van Rijn 36473b2774 Add test for core:slice. 2022-09-01 18:04:48 +02:00
gingerBill 4188f50105 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-09-01 16:33:50 +01:00
gingerBill 3e3b9ae2df Fix #1994 Returning to err: Maybe(Error) raises compiler assert 2022-09-01 16:33:44 +01:00
gingerBill e89f0de232 Merge pull request #1997 from thePHTest/sort_with_indices
add sort_with_indices family of procs
2022-09-01 16:27:00 +01:00
gingerBill 4858e16a11 Merge pull request #1976 from matias-eduardo/patch-2
Add Extended Window Styles (WS_EX)
2022-09-01 16:26:51 +01:00
gingerBill 902a6db0e1 Fix #2000 - allow #soa array iteration by pointer 2022-09-01 16:15:09 +01:00
gingerBill 19ae6122c7 Fix #2002 (allow array *= matrix) 2022-09-01 16:11:03 +01:00
gingerBill b82b91ea08 Fix #1974 by erring on untyped parameters to intrinsics.objc_send 2022-09-01 15:15:51 +01:00
gingerBill 636f0d7063 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-09-01 15:11:58 +01:00
gingerBill ed73441a4c Fix code generation related to Objective-C related x->y() calls 2022-09-01 15:11:53 +01:00
Jeroen van Rijn 0f3cebd2b7 [sys/info] Retrieve GPU info on Windows. 2022-09-01 16:05:49 +02:00
Jeroen van Rijn 4c2be6cd49 Merge pull request #2001 from Lperlind/staging/add-window-bindings
Kernel32: Add more window bindings and improve consistency
2022-09-01 15:57:58 +02:00
Lucas Perlind f3f51bd643 Kernel32: Add more window bindings and improve consistency 2022-09-01 22:57:27 +10:00
Jeroen van Rijn 7479ac48e8 [sys/info] Parse kernel/distro info. 2022-09-01 02:06:05 +02:00
Jeroen van Rijn d5f94d73ad [sys/info] Initial version. 2022-09-01 00:43:47 +02:00
Jeroen van Rijn 4c5672119a Merge pull request #1998 from thePHTest/ease_fix
fix ease.odin compile error from missing comma
2022-09-01 00:14:22 +02:00
Phil 8482f943ea fix ease.odin compile error from missing comma 2022-08-31 14:14:06 -07:00
Phil 15aaf7dfa0 add sort_with_indices family of procs 2022-08-31 14:06:21 -07:00
Jeroen van Rijn 768abf83f6 Merge pull request #1993 from SyndaKitty/master
Fix for SDL `GetPreferredLocales`
2022-08-31 14:09:35 +02:00
gingerBill ca76d53452 Fix more typos 2022-08-31 11:07:31 +01:00
gingerBill b0904d6598 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-08-31 11:02:52 +01:00
gingerBill b0a09f7b9e Fix typo 2022-08-31 11:02:36 +01:00
SyndaKai eb4891bcc8 Fix for SDL GetPreferredLocales 2022-08-31 04:28:46 -04:00
Jeroen van Rijn 803fd8f037 Wrap CMark allocator as Odin allocator
```odin
	// Smaller allocation to larger allocation resize
	{
		// Allocated on CMark's allocator
		foo := make([dynamic]int, 13)

		for i in 0..<13 {
			foo[i] = i
		}
		fmt.println("Before resize:", foo)

		resize(&foo, 42)
		fmt.println("After resize:", foo)

		delete(foo)
	}
```
2022-08-30 16:35:18 +02:00
Jeroen van Rijn 67bdb5b1a3 [cmark] Add static library for Linux
Built on Ubuntu 20.04.3 LTS.

Remove Odin allocator wrapper.
2022-08-30 16:02:40 +02:00
Jeroen van Rijn acc635b535 [cmark] Move wrapped allocator next to get_default_allocator 2022-08-30 14:56:10 +02:00
Jeroen van Rijn 4e8ce87792 [cmark] Allow wrapping context.allocator 2022-08-30 14:53:48 +02:00
Jeroen van Rijn 2c8daa25dc [cmark] Add wrappers. 2022-08-30 13:55:53 +02:00
Jeroen van Rijn 054ee0a8b5 [cmark] Change to static library 2022-08-30 13:32:07 +02:00
Jeroen van Rijn d0cadaf1a6 Add CMark bindings 2022-08-30 00:54:12 +02:00
Jeroen van Rijn 317db2758a Revert "Fix #1985"
This reverts commit 25102d4792.
2022-08-29 14:50:18 +02:00
Jeroen van Rijn 25102d4792 Fix #1985 2022-08-29 14:47:00 +02:00
gingerBill d39f1c461e Merge pull request #1988 from colrdavidson/queue_peek
Add peek_front and peek_back
2022-08-29 12:02:17 +01:00
Colin Davidson 7a6fc3a93b Add bounds check for peeks 2022-08-29 02:03:12 -07:00
Colin Davidson 83c002c197 add peeks 2022-08-29 01:53:40 -07:00
gingerBill fc47b5dee0 Merge pull request #1987 from colrdavidson/more_queue
Add more queue helpers
2022-08-29 09:38:53 +01:00
Colin Davidson 6c2e0b09ba Add more queue helpers 2022-08-29 00:43:35 -07:00
Jeroen van Rijn 3d4698debe [TGA] Add B&W and RLE color-mapped. 2022-08-29 00:29:50 +02:00
Jeroen van Rijn 4a25cfb27c Merge pull request #1984 from Kelimion/tga
TGA improvements
2022-08-28 21:58:20 +02:00
Jeroen van Rijn 294bd6a446 [TGA] Add B5G5R5 15- and 16-bit support. 2022-08-28 21:48:51 +02:00
Jeroen van Rijn d0109db23b [TGA] Add support for Top-Right and Bottom-Right origins. 2022-08-28 19:41:42 +02:00
Jeroen van Rijn ee3ee66aae Merge pull request #1981 from benoitjacquier/master
TGA loader
2022-08-28 18:33:20 +02:00
Jeroen van Rijn f74e281efa Various changes to TGA reader
- Style changes
- Change ptr usage to slice indexing
- Add TGA Footer

Also, add `peek_data` with offset to `compress`.
2022-08-28 18:25:07 +02:00
Jeroen van Rijn c0cd02883f Merge pull request #1982 from Lperlind/staging/raw_windows_input
Add much of Win32's Raw Input API
2022-08-28 12:29:19 +02:00
Lucas Perlind d9adb0fd6b Add much of Win32's Raw Input API 2022-08-28 16:30:55 +10:00
Benoit Jacquier 6363013dd8 style fix 2022-08-27 19:45:14 +02:00
Benoit Jacquier 934131abf8 Add RLE supports for TGA loader 2022-08-27 19:30:34 +02:00
Benoit Jacquier 4e5337412a Merge remote-tracking branch 'origin/master' 2022-08-27 16:22:37 +02:00
Benoit Jacquier 00f2e911a7 Add support for basic TGA loading 2022-08-27 16:07:21 +02:00
gingerBill c82d7d3d87 Merge pull request #1979 from Despacito696969/master
Fixed marshal_to_writer not supporting i128
2022-08-27 00:58:54 +01:00
Despacito696969 ecfea027a0 Fixed marshal_to_writer not supporting i128
Previously json.marshal(i128(696969)) would print 0 as there was no `u = i128(i)` initialization.
2022-08-26 23:49:33 +02:00
gingerBill 96be494730 Fix append_nothing 2022-08-26 22:21:19 +01:00
gingerBill 12c8db927b Remove direct core:mem dependency in core:reflect 2022-08-26 16:46:19 +01:00
gingerBill 027ea587fc Unify mem and runtime logic 2022-08-26 16:45:40 +01:00
gingerBill 026900c7f0 Add optional n parameter to strconv.parse_* procedures to state how many bytes could be read 2022-08-26 16:31:42 +01:00
gingerBill ffa87f55c4 Add a return value to append that states the number of elements that were returned 2022-08-26 16:20:47 +01:00
gingerBill c9eed04b51 Add comment regarding the layout of a map to explain how it is iterated 2022-08-26 16:19:48 +01:00
gingerBill b50b6b9f33 Add reflect.get_union_variant 2022-08-26 16:19:16 +01:00
gingerBill 8fd5bef0bd Fix #1977 2022-08-26 12:14:04 +01:00
gingerBill d6b49994a2 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-08-26 12:11:34 +01:00
gingerBill 776927709b Check for using variables 2022-08-26 12:11:27 +01:00
matias 96e033b22c Add Extended Window Styles (WS_EX)
Featuring frequently used styles such as: `WS_EX_APPWINDOW`, `WS_EX_NOREDIRECTIONBITMAP`, `WS_EX_ACCEPTFILES`, `WS_EX_TOOLWINDOW`, `WS_EX_TOPMOST`, `WS_EX_NOACTIVATE`, `WS_EX_LAYERED`, and more.
2022-08-25 21:12:45 -04:00
Jeroen van Rijn 3469178dc1 Fix #1973. 2022-08-25 13:31:45 +02:00
gingerBill af1b3b6368 Correct check_expr_is_stack_variable 2022-08-24 16:03:04 +01:00
gingerBill d56789e5a7 Add very basic escape analysis on return values 2022-08-24 15:58:20 +01:00
gingerBill aeacf3a9d8 Correct max alignment handling throughout the llvm backend 2022-08-24 13:07:41 +01:00
gingerBill 4ba486baa2 Add extra max alignment parameter for metrics (specifically for SIMD) 2022-08-24 12:58:16 +01:00
gingerBill f1ffd90294 Fix #1966 2022-08-24 12:52:57 +01:00
gingerBill 777aa8b118 Merge pull request #1955 from jaspergeer/fix-endian-type-conversion
fix #1759 endian float type conversion errors
2022-08-24 12:49:57 +01:00
gingerBill cb9e16f4df Correct syscalls for linux_i386 2022-08-24 12:37:56 +01:00
gingerBill 2908923db9 Fix #1972 2022-08-24 12:18:42 +01:00
Jeroen van Rijn 8c1dfabb6b Fix append for size_of(E) == 0 2022-08-23 16:00:14 +02:00
gingerBill 7fe36de069 Correct Try SRWLock related procedures to return BOOLEAN rather than BOOL 2022-08-22 22:24:51 +01:00
Jeroen van Rijn 27d556735a Merge pull request #1969 from ashemedai/bug-1968-bsd-headers
fix: Expand OpenBSD include for wait.h to all Unix
2022-08-22 13:50:40 +02:00
Jeroen Ruigrok van der Werven b70d211f21 fix: Expand OpenBSD include for wait.h to all Unix
closes: #1968
2022-08-22 11:15:53 +02:00
gingerBill b3e3b6c656 Fix #1965 2022-08-20 11:17:47 +01:00
gingerBill 1734286252 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-08-19 16:57:44 +01:00
gingerBill c8c076f970 Fix #1963 2022-08-19 16:57:36 +01:00
Jeroen van Rijn e40b3ad338 Remove unused n from PQ; add reflect.is_bit_set 2022-08-18 18:00:25 +02:00
gingerBill afec321db2 Add core:sys/valgrind package for valgrind, memcheck, and callgrind 2022-08-17 16:09:03 +01:00
gingerBill 6e9f9e6f3c Fix typo 2022-08-17 15:57:56 +01:00
gingerBill f504b200a9 Improve unreachable generation by putting a trap before it 2022-08-17 15:54:45 +01:00
gingerBill 82e840a0ca EXPERIMENTAL intrinsics.valgrind_client_request 2022-08-17 13:52:13 +01:00
gingerBill 82765ca96e Fix RtlWaitOnAddress behaviour with SetLastError(RtlNtStatusToDosError(status)) if an error occurred 2022-08-17 13:12:45 +01:00
Jasper Geer 5387ec5f29 Remove erroneous byte swap 2022-08-16 19:22:52 -07:00
gingerBill f2908cbc5a Remove debug crap with inlining 2022-08-16 16:36:13 +01:00
gingerBill 5337b0b471 Revert "Remove debug message"
This reverts commit 22d16c20f8.

Revert "Correct global constant procedure initialization"

This reverts commit 697c839c84.

Revert "Clean up how procedures are typed in LLVM's dumb type system"

This reverts commit de8bd88d2a.
2022-08-16 16:16:36 +01:00
gingerBill e51afc3509 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-08-16 12:02:22 +01:00
gingerBill 2c004dbcc9 Improve matrix conversion rules 2022-08-16 12:02:14 +01:00
gingerBill e128ed7d26 Merge pull request #1953 from thePHTest/master
Change math/linalg/general.odin vector_length and vector_normalize to only accept vectors of float types rather than any numeric type
2022-08-16 01:17:39 +01:00
Phil 9064ebfe97 Change math/linalg/general.odin vector_length and vector_normalize to only accept vectors of float types rather than any numeric type 2022-08-15 16:45:54 -07:00
gingerBill 4f7bbe0e4a Merge pull request #1927 from IanLilleyT/debug_symbols_for_range_interval
Debug symbols for range-based for loop over number range
2022-08-15 16:56:01 +01:00
gingerBill 208f168564 Correct assignment 2022-08-15 16:31:59 +01:00
gingerBill 737bccbd5e Add math.divmod and math.floor_divmod 2022-08-15 16:31:43 +01:00
Ian Lilley 87094ef96c smaller allocation for no
n-null-terminated wstring
2022-08-15 09:17:10 -04:00
Ian Lilley f5431a046d using correct type for val1 2022-08-15 08:08:49 -04:00
gingerBill 5a9422b6bc Merge branch 'master' of https://github.com/odin-lang/Odin 2022-08-15 10:27:57 +01:00
gingerBill d30198c99a Merge pull request #1944 from odin-lang/load-improvements
Improvements to `#load`
2022-08-15 10:27:53 +01:00
gingerBill 0c8d59dd20 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-08-15 10:24:23 +01:00
gingerBill a460d140fe Merge pull request #1889 from thePHTest/master
fix glfw/native.odin foreign lib import
2022-08-15 10:24:19 +01:00
gingerBill 881d18ee88 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-08-15 10:23:56 +01:00
gingerBill d73a4aa34b Merge pull request #1938 from Skytrias/pretty-json-2
add pretty json output in marshal based on spec + options
2022-08-15 10:23:50 +01:00
gingerBill 5c298c1501 Minor text alignment 2022-08-15 10:22:32 +01:00
gingerBill a83ca2120e Remove unused import 2022-08-14 21:50:41 +01:00
gingerBill 81799f7f78 Fix #1950 2022-08-14 21:50:21 +01:00
Jeroen van Rijn 7973f7e750 Merge pull request #1949 from matias-eduardo/patch-1
Typo: `GetWindowLongW` to `SetWindowLongW`
2022-08-14 13:25:23 +02:00
matias 3dc62a67e0 Typo: "Get" -> "Set" 2022-08-14 07:16:54 -04:00
Jeroen van Rijn 081e36c909 Add additional mouse buttons to Raylib bindings. 2022-08-13 15:34:52 +02:00
Jeroen van Rijn 3a1d364f59 Merge pull request #1929 from fabiansperber/add-windows-definitions
Add windows & wgl definitions
2022-08-12 22:58:18 +02:00
Fabian Sperber e50648279d Add some wgl extensions
- fix upper case for wglSwapIntervalEXT to be the same as the exported name
2022-08-12 21:56:55 +02:00
Fabian Sperber 929af320da Add more windows bindings 2022-08-12 21:56:54 +02:00
gingerBill 8e7c7eeeba Fix lb_emit_ptr_offset 2022-08-12 13:48:10 +01:00
Michael Kutowski b739044e69 Update marshal.odin 2022-08-12 13:59:11 +02:00
Michael Kutowski 9e0107c9fc add new soa type, my bad wasnt on master 2022-08-12 13:50:19 +02:00
Michael Kutowski 107e016508 switch styling and opt.spaces max 2022-08-12 13:42:19 +02:00
gingerBill 22d16c20f8 Remove debug message 2022-08-12 12:29:32 +01:00
gingerBill 697c839c84 Correct global constant procedure initialization 2022-08-12 12:29:11 +01:00
gingerBill de8bd88d2a Clean up how procedures are typed in LLVM's dumb type system 2022-08-12 11:15:12 +01:00
Ian Lilley 595efba747 removed unnecessary ternary 2022-08-11 11:43:19 -04:00
gingerBill c041d15569 Merge pull request #1928 from IanLilleyT/logger_extra_space
Removed extra space from file_console_logger
2022-08-11 16:18:46 +01:00
gingerBill 57b20e634b Merge branch 'master' into pretty-json-2 2022-08-11 16:14:27 +01:00
gingerBill e285796fc1 Merge pull request #1940 from Lperlind/staging/d3d11-idebug
Add ID3D11Debug interface to d3d11 package
2022-08-11 16:13:09 +01:00
gingerBill a19494d3a7 Minor refactoring of lb_build_addr 2022-08-11 16:12:07 +01:00
gingerBill d2a362fd52 Clean up compound literal backend stuff some more 2022-08-11 16:07:55 +01:00
gingerBill 0f3562ef02 Improve compound literal generation for array-like types 2022-08-11 16:01:46 +01:00
gingerBill 03f683f9e7 Improve emit store for large constants 2022-08-11 15:19:27 +01:00
gingerBill cecadce86d Allow for chaining of '#load(path) or_else #load(path)' 2022-08-11 14:42:29 +01:00
gingerBill a7c3906003 #load(path, type)
where `type` can be `string` or `[]T` where `T` is a simple type
2022-08-11 14:30:14 +01:00
gingerBill 70dc0c15fd Improve type hint for #load to allow for string types 2022-08-11 13:43:35 +01:00
gingerBill 9eeed9d5bd Simplify #load_or for the time being 2022-08-11 13:35:24 +01:00
gingerBill a054c2934e Cache #load data and hashes 2022-08-11 13:32:45 +01:00
gingerBill 38102f14c1 Add #load(path) or_else default in favour of #load_or(path, default) 2022-08-11 13:01:54 +01:00
gingerBill 0997df4fcf Move builtin directives to a separate procedure 2022-08-11 12:39:05 +01:00
gingerBill a5a56e061c Fix to png example.odin 2022-08-11 11:10:05 +01:00
gingerBill 8b007ad55a Merge pull request #1943 from jaspergeer/fix-untyped-const-shift
fix #1840 invalid LLVM code gen for arithmetics between f32 and shifted untyped integer
2022-08-11 10:58:58 +01:00
Jasper Yujin Geer 57dd5ec4db Added back missing return statement 2022-08-10 18:25:29 -07:00
Jasper Yujin Geer 5b621d5be1 More accurate error message 2022-08-10 18:07:49 -07:00
Jasper Yujin Geer 7aee762f3a Throw error when untyped shift expressions have non-integral type hints 2022-08-10 17:39:21 -07:00
Jeroen van Rijn 4ee50c5a35 Merge pull request #1941 from jockus/fix-rc-missing-extension
Do not remove .rc extension from resource path to prevent expansion t…
2022-08-10 15:22:09 +02:00
Joakim Hentula 28f440dd9e Do not remove .rc extension from resource path to prevent expansion to full path assuming it's a directory if a folder with the same name exists in the same folder as the resource file 2022-08-10 14:03:04 +01:00
Lucas Perlind 43b78e51a4 Add ID3D11Debug interface to d3d11 package 2022-08-10 22:28:24 +10:00
gingerBill 84f9fb706b General clean up of LLVM*GEP2 code 2022-08-10 11:36:25 +01:00
gingerBill 812823cad8 Wrap all LLVMGetElementType uses 2022-08-09 21:17:32 +01:00
gingerBill 0655260378 Comment out a bit of code in lb_is_const_or_global 2022-08-09 21:13:52 +01:00
gingerBill cfc3723879 Remove other uses of LLVMGetElementType on pointer types 2022-08-09 21:12:31 +01:00
gingerBill 4c3281b3f2 Disallow Early CSE on -debug builds 2022-08-09 18:09:26 +01:00
gingerBill ff94c605e0 Minor change to lb_emit_store for storing nil to procedure variables 2022-08-09 18:08:30 +01:00
gingerBill cb0a59bb2c Eliminate use of LLVMGetElementType for pointers 2022-08-09 15:36:18 +01:00
gingerBill 076700bd22 Merge pull request #1933 from lerno/reduce_reliance_on_ptr_type
Removed use of deprecated functions. Cleaned up most deprecated use o…
2022-08-09 15:18:09 +01:00
Jeroen van Rijn bcccc8338f Merge pull request #1937 from IanLilleyT/rc_fix
Find rc.exe in Windows SDK
2022-08-09 16:03:17 +02:00
Michael Kutowski 425dec8bb8 add uint as hex option 2022-08-08 18:28:28 +02:00
gingerBill 838554460b Add basic "lock" around Log_Allocator to minimize errors with allocation logging loops 2022-08-08 15:25:11 +01:00
gingerBill 659c3c528d Update delete to pass size in bytes to free when possible 2022-08-08 15:16:18 +01:00
gingerBill 60aeab3c38 Update fmt.odin 2022-08-08 15:07:19 +01:00
gingerBill 5e3cf45df3 Add #soa pointer type to aid with refactoring to #soa data types
a: #soa[16]Foo
p := &a[6]
#assert(type_of(p) == #soa^#soa[16]Foo)
p^.x = 123
p.x = 123
2022-08-08 15:07:00 +01:00
gingerBill 4633591918 Remove unnecessary pointer 2022-08-08 14:28:36 +01:00
gingerBill 0e6a8b7c72 Make Growing_Arena reserve memory first and then commit as needed
It just committed all at once to begin with
2022-08-08 12:43:18 +01:00
gingerBill 147848ca20 Clean up naming conventions 2022-08-08 12:30:58 +01:00
gingerBill cde002c579 Fix i18n 2022-08-08 12:27:23 +01:00
gingerBill f23d93ba89 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-08-08 12:23:48 +01:00
gingerBill c97a8418dc Clean-up and unification for the allocation procedures 2022-08-08 12:23:19 +01:00
gingerBill 4aca9372a6 Improve resize call 2022-08-08 12:11:30 +01:00
gingerBill 4912ecc3ea Add log.Log_Allocator 2022-08-08 11:57:51 +01:00
Ian Lilley c1c8ceafc2 find windows sdk bin path for rc.exe 2022-08-07 17:52:29 -04:00
Christoffer Lerno 9c0a3b6c60 Removed use of deprecated functions. Cleaned up most deprecated use of LLVMGetElementType. 2022-08-07 19:26:28 +02:00
Jeroen van Rijn 7b539e3025 Merge pull request #1932 from blakeb211/fixed_math_log2
fixed math.log2
2022-08-06 14:55:23 +02:00
blake b2b0043875 fixed math.log2 2022-08-06 06:19:47 -04:00
Michael Kutowski 53e0d182af ...bad paste 2022-08-05 18:56:14 +02:00
Michael Kutowski a6fa41e290 marshal output options with pretty option and other config 2022-08-05 18:53:29 +02:00
Jeroen van Rijn edba99d636 Revert "Use sync.Mutex rather than a spin lock for the threading example"
This reverts commit 8d1f46d837.
2022-08-05 15:03:09 +02:00
gingerBill 35674959f2 Merge pull request #1931 from cuishuang/master
fix some typos
2022-08-05 13:16:48 +01:00
cui fliter dc8b7a0eb8 fix some typos
Signed-off-by: cui fliter <imcusg@gmail.com>
2022-08-05 20:10:20 +08:00
gingerBill 8d1f46d837 Use sync.Mutex rather than a spin lock for the threading example 2022-08-05 12:45:26 +01:00
gingerBill a2117d23b2 Change unreachable with panic 2022-08-05 12:41:25 +01:00
gingerBill a58e4d0359 Allow for foo() or_else unreachable() and other diverging procedures 2022-08-05 12:19:57 +01:00
gingerBill 576914aee1 Make unreachable() a built-in compiler-level procedure 2022-08-05 11:57:33 +01:00
gingerBill 8171f8209a Merge branch 'master' of https://github.com/odin-lang/Odin 2022-08-05 11:37:28 +01:00
gingerBill 64ff05303c Merge branch 'master' of https://github.com/odin-lang/Odin 2022-08-05 11:36:20 +01:00
gingerBill 6caab6225d Fix #1930 2022-08-05 11:36:12 +01:00
gingerBill 326411498a Merge pull request #1925 from neNasko1/fix-incorrect-behaviour-of-string-ordering
Fix incorrect behaviour of string ordering
2022-08-03 19:43:55 +01:00
gingerBill d50fcf0020 Merge pull request #1926 from IanLilleyT/env_leak
Memory leak in os2 user_config_dir and user_home_dir
2022-08-03 19:02:05 +01:00
Ian Lilley d354d36a3b removed extra space from file_console_logger 2022-08-03 13:22:12 -04:00
Ian Lilley 483a72ac61 fixed debug symbols for range interval 2022-08-03 12:36:52 -04:00
Ian Lilley dbec4b0d0e fixed memory leak from calling get_env 2022-08-03 11:49:42 -04:00
Atanas Dimitrov 4cb489b9e4 Fix sort.compare_strings for prefixes 2022-08-03 16:22:54 +03:00
Atanas Dimitrov 28ec50d567 Fix string orderings to account for prefix-equal strings 2022-08-03 16:09:36 +03:00
gingerBill 73beed0477 Merge pull request #1921 from Hyp-X/master
Update user32.odin
2022-08-02 12:15:44 +01:00
gingerBill e0ecdd4b24 Simplify logic of append of zero sized elements 2022-08-02 11:13:53 +01:00
Phil 0cb1a578d0 fix glfw/native.odin foreign lib import 2022-08-01 08:26:26 -07:00
gingerBill 5168cf03a9 Remove dead #maybe code 2022-08-01 15:38:50 +01:00
gingerBill b886ae6515 Simplify parser logic for field prefixes 2022-08-01 15:32:17 +01:00
gingerBill 277a973b98 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-08-01 15:24:23 +01:00
gingerBill 0ec4d97bfd Correct parser logic for is_token_field_prefix 2022-08-01 15:24:17 +01:00
Hyp-X e6236e5c3e Update user32.odin
Added UnregisterClassW procedure to windows\user32.odin
2022-08-01 15:59:00 +02:00
gingerBill e201280844 Merge pull request #1920 from Hyp-X/master
Update dxgi.odin
2022-08-01 14:40:39 +01:00
gingerBill 8e50a6c61b Merge pull request #1876 from mohd-akram/build-config-opts
Allow passing config options to build script
2022-08-01 14:33:35 +01:00
Hyp-X 7e6f5f89d0 Merge branch 'odin-lang:master' into master 2022-08-01 14:44:57 +02:00
gingerBill 97acc57649 Simplify field prefix handling 2022-08-01 13:17:10 +01:00
gingerBill 83c8c48ed7 Simplify ast parsing for prefixes 2022-08-01 13:07:49 +01:00
Hyp-X 0815b4d59f Update dxgi.odin
Fixed CreateDXGIFactory* last parameter to be ^rawptr instead of rawptr
2022-08-01 14:04:12 +02:00
gingerBill a0135080b3 Merge pull request #1917 from lerno/added_virtuals_macos
Added virtual memory headers for Darwin.
2022-07-30 19:38:37 +01:00
Christoffer Lerno f45e8e5d47 Added virtual memory headers for Darwin. 2022-07-29 20:01:26 +02:00
Jeroen van Rijn 98ba4beede Merge pull request #1916 from wjlroe/glfw-3-3-8-darwin-universal-static-libs
GLFW 3.3.8 Darwin universal and Windows static libs
2022-07-28 16:55:42 +02:00
William Roe a9304f2fef Update Windows GLFW libraries to 3.3.8
This matches the latest libraries committed for macOS/Darwin
2022-07-28 15:38:14 +01:00
William Roe a0697ab057 Fix build on Apple Silicon when linking to GLFW
This also updates the library to GLFW 3.3.8
This includes the lib-universal static library, rather than just the
Intel one (lib-x86_64), so software building with GLFW on Apple Silicon
will work again.
2022-07-28 15:29:30 +01:00
Jeroen van Rijn 2e895c72d3 Merge pull request #1447 from phillvancejr/master
Added vendor glfw support for Mac OS
2022-07-28 16:05:59 +02:00
Jeroen van Rijn 674ebe395f Merge branch 'master' into master 2022-07-28 16:01:18 +02:00
Jeroen van Rijn 96eecaab54 Merge pull request #1915 from JorriFransen/fix-simd_abs
Changed param count from 2 to 1 for simd_abs.
2022-07-28 15:36:16 +02:00
Jorri Fransen b1ae5bc9fe Changed param count from 2 to 1 for simd_abs. 2022-07-28 15:28:26 +02:00
Jeroen van Rijn 7258588ed5 Merge pull request #1914 from wjlroe/fix-json-unmarshal-without-assertions-bug
Fix bug unmarshalling JSON with assertions disabled
2022-07-28 15:03:47 +02:00
William Roe d913155972 Fix bug unmarshalling JSON with assertions disabled
When asserts are disabled, code within the assert isn't run. Having
expect_token within an assert means that the state of the Parser is
mutated when asserts are run, but not when they aren't.

There's already a wrapper procedure for this pattern, which I have
reused here.
2022-07-28 13:56:14 +01:00
pvance 9746e25784 Update stb_image_resize.odin 2022-07-28 04:27:42 -04:00
pvance d26cfd2141 Update bindings.odin 2022-07-28 04:26:22 -04:00
pvance 21f2c06f4b Update stb_image_resize.odin 2022-07-28 04:25:18 -04:00
pvance 727a25f41f Replace ODIN_OS strings with enum values 2022-07-28 04:23:24 -04:00
pvance 3f27cb2309 replace ODIN_OS string with enums 2022-07-28 04:22:00 -04:00
pvance f213622982 replace ODIN_OS string with enums 2022-07-28 04:20:37 -04:00
pvance 4aad835a66 replaced ODIN_OS string values with enums 2022-07-28 04:19:28 -04:00
Jeroen van Rijn 4af8a64580 Merge pull request #1907 from thePHTest/minor-fix
remove leftover print statement
2022-07-26 01:00:38 +02:00
Phil c9c3611b1d remove leftover print statement 2022-07-25 15:46:47 -07:00
gingerBill 220dfd7440 Minor clean up of wasi_api.odin 2022-07-25 17:00:32 +01:00
gingerBill bce8819ed5 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-07-25 12:12:32 +01:00
gingerBill 5f2b220a85 Fix minor issue with a lack of a trailing comma 2022-07-25 12:12:25 +01:00
gingerBill f174c805a9 Merge pull request #1905 from DanielGavin/glob-fix
Change open to be read only when opening directory
2022-07-25 10:43:28 +01:00
Daniel Gavin 25869b7504 Change open to be read only when opening directory 2022-07-25 11:34:03 +02:00
Mikkel Hjortshøj ecd81e8a53 Update stale.yml 2022-07-25 00:14:07 +02:00
gingerBill d7f9f7f170 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-07-24 23:07:41 +01:00
gingerBill 08f5259d77 Replace insert_at with inject_at and assign_at 2022-07-24 23:07:35 +01:00
Mikkel Hjortshøj a9f744cb64 Update stale.yml 2022-07-25 00:07:29 +02:00
Mikkel Hjortshøj b02e42c6dc Update stale.yml 2022-07-25 00:05:36 +02:00
Mikkel Hjortshøj cb0273b5d7 Update stale.yml 2022-07-24 23:58:43 +02:00
Mikkel Hjortshøj 8dbf45a65a Update stale.yml 2022-07-24 23:54:39 +02:00
gingerBill 9f64de9568 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-07-24 22:51:39 +01:00
gingerBill 0ebe9ba487 Fix #1901 2022-07-24 22:51:34 +01:00
Mikkel Hjortshøj efe00e1aa6 Create stale.yml 2022-07-24 23:48:34 +02:00
gingerBill 2bdbce55f9 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-07-24 22:46:07 +01:00
gingerBill 9614ca92f0 Fix #1834 2022-07-24 22:46:00 +01:00
gingerBill d30e59f539 Merge pull request #1844 from Ronaldr1985/fix-odin-on-openbsd
Added missing #includes on OpenBSD
2022-07-24 22:28:25 +01:00
gingerBill 02a8bba02e Merge branch 'master' into fix/freebsd-syscall 2022-07-24 22:27:45 +01:00
Mikkel Hjortshøj a3afe617c2 Update ci.yml 2022-07-24 23:27:07 +02:00
gingerBill 69daac583e Merge pull request #1898 from DaseinPhaos/patch-1
fix `linalg.angle_from_quaternion`
2022-07-24 22:18:36 +01:00
gingerBill b28d4b753b Temp fix for lb_emit_store 2022-07-24 20:58:50 +01:00
gingerBill e6ab4f4856 Force memset instead of store zeroinitializer when the value is large 2022-07-24 20:22:50 +01:00
gingerBill c8ab1b7ee1 Add #by_ptr procedure attribute to enforce a parameter to be passed by pointer internally 2022-07-24 13:11:48 +01:00
gingerBill 9f10487678 Fix #1493 2022-07-24 12:59:34 +01:00
gingerBill 2542983d70 Fix #1793 2022-07-24 12:54:05 +01:00
gingerBill d492fb3501 Fix and improve x->y() behaviour to minimize duplicate evaluation 2022-07-24 12:39:59 +01:00
Ronald1985 1829aa1638 Undo changes to common.cpp and move the include of sys/wait.h to gb.h 2022-07-22 23:08:46 +01:00
Ronald1985 4cb4173ced Updated shabang in build_odin.sh so it runs on OpenBSD
This change doesn't break compatibility on Linux or Darwin
2022-07-22 23:01:38 +01:00
Luxko 00e704b216 fix linalg.angle_from_quaternion
fixes #1894 .2:
```odin
package laa
import "core:fmt"
import la "core:math/linalg"

main:: proc() {
    angle := f32(0.5)
    quat  := la.quaternion_angle_axis_f32(angle,la.Vector3f32{0,0,1})
    fmt.printf("retreived: %0.8f\n",  la.angle_from_quaternion(quat)) // should be 0.5, but wasn't
}
```
2022-07-23 00:59:45 +08:00
gingerBill 227ee0f705 Merge pull request #1895 from yeongjukang/patch-1
fix parameter for atan2 in procedure math.asin
2022-07-22 11:23:46 +01:00
gingerBill 17f47a7ab0 Merge pull request #1892 from esnunes/vendor-raylib-4.0-macos-arm64
Update `vendor:raylib` to support macos-arm64 (apple silicon)
2022-07-22 11:06:16 +01:00
Yeongju Kang 4e8bc0786d fix parameter for atan2 in procedure asin 2022-07-22 15:48:06 +09:00
gingerBill 3d3ccf061f Merge pull request #1893 from Tetralux/slash-join-slice
[path/slashpath] Change join() to take a slice instead of varargs
2022-07-21 18:59:04 +01:00
Tetralux 3a8adc6721 [path/slashpath] Change join() to take a slice instead of varargs
Achieves parity with filepath.join(), which was similarly changed a while back.
2022-07-21 17:49:31 +00:00
gingerBill e1748a5dd1 Add MAKE_WORD 2022-07-21 17:08:11 +01:00
Eduardo Nunes 59b4c889d3 Update vendor:raylib to support macos-arm64 (apple silicon) 2022-07-20 18:23:09 -03:00
gingerBill b6408d1b3f Merge branch 'master' of https://github.com/odin-lang/Odin 2022-07-19 16:17:45 +01:00
gingerBill 3db3047f47 Minor improvements 2022-07-19 16:17:23 +01:00
gingerBill 7420fbd95b Add custom event handling to wasm 2022-07-19 16:16:51 +01:00
gingerBill 7c990b3833 Merge pull request #1877 from fabiansperber/improve-debug-info
Improve debug info
2022-07-19 00:49:22 +01:00
Fabian Sperber 9c059f1a12 Fix debug info for type switch variable to be only visible in correct switch case
- use correct scopes for type switch
2022-07-19 00:46:28 +02:00
Fabian Sperber fb167d1d0a Fix loop var (init) becoming hidden while stepping on the for-line
- set debug location of jumps between block (similar to clang to the location of 'for')
- extend scope range to include all parts of the for-stmt
2022-07-19 00:46:27 +02:00
Fabian Sperber 0992239d86 Embed natvis in windows debug build for easier viewing of strings and Arrays 2022-07-19 00:46:27 +02:00
gingerBill 9eb3da0474 Remove import cycle on FreeBSD 2022-07-18 15:20:28 +01:00
gingerBill e91f8feedf Keep -vet happy 2022-07-18 15:12:54 +01:00
gingerBill 22a0c3fce1 Disallow proc() do stmt and only allow proc() { stmt } 2022-07-18 15:09:04 +01:00
gingerBill 6c7e5748a8 Integrate numerous debug fixes from #1877 2022-07-18 12:49:29 +01:00
gingerBill 0b0c6da8b0 Merge pull request #1873 from weshardee/master
fix -build-mode:shared on MacOS
2022-07-18 12:42:53 +01:00
gingerBill 78826071c0 Fix #1836 2022-07-16 23:14:09 +01:00
gingerBill e61b73d7ad Fix #1869 2022-07-16 22:30:57 +01:00
gingerBill f886632bf1 Fix #1880 2022-07-16 22:18:07 +01:00
gingerBill eafa5098aa Fix #1883 2022-07-16 18:03:43 +01:00
gingerBill 0571b80d37 Fix printing of bit_set types 2022-07-16 17:56:38 +01:00
gingerBill 80c10644dd Remove assert 2022-07-16 17:39:13 +01:00
gingerBill 041625381c Fix #1888 2022-07-16 17:36:03 +01:00
gingerBill 48f56d728b Merge branch 'master' of https://github.com/odin-lang/Odin 2022-07-16 16:12:24 +01:00
gingerBill 872d391cfb Mock up for the ability to enforce our own runtime.memset if necessary 2022-07-16 16:12:16 +01:00
Jeroen van Rijn 3e6ec65dd9 Fix murmur64a's tail handling.
Also, split up the murmur64 proc into murmur64a and murmur64b as they're distinct hashes with their own output.
2022-07-15 13:02:07 +02:00
gingerBill 157c87b2a2 Fix typo 2022-07-15 00:34:26 +01:00
gingerBill d3081bd889 Add buffer_read_ptr and buffer_write_ptr 2022-07-14 15:26:50 +01:00
gingerBill 2ae5bf4395 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-07-14 11:56:13 +01:00
gingerBill f28547cae1 Fix libc.putchar 2022-07-14 11:56:05 +01:00
Jeroen van Rijn 5332705e31 [hash] Give crc-64 a 64-bit seed. 2022-07-14 11:07:52 +02:00
gingerBill bfb082cda4 Merge pull request #1881 from odin-lang/strings-builder-cleanup
Rename strings.Builder procedures to be consistent with the rest of the core library
2022-07-13 16:09:19 +01:00
gingerBill 37d04198ab Add improved error message when doing ^x instead of &x for addressable variables 2022-07-11 12:31:01 +01:00
gingerBill ae9d540c1c Correct naming in tests 2022-07-11 11:55:49 +01:00
gingerBill c90b7c38f1 Rename strings.Builder procedures to be consistent with the rest of the core library 2022-07-11 11:50:08 +01:00
gingerBill 9e376fbda7 Update README.md 2022-07-10 00:52:59 +01:00
Wes Hardee 00739bf06d Merge branch 'odin-lang:master' into master 2022-07-09 18:09:21 -05:00
gingerBill e8148055ad Fix compilation on non-windows platforms 2022-07-09 23:55:02 +01:00
gingerBill dd0a20ab45 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-07-09 23:53:24 +01:00
gingerBill babbc304b8 Fix wasm compilation in windows 2022-07-09 23:53:18 +01:00
Mohamed Akram a8b44f33bd Allow passing config options to build script 2022-07-08 16:14:54 +04:00
gingerBill bd48561688 Merge pull request #1865 from thePHTest/ogl_bindless
Add OpenGL bindless textures ARB api to vendor
2022-07-05 20:03:15 +01:00
Wes Hardee 23842a8950 fix -build-mode:shared on MacOS 2022-06-30 12:40:32 -05:00
gingerBill 1676c643df Change MAX_STORE_SIZE 2022-06-30 15:47:19 +01:00
gingerBill e2bfb024de Merge branch 'master' of https://github.com/odin-lang/Odin 2022-06-30 15:42:11 +01:00
gingerBill 4d06a54c0c Use memmove if possible when emitting store over a certain size 2022-06-30 15:42:02 +01:00
Phil 0a8e6169d7 remove unneeded semicolons 2022-06-28 11:36:50 -07:00
Jeroen van Rijn 04ae87eaef Merge pull request #1868 from Skytrias/skytrias-ease-flux-fixes
math ease fixed flux map key deletion and generic in `flux_to`
2022-06-28 18:35:18 +02:00
Michael Kutowski b313d09c2c flux fixed key deletion and generic in flux_to 2022-06-28 18:27:52 +02:00
gingerBill c0d2359a91 Merge pull request #1826 from englerj/windows-bindings
Added additional Windows bindings.
2022-06-28 13:14:35 +01:00
gingerBill 51a2f09032 Merge pull request #1863 from OrigamiDev-Pete/master
Correct error reporting for Win32 file operations
2022-06-28 13:12:41 +01:00
gingerBill f60e8031f2 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-06-28 11:27:57 +01:00
gingerBill ea42613fec Improve error message with suggestion for #1866 2022-06-28 11:27:50 +01:00
Phil b89bb87759 Add OpenGL bindless textures ARB api to vendor 2022-06-27 14:50:24 -07:00
gingerBill 2cbb3d5a24 Merge pull request #1864 from JimmyLefevre/master
Change LPCSTR to LPCWSTR in windows _W procedures
2022-06-27 22:20:20 +01:00
Jimmy "Keeba" Lefevre 9e288b7ce8 Change LPCSTR to LPCWSTR in windows _W procedures 2022-06-27 21:48:02 +02:00
gingerBill 776b48c10d Fix GetEventState 2022-06-27 11:02:40 +01:00
gingerBill 199dae6cd5 Make SDL.*Event procedures return booleans instead of an integer where appropriate 2022-06-27 11:02:20 +01:00
Peter DV e58f45bef7 Correct error reporting 2022-06-27 11:26:34 +10:00
gingerBill abe122ecb7 Implement #1859 2022-06-26 13:13:07 +01:00
gingerBill f8744d87b0 Add shorthand flag to determine_type_from_polymorphic 2022-06-24 15:12:15 +01:00
Jeroen van Rijn 3e7f6b8751 Merge pull request #1857 from Pablo96/fix-core-lib-odin-parser-file-docs
Fix issue 1856
2022-06-23 23:22:36 +02:00
Pablo Narvaja 6ffe814ca7 assign package docs to file docs 2022-06-23 18:13:34 -03:00
Jeroen van Rijn eec9be71f6 Merge pull request #1854 from Kelimion/dll-entry-point
Add runtime.dll_forward_reason for Windows DLLs.
2022-06-21 18:02:47 +02:00
Jeroen van Rijn 888913c739 Add runtime.dll_forward_reason for Windows DLLs. 2022-06-21 17:29:55 +02:00
gingerBill 33d96fd28a Correct debug information of #simd vectors 2022-06-20 16:00:17 +01:00
gingerBill f1e8738af2 Merge pull request #1851 from DaseinPhaos/patch-1
Add missing field for `TEXTURE_COPY_LOCATION`
2022-06-19 16:21:21 +01:00
gingerBill 9c52a11b1b Merge pull request #1850 from ftphikari/master
sys/windows: add RegSetKeyValueW
2022-06-19 16:21:00 +01:00
Luxko d89c4606bd Add missing field for TEXTURE_COPY_LOCATION
Add missing anonymous union field for [D3D12_TEXTURE_COPY_LOCATION ](https://docs.microsoft.com/en-us/windows/win32/api/d3d12/ns-d3d12-d3d12_texture_copy_location):
```C
union {
    D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint;
    UINT                               SubresourceIndex;
  };
```
2022-06-19 19:06:31 +08:00
hikari c6903fbcd5 sys/windows: add constants and macro 2022-06-17 15:14:21 +03:00
ftphikari 13c8149046 Merge branch 'odin-lang:master' into master 2022-06-16 22:55:24 +03:00
hikari 665db0f778 sys/windows: add RegSetKeyValueW 2022-06-16 22:54:59 +03:00
gingerBill 173286de65 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-06-16 15:49:13 +01:00
gingerBill f2ecda8fec Rename to SJSON for the Simplified JSON notation variant 2022-06-16 15:49:08 +01:00
Jeroen van Rijn 6f1222e9bf Update strings.prefix_length to handle partial UTF-8 runes. 2022-06-16 16:12:15 +02:00
gingerBill 84a424f21e Add numerous procedure groups decode_rune, decode_last_rune, rune_count, full_rune 2022-06-16 15:07:07 +01:00
Jeroen van Rijn 9b7710488b Merge pull request #1849 from Kelimion/prefix_length
Add `strings.prefix_length` & `slice.prefix_length`
2022-06-16 12:42:35 +02:00
Jeroen van Rijn 9f413862e9 Add strings.prefix_length & slice.prefix_length 2022-06-16 12:34:13 +02:00
gingerBill b8802d7df7 Merge pull request #1848 from Astavie/require-fix
fix require flag on higher optimization modes
2022-06-16 10:59:49 +01:00
Astavie b13dad02a4 fix require flag on higher optimization modes 2022-06-15 21:30:29 +02:00
Jeroen van Rijn f045f8d805 Merge pull request #1845 from hfr4/patch-1
wrong variable names in functions
2022-06-14 18:32:25 +02:00
hfr4 30b7c8ad66 wrong variable names in functions 2022-06-14 18:20:38 +02:00
Ronald1985 89222a0ab2 Added missing #includes on OpenBSD 2022-06-14 09:55:06 +01:00
gingerBill 21e637d2b3 Allow %q with enums 2022-06-13 23:30:10 +01:00
gingerBill 6c196931d2 Increase record_level on displaying map values 2022-06-13 14:46:03 +01:00
gingerBill d7195b0798 Add missing commas 2022-06-13 11:12:31 +01:00
gingerBill b40998de9e Improve -strict-style for foreign import 2022-06-13 11:11:51 +01:00
gingerBill 8c0c327df9 Improvements to -strict-style and trailing commas 2022-06-13 11:00:13 +01:00
Josh Engler 50cbb8a1fc Fix tab spacing. 2022-06-12 15:55:38 -04:00
gingerBill ff9d058392 Minor changes to core:slice/heap; add to examples/all 2022-06-12 17:25:42 +01:00
gingerBill 1acc8f438b Merge pull request #1830 from graphitemaster/dale/max_heap
add max heap implementation to slice package
2022-06-12 17:21:04 +01:00
gingerBill c53426fcb4 Merge pull request #1818 from IanLilleyT/reserve_exceed
Dynamic array append reserves more space when it exceeds capacity
2022-06-12 17:19:08 +01:00
gingerBill 5187db525f Minor style change 2022-06-12 17:17:59 +01:00
gingerBill a8bd340267 Merge pull request #1395 from hdooley/master
factor out alloca generation into a helper
2022-06-12 17:17:12 +01:00
gingerBill ca1f419dc2 Merge pull request #1819 from IanLilleyT/no_query_info
Allocator: tidying up Query_Info return values when not part of Query_Features
2022-06-12 17:15:08 +01:00
gingerBill fae60a6b88 Merge pull request #1829 from totoki-kei/dev/totoki-kei/patch-testing
[testing] Fixed `@(test)` always fails unless `testing.set_fail_timeout` is called
2022-06-12 17:15:02 +01:00
gingerBill 108558ddfc Merge pull request #1841 from hasenj/hack-objc-window-init
HACK work around for creating a cocoa window
2022-06-12 17:08:10 +01:00
gingerBill 65b8cfae82 Minor code clean up 2022-06-12 16:49:15 +01:00
gingerBill 4055c31cf0 Update utf-32 printing 2022-06-12 16:48:06 +01:00
gingerBill e88af4e458 Support UTF-16 printing with []u16 and [^]u16 related types 2022-06-12 16:36:55 +01:00
gingerBill 79eb7b52d9 Merge pull request #1828 from JungerBoyo/patch-2
front() and back()
2022-06-12 16:17:39 +01:00
gingerBill 83b2bf44c4 Merge pull request #1842 from ftphikari/master
sys/windows: add a couple of constants
2022-06-12 16:12:43 +01:00
gingerBill 670f18ad1b Minor change to shrink 2022-06-12 16:12:24 +01:00
gingerBill 9a81716936 Merge pull request #1820 from Tetralux/shrink
[runtime] Add builtin `shrink` for dynamic arrays and maps
2022-06-12 16:11:18 +01:00
gingerBill f013499eea Merge pull request #1827 from JungerBoyo/patch-1
unset function
2022-06-12 16:09:09 +01:00
gingerBill d04f732e68 Add fmt:"s,0" to allow arrays and multi-pointers to be printed with NUL termination 2022-06-12 13:07:43 +01:00
gingerBill 35fd8e7f68 Move trailing comma requirement in field lists to -strict-style 2022-06-12 12:20:00 +01:00
gingerBill 38ff2a3ed9 Minor fix 2022-06-11 15:57:56 +01:00
gingerBill bd502d16bc Correct distinction between indirection and record level 2022-06-11 15:24:35 +01:00
gingerBill a11e17fbc3 Disable again 2022-06-11 15:18:51 +01:00
gingerBill 8b3b659433 Re-enable string quoting within records 2022-06-11 15:16:17 +01:00
gingerBill f33228fd6e Merge branch 'master' of https://github.com/odin-lang/Odin 2022-06-11 15:13:13 +01:00
gingerBill df5b693de8 Refactor fmt_value 2022-06-11 15:13:07 +01:00
Jeroen van Rijn ab98108441 [image/png] Construct test paths differently. 2022-06-11 16:07:56 +02:00
Josh Engler 6f80174f84 Merge branch 'master' into windows-bindings 2022-06-11 09:48:28 -04:00
hikari 0ebe81fce2 sys/windows: add GetTextExtentPoint32W 2022-06-11 12:27:18 +03:00
gingerBill c75dd14308 Fix typo 2022-06-11 02:03:54 +01:00
gingerBill c166b6a21d Support optional length parameter on struct tags for multi-pointers 2022-06-11 01:40:58 +01:00
gingerBill 6ed5cbee12 Refactor to fmt_array 2022-06-11 01:38:14 +01:00
gingerBill 5b200ccdf8 Correct #soa printing 2022-06-11 01:32:52 +01:00
gingerBill cf0f0c4b31 Clean up trailing comma 2022-06-11 01:23:41 +01:00
gingerBill 1399ecb41c Refactor with fmt_struct 2022-06-11 01:22:18 +01:00
gingerBill 339d6cfd41 Check for in_bad 2022-06-11 01:17:33 +01:00
gingerBill 7bded4f189 Default to q for strings within structs 2022-06-11 01:09:42 +01:00
gingerBill c7269b9ef0 Allow for fmt:"s" and fmt:"s,field_length" 2022-06-11 01:06:47 +01:00
gingerBill 85688015aa Add fmt:"-" to ignore fields in a struct 2022-06-11 00:55:10 +01:00
hikari 3c6cc575c6 sys/windows: add a couple of constants 2022-06-10 21:17:27 +03:00
gingerBill 0564cb6483 Merge pull request #1824 from ftphikari/master
sys/windows: add registry functions and create winerror.odin
2022-06-10 14:31:48 +01:00
Hasen Judy 4be92c7eb8 HACK work around for creating a cocoa window
See #1825 for more details.

This does not fix the underlying issue; it's merely a work around for
this specific manifestation of the bug.
2022-06-10 17:10:00 +09:00
hikari 88e9eb7d0c sys/windows: add functions and constants 2022-06-09 17:44:51 +03:00
hikari d19fc54c3d sys/windows: add macro 2022-06-08 21:18:11 +03:00
ftphikari 5d4291d9fa Merge branch 'odin-lang:master' into master 2022-06-08 19:55:42 +03:00
hikari b70cd03e9e sys/windows: add interfaces from shobjidl_core.h 2022-06-08 19:38:12 +03:00
hikari e91e5e1fe9 sys/windows: fix formatting 2022-06-07 20:16:32 +03:00
hikari ae57a49915 sys/windows: fix file picker dialog 2022-06-07 17:59:15 +03:00
gingerBill bfcb527b42 Merge pull request #1831 from Despacito696969/master
Fixed `slice.is_sorted_cmp`
2022-06-07 13:23:01 +01:00
Despacito696969 a343fb171d Fixed slice.is_sorted_cmp 2022-06-07 14:07:19 +02:00
Tetralux fa2296a124 [runtime] Add builtin shrink for dynamic arrays and maps
Asks the allocator to shrink the backing allocation to the current __length__, or a capacity
of the user's choosing.

Returns `(did_shrink: bool, err: mem.Allocator_Error)`.

```
shrink(&array) // shrinks to len(array)
shrink(&array, N) // shrink to N capacity

shrink(&map) // shrinks down to len(map)
shrink(&map, N) // shrink to N capacity
```
2022-06-04 23:29:47 +00:00
Dale Weiler a996cfc536 fix 2022-06-04 04:47:52 -04:00
Dale Weiler c1d55b9296 add max heap implementation to slice package 2022-06-04 04:31:55 -04:00
Totoki Kei 5c18cca1ca [core:testing] add global_fail_timeout_thread nil check
Fixed an issue where test would always fail unless set_fail_timeout was called.
2022-06-04 12:21:20 +09:00
JungerBoyo 78e6cd0c60 front() and back()
based on pop_front(), pop_back()
2022-06-04 00:12:34 +02:00
hikari 176954a6d8 sys/windows: add several functions and constants 2022-06-03 22:12:43 +03:00
JungerBoyo ad6b3bd95f unset function
unset function, clear single bits
2022-06-03 15:53:14 +02:00
Josh Engler 762895bc45 - Added EnumDisplaySettingsW and friends.
- Added additional file access/security/sharing attributes
2022-06-03 07:40:45 -04:00
hikari 592e9afa5f sys/windows: add RegSetValueExW 2022-06-03 07:57:21 +03:00
hikari a2e0373934 sys/windows: add registry functions and create winerror.odin 2022-06-03 06:44:42 +03:00
gingerBill fb49841b1d Remove strings dependency from core:sys/windows 2022-06-02 13:02:16 +01:00
gingerBill 01ea0d6f1e Merge branch 'master' of https://github.com/odin-lang/Odin 2022-06-02 12:11:29 +01:00
gingerBill bb7f291f5f Remove simd_rem; Disallow simd_div for integers 2022-06-02 12:10:43 +01:00
gingerBill 174fa9b490 Merge pull request #1817 from IanLilleyT/arena_allocation
Improved arena allocation with alignment
2022-06-02 10:53:23 +01:00
Ian Lilley dda2ed290a tidying up Query_Info return value when not in query features 2022-06-01 22:40:39 -04:00
Ian Lilley ee9908b09e Reserve more space when exceeding, not meeting, capacity 2022-06-01 22:01:00 -04:00
Ian Lilley 66de1856e3 tighter allocation for arena allocator 2022-06-01 21:37:05 -04:00
gingerBill ba5f7c4e2a Deprecate a..b based ranges in favour of ..= 2022-06-01 11:08:19 +01:00
gingerBill 487bd3d942 Keep compiler happy 2022-06-01 11:07:58 +01:00
gingerBill 4fac7a8f27 Update wasm/README.md 2022-06-01 10:40:59 +01:00
gingerBill 25dae06b6a Remove loader.mjs 2022-06-01 10:32:24 +01:00
gingerBill a1f15c2c69 Merge pull request #1807 from odin-lang/simd-dev
Generic #simd type and intrinsics
2022-05-31 11:52:24 +01:00
gingerBill 516f6647b4 Fix intrinsics.non_temporal_{load, store} 2022-05-31 11:00:41 +01:00
gingerBill a7840d50e2 Correct documentation 2022-05-31 00:01:23 +01:00
gingerBill cb10af08cb Correct intrinsics.odin for documentation 2022-05-30 16:42:32 +01:00
gingerBill 4e49d24df9 Add enable_target_feature to ABM 2022-05-30 16:08:06 +01:00
gingerBill 68222cb8ab Add SSE4.2 2022-05-30 16:06:31 +01:00
gingerBill 912d29af83 Add @(require_results) to all appropriate procedures 2022-05-30 15:59:48 +01:00
gingerBill f3868ac932 Improve missing handled results for built in procedures 2022-05-30 15:57:26 +01:00
gingerBill 5b42dd7707 Correct @(require_results) on parapoly procedures 2022-05-30 15:27:09 +01:00
gingerBill 51707032d1 Add SSE4.1 2022-05-30 15:17:02 +01:00
gingerBill a0babefe55 Fix lb_build_builtin_simd_proc 2022-05-30 15:13:45 +01:00
gingerBill f3aefbc443 @(require_target_feature=<string>) @(enable_target_feature=<string>)
require_target_feature - required by the target micro-architecture
enable_target_feature - will be enabled for the specified procedure only
2022-05-30 14:53:12 +01:00
Jeroen van Rijn a6c779b50e Merge pull request #1815 from hasenj/patch-1
Missing lib imports for raylib on macOS
2022-05-30 15:32:46 +02:00
hasen 9fa41a97b9 Missing lib imports for raylib on macOS
The following frameworks are required for linking to work (due to dependency on glfw):

    Cocoa, OpenGL, IOKit
2022-05-30 22:27:13 +09:00
gingerBill cef022539e Rename to lanes_rotate_left, lanes_rotate_right, lanes_reverse 2022-05-29 15:13:14 +01:00
gingerBill f6dfa33697 Use single line attributes 2022-05-29 15:11:15 +01:00
gingerBill bc3bf939e0 Add sha.odin 2022-05-29 14:56:25 +01:00
gingerBill f5e5eac3b9 Add cmpxchg16b 2022-05-29 14:46:05 +01:00
Jeroen van Rijn d50786bd30 Merge pull request #1814 from Kelimion/sdk_detect_fix
Fix SDK detection if no SDK installed.
2022-05-29 14:55:10 +02:00
gingerBill 0ccbea17aa Add pclmulqdq.odin 2022-05-29 13:50:54 +01:00
Jeroen van Rijn 136d50a745 Fix SDK detection if no SDK installed. 2022-05-29 14:48:44 +02:00
gingerBill babfba5e8f Add rdtsc.odin 2022-05-29 13:48:20 +01:00
gingerBill 846f8377b2 Add fxsr.odin 2022-05-29 13:44:00 +01:00
gingerBill 77d4409549 Add adx.odin 2022-05-29 13:40:16 +01:00
gingerBill 7f3540b7f5 Add abm.odin 2022-05-29 13:36:55 +01:00
gingerBill 3ad2cde833 Add amd64 specific instructions 2022-05-29 13:34:59 +01:00
gingerBill 910799cc5f Add cpu_features for core:simd/x86 2022-05-28 15:54:41 +01:00
Jeroen van Rijn 6c0192083e Merge pull request #1812 from wjlroe/os-exists-for-darwin
[os] Darwin: Add os.exists()
2022-05-28 16:45:48 +02:00
gingerBill c60d7842cd Remove old code 2022-05-28 15:41:27 +01:00
gingerBill d7eaf0f87b Add intrinsics.x86_cpuid and intrinsics.x86_xgetbv 2022-05-28 15:41:11 +01:00
William Roe bb4329711c [os] Darwin: Add os.exists() 2022-05-28 15:21:07 +01:00
gingerBill 618d3bf62f Improve vector comparison == != for horizontal reduction 2022-05-28 13:42:58 +01:00
Jeroen van Rijn cf8a4b9812 Don't crash if SDK not found during ENV fallback. 2022-05-28 13:52:56 +02:00
gingerBill 4db533ff71 Add ssse3 support 2022-05-27 23:07:33 +01:00
Jeroen van Rijn f28e3276e7 One more change. 2022-05-28 00:02:49 +02:00
gingerBill 026540040d Add SSE3 support 2022-05-27 23:00:52 +01:00
gingerBill 8518d3b232 Rename to non_temporaral_* 2022-05-27 22:57:16 +01:00
gingerBill 1c1f5e2231 Complete SSE2 2022-05-27 22:56:11 +01:00
Jeroen van Rijn bdedfb1071 Merge pull request #1805 from WalterPlinge/find-vs-winsdk-env
Find MSVC compiler and Windows SDK using environment variables
2022-05-27 23:54:53 +02:00
Jeroen van Rijn 92ed9e0b94 Refactor Walter's PR. 2022-05-27 23:48:31 +02:00
gingerBill 5c10b35df7 Fix sqrt for simd 2022-05-27 22:26:04 +01:00
Jeroen van Rijn 0668811397 Merge branch 'master' into find-vs-winsdk-env 2022-05-27 21:37:36 +02:00
Jeroen van Rijn 6bb6344208 Merge pull request #1810 from Kelimion/ms_craziness
Additional cleanup of microsoft_craziness.h.
2022-05-27 21:05:10 +02:00
Jeroen van Rijn 2f7bd154a2 Additional cleanup of microsoft_craziness.h. 2022-05-27 20:59:46 +02:00
gingerBill 20c5033b38 Add pack and unpack 2022-05-27 17:07:48 +01:00
gingerBill 20fe6d102a Add load and stores and sets 2022-05-27 16:58:35 +01:00
gingerBill 4e30a64d9f Add more sse2 intrinsics 2022-05-27 16:49:52 +01:00
gingerBill c48ef7d70b Add shifts 2022-05-27 16:39:54 +01:00
gingerBill e079a7009d Begin work on sse2.odin 2022-05-27 16:09:31 +01:00
gingerBill f383bf3136 Add _mm_stream_ps 2022-05-27 14:59:09 +01:00
gingerBill 609ddf28b7 Add intrinsics nontemporal_store and nontemporal_load 2022-05-27 14:56:36 +01:00
Jeroen van Rijn 34f1bda57c Merge pull request #1809 from Kelimion/ms_craziness
Refactor ms_craziness.h
2022-05-27 15:53:49 +02:00
Jeroen van Rijn f137b927b6 Refactor ms_craziness.h 2022-05-27 15:47:29 +02:00
gingerBill 2185dada56 Change package name 2022-05-27 14:26:02 +01:00
gingerBill 0b08080119 Add core:simd/x86 SSE
Proof of Concept to show intrinsics specific to a certain target platform
2022-05-27 14:23:31 +01:00
gingerBill 432b2b19e9 Add intrinsics.simd_x86__MM_SHUFFLE 2022-05-27 12:54:28 +01:00
gingerBill 952f294bce Add loads of aliases of vector types 2022-05-27 12:20:48 +01:00
gingerBill c23274adb0 Remove useless check 2022-05-27 12:11:58 +01:00
gingerBill 833f9dd037 Minor change 2022-05-27 11:55:03 +01:00
gingerBill 1ff8b97dae Add prefix of lanes_ 2022-05-26 20:44:37 +01:00
gingerBill 70451f9335 Support reverse_bits for #simd 2022-05-26 20:40:48 +01:00
gingerBill 1f438d4e6c Merge intrinsics.simd_sqrt with intrinsics.sqrt 2022-05-26 18:09:59 +01:00
gingerBill 421d45a7a7 Add intrinsics.fused_mul_add 2022-05-26 18:06:26 +01:00
gingerBill 20e7b5c88a Support count_ones etc with #simd 2022-05-26 17:48:51 +01:00
gingerBill 7092273a8f Rename simd_eq etc to simd_lanes_eq 2022-05-26 17:36:13 +01:00
gingerBill d0e8a735ba Add arithmetic operator support for simd vectors; Add intrinsics.simd_and_not 2022-05-26 17:09:46 +01:00
gingerBill 208226dba2 Improve #simd literal support 2022-05-26 14:55:10 +01:00
gingerBill f308f37ba1 Remove need for simd.splat 2022-05-26 14:51:50 +01:00
gingerBill c2610cb75e Keep -vet happy 2022-05-26 13:56:35 +01:00
gingerBill 59e9df2609 simd.bit_not; simd.copysign 2022-05-26 13:49:27 +01:00
gingerBill 66b5a35ec3 Add simd_to_bits; correct fix typo causing issue with parapoly 2022-05-26 13:45:47 +01:00
gingerBill f3f6c12a7c Add simd_clamp 2022-05-26 11:58:55 +01:00
gingerBill e331b0647e Add simd_rotate_left simd_rotate_right` 2022-05-26 11:48:04 +01:00
gingerBill 35502816c7 Add simd_add_sat simd_sub_sat 2022-05-26 11:24:10 +01:00
gingerBill 7ec0236fbf Add simd_reverse 2022-05-26 11:14:22 +01:00
gingerBill 0fd43c1a0b Add simd.{sqrt, ceil, floor, trunc, nearest} 2022-05-26 11:02:02 +01:00
gingerBill 06337129d8 Remove intrinsics.odin.simd_vector in favour of #simd[N]T 2022-05-26 10:38:51 +01:00
gingerBill 337780497d Merge pull request #1806 from jasonKercher/virtual_linux_fix
fix mmap call in virtual_linux.odin
2022-05-26 09:33:42 +01:00
jason 10deb2e88b fix mmap call in virtual_linux.odin 2022-05-25 21:51:36 -04:00
gingerBill b95ca80f85 Fix simd_shuffle 2022-05-26 00:39:34 +01:00
gingerBill 83d880a94a Remove unneeded mask 2022-05-26 00:37:48 +01:00
gingerBill cde6a2f7a5 Make simd_shuffle act closer to swizzle 2022-05-26 00:36:24 +01:00
gingerBill c2f5cbdeb4 Allow integer vectors in select 2022-05-25 23:49:23 +01:00
gingerBill 8e57511ffa Minor clean up 2022-05-25 23:42:25 +01:00
gingerBill 12d19d21c4 Document simd stuff in intrinsics.odin 2022-05-25 23:40:59 +01:00
gingerBill 7002c94a63 Add intrinsics.simd_select 2022-05-25 23:34:41 +01:00
gingerBill 57e69ea392 Add comments 2022-05-25 23:24:42 +01:00
gingerBill 09f936b04d Correct casting between integer and boolean #simd 2022-05-25 23:24:32 +01:00
gingerBill 140c00aa0c intrinsics.simd_shuffle 2022-05-25 23:01:33 +01:00
gingerBill 808ea30b48 Allow booleans for #simd 2022-05-25 22:16:44 +01:00
gingerBill 63d6c08d90 Add raw_simd_data 2022-05-25 22:09:38 +01:00
gingerBill 10e4de3c01 Add intrinsics.simd_reduce_* 2022-05-25 22:04:47 +01:00
gingerBill 8ac12886ed Add core:simd 2022-05-25 21:30:10 +01:00
gingerBill 63cc8a80a0 Correct parapoly for #simd 2022-05-25 21:29:45 +01:00
gingerBill 1549d01bf7 Restrict swizzle to a power of two for #simd 2022-05-25 21:17:21 +01:00
gingerBill b168bf9460 Rename simd_insert to simd_replace 2022-05-25 21:00:00 +01:00
gingerBill 0203bb657e Allow for non-constant simd vector compound types 2022-05-25 20:39:22 +01:00
gingerBill 53f0c6ef1a Add ranges for simd compounds literals 2022-05-25 20:31:31 +01:00
gingerBill 4c4480104d Add simd_extract and simd_insert 2022-05-25 20:27:14 +01:00
gingerBill 5c72974167 Simplify transmute for #simd 2022-05-25 19:04:25 +01:00
gingerBill f21e9ee712 Allow basic casting of simd vectors 2022-05-25 18:59:47 +01:00
gingerBill 81dd727f75 Implement backend for simd intrinsics 2022-05-25 18:49:17 +01:00
gingerBill 3b54015e80 Mock out simd intrinsics 2022-05-25 17:54:05 +01:00
gingerBill b032d5af87 Make #simd an opaque type 2022-05-25 17:26:18 +01:00
WalterPlinge 209a155608 fix a double free bug 2022-05-25 14:51:37 +01:00
gingerBill d8e77cd738 Add #optional_ok to dynlib.symbol_address 2022-05-25 11:53:32 +01:00
gingerBill 95d4ce4aa3 Fix lib_unix.odin 2022-05-25 11:46:26 +01:00
gingerBill 39393cca92 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-05-25 11:44:05 +01:00
gingerBill acadbe050c Make core:dynlib use the private interface convention of other packages 2022-05-25 11:43:56 +01:00
WalterPlinge 8fcf2f5dca a little cleanup 2022-05-25 02:10:34 +01:00
WalterPlinge 831a86599e Add fallback build paths search using environment variables 2022-05-25 02:00:13 +01:00
Jeroen van Rijn 233b32fd3e Correct return value. 2022-05-25 00:47:29 +02:00
Jeroen van Rijn 3c5124ce68 Fix odin build examples\demo\ trailing slash handling. 2022-05-24 13:55:39 +02:00
Jeroen van Rijn a8d78660ee Merge pull request #1804 from wjlroe/consistent-os-get-env-across-unix
[os] Darwin,FreeBSD,OpenBSD: Rename os.getenv to os.get_env
2022-05-23 15:57:39 +02:00
Jeroen van Rijn cc1df9591f Merge pull request #1803 from cedric-h/master
Clear up Mismatched BE types error message
2022-05-23 15:48:24 +02:00
William Roe 54a326f046 [os] Darwin,FreeBSD,OpenBSD: Rename os.getenv to os.get_env
Make os.get_env consistent across Unixes

This matches the function name and API from env_windows.odin and os_linux.odin, which should be the same everywhere. Meaning:

* named get_env and not getenv
* return a string (empty if the environment variable is not found)
* accept a default value parameter for the allocator (defaulting to context.allocator)
* calls lookup_env which returns an extra found boolean value

This is so that you don't have to write platform/OS conditionals when getting environment variable values from the stdlib os.get_env/getenv function.
2022-05-23 13:48:55 +01:00
Cedric Hutchings 3d9d85121d Clear up Mismatched BE types error message 2022-05-23 08:14:05 -04:00
gingerBill a31d23a32a Merge pull request #1802 from odin-lang/remove-maybe-tag
Merge functionality of `#maybe` with the standard 'union' functionality
2022-05-23 12:35:06 +01:00
gingerBill 084f431aa5 Correct check_transmute operand logic 2022-05-23 12:19:33 +01:00
gingerBill 7002f0a7d7 Update demo.odin 2022-05-23 12:07:44 +01:00
gingerBill 3ec70c5517 Merge functionality of #maybe with the standard 'union' functionality 2022-05-23 12:04:19 +01:00
gingerBill d9f293b281 Add better error message for trying to dereference a multi-pointer 2022-05-23 11:50:05 +01:00
gingerBill 8c1499dbc2 Make raw_data return [^]T types 2022-05-23 11:48:05 +01:00
gingerBill 7d2eedee73 Unify raw_data in core:mem with core:runtime 2022-05-23 11:47:12 +01:00
gingerBill eba35a8f7d Allow multi pointers in intrinsics 2022-05-23 11:46:44 +01:00
gingerBill e967f2ca2c Merge branch 'master' of https://github.com/odin-lang/Odin 2022-05-23 11:34:00 +01:00
gingerBill 438713af20 Allow transmute on constant expressions 2022-05-23 11:33:52 +01:00
gingerBill 568869077e Merge pull request #1801 from cedric-h/master
Add enums for getting Scancodes from WM_KEYDOWN
2022-05-22 20:39:59 +01:00
Cedric Hutchings f25a3f2a7d Add enums for getting Scancodes from WM_KEYDOWN
https://docs.microsoft.com/en-us/windows/win32/inputdev/about-keyboard-input
2022-05-22 15:34:49 -04:00
gingerBill 5609221831 Merge pull request #1792 from jasonKercher/os2_linux
Os2 linux
2022-05-22 17:18:28 +01:00
gingerBill f3432e6bb5 Rename to CreateProgramFromStrings 2022-05-21 21:31:24 +01:00
gingerBill 43b350c590 Add more procedures for window related positions 2022-05-21 21:31:05 +01:00
gingerBill c2c66aad60 Add Context_Menu event kind; Fix event_prevent_default() 2022-05-21 17:29:19 +01:00
gingerBill d7681d5b06 Add utilities for Rects 2022-05-21 17:24:03 +01:00
gingerBill c902615192 Improve writeToConole logic for the console.log difference between stdout and stderr 2022-05-21 17:03:44 +01:00
gingerBill 2895830ce6 Add wasm/js/general.odin 2022-05-21 16:37:12 +01:00
gingerBill 1eef9552b4 Fix typo 2022-05-21 16:35:27 +01:00
gingerBill 577fa2d29b Update time procedures for js targets 2022-05-21 16:35:06 +01:00
gingerBill 72fcf16a39 Rename to writeToConsole 2022-05-21 16:15:20 +01:00
gingerBill b9d523e0b2 Add color when writing to stderr 2022-05-21 16:11:10 +01:00
gingerBill f3d225ca4f Improve addConsoleLine 2022-05-21 16:00:36 +01:00
gingerBill d84d2f85e8 Add WebGL helper (CreateProgramHelper) 2022-05-21 15:34:12 +01:00
gingerBill 10f1d8c604 Fix typo 2022-05-21 13:38:38 +01:00
gingerBill 184d1c57b1 Change atomic.wait32 and atomic.notify selection 2022-05-21 13:37:00 +01:00
gingerBill dfbe68bcfe Begin to add support for experimental wasm64 2022-05-21 13:30:43 +01:00
gingerBill 3049e07f72 Add mem.DEFAULT_PAGE_SIZE 2022-05-21 13:30:09 +01:00
gingerBill da54d0ec8c Fix typo 2022-05-21 13:18:11 +01:00
gingerBill b57edb89eb Unify abi for wasm32 and the future wasm64 2022-05-21 13:18:04 +01:00
gingerBill e43eccbb91 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-05-21 13:02:03 +01:00
gingerBill e48f41165c Begin work on Atomics for wasm32 (wait and notify intrinsics) 2022-05-21 12:58:48 +01:00
gingerBill 9eb4cbcbd2 Improve ABI design for wasm32 targets 2022-05-21 12:32:50 +01:00
gingerBill 2612f241c9 Minor clean up 2022-05-21 12:14:12 +01:00
gingerBill 0f1153fae2 Add page_alloc and page_allocator 2022-05-21 12:11:22 +01:00
Jeroen van Rijn b84561f2b8 Merge pull request #1800 from DaseinPhaos/master
add constants for DXGI_ERROR and DXGI_STATUS
2022-05-21 13:03:35 +02:00
Jeroen van Rijn f7e78e2671 Merge pull request #1799 from cedric-h/master
Fix typo.
2022-05-21 12:59:48 +02:00
Jeroen van Rijn d10a2bc5d5 Format DXGI constants 2022-05-21 12:59:16 +02:00
gingerBill 94fda3d48d Rename to runWasm 2022-05-21 11:41:50 +01:00
gingerBill 5cf4f565d6 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-05-21 11:39:47 +01:00
gingerBill c20b5cbd10 Change wasm/js/runtime.mjs to a normal .js file; Add interfaces and functions to a global odin variable 2022-05-21 11:39:35 +01:00
gingerBill 115612620f Merge pull request #1798 from Tetralux/filepath-patch
[path/filepath] Change join() to take a []string instead of varargs
2022-05-21 08:50:27 +01:00
Luxko a5bf3b0bc5 add dxgi HRESULT constants 2022-05-21 15:53:20 +09:00
Cedric Hutchings 5c647e2f61 Fix typo. 2022-05-21 01:50:59 -04:00
Tetralux 06884da42b [path/filepath] Change join() to take a []string instead of varargs
This makes passing an allocator easier, as you no longer have to resort to
named arguments:
Before:
  `join(a, b, c)` became `join(elems={a, b, c}, allocator=ally)`
After:
  `join({a, b, c})` becomes `join({a, b, c}, ally)`
2022-05-21 04:48:06 +00:00
Jeroen van Rijn 6e7179d8f3 Merge pull request #1797 from Kelimion/libc_math
Fix is* proc in libc.
2022-05-20 20:05:44 +02:00
Jeroen van Rijn e85f1dd9fb Fix is* proc in libc. 2022-05-20 20:00:27 +02:00
Jeroen van Rijn 9ac94e621b Merge pull request #1796 from Kelimion/make_directory
Fix Windows os.make_directory.
2022-05-20 19:37:40 +02:00
Jeroen van Rijn db8d119cad Fix Windows os.make_directory. 2022-05-20 19:15:13 +02:00
gingerBill 836c325021 Merge pull request #1755 from bkrypt/update_miniaudio
Update `vendor/miniaudio` to v0.11.9
2022-05-19 20:53:19 +01:00
gingerBill 3bb31093fa Add documentation for CreateCurrentContextById and SetCurrentContextById 2022-05-18 13:08:31 +01:00
gingerBill 214b43974d Add WebGL ContextAttributes 2022-05-18 13:06:29 +01:00
gingerBill 55556aea77 Add WebGL runtime into the js/runtime.mjs; Allow for multiple WebGL contexts 2022-05-18 12:31:25 +01:00
gingerBill 223897d224 Fix typo 2022-05-18 12:30:44 +01:00
gingerBill 542e45de26 Increase minimum macOS version to 10.12.0 2022-05-18 12:30:26 +01:00
gingerBill 1fa9488a4d Merge pull request #1795 from Tetralux/os-patch
[os] Linux: os.unset_env()
2022-05-18 11:44:09 +01:00
gingerBill b1196bd659 Merge pull request #1794 from mollstam/fix/optnone-procs
Emit LLVM IR to never optimize/inline procs when building debug and -o:minimal
2022-05-18 10:27:16 +01:00
Tetralux 57167be2a6 [os] Linux: os.unset_env() 2022-05-18 07:12:30 +00:00
Tobias Mollstam 846930a07f emit optnone and noinline for all procs when opt set to minimal 2022-05-18 07:07:20 +02:00
gingerBill 0cc67ff5e3 Add a return value to mem.zero_item and mem.zero_slice which is the same as the input 2022-05-17 22:42:37 +01:00
gingerBill a86574da84 Use RtlWaitOnAddress to allow for a i64 sized duration rather than u32 2022-05-17 22:24:18 +01:00
jason 5a6836ab99 match user.odin and env.odin to master 2022-05-16 15:28:56 -04:00
jason 43432f92ec fix git dummy move 2022-05-16 15:21:36 -04:00
jason d1499f3f78 make -vet happy 2022-05-16 13:57:12 -04:00
jason fff23e2bbb merge from upstream and convert to ^File types 2022-05-16 13:49:57 -04:00
gingerBill 33895b6d92 Convert all uses of *_from_slice to *_from_bytes where appropriate 2022-05-16 01:43:43 +01:00
gingerBill e10105a780 Correct logic for tracking allocator proc for freeing a nil pointer 2022-05-15 23:50:51 +01:00
gingerBill 5451c9672d Fix dynamic_pool_destroy 2022-05-15 23:48:11 +01:00
gingerBill 4eba2bb8d9 Add _system_random for Darwin 2022-05-15 23:46:32 +01:00
gingerBill 2a58bceb56 Add rand.init_as_system to allow for system-level based random number generation 2022-05-15 23:43:20 +01:00
gingerBill fdcf08410c Add Gompertz Distribution 2022-05-15 23:03:01 +01:00
gingerBill 5142955f00 Add more distributions 2022-05-15 22:58:39 +01:00
gingerBill 500150b12a Correct log normal 2022-05-15 22:52:11 +01:00
gingerBill 50ddd8dd26 Fix typo 2022-05-15 22:45:05 +01:00
gingerBill 6c6de2a07d Move distributions to a separate file 2022-05-15 22:20:25 +01:00
gingerBill 01912b6ba5 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-05-15 21:53:21 +01:00
gingerBill be2c7b5c9b Add numerous different random distribution procedures 2022-05-15 21:53:16 +01:00
gingerBill ed60ed3bae Merge pull request #1789 from Tetralux/os-patch
[os] Linux: Add os.exists(), os.get_env(), os.lookup_env(), os.set_env()
2022-05-15 20:49:55 +01:00
gingerBill 23cb96de02 Commit import _ changes 2022-05-15 16:37:05 +01:00
gingerBill a2c771876e Merge pull request #1788 from odin-lang/image-general-loader
Generalized `core:image` loader
2022-05-15 13:04:26 +01:00
Tetralux b5b329378f [os] Linux: Add os.exists(), os.get_env(), os.lookup_env(), os.set_env()
exists() does the access() syscall.

Renames getenv() to get_env() to match Windows.
2022-05-14 20:14:10 +00:00
gingerBill f7b18cd86e Add DjVu 2022-05-14 15:32:28 +01:00
gingerBill d74e4b427d Remove bool return on image.destroy 2022-05-14 15:16:56 +01:00
gingerBill 22dc020647 Destroy pixel buffer 2022-05-14 15:16:14 +01:00
gingerBill e8485ee7e7 Correction to image.destroy 2022-05-14 15:15:04 +01:00
gingerBill c516fb947f Add image.destroy 2022-05-14 15:11:23 +01:00
gingerBill 3aa0a733f3 Add destroy with loader 2022-05-14 15:06:55 +01:00
gingerBill 4e080057fb Rename load_from_buffer to load_from_bytes 2022-05-14 15:01:17 +01:00
gingerBill 9c1f270bd5 Rename load_from_slice to load_from_bytes across core 2022-05-14 14:55:15 +01:00
gingerBill e46d87b221 Fix type and keep -vet happy 2022-05-14 14:47:58 +01:00
gingerBill 5bc866e420 Allow for import _ "foo" to allow for @(init) procedures; Remove using import code 2022-05-14 14:44:24 +01:00
gingerBill 5af7004f44 Add image packages to examples/all 2022-05-14 14:43:50 +01:00
gingerBill 01e8e682c0 Generalized core:image loader
```odin
import "core:image"
import "core:image/png"

...

img, err := image.load_from_file("path.png")
```
2022-05-14 14:38:26 +01:00
gingerBill 2ef6544ca2 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-05-14 14:26:50 +01:00
gingerBill 9921ac01cc Add more NetPBM variants 2022-05-14 14:26:11 +01:00
Jeroen van Rijn 7057f5fc11 Add PAM and PFM to format detection. 2022-05-14 15:17:37 +02:00
gingerBill f17a9dd5e7 Add even more file formats 2022-05-14 13:59:49 +01:00
gingerBill ec3394b8da Merge branch 'master' of https://github.com/odin-lang/Odin 2022-05-14 13:46:15 +01:00
gingerBill 0cca42a1f4 Add image.which file format testing procedures 2022-05-14 13:46:10 +01:00
Jeroen van Rijn 85edcf9cc2 Revert. 2022-05-14 13:34:52 +02:00
gingerBill 3b842ffe29 Remove semicolons 2022-05-14 12:27:21 +01:00
Jeroen van Rijn 6c0e2e2a53 pool_join should look at .Done. 2022-05-14 13:18:38 +02:00
Jeroen van Rijn 42371f7aea Fix fix. 2022-05-13 15:25:20 +02:00
Jeroen van Rijn 286f782e5e Merge pull request #1786 from Kelimion/thread_fix
Fix thread pool join.
2022-05-13 15:17:08 +02:00
Jeroen van Rijn 58fc305b11 Do a bit less work for pool_join. 2022-05-13 15:11:33 +02:00
Jeroen van Rijn 7e0c359f99 Fix thread pool join. 2022-05-13 15:03:40 +02:00
Jeroen van Rijn f50399e394 Merge pull request #1785 from Kelimion/csv
Allow CSV/TSV reader to read multi-line fields.
2022-05-13 14:33:25 +02:00
Jeroen van Rijn 7bc21c6691 Allow CSV/TSV reader to read multi-line fields. 2022-05-13 14:19:04 +02:00
gingerBill dd56c85e55 Merge pull request #1784 from yay/os-darwin-fixes
os_darwin.odin fixes
2022-05-13 10:10:05 +01:00
Vitaly Kravchenko 9e2a847ebc Typo fix 2022-05-13 09:32:04 +01:00
Vitaly Kravchenko daef39a206 os_darwin.odin fixes 2022-05-13 09:27:15 +01:00
gingerBill 5d496cdcda Merge pull request #1783 from AaronGlazer/master
core:sys/windows - Add flag values for FormatMessageW and LocalAlloc/etc.
2022-05-13 09:21:04 +01:00
gingerBill f27f595549 Add core:encoding/endian 2022-05-12 19:35:07 +01:00
Aaron Glazer 536e0a8c29 Adding flag values for FormatMessageW and LocalAlloc/etc. 2022-05-12 08:22:51 -07:00
gingerBill bc18310107 Correct xml test 2022-05-12 16:01:15 +01:00
gingerBill 3fdb3dd767 Minor style change in leb128.odin 2022-05-12 15:59:15 +01:00
gingerBill d224679619 Minor name changes within core:encoding/xml for consistency 2022-05-12 15:57:03 +01:00
gingerBill 2dd181e663 Remove duplication 2022-05-12 15:48:27 +01:00
gingerBill f002857edc Clean up core:time to be consistent across all platforms 2022-05-12 15:47:24 +01:00
gingerBill 97739da85a Remove core:sys/win32 2022-05-12 14:33:03 +01:00
gingerBill 6c14586fff Add GetAddrInfoExW 2022-05-12 14:27:46 +01:00
gingerBill 0c45a46aab Remove A calls in favour of W calls 2022-05-12 14:21:25 +01:00
gingerBill d1fc9d3073 Add more libraries 2022-05-12 13:54:40 +01:00
gingerBill 2fb351bf04 Update sys/windows to be closer to the soon to be deleted sys/win32 2022-05-12 13:45:17 +01:00
gingerBill dc832ad49f Minor fix 2022-05-12 13:20:55 +01:00
gingerBill eef44b11f3 Make the utf16 conversion procedures in core:sys/windows safer by checking for memory leaks 2022-05-12 13:17:58 +01:00
gingerBill bb4f108487 Update error handling for os2 on windows 2022-05-12 12:54:27 +01:00
gingerBill ccb38c3dc6 Add _safe versions 2022-05-12 12:54:14 +01:00
gingerBill cc81057d21 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-05-12 11:33:08 +01:00
gingerBill 8b4b81fdeb Fill in most of os2/file_windows.odin 2022-05-12 11:33:01 +01:00
Jeroen van Rijn 4cb46f5631 Merge pull request #1781 from Kelimion/thread_fix
Disable thread.terminate on Darwin for now.
2022-05-11 16:23:56 +02:00
Jeroen van Rijn f4ad4c7aa6 Disable thread.terminate on Darwin for now. 2022-05-11 16:17:35 +02:00
Jeroen van Rijn 37dda30c49 Merge pull request #1780 from Kelimion/thread_fix
Implement `pthread_cancel`.
2022-05-11 15:58:42 +02:00
Jeroen van Rijn 8fb718245a Implement pthread_cancel. 2022-05-11 15:52:04 +02:00
Jeroen van Rijn a4cb6f96ea Merge pull request #1779 from Kelimion/thread_fix
Fix join on *nix.
2022-05-11 13:52:51 +02:00
Jeroen van Rijn 56e3b7cb7d Fix join on *nix. 2022-05-11 13:43:29 +02:00
Jeroen van Rijn ae1f5d2181 Merge pull request #1778 from Thimilius/fix-join_multiple-typo
Fix join_multiple typo
2022-05-11 13:28:12 +02:00
gingerBill b4df272eb5 Improve -vet shadowing to allow x := x if cond else y etc 2022-05-11 12:15:37 +01:00
gingerBill dca2fbccff Improve ternary if type inference 2022-05-11 12:15:10 +01:00
Thimilius d48d3bfa87 Fix join_multiple typo 2022-05-11 13:12:56 +02:00
Jeroen van Rijn 8559790bd8 Fix ; typo. 2022-05-10 20:02:39 +02:00
gingerBill 37c6279031 Add ggpo to examples/all/all_vendor.odin 2022-05-09 23:33:00 +01:00
gingerBill 0d4e710b96 Add vendor:ggpo 2022-05-09 23:32:23 +01:00
gingerBill 205aa10b88 Improve events handling 2022-05-09 22:08:14 +01:00
gingerBill 6f1cc3946b Begin work on Event System for js_wasm32 target 2022-05-09 16:58:34 +01:00
Jeroen van Rijn 253ecd55a0 Merge pull request #1776 from AaronGlazer/master
core:sys/windows: Add some proc bindings, struct definitions, and constant values.
2022-05-08 12:30:01 +02:00
Aaron Glazer c9e31dc90d Adding some proc bindings, struct definitions, and constant values. 2022-05-08 02:34:10 -07:00
Jeroen van Rijn 3d06322d4a Merge pull request #1775 from Kelimion/ctrl_c
Ctrl-C handler on Windows.
2022-05-08 10:45:58 +02:00
Jeroen van Rijn 85e6efdf16 Ctrl-C handler on Windows. 2022-05-08 10:39:03 +02:00
Jeroen van Rijn 6b89ff43ea Merge pull request #1770 from ftphikari/master
sys/windows: fix RGB macro
2022-05-06 17:28:21 +02:00
hikari 4cdc55af91 sys/windows: fix RGB macro again 2022-05-06 18:23:52 +03:00
hikari 4b289f904c sys/win32: fix RGB macro 2022-05-06 13:58:00 +03:00
gingerBill 53c70da0b8 Correct foreign import prefix behaviour for wasm 2022-05-06 11:16:24 +01:00
gingerBill 6f20b5bb59 Add mock for _yield 2022-05-06 10:59:55 +01:00
gingerBill 96ab17ecfc Begin mocking os2 for windows out more 2022-05-05 18:01:44 +01:00
gingerBill 18bde22b26 Go to a File based approach over Handle based 2022-05-05 16:15:03 +01:00
gingerBill e61aad925b Merge branch 'master' of https://github.com/odin-lang/Odin 2022-05-05 15:30:14 +01:00
gingerBill 5d190b15d7 Minor improvements to io and os 2022-05-05 15:30:07 +01:00
Jeroen van Rijn fe442d7c0c [mem] Fix Dynamic_Pool. 2022-05-05 10:45:15 +02:00
jason 97d1a67871 make vet happy, thread_local heap 2022-05-04 18:45:39 -04:00
jason bac96cf2ad fix mmap_to_region 2022-05-04 18:32:14 -04:00
jason 7e0cc0af25 heap_linux.odin 2022-05-04 17:55:15 -04:00
Jeroen van Rijn 1d29d9be25 Merge pull request #1769 from zhibog/fix_1761
Fix issue #1761. Added the test vector to the core and vendor tests
2022-05-04 22:21:55 +02:00
zhibog 0e91e63043 Fix issue 1761. Added the test vector to the core and vendor tests 2022-05-04 22:13:50 +02:00
gingerBill 0cf37bde8b Update foreign import for OpenEXRCore for non-windows platforms 2022-05-04 17:51:36 +01:00
gingerBill 173799527a Merge pull request #1768 from odin-lang/link-order
Make the link order of foreign imports deterministic
2022-05-04 17:04:18 +01:00
gingerBill 5931e2383b Remove unneeded #if defined 2022-05-04 16:58:40 +01:00
gingerBill e4743b15b1 Add @(priority_index=<int>) for foreign import 2022-05-04 16:40:12 +01:00
gingerBill 9f95d6fa65 Minor move around for path sets 2022-05-04 16:17:24 +01:00
gingerBill 982a1aebb3 Remove stray line 2022-05-04 16:14:42 +01:00
gingerBill cec049b7d3 Make the link order of foreign imports deterministic 2022-05-04 16:04:26 +01:00
Jeroen van Rijn dc323cfa1d Small fix to deprecation warning. 2022-05-04 13:29:52 +02:00
gingerBill 0afa226a93 Merge pull request #1766 from odin-lang/vendor-openexr
`vendor:OpenEXRCore`
2022-05-03 15:28:28 +01:00
gingerBill 1146604344 Add LICENSE.md 2022-05-03 14:52:09 +01:00
gingerBill 89c2e1a5fa Add vendor:OpenEXRCore to examples/all 2022-05-03 14:22:25 +01:00
gingerBill 971d498e79 Change path 2022-05-03 14:21:24 +01:00
gingerBill 6e7a50c02f Add .lib for vendor:openexr 2022-05-03 14:11:26 +01:00
Jeroen van Rijn 6aaab4988e Merge pull request #1765 from Kelimion/more_opt_handling
Handle negative integer flags, add deprecation warnings.
2022-05-03 14:01:22 +02:00
Jeroen van Rijn d9b0c05acf Typo. 2022-05-03 13:47:13 +02:00
Jeroen van Rijn 47f637d23b Add deprecation warnings for -opt and flag=value insted of flag:value. 2022-05-03 13:37:07 +02:00
Jeroen van Rijn 59f55a2119 Make big_int_from_string return an error if not an integer. 2022-05-03 13:15:49 +02:00
Jeroen van Rijn 8bac82320f Fix -opt: parsing. 2022-05-03 11:44:55 +02:00
Jeroen van Rijn 14bf20320a Merge pull request #1764 from Kelimion/xxh3_tests
[xxhash] For the streaming tests, randomly select the size to use.
2022-05-02 19:30:40 +02:00
Jeroen van Rijn b99940f33a [xxhash] For the streaming tests, randomly select the size to use.
Randomize size used with `update`.

It'll print "Using user-selected seed {18109872483301276539,2000259725719371} for update size randomness."

If a streaming test then fails, you can repeat it using:
`odin run . -define:RAND_STATE=18109872483301276539 -define:RAND_INC=2000259725719371`
2022-05-02 19:20:25 +02:00
Jeroen van Rijn 81495068b9 Merge pull request #1763 from Kelimion/xxh3_tests
[xxhash] Add tests for large inputs
2022-05-02 17:57:48 +02:00
Jeroen van Rijn 6985181961 [xxhash] Add tests for large inputs
Test XXH32, XXH64, XXH3-64 and XXH3-128 for large inputs, with both all-at-once and streaming APIs.

XXH32_create_state and XXH64_create_state now implicitly call their "reset state" variants to simplify the streaming API to 3 steps:
- create state / defer destroy
- update
- digest (finalize)

These are tested with an array of 1, 2, 4, 8 and 16 megabytes worth of zeroes.
All return the same hashes as do both the one-shot version, as well as that of the official xxhsum tool.

3778/3778 tests successful.
2022-05-02 17:51:39 +02:00
gingerBill 97717d65ef Add vendor:openexr
No foreign library yet
2022-05-02 16:09:09 +01:00
gingerBill 8023c8abc7 Fix @(disable=...) 2022-05-02 14:10:02 +01:00
gingerBill 2d3f59d9a7 Merge pull request #1758 from ftphikari/master
sys/windows: add a couple procedures and tons of constants
2022-05-02 13:11:25 +01:00
gingerBill be8de4a1ff Update arch enum 2022-05-01 23:52:55 +01:00
gingerBill 18ad6c33ef Implement syscall for arm32 2022-05-01 23:32:31 +01:00
gingerBill 0e27b27b81 Fix building issues with arm32 2022-05-01 23:28:32 +01:00
gingerBill 10a311092b Add basic arm32 ABI support (linux_arm32) 2022-05-01 23:15:06 +01:00
Jeroen van Rijn 18463d68d4 Merge pull request #1762 from WalterPlinge/netpbm-doc-fix
Fixed incorrect values in the docs for the Netpbm package
2022-05-01 22:39:15 +02:00
WalterPlinge 74d3bcec05 Fixed the depth values in the doc file, made some info more clear 2022-05-01 21:29:09 +01:00
Jeroen van Rijn df233aee94 Merge pull request #1760 from Kelimion/xxh3_fix
[xxh3] Fix flaws in streaming implementation
2022-05-01 12:54:20 +02:00
Jeroen van Rijn 335b724209 [xxh3] Fix flaws in streaming implementation 2022-05-01 12:47:05 +02:00
hikari b2fdb881eb sys/windows: remove A variant for one SystemParametersInfoW 2022-05-01 13:21:28 +03:00
Jeroen van Rijn 6ade9acc4d [pbm] Remove stray comment. 2022-04-30 22:54:53 +02:00
Jeroen van Rijn 2081f8fcd6 [tests/core/image] Remove old crappy PPM writer. 2022-04-30 22:04:47 +02:00
Jeroen van Rijn 964ab4814c Merge pull request #1726 from WalterPlinge/image-netpbm
Add Netpbm image format support
2022-04-30 22:01:22 +02:00
Jeroen van Rijn 7a032cf9f9 [pbm] Also test PFM formats. 2022-04-30 21:57:14 +02:00
Jeroen van Rijn 694c13fe86 Merge branch 'master' into pr/1726 2022-04-30 21:01:04 +02:00
Jeroen van Rijn 8bd16c32f3 [pbm] Fixes. 2022-04-30 21:00:32 +02:00
bkrypt be9b935953 Fix indentation 2022-04-30 20:43:22 +02:00
bkrypt 9e69452327 Remove unnecessary value (count) from enum 2022-04-30 20:42:42 +02:00
Jeroen van Rijn 234d529867 [pbm] WIP unit tests. part deux. 2022-04-30 19:25:16 +02:00
Jeroen van Rijn dd8b71e353 [pbm] WIP unit tests. 2022-04-30 17:52:23 +02:00
hikari d24bebdb9e sys/windows: add a couple procedures and tons of constants 2022-04-30 16:55:37 +03:00
Jeroen van Rijn 41a18f078d Merge pull request #1757 from Kelimion/xml
[xml] Add `parse_from_string` overload.
2022-04-30 14:51:46 +02:00
Jeroen van Rijn 3978e7e1ca [xml] Add parse_from_string overload.
`parse` now takes either a `[]u8` slice or a string.
`load_from_file` takes a path string.
2022-04-30 14:43:58 +02:00
gingerBill b758c696f2 Merge pull request #1746 from odin-lang/sync-cond-futex
`core:sync` Improvements
2022-04-30 13:34:16 +01:00
Jeroen van Rijn d6a8216ce4 [pbm] Normalize some errors, correct .depth 2022-04-30 14:34:07 +02:00
gingerBill 2720f64c06 Remove unused imports 2022-04-30 13:28:45 +01:00
gingerBill de2ebdd5cc Merge pull request #1753 from awwdev/master
Fixing some typos in vendor:OpenGL
2022-04-30 13:28:02 +01:00
gingerBill 4e39629a9a Unify implementation for *nix platforms 2022-04-30 13:09:24 +01:00
gingerBill 78a8da5fea Add sync.Parker 2022-04-30 12:37:39 +01:00
gingerBill d5886c1572 Remove the wait group based semaphore implementation
It was a misuse of the data structure
2022-04-30 12:37:14 +01:00
Jeroen van Rijn 7cc759a855 Merge pull request #1756 from ftphikari/master
sys/windows: add a couple of procedures and types
2022-04-30 12:46:11 +02:00
gingerBill dd6337224f Correct explicit atomic orderings 2022-04-30 11:42:28 +01:00
hikari d2bac0c35e sys/windows: fix build issues 2022-04-30 13:40:38 +03:00
hikari 8c7f3fd1e6 sys/windows: change macro and add comment 2022-04-30 13:34:11 +03:00
Jeroen van Rijn ae3deea153 Merge branch 'master' into pr/1726 2022-04-30 12:29:28 +02:00
hikari 40bea95fb0 sys/windows: add GetDCBrushColor 2022-04-30 12:41:04 +03:00
hikari 0ad448f1c7 sys/windows: add a couple of procedures and types 2022-04-30 11:21:37 +03:00
bkrypt 4911df9f99 Remove unneeded semicolons 2022-04-29 21:39:10 +02:00
bkrypt a223340c44 Update vendor/miniaudio to v0.11.9 2022-04-29 21:13:25 +02:00
Jeroen van Rijn 9c9c2b483c [i18n] Enable *nix tests again. 2022-04-29 18:41:21 +02:00
Jeroen van Rijn 819345caa6 Disable i18n test for *nix for now. 2022-04-29 18:28:42 +02:00
Jeroen van Rijn 11ceb3973d Merge pull request #1754 from Kelimion/i18n
[i18n] Fix segfault on cleanup on Linux
2022-04-29 18:20:54 +02:00
Jeroen van Rijn 36263399a0 [i18n] Enable i18n test on Linux. 2022-04-29 18:13:46 +02:00
Jeroen van Rijn ff0f0c447f [i18n] Fix segfault on destroy on Linux
Forgot to intern the section string in QT TS loader.
2022-04-29 18:10:13 +02:00
Jeroen van Rijn aa681932a9 Merge pull request #1336 from Kelimion/i18n
[i18n] Initial i18n support.
2022-04-29 16:27:28 +02:00
Jeroen van Rijn 09e1c0fa27 [i18n] Add tests. 2022-04-29 16:19:13 +02:00
Jeroen van Rijn 957ef8e8fe [i18n/xml] Move I18N XML files to their own assets directory. 2022-04-29 13:16:30 +02:00
Jeroen van Rijn 2e11a8da5b [i18n] Move to core:text/i18n. 2022-04-29 13:02:40 +02:00
awwdev e9cfcf9ecc fix typo in TexImage3D 2022-04-29 11:26:57 +02:00
awwdev 789ab99c4d replaced a few [^]u8 with cstring 2022-04-29 11:21:23 +02:00
Jeroen van Rijn 0297db6f2e Merge pull request #1752 from sduman/patch-1
Add missing result parameter names
2022-04-29 01:21:35 +02:00
sduman 9ce64916e6 Add missing result parameter names
This adds some missing result parameters names back to pop_front_safe.

Currently it the procedure won't compile since it's referencing missing variable names.
2022-04-28 17:08:48 -06:00
Jeroen van Rijn 1289c96e2c [i18n] QT Linguist TS reader. 2022-04-29 00:29:55 +02:00
Jeroen van Rijn ba23bfb7b9 [i18n] Allow multiple sections. 2022-04-28 20:12:32 +02:00
Jeroen van Rijn 2fae6eda23 [i18n] Initial i18n support.
- Add initial GetText .MO parser
- Add translation struct and helpers
- Pluralized lookup

 TODO:
- Support for more translation catalog file formats.
2022-04-28 18:58:49 +02:00
Jeroen van Rijn e53ba3b116 Allow -error-pos-style:default as an alias for odin 2022-04-28 18:18:25 +02:00
Jeroen van Rijn 1ed84a064b Make -error-pos-style case-insensitive. 2022-04-28 18:12:55 +02:00
Jeroen van Rijn 79019c7a09 Merge pull request #1751 from Kelimion/error-pos-style
Fix -error-pos-style:unix
2022-04-28 17:52:47 +02:00
Jeroen van Rijn a1002e6960 Fix -error-pos-style:unix 2022-04-28 17:46:36 +02:00
Jeroen van Rijn 62139cb5a4 Merge pull request #1342 from Kelimion/xml
Initial version of `core:encoding/xml`.
2022-04-28 15:54:28 +02:00
Jeroen van Rijn 127b0ba65e [xml] Enable tests. 2022-04-28 15:46:36 +02:00
Jeroen van Rijn 80878264b6 [xml] Speedup. 2022-04-28 15:29:00 +02:00
gingerBill 9fcba99ca2 Merge pull request #1749 from karl-zylinski/d3d12-binding-fixes
D3D12 binding fixes
2022-04-27 22:16:24 +01:00
Karl Zylinski 03c9212600 Added some additional IID versions of Direct3D 12 UUIDs that I missed during my first pass. All are accounted for now. 2022-04-27 22:30:28 +02:00
Karl Zylinski 5650087aa3 Merge remote-tracking branch 'origin/master' into d3d12-binding-fixes 2022-04-27 20:50:54 +02:00
Karl Zylinski 67689ecb21 Typo fix in d3d12.odin 2022-04-27 20:47:05 +02:00
Karl Zylinski cd13dedb36 D3D12 binding fixes: Added dxgi.IID versions of all the UUIDs in d3d12.odin so that the IIDs can be used to fetch interfaces properly. Also fixed an issue where GetDesc, GetCPUDescriptorHandleForHeapStart and GetGPUDescriptorHandleForHeapStart had the wrong signature due to an old D3D12 header bug, more info: https://stackoverflow.com/questions/34118929/getcpudescriptorhandleforheapstart-stack-corruption 2022-04-27 20:12:44 +02:00
gingerBill 10cd294cf2 Use Acquire semantics for the futex_wait load shortcut 2022-04-27 15:57:47 +01:00
gingerBill d6cfb60506 Remove prev from Atomic_Cond 2022-04-27 15:29:21 +01:00
gingerBill df0df73540 Merge branch 'master' into sync-cond-futex 2022-04-27 15:26:21 +01:00
gingerBill 33f1418dec Merge branch 'master' of https://github.com/odin-lang/Odin 2022-04-27 15:26:02 +01:00
gingerBill 305510bea0 Update intrinsics.odin 2022-04-27 15:25:56 +01:00
gingerBill beb698f31d Merge branch 'master' into sync-cond-futex 2022-04-27 15:21:18 +01:00
Jeroen van Rijn 6df21d6a9f Merge branch 'master' into xml 2022-04-27 16:13:47 +02:00
Jeroen van Rijn c5982e52d5 Merge pull request #1748 from Kelimion/test-assets
Move Odin CI test assets over to its own repository.
2022-04-27 16:04:15 +02:00
gingerBill bd73b2845b Unify default Sema and Atomic_Sema behaviour 2022-04-27 15:03:48 +01:00
Jeroen van Rijn da0f722aad Move Odin CI test assets over to its own repository. 2022-04-27 15:56:45 +02:00
gingerBill 904f0407f8 Add intrinsics.type_is_multi_pointer 2022-04-27 14:53:26 +01:00
gingerBill fbbb0d7610 Update intrinsics.odin for documentation 2022-04-27 14:51:04 +01:00
gingerBill 3a9b0a22e7 Add core:container/intrusive/list 2022-04-27 14:27:33 +01:00
Jeroen van Rijn c4e0d1efa1 Merge branch 'master' into xml 2022-04-27 14:37:15 +02:00
gingerBill 9349dfba8f Add new builtin container_of 2022-04-27 12:39:45 +01:00
gingerBill 9692496989 Add intrinsics.type_field_type 2022-04-27 12:27:53 +01:00
CiD- 5bc8164274 add mremap + flags 2022-04-26 17:11:30 -04:00
gingerBill a6cef2e50e Update LICENSE 2022-04-26 21:47:45 +01:00
Jeroen van Rijn d262eda91c Update Makefile 2022-04-26 15:10:31 +02:00
Jeroen van Rijn 40f0f5ad8d Update CI for math library. 2022-04-26 15:01:09 +02:00
Jeroen van Rijn 1c03e68057 Update CI. 2022-04-26 14:56:28 +02:00
Jeroen van Rijn f1c1cfb6d2 Merge pull request #1747 from Kelimion/filename-merge
Filename generation
2022-04-26 14:52:58 +02:00
Jeroen van Rijn ba5e33bc35 Update CI workflow. 2022-04-26 14:51:16 +02:00
gingerBill 80df9fbc65 Merge pull request #1745 from eisbehr/patch-1
Make allocator in pool_add_task() explicit
2022-04-26 13:49:44 +01:00
Jeroen van Rijn b68ab0dd6d Merge branch 'master' into filename-merge 2022-04-26 14:45:00 +02:00
gingerBill 9cf7a31068 Implement _Sema with Atomic_Sema 2022-04-26 13:44:32 +01:00
Jeroen van Rijn 5e11ad2e1e Update test paths. 2022-04-26 14:23:23 +02:00
gingerBill 07d1a42768 Simplify Atomic_Sema implementation 2022-04-26 13:11:34 +01:00
gingerBill ec8221cb5d Simplify Atomic_Cond implementation 2022-04-26 13:04:50 +01:00
Jeroen van Rijn a5342a0126 Address edge cases. 2022-04-26 13:14:09 +02:00
gingerBill c81fd2e5dd Fix #1644 2022-04-26 11:45:46 +01:00
gingerBill 3bd7122959 Fix #1720 2022-04-26 11:42:01 +01:00
gingerBill 530401e5ee Fix #1729 2022-04-26 11:38:32 +01:00
gingerBill a412d34574 Fix #1740 2022-04-26 11:35:34 +01:00
Florian Behr ee67a0b9a1 reorder procedure parameters to make sure the optional argument in pool_add_task() is last, and the argument order is consistent with pool_init() 2022-04-25 14:08:09 +02:00
Florian Behr ca6a1db757 fix doc comment for pool_init 2022-04-25 13:41:39 +02:00
Florian Behr 1fb76ad768 change usage in demo.odin 2022-04-25 13:41:19 +02:00
Florian Behr e01662c139 Make allocator in pool_add_task() explicit 2022-04-25 13:23:05 +02:00
Jeroen van Rijn 63331ef731 Revert "Merge pull request #1702 from Kelimion/filename_generation"
This reverts commit a40a53b104, reversing
changes made to 5422a3b17e.
2022-04-24 19:53:36 +02:00
Jeroen van Rijn a40a53b104 Merge pull request #1702 from Kelimion/filename_generation
Compiler: Add early error for output path being a directory.
2022-04-24 15:15:51 +02:00
Jeroen van Rijn 9f8d90f466 Update CI paths for issue tests. 2022-04-24 14:28:00 +02:00
Jeroen van Rijn 3d2856db31 Update tests to use new filename generation code. 2022-04-24 14:19:25 +02:00
Jeroen van Rijn f4723aea4c Remove redundant bit for non-Windows. 2022-04-24 13:37:26 +02:00
Jeroen van Rijn 76d48b38d3 Compiler: Allow -out: to not have an extension on *nix for executables (only). 2022-04-24 13:37:26 +02:00
Jeroen van Rijn 3cab2592c3 Compiler: Add early error for output path being a directory.
- Introduce new `Path` type and an array of build paths on the build context.
- Resolve input and output paths/files early (before parsing).
- Error early if inputs are missing or outputs are directories.
- Plumb new file path generation into linker stage instead of its adhoc method.

TODO:
- Remove more adhoc file path generation in parser and linker stage.
- Make intermediate object file generation use new path system.
- Round out and robustify Path helper functions.
2022-04-24 13:37:26 +02:00
Jeroen van Rijn 5422a3b17e Merge pull request #1743 from Tetralux/filepath-stems
[path/filepath] Add file stem and long-extension procedures
2022-04-23 22:33:31 +02:00
Tetralux b44b6e7e50 [path/filepath] Add file stem and long-extension procedures
Adds stem(), short_stem(), and long_ext(); also adds doc-comments to base() and ext().

The 'stem' is usually 'the name' of the file; the basename without the file extension.
To this end, this adds stem(), which is such that:

	stem(path) + ext(path) = base(path)

However, 'file extension' has two different meanings to what constitutes it!

 > What is the extension of: 'name.tar.gz' ?

Colloquially, you would likely think of it as 'a tarball' - which you might think is '.tar.gz'.
But, if you're writing code to process a file of this type, you would first treat it
as a Gzip file, and then treat the result as a TAR file - i.e: '.gz' ... _followed by_ '.tar'.

ext() returns '.gz' here, since that is the most-immediate format that you would need to use
to decode it; it would be a Gzip stream.

Sometimes though, you do actually want to consider these longer file extensions.

Perhaps you're extracting a tarball, and what to know what to call the intermediate tar file;
perhaps you want to check to see if this file is a tarball, or just a Gzip file;
or maybe you just want 'the name' of the file, and not this "strange 'name-and-part-of-the-extension' thing".

So, this also adds short_stem() and long_ext(), such that:

	short_stem(path) + long_ext(path) = base(path)

Thus, we can use either, but the most immediately-useful one is the easiest to reach for:

      stem('name.tar.gz') -> 'name.tar'
       ext('name.tar.gz') -> '.gz'

short_stem('name.tar.gz') -> 'name'
  long_ext('name.tar.gz') -> '.tar.gz'

These procedures are identical to their counterparts when the path only has a simple extension:

      stem('name.txt') -> 'name'
       ext('name.txt') -> '.txt'

short_stem('name.txt') -> 'name'
  long_ext('name.txt') -> '.txt'
2022-04-23 20:25:59 +00:00
Jeroen van Rijn 849efff070 Merge pull request #1741 from Kelimion/shoco
Add Shoco short string compression.
2022-04-22 18:06:31 +02:00
Jeroen van Rijn b022167df1 Remove unused fmt. 2022-04-22 17:56:34 +02:00
Jeroen van Rijn ac9a358c65 [shoco] Replace 2D slices in model with 1D slices. 2022-04-22 17:52:38 +02:00
Jeroen van Rijn e799476f90 [compress/shoco] Add short string compressor. 2022-04-22 16:55:47 +02:00
Jeroen van Rijn b4f8efcbe6 Merge pull request #1739 from ftphikari/master
strings: add levenshtein_distance procedure
2022-04-21 20:31:11 +02:00
hikari f026753692 strings: levenshtein_distance: remove do 2022-04-21 21:19:43 +03:00
hikari 71b1cce517 strings: levenshtein_distance: 64 is actually faster than 256 2022-04-21 21:19:11 +03:00
hikari d8f0da164b strings: levenshtein_distance: improve potential caching 2022-04-21 21:15:11 +03:00
hikari 591732f347 strings: levenshtein_distance: remove costs calculation for default array 2022-04-21 20:58:50 +03:00
hikari eee97f7f62 strings: add levenshtein_distance procedure 2022-04-21 20:49:32 +03:00
Jeroen van Rijn 3dd9da1b66 Merge pull request #1733 from ftphikari/master
sys/windows: add some procedures
2022-04-19 20:41:32 +02:00
Jeroen van Rijn e8c0be23f2 Merge pull request #1737 from Kelimion/fix_json_unmarshal
[json/unmarshal] Fix quoted strings.
2022-04-19 20:40:40 +02:00
Jeroen van Rijn a30b9b17b3 [json/unmarshal] Fix quoted strings. 2022-04-19 20:32:22 +02:00
Jeroen van Rijn 29b2c04766 Revert "Fix unmarshal for escaped strings."
This reverts commit 581255bf23.
2022-04-19 20:11:02 +02:00
Jeroen van Rijn d869ba7bcd Merge pull request #1736 from Kelimion/fix_json_unmarshal
Fix unmarshal for escaped strings.
2022-04-19 20:05:04 +02:00
Jeroen van Rijn 581255bf23 Fix unmarshal for escaped strings. 2022-04-19 20:04:38 +02:00
Jeroen van Rijn b51358a01c Merge pull request #1734 from hanabi1224/lru-alloc-fix
[core:container/lru] Avoid unnecessary allocations
2022-04-19 15:04:49 +02:00
Jeroen van Rijn 323e7a2d02 Add JSON unmarshal test. 2022-04-19 15:03:09 +02:00
Jeroen van Rijn 7654afc2db Revert "Update mem.nil_allocator to match the same in runtime"
The change broke JSON unmarshaling.

This reverts commit 4484a3433d.
2022-04-19 15:01:54 +02:00
hanabi1224 ded8342f3f Reduce allocations 2022-04-19 20:46:33 +08:00
ftphikari 240fb9b953 Merge branch 'odin-lang:master' into master 2022-04-19 06:00:30 +03:00
hikari 4997a43763 Merge remote-tracking branch 'origin/master' 2022-04-19 05:59:42 +03:00
hikari aa4eb35671 sys/windows: add some procedures 2022-04-19 05:58:22 +03:00
Jeroen van Rijn d99ba9c073 Merge pull request #1731 from Kelimion/targa
[image/tga] Writer for RGB(A) 8-bit images.
2022-04-18 23:36:45 +02:00
Jeroen van Rijn fdd24f787f [image/tga] Writer for RGB(A) 8-bit images. 2022-04-18 23:28:34 +02:00
WalterPlinge b6abd691f4 Image: Fix implicit enum error 2022-04-18 20:42:50 +01:00
WalterPlinge 8d370fabdd Added initial Netpbm image format support 2022-04-18 20:29:37 +01:00
Jeroen van Rijn df4a0c62ad Delete accidentally added test artefact. 2022-04-18 19:10:53 +02:00
Jeroen van Rijn e3e3309a9b Merge pull request #1728 from Tetralux/more-slice-helpers
Duplicate some basic slice procedures from core:mem into core:slice
2022-04-18 19:05:20 +02:00
Tetralux 7428e52264 Duplicate some basic slice procedures from core:mem into core:slice 2022-04-18 16:56:45 +00:00
Jeroen van Rijn 20b70c3b7b Merge pull request #1727 from hanabi1224/fix-lru
Fix bugs in core:container/lru
2022-04-18 13:39:23 +02:00
hanabi1224 4247ba67ed Fix bugs in core:container/lru 2022-04-18 15:24:54 +08:00
Jeroen van Rijn e738e93da0 Merge pull request #1723 from ftphikari/master
sys/windows: add timeEndPeriod
2022-04-17 18:27:07 +02:00
hikari b78f3a8069 sys/windows: add timeEndPeriod 2022-04-17 19:17:38 +03:00
Jeroen van Rijn 939973acd7 [QOI] Add to examples/all. 2022-04-17 12:35:34 +02:00
gingerBill ed4cb72b19 Merge pull request #1696 from Despacito696969/master
Fix for `slice_to_components` compilation error
2022-04-16 21:56:13 +01:00
Jeroen van Rijn 70cbffd58b Merge pull request #1722 from Kelimion/varint_streamed
[LEB128] Add byte-at-a-time ILEB decoder.
2022-04-16 18:19:38 +02:00
Jeroen van Rijn 6d0ba8d189 [LEB128] Add byte-at-a-time ILEB decoder. 2022-04-16 18:14:01 +02:00
Jeroen van Rijn b6f3fa6ee1 Merge pull request #1719 from ftphikari/precise_sleep
time: add accurate sleep procedure
2022-04-16 16:52:46 +02:00
Jeroen van Rijn 91037766d2 Update time.odin
Add caveats.
2022-04-16 16:48:08 +02:00
hikari 8bf73950fa time: remove unnecessary yield 2022-04-16 14:36:48 +03:00
hikari 4f4793817c time: fix unix build 2022-04-16 14:35:49 +03:00
hikari 0a0440a6e8 time: yield accurate_sleep instead of relaxing the cpu 2022-04-16 14:08:37 +03:00
hikari b9dc81d808 runtime: update comment description 2022-04-16 13:46:36 +03:00
Jeroen van Rijn 8e7ddccf00 Merge pull request #1717 from ftphikari/master
sys/windows: add procedures and types
2022-04-16 12:38:39 +02:00
Jeroen van Rijn a5773f1657 Merge pull request #1718 from Kelimion/varint_streamed
Add uleb128 byte-at-a-time decoder.
2022-04-16 02:20:07 +02:00
Jeroen van Rijn 44316401c9 Add uleb128 byte-at-a-time decoder. 2022-04-16 02:07:57 +02:00
hikari b05fbaacda time: add accurate sleep procedure 2022-04-16 00:32:17 +03:00
hikari 1b4d5b73ab sys/windows: add some constants 2022-04-15 22:04:34 +03:00
hikari d3fbf36df7 sys/windows: add winmm bindings file 2022-04-15 19:18:22 +03:00
ftphikari de819cff94 Merge branch 'odin-lang:master' into master 2022-04-15 19:16:52 +03:00
hikari cfae39c29d sys/windows: add procedures and types 2022-04-15 19:16:31 +03:00
gingerBill 989641a616 Update Vulkan generation and package 2022-04-15 12:14:12 +01:00
gingerBill fc3f62e3ed Minor rearrangement 2022-04-15 11:50:08 +01:00
gingerBill 6b7c04e046 Improve utilities 2022-04-15 11:33:28 +01:00
gingerBill cfeb16f917 Add more proc groups 2022-04-15 11:20:42 +01:00
gingerBill 9a2d9002e6 Minor fixes and add use of proc groups where better suited 2022-04-15 11:14:59 +01:00
gingerBill ea0b02d9b9 Add Buffer contentsAsSlice and contentsAsType 2022-04-14 16:42:24 +01:00
gingerBill 0d621511e5 Correct signature types 2022-04-14 16:16:53 +01:00
gingerBill e53c858855 Add NS.Block to allow for the creation of block-like lambdas in Odin 2022-04-14 15:47:49 +01:00
gingerBill 8a9f7fc684 Fix #1713 2022-04-14 15:09:03 +01:00
gingerBill 51db46551e Add MetalKit; Add NSApplication NSMenu NSMenuItem; Improve Metal classes 2022-04-14 15:03:47 +01:00
gingerBill 600b79276a Merge pull request #1709 from ap29600/quicksort_fix
Fix tail recursion in `_quick_sort_general`
2022-04-13 11:20:46 +01:00
Andrea Piseri a040be957f Fix tail recursion in _quick_sort_general
The `if` statement should have been a `for` loop, in order to allow recursively
sorting the subarrays with quicksort, and not resort to shell sort after
one step.
2022-04-13 10:55:16 +02:00
Jeroen van Rijn f6fa553572 Merge pull request #1708 from Kelimion/varint_doc
[varint] Clear up doc.odin.
2022-04-13 00:03:58 +02:00
Jeroen van Rijn 8310436350 [varint] Clear up doc.odin. 2022-04-13 00:03:36 +02:00
Jeroen van Rijn f92ffe60e7 Merge pull request #1699 from ftphikari/master
mem: replace size procedures with constants
2022-04-12 20:12:05 +02:00
Jeroen van Rijn de72754d7a Merge pull request #1707 from Kelimion/qoi
[image] Add QOI load/save.
2022-04-12 19:33:11 +02:00
Jeroen van Rijn bf712e9355 [QOI] Add support for RGB images (previously loader always output RGBA).
Also add QOI to CI test suite by roundtripping 8-bit RGB(A) through QOI and checking the hashes match.
2022-04-12 19:23:48 +02:00
Jeroen van Rijn ab9457346d [PNG] Remove debug printf. 2022-04-12 18:26:10 +02:00
Jeroen van Rijn 15b440c4f1 [image] Add QOI load/save.
Additionally:
- Firm up PNG loader with some additional checks.
- Add helper functions to `core:image` to expand grayscale to RGB(A), and so on.

TODO: Possibly replace PNG's post-processing steps with calls to the new helper functions.
2022-04-12 18:14:09 +02:00
CiD- 1a2c36e482 whoops 2022-04-08 13:52:36 -04:00
CiD- 56737c1431 merge upstream/master 2022-04-08 13:50:06 -04:00
CiD- 9ae566adcc commit before fetching upstream/master 2022-04-08 13:45:19 -04:00
gingerBill f2f1330238 Add https://github.com/odin-lang/examples 2022-04-08 10:29:23 +01:00
hikari c4a7739d13 sys/windows: add a couple macros 2022-04-07 19:28:24 +03:00
Mikkel Hjortshøj 8a8b5c753f Update README.md 2022-04-07 16:48:34 +02:00
hikari ad90f416a5 runtime: fix typo 2022-04-07 12:24:53 +03:00
hikari 698fcb7813 mem: replace size procedures with constants 2022-04-06 18:44:43 +03:00
CiD- aadb4db211 avoid temp_allocator on stupidly long paths 2022-04-06 10:53:46 -04:00
gingerBill 426a6a9528 Update nightly.yml to build the directory 2022-04-05 21:10:24 +01:00
Jeroen van Rijn 50b9c48609 Merge pull request #1697 from Kelimion/build_file
Give build/run/check/test/doc a `-file` flag.
2022-04-05 20:52:28 +02:00
Jeroen van Rijn 767ed21bfe -file for tests\issues. 2022-04-05 20:47:37 +02:00
Jeroen van Rijn bb9165edd2 Add -help to CI tests. 2022-04-05 20:45:00 +02:00
Jeroen van Rijn ad0a413b40 Give build/run/check/test/doc a -file flag.
A package has canonically always been a directory, but odin allowing you to build a single-file package confused newcomers who didn't understand why they could then not access variables and procedures from another file in the same directory.

This change disallows building single-file packages by default, requiring the `-file` flag to acknowledge you understand the nuance.

`-help` for these commands also clarifies the difference.

```
W:\Odin>odin build -help
odin is a tool for managing Odin source code
Usage:
        odin build [arguments]

        build   Compile directory of .odin files as an executable.
                One must contain the program's entry point, all must be in the same package.
                Use `-file` to build a single file instead.
                Examples:
                        odin build .                    # Build package in current directory
                        odin build <dir>                # Build package in <dir>
                        odin build filename.odin -file  # Build single-file package, must contain entry point.

        Flags

        -file
                Tells `odin build` to treat the given file as a self-contained package.
                This means that `<dir>/a.odin` won't have access to `<dir>/b.odin`'s contents.
```

```
W:\Odin>odin run examples\demo\demo.odin
ERROR: `odin run` takes a package as its first argument.
Did you mean `odin run examples\demo\demo.odin -file`?
The `-file` flag tells it to treat a file as a self-contained package.
```
2022-04-05 20:26:18 +02:00
Despacito696969 7f6c6945ae Fix for slice_to_components
Using `slice_to_components` wouldn't compile because `s.data` is type of `rawptr` and return type is `^T`
2022-04-05 20:17:47 +02:00
gingerBill ca549939f3 Update README.md 2022-04-05 13:33:25 +01:00
gingerBill cdb003bf23 Add Packages and Nightly Builds to README.md 2022-04-05 13:32:06 +01:00
gingerBill a4d2ff05a9 Merge pull request #1688 from bkrypt/fix_file_windows_open_create_append_order
os/file_windows: Fix "create or append" file open behavior
2022-04-05 12:29:20 +01:00
gingerBill 48012ec73c Merge pull request #1679 from Tetralux/fix-std-handle
Have get_std_handle() no longer make the handles uninheritable
2022-04-05 12:15:14 +01:00
Jeroen van Rijn e7dc00b758 Merge pull request #1695 from ftphikari/master
sys/windows: add Dwmapi.lib binding
2022-04-05 13:10:52 +02:00
hikari ef1fbbbce6 Merge branch 'master' of github.com:ftphikari/Odin 2022-04-05 14:04:03 +03:00
hikari 2a59aebe5b sys/windows: add Dwmapi.lib binding 2022-04-05 14:03:29 +03:00
gingerBill 59025b75ba Merge branch 'master' of https://github.com/odin-lang/Odin 2022-04-04 17:04:12 +01:00
gingerBill 2289b7a33d Remove #caller_location from certain calls in core:container/small_array 2022-04-04 17:04:05 +01:00
Jeroen van Rijn 79ec172797 Merge pull request #1694 from Kelimion/define_help
Add extra help line for define/config.
2022-04-03 21:11:19 +02:00
Jeroen van Rijn 2e6ad2a711 Add extra help line for define/config. 2022-04-03 21:06:06 +02:00
Jeroen van Rijn 6be05f315d Merge pull request #1693 from Skytrias/skytrias-strings-documentation-rest
documentation for the rest of the strings library
2022-04-03 19:54:19 +02:00
Michael Kutowski b5aa50aaa4 documentation for the rest of the strings library 2022-04-03 19:37:54 +02:00
Jeroen van Rijn ab91fa6ad5 Merge pull request #1692 from Kelimion/easy_font
[vendor:easy_font] API improvements.
2022-04-03 19:08:18 +02:00
Jeroen van Rijn 376327c87b [vendor:easy_font] API improvements.
Add `print(x, y, text, color, quad_buffer)` version that takes `[]quad`.
		(Same internal memory layout as []u8 API, but more convenient for the caller.)
Add optional `scale := f32(1.0)` param to `print` to embiggen the glyph quads.

```odin
	// Example for use with vendor:raylib

	quads: [999]easy_font.Quad = ---

	color := rl.GREEN
	c     := transmute(easy_font.Color)color
	num_quads := easy_font.print(10, 60, TEXT, c, quads[:])

	for q in quads[:num_quads] {
		tl    := q.tl.v
		br    := q.br.v
		color  = transmute(rl.Color)q.tl.c

		r := rl.Rectangle{x = tl.x, y = tl.y, width = br.x - tl.x, height = br.y - tl.y}

		// Yes, we could just use the `color` from above, but this shows how to get it back from the vertex.
		// And in practice this code will likely not live as close to the `easy_font` call.
		rl.DrawRectangleRec(r, color)
	}
```
2022-04-03 18:53:27 +02:00
Jeroen van Rijn f8f91e52e0 Merge pull request #1691 from eisbehr/stb_easy_font_fix
Fixes for stb_easy_font
2022-04-03 15:30:52 +02:00
Florian Behr f4daf46ff4 Fixes for stb_easy_font 2022-04-03 15:18:01 +02:00
bkrypt e80bee6867 Change order of O_CREATE & O_APPEND checks 2022-04-02 21:55:01 +02:00
gingerBill d10d54710c Merge pull request #1686 from Kelimion/compile-time-assert
Allow optional message for `#assert`.
2022-04-02 15:02:46 +01:00
gingerBill 1ec997461d Add extra checks to atomic intrinsics 2022-04-02 15:00:28 +01:00
gingerBill ec5fc10988 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-04-02 14:38:51 +01:00
gingerBill a232c0888c intrinsics.atomic_type_is_lock_free 2022-04-02 14:38:42 +01:00
Jeroen van Rijn cb5a6b531a Allow optional message for #assert. 2022-04-02 15:31:50 +02:00
Jeroen van Rijn c930a3b4c8 Merge pull request #1685 from ftphikari/master
sys/windows: add a couple of procedures and types
2022-04-02 12:55:51 +02:00
hikari 4c14e92952 sys/windows: add several procedures and macros 2022-04-02 08:23:12 +03:00
hikari 850d4a1e1b sys/windows: add a couple of procedures and types 2022-04-02 07:38:11 +03:00
CiD- 88de3a1c06 add _chtimes 2022-04-01 22:41:35 -04:00
Jeroen van Rijn dc012ed6dd Merge pull request #1682 from ftphikari/master
sys/windows: add intrinsics.constant_utf16_cstring
2022-04-02 03:27:58 +02:00
Jeroen van Rijn c21c993646 [strings] fix. 2022-04-02 01:54:35 +02:00
gingerBill c3a292a8c7 Remove hms2019 files 2022-04-02 00:36:26 +01:00
Jeroen van Rijn 4044a577cc Merge pull request #1683 from Kelimion/big_nails
[math/big] Tell Python test runner how many nails we use.
2022-04-01 16:33:30 +02:00
Jeroen van Rijn 581d53b96b [math/big] Tell Python test runner how many nails we use.
`_DIGIT_NAILS` is defined as 4, meaning that we use 60 out of every 64 bits.
We can use as few as 1 nail, using 63 bits out of every 64, and all tests will still pass.

However, it needs more testing to see if that's a worthwhile change to make.

For the tests to work properly when changing the nails, Python needs to know about it as well.

In addition, compile the big math code with `-o:speed` going forward.
2022-04-01 16:24:27 +02:00
gingerBill 2bc89260f1 Add explicit memory ordering for the internal Sema implementation 2022-04-01 15:08:58 +01:00
gingerBill c78b83f142 Fix _Sema 2022-04-01 14:51:51 +01:00
hikari e28525e28c sys/windows: fix some procedure definitions and types 2022-04-01 07:28:18 +03:00
hikari 73f9d12d47 sys/windows: add various procedures 2022-04-01 06:22:27 +03:00
hikari b21cf05d44 sys/windows: move L into util.odin 2022-04-01 02:25:10 +03:00
hikari 107bede9fd sys/windows: fix building error 2022-04-01 02:23:44 +03:00
hikari 75cbb09744 sys/windows: add intrinsics.constant_utf16_cstring 2022-04-01 02:11:41 +03:00
Jeroen van Rijn 76cf667a29 Merge pull request #1681 from colrdavidson/fix-nightly
only install the right version of llvm
2022-03-31 22:47:37 +02:00
Colin Davidson 78ee97ec74 only install the right version of llvm 2022-03-31 13:40:28 -07:00
Tetralux c686133172 Have get_std_handle() no longer make the handles uninheritable
This caused all handles returned by GetStdHandle() to also not be inheritable,
which prevents you from handing them to child processes that you might create.

This fixes that.
2022-03-31 17:03:12 +00:00
gingerBill bfcd7a35bf Merge pull request #1621 from colrdavidson/build_freebsd
Core out Makefile, add freebsd building
2022-03-31 16:25:37 +01:00
gingerBill 4484a3433d Update mem.nil_allocator to match the same in runtime 2022-03-31 15:03:56 +01:00
gingerBill 0c4f905d82 Merge pull request #1673 from odin-lang/new-sync
Brand New `package sync` and Atomics Intrinsics
2022-03-31 14:06:00 +01:00
gingerBill 77de7ebde5 Remove code deduplication 2022-03-31 13:26:10 +01:00
gingerBill 2ec3fa93b4 Remove pthreads dependency 2022-03-31 13:10:15 +01:00
gingerBill 9f2d710c35 Change intrinsics.Atomic_Memory_Order fields to use Ada_Case rather than snake_case 2022-03-31 12:57:24 +01:00
gingerBill 22b961ea53 Update Thread Pool in core:thread
Thanks to the work of eisbehr
2022-03-31 11:55:46 +01:00
Jeroen van Rijn 9ea45d35db [ease] Fix flux_stop. 2022-03-31 12:53:04 +02:00
gingerBill 06e8476efc Correct ordering in auto_reset_event_signal 2022-03-31 10:55:18 +01:00
gingerBill 94dbac9a64 Disable thread pool in demo 2022-03-31 01:13:43 +01:00
gingerBill 97a183f412 Clean up thread_windows.odin 2022-03-31 01:13:29 +01:00
gingerBill b2f5b73532 Rename package name to sync 2022-03-31 01:05:50 +01:00
gingerBill 1eac3482a6 Add checks for memory ordering on fences 2022-03-31 01:01:51 +01:00
gingerBill 6636376a81 Correct weak handling 2022-03-31 00:58:01 +01:00
gingerBill ed6bf28004 Update the intrinsics for documentation on atomics 2022-03-31 00:53:34 +01:00
gingerBill 6bc0c611ab Enforce success failure pairings of compare_exchange_*_explicit at compile time 2022-03-31 00:49:53 +01:00
gingerBill ba1930eb01 Update core to use new atomic intrinsics 2022-03-31 00:22:54 +01:00
gingerBill 203382461b Replace the atomic intrinsics
Matching C11 in style
2022-03-31 00:14:49 +01:00
CiD- 6456618891 finish up stat, lstat and fstat 2022-03-30 16:54:29 -04:00
gingerBill 4eb4ae6305 Replace sync with sync2 2022-03-30 17:42:44 +01:00
gingerBill 72ae061769 Add intrinsics.wasm_memory_grow intrinsics.wasm_memory_size 2022-03-30 17:29:37 +01:00
gingerBill 46161f7e19 threading_example allow on Darwin 2022-03-30 16:28:16 +01:00
gingerBill 0c55596f0f Merge pull request #1612 from graphitemaster/fix_thread_data_races
fix thread data races
2022-03-30 16:26:37 +01:00
gingerBill 5f3bfa66c5 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-03-30 16:15:54 +01:00
gingerBill 561b725b0e Improve spin lock for atomic_mutex_lock 2022-03-30 16:15:48 +01:00
gingerBill 3a4630e6b4 Correct atomic_cxchg_* atomic_cxchgweak_* intrinsics behaviour to monotonic on failure for acq, rel, and acqrel 2022-03-30 16:15:23 +01:00
gingerBill abf0fd7efc Merge pull request #1671 from colrdavidson/add_nocrt
Make no crt work on Linux
2022-03-30 12:58:12 +01:00
Colin Davidson a632db3618 Make no crt work on Linux 2022-03-30 04:45:22 -07:00
Jeroen van Rijn a3c81374be Merge pull request #1670 from ftphikari/master
sys/windows: add WM_SYSCOMMAND related constants
2022-03-29 22:11:16 +02:00
hikari 6a3ec5eb36 sys/windows: add WM_SYSCOMMAND related constants 2022-03-29 22:59:45 +03:00
Jeroen van Rijn 740ba6ad47 Merge pull request #1669 from Kelimion/fix_glob_leak
[windows] Fix leak in `glob`.
2022-03-29 16:27:27 +02:00
Jeroen van Rijn df32b5b46c [windows] Fix leak in glob. 2022-03-29 16:13:17 +02:00
Jeroen van Rijn 085fa199ea Merge pull request #1668 from ftphikari/master
sys/windows: add SetTimer() and KillTimer() procedures
2022-03-29 10:09:49 +02:00
hikari 412c9a99d5 sys/windows: add SetTimer() and KillTimer() procedures 2022-03-29 08:56:05 +03:00
Jeroen van Rijn 6e701ef36d Merge pull request #1666 from Kelimion/improve_string_cut
[strings] Improve `cut`, add tests for it.
2022-03-27 22:19:24 +02:00
Jeroen van Rijn 24c48d22bc [strings] Improve cut, add tests for it. 2022-03-27 22:13:26 +02:00
Jeroen van Rijn 3cb8bb6672 Merge pull request #1665 from Kelimion/flux_fixups
[ease] Flux fixups.
2022-03-27 16:55:42 +02:00
Jeroen van Rijn b1c2c0ea7a [ease] Flux fixups. 2022-03-27 16:49:22 +02:00
Jeroen van Rijn 2c498c132e Merge pull request #1663 from Skytrias/skytrias-math-ease
add math easing package
2022-03-27 16:39:25 +02:00
Michael Kutowski 880d330cca update delay to use deltatime, add time left 2022-03-27 16:34:00 +02:00
Jeroen van Rijn a2a503847a Merge pull request #1664 from Skytrias/skytrias-strings-documentation
add string documentation & examples, fix & cleanup string_multi
2022-03-27 13:59:33 +02:00
Michael Kutowski 58f4d533b7 add string documentation & examples, fix & cleanup string_multi 2022-03-27 11:39:17 +02:00
Michael Kutowski d2ff6f424d add math easing package 2022-03-27 11:32:46 +02:00
Jeroen van Rijn 92f985abd5 Merge pull request #1662 from ftphikari/master
sys/windows: add GetSystemMetrics
2022-03-27 03:23:12 +02:00
hikari 3ce17607c6 sys/windows: add AdjustWindowRect and GetWindowRect 2022-03-27 04:17:07 +03:00
hikari 76277f83c1 sys/windows: add GetSystemMetrics 2022-03-27 02:23:40 +02:00
Jeroen van Rijn 2b7529977e Merge pull request #1661 from ftphikari/master
sys/windows: add ClientToScreen
2022-03-27 00:54:44 +01:00
hikari f4125d2d88 sys/windows: add ClientToScreen 2022-03-27 01:42:46 +02:00
Jeroen van Rijn 87e50e5e4d Merge pull request #1660 from Kelimion/hwnd_fix
HWND_TOPMOST, HWND_NOTOPMOST constants
2022-03-26 19:46:28 +01:00
Jeroen van Rijn 86a1c34c3a HWND_TOPMOST, HWND_NOTOPMOST constants 2022-03-26 19:33:53 +01:00
Jeroen van Rijn 3f3cc342b4 Update strings.odin
Fix from Walter.
2022-03-26 18:38:10 +01:00
Jeroen van Rijn 3bf820cf99 Merge pull request #1658 from gitlost/odin_run_unix_exit_code_WEXITSTATUS
Use `WIFEXITED()` and `WEXITSTATUS()` on Unix `system()` exit code
2022-03-26 17:41:41 +01:00
Jeroen van Rijn f2b4087d80 Merge pull request #1656 from ftphikari/master
sys/windows: fix gdi32 raw pointer types
2022-03-26 17:40:00 +01:00
Jeroen van Rijn 3b6d72bb94 Merge pull request #1659 from WalterPlinge/field-iterator
Add fields_iterator procedure
2022-03-25 21:55:43 +01:00
WalterPlinge 9080fa4a9d Update fields_iterator comment
Added ticks for identifiers
2022-03-25 20:51:04 +00:00
WalterPlinge 5616ff9a40 Add fields_iterator proc
Adds a `fields_iterator` proc to `core:strings`
2022-03-25 20:03:39 +00:00
hikari 73b81184fa sys/windows: add MessageBox procedures 2022-03-25 20:53:17 +02:00
hikari f8d3f86d8b sys/windows: fix build 2022-03-25 16:17:53 +02:00
hikari 2f9a410a45 sys/windows: add SetWindowPos() 2022-03-25 16:09:16 +02:00
gitlost 8661457512 Use WIFEXITED() and WEXITSTATUS() on Unix system() exit code
(ensures Odin run returns correct exit code of built executable)
Adds test "tests/core/os/test_core_os_exit.odin" (Unix only)
2022-03-24 19:31:46 +00:00
hikari 5d7b92d391 sys/windows: add mouse states masks 2022-03-24 18:40:23 +02:00
hikari 1d8bc3e917 sys/windows: fix gdi32 raw pointer types 2022-03-24 17:32:11 +02:00
gingerBill a2ad16b609 Merge pull request #1655 from ftphikari/master
sys/windows: add basic Gdi32.lib support
2022-03-24 15:28:24 +00:00
hikari a3b1ac3133 sys/windows: add basic Gdi32.lib support 2022-03-24 17:27:05 +02:00
gingerBill e7b96cf286 Merge pull request #1654 from ftphikari/master
sys/windows: add GetKeyState functions
2022-03-24 14:19:29 +00:00
hikari 01181517dc sys/windows: add GetKeyState functions 2022-03-24 16:04:27 +02:00
gingerBill f702c782f1 Make constant string backing structures use PrivateLinkage compared to InternalLinkage 2022-03-24 12:18:17 +00:00
gingerBill 7203560b06 Fix test 2022-03-24 12:15:03 +00:00
gingerBill 1baeb9406f Utilize union #shared_nil in more places 2022-03-24 12:11:31 +00:00
gingerBill 17e36bd5e1 Utilize union #shared_nil to core:image Error 2022-03-24 12:06:18 +00:00
gingerBill b6b3377786 Remove unneeded semicolons 2022-03-24 12:02:50 +00:00
gingerBill 13cb894b30 Update core:odin for union #shared_nil 2022-03-24 12:00:27 +00:00
gingerBill 3f935bea25 union #shared_nil
This adds a feature to `union` which requires all the variants to have a `nil` value and on assign to the union, checks whether that value is `nil` or not. If the value is `nil`, the union will be `nil` (thus sharing the `nil` value)
2022-03-24 11:55:03 +00:00
gingerBill 3e66eec735 Merge pull request #1653 from ftphikari/master
sys/windows: add virtual keycodes and a couple of constants
2022-03-24 11:29:28 +00:00
gingerBill 277e0ac124 Merge pull request #1651 from gitlost/filepath.split_list_trailing_separator_#1537
Fix issue #1537 "filepath.split_list requires a trailing separator to work"
2022-03-24 11:29:18 +00:00
hikari 2ccfaa7d4e sys/windows: add virtual keycodes 2022-03-23 23:39:26 +02:00
hikari 4bd5de34ea sys/windows: add several of constants 2022-03-23 23:39:09 +02:00
gitlost 374e71e9b0 Fix issue #1537 "filepath.split_list requires a trailing separator"
Does `make()` with `count + 1` and appends final component (note a
  trailing separator will now result in an empty final component)
Adds test "tests/core/path/filepath/test_core_filepath.odin"
2022-03-23 17:44:35 +00:00
gingerBill 07bb93bb5d Merge pull request #1650 from ftphikari/master
sys/windows: fixed calling conventions, added several bindings
2022-03-23 16:27:50 +00:00
CiD- e252d3bedf add os2.name 2022-03-23 11:49:19 -04:00
hikari b9efd09d17 sys/windows: fixed calling conventions, added several bindings 2022-03-23 17:37:38 +02:00
gingerBill 507b718cb3 Merge pull request #1646 from weshardee/master
Add foreign imports for Darwin to vendor:stb
2022-03-23 15:11:13 +00:00
gingerBill 82f9cbecf8 Merge pull request #1649 from gitlost/maps_with_procedure_values_#829
Fix issue #829 "Compiler crashes when declaring maps with procedure"
2022-03-23 15:10:58 +00:00
gingerBill a8ac59a6e7 Merge pull request #1642 from themole/master
Add user32.odin with most basic procedures to core:sys/windows
2022-03-23 15:03:29 +00:00
Holger Lindner 3d389ee028 sys/windows: Add icon resource constants 2022-03-23 15:02:01 +01:00
gitlost 10c5825715 Fix issue #829 "Compiler crashes when declaring maps with procedure"
Inits `o->value` in `check_expr_base_internal()` so doesn't accidentally
  use last (the proc lit was being set to that of previous string)
Adds test to "tests/issues" and changes CI to use new "run" shells
2022-03-23 12:56:37 +00:00
Wes Hardee f89ebce807 Add foreign imports for Darwin to vendor:stb 2022-03-22 15:55:37 -05:00
Holger Lindner 64601ac439 Merge remote-tracking branch 'origin/master' 2022-03-22 17:24:40 +01:00
Holger Lindner edce27812f Nixify line endings 2022-03-22 16:41:07 +01:00
Holger Lindner 193822b45d Merge remote-tracking branch 'ftphikari/master' 2022-03-22 16:36:50 +01:00
Holger Lindner 43640a8b59 Add SendMessageA/W to sys/windows/user32.odin 2022-03-22 16:23:38 +01:00
gingerBill 0446d9721b Merge pull request #1626 from gitlost/hxa_fixes
Fix some core:encoding/hxa stuff (error handling, header, max -> min)
2022-03-22 15:21:40 +00:00
Holger Lindner bae13b6387 Fix incorrect type for wndproc callback procedure 2022-03-21 20:06:50 +01:00
hikari e48c0eee74 sys/windows: added rudimentary User32.lib bindings 2022-03-21 18:44:31 +02:00
Holger Lindner 47e9857eb7 Add user32.odin with most basic procedures to core:sys/windows 2022-03-21 17:20:43 +01:00
gingerBill 559fcfa291 Merge pull request #1632 from gitlost/const_in_if_#1592
Fix issue #1592 "LLVM code gen error when using a constant in an if"
2022-03-21 11:16:59 +00:00
gingerBill 84cee5d9d5 Merge pull request #1640 from Lperlind/split-iterator-byte
Add split_iterator_byte
2022-03-21 10:49:21 +00:00
Lucas Perlind 6d354524e2 * Add split_by_byte_iterator. It functions exactly like split_iterator but takes in a byte seperator rather than a string seperator.
The intention is to provide a faster split parsing if the seperator is known to be byte size.
2022-03-21 21:39:30 +11:00
gingerBill ae6441182d Add core:unicode/utf8/utf8string to examples/all 2022-03-18 23:32:37 +00:00
gingerBill a68f0b2d72 Improve procedure group selection based on the minimum number of arguments 2022-03-18 22:18:12 +00:00
gitlost fdbbf24271 Fix issue #1592 "LLVM code gen error when using a constant in an if"
Changes lb_build_if_stmt() to return null lbValue if condition is
  cmpAnd, cmpOr or non-const neg and check in lb_build_if_stmt()
  to avoid short circuiting if that's the case
Adds test to "tests/issues" and adds step in CI to check this dir
2022-03-18 13:57:22 +00:00
Jeroen van Rijn df233f72a9 Merge pull request #1629 from Lperlind/more-window-bindings
Add unregister_class_a and unregister_class_w for windows bindings
2022-03-18 13:29:53 +01:00
gingerBill bff5a67f79 Merge pull request #1631 from Tetralux/fix
Remove incorrect #packed from sys/windows.STARTUPINFO
2022-03-18 11:52:05 +00:00
Tetralux 4f9df50dc1 Remove incorrect #packed from sys/windows.STARTUPINFO 2022-03-18 11:42:25 +00:00
Lucas Perlind 34187424b8 Add unregister_class_a and unregister_class_w for windows bindings 2022-03-18 19:35:36 +11:00
Jeroen van Rijn 50503cb405 Merge pull request #1628 from StanislavNikolov/fix-math-cumsum-inplace
Fix #1627: Remove wrong return type in cumsum_inplace
2022-03-17 03:35:17 +01:00
Stanislav Ch. Nikolov 5e04ddd653 Fix #1627: Remove wrong return type in cumsum_inplace 2022-03-17 04:20:39 +02:00
gitlost 4f5203e661 Fix some core:encoding/hxa stuff (error handling, header, max -> min)
Also add missing f16 case to core:reflect as_u64 & as_f64
Add tests for above & add previous tests missing from test/core/build.bat
2022-03-16 19:12:00 +00:00
gingerBill d9ca4eb4d6 Add nil check on ast.walk 2022-03-16 11:59:28 +00:00
Jeroen van Rijn 5534c031b3 Merge pull request #1624 from Kelimion/insert_at_fix
[runtime] fix `insert_at` procedure group.
2022-03-15 19:44:05 +01:00
Jeroen van Rijn 19dc84e300 Reinstate NBC. 2022-03-15 19:37:04 +01:00
Jeroen van Rijn a932168f50 [runtime] fix insert_at procedure group. 2022-03-15 19:35:00 +01:00
CiD- 36c22393a4 fix memory leak 2022-03-15 11:47:35 -04:00
CiD- 6d6e840bc2 mkdir_all: WHOOPS 2022-03-14 15:56:41 -04:00
CiD- 4b1822ade8 mkdir_all: close last open file 2022-03-14 15:48:47 -04:00
CiD- b21e7e4518 rewrite mkdir_all 2022-03-14 15:44:34 -04:00
CiD- 1f4e5e919f merge upstream/master 2022-03-14 13:36:22 -04:00
CiD- c293e88f2e commit to merge upstream/master 2022-03-14 13:34:06 -04:00
gingerBill 1d147ba993 Fix typo 2022-03-14 12:44:35 +00:00
gingerBill 6ea9ba16e7 Fix #1610 2022-03-14 12:38:56 +00:00
gingerBill 286549693e Fix #1609 2022-03-14 12:28:28 +00:00
Colin Davidson 34727f99e3 oops, fix report 2022-03-14 05:27:08 -07:00
gingerBill ffe6d81ecd Remove comments 2022-03-14 12:24:10 +00:00
Colin Davidson 8605833781 core out Makefile, add freebsd building 2022-03-14 05:23:48 -07:00
gingerBill 4474144c24 Merge pull request #1505 from jasonKercher/fix_odin_test
fix `odin test`
2022-03-14 12:09:39 +00:00
Jeroen van Rijn ef3f448861 Remove accidentally committed test binary. 2022-03-14 13:06:50 +01:00
gingerBill a882260db6 Merge pull request #1605 from colrdavidson/linux_build
Make llvm-config build more general for linux
2022-03-14 11:39:03 +00:00
gingerBill 633157f4f8 Merge pull request #1613 from semarie/linux_arm64
fix Linux arm64 support
2022-03-14 11:37:45 +00:00
gingerBill 9fa69c3d3b Merge pull request #1599 from gitlost/fract_trunc_classify_#1574
Fix for trunc_f16/32/64 (#1574)
2022-03-14 11:37:11 +00:00
gingerBill 743a461aa9 Merge pull request #1614 from semarie/openbsd-fpos_t
use distinct type for fpos_t on OpenBSD
2022-03-14 11:11:29 +00:00
gingerBill fc0291d745 Merge pull request #1526 from odin-lang/freestanding_amd64
Freestanding target for amd64
2022-03-14 11:09:52 +00:00
gingerBill 77eaf8e1e4 Merge pull request #1617 from semarie/freebsd
freebsd_amd64 support
2022-03-14 11:04:58 +00:00
gingerBill a7adb2fb6e Merge branch 'master' into freestanding_amd64 2022-03-14 11:02:59 +00:00
Sébastien Marie 036900da51 fix mode_t on darwin
- fix mkdir() prototype (mode_t is u16)
- remove explicit cast
2022-03-13 12:41:03 +00:00
Sébastien Marie ed4c9335db enable freebsd_amd64 inside CI 2022-03-13 11:43:36 +00:00
Sébastien Marie ca67cf032c freebsd_amd64 support 2022-03-13 11:42:42 +00:00
gingerBill f907516cbd #Fix 1615 Replace llvm.readcyclecounter with cntvct_el0 on arm64 2022-03-12 10:48:31 +00:00
gingerBill c12c7d5370 Remove tag 2022-03-12 10:47:52 +00:00
Sébastien Marie f7c8b40ea2 use distinct type for fpos_t on OpenBSD 2022-03-12 09:40:55 +00:00
Sébastien Marie 15f9795ab0 enable linux_arm64 check in CI 2022-03-12 09:21:46 +00:00
Sébastien Marie 8982ae34e3 fix linux_arm64
- SYS_fork doesn't exist, uses SYS_clone
- properly cast AT_FDCWD to uintptr
2022-03-12 09:19:52 +00:00
gingerBill e6d3e893a5 Merge pull request #1602 from hoanga/freebsd-build-support
update to build for freebsd
2022-03-12 08:45:53 +00:00
U-JSM\jkercher e008b5a160 build os2 test on windows 2022-03-11 10:47:59 -05:00
Dale Weiler 3da8fa9b27 can use sync.guard here 2022-03-11 08:41:03 -05:00
Dale Weiler 32ba5e7ad2 formatting 2022-03-11 08:36:04 -05:00
Dale Weiler 52df80dccd fix for mac & use atomic store on write side to avoid race 2022-03-11 08:35:23 -05:00
Dale Weiler 7f845bb165 fix for spurious wakeups 2022-03-11 08:30:03 -05:00
Dale Weiler 0e6de5673b fix thread data races 2022-03-11 08:06:23 -05:00
Jeroen van Rijn 7a7b87181d [examples] Add core:encoding/varint to examples/all. 2022-03-11 11:09:58 +01:00
gingerBill c6dc517004 Correct: murmur32 2022-03-11 08:52:16 +00:00
Jason Kercher 0b61215f7b getting tests to run 2022-03-10 11:12:06 -05:00
Jason Kercher b91c0ec715 Merge remote-tracking branch 'upstream/master' into os2_linux 2022-03-10 09:34:48 -05:00
CiD- bad295cf69 add test directory... 2022-03-10 09:23:33 -05:00
Jason Kercher d2bc41a2df Merge remote-tracking branch 'upstream/master' into fix_odin_test 2022-03-09 17:17:40 -05:00
gitlost 7dbcaf792d Merge branch 'master' into fract_trunc_classify_#1574
Resolve conflicts with [9848e88] & sameify Makefile & tests/common/common.odin
2022-03-09 16:09:04 +00:00
Colin Davidson 2652c2d7a5 normalize version parser 2022-03-09 07:42:38 -08:00
Colin Davidson a2250a5d49 lower minimum llvm version 2022-03-09 07:24:49 -08:00
Colin Davidson 7f8a9587e0 more build tweaks? 2022-03-09 07:22:48 -08:00
Colin Davidson 1306c53fb1 more build tweaks? 2022-03-09 07:21:19 -08:00
Colin Davidson 3bd1ac4c82 test adjusting apt arg order 2022-03-09 07:18:41 -08:00
gingerBill dc8d28c383 Fix #1607 2022-03-09 15:15:30 +00:00
Colin Davidson 7adaa4dc2b refix make, adjust build for CI weirdness 2022-03-09 07:15:08 -08:00
gingerBill 6d1a91f5b3 Fix typo 2022-03-09 15:11:38 +00:00
gingerBill 17eebf338c Fix #1606 (Call runtime._cleanup_runtime_contextless() for os.exit) 2022-03-09 15:05:51 +00:00
Colin Davidson c543ecd64c Try to find llvm-config-11 on goofy misconfigured CI box 2022-03-09 06:57:59 -08:00
Colin Davidson 34a9f55f37 Update ci to use build script 2022-03-09 06:52:22 -08:00
Colin Davidson 9aea990184 clean up osx semver handling in build 2022-03-09 06:49:52 -08:00
Colin Davidson d5b0632e4f add handling for too many args 2022-03-09 06:27:52 -08:00
Colin Davidson db169a4334 Cleanup build mode selection 2022-03-09 06:26:25 -08:00
Colin Davidson f5cc8bd7bf only build odin for report when necessary 2022-03-09 06:14:30 -08:00
Colin Davidson 005d52cab7 more spacing issues 2022-03-09 06:08:48 -08:00
Colin Davidson d1477bcfa7 Fix wonky copied space issues 2022-03-09 06:07:19 -08:00
Colin Davidson 3092fb2ff3 Add initial cut of build script 2022-03-09 06:01:40 -08:00
Colin Davidson 5eebdebec8 Make llvm-config build more general for linux 2022-03-09 05:09:39 -08:00
gingerBill 8e4d6b3e5d Fix typo 2022-03-09 11:24:36 +00:00
gingerBill ea9c2fed57 Update .gitignore 2022-03-09 10:52:37 +00:00
gingerBill ba412fd87b Fix typo 2022-03-09 09:36:21 +00:00
Al Hoang 0278ac85a0 update to build for FreeBSD 2022-03-08 23:48:25 -06:00
gingerBill ff60b752bd Replace #if with if where possible 2022-03-08 22:35:10 +00:00
CiD- 832003dd4b os2 tests 2022-03-08 17:15:45 -05:00
gingerBill 9848e883c7 Merge pull request #1598 from Kelimion/varint
Add `core:encoding/varint` with LEB128 encoding, decoding and tests.
2022-03-08 20:46:31 +00:00
Jeroen van Rijn 64705ddd1d [varint] Add doc.odin 2022-03-08 20:08:56 +01:00
Jeroen van Rijn 2a41814985 [varint] Tighten max input bounds. 2022-03-08 19:56:42 +01:00
Jeroen van Rijn 26ffec845b [crypto] Remove unused mem import for siphash. 2022-03-08 19:38:36 +01:00
Jeroen van Rijn 52e60526ef tabs. 2022-03-08 19:32:30 +01:00
Jeroen van Rijn 76b10b5f5d [varint] Add additional LEB128 tests. 2022-03-08 19:28:55 +01:00
gitlost b94a7a87fa Fix issue #1574 "fract in linalg/glm is broken" by fixing
trunc_f16/32/64 in "math.odin" (~ typos on expressions)
Fix classify_f16 Inf test (would fail for subnormal 0h0001)
  by changing multiplier 0.5 -> 0.25
Add some useful consts to "math.odin" (INF_F16 etc)
Add comment to "demo.odin" mentioning that -0.0 must be used
  to specify negative zero
2022-03-08 18:06:25 +00:00
gingerBill 2b43387a9d Merge pull request #1597 from odin-lang/nix-linker-flags-improvement
Refactor link flag creation for nix systems
2022-03-08 17:12:28 +00:00
Jeroen van Rijn e76a5d8e12 [varint] Add signed LEB128 encoding. 2022-03-08 18:07:16 +01:00
Jeroen van Rijn 6d7217f37a [varint] Add LEB128 decoding + tests
Also make tests in general less spammy: Don't print [PASS] for each successful test, only report failures and progress.
2022-03-08 15:40:00 +01:00
gingerBill 17dab04422 Refactor link flag creation for nix systems 2022-03-08 11:13:59 +00:00
gingerBill 29e660b16f Add more things to package slice
min_max
any_of(_proc)
none_of(_proc)
all_of(_proc)
count(_proc)
2022-03-08 10:02:40 +00:00
gingerBill 31959b0751 Correct cleanpath_from_handle for os.fstat 2022-03-08 10:01:44 +00:00
jasonkercher 1f19610fd6 added _remove_all 2022-03-07 17:16:03 -05:00
gingerBill 8f897de267 Merge pull request #1584 from WalterPlinge/vulkan-proc-loader-functions
update vulkan generator and procedure file
2022-03-07 18:54:26 +00:00
Jeroen van Rijn 2855ff6df3 Merge pull request #1591 from Kelimion/unaligned_load
[intrinsics] Add existing `unaligned_load` and `unaligned_store`.
2022-03-06 14:59:24 +01:00
Jeroen van Rijn deed20dea6 [intrinsics] Add unaligned_store. 2022-03-06 14:53:06 +01:00
Jeroen van Rijn a6c5143993 [intrinsics] Add existing unaligned_load. 2022-03-06 14:46:20 +01:00
Jeroen van Rijn 758d1e2a03 Merge pull request #1589 from Kelimion/fix_bit_array_leak
[bit_array] Really fix the leak.
2022-03-06 12:38:08 +01:00
Jeroen van Rijn ce057ff755 [bit_array] Really fix the leak. 2022-03-06 12:29:17 +01:00
gingerBill ad719e7c3a Merge pull request #1588 from ap29600/master
Fix leak in `core:container/bit_array`
2022-03-06 09:43:12 +00:00
Andrea Piseri bff3426d25 Fix leak in core:container/bit_array
calling `clear` on a `bit_array` no longer leaks the previous
allocation, instead it sets all bits to `false` preserving the same
backing dynamic array.
2022-03-06 10:21:46 +01:00
gingerBill 4315033220 Merge pull request #1585 from kstrb/foreign-import-object
Linux: allow 'foreign import' of object files
2022-03-05 20:29:39 +00:00
kstrb 1cd89b2da3 Linux: allow 'foreign import' of object files 2022-03-05 17:28:34 +01:00
jasonkercher 658a605c75 compiles 2022-03-04 17:11:53 -05:00
WalterPlinge 7e8b9862b9 update vulkan generator
change procedure file generation
- group procedure types together
- sort groups by procedure names
- overload function `load_proc_addresses`
    - kept original as `custom`
    - added `global`, `instance`, and `device` variants for simpler loading
    - added `device_vtable` variant to support multiple devices
2022-03-04 16:16:31 +00:00
gingerBill 07062324d7 Merge pull request #1575 from jockus/fix_relative_slice_len
Add relative slice to type checks for built in len
2022-03-04 11:48:29 +00:00
gingerBill 2e8f2e6dbc Merge pull request #1476 from odin-lang/odin-ast-changes
Replace `any` with `union` for subtyping in `core:odin/ast`
2022-03-04 10:39:38 +00:00
gingerBill 1abd95094d Add reflect.deref 2022-03-03 23:25:22 +00:00
gingerBill 913d802e33 Fix ast.clone_node 2022-03-03 23:10:38 +00:00
Jeroen van Rijn bee475c38a Merge pull request #1582 from semarie/more-ci
CI: add linux i386, Darwin arm64 and Windows 386
2022-03-03 17:07:40 +01:00
Jeroen van Rijn b4ca99ead9 Merge pull request #1583 from semarie/semi-colons-eof
Semi colons and EOF
2022-03-03 17:06:13 +01:00
Sébastien Marie dfe2c0a600 remove some leftover semi-colons before EOF 2022-03-03 15:57:55 +00:00
Sébastien Marie fad851d80c check for semi-colon before EOF too 2022-03-03 15:57:51 +00:00
Sébastien Marie 832961d539 semi-colons are deprecated in core 2022-03-03 15:36:04 +00:00
Sébastien Marie 499c657ffa rename architecture from 386 to i386 2022-03-03 15:28:18 +00:00
CiD- e51bb4ef12 os2 linux begin 2022-03-03 10:16:36 -05:00
Sébastien Marie 8c6f39a68d CI: add linux i386, Darwin arm64 and Windows 386 2022-03-03 15:08:34 +00:00
gingerBill 09f5713cf8 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-03-03 14:31:45 +00:00
Jeroen van Rijn 26c0c6a525 Merge pull request #1581 from Kelimion/32-bit-fixes
32 bit fixes
2022-03-03 15:26:42 +01:00
Jeroen van Rijn 6d9f84ba03 [tests] Make test runners exit with errorlevel 1 if a test fails. 2022-03-03 15:16:16 +01:00
Jeroen van Rijn 8af08f2153 [compress] 32-bit cleanness. 2022-03-03 15:10:19 +01:00
gingerBill 2944969ca0 Correct clone_node 2022-03-03 14:01:37 +00:00
gingerBill bd1b54e0db Fix #1503 2022-03-03 13:58:22 +00:00
gingerBill fcab5508be Merge branch 'master' into odin-ast-changes 2022-03-03 13:56:34 +00:00
gingerBill 0b05650366 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-03-03 13:54:31 +00:00
gingerBill 96e36c7c39 Minor fix to strconv.unquote_string 2022-03-03 13:54:23 +00:00
gingerBill 16c6dbcbe5 Merge pull request #1579 from semarie/vendors
Vendors libraries portability and examples/all splitting
2022-03-03 12:09:46 +00:00
gingerBill 92a78c83d9 Merge pull request #1571 from SrMordred/patch-4
Fixing bindings
2022-03-03 12:08:17 +00:00
gingerBill 6b2302fa8b Merge pull request #1572 from Lperlind/better-fmt
Improve core:fmt formatting
2022-03-03 12:07:14 +00:00
gingerBill ee28945e09 Update FUNDING.yml 2022-03-03 11:19:12 +00:00
Sébastien Marie 3dcea60f5b vendor: ENet: follow strict-style and remove optional semi-colon 2022-03-03 09:27:10 +00:00
Sébastien Marie f126e05034 stb, miniaudio: use default builtin variables of make for CC and AR 2022-03-03 07:36:47 +00:00
gingerBill 68b74eb7c7 Merge pull request #1577 from zhibog/crypto_rand_windows
Added rand_bytes for Windows in core:crypto
2022-03-02 23:10:31 +00:00
zhibog 3b4199a669 Added rand_bytes for Windows in core:crypto 2022-03-02 21:22:56 +01:00
Sébastien Marie 562901aedf split all_vendor.odin
create 3 files:
- all_vendor.odin : no specific OS
- all_vendor_directx.odin : directx vendor, windows-only
- all_vendor_stb.odin : stb vendor, windows and linux only

stb could technically be used on others OS. but it is shipped upstream as set of c-files without unified library name.
2022-03-02 19:21:22 +00:00
Sébastien Marie 793117ed63 vendor: sdl2: simplify foreign import 2022-03-02 18:50:37 +00:00
Sébastien Marie 5b783d6376 vendor: raylib: simplify foreign import 2022-03-02 18:44:29 +00:00
Sébastien Marie d3f3528d1d vendor: portmidi: simplify foreign import 2022-03-02 18:43:17 +00:00
Sébastien Marie 3145935d6b miniaudio
- simplify foreign
- enable SUPPORT_SNDIO on OpenBSD
- correct ptr type for SUPPORT_PULSEAUDIO (Linux) and SUPPORT_COREAUDIO (Darwin)
2022-03-02 18:35:13 +00:00
Sébastien Marie 25430333ba vendor: glfw: simplify foreign import 2022-03-02 18:25:22 +00:00
Sébastien Marie 2ca2b32dd0 vendor: botan: simplify foreign import 2022-03-02 18:21:43 +00:00
Joakim Hentula a5dde78f08 Add relative slice to type checks for built in len 2022-03-02 16:44:33 +00:00
gingerBill fd415f0b45 Merge pull request #1573 from semarie/openbsd-vendor
Openbsd vendor
2022-03-02 12:56:12 +00:00
Lucas Perlind 507722954c Improve core:fmt formatting
* Strings will respect widths smaller than the string's length
* Strings are right justified by default like integers
* Strings accept '-' flag to be left justified
* Booleans will be formatted like strings
* Enums will be formatted like strings
2022-03-02 16:22:16 +11:00
Patric Dexheimer 524d23d45d Update raylib.odin 2022-03-01 16:55:34 -03:00
Patric Dexheimer e9ee6f5291 Fixing bindings
https://github.com/raysan5/raylib/blob/master/src/raylib.h#L1179
2022-03-01 16:00:18 -03:00
gingerBill 7e5342f41f Use contextless where possible 2022-03-01 15:52:14 +00:00
gingerBill 18607e53cb Correct alloc_from_memory_block 2022-03-01 15:38:04 +00:00
gingerBill ed933b3f21 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-03-01 14:49:11 +00:00
gingerBill 49fecbdc5e Improve error message when there is "no field" found for a large anonymous struct 2022-03-01 14:49:05 +00:00
Jeroen van Rijn f971126183 [mem] Add missing \n to tracking allocator example. 2022-03-01 13:51:41 +01:00
gingerBill d4ccb69ccc Check if directory exists with the same target executable name when building a directory 2022-02-28 21:49:19 +00:00
Sébastien Marie 37b4e0de6c sdl2: add openbsd support 2022-02-28 16:17:15 +00:00
Sébastien Marie 737f440c7f glfw: add openbsd support 2022-02-28 16:17:14 +00:00
Sébastien Marie cba3f1e374 ENet: add openbsd support 2022-02-28 16:17:14 +00:00
gingerBill a70dde34da Merge pull request #1565 from semarie/openbsd-pie
openbsd: defaults to PIE executable
2022-02-28 16:11:59 +00:00
gingerBill 410b85b5c7 Disallow @(thread_local) on wasm targets 2022-02-28 15:40:00 +00:00
gingerBill 0ae012ba08 Correct comment 2022-02-28 15:37:15 +00:00
gingerBill fc4eb4152c Correct calling convention for _startup_runtime 2022-02-28 15:35:10 +00:00
gingerBill 4f3b5d8dcb Clean up generate_minimum_dependency_set code 2022-02-28 15:29:08 +00:00
Sébastien Marie f76f70c7cf openbsd: defaults to PIE executable
OpenBSD uses PIE code by default to allow the system to load the binary at a random location.

don't pass -no-pie to preserve this behaviour, and build objects with -fPIC (LLVMRelocPIC).
2022-02-28 15:24:22 +00:00
gingerBill 15d783e920 Enforce -no-entry-point on freestanding targets 2022-02-28 15:13:41 +00:00
gingerBill 09e4fff5b1 -target-features:<string>
This just passes a string directly to the LLVM features string
2022-02-28 15:08:50 +00:00
gingerBill 2d89faa17c Add extra checks for -disallow-rtti 2022-02-28 14:35:38 +00:00
gingerBill dd9843aa21 Merge pull request #1557 from semarie/openbsd-support
initial OpenBSD support
2022-02-28 14:23:56 +00:00
gingerBill 882116e358 Only allow -disallow-rtti on freestanding targets 2022-02-28 14:00:44 +00:00
gingerBill f3adbae1ed Merge branch 'freestanding_amd64' of https://github.com/odin-lang/Odin into freestanding_amd64 2022-02-28 13:40:06 +00:00
gingerBill 278e239973 Commit rest of code for -disallow-rtti 2022-02-28 13:40:01 +00:00
gingerBill fda803b46a Commit rest of code for -disable-rtti 2022-02-28 13:39:27 +00:00
gingerBill 01162e08b5 Add -disallow-rtti 2022-02-28 13:35:29 +00:00
gingerBill a7ae197a55 Merge branch 'master' into freestanding_amd64 2022-02-28 13:02:31 +00:00
gingerBill 3c72cb67d3 Remove context.user_data 2022-02-28 13:00:32 +00:00
gingerBill 37bba4c0a6 Reorganize error check procedures 2022-02-28 12:45:19 +00:00
gingerBill ab9d1f99fd Change #c_vararg checking to only disallow odin calling conventions 2022-02-28 12:36:21 +00:00
gingerBill 45124e4d5c Merge branch 'master' into freestanding_amd64 2022-02-28 12:32:51 +00:00
gingerBill 7681c43b14 Show error message when something like this is done test: proc() : {} 2022-02-28 12:12:04 +00:00
gingerBill 7e43cd7d97 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-02-28 12:06:42 +00:00
gingerBill c223fc1766 Correct debug information for local variables 2022-02-28 12:06:35 +00:00
Sébastien Marie 04297bb680 ci: add check for OpenBSD amd64 2022-02-26 14:18:37 +00:00
Sébastien Marie 553292ffd0 vendor: botan: add OpenBSD support 2022-02-26 08:47:58 +00:00
Sébastien Marie 57862846a2 tests/vendor: pass extra linker flags
on OpenBSD, botan library is third-party and live in /usr/local which isn't a path included by default in linker.
2022-02-26 08:21:46 +00:00
Sébastien Marie 8e270d3a99 openbsd: poor man implementation for getting executable path
it tries to get executable path from argv[0]. it is unreliable and unsecure, but should be fine enough for the considered use-case. it still doesn't address all possible cases.
2022-02-26 08:19:41 +00:00
Sébastien Marie ae5cb09041 internal_odin_root_dir: readlink could fail 2022-02-25 17:59:57 +00:00
gingerBill 093b2288c3 Merge pull request #1320 from mohd-akram/custom-llvm-config
Allow custom LLVM_CONFIG
2022-02-25 15:57:53 +00:00
Mohamed Akram ffe17a471d Allow custom LLVM_CONFIG 2022-02-25 19:40:42 +04:00
gingerBill e9f901b82d Keep -vet happy 2022-02-25 15:30:24 +00:00
gingerBill ed3004f8a0 Correct read_console reading 2022-02-25 15:30:05 +00:00
gingerBill d97df080f9 Revert change 2022-02-25 15:08:02 +00:00
gingerBill 0e5c7e08fc Change < to <= 2022-02-25 14:54:35 +00:00
Sébastien Marie 83523badb7 pass -ldl only on Darwin and Linux 2022-02-25 13:02:12 +00:00
Sébastien Marie 0a90994403 provide a simple gb_file_copy() implementation
permit to not require sendfile(2) syscall for gb_file_copy()
2022-02-25 12:32:34 +00:00
gingerBill 376906e0ae Merge branch 'master' of https://github.com/odin-lang/Odin 2022-02-25 12:02:49 +00:00
gingerBill 47c79a2f25 Correct os.read on windows for os.stdin 2022-02-25 12:02:41 +00:00
gingerBill 32988b0363 Correct internals for os.read on windows (read_console) for os.stdin (Fix #1556) 2022-02-25 12:01:53 +00:00
Sébastien Marie 00c138ce9f add RAM information inside report 2022-02-25 09:28:04 +00:00
Sébastien Marie 5676c9e7eb initial OpenBSD support 2022-02-25 08:49:25 +00:00
Jeroen van Rijn 3a469dc13e Merge pull request #1549 from semarie/clone_to_cstring-leak
delete allocated memory with clone_to_cstring
2022-02-24 12:42:15 +01:00
Sébastien Marie d3c70f2206 remove the optional ; in os_freebsd.odin 2022-02-24 11:30:33 +00:00
Sébastien Marie 14f1793b3e use context.temp_allocator instead of general allocation + delete()
where clone_to_cstring is used with foreign code, it is prefered to use `context.temp_allocator` instead of using the general allocator and manually delete the memory after use.
2022-02-24 11:28:42 +00:00
Jeroen van Rijn 8cecb6b9f5 Merge pull request #1548 from colrdavidson/darwin_docs
Add make_directory so darwin can build html docs
2022-02-24 11:51:20 +01:00
Jeroen van Rijn 4a66c3c420 Merge pull request #1546 from zacharycarter/patch-2
adding `is_16_bit_from_memory` to stbi
2022-02-24 11:49:08 +01:00
gingerBill c3c88633a5 Merge pull request #1545 from AquaGeneral/master
Added options to help, and improved wording
2022-02-24 10:15:13 +00:00
Colin Davidson aeaf1199ec Add make_directory so darwin can build html docs 2022-02-24 01:13:51 -08:00
Tail Wag Games d4f62f52db adding is_16_bit_from_memory to stbi 2022-02-24 00:20:15 -06:00
Jesse Stiller 384fb76a1b Added options to help, and improved wording 2022-02-24 12:59:06 +10:00
FancyKillerPanda e139d1cbe4 Removed //+build ignore from tests/core/math/big/test.odin. 2022-02-24 12:45:03 +11:00
FancyKillerPanda cb04116caf Emit a parser warning when encountering an unknown tag. 2022-02-24 12:27:52 +11:00
FancyKillerPanda 62ff8daa78 Changed //+ignore to //+build ignore. 2022-02-24 12:23:54 +11:00
gingerBill 4a04a32e0a Change target name to freestanding_amd64_sysv 2022-02-23 11:33:28 +00:00
gingerBill 196bd735d4 Replace local @(no_red_zone) with global -disable-red-zone 2022-02-23 11:29:36 +00:00
gingerBill 493bc653b5 Add @(no_red_zone) for procedures 2022-02-23 11:23:27 +00:00
gingerBill 3d209798c9 Add help docs for -reloc-mode:<string> 2022-02-23 11:19:51 +00:00
Jeroen van Rijn dd0d61e97c Merge pull request #1528 from Tetralux/split-docs
Add doc comments to strings.split() and strings.split_n()
2022-02-23 12:13:29 +01:00
gingerBill 4b9324ff76 Merge branch 'master' into freestanding_amd64 2022-02-23 11:03:48 +00:00
gingerBill e81ed9a960 Add "Did you mean" to Objective-C fields 2022-02-22 23:19:49 +00:00
gingerBill 83f7a887b7 Move comment 2022-02-22 23:03:04 +00:00
gingerBill ad2f1ac24e Improve union_tag_size 2022-02-22 23:01:28 +00:00
gingerBill 62d232d798 Correct ExactValue_Pointer 2022-02-22 22:59:00 +00:00
gingerBill 8906a0120c Merge branch 'master' of https://github.com/odin-lang/Odin 2022-02-22 22:53:19 +00:00
gingerBill cad753e398 Simplify parse_binary_expr 2022-02-22 22:53:13 +00:00
Jeroen van Rijn fd627dc13b Merge pull request #1535 from zhibog/add-siphash
Added SipHash + tests and fixed remaining semicolons in vendor/botan
2022-02-22 20:34:50 +01:00
zhibog 70e8d97ee1 Fix procedure 2022-02-22 20:13:49 +01:00
zhibog cdecb0ccc3 Fix Odin_OS_Type 2022-02-22 20:10:35 +01:00
zhibog 460b5149af Added missing constants 2022-02-22 20:06:52 +01:00
zhibog b6dc253d8b Add generic procedure for default SipHash 2-4 2022-02-22 20:02:34 +01:00
zhibog e7be9493ba Added SipHash + tests and fixed remaining semicolons in vendor/botan 2022-02-22 19:56:07 +01:00
Jeroen van Rijn ea34f321ed Merge pull request #1533 from odin-lang/bug_report
[report] Fix `odin report` crash if `/usr/lib/os-release` doesn't exist.
2022-02-22 17:14:24 +01:00
Jeroen van Rijn 2b5bc1d558 [report] Fix odin report crash if /usr/lib/os-release doesn't exist. 2022-02-22 17:08:57 +01:00
gingerBill e6a7b85da4 Correct types 2022-02-21 20:49:59 +00:00
gingerBill 6145185478 Add missing return types 2022-02-21 16:04:56 +00:00
gingerBill 6630d703f8 Clean up ok or error handling 2022-02-21 13:42:29 +00:00
gingerBill 9c3cdc4620 Start filling in the file_windows.odin procedures 2022-02-21 13:38:25 +00:00
gingerBill 345032f804 Get env stuff working on Windows 2022-02-21 12:35:52 +00:00
Tetralux 2abba6e057 Don't use leading asterisks 2022-02-21 09:51:03 +00:00
Tetralux db5a1b0c78 Add doc comments to strings.split() and strings.split_n() 2022-02-21 09:23:45 +00:00
gingerBill 14cb19c2df Update fmt to record the bytes written in the fmt.Info 2022-02-20 22:31:13 +00:00
gingerBill 46bcd18946 Merge pull request #1519 from colrdavidson/hyperspeed_file_size
Maintain a running count printed, so fprintf returns correct sizes for non-files
2022-02-20 22:16:27 +00:00
gingerBill 3e5c60f746 Add -reloc-mode:<string> 2022-02-20 14:48:12 +00:00
gingerBill 0fa487f468 Add -foreign-error-procedures 2022-02-20 14:27:44 +00:00
gingerBill 1bec9e5331 Add freestanding_amd64_gnu 2022-02-20 14:19:52 +00:00
gingerBill ba61d911da Remove dead code 2022-02-20 13:26:27 +00:00
Jeroen van Rijn 3b69c6b204 Merge pull request #1521 from SrMordred/patch-3
Memory Leak
2022-02-20 11:54:31 +01:00
Patric Dexheimer d7eabf571c Memory Leak
`dir` will leak memory if u use it with allocators that don´t care in freeing the memory at the end ( like arenas or the temp_allocator ) , because `strings.clone` and `strings.concatenate` are not using the passed allocator.
2022-02-20 02:10:34 -03:00
Colin Davidson ddf9c4a65b switch to passing total_size to the io.writers 2022-02-19 16:38:33 -08:00
Colin Davidson b3d797598e fprintf tweaked to avoid calling file_size 2022-02-19 15:51:11 -08:00
gingerBill 31c7945444 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-02-19 15:45:08 +00:00
gingerBill 276e014d18 Update comment in demo.odin 2022-02-19 15:45:01 +00:00
Jeroen van Rijn 27f206784c Merge pull request #1514 from colrdavidson/fast_file_size
Use the _unix_fstat pointer to avoid 144B copies on fileIO
2022-02-19 12:17:03 +01:00
Colin Davidson 54a6637d38 Use the _unix_fstat pointer to avoid 144B copies on fileIO 2022-02-18 20:50:49 -08:00
gingerBill 23be56af59 Remove prefixes from D3D12 constants 2022-02-18 21:45:20 +00:00
gingerBill 71df46456a Minimize memory usage by having an arena per thread rather than an arena per file 2022-02-18 21:30:25 +00:00
gingerBill cd89d8a3c4 Add better error message for compiler when OOM happens 2022-02-18 16:24:08 +00:00
gingerBill 4c62a32b04 Keep -vet happy 2022-02-18 16:13:52 +00:00
gingerBill 5f8137025d Use try_to_add_package_dependency 2022-02-18 16:12:21 +00:00
gingerBill 1843d52217 Fix typo 2022-02-18 16:07:06 +00:00
gingerBill 454c92dc64 Allow objc intrinsics within odin check and odin docs but disallow for odin build 2022-02-18 16:05:26 +00:00
gingerBill 7e33a86d54 Remove unneeded semicolon 2022-02-18 16:01:11 +00:00
gingerBill 197b832992 Add vendor:directx and vendor:darwin packages for documentation generation 2022-02-18 15:56:53 +00:00
gingerBill 8f13724a4b Merge pull request #1504 from odin-lang/directx-packages
DirectX Package Support
2022-02-17 23:15:38 +00:00
gingerBill 746d5fc322 Correct D3D packages 2022-02-17 20:48:50 +00:00
gingerBill ffc45e8cc2 Add intrinsics.constant_utf16_cstring 2022-02-17 20:48:37 +00:00
CiD- bea2f36443 improve entry point check logic 2022-02-17 10:48:30 -05:00
gingerBill f138f71fa6 Add UUID pointer values 2022-02-17 13:14:21 +00:00
Jeroen van Rijn 89b7a3f7ac Merge pull request #1506 from zacharycarter/patch-1
Adding capture procedures to user32
2022-02-17 13:59:52 +01:00
gingerBill 75e15b05b0 Correct alias 2022-02-17 12:46:04 +00:00
Tail Wag Games 78eb388110 Adding capture procedures to user32
Adding `GetCapture`, `SetCapture` and `ReleaseCapture` functions - https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setcapture
2022-02-17 00:58:38 -06:00
CiD- df23cf47c6 fix odin test 2022-02-16 22:08:39 -05:00
gingerBill 002ac6a1b7 Add vendor:directx packages: dxgi, d3d11, and d3d12
TODO: enums marked with `bit_set` may need conversions
2022-02-16 21:26:34 +00:00
Jeroen van Rijn 40e4536887 Merge pull request #1502 from colrdavidson/mainline-fast
avoid memset on stats
2022-02-16 17:24:29 +01:00
Colin Davidson 536bf61323 avoid memset on stats 2022-02-16 08:14:11 -08:00
gingerBill c76bdced55 Merge branch 'master' into directx-packages 2022-02-16 16:05:46 +00:00
gingerBill 459ea5f4f6 Fix typo 2022-02-16 16:05:28 +00:00
gingerBill 8e8a075a22 Merge branch 'master' into directx-packages 2022-02-16 16:04:20 +00:00
gingerBill db6bd9b358 Allow sysv and win64 calling conventions to be used on any platform on amd64 2022-02-16 16:03:49 +00:00
gingerBill 42ad54c28e Improve metadata for context 2022-02-16 15:18:22 +00:00
gingerBill 1857bc7b02 Improve slice bounds checking runtime error messages 2022-02-16 14:51:54 +00:00
gingerBill e011d812ca Improve debug information for direct procedure parmaters 2022-02-16 14:39:08 +00:00
gingerBill 0738822dda Change how parameter and variables are given debug values 2022-02-16 13:25:31 +00:00
gingerBill 2213722776 Change debug declare to value 2022-02-16 12:37:22 +00:00
gingerBill 65dedbb1ca Add #subtype struct field prefix, required to have a COM interface hierarchy 2022-02-16 11:54:15 +00:00
gingerBill 0e69993d39 Add init and copy to all Objects 2022-02-16 00:17:07 +00:00
gingerBill 135091ddbe Correct import paths 2022-02-16 00:14:16 +00:00
gingerBill d64e3b672c Add darwin build tags 2022-02-16 00:12:31 +00:00
gingerBill a3bcacee27 Move Objective-C libraries located in core:sys/darwin/* to vendor:darwin/* 2022-02-16 00:06:25 +00:00
Jeroen van Rijn 855e7beab1 Merge pull request #1488 from colrdavidson/master
Add fork and personality
2022-02-15 21:04:09 +01:00
gingerBill edc13c29df Merge pull request #1331 from DanielGavin/parser-fault-recovery
Recover from closing brace not found in field list
2022-02-15 16:26:16 +00:00
gingerBill 21864d8d51 Improve BAD ENUM VALUE message in fmt #1496 2022-02-15 16:25:28 +00:00
gingerBill d45ff0694d Merge pull request #1438 from odin-lang/odin-global-constants-as-enums
Odin global constants as enums
2022-02-15 16:18:07 +00:00
gingerBill d695a8a526 Update os_darwin.odin 2022-02-15 16:02:14 +00:00
gingerBill 0380a288a9 Minor fix for -vet 2022-02-15 15:58:44 +00:00
gingerBill 1d4d0a3e1a Strip unneeded semicolons 2022-02-15 15:56:11 +00:00
gingerBill 9e98494fff Merge pull request #1482 from odin-lang/objc-intrinsics
Improve support Objective-C code through intrinsics and Metal API
2022-02-15 15:48:56 +00:00
gingerBill 86d334282c Merge pull request #1445 from Platin21/feature/darwin_systemcalls
Feature/darwin svc/syscall wrappers+id's
2022-02-15 15:48:20 +00:00
gingerBill 9cf937fef0 Merge pull request #1430 from DanielGavin/parser-fix
Fix return stmt when it's one lined(check for close brace).
2022-02-15 15:47:40 +00:00
gingerBill f5697dd7f2 Merge branch 'master' into odin-global-constants-as-enums 2022-02-15 15:47:24 +00:00
gingerBill a23ee1edc1 Merge pull request #1500 from thePHTest/master
Add 'odin run -help' info for specifying args
2022-02-15 15:46:27 +00:00
gingerBill 9dcb5c075a Merge pull request #1474 from Kelimion/tracking-example
mem: Add `doc.odin` with `Tracking_Allocator` example.
2022-02-15 15:46:19 +00:00
gingerBill 803648be89 Minor aesthetic clean ups of Foundation 2022-02-15 15:34:07 +00:00
gingerBill 3ab5db8297 Add README.md 2022-02-15 15:17:21 +00:00
gingerBill 3380ece4a1 Add utility calls for creating buffers from slices 2022-02-15 15:16:48 +00:00
gingerBill 0e5928ff39 Correct pseudo selector code generation 2022-02-15 15:16:30 +00:00
Phil H e6e04fc6c8 Add 'odin run -help' info for specifying args 2022-02-14 22:15:55 -08:00
gingerBill 753cceea82 Minor changes to method names on NS.String 2022-02-14 18:34:55 +00:00
gingerBill 32c7e81745 Use objc_allocateClassPair for intrinsics.objc_register_class 2022-02-14 18:32:10 +00:00
gingerBill 03aec70287 Change objc_class_name to objc_name with objc_is_class_method 2022-02-14 17:31:55 +00:00
gingerBill e69738c079 Minor style change 2022-02-14 17:23:14 +00:00
gingerBill 1afa7967f2 Fix method names 2022-02-14 17:09:30 +00:00
gingerBill 643e36b87b Improve Texture method names 2022-02-14 17:07:18 +00:00
gingerBill 3d2405ac2c Correct more method types 2022-02-14 17:02:05 +00:00
gingerBill 7392a3047a Add RenderPipeline missing types and methods 2022-02-14 16:58:56 +00:00
gingerBill 60f4d8f1ec Correct Render Pass types 2022-02-14 16:46:27 +00:00
gingerBill 7b42cbea20 Improve draw method names on RenderCommandEncoder 2022-02-14 16:42:53 +00:00
gingerBill 4cc597f4df RasterizationRate improvements 2022-02-14 16:32:54 +00:00
gingerBill 934e66ab3b More improvements 2022-02-14 16:26:42 +00:00
gingerBill b755609438 Improve Library related stuff 2022-02-14 16:25:20 +00:00
gingerBill 83d63e572a Improve indirect stuff 2022-02-14 16:21:00 +00:00
gingerBill 5212f62f54 Improve many methods with WithDescriptor suffixes 2022-02-14 16:18:23 +00:00
gingerBill 4d0fd4cf19 Correct device() usage 2022-02-14 15:56:32 +00:00
gingerBill e47953f7ca Improve procedure signature and names 2022-02-14 15:45:02 +00:00
gingerBill 47f3773146 Correct Depth classes 2022-02-14 15:18:38 +00:00
gingerBill 31c6ecad34 Correct Counter classes 2022-02-14 15:15:32 +00:00
gingerBill af6e53c05c Improve Compute classes 2022-02-14 15:14:41 +00:00
gingerBill 153140eb8f Improve ComputeCommandEncoder 2022-02-14 14:43:50 +00:00
gingerBill 6fef44c041 Improve CommandEncoder 2022-02-14 14:33:50 +00:00
gingerBill a88d149903 Improve CommandBuffer 2022-02-14 14:33:02 +00:00
gingerBill f9fc488399 Correct CaptureScope 2022-02-14 14:26:35 +00:00
gingerBill bef806bef4 Update Capture Manager classes 2022-02-14 14:24:36 +00:00
gingerBill 95e9bbf99f Improve Buffer 2022-02-14 12:52:30 +00:00
gingerBill 5936fa8871 Correct Blit Pass 2022-02-14 12:46:46 +00:00
gingerBill 02646b789c Correct typo 2022-02-14 12:44:57 +00:00
gingerBill 09e9dca869 Improve BlitCommandEncoder 2022-02-14 12:43:01 +00:00
gingerBill 9a43c0672e Correct BinaryArchive 2022-02-14 12:36:28 +00:00
gingerBill 83a6169463 Update ArgumentEncoder 2022-02-14 12:32:45 +00:00
gingerBill debe2de5fe Correct Acceleration Structure Types 2022-02-14 12:12:23 +00:00
gingerBill ff7d591ebf Correct AccelerationStructure classes 2022-02-14 11:55:59 +00:00
gingerBill 7386ca9272 Add new objc intrinsics: objc_(register|find)_(selector|class) 2022-02-14 11:21:21 +00:00
gingerBill fd8b2e0b88 Merge branch 'master' into objc-intrinsics 2022-02-14 11:04:36 +00:00
gingerBill c34ae884ad Change to "object" 2022-02-14 11:04:29 +00:00
gingerBill 2e7157ae9c Correct bytes._split_iterator 2022-02-14 11:01:34 +00:00
gingerBill 441365b388 Set the macOS minimum version to 12 for ARM CPUs 2022-02-14 10:58:01 +00:00
gingerBill f561147190 Correct _split_iterator 2022-02-14 10:57:29 +00:00
gingerBill 2958c1d6aa Add new shorthand 2022-02-13 16:56:27 +00:00
gingerBill 9dc83bc1b3 Add more methods 2022-02-13 16:32:31 +00:00
gingerBill 88b1b2c629 Correct types 2022-02-13 15:11:45 +00:00
gingerBill 23bc643a81 Merge branch 'objc-intrinsics' of https://github.com/odin-lang/Odin into objc-intrinsics 2022-02-13 12:01:19 +00:00
gingerBill 41854bacf5 Add utility classes for dealing with Windows
Most for GLFW and SDL only
2022-02-13 11:54:40 +00:00
gingerBill cf528431f5 Merge pull request #1495 from FancyKillerPanda/master
Updated vendor/sdl2/ttf LIB and DLL.
2022-02-12 23:46:44 +00:00
FancyKillerPanda e59064dd59 Updated vendor/sdl2/ttf LIB and DLL. 2022-02-13 10:33:48 +11:00
gingerBill 8966294823 Correct method name 2022-02-12 22:03:15 +00:00
gingerBill b8479ea79d Merge branch 'master' into objc-intrinsics 2022-02-12 21:49:48 +00:00
gingerBill e2aa8f426d Improve type hierarchy and method names 2022-02-12 21:45:34 +00:00
gingerBill 39a0f8c96a Use distinct array types 2022-02-12 21:28:56 +00:00
gingerBill b647b45ba5 Remove temp file 2022-02-12 21:25:20 +00:00
gingerBill 5fe9aa919b Correct types in methods 2022-02-12 21:24:28 +00:00
gingerBill ff5d6a994b Move vendor:Metal to core:sys/darwin/Metal 2022-02-12 17:59:40 +00:00
gingerBill ae3b95b194 #force_inline procedures and move foreign procedures to a separate file 2022-02-12 17:46:19 +00:00
gingerBill acaae1357c Update Metal for the full API
Methods need better names
2022-02-12 17:30:32 +00:00
gingerBill f8afda3b22 Add more objc attributes 2022-02-11 22:54:51 +00:00
Colin Davidson 31f544c258 Merge branch 'odin-lang:master' into master 2022-02-11 08:25:17 -08:00
Mikkel Hjortshøj 1c57d1c019 Update nightly.yml 2022-02-11 17:22:33 +01:00
Mikkel Hjortshøj 251edf7bc7 Update ci.yml 2022-02-11 17:22:14 +01:00
Colin Davidson f77cd5533d Add fork and personality 2022-02-11 08:10:48 -08:00
gingerBill 416413bebf Begin work on Metal 2022-02-10 14:35:10 +00:00
gingerBill c3809d7b84 Fix typo 2022-02-09 21:46:26 +00:00
gingerBill 42a1c58a80 Update Foundation linking 2022-02-09 21:42:20 +00:00
gingerBill b6abaf739c Add missing calls for Object; Add scoped_autoreleasepool 2022-02-09 12:29:52 +00:00
gingerBill ef98e92e8d Remove unneeded file 2022-02-09 12:23:41 +00:00
gingerBill 768c2684d0 Add NSBundle, NSError, NSEnumerator 2022-02-09 12:19:59 +00:00
gingerBill 5f2514db63 Add NSNumber and NSURL 2022-02-09 11:50:11 +00:00
gingerBill b95ade40c0 Begin work on core:sys/darwin/Foundation 2022-02-09 00:19:20 +00:00
gingerBill 340838c878 Add procs_darwin.odin 2022-02-08 23:00:00 +00:00
gingerBill c5d348515d Add intrinsics.type_is_subtype_of; intrinsics.objc_selector_name 2022-02-08 22:59:37 +00:00
gingerBill 05dd3d490d Correct objc_class propagation for parapoly structs 2022-02-08 17:33:55 +00:00
gingerBill 0cc40db565 Begin work on support objc intrinsics 2022-02-08 17:04:55 +00:00
Jeroen van Rijn 546faab0cb Merge pull request #1481 from jasonKercher/vet_fix
fix `-vet` for `filepath/match.odin`
2022-02-08 15:27:51 +01:00
CiD- 83e9a6b417 fix -vet for filepath/match.odin 2022-02-08 09:21:43 -05:00
gingerBill 30bb2382aa Correct simple boolean intrinsics 2022-02-08 11:48:59 +00:00
gingerBill 61a0b4ec5a Merge pull request #1480 from NoahR02/opensimplex2_noise
Adds OpenSimplex Noise to Odin.
2022-02-08 11:42:17 +00:00
NoahR02 accb35506f Ports OpenSimplex2 from https://github.com/KdotJPG/OpenSimplex2 to Odin. Adds tests for the noise procedures. 2022-02-08 06:25:07 -05:00
NoahR02 817bc7434d Ports OpenSimplex2 from https://github.com/KdotJPG/OpenSimplex2 to Odin. Adds tests for the noise procedures. 2022-02-08 06:16:10 -05:00
gingerBill 3c2ed3bb69 Correct //+private file bug 2022-02-07 11:37:13 +00:00
gingerBill 9cbf46e689 Fix constant multi pointer declarations through integers 2022-02-07 11:00:38 +00:00
gingerBill ad6ea3d6aa Replace any with union for subtyping in core:odin/ast 2022-02-06 13:31:16 +00:00
gingerBill cda9fd5271 Add tag to ast.Comp_Lit 2022-02-06 11:59:12 +00:00
gingerBill 0c16f27814 Update parser for #sparse 2022-02-06 11:50:27 +00:00
gingerBill 19aec13a10 Support rank-2 arrays (matrix-like) for transpose 2022-02-06 11:42:59 +00:00
Jeroen van Rijn e896956275 Merge pull request #1475 from Platin21/feature/fix-odin-fmt
Feature/fix odin fmt
2022-02-05 23:22:07 +01:00
Platin21 c59c6e98a5 Merge branch 'odin-lang:master' into feature/fix-odin-fmt 2022-02-05 23:14:44 +01:00
Platin21 8b1100bf2b os.open does r/d as default which makes a call to open a dir invalid this should fix this problem 2022-02-05 23:12:55 +01:00
Jeroen van Rijn a3d99765cc mem: Add doc.odin with Tracking_Allocator example. 2022-02-05 22:18:22 +01:00
Platin21 a724573bb3 Fixes fopendir and readdir_r for arm64 or seemingly doing so 2022-02-05 21:16:58 +01:00
Jeroen van Rijn 25769f139a Merge pull request #1471 from Platin21/feature/fix-odin-fmt
Feature/fix odin fmt
2022-02-05 21:00:52 +01:00
Platin21 3edf638cc6 Fixed Typo 2022-02-05 20:54:27 +01:00
Platin21 de7e612186 Ignores DS_Store files which MacOS uses for Indexing or some crap 2022-02-05 20:45:55 +01:00
Platin21 a571153458 Adds missing calls for os 2022-02-05 20:45:32 +01:00
Jeroen van Rijn ada58c66fa Merge pull request #1469 from ap29600/bit_iterator
add `iterator` to `core:container/bit_array`
2022-02-05 18:50:33 +01:00
ap29600 697f8c7ee6 replace a branch with max in core:container/bit_array.set 2022-02-05 18:46:25 +01:00
Andrea Piseri b6ebfe4b2c rename iterator procedures 2022-02-05 18:11:48 +01:00
Andrea Piseri bccbdefde9 Update interface to allow more modes of iteration
It's now possible to iterate over:
- all keys in the range min_value ..= max_value, with `iterate_all`
- all set keys in the bit array, with `iterate_set`
- all unset keys in the range min_value ..= max_value, with `iterate_unset`

`Bit_Array` now stores the `max_value` provided during construction, and
updates it when a key that was previously out of range is set.
2022-02-05 18:00:59 +01:00
gingerBill 445ca70521 Correct implicit union cast 2022-02-05 16:11:48 +00:00
gingerBill c6ab8f82c8 Code refactor to aid development 2022-02-05 15:17:47 +00:00
gingerBill 67ce0ec29f Improve printing for unhandled cases by adding a new line before the cases 2022-02-05 14:58:13 +00:00
gingerBill 23c3573c30 Minor correction to error message suggestion 2022-02-05 14:56:06 +00:00
gingerBill a4308e7246 Improve union variant assignment determination 2022-02-05 14:45:59 +00:00
gingerBill 3439139b1c Minor clean up 2022-02-05 14:34:29 +00:00
gingerBill cf246f65ff Add check for variables which are both shadowing and unused by default 2022-02-05 14:31:22 +00:00
gingerBill dd84b61cc8 Correct add_to_seen_map logic 2022-02-05 14:07:17 +00:00
gingerBill b8c4bf2afb Add #partial [Enum]Type{...} support to check for missing enumerated array fields 2022-02-05 14:02:21 +00:00
gingerBill e870041fe6 Fix #sparse usage 2022-02-05 13:11:41 +00:00
gingerBill 6418ec3b21 Correct #sparse usage and error messages 2022-02-05 13:09:16 +00:00
gingerBill 2bcc7b0064 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-02-05 13:01:21 +00:00
gingerBill 97be867103 Rename #partial[Enum]Type to #sparse[Enum]Type for non-contiguous enum fields 2022-02-05 13:01:15 +00:00
gingerBill fb710f8cbf Merge pull request #1376 from jasonKercher/master
Added zeroing to new memory regions from _unix_realloc
2022-02-05 12:26:10 +00:00
gingerBill 1553137c23 Change behaviour of A :: distinct Enum_Type to be more intuitive 2022-02-05 00:04:02 +00:00
gingerBill d5384c5aa4 Only check idents in the alias (of alias)+ problem 2022-02-04 22:45:13 +00:00
gingerBill 3a81f2ab89 Correct the type aliasing problem, caused by aliases (of aliases)+ 2022-02-04 22:40:15 +00:00
ap29600 b54fc96b1e rename iterator proc to next, add named return values 2022-02-04 22:39:47 +01:00
Andrea Piseri 48af78e469 add iterator to core:container/bit_array 2022-02-04 22:12:07 +01:00
phillvancejr a315e7c962 Reverted experimental changes that were meant for a branch, in sync with master 2022-02-04 13:45:36 -05:00
phillvancejr 42364f2fce sync with main 2022-02-04 13:16:40 -05:00
phillvancejr 8f600798ef stb_image 2022-02-04 13:03:20 -05:00
gingerBill abb26e0bea Merge branch 'master' of https://github.com/odin-lang/Odin 2022-02-04 12:08:24 +00:00
gingerBill 76edfae0e0 core:container/topological_sort 2022-02-04 12:08:20 +00:00
gingerBill a5298e17ec Merge pull request #1467 from ap29600/u128_endian_swap
fix logic in bswap_128
2022-02-03 15:06:12 +00:00
Andrea Piseri cf9f3d5e2d fix logic in bswap_128 2022-02-03 15:50:39 +01:00
gingerBill 35c90fe124 Fix type alias declaration evaluation problem (#854 #1439) 2022-02-03 13:34:31 +00:00
gingerBill df8bdac33f Initialize the global_rand with the intrinsics.read_cycle_counter() value 2022-02-03 00:31:36 +00:00
gingerBill b4f7a527c2 Merge branch 'master' of https://github.com/odin-lang/Odin 2022-02-02 23:38:40 +00:00
gingerBill 35533a7baa Update core:container/lru to support clear and take a boolean to indicate whether or not to call the on_remove procedure on clear or destroy 2022-02-02 23:38:32 +00:00
gingerBill 2c9ed7464f Merge pull request #1465 from ap29600/reflect_is_nil_fix
Fix logic in `is_nil` procedure
2022-02-02 19:36:25 +00:00
Andrea Piseri e190c024fd Fix logic in is_nil procedure: a non_nil slice means there is data to check. 2022-02-02 20:07:38 +01:00
gingerBill e250475bf9 Merge pull request #1457 from DanielGavin/parser-inline
Fix core:odin/parser not setting the inline flag correctly.
2022-02-02 16:32:09 +00:00
gingerBill 5db603ded2 Minor sanity clean up 2022-02-02 15:39:41 +00:00
gingerBill 78815778ee Add //+private file to complement //+private (//+private package) 2022-02-02 15:28:49 +00:00
Daniel Gavin ff5e036773 Trim whitespaces 2022-01-27 14:27:26 +01:00
Daniel Gavin 4dc29d141f Fix core:odin/parser not setting the inline flag correctly. 2022-01-27 14:24:33 +01:00
Daniel Gavin 8ecee32e1c Merge remote-tracking branch 'upstream/master' into parser-fix 2022-01-27 13:58:41 +01:00
Daniel Gavin 6a7d821fcc Merge remote-tracking branch 'upstream/master' into parser-fix 2022-01-24 16:58:39 +01:00
phillvancejr f28c268d97 move libgflw3.a to lib/darwin 2022-01-24 10:03:38 -05:00
phillvancejr f1cff20249 moved mac os glfw static lib to lib/darwin subdirectory 2022-01-24 10:02:56 -05:00
Platin21 1243b1a58c Fixed cyclic imports which where not needed 2022-01-23 23:16:57 +01:00
Platin21 ab3bae5c02 Fixed package name 2022-01-23 23:14:46 +01:00
Platin21 540c5400a0 Adds several system calls and the beginning of odin wrappers for them
This also adds all systemcall numbers from the xnu kernel / and additional helpers for some of the calls to make it easier to call them from odin
2022-01-23 23:13:32 +01:00
Daniel Gavin 01e29bf27e Merge remote-tracking branch 'upstream/master' into parser-fix 2022-01-23 01:38:15 +01:00
gingerBill 6223f48c3f Update tests 2022-01-20 20:08:24 +00:00
gingerBill f2f20def37 Update demo.odin 2022-01-20 20:02:41 +00:00
gingerBill 77b91352ae Add Odin_OS_Type and Odin_Arch_Type to core:runtime 2022-01-20 19:58:35 +00:00
gingerBill 3d7d347192 Convert ODIN_OS and ODIN_ARCH to use enums rather than use strings 2022-01-20 19:56:05 +00:00
CiD- e5868e3205 add zeroing regardless of ODIN_OS 2022-01-20 10:17:47 -05:00
Daniel Gavin 96d7c4ffdf Merge remote-tracking branch 'upstream/master' into parser-fix 2022-01-17 13:15:44 +01:00
Daniel Gavin f19325cbe0 Merge remote-tracking branch 'upstream/master' into parser-fix 2022-01-16 13:54:22 +01:00
Daniel Gavin d57ec4a11d Fix return stmt when it's one lined(check for close brace). 2022-01-16 13:20:12 +01:00
Henry Dooley 865d88dd56 review feedback 2021-12-28 10:50:34 -06:00
Henry Dooley 069c05669f cast isize to unsigned int for llvm api, add defaulted name parameter to helper. 2021-12-25 16:46:02 -06:00
Henry Dooley 516065d7c2 factor out alloca generation into a helper 2021-12-25 16:28:09 -06:00
CiD- ebdb3ab43a added notes about _unix_alloc 2021-12-17 12:04:05 -05:00
CiD- 29ca6ee420 add zeroing to new region from realloc 2021-12-17 10:41:49 -05:00
Jeroen van Rijn 6e61abc7d0 [xml] Initial optimization. 2021-12-06 12:04:59 +01:00
Jeroen van Rijn 7ec88d2430 [xml] Add option. 2021-12-05 21:06:33 +01:00
Jeroen van Rijn d7200f6144 Improve tests in general.
Less spammy core tests: They don't print PASSes now, only logs and failures.

`core:image` and `core:encoding/xml` tests also find their assets relative to `ODIN_ROOT` now.
2021-12-05 02:53:09 +01:00
Jeroen van Rijn d65d6edb0e [xml] Improve XML tests, test core:encoding/entity. 2021-12-05 02:52:23 +01:00
Jeroen van Rijn 3d72e80ccf [xml] Implement optional unboxing of CDATA and decoding of tag values. 2021-12-05 02:52:23 +01:00
Jeroen van Rijn 2dd67dba89 [core:encoding/entity] Add new package to decode &<entity>; entities.
Includes generator to generate a lookup for named entitiess.
2021-12-05 02:52:23 +01:00
Jeroen van Rijn 5807214406 [xml] Improvements. 2021-12-05 02:52:23 +01:00
Jeroen van Rijn 23baf56c87 [xml] Improve CDATA + comment handling in tag body. 2021-12-05 02:52:23 +01:00
Jeroen van Rijn beff90e1d1 [xml] Slight optimization.
About a 5% speed bump.

More rigorous optimization later.
2021-12-05 02:52:23 +01:00
Jeroen van Rijn ec63d0bbd2 [xml] Robustness improvement.
Can now parse  https://www.w3.org/2003/entities/2007xml/unicode.xml no problem.
2021-12-05 02:52:22 +01:00
Jeroen van Rijn 32eab04d66 [xml] Allow multi-line bodies w/o CDATA. Strip trailing whitespace. 2021-12-05 02:52:22 +01:00
Jeroen van Rijn 682783a2aa [xml] Tab indentation in debug printer. 2021-12-05 02:52:22 +01:00
Jeroen van Rijn 46a4927aca [xml] Use io.Writer for xml.print(doc). 2021-12-05 02:52:22 +01:00
Jeroen van Rijn 9b2e67df67 [xml] Small cleanup. 2021-12-05 02:52:22 +01:00
Jeroen van Rijn b5c828fe4e [xml] Initial implementation of core:encoding/xml.
A from-scratch XML implementation, loosely modeled on the [spec](https://www.w3.org/TR/2006/REC-xml11-20060816).

Features:
		- Supports enough of the XML 1.0/1.1 spec to handle the 99.9% of XML documents in common current usage.
		- Simple to understand and use. Small.

Caveats:
		- We do NOT support HTML in this package, as that may or may not be valid XML.
		  If it works, great. If it doesn't, that's not considered a bug.

		- We do NOT support UTF-16. If you have a UTF-16 XML file, please convert it to UTF-8 first. Also, our condolences.
		- <[!ELEMENT and <[!ATTLIST are not supported, and will be either ignored or return an error depending on the parser options.

TODO:
- Optional CDATA unboxing.
- Optional `&gt;`, `&#32;`, `&#x20;` and other escape substitution in tag bodies.
- Test suite

MAYBE:
- XML writer?
- Serialize/deserialize Odin types?
2021-12-05 02:52:22 +01:00
Daniel Gavin a4ba91a554 Check for non inserted semicolon in *expect_closing_brace_of_field_list* 2021-11-25 18:47:58 +01:00
Daniel Gavin cf390bf8b9 Recover from closing brace not found in field list 2021-11-24 21:20:46 +01:00
Yawning Angel 6ea68869c9 src: "Fix" the system call intrinsic for FreeBSD
FreeBSD's systemcall handler clears out R8, R9, and R10 prior to
`sysretq`, and additionally returns positive errno (with CF) set on
error.  This modifies the syscall intrinsic such that LLVM knows
about the additional clobbered registers.

Note that propagating CF back to the caller of the syscall intrinsic
is left for a future PR.  As far as I can tell, Darwin does not use
the syscall intrinsic at all, and FreeBSD only uses it for SYS_GETTID,
so this should be "ok" for now.

See: sys/amd64/amd64/exception.S in the FreeBSD src for more details.
2021-11-13 20:40:27 +00:00
1330 changed files with 349702 additions and 104335 deletions
+10
View File
@@ -0,0 +1,10 @@
root = true
[*]
indent_style = tab
end_of_line = lf
[*.y{,a}ml]
indent_size = 2
indent_style = space
tab_width = 2
+5
View File
@@ -1 +1,6 @@
*.odin linguist-language=Odin
* text=auto
# These files must always have *nix line-endings
Makefile text eol=lf
*.sh text eol=lf
+1
View File
@@ -1,3 +1,4 @@
# These are supported funding model platforms
github: odin-lang
patreon: gingerbill
+172 -80
View File
@@ -1,140 +1,232 @@
name: CI
on: [push, pull_request]
on: [push, pull_request, workflow_dispatch]
jobs:
build_linux:
build_netbsd:
name: NetBSD Build, Check, and Test
runs-on: ubuntu-latest
env:
PKGSRC_BRANCH: 2024Q1
steps:
- uses: actions/checkout@v4
- name: Build, Check, and Test
timeout-minutes: 15
uses: vmactions/netbsd-vm@v1
with:
release: "10.0"
envs: PKGSRC_BRANCH
usesh: true
copyback: false
prepare: |
PKG_PATH="https://cdn.NetBSD.org/pub/pkgsrc/packages/NetBSD/$(uname -p)/$(uname -r | cut -d_ -f1)_${PKGSRC_BRANCH}/All" /usr/sbin/pkg_add pkgin
pkgin -y in gmake git bash python311
pkgin -y in libxml2 perl zstd
/usr/sbin/pkg_add https://github.com/andreas-jonsson/llvm17-netbsd-bin/releases/download/pkgsrc-current/llvm-17.0.6.tgz
/usr/sbin/pkg_add https://github.com/andreas-jonsson/llvm17-netbsd-bin/releases/download/pkgsrc-current/clang-17.0.6.tgz
ln -s /usr/pkg/bin/python3.11 /usr/bin/python3
run: |
git config --global --add safe.directory $(pwd)
gmake release
./odin version
./odin report
gmake -C vendor/stb/src
gmake -C vendor/cgltf/src
gmake -C vendor/miniaudio/src
./odin check examples/all -vet -strict-style -disallow-do -target:netbsd_amd64
./odin check examples/all -vet -strict-style -disallow-do -target:netbsd_arm64
./odin test tests/core/normal.odin -file -all-packages -define:ODIN_TEST_FANCY=false
./odin test tests/core/speed.odin -file -all-packages -o:speed -define:ODIN_TEST_FANCY=false
./odin test tests/vendor -all-packages -define:ODIN_TEST_FANCY=false
./odin test tests/benchmark -all-packages -define:ODIN_TEST_FANCY=false
(cd tests/issues; ./run.sh)
build_freebsd:
name: FreeBSD Build, Check, and Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Download LLVM, botan
run: sudo apt-get install llvm-11 clang-11 llvm libbotan-2-dev botan
- name: build odin
run: make release
- name: Odin version
run: ./odin version
timeout-minutes: 1
- name: Odin report
run: ./odin report
timeout-minutes: 1
- name: Odin check
run: ./odin check examples/demo -vet
timeout-minutes: 10
- name: Odin run
run: ./odin run examples/demo
timeout-minutes: 10
- name: Odin run -debug
run: ./odin run examples/demo -debug
timeout-minutes: 10
- name: Odin check examples/all
run: ./odin check examples/all -strict-style
timeout-minutes: 10
- name: Core library tests
- uses: actions/checkout@v4
- name: Build, Check, and Test
timeout-minutes: 15
uses: vmactions/freebsd-vm@v1
with:
usesh: true
copyback: false
prepare: |
pkg install -y gmake git bash python3 libxml2 llvm17
run: |
cd tests/core
make
timeout-minutes: 10
- name: Vendor library tests
run: |
cd tests/vendor
make
timeout-minutes: 10
build_macOS:
runs-on: macos-latest
# `set -e` is needed for test failures to register. https://github.com/vmactions/freebsd-vm/issues/72
set -e -x
git config --global --add safe.directory $(pwd)
gmake release
./odin version
./odin report
gmake -C vendor/stb/src
gmake -C vendor/cgltf/src
gmake -C vendor/miniaudio/src
./odin check examples/all -vet -strict-style -disallow-do -target:freebsd_amd64
./odin test tests/core/normal.odin -file -all-packages -define:ODIN_TEST_FANCY=false
./odin test tests/core/speed.odin -file -all-packages -o:speed -define:ODIN_TEST_FANCY=false
./odin test tests/vendor -all-packages -define:ODIN_TEST_FANCY=false
./odin test tests/benchmark -all-packages -define:ODIN_TEST_FANCY=false
(cd tests/issues; ./run.sh)
ci:
strategy:
fail-fast: false
matrix:
# MacOS 13 runs on Intel, 14 runs on ARM
os: [ubuntu-latest, macos-13, macos-14]
runs-on: ${{ matrix.os }}
name: ${{ matrix.os == 'macos-14' && 'MacOS ARM' || (matrix.os == 'macos-13' && 'MacOS Intel' || 'Ubuntu') }} Build, Check, and Test
timeout-minutes: 15
steps:
- uses: actions/checkout@v1
- name: Download LLVM, botan and setup PATH
- uses: actions/checkout@v4
- name: Download LLVM (Linux)
if: matrix.os == 'ubuntu-latest'
run: |
brew install llvm@11 botan
echo "/usr/local/opt/llvm@11/bin" >> $GITHUB_PATH
TMP_PATH=$(xcrun --show-sdk-path)/user/include
echo "CPATH=$TMP_PATH" >> $GITHUB_ENV
- name: build odin
run: make release
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 17
echo "/usr/lib/llvm-17/bin" >> $GITHUB_PATH
- name: Download LLVM (MacOS Intel)
if: matrix.os == 'macos-13'
run: |
brew install llvm@17
echo "/usr/local/opt/llvm@17/bin" >> $GITHUB_PATH
- name: Download LLVM (MacOS ARM)
if: matrix.os == 'macos-14'
run: |
brew install llvm@17 wasmtime
echo "/opt/homebrew/opt/llvm@17/bin" >> $GITHUB_PATH
- name: Build Odin
run: ./build_odin.sh release
- name: Odin version
run: ./odin version
timeout-minutes: 1
- name: Odin report
run: ./odin report
timeout-minutes: 1
- name: Compile needed Vendor
run: |
make -C vendor/stb/src
make -C vendor/cgltf/src
make -C vendor/miniaudio/src
- name: Odin check
run: ./odin check examples/demo -vet
timeout-minutes: 10
- name: Odin run
run: ./odin run examples/demo
timeout-minutes: 10
- name: Odin run -debug
run: ./odin run examples/demo -debug
timeout-minutes: 10
- name: Odin check examples/all
run: ./odin check examples/all -strict-style
timeout-minutes: 10
- name: Core library tests
run: |
cd tests/core
make
timeout-minutes: 10
- name: Normal Core library tests
run: ./odin test tests/core/normal.odin -file -all-packages -define:ODIN_TEST_FANCY=false
- name: Optimized Core library tests
run: ./odin test tests/core/speed.odin -o:speed -file -all-packages -define:ODIN_TEST_FANCY=false
- name: Vendor library tests
run: ./odin test tests/vendor -all-packages -define:ODIN_TEST_FANCY=false
- name: Internals tests
run: ./odin test tests/internal -all-packages -define:ODIN_TEST_FANCY=false
- name: Core library benchmarks
run: ./odin test tests/benchmark -all-packages -define:ODIN_TEST_FANCY=false
- name: GitHub Issue tests
run: |
cd tests/vendor
make
timeout-minutes: 10
cd tests/issues
./run.sh
- name: Odin check examples/all for Linux i386
run: ./odin check examples/all -vet -strict-style -disallow-do -target:linux_i386
if: matrix.os == 'ubuntu-latest'
- name: Odin check examples/all for Linux arm64
run: ./odin check examples/all -vet -strict-style -disallow-do -target:linux_arm64
if: matrix.os == 'ubuntu-latest'
- name: Odin check examples/all for FreeBSD amd64
run: ./odin check examples/all -vet -strict-style -disallow-do -target:freebsd_amd64
if: matrix.os == 'ubuntu-latest'
- name: Odin check examples/all for OpenBSD amd64
run: ./odin check examples/all -vet -strict-style -disallow-do -target:openbsd_amd64
if: matrix.os == 'ubuntu-latest'
- name: Run demo on WASI WASM32
run: |
./odin build examples/demo -target:wasi_wasm32 -vet -strict-style -disallow-do -out:demo.wasm
wasmtime ./demo.wasm
if: matrix.os == 'macos-14'
build_windows:
runs-on: windows-latest
name: Windows Build, Check, and Test
runs-on: windows-2022
timeout-minutes: 15
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4
- name: build Odin
shell: cmd
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
./build.bat 1
- name: Odin version
run: ./odin version
timeout-minutes: 1
- name: Odin report
run: ./odin report
timeout-minutes: 1
- name: Odin check
shell: cmd
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
odin check examples/demo -vet
timeout-minutes: 10
- name: Odin run
shell: cmd
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
odin run examples/demo
timeout-minutes: 10
- name: Odin run -debug
shell: cmd
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
odin run examples/demo -debug
timeout-minutes: 10
- name: Odin check examples/all
shell: cmd
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
odin check examples/all -strict-style
timeout-minutes: 10
- name: Core library tests
shell: cmd
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat
cd tests\core
call build.bat
timeout-minutes: 10
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
odin test tests/core/normal.odin -file -all-packages -define:ODIN_TEST_FANCY=false
- name: Optimized core library tests
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
odin test tests/core/speed.odin -o:speed -file -all-packages -define:ODIN_TEST_FANCY=false
- name: Core library benchmarks
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
odin test tests/benchmark -all-packages -define:ODIN_TEST_FANCY=false
- name: Vendor library tests
shell: cmd
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat
cd tests\vendor
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
odin test tests/vendor -all-packages -define:ODIN_TEST_FANCY=false
- name: Odin internals tests
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
odin test tests/internal -all-packages -define:ODIN_TEST_FANCY=false
- name: Odin documentation tests
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
cd tests\documentation
call build.bat
timeout-minutes: 10
- name: core:math/big tests
shell: cmd
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
cd tests\core\math\big
call build.bat
timeout-minutes: 10
- name: Odin check examples/all for Windows 32bits
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
odin check examples/all -strict-style -target:windows_i386
+91 -44
View File
@@ -7,26 +7,30 @@ on:
jobs:
build_windows:
runs-on: windows-latest
name: Windows Build
if: github.repository == 'odin-lang/Odin'
runs-on: windows-2022
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4
- name: build Odin
shell: cmd
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
./build.bat 1 1
- name: Odin run
shell: cmd
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat
odin run examples/demo/demo.odin
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
odin run examples/demo
- name: Copy artifacts
run: |
rm bin/llvm/windows/LLVM-C.lib
mkdir dist
cp odin.exe dist
cp LICENSE dist
cp LLVM-C.dll dist
cp -r shared dist
cp -r base dist
cp -r core dist
cp -r vendor dist
cp -r bin dist
@@ -37,69 +41,121 @@ jobs:
name: windows_artifacts
path: dist
build_ubuntu:
name: Ubuntu Build
if: github.repository == 'odin-lang/Odin'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4
- name: (Linux) Download LLVM
run: sudo apt-get install llvm-11 clang-11 llvm
run: |
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 17
echo "/usr/lib/llvm-17/bin" >> $GITHUB_PATH
- name: build odin
run: make nightly
- name: Odin run
run: ./odin run examples/demo/demo.odin
run: ./odin run examples/demo
- name: Copy artifacts
run: |
mkdir dist
cp odin dist
cp LICENSE dist
cp libLLVM* dist
cp -r shared dist
cp -r base dist
cp -r core dist
cp -r vendor dist
cp -r examples dist
# Zipping so executable permissions are retained, see https://github.com/actions/upload-artifact/issues/38
zip -r dist.zip dist
- name: Upload artifact
uses: actions/upload-artifact@v1
with:
name: ubuntu_artifacts
path: dist
path: dist.zip
build_macos:
runs-on: macOS-latest
name: MacOS Build
if: github.repository == 'odin-lang/Odin'
runs-on: macos-13
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4
- name: Download LLVM and setup PATH
run: |
brew install llvm@11
echo "/usr/local/opt/llvm@11/bin" >> $GITHUB_PATH
TMP_PATH=$(xcrun --show-sdk-path)/user/include
echo "CPATH=$TMP_PATH" >> $GITHUB_ENV
brew install llvm@17 dylibbundler
echo "/usr/local/opt/llvm@17/bin" >> $GITHUB_PATH
- name: build odin
run: make nightly
- name: Odin run
run: ./odin run examples/demo/demo.odin
- name: Copy artifacts
# These -L makes the linker prioritize system libraries over LLVM libraries, this is mainly to
# not link with libunwind bundled with LLVM but link with libunwind on the system.
run: CXXFLAGS="-L/usr/lib/system -L/usr/lib" make nightly
- name: Bundle
run: |
mkdir dist
cp odin dist
cp LICENSE dist
cp -r shared dist
cp -r base dist
cp -r core dist
cp -r vendor dist
cp -r examples dist
dylibbundler -b -x dist/odin -d dist/libs -od -p @executable_path/libs
# Zipping so executable permissions are retained, see https://github.com/actions/upload-artifact/issues/38
zip -r dist.zip dist
- name: Odin run
run: ./dist/odin run examples/demo
- name: Upload artifact
uses: actions/upload-artifact@v1
with:
name: macos_artifacts
path: dist
path: dist.zip
build_macos_arm:
name: MacOS ARM Build
if: github.repository == 'odin-lang/Odin'
runs-on: macos-14 # ARM machine
steps:
- uses: actions/checkout@v4
- name: Download LLVM and setup PATH
run: |
brew install llvm@17 dylibbundler
echo "/opt/homebrew/opt/llvm@17/bin" >> $GITHUB_PATH
- name: build odin
# These -L makes the linker prioritize system libraries over LLVM libraries, this is mainly to
# not link with libunwind bundled with LLVM but link with libunwind on the system.
run: CXXFLAGS="-L/usr/lib/system -L/usr/lib" make nightly
- name: Bundle
run: |
mkdir dist
cp odin dist
cp LICENSE dist
cp -r shared dist
cp -r base dist
cp -r core dist
cp -r vendor dist
cp -r examples dist
dylibbundler -b -x dist/odin -d dist/libs -od -p @executable_path/libs
# Zipping so executable permissions are retained, see https://github.com/actions/upload-artifact/issues/38
zip -r dist.zip dist
- name: Odin run
run: ./dist/odin run examples/demo
- name: Upload artifact
uses: actions/upload-artifact@v1
with:
name: macos_arm_artifacts
path: dist.zip
upload_b2:
runs-on: [ubuntu-latest]
needs: [build_windows, build_macos, build_ubuntu]
needs: [build_windows, build_macos, build_macos_arm, build_ubuntu]
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4
- uses: actions/setup-python@v2
with:
python-version: '3.8.x'
- name: Install B2 CLI
- name: Install B2 SDK
shell: bash
run: |
python -m pip install --upgrade pip
pip install --upgrade b2
pip install --upgrade b2sdk
- name: Display Python version
run: python -c "import sys; print(sys.version)"
@@ -119,6 +175,11 @@ jobs:
with:
name: macos_artifacts
- name: Download macOS arm artifacts
uses: actions/download-artifact@v1
with:
name: macos_arm_artifacts
- name: Create archives and upload
shell: bash
env:
@@ -127,23 +188,9 @@ jobs:
BUCKET: ${{ secrets.B2_BUCKET }}
DAYS_TO_KEEP: ${{ secrets.B2_DAYS_TO_KEEP }}
run: |
echo Authorizing B2 account
b2 authorize-account "$APPID" "$APPKEY"
echo Uploading artifcates to B2
chmod +x ./ci/upload_create_nightly.sh
./ci/upload_create_nightly.sh "$BUCKET" windows-amd64 windows_artifacts/
./ci/upload_create_nightly.sh "$BUCKET" ubuntu-amd64 ubuntu_artifacts/
./ci/upload_create_nightly.sh "$BUCKET" macos-amd64 macos_artifacts/
echo Deleting old artifacts in B2
python3 ci/delete_old_binaries.py "$BUCKET" "$DAYS_TO_KEEP"
echo Creating nightly.json
python3 ci/create_nightly_json.py "$BUCKET" > nightly.json
echo Uploading nightly.json
b2 upload-file "$BUCKET" nightly.json nightly.json
echo Clear B2 account info
b2 clear-account
python3 ci/nightly.py artifact windows-amd64 windows_artifacts/
python3 ci/nightly.py artifact ubuntu-amd64 ubuntu_artifacts/dist.zip
python3 ci/nightly.py artifact macos-amd64 macos_artifacts/dist.zip
python3 ci/nightly.py artifact macos-arm64 macos_arm_artifacts/dist.zip
python3 ci/nightly.py prune
python3 ci/nightly.py json
+43
View File
@@ -0,0 +1,43 @@
name: "Close Stale Issues & PRs"
on:
workflow_dispatch:
schedule:
- cron: "0 21 * * *"
permissions:
issues: write
pull-requests: write
jobs:
stale:
runs-on: ubuntu-latest
steps:
- name: Close Stale Issues
uses: actions/stale@v7.0.0
with:
# stale-issue-message: |
# Hello!
#
# I am marking this issue as stale as it has not received any engagement from the community or maintainers 120 days. That does not imply that the issue has no merit! If you feel strongly about this issue
# - open a PR referencing and resolving the issue;
# - leave a comment on it and discuss ideas how you could contribute towards resolving it;
# - leave a comment and describe in detail why this issue is critical for your use case;
# - open a new issue with updated details and a plan on resolving the issue.
#
# The motivation for this automation is to help prioritize issues in the backlog and not ignore, reject, or belittle anyone..
#
# stale-pr-message: |
# Hello!
#
# I am marking this PR as stale as it has not received any engagement from the community or maintainers 120 days. That does not imply that the issue has no merit! If you feel strongly about this issue
# - leave a comment on it and discuss ideas how you could contribute towards resolving it;
# - leave a comment and describe in detail why this issue is critical for your use case;
#
# The motivation for this automation is to help prioritize issues in the backlog and not ignore, reject, or belittle anyone..
days-before-stale: 120
days-before-close: -1
exempt-draft-pr: true
ascending: true
operations-per-run: 1000
exempt-issue-labels: "ignore"
+50 -1
View File
@@ -7,6 +7,9 @@
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# For macOS
.DS_Store
# Build results
[Dd]ebug/
[Dd]ebugPublic/
@@ -19,6 +22,40 @@ bld/
[Oo]bj/
[Ll]og/
![Cc]ore/[Ll]og/
tests/documentation/verify/
tests/documentation/all.odin-doc
tests/internal/test_map
tests/internal/test_pow
tests/internal/test_rtti
tests/core/test_base64
tests/core/test_cbor
tests/core/test_core_compress
tests/core/test_core_container
tests/core/test_core_filepath
tests/core/test_core_fmt
tests/core/test_core_i18n
tests/core/test_core_image
tests/core/test_core_libc
tests/core/test_core_match
tests/core/test_core_math
tests/core/test_core_net
tests/core/test_core_os_exit
tests/core/test_core_reflect
tests/core/test_core_strings
tests/core/test_core_time
tests/core/test_crypto
tests/core/test_hash
tests/core/test_hex
tests/core/test_hxa
tests/core/test_json
tests/core/test_linalg_glsl_math
tests/core/test_noise
tests/core/test_varint
tests/core/test_xml
tests/core/test_core_slice
tests/core/test_core_thread
tests/core/test_core_runtime
tests/vendor/vendor_botan
# Visual Studio 2015 cache/options directory
.vs/
# Visual Studio Code options directory
@@ -265,7 +302,11 @@ bin/
# - Linux/MacOS
odin
odin.dSYM
!odin/
**/*.dSYM
*.bin
demo.bin
libLLVM*.so*
# shared collection
shared/
@@ -276,3 +317,11 @@ shared/
*.ll
*.sublime-workspace
examples/bug/
build.sh
!core/debug/
# RAD debugger project file
*.raddbg
misc/featuregen/featuregen
+1 -1
View File
@@ -1,4 +1,4 @@
Copyright (c) 2016-2021 Ginger Bill. All rights reserved.
Copyright (c) 2016-2024 Ginger Bill. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
BIN
View File
Binary file not shown.
+6 -67
View File
@@ -1,80 +1,19 @@
GIT_SHA=$(shell git rev-parse --short HEAD)
DISABLED_WARNINGS=-Wno-switch -Wno-macro-redefined -Wno-unused-value
LDFLAGS=-pthread -ldl -lm -lstdc++
CFLAGS=-std=c++14 -DGIT_SHA=\"$(GIT_SHA)\"
CFLAGS:=$(CFLAGS) -DODIN_VERSION_RAW=\"dev-$(shell date +"%Y-%m")\"
CC=clang
OS=$(shell uname)
ifeq ($(OS), Darwin)
ARCH=$(shell uname -m)
LLVM_CONFIG=
# allow for arm only llvm's with version 13
ifeq ($(ARCH), arm64)
LLVM_VERSIONS = "13.%.%"
else
# allow for x86 / amd64 all llvm versions begining from 11
LLVM_VERSIONS = "13.%.%" "12.0.1" "11.1.0"
endif
LLVM_VERSION_PATTERN_SEPERATOR = )|(
LLVM_VERSION_PATTERNS_ESCAPED_DOT = $(subst .,\.,$(LLVM_VERSIONS))
LLVM_VERSION_PATTERNS_REPLACE_PERCENT = $(subst %,.*,$(LLVM_VERSION_PATTERNS_ESCAPED_DOT))
LLVM_VERSION_PATTERN_REMOVE_ELEMENTS = $(subst " ",$(LLVM_VERSION_PATTERN_SEPERATOR),$(LLVM_VERSION_PATTERNS_REPLACE_PERCENT))
LLMV_VERSION_PATTERN_REMOVE_SINGLE_STR = $(subst ",,$(LLVM_VERSION_PATTERN_REMOVE_ELEMENTS))
LLVM_VERSION_PATTERN = "^(($(LLMV_VERSION_PATTERN_REMOVE_SINGLE_STR)))"
ifneq ($(shell llvm-config --version | grep -E $(LLVM_VERSION_PATTERN)),)
LLVM_CONFIG=llvm-config
else
ifeq ($(ARCH), arm64)
$(error "Requirement: llvm-config must be base version 13 for arm64")
else
$(error "Requirement: llvm-config must be base version greater than 11 for amd64/x86")
endif
endif
LDFLAGS:=$(LDFLAGS) -liconv
CFLAGS:=$(CFLAGS) $(shell $(LLVM_CONFIG) --cxxflags --ldflags)
LDFLAGS:=$(LDFLAGS) -lLLVM-C
endif
ifeq ($(OS), Linux)
LLVM_CONFIG=llvm-config-11
ifneq ($(shell which llvm-config-11 2>/dev/null),)
LLVM_CONFIG=llvm-config-11
else ifneq ($(shell which llvm-config-11-64 2>/dev/null),)
LLVM_CONFIG=llvm-config-11-64
else
ifneq ($(shell llvm-config --version | grep '^11\.'),)
LLVM_CONFIG=llvm-config
else
$(error "Requirement: llvm-config must be version 11")
endif
endif
CFLAGS:=$(CFLAGS) $(shell $(LLVM_CONFIG) --cxxflags --ldflags)
LDFLAGS:=$(LDFLAGS) $(shell $(LLVM_CONFIG) --libs core native --system-libs)
endif
all: debug demo
all: debug
demo:
./odin run examples/demo/demo.odin
./odin run examples/demo/demo.odin -file
report:
./odin report
debug:
$(CC) src/main.cpp src/libtommath.cpp $(DISABLED_WARNINGS) $(CFLAGS) -g $(LDFLAGS) -o odin
./build_odin.sh debug
release:
$(CC) src/main.cpp src/libtommath.cpp $(DISABLED_WARNINGS) $(CFLAGS) -O3 $(LDFLAGS) -o odin
./build_odin.sh release
release_native:
$(CC) src/main.cpp src/libtommath.cpp $(DISABLED_WARNINGS) $(CFLAGS) -O3 -march=native $(LDFLAGS) -o odin
./build_odin.sh release-native
nightly:
$(CC) src/main.cpp src/libtommath.cpp $(DISABLED_WARNINGS) $(CFLAGS) -DNIGHTLY -O3 $(LDFLAGS) -o odin
./build_odin.sh nightly
+10 -8
View File
@@ -11,7 +11,7 @@
<img src="https://img.shields.io/badge/platforms-Windows%20|%20Linux%20|%20macOS-green.svg">
</a>
<br>
<a href="https://discord.gg/hnwN2Rj">
<a href="https://discord.com/invite/sVBPHEv">
<img src="https://img.shields.io/discord/568138951836172421?logo=discord">
</a>
<a href="https://github.com/odin-lang/odin/actions">
@@ -58,6 +58,10 @@ main :: proc() {
Instructions for downloading and installing the Odin compiler and libraries.
#### [Nightly Builds](https://odin-lang.org/docs/nightly/)
Get the latest nightly builds of Odin.
### Learning Odin
#### [Overview of Odin](https://odin-lang.org/docs/overview)
@@ -68,19 +72,17 @@ An overview of the Odin programming language.
Answers to common questions about Odin.
#### [Packages](https://pkg.odin-lang.org/)
Documentation for all the official packages part of the [core](https://pkg.odin-lang.org/core/) and [vendor](https://pkg.odin-lang.org/vendor/) library collections.
#### [The Odin Wiki](https://github.com/odin-lang/Odin/wiki)
A wiki maintained by the Odin community.
#### [Odin Discord](https://discord.gg/sVBPHEv)
Get live support and talk with other odiners on the Odin Discord.
### References
#### [Language Specification](https://odin-lang.org/docs/spec/)
The official Odin Language specification.
Get live support and talk with other Odin programmers on the Odin Discord.
### Articles
+130
View File
@@ -0,0 +1,130 @@
// This is purely for documentation
package builtin
nil :: nil
false :: 0!=0
true :: 0==0
ODIN_OS :: ODIN_OS
ODIN_ARCH :: ODIN_ARCH
ODIN_ENDIAN :: ODIN_ENDIAN
ODIN_VENDOR :: ODIN_VENDOR
ODIN_VERSION :: ODIN_VERSION
ODIN_ROOT :: ODIN_ROOT
ODIN_DEBUG :: ODIN_DEBUG
byte :: u8 // alias
bool :: bool
b8 :: b8
b16 :: b16
b32 :: b32
b64 :: b64
i8 :: i8
u8 :: u8
i16 :: i16
u16 :: u16
i32 :: i32
u32 :: u32
i64 :: i64
u64 :: u64
i128 :: i128
u128 :: u128
rune :: rune
f16 :: f16
f32 :: f32
f64 :: f64
complex32 :: complex32
complex64 :: complex64
complex128 :: complex128
quaternion64 :: quaternion64
quaternion128 :: quaternion128
quaternion256 :: quaternion256
int :: int
uint :: uint
uintptr :: uintptr
rawptr :: rawptr
string :: string
cstring :: cstring
any :: any
typeid :: typeid
// Endian Specific Types
i16le :: i16le
u16le :: u16le
i32le :: i32le
u32le :: u32le
i64le :: i64le
u64le :: u64le
i128le :: i128le
u128le :: u128le
i16be :: i16be
u16be :: u16be
i32be :: i32be
u32be :: u32be
i64be :: i64be
u64be :: u64be
i128be :: i128be
u128be :: u128be
f16le :: f16le
f32le :: f32le
f64le :: f64le
f16be :: f16be
f32be :: f32be
f64be :: f64be
// Procedures
len :: proc(array: Array_Type) -> int ---
cap :: proc(array: Array_Type) -> int ---
size_of :: proc($T: typeid) -> int ---
align_of :: proc($T: typeid) -> int ---
// e.g. offset_of(t.f), where t is an instance of the type T
offset_of_selector :: proc(selector: $T) -> uintptr ---
// e.g. offset_of(T, f), where T can be the type instead of a variable
offset_of_member :: proc($T: typeid, member: $M) -> uintptr ---
offset_of :: proc{offset_of_selector, offset_of_member}
// e.g. offset_of(T, "f"), where T can be the type instead of a variable
offset_of_by_string :: proc($T: typeid, member: string) -> uintptr ---
type_of :: proc(x: expr) -> type ---
type_info_of :: proc($T: typeid) -> ^runtime.Type_Info ---
typeid_of :: proc($T: typeid) -> typeid ---
swizzle :: proc(x: [N]T, indices: ..int) -> [len(indices)]T ---
complex :: proc(real, imag: Float) -> Complex_Type ---
quaternion :: proc(imag, jmag, kmag, real: Float) -> Quaternion_Type --- // fields must be named
real :: proc(value: Complex_Or_Quaternion) -> Float ---
imag :: proc(value: Complex_Or_Quaternion) -> Float ---
jmag :: proc(value: Quaternion) -> Float ---
kmag :: proc(value: Quaternion) -> Float ---
conj :: proc(value: Complex_Or_Quaternion) -> Complex_Or_Quaternion ---
expand_values :: proc(value: Struct_Or_Array) -> (A, B, C, ...) ---
min :: proc(values: ..T) -> T ---
max :: proc(values: ..T) -> T ---
abs :: proc(value: T) -> T ---
clamp :: proc(value, minimum, maximum: T) -> T ---
soa_zip :: proc(slices: ...) -> #soa[]Struct ---
soa_unzip :: proc(value: $S/#soa[]$E) -> (slices: ...) ---
unreachable :: proc() -> ! ---
+343
View File
@@ -0,0 +1,343 @@
// This is purely for documentation
//+build ignore
package intrinsics
// Package-Related
is_package_imported :: proc(package_name: string) -> bool ---
// Matrix Related Procedures
transpose :: proc(m: $T/matrix[$R, $C]$E) -> matrix[C, R]E ---
outer_product :: proc(a: $A/[$X]$E, b: $B/[$Y]E) -> matrix[X, Y]E ---
hadamard_product :: proc(a, b: $T/matrix[$R, $C]$E) -> T ---
matrix_flatten :: proc(m: $T/matrix[$R, $C]$E) -> [R*C]E ---
// Types
soa_struct :: proc($N: int, $T: typeid) -> type/#soa[N]T
// Volatile
volatile_load :: proc(dst: ^$T) -> T ---
volatile_store :: proc(dst: ^$T, val: T) ---
non_temporal_load :: proc(dst: ^$T) -> T ---
non_temporal_store :: proc(dst: ^$T, val: T) ---
// Trapping
debug_trap :: proc() ---
trap :: proc() -> ! ---
// Instructions
alloca :: proc(size, align: int) -> [^]u8 ---
cpu_relax :: proc() ---
read_cycle_counter :: proc() -> i64 ---
count_ones :: proc(x: $T) -> T where type_is_integer(T) || type_is_simd_vector(T) ---
count_zeros :: proc(x: $T) -> T where type_is_integer(T) || type_is_simd_vector(T) ---
count_trailing_zeros :: proc(x: $T) -> T where type_is_integer(T) || type_is_simd_vector(T) ---
count_leading_zeros :: proc(x: $T) -> T where type_is_integer(T) || type_is_simd_vector(T) ---
reverse_bits :: proc(x: $T) -> T where type_is_integer(T) || type_is_simd_vector(T) ---
byte_swap :: proc(x: $T) -> T where type_is_integer(T) || type_is_float(T) ---
overflow_add :: proc(lhs, rhs: $T) -> (T, bool) ---
overflow_sub :: proc(lhs, rhs: $T) -> (T, bool) ---
overflow_mul :: proc(lhs, rhs: $T) -> (T, bool) ---
sqrt :: proc(x: $T) -> T where type_is_float(T) || (type_is_simd_vector(T) && type_is_float(type_elem_type(T))) ---
fused_mul_add :: proc(a, b, c: $T) -> T where type_is_float(T) || (type_is_simd_vector(T) && type_is_float(type_elem_type(T))) ---
mem_copy :: proc(dst, src: rawptr, len: int) ---
mem_copy_non_overlapping :: proc(dst, src: rawptr, len: int) ---
mem_zero :: proc(ptr: rawptr, len: int) ---
mem_zero_volatile :: proc(ptr: rawptr, len: int) ---
// prefer [^]T operations if possible
ptr_offset :: proc(ptr: ^$T, offset: int) -> ^T ---
ptr_sub :: proc(a, b: ^$T) -> int ---
unaligned_load :: proc(src: ^$T) -> T ---
unaligned_store :: proc(dst: ^$T, val: T) -> T ---
fixed_point_mul :: proc(lhs, rhs: $T, #const scale: uint) -> T where type_is_integer(T) ---
fixed_point_div :: proc(lhs, rhs: $T, #const scale: uint) -> T where type_is_integer(T) ---
fixed_point_mul_sat :: proc(lhs, rhs: $T, #const scale: uint) -> T where type_is_integer(T) ---
fixed_point_div_sat :: proc(lhs, rhs: $T, #const scale: uint) -> T where type_is_integer(T) ---
prefetch_read_instruction :: proc(address: rawptr, #const locality: i32 /* 0..=3 */) ---
prefetch_read_data :: proc(address: rawptr, #const locality: i32 /* 0..=3 */) ---
prefetch_write_instruction :: proc(address: rawptr, #const locality: i32 /* 0..=3 */) ---
prefetch_write_data :: proc(address: rawptr, #const locality: i32 /* 0..=3 */) ---
// Compiler Hints
expect :: proc(val, expected_val: T) -> T ---
// Linux and Darwin Only
syscall :: proc(id: uintptr, args: ..uintptr) -> uintptr ---
// FreeBSD, NetBSD, et cetera
syscall_bsd :: proc(id: uintptr, args: ..uintptr) -> (uintptr, bool) ---
// Atomics
Atomic_Memory_Order :: enum {
Relaxed = 0, // Unordered
Consume = 1, // Monotonic
Acquire = 2,
Release = 3,
Acq_Rel = 4,
Seq_Cst = 5,
}
atomic_type_is_lock_free :: proc($T: typeid) -> bool ---
atomic_thread_fence :: proc(order: Atomic_Memory_Order) ---
atomic_signal_fence :: proc(order: Atomic_Memory_Order) ---
atomic_store :: proc(dst: ^$T, val: T) ---
atomic_store_explicit :: proc(dst: ^$T, val: T, order: Atomic_Memory_Order) ---
atomic_load :: proc(dst: ^$T) -> T ---
atomic_load_explicit :: proc(dst: ^$T, order: Atomic_Memory_Order) -> T ---
// fetch then operator
atomic_add :: proc(dst: ^$T, val: T) -> T ---
atomic_add_explicit :: proc(dst: ^$T, val: T, order: Atomic_Memory_Order) -> T ---
atomic_sub :: proc(dst: ^$T, val: T) -> T ---
atomic_sub_explicit :: proc(dst: ^$T, val: T, order: Atomic_Memory_Order) -> T ---
atomic_and :: proc(dst: ^$T, val: T) -> T ---
atomic_and_explicit :: proc(dst: ^$T, val: T, order: Atomic_Memory_Order) -> T ---
atomic_nand :: proc(dst: ^$T, val: T) -> T ---
atomic_nand_explicit :: proc(dst: ^$T, val: T, order: Atomic_Memory_Order) -> T ---
atomic_or :: proc(dst: ^$T, val: T) -> T ---
atomic_or_explicit :: proc(dst: ^$T, val: T, order: Atomic_Memory_Order) -> T ---
atomic_xor :: proc(dst: ^$T, val: T) -> T ---
atomic_xor_explicit :: proc(dst: ^$T, val: T, order: Atomic_Memory_Order) -> T ---
atomic_exchange :: proc(dst: ^$T, val: T) -> T ---
atomic_exchange_explicit :: proc(dst: ^$T, val: T, order: Atomic_Memory_Order) -> T ---
atomic_compare_exchange_strong :: proc(dst: ^$T, old, new: T) -> (T, bool) #optional_ok ---
atomic_compare_exchange_strong_explicit :: proc(dst: ^$T, old, new: T, success, failure: Atomic_Memory_Order) -> (T, bool) #optional_ok ---
atomic_compare_exchange_weak :: proc(dst: ^$T, old, new: T) -> (T, bool) #optional_ok ---
atomic_compare_exchange_weak_explicit :: proc(dst: ^$T, old, new: T, success, failure: Atomic_Memory_Order) -> (T, bool) #optional_ok ---
// Constant type tests
type_base_type :: proc($T: typeid) -> type ---
type_core_type :: proc($T: typeid) -> type ---
type_elem_type :: proc($T: typeid) -> type ---
type_is_boolean :: proc($T: typeid) -> bool ---
type_is_integer :: proc($T: typeid) -> bool ---
type_is_rune :: proc($T: typeid) -> bool ---
type_is_float :: proc($T: typeid) -> bool ---
type_is_complex :: proc($T: typeid) -> bool ---
type_is_quaternion :: proc($T: typeid) -> bool ---
type_is_string :: proc($T: typeid) -> bool ---
type_is_typeid :: proc($T: typeid) -> bool ---
type_is_any :: proc($T: typeid) -> bool ---
type_is_endian_platform :: proc($T: typeid) -> bool ---
type_is_endian_little :: proc($T: typeid) -> bool ---
type_is_endian_big :: proc($T: typeid) -> bool ---
type_is_unsigned :: proc($T: typeid) -> bool ---
type_is_numeric :: proc($T: typeid) -> bool ---
type_is_ordered :: proc($T: typeid) -> bool ---
type_is_ordered_numeric :: proc($T: typeid) -> bool ---
type_is_indexable :: proc($T: typeid) -> bool ---
type_is_sliceable :: proc($T: typeid) -> bool ---
type_is_comparable :: proc($T: typeid) -> bool ---
type_is_simple_compare :: proc($T: typeid) -> bool --- // easily compared using memcmp (== and !=)
type_is_dereferenceable :: proc($T: typeid) -> bool ---
type_is_valid_map_key :: proc($T: typeid) -> bool ---
type_is_valid_matrix_elements :: proc($T: typeid) -> bool ---
type_is_named :: proc($T: typeid) -> bool ---
type_is_pointer :: proc($T: typeid) -> bool ---
type_is_multi_pointer :: proc($T: typeid) -> bool ---
type_is_array :: proc($T: typeid) -> bool ---
type_is_enumerated_array :: proc($T: typeid) -> bool ---
type_is_slice :: proc($T: typeid) -> bool ---
type_is_dynamic_array :: proc($T: typeid) -> bool ---
type_is_map :: proc($T: typeid) -> bool ---
type_is_struct :: proc($T: typeid) -> bool ---
type_is_union :: proc($T: typeid) -> bool ---
type_is_enum :: proc($T: typeid) -> bool ---
type_is_proc :: proc($T: typeid) -> bool ---
type_is_bit_set :: proc($T: typeid) -> bool ---
type_is_simd_vector :: proc($T: typeid) -> bool ---
type_is_matrix :: proc($T: typeid) -> bool ---
type_has_nil :: proc($T: typeid) -> bool ---
type_is_matrix_row_major :: proc($T: typeid) -> bool where type_is_matrix(T) ---
type_is_matrix_column_major :: proc($T: typeid) -> bool where type_is_matrix(T) ---
type_is_specialization_of :: proc($T, $S: typeid) -> bool ---
type_is_variant_of :: proc($U, $V: typeid) -> bool where type_is_union(U) ---
type_union_tag_type :: proc($T: typeid) -> typeid where type_is_union(T) ---
type_union_tag_offset :: proc($T: typeid) -> uintptr where type_is_union(T) ---
type_union_base_tag_value :: proc($T: typeid) -> int where type_is_union(U) ---
type_union_variant_count :: proc($T: typeid) -> int where type_is_union(T) ---
type_variant_type_of :: proc($T: typeid, $index: int) -> typeid where type_is_union(T) ---
type_variant_index_of :: proc($U, $V: typeid) -> int where type_is_union(U) ---
type_bit_set_elem_type :: proc($T: typeid) -> typeid where type_is_bit_set(T) ---
type_bit_set_underlying_type :: proc($T: typeid) -> typeid where type_is_bit_set(T) ---
type_has_field :: proc($T: typeid, $name: string) -> bool ---
type_field_type :: proc($T: typeid, $name: string) -> typeid ---
type_proc_parameter_count :: proc($T: typeid) -> int where type_is_proc(T) ---
type_proc_return_count :: proc($T: typeid) -> int where type_is_proc(T) ---
type_proc_parameter_type :: proc($T: typeid, index: int) -> typeid where type_is_proc(T) ---
type_proc_return_type :: proc($T: typeid, index: int) -> typeid where type_is_proc(T) ---
type_struct_field_count :: proc($T: typeid) -> int where type_is_struct(T) ---
type_struct_has_implicit_padding :: proc($T: typeid) -> bool where type_is_struct(T) ---
type_polymorphic_record_parameter_count :: proc($T: typeid) -> typeid ---
type_polymorphic_record_parameter_value :: proc($T: typeid, index: int) -> $V ---
type_is_specialized_polymorphic_record :: proc($T: typeid) -> bool ---
type_is_unspecialized_polymorphic_record :: proc($T: typeid) -> bool ---
type_is_subtype_of :: proc($T, $U: typeid) -> bool ---
type_field_index_of :: proc($T: typeid, $name: string) -> uintptr ---
type_equal_proc :: proc($T: typeid) -> (equal: proc "contextless" (rawptr, rawptr) -> bool) where type_is_comparable(T) ---
type_hasher_proc :: proc($T: typeid) -> (hasher: proc "contextless" (data: rawptr, seed: uintptr) -> uintptr) where type_is_comparable(T) ---
type_map_info :: proc($T: typeid/map[$K]$V) -> ^runtime.Map_Info ---
type_map_cell_info :: proc($T: typeid) -> ^runtime.Map_Cell_Info ---
type_convert_variants_to_pointers :: proc($T: typeid) -> typeid where type_is_union(T) ---
type_merge :: proc($U, $V: typeid) -> typeid where type_is_union(U), type_is_union(V) ---
constant_utf16_cstring :: proc($literal: string) -> [^]u16 ---
// SIMD related
simd_add :: proc(a, b: #simd[N]T) -> #simd[N]T ---
simd_sub :: proc(a, b: #simd[N]T) -> #simd[N]T ---
simd_mul :: proc(a, b: #simd[N]T) -> #simd[N]T ---
simd_div :: proc(a, b: #simd[N]T) -> #simd[N]T where type_is_float(T) ---
// Keeps Odin's Behaviour
// (x << y) if y <= mask else 0
simd_shl :: proc(a: #simd[N]T, b: #simd[N]Unsigned_Integer) -> #simd[N]T ---
simd_shr :: proc(a: #simd[N]T, b: #simd[N]Unsigned_Integer) -> #simd[N]T ---
// Similar to C's Behaviour
// x << (y & mask)
simd_shl_masked :: proc(a: #simd[N]T, b: #simd[N]Unsigned_Integer) -> #simd[N]T ---
simd_shr_masked :: proc(a: #simd[N]T, b: #simd[N]Unsigned_Integer) -> #simd[N]T ---
simd_add_sat :: proc(a, b: #simd[N]T) -> #simd[N]T ---
simd_sub_sat :: proc(a, b: #simd[N]T) -> #simd[N]T ---
simd_bit_and :: proc(a, b: #simd[N]T) -> #simd[N]T ---
simd_bit_or :: proc(a, b: #simd[N]T) -> #simd[N]T ---
simd_bit_xor :: proc(a, b: #simd[N]T) -> #simd[N]T ---
simd_bit_and_not :: proc(a, b: #simd[N]T) -> #simd[N]T ---
simd_neg :: proc(a: #simd[N]T) -> #simd[N]T ---
simd_abs :: proc(a: #simd[N]T) -> #simd[N]T ---
simd_min :: proc(a, b: #simd[N]T) -> #simd[N]T ---
simd_max :: proc(a, b: #simd[N]T) -> #simd[N]T ---
simd_clamp :: proc(v, min, max: #simd[N]T) -> #simd[N]T ---
// Return an unsigned integer of the same size as the input type
// NOT A BOOLEAN
// element-wise:
// false => 0x00...00
// true => 0xff...ff
simd_lanes_eq :: proc(a, b: #simd[N]T) -> #simd[N]Integer ---
simd_lanes_ne :: proc(a, b: #simd[N]T) -> #simd[N]Integer ---
simd_lanes_lt :: proc(a, b: #simd[N]T) -> #simd[N]Integer ---
simd_lanes_le :: proc(a, b: #simd[N]T) -> #simd[N]Integer ---
simd_lanes_gt :: proc(a, b: #simd[N]T) -> #simd[N]Integer ---
simd_lanes_ge :: proc(a, b: #simd[N]T) -> #simd[N]Integer ---
simd_extract :: proc(a: #simd[N]T, idx: uint) -> T ---
simd_replace :: proc(a: #simd[N]T, idx: uint, elem: T) -> #simd[N]T ---
simd_reduce_add_ordered :: proc(a: #simd[N]T) -> T ---
simd_reduce_mul_ordered :: proc(a: #simd[N]T) -> T ---
simd_reduce_min :: proc(a: #simd[N]T) -> T ---
simd_reduce_max :: proc(a: #simd[N]T) -> T ---
simd_reduce_and :: proc(a: #simd[N]T) -> T ---
simd_reduce_or :: proc(a: #simd[N]T) -> T ---
simd_reduce_xor :: proc(a: #simd[N]T) -> T ---
simd_shuffle :: proc(a, b: #simd[N]T, indices: ..int) -> #simd[len(indices)]T ---
simd_select :: proc(cond: #simd[N]boolean_or_integer, true, false: #simd[N]T) -> #simd[N]T ---
// Lane-wise operations
simd_ceil :: proc(a: #simd[N]any_float) -> #simd[N]any_float ---
simd_floor :: proc(a: #simd[N]any_float) -> #simd[N]any_float ---
simd_trunc :: proc(a: #simd[N]any_float) -> #simd[N]any_float ---
// rounding to the nearest integral value; if two values are equally near, rounds to the even one
simd_nearest :: proc(a: #simd[N]any_float) -> #simd[N]any_float ---
simd_to_bits :: proc(v: #simd[N]T) -> #simd[N]Integer where size_of(T) == size_of(Integer), type_is_unsigned(Integer) ---
// equivalent a swizzle with descending indices, e.g. reserve(a, 3, 2, 1, 0)
simd_reverse :: proc(a: #simd[N]T) -> #simd[N]T ---
simd_rotate_left :: proc(a: #simd[N]T, $offset: int) -> #simd[N]T ---
simd_rotate_right :: proc(a: #simd[N]T, $offset: int) -> #simd[N]T ---
// Checks if the current target supports the given target features.
//
// Takes a constant comma-seperated string (eg: "sha512,sse4.1"), or a procedure type which has either
// `@(require_target_feature)` or `@(enable_target_feature)` as its input and returns a boolean indicating
// if all listed features are supported.
has_target_feature :: proc($test: $T) -> bool where type_is_string(T) || type_is_proc(T) ---
// Returns the value of the procedure where `x` must be a call expression
procedure_of :: proc(x: $T) -> T where type_is_proc(T) ---
// WASM targets only
wasm_memory_grow :: proc(index, delta: uintptr) -> int ---
wasm_memory_size :: proc(index: uintptr) -> int ---
// `timeout_ns` is maximum number of nanoseconds the calling thread will be blocked for
// A negative value will be blocked forever
// Return value:
// 0 - indicates that the thread blocked and then was woken up
// 1 - the loaded value from `ptr` did not match `expected`, the thread did not block
// 2 - the thread blocked, but the timeout
@(require_target_feature="atomics")
wasm_memory_atomic_wait32 :: proc(ptr: ^u32, expected: u32, timeout_ns: i64) -> u32 ---
@(require_target_feature="atomics")
wasm_memory_atomic_notify32 :: proc(ptr: ^u32, waiters: u32) -> (waiters_woken_up: u32) ---
// x86 Targets (i386, amd64)
x86_cpuid :: proc(ax, cx: u32) -> (eax, ebx, ecx, edx: u32) ---
x86_xgetbv :: proc(cx: u32) -> (eax, edx: u32) ---
// Darwin targets only
objc_object :: struct{}
objc_selector :: struct{}
objc_class :: struct{}
objc_id :: ^objc_object
objc_SEL :: ^objc_selector
objc_Class :: ^objc_class
objc_find_selector :: proc($name: string) -> objc_SEL ---
objc_register_selector :: proc($name: string) -> objc_SEL ---
objc_find_class :: proc($name: string) -> objc_Class ---
objc_register_class :: proc($name: string) -> objc_Class ---
valgrind_client_request :: proc(default: uintptr, request: uintptr, a0, a1, a2, a3, a4: uintptr) -> uintptr ---
// Internal compiler use only
__entry_point :: proc() ---
+261 -50
View File
@@ -18,9 +18,10 @@
// This could change at a later date if the all these data structures are
// implemented within the compiler rather than in this "preload" file
//
//+no-instrumentation
package runtime
import "core:intrinsics"
import "base:intrinsics"
// NOTE(bill): This must match the compiler's
Calling_Convention :: enum u8 {
@@ -33,6 +34,11 @@ Calling_Convention :: enum u8 {
None = 6,
Naked = 7,
_ = 8, // reserved
Win64 = 9,
SysV = 10,
}
Type_Info_Enum_Value :: distinct i64
@@ -78,8 +84,8 @@ Type_Info_Multi_Pointer :: struct {
elem: ^Type_Info,
}
Type_Info_Procedure :: struct {
params: ^Type_Info, // Type_Info_Tuple
results: ^Type_Info, // Type_Info_Tuple
params: ^Type_Info, // Type_Info_Parameters
results: ^Type_Info, // Type_Info_Parameters
variadic: bool,
convention: Calling_Convention,
}
@@ -95,13 +101,16 @@ Type_Info_Enumerated_Array :: struct {
count: int,
min_value: Type_Info_Enum_Value,
max_value: Type_Info_Enum_Value,
is_sparse: bool,
}
Type_Info_Dynamic_Array :: struct {elem: ^Type_Info, elem_size: int}
Type_Info_Slice :: struct {elem: ^Type_Info, elem_size: int}
Type_Info_Tuple :: struct { // Only used for procedures parameters and results
Type_Info_Parameters :: struct { // Only used for procedures parameters and results
types: []^Type_Info,
names: []string,
}
Type_Info_Tuple :: Type_Info_Parameters // Will be removed eventually
Type_Info_Struct :: struct {
types: []^Type_Info,
@@ -111,6 +120,7 @@ Type_Info_Struct :: struct {
tags: []string,
is_packed: bool,
is_raw_union: bool,
is_no_copy: bool,
custom_align: bool,
equal: Equal_Proc, // set only when the struct has .Comparable set but does not have .Simple_Compare set
@@ -129,7 +139,7 @@ Type_Info_Union :: struct {
custom_align: bool,
no_nil: bool,
maybe: bool,
shared_nil: bool,
}
Type_Info_Enum :: struct {
base: ^Type_Info,
@@ -137,11 +147,9 @@ Type_Info_Enum :: struct {
values: []Type_Info_Enum_Value,
}
Type_Info_Map :: struct {
key: ^Type_Info,
value: ^Type_Info,
generated_struct: ^Type_Info,
key_equal: Equal_Proc,
key_hasher: Hasher_Proc,
key: ^Type_Info,
value: ^Type_Info,
map_info: ^Map_Info,
}
Type_Info_Bit_Set :: struct {
elem: ^Type_Info,
@@ -155,11 +163,11 @@ Type_Info_Simd_Vector :: struct {
count: int,
}
Type_Info_Relative_Pointer :: struct {
pointer: ^Type_Info,
pointer: ^Type_Info, // ^T
base_integer: ^Type_Info,
}
Type_Info_Relative_Slice :: struct {
slice: ^Type_Info,
Type_Info_Relative_Multi_Pointer :: struct {
pointer: ^Type_Info, // [^]T
base_integer: ^Type_Info,
}
Type_Info_Matrix :: struct {
@@ -169,6 +177,21 @@ Type_Info_Matrix :: struct {
row_count: int,
column_count: int,
// Total element count = column_count * elem_stride
layout: enum u8 {
Column_Major, // array of column vectors
Row_Major, // array of row vectors
},
}
Type_Info_Soa_Pointer :: struct {
elem: ^Type_Info,
}
Type_Info_Bit_Field :: struct {
backing_type: ^Type_Info,
names: []string,
types: []^Type_Info,
bit_sizes: []uintptr,
bit_offsets: []uintptr,
tags: []string,
}
Type_Info_Flag :: enum u8 {
@@ -201,7 +224,7 @@ Type_Info :: struct {
Type_Info_Enumerated_Array,
Type_Info_Dynamic_Array,
Type_Info_Slice,
Type_Info_Tuple,
Type_Info_Parameters,
Type_Info_Struct,
Type_Info_Union,
Type_Info_Enum,
@@ -209,8 +232,10 @@ Type_Info :: struct {
Type_Info_Bit_Set,
Type_Info_Simd_Vector,
Type_Info_Relative_Pointer,
Type_Info_Relative_Slice,
Type_Info_Relative_Multi_Pointer,
Type_Info_Matrix,
Type_Info_Soa_Pointer,
Type_Info_Bit_Field,
},
}
@@ -241,26 +266,41 @@ Typeid_Kind :: enum u8 {
Bit_Set,
Simd_Vector,
Relative_Pointer,
Relative_Slice,
Relative_Multi_Pointer,
Matrix,
Soa_Pointer,
Bit_Field,
}
#assert(len(Typeid_Kind) < 32)
// Typeid_Bit_Field :: bit_field #align align_of(uintptr) {
// index: 8*size_of(uintptr) - 8,
// kind: 5, // Typeid_Kind
// named: 1,
// special: 1, // signed, cstring, etc
// reserved: 1,
// }
// #assert(size_of(Typeid_Bit_Field) == size_of(uintptr));
Typeid_Bit_Field :: bit_field uintptr {
index: uintptr | 8*size_of(uintptr) - 8,
kind: Typeid_Kind | 5, // Typeid_Kind
named: bool | 1,
special: bool | 1, // signed, cstring, etc
reserved: bool | 1,
}
#assert(size_of(Typeid_Bit_Field) == size_of(uintptr))
// NOTE(bill): only the ones that are needed (not all types)
// This will be set by the compiler
type_table: []Type_Info
type_table: []^Type_Info
args__: []cstring
when ODIN_OS == .Windows {
// NOTE(Jeroen): If we're a Windows DLL, fwdReason will be populated.
// This tells a DLL if it's first loaded, about to be unloaded, or a thread is joining/exiting.
DLL_Forward_Reason :: enum u32 {
Process_Detach = 0, // About to unload DLL
Process_Attach = 1, // Entry point
Thread_Attach = 2,
Thread_Detach = 3,
}
dll_forward_reason: DLL_Forward_Reason
}
// IMPORTANT NOTE(bill): Must be in this order (as the compiler relies upon it)
@@ -270,6 +310,14 @@ Source_Code_Location :: struct {
procedure: string,
}
/*
Used by the built-in directory `#load_directory(path: string) -> []Load_Directory_File`
*/
Load_Directory_File :: struct {
name: string,
data: []byte, // immutable data
}
Assertion_Failure_Proc :: #type proc(prefix, message: string, loc: Source_Code_Location) -> !
// Allocation Stuff
@@ -280,6 +328,8 @@ Allocator_Mode :: enum byte {
Resize,
Query_Features,
Query_Info,
Alloc_Non_Zeroed,
Resize_Non_Zeroed,
}
Allocator_Mode_Set :: distinct bit_set[Allocator_Mode]
@@ -307,6 +357,14 @@ Allocator :: struct {
data: rawptr,
}
Byte :: 1
Kilobyte :: 1024 * Byte
Megabyte :: 1024 * Kilobyte
Gigabyte :: 1024 * Megabyte
Terabyte :: 1024 * Gigabyte
Petabyte :: 1024 * Terabyte
Exabyte :: 1024 * Petabyte
// Logging stuff
Logger_Level :: enum uint {
@@ -339,13 +397,35 @@ Logger :: struct {
options: Logger_Options,
}
Random_Generator_Mode :: enum {
Read,
Reset,
Query_Info,
}
Random_Generator_Query_Info_Flag :: enum u32 {
Cryptographic,
Uniform,
External_Entropy,
Resettable,
}
Random_Generator_Query_Info :: distinct bit_set[Random_Generator_Query_Info_Flag; u32]
Random_Generator_Proc :: #type proc(data: rawptr, mode: Random_Generator_Mode, p: []byte)
Random_Generator :: struct {
procedure: Random_Generator_Proc,
data: rawptr,
}
Context :: struct {
allocator: Allocator,
temp_allocator: Allocator,
assertion_failure_proc: Assertion_Failure_Proc,
logger: Logger,
random_generator: Random_Generator,
user_data: any,
user_ptr: rawptr,
user_index: int,
@@ -371,9 +451,32 @@ Raw_Dynamic_Array :: struct {
allocator: Allocator,
}
// The raw, type-erased representation of a map.
//
// 32-bytes on 64-bit
// 16-bytes on 32-bit
Raw_Map :: struct {
hashes: []int,
entries: Raw_Dynamic_Array,
// A single allocation spanning all keys, values, and hashes.
// {
// k: Map_Cell(K) * (capacity / ks_per_cell)
// v: Map_Cell(V) * (capacity / vs_per_cell)
// h: Map_Cell(H) * (capacity / hs_per_cell)
// }
//
// The data is allocated assuming 64-byte alignment, meaning the address is
// always a multiple of 64. This means we have 6 bits of zeros in the pointer
// to store the capacity. We can store a value as large as 2^6-1 or 63 in
// there. This conveniently is the maximum log2 capacity we can have for a map
// as Odin uses signed integers to represent capacity.
//
// Since the hashes are backed by Map_Hash, which is just a 64-bit unsigned
// integer, the cell structure for hashes is unnecessary because 64/8 is 8 and
// requires no padding, meaning it can be indexed as a regular array of
// Map_Hash directly, though for consistency sake it's written as if it were
// an array of Map_Cell(Map_Hash).
data: uintptr, // 8-bytes on 64-bits, 4-bytes on 32-bits
len: uintptr, // 8-bytes on 64-bits, 4-bytes on 32-bits
allocator: Allocator, // 16-bytes on 64-bits, 8-bytes on 32-bits
}
Raw_Any :: struct {
@@ -385,12 +488,61 @@ Raw_Cstring :: struct {
data: [^]byte,
}
Raw_Soa_Pointer :: struct {
data: rawptr,
index: int,
}
Raw_Complex32 :: struct {real, imag: f16}
Raw_Complex64 :: struct {real, imag: f32}
Raw_Complex128 :: struct {real, imag: f64}
Raw_Quaternion64 :: struct {imag, jmag, kmag: f16, real: f16}
Raw_Quaternion128 :: struct {imag, jmag, kmag: f32, real: f32}
Raw_Quaternion256 :: struct {imag, jmag, kmag: f64, real: f64}
Raw_Quaternion64_Vector_Scalar :: struct {vector: [3]f16, scalar: f16}
Raw_Quaternion128_Vector_Scalar :: struct {vector: [3]f32, scalar: f32}
Raw_Quaternion256_Vector_Scalar :: struct {vector: [3]f64, scalar: f64}
/*
// Defined internally by the compiler
Odin_OS_Type :: enum int {
Unknown,
Windows,
Darwin,
Linux,
Essence,
FreeBSD,
Haiku,
OpenBSD,
NetBSD,
WASI,
JS,
Freestanding,
}
*/
Odin_OS_Type :: type_of(ODIN_OS)
/*
// Defined internally by the compiler
Odin_Arch_Type :: enum int {
Unknown,
amd64,
i386,
arm32,
arm64,
wasm32,
wasm64p32,
}
*/
Odin_Arch_Type :: type_of(ODIN_ARCH)
/*
// Defined internally by the compiler
Odin_Build_Mode_Type :: enum int {
Executable,
Dynamic,
Static,
Object,
Assembly,
LLVM_IR,
@@ -409,6 +561,42 @@ Odin_Build_Mode_Type :: type_of(ODIN_BUILD_MODE)
Odin_Endian_Type :: type_of(ODIN_ENDIAN)
/*
// Defined internally by the compiler
Odin_Platform_Subtarget_Type :: enum int {
Default,
iOS,
}
*/
Odin_Platform_Subtarget_Type :: type_of(ODIN_PLATFORM_SUBTARGET)
/*
// Defined internally by the compiler
Odin_Sanitizer_Flag :: enum u32 {
Address = 0,
Memory = 1,
Thread = 2,
}
Odin_Sanitizer_Flags :: distinct bitset[Odin_Sanitizer_Flag; u32]
ODIN_SANITIZER_FLAGS // is a constant
*/
Odin_Sanitizer_Flags :: type_of(ODIN_SANITIZER_FLAGS)
/*
// Defined internally by the compiler
Odin_Optimization_Mode :: enum int {
None = -1,
Minimal = 0,
Size = 1,
Speed = 2,
Aggressive = 3,
}
ODIN_OPTIMIZATION_MODE // is a constant
*/
Odin_Optimization_Mode :: type_of(ODIN_OPTIMIZATION_MODE)
/////////////////////////////
// Init Startup Procedures //
/////////////////////////////
@@ -417,12 +605,14 @@ Odin_Endian_Type :: type_of(ODIN_ENDIAN)
// This is probably only useful for freestanding targets
foreign {
@(link_name="__$startup_runtime")
_startup_runtime :: proc() ---
_startup_runtime :: proc "odin" () ---
@(link_name="__$cleanup_runtime")
_cleanup_runtime :: proc "odin" () ---
}
@(link_name="__$cleanup_runtime")
_cleanup_runtime :: proc() {
default_temp_allocator_destroy(&global_default_temp_allocator_data)
_cleanup_runtime_contextless :: proc "contextless" () {
context = default_context()
_cleanup_runtime()
}
@@ -455,8 +645,9 @@ type_info_core :: proc "contextless" (info: ^Type_Info) -> ^Type_Info {
base := info
loop: for {
#partial switch i in base.variant {
case Type_Info_Named: base = i.base
case Type_Info_Enum: base = i.base
case Type_Info_Named: base = i.base
case Type_Info_Enum: base = i.base
case Type_Info_Bit_Field: base = i.backing_type
case: break loop
}
}
@@ -471,19 +662,21 @@ __type_info_of :: proc "contextless" (id: typeid) -> ^Type_Info #no_bounds_check
if n < 0 || n >= len(type_table) {
n = 0
}
return &type_table[n]
return type_table[n]
}
typeid_base :: proc "contextless" (id: typeid) -> typeid {
ti := type_info_of(id)
ti = type_info_base(ti)
return ti.id
when !ODIN_NO_RTTI {
typeid_base :: proc "contextless" (id: typeid) -> typeid {
ti := type_info_of(id)
ti = type_info_base(ti)
return ti.id
}
typeid_core :: proc "contextless" (id: typeid) -> typeid {
ti := type_info_core(type_info_of(id))
return ti.id
}
typeid_base_without_enum :: typeid_core
}
typeid_core :: proc "contextless" (id: typeid) -> typeid {
ti := type_info_core(type_info_of(id))
return ti.id
}
typeid_base_without_enum :: typeid_core
@@ -523,12 +716,14 @@ __init_context :: proc "contextless" (c: ^Context) {
return
}
// NOTE(bill): Do not initialize these procedures with a call as they are not defined with the "contexless" calling convention
// NOTE(bill): Do not initialize these procedures with a call as they are not defined with the "contextless" calling convention
c.allocator.procedure = default_allocator_proc
c.allocator.data = nil
c.temp_allocator.procedure = default_temp_allocator_proc
c.temp_allocator.data = &global_default_temp_allocator_data
when !NO_DEFAULT_TEMP_ALLOCATOR {
c.temp_allocator.data = &global_default_temp_allocator_data
}
when !ODIN_DISABLE_ASSERT {
c.assertion_failure_proc = default_assertion_failure_proc
@@ -536,20 +731,36 @@ __init_context :: proc "contextless" (c: ^Context) {
c.logger.procedure = default_logger_proc
c.logger.data = nil
c.random_generator.procedure = default_random_generator_proc
c.random_generator.data = nil
}
default_assertion_failure_proc :: proc(prefix, message: string, loc: Source_Code_Location) -> ! {
when ODIN_OS == "freestanding" {
when ODIN_OS == .Freestanding {
// Do nothing
} else {
print_caller_location(loc)
print_string(" ")
when ODIN_OS != .Orca && !ODIN_DISABLE_ASSERT {
print_caller_location(loc)
print_string(" ")
}
print_string(prefix)
if len(message) > 0 {
print_string(": ")
print_string(message)
}
print_byte('\n')
when ODIN_OS == .Orca {
assert_fail(
cstring(raw_data(loc.file_path)),
cstring(raw_data(loc.procedure)),
loc.line,
"",
cstring(raw_data(orca_stderr_buffer[:orca_stderr_buffer_idx])),
)
} else {
print_byte('\n')
}
}
trap()
}
+945
View File
@@ -0,0 +1,945 @@
package runtime
import "base:intrinsics"
@builtin
Maybe :: union($T: typeid) {T}
@(builtin, require_results)
container_of :: #force_inline proc "contextless" (ptr: $P/^$Field_Type, $T: typeid, $field_name: string) -> ^T
where intrinsics.type_has_field(T, field_name),
intrinsics.type_field_type(T, field_name) == Field_Type {
offset :: offset_of_by_string(T, field_name)
return (^T)(uintptr(ptr) - offset) if ptr != nil else nil
}
when !NO_DEFAULT_TEMP_ALLOCATOR {
@thread_local global_default_temp_allocator_data: Default_Temp_Allocator
}
@(builtin, disabled=NO_DEFAULT_TEMP_ALLOCATOR)
init_global_temporary_allocator :: proc(size: int, backup_allocator := context.allocator) {
when !NO_DEFAULT_TEMP_ALLOCATOR {
default_temp_allocator_init(&global_default_temp_allocator_data, size, backup_allocator)
}
}
// `copy_slice` is a built-in procedure that copies elements from a source slice `src` to a destination slice `dst`.
// The source and destination may overlap. Copy returns the number of elements copied, which will be the minimum
// of len(src) and len(dst).
//
// Prefer the procedure group `copy`.
@builtin
copy_slice :: proc "contextless" (dst, src: $T/[]$E) -> int {
n := max(0, min(len(dst), len(src)))
if n > 0 {
intrinsics.mem_copy(raw_data(dst), raw_data(src), n*size_of(E))
}
return n
}
// `copy_from_string` is a built-in procedure that copies elements from a source string `src` to a destination slice `dst`.
// The source and destination may overlap. Copy returns the number of elements copied, which will be the minimum
// of len(src) and len(dst).
//
// Prefer the procedure group `copy`.
@builtin
copy_from_string :: proc "contextless" (dst: $T/[]$E/u8, src: $S/string) -> int {
n := max(0, min(len(dst), len(src)))
if n > 0 {
intrinsics.mem_copy(raw_data(dst), raw_data(src), n)
}
return n
}
// `copy` is a built-in procedure that copies elements from a source slice/string `src` to a destination slice `dst`.
// The source and destination may overlap. Copy returns the number of elements copied, which will be the minimum
// of len(src) and len(dst).
@builtin
copy :: proc{copy_slice, copy_from_string}
// `unordered_remove` removed the element at the specified `index`. It does so by replacing the current end value
// with the old value, and reducing the length of the dynamic array by 1.
//
// Note: This is an O(1) operation.
// Note: If you want the elements to remain in their order, use `ordered_remove`.
// Note: If the index is out of bounds, this procedure will panic.
@builtin
unordered_remove :: proc(array: ^$D/[dynamic]$T, index: int, loc := #caller_location) #no_bounds_check {
bounds_check_error_loc(loc, index, len(array))
n := len(array)-1
if index != n {
array[index] = array[n]
}
(^Raw_Dynamic_Array)(array).len -= 1
}
// `ordered_remove` removed the element at the specified `index` whilst keeping the order of the other elements.
//
// Note: This is an O(N) operation.
// Note: If the elements do not have to remain in their order, prefer `unordered_remove`.
// Note: If the index is out of bounds, this procedure will panic.
@builtin
ordered_remove :: proc(array: ^$D/[dynamic]$T, index: int, loc := #caller_location) #no_bounds_check {
bounds_check_error_loc(loc, index, len(array))
if index+1 < len(array) {
copy(array[index:], array[index+1:])
}
(^Raw_Dynamic_Array)(array).len -= 1
}
// `remove_range` removes a range of elements specified by the range `lo` and `hi`, whilst keeping the order of the other elements.
//
// Note: This is an O(N) operation.
// Note: If the range is out of bounds, this procedure will panic.
@builtin
remove_range :: proc(array: ^$D/[dynamic]$T, lo, hi: int, loc := #caller_location) #no_bounds_check {
slice_expr_error_lo_hi_loc(loc, lo, hi, len(array))
n := max(hi-lo, 0)
if n > 0 {
if hi != len(array) {
copy(array[lo:], array[hi:])
}
(^Raw_Dynamic_Array)(array).len -= n
}
}
// `pop` will remove and return the end value of dynamic array `array` and reduces the length of `array` by 1.
//
// Note: If the dynamic array has no elements (`len(array) == 0`), this procedure will panic.
@builtin
pop :: proc(array: ^$T/[dynamic]$E, loc := #caller_location) -> (res: E) #no_bounds_check {
assert(len(array) > 0, loc=loc)
res = array[len(array)-1]
(^Raw_Dynamic_Array)(array).len -= 1
return res
}
// `pop_safe` trys to remove and return the end value of dynamic array `array` and reduces the length of `array` by 1.
// If the operation is not possible, it will return false.
@builtin
pop_safe :: proc "contextless" (array: ^$T/[dynamic]$E) -> (res: E, ok: bool) #no_bounds_check {
if len(array) == 0 {
return
}
res, ok = array[len(array)-1], true
(^Raw_Dynamic_Array)(array).len -= 1
return
}
// `pop_front` will remove and return the first value of dynamic array `array` and reduces the length of `array` by 1.
//
// Note: If the dynamic array as no elements (`len(array) == 0`), this procedure will panic.
@builtin
pop_front :: proc(array: ^$T/[dynamic]$E, loc := #caller_location) -> (res: E) #no_bounds_check {
assert(len(array) > 0, loc=loc)
res = array[0]
if len(array) > 1 {
copy(array[0:], array[1:])
}
(^Raw_Dynamic_Array)(array).len -= 1
return res
}
// `pop_front_safe` trys to return and remove the first value of dynamic array `array` and reduces the length of `array` by 1.
// If the operation is not possible, it will return false.
@builtin
pop_front_safe :: proc "contextless" (array: ^$T/[dynamic]$E) -> (res: E, ok: bool) #no_bounds_check {
if len(array) == 0 {
return
}
res, ok = array[0], true
if len(array) > 1 {
copy(array[0:], array[1:])
}
(^Raw_Dynamic_Array)(array).len -= 1
return
}
// `clear` will set the length of a passed dynamic array or map to `0`
@builtin
clear :: proc{
clear_dynamic_array,
clear_map,
clear_soa_dynamic_array,
}
// `reserve` will try to reserve memory of a passed dynamic array or map to the requested element count (setting the `cap`).
@builtin
reserve :: proc{
reserve_dynamic_array,
reserve_map,
reserve_soa,
}
@builtin
non_zero_reserve :: proc{
non_zero_reserve_dynamic_array,
non_zero_reserve_soa,
}
// `resize` will try to resize memory of a passed dynamic array to the requested element count (setting the `len`, and possibly `cap`).
@builtin
resize :: proc{
resize_dynamic_array,
resize_soa,
}
@builtin
non_zero_resize :: proc{
non_zero_resize_dynamic_array,
non_zero_resize_soa,
}
// Shrinks the capacity of a dynamic array or map down to the current length, or the given capacity.
@builtin
shrink :: proc{shrink_dynamic_array, shrink_map}
// `free` will try to free the passed pointer, with the given `allocator` if the allocator supports this operation.
@builtin
free :: proc{mem_free}
// `free_all` will try to free/reset all of the memory of the given `allocator` if the allocator supports this operation.
@builtin
free_all :: proc{mem_free_all}
// `delete_string` will try to free the underlying data of the passed string, with the given `allocator` if the allocator supports this operation.
//
// Note: Prefer the procedure group `delete`.
@builtin
delete_string :: proc(str: string, allocator := context.allocator, loc := #caller_location) -> Allocator_Error {
return mem_free_with_size(raw_data(str), len(str), allocator, loc)
}
// `delete_cstring` will try to free the underlying data of the passed string, with the given `allocator` if the allocator supports this operation.
//
// Note: Prefer the procedure group `delete`.
@builtin
delete_cstring :: proc(str: cstring, allocator := context.allocator, loc := #caller_location) -> Allocator_Error {
return mem_free((^byte)(str), allocator, loc)
}
// `delete_dynamic_array` will try to free the underlying data of the passed dynamic array, with the given `allocator` if the allocator supports this operation.
//
// Note: Prefer the procedure group `delete`.
@builtin
delete_dynamic_array :: proc(array: $T/[dynamic]$E, loc := #caller_location) -> Allocator_Error {
return mem_free_with_size(raw_data(array), cap(array)*size_of(E), array.allocator, loc)
}
// `delete_slice` will try to free the underlying data of the passed sliced, with the given `allocator` if the allocator supports this operation.
//
// Note: Prefer the procedure group `delete`.
@builtin
delete_slice :: proc(array: $T/[]$E, allocator := context.allocator, loc := #caller_location) -> Allocator_Error {
return mem_free_with_size(raw_data(array), len(array)*size_of(E), allocator, loc)
}
// `delete_map` will try to free the underlying data of the passed map, with the given `allocator` if the allocator supports this operation.
//
// Note: Prefer the procedure group `delete`.
@builtin
delete_map :: proc(m: $T/map[$K]$V, loc := #caller_location) -> Allocator_Error {
return map_free_dynamic(transmute(Raw_Map)m, map_info(T), loc)
}
// `delete` will try to free the underlying data of the passed built-in data structure (string, cstring, dynamic array, slice, or map), with the given `allocator` if the allocator supports this operation.
//
// Note: Prefer `delete` over the specific `delete_*` procedures where possible.
@builtin
delete :: proc{
delete_string,
delete_cstring,
delete_dynamic_array,
delete_slice,
delete_map,
delete_soa_slice,
delete_soa_dynamic_array,
}
// The new built-in procedure allocates memory. The first argument is a type, not a value, and the value
// return is a pointer to a newly allocated value of that type using the specified allocator, default is context.allocator
@(builtin, require_results)
new :: proc($T: typeid, allocator := context.allocator, loc := #caller_location) -> (^T, Allocator_Error) #optional_allocator_error {
return new_aligned(T, align_of(T), allocator, loc)
}
@(require_results)
new_aligned :: proc($T: typeid, alignment: int, allocator := context.allocator, loc := #caller_location) -> (t: ^T, err: Allocator_Error) {
data := mem_alloc_bytes(size_of(T), alignment, allocator, loc) or_return
t = (^T)(raw_data(data))
return
}
@(builtin, require_results)
new_clone :: proc(data: $T, allocator := context.allocator, loc := #caller_location) -> (t: ^T, err: Allocator_Error) #optional_allocator_error {
t_data := mem_alloc_bytes(size_of(T), align_of(T), allocator, loc) or_return
t = (^T)(raw_data(t_data))
if t != nil {
t^ = data
}
return
}
DEFAULT_DYNAMIC_ARRAY_CAPACITY :: 8
@(require_results)
make_aligned :: proc($T: typeid/[]$E, #any_int len: int, alignment: int, allocator := context.allocator, loc := #caller_location) -> (T, Allocator_Error) #optional_allocator_error {
make_slice_error_loc(loc, len)
data, err := mem_alloc_bytes(size_of(E)*len, alignment, allocator, loc)
if data == nil && size_of(E) != 0 {
return nil, err
}
s := Raw_Slice{raw_data(data), len}
return transmute(T)s, err
}
// `make_slice` allocates and initializes a slice. Like `new`, the first argument is a type, not a value.
// Unlike `new`, `make`'s return value is the same as the type of its argument, not a pointer to it.
//
// Note: Prefer using the procedure group `make`.
@(builtin, require_results)
make_slice :: proc($T: typeid/[]$E, #any_int len: int, allocator := context.allocator, loc := #caller_location) -> (T, Allocator_Error) #optional_allocator_error {
return make_aligned(T, len, align_of(E), allocator, loc)
}
// `make_dynamic_array` allocates and initializes a dynamic array. Like `new`, the first argument is a type, not a value.
// Unlike `new`, `make`'s return value is the same as the type of its argument, not a pointer to it.
//
// Note: Prefer using the procedure group `make`.
@(builtin, require_results)
make_dynamic_array :: proc($T: typeid/[dynamic]$E, allocator := context.allocator, loc := #caller_location) -> (T, Allocator_Error) #optional_allocator_error {
return make_dynamic_array_len_cap(T, 0, 0, allocator, loc)
}
// `make_dynamic_array_len` allocates and initializes a dynamic array. Like `new`, the first argument is a type, not a value.
// Unlike `new`, `make`'s return value is the same as the type of its argument, not a pointer to it.
//
// Note: Prefer using the procedure group `make`.
@(builtin, require_results)
make_dynamic_array_len :: proc($T: typeid/[dynamic]$E, #any_int len: int, allocator := context.allocator, loc := #caller_location) -> (T, Allocator_Error) #optional_allocator_error {
return make_dynamic_array_len_cap(T, len, len, allocator, loc)
}
// `make_dynamic_array_len_cap` allocates and initializes a dynamic array. Like `new`, the first argument is a type, not a value.
// Unlike `new`, `make`'s return value is the same as the type of its argument, not a pointer to it.
//
// Note: Prefer using the procedure group `make`.
@(builtin, require_results)
make_dynamic_array_len_cap :: proc($T: typeid/[dynamic]$E, #any_int len: int, #any_int cap: int, allocator := context.allocator, loc := #caller_location) -> (array: T, err: Allocator_Error) #optional_allocator_error {
make_dynamic_array_error_loc(loc, len, cap)
array.allocator = allocator // initialize allocator before just in case it fails to allocate any memory
data := mem_alloc_bytes(size_of(E)*cap, align_of(E), allocator, loc) or_return
s := Raw_Dynamic_Array{raw_data(data), len, cap, allocator}
if data == nil && size_of(E) != 0 {
s.len, s.cap = 0, 0
}
array = transmute(T)s
return
}
// `make_map` allocates and initializes a dynamic array. Like `new`, the first argument is a type, not a value.
// Unlike `new`, `make`'s return value is the same as the type of its argument, not a pointer to it.
//
// Note: Prefer using the procedure group `make`.
@(builtin, require_results)
make_map :: proc($T: typeid/map[$K]$E, #any_int capacity: int = 1<<MAP_MIN_LOG2_CAPACITY, allocator := context.allocator, loc := #caller_location) -> (m: T, err: Allocator_Error) #optional_allocator_error {
make_map_expr_error_loc(loc, capacity)
context.allocator = allocator
err = reserve_map(&m, capacity, loc)
return
}
// `make_multi_pointer` allocates and initializes a dynamic array. Like `new`, the first argument is a type, not a value.
// Unlike `new`, `make`'s return value is the same as the type of its argument, not a pointer to it.
//
// This is "similar" to doing `raw_data(make([]E, len, allocator))`.
//
// Note: Prefer using the procedure group `make`.
@(builtin, require_results)
make_multi_pointer :: proc($T: typeid/[^]$E, #any_int len: int, allocator := context.allocator, loc := #caller_location) -> (mp: T, err: Allocator_Error) #optional_allocator_error {
make_slice_error_loc(loc, len)
data := mem_alloc_bytes(size_of(E)*len, align_of(E), allocator, loc) or_return
if data == nil && size_of(E) != 0 {
return
}
mp = cast(T)raw_data(data)
return
}
// `make` built-in procedure allocates and initializes a value of type slice, dynamic array, map, or multi-pointer (only).
//
// Similar to `new`, the first argument is a type, not a value. Unlike new, make's return type is the same as the
// type of its argument, not a pointer to it.
// Make uses the specified allocator, default is context.allocator.
@builtin
make :: proc{
make_slice,
make_dynamic_array,
make_dynamic_array_len,
make_dynamic_array_len_cap,
make_map,
make_multi_pointer,
make_soa_slice,
make_soa_dynamic_array,
make_soa_dynamic_array_len,
make_soa_dynamic_array_len_cap,
}
// `clear_map` will set the length of a passed map to `0`
//
// Note: Prefer the procedure group `clear`
@builtin
clear_map :: proc "contextless" (m: ^$T/map[$K]$V) {
if m == nil {
return
}
map_clear_dynamic((^Raw_Map)(m), map_info(T))
}
// `reserve_map` will try to reserve memory of a passed map to the requested element count (setting the `cap`).
//
// Note: Prefer the procedure group `reserve`
@builtin
reserve_map :: proc(m: ^$T/map[$K]$V, #any_int capacity: int, loc := #caller_location) -> Allocator_Error {
return __dynamic_map_reserve((^Raw_Map)(m), map_info(T), uint(capacity), loc) if m != nil else nil
}
// Shrinks the capacity of a map down to the current length.
//
// Note: Prefer the procedure group `shrink`
@builtin
shrink_map :: proc(m: ^$T/map[$K]$V, loc := #caller_location) -> (did_shrink: bool, err: Allocator_Error) {
if m != nil {
return map_shrink_dynamic((^Raw_Map)(m), map_info(T), loc)
}
return
}
// The delete_key built-in procedure deletes the element with the specified key (m[key]) from the map.
// If m is nil, or there is no such element, this procedure is a no-op
@builtin
delete_key :: proc(m: ^$T/map[$K]$V, key: K) -> (deleted_key: K, deleted_value: V) {
if m != nil {
key := key
old_k, old_v, ok := map_erase_dynamic((^Raw_Map)(m), map_info(T), uintptr(&key))
if ok {
deleted_key = (^K)(old_k)^
deleted_value = (^V)(old_v)^
}
}
return
}
_append_elem :: #force_inline proc(array: ^$T/[dynamic]$E, arg: E, should_zero: bool, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
if array == nil {
return 0, nil
}
when size_of(E) == 0 {
array := (^Raw_Dynamic_Array)(array)
array.len += 1
return 1, nil
} else {
if cap(array) < len(array)+1 {
// Same behavior as _append_elems but there's only one arg, so we always just add DEFAULT_DYNAMIC_ARRAY_CAPACITY.
cap := 2 * cap(array) + DEFAULT_DYNAMIC_ARRAY_CAPACITY
// do not 'or_return' here as it could be a partial success
if should_zero {
err = reserve(array, cap, loc)
} else {
err = non_zero_reserve(array, cap, loc)
}
}
if cap(array)-len(array) > 0 {
a := (^Raw_Dynamic_Array)(array)
when size_of(E) != 0 {
data := ([^]E)(a.data)
assert(data != nil, loc=loc)
data[a.len] = arg
}
a.len += 1
return 1, err
}
return 0, err
}
}
@builtin
append_elem :: proc(array: ^$T/[dynamic]$E, #no_broadcast arg: E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
return _append_elem(array, arg, true, loc=loc)
}
@builtin
non_zero_append_elem :: proc(array: ^$T/[dynamic]$E, #no_broadcast arg: E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
return _append_elem(array, arg, false, loc=loc)
}
_append_elems :: #force_inline proc(array: ^$T/[dynamic]$E, should_zero: bool, loc := #caller_location, args: ..E) -> (n: int, err: Allocator_Error) #optional_allocator_error {
if array == nil {
return 0, nil
}
arg_len := len(args)
if arg_len <= 0 {
return 0, nil
}
when size_of(E) == 0 {
array := (^Raw_Dynamic_Array)(array)
array.len += arg_len
return arg_len, nil
} else {
if cap(array) < len(array)+arg_len {
cap := 2 * cap(array) + max(DEFAULT_DYNAMIC_ARRAY_CAPACITY, arg_len)
// do not 'or_return' here as it could be a partial success
if should_zero {
err = reserve(array, cap, loc)
} else {
err = non_zero_reserve(array, cap, loc)
}
}
arg_len = min(cap(array)-len(array), arg_len)
if arg_len > 0 {
a := (^Raw_Dynamic_Array)(array)
when size_of(E) != 0 {
data := ([^]E)(a.data)
assert(data != nil, loc=loc)
intrinsics.mem_copy(&data[a.len], raw_data(args), size_of(E) * arg_len)
}
a.len += arg_len
}
return arg_len, err
}
}
@builtin
append_elems :: proc(array: ^$T/[dynamic]$E, #no_broadcast args: ..E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
return _append_elems(array, true, loc, ..args)
}
@builtin
non_zero_append_elems :: proc(array: ^$T/[dynamic]$E, #no_broadcast args: ..E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
return _append_elems(array, false, loc, ..args)
}
// The append_string built-in procedure appends a string to the end of a [dynamic]u8 like type
_append_elem_string :: proc(array: ^$T/[dynamic]$E/u8, arg: $A/string, should_zero: bool, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
args := transmute([]E)arg
if should_zero {
return append_elems(array, ..args, loc=loc)
} else {
return non_zero_append_elems(array, ..args, loc=loc)
}
}
@builtin
append_elem_string :: proc(array: ^$T/[dynamic]$E/u8, arg: $A/string, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
return _append_elem_string(array, arg, true, loc)
}
@builtin
non_zero_append_elem_string :: proc(array: ^$T/[dynamic]$E/u8, arg: $A/string, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
return _append_elem_string(array, arg, false, loc)
}
// The append_string built-in procedure appends multiple strings to the end of a [dynamic]u8 like type
@builtin
append_string :: proc(array: ^$T/[dynamic]$E/u8, args: ..string, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
n_arg: int
for arg in args {
n_arg, err = append(array, ..transmute([]E)(arg), loc=loc)
n += n_arg
if err != nil {
return
}
}
return
}
// The append built-in procedure appends elements to the end of a dynamic array
@builtin append :: proc{
append_elem,
append_elems,
append_elem_string,
append_soa_elem,
append_soa_elems,
}
@builtin non_zero_append :: proc{
non_zero_append_elem,
non_zero_append_elems,
non_zero_append_elem_string,
non_zero_append_soa_elem,
non_zero_append_soa_elems,
}
@builtin
append_nothing :: proc(array: ^$T/[dynamic]$E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
if array == nil {
return 0, nil
}
prev_len := len(array)
resize(array, len(array)+1, loc) or_return
return len(array)-prev_len, nil
}
@builtin
inject_at_elem :: proc(array: ^$T/[dynamic]$E, index: int, #no_broadcast arg: E, loc := #caller_location) -> (ok: bool, err: Allocator_Error) #no_bounds_check #optional_allocator_error {
if array == nil {
return
}
n := max(len(array), index)
m :: 1
new_size := n + m
resize(array, new_size, loc) or_return
when size_of(E) != 0 {
copy(array[index + m:], array[index:])
array[index] = arg
}
ok = true
return
}
@builtin
inject_at_elems :: proc(array: ^$T/[dynamic]$E, index: int, #no_broadcast args: ..E, loc := #caller_location) -> (ok: bool, err: Allocator_Error) #no_bounds_check #optional_allocator_error {
if array == nil {
return
}
if len(args) == 0 {
ok = true
return
}
n := max(len(array), index)
m := len(args)
new_size := n + m
resize(array, new_size, loc) or_return
when size_of(E) != 0 {
copy(array[index + m:], array[index:])
copy(array[index:], args)
}
ok = true
return
}
@builtin
inject_at_elem_string :: proc(array: ^$T/[dynamic]$E/u8, index: int, arg: string, loc := #caller_location) -> (ok: bool, err: Allocator_Error) #no_bounds_check #optional_allocator_error {
if array == nil {
return
}
if len(arg) == 0 {
ok = true
return
}
n := max(len(array), index)
m := len(arg)
new_size := n + m
resize(array, new_size, loc) or_return
copy(array[index+m:], array[index:])
copy(array[index:], arg)
ok = true
return
}
@builtin inject_at :: proc{inject_at_elem, inject_at_elems, inject_at_elem_string}
@builtin
assign_at_elem :: proc(array: ^$T/[dynamic]$E, index: int, arg: E, loc := #caller_location) -> (ok: bool, err: Allocator_Error) #no_bounds_check #optional_allocator_error {
if index < len(array) {
array[index] = arg
ok = true
} else {
resize(array, index+1, loc) or_return
array[index] = arg
ok = true
}
return
}
@builtin
assign_at_elems :: proc(array: ^$T/[dynamic]$E, index: int, args: ..E, loc := #caller_location) -> (ok: bool, err: Allocator_Error) #no_bounds_check #optional_allocator_error {
new_size := index + len(args)
if len(args) == 0 {
ok = true
} else if new_size < len(array) {
copy(array[index:], args)
ok = true
} else {
resize(array, new_size, loc) or_return
copy(array[index:], args)
ok = true
}
return
}
@builtin
assign_at_elem_string :: proc(array: ^$T/[dynamic]$E/u8, index: int, arg: string, loc := #caller_location) -> (ok: bool, err: Allocator_Error) #no_bounds_check #optional_allocator_error {
new_size := index + len(arg)
if len(arg) == 0 {
ok = true
} else if new_size < len(array) {
copy(array[index:], arg)
ok = true
} else {
resize(array, new_size, loc) or_return
copy(array[index:], arg)
ok = true
}
return
}
@builtin assign_at :: proc{assign_at_elem, assign_at_elems, assign_at_elem_string}
// `clear_dynamic_array` will set the length of a passed dynamic array to `0`
//
// Note: Prefer the procedure group `clear`.
@builtin
clear_dynamic_array :: proc "contextless" (array: ^$T/[dynamic]$E) {
if array != nil {
(^Raw_Dynamic_Array)(array).len = 0
}
}
// `reserve_dynamic_array` will try to reserve memory of a passed dynamic array or map to the requested element count (setting the `cap`).
//
// Note: Prefer the procedure group `reserve`.
_reserve_dynamic_array :: #force_inline proc(array: ^$T/[dynamic]$E, capacity: int, should_zero: bool, loc := #caller_location) -> Allocator_Error {
if array == nil {
return nil
}
a := (^Raw_Dynamic_Array)(array)
if capacity <= a.cap {
return nil
}
if a.allocator.procedure == nil {
a.allocator = context.allocator
}
assert(a.allocator.procedure != nil)
old_size := a.cap * size_of(E)
new_size := capacity * size_of(E)
allocator := a.allocator
new_data: []byte
if should_zero {
new_data = mem_resize(a.data, old_size, new_size, align_of(E), allocator, loc) or_return
} else {
new_data = non_zero_mem_resize(a.data, old_size, new_size, align_of(E), allocator, loc) or_return
}
if new_data == nil && new_size > 0 {
return .Out_Of_Memory
}
a.data = raw_data(new_data)
a.cap = capacity
return nil
}
@builtin
reserve_dynamic_array :: proc(array: ^$T/[dynamic]$E, #any_int capacity: int, loc := #caller_location) -> Allocator_Error {
return _reserve_dynamic_array(array, capacity, true, loc)
}
@builtin
non_zero_reserve_dynamic_array :: proc(array: ^$T/[dynamic]$E, #any_int capacity: int, loc := #caller_location) -> Allocator_Error {
return _reserve_dynamic_array(array, capacity, false, loc)
}
// `resize_dynamic_array` will try to resize memory of a passed dynamic array or map to the requested element count (setting the `len`, and possibly `cap`).
//
// Note: Prefer the procedure group `resize`
_resize_dynamic_array :: #force_inline proc(array: ^$T/[dynamic]$E, length: int, should_zero: bool, loc := #caller_location) -> Allocator_Error {
if array == nil {
return nil
}
a := (^Raw_Dynamic_Array)(array)
if length <= a.cap {
if should_zero && a.len < length {
intrinsics.mem_zero(([^]E)(a.data)[a.len:], (length-a.len)*size_of(E))
}
a.len = max(length, 0)
return nil
}
if a.allocator.procedure == nil {
a.allocator = context.allocator
}
assert(a.allocator.procedure != nil)
old_size := a.cap * size_of(E)
new_size := length * size_of(E)
allocator := a.allocator
new_data : []byte
if should_zero {
new_data = mem_resize(a.data, old_size, new_size, align_of(E), allocator, loc) or_return
} else {
new_data = non_zero_mem_resize(a.data, old_size, new_size, align_of(E), allocator, loc) or_return
}
if new_data == nil && new_size > 0 {
return .Out_Of_Memory
}
a.data = raw_data(new_data)
a.len = length
a.cap = length
return nil
}
@builtin
resize_dynamic_array :: proc(array: ^$T/[dynamic]$E, #any_int length: int, loc := #caller_location) -> Allocator_Error {
return _resize_dynamic_array(array, length, true, loc=loc)
}
@builtin
non_zero_resize_dynamic_array :: proc(array: ^$T/[dynamic]$E, #any_int length: int, loc := #caller_location) -> Allocator_Error {
return _resize_dynamic_array(array, length, false, loc=loc)
}
/*
Shrinks the capacity of a dynamic array down to the current length, or the given capacity.
If `new_cap` is negative, then `len(array)` is used.
Returns false if `cap(array) < new_cap`, or the allocator report failure.
If `len(array) < new_cap`, then `len(array)` will be left unchanged.
Note: Prefer the procedure group `shrink`
*/
shrink_dynamic_array :: proc(array: ^$T/[dynamic]$E, new_cap := -1, loc := #caller_location) -> (did_shrink: bool, err: Allocator_Error) {
if array == nil {
return
}
a := (^Raw_Dynamic_Array)(array)
new_cap := new_cap if new_cap >= 0 else a.len
if new_cap > a.cap {
return
}
if a.allocator.procedure == nil {
a.allocator = context.allocator
}
assert(a.allocator.procedure != nil)
old_size := a.cap * size_of(E)
new_size := new_cap * size_of(E)
new_data := mem_resize(a.data, old_size, new_size, align_of(E), a.allocator, loc) or_return
a.data = raw_data(new_data)
a.len = min(new_cap, a.len)
a.cap = new_cap
return true, nil
}
@builtin
map_insert :: proc(m: ^$T/map[$K]$V, key: K, value: V, loc := #caller_location) -> (ptr: ^V) {
key, value := key, value
return (^V)(__dynamic_map_set_without_hash((^Raw_Map)(m), map_info(T), rawptr(&key), rawptr(&value), loc))
}
// Explicitly inserts a key and value into a map `m`, the same as `map_insert`, but the return values differ.
// - `prev_key` will return the previous pointer of a key if it exists, check `found_previous` if was previously found
// - `value_ptr` will return the pointer of the memory where the insertion happens, and `nil` if the map failed to resize
// - `found_previous` will be true a previous key was found
@(builtin, require_results)
map_upsert :: proc(m: ^$T/map[$K]$V, key: K, value: V, loc := #caller_location) -> (prev_key: K, value_ptr: ^V, found_previous: bool) {
key, value := key, value
kp, vp := __dynamic_map_set_extra_without_hash((^Raw_Map)(m), map_info(T), rawptr(&key), rawptr(&value), loc)
if kp != nil {
prev_key = (^K)(kp)^
found_previous = true
}
value_ptr = (^V)(vp)
return
}
@builtin
card :: proc "contextless" (s: $S/bit_set[$E; $U]) -> int {
when size_of(S) == 1 {
return int(intrinsics.count_ones(transmute(u8)s))
} else when size_of(S) == 2 {
return int(intrinsics.count_ones(transmute(u16)s))
} else when size_of(S) == 4 {
return int(intrinsics.count_ones(transmute(u32)s))
} else when size_of(S) == 8 {
return int(intrinsics.count_ones(transmute(u64)s))
} else when size_of(S) == 16 {
return int(intrinsics.count_ones(transmute(u128)s))
} else {
#panic("Unhandled card bit_set size")
}
}
@builtin
@(disabled=ODIN_DISABLE_ASSERT)
assert :: proc(condition: bool, message := "", loc := #caller_location) {
if !condition {
// NOTE(bill): This is wrapped in a procedure call
// to improve performance to make the CPU not
// execute speculatively, making it about an order of
// magnitude faster
@(cold)
internal :: proc(message: string, loc: Source_Code_Location) {
p := context.assertion_failure_proc
if p == nil {
p = default_assertion_failure_proc
}
p("runtime assertion", message, loc)
}
internal(message, loc)
}
}
@builtin
panic :: proc(message: string, loc := #caller_location) -> ! {
p := context.assertion_failure_proc
if p == nil {
p = default_assertion_failure_proc
}
p("panic", message, loc)
}
@builtin
unimplemented :: proc(message := "", loc := #caller_location) -> ! {
p := context.assertion_failure_proc
if p == nil {
p = default_assertion_failure_proc
}
p("not yet implemented", message, loc)
}
+535
View File
@@ -0,0 +1,535 @@
package runtime
import "base:intrinsics"
_ :: intrinsics
/*
SOA types are implemented with this sort of layout:
SOA Fixed Array
struct {
f0: [N]T0,
f1: [N]T1,
f2: [N]T2,
}
SOA Slice
struct {
f0: ^T0,
f1: ^T1,
f2: ^T2,
len: int,
}
SOA Dynamic Array
struct {
f0: ^T0,
f1: ^T1,
f2: ^T2,
len: int,
cap: int,
allocator: Allocator,
}
A footer is used rather than a header purely to simplify access to the fields internally
i.e. field index of the AOS == SOA
*/
Raw_SOA_Footer_Slice :: struct {
len: int,
}
Raw_SOA_Footer_Dynamic_Array :: struct {
len: int,
cap: int,
allocator: Allocator,
}
@(builtin, require_results)
raw_soa_footer_slice :: proc(array: ^$T/#soa[]$E) -> (footer: ^Raw_SOA_Footer_Slice) {
if array == nil {
return nil
}
field_count := uintptr(len(E) when intrinsics.type_is_array(E) else intrinsics.type_struct_field_count(E))
footer = (^Raw_SOA_Footer_Slice)(uintptr(array) + field_count*size_of(rawptr))
return
}
@(builtin, require_results)
raw_soa_footer_dynamic_array :: proc(array: ^$T/#soa[dynamic]$E) -> (footer: ^Raw_SOA_Footer_Dynamic_Array) {
if array == nil {
return nil
}
field_count := uintptr(len(E) when intrinsics.type_is_array(E) else intrinsics.type_struct_field_count(E))
footer = (^Raw_SOA_Footer_Dynamic_Array)(uintptr(array) + field_count*size_of(rawptr))
return
}
raw_soa_footer :: proc{
raw_soa_footer_slice,
raw_soa_footer_dynamic_array,
}
@(builtin, require_results)
make_soa_aligned :: proc($T: typeid/#soa[]$E, length: int, alignment: int, allocator := context.allocator, loc := #caller_location) -> (array: T, err: Allocator_Error) #optional_allocator_error {
if length <= 0 {
return
}
footer := raw_soa_footer(&array)
if size_of(E) == 0 {
footer.len = length
return
}
max_align := max(alignment, align_of(E))
ti := type_info_of(typeid_of(T))
ti = type_info_base(ti)
si := &ti.variant.(Type_Info_Struct)
field_count := uintptr(len(E) when intrinsics.type_is_array(E) else intrinsics.type_struct_field_count(E))
total_size := 0
for i in 0..<field_count {
type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
total_size += type.size * length
total_size = align_forward_int(total_size, max_align)
}
allocator := allocator
if allocator.procedure == nil {
allocator = context.allocator
}
assert(allocator.procedure != nil)
new_bytes: []byte
new_bytes, err = allocator.procedure(
allocator.data, .Alloc, total_size, max_align,
nil, 0, loc,
)
if new_bytes == nil || err != nil {
return
}
new_data := raw_data(new_bytes)
data := uintptr(&array)
offset := 0
for i in 0..<field_count {
type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
offset = align_forward_int(offset, max_align)
(^uintptr)(data)^ = uintptr(new_data) + uintptr(offset)
data += size_of(rawptr)
offset += type.size * length
}
footer.len = length
return
}
@(builtin, require_results)
make_soa_slice :: proc($T: typeid/#soa[]$E, length: int, allocator := context.allocator, loc := #caller_location) -> (array: T, err: Allocator_Error) #optional_allocator_error {
return make_soa_aligned(T, length, align_of(E), allocator, loc)
}
@(builtin, require_results)
make_soa_dynamic_array :: proc($T: typeid/#soa[dynamic]$E, allocator := context.allocator, loc := #caller_location) -> (array: T, err: Allocator_Error) #optional_allocator_error {
context.allocator = allocator
reserve_soa(&array, 0, loc) or_return
return array, nil
}
@(builtin, require_results)
make_soa_dynamic_array_len :: proc($T: typeid/#soa[dynamic]$E, #any_int length: int, allocator := context.allocator, loc := #caller_location) -> (array: T, err: Allocator_Error) #optional_allocator_error {
context.allocator = allocator
resize_soa(&array, length, loc) or_return
return array, nil
}
@(builtin, require_results)
make_soa_dynamic_array_len_cap :: proc($T: typeid/#soa[dynamic]$E, #any_int length, capacity: int, allocator := context.allocator, loc := #caller_location) -> (array: T, err: Allocator_Error) #optional_allocator_error {
context.allocator = allocator
reserve_soa(&array, capacity, loc) or_return
resize_soa(&array, length, loc) or_return
return array, nil
}
@builtin
make_soa :: proc{
make_soa_slice,
make_soa_dynamic_array,
make_soa_dynamic_array_len,
make_soa_dynamic_array_len_cap,
}
@builtin
resize_soa :: proc(array: ^$T/#soa[dynamic]$E, length: int, loc := #caller_location) -> Allocator_Error {
if array == nil {
return nil
}
reserve_soa(array, length, loc) or_return
footer := raw_soa_footer(array)
footer.len = length
return nil
}
@builtin
non_zero_resize_soa :: proc(array: ^$T/#soa[dynamic]$E, length: int, loc := #caller_location) -> Allocator_Error {
if array == nil {
return nil
}
non_zero_reserve_soa(array, length, loc) or_return
footer := raw_soa_footer(array)
footer.len = length
return nil
}
@builtin
reserve_soa :: proc(array: ^$T/#soa[dynamic]$E, capacity: int, loc := #caller_location) -> Allocator_Error {
return _reserve_soa(array, capacity, true, loc)
}
@builtin
non_zero_reserve_soa :: proc(array: ^$T/#soa[dynamic]$E, capacity: int, loc := #caller_location) -> Allocator_Error {
return _reserve_soa(array, capacity, false, loc)
}
_reserve_soa :: proc(array: ^$T/#soa[dynamic]$E, capacity: int, zero_memory: bool, loc := #caller_location) -> Allocator_Error {
if array == nil {
return nil
}
old_cap := cap(array)
if capacity <= old_cap {
return nil
}
if array.allocator.procedure == nil {
array.allocator = context.allocator
}
assert(array.allocator.procedure != nil)
footer := raw_soa_footer(array)
if size_of(E) == 0 {
footer.cap = capacity
return nil
}
ti := type_info_of(typeid_of(T))
ti = type_info_base(ti)
si := &ti.variant.(Type_Info_Struct)
field_count := uintptr(len(E) when intrinsics.type_is_array(E) else intrinsics.type_struct_field_count(E))
assert(footer.cap == old_cap)
old_size := 0
new_size := 0
max_align :: align_of(E)
for i in 0..<field_count {
type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
old_size += type.size * old_cap
new_size += type.size * capacity
old_size = align_forward_int(old_size, max_align)
new_size = align_forward_int(new_size, max_align)
}
old_data := (^rawptr)(array)^
new_bytes := array.allocator.procedure(
array.allocator.data, .Alloc if zero_memory else .Alloc_Non_Zeroed, new_size, max_align,
nil, old_size, loc,
) or_return
new_data := raw_data(new_bytes)
footer.cap = capacity
old_offset := 0
new_offset := 0
for i in 0..<field_count {
type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
old_offset = align_forward_int(old_offset, max_align)
new_offset = align_forward_int(new_offset, max_align)
new_data_elem := rawptr(uintptr(new_data) + uintptr(new_offset))
old_data_elem := rawptr(uintptr(old_data) + uintptr(old_offset))
mem_copy(new_data_elem, old_data_elem, type.size * old_cap)
(^rawptr)(uintptr(array) + i*size_of(rawptr))^ = new_data_elem
old_offset += type.size * old_cap
new_offset += type.size * capacity
}
array.allocator.procedure(
array.allocator.data, .Free, 0, max_align,
old_data, old_size, loc,
) or_return
return nil
}
@builtin
append_soa_elem :: proc(array: ^$T/#soa[dynamic]$E, #no_broadcast arg: E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
return _append_soa_elem(array, true, arg, loc)
}
@builtin
non_zero_append_soa_elem :: proc(array: ^$T/#soa[dynamic]$E, #no_broadcast arg: E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
return _append_soa_elem(array, false, arg, loc)
}
_append_soa_elem :: proc(array: ^$T/#soa[dynamic]$E, zero_memory: bool, #no_broadcast arg: E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
if array == nil {
return 0, nil
}
if cap(array) <= len(array) + 1 {
// Same behavior as append_soa_elems but there's only one arg, so we always just add DEFAULT_DYNAMIC_ARRAY_CAPACITY.
cap := 2 * cap(array) + DEFAULT_DYNAMIC_ARRAY_CAPACITY
err = _reserve_soa(array, cap, zero_memory, loc) // do not 'or_return' here as it could be a partial success
}
footer := raw_soa_footer(array)
if size_of(E) > 0 && cap(array)-len(array) > 0 {
ti := type_info_of(T)
ti = type_info_base(ti)
si := &ti.variant.(Type_Info_Struct)
field_count := uintptr(len(E) when intrinsics.type_is_array(E) else intrinsics.type_struct_field_count(E))
data := (^rawptr)(array)^
soa_offset := 0
item_offset := 0
arg_copy := arg
arg_ptr := &arg_copy
max_align :: align_of(E)
for i in 0..<field_count {
type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
soa_offset = align_forward_int(soa_offset, max_align)
item_offset = align_forward_int(item_offset, type.align)
dst := rawptr(uintptr(data) + uintptr(soa_offset) + uintptr(type.size * footer.len))
src := rawptr(uintptr(arg_ptr) + uintptr(item_offset))
mem_copy(dst, src, type.size)
soa_offset += type.size * cap(array)
item_offset += type.size
}
footer.len += 1
return 1, err
}
return 0, err
}
@builtin
append_soa_elems :: proc(array: ^$T/#soa[dynamic]$E, #no_broadcast args: ..E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
return _append_soa_elems(array, true, args=args, loc=loc)
}
@builtin
non_zero_append_soa_elems :: proc(array: ^$T/#soa[dynamic]$E, #no_broadcast args: ..E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
return _append_soa_elems(array, false, args=args, loc=loc)
}
_append_soa_elems :: proc(array: ^$T/#soa[dynamic]$E, zero_memory: bool, #no_broadcast args: ..E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
if array == nil {
return
}
arg_len := len(args)
if arg_len == 0 {
return
}
if cap(array) <= len(array)+arg_len {
cap := 2 * cap(array) + max(DEFAULT_DYNAMIC_ARRAY_CAPACITY, arg_len)
err = _reserve_soa(array, cap, zero_memory, loc) // do not 'or_return' here as it could be a partial success
}
arg_len = min(cap(array)-len(array), arg_len)
footer := raw_soa_footer(array)
if size_of(E) > 0 && arg_len > 0 {
ti := type_info_of(typeid_of(T))
ti = type_info_base(ti)
si := &ti.variant.(Type_Info_Struct)
field_count := uintptr(len(E) when intrinsics.type_is_array(E) else intrinsics.type_struct_field_count(E))
data := (^rawptr)(array)^
soa_offset := 0
item_offset := 0
args_ptr := &args[0]
max_align :: align_of(E)
for i in 0..<field_count {
type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
soa_offset = align_forward_int(soa_offset, max_align)
item_offset = align_forward_int(item_offset, type.align)
dst := uintptr(data) + uintptr(soa_offset) + uintptr(type.size * footer.len)
src := uintptr(args_ptr) + uintptr(item_offset)
for j in 0..<arg_len {
d := rawptr(dst + uintptr(j*type.size))
s := rawptr(src + uintptr(j*size_of(E)))
mem_copy(d, s, type.size)
}
soa_offset += type.size * cap(array)
item_offset += type.size
}
}
footer.len += arg_len
return arg_len, err
}
// The append_soa built-in procedure appends elements to the end of an #soa dynamic array
@builtin
append_soa :: proc{
append_soa_elem,
append_soa_elems,
}
delete_soa_slice :: proc(array: $T/#soa[]$E, allocator := context.allocator, loc := #caller_location) -> Allocator_Error {
field_count :: len(E) when intrinsics.type_is_array(E) else intrinsics.type_struct_field_count(E)
when field_count != 0 {
array := array
ptr := (^rawptr)(&array)^
free(ptr, allocator, loc) or_return
}
return nil
}
delete_soa_dynamic_array :: proc(array: $T/#soa[dynamic]$E, loc := #caller_location) -> Allocator_Error {
field_count :: len(E) when intrinsics.type_is_array(E) else intrinsics.type_struct_field_count(E)
when field_count != 0 {
array := array
ptr := (^rawptr)(&array)^
footer := raw_soa_footer(&array)
free(ptr, footer.allocator, loc) or_return
}
return nil
}
@builtin
delete_soa :: proc{
delete_soa_slice,
delete_soa_dynamic_array,
}
clear_soa_dynamic_array :: proc(array: ^$T/#soa[dynamic]$E) {
field_count :: len(E) when intrinsics.type_is_array(E) else intrinsics.type_struct_field_count(E)
when field_count != 0 {
footer := raw_soa_footer(array)
footer.len = 0
}
}
@builtin
clear_soa :: proc{
clear_soa_dynamic_array,
}
// Converts soa slice into a soa dynamic array without cloning or allocating memory
@(require_results)
into_dynamic_soa :: proc(array: $T/#soa[]$E) -> #soa[dynamic]E {
d: #soa[dynamic]E
footer := raw_soa_footer_dynamic_array(&d)
footer^ = {
cap = len(array),
len = 0,
allocator = nil_allocator(),
}
field_count := uintptr(len(E) when intrinsics.type_is_array(E) else intrinsics.type_struct_field_count(E))
array := array
dynamic_data := ([^]rawptr)(&d)[:field_count]
slice_data := ([^]rawptr)(&array)[:field_count]
copy(dynamic_data, slice_data)
return d
}
// `unordered_remove_soa` removed the element at the specified `index`. It does so by replacing the current end value
// with the old value, and reducing the length of the dynamic array by 1.
//
// Note: This is an O(1) operation.
// Note: If you the elements to remain in their order, use `ordered_remove_soa`.
// Note: If the index is out of bounds, this procedure will panic.
@builtin
unordered_remove_soa :: proc(array: ^$T/#soa[dynamic]$E, index: int, loc := #caller_location) #no_bounds_check {
bounds_check_error_loc(loc, index, len(array))
if index+1 < len(array) {
ti := type_info_of(typeid_of(T))
ti = type_info_base(ti)
si := &ti.variant.(Type_Info_Struct)
field_count := uintptr(len(E) when intrinsics.type_is_array(E) else intrinsics.type_struct_field_count(E))
data := uintptr(array)
for i in 0..<field_count {
type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
offset := rawptr((^uintptr)(data)^ + uintptr(index*type.size))
final := rawptr((^uintptr)(data)^ + uintptr((len(array)-1)*type.size))
mem_copy(offset, final, type.size)
data += size_of(rawptr)
}
}
raw_soa_footer_dynamic_array(array).len -= 1
}
// `ordered_remove_soa` removed the element at the specified `index` whilst keeping the order of the other elements.
//
// Note: This is an O(N) operation.
// Note: If you the elements do not have to remain in their order, prefer `unordered_remove_soa`.
// Note: If the index is out of bounds, this procedure will panic.
@builtin
ordered_remove_soa :: proc(array: ^$T/#soa[dynamic]$E, index: int, loc := #caller_location) #no_bounds_check {
bounds_check_error_loc(loc, index, len(array))
if index+1 < len(array) {
ti := type_info_of(typeid_of(T))
ti = type_info_base(ti)
si := &ti.variant.(Type_Info_Struct)
field_count := uintptr(len(E) when intrinsics.type_is_array(E) else intrinsics.type_struct_field_count(E))
data := uintptr(array)
for i in 0..<field_count {
type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
offset := (^uintptr)(data)^ + uintptr(index*type.size)
length := type.size*(len(array) - index - 1)
mem_copy(rawptr(offset), rawptr(offset + uintptr(type.size)), length)
data += size_of(rawptr)
}
}
raw_soa_footer_dynamic_array(array).len -= 1
}
@@ -0,0 +1,15 @@
package runtime
when ODIN_DEFAULT_TO_NIL_ALLOCATOR {
default_allocator_proc :: nil_allocator_proc
default_allocator :: nil_allocator
} else when ODIN_DEFAULT_TO_PANIC_ALLOCATOR {
default_allocator_proc :: panic_allocator_proc
default_allocator :: panic_allocator
} else when ODIN_OS != .Orca && (ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32) {
default_allocator :: default_wasm_allocator
default_allocator_proc :: wasm_allocator_proc
} else {
default_allocator :: heap_allocator
default_allocator_proc :: heap_allocator_proc
}
+80
View File
@@ -0,0 +1,80 @@
package runtime
nil_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
size, alignment: int,
old_memory: rawptr, old_size: int, loc := #caller_location) -> ([]byte, Allocator_Error) {
switch mode {
case .Alloc, .Alloc_Non_Zeroed:
return nil, .Out_Of_Memory
case .Free:
return nil, .None
case .Free_All:
return nil, .Mode_Not_Implemented
case .Resize, .Resize_Non_Zeroed:
if size == 0 {
return nil, .None
}
return nil, .Out_Of_Memory
case .Query_Features:
return nil, .Mode_Not_Implemented
case .Query_Info:
return nil, .Mode_Not_Implemented
}
return nil, .None
}
nil_allocator :: proc() -> Allocator {
return Allocator{
procedure = nil_allocator_proc,
data = nil,
}
}
panic_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
size, alignment: int,
old_memory: rawptr, old_size: int, loc := #caller_location) -> ([]byte, Allocator_Error) {
switch mode {
case .Alloc:
if size > 0 {
panic("panic allocator, .Alloc called", loc=loc)
}
case .Alloc_Non_Zeroed:
if size > 0 {
panic("panic allocator, .Alloc_Non_Zeroed called", loc=loc)
}
case .Resize:
if size > 0 {
panic("panic allocator, .Resize called", loc=loc)
}
case .Resize_Non_Zeroed:
if size > 0 {
panic("panic allocator, .Alloc_Non_Zeroed called", loc=loc)
}
case .Free:
if old_memory != nil {
panic("panic allocator, .Free called", loc=loc)
}
case .Free_All:
panic("panic allocator, .Free_All called", loc=loc)
case .Query_Features:
set := (^Allocator_Mode_Set)(old_memory)
if set != nil {
set^ = {.Query_Features}
}
return nil, nil
case .Query_Info:
panic("panic allocator, .Query_Info called", loc=loc)
}
return nil, nil
}
panic_allocator :: proc() -> Allocator {
return Allocator{
procedure = panic_allocator_proc,
data = nil,
}
}
@@ -0,0 +1,306 @@
package runtime
import "base:intrinsics"
DEFAULT_ARENA_GROWING_MINIMUM_BLOCK_SIZE :: uint(DEFAULT_TEMP_ALLOCATOR_BACKING_SIZE)
Memory_Block :: struct {
prev: ^Memory_Block,
allocator: Allocator,
base: [^]byte,
used: uint,
capacity: uint,
}
// NOTE: This is a growing arena that is only used for the default temp allocator.
// For your own growing arena needs, prefer `Arena` from `core:mem/virtual`.
Arena :: struct {
backing_allocator: Allocator,
curr_block: ^Memory_Block,
total_used: uint,
total_capacity: uint,
minimum_block_size: uint,
temp_count: uint,
}
@(private, require_results)
safe_add :: #force_inline proc "contextless" (x, y: uint) -> (uint, bool) {
z, did_overflow := intrinsics.overflow_add(x, y)
return z, !did_overflow
}
@(require_results)
memory_block_alloc :: proc(allocator: Allocator, capacity: uint, alignment: uint, loc := #caller_location) -> (block: ^Memory_Block, err: Allocator_Error) {
total_size := uint(capacity + max(alignment, size_of(Memory_Block)))
base_offset := uintptr(max(alignment, size_of(Memory_Block)))
min_alignment: int = max(16, align_of(Memory_Block), int(alignment))
data := mem_alloc(int(total_size), min_alignment, allocator, loc) or_return
block = (^Memory_Block)(raw_data(data))
end := uintptr(raw_data(data)[len(data):])
block.allocator = allocator
block.base = ([^]byte)(uintptr(block) + base_offset)
block.capacity = uint(end - uintptr(block.base))
// Should be zeroed
assert(block.used == 0)
assert(block.prev == nil)
return
}
memory_block_dealloc :: proc(block_to_free: ^Memory_Block, loc := #caller_location) {
if block_to_free != nil {
allocator := block_to_free.allocator
mem_free(block_to_free, allocator, loc)
}
}
@(require_results)
alloc_from_memory_block :: proc(block: ^Memory_Block, min_size, alignment: uint) -> (data: []byte, err: Allocator_Error) {
calc_alignment_offset :: proc "contextless" (block: ^Memory_Block, alignment: uintptr) -> uint {
alignment_offset := uint(0)
ptr := uintptr(block.base[block.used:])
mask := alignment-1
if ptr & mask != 0 {
alignment_offset = uint(alignment - (ptr & mask))
}
return alignment_offset
}
if block == nil {
return nil, .Out_Of_Memory
}
alignment_offset := calc_alignment_offset(block, uintptr(alignment))
size, size_ok := safe_add(min_size, alignment_offset)
if !size_ok {
err = .Out_Of_Memory
return
}
if to_be_used, ok := safe_add(block.used, size); !ok || to_be_used > block.capacity {
err = .Out_Of_Memory
return
}
data = block.base[block.used+alignment_offset:][:min_size]
block.used += size
return
}
@(require_results)
arena_alloc :: proc(arena: ^Arena, size, alignment: uint, loc := #caller_location) -> (data: []byte, err: Allocator_Error) {
align_forward_uint :: proc "contextless" (ptr, align: uint) -> uint {
p := ptr
modulo := p & (align-1)
if modulo != 0 {
p += align - modulo
}
return p
}
assert(alignment & (alignment-1) == 0, "non-power of two alignment", loc)
size := size
if size == 0 {
return
}
needed := align_forward_uint(size, alignment)
if arena.curr_block == nil || (safe_add(arena.curr_block.used, needed) or_else 0) > arena.curr_block.capacity {
if arena.minimum_block_size == 0 {
arena.minimum_block_size = DEFAULT_ARENA_GROWING_MINIMUM_BLOCK_SIZE
}
block_size := max(needed, arena.minimum_block_size)
if arena.backing_allocator.procedure == nil {
arena.backing_allocator = default_allocator()
}
new_block := memory_block_alloc(arena.backing_allocator, block_size, alignment, loc) or_return
new_block.prev = arena.curr_block
arena.curr_block = new_block
arena.total_capacity += new_block.capacity
}
prev_used := arena.curr_block.used
data, err = alloc_from_memory_block(arena.curr_block, size, alignment)
arena.total_used += arena.curr_block.used - prev_used
return
}
// `arena_init` will initialize the arena with a usuable block.
// This procedure is not necessary to use the Arena as the default zero as `arena_alloc` will set things up if necessary
@(require_results)
arena_init :: proc(arena: ^Arena, size: uint, backing_allocator: Allocator, loc := #caller_location) -> Allocator_Error {
arena^ = {}
arena.backing_allocator = backing_allocator
arena.minimum_block_size = max(size, 1<<12) // minimum block size of 4 KiB
new_block := memory_block_alloc(arena.backing_allocator, arena.minimum_block_size, 0, loc) or_return
arena.curr_block = new_block
arena.total_capacity += new_block.capacity
return nil
}
arena_free_last_memory_block :: proc(arena: ^Arena, loc := #caller_location) {
if free_block := arena.curr_block; free_block != nil {
arena.curr_block = free_block.prev
arena.total_capacity -= free_block.capacity
memory_block_dealloc(free_block, loc)
}
}
// `arena_free_all` will free all but the first memory block, and then reset the memory block
arena_free_all :: proc(arena: ^Arena, loc := #caller_location) {
for arena.curr_block != nil && arena.curr_block.prev != nil {
arena_free_last_memory_block(arena, loc)
}
if arena.curr_block != nil {
intrinsics.mem_zero(arena.curr_block.base, arena.curr_block.used)
arena.curr_block.used = 0
}
arena.total_used = 0
}
arena_destroy :: proc(arena: ^Arena, loc := #caller_location) {
for arena.curr_block != nil {
free_block := arena.curr_block
arena.curr_block = free_block.prev
arena.total_capacity -= free_block.capacity
memory_block_dealloc(free_block, loc)
}
arena.total_used = 0
arena.total_capacity = 0
}
arena_allocator :: proc(arena: ^Arena) -> Allocator {
return Allocator{arena_allocator_proc, arena}
}
arena_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
size, alignment: int,
old_memory: rawptr, old_size: int,
location := #caller_location) -> (data: []byte, err: Allocator_Error) {
arena := (^Arena)(allocator_data)
size, alignment := uint(size), uint(alignment)
old_size := uint(old_size)
switch mode {
case .Alloc, .Alloc_Non_Zeroed:
return arena_alloc(arena, size, alignment, location)
case .Free:
err = .Mode_Not_Implemented
case .Free_All:
arena_free_all(arena, location)
case .Resize, .Resize_Non_Zeroed:
old_data := ([^]byte)(old_memory)
switch {
case old_data == nil:
return arena_alloc(arena, size, alignment, location)
case size == old_size:
// return old memory
data = old_data[:size]
return
case size == 0:
err = .Mode_Not_Implemented
return
case (uintptr(old_data) & uintptr(alignment-1) == 0) && size < old_size:
// shrink data in-place
data = old_data[:size]
return
}
new_memory := arena_alloc(arena, size, alignment, location) or_return
if new_memory == nil {
return
}
copy(new_memory, old_data[:old_size])
return new_memory, nil
case .Query_Features:
set := (^Allocator_Mode_Set)(old_memory)
if set != nil {
set^ = {.Alloc, .Alloc_Non_Zeroed, .Free_All, .Resize, .Query_Features}
}
case .Query_Info:
err = .Mode_Not_Implemented
}
return
}
Arena_Temp :: struct {
arena: ^Arena,
block: ^Memory_Block,
used: uint,
}
@(require_results)
arena_temp_begin :: proc(arena: ^Arena, loc := #caller_location) -> (temp: Arena_Temp) {
assert(arena != nil, "nil arena", loc)
temp.arena = arena
temp.block = arena.curr_block
if arena.curr_block != nil {
temp.used = arena.curr_block.used
}
arena.temp_count += 1
return
}
arena_temp_end :: proc(temp: Arena_Temp, loc := #caller_location) {
if temp.arena == nil {
assert(temp.block == nil)
assert(temp.used == 0)
return
}
arena := temp.arena
if temp.block != nil {
memory_block_found := false
for block := arena.curr_block; block != nil; block = block.prev {
if block == temp.block {
memory_block_found = true
break
}
}
if !memory_block_found {
assert(arena.curr_block == temp.block, "memory block stored within Arena_Temp not owned by Arena", loc)
}
for arena.curr_block != temp.block {
arena_free_last_memory_block(arena)
}
if block := arena.curr_block; block != nil {
assert(block.used >= temp.used, "out of order use of arena_temp_end", loc)
amount_to_zero := min(block.used-temp.used, block.capacity-block.used)
intrinsics.mem_zero(block.base[temp.used:], amount_to_zero)
block.used = temp.used
}
}
assert(arena.temp_count > 0, "double-use of arena_temp_end", loc)
arena.temp_count -= 1
}
// Ignore the use of a `arena_temp_begin` entirely
arena_temp_ignore :: proc(temp: Arena_Temp, loc := #caller_location) {
assert(temp.arena != nil, "nil arena", loc)
arena := temp.arena
assert(arena.temp_count > 0, "double-use of arena_temp_end", loc)
arena.temp_count -= 1
}
arena_check_temp :: proc(arena: ^Arena, loc := #caller_location) {
assert(arena.temp_count == 0, "Arena_Temp not been ended", loc)
}
@@ -0,0 +1,79 @@
package runtime
DEFAULT_TEMP_ALLOCATOR_BACKING_SIZE: int : #config(DEFAULT_TEMP_ALLOCATOR_BACKING_SIZE, 4 * Megabyte)
NO_DEFAULT_TEMP_ALLOCATOR: bool : ODIN_OS == .Freestanding || ODIN_DEFAULT_TO_NIL_ALLOCATOR
when NO_DEFAULT_TEMP_ALLOCATOR {
Default_Temp_Allocator :: struct {}
default_temp_allocator_init :: proc(s: ^Default_Temp_Allocator, size: int, backing_allocator := context.allocator) {}
default_temp_allocator_destroy :: proc(s: ^Default_Temp_Allocator) {}
default_temp_allocator_proc :: nil_allocator_proc
@(require_results)
default_temp_allocator_temp_begin :: proc(loc := #caller_location) -> (temp: Arena_Temp) {
return
}
default_temp_allocator_temp_end :: proc(temp: Arena_Temp, loc := #caller_location) {
}
} else {
Default_Temp_Allocator :: struct {
arena: Arena,
}
default_temp_allocator_init :: proc(s: ^Default_Temp_Allocator, size: int, backing_allocator := context.allocator) {
_ = arena_init(&s.arena, uint(size), backing_allocator)
}
default_temp_allocator_destroy :: proc(s: ^Default_Temp_Allocator) {
if s != nil {
arena_destroy(&s.arena)
s^ = {}
}
}
default_temp_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
size, alignment: int,
old_memory: rawptr, old_size: int, loc := #caller_location) -> (data: []byte, err: Allocator_Error) {
s := (^Default_Temp_Allocator)(allocator_data)
return arena_allocator_proc(&s.arena, mode, size, alignment, old_memory, old_size, loc)
}
@(require_results)
default_temp_allocator_temp_begin :: proc(loc := #caller_location) -> (temp: Arena_Temp) {
if context.temp_allocator.data == &global_default_temp_allocator_data {
temp = arena_temp_begin(&global_default_temp_allocator_data.arena, loc)
}
return
}
default_temp_allocator_temp_end :: proc(temp: Arena_Temp, loc := #caller_location) {
arena_temp_end(temp, loc)
}
@(fini, private)
_destroy_temp_allocator_fini :: proc() {
default_temp_allocator_destroy(&global_default_temp_allocator_data)
}
}
@(deferred_out=default_temp_allocator_temp_end)
DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD :: #force_inline proc(ignore := false, loc := #caller_location) -> (Arena_Temp, Source_Code_Location) {
if ignore {
return {}, loc
} else {
return default_temp_allocator_temp_begin(loc), loc
}
}
default_temp_allocator :: proc(allocator: ^Default_Temp_Allocator) -> Allocator {
return Allocator{
procedure = default_temp_allocator_proc,
data = allocator,
}
}
+180
View File
@@ -0,0 +1,180 @@
package runtime
/*
package runtime has numerous entities (declarations) which are required by the compiler to function.
## Basic types and calls (and anything they rely on)
Source_Code_Location
Context
Allocator
Logger
__init_context
_cleanup_runtime
## cstring calls
cstring_to_string
cstring_len
## Required when RTTI is enabled (the vast majority of targets)
Type_Info
type_table
__type_info_of
## Hashing
default_hasher
default_hasher_cstring
default_hasher_string
## Pseudo-CRT required procedured due to LLVM but useful in general
memset
memcpy
memove
## Procedures required by the LLVM backend if u128/i128 is used
umodti3
udivti3
modti3
divti3
fixdfti
fixunsdfti
fixunsdfdi
floattidf
floattidf_unsigned
truncsfhf2
truncdfhf2
gnu_h2f_ieee
gnu_f2h_ieee
extendhfsf2
## Procedures required by the LLVM backend if f16 is used
__ashlti3 // wasm specific
__multi3 // wasm specific
## Required an entry point is defined (i.e. 'main')
args__
## When -no-crt is defined (and not a wasm target) (mostly due to LLVM)
_tls_index
_fltused
## Bounds checking procedures (when not disabled with -no-bounds-check)
bounds_check_error
matrix_bounds_check_error
slice_expr_error_hi
slice_expr_error_lo_hi
multi_pointer_slice_expr_error
## Type assertion check
type_assertion_check
type_assertion_check2 // takes in typeid
## Arithmetic
quo_complex32
quo_complex64
quo_complex128
mul_quaternion64
mul_quaternion128
mul_quaternion256
quo_quaternion64
quo_quaternion128
quo_quaternion256
abs_complex32
abs_complex64
abs_complex128
abs_quaternion64
abs_quaternion128
abs_quaternion256
## Comparison
memory_equal
memory_compare
memory_compare_zero
cstring_eq
cstring_ne
cstring_lt
cstring_gt
cstring_le
cstring_gt
string_eq
string_ne
string_lt
string_gt
string_le
string_gt
complex32_eq
complex32_ne
complex64_eq
complex64_ne
complex128_eq
complex128_ne
quaternion64_eq
quaternion64_ne
quaternion128_eq
quaternion128_ne
quaternion256_eq
quaternion256_ne
## Map specific calls
map_seed_from_map_data
__dynamic_map_check_grow // static map calls
map_insert_hash_dynamic // static map calls
__dynamic_map_get // dynamic map calls
__dynamic_map_set // dynamic map calls
## Dynamic literals ([dynamic]T and map[K]V) (can be disabled with -no-dynamic-literals)
__dynamic_array_reserve
__dynamic_array_append
__dynamic_map_reserve
## Objective-C specific
objc_lookUpClass
sel_registerName
objc_allocateClassPair
## for-in `string` type
string_decode_rune
string_decode_last_rune // #reverse for
*/
@@ -29,11 +29,15 @@ __dynamic_array_reserve :: proc(array_: rawptr, elem_size, elem_align: int, cap:
new_size := cap * elem_size
allocator := array.allocator
new_data, err := allocator.procedure(allocator.data, .Resize, new_size, elem_align, array.data, old_size, loc)
new_data, err := mem_resize(array.data, old_size, new_size, elem_align, allocator, loc)
if err != nil {
return false
}
if new_data != nil || elem_size == 0 {
if elem_size == 0 {
array.data = raw_data(new_data)
array.cap = cap
return true
} else if new_data != nil {
array.data = raw_data(new_data)
array.cap = min(cap, len(new_data)/elem_size)
return true
@@ -41,6 +45,37 @@ __dynamic_array_reserve :: proc(array_: rawptr, elem_size, elem_align: int, cap:
return false
}
__dynamic_array_shrink :: proc(array_: rawptr, elem_size, elem_align: int, new_cap: int, loc := #caller_location) -> (did_shrink: bool) {
array := (^Raw_Dynamic_Array)(array_)
// NOTE(tetra, 2020-01-26): We set the allocator before earlying-out below, because user code is usually written
// assuming that appending/reserving will set the allocator, if it is not already set.
if array.allocator.procedure == nil {
array.allocator = context.allocator
}
assert(array.allocator.procedure != nil)
if new_cap > array.cap {
return
}
new_cap := new_cap
new_cap = max(new_cap, 0)
old_size := array.cap * elem_size
new_size := new_cap * elem_size
allocator := array.allocator
new_data, err := mem_resize(array.data, old_size, new_size, elem_align, allocator, loc)
if err != nil {
return
}
array.data = raw_data(new_data)
array.len = min(new_cap, array.len)
array.cap = new_cap
return true
}
__dynamic_array_resize :: proc(array_: rawptr, elem_size, elem_align: int, len: int, loc := #caller_location) -> bool {
array := (^Raw_Dynamic_Array)(array_)
@@ -65,7 +100,7 @@ __dynamic_array_append :: proc(array_: rawptr, elem_size, elem_align: int,
ok := true
if array.cap <= array.len+item_count {
if array.cap < array.len+item_count {
cap := 2 * array.cap + max(8, item_count)
ok = __dynamic_array_reserve(array, elem_size, elem_align, cap, loc)
}
@@ -86,7 +121,7 @@ __dynamic_array_append_nothing :: proc(array_: rawptr, elem_size, elem_align: in
array := (^Raw_Dynamic_Array)(array_)
ok := true
if array.cap <= array.len+1 {
if array.cap < array.len+1 {
cap := 2 * array.cap + max(8, 1)
ok = __dynamic_array_reserve(array, elem_size, elem_align, cap, loc)
}
+991
View File
@@ -0,0 +1,991 @@
package runtime
import "base:intrinsics"
_ :: intrinsics
// High performance, cache-friendly, open-addressed Robin Hood hashing hash map
// data structure with various optimizations for Odin.
//
// Copyright 2022 (c) Dale Weiler
//
// The core of the hash map data structure is the Raw_Map struct which is a
// type-erased representation of the map. This type-erased representation is
// used in two ways: static and dynamic. When static type information is known,
// the procedures suffixed with _static should be used instead of _dynamic. The
// static procedures are optimized since they have type information. Hashing of
// keys, comparison of keys, and data lookup are all optimized. When type
// information is not known, the procedures suffixed with _dynamic should be
// used. The representation of the map is the same for both static and dynamic,
// and procedures of each can be mixed and matched. The purpose of the dynamic
// representation is to enable reflection and runtime manipulation of the map.
// The dynamic procedures all take an additional Map_Info structure parameter
// which carries runtime values describing the size, alignment, and offset of
// various traits of a given key and value type pair. The Map_Info value can
// be created by calling map_info(K, V) with the key and value typeids.
//
// This map implementation makes extensive use of uintptr for representing
// sizes, lengths, capacities, masks, pointers, offsets, and addresses to avoid
// expensive sign extension and masking that would be generated if types were
// casted all over. The only place regular ints show up is in the cap() and
// len() implementations.
//
// To make this map cache-friendly it uses a novel strategy to ensure keys and
// values of the map are always cache-line aligned and that no single key or
// value of any type ever straddles a cache-line. This cache efficiency makes
// for quick lookups because the linear-probe always addresses data in a cache
// friendly way. This is enabled through the use of a special meta-type called
// a Map_Cell which packs as many values of a given type into a local array adding
// internal padding to round to MAP_CACHE_LINE_SIZE. One other benefit to storing
// the internal data in this manner is false sharing no longer occurs when using
// a map, enabling efficient concurrent access of the map data structure with
// minimal locking if desired.
// With Robin Hood hashing a maximum load factor of 75% is ideal.
MAP_LOAD_FACTOR :: 75
// Minimum log2 capacity.
MAP_MIN_LOG2_CAPACITY :: 3 // 8 elements
// Has to be less than 100% though.
#assert(MAP_LOAD_FACTOR < 100)
// This is safe to change. The log2 size of a cache-line. At minimum it has to
// be six though. Higher cache line sizes are permitted.
MAP_CACHE_LINE_LOG2 :: 6
// The size of a cache-line.
MAP_CACHE_LINE_SIZE :: 1 << MAP_CACHE_LINE_LOG2
// The minimum cache-line size allowed by this implementation is 64 bytes since
// we need 6 bits in the base pointer to store the integer log2 capacity, which
// at maximum is 63. Odin uses signed integers to represent length and capacity,
// so only 63 bits are needed in the maximum case.
#assert(MAP_CACHE_LINE_SIZE >= 64)
// Map_Cell type that packs multiple T in such a way to ensure that each T stays
// aligned by align_of(T) and such that align_of(Map_Cell(T)) % MAP_CACHE_LINE_SIZE == 0
//
// This means a value of type T will never straddle a cache-line.
//
// When multiple Ts can fit in a single cache-line the data array will have more
// than one element. When it cannot, the data array will have one element and
// an array of Map_Cell(T) will be padded to stay a multiple of MAP_CACHE_LINE_SIZE.
//
// We rely on the type system to do all the arithmetic and padding for us here.
//
// The usual array[index] indexing for []T backed by a []Map_Cell(T) becomes a bit
// more involved as there now may be internal padding. The indexing now becomes
//
// N :: len(Map_Cell(T){}.data)
// i := index / N
// j := index % N
// cell[i].data[j]
//
// However, since len(Map_Cell(T){}.data) is a compile-time constant, there are some
// optimizations we can do to eliminate the need for any divisions as N will
// be bounded by [1, 64).
//
// In the optimal case, len(Map_Cell(T){}.data) = 1 so the cell array can be treated
// as a regular array of T, which is the case for hashes.
Map_Cell :: struct($T: typeid) #align(MAP_CACHE_LINE_SIZE) {
data: [MAP_CACHE_LINE_SIZE / size_of(T) when 0 < size_of(T) && size_of(T) < MAP_CACHE_LINE_SIZE else 1]T,
}
// So we can operate on a cell data structure at runtime without any type
// information, we have a simple table that stores some traits about the cell.
//
// 32-bytes on 64-bit
// 16-bytes on 32-bit
Map_Cell_Info :: struct {
size_of_type: uintptr, // 8-bytes on 64-bit, 4-bytes on 32-bits
align_of_type: uintptr, // 8-bytes on 64-bit, 4-bytes on 32-bits
size_of_cell: uintptr, // 8-bytes on 64-bit, 4-bytes on 32-bits
elements_per_cell: uintptr, // 8-bytes on 64-bit, 4-bytes on 32-bits
}
// map_cell_info :: proc "contextless" ($T: typeid) -> ^Map_Cell_Info {...}
map_cell_info :: intrinsics.type_map_cell_info
// Same as the above procedure but at runtime with the cell Map_Cell_Info value.
@(require_results)
map_cell_index_dynamic :: #force_inline proc "contextless" (base: uintptr, #no_alias info: ^Map_Cell_Info, index: uintptr) -> uintptr {
// Micro-optimize the common cases to save on integer division.
elements_per_cell := uintptr(info.elements_per_cell)
size_of_cell := uintptr(info.size_of_cell)
switch elements_per_cell {
case 1:
return base + (index * size_of_cell)
case 2:
cell_index := index >> 1
data_index := index & 1
size_of_type := uintptr(info.size_of_type)
return base + (cell_index * size_of_cell) + (data_index * size_of_type)
case:
cell_index := index / elements_per_cell
data_index := index % elements_per_cell
size_of_type := uintptr(info.size_of_type)
return base + (cell_index * size_of_cell) + (data_index * size_of_type)
}
}
// Same as above procedure but with compile-time constant index.
@(require_results)
map_cell_index_dynamic_const :: proc "contextless" (base: uintptr, #no_alias info: ^Map_Cell_Info, $INDEX: uintptr) -> uintptr {
elements_per_cell := uintptr(info.elements_per_cell)
size_of_cell := uintptr(info.size_of_cell)
size_of_type := uintptr(info.size_of_type)
cell_index := INDEX / elements_per_cell
data_index := INDEX % elements_per_cell
return base + (cell_index * size_of_cell) + (data_index * size_of_type)
}
// We always round the capacity to a power of two so this becomes [16]Foo, which
// works out to [4]Cell(Foo).
//
// The following compile-time procedure indexes such a [N]Cell(T) structure as
// if it were a flat array accounting for the internal padding introduced by the
// Cell structure.
@(require_results)
map_cell_index_static :: #force_inline proc "contextless" (cells: [^]Map_Cell($T), index: uintptr) -> ^T #no_bounds_check {
N :: size_of(Map_Cell(T){}.data) / size_of(T) when size_of(T) > 0 else 1
#assert(N <= MAP_CACHE_LINE_SIZE)
when size_of(Map_Cell(T)) == size_of([N]T) {
// No padding case, can treat as a regular array of []T.
return &([^]T)(cells)[index]
} else when (N & (N - 1)) == 0 && N <= 8*size_of(uintptr) {
// Likely case, N is a power of two because T is a power of two.
// Compute the integer log 2 of N, this is the shift amount to index the
// correct cell. Odin's intrinsics.count_leading_zeros does not produce a
// constant, hence this approach. We only need to check up to N = 64.
SHIFT :: 1 when N < 2 else
2 when N < 4 else
3 when N < 8 else
4 when N < 16 else
5 when N < 32 else 6
#assert(SHIFT <= MAP_CACHE_LINE_LOG2)
// Unique case, no need to index data here since only one element.
when N == 1 {
return &cells[index >> SHIFT].data[0]
} else {
return &cells[index >> SHIFT].data[index & (N - 1)]
}
} else {
// Least likely (and worst case), we pay for a division operation but we
// assume the compiler does not actually generate a division. N will be in the
// range [1, CACHE_LINE_SIZE) and not a power of two.
return &cells[index / N].data[index % N]
}
}
// len() for map
@(require_results)
map_len :: #force_inline proc "contextless" (m: Raw_Map) -> int {
return int(m.len)
}
// cap() for map
@(require_results)
map_cap :: #force_inline proc "contextless" (m: Raw_Map) -> int {
// The data uintptr stores the capacity in the lower six bits which gives the
// a maximum value of 2^6-1, or 63. We store the integer log2 of capacity
// since our capacity is always a power of two. We only need 63 bits as Odin
// represents length and capacity as a signed integer.
return 0 if m.data == 0 else 1 << map_log2_cap(m)
}
// Query the load factor of the map. This is not actually configurable, but
// some math is needed to compute it. Compute it as a fixed point percentage to
// avoid floating point operations. This division can be optimized out by
// multiplying by the multiplicative inverse of 100.
@(require_results)
map_load_factor :: #force_inline proc "contextless" (log2_capacity: uintptr) -> uintptr {
return ((uintptr(1) << log2_capacity) * MAP_LOAD_FACTOR) / 100
}
@(require_results)
map_resize_threshold :: #force_inline proc "contextless" (m: Raw_Map) -> uintptr {
return map_load_factor(map_log2_cap(m))
}
// The data stores the log2 capacity in the lower six bits. This is primarily
// used in the implementation rather than map_cap since the check for data = 0
// isn't necessary in the implementation. cap() on the otherhand needs to work
// when called on an empty map.
@(require_results)
map_log2_cap :: #force_inline proc "contextless" (m: Raw_Map) -> uintptr {
return m.data & (64 - 1)
}
// Canonicalize the data by removing the tagged capacity stored in the lower six
// bits of the data uintptr.
@(require_results)
map_data :: #force_inline proc "contextless" (m: Raw_Map) -> uintptr {
return m.data &~ uintptr(64 - 1)
}
Map_Hash :: uintptr
TOMBSTONE_MASK :: 1<<(size_of(Map_Hash)*8 - 1)
// Procedure to check if a slot is empty for a given hash. This is represented
// by the zero value to make the zero value useful. This is a procedure just
// for prose reasons.
@(require_results)
map_hash_is_empty :: #force_inline proc "contextless" (hash: Map_Hash) -> bool {
return hash == 0
}
@(require_results)
map_hash_is_deleted :: #force_no_inline proc "contextless" (hash: Map_Hash) -> bool {
// The MSB indicates a tombstone
return hash & TOMBSTONE_MASK != 0
}
@(require_results)
map_hash_is_valid :: #force_inline proc "contextless" (hash: Map_Hash) -> bool {
// The MSB indicates a tombstone
return (hash != 0) & (hash & TOMBSTONE_MASK == 0)
}
@(require_results)
map_seed :: #force_inline proc "contextless" (m: Raw_Map) -> uintptr {
return map_seed_from_map_data(map_data(m))
}
// splitmix for uintptr
@(require_results)
map_seed_from_map_data :: #force_inline proc "contextless" (data: uintptr) -> uintptr {
when size_of(uintptr) == size_of(u64) {
mix := data + 0x9e3779b97f4a7c15
mix = (mix ~ (mix >> 30)) * 0xbf58476d1ce4e5b9
mix = (mix ~ (mix >> 27)) * 0x94d049bb133111eb
return mix ~ (mix >> 31)
} else {
mix := data + 0x9e3779b9
mix = (mix ~ (mix >> 16)) * 0x21f0aaad
mix = (mix ~ (mix >> 15)) * 0x735a2d97
return mix ~ (mix >> 15)
}
}
// Computes the desired position in the array. This is just index % capacity,
// but a procedure as there's some math involved here to recover the capacity.
@(require_results)
map_desired_position :: #force_inline proc "contextless" (m: Raw_Map, hash: Map_Hash) -> uintptr {
// We do not use map_cap since we know the capacity will not be zero here.
capacity := uintptr(1) << map_log2_cap(m)
return uintptr(hash & Map_Hash(capacity - 1))
}
@(require_results)
map_probe_distance :: #force_inline proc "contextless" (m: Raw_Map, hash: Map_Hash, slot: uintptr) -> uintptr {
// We do not use map_cap since we know the capacity will not be zero here.
capacity := uintptr(1) << map_log2_cap(m)
return (slot + capacity - map_desired_position(m, hash)) & (capacity - 1)
}
// When working with the type-erased structure at runtime we need information
// about the map to make working with it possible. This info structure stores
// that.
//
// `Map_Info` and `Map_Cell_Info` are read only data structures and cannot be
// modified after creation
//
// 32-bytes on 64-bit
// 16-bytes on 32-bit
Map_Info :: struct {
ks: ^Map_Cell_Info, // 8-bytes on 64-bit, 4-bytes on 32-bit
vs: ^Map_Cell_Info, // 8-bytes on 64-bit, 4-bytes on 32-bit
key_hasher: proc "contextless" (key: rawptr, seed: Map_Hash) -> Map_Hash, // 8-bytes on 64-bit, 4-bytes on 32-bit
key_equal: proc "contextless" (lhs, rhs: rawptr) -> bool, // 8-bytes on 64-bit, 4-bytes on 32-bit
}
// The Map_Info structure is basically a pseudo-table of information for a given K and V pair.
// map_info :: proc "contextless" ($T: typeid/map[$K]$V) -> ^Map_Info {...}
map_info :: intrinsics.type_map_info
@(require_results)
map_kvh_data_dynamic :: proc "contextless" (m: Raw_Map, #no_alias info: ^Map_Info) -> (ks: uintptr, vs: uintptr, hs: [^]Map_Hash, sk: uintptr, sv: uintptr) {
INFO_HS := intrinsics.type_map_cell_info(Map_Hash)
capacity := uintptr(1) << map_log2_cap(m)
ks = map_data(m)
vs = map_cell_index_dynamic(ks, info.ks, capacity) // Skip past ks to get start of vs
hs_ := map_cell_index_dynamic(vs, info.vs, capacity) // Skip past vs to get start of hs
sk = map_cell_index_dynamic(hs_, INFO_HS, capacity) // Skip past hs to get start of sk
// Need to skip past two elements in the scratch key space to get to the start
// of the scratch value space, of which there's only two elements as well.
sv = map_cell_index_dynamic_const(sk, info.ks, 2)
hs = ([^]Map_Hash)(hs_)
return
}
@(require_results)
map_kvh_data_values_dynamic :: proc "contextless" (m: Raw_Map, #no_alias info: ^Map_Info) -> (vs: uintptr) {
capacity := uintptr(1) << map_log2_cap(m)
return map_cell_index_dynamic(map_data(m), info.ks, capacity) // Skip past ks to get start of vs
}
@(require_results)
map_total_allocation_size :: #force_inline proc "contextless" (capacity: uintptr, info: ^Map_Info) -> uintptr {
round :: #force_inline proc "contextless" (value: uintptr) -> uintptr {
CACHE_MASK :: MAP_CACHE_LINE_SIZE - 1
return (value + CACHE_MASK) &~ CACHE_MASK
}
INFO_HS := intrinsics.type_map_cell_info(Map_Hash)
size := uintptr(0)
size = round(map_cell_index_dynamic(size, info.ks, capacity))
size = round(map_cell_index_dynamic(size, info.vs, capacity))
size = round(map_cell_index_dynamic(size, INFO_HS, capacity))
size = round(map_cell_index_dynamic(size, info.ks, 2)) // Two additional ks for scratch storage
size = round(map_cell_index_dynamic(size, info.vs, 2)) // Two additional vs for scratch storage
return size
}
@(require_results)
map_total_allocation_size_from_value :: #force_inline proc "contextless" (m: $M/map[$K]$V) -> uintptr {
return map_total_allocation_size(uintptr(cap(m)), map_info(M))
}
// The only procedure which needs access to the context is the one which allocates the map.
@(require_results)
map_alloc_dynamic :: proc "odin" (info: ^Map_Info, log2_capacity: uintptr, allocator := context.allocator, loc := #caller_location) -> (result: Raw_Map, err: Allocator_Error) {
result.allocator = allocator // set the allocator always
if log2_capacity == 0 {
return
}
if log2_capacity >= 64 {
// Overflowed, would be caused by log2_capacity > 64
return {}, .Out_Of_Memory
}
capacity := uintptr(1) << max(log2_capacity, MAP_MIN_LOG2_CAPACITY)
CACHE_MASK :: MAP_CACHE_LINE_SIZE - 1
size := map_total_allocation_size(capacity, info)
data := mem_alloc_non_zeroed(int(size), MAP_CACHE_LINE_SIZE, allocator, loc) or_return
data_ptr := uintptr(raw_data(data))
if data_ptr == 0 {
err = .Out_Of_Memory
return
}
if intrinsics.expect(data_ptr & CACHE_MASK != 0, false) {
panic("allocation not aligned to a cache line", loc)
} else {
result.data = data_ptr | log2_capacity // Tagged pointer representation for capacity.
result.len = 0
map_clear_dynamic(&result, info)
}
return
}
// This procedure has to stack allocate storage to store local keys during the
// Robin Hood hashing technique where elements are swapped in the backing
// arrays to reduce variance. This swapping can only be done with memcpy since
// there is no type information.
//
// This procedure returns the address of the just inserted value, and will
// return 'nil' if there was no room to insert the entry
@(require_results)
map_insert_hash_dynamic :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, h: Map_Hash, ik: uintptr, iv: uintptr) -> (result: uintptr) {
h := h
pos := map_desired_position(m^, h)
distance := uintptr(0)
mask := (uintptr(1) << map_log2_cap(m^)) - 1
ks, vs, hs, sk, sv := map_kvh_data_dynamic(m^, info)
// Avoid redundant loads of these values
size_of_k := info.ks.size_of_type
size_of_v := info.vs.size_of_type
k := map_cell_index_dynamic(sk, info.ks, 0)
v := map_cell_index_dynamic(sv, info.vs, 0)
intrinsics.mem_copy_non_overlapping(rawptr(k), rawptr(ik), size_of_k)
intrinsics.mem_copy_non_overlapping(rawptr(v), rawptr(iv), size_of_v)
// Temporary k and v dynamic storage for swap below
tk := map_cell_index_dynamic(sk, info.ks, 1)
tv := map_cell_index_dynamic(sv, info.vs, 1)
swap_loop: for {
if distance > mask {
// Failed to find an empty slot and prevent infinite loop
panic("unable to insert into a map")
}
element_hash := hs[pos]
if map_hash_is_empty(element_hash) {
k_dst := map_cell_index_dynamic(ks, info.ks, pos)
v_dst := map_cell_index_dynamic(vs, info.vs, pos)
intrinsics.mem_copy_non_overlapping(rawptr(k_dst), rawptr(k), size_of_k)
intrinsics.mem_copy_non_overlapping(rawptr(v_dst), rawptr(v), size_of_v)
hs[pos] = h
return result if result != 0 else v_dst
}
if map_hash_is_deleted(element_hash) {
break swap_loop
}
if probe_distance := map_probe_distance(m^, element_hash, pos); distance > probe_distance {
if result == 0 {
result = map_cell_index_dynamic(vs, info.vs, pos)
}
kp := map_cell_index_dynamic(ks, info.ks, pos)
vp := map_cell_index_dynamic(vs, info.vs, pos)
intrinsics.mem_copy_non_overlapping(rawptr(tk), rawptr(k), size_of_k)
intrinsics.mem_copy_non_overlapping(rawptr(k), rawptr(kp), size_of_k)
intrinsics.mem_copy_non_overlapping(rawptr(kp), rawptr(tk), size_of_k)
intrinsics.mem_copy_non_overlapping(rawptr(tv), rawptr(v), size_of_v)
intrinsics.mem_copy_non_overlapping(rawptr(v), rawptr(vp), size_of_v)
intrinsics.mem_copy_non_overlapping(rawptr(vp), rawptr(tv), size_of_v)
th := h
h = hs[pos]
hs[pos] = th
distance = probe_distance
}
pos = (pos + 1) & mask
distance += 1
}
// backward shift loop
hs[pos] = 0
look_ahead: uintptr = 1
for {
la_pos := (pos + look_ahead) & mask
element_hash := hs[la_pos]
if map_hash_is_deleted(element_hash) {
look_ahead += 1
hs[la_pos] = 0
continue
}
k_dst := map_cell_index_dynamic(ks, info.ks, pos)
v_dst := map_cell_index_dynamic(vs, info.vs, pos)
if map_hash_is_empty(element_hash) {
intrinsics.mem_copy_non_overlapping(rawptr(k_dst), rawptr(k), size_of_k)
intrinsics.mem_copy_non_overlapping(rawptr(v_dst), rawptr(v), size_of_v)
hs[pos] = h
return result if result != 0 else v_dst
}
k_src := map_cell_index_dynamic(ks, info.ks, la_pos)
v_src := map_cell_index_dynamic(vs, info.vs, la_pos)
probe_distance := map_probe_distance(m^, element_hash, la_pos)
if probe_distance < look_ahead {
// probed can be made ideal while placing saved (ending condition)
if result == 0 {
result = v_dst
}
intrinsics.mem_copy_non_overlapping(rawptr(k_dst), rawptr(k), size_of_k)
intrinsics.mem_copy_non_overlapping(rawptr(v_dst), rawptr(v), size_of_v)
hs[pos] = h
// This will be an ideal move
pos = (la_pos - probe_distance) & mask
look_ahead -= probe_distance
// shift until we hit ideal/empty
for probe_distance != 0 {
k_dst = map_cell_index_dynamic(ks, info.ks, pos)
v_dst = map_cell_index_dynamic(vs, info.vs, pos)
intrinsics.mem_copy_non_overlapping(rawptr(k_dst), rawptr(k_src), size_of_k)
intrinsics.mem_copy_non_overlapping(rawptr(v_dst), rawptr(v_src), size_of_v)
hs[pos] = element_hash
hs[la_pos] = 0
pos = (pos + 1) & mask
la_pos = (la_pos + 1) & mask
look_ahead = (la_pos - pos) & mask
element_hash = hs[la_pos]
if map_hash_is_empty(element_hash) {
return
}
probe_distance = map_probe_distance(m^, element_hash, la_pos)
if probe_distance == 0 {
return
}
// can be ideal?
if probe_distance < look_ahead {
pos = (la_pos - probe_distance) & mask
}
k_src = map_cell_index_dynamic(ks, info.ks, la_pos)
v_src = map_cell_index_dynamic(vs, info.vs, la_pos)
}
return
} else if distance < probe_distance - look_ahead {
// shift back probed
intrinsics.mem_copy_non_overlapping(rawptr(k_dst), rawptr(k_src), size_of_k)
intrinsics.mem_copy_non_overlapping(rawptr(v_dst), rawptr(v_src), size_of_v)
hs[pos] = element_hash
hs[la_pos] = 0
} else {
// place saved, save probed
if result == 0 {
result = v_dst
}
intrinsics.mem_copy_non_overlapping(rawptr(k_dst), rawptr(k), size_of_k)
intrinsics.mem_copy_non_overlapping(rawptr(v_dst), rawptr(v), size_of_v)
hs[pos] = h
intrinsics.mem_copy_non_overlapping(rawptr(k), rawptr(k_src), size_of_k)
intrinsics.mem_copy_non_overlapping(rawptr(v), rawptr(v_src), size_of_v)
h = hs[la_pos]
hs[la_pos] = 0
distance = probe_distance - look_ahead
}
pos = (pos + 1) & mask
distance += 1
}
}
@(require_results)
map_grow_dynamic :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, loc := #caller_location) -> Allocator_Error {
log2_capacity := map_log2_cap(m^)
new_capacity := uintptr(1) << max(log2_capacity + 1, MAP_MIN_LOG2_CAPACITY)
return map_reserve_dynamic(m, info, new_capacity, loc)
}
@(require_results)
map_reserve_dynamic :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, new_capacity: uintptr, loc := #caller_location) -> Allocator_Error {
@(require_results)
ceil_log2 :: #force_inline proc "contextless" (x: uintptr) -> uintptr {
z := intrinsics.count_leading_zeros(x)
if z > 0 && x & (x-1) != 0 {
z -= 1
}
return size_of(uintptr)*8 - 1 - z
}
if m.allocator.procedure == nil {
m.allocator = context.allocator
}
new_capacity := new_capacity
old_capacity := uintptr(map_cap(m^))
if old_capacity >= new_capacity {
return nil
}
// ceiling nearest power of two
log2_new_capacity := ceil_log2(new_capacity)
log2_min_cap := max(MAP_MIN_LOG2_CAPACITY, log2_new_capacity)
if m.data == 0 {
m^ = map_alloc_dynamic(info, log2_min_cap, m.allocator, loc) or_return
return nil
}
resized := map_alloc_dynamic(info, log2_min_cap, m.allocator, loc) or_return
ks, vs, hs, _, _ := map_kvh_data_dynamic(m^, info)
// Cache these loads to avoid hitting them in the for loop.
n := m.len
for i in 0..<old_capacity {
hash := hs[i]
if map_hash_is_empty(hash) {
continue
}
if map_hash_is_deleted(hash) {
continue
}
k := map_cell_index_dynamic(ks, info.ks, i)
v := map_cell_index_dynamic(vs, info.vs, i)
hash = info.key_hasher(rawptr(k), map_seed(resized))
_ = map_insert_hash_dynamic(&resized, info, hash, k, v)
// Only need to do this comparison on each actually added pair, so do not
// fold it into the for loop comparator as a micro-optimization.
n -= 1
if n == 0 {
break
}
}
map_free_dynamic(m^, info, loc) or_return
m.data = resized.data
return nil
}
@(require_results)
map_shrink_dynamic :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, loc := #caller_location) -> (did_shrink: bool, err: Allocator_Error) {
if m.allocator.procedure == nil {
m.allocator = context.allocator
}
// Cannot shrink the capacity if the number of items in the map would exceed
// one minus the current log2 capacity's resize threshold. That is the shrunk
// map needs to be within the max load factor.
log2_capacity := map_log2_cap(m^)
if uintptr(m.len) >= map_load_factor(log2_capacity - 1) {
return false, nil
}
shrunk := map_alloc_dynamic(info, log2_capacity - 1, m.allocator) or_return
capacity := uintptr(1) << log2_capacity
ks, vs, hs, _, _ := map_kvh_data_dynamic(m^, info)
n := m.len
for i in 0..<capacity {
hash := hs[i]
if map_hash_is_empty(hash) {
continue
}
if map_hash_is_deleted(hash) {
continue
}
k := map_cell_index_dynamic(ks, info.ks, i)
v := map_cell_index_dynamic(vs, info.vs, i)
hash = info.key_hasher(rawptr(k), map_seed(shrunk))
_ = map_insert_hash_dynamic(&shrunk, info, hash, k, v)
// Only need to do this comparison on each actually added pair, so do not
// fold it into the for loop comparator as a micro-optimization.
n -= 1
if n == 0 {
break
}
}
map_free_dynamic(m^, info, loc) or_return
m.data = shrunk.data
return true, nil
}
@(require_results)
map_free_dynamic :: proc "odin" (m: Raw_Map, info: ^Map_Info, loc := #caller_location) -> Allocator_Error {
ptr := rawptr(map_data(m))
size := int(map_total_allocation_size(uintptr(map_cap(m)), info))
err := mem_free_with_size(ptr, size, m.allocator, loc)
#partial switch err {
case .None, .Mode_Not_Implemented:
return nil
}
return err
}
@(require_results)
map_lookup_dynamic :: proc "contextless" (m: Raw_Map, #no_alias info: ^Map_Info, k: uintptr) -> (index: uintptr, ok: bool) {
if map_len(m) == 0 {
return 0, false
}
h := info.key_hasher(rawptr(k), map_seed(m))
p := map_desired_position(m, h)
d := uintptr(0)
c := (uintptr(1) << map_log2_cap(m)) - 1
ks, _, hs, _, _ := map_kvh_data_dynamic(m, info)
for {
element_hash := hs[p]
if map_hash_is_empty(element_hash) {
return 0, false
} else if d > map_probe_distance(m, element_hash, p) {
return 0, false
} else if element_hash == h && info.key_equal(rawptr(k), rawptr(map_cell_index_dynamic(ks, info.ks, p))) {
return p, true
}
p = (p + 1) & c
d += 1
}
}
@(require_results)
map_exists_dynamic :: proc "contextless" (m: Raw_Map, #no_alias info: ^Map_Info, k: uintptr) -> (ok: bool) {
if map_len(m) == 0 {
return false
}
h := info.key_hasher(rawptr(k), map_seed(m))
p := map_desired_position(m, h)
d := uintptr(0)
c := (uintptr(1) << map_log2_cap(m)) - 1
ks, _, hs, _, _ := map_kvh_data_dynamic(m, info)
for {
element_hash := hs[p]
if map_hash_is_empty(element_hash) {
return false
} else if d > map_probe_distance(m, element_hash, p) {
return false
} else if element_hash == h && info.key_equal(rawptr(k), rawptr(map_cell_index_dynamic(ks, info.ks, p))) {
return true
}
p = (p + 1) & c
d += 1
}
}
@(require_results)
map_erase_dynamic :: #force_inline proc "contextless" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, k: uintptr) -> (old_k, old_v: uintptr, ok: bool) {
index := map_lookup_dynamic(m^, info, k) or_return
ks, vs, hs, _, _ := map_kvh_data_dynamic(m^, info)
hs[index] |= TOMBSTONE_MASK
old_k = map_cell_index_dynamic(ks, info.ks, index)
old_v = map_cell_index_dynamic(vs, info.vs, index)
m.len -= 1
ok = true
mask := (uintptr(1)<<map_log2_cap(m^)) - 1
curr_index := uintptr(index)
next_index := (curr_index + 1) & mask
// if the next element is empty or has zero probe distance, then any lookup
// will always fail on the next, so we can clear both of them
hash := hs[next_index]
if map_hash_is_empty(hash) || map_probe_distance(m^, hash, next_index) == 0 {
hs[curr_index] = 0
} else {
hs[curr_index] |= TOMBSTONE_MASK
}
return
}
map_clear_dynamic :: #force_inline proc "contextless" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info) {
if m.data == 0 {
return
}
_, _, hs, _, _ := map_kvh_data_dynamic(m^, info)
intrinsics.mem_zero(rawptr(hs), map_cap(m^) * size_of(Map_Hash))
m.len = 0
}
@(require_results)
map_kvh_data_static :: #force_inline proc "contextless" (m: $T/map[$K]$V) -> (ks: [^]Map_Cell(K), vs: [^]Map_Cell(V), hs: [^]Map_Hash) {
capacity := uintptr(cap(m))
ks = ([^]Map_Cell(K))(map_data(transmute(Raw_Map)m))
vs = ([^]Map_Cell(V))(map_cell_index_static(ks, capacity))
hs = ([^]Map_Hash)(map_cell_index_static(vs, capacity))
return
}
@(require_results)
map_get :: proc "contextless" (m: $T/map[$K]$V, key: K) -> (stored_key: K, stored_value: V, ok: bool) {
rm := transmute(Raw_Map)m
if rm.len == 0 {
return
}
info := intrinsics.type_map_info(T)
key := key
h := info.key_hasher(&key, map_seed(rm))
pos := map_desired_position(rm, h)
distance := uintptr(0)
mask := (uintptr(1) << map_log2_cap(rm)) - 1
ks, vs, hs := map_kvh_data_static(m)
for {
element_hash := hs[pos]
if map_hash_is_empty(element_hash) {
return
} else if distance > map_probe_distance(rm, element_hash, pos) {
return
} else if element_hash == h {
element_key := map_cell_index_static(ks, pos)
if info.key_equal(&key, rawptr(element_key)) {
element_value := map_cell_index_static(vs, pos)
stored_key = (^K)(element_key)^
stored_value = (^V)(element_value)^
ok = true
return
}
}
pos = (pos + 1) & mask
distance += 1
}
}
// IMPORTANT: USED WITHIN THE COMPILER
__dynamic_map_get :: proc "contextless" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, h: Map_Hash, key: rawptr) -> (ptr: rawptr) {
if m.len == 0 {
return nil
}
pos := map_desired_position(m^, h)
distance := uintptr(0)
mask := (uintptr(1) << map_log2_cap(m^)) - 1
ks, vs, hs, _, _ := map_kvh_data_dynamic(m^, info)
for {
element_hash := hs[pos]
if map_hash_is_empty(element_hash) {
return nil
} else if distance > map_probe_distance(m^, element_hash, pos) {
return nil
} else if element_hash == h && info.key_equal(key, rawptr(map_cell_index_dynamic(ks, info.ks, pos))) {
return rawptr(map_cell_index_dynamic(vs, info.vs, pos))
}
pos = (pos + 1) & mask
distance += 1
}
}
__dynamic_map_get_key_and_value :: proc "contextless" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, h: Map_Hash, key: rawptr) -> (key_ptr, value_ptr: rawptr) {
if m.len == 0 {
return nil, nil
}
pos := map_desired_position(m^, h)
distance := uintptr(0)
mask := (uintptr(1) << map_log2_cap(m^)) - 1
ks, vs, hs, _, _ := map_kvh_data_dynamic(m^, info)
for {
element_hash := hs[pos]
if map_hash_is_empty(element_hash) {
return nil, nil
} else if distance > map_probe_distance(m^, element_hash, pos) {
return nil, nil
} else if element_hash == h {
other_key := rawptr(map_cell_index_dynamic(ks, info.ks, pos))
if info.key_equal(key, other_key) {
key_ptr = other_key
value_ptr = rawptr(map_cell_index_dynamic(vs, info.vs, pos))
return
}
}
pos = (pos + 1) & mask
distance += 1
}
}
// IMPORTANT: USED WITHIN THE COMPILER
__dynamic_map_check_grow :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, loc := #caller_location) -> (err: Allocator_Error, has_grown: bool) {
if m.len >= map_resize_threshold(m^) {
return map_grow_dynamic(m, info, loc), true
}
return nil, false
}
__dynamic_map_set_without_hash :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, key, value: rawptr, loc := #caller_location) -> rawptr {
return __dynamic_map_set(m, info, info.key_hasher(key, map_seed(m^)), key, value, loc)
}
// IMPORTANT: USED WITHIN THE COMPILER
__dynamic_map_set :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, hash: Map_Hash, key, value: rawptr, loc := #caller_location) -> rawptr {
if found := __dynamic_map_get(m, info, hash, key); found != nil {
intrinsics.mem_copy_non_overlapping(found, value, info.vs.size_of_type)
return found
}
hash := hash
err, has_grown := __dynamic_map_check_grow(m, info, loc)
if err != nil {
return nil
}
if has_grown {
hash = info.key_hasher(key, map_seed(m^))
}
result := map_insert_hash_dynamic(m, info, hash, uintptr(key), uintptr(value))
if result != 0 {
m.len += 1
}
return rawptr(result)
}
__dynamic_map_set_extra_without_hash :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, key, value: rawptr, loc := #caller_location) -> (prev_key_ptr, value_ptr: rawptr) {
return __dynamic_map_set_extra(m, info, info.key_hasher(key, map_seed(m^)), key, value, loc)
}
__dynamic_map_set_extra :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, hash: Map_Hash, key, value: rawptr, loc := #caller_location) -> (prev_key_ptr, value_ptr: rawptr) {
if prev_key_ptr, value_ptr = __dynamic_map_get_key_and_value(m, info, hash, key); value_ptr != nil {
intrinsics.mem_copy_non_overlapping(value_ptr, value, info.vs.size_of_type)
return
}
hash := hash
err, has_grown := __dynamic_map_check_grow(m, info, loc)
if err != nil {
return nil, nil
}
if has_grown {
hash = info.key_hasher(key, map_seed(m^))
}
result := map_insert_hash_dynamic(m, info, hash, uintptr(key), uintptr(value))
if result != 0 {
m.len += 1
}
return nil, rawptr(result)
}
// IMPORTANT: USED WITHIN THE COMPILER
@(private)
__dynamic_map_reserve :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, new_capacity: uint, loc := #caller_location) -> Allocator_Error {
return map_reserve_dynamic(m, info, uintptr(new_capacity), loc)
}
// NOTE: the default hashing algorithm derives from fnv64a, with some minor modifications to work for `map` type:
//
// * Convert a `0` result to `1`
// * "empty entry"
// * Prevent the top bit from being set
// * "deleted entry"
//
// Both of these modification are necessary for the implementation of the `map`
INITIAL_HASH_SEED :: 0xcbf29ce484222325
HASH_MASK :: 1 << (8*size_of(uintptr) - 1) -1
default_hasher :: #force_inline proc "contextless" (data: rawptr, seed: uintptr, N: int) -> uintptr {
h := u64(seed) + INITIAL_HASH_SEED
p := ([^]byte)(data)
for _ in 0..<N {
h = (h ~ u64(p[0])) * 0x100000001b3
p = p[1:]
}
h &= HASH_MASK
return uintptr(h) | uintptr(uintptr(h) == 0)
}
default_hasher_string :: proc "contextless" (data: rawptr, seed: uintptr) -> uintptr {
str := (^[]byte)(data)
return default_hasher(raw_data(str^), seed, len(str))
}
default_hasher_cstring :: proc "contextless" (data: rawptr, seed: uintptr) -> uintptr {
h := u64(seed) + INITIAL_HASH_SEED
if ptr := (^[^]byte)(data)^; ptr != nil {
for ptr[0] != 0 {
h = (h ~ u64(ptr[0])) * 0x100000001b3
ptr = ptr[1:]
}
}
h &= HASH_MASK
return uintptr(h) | uintptr(uintptr(h) == 0)
}
+59
View File
@@ -0,0 +1,59 @@
//+private
//+build linux, darwin, freebsd, openbsd, netbsd, haiku
//+no-instrumentation
package runtime
import "base:intrinsics"
when ODIN_BUILD_MODE == .Dynamic {
@(link_name="_odin_entry_point", linkage="strong", require/*, link_section=".init"*/)
_odin_entry_point :: proc "c" () {
context = default_context()
#force_no_inline _startup_runtime()
intrinsics.__entry_point()
}
@(link_name="_odin_exit_point", linkage="strong", require/*, link_section=".fini"*/)
_odin_exit_point :: proc "c" () {
context = default_context()
#force_no_inline _cleanup_runtime()
}
@(link_name="main", linkage="strong", require)
main :: proc "c" (argc: i32, argv: [^]cstring) -> i32 {
return 0
}
} else when !ODIN_TEST && !ODIN_NO_ENTRY_POINT {
when ODIN_NO_CRT {
// NOTE(flysand): We need to start from assembly because we need
// to retrieve argc and argv from the stack
when ODIN_ARCH == .amd64 {
@require foreign import entry "entry_unix_no_crt_amd64.asm"
SYS_exit :: 60
} else when ODIN_ARCH == .i386 {
@require foreign import entry "entry_unix_no_crt_i386.asm"
SYS_exit :: 1
} else when ODIN_OS == .Darwin && ODIN_ARCH == .arm64 {
@require foreign import entry "entry_unix_no_crt_darwin_arm64.asm"
SYS_exit :: 1
}
@(link_name="_start_odin", linkage="strong", require)
_start_odin :: proc "c" (argc: i32, argv: [^]cstring) -> ! {
args__ = argv[:argc]
context = default_context()
#force_no_inline _startup_runtime()
intrinsics.__entry_point()
#force_no_inline _cleanup_runtime()
intrinsics.syscall(SYS_exit, 0)
unreachable()
}
} else {
@(link_name="main", linkage="strong", require)
main :: proc "c" (argc: i32, argv: [^]cstring) -> i32 {
args__ = argv[:argc]
context = default_context()
#force_no_inline _startup_runtime()
intrinsics.__entry_point()
#force_no_inline _cleanup_runtime()
return 0
}
}
}
+43
View File
@@ -0,0 +1,43 @@
bits 64
extern _start_odin
global _start
section .text
;; Entry point for programs that specify -no-crt option
;; This entry point should be compatible with dynamic loaders on linux
;; The parameters the dynamic loader passes to the _start function:
;; RDX = pointer to atexit function
;; The stack layout is as follows:
;; +-------------------+
;; NULL
;; +-------------------+
;; envp[m]
;; +-------------------+
;; ...
;; +-------------------+
;; envp[0]
;; +-------------------+
;; NULL
;; +-------------------+
;; argv[n]
;; +-------------------+
;; ...
;; +-------------------+
;; argv[0]
;; +-------------------+
;; argc
;; +-------------------+ <------ RSP
;;
_start:
;; Mark stack frame as the top of the stack
xor rbp, rbp
;; Load argc into 1st param reg, argv into 2nd param reg
pop rdi
mov rdx, rsi
;; Align stack pointer down to 16-bytes (sysv calling convention)
and rsp, -16
;; Call into odin entry point
call _start_odin
jmp $$
@@ -0,0 +1,20 @@
.section __TEXT,__text
; NOTE(laytan): this should ideally be the -minimum-os-version flag but there is no nice way of preprocessing assembly in Odin.
; 10 seems to be the lowest it goes and I don't see it mess with any targeted os version so this seems fine.
.build_version macos, 10, 0
.extern __start_odin
.global _main
.align 2
_main:
mov x5, sp ; use x5 as the stack pointer
str x0, [x5] ; get argc into x0 (kernel passes 32-bit int argc as 64-bits on stack to keep alignment)
str x1, [x5, #8] ; get argv into x1
and sp, x5, #~15 ; force 16-byte alignment of the stack
bl __start_odin ; call into Odin entry point
ret ; should never get here
+18
View File
@@ -0,0 +1,18 @@
bits 32
extern _start_odin
global _start
section .text
;; NOTE(flysand): For description see the corresponding *_amd64.asm file
;; also I didn't test this on x86-32
_start:
xor ebp, rbp
pop ecx
mov eax, esp
and esp, -16
push eax
push ecx
call _start_odin
jmp $$
+39
View File
@@ -0,0 +1,39 @@
//+private
//+build wasm32, wasm64p32
//+no-instrumentation
package runtime
import "base:intrinsics"
when !ODIN_TEST && !ODIN_NO_ENTRY_POINT {
when ODIN_OS == .Orca {
@(linkage="strong", require, export)
oc_on_init :: proc "c" () {
context = default_context()
#force_no_inline _startup_runtime()
intrinsics.__entry_point()
}
@(linkage="strong", require, export)
oc_on_terminate :: proc "c" () {
context = default_context()
#force_no_inline _cleanup_runtime()
}
} else {
@(link_name="_start", linkage="strong", require, export)
_start :: proc "c" () {
context = default_context()
when ODIN_OS == .WASI {
_wasi_setup_args()
}
#force_no_inline _startup_runtime()
intrinsics.__entry_point()
}
@(link_name="_end", linkage="strong", require, export)
_end :: proc "c" () {
context = default_context()
#force_no_inline _cleanup_runtime()
}
}
}
@@ -1,30 +1,35 @@
//+private
//+build windows
//+no-instrumentation
package runtime
import "core:intrinsics"
import "base:intrinsics"
when ODIN_BUILD_MODE == .Dynamic {
@(link_name="DllMain", linkage="strong", require)
DllMain :: proc "stdcall" (hinstDLL: rawptr, fdwReason: u32, lpReserved: rawptr) -> b32 {
DllMain :: proc "system" (hinstDLL: rawptr, fdwReason: u32, lpReserved: rawptr) -> b32 {
context = default_context()
switch fdwReason {
case 1: // DLL_PROCESS_ATTACH
// Populate Windows DLL-specific global
dll_forward_reason = DLL_Forward_Reason(fdwReason)
switch dll_forward_reason {
case .Process_Attach:
#force_no_inline _startup_runtime()
intrinsics.__entry_point()
case 0: // DLL_PROCESS_DETACH
case .Process_Detach:
#force_no_inline _cleanup_runtime()
case 2: // DLL_THREAD_ATTACH
case .Thread_Attach:
break
case 3: // DLL_THREAD_DETACH
case .Thread_Detach:
break
}
return true
}
} else when !ODIN_TEST && !ODIN_NO_ENTRY_POINT {
when ODIN_ARCH == "i386" || ODIN_NO_CRT {
when ODIN_ARCH == .i386 || ODIN_NO_CRT {
@(link_name="mainCRTStartup", linkage="strong", require)
mainCRTStartup :: proc "stdcall" () -> i32 {
mainCRTStartup :: proc "system" () -> i32 {
context = default_context()
#force_no_inline _startup_runtime()
intrinsics.__entry_point()
+308
View File
@@ -0,0 +1,308 @@
package runtime
@(no_instrumentation)
bounds_trap :: proc "contextless" () -> ! {
when ODIN_OS == .Windows {
windows_trap_array_bounds()
} else when ODIN_OS == .Orca {
abort_ext("", "", 0, "bounds trap")
} else {
trap()
}
}
@(no_instrumentation)
type_assertion_trap :: proc "contextless" () -> ! {
when ODIN_OS == .Windows {
windows_trap_type_assertion()
} else when ODIN_OS == .Orca {
abort_ext("", "", 0, "type assertion trap")
} else {
trap()
}
}
@(disabled=ODIN_NO_BOUNDS_CHECK)
bounds_check_error :: proc "contextless" (file: string, line, column: i32, index, count: int) {
if uint(index) < uint(count) {
return
}
@(cold, no_instrumentation)
handle_error :: proc "contextless" (file: string, line, column: i32, index, count: int) -> ! {
print_caller_location(Source_Code_Location{file, line, column, ""})
print_string(" Index ")
print_i64(i64(index))
print_string(" is out of range 0..<")
print_i64(i64(count))
print_byte('\n')
bounds_trap()
}
handle_error(file, line, column, index, count)
}
@(no_instrumentation)
slice_handle_error :: proc "contextless" (file: string, line, column: i32, lo, hi: int, len: int) -> ! {
print_caller_location(Source_Code_Location{file, line, column, ""})
print_string(" Invalid slice indices ")
print_i64(i64(lo))
print_string(":")
print_i64(i64(hi))
print_string(" is out of range 0..<")
print_i64(i64(len))
print_byte('\n')
bounds_trap()
}
@(no_instrumentation)
multi_pointer_slice_handle_error :: proc "contextless" (file: string, line, column: i32, lo, hi: int) -> ! {
print_caller_location(Source_Code_Location{file, line, column, ""})
print_string(" Invalid slice indices ")
print_i64(i64(lo))
print_string(":")
print_i64(i64(hi))
print_byte('\n')
bounds_trap()
}
@(disabled=ODIN_NO_BOUNDS_CHECK)
multi_pointer_slice_expr_error :: proc "contextless" (file: string, line, column: i32, lo, hi: int) {
if lo <= hi {
return
}
multi_pointer_slice_handle_error(file, line, column, lo, hi)
}
@(disabled=ODIN_NO_BOUNDS_CHECK)
slice_expr_error_hi :: proc "contextless" (file: string, line, column: i32, hi: int, len: int) {
if 0 <= hi && hi <= len {
return
}
slice_handle_error(file, line, column, 0, hi, len)
}
@(disabled=ODIN_NO_BOUNDS_CHECK)
slice_expr_error_lo_hi :: proc "contextless" (file: string, line, column: i32, lo, hi: int, len: int) {
if 0 <= lo && lo <= len && lo <= hi && hi <= len {
return
}
slice_handle_error(file, line, column, lo, hi, len)
}
@(disabled=ODIN_NO_BOUNDS_CHECK)
dynamic_array_expr_error :: proc "contextless" (file: string, line, column: i32, low, high, max: int) {
if 0 <= low && low <= high && high <= max {
return
}
@(cold, no_instrumentation)
handle_error :: proc "contextless" (file: string, line, column: i32, low, high, max: int) -> ! {
print_caller_location(Source_Code_Location{file, line, column, ""})
print_string(" Invalid dynamic array indices ")
print_i64(i64(low))
print_string(":")
print_i64(i64(high))
print_string(" is out of range 0..<")
print_i64(i64(max))
print_byte('\n')
bounds_trap()
}
handle_error(file, line, column, low, high, max)
}
@(disabled=ODIN_NO_BOUNDS_CHECK)
matrix_bounds_check_error :: proc "contextless" (file: string, line, column: i32, row_index, column_index, row_count, column_count: int) {
if uint(row_index) < uint(row_count) &&
uint(column_index) < uint(column_count) {
return
}
@(cold, no_instrumentation)
handle_error :: proc "contextless" (file: string, line, column: i32, row_index, column_index, row_count, column_count: int) -> ! {
print_caller_location(Source_Code_Location{file, line, column, ""})
print_string(" Matrix indices [")
print_i64(i64(row_index))
print_string(", ")
print_i64(i64(column_index))
print_string(" is out of range [0..<")
print_i64(i64(row_count))
print_string(", 0..<")
print_i64(i64(column_count))
print_string("]")
print_byte('\n')
bounds_trap()
}
handle_error(file, line, column, row_index, column_index, row_count, column_count)
}
when ODIN_NO_RTTI {
type_assertion_check :: proc "contextless" (ok: bool, file: string, line, column: i32) {
if ok {
return
}
@(cold, no_instrumentation)
handle_error :: proc "contextless" (file: string, line, column: i32) -> ! {
print_caller_location(Source_Code_Location{file, line, column, ""})
print_string(" Invalid type assertion\n")
type_assertion_trap()
}
handle_error(file, line, column)
}
type_assertion_check2 :: proc "contextless" (ok: bool, file: string, line, column: i32) {
if ok {
return
}
@(cold, no_instrumentation)
handle_error :: proc "contextless" (file: string, line, column: i32) -> ! {
print_caller_location(Source_Code_Location{file, line, column, ""})
print_string(" Invalid type assertion\n")
type_assertion_trap()
}
handle_error(file, line, column)
}
} else {
type_assertion_check :: proc "contextless" (ok: bool, file: string, line, column: i32, from, to: typeid) {
if ok {
return
}
@(cold, no_instrumentation)
handle_error :: proc "contextless" (file: string, line, column: i32, from, to: typeid) -> ! {
print_caller_location(Source_Code_Location{file, line, column, ""})
print_string(" Invalid type assertion from ")
print_typeid(from)
print_string(" to ")
print_typeid(to)
print_byte('\n')
type_assertion_trap()
}
handle_error(file, line, column, from, to)
}
type_assertion_check2 :: proc "contextless" (ok: bool, file: string, line, column: i32, from, to: typeid, from_data: rawptr) {
if ok {
return
}
variant_type :: proc "contextless" (id: typeid, data: rawptr) -> typeid {
if id == nil || data == nil {
return id
}
ti := type_info_base(type_info_of(id))
#partial switch v in ti.variant {
case Type_Info_Any:
return (^any)(data).id
case Type_Info_Union:
tag_ptr := uintptr(data) + v.tag_offset
idx := 0
switch v.tag_type.size {
case 1: idx = int((^u8)(tag_ptr)^) - 1
case 2: idx = int((^u16)(tag_ptr)^) - 1
case 4: idx = int((^u32)(tag_ptr)^) - 1
case 8: idx = int((^u64)(tag_ptr)^) - 1
case 16: idx = int((^u128)(tag_ptr)^) - 1
}
if idx < 0 {
return nil
} else if idx < len(v.variants) {
return v.variants[idx].id
}
}
return id
}
@(cold, no_instrumentation)
handle_error :: proc "contextless" (file: string, line, column: i32, from, to: typeid, from_data: rawptr) -> ! {
actual := variant_type(from, from_data)
print_caller_location(Source_Code_Location{file, line, column, ""})
print_string(" Invalid type assertion from ")
print_typeid(from)
print_string(" to ")
print_typeid(to)
if actual != from {
print_string(", actual type: ")
print_typeid(actual)
}
print_byte('\n')
type_assertion_trap()
}
handle_error(file, line, column, from, to, from_data)
}
}
@(disabled=ODIN_NO_BOUNDS_CHECK)
make_slice_error_loc :: #force_inline proc "contextless" (loc := #caller_location, len: int) {
if 0 <= len {
return
}
@(cold, no_instrumentation)
handle_error :: proc "contextless" (loc: Source_Code_Location, len: int) -> ! {
print_caller_location(loc)
print_string(" Invalid slice length for make: ")
print_i64(i64(len))
print_byte('\n')
bounds_trap()
}
handle_error(loc, len)
}
@(disabled=ODIN_NO_BOUNDS_CHECK)
make_dynamic_array_error_loc :: #force_inline proc "contextless" (loc := #caller_location, len, cap: int) {
if 0 <= len && len <= cap {
return
}
@(cold, no_instrumentation)
handle_error :: proc "contextless" (loc: Source_Code_Location, len, cap: int) -> ! {
print_caller_location(loc)
print_string(" Invalid dynamic array parameters for make: ")
print_i64(i64(len))
print_byte(':')
print_i64(i64(cap))
print_byte('\n')
bounds_trap()
}
handle_error(loc, len, cap)
}
@(disabled=ODIN_NO_BOUNDS_CHECK)
make_map_expr_error_loc :: #force_inline proc "contextless" (loc := #caller_location, cap: int) {
if 0 <= cap {
return
}
@(cold, no_instrumentation)
handle_error :: proc "contextless" (loc: Source_Code_Location, cap: int) -> ! {
print_caller_location(loc)
print_string(" Invalid map capacity for make: ")
print_i64(i64(cap))
print_byte('\n')
bounds_trap()
}
handle_error(loc, cap)
}
@(disabled=ODIN_NO_BOUNDS_CHECK)
bounds_check_error_loc :: #force_inline proc "contextless" (loc := #caller_location, index, count: int) {
bounds_check_error(loc.file_path, loc.line, loc.column, index, count)
}
@(disabled=ODIN_NO_BOUNDS_CHECK)
slice_expr_error_hi_loc :: #force_inline proc "contextless" (loc := #caller_location, hi: int, len: int) {
slice_expr_error_hi(loc.file_path, loc.line, loc.column, hi, len)
}
@(disabled=ODIN_NO_BOUNDS_CHECK)
slice_expr_error_lo_hi_loc :: #force_inline proc "contextless" (loc := #caller_location, lo, hi: int, len: int) {
slice_expr_error_lo_hi(loc.file_path, loc.line, loc.column, lo, hi, len)
}
@(disabled=ODIN_NO_BOUNDS_CHECK)
dynamic_array_expr_error_loc :: #force_inline proc "contextless" (loc := #caller_location, low, high, max: int) {
dynamic_array_expr_error(loc.file_path, loc.line, loc.column, low, high, max)
}
+110
View File
@@ -0,0 +1,110 @@
package runtime
import "base:intrinsics"
heap_allocator :: proc() -> Allocator {
return Allocator{
procedure = heap_allocator_proc,
data = nil,
}
}
heap_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
size, alignment: int,
old_memory: rawptr, old_size: int, loc := #caller_location) -> ([]byte, Allocator_Error) {
//
// NOTE(tetra, 2020-01-14): The heap doesn't respect alignment.
// Instead, we overallocate by `alignment + size_of(rawptr) - 1`, and insert
// padding. We also store the original pointer returned by heap_alloc right before
// the pointer we return to the user.
//
aligned_alloc :: proc(size, alignment: int, old_ptr: rawptr = nil, zero_memory := true) -> ([]byte, Allocator_Error) {
a := max(alignment, align_of(rawptr))
space := size + a - 1
allocated_mem: rawptr
if old_ptr != nil {
original_old_ptr := ([^]rawptr)(old_ptr)[-1]
allocated_mem = heap_resize(original_old_ptr, space+size_of(rawptr))
} else {
allocated_mem = heap_alloc(space+size_of(rawptr), zero_memory)
}
aligned_mem := rawptr(([^]u8)(allocated_mem)[size_of(rawptr):])
ptr := uintptr(aligned_mem)
aligned_ptr := (ptr - 1 + uintptr(a)) & -uintptr(a)
diff := int(aligned_ptr - ptr)
if (size + diff) > space || allocated_mem == nil {
return nil, .Out_Of_Memory
}
aligned_mem = rawptr(aligned_ptr)
([^]rawptr)(aligned_mem)[-1] = allocated_mem
return byte_slice(aligned_mem, size), nil
}
aligned_free :: proc(p: rawptr) {
if p != nil {
heap_free(([^]rawptr)(p)[-1])
}
}
aligned_resize :: proc(p: rawptr, old_size: int, new_size: int, new_alignment: int, zero_memory := true) -> (new_memory: []byte, err: Allocator_Error) {
if p == nil {
return nil, nil
}
new_memory = aligned_alloc(new_size, new_alignment, p, zero_memory) or_return
// NOTE: heap_resize does not zero the new memory, so we do it
if zero_memory && new_size > old_size {
new_region := raw_data(new_memory[old_size:])
intrinsics.mem_zero(new_region, new_size - old_size)
}
return
}
switch mode {
case .Alloc, .Alloc_Non_Zeroed:
return aligned_alloc(size, alignment, nil, mode == .Alloc)
case .Free:
aligned_free(old_memory)
case .Free_All:
return nil, .Mode_Not_Implemented
case .Resize, .Resize_Non_Zeroed:
if old_memory == nil {
return aligned_alloc(size, alignment, nil, mode == .Resize)
}
return aligned_resize(old_memory, old_size, size, alignment, mode == .Resize)
case .Query_Features:
set := (^Allocator_Mode_Set)(old_memory)
if set != nil {
set^ = {.Alloc, .Alloc_Non_Zeroed, .Free, .Resize, .Resize_Non_Zeroed, .Query_Features}
}
return nil, nil
case .Query_Info:
return nil, .Mode_Not_Implemented
}
return nil, nil
}
heap_alloc :: proc "contextless" (size: int, zero_memory := true) -> rawptr {
return _heap_alloc(size, zero_memory)
}
heap_resize :: proc "contextless" (ptr: rawptr, new_size: int) -> rawptr {
return _heap_resize(ptr, new_size)
}
heap_free :: proc "contextless" (ptr: rawptr) {
_heap_free(ptr)
}
+29
View File
@@ -0,0 +1,29 @@
//+build orca
//+private
package runtime
foreign {
@(link_name="malloc") _orca_malloc :: proc "c" (size: int) -> rawptr ---
@(link_name="calloc") _orca_calloc :: proc "c" (num, size: int) -> rawptr ---
@(link_name="free") _orca_free :: proc "c" (ptr: rawptr) ---
@(link_name="realloc") _orca_realloc :: proc "c" (ptr: rawptr, size: int) -> rawptr ---
}
_heap_alloc :: proc "contextless" (size: int, zero_memory := true) -> rawptr {
if size <= 0 {
return nil
}
if zero_memory {
return _orca_calloc(1, size)
} else {
return _orca_malloc(size)
}
}
_heap_resize :: proc "contextless" (ptr: rawptr, new_size: int) -> rawptr {
return _orca_realloc(ptr, new_size)
}
_heap_free :: proc "contextless" (ptr: rawptr) {
_orca_free(ptr)
}
+18
View File
@@ -0,0 +1,18 @@
//+build js, wasi, freestanding, essence
//+private
package runtime
_heap_alloc :: proc "contextless" (size: int, zero_memory := true) -> rawptr {
context = default_context()
unimplemented("base:runtime 'heap_alloc' procedure is not supported on this platform")
}
_heap_resize :: proc "contextless" (ptr: rawptr, new_size: int) -> rawptr {
context = default_context()
unimplemented("base:runtime 'heap_resize' procedure is not supported on this platform")
}
_heap_free :: proc "contextless" (ptr: rawptr) {
context = default_context()
unimplemented("base:runtime 'heap_free' procedure is not supported on this platform")
}
+38
View File
@@ -0,0 +1,38 @@
//+build linux, darwin, freebsd, openbsd, netbsd, haiku
//+private
package runtime
when ODIN_OS == .Darwin {
foreign import libc "system:System.framework"
} else {
foreign import libc "system:c"
}
@(default_calling_convention="c")
foreign libc {
@(link_name="malloc") _unix_malloc :: proc(size: int) -> rawptr ---
@(link_name="calloc") _unix_calloc :: proc(num, size: int) -> rawptr ---
@(link_name="free") _unix_free :: proc(ptr: rawptr) ---
@(link_name="realloc") _unix_realloc :: proc(ptr: rawptr, size: int) -> rawptr ---
}
_heap_alloc :: proc "contextless" (size: int, zero_memory := true) -> rawptr {
if size <= 0 {
return nil
}
if zero_memory {
return _unix_calloc(1, size)
} else {
return _unix_malloc(size)
}
}
_heap_resize :: proc "contextless" (ptr: rawptr, new_size: int) -> rawptr {
// NOTE: _unix_realloc doesn't guarantee new memory will be zeroed on
// POSIX platforms. Ensure your caller takes this into account.
return _unix_realloc(ptr, new_size)
}
_heap_free :: proc "contextless" (ptr: rawptr) {
_unix_free(ptr)
}
+39
View File
@@ -0,0 +1,39 @@
package runtime
foreign import kernel32 "system:Kernel32.lib"
@(private="file")
@(default_calling_convention="system")
foreign kernel32 {
// NOTE(bill): The types are not using the standard names (e.g. DWORD and LPVOID) to just minimizing the dependency
// default_allocator
GetProcessHeap :: proc() -> rawptr ---
HeapAlloc :: proc(hHeap: rawptr, dwFlags: u32, dwBytes: uint) -> rawptr ---
HeapReAlloc :: proc(hHeap: rawptr, dwFlags: u32, lpMem: rawptr, dwBytes: uint) -> rawptr ---
HeapFree :: proc(hHeap: rawptr, dwFlags: u32, lpMem: rawptr) -> b32 ---
}
_heap_alloc :: proc "contextless" (size: int, zero_memory := true) -> rawptr {
HEAP_ZERO_MEMORY :: 0x00000008
return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY if zero_memory else 0, uint(size))
}
_heap_resize :: proc "contextless" (ptr: rawptr, new_size: int) -> rawptr {
if new_size == 0 {
_heap_free(ptr)
return nil
}
if ptr == nil {
return _heap_alloc(new_size)
}
HEAP_ZERO_MEMORY :: 0x00000008
return HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, ptr, uint(new_size))
}
_heap_free :: proc "contextless" (ptr: rawptr) {
if ptr == nil {
return
}
HeapFree(GetProcessHeap(), 0, ptr)
}
@@ -1,9 +1,10 @@
//+vet !cast
package runtime
import "core:intrinsics"
import "base:intrinsics"
@(private="file")
IS_WASM :: ODIN_ARCH == "wasm32" || ODIN_ARCH == "wasm64"
IS_WASM :: ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32
@(private)
RUNTIME_LINKAGE :: "strong" when (
@@ -11,7 +12,10 @@ RUNTIME_LINKAGE :: "strong" when (
ODIN_BUILD_MODE == .Dynamic ||
!ODIN_NO_CRT) &&
!IS_WASM) else "internal"
RUNTIME_REQUIRE :: true
RUNTIME_REQUIRE :: false // !ODIN_TILDE
@(private)
__float16 :: f16 when __ODIN_LLVM_F16_SUPPORTED else u16
@(private)
@@ -19,60 +23,14 @@ byte_slice :: #force_inline proc "contextless" (data: rawptr, len: int) -> []byt
return ([^]byte)(data)[:max(len, 0)]
}
bswap_16 :: proc "contextless" (x: u16) -> u16 {
return x>>8 | x<<8
}
bswap_32 :: proc "contextless" (x: u32) -> u32 {
return x>>24 | (x>>8)&0xff00 | (x<<8)&0xff0000 | x<<24
}
bswap_64 :: proc "contextless" (x: u64) -> u64 {
z := x
z = (z & 0x00000000ffffffff) << 32 | (z & 0xffffffff00000000) >> 32
z = (z & 0x0000ffff0000ffff) << 16 | (z & 0xffff0000ffff0000) >> 16
z = (z & 0x00ff00ff00ff00ff) << 8 | (z & 0xff00ff00ff00ff00) >> 8
return z
}
bswap_128 :: proc "contextless" (x: u128) -> u128 {
z := transmute([4]u32)x
z[0] = bswap_32(z[3])
z[1] = bswap_32(z[2])
z[2] = bswap_32(z[1])
z[3] = bswap_32(z[0])
return transmute(u128)z
}
bswap_f16 :: proc "contextless" (f: f16) -> f16 {
x := transmute(u16)f
z := bswap_16(x)
return transmute(f16)z
}
bswap_f32 :: proc "contextless" (f: f32) -> f32 {
x := transmute(u32)f
z := bswap_32(x)
return transmute(f32)z
}
bswap_f64 :: proc "contextless" (f: f64) -> f64 {
x := transmute(u64)f
z := bswap_64(x)
return transmute(f64)z
}
is_power_of_two_int :: #force_inline proc(x: int) -> bool {
is_power_of_two_int :: #force_inline proc "contextless" (x: int) -> bool {
if x <= 0 {
return false
}
return (x & (x-1)) == 0
}
align_forward_int :: #force_inline proc(ptr, align: int) -> int {
align_forward_int :: #force_inline proc "odin" (ptr, align: int) -> int {
assert(is_power_of_two_int(align))
p := ptr
@@ -83,14 +41,32 @@ align_forward_int :: #force_inline proc(ptr, align: int) -> int {
return p
}
is_power_of_two_uintptr :: #force_inline proc(x: uintptr) -> bool {
is_power_of_two_uint :: #force_inline proc "contextless" (x: uint) -> bool {
if x <= 0 {
return false
}
return (x & (x-1)) == 0
}
align_forward_uintptr :: #force_inline proc(ptr, align: uintptr) -> uintptr {
align_forward_uint :: #force_inline proc "odin" (ptr, align: uint) -> uint {
assert(is_power_of_two_uint(align))
p := ptr
modulo := p & (align-1)
if modulo != 0 {
p += align - modulo
}
return p
}
is_power_of_two_uintptr :: #force_inline proc "contextless" (x: uintptr) -> bool {
if x <= 0 {
return false
}
return (x & (x-1)) == 0
}
align_forward_uintptr :: #force_inline proc "odin" (ptr, align: uintptr) -> uintptr {
assert(is_power_of_two_uintptr(align))
p := ptr
@@ -101,11 +77,23 @@ align_forward_uintptr :: #force_inline proc(ptr, align: uintptr) -> uintptr {
return p
}
is_power_of_two :: proc {
is_power_of_two_int,
is_power_of_two_uint,
is_power_of_two_uintptr,
}
align_forward :: proc {
align_forward_int,
align_forward_uint,
align_forward_uintptr,
}
mem_zero :: proc "contextless" (data: rawptr, len: int) -> rawptr {
if data == nil {
return nil
}
if len < 0 {
if len <= 0 {
return data
}
intrinsics.mem_zero(data, len)
@@ -113,22 +101,18 @@ mem_zero :: proc "contextless" (data: rawptr, len: int) -> rawptr {
}
mem_copy :: proc "contextless" (dst, src: rawptr, len: int) -> rawptr {
if src == nil {
return dst
if src != nil && dst != src && len > 0 {
// NOTE(bill): This _must_ be implemented like C's memmove
intrinsics.mem_copy(dst, src, len)
}
// NOTE(bill): This _must_ be implemented like C's memmove
intrinsics.mem_copy(dst, src, len)
return dst
}
mem_copy_non_overlapping :: proc "contextless" (dst, src: rawptr, len: int) -> rawptr {
if src == nil {
return dst
if src != nil && dst != src && len > 0 {
// NOTE(bill): This _must_ be implemented like C's memcpy
intrinsics.mem_copy_non_overlapping(dst, src, len)
}
// NOTE(bill): This _must_ be implemented like C's memcpy
intrinsics.mem_copy_non_overlapping(dst, src, len)
return dst
}
@@ -144,28 +128,45 @@ mem_alloc_bytes :: #force_inline proc(size: int, alignment: int = DEFAULT_ALIGNM
return allocator.procedure(allocator.data, .Alloc, size, alignment, nil, 0, loc)
}
mem_alloc :: #force_inline proc(size: int, alignment: int = DEFAULT_ALIGNMENT, allocator := context.allocator, loc := #caller_location) -> (rawptr, Allocator_Error) {
if size == 0 {
mem_alloc :: #force_inline proc(size: int, alignment: int = DEFAULT_ALIGNMENT, allocator := context.allocator, loc := #caller_location) -> ([]byte, Allocator_Error) {
if size == 0 || allocator.procedure == nil {
return nil, nil
}
if allocator.procedure == nil {
return allocator.procedure(allocator.data, .Alloc, size, alignment, nil, 0, loc)
}
mem_alloc_non_zeroed :: #force_inline proc(size: int, alignment: int = DEFAULT_ALIGNMENT, allocator := context.allocator, loc := #caller_location) -> ([]byte, Allocator_Error) {
if size == 0 || allocator.procedure == nil {
return nil, nil
}
data, err := allocator.procedure(allocator.data, .Alloc, size, alignment, nil, 0, loc)
return raw_data(data), err
return allocator.procedure(allocator.data, .Alloc_Non_Zeroed, size, alignment, nil, 0, loc)
}
mem_free :: #force_inline proc(ptr: rawptr, allocator := context.allocator, loc := #caller_location) -> Allocator_Error {
if ptr == nil {
return .None
}
if allocator.procedure == nil {
return .None
if ptr == nil || allocator.procedure == nil {
return nil
}
_, err := allocator.procedure(allocator.data, .Free, 0, 0, ptr, 0, loc)
return err
}
mem_free_with_size :: #force_inline proc(ptr: rawptr, byte_count: int, allocator := context.allocator, loc := #caller_location) -> Allocator_Error {
if ptr == nil || allocator.procedure == nil {
return nil
}
_, err := allocator.procedure(allocator.data, .Free, 0, 0, ptr, byte_count, loc)
return err
}
mem_free_bytes :: #force_inline proc(bytes: []byte, allocator := context.allocator, loc := #caller_location) -> Allocator_Error {
if bytes == nil || allocator.procedure == nil {
return nil
}
_, err := allocator.procedure(allocator.data, .Free, 0, 0, raw_data(bytes), len(bytes), loc)
return err
}
mem_free_all :: #force_inline proc(allocator := context.allocator, loc := #caller_location) -> (err: Allocator_Error) {
if allocator.procedure != nil {
_, err = allocator.procedure(allocator.data, .Free_All, 0, 0, nil, 0, loc)
@@ -173,33 +174,74 @@ mem_free_all :: #force_inline proc(allocator := context.allocator, loc := #calle
return
}
mem_resize :: #force_inline proc(ptr: rawptr, old_size, new_size: int, alignment: int = DEFAULT_ALIGNMENT, allocator := context.allocator, loc := #caller_location) -> (new_ptr: rawptr, err: Allocator_Error) {
new_data: []byte
switch {
case allocator.procedure == nil:
return
case new_size == 0:
new_data, err = allocator.procedure(allocator.data, .Free, 0, 0, ptr, 0, loc)
case ptr == nil:
new_data, err = allocator.procedure(allocator.data, .Alloc, new_size, alignment, nil, 0, loc)
case:
new_data, err = allocator.procedure(allocator.data, .Resize, new_size, alignment, ptr, old_size, loc)
_mem_resize :: #force_inline proc(ptr: rawptr, old_size, new_size: int, alignment: int = DEFAULT_ALIGNMENT, allocator := context.allocator, should_zero: bool, loc := #caller_location) -> (data: []byte, err: Allocator_Error) {
if allocator.procedure == nil {
return nil, nil
}
if new_size == 0 {
if ptr != nil {
_, err = allocator.procedure(allocator.data, .Free, 0, 0, ptr, old_size, loc)
return
}
return
} else if ptr == nil {
if should_zero {
return allocator.procedure(allocator.data, .Alloc, new_size, alignment, nil, 0, loc)
} else {
return allocator.procedure(allocator.data, .Alloc_Non_Zeroed, new_size, alignment, nil, 0, loc)
}
} else if old_size == new_size && uintptr(ptr) % uintptr(alignment) == 0 {
data = ([^]byte)(ptr)[:old_size]
return
}
if should_zero {
data, err = allocator.procedure(allocator.data, .Resize, new_size, alignment, ptr, old_size, loc)
} else {
data, err = allocator.procedure(allocator.data, .Resize_Non_Zeroed, new_size, alignment, ptr, old_size, loc)
}
if err == .Mode_Not_Implemented {
if should_zero {
data, err = allocator.procedure(allocator.data, .Alloc, new_size, alignment, nil, 0, loc)
} else {
data, err = allocator.procedure(allocator.data, .Alloc_Non_Zeroed, new_size, alignment, nil, 0, loc)
}
if err != nil {
return
}
copy(data, ([^]byte)(ptr)[:old_size])
_, err = allocator.procedure(allocator.data, .Free, 0, 0, ptr, old_size, loc)
}
new_ptr = raw_data(new_data)
return
}
mem_resize :: proc(ptr: rawptr, old_size, new_size: int, alignment: int = DEFAULT_ALIGNMENT, allocator := context.allocator, loc := #caller_location) -> (data: []byte, err: Allocator_Error) {
return _mem_resize(ptr, old_size, new_size, alignment, allocator, true, loc)
}
non_zero_mem_resize :: proc(ptr: rawptr, old_size, new_size: int, alignment: int = DEFAULT_ALIGNMENT, allocator := context.allocator, loc := #caller_location) -> (data: []byte, err: Allocator_Error) {
return _mem_resize(ptr, old_size, new_size, alignment, allocator, false, loc)
}
memory_equal :: proc "contextless" (x, y: rawptr, n: int) -> bool {
switch {
case n == 0: return true
case x == y: return true
}
a, b := ([^]byte)(x), ([^]byte)(y)
length := uint(n)
for i := uint(0); i < length; i += 1 {
if a[i] != b[i] {
return false
}
}
return true
/*
when size_of(uint) == 8 {
if word_length := length >> 3; word_length != 0 {
for i in 0..<word_length {
for _ in 0..<word_length {
if intrinsics.unaligned_load((^u64)(a)) != intrinsics.unaligned_load((^u64)(b)) {
return false
}
@@ -230,7 +272,7 @@ memory_equal :: proc "contextless" (x, y: rawptr, n: int) -> bool {
return true
} else {
if word_length := length >> 2; word_length != 0 {
for i in 0..<word_length {
for _ in 0..<word_length {
if intrinsics.unaligned_load((^u32)(a)) != intrinsics.unaligned_load((^u32)(b)) {
return false
}
@@ -251,6 +293,7 @@ memory_equal :: proc "contextless" (x, y: rawptr, n: int) -> bool {
return true
}
*/
}
memory_compare :: proc "contextless" (a, b: rawptr, n: int) -> int #no_bounds_check {
@@ -343,7 +386,12 @@ string_eq :: proc "contextless" (lhs, rhs: string) -> bool {
string_cmp :: proc "contextless" (a, b: string) -> int {
x := transmute(Raw_String)a
y := transmute(Raw_String)b
return memory_compare(x.data, y.data, min(x.len, y.len))
ret := memory_compare(x.data, y.data, min(x.len, y.len))
if ret == 0 && x.len != y.len {
return -1 if x.len < y.len else +1
}
return ret
}
string_ne :: #force_inline proc "contextless" (a, b: string) -> bool { return !string_eq(a, b) }
@@ -371,6 +419,48 @@ cstring_to_string :: proc "contextless" (s: cstring) -> string {
}
cstring_eq :: proc "contextless" (lhs, rhs: cstring) -> bool {
x := ([^]byte)(lhs)
y := ([^]byte)(rhs)
if x == y {
return true
}
if (x == nil) ~ (y == nil) {
return false
}
xn := cstring_len(lhs)
yn := cstring_len(rhs)
if xn != yn {
return false
}
return #force_inline memory_equal(x, y, xn)
}
cstring_cmp :: proc "contextless" (lhs, rhs: cstring) -> int {
x := ([^]byte)(lhs)
y := ([^]byte)(rhs)
if x == y {
return 0
}
if (x == nil) ~ (y == nil) {
return -1 if x == nil else +1
}
xn := cstring_len(lhs)
yn := cstring_len(rhs)
ret := memory_compare(x, y, min(xn, yn))
if ret == 0 && xn != yn {
return -1 if xn < yn else +1
}
return ret
}
cstring_ne :: #force_inline proc "contextless" (a, b: cstring) -> bool { return !cstring_eq(a, b) }
cstring_lt :: #force_inline proc "contextless" (a, b: cstring) -> bool { return cstring_cmp(a, b) < 0 }
cstring_gt :: #force_inline proc "contextless" (a, b: cstring) -> bool { return cstring_cmp(a, b) > 0 }
cstring_le :: #force_inline proc "contextless" (a, b: cstring) -> bool { return cstring_cmp(a, b) <= 0 }
cstring_ge :: #force_inline proc "contextless" (a, b: cstring) -> bool { return cstring_cmp(a, b) >= 0 }
complex32_eq :: #force_inline proc "contextless" (a, b: complex32) -> bool { return real(a) == real(b) && imag(a) == imag(b) }
complex32_ne :: #force_inline proc "contextless" (a, b: complex32) -> bool { return real(a) != real(b) || imag(a) != imag(b) }
@@ -394,7 +484,7 @@ quaternion256_ne :: #force_inline proc "contextless" (a, b: quaternion256) -> bo
string_decode_rune :: #force_inline proc "contextless" (s: string) -> (rune, int) {
// NOTE(bill): Duplicated here to remove dependency on package unicode/utf8
@static accept_sizes := [256]u8{
@(static, rodata) accept_sizes := [256]u8{
0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x00-0x0f
0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x10-0x1f
0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x20-0x2f
@@ -415,7 +505,7 @@ string_decode_rune :: #force_inline proc "contextless" (s: string) -> (rune, int
}
Accept_Range :: struct {lo, hi: u8}
@static accept_ranges := [5]Accept_Range{
@(static, rodata) accept_ranges := [5]Accept_Range{
{0x80, 0xbf},
{0xa0, 0xbf},
{0x80, 0x9f},
@@ -470,46 +560,73 @@ string_decode_rune :: #force_inline proc "contextless" (s: string) -> (rune, int
return rune(s0&MASK4)<<18 | rune(b1&MASKX)<<12 | rune(b2&MASKX)<<6 | rune(b3&MASKX), 4
}
abs_f16 :: #force_inline proc "contextless" (x: f16) -> f16 {
return -x if x < 0 else x
}
abs_f32 :: #force_inline proc "contextless" (x: f32) -> f32 {
return -x if x < 0 else x
}
abs_f64 :: #force_inline proc "contextless" (x: f64) -> f64 {
return -x if x < 0 else x
}
string_decode_last_rune :: proc "contextless" (s: string) -> (rune, int) {
RUNE_ERROR :: '\ufffd'
RUNE_SELF :: 0x80
UTF_MAX :: 4
min_f16 :: #force_inline proc "contextless" (a, b: f16) -> f16 {
return a if a < b else b
}
min_f32 :: #force_inline proc "contextless" (a, b: f32) -> f32 {
return a if a < b else b
}
min_f64 :: #force_inline proc "contextless" (a, b: f64) -> f64 {
return a if a < b else b
}
max_f16 :: #force_inline proc "contextless" (a, b: f16) -> f16 {
return a if a > b else b
}
max_f32 :: #force_inline proc "contextless" (a, b: f32) -> f32 {
return a if a > b else b
}
max_f64 :: #force_inline proc "contextless" (a, b: f64) -> f64 {
return a if a > b else b
r: rune
size: int
start, end, limit: int
end = len(s)
if end == 0 {
return RUNE_ERROR, 0
}
start = end-1
r = rune(s[start])
if r < RUNE_SELF {
return r, 1
}
limit = max(end - UTF_MAX, 0)
for start-=1; start >= limit; start-=1 {
if (s[start] & 0xc0) != RUNE_SELF {
break
}
}
start = max(start, 0)
r, size = string_decode_rune(s[start:end])
if start+size != end {
return RUNE_ERROR, 1
}
return r, size
}
abs_complex32 :: #force_inline proc "contextless" (x: complex32) -> f16 {
r, i := real(x), imag(x)
return f16(intrinsics.sqrt(f32(r*r + i*i)))
p, q := abs(real(x)), abs(imag(x))
if p < q {
p, q = q, p
}
if p == 0 {
return 0
}
q = q / p
return p * f16(intrinsics.sqrt(f32(1 + q*q)))
}
abs_complex64 :: #force_inline proc "contextless" (x: complex64) -> f32 {
r, i := real(x), imag(x)
return intrinsics.sqrt(r*r + i*i)
p, q := abs(real(x)), abs(imag(x))
if p < q {
p, q = q, p
}
if p == 0 {
return 0
}
q = q / p
return p * intrinsics.sqrt(1 + q*q)
}
abs_complex128 :: #force_inline proc "contextless" (x: complex128) -> f64 {
r, i := real(x), imag(x)
return intrinsics.sqrt(r*r + i*i)
p, q := abs(real(x)), abs(imag(x))
if p < q {
p, q = q, p
}
if p == 0 {
return 0
}
q = q / p
return p * intrinsics.sqrt(1 + q*q)
}
abs_quaternion64 :: #force_inline proc "contextless" (x: quaternion64) -> f16 {
r, i, j, k := real(x), imag(x), jmag(x), kmag(x)
@@ -526,21 +643,24 @@ abs_quaternion256 :: #force_inline proc "contextless" (x: quaternion256) -> f64
quo_complex32 :: proc "contextless" (n, m: complex32) -> complex32 {
e, f: f16
nr, ni := f32(real(n)), f32(imag(n))
mr, mi := f32(real(m)), f32(imag(m))
if abs(real(m)) >= abs(imag(m)) {
ratio := imag(m) / real(m)
denom := real(m) + ratio*imag(m)
e = (real(n) + imag(n)*ratio) / denom
f = (imag(n) - real(n)*ratio) / denom
e, f: f32
if abs(mr) >= abs(mi) {
ratio := mi / mr
denom := mr + ratio*mi
e = (nr + ni*ratio) / denom
f = (ni - nr*ratio) / denom
} else {
ratio := real(m) / imag(m)
denom := imag(m) + ratio*real(m)
e = (real(n)*ratio + imag(n)) / denom
f = (imag(n)*ratio - real(n)) / denom
ratio := mr / mi
denom := mi + ratio*mr
e = (nr*ratio + ni) / denom
f = (ni*ratio - nr) / denom
}
return complex(e, f)
return complex(f16(e), f16(f))
}
@@ -581,15 +701,15 @@ quo_complex128 :: proc "contextless" (n, m: complex128) -> complex128 {
}
mul_quaternion64 :: proc "contextless" (q, r: quaternion64) -> quaternion64 {
q0, q1, q2, q3 := real(q), imag(q), jmag(q), kmag(q)
r0, r1, r2, r3 := real(r), imag(r), jmag(r), kmag(r)
q0, q1, q2, q3 := f32(real(q)), f32(imag(q)), f32(jmag(q)), f32(kmag(q))
r0, r1, r2, r3 := f32(real(r)), f32(imag(r)), f32(jmag(r)), f32(kmag(r))
t0 := r0*q0 - r1*q1 - r2*q2 - r3*q3
t1 := r0*q1 + r1*q0 - r2*q3 + r3*q2
t2 := r0*q2 + r1*q3 + r2*q0 - r3*q1
t3 := r0*q3 - r1*q2 + r2*q1 + r3*q0
return quaternion(t0, t1, t2, t3)
return quaternion(w=f16(t0), x=f16(t1), y=f16(t2), z=f16(t3))
}
mul_quaternion128 :: proc "contextless" (q, r: quaternion128) -> quaternion128 {
@@ -601,7 +721,7 @@ mul_quaternion128 :: proc "contextless" (q, r: quaternion128) -> quaternion128 {
t2 := r0*q2 + r1*q3 + r2*q0 - r3*q1
t3 := r0*q3 - r1*q2 + r2*q1 + r3*q0
return quaternion(t0, t1, t2, t3)
return quaternion(w=t0, x=t1, y=t2, z=t3)
}
mul_quaternion256 :: proc "contextless" (q, r: quaternion256) -> quaternion256 {
@@ -613,12 +733,12 @@ mul_quaternion256 :: proc "contextless" (q, r: quaternion256) -> quaternion256 {
t2 := r0*q2 + r1*q3 + r2*q0 - r3*q1
t3 := r0*q3 - r1*q2 + r2*q1 + r3*q0
return quaternion(t0, t1, t2, t3)
return quaternion(w=t0, x=t1, y=t2, z=t3)
}
quo_quaternion64 :: proc "contextless" (q, r: quaternion64) -> quaternion64 {
q0, q1, q2, q3 := real(q), imag(q), jmag(q), kmag(q)
r0, r1, r2, r3 := real(r), imag(r), jmag(r), kmag(r)
q0, q1, q2, q3 := f32(real(q)), f32(imag(q)), f32(jmag(q)), f32(kmag(q))
r0, r1, r2, r3 := f32(real(r)), f32(imag(r)), f32(jmag(r)), f32(kmag(r))
invmag2 := 1.0 / (r0*r0 + r1*r1 + r2*r2 + r3*r3)
@@ -627,7 +747,7 @@ quo_quaternion64 :: proc "contextless" (q, r: quaternion64) -> quaternion64 {
t2 := (r0*q2 - r1*q3 - r2*q0 + r3*q1) * invmag2
t3 := (r0*q3 + r1*q2 + r2*q1 - r3*q0) * invmag2
return quaternion(t0, t1, t2, t3)
return quaternion(w=f16(t0), x=f16(t1), y=f16(t2), z=f16(t3))
}
quo_quaternion128 :: proc "contextless" (q, r: quaternion128) -> quaternion128 {
@@ -641,7 +761,7 @@ quo_quaternion128 :: proc "contextless" (q, r: quaternion128) -> quaternion128 {
t2 := (r0*q2 - r1*q3 - r2*q0 + r3*q1) * invmag2
t3 := (r0*q3 + r1*q2 + r2*q1 - r3*q0) * invmag2
return quaternion(t0, t1, t2, t3)
return quaternion(w=t0, x=t1, y=t2, z=t3)
}
quo_quaternion256 :: proc "contextless" (q, r: quaternion256) -> quaternion256 {
@@ -655,11 +775,11 @@ quo_quaternion256 :: proc "contextless" (q, r: quaternion256) -> quaternion256 {
t2 := (r0*q2 - r1*q3 - r2*q0 + r3*q1) * invmag2
t3 := (r0*q3 + r1*q2 + r2*q1 - r3*q0) * invmag2
return quaternion(t0, t1, t2, t3)
return quaternion(w=t0, x=t1, y=t2, z=t3)
}
@(link_name="__truncsfhf2", linkage=RUNTIME_LINKAGE, require=RUNTIME_REQUIRE)
truncsfhf2 :: proc "c" (value: f32) -> u16 {
truncsfhf2 :: proc "c" (value: f32) -> __float16 {
v: struct #raw_union { i: u32, f: f32 }
i, s, e, m: i32
@@ -673,7 +793,7 @@ truncsfhf2 :: proc "c" (value: f32) -> u16 {
if e <= 0 {
if e < -10 {
return u16(s)
return transmute(__float16)u16(s)
}
m = (m | 0x00800000) >> u32(1 - e)
@@ -681,14 +801,14 @@ truncsfhf2 :: proc "c" (value: f32) -> u16 {
m += 0x00002000
}
return u16(s | (m >> 13))
return transmute(__float16)u16(s | (m >> 13))
} else if e == 0xff - (127 - 15) {
if m == 0 {
return u16(s | 0x7c00) /* NOTE(bill): infinity */
return transmute(__float16)u16(s | 0x7c00) /* NOTE(bill): infinity */
} else {
/* NOTE(bill): NAN */
m >>= 13
return u16(s | 0x7c00 | m | i32(m == 0))
return transmute(__float16)u16(s | 0x7c00 | m | i32(m == 0))
}
} else {
if m & 0x00001000 != 0 {
@@ -708,23 +828,28 @@ truncsfhf2 :: proc "c" (value: f32) -> u16 {
intrinsics.volatile_store(&f, g)
}
return u16(s | 0x7c00)
return transmute(__float16)u16(s | 0x7c00)
}
return u16(s | (e << 10) | (m >> 13))
return transmute(__float16)u16(s | (e << 10) | (m >> 13))
}
}
@(link_name="__aeabi_d2h", linkage=RUNTIME_LINKAGE, require=RUNTIME_REQUIRE)
aeabi_d2h :: proc "c" (value: f64) -> __float16 {
return truncsfhf2(f32(value))
}
@(link_name="__truncdfhf2", linkage=RUNTIME_LINKAGE, require=RUNTIME_REQUIRE)
truncdfhf2 :: proc "c" (value: f64) -> u16 {
truncdfhf2 :: proc "c" (value: f64) -> __float16 {
return truncsfhf2(f32(value))
}
@(link_name="__gnu_h2f_ieee", linkage=RUNTIME_LINKAGE, require=RUNTIME_REQUIRE)
gnu_h2f_ieee :: proc "c" (value: u16) -> f32 {
gnu_h2f_ieee :: proc "c" (value_: __float16) -> f32 {
fp32 :: struct #raw_union { u: u32, f: f32 }
value := transmute(u16)value_
v: fp32
magic, inf_or_nan: fp32
magic.u = u32((254 - 15) << 23)
@@ -741,12 +866,12 @@ gnu_h2f_ieee :: proc "c" (value: u16) -> f32 {
@(link_name="__gnu_f2h_ieee", linkage=RUNTIME_LINKAGE, require=RUNTIME_REQUIRE)
gnu_f2h_ieee :: proc "c" (value: f32) -> u16 {
gnu_f2h_ieee :: proc "c" (value: f32) -> __float16 {
return truncsfhf2(value)
}
@(link_name="__extendhfsf2", linkage=RUNTIME_LINKAGE, require=RUNTIME_REQUIRE)
extendhfsf2 :: proc "c" (value: u16) -> f32 {
extendhfsf2 :: proc "c" (value: __float16) -> f32 {
return gnu_h2f_ieee(value)
}
@@ -875,9 +1000,11 @@ udivmodti4 :: proc "c" (a, b: u128, rem: ^u128) -> u128 {
return udivmod128(a, b, rem)
}
@(link_name="__udivti3", linkage=RUNTIME_LINKAGE, require=RUNTIME_REQUIRE)
udivti3 :: proc "c" (a, b: u128) -> u128 {
return udivmodti4(a, b, nil)
when !IS_WASM {
@(link_name="__udivti3", linkage=RUNTIME_LINKAGE, require=RUNTIME_REQUIRE)
udivti3 :: proc "c" (a, b: u128) -> u128 {
return udivmodti4(a, b, nil)
}
}
@@ -889,26 +1016,26 @@ modti3 :: proc "c" (a, b: i128) -> i128 {
bn := (b ~ s_b) - s_b
r: u128 = ---
_ = udivmod128(transmute(u128)an, transmute(u128)bn, &r)
return (transmute(i128)r ~ s_a) - s_a
_ = udivmod128(u128(an), u128(bn), &r)
return (i128(r) ~ s_a) - s_a
}
@(link_name="__divmodti4", linkage=RUNTIME_LINKAGE, require=RUNTIME_REQUIRE)
divmodti4 :: proc "c" (a, b: i128, rem: ^i128) -> i128 {
u := udivmod128(transmute(u128)a, transmute(u128)b, cast(^u128)rem)
return transmute(i128)u
u := udivmod128(u128(a), u128(b), (^u128)(rem))
return i128(u)
}
@(link_name="__divti3", linkage=RUNTIME_LINKAGE, require=RUNTIME_REQUIRE)
divti3 :: proc "c" (a, b: i128) -> i128 {
u := udivmodti4(transmute(u128)a, transmute(u128)b, nil)
return transmute(i128)u
u := udivmodti4(u128(a), u128(b), nil)
return i128(u)
}
@(link_name="__fixdfti", linkage=RUNTIME_LINKAGE, require=RUNTIME_REQUIRE)
fixdfti :: proc(a: u64) -> i128 {
fixdfti :: proc "c" (a: u64) -> i128 {
significandBits :: 52
typeWidth :: (size_of(u64)*8)
exponentBits :: (typeWidth - significandBits - 1)
@@ -947,3 +1074,23 @@ fixdfti :: proc(a: u64) -> i128 {
}
}
__write_bits :: proc "contextless" (dst, src: [^]byte, offset: uintptr, size: uintptr) {
for i in 0..<size {
j := offset+i
the_bit := byte((src[i>>3]) & (1<<(i&7)) != 0)
dst[j>>3] &~= 1<<(j&7)
dst[j>>3] |= the_bit<<(j&7)
}
}
__read_bits :: proc "contextless" (dst, src: [^]byte, offset: uintptr, size: uintptr) {
for j in 0..<size {
i := offset+j
the_bit := byte((src[i>>3]) & (1<<(i&7)) != 0)
dst[j>>3] &~= 1<<(j&7)
dst[j>>3] |= the_bit<<(j&7)
}
}
+7
View File
@@ -0,0 +1,7 @@
package runtime
_OS_Errno :: distinct int
stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
return _stderr_write(data)
}
+26
View File
@@ -0,0 +1,26 @@
//+build freebsd, openbsd, netbsd
//+private
package runtime
foreign import libc "system:c"
@(default_calling_convention="c")
foreign libc {
@(link_name="write")
_unix_write :: proc(fd: i32, buf: rawptr, size: int) -> int ---
when ODIN_OS == .NetBSD {
@(link_name="__errno") __error :: proc() -> ^i32 ---
} else {
__error :: proc() -> ^i32 ---
}
}
_stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
ret := _unix_write(2, raw_data(data), len(data))
if ret < len(data) {
err := __error()
return int(ret), _OS_Errno(err^ if err != nil else 0)
}
return int(ret), 0
}
+15
View File
@@ -0,0 +1,15 @@
//+build darwin
//+private
package runtime
import "base:intrinsics"
_stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
WRITE :: 0x2000004
STDERR :: 2
ret := intrinsics.syscall(WRITE, STDERR, uintptr(raw_data(data)), uintptr(len(data)))
if ret < 0 {
return 0, _OS_Errno(-ret)
}
return int(ret), 0
}
@@ -1,7 +1,8 @@
//+build freestanding
//+private
package runtime
// TODO(bill): reimplement `os.write`
_os_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
_stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
return 0, -1
}
+21
View File
@@ -0,0 +1,21 @@
//+build haiku
//+private
package runtime
foreign import libc "system:c"
foreign libc {
@(link_name="write")
_unix_write :: proc(fd: i32, buf: rawptr, size: int) -> int ---
_errnop :: proc() -> ^i32 ---
}
_stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
ret := _unix_write(2, raw_data(data), len(data))
if ret < len(data) {
err := _errnop()
return int(ret), _OS_Errno(err^ if err != nil else 0)
}
return int(ret), 0
}
+13
View File
@@ -0,0 +1,13 @@
//+build js
//+private
package runtime
foreign import "odin_env"
_stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
foreign odin_env {
write :: proc "contextless" (fd: u32, p: []byte) ---
}
write(1, data)
return len(data), 0
}
+24
View File
@@ -0,0 +1,24 @@
//+private
package runtime
import "base:intrinsics"
_stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
when ODIN_ARCH == .amd64 {
SYS_write :: uintptr(1)
} else when ODIN_ARCH == .arm64 {
SYS_write :: uintptr(64)
} else when ODIN_ARCH == .i386 {
SYS_write :: uintptr(4)
} else when ODIN_ARCH == .arm32 {
SYS_write :: uintptr(4)
}
stderr :: 2
ret := int(intrinsics.syscall(SYS_write, uintptr(stderr), uintptr(raw_data(data)), uintptr(len(data))))
if ret < 0 && ret > -4096 {
return 0, _OS_Errno(-ret)
}
return ret, 0
}
+43
View File
@@ -0,0 +1,43 @@
//+build orca
//+private
package runtime
import "base:intrinsics"
// Constants allowing to specify the level of logging verbosity.
log_level :: enum u32 {
// Only errors are logged.
ERROR = 0,
// Only warnings and errors are logged.
WARNING = 1,
// All messages are logged.
INFO = 2,
COUNT = 3,
}
@(default_calling_convention="c", link_prefix="oc_")
foreign {
abort_ext :: proc(file: cstring, function: cstring, line: i32, fmt: cstring, #c_vararg args: ..any) -> ! ---
assert_fail :: proc(file: cstring, function: cstring, line: i32, src: cstring, fmt: cstring, #c_vararg args: ..any) -> ! ---
log_ext :: proc(level: log_level, function: cstring, file: cstring, line: i32, fmt: cstring, #c_vararg args: ..any) ---
}
// NOTE: This is all pretty gross, don't look.
// WASM is single threaded so this should be fine.
orca_stderr_buffer: [4096]byte
orca_stderr_buffer_idx: int
_stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
for b in data {
orca_stderr_buffer[orca_stderr_buffer_idx] = b
orca_stderr_buffer_idx += 1
if b == '\n' || orca_stderr_buffer_idx == len(orca_stderr_buffer)-1 {
log_ext(.ERROR, "", "", 0, cstring(raw_data(orca_stderr_buffer[:orca_stderr_buffer_idx])))
orca_stderr_buffer_idx = 0
}
}
return len(data), 0
}
+55
View File
@@ -0,0 +1,55 @@
//+build wasi
//+private
package runtime
foreign import wasi "wasi_snapshot_preview1"
@(default_calling_convention="contextless")
foreign wasi {
fd_write :: proc(
fd: i32,
iovs: [][]byte,
n: ^uint,
) -> u16 ---
@(private="file")
args_sizes_get :: proc(
num_of_args: ^uint,
size_of_args: ^uint,
) -> u16 ---
@(private="file")
args_get :: proc(
argv: [^]cstring,
argv_buf: [^]byte,
) -> u16 ---
}
_stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
n: uint
err := fd_write(1, {data}, &n)
return int(n), _OS_Errno(err)
}
_wasi_setup_args :: proc() {
num_of_args, size_of_args: uint
if errno := args_sizes_get(&num_of_args, &size_of_args); errno != 0 {
return
}
err: Allocator_Error
if args__, err = make([]cstring, num_of_args); err != nil {
return
}
args_buf: []byte
if args_buf, err = make([]byte, size_of_args); err != nil {
delete(args__)
return
}
if errno := args_get(raw_data(args__), raw_data(args_buf)); errno != 0 {
delete(args__)
delete(args_buf)
}
}
+51
View File
@@ -0,0 +1,51 @@
//+build windows
//+private
package runtime
foreign import kernel32 "system:Kernel32.lib"
@(private="file")
@(default_calling_convention="system")
foreign kernel32 {
// NOTE(bill): The types are not using the standard names (e.g. DWORD and LPVOID) to just minimizing the dependency
// stderr_write
GetStdHandle :: proc(which: u32) -> rawptr ---
SetHandleInformation :: proc(hObject: rawptr, dwMask: u32, dwFlags: u32) -> b32 ---
WriteFile :: proc(hFile: rawptr, lpBuffer: rawptr, nNumberOfBytesToWrite: u32, lpNumberOfBytesWritten: ^u32, lpOverlapped: rawptr) -> b32 ---
GetLastError :: proc() -> u32 ---
}
_stderr_write :: proc "contextless" (data: []byte) -> (n: int, err: _OS_Errno) #no_bounds_check {
if len(data) == 0 {
return 0, 0
}
STD_ERROR_HANDLE :: ~u32(0) -12 + 1
HANDLE_FLAG_INHERIT :: 0x00000001
MAX_RW :: 1<<30
h := GetStdHandle(STD_ERROR_HANDLE)
when size_of(uintptr) == 8 {
SetHandleInformation(h, HANDLE_FLAG_INHERIT, 0)
}
single_write_length: u32
total_write: i64
length := i64(len(data))
for total_write < length {
remaining := length - total_write
to_write := u32(min(i32(remaining), MAX_RW))
e := WriteFile(h, &data[total_write], to_write, &single_write_length, nil)
if single_write_length <= 0 || !e {
err = _OS_Errno(GetLastError())
n = int(total_write)
return
}
total_write += i64(single_write_length)
}
n = int(total_write)
return
}
@@ -2,6 +2,90 @@ package runtime
_INTEGER_DIGITS :: "0123456789abcdefghijklmnopqrstuvwxyz"
@(private="file")
_INTEGER_DIGITS_VAR := _INTEGER_DIGITS
when !ODIN_NO_RTTI {
print_any_single :: #force_no_inline proc "contextless" (arg: any) {
x := arg
if x.data == nil {
print_string("nil")
return
}
if loc, ok := x.(Source_Code_Location); ok {
print_caller_location(loc)
return
}
x.id = typeid_base(x.id)
switch v in x {
case typeid: print_typeid(v)
case ^Type_Info: print_type(v)
case string: print_string(v)
case cstring: print_string(string(v))
case []byte: print_string(string(v))
case rune: print_rune(v)
case u8: print_u64(u64(v))
case u16: print_u64(u64(v))
case u16le: print_u64(u64(v))
case u16be: print_u64(u64(v))
case u32: print_u64(u64(v))
case u32le: print_u64(u64(v))
case u32be: print_u64(u64(v))
case u64: print_u64(u64(v))
case u64le: print_u64(u64(v))
case u64be: print_u64(u64(v))
case i8: print_i64(i64(v))
case i16: print_i64(i64(v))
case i16le: print_i64(i64(v))
case i16be: print_i64(i64(v))
case i32: print_i64(i64(v))
case i32le: print_i64(i64(v))
case i32be: print_i64(i64(v))
case i64: print_i64(i64(v))
case i64le: print_i64(i64(v))
case i64be: print_i64(i64(v))
case int: print_int(v)
case uint: print_uint(v)
case uintptr: print_uintptr(v)
case rawptr: print_uintptr(uintptr(v))
case bool: print_string("true" if v else "false")
case b8: print_string("true" if v else "false")
case b16: print_string("true" if v else "false")
case b32: print_string("true" if v else "false")
case b64: print_string("true" if v else "false")
case:
ti := type_info_of(x.id)
#partial switch v in ti.variant {
case Type_Info_Pointer, Type_Info_Multi_Pointer:
print_uintptr((^uintptr)(x.data)^)
return
}
print_string("<invalid-value>")
}
}
println_any :: #force_no_inline proc "contextless" (args: ..any) {
context = default_context()
loop: for arg, i in args {
assert(arg.id != nil)
if i != 0 {
print_string(" ")
}
print_any_single(arg)
}
print_string("\n")
}
}
encode_rune :: proc "contextless" (c: rune) -> ([4]u8, int) {
r := c
@@ -38,14 +122,14 @@ encode_rune :: proc "contextless" (c: rune) -> ([4]u8, int) {
return buf, 4
}
print_string :: proc "contextless" (str: string) -> (int, _OS_Errno) {
return os_write(transmute([]byte)str)
print_string :: #force_no_inline proc "contextless" (str: string) -> (n: int) {
n, _ = stderr_write(transmute([]byte)str)
return
}
print_strings :: proc "contextless" (args: ..string) -> (n: int, err: _OS_Errno) {
print_strings :: #force_no_inline proc "contextless" (args: ..string) -> (n: int) {
for str in args {
m: int
m, err = os_write(transmute([]byte)str)
m, err := stderr_write(transmute([]byte)str)
n += m
if err != 0 {
break
@@ -54,11 +138,12 @@ print_strings :: proc "contextless" (args: ..string) -> (n: int, err: _OS_Errno)
return
}
print_byte :: proc "contextless" (b: byte) -> (int, _OS_Errno) {
return os_write([]byte{b})
print_byte :: #force_no_inline proc "contextless" (b: byte) -> (n: int) {
n, _ = stderr_write([]byte{b})
return
}
print_encoded_rune :: proc "contextless" (r: rune) {
print_encoded_rune :: #force_no_inline proc "contextless" (r: rune) {
print_byte('\'')
switch r {
@@ -74,11 +159,10 @@ print_encoded_rune :: proc "contextless" (r: rune) {
if r <= 0 {
print_string("\\x00")
} else if r < 32 {
digits := _INTEGER_DIGITS
n0, n1 := u8(r) >> 4, u8(r) & 0xf
print_string("\\x")
print_byte(digits[n0])
print_byte(digits[n1])
print_byte(_INTEGER_DIGITS_VAR[n0])
print_byte(_INTEGER_DIGITS_VAR[n1])
} else {
print_rune(r)
}
@@ -86,7 +170,7 @@ print_encoded_rune :: proc "contextless" (r: rune) {
print_byte('\'')
}
print_rune :: proc "contextless" (r: rune) -> (int, _OS_Errno) #no_bounds_check {
print_rune :: #force_no_inline proc "contextless" (r: rune) -> int #no_bounds_check {
RUNE_SELF :: 0x80
if r < RUNE_SELF {
@@ -94,29 +178,27 @@ print_rune :: proc "contextless" (r: rune) -> (int, _OS_Errno) #no_bounds_check
}
b, n := encode_rune(r)
return os_write(b[:n])
m, _ := stderr_write(b[:n])
return m
}
print_u64 :: proc "contextless" (x: u64) #no_bounds_check {
digits := _INTEGER_DIGITS
print_u64 :: #force_no_inline proc "contextless" (x: u64) #no_bounds_check {
a: [129]byte
i := len(a)
b := u64(10)
u := x
for u >= b {
i -= 1; a[i] = digits[u % b]
i -= 1; a[i] = _INTEGER_DIGITS_VAR[u % b]
u /= b
}
i -= 1; a[i] = digits[u % b]
i -= 1; a[i] = _INTEGER_DIGITS_VAR[u % b]
os_write(a[i:])
stderr_write(a[i:])
}
print_i64 :: proc "contextless" (x: i64) #no_bounds_check {
digits := _INTEGER_DIGITS
print_i64 :: #force_no_inline proc "contextless" (x: i64) #no_bounds_check {
b :: i64(10)
u := x
@@ -126,48 +208,62 @@ print_i64 :: proc "contextless" (x: i64) #no_bounds_check {
a: [129]byte
i := len(a)
for u >= b {
i -= 1; a[i] = digits[u % b]
i -= 1; a[i] = _INTEGER_DIGITS_VAR[u % b]
u /= b
}
i -= 1; a[i] = digits[u % b]
i -= 1; a[i] = _INTEGER_DIGITS_VAR[u % b]
if neg {
i -= 1; a[i] = '-'
}
os_write(a[i:])
stderr_write(a[i:])
}
print_uint :: proc "contextless" (x: uint) { print_u64(u64(x)) }
print_uintptr :: proc "contextless" (x: uintptr) { print_u64(u64(x)) }
print_int :: proc "contextless" (x: int) { print_i64(i64(x)) }
print_caller_location :: proc "contextless" (using loc: Source_Code_Location) {
print_string(file_path)
print_caller_location :: #force_no_inline proc "contextless" (loc: Source_Code_Location) {
print_string(loc.file_path)
when ODIN_ERROR_POS_STYLE == .Default {
print_byte('(')
print_u64(u64(line))
print_byte(':')
print_u64(u64(column))
print_u64(u64(loc.line))
if loc.column != 0 {
print_byte(':')
print_u64(u64(loc.column))
}
print_byte(')')
} else when ODIN_ERROR_POS_STYLE == .Unix {
print_byte(':')
print_u64(u64(line))
print_byte(':')
print_u64(u64(column))
print_u64(u64(loc.line))
if loc.column != 0 {
print_byte(':')
print_u64(u64(loc.column))
}
print_byte(':')
} else {
#panic("unhandled ODIN_ERROR_POS_STYLE")
}
}
print_typeid :: proc "contextless" (id: typeid) {
if id == nil {
print_string("nil")
print_typeid :: #force_no_inline proc "contextless" (id: typeid) {
when ODIN_NO_RTTI {
if id == nil {
print_string("nil")
} else {
print_string("<unknown type>")
}
} else {
ti := type_info_of(id)
print_type(ti)
if id == nil {
print_string("nil")
} else {
ti := type_info_of(id)
print_type(ti)
}
}
}
print_type :: proc "contextless" (ti: ^Type_Info) {
@(optimization_mode="size")
print_type :: #force_no_inline proc "contextless" (ti: ^Type_Info) {
if ti == nil {
print_string("nil")
return
@@ -220,12 +316,15 @@ print_type :: proc "contextless" (ti: ^Type_Info) {
case Type_Info_Multi_Pointer:
print_string("[^]")
print_type(info.elem)
case Type_Info_Soa_Pointer:
print_string("#soa ^")
print_type(info.elem)
case Type_Info_Procedure:
print_string("proc")
if info.params == nil {
print_string("()")
} else {
t := info.params.variant.(Type_Info_Tuple)
t := info.params.variant.(Type_Info_Parameters)
print_byte('(')
for t, i in t.types {
if i > 0 { print_string(", ") }
@@ -237,7 +336,7 @@ print_type :: proc "contextless" (ti: ^Type_Info) {
print_string(" -> ")
print_type(info.results)
}
case Type_Info_Tuple:
case Type_Info_Parameters:
count := len(info.names)
if count != 1 { print_byte('(') }
for name, i in info.names {
@@ -260,6 +359,9 @@ print_type :: proc "contextless" (ti: ^Type_Info) {
print_type(info.elem)
case Type_Info_Enumerated_Array:
if info.is_sparse {
print_string("#sparse")
}
print_byte('[')
print_type(info.index)
print_byte(']')
@@ -302,9 +404,9 @@ print_type :: proc "contextless" (ti: ^Type_Info) {
if info.is_packed { print_string("#packed ") }
if info.is_raw_union { print_string("#raw_union ") }
if info.custom_align {
print_string("#align ")
print_string("#align(")
print_u64(u64(ti.align))
print_byte(' ')
print_string(") ")
}
print_byte('{')
for name, i in info.names {
@@ -318,8 +420,9 @@ print_type :: proc "contextless" (ti: ^Type_Info) {
case Type_Info_Union:
print_string("union ")
if info.custom_align {
print_string("#align ")
print_string("#align(")
print_u64(u64(ti.align))
print_string(") ")
}
if info.no_nil {
print_string("#no_nil ")
@@ -362,6 +465,20 @@ print_type :: proc "contextless" (ti: ^Type_Info) {
}
print_byte(']')
case Type_Info_Bit_Field:
print_string("bit_field ")
print_type(info.backing_type)
print_string(" {")
for name, i in info.names {
if i > 0 { print_string(", ") }
print_string(name)
print_string(": ")
print_type(info.types[i])
print_string(" | ")
print_u64(u64(info.bit_sizes[i]))
}
print_byte('}')
case Type_Info_Simd_Vector:
print_string("#simd[")
@@ -375,11 +492,11 @@ print_type :: proc "contextless" (ti: ^Type_Info) {
print_string(") ")
print_type(info.pointer)
case Type_Info_Relative_Slice:
case Type_Info_Relative_Multi_Pointer:
print_string("#relative(")
print_type(info.base_integer)
print_string(") ")
print_type(info.slice)
print_type(info.pointer)
case Type_Info_Matrix:
print_string("matrix[")
+101
View File
@@ -0,0 +1,101 @@
package runtime
when ODIN_NO_CRT && ODIN_OS == .Windows {
foreign import lib "system:NtDll.lib"
@(private="file")
@(default_calling_convention="system")
foreign lib {
RtlMoveMemory :: proc(dst, s: rawptr, length: int) ---
RtlFillMemory :: proc(dst: rawptr, length: int, fill: i32) ---
}
@(link_name="memset", linkage="strong", require)
memset :: proc "c" (ptr: rawptr, val: i32, len: int) -> rawptr {
RtlFillMemory(ptr, len, val)
return ptr
}
@(link_name="memmove", linkage="strong", require)
memmove :: proc "c" (dst, src: rawptr, len: int) -> rawptr {
RtlMoveMemory(dst, src, len)
return dst
}
@(link_name="memcpy", linkage="strong", require)
memcpy :: proc "c" (dst, src: rawptr, len: int) -> rawptr {
RtlMoveMemory(dst, src, len)
return dst
}
} else when ODIN_NO_CRT || (ODIN_OS != .Orca && (ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32)) {
// NOTE: on wasm, calls to these procs are generated (by LLVM) with type `i32` instead of `int`.
//
// NOTE: `#any_int` is also needed, because calls that we generate (and package code)
// will be using `int` and need to be converted.
int_t :: i32 when ODIN_ARCH == .wasm64p32 else int
@(link_name="memset", linkage="strong", require)
memset :: proc "c" (ptr: rawptr, val: i32, #any_int len: int_t) -> rawptr {
if ptr != nil && len != 0 {
b := byte(val)
p := ([^]byte)(ptr)
for i := int_t(0); i < len; i += 1 {
p[i] = b
}
}
return ptr
}
@(link_name="bzero", linkage="strong", require)
bzero :: proc "c" (ptr: rawptr, #any_int len: int_t) -> rawptr {
if ptr != nil && len != 0 {
p := ([^]byte)(ptr)
for i := int_t(0); i < len; i += 1 {
p[i] = 0
}
}
return ptr
}
@(link_name="memmove", linkage="strong", require)
memmove :: proc "c" (dst, src: rawptr, #any_int len: int_t) -> rawptr {
d, s := ([^]byte)(dst), ([^]byte)(src)
if d == s || len == 0 {
return dst
}
if d > s && uintptr(d)-uintptr(s) < uintptr(len) {
for i := len-1; i >= 0; i -= 1 {
d[i] = s[i]
}
return dst
}
if s > d && uintptr(s)-uintptr(d) < uintptr(len) {
for i := int_t(0); i < len; i += 1 {
d[i] = s[i]
}
return dst
}
return memcpy(dst, src, len)
}
@(link_name="memcpy", linkage="strong", require)
memcpy :: proc "c" (dst, src: rawptr, #any_int len: int_t) -> rawptr {
d, s := ([^]byte)(dst), ([^]byte)(src)
if d != s {
for i := int_t(0); i < len; i += 1 {
d[i] = s[i]
}
}
return d
}
} else {
memset :: proc "c" (ptr: rawptr, val: i32, len: int) -> rawptr {
if ptr != nil && len != 0 {
b := byte(val)
p := ([^]byte)(ptr)
for i := 0; i < len; i += 1 {
p[i] = b
}
}
return ptr
}
}
+21
View File
@@ -0,0 +1,21 @@
//+private
package runtime
foreign import "system:Foundation.framework"
import "base:intrinsics"
objc_id :: ^intrinsics.objc_object
objc_Class :: ^intrinsics.objc_class
objc_SEL :: ^intrinsics.objc_selector
foreign Foundation {
objc_lookUpClass :: proc "c" (name: cstring) -> objc_Class ---
sel_registerName :: proc "c" (name: cstring) -> objc_SEL ---
objc_allocateClassPair :: proc "c" (superclass: objc_Class, name: cstring, extraBytes: uint) -> objc_Class ---
objc_msgSend :: proc "c" (self: objc_id, op: objc_SEL, #c_vararg args: ..any) ---
objc_msgSend_fpret :: proc "c" (self: objc_id, op: objc_SEL, #c_vararg args: ..any) -> f64 ---
objc_msgSend_fp2ret :: proc "c" (self: objc_id, op: objc_SEL, #c_vararg args: ..any) -> complex128 ---
objc_msgSend_stret :: proc "c" (self: objc_id, op: objc_SEL, #c_vararg args: ..any) ---
}
@@ -1,4 +1,4 @@
//+build js wasm32
//+build js
package runtime
init_default_context_for_js: Context
@@ -1,4 +1,4 @@
//+build wasm32
//+build wasm32, wasm64p32
package runtime
@(private="file")
@@ -7,19 +7,25 @@ ti_int :: struct #raw_union {
all: i128,
}
@(private="file")
ti_uint :: struct #raw_union {
using s: struct { lo, hi: u64 },
all: u128,
}
@(link_name="__ashlti3", linkage="strong")
__ashlti3 :: proc "c" (a: i128, b_: u32) -> i128 {
__ashlti3 :: proc "contextless" (la, ha: u64, b_: u32) -> i128 {
bits_in_dword :: size_of(u32)*8
b := u32(b_)
input, result: ti_int
input.all = a
input.lo, input.hi = la, ha
if b & bits_in_dword != 0 {
result.lo = 0
result.hi = input.lo << (b-bits_in_dword)
} else {
if b == 0 {
return a
return input.all
}
result.lo = input.lo<<b
result.hi = (input.hi<<b) | (input.lo>>(bits_in_dword-b))
@@ -29,12 +35,20 @@ __ashlti3 :: proc "c" (a: i128, b_: u32) -> i128 {
@(link_name="__multi3", linkage="strong")
__multi3 :: proc "c" (a, b: i128) -> i128 {
__multi3 :: proc "contextless" (la, ha, lb, hb: u64) -> i128 {
x, y, r: ti_int
x.all = a
y.all = b
x.lo, x.hi = la, ha
y.lo, y.hi = lb, hb
r.all = i128(x.lo * y.lo) // TODO this is incorrect
r.hi += x.hi*y.lo + x.lo*y.hi
return r.all
}
}
@(link_name="__udivti3", linkage="strong")
udivti3 :: proc "c" (la, ha, lb, hb: u64) -> u128 {
a, b: ti_uint
a.lo, a.hi = la, ha
b.lo, b.hi = lb, hb
return udivmodti4(a.all, b.all, nil)
}
+79
View File
@@ -0,0 +1,79 @@
bits 64
global __chkstk
global _tls_index
global _fltused
section .data
_tls_index: dd 0
_fltused: dd 0x9875
section .text
; NOTE(flysand): The function call to __chkstk is called
; by the compiler, when we're allocating arrays larger than
; a page size. The reason is because the OS doesn't map the
; whole stack into memory all at once, but does so page-by-page.
; When the next page is touched, the CPU generates a page fault,
; which *the OS* is handling by allocating the next page in the
; stack until we reach the limit of stack size.
;
; This page is called the guard page, touching it will extend
; the size of the stack and overwrite the stack limit in the TEB.
;
; If we allocate a large enough array and start writing from the
; bottom of it, it's possible that we may start touching
; non-contiguous pages which are unmapped. OS only maps the stack
; page into the memory if the page above it was also mapped.
;
; Therefore the compilers insert this routine, the sole purpose
; of which is to step through the stack starting from the RSP
; down to the new RSP after allocation, and touch every page
; of the new allocation so that the stack is fully mapped for
; the new allocation
;
; I've gotten this code by disassembling the output of MSVC long
; time ago. I don't remember if I've cleaned it up, but it definately
; stinks.
;
; Additional notes:
; RAX (passed as parameter) holds the allocation's size
; GS:[0x10] references the current stack limit
; (i.e. bottom of the stack (i.e. lowest address accessible))
;
; Also this stuff is windows-only kind of thing, because linux people
; didn't think stack that grows is cool enough for them, but the kernel
; totally supports this kind of stack.
__chkstk:
;; Allocate 16 bytes to store values of r10 and r11
sub rsp, 0x10
mov [rsp], r10
mov [rsp+0x8], r11
;; Set r10 to point to the stack as of the moment of the function call
lea r10, [rsp+0x18]
;; Subtract r10 til the bottom of the stack allocation, if we overflow
;; reset r10 to 0, we'll crash with segfault anyway
xor r11, r11
sub r10, rax
cmovb r10, r11
;; Load r11 with the bottom of the stack (lowest allocated address)
mov r11, gs:[0x10] ; NOTE(flysand): gs:[0x10] is stack limit
;; If the bottom of the allocation is above the bottom of the stack,
;; we don't need to probe
cmp r10, r11
jnb .end
;; Align the bottom of the allocation down to page size
and r10w, 0xf000
.loop:
;; Move the pointer to the next guard page, and touch it by loading 0
;; into that page
lea r11, [r11-0x1000]
mov byte [r11], 0x0
;; Did we reach the bottom of the allocation?
cmp r10, r11
jnz .loop
.end:
;; Restore previous r10 and r11 and return
mov r10, [rsp]
mov r11, [rsp+0x8]
add rsp, 0x10
ret
@@ -1,11 +1,12 @@
//+private
//+no-instrumentation
package runtime
foreign import kernel32 "system:Kernel32.lib"
@(private)
foreign kernel32 {
RaiseException :: proc "stdcall" (dwExceptionCode, dwExceptionFlags, nNumberOfArguments: u32, lpArguments: ^uint) -> ! ---
RaiseException :: proc "system" (dwExceptionCode, dwExceptionFlags, nNumberOfArguments: u32, lpArguments: ^uint) -> ! ---
}
windows_trap_array_bounds :: proc "contextless" () -> ! {
@@ -1,4 +1,5 @@
//+private
//+no-instrumentation
package runtime
@require foreign import "system:int64.lib"
@@ -12,7 +13,7 @@ windows_trap_array_bounds :: proc "contextless" () -> ! {
EXCEPTION_ARRAY_BOUNDS_EXCEEDED :: 0xC000008C
foreign kernel32 {
RaiseException :: proc "stdcall" (dwExceptionCode, dwExceptionFlags, nNumberOfArguments: DWORD, lpArguments: ^ULONG_PTR) -> ! ---
RaiseException :: proc "system" (dwExceptionCode, dwExceptionFlags, nNumberOfArguments: DWORD, lpArguments: ^ULONG_PTR) -> ! ---
}
RaiseException(EXCEPTION_ARRAY_BOUNDS_EXCEEDED, 0, 0, nil)
+127
View File
@@ -0,0 +1,127 @@
package runtime
import "base:intrinsics"
@(require_results)
random_generator_read_bytes :: proc(rg: Random_Generator, p: []byte) -> bool {
if rg.procedure != nil {
rg.procedure(rg.data, .Read, p)
return true
}
return false
}
@(require_results)
random_generator_read_ptr :: proc(rg: Random_Generator, p: rawptr, len: uint) -> bool {
if rg.procedure != nil {
rg.procedure(rg.data, .Read, ([^]byte)(p)[:len])
return true
}
return false
}
@(require_results)
random_generator_query_info :: proc(rg: Random_Generator) -> (info: Random_Generator_Query_Info) {
if rg.procedure != nil {
rg.procedure(rg.data, .Query_Info, ([^]byte)(&info)[:size_of(info)])
}
return
}
random_generator_reset_bytes :: proc(rg: Random_Generator, p: []byte) {
if rg.procedure != nil {
rg.procedure(rg.data, .Reset, p)
}
}
random_generator_reset_u64 :: proc(rg: Random_Generator, p: u64) {
if rg.procedure != nil {
p := p
rg.procedure(rg.data, .Reset, ([^]byte)(&p)[:size_of(p)])
}
}
Default_Random_State :: struct {
state: u64,
inc: u64,
}
default_random_generator_proc :: proc(data: rawptr, mode: Random_Generator_Mode, p: []byte) {
@(require_results)
read_u64 :: proc "contextless" (r: ^Default_Random_State) -> u64 {
old_state := r.state
r.state = old_state * 6364136223846793005 + (r.inc|1)
xor_shifted := (((old_state >> 59) + 5) ~ old_state) * 12605985483714917081
rot := (old_state >> 59)
return (xor_shifted >> rot) | (xor_shifted << ((-rot) & 63))
}
@(thread_local)
global_rand_seed: Default_Random_State
init :: proc "contextless" (r: ^Default_Random_State, seed: u64) {
seed := seed
if seed == 0 {
seed = u64(intrinsics.read_cycle_counter())
}
r.state = 0
r.inc = (seed << 1) | 1
_ = read_u64(r)
r.state += seed
_ = read_u64(r)
}
r: ^Default_Random_State = ---
if data == nil {
r = &global_rand_seed
} else {
r = cast(^Default_Random_State)data
}
switch mode {
case .Read:
if r.state == 0 && r.inc == 0 {
init(r, 0)
}
switch len(p) {
case size_of(u64):
// Fast path for a 64-bit destination.
intrinsics.unaligned_store((^u64)(raw_data(p)), read_u64(r))
case:
// All other cases.
pos := i8(0)
val := u64(0)
for &v in p {
if pos == 0 {
val = read_u64(r)
pos = 7
}
v = byte(val)
val >>= 8
pos -= 1
}
}
case .Reset:
seed: u64
mem_copy_non_overlapping(&seed, raw_data(p), min(size_of(seed), len(p)))
init(r, seed)
case .Query_Info:
if len(p) != size_of(Random_Generator_Query_Info) {
return
}
info := (^Random_Generator_Query_Info)(raw_data(p))
info^ += {.Uniform, .Resettable}
}
}
default_random_generator :: proc "contextless" (state: ^Default_Random_State = nil) -> Random_Generator {
return {
procedure = default_random_generator_proc,
data = state,
}
}
@@ -1,6 +1,6 @@
package runtime
import "core:intrinsics"
import "base:intrinsics"
udivmod128 :: proc "c" (a, b: u128, rem: ^u128) -> u128 {
_ctz :: intrinsics.count_trailing_zeros
@@ -58,7 +58,7 @@ udivmod128 :: proc "c" (a, b: u128, rem: ^u128) -> u128 {
return u128(n[high] >> _ctz(d[high]))
}
sr = transmute(u32)(i32(_clz(d[high])) - i32(_clz(n[high])))
sr = u32(i32(_clz(d[high])) - i32(_clz(n[high])))
if sr > U64_BITS - 2 {
if rem != nil {
rem^ = a
@@ -107,7 +107,7 @@ udivmod128 :: proc "c" (a, b: u128, rem: ^u128) -> u128 {
r[low] = n[high] >> (sr - U64_BITS)
}
} else {
sr = transmute(u32)(i32(_clz(d[high])) - i32(_clz(n[high])))
sr = u32(i32(_clz(d[high])) - i32(_clz(n[high])))
if sr > U64_BITS - 1 {
if rem != nil {
@@ -143,7 +143,7 @@ udivmod128 :: proc "c" (a, b: u128, rem: ^u128) -> u128 {
r_all = transmute(u128)r
s := i128(b - r_all - 1) >> (U128_BITS - 1)
carry = u32(s & 1)
r_all -= b & transmute(u128)s
r_all -= b & u128(s)
r = transmute([2]u64)r_all
}
+870
View File
@@ -0,0 +1,870 @@
//+build wasm32, wasm64p32
package runtime
import "base:intrinsics"
/*
Port of emmalloc, modified for use in Odin.
Invariants:
- Per-allocation header overhead is 8 bytes, smallest allocated payload
amount is 8 bytes, and a multiple of 4 bytes.
- Acquired memory blocks are subdivided into disjoint regions that lie
next to each other.
- A region is either in used or free.
Used regions may be adjacent, and a used and unused region
may be adjacent, but not two unused ones - they would be
merged.
- Memory allocation takes constant time, unless the alloc needs to wasm_memory_grow()
or memory is very close to being exhausted.
- Free and used regions are managed inside "root regions", which are slabs
of memory acquired via wasm_memory_grow().
- Memory retrieved using wasm_memory_grow() can not be given back to the OS.
Therefore, frees are internal to the allocator.
Copyright (c) 2010-2014 Emscripten authors, see AUTHORS file.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
WASM_Allocator :: struct #no_copy {
// The minimum alignment of allocations.
alignment: uint,
// A region that contains as payload a single forward linked list of pointers to
// root regions of each disjoint region blocks.
list_of_all_regions: ^Root_Region,
// For each of the buckets, maintain a linked list head node. The head node for each
// free region is a sentinel node that does not actually represent any free space, but
// the sentinel is used to avoid awkward testing against (if node == freeRegionHeadNode)
// when adding and removing elements from the linked list, i.e. we are guaranteed that
// the sentinel node is always fixed and there, and the actual free region list elements
// start at free_region_buckets[i].next each.
free_region_buckets: [NUM_FREE_BUCKETS]Region,
// A bitmask that tracks the population status for each of the 64 distinct memory regions:
// a zero at bit position i means that the free list bucket i is empty. This bitmask is
// used to avoid redundant scanning of the 64 different free region buckets: instead by
// looking at the bitmask we can find in constant time an index to a free region bucket
// that contains free memory of desired size.
free_region_buckets_used: BUCKET_BITMASK_T,
// Because wasm memory can only be allocated in pages of 64k at a time, we keep any
// spilled/unused bytes that are left from the allocated pages here, first using this
// when bytes are needed.
spill: []byte,
// Mutex for thread safety, only used if the target feature "atomics" is enabled.
mu: Mutex_State,
}
// Not required to be called, called on first allocation otherwise.
wasm_allocator_init :: proc(a: ^WASM_Allocator, alignment: uint = 8) {
assert(is_power_of_two(alignment), "alignment must be a power of two")
assert(alignment > 4, "alignment must be more than 4")
a.alignment = alignment
for i in 0..<NUM_FREE_BUCKETS {
a.free_region_buckets[i].next = &a.free_region_buckets[i]
a.free_region_buckets[i].prev = a.free_region_buckets[i].next
}
if !claim_more_memory(a, 3*size_of(Region)) {
panic("wasm_allocator: initial memory could not be allocated")
}
}
global_default_wasm_allocator_data: WASM_Allocator
default_wasm_allocator :: proc() -> Allocator {
return wasm_allocator(&global_default_wasm_allocator_data)
}
wasm_allocator :: proc(a: ^WASM_Allocator) -> Allocator {
return {
data = a,
procedure = wasm_allocator_proc,
}
}
wasm_allocator_proc :: proc(a: rawptr, mode: Allocator_Mode, size, alignment: int, old_memory: rawptr, old_size: int, loc := #caller_location) -> ([]byte, Allocator_Error) {
a := (^WASM_Allocator)(a)
if a == nil {
a = &global_default_wasm_allocator_data
}
if a.alignment == 0 {
wasm_allocator_init(a)
}
switch mode {
case .Alloc:
ptr := aligned_alloc(a, uint(alignment), uint(size), loc)
if ptr == nil {
return nil, .Out_Of_Memory
}
intrinsics.mem_zero(ptr, size)
return ([^]byte)(ptr)[:size], nil
case .Alloc_Non_Zeroed:
ptr := aligned_alloc(a, uint(alignment), uint(size), loc)
if ptr == nil {
return nil, .Out_Of_Memory
}
return ([^]byte)(ptr)[:size], nil
case .Resize:
ptr := aligned_realloc(a, old_memory, uint(alignment), uint(size), loc)
if ptr == nil {
return nil, .Out_Of_Memory
}
bytes := ([^]byte)(ptr)[:size]
if size > old_size {
new_region := raw_data(bytes[old_size:])
intrinsics.mem_zero(new_region, size - old_size)
}
return bytes, nil
case .Resize_Non_Zeroed:
ptr := aligned_realloc(a, old_memory, uint(alignment), uint(size), loc)
if ptr == nil {
return nil, .Out_Of_Memory
}
return ([^]byte)(ptr)[:size], nil
case .Free:
free(a, old_memory, loc)
return nil, nil
case .Free_All, .Query_Info:
return nil, .Mode_Not_Implemented
case .Query_Features:
set := (^Allocator_Mode_Set)(old_memory)
if set != nil {
set^ = {.Alloc, .Alloc_Non_Zeroed, .Free, .Resize, .Resize_Non_Zeroed, .Query_Features }
}
return nil, nil
}
unreachable()
}
// Returns the allocated size of the allocator (both free and used).
// If `nil` is given, the global allocator is used.
wasm_allocator_size :: proc(a: ^WASM_Allocator = nil) -> (size: uint) {
a := a
if a == nil {
a = &global_default_wasm_allocator_data
}
lock(a)
defer unlock(a)
root := a.list_of_all_regions
for root != nil {
size += uint(uintptr(root.end_ptr) - uintptr(root))
root = root.next
}
size += len(a.spill)
return
}
// Returns the amount of free memory on the allocator.
// If `nil` is given, the global allocator is used.
wasm_allocator_free_space :: proc(a: ^WASM_Allocator = nil) -> (free: uint) {
a := a
if a == nil {
a = &global_default_wasm_allocator_data
}
lock(a)
defer unlock(a)
bucket_index: u64 = 0
bucket_mask := a.free_region_buckets_used
for bucket_mask != 0 {
index_add := intrinsics.count_trailing_zeros(bucket_mask)
bucket_index += index_add
bucket_mask >>= index_add
for free_region := a.free_region_buckets[bucket_index].next; free_region != &a.free_region_buckets[bucket_index]; free_region = free_region.next {
free += free_region.size - REGION_HEADER_SIZE
}
bucket_index += 1
bucket_mask >>= 1
}
free += len(a.spill)
return
}
@(private="file")
NUM_FREE_BUCKETS :: 64
@(private="file")
BUCKET_BITMASK_T :: u64
// Dynamic memory is subdivided into regions, in the format
// <size:u32> ..... <size:u32> | <size:u32> ..... <size:u32> | <size:u32> ..... <size:u32> | .....
// That is, at the bottom and top end of each memory region, the size of that region is stored. That allows traversing the
// memory regions backwards and forwards. Because each allocation must be at least a multiple of 4 bytes, the lowest two bits of
// each size field is unused. Free regions are distinguished by used regions by having the FREE_REGION_FLAG bit present
// in the size field. I.e. for free regions, the size field is odd, and for used regions, the size field reads even.
@(private="file")
FREE_REGION_FLAG :: 0x1
// Attempts to alloc more than this many bytes would cause an overflow when calculating the size of a region,
// therefore allocations larger than this are short-circuited immediately on entry.
@(private="file")
MAX_ALLOC_SIZE :: 0xFFFFFFC7
// A free region has the following structure:
// <size:uint> <prevptr> <nextptr> ... <size:uint>
@(private="file")
Region :: struct {
size: uint,
prev, next: ^Region,
_at_the_end_of_this_struct_size: uint,
}
// Each memory block starts with a Root_Region at the beginning.
// The Root_Region specifies the size of the region block, and forms a linked
// list of all Root_Regions in the program, starting with `list_of_all_regions`
// below.
@(private="file")
Root_Region :: struct {
size: u32,
next: ^Root_Region,
end_ptr: ^byte,
}
@(private="file")
Mutex_State :: enum u32 {
Unlocked = 0,
Locked = 1,
Waiting = 2,
}
@(private="file")
lock :: proc(a: ^WASM_Allocator) {
when intrinsics.has_target_feature("atomics") {
@(cold)
lock_slow :: proc(a: ^WASM_Allocator, curr_state: Mutex_State) {
new_state := curr_state // Make a copy of it
spin_lock: for spin in 0..<i32(100) {
state, ok := intrinsics.atomic_compare_exchange_weak_explicit(&a.mu, .Unlocked, new_state, .Acquire, .Consume)
if ok {
return
}
if state == .Waiting {
break spin_lock
}
for i := min(spin+1, 32); i > 0; i -= 1 {
intrinsics.cpu_relax()
}
}
// Set just in case 100 iterations did not do it
new_state = .Waiting
for {
if intrinsics.atomic_exchange_explicit(&a.mu, .Waiting, .Acquire) == .Unlocked {
return
}
assert(intrinsics.wasm_memory_atomic_wait32((^u32)(&a.mu), u32(new_state), -1) != 0)
intrinsics.cpu_relax()
}
}
if v := intrinsics.atomic_exchange_explicit(&a.mu, .Locked, .Acquire); v != .Unlocked {
lock_slow(a, v)
}
}
}
@(private="file")
unlock :: proc(a: ^WASM_Allocator) {
when intrinsics.has_target_feature("atomics") {
@(cold)
unlock_slow :: proc(a: ^WASM_Allocator) {
for {
s := intrinsics.wasm_memory_atomic_notify32((^u32)(&a.mu), 1)
if s >= 1 {
return
}
}
}
switch intrinsics.atomic_exchange_explicit(&a.mu, .Unlocked, .Release) {
case .Unlocked:
unreachable()
case .Locked:
// Okay
case .Waiting:
unlock_slow(a)
}
}
}
@(private="file")
assert_locked :: proc(a: ^WASM_Allocator) {
when intrinsics.has_target_feature("atomics") {
assert(intrinsics.atomic_load(&a.mu) != .Unlocked)
}
}
@(private="file")
has_alignment_uintptr :: proc(ptr: uintptr, #any_int alignment: uintptr) -> bool {
return ptr & (alignment-1) == 0
}
@(private="file")
has_alignment_uint :: proc(ptr: uint, alignment: uint) -> bool {
return ptr & (alignment-1) == 0
}
@(private="file")
has_alignment :: proc {
has_alignment_uintptr,
has_alignment_uint,
}
@(private="file")
REGION_HEADER_SIZE :: 2*size_of(uint)
@(private="file")
SMALLEST_ALLOCATION_SIZE :: 2*size_of(rawptr)
// Subdivide regions of free space into distinct circular doubly linked lists, where each linked list
// represents a range of free space blocks. The following function compute_free_list_bucket() converts
// an allocation size to the bucket index that should be looked at.
#assert(NUM_FREE_BUCKETS == 64, "Following function is tailored specifically for the NUM_FREE_BUCKETS == 64 case")
@(private="file")
compute_free_list_bucket :: proc(size: uint) -> uint {
if size < 128 { return (size >> 3) - 1 }
clz := intrinsics.count_leading_zeros(i32(size))
bucket_index: i32 = ((clz > 19) \
? 110 - (clz<<2) + ((i32)(size >> (u32)(29-clz)) ~ 4) \
: min( 71 - (clz<<1) + ((i32)(size >> (u32)(30-clz)) ~ 2), NUM_FREE_BUCKETS-1))
assert(bucket_index >= 0)
assert(bucket_index < NUM_FREE_BUCKETS)
return uint(bucket_index)
}
@(private="file")
prev_region :: proc(region: ^Region) -> ^Region {
prev_region_size := ([^]uint)(region)[-1]
prev_region_size = prev_region_size & ~uint(FREE_REGION_FLAG)
return (^Region)(uintptr(region)-uintptr(prev_region_size))
}
@(private="file")
next_region :: proc(region: ^Region) -> ^Region {
return (^Region)(uintptr(region)+uintptr(region.size))
}
@(private="file")
region_ceiling_size :: proc(region: ^Region) -> uint {
return ([^]uint)(uintptr(region)+uintptr(region.size))[-1]
}
@(private="file")
region_is_free :: proc(r: ^Region) -> bool {
return region_ceiling_size(r) & FREE_REGION_FLAG >= 1
}
@(private="file")
region_is_in_use :: proc(r: ^Region) -> bool {
return r.size == region_ceiling_size(r)
}
@(private="file")
region_payload_start_ptr :: proc(r: ^Region) -> [^]byte {
return ([^]byte)(r)[size_of(uint):]
}
@(private="file")
region_payload_end_ptr :: proc(r: ^Region) -> [^]byte {
return ([^]byte)(r)[r.size-size_of(uint):]
}
@(private="file")
create_used_region :: proc(ptr: rawptr, size: uint) {
assert(has_alignment(uintptr(ptr), size_of(uint)))
assert(has_alignment(size, size_of(uint)))
assert(size >= size_of(Region))
uptr := ([^]uint)(ptr)
uptr[0] = size
uptr[size/size_of(uint)-1] = size
}
@(private="file")
create_free_region :: proc(ptr: rawptr, size: uint) {
assert(has_alignment(uintptr(ptr), size_of(uint)))
assert(has_alignment(size, size_of(uint)))
assert(size >= size_of(Region))
free_region := (^Region)(ptr)
free_region.size = size
([^]uint)(ptr)[size/size_of(uint)-1] = size | FREE_REGION_FLAG
}
@(private="file")
prepend_to_free_list :: proc(region: ^Region, prepend_to: ^Region) {
assert(region_is_free(region))
region.next = prepend_to
region.prev = prepend_to.prev
prepend_to.prev = region
region.prev.next = region
}
@(private="file")
unlink_from_free_list :: proc(region: ^Region) {
assert(region_is_free(region))
region.prev.next = region.next
region.next.prev = region.prev
}
@(private="file")
link_to_free_list :: proc(a: ^WASM_Allocator, free_region: ^Region) {
assert(free_region.size >= size_of(Region))
bucket_index := compute_free_list_bucket(free_region.size-REGION_HEADER_SIZE)
free_list_head := &a.free_region_buckets[bucket_index]
free_region.prev = free_list_head
free_region.next = free_list_head.next
free_list_head.next = free_region
free_region.next.prev = free_region
a.free_region_buckets_used |= BUCKET_BITMASK_T(1) << bucket_index
}
@(private="file")
claim_more_memory :: proc(a: ^WASM_Allocator, num_bytes: uint) -> bool {
PAGE_SIZE :: 64 * 1024
page_alloc :: proc(page_count: int) -> []byte {
prev_page_count := intrinsics.wasm_memory_grow(0, uintptr(page_count))
if prev_page_count < 0 { return nil }
ptr := ([^]byte)(uintptr(prev_page_count) * PAGE_SIZE)
return ptr[:page_count * PAGE_SIZE]
}
alloc :: proc(a: ^WASM_Allocator, num_bytes: uint) -> (bytes: [^]byte) #no_bounds_check {
if uint(len(a.spill)) >= num_bytes {
bytes = raw_data(a.spill[:num_bytes])
a.spill = a.spill[num_bytes:]
return
}
pages := int((num_bytes / PAGE_SIZE) + 1)
allocated := page_alloc(pages)
if allocated == nil { return nil }
// If the allocated memory is a direct continuation of the spill from before,
// we can just extend the spill.
spill_end := uintptr(raw_data(a.spill)) + uintptr(len(a.spill))
if spill_end == uintptr(raw_data(allocated)) {
raw_spill := (^Raw_Slice)(&a.spill)
raw_spill.len += len(allocated)
} else {
// Otherwise, we have to "waste" the previous spill.
// Now this is probably uncommon, and will only happen if another code path
// is also requesting pages.
a.spill = allocated
}
bytes = raw_data(a.spill)
a.spill = a.spill[num_bytes:]
return
}
num_bytes := num_bytes
num_bytes = align_forward(num_bytes, a.alignment)
start_ptr := alloc(a, uint(num_bytes))
if start_ptr == nil { return false }
assert(has_alignment(uintptr(start_ptr), align_of(uint)))
end_ptr := start_ptr[num_bytes:]
end_sentinel_region := (^Region)(end_ptr[-size_of(Region):])
create_used_region(end_sentinel_region, size_of(Region))
// If we are the sole user of wasm_memory_grow(), it will feed us continuous/consecutive memory addresses - take advantage
// of that if so: instead of creating two disjoint memory regions blocks, expand the previous one to a larger size.
prev_alloc_end_address := a.list_of_all_regions != nil ? a.list_of_all_regions.end_ptr : nil
if start_ptr == prev_alloc_end_address {
prev_end_sentinel := prev_region((^Region)(start_ptr))
assert(region_is_in_use(prev_end_sentinel))
prev_region := prev_region(prev_end_sentinel)
a.list_of_all_regions.end_ptr = end_ptr
// Two scenarios, either the last region of the previous block was in use, in which case we need to create
// a new free region in the newly allocated space; or it was free, in which case we can extend that region
// to cover a larger size.
if region_is_free(prev_region) {
new_free_region_size := uint(uintptr(end_sentinel_region) - uintptr(prev_region))
unlink_from_free_list(prev_region)
create_free_region(prev_region, new_free_region_size)
link_to_free_list(a, prev_region)
return true
}
start_ptr = start_ptr[-size_of(Region):]
} else {
create_used_region(start_ptr, size_of(Region))
new_region_block := (^Root_Region)(start_ptr)
new_region_block.next = a.list_of_all_regions
new_region_block.end_ptr = end_ptr
a.list_of_all_regions = new_region_block
start_ptr = start_ptr[size_of(Region):]
}
create_free_region(start_ptr, uint(uintptr(end_sentinel_region)-uintptr(start_ptr)))
link_to_free_list(a, (^Region)(start_ptr))
return true
}
@(private="file")
validate_alloc_size :: proc(size: uint) -> uint {
#assert(size_of(uint) >= size_of(uintptr))
#assert(size_of(uint) % size_of(uintptr) == 0)
// NOTE: emmalloc aligns this forward on pointer size, but I think that is a mistake and will
// do bad on wasm64p32.
validated_size := size > SMALLEST_ALLOCATION_SIZE ? align_forward(size, size_of(uint)) : SMALLEST_ALLOCATION_SIZE
assert(validated_size >= size) // Assert we haven't wrapped.
return validated_size
}
@(private="file")
allocate_memory :: proc(a: ^WASM_Allocator, alignment: uint, size: uint, loc := #caller_location) -> rawptr {
attempt_allocate :: proc(a: ^WASM_Allocator, free_region: ^Region, alignment, size: uint) -> rawptr {
assert_locked(a)
free_region := free_region
payload_start_ptr := uintptr(region_payload_start_ptr(free_region))
payload_start_ptr_aligned := align_forward(payload_start_ptr, uintptr(alignment))
payload_end_ptr := uintptr(region_payload_end_ptr(free_region))
if payload_start_ptr_aligned + uintptr(size) > payload_end_ptr {
return nil
}
// We have enough free space, so the memory allocation will be made into this region. Remove this free region
// from the list of free regions: whatever slop remains will be later added back to the free region pool.
unlink_from_free_list(free_region)
// Before we proceed further, fix up the boundary between this and the preceding region,
// so that the boundary between the two regions happens at a right spot for the payload to be aligned.
if payload_start_ptr != payload_start_ptr_aligned {
prev := prev_region(free_region)
assert(region_is_in_use(prev))
region_boundary_bump_amount := payload_start_ptr_aligned - payload_start_ptr
new_this_region_size := free_region.size - uint(region_boundary_bump_amount)
create_used_region(prev, prev.size + uint(region_boundary_bump_amount))
free_region = (^Region)(uintptr(free_region) + region_boundary_bump_amount)
free_region.size = new_this_region_size
}
// Next, we need to decide whether this region is so large that it should be split into two regions,
// one representing the newly used memory area, and at the high end a remaining leftover free area.
// This splitting to two is done always if there is enough space for the high end to fit a region.
// Carve 'size' bytes of payload off this region. So,
// [sz prev next sz]
// becomes
// [sz payload sz] [sz prev next sz]
if size_of(Region) + REGION_HEADER_SIZE + size <= free_region.size {
new_free_region := (^Region)(uintptr(free_region) + REGION_HEADER_SIZE + uintptr(size))
create_free_region(new_free_region, free_region.size - size - REGION_HEADER_SIZE)
link_to_free_list(a, new_free_region)
create_used_region(free_region, size + REGION_HEADER_SIZE)
} else {
// There is not enough space to split the free memory region into used+free parts, so consume the whole
// region as used memory, not leaving a free memory region behind.
// Initialize the free region as used by resetting the ceiling size to the same value as the size at bottom.
([^]uint)(uintptr(free_region) + uintptr(free_region.size))[-1] = free_region.size
}
return rawptr(uintptr(free_region) + size_of(uint))
}
assert_locked(a)
assert(is_power_of_two(alignment))
assert(size <= MAX_ALLOC_SIZE, "allocation too big", loc=loc)
alignment := alignment
alignment = max(alignment, a.alignment)
size := size
size = validate_alloc_size(size)
// Attempt to allocate memory starting from smallest bucket that can contain the required amount of memory.
// Under normal alignment conditions this should always be the first or second bucket we look at, but if
// performing an allocation with complex alignment, we may need to look at multiple buckets.
bucket_index := compute_free_list_bucket(size)
bucket_mask := a.free_region_buckets_used >> bucket_index
// Loop through each bucket that has free regions in it, based on bits set in free_region_buckets_used bitmap.
for bucket_mask != 0 {
index_add := intrinsics.count_trailing_zeros(bucket_mask)
bucket_index += uint(index_add)
bucket_mask >>= index_add
assert(bucket_index <= NUM_FREE_BUCKETS-1)
assert(a.free_region_buckets_used & (BUCKET_BITMASK_T(1) << bucket_index) > 0)
free_region := a.free_region_buckets[bucket_index].next
assert(free_region != nil)
if free_region != &a.free_region_buckets[bucket_index] {
ptr := attempt_allocate(a, free_region, alignment, size)
if ptr != nil {
return ptr
}
// We were not able to allocate from the first region found in this bucket, so penalize
// the region by cycling it to the end of the doubly circular linked list. (constant time)
// This provides a randomized guarantee that when performing allocations of size k to a
// bucket of [k-something, k+something] range, we will not always attempt to satisfy the
// allocation from the same available region at the front of the list, but we try each
// region in turn.
unlink_from_free_list(free_region)
prepend_to_free_list(free_region, &a.free_region_buckets[bucket_index])
// But do not stick around to attempt to look at other regions in this bucket - move
// to search the next populated bucket index if this did not fit. This gives a practical
// "allocation in constant time" guarantee, since the next higher bucket will only have
// regions that are all of strictly larger size than the requested allocation. Only if
// there is a difficult alignment requirement we may fail to perform the allocation from
// a region in the next bucket, and if so, we keep trying higher buckets until one of them
// works.
bucket_index += 1
bucket_mask >>= 1
} else {
// This bucket was not populated after all with any regions,
// but we just had a stale bit set to mark a populated bucket.
// Reset the bit to update latest status so that we do not
// redundantly look at this bucket again.
a.free_region_buckets_used &~= BUCKET_BITMASK_T(1) << bucket_index
bucket_mask ~= 1
}
assert((bucket_index == NUM_FREE_BUCKETS && bucket_mask == 0) || (bucket_mask == a.free_region_buckets_used >> bucket_index))
}
// None of the buckets were able to accommodate an allocation. If this happens we are almost out of memory.
// The largest bucket might contain some suitable regions, but we only looked at one region in that bucket, so
// as a last resort, loop through more free regions in the bucket that represents the largest allocations available.
// But only if the bucket representing largest allocations available is not any of the first thirty buckets,
// these represent allocatable areas less than <1024 bytes - which could be a lot of scrap.
// In such case, prefer to claim more memory right away.
largest_bucket_index := NUM_FREE_BUCKETS - 1 - intrinsics.count_leading_zeros(a.free_region_buckets_used)
// free_region will be null if there is absolutely no memory left. (all buckets are 100% used)
free_region := a.free_region_buckets_used > 0 ? a.free_region_buckets[largest_bucket_index].next : nil
// The 30 first free region buckets cover memory blocks < 2048 bytes, so skip looking at those here (too small)
if a.free_region_buckets_used >> 30 > 0 {
// Look only at a constant number of regions in this bucket max, to avoid bad worst case behavior.
// If this many regions cannot find free space, we give up and prefer to claim more memory instead.
max_regions_to_try_before_giving_up :: 99
num_tries_left := max_regions_to_try_before_giving_up
for ; free_region != &a.free_region_buckets[largest_bucket_index] && num_tries_left > 0; num_tries_left -= 1 {
ptr := attempt_allocate(a, free_region, alignment, size)
if ptr != nil {
return ptr
}
free_region = free_region.next
}
}
// We were unable to find a free memory region. Must claim more memory!
num_bytes_to_claim := size+size_of(Region)*3
if alignment > a.alignment {
num_bytes_to_claim += alignment
}
success := claim_more_memory(a, num_bytes_to_claim)
if (success) {
// Try allocate again with the newly available memory.
return allocate_memory(a, alignment, size)
}
// also claim_more_memory failed, we are really really constrained :( As a last resort, go back to looking at the
// bucket we already looked at above, continuing where the above search left off - perhaps there are
// regions we overlooked the first time that might be able to satisfy the allocation.
if free_region != nil {
for free_region != &a.free_region_buckets[largest_bucket_index] {
ptr := attempt_allocate(a, free_region, alignment, size)
if ptr != nil {
return ptr
}
free_region = free_region.next
}
}
// Fully out of memory.
return nil
}
@(private="file")
aligned_alloc :: proc(a: ^WASM_Allocator, alignment, size: uint, loc := #caller_location) -> rawptr {
lock(a)
defer unlock(a)
return allocate_memory(a, alignment, size, loc)
}
@(private="file")
free :: proc(a: ^WASM_Allocator, ptr: rawptr, loc := #caller_location) {
if ptr == nil {
return
}
region_start_ptr := uintptr(ptr) - size_of(uint)
region := (^Region)(region_start_ptr)
assert(has_alignment(region_start_ptr, size_of(uint)))
lock(a)
defer unlock(a)
size := region.size
assert(region_is_in_use(region), "double free or corrupt region", loc=loc)
prev_region_size_field := ([^]uint)(region)[-1]
prev_region_size := prev_region_size_field & ~uint(FREE_REGION_FLAG)
if prev_region_size_field != prev_region_size {
prev_region := (^Region)(uintptr(region) - uintptr(prev_region_size))
unlink_from_free_list(prev_region)
region_start_ptr = uintptr(prev_region)
size += prev_region_size
}
next_reg := next_region(region)
size_at_end := (^uint)(region_payload_end_ptr(next_reg))^
if next_reg.size != size_at_end {
unlink_from_free_list(next_reg)
size += next_reg.size
}
create_free_region(rawptr(region_start_ptr), size)
link_to_free_list(a, (^Region)(region_start_ptr))
}
@(private="file")
aligned_realloc :: proc(a: ^WASM_Allocator, ptr: rawptr, alignment, size: uint, loc := #caller_location) -> rawptr {
attempt_region_resize :: proc(a: ^WASM_Allocator, region: ^Region, size: uint) -> bool {
lock(a)
defer unlock(a)
// First attempt to resize this region, if the next region that follows this one
// is a free region.
next_reg := next_region(region)
next_region_end_ptr := uintptr(next_reg) + uintptr(next_reg.size)
size_at_ceiling := ([^]uint)(next_region_end_ptr)[-1]
if next_reg.size != size_at_ceiling { // Next region is free?
assert(region_is_free(next_reg))
new_next_region_start_ptr := uintptr(region) + uintptr(size)
assert(has_alignment(new_next_region_start_ptr, size_of(uint)))
// Next region does not shrink to too small size?
if new_next_region_start_ptr + size_of(Region) <= next_region_end_ptr {
unlink_from_free_list(next_reg)
create_free_region(rawptr(new_next_region_start_ptr), uint(next_region_end_ptr - new_next_region_start_ptr))
link_to_free_list(a, (^Region)(new_next_region_start_ptr))
create_used_region(region, uint(new_next_region_start_ptr - uintptr(region)))
return true
}
// If we remove the next region altogether, allocation is satisfied?
if new_next_region_start_ptr <= next_region_end_ptr {
unlink_from_free_list(next_reg)
create_used_region(region, region.size + next_reg.size)
return true
}
} else {
// Next region is an used region - we cannot change its starting address. However if we are shrinking the
// size of this region, we can create a new free region between this and the next used region.
if size + size_of(Region) <= region.size {
free_region_size := region.size - size
create_used_region(region, size)
free_region := (^Region)(uintptr(region) + uintptr(size))
create_free_region(free_region, free_region_size)
link_to_free_list(a, free_region)
return true
} else if size <= region.size {
// Caller was asking to shrink the size, but due to not being able to fit a full Region in the shrunk
// area, we cannot actually do anything. This occurs if the shrink amount is really small. In such case,
// just call it success without doing any work.
return true
}
}
return false
}
if ptr == nil {
return aligned_alloc(a, alignment, size, loc)
}
if size == 0 {
free(a, ptr, loc)
return nil
}
if size > MAX_ALLOC_SIZE {
return nil
}
assert(is_power_of_two(alignment))
assert(has_alignment(uintptr(ptr), alignment), "realloc on different alignment than original allocation", loc=loc)
size := size
size = validate_alloc_size(size)
region := (^Region)(uintptr(ptr) - size_of(uint))
// Attempt an in-place resize.
if attempt_region_resize(a, region, size + REGION_HEADER_SIZE) {
return ptr
}
// Can't do it in-place, allocate new region and copy over.
newptr := aligned_alloc(a, alignment, size, loc)
if newptr != nil {
intrinsics.mem_copy(newptr, ptr, min(size, region.size - REGION_HEADER_SIZE))
free(a, ptr, loc=loc)
}
return newptr
}
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
+39 -3
View File
@@ -2,6 +2,23 @@
setlocal EnableDelayedExpansion
where /Q cl.exe || (
set __VSCMD_ARG_NO_LOGO=1
for /f "tokens=*" %%i in ('"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop -property installationPath') do set VS=%%i
if "!VS!" equ "" (
echo ERROR: Visual Studio installation not found
exit /b 1
)
call "!VS!\VC\Auxiliary\Build\vcvarsall.bat" amd64 || exit /b 1
)
if "%VSCMD_ARG_TGT_ARCH%" neq "x64" (
if "%ODIN_IGNORE_MSVC_CHECK%" == "" (
echo ERROR: please run this from MSVC x64 native tools command prompt, 32-bit target is not supported!
exit /b 1
)
)
for /f "usebackq tokens=1,2 delims=,=- " %%i in (`wmic os get LocalDateTime /value`) do @if %%i==LocalDateTime (
set CURR_DATE_TIME=%%j
)
@@ -33,8 +50,14 @@ set odin_version_raw="dev-%curr_year%-%curr_month%"
set compiler_flags= -nologo -Oi -TP -fp:precise -Gm- -MP -FC -EHsc- -GR- -GF
set compiler_defines= -DODIN_VERSION_RAW=\"%odin_version_raw%\"
for /f %%i in ('git rev-parse --short HEAD') do set GIT_SHA=%%i
if not exist .git\ goto skip_git_hash
for /f "tokens=1,2" %%i IN ('git show "--pretty=%%cd %%h" "--date=format:%%Y-%%m" --no-patch --no-notes HEAD') do (
set odin_version_raw=dev-%%i
set GIT_SHA=%%j
)
if %ERRORLEVEL% equ 0 set compiler_defines=%compiler_defines% -DGIT_SHA=\"%GIT_SHA%\"
:skip_git_hash
if %nightly% equ 1 set compiler_defines=%compiler_defines% -DNIGHTLY
if %release_mode% EQU 0 ( rem Debug
@@ -47,18 +70,30 @@ if %release_mode% EQU 0 ( rem Debug
set compiler_warnings= ^
-W4 -WX ^
-wd4100 -wd4101 -wd4127 -wd4146 ^
-wd4505 ^
-wd4456 -wd4457
set compiler_includes= ^
/Isrc\
set libs= ^
kernel32.lib ^
Synchronization.lib ^
bin\llvm\windows\LLVM-C.lib
rem DO NOT TOUCH!
rem THIS TILDE STUFF IS FOR DEVELOPMENT ONLY!
set tilde_backend=0
if %tilde_backend% EQU 1 (
set libs=%libs% src\tilde\tb.lib
set compiler_defines=%compiler_defines% -DODIN_TILDE_BACKEND
)
rem DO NOT TOUCH!
set linker_flags= -incremental:no -opt:ref -subsystem:console
if %release_mode% EQU 0 ( rem Debug
set linker_flags=%linker_flags% -debug
set linker_flags=%linker_flags% -debug /NATVIS:src\odin_compiler.natvis
) else ( rem Release
set linker_flags=%linker_flags% -debug
)
@@ -75,7 +110,8 @@ if %errorlevel% neq 0 goto end_of_build
call build_vendor.bat
if %errorlevel% neq 0 goto end_of_build
if %release_mode% EQU 0 odin run examples/demo
rem If the demo doesn't run for you and your CPU is more than a decade old, try -microarch:native
if %release_mode% EQU 0 odin run examples/demo -- Hellope World
del *.obj > NUL 2> NUL
Executable
+166
View File
@@ -0,0 +1,166 @@
#!/usr/bin/env sh
set -eu
: ${CPPFLAGS=}
: ${CXXFLAGS=}
: ${LDFLAGS=}
: ${LLVM_CONFIG=}
CPPFLAGS="$CPPFLAGS -DODIN_VERSION_RAW=\"dev-$(date +"%Y-%m")\""
CXXFLAGS="$CXXFLAGS -std=c++14"
DISABLED_WARNINGS="-Wno-switch -Wno-macro-redefined -Wno-unused-value"
LDFLAGS="$LDFLAGS -pthread -lm -lstdc++"
OS_ARCH="$(uname -m)"
OS_NAME="$(uname -s)"
if [ -d ".git" ] && [ -n "$(command -v git)" ]; then
GIT_SHA=$(git show --pretty='%h' --no-patch --no-notes HEAD)
CPPFLAGS="$CPPFLAGS -DGIT_SHA=\"$GIT_SHA\""
fi
error() {
printf "ERROR: %s\n" "$1"
exit 1
}
if [ -z "$LLVM_CONFIG" ]; then
# darwin, linux, openbsd
if [ -n "$(command -v llvm-config-18)" ]; then LLVM_CONFIG="llvm-config-18"
elif [ -n "$(command -v llvm-config-17)" ]; then LLVM_CONFIG="llvm-config-17"
elif [ -n "$(command -v llvm-config-14)" ]; then LLVM_CONFIG="llvm-config-14"
elif [ -n "$(command -v llvm-config-13)" ]; then LLVM_CONFIG="llvm-config-13"
elif [ -n "$(command -v llvm-config-12)" ]; then LLVM_CONFIG="llvm-config-12"
elif [ -n "$(command -v llvm-config-11)" ]; then LLVM_CONFIG="llvm-config-11"
# freebsd
elif [ -n "$(command -v llvm-config18)" ]; then LLVM_CONFIG="llvm-config18"
elif [ -n "$(command -v llvm-config17)" ]; then LLVM_CONFIG="llvm-config17"
elif [ -n "$(command -v llvm-config14)" ]; then LLVM_CONFIG="llvm-config14"
elif [ -n "$(command -v llvm-config13)" ]; then LLVM_CONFIG="llvm-config13"
elif [ -n "$(command -v llvm-config12)" ]; then LLVM_CONFIG="llvm-config12"
elif [ -n "$(command -v llvm-config11)" ]; then LLVM_CONFIG="llvm-config11"
# fallback
elif [ -n "$(command -v llvm-config)" ]; then LLVM_CONFIG="llvm-config"
else
error "No llvm-config command found. Set LLVM_CONFIG to proceed."
fi
fi
if [ -x "$(which clang++)" ]; then
: ${CXX="clang++"}
elif [ -x "$($LLVM_CONFIG --bindir)/clang++" ]; then
: ${CXX=$($LLVM_CONFIG --bindir)/clang++}
else
error "No clang++ command found. Set CXX to proceed."
fi
LLVM_VERSION="$($LLVM_CONFIG --version)"
LLVM_VERSION_MAJOR="$(echo $LLVM_VERSION | awk -F. '{print $1}')"
LLVM_VERSION_MINOR="$(echo $LLVM_VERSION | awk -F. '{print $2}')"
LLVM_VERSION_PATCH="$(echo $LLVM_VERSION | awk -F. '{print $3}')"
if [ $LLVM_VERSION_MAJOR -lt 11 ] || ([ $LLVM_VERSION_MAJOR -gt 14 ] && [ $LLVM_VERSION_MAJOR -lt 17 ]) || [ $LLVM_VERSION_MAJOR -gt 18 ]; then
error "Invalid LLVM version $LLVM_VERSION: must be 11, 12, 13, 14, 17 or 18"
fi
case "$OS_NAME" in
Darwin)
if [ "$OS_ARCH" = "arm64" ]; then
if [ $LLVM_VERSION_MAJOR -lt 13 ]; then
error "Invalid LLVM version $LLVM_VERSION: Darwin Arm64 requires LLVM 13, 14, 17 or 18"
fi
fi
darwin_sysroot=
if [ $(which xcrun) ]; then
darwin_sysroot="--sysroot $(xcrun --sdk macosx --show-sdk-path)"
elif [[ -e "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk" ]]; then
darwin_sysroot="--sysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"
else
echo "Warning: MacOSX.sdk not found."
fi
CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags) ${darwin_sysroot}"
LDFLAGS="$LDFLAGS -liconv -ldl -framework System -lLLVM"
;;
FreeBSD)
CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)"
LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs)"
;;
NetBSD)
CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)"
LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs)"
;;
Linux)
CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)"
LDFLAGS="$LDFLAGS -ldl $($LLVM_CONFIG --libs core native --system-libs --libfiles)"
# Copy libLLVM*.so into current directory for linking
# NOTE: This is needed by the Linux release pipeline!
cp $(readlink -f $($LLVM_CONFIG --libfiles)) ./
LDFLAGS="$LDFLAGS -Wl,-rpath=\$ORIGIN"
;;
OpenBSD)
CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)"
LDFLAGS="$LDFLAGS -liconv"
LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs)"
;;
Haiku)
CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags) -I/system/develop/headers/private/shared -I/system/develop/headers/private/kernel"
LDFLAGS="$LDFLAGS -liconv"
LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs)"
;;
*)
error "Platform \"$OS_NAME\" unsupported"
;;
esac
build_odin() {
case $1 in
debug)
EXTRAFLAGS="-g"
;;
release)
EXTRAFLAGS="-O3"
;;
release-native)
if [ "$OS_ARCH" = "arm64" ]; then
# Use preferred flag for Arm (ie arm64 / aarch64 / etc)
EXTRAFLAGS="-O3 -mcpu=native"
else
# Use preferred flag for x86 / amd64
EXTRAFLAGS="-O3 -march=native"
fi
;;
nightly)
EXTRAFLAGS="-DNIGHTLY -O3"
;;
*)
error "Build mode \"$1\" unsupported!"
;;
esac
set -x
$CXX src/main.cpp src/libtommath.cpp $DISABLED_WARNINGS $CPPFLAGS $CXXFLAGS $EXTRAFLAGS $LDFLAGS -o odin
set +x
}
run_demo() {
./odin run examples/demo/demo.odin -file -- Hellope World
}
if [ $# -eq 0 ]; then
build_odin debug
run_demo
elif [ $# -eq 1 ]; then
case $1 in
report)
[ ! -f "./odin" ] && build_odin debug
./odin report
;;
*)
build_odin $1
;;
esac
run_demo
else
error "Too many arguments!"
fi
+7
View File
@@ -15,3 +15,10 @@ if not exist "vendor\miniaudio\lib\*.lib" (
call build.bat
popd
)
if not exist "vendor\cgltf\lib\*.lib" (
pushd vendor\cgltf\src
call build.bat
popd
)
-51
View File
@@ -1,51 +0,0 @@
import subprocess
import sys
import json
import datetime
import urllib.parse
import sys
def main():
files_by_date = {}
bucket = sys.argv[1]
files_lines = execute_cli(f"b2 ls --long {bucket} nightly").split("\n")
for x in files_lines:
parts = x.split(" ", 1)
if parts[0]:
json_str = execute_cli(f"b2 get-file-info {parts[0]}")
data = json.loads(json_str)
name = remove_prefix(data['fileName'], "nightly/")
url = f"https://f001.backblazeb2.com/file/{bucket}/nightly/{urllib.parse.quote_plus(name)}"
sha1 = data['contentSha1']
size = int(data['size'])
ts = int(data['fileInfo']['src_last_modified_millis'])
date = datetime.datetime.fromtimestamp(ts/1000).strftime('%Y-%m-%d')
if date not in files_by_date.keys():
files_by_date[date] = []
files_by_date[date].append({
'name': name,
'url': url,
'sha1': sha1,
'sizeInBytes': size,
})
now = datetime.datetime.utcnow().isoformat()
print(json.dumps({
'last_updated' : now,
'files': files_by_date
}, sort_keys=True, indent=4))
def remove_prefix(text, prefix):
return text[text.startswith(prefix) and len(prefix):]
def execute_cli(command):
sb = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
return sb.stdout.read().decode("utf-8");
if __name__ == '__main__':
sys.exit(main())
-34
View File
@@ -1,34 +0,0 @@
import subprocess
import sys
import json
import datetime
import urllib.parse
import sys
def main():
files_by_date = {}
bucket = sys.argv[1]
days_to_keep = int(sys.argv[2])
print(f"Looking for binaries to delete older than {days_to_keep} days")
files_lines = execute_cli(f"b2 ls --long --versions {bucket} nightly").split("\n")
for x in files_lines:
parts = [y for y in x.split(' ') if y]
if parts and parts[0]:
date = datetime.datetime.strptime(parts[2], '%Y-%m-%d').replace(hour=0, minute=0, second=0, microsecond=0)
now = datetime.datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0)
delta = now - date
if delta.days > days_to_keep:
print(f'Deleting {parts[5]}')
execute_cli(f'b2 delete-file-version {parts[0]}')
def execute_cli(command):
sb = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
return sb.stdout.read().decode("utf-8");
if __name__ == '__main__':
sys.exit(main())
+140
View File
@@ -0,0 +1,140 @@
import os
import sys
from zipfile import ZipFile, ZIP_DEFLATED
from b2sdk.v2 import InMemoryAccountInfo, B2Api
from datetime import datetime
import json
UPLOAD_FOLDER = "nightly/"
info = InMemoryAccountInfo()
b2_api = B2Api(info)
application_key_id = os.environ['APPID']
application_key = os.environ['APPKEY']
bucket_name = os.environ['BUCKET']
days_to_keep = os.environ['DAYS_TO_KEEP']
def auth() -> bool:
try:
realm = b2_api.account_info.get_realm()
return True # Already authenticated
except:
pass # Not yet authenticated
err = b2_api.authorize_account("production", application_key_id, application_key)
return err == None
def get_bucket():
if not auth(): sys.exit(1)
return b2_api.get_bucket_by_name(bucket_name)
def remove_prefix(text: str, prefix: str) -> str:
return text[text.startswith(prefix) and len(prefix):]
def create_and_upload_artifact_zip(platform: str, artifact: str) -> int:
now = datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0)
destination_zip_name = "odin-{}-nightly+{}.zip".format(platform, now.strftime("%Y-%m-%d"))
source_zip_name = artifact
if not artifact.endswith(".zip"):
print(f"Creating archive {destination_zip_name} from {artifact} and uploading to {bucket_name}")
source_zip_name = destination_zip_name
with ZipFile(source_zip_name, mode='w', compression=ZIP_DEFLATED, compresslevel=9) as z:
for root, directory, filenames in os.walk(artifact):
for file in filenames:
file_path = os.path.join(root, file)
zip_path = os.path.join("dist", os.path.relpath(file_path, artifact))
z.write(file_path, zip_path)
if not os.path.exists(source_zip_name):
print(f"Error: Newly created ZIP archive {source_zip_name} not found.")
return 1
print("Uploading {} to {}".format(source_zip_name, UPLOAD_FOLDER + destination_zip_name))
bucket = get_bucket()
res = bucket.upload_local_file(
source_zip_name, # Local file to upload
"nightly/" + destination_zip_name, # B2 destination path
)
return 0
def prune_artifacts():
print(f"Looking for binaries to delete older than {days_to_keep} days")
bucket = get_bucket()
for file, _ in bucket.ls(UPLOAD_FOLDER, latest_only=False):
# Timestamp is in milliseconds
date = datetime.fromtimestamp(file.upload_timestamp / 1_000.0).replace(hour=0, minute=0, second=0, microsecond=0)
now = datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0)
delta = now - date
if delta.days > int(days_to_keep):
print("Deleting {}".format(file.file_name))
file.delete()
return 0
def update_nightly_json():
print(f"Updating nightly.json with files {days_to_keep} days or newer")
files_by_date = {}
bucket = get_bucket()
for file, _ in bucket.ls(UPLOAD_FOLDER, latest_only=True):
# Timestamp is in milliseconds
date = datetime.fromtimestamp(file.upload_timestamp / 1_000.0).replace(hour=0, minute=0, second=0, microsecond=0).strftime('%Y-%m-%d')
name = remove_prefix(file.file_name, UPLOAD_FOLDER)
sha1 = file.content_sha1
size = file.size
url = bucket.get_download_url(file.file_name)
if date not in files_by_date.keys():
files_by_date[date] = []
files_by_date[date].append({
'name': name,
'url': url,
'sha1': sha1,
'sizeInBytes': size,
})
now = datetime.utcnow().isoformat()
nightly = json.dumps({
'last_updated' : now,
'files': files_by_date
}, sort_keys=True, indent=4, ensure_ascii=False).encode('utf-8')
res = bucket.upload_bytes(
nightly, # JSON bytes
"nightly.json", # B2 destination path
)
return 0
if __name__ == "__main__":
if len(sys.argv) == 1:
print("Usage: {} <verb> [arguments]".format(sys.argv[0]))
print("\tartifact <platform prefix> <artifact path>\n\t\tCreates and uploads a platform artifact zip.")
print("\tprune\n\t\tDeletes old artifacts from bucket")
print("\tjson\n\t\tUpdate and upload nightly.json")
sys.exit(1)
else:
command = sys.argv[1].lower()
if command == "artifact":
if len(sys.argv) != 4:
print("Usage: {} artifact <platform prefix> <artifact path>".format(sys.argv[0]))
print("Error: Expected artifact command to be given platform prefix and artifact path.\n")
sys.exit(1)
res = create_and_upload_artifact_zip(sys.argv[2], sys.argv[3])
sys.exit(res)
elif command == "prune":
res = prune_artifacts()
sys.exit(res)
elif command == "json":
res = update_nightly_json()
sys.exit(res)
-13
View File
@@ -1,13 +0,0 @@
#!/bin/bash
bucket=$1
platform=$2
artifact=$3
now=$(date +'%Y-%m-%d')
filename="odin-$platform-nightly+$now.zip"
echo "Creating archive $filename from $artifact and uploading to $bucket"
7z a -bd "output/$filename" -r "$artifact"
b2 upload-file --noProgress "$bucket" "output/$filename" "nightly/$filename"
+9 -9
View File
@@ -2,25 +2,25 @@ package bufio
import "core:io"
// Loadahead_Reader provides io lookahead.
// Lookahead_Reader provides io lookahead.
// This is useful for tokenizers/parsers.
// Loadahead_Reader is similar to bufio.Reader, but unlike bufio.Reader, Loadahead_Reader's buffer size
// Lookahead_Reader is similar to bufio.Reader, but unlike bufio.Reader, Lookahead_Reader's buffer size
// will EXACTLY match the specified size, whereas bufio.Reader's buffer size may differ from the specified size.
// This makes sure that the buffer will not be accidentally read beyond the expected size.
Loadahead_Reader :: struct {
Lookahead_Reader :: struct {
r: io.Reader,
buf: []byte,
n: int,
}
lookahead_reader_init :: proc(lr: ^Loadahead_Reader, r: io.Reader, buf: []byte) -> ^Loadahead_Reader {
lookahead_reader_init :: proc(lr: ^Lookahead_Reader, r: io.Reader, buf: []byte) -> ^Lookahead_Reader {
lr.r = r
lr.buf = buf
lr.n = 0
return lr
}
lookahead_reader_buffer :: proc(lr: ^Loadahead_Reader) -> []byte {
lookahead_reader_buffer :: proc(lr: ^Lookahead_Reader) -> []byte {
return lr.buf[:lr.n]
}
@@ -28,7 +28,7 @@ lookahead_reader_buffer :: proc(lr: ^Loadahead_Reader) -> []byte {
// lookahead_reader_peek returns a slice of the Lookahead_Reader which holds n bytes
// If the Lookahead_Reader cannot hold enough bytes, it will read from the underlying reader to populate the rest.
// NOTE: The returned buffer is not a copy of the underlying buffer
lookahead_reader_peek :: proc(lr: ^Loadahead_Reader, n: int) -> ([]byte, io.Error) {
lookahead_reader_peek :: proc(lr: ^Lookahead_Reader, n: int) -> ([]byte, io.Error) {
switch {
case n < 0:
return nil, .Negative_Read
@@ -58,13 +58,13 @@ lookahead_reader_peek :: proc(lr: ^Loadahead_Reader, n: int) -> ([]byte, io.Erro
// lookahead_reader_peek_all returns a slice of the Lookahead_Reader populating the full buffer
// If the Lookahead_Reader cannot hold enough bytes, it will read from the underlying reader to populate the rest.
// NOTE: The returned buffer is not a copy of the underlying buffer
lookahead_reader_peek_all :: proc(lr: ^Loadahead_Reader) -> ([]byte, io.Error) {
lookahead_reader_peek_all :: proc(lr: ^Lookahead_Reader) -> ([]byte, io.Error) {
return lookahead_reader_peek(lr, len(lr.buf))
}
// lookahead_reader_consume drops the first n populated bytes from the Lookahead_Reader.
lookahead_reader_consume :: proc(lr: ^Loadahead_Reader, n: int) -> io.Error {
lookahead_reader_consume :: proc(lr: ^Lookahead_Reader, n: int) -> io.Error {
switch {
case n == 0:
return nil
@@ -78,6 +78,6 @@ lookahead_reader_consume :: proc(lr: ^Loadahead_Reader, n: int) -> io.Error {
return nil
}
lookahead_reader_consume_all :: proc(lr: ^Loadahead_Reader) -> io.Error {
lookahead_reader_consume_all :: proc(lr: ^Lookahead_Reader) -> io.Error {
return lookahead_reader_consume(lr, lr.n)
}
+22 -48
View File
@@ -14,55 +14,29 @@ read_writer_init :: proc(rw: ^Read_Writer, r: ^Reader, w: ^Writer) {
}
read_writer_to_stream :: proc(rw: ^Read_Writer) -> (s: io.Stream) {
s.stream_data = rw
s.stream_vtable = _read_writer_vtable
s.procedure = _read_writer_procedure
s.data = rw
return
}
@(private)
_read_writer_vtable := &io.Stream_VTable{
impl_read = proc(s: io.Stream, p: []byte) -> (n: int, err: io.Error) {
b := (^Read_Writer)(s.stream_data).r
return reader_read(b, p)
},
impl_read_byte = proc(s: io.Stream) -> (c: byte, err: io.Error) {
b := (^Read_Writer)(s.stream_data).r
return reader_read_byte(b)
},
impl_unread_byte = proc(s: io.Stream) -> io.Error {
b := (^Read_Writer)(s.stream_data).r
return reader_unread_byte(b)
},
impl_read_rune = proc(s: io.Stream) -> (r: rune, size: int, err: io.Error) {
b := (^Read_Writer)(s.stream_data).r
return reader_read_rune(b)
},
impl_unread_rune = proc(s: io.Stream) -> io.Error {
b := (^Read_Writer)(s.stream_data).r
return reader_unread_rune(b)
},
impl_write_to = proc(s: io.Stream, w: io.Writer) -> (n: i64, err: io.Error) {
b := (^Read_Writer)(s.stream_data).r
return reader_write_to(b, w)
},
impl_flush = proc(s: io.Stream) -> io.Error {
b := (^Read_Writer)(s.stream_data).w
return writer_flush(b)
},
impl_write = proc(s: io.Stream, p: []byte) -> (n: int, err: io.Error) {
b := (^Read_Writer)(s.stream_data).w
return writer_write(b, p)
},
impl_write_byte = proc(s: io.Stream, c: byte) -> io.Error {
b := (^Read_Writer)(s.stream_data).w
return writer_write_byte(b, c)
},
impl_write_rune = proc(s: io.Stream, r: rune) -> (int, io.Error) {
b := (^Read_Writer)(s.stream_data).w
return writer_write_rune(b, r)
},
impl_read_from = proc(s: io.Stream, r: io.Reader) -> (n: i64, err: io.Error) {
b := (^Read_Writer)(s.stream_data).w
return writer_read_from(b, r)
},
}
_read_writer_procedure := proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte, offset: i64, whence: io.Seek_From) -> (n: i64, err: io.Error) {
rw := (^Read_Writer)(stream_data)
n_int: int
#partial switch mode {
case .Flush:
err = writer_flush(rw.w)
return
case .Read:
n_int, err = reader_read(rw.r, p)
n = i64(n_int)
return
case .Write:
n_int, err = writer_write(rw.w, p)
n = i64(n_int)
return
case .Query:
return io.query_utility({.Flush, .Read, .Write, .Query})
}
return 0, .Empty
}
+32 -82
View File
@@ -29,12 +29,12 @@ MIN_READ_BUFFER_SIZE :: 16
@(private)
DEFAULT_MAX_CONSECUTIVE_EMPTY_READS :: 128
reader_init :: proc(b: ^Reader, rd: io.Reader, size: int = DEFAULT_BUF_SIZE, allocator := context.allocator) {
reader_init :: proc(b: ^Reader, rd: io.Reader, size: int = DEFAULT_BUF_SIZE, allocator := context.allocator, loc := #caller_location) {
size := size
size = max(size, MIN_READ_BUFFER_SIZE)
reader_reset(b, rd)
b.buf_allocator = allocator
b.buf = make([]byte, size, allocator)
b.buf = make([]byte, size, allocator, loc)
}
reader_init_with_buf :: proc(b: ^Reader, rd: io.Reader, buf: []byte) {
@@ -81,7 +81,7 @@ _reader_read_new_chunk :: proc(b: ^Reader) -> io.Error {
for i := b.max_consecutive_empty_reads; i > 0; i -= 1 {
n, err := io.read(b.rd, b.buf[b.w:])
if n < 0 {
return .Negative_Read
return err if err != nil else .Negative_Read
}
b.w += n
if err != nil {
@@ -118,9 +118,7 @@ reader_peek :: proc(b: ^Reader, n: int) -> (data: []byte, err: io.Error) {
b.last_rune_size = -1
for b.w-b.r < n && b.w-b.r < len(b.buf) && b.err == nil {
if fill_err := _reader_read_new_chunk(b); fill_err != nil {
return nil, fill_err
}
_reader_read_new_chunk(b) or_return
}
if n > len(b.buf) {
@@ -156,9 +154,7 @@ reader_discard :: proc(b: ^Reader, n: int) -> (discarded: int, err: io.Error) {
for {
skip := reader_buffered(b)
if skip == 0 {
if fill_err := _reader_read_new_chunk(b); fill_err != nil {
return 0, fill_err
}
_reader_read_new_chunk(b) or_return
skip = reader_buffered(b)
}
skip = min(skip, remaining)
@@ -193,7 +189,7 @@ reader_read :: proc(b: ^Reader, p: []byte) -> (n: int, err: io.Error) {
if len(p) >= len(b.buf) {
n, b.err = io.read(b.rd, p)
if n < 0 {
return 0, .Negative_Read
return 0, b.err if b.err != nil else .Negative_Read
}
if n > 0 {
@@ -206,7 +202,7 @@ reader_read :: proc(b: ^Reader, p: []byte) -> (n: int, err: io.Error) {
b.r, b.w = 0, 0
n, b.err = io.read(b.rd, b.buf)
if n < 0 {
return 0, .Negative_Read
return 0, b.err if b.err != nil else .Negative_Read
}
if n == 0 {
return 0, _reader_consume_err(b)
@@ -223,20 +219,18 @@ reader_read :: proc(b: ^Reader, p: []byte) -> (n: int, err: io.Error) {
// reader_read_byte reads and returns a single byte
// If no byte is available, it return an error
reader_read_byte :: proc(b: ^Reader) -> (byte, io.Error) {
reader_read_byte :: proc(b: ^Reader) -> (c: byte, err: io.Error) {
b.last_rune_size = -1
for b.r == b.w {
if b.err != nil {
return 0, _reader_consume_err(b)
}
if err := _reader_read_new_chunk(b); err != nil {
return 0, err
}
_reader_read_new_chunk(b) or_return
}
c := b.buf[b.r]
c = b.buf[b.r]
b.r += 1
b.last_byte = int(c)
return c, nil
return
}
// reader_unread_byte unreads the last byte. Only the most recently read byte can be unread
@@ -264,15 +258,12 @@ reader_read_rune :: proc(b: ^Reader) -> (r: rune, size: int, err: io.Error) {
!utf8.full_rune(b.buf[b.r:b.w]) &&
b.err == nil &&
b.w-b.w < len(b.buf) {
if err = _reader_read_new_chunk(b); err != nil {
return
}
_reader_read_new_chunk(b) or_return
}
b.last_rune_size = -1
if b.r == b.w {
err = _reader_consume_err(b)
return
return 0, 0, _reader_consume_err(b)
}
r, size = rune(b.buf[b.r]), 1
if r >= utf8.RUNE_SELF {
@@ -299,45 +290,26 @@ reader_write_to :: proc(b: ^Reader, w: io.Writer) -> (n: i64, err: io.Error) {
write_buf :: proc(b: ^Reader, w: io.Writer) -> (i64, io.Error) {
n, err := io.write(w, b.buf[b.r:b.w])
if n < 0 {
return 0, .Negative_Write
return 0, err if err != nil else .Negative_Write
}
b.r += n
return i64(n), err
}
n, err = write_buf(b, w)
if err != nil {
return
}
n = write_buf(b, w) or_return
m: i64
if nr, ok := io.to_writer_to(b.rd); ok {
m, err = io.write_to(nr, w)
n += m
return n, err
}
if nw, ok := io.to_reader_from(w); ok {
m, err = io.read_from(nw, b.rd)
n += m
return n, err
}
if b.w-b.r < len(b.buf) {
if err = _reader_read_new_chunk(b); err != nil {
return
}
_reader_read_new_chunk(b) or_return
}
for b.r < b.w {
m, err = write_buf(b, w)
n += m
n += m // this needs to be done before returning
if err != nil {
return
}
if err = _reader_read_new_chunk(b); err != nil {
return
}
_reader_read_new_chunk(b) or_return
}
if b.err == .EOF {
@@ -352,48 +324,28 @@ reader_write_to :: proc(b: ^Reader, w: io.Writer) -> (n: i64, err: io.Error) {
// reader_to_stream converts a Reader into an io.Stream
reader_to_stream :: proc(b: ^Reader) -> (s: io.Stream) {
s.stream_data = b
s.stream_vtable = _reader_vtable
s.data = b
s.procedure = _reader_proc
return
}
@(private)
_reader_vtable := &io.Stream_VTable{
impl_destroy = proc(s: io.Stream) -> io.Error {
b := (^Reader)(s.stream_data)
_reader_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte, offset: i64, whence: io.Seek_From) -> (n: i64, err: io.Error) {
b := (^Reader)(stream_data)
#partial switch mode {
case .Read:
return io._i64_err(reader_read(b, p))
case .Destroy:
reader_destroy(b)
return nil
},
impl_read = proc(s: io.Stream, p: []byte) -> (n: int, err: io.Error) {
b := (^Reader)(s.stream_data)
return reader_read(b, p)
},
impl_read_byte = proc(s: io.Stream) -> (c: byte, err: io.Error) {
b := (^Reader)(s.stream_data)
return reader_read_byte(b)
},
impl_unread_byte = proc(s: io.Stream) -> io.Error {
b := (^Reader)(s.stream_data)
return reader_unread_byte(b)
},
impl_read_rune = proc(s: io.Stream) -> (r: rune, size: int, err: io.Error) {
b := (^Reader)(s.stream_data)
return reader_read_rune(b)
},
impl_unread_rune = proc(s: io.Stream) -> io.Error {
b := (^Reader)(s.stream_data)
return reader_unread_rune(b)
},
impl_write_to = proc(s: io.Stream, w: io.Writer) -> (n: i64, err: io.Error) {
b := (^Reader)(s.stream_data)
return reader_write_to(b, w)
},
return
case .Query:
return io.query_utility({.Read, .Destroy, .Query})
}
return 0, .Empty
}
//
// Utility procedures
//
@@ -435,9 +387,7 @@ reader_read_slice :: proc(b: ^Reader, delim: byte) -> (line: []byte, err: io.Err
s = b.w - b.r
if err = _reader_read_new_chunk(b); err != nil {
break
}
_reader_read_new_chunk(b) or_break
}
if i := len(line)-1; i >= 0 {
+5 -8
View File
@@ -4,10 +4,11 @@ import "core:bytes"
import "core:io"
import "core:mem"
import "core:unicode/utf8"
import "core:intrinsics"
import "base:intrinsics"
// Extra errors returns by scanning procedures
Scanner_Extra_Error :: enum i32 {
None,
Negative_Advance,
Advanced_Too_Far,
Bad_Read_Count,
@@ -15,7 +16,7 @@ Scanner_Extra_Error :: enum i32 {
Too_Short,
}
Scanner_Error :: union {
Scanner_Error :: union #shared_nil {
io.Error,
Scanner_Extra_Error,
}
@@ -65,10 +66,10 @@ scanner_destroy :: proc(s: ^Scanner) {
}
// Returns the first non-EOF error that was encounted by the scanner
// Returns the first non-EOF error that was encountered by the scanner
scanner_error :: proc(s: ^Scanner) -> Scanner_Error {
switch s._err {
case .EOF, .None:
case .EOF, nil:
return nil
}
return s._err
@@ -93,10 +94,6 @@ scanner_text :: proc(s: ^Scanner) -> string {
// scanner_scan advances the scanner
scanner_scan :: proc(s: ^Scanner) -> bool {
set_err :: proc(s: ^Scanner, err: Scanner_Error) {
err := err
if err == .None {
err = nil
}
switch s._err {
case nil, .EOF:
s._err = err
+32 -40
View File
@@ -95,6 +95,10 @@ writer_write :: proc(b: ^Writer, p: []byte) -> (n: int, err: io.Error) {
m: int
if writer_buffered(b) == 0 {
m, b.err = io.write(b.wr, p)
if m < 0 && b.err == nil {
b.err = .Negative_Write
break
}
} else {
m = copy(b.buf[b.n:], p)
b.n += m
@@ -159,7 +163,7 @@ writer_write_rune :: proc(b: ^Writer, r: rune) -> (size: int, err: io.Error) {
return
}
// writer_write writes a string into the buffer
// writer_write_string writes a string into the buffer
// It returns the number of bytes written
// If n < len(p), it will return an error explaining why the write is short
writer_write_string :: proc(b: ^Writer, s: string) -> (int, io.Error) {
@@ -173,14 +177,6 @@ writer_read_from :: proc(b: ^Writer, r: io.Reader) -> (n: i64, err: io.Error) {
if b.err != nil {
return 0, b.err
}
if writer_buffered(b) == 0 {
if w, ok := io.to_reader_from(b.wr); !ok {
n, err = io.read_from(w, r)
b.err = err
return
}
}
for {
if writer_available(b) == 0 {
writer_flush(b) or_return
@@ -222,38 +218,34 @@ writer_read_from :: proc(b: ^Writer, r: io.Reader) -> (n: i64, err: io.Error) {
// writer_to_stream converts a Writer into an io.Stream
writer_to_stream :: proc(b: ^Writer) -> (s: io.Stream) {
s.stream_data = b
s.stream_vtable = _writer_vtable
s.data = b
s.procedure = _writer_proc
return
}
@(private)
_writer_vtable := &io.Stream_VTable{
impl_destroy = proc(s: io.Stream) -> io.Error {
b := (^Writer)(s.stream_data)
writer_destroy(b)
return nil
},
impl_flush = proc(s: io.Stream) -> io.Error {
b := (^Writer)(s.stream_data)
return writer_flush(b)
},
impl_write = proc(s: io.Stream, p: []byte) -> (n: int, err: io.Error) {
b := (^Writer)(s.stream_data)
return writer_write(b, p)
},
impl_write_byte = proc(s: io.Stream, c: byte) -> io.Error {
b := (^Writer)(s.stream_data)
return writer_write_byte(b, c)
},
impl_write_rune = proc(s: io.Stream, r: rune) -> (int, io.Error) {
b := (^Writer)(s.stream_data)
return writer_write_rune(b, r)
},
impl_read_from = proc(s: io.Stream, r: io.Reader) -> (n: i64, err: io.Error) {
b := (^Writer)(s.stream_data)
return writer_read_from(b, r)
},
// writer_to_stream converts a Writer into an io.Stream
writer_to_writer :: proc(b: ^Writer) -> (s: io.Writer) {
return writer_to_stream(b)
}
_writer_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte, offset: i64, whence: io.Seek_From) -> (n: i64, err: io.Error) {
b := (^Writer)(stream_data)
#partial switch mode {
case .Flush:
err = writer_flush(b)
return
case .Write:
n_int: int
n_int, err = writer_write(b, p)
n = i64(n_int)
return
case .Destroy:
writer_destroy(b)
return
case .Query:
return io.query_utility({.Flush, .Write, .Destroy, .Query})
}
return 0, .Empty
}
-120
View File
@@ -1,120 +0,0 @@
// This is purely for documentation
package builtin
nil :: nil;
false :: 0!=0;
true :: 0==0;
ODIN_OS :: ODIN_OS;
ODIN_ARCH :: ODIN_ARCH;
ODIN_ENDIAN :: ODIN_ENDIAN;
ODIN_VENDOR :: ODIN_VENDOR;
ODIN_VERSION :: ODIN_VERSION;
ODIN_ROOT :: ODIN_ROOT;
ODIN_DEBUG :: ODIN_DEBUG;
byte :: u8; // alias
bool :: bool;
b8 :: b8;
b16 :: b16;
b32 :: b32;
b64 :: b64;
i8 :: i8;
u8 :: u8;
i16 :: i16;
u16 :: u16;
i32 :: i32;
u32 :: u32;
i64 :: i64;
u64 :: u64;
i128 :: i128;
u128 :: u128;
rune :: rune;
f16 :: f16;
f32 :: f32;
f64 :: f64;
complex32 :: complex32;
complex64 :: complex64;
complex128 :: complex128;
quaternion64 :: quaternion64;
quaternion128 :: quaternion128;
quaternion256 :: quaternion256;
int :: int;
uint :: uint;
uintptr :: uintptr;
rawptr :: rawptr;
string :: string;
cstring :: cstring;
any :: any;
typeid :: typeid;
// Endian Specific Types
i16le :: i16le;
u16le :: u16le;
i32le :: i32le;
u32le :: u32le;
i64le :: i64le;
u64le :: u64le;
i128le :: i128le;
u128le :: u128le;
i16be :: i16be;
u16be :: u16be;
i32be :: i32be;
u32be :: u32be;
i64be :: i64be;
u64be :: u64be;
i128be :: i128be;
u128be :: u128be;
f16le :: f16le;
f32le :: f32le;
f64le :: f64le;
f16be :: f16be;
f32be :: f32be;
f64be :: f64be;
// Procedures
len :: proc(array: Array_Type) -> int ---
cap :: proc(array: Array_Type) -> int ---
size_of :: proc($T: typeid) -> int ---
align_of :: proc($T: typeid) -> int ---
offset_of :: proc($T: typeid) -> uintptr ---
type_of :: proc(x: expr) -> type ---
type_info_of :: proc($T: typeid) -> ^runtime.Type_Info ---
typeid_of :: proc($T: typeid) -> typeid ---
swizzle :: proc(x: [N]T, indices: ..int) -> [len(indices)]T ---
complex :: proc(real, imag: Float) -> Complex_Type ---
quaternion :: proc(real, imag, jmag, kmag: Float) -> Quaternion_Type ---
real :: proc(value: Complex_Or_Quaternion) -> Float ---
imag :: proc(value: Complex_Or_Quaternion) -> Float ---
jmag :: proc(value: Quaternion) -> Float ---
kmag :: proc(value: Quaternion) -> Float ---
conj :: proc(value: Complex_Or_Quaternion) -> Complex_Or_Quaternion ---
expand_to_tuple :: proc(value: Struct_Or_Array) -> (A, B, C, ...) ---
min :: proc(values: ..T) -> T ---
max :: proc(values: ..T) -> T ---
abs :: proc(value: T) -> T ---
clamp :: proc(value, minimum, maximum: T) -> T ---
soa_zip :: proc(slices: ...) -> #soa[]Struct ---
soa_unzip :: proc(value: $S/#soa[]$E) -> (slices: ...) ---
+72 -97
View File
@@ -27,17 +27,22 @@ Read_Op :: enum i8 {
}
buffer_init :: proc(b: ^Buffer, buf: []byte) {
resize(&b.buf, len(buf))
buffer_init :: proc(b: ^Buffer, buf: []byte, loc := #caller_location) {
resize(&b.buf, len(buf), loc=loc)
copy(b.buf[:], buf)
}
buffer_init_string :: proc(b: ^Buffer, s: string) {
resize(&b.buf, len(s))
buffer_init_string :: proc(b: ^Buffer, s: string, loc := #caller_location) {
resize(&b.buf, len(s), loc=loc)
copy(b.buf[:], s)
}
buffer_init_allocator :: proc(b: ^Buffer, len, cap: int, allocator := context.allocator) {
buffer_init_allocator :: proc(b: ^Buffer, len, cap: int, allocator := context.allocator, loc := #caller_location) {
if b.buf == nil {
b.buf = make([dynamic]byte, len, cap, allocator, loc)
return
}
b.buf.allocator = allocator
reserve(&b.buf, cap)
resize(&b.buf, len)
@@ -91,25 +96,28 @@ buffer_truncate :: proc(b: ^Buffer, n: int) {
}
@(private)
_buffer_try_grow :: proc(b: ^Buffer, n: int) -> (int, bool) {
_buffer_try_grow :: proc(b: ^Buffer, n: int, loc := #caller_location) -> (int, bool) {
if l := len(b.buf); n <= cap(b.buf)-l {
resize(&b.buf, l+n)
resize(&b.buf, l+n, loc=loc)
return l, true
}
return 0, false
}
@(private)
_buffer_grow :: proc(b: ^Buffer, n: int) -> int {
_buffer_grow :: proc(b: ^Buffer, n: int, loc := #caller_location) -> int {
m := buffer_length(b)
if m == 0 && b.off != 0 {
buffer_reset(b)
}
if i, ok := _buffer_try_grow(b, n); ok {
if i, ok := _buffer_try_grow(b, n, loc=loc); ok {
return i
}
if b.buf == nil && n <= SMALL_BUFFER_SIZE {
b.buf = make([dynamic]byte, n, SMALL_BUFFER_SIZE)
// Fixes #2756 by preserving allocator if already set on Buffer via init_buffer_allocator
reserve(&b.buf, SMALL_BUFFER_SIZE, loc=loc)
resize(&b.buf, n, loc=loc)
return 0
}
@@ -119,31 +127,31 @@ _buffer_grow :: proc(b: ^Buffer, n: int) -> int {
} else if c > max(int) - c - n {
panic("bytes.Buffer: too large")
} else {
resize(&b.buf, 2*c + n)
resize(&b.buf, 2*c + n, loc=loc)
copy(b.buf[:], b.buf[b.off:])
}
b.off = 0
resize(&b.buf, m+n)
resize(&b.buf, m+n, loc=loc)
return m
}
buffer_grow :: proc(b: ^Buffer, n: int) {
buffer_grow :: proc(b: ^Buffer, n: int, loc := #caller_location) {
if n < 0 {
panic("bytes.buffer_grow: negative count")
}
m := _buffer_grow(b, n)
resize(&b.buf, m)
m := _buffer_grow(b, n, loc=loc)
resize(&b.buf, m, loc=loc)
}
buffer_write_at :: proc(b: ^Buffer, p: []byte, offset: int) -> (n: int, err: io.Error) {
buffer_write_at :: proc(b: ^Buffer, p: []byte, offset: int, loc := #caller_location) -> (n: int, err: io.Error) {
b.last_read = .Invalid
if offset < 0 {
err = .Invalid_Offset
return
}
_, ok := _buffer_try_grow(b, offset+len(p))
_, ok := _buffer_try_grow(b, offset+len(p), loc=loc)
if !ok {
_ = _buffer_grow(b, offset+len(p))
_ = _buffer_grow(b, offset+len(p), loc=loc)
}
if len(b.buf) <= offset {
return 0, .Short_Write
@@ -152,43 +160,47 @@ buffer_write_at :: proc(b: ^Buffer, p: []byte, offset: int) -> (n: int, err: io.
}
buffer_write :: proc(b: ^Buffer, p: []byte) -> (n: int, err: io.Error) {
buffer_write :: proc(b: ^Buffer, p: []byte, loc := #caller_location) -> (n: int, err: io.Error) {
b.last_read = .Invalid
m, ok := _buffer_try_grow(b, len(p))
m, ok := _buffer_try_grow(b, len(p), loc=loc)
if !ok {
m = _buffer_grow(b, len(p))
m = _buffer_grow(b, len(p), loc=loc)
}
return copy(b.buf[m:], p), nil
}
buffer_write_string :: proc(b: ^Buffer, s: string) -> (n: int, err: io.Error) {
buffer_write_ptr :: proc(b: ^Buffer, ptr: rawptr, size: int, loc := #caller_location) -> (n: int, err: io.Error) {
return buffer_write(b, ([^]byte)(ptr)[:size], loc=loc)
}
buffer_write_string :: proc(b: ^Buffer, s: string, loc := #caller_location) -> (n: int, err: io.Error) {
b.last_read = .Invalid
m, ok := _buffer_try_grow(b, len(s))
m, ok := _buffer_try_grow(b, len(s), loc=loc)
if !ok {
m = _buffer_grow(b, len(s))
m = _buffer_grow(b, len(s), loc=loc)
}
return copy(b.buf[m:], s), nil
}
buffer_write_byte :: proc(b: ^Buffer, c: byte) -> io.Error {
buffer_write_byte :: proc(b: ^Buffer, c: byte, loc := #caller_location) -> io.Error {
b.last_read = .Invalid
m, ok := _buffer_try_grow(b, 1)
m, ok := _buffer_try_grow(b, 1, loc=loc)
if !ok {
m = _buffer_grow(b, 1)
m = _buffer_grow(b, 1, loc=loc)
}
b.buf[m] = c
return nil
}
buffer_write_rune :: proc(b: ^Buffer, r: rune) -> (n: int, err: io.Error) {
buffer_write_rune :: proc(b: ^Buffer, r: rune, loc := #caller_location) -> (n: int, err: io.Error) {
if r < utf8.RUNE_SELF {
buffer_write_byte(b, byte(r))
buffer_write_byte(b, byte(r), loc=loc)
return 1, nil
}
b.last_read = .Invalid
m, ok := _buffer_try_grow(b, utf8.UTF_MAX)
m, ok := _buffer_try_grow(b, utf8.UTF_MAX, loc=loc)
if !ok {
m = _buffer_grow(b, utf8.UTF_MAX)
m = _buffer_grow(b, utf8.UTF_MAX, loc=loc)
}
res: [4]byte
res, n = utf8.encode_rune(r)
@@ -229,17 +241,18 @@ buffer_read :: proc(b: ^Buffer, p: []byte) -> (n: int, err: io.Error) {
return
}
buffer_read_ptr :: proc(b: ^Buffer, ptr: rawptr, size: int) -> (n: int, err: io.Error) {
return buffer_read(b, ([^]byte)(ptr)[:size])
}
buffer_read_at :: proc(b: ^Buffer, p: []byte, offset: int) -> (n: int, err: io.Error) {
b.last_read = .Invalid
if offset < 0 || offset >= len(b.buf) {
if uint(offset) >= len(b.buf) {
err = .Invalid_Offset
return
}
if 0 <= offset && offset < len(b.buf) {
n = copy(p, b.buf[offset:])
}
n = copy(p, b.buf[offset:])
if n > 0 {
b.last_read = .Read
}
@@ -346,7 +359,7 @@ buffer_read_from :: proc(b: ^Buffer, r: io.Reader) -> (n: i64, err: io.Error) #n
resize(&b.buf, i)
m, e := io.read(r, b.buf[i:cap(b.buf)])
if m < 0 {
err = .Negative_Read
err = e if e != nil else .Negative_Read
return
}
@@ -365,69 +378,31 @@ buffer_read_from :: proc(b: ^Buffer, r: io.Reader) -> (n: i64, err: io.Error) #n
buffer_to_stream :: proc(b: ^Buffer) -> (s: io.Stream) {
s.stream_data = b
s.stream_vtable = _buffer_vtable
s.data = b
s.procedure = _buffer_proc
return
}
@(private)
_buffer_vtable := &io.Stream_VTable{
impl_size = proc(s: io.Stream) -> i64 {
b := (^Buffer)(s.stream_data)
return i64(buffer_capacity(b))
},
impl_read = proc(s: io.Stream, p: []byte) -> (n: int, err: io.Error) {
b := (^Buffer)(s.stream_data)
return buffer_read(b, p)
},
impl_read_at = proc(s: io.Stream, p: []byte, offset: i64) -> (n: int, err: io.Error) {
b := (^Buffer)(s.stream_data)
return buffer_read_at(b, p, int(offset))
},
impl_read_byte = proc(s: io.Stream) -> (byte, io.Error) {
b := (^Buffer)(s.stream_data)
return buffer_read_byte(b)
},
impl_read_rune = proc(s: io.Stream) -> (r: rune, size: int, err: io.Error) {
b := (^Buffer)(s.stream_data)
return buffer_read_rune(b)
},
impl_write = proc(s: io.Stream, p: []byte) -> (n: int, err: io.Error) {
b := (^Buffer)(s.stream_data)
return buffer_write(b, p)
},
impl_write_at = proc(s: io.Stream, p: []byte, offset: i64) -> (n: int, err: io.Error) {
b := (^Buffer)(s.stream_data)
return buffer_write_at(b, p, int(offset))
},
impl_write_byte = proc(s: io.Stream, c: byte) -> io.Error {
b := (^Buffer)(s.stream_data)
return buffer_write_byte(b, c)
},
impl_write_rune = proc(s: io.Stream, r: rune) -> (int, io.Error) {
b := (^Buffer)(s.stream_data)
return buffer_write_rune(b, r)
},
impl_unread_byte = proc(s: io.Stream) -> io.Error {
b := (^Buffer)(s.stream_data)
return buffer_unread_byte(b)
},
impl_unread_rune = proc(s: io.Stream) -> io.Error {
b := (^Buffer)(s.stream_data)
return buffer_unread_rune(b)
},
impl_destroy = proc(s: io.Stream) -> io.Error {
b := (^Buffer)(s.stream_data)
_buffer_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte, offset: i64, whence: io.Seek_From) -> (n: i64, err: io.Error) {
b := (^Buffer)(stream_data)
#partial switch mode {
case .Read:
return io._i64_err(buffer_read(b, p))
case .Read_At:
return io._i64_err(buffer_read_at(b, p, int(offset)))
case .Write:
return io._i64_err(buffer_write(b, p))
case .Write_At:
return io._i64_err(buffer_write_at(b, p, int(offset)))
case .Size:
n = i64(buffer_capacity(b))
return
case .Destroy:
buffer_destroy(b)
return nil
},
impl_write_to = proc(s: io.Stream, w: io.Writer) -> (n: i64, err: io.Error) {
b := (^Buffer)(s.stream_data)
return buffer_write_to(b, w)
},
impl_read_from = proc(s: io.Stream, r: io.Reader) -> (n: i64, err: io.Error) {
b := (^Buffer)(s.stream_data)
return buffer_read_from(b, r)
},
return
case .Query:
return io.query_utility({.Read, .Read_At, .Write, .Write_At, .Size, .Destroy})
}
return 0, .Empty
}
+58 -38
View File
@@ -10,7 +10,14 @@ clone :: proc(s: []byte, allocator := context.allocator, loc := #caller_location
return c[:len(s)]
}
ptr_from_slice :: proc(str: []byte) -> ^byte {
clone_safe :: proc(s: []byte, allocator := context.allocator, loc := #caller_location) -> (data: []byte, err: mem.Allocator_Error) {
c := make([]byte, len(s), allocator, loc) or_return
copy(c, s)
return c[:len(s)], nil
}
ptr_from_slice :: ptr_from_bytes
ptr_from_bytes :: proc(str: []byte) -> ^byte {
d := transmute(mem.Raw_String)str
return d.data
}
@@ -134,6 +141,25 @@ join :: proc(a: [][]byte, sep: []byte, allocator := context.allocator) -> []byte
return b
}
join_safe :: proc(a: [][]byte, sep: []byte, allocator := context.allocator) -> (data: []byte, err: mem.Allocator_Error) {
if len(a) == 0 {
return nil, nil
}
n := len(sep) * (len(a) - 1)
for s in a {
n += len(s)
}
b := make([]byte, n, allocator) or_return
i := copy(b, a[0])
for s in a[1:] {
i += copy(b[i:], sep)
i += copy(b[i:], s)
}
return b, nil
}
concatenate :: proc(a: [][]byte, allocator := context.allocator) -> []byte {
if len(a) == 0 {
return nil
@@ -151,6 +177,24 @@ concatenate :: proc(a: [][]byte, allocator := context.allocator) -> []byte {
return b
}
concatenate_safe :: proc(a: [][]byte, allocator := context.allocator) -> (data: []byte, err: mem.Allocator_Error) {
if len(a) == 0 {
return nil, nil
}
n := 0
for s in a {
n += len(s)
}
b := make([]byte, n, allocator) or_return
i := 0
for s in a {
i += copy(b[i:], s)
}
return b, nil
}
@private
_split :: proc(s, sep: []byte, sep_save, n: int, allocator := context.allocator) -> [][]byte {
s, n := s, n
@@ -218,61 +262,37 @@ split_after_n :: proc(s, sep: []byte, n: int, allocator := context.allocator) ->
@private
_split_iterator :: proc(s: ^[]byte, sep: []byte, sep_save, n: int) -> (res: []byte, ok: bool) {
s, n := s, n
if n == 0 {
return
}
if sep == nil {
_split_iterator :: proc(s: ^[]byte, sep: []byte, sep_save: int) -> (res: []byte, ok: bool) {
if len(sep) == 0 {
res = s[:]
ok = true
s^ = s[len(s):]
return
}
if n < 0 {
n = count(s^, sep) + 1
}
n -= 1
i := 0
for ; i < n; i += 1 {
m := index(s^, sep)
if m < 0 {
break
}
m := index(s^, sep)
if m < 0 {
// not found
res = s[:]
ok = len(res) != 0
s^ = s[len(s):]
} else {
res = s[:m+sep_save]
ok = true
s^ = s[m+len(sep):]
return
}
res = s[:]
ok = res != nil
s^ = s[len(s):]
return
}
split_iterator :: proc(s: ^[]byte, sep: []byte) -> ([]byte, bool) {
return _split_iterator(s, sep, 0, -1)
}
split_n_iterator :: proc(s: ^[]byte, sep: []byte, n: int) -> ([]byte, bool) {
return _split_iterator(s, sep, 0, n)
return _split_iterator(s, sep, 0)
}
split_after_iterator :: proc(s: ^[]byte, sep: []byte) -> ([]byte, bool) {
return _split_iterator(s, sep, len(sep), -1)
return _split_iterator(s, sep, len(sep))
}
split_after_n_iterator :: proc(s: ^[]byte, sep: []byte, n: int) -> ([]byte, bool) {
return _split_iterator(s, sep, len(sep), n)
}
index_byte :: proc(s: []byte, c: byte) -> int {
for i := 0; i < len(s); i += 1 {
@@ -618,7 +638,7 @@ trim_left_proc :: proc(s: []byte, p: proc(rune) -> bool) -> []byte {
index_rune :: proc(s: []byte, r: rune) -> int {
switch {
case 0 <= r && r < utf8.RUNE_SELF:
case u32(r) < utf8.RUNE_SELF:
return index_byte(s, byte(r))
case r == utf8.RUNE_ERROR:
@@ -875,7 +895,7 @@ split_multi_iterator :: proc(s: ^[]byte, substrs: [][]byte, skip_empty := false)
// scrub scruvs invalid utf-8 characters and replaces them with the replacement string
// Scrubs invalid utf-8 characters and replaces them with the replacement string
// Adjacent invalid bytes are only replaced once
scrub :: proc(s: []byte, replacement: []byte, allocator := context.allocator) -> []byte {
str := s
+20 -39
View File
@@ -16,8 +16,8 @@ reader_init :: proc(r: ^Reader, s: []byte) {
}
reader_to_stream :: proc(r: ^Reader) -> (s: io.Stream) {
s.stream_data = r
s.stream_vtable = _reader_vtable
s.data = r
s.procedure = _reader_proc
return
}
@@ -137,41 +137,22 @@ reader_write_to :: proc(r: ^Reader, w: io.Writer) -> (n: i64, err: io.Error) {
@(private)
_reader_vtable := &io.Stream_VTable{
impl_size = proc(s: io.Stream) -> i64 {
r := (^Reader)(s.stream_data)
return reader_size(r)
},
impl_read = proc(s: io.Stream, p: []byte) -> (n: int, err: io.Error) {
r := (^Reader)(s.stream_data)
return reader_read(r, p)
},
impl_read_at = proc(s: io.Stream, p: []byte, off: i64) -> (n: int, err: io.Error) {
r := (^Reader)(s.stream_data)
return reader_read_at(r, p, off)
},
impl_read_byte = proc(s: io.Stream) -> (byte, io.Error) {
r := (^Reader)(s.stream_data)
return reader_read_byte(r)
},
impl_unread_byte = proc(s: io.Stream) -> io.Error {
r := (^Reader)(s.stream_data)
return reader_unread_byte(r)
},
impl_read_rune = proc(s: io.Stream) -> (ch: rune, size: int, err: io.Error) {
r := (^Reader)(s.stream_data)
return reader_read_rune(r)
},
impl_unread_rune = proc(s: io.Stream) -> io.Error {
r := (^Reader)(s.stream_data)
return reader_unread_rune(r)
},
impl_seek = proc(s: io.Stream, offset: i64, whence: io.Seek_From) -> (i64, io.Error) {
r := (^Reader)(s.stream_data)
return reader_seek(r, offset, whence)
},
impl_write_to = proc(s: io.Stream, w: io.Writer) -> (n: i64, err: io.Error) {
r := (^Reader)(s.stream_data)
return reader_write_to(r, w)
},
_reader_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte, offset: i64, whence: io.Seek_From) -> (n: i64, err: io.Error) {
r := (^Reader)(stream_data)
#partial switch mode {
case .Read:
return io._i64_err(reader_read(r, p))
case .Read_At:
return io._i64_err(reader_read_at(r, p, offset))
case .Seek:
n, err = reader_seek(r, offset, whence)
return
case .Size:
n = reader_size(r)
return
case .Query:
return io.query_utility({.Read, .Read_At, .Seek, .Size, .Query})
}
return 0, .Empty
}
+15 -5
View File
@@ -1,26 +1,26 @@
package c
import builtin "core:builtin"
import builtin "base:builtin"
char :: builtin.u8 // assuming -funsigned-char
schar :: builtin.i8
short :: builtin.i16
int :: builtin.i32
long :: builtin.i32 when (ODIN_OS == "windows" || size_of(builtin.rawptr) == 4) else builtin.i64
long :: builtin.i32 when (ODIN_OS == .Windows || size_of(builtin.rawptr) == 4) else builtin.i64
longlong :: builtin.i64
uchar :: builtin.u8
ushort :: builtin.u16
uint :: builtin.u32
ulong :: builtin.u32 when (ODIN_OS == "windows" || size_of(builtin.rawptr) == 4) else builtin.u64
ulong :: builtin.u32 when (ODIN_OS == .Windows || size_of(builtin.rawptr) == 4) else builtin.u64
ulonglong :: builtin.u64
bool :: builtin.bool
size_t :: builtin.uint
ssize_t :: builtin.int
wchar_t :: builtin.u16 when (ODIN_OS == "windows") else builtin.u32
wchar_t :: builtin.u16 when (ODIN_OS == .Windows) else builtin.u32
float :: builtin.f32
double :: builtin.f64
@@ -48,7 +48,7 @@ int_least64_t :: builtin.i64
uint_least64_t :: builtin.u64
// Same on Windows, Linux, and FreeBSD
when ODIN_ARCH == "i386" || ODIN_ARCH == "amd64" {
when ODIN_ARCH == .i386 || ODIN_ARCH == .amd64 {
int_fast8_t :: builtin.i8
uint_fast8_t :: builtin.u8
int_fast16_t :: builtin.i32
@@ -104,3 +104,13 @@ NULL :: rawptr(uintptr(0))
NDEBUG :: !ODIN_DEBUG
CHAR_BIT :: 8
// Since there are no types in C with an alignment larger than that of
// max_align_t, which cannot be larger than sizeof(long double) as any other
// exposed type wouldn't be valid C, the maximum alignment possible in a
// strictly conformant C implementation is 16 on the platforms we care about.
// The choice of 4096 bytes for storage of this type is more than enough on all
// relevant platforms.
va_list :: struct #align(16) {
_: [4096]u8,
}
+4 -4
View File
@@ -519,7 +519,7 @@ join_adjacent_string_literals :: proc(cpp: ^Preprocessor, initial_tok: ^Token) {
quote_string :: proc(s: string) -> []byte {
b := strings.make_builder(0, len(s)+2)
b := strings.builder_make(0, len(s)+2)
io.write_quoted_string(strings.to_writer(&b), s, '"')
return b.buf[:]
}
@@ -1118,7 +1118,7 @@ expand_macro :: proc(cpp: ^Preprocessor, rest: ^^Token, tok: ^Token) -> bool {
search_include_next :: proc(cpp: ^Preprocessor, filename: string) -> (path: string, ok: bool) {
for ; cpp.include_next_index < len(cpp.include_paths); cpp.include_next_index += 1 {
tpath := filepath.join(elems={cpp.include_paths[cpp.include_next_index], filename}, allocator=context.temp_allocator)
tpath := filepath.join({cpp.include_paths[cpp.include_next_index], filename}, allocator=context.temp_allocator)
if os.exists(tpath) {
return strings.clone(tpath), true
}
@@ -1136,7 +1136,7 @@ search_include_paths :: proc(cpp: ^Preprocessor, filename: string) -> (path: str
}
for include_path in cpp.include_paths {
tpath := filepath.join(elems={include_path, filename}, allocator=context.temp_allocator)
tpath := filepath.join({include_path, filename}, allocator=context.temp_allocator)
if os.exists(tpath) {
path, ok = strings.clone(tpath), true
cpp.filepath_cache[filename] = path
@@ -1276,7 +1276,7 @@ preprocess_internal :: proc(cpp: ^Preprocessor, tok: ^Token) -> ^Token {
if start.file != nil {
dir = filepath.dir(start.file.name)
}
path := filepath.join(dir, filename)
path := filepath.join({dir, filename})
if os.exists(path) {
tok = include_file(cpp, tok, path, start.next.next)
continue
+21 -24
View File
@@ -1,34 +1,31 @@
/*
package demo
Example:
package demo
import tokenizer "core:c/frontend/tokenizer"
import preprocessor "core:c/frontend/preprocessor"
import "core:fmt"
import tokenizer "core:c/frontend/tokenizer"
import preprocessor "core:c/frontend/preprocessor"
import "core:fmt"
main :: proc() {
t := &tokenizer.Tokenizer{};
tokenizer.init_defaults(t);
main :: proc() {
t := &tokenizer.Tokenizer{};
tokenizer.init_defaults(t);
cpp := &preprocessor.Preprocessor{};
cpp.warn, cpp.err = t.warn, t.err;
preprocessor.init_lookup_tables(cpp);
preprocessor.init_default_macros(cpp);
cpp.include_paths = {"my/path/to/include"};
cpp := &preprocessor.Preprocessor{};
cpp.warn, cpp.err = t.warn, t.err;
preprocessor.init_lookup_tables(cpp);
preprocessor.init_default_macros(cpp);
cpp.include_paths = {"my/path/to/include"};
tok := tokenizer.tokenize_file(t, "the/source/file.c", 1);
tok := tokenizer.tokenize_file(t, "the/source/file.c", 1);
tok = preprocessor.preprocess(cpp, tok);
if tok != nil {
for t := tok; t.kind != .EOF; t = t.next {
fmt.println(t.lit);
tok = preprocessor.preprocess(cpp, tok);
if tok != nil {
for t := tok; t.kind != .EOF; t = t.next {
fmt.println(t.lit);
}
}
fmt.println("[Done]");
}
fmt.println("[Done]");
}
*/
package c_frontend_tokenizer
+1 -1
View File
@@ -127,7 +127,7 @@ advance_rune :: proc(t: ^Tokenizer) {
}
advance_rune_n :: proc(t: ^Tokenizer, n: int) {
for in 0..<n {
for _ in 0..<n {
advance_rune(t)
}
}
+5 -5
View File
@@ -2,9 +2,9 @@ package libc
// 7.3 Complex arithmetic
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == "darwin" {
} else when ODIN_OS == .Darwin {
foreign import libc "system:System.framework"
} else {
foreign import libc "system:c"
@@ -49,8 +49,8 @@ foreign libc {
// 7.3.8 Power and absolute-value functions
cabs :: proc(z: complex_double) -> complex_double ---
cabsf :: proc(z: complex_float) -> complex_float ---
cpow :: proc(z: complex_double) -> complex_double ---
cpowf :: proc(z: complex_float) -> complex_float ---
cpow :: proc(x, y: complex_double) -> complex_double ---
cpowf :: proc(x, y: complex_float) -> complex_float ---
csqrt :: proc(z: complex_double) -> complex_double ---
csqrtf :: proc(z: complex_float) -> complex_float ---
@@ -67,7 +67,7 @@ foreign libc {
crealf :: proc(z: complex_float) -> float ---
}
import builtin "core:builtin"
import builtin "base:builtin"
complex_float :: distinct builtin.complex64
complex_double :: distinct builtin.complex128
+2 -2
View File
@@ -1,8 +1,8 @@
package libc
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == "darwin" {
} else when ODIN_OS == .Darwin {
foreign import libc "system:System.framework"
} else {
foreign import libc "system:c"
+50 -6
View File
@@ -2,9 +2,9 @@ package libc
// 7.5 Errors
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == "darwin" {
} else when ODIN_OS == .Darwin {
foreign import libc "system:System.framework"
} else {
foreign import libc "system:c"
@@ -14,11 +14,11 @@ when ODIN_OS == "windows" {
// EDOM,
// EILSEQ
// ERANGE
when ODIN_OS == "linux" || ODIN_OS == "freebsd" {
when ODIN_OS == .Linux {
@(private="file")
@(default_calling_convention="c")
foreign libc {
@(link_name="__libc_errno_location")
@(link_name="__errno_location")
_get_errno :: proc() -> ^int ---
}
@@ -27,7 +27,33 @@ when ODIN_OS == "linux" || ODIN_OS == "freebsd" {
ERANGE :: 34
}
when ODIN_OS == "windows" {
when ODIN_OS == .FreeBSD {
@(private="file")
@(default_calling_convention="c")
foreign libc {
@(link_name="__error")
_get_errno :: proc() -> ^int ---
}
EDOM :: 33
EILSEQ :: 84
ERANGE :: 34
}
when ODIN_OS == .OpenBSD || ODIN_OS == .NetBSD {
@(private="file")
@(default_calling_convention="c")
foreign libc {
@(link_name="__errno")
_get_errno :: proc() -> ^int ---
}
EDOM :: 33
EILSEQ :: 84
ERANGE :: 34
}
when ODIN_OS == .Windows {
@(private="file")
@(default_calling_convention="c")
foreign libc {
@@ -40,7 +66,7 @@ when ODIN_OS == "windows" {
ERANGE :: 34
}
when ODIN_OS == "darwin" {
when ODIN_OS == .Darwin {
@(private="file")
@(default_calling_convention="c")
foreign libc {
@@ -54,6 +80,24 @@ when ODIN_OS == "darwin" {
ERANGE :: 34
}
when ODIN_OS == .Haiku {
@(private="file")
@(default_calling_convention="c")
foreign libc {
@(link_name="_errnop")
_get_errno :: proc() -> ^int ---
}
@(private="file")
B_GENERAL_ERROR_BASE :: min(i32)
@(private="file")
B_POSIX_ERROR_BASE :: B_GENERAL_ERROR_BASE + 0x7000
EDOM :: B_POSIX_ERROR_BASE + 16
EILSEQ :: B_POSIX_ERROR_BASE + 38
ERANGE :: B_POSIX_ERROR_BASE + 17
}
// Odin has no way to make an identifier "errno" behave as a function call to
// read the value, or to produce an lvalue such that you can assign a different
// error value to errno. To work around this, just expose it as a function like
+14 -14
View File
@@ -2,11 +2,11 @@ package libc
// 7.12 Mathematics
import "core:intrinsics"
import "base:intrinsics"
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == "darwin" {
} else when ODIN_OS == .Darwin {
foreign import libc "system:System.framework"
} else {
foreign import libc "system:c"
@@ -211,19 +211,19 @@ _signbitf :: #force_inline proc(x: float) -> int {
return int(transmute(uint32_t)x >> 31)
}
isfinite :: #force_inline proc(x: $T) where intrinsics.type_is_float(T) {
isfinite :: #force_inline proc(x: $T) -> bool where intrinsics.type_is_float(T) {
return fpclassify(x) == FP_INFINITE
}
isinf :: #force_inline proc(x: $T) where intrinsics.type_is_float(T) {
isinf :: #force_inline proc(x: $T) -> bool where intrinsics.type_is_float(T) {
return fpclassify(x) > FP_INFINITE
}
isnan :: #force_inline proc(x: $T) where intrinsics.type_is_float(T) {
isnan :: #force_inline proc(x: $T) -> bool where intrinsics.type_is_float(T) {
return fpclassify(x) == FP_NAN
}
isnormal :: #force_inline proc(x: $T) where intrinsics.type_is_float(T) {
isnormal :: #force_inline proc(x: $T) -> bool where intrinsics.type_is_float(T) {
return fpclassify(x) == FP_NORMAL
}
@@ -231,27 +231,27 @@ isnormal :: #force_inline proc(x: $T) where intrinsics.type_is_float(T) {
// implemented as the relational comparisons, as that would produce an invalid
// "sticky" state that propagates and affects maths results. These need
// to be implemented natively in Odin assuming isunordered to prevent that.
isgreater :: #force_inline proc(x, y: $T) where intrinsics.type_is_float(T) {
isgreater :: #force_inline proc(x, y: $T) -> bool where intrinsics.type_is_float(T) {
return !isunordered(x, y) && x > y
}
isgreaterequal :: #force_inline proc(x, y: $T) where intrinsics.type_is_float(T) {
isgreaterequal :: #force_inline proc(x, y: $T) -> bool where intrinsics.type_is_float(T) {
return !isunordered(x, y) && x >= y
}
isless :: #force_inline proc(x, y: $T) where intrinsics.type_is_float(T) {
isless :: #force_inline proc(x, y: $T) -> bool where intrinsics.type_is_float(T) {
return !isunordered(x, y) && x < y
}
islessequal :: #force_inline proc(x, y: $T) where intrinsics.type_is_float(T) {
islessequal :: #force_inline proc(x, y: $T) -> bool where intrinsics.type_is_float(T) {
return !isunordered(x, y) && x <= y
}
islessgreater :: #force_inline proc(x, y: $T) where intrinsics.type_is_float(T) {
islessgreater :: #force_inline proc(x, y: $T) -> bool where intrinsics.type_is_float(T) {
return !isunordered(x, y) && x <= y
}
isunordered :: #force_inline proc(x, y: $T) where intrinsics.type_is_float(T) {
isunordered :: #force_inline proc(x, y: $T) -> bool where intrinsics.type_is_float(T) {
if isnan(x) {
// Force evaluation of y to propagate exceptions for ordering semantics.
// To ensure correct semantics of IEEE 754 this cannot be compiled away.
@@ -331,7 +331,7 @@ fmin :: proc{libc_fmin, libc_fminf}
fma :: proc{libc_fma, libc_fmaf}
// But retain the 'f' suffix-variant functions as well so they can be used,
// a trick is used here where we use explicit procedrual overloading of one
// a trick is used here where we use explicit procedural overloading of one
// procedure. This is done because the foreign block is marked @(private) and
// aliasing functions does not remove privateness from the entity.
acosf :: proc{libc_acosf}
+4 -4
View File
@@ -2,14 +2,14 @@ package libc
// 7.13 Nonlocal jumps
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == "darwin" {
} else when ODIN_OS == .Darwin {
foreign import libc "system:System.framework"
} else {
foreign import libc "system:c"
}
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
@(default_calling_convention="c")
foreign libc {
// 7.13.1 Save calling environment
@@ -63,4 +63,4 @@ foreign libc {
// strictly conformant C implementation is 16 on the platforms we care about.
// The choice of 4096 bytes for storage of this type is more than enough on all
// relevant platforms.
jmp_buf :: struct #align 16 { _: [4096]char, }
jmp_buf :: struct #align(16) { _: [4096]char, }
+4 -17
View File
@@ -2,9 +2,9 @@ package libc
// 7.14 Signal handling
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == "darwin" {
} else when ODIN_OS == .Darwin {
foreign import libc "system:System.framework"
} else {
foreign import libc "system:c"
@@ -21,7 +21,7 @@ foreign libc {
raise :: proc(sig: int) -> int ---
}
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
SIG_ERR :: rawptr(~uintptr(0))
SIG_DFL :: rawptr(uintptr(0))
SIG_IGN :: rawptr(uintptr(1))
@@ -34,20 +34,7 @@ when ODIN_OS == "windows" {
SIGTERM :: 15
}
when ODIN_OS == "linux" || ODIN_OS == "freebsd" {
SIG_ERR :: rawptr(~uintptr(0))
SIG_DFL :: rawptr(uintptr(0))
SIG_IGN :: rawptr(uintptr(1))
SIGABRT :: 6
SIGFPE :: 8
SIGILL :: 4
SIGINT :: 2
SIGSEGV :: 11
SIGTERM :: 15
}
when ODIN_OS == "darwin" {
when ODIN_OS == .Linux || ODIN_OS == .FreeBSD || ODIN_OS == .Haiku || ODIN_OS == .OpenBSD || ODIN_OS == .NetBSD || ODIN_OS == .Darwin {
SIG_ERR :: rawptr(~uintptr(0))
SIG_DFL :: rawptr(uintptr(0))
SIG_IGN :: rawptr(uintptr(1))
+4 -10
View File
@@ -2,7 +2,9 @@ package libc
// 7.16 Variable arguments
import "core:intrinsics"
import "base:intrinsics"
import "core:c"
@(private="file")
@(default_calling_convention="none")
@@ -12,15 +14,7 @@ foreign _ {
@(link_name="llvm.va_copy") _va_copy :: proc(dst, src: ^i8) ---
}
// Since there are no types in C with an alignment larger than that of
// max_align_t, which cannot be larger than sizeof(long double) as any other
// exposed type wouldn't be valid C, the maximum alignment possible in a
// strictly conformant C implementation is 16 on the platforms we care about.
// The choice of 4096 bytes for storage of this type is more than enough on all
// relevant platforms.
va_list :: struct #align 16 {
_: [4096]u8,
}
va_list :: c.va_list
va_start :: #force_inline proc(ap: ^va_list, _: any) {
_va_start(cast(^i8)ap)
+112 -147
View File
@@ -2,7 +2,7 @@ package libc
// 7.17 Atomics
import "core:intrinsics"
import "base:intrinsics"
ATOMIC_BOOL_LOCK_FREE :: true
ATOMIC_CHAR_LOCK_FREE :: true
@@ -47,29 +47,30 @@ kill_dependency :: #force_inline proc(value: $T) -> T {
// 7.17.4 Fences
atomic_thread_fence :: #force_inline proc(order: memory_order) {
switch (order) {
case .relaxed:
return
case .consume:
intrinsics.atomic_fence_acq()
case .acquire:
intrinsics.atomic_fence_acq()
case .release:
intrinsics.atomic_fence_rel()
case .acq_rel:
intrinsics.atomic_fence_acqrel()
case .seq_cst:
intrinsics.atomic_fence_acqrel()
assert(order != .relaxed)
assert(order != .consume)
#partial switch order {
case .acquire: intrinsics.atomic_thread_fence(.Acquire)
case .release: intrinsics.atomic_thread_fence(.Release)
case .acq_rel: intrinsics.atomic_thread_fence(.Acq_Rel)
case .seq_cst: intrinsics.atomic_thread_fence(.Seq_Cst)
}
}
atomic_signal_fence :: #force_inline proc(order: memory_order) {
atomic_thread_fence(order)
assert(order != .relaxed)
assert(order != .consume)
#partial switch order {
case .acquire: intrinsics.atomic_signal_fence(.Acquire)
case .release: intrinsics.atomic_signal_fence(.Release)
case .acq_rel: intrinsics.atomic_signal_fence(.Acq_Rel)
case .seq_cst: intrinsics.atomic_signal_fence(.Seq_Cst)
}
}
// 7.17.5 Lock-free property
atomic_is_lock_free :: #force_inline proc(obj: ^$T) -> bool {
return size_of(T) <= 8 && (intrinsics.type_is_integer(T) || intrinsics.type_is_pointer(T))
return intrinsics.atomic_type_is_lock_free(T)
}
// 7.17.6 Atomic integer types
@@ -121,13 +122,10 @@ atomic_store_explicit :: #force_inline proc(object: ^$T, desired: T, order: memo
assert(order != .acquire)
assert(order != .acq_rel)
#partial switch (order) {
case .relaxed:
intrinsics.atomic_store_relaxed(object, desired)
case .release:
intrinsics.atomic_store_rel(object, desired)
case .seq_cst:
intrinsics.atomic_store(object, desired)
#partial switch order {
case .relaxed: intrinsics.atomic_store_explicit(object, desired, .Relaxed)
case .release: intrinsics.atomic_store_explicit(object, desired, .Release)
case .seq_cst: intrinsics.atomic_store_explicit(object, desired, .Seq_Cst)
}
}
@@ -139,36 +137,26 @@ atomic_load_explicit :: #force_inline proc(object: ^$T, order: memory_order) {
assert(order != .release)
assert(order != .acq_rel)
#partial switch (order) {
case .relaxed:
return intrinsics.atomic_load_relaxed(object)
case .consume:
return intrinsics.atomic_load_acq(object)
case .acquire:
return intrinsics.atomic_load_acq(object)
case .seq_cst:
return intrinsics.atomic_load(object)
#partial switch order {
case .relaxed: return intrinsics.atomic_load_explicit(object, .Relaxed)
case .consume: return intrinsics.atomic_load_explicit(object, .Consume)
case .acquire: return intrinsics.atomic_load_explicit(object, .Acquire)
case .seq_cst: return intrinsics.atomic_load_explicit(object, .Seq_Cst)
}
}
atomic_exchange :: #force_inline proc(object: ^$T, desired: T) -> T {
return intrinsics.atomic_xchg(object, desired)
return intrinsics.atomic_exchange(object, desired)
}
atomic_exchange_explicit :: #force_inline proc(object: ^$T, desired: T, order: memory_order) -> T {
switch (order) {
case .relaxed:
return intrinsics.atomic_xchg_relaxed(object, desired)
case .consume:
return intrinsics.atomic_xchg_acq(object, desired)
case .acquire:
return intrinsics.atomic_xchg_acq(object, desired)
case .release:
return intrinsics.atomic_xchg_rel(object, desired)
case .acq_rel:
return intrinsics.atomic_xchg_acqrel(object, desired)
case .seq_cst:
return intrinsics.atomic_xchg(object, desired)
switch order {
case .relaxed: return intrinsics.atomic_exchange_explicit(object, desired, .Relaxed)
case .consume: return intrinsics.atomic_exchange_explicit(object, desired, .Consume)
case .acquire: return intrinsics.atomic_exchange_explicit(object, desired, .Acquire)
case .release: return intrinsics.atomic_exchange_explicit(object, desired, .Release)
case .acq_rel: return intrinsics.atomic_exchange_explicit(object, desired, .Acq_Rel)
case .seq_cst: return intrinsics.atomic_exchange_explicit(object, desired, .Seq_Cst)
}
return false
}
@@ -189,102 +177,104 @@ atomic_exchange_explicit :: #force_inline proc(object: ^$T, desired: T, order: m
// [success = seq_cst, failure = acquire] => failacq
// [success = acquire, failure = relaxed] => acq_failrelaxed
// [success = acq_rel, failure = relaxed] => acqrel_failrelaxed
atomic_compare_exchange_strong :: #force_inline proc(object, expected: ^$T, desired: T) {
value, ok := intrinsics.atomic_cxchg(object, expected^, desired)
atomic_compare_exchange_strong :: #force_inline proc(object, expected: ^$T, desired: T) -> bool {
value, ok := intrinsics.atomic_compare_exchange_strong(object, expected^, desired)
if !ok { expected^ = value }
return ok
}
atomic_compare_exchange_strong_explicit :: #force_inline proc(object, expected: ^$T, desired: T, success, failure: memory_order) {
atomic_compare_exchange_strong_explicit :: #force_inline proc(object, expected: ^$T, desired: T, success, failure: memory_order) -> bool {
assert(failure != .release)
assert(failure != .acq_rel)
value: T; ok: bool
#partial switch (failure) {
#partial switch failure {
case .seq_cst:
assert(success != .relaxed)
#partial switch (success) {
#partial switch success {
case .seq_cst:
value, ok := intrinsics.atomic_cxchg(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_strong_explicit(object, expected^, desired, .Seq_Cst, .Seq_Cst)
case .acquire:
value, ok := intrinsics.atomic_cxchg_acq(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_strong_explicit(object, expected^, desired, .Acquire, .Seq_Cst)
case .consume:
value, ok := intrinsics.atomic_cxchg_acq(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_strong_explicit(object, expected^, desired, .Consume, .Seq_Cst)
case .release:
value, ok := intrinsics.atomic_cxchg_rel(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_strong_explicit(object, expected^, desired, .Release, .Seq_Cst)
case .acq_rel:
value, ok := intrinsics.atomic_cxchg_acqrel(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_strong_explicit(object, expected^, desired, .Acq_Rel, .Seq_Cst)
}
case .relaxed:
assert(success != .release)
#partial switch (success) {
#partial switch success {
case .relaxed:
value, ok := intrinsics.atomic_cxchg_relaxed(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_strong_explicit(object, expected^, desired, .Relaxed, .Relaxed)
case .seq_cst:
value, ok := intrinsics.atomic_cxchg_failrelaxed(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_strong_explicit(object, expected^, desired, .Seq_Cst, .Relaxed)
case .acquire:
value, ok := intrinsics.atomic_cxchg_acq_failrelaxed(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_strong_explicit(object, expected^, desired, .Acquire, .Relaxed)
case .consume:
value, ok := intrinsics.atomic_cxchg_acq_failrelaxed(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_strong_explicit(object, expected^, desired, .Consume, .Relaxed)
case .acq_rel:
value, ok := intrinsics.atomic_cxchg_acqrel_failrelaxed(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_strong_explicit(object, expected^, desired, .Acq_Rel, .Relaxed)
}
case .consume:
fallthrough
assert(success == .seq_cst)
value, ok = intrinsics.atomic_compare_exchange_strong_explicit(object, expected^, desired, .Seq_Cst, .Consume)
case .acquire:
assert(success == .seq_cst)
value, ok := intrinsics.atomic_cxchg_failacq(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_strong_explicit(object, expected^, desired, .Seq_Cst, .Acquire)
}
if !ok { expected^ = value }
return ok
}
atomic_compare_exchange_weak :: #force_inline proc(object, expected: ^$T, desired: T) {
value, ok := intrinsics.atomic_cxchgweak(object, expected^, desired)
atomic_compare_exchange_weak :: #force_inline proc(object, expected: ^$T, desired: T) -> bool {
value, ok := intrinsics.atomic_compare_exchange_weak(object, expected^, desired)
if !ok { expected^ = value }
return ok
}
atomic_compare_exchange_weak_explicit :: #force_inline proc(object, expected: ^$T, desited: T, success, failure: memory_order) {
atomic_compare_exchange_weak_explicit :: #force_inline proc(object, expected: ^$T, desited: T, success, failure: memory_order) -> bool {
assert(failure != .release)
assert(failure != .acq_rel)
value: T; ok: bool
#partial switch (failure) {
#partial switch failure {
case .seq_cst:
assert(success != .relaxed)
#partial switch (success) {
#partial switch success {
case .seq_cst:
value, ok := intrinsics.atomic_cxchgweak(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_weak_explicit(object, expected^, desired, .Seq_Cst, .Seq_Cst)
case .acquire:
value, ok := intrinsics.atomic_cxchgweak_acq(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_weak_explicit(object, expected^, desired, .Acquire, .Seq_Cst)
case .consume:
value, ok := intrinsics.atomic_cxchgweak_acq(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_weak_explicit(object, expected^, desired, .Consume, .Seq_Cst)
case .release:
value, ok := intrinsics.atomic_cxchgweak_rel(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_weak_explicit(object, expected^, desired, .Release, .Seq_Cst)
case .acq_rel:
value, ok := intrinsics.atomic_cxchgweak_acqrel(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_weak_explicit(object, expected^, desired, .Acq_Rel, .Seq_Cst)
}
case .relaxed:
assert(success != .release)
#partial switch (success) {
#partial switch success {
case .relaxed:
value, ok := intrinsics.atomic_cxchgweak_relaxed(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_weak_explicit(object, expected^, desired, .Relaxed, .Relaxed)
case .seq_cst:
value, ok := intrinsics.atomic_cxchgweak_failrelaxed(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_weak_explicit(object, expected^, desired, .Seq_Cst, .Relaxed)
case .acquire:
value, ok := intrinsics.atomic_cxchgweak_acq_failrelaxed(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_weak_explicit(object, expected^, desired, .Acquire, .Relaxed)
case .consume:
value, ok := intrinsics.atomic_cxchgweak_acq_failrelaxed(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_weak_explicit(object, expected^, desired, .Consume, .Relaxed)
case .acq_rel:
value, ok := intrinsics.atomic_cxchgweak_acqrel_failrelaxed(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_weak_explicit(object, expected^, desired, .Acq_Rel, .Relaxed)
}
case .consume:
fallthrough
assert(success == .seq_cst)
value, ok = intrinsics.atomic_compare_exchange_weak_explicit(object, expected^, desired, .Seq_Cst, .Consume)
case .acquire:
assert(success == .seq_cst)
value, ok := intrinsics.atomic_cxchgweak_failacq(object, expected^, desired)
value, ok = intrinsics.atomic_compare_exchange_weak_explicit(object, expected^, desired, .Seq_Cst, .Acquire)
}
if !ok { expected^ = value }
@@ -297,19 +287,14 @@ atomic_fetch_add :: #force_inline proc(object: ^$T, operand: T) -> T {
}
atomic_fetch_add_explicit :: #force_inline proc(object: ^$T, operand: T, order: memory_order) -> T {
switch (order) {
case .relaxed:
return intrinsics.atomic_add_relaxed(object, operand)
case .consume:
return intrinsics.atomic_add_acq(object, operand)
case .acquire:
return intrinsics.atomic_add_acq(object, operand)
case .release:
return intrinsics.atomic_add_rel(object, operand)
case .acq_rel:
return intrinsics.atomic_add_acqrel(object, operand)
case .seq_cst:
return intrinsics.atomic_add(object, operand)
switch order {
case .relaxed: return intrinsics.atomic_add_explicit(object, operand, .Relaxed)
case .consume: return intrinsics.atomic_add_explicit(object, operand, .Consume)
case .acquire: return intrinsics.atomic_add_explicit(object, operand, .Acquire)
case .release: return intrinsics.atomic_add_explicit(object, operand, .Release)
case .acq_rel: return intrinsics.atomic_add_explicit(object, operand, .Acq_Rel)
case: fallthrough
case .seq_cst: return intrinsics.atomic_add_explicit(object, operand, .Seq_Cst)
}
}
@@ -318,19 +303,14 @@ atomic_fetch_sub :: #force_inline proc(object: ^$T, operand: T) -> T {
}
atomic_fetch_sub_explicit :: #force_inline proc(object: ^$T, operand: T, order: memory_order) -> T {
switch (order) {
case .relaxed:
return intrinsics.atomic_sub_relaxed(object, operand)
case .consume:
return intrinsics.atomic_sub_acq(object, operand)
case .acquire:
return intrinsics.atomic_sub_acq(object, operand)
case .release:
return intrinsics.atomic_sub_rel(object, operand)
case .acq_rel:
return intrinsics.atomic_sub_acqrel(object, operand)
case .seq_cst:
return intrinsics.atomic_sub(object, operand)
switch order {
case .relaxed: return intrinsics.atomic_sub_explicit(object, operand, .Relaxed)
case .consume: return intrinsics.atomic_sub_explicit(object, operand, .Consume)
case .acquire: return intrinsics.atomic_sub_explicit(object, operand, .Acquire)
case .release: return intrinsics.atomic_sub_explicit(object, operand, .Release)
case .acq_rel: return intrinsics.atomic_sub_explicit(object, operand, .Acq_Rel)
case: fallthrough
case .seq_cst: return intrinsics.atomic_sub_explicit(object, operand, .Seq_Cst)
}
}
@@ -339,19 +319,14 @@ atomic_fetch_or :: #force_inline proc(object: ^$T, operand: T) -> T {
}
atomic_fetch_or_explicit :: #force_inline proc(object: ^$T, operand: T, order: memory_order) -> T {
switch (order) {
case .relaxed:
return intrinsics.atomic_or_relaxed(object, operand)
case .consume:
return intrinsics.atomic_or_acq(object, operand)
case .acquire:
return intrinsics.atomic_or_acq(object, operand)
case .release:
return intrinsics.atomic_or_rel(object, operand)
case .acq_rel:
return intrinsics.atomic_or_acqrel(object, operand)
case .seq_cst:
return intrinsics.atomic_or(object, operand)
switch order {
case .relaxed: return intrinsics.atomic_or_explicit(object, operand, .Relaxed)
case .consume: return intrinsics.atomic_or_explicit(object, operand, .Consume)
case .acquire: return intrinsics.atomic_or_explicit(object, operand, .Acquire)
case .release: return intrinsics.atomic_or_explicit(object, operand, .Release)
case .acq_rel: return intrinsics.atomic_or_explicit(object, operand, .Acq_Rel)
case: fallthrough
case .seq_cst: return intrinsics.atomic_or_explicit(object, operand, .Seq_Cst)
}
}
@@ -360,19 +335,14 @@ atomic_fetch_xor :: #force_inline proc(object: ^$T, operand: T) -> T {
}
atomic_fetch_xor_explicit :: #force_inline proc(object: ^$T, operand: T, order: memory_order) -> T {
switch (order) {
case .relaxed:
return intrinsics.atomic_xor_relaxed(object, operand)
case .consume:
return intrinsics.atomic_xor_acq(object, operand)
case .acquire:
return intrinsics.atomic_xor_acq(object, operand)
case .release:
return intrinsics.atomic_xor_rel(object, operand)
case .acq_rel:
return intrinsics.atomic_xor_acqrel(object, operand)
case .seq_cst:
return intrinsics.atomic_xor(object, operand)
switch order {
case .relaxed: return intrinsics.atomic_xor_explicit(object, operand, .Relaxed)
case .consume: return intrinsics.atomic_xor_explicit(object, operand, .Consume)
case .acquire: return intrinsics.atomic_xor_explicit(object, operand, .Acquire)
case .release: return intrinsics.atomic_xor_explicit(object, operand, .Release)
case .acq_rel: return intrinsics.atomic_xor_explicit(object, operand, .Acq_Rel)
case: fallthrough
case .seq_cst: return intrinsics.atomic_xor_explicit(object, operand, .Seq_Cst)
}
}
@@ -380,19 +350,14 @@ atomic_fetch_and :: #force_inline proc(object: ^$T, operand: T) -> T {
return intrinsics.atomic_and(object, operand)
}
atomic_fetch_and_explicit :: #force_inline proc(object: ^$T, operand: T, order: memory_order) -> T {
switch (order) {
case .relaxed:
return intrinsics.atomic_and_relaxed(object, operand)
case .consume:
return intrinsics.atomic_and_acq(object, operand)
case .acquire:
return intrinsics.atomic_and_acq(object, operand)
case .release:
return intrinsics.atomic_and_rel(object, operand)
case .acq_rel:
return intrinsics.atomic_and_acqrel(object, operand)
case .seq_cst:
return intrinsics.atomic_and(object, operand)
switch order {
case .relaxed: return intrinsics.atomic_and_explicit(object, operand, .Relaxed)
case .consume: return intrinsics.atomic_and_explicit(object, operand, .Consume)
case .acquire: return intrinsics.atomic_and_explicit(object, operand, .Acquire)
case .release: return intrinsics.atomic_and_explicit(object, operand, .Release)
case .acq_rel: return intrinsics.atomic_and_explicit(object, operand, .Acq_Rel)
case: fallthrough
case .seq_cst: return intrinsics.atomic_and_explicit(object, operand, .Seq_Cst)
}
}
+194 -8
View File
@@ -1,8 +1,13 @@
package libc
when ODIN_OS == "windows" {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == "darwin" {
import "core:io"
when ODIN_OS == .Windows {
foreign import libc {
"system:libucrt.lib",
"system:legacy_stdio_definitions.lib",
}
} else when ODIN_OS == .Darwin {
foreign import libc "system:System.framework"
} else {
foreign import libc "system:c"
@@ -13,7 +18,7 @@ when ODIN_OS == "windows" {
FILE :: struct {}
// MSVCRT compatible.
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
_IOFBF :: 0x0000
_IONBF :: 0x0004
_IOLBF :: 0x0040
@@ -48,7 +53,7 @@ when ODIN_OS == "windows" {
}
// GLIBC and MUSL compatible.
when ODIN_OS == "linux" {
when ODIN_OS == .Linux {
fpos_t :: struct #raw_union { _: [16]char, _: longlong, _: double, }
_IOFBF :: 0
@@ -78,7 +83,59 @@ when ODIN_OS == "linux" {
}
}
when ODIN_OS == "darwin" {
when ODIN_OS == .OpenBSD || ODIN_OS == .NetBSD {
fpos_t :: distinct i64
_IOFBF :: 0
_IOLBF :: 1
_IONBF :: 1
BUFSIZ :: 1024
EOF :: int(-1)
FOPEN_MAX :: 20
FILENAME_MAX :: 1024
SEEK_SET :: 0
SEEK_CUR :: 1
SEEK_END :: 2
foreign libc {
__sF: [3]FILE
}
stdin: ^FILE = &__sF[0]
stdout: ^FILE = &__sF[1]
stderr: ^FILE = &__sF[2]
}
when ODIN_OS == .FreeBSD {
fpos_t :: distinct i64
_IOFBF :: 0
_IOLBF :: 1
_IONBF :: 1
BUFSIZ :: 1024
EOF :: int(-1)
FOPEN_MAX :: 20
FILENAME_MAX :: 1024
SEEK_SET :: 0
SEEK_CUR :: 1
SEEK_END :: 2
foreign libc {
@(link_name="__stderrp") stderr: ^FILE
@(link_name="__stdinp") stdin: ^FILE
@(link_name="__stdoutp") stdout: ^FILE
}
}
when ODIN_OS == .Darwin {
fpos_t :: distinct i64
_IOFBF :: 0
@@ -108,6 +165,36 @@ when ODIN_OS == "darwin" {
}
}
when ODIN_OS == .Haiku {
fpos_t :: distinct i64
_IOFBF :: 0
_IOLBF :: 1
_IONBF :: 2
BUFSIZ :: 8192
EOF :: int(-1)
FOPEN_MAX :: 128
FILENAME_MAX :: 256
L_tmpnam :: 512
SEEK_SET :: 0
SEEK_CUR :: 1
SEEK_END :: 2
TMP_MAX :: 32768
foreign libc {
stderr: ^FILE
stdin: ^FILE
stdout: ^FILE
}
}
@(default_calling_convention="c")
foreign libc {
// 7.21.4 Operations on files
@@ -129,7 +216,7 @@ foreign libc {
fscanf :: proc(stream: ^FILE, format: cstring, #c_vararg args: ..any) -> int ---
printf :: proc(format: cstring, #c_vararg args: ..any) -> int ---
scanf :: proc(format: cstring, #c_vararg args: ..any) -> int ---
snprintf :: proc(s: [^]char, format: cstring, #c_vararg args: ..any) -> int ---
snprintf :: proc(s: [^]char, n: size_t, format: cstring, #c_vararg args: ..any) -> int ---
sscanf :: proc(s, format: cstring, #c_vararg args: ..any) -> int ---
vfprintf :: proc(stream: ^FILE, format: cstring, arg: ^va_list) -> int ---
vfscanf :: proc(stream: ^FILE, format: cstring, arg: ^va_list) -> int ---
@@ -146,7 +233,7 @@ foreign libc {
getc :: proc(stream: ^FILE) -> int ---
getchar :: proc() -> int ---
putc :: proc(c: int, stream: ^FILE) -> int ---
putchar :: proc() -> int ---
putchar :: proc(c: int) -> int ---
puts :: proc(s: cstring) -> int ---
ungetc :: proc(c: int, stream: ^FILE) -> int ---
fread :: proc(ptr: rawptr, size: size_t, nmemb: size_t, stream: ^FILE) -> size_t ---
@@ -165,3 +252,102 @@ foreign libc {
ferror :: proc(stream: ^FILE) -> int ---
perror :: proc(s: cstring) ---
}
to_stream :: proc(file: ^FILE) -> io.Stream {
stream_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte, offset: i64, whence: io.Seek_From) -> (n: i64, err: io.Error) {
unknown_or_eof :: proc(f: ^FILE) -> io.Error {
switch {
case ferror(f) != 0:
return .Unknown
case feof(f) != 0:
return .EOF
case:
return nil
}
}
file := (^FILE)(stream_data)
switch mode {
case .Close:
if fclose(file) != 0 {
return 0, unknown_or_eof(file)
}
case .Flush:
if fflush(file) != 0 {
return 0, unknown_or_eof(file)
}
case .Read:
n = i64(fread(raw_data(p), size_of(byte), len(p), file))
if n == 0 { err = unknown_or_eof(file) }
case .Read_At:
curr := ftell(file)
if curr == -1 {
return 0, unknown_or_eof(file)
}
if fseek(file, long(offset), SEEK_SET) != 0 {
return 0, unknown_or_eof(file)
}
defer fseek(file, long(curr), SEEK_SET)
n = i64(fread(raw_data(p), size_of(byte), len(p), file))
if n == 0 { err = unknown_or_eof(file) }
case .Write:
n = i64(fwrite(raw_data(p), size_of(byte), len(p), file))
if n == 0 { err = unknown_or_eof(file) }
case .Write_At:
curr := ftell(file)
if curr == -1 {
return 0, unknown_or_eof(file)
}
if fseek(file, long(offset), SEEK_SET) != 0 {
return 0, unknown_or_eof(file)
}
defer fseek(file, long(curr), SEEK_SET)
n = i64(fwrite(raw_data(p), size_of(byte), len(p), file))
if n == 0 { err = unknown_or_eof(file) }
case .Seek:
if fseek(file, long(offset), int(whence)) != 0 {
return 0, unknown_or_eof(file)
}
case .Size:
curr := ftell(file)
if curr == -1 {
return 0, unknown_or_eof(file)
}
defer fseek(file, curr, SEEK_SET)
if fseek(file, 0, SEEK_END) != 0 {
return 0, unknown_or_eof(file)
}
n = i64(ftell(file))
if n == -1 {
return 0, unknown_or_eof(file)
}
case .Destroy:
return 0, .Empty
case .Query:
return io.query_utility({ .Close, .Flush, .Read, .Read_At, .Write, .Write_At, .Seek, .Size })
}
return
}
return {
data = file,
procedure = stream_proc,
}
}
+32 -6
View File
@@ -2,15 +2,15 @@ package libc
// 7.22 General utilities
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == "darwin" {
} else when ODIN_OS == .Darwin {
foreign import libc "system:System.framework"
} else {
foreign import libc "system:c"
}
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
RAND_MAX :: 0x7fff
@(private="file")
@@ -24,7 +24,7 @@ when ODIN_OS == "windows" {
}
}
when ODIN_OS == "linux" {
when ODIN_OS == .Linux {
RAND_MAX :: 0x7fffffff
// GLIBC and MUSL only
@@ -40,7 +40,7 @@ when ODIN_OS == "linux" {
}
when ODIN_OS == "darwin" {
when ODIN_OS == .Darwin {
RAND_MAX :: 0x7fffffff
// GLIBC and MUSL only
@@ -88,7 +88,6 @@ foreign libc {
srand :: proc(seed: uint) ---
// 7.22.3 Memory management functions
aligned_alloc :: proc(aligment, size: size_t) -> rawptr ---
calloc :: proc(nmemb, size: size_t) -> rawptr ---
free :: proc(ptr: rawptr) ---
malloc :: proc(size: size_t) -> rawptr ---
@@ -125,3 +124,30 @@ foreign libc {
mbstowcs :: proc(pwcs: ^wchar_t, s: cstring, n: size_t) -> size_t ---
wcstombs :: proc(s: [^]char, pwcs: ^wchar_t, n: size_t) -> size_t ---
}
aligned_alloc :: #force_inline proc "c" (alignment, size: size_t) -> rawptr {
when ODIN_OS == .Windows {
foreign libc {
_aligned_malloc :: proc(size, alignment: size_t) -> rawptr ---
}
return _aligned_malloc(size=size, alignment=alignment)
} else {
foreign libc {
aligned_alloc :: proc(alignment, size: size_t) -> rawptr ---
}
return aligned_alloc(alignment=alignment, size=size)
}
}
aligned_free :: #force_inline proc "c" (ptr: rawptr) {
when ODIN_OS == .Windows {
foreign libc {
_aligned_free :: proc(ptr: rawptr) ---
}
_aligned_free(ptr)
} else {
free(ptr)
}
}
+3 -3
View File
@@ -1,12 +1,12 @@
package libc
import "core:runtime"
import "base:runtime"
// 7.24 String handling
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == "darwin" {
} else when ODIN_OS == .Darwin {
foreign import libc "system:System.framework"
} else {
foreign import libc "system:c"
+7 -7
View File
@@ -5,10 +5,10 @@ package libc
thrd_start_t :: proc "c" (rawptr) -> int
tss_dtor_t :: proc "c" (rawptr)
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
foreign import libc {
"system:libucrt.lib",
"system:msvcprt.lib"
"system:msvcprt.lib",
}
thrd_success :: 0 // _Thrd_success
@@ -44,7 +44,7 @@ when ODIN_OS == "windows" {
@(link_name="_Cnd_destroy") cnd_destroy :: proc(cond: ^cnd_t) ---
@(link_name="_Cnd_init") cnd_init :: proc(cond: ^cnd_t) -> int ---
@(link_name="_Cnd_signal") cnd_signal :: proc(cond: ^cnd_t) -> int ---
@(link_name="_Cnd_timedwait") cnd_timedwait :: proc(cond: ^cnd_t, ts: ^timespec) -> int ---
@(link_name="_Cnd_timedwait") cnd_timedwait :: proc(cond: ^cnd_t, mtx: ^mtx_t, ts: ^timespec) -> int ---
@(link_name="_Cnd_wait") cnd_wait :: proc(cond: ^cnd_t, mtx: ^mtx_t) -> int ---
// 7.26.4 Mutex functions
@@ -74,10 +74,10 @@ when ODIN_OS == "windows" {
}
// GLIBC and MUSL compatible constants and types.
when ODIN_OS == "linux" {
when ODIN_OS == .Linux {
foreign import libc {
"system:c",
"system:pthread"
"system:pthread",
}
thrd_success :: 0
@@ -108,7 +108,7 @@ when ODIN_OS == "linux" {
cnd_destroy :: proc(cond: ^cnd_t) ---
cnd_init :: proc(cond: ^cnd_t) -> int ---
cnd_signal :: proc(cond: ^cnd_t) -> int ---
cnd_timedwait :: proc(cond: ^cnd_t, ts: ^timespec) -> int ---
cnd_timedwait :: proc(cond: ^cnd_t, mtx: ^mtx_t, ts: ^timespec) -> int ---
cnd_wait :: proc(cond: ^cnd_t, mtx: ^mtx_t) -> int ---
// 7.26.4 Mutex functions
@@ -138,6 +138,6 @@ when ODIN_OS == "linux" {
}
when ODIN_OS == "darwin" {
when ODIN_OS == .Darwin {
// TODO: find out what this is meant to be!
}
+12 -7
View File
@@ -2,9 +2,9 @@ package libc
// 7.27 Date and time
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == "darwin" {
} else when ODIN_OS == .Darwin {
foreign import libc "system:System.framework"
} else {
foreign import libc "system:c"
@@ -12,7 +12,7 @@ when ODIN_OS == "windows" {
// We enforce 64-bit time_t and timespec as there is no reason to use 32-bit as
// we approach the 2038 problem. Windows has defaulted to this since VC8 (2005).
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
foreign libc {
// 7.27.2 Time manipulation functions
clock :: proc() -> clock_t ---
@@ -35,17 +35,17 @@ when ODIN_OS == "windows" {
clock_t :: distinct long
time_t :: distinct i64
timespec :: struct #align 8 {
timespec :: struct #align(8) {
tv_sec: time_t,
tv_nsec: long,
}
tm :: struct #align 8 {
tm :: struct #align(8) {
tm_sec, tm_min, tm_hour, tm_mday, tm_mon, tm_year, tm_wday, tm_yday, tm_isdst: int,
}
}
when ODIN_OS == "linux" || ODIN_OS == "freebsd" || ODIN_OS == "darwin" {
when ODIN_OS == .Linux || ODIN_OS == .FreeBSD || ODIN_OS == .Darwin || ODIN_OS == .OpenBSD || ODIN_OS == .NetBSD || ODIN_OS == .Haiku {
@(default_calling_convention="c")
foreign libc {
// 7.27.2 Time manipulation functions
@@ -63,7 +63,12 @@ when ODIN_OS == "linux" || ODIN_OS == "freebsd" || ODIN_OS == "darwin" {
strftime :: proc(s: [^]char, maxsize: size_t, format: cstring, timeptr: ^tm) -> size_t ---
}
CLOCKS_PER_SEC :: 1000000
when ODIN_OS == .OpenBSD {
CLOCKS_PER_SEC :: 100
} else {
CLOCKS_PER_SEC :: 1000000
}
TIME_UTC :: 1
time_t :: distinct i64
+2
View File
@@ -2,6 +2,8 @@ package libc
import "core:c"
#assert(!ODIN_NO_CRT, `"core:c/libc" cannot be imported when '-no-crt' is used`)
char :: c.char // assuming -funsigned-char
schar :: c.schar
+2 -2
View File
@@ -2,9 +2,9 @@ package libc
// 7.28 Unicode utilities
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == "darwin" {
} else when ODIN_OS == .Darwin {
foreign import libc "system:System.framework"
} else {
foreign import libc "system:c"
+3 -3
View File
@@ -2,9 +2,9 @@ package libc
// 7.29 Extended multibyte and wide character utilities
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == "darwin" {
} else when ODIN_OS == .Darwin {
foreign import libc "system:System.framework"
} else {
foreign import libc "system:c"
@@ -98,7 +98,7 @@ foreign libc {
}
// Large enough and aligned enough for any wide-spread in-use libc.
mbstate_t :: struct #align 16 { _: [32]char, }
mbstate_t :: struct #align(16) { _: [32]char, }
// Odin does not have default argument promotion so the need for a separate type
// here isn't necessary, though make it distinct just to be safe.
+18 -7
View File
@@ -2,27 +2,38 @@ package libc
// 7.30 Wide character classification and mapping utilities
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == "darwin" {
} else when ODIN_OS == .Darwin {
foreign import libc "system:System.framework"
} else {
foreign import libc "system:c"
}
when ODIN_OS == "windows" {
when ODIN_OS == .Windows {
wctrans_t :: distinct wchar_t
wctype_t :: distinct ushort
}
when ODIN_OS == "linux" {
} else when ODIN_OS == .Linux {
wctrans_t :: distinct intptr_t
wctype_t :: distinct ulong
}
when ODIN_OS == "darwin" {
} else when ODIN_OS == .Darwin {
wctrans_t :: distinct int
wctype_t :: distinct u32
} else when ODIN_OS == .OpenBSD || ODIN_OS == .NetBSD {
wctrans_t :: distinct rawptr
wctype_t :: distinct rawptr
} else when ODIN_OS == .FreeBSD {
wctrans_t :: distinct int
wctype_t :: distinct ulong
} else when ODIN_OS == .Haiku {
wctrans_t :: distinct i32
wctype_t :: distinct i32
}
@(default_calling_convention="c")
+112 -79
View File
@@ -12,7 +12,7 @@ package compress
import "core:io"
import "core:bytes"
import "core:runtime"
import "base:runtime"
/*
These settings bound how much compression algorithms will allocate for their output buffer.
@@ -20,10 +20,9 @@ import "core:runtime"
*/
/*
When a decompression routine doesn't stream its output, but writes to a buffer,
we pre-allocate an output buffer to speed up decompression. The default is 1 MiB.
*/
// When a decompression routine doesn't stream its output, but writes to a buffer,
// we pre-allocate an output buffer to speed up decompression. The default is 1 MiB.
COMPRESS_OUTPUT_ALLOCATE_MIN :: int(#config(COMPRESS_OUTPUT_ALLOCATE_MIN, 1 << 20))
/*
@@ -34,20 +33,18 @@ COMPRESS_OUTPUT_ALLOCATE_MIN :: int(#config(COMPRESS_OUTPUT_ALLOCATE_MIN, 1 << 2
*/
when size_of(uintptr) == 8 {
/*
For 64-bit platforms, we set the default max buffer size to 4 GiB,
which is GZIP and PKZIP's max payload size.
*/
// For 64-bit platforms, we set the default max buffer size to 4 GiB,
// which is GZIP and PKZIP's max payload size.
COMPRESS_OUTPUT_ALLOCATE_MAX :: int(#config(COMPRESS_OUTPUT_ALLOCATE_MAX, 1 << 32))
} else {
/*
For 32-bit platforms, we set the default max buffer size to 512 MiB.
*/
// For 32-bit platforms, we set the default max buffer size to 512 MiB.
COMPRESS_OUTPUT_ALLOCATE_MAX :: int(#config(COMPRESS_OUTPUT_ALLOCATE_MAX, 1 << 29))
}
Error :: union {
Error :: union #shared_nil {
General_Error,
Deflate_Error,
ZLIB_Error,
@@ -58,6 +55,7 @@ Error :: union {
}
General_Error :: enum {
None = 0,
File_Not_Found,
Cannot_Open_File,
File_Too_Short,
@@ -68,14 +66,14 @@ General_Error :: enum {
Incompatible_Options,
Unimplemented,
/*
Memory errors
*/
// Memory errors
Allocation_Failed,
Resize_Failed,
}
GZIP_Error :: enum {
None = 0,
Invalid_GZIP_Signature,
Reserved_Flag_Set,
Invalid_Extra_Data,
@@ -84,22 +82,22 @@ GZIP_Error :: enum {
Payload_Length_Invalid,
Payload_CRC_Invalid,
/*
GZIP's payload can be a maximum of max(u32le), or 4 GiB.
If you tell it you expect it to contain more, that's obviously an error.
*/
Payload_Size_Exceeds_Max_Payload,
/*
For buffered instead of streamed output, the payload size can't exceed
the max set by the `COMPRESS_OUTPUT_ALLOCATE_MAX` switch in compress/common.odin.
// GZIP's payload can be a maximum of max(u32le), or 4 GiB.
// If you tell it you expect it to contain more, that's obviously an error.
Payload_Size_Exceeds_Max_Payload,
// For buffered instead of streamed output, the payload size can't exceed
// the max set by the `COMPRESS_OUTPUT_ALLOCATE_MAX` switch in compress/common.odin.
//
// You can tweak this setting using `-define:COMPRESS_OUTPUT_ALLOCATE_MAX=size_in_bytes`
You can tweak this setting using `-define:COMPRESS_OUTPUT_ALLOCATE_MAX=size_in_bytes`
*/
Output_Exceeds_COMPRESS_OUTPUT_ALLOCATE_MAX,
}
ZIP_Error :: enum {
None = 0,
Invalid_ZIP_File_Signature,
Unexpected_Signature,
Insert_Next_Disk,
@@ -107,6 +105,7 @@ ZIP_Error :: enum {
}
ZLIB_Error :: enum {
None = 0,
Unsupported_Window_Size,
FDICT_Unsupported,
Unsupported_Compression_Level,
@@ -114,6 +113,7 @@ ZLIB_Error :: enum {
}
Deflate_Error :: enum {
None = 0,
Huffman_Bad_Sizes,
Huffman_Bad_Code_Lengths,
Inflate_Error,
@@ -123,7 +123,6 @@ Deflate_Error :: enum {
BType_3,
}
// General I/O context for ZLIB, LZW, etc.
Context_Memory_Input :: struct #packed {
input_data: []u8,
@@ -133,13 +132,17 @@ Context_Memory_Input :: struct #packed {
code_buffer: u64,
num_bits: u64,
/*
If we know the data size, we can optimize the reads and writes.
*/
// If we know the data size, we can optimize the reads and writes.
size_packed: i64,
size_unpacked: i64,
}
#assert(size_of(Context_Memory_Input) == 64)
when size_of(rawptr) == 8 {
#assert(size_of(Context_Memory_Input) == 64)
} else {
// e.g. `-target:windows_i386`
#assert(size_of(Context_Memory_Input) == 52)
}
Context_Stream_Input :: struct #packed {
input_data: []u8,
@@ -150,18 +153,16 @@ Context_Stream_Input :: struct #packed {
code_buffer: u64,
num_bits: u64,
/*
If we know the data size, we can optimize the reads and writes.
*/
// If we know the data size, we can optimize the reads and writes.
size_packed: i64,
size_unpacked: i64,
/*
Flags:
`input_fully_in_memory`
true = This tells us we read input from `input_data` exclusively. [] = EOF.
false = Try to refill `input_data` from the `input` stream.
*/
// Flags:
// `input_fully_in_memory`
// true = This tells us we read input from `input_data` exclusively. [] = EOF.
// false = Try to refill `input_data` from the `input` stream.
input_fully_in_memory: b8,
padding: [1]u8,
@@ -174,14 +175,13 @@ Context_Stream_Input :: struct #packed {
This simplifies end-of-stream handling where bits may be left in the bit buffer.
*/
// TODO: Make these return compress.Error errors.
input_size_from_memory :: proc(z: ^Context_Memory_Input) -> (res: i64, err: Error) {
return i64(len(z.input_data)), nil
}
input_size_from_stream :: proc(z: ^Context_Stream_Input) -> (res: i64, err: Error) {
return io.size(z.input), nil
res, _ = io.size(z.input)
return
}
input_size :: proc{input_size_from_memory, input_size_from_stream}
@@ -205,25 +205,19 @@ read_slice_from_memory :: #force_inline proc(z: ^Context_Memory_Input, size: int
@(optimization_mode="speed")
read_slice_from_stream :: #force_inline proc(z: ^Context_Stream_Input, size: int) -> (res: []u8, err: io.Error) {
// TODO: REMOVE ALL USE OF context.temp_allocator here
// there is literally no need for it
b := make([]u8, size, context.temp_allocator)
_, e := z.input->impl_read(b[:])
if e == .None {
return b, .None
}
return []u8{}, e
_ = io.read(z.input, b[:]) or_return
return b, nil
}
read_slice :: proc{read_slice_from_memory, read_slice_from_stream}
@(optimization_mode="speed")
read_data :: #force_inline proc(z: ^$C, $T: typeid) -> (res: T, err: io.Error) {
b, e := read_slice(z, size_of(T))
if e == .None {
return (^T)(&b[0])^, .None
}
return T{}, e
b := read_slice(z, size_of(T)) or_return
return (^T)(&b[0])^, nil
}
@(optimization_mode="speed")
@@ -240,20 +234,14 @@ read_u8_from_memory :: #force_inline proc(z: ^Context_Memory_Input) -> (res: u8,
@(optimization_mode="speed")
read_u8_from_stream :: #force_inline proc(z: ^Context_Stream_Input) -> (res: u8, err: io.Error) {
b, e := read_slice_from_stream(z, 1)
if e == .None {
return b[0], .None
}
return 0, e
b := read_slice_from_stream(z, 1) or_return
return b[0], nil
}
read_u8 :: proc{read_u8_from_memory, read_u8_from_stream}
/*
You would typically only use this at the end of Inflate, to drain bits from the code buffer
preferentially.
*/
// You would typically only use this at the end of Inflate, to drain bits from the code buffer
// preferentially.
@(optimization_mode="speed")
read_u8_prefer_code_buffer_lsb :: #force_inline proc(z: ^$C) -> (res: u8, err: io.Error) {
if z.num_bits >= 8 {
@@ -287,17 +275,32 @@ peek_data_from_memory :: #force_inline proc(z: ^Context_Memory_Input, $T: typeid
}
}
@(optimization_mode="speed")
peek_data_at_offset_from_memory :: #force_inline proc(z: ^Context_Memory_Input, $T: typeid, #any_int offset: int) -> (res: T, err: io.Error) {
size :: size_of(T)
#no_bounds_check {
if len(z.input_data) >= size + offset {
buf := z.input_data[offset:][:size]
return (^T)(&buf[0])^, .None
}
}
if len(z.input_data) == 0 {
return T{}, .EOF
} else {
return T{}, .Short_Buffer
}
}
@(optimization_mode="speed")
peek_data_from_stream :: #force_inline proc(z: ^Context_Stream_Input, $T: typeid) -> (res: T, err: io.Error) {
size :: size_of(T)
// Get current position to read from.
curr, e1 := z.input->impl_seek(0, .Current)
if e1 != .None {
return T{}, e1
}
r, e2 := io.to_reader_at(z.input)
if !e2 {
curr := z.input->impl_seek(0, .Current) or_return
r, e1 := io.to_reader_at(z.input)
if !e1 {
return T{}, .Empty
}
when size <= 128 {
@@ -305,8 +308,8 @@ peek_data_from_stream :: #force_inline proc(z: ^Context_Stream_Input, $T: typeid
} else {
b := make([]u8, size, context.temp_allocator)
}
_, e3 := io.read_at(r, b[:], curr)
if e3 != .None {
_, e2 := io.read_at(r, b[:], curr)
if e2 != .None {
return T{}, .Empty
}
@@ -314,7 +317,37 @@ peek_data_from_stream :: #force_inline proc(z: ^Context_Stream_Input, $T: typeid
return res, .None
}
peek_data :: proc{peek_data_from_memory, peek_data_from_stream}
@(optimization_mode="speed")
peek_data_at_offset_from_stream :: #force_inline proc(z: ^Context_Stream_Input, $T: typeid, #any_int offset: int) -> (res: T, err: io.Error) {
size :: size_of(T)
// Get current position to return to.
cur_pos := z.input->impl_seek(0, .Current) or_return
// Seek to offset.
pos := z.input->impl_seek(offset, .Start) or_return
r, e3 := io.to_reader_at(z.input)
if !e3 {
return T{}, .Empty
}
when size <= 128 {
b: [size]u8
} else {
b := make([]u8, size, context.temp_allocator)
}
_, e4 := io.read_at(r, b[:], pos)
if e4 != .None {
return T{}, .Empty
}
// Return read head to original position.
z.input->impl_seek(cur_pos, .Start)
res = (^T)(&b[0])^
return res, .None
}
peek_data :: proc{peek_data_from_memory, peek_data_from_stream, peek_data_at_offset_from_memory, peek_data_at_offset_from_stream}
@@ -400,7 +433,7 @@ peek_bits_lsb_from_memory :: #force_inline proc(z: ^Context_Memory_Input, width:
if z.num_bits < u64(width) {
refill_lsb(z)
}
return u32(z.code_buffer & ~(~u64(0) << width))
return u32(z.code_buffer &~ (~u64(0) << width))
}
@(optimization_mode="speed")
@@ -408,7 +441,7 @@ peek_bits_lsb_from_stream :: #force_inline proc(z: ^Context_Stream_Input, width:
if z.num_bits < u64(width) {
refill_lsb(z)
}
return u32(z.code_buffer & ~(~u64(0) << width))
return u32(z.code_buffer &~ (~u64(0) << width))
}
peek_bits_lsb :: proc{peek_bits_lsb_from_memory, peek_bits_lsb_from_stream}
@@ -416,13 +449,13 @@ peek_bits_lsb :: proc{peek_bits_lsb_from_memory, peek_bits_lsb_from_stream}
@(optimization_mode="speed")
peek_bits_no_refill_lsb_from_memory :: #force_inline proc(z: ^Context_Memory_Input, width: u8) -> u32 {
assert(z.num_bits >= u64(width))
return u32(z.code_buffer & ~(~u64(0) << width))
return u32(z.code_buffer &~ (~u64(0) << width))
}
@(optimization_mode="speed")
peek_bits_no_refill_lsb_from_stream :: #force_inline proc(z: ^Context_Stream_Input, width: u8) -> u32 {
assert(z.num_bits >= u64(width))
return u32(z.code_buffer & ~(~u64(0) << width))
return u32(z.code_buffer &~ (~u64(0) << width))
}
peek_bits_no_refill_lsb :: proc{peek_bits_no_refill_lsb_from_memory, peek_bits_no_refill_lsb_from_stream}
@@ -473,4 +506,4 @@ discard_to_next_byte_lsb_from_stream :: proc(z: ^Context_Stream_Input) {
consume_bits_lsb(z, discard)
}
discard_to_next_byte_lsb :: proc{discard_to_next_byte_lsb_from_memory, discard_to_next_byte_lsb_from_stream};
discard_to_next_byte_lsb :: proc{discard_to_next_byte_lsb_from_memory, discard_to_next_byte_lsb_from_stream}
+3 -3
View File
@@ -1,5 +1,5 @@
//+ignore
package gzip
//+build ignore
package compress_gzip
/*
Copyright 2021 Jeroen van Rijn <nom@duclavier.com>.
@@ -45,7 +45,7 @@ main :: proc() {
if len(args) < 2 {
stderr("No input file specified.\n")
err := load(slice=TEST, buf=&buf, known_gzip_size=len(TEST))
err := load(data=TEST, buf=&buf, known_gzip_size=len(TEST))
if err == nil {
stdout("Displaying test vector: ")
stdout(bytes.buffer_to_string(&buf))

Some files were not shown because too many files have changed in this diff Show More