Compare commits

...

1657 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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 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 b7b9a016d3 Merge branch 'master' into multiple-return-abi-experiment 2022-11-23 22:48:56 +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 0a0db23b17 Remove copy elision code 2022-11-22 15:49:27 +00:00
gingerBill 02a8bba02e Merge branch 'master' into fix/freebsd-syscall 2022-07-24 22:27:45 +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
730 changed files with 113387 additions and 45510 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
+20 -13
View File
@@ -58,8 +58,8 @@ jobs:
- uses: actions/checkout@v1
- name: Download LLVM, botan and setup PATH
run: |
brew install llvm@11 botan
echo "/usr/local/opt/llvm@11/bin" >> $GITHUB_PATH
brew install llvm@13 botan
echo "/usr/local/opt/llvm@13/bin" >> $GITHUB_PATH
TMP_PATH=$(xcrun --show-sdk-path)/user/include
echo "CPATH=$TMP_PATH" >> $GITHUB_ENV
- name: build odin
@@ -104,13 +104,13 @@ jobs:
run: ./odin check examples/all -vet -strict-style -target:linux_arm64
timeout-minutes: 10
build_windows:
runs-on: windows-2019
runs-on: windows-2022
steps:
- uses: actions/checkout@v1
- 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
@@ -121,58 +121,65 @@ jobs:
- 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
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
cd tests\core
call build.bat
timeout-minutes: 10
- name: Vendor library 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\vendor
call build.bat
timeout-minutes: 10
- name: Odin internals 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\internal
call build.bat
timeout-minutes: 10
- 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 (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 -target:windows_i386
timeout-minutes: 10
+11 -5
View File
@@ -7,24 +7,26 @@ on:
jobs:
build_windows:
runs-on: windows-2019
if: github.repository == 'odin-lang/Odin'
runs-on: windows-2022
steps:
- uses: actions/checkout@v1
- 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
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 core dist
@@ -37,6 +39,7 @@ jobs:
name: windows_artifacts
path: dist
build_ubuntu:
if: github.repository == 'odin-lang/Odin'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
@@ -50,6 +53,7 @@ jobs:
run: |
mkdir dist
cp odin dist
cp LICENSE dist
cp libLLVM* dist
cp -r shared dist
cp -r core dist
@@ -61,13 +65,14 @@ jobs:
name: ubuntu_artifacts
path: dist
build_macos:
if: github.repository == 'odin-lang/Odin'
runs-on: macOS-latest
steps:
- uses: actions/checkout@v1
- name: Download LLVM and setup PATH
run: |
brew install llvm@11
echo "/usr/local/opt/llvm@11/bin" >> $GITHUB_PATH
brew install llvm@13
echo "/usr/local/opt/llvm@13/bin" >> $GITHUB_PATH
TMP_PATH=$(xcrun --show-sdk-path)/user/include
echo "CPATH=$TMP_PATH" >> $GITHUB_ENV
- name: build odin
@@ -78,6 +83,7 @@ jobs:
run: |
mkdir dist
cp odin dist
cp LICENSE dist
cp -r shared dist
cp -r core dist
cp -r vendor dist
+2 -2
View File
@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Close Stale Issues
uses: actions/stale@v4.1.0
uses: actions/stale@v7.0.0
with:
# stale-issue-message: |
# Hello!
@@ -36,7 +36,7 @@ jobs:
# 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: 30
days-before-close: -1
exempt-draft-pr: true
ascending: true
operations-per-run: 1000
+6 -1
View File
@@ -22,6 +22,10 @@ bld/
[Oo]bj/
[Ll]og/
![Cc]ore/[Ll]og/
tests/documentation/verify/
tests/documentation/all.odin-doc
tests/internal/test_map
tests/internal/test_rtti
# Visual Studio 2015 cache/options directory
.vs/
# Visual Studio Code options directory
@@ -268,6 +272,7 @@ bin/
# - Linux/MacOS
odin
!odin/
odin.dSYM
*.bin
demo.bin
@@ -284,4 +289,4 @@ shared/
*.sublime-workspace
examples/bug/
build.sh
!core/debug/
!core/debug/
BIN
View File
Binary file not shown.
+1 -1
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/odinlang">
<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">
Binary file not shown.
Binary file not shown.
+30 -10
View File
@@ -3,18 +3,20 @@
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
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" (
echo ERROR: please run this from MSVC x64 native tools command prompt, 32-bit target is not supported!
exit /b 1
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 (
@@ -48,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
@@ -62,14 +70,26 @@ 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
+76 -136
View File
@@ -1,123 +1,90 @@
#!/usr/bin/env bash
#!/usr/bin/env sh
set -eu
: ${CXX=clang++}
: ${CPPFLAGS=}
: ${CXX=clang++}
: ${CXXFLAGS=}
: ${LDFLAGS=}
: ${ODIN_VERSION=dev-$(date +"%Y-%m")}
: ${LLVM_CONFIG=}
CPPFLAGS="$CPPFLAGS -DODIN_VERSION_RAW=\"$ODIN_VERSION\""
CPPFLAGS="$CPPFLAGS -DODIN_VERSION_RAW=\"dev-$(date +"%Y-%m")\""
CXXFLAGS="$CXXFLAGS -std=c++14"
LDFLAGS="$LDFLAGS -pthread -lm -lstdc++"
GIT_SHA=$(git rev-parse --short HEAD || :)
if [ "$GIT_SHA" ]; then CPPFLAGS="$CPPFLAGS -DGIT_SHA=\"$GIT_SHA\""; fi
DISABLED_WARNINGS="-Wno-switch -Wno-macro-redefined -Wno-unused-value"
OS=$(uname)
LDFLAGS="$LDFLAGS -pthread -lm -lstdc++"
OS_ARCH="$(uname -m)"
OS_NAME="$(uname -s)"
panic() {
printf "%s\n" "$1"
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
}
version() { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; }
config_darwin() {
ARCH=$(uname -m)
: ${LLVM_CONFIG=llvm-config}
# allow for arm only llvm's with version 13
if [ ARCH == arm64 ]; then
MIN_LLVM_VERSION=("13.0.0")
if [ -z "$LLVM_CONFIG" ]; then
# darwin, linux, openbsd
if [ -n "$(command -v llvm-config-17)" ]; then LLVM_CONFIG="llvm-config-17"
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-config17)" ]; then LLVM_CONFIG="llvm-config-17"
elif [ -n "$(command -v llvm-config13)" ]; then LLVM_CONFIG="llvm-config-13"
elif [ -n "$(command -v llvm-config12)" ]; then LLVM_CONFIG="llvm-config-12"
elif [ -n "$(command -v llvm-config11)" ]; then LLVM_CONFIG="llvm-config-11"
# fallback
elif [ -n "$(command -v llvm-config)" ]; then LLVM_CONFIG="llvm-config"
else
# allow for x86 / amd64 all llvm versions beginning from 11
MIN_LLVM_VERSION=("11.1.0")
error "No llvm-config command found. Set LLVM_CONFIG to proceed."
fi
fi
if [ $(version $($LLVM_CONFIG --version)) -lt $(version $MIN_LLVM_VERSION) ]; then
if [ ARCH == arm64 ]; then
panic "Requirement: llvm-config must be base version 13 for arm64"
else
panic "Requirement: llvm-config must be base version greater than 11 for amd64/x86"
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 ]); then
error "Invalid LLVM version $LLVM_VERSION: must be 11, 12, 13, 14 or 17"
fi
case "$OS_NAME" in
Darwin)
if [ "$OS_ARCH" == "arm64" ]; then
if [ $LLVM_VERSION_MAJOR -lt 13 ] || [ $LLVM_VERSION_MAJOR -gt 17 ]; then
error "Darwin Arm64 requires LLVM 13, 14 or 17"
fi
fi
MAX_LLVM_VERSION=("14.999.999")
if [ $(version $($LLVM_CONFIG --version)) -gt $(version $MAX_LLVM_VERSION) ]; then
echo "Tried to use " $(which $LLVM_CONFIG) "version" $($LLVM_CONFIG --version)
panic "Requirement: llvm-config must be base version smaller than 15"
fi
LDFLAGS="$LDFLAGS -liconv -ldl"
CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)"
LDFLAGS="$LDFLAGS -liconv -ldl -framework System"
LDFLAGS="$LDFLAGS -lLLVM-C"
}
config_freebsd() {
: ${LLVM_CONFIG=}
if [ ! "$LLVM_CONFIG" ]; then
if which llvm-config11 > /dev/null 2>&1; then
LLVM_CONFIG=llvm-config11
elif which llvm-config12 > /dev/null 2>&1; then
LLVM_CONFIG=llvm-config12
elif which llvm-config13 > /dev/null 2>&1; then
LLVM_CONFIG=llvm-config13
else
panic "Unable to find LLVM-config"
fi
fi
;;
FreeBSD)
CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)"
LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs)"
}
config_openbsd() {
: ${LLVM_CONFIG=/usr/local/bin/llvm-config}
LDFLAGS="$LDFLAGS -liconv"
;;
Linux)
CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)"
LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs)"
}
config_linux() {
: ${LLVM_CONFIG=}
if [ ! "$LLVM_CONFIG" ]; then
if which llvm-config > /dev/null 2>&1; then
LLVM_CONFIG=llvm-config
elif which llvm-config-11 > /dev/null 2>&1; then
LLVM_CONFIG=llvm-config-11
elif which llvm-config-11-64 > /dev/null 2>&1; then
LLVM_CONFIG=llvm-config-11-64
else
panic "Unable to find LLVM-config"
fi
fi
MIN_LLVM_VERSION=("11.0.0")
if [ $(version $($LLVM_CONFIG --version)) -lt $(version $MIN_LLVM_VERSION) ]; then
echo "Tried to use " $(which $LLVM_CONFIG) "version" $($LLVM_CONFIG --version)
panic "Requirement: llvm-config must be base version greater than 11"
fi
MAX_LLVM_VERSION=("14.999.999")
if [ $(version $($LLVM_CONFIG --version)) -gt $(version $MAX_LLVM_VERSION) ]; then
echo "Tried to use " $(which $LLVM_CONFIG) "version" $($LLVM_CONFIG --version)
panic "Requirement: llvm-config must be base version smaller than 15"
fi
LDFLAGS="$LDFLAGS -ldl"
CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)"
LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs --libfiles) -Wl,-rpath=\$ORIGIN"
# Creates a copy of the llvm library in the build dir, this is meant to support compiler explorer.
# The annoyance is that this copy can be cluttering the development folder. TODO: split staging folders
# for development and compiler explorer builds
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)"
;;
*)
error "Platform \"$OS_NAME\" unsupported"
;;
esac
build_odin() {
case $1 in
@@ -128,13 +95,20 @@ build_odin() {
EXTRAFLAGS="-O3"
;;
release-native)
EXTRAFLAGS="-O3 -march=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"
;;
*)
panic "Build mode unsupported!"
error "Build mode \"$1\" unsupported!"
;;
esac
set -x
@@ -146,54 +120,20 @@ run_demo() {
./odin run examples/demo/demo.odin -file
}
have_which() {
if ! which which > /dev/null 2>&1; then
panic "Could not find \`which\`"
fi
}
have_which
case $OS in
Linux)
config_linux
;;
Darwin)
config_darwin
;;
OpenBSD)
config_openbsd
;;
FreeBSD)
config_freebsd
;;
*)
panic "Platform unsupported!"
esac
if [[ $# -eq 0 ]]; then
if [ $# -eq 0 ]; then
build_odin debug
run_demo
exit 0
fi
if [[ $# -eq 1 ]]; then
elif [ $# -eq 1 ]; then
case $1 in
report)
if [[ ! -f "./odin" ]]; then
build_odin debug
fi
[ ! -f "./odin" ] && build_odin debug
./odin report
exit 0
;;
*)
build_odin $1
;;
esac
run_demo
exit 0
else
panic "Too many arguments!"
error "Too many arguments!"
fi
+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 -44
View File
@@ -14,51 +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_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
}
+26 -76
View File
@@ -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)
@@ -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 {
@@ -305,39 +296,20 @@ reader_write_to :: proc(b: ^Reader, w: io.Writer) -> (n: i64, err: io.Error) {
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 {
+25 -36
View File
@@ -159,7 +159,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 +173,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 +214,35 @@ 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
}
// writer_to_stream converts a Writer into an io.Stream
writer_to_writer :: proc(b: ^Writer) -> (s: io.Writer) {
return writer_to_stream(b)
}
@(private)
_writer_vtable := io.Stream_VTable{
impl_destroy = proc(s: io.Stream) -> io.Error {
b := (^Writer)(s.stream_data)
_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 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)
},
return
case .Query:
return io.query_utility({.Flush, .Write, .Destroy, .Query})
}
return 0, .Empty
}
+10 -2
View File
@@ -94,7 +94,15 @@ cap :: proc(array: Array_Type) -> int ---
size_of :: proc($T: typeid) -> int ---
align_of :: proc($T: typeid) -> int ---
offset_of :: proc($T: typeid) -> uintptr ---
// 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 ---
@@ -109,7 +117,7 @@ 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, ...) ---
expand_values :: proc(value: Struct_Or_Array) -> (A, B, C, ...) ---
min :: proc(values: ..T) -> T ---
max :: proc(values: ..T) -> T ---
+31 -61
View File
@@ -38,6 +38,11 @@ buffer_init_string :: proc(b: ^Buffer, s: string) {
}
buffer_init_allocator :: proc(b: ^Buffer, len, cap: int, allocator := context.allocator) {
if b.buf == nil {
b.buf = make([dynamic]byte, len, cap, allocator)
return
}
b.buf.allocator = allocator
reserve(&b.buf, cap)
resize(&b.buf, len)
@@ -108,8 +113,11 @@ _buffer_grow :: proc(b: ^Buffer, n: int) -> int {
if i, ok := _buffer_try_grow(b, n); 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)
resize(&b.buf, n)
return 0
}
@@ -370,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
}
+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
}
+2 -2
View File
@@ -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
+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)
}
}
+1 -1
View File
@@ -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, }
+1 -1
View File
@@ -18,7 +18,7 @@ foreign _ {
// 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 {
va_list :: struct #align(16) {
_: [4096]u8,
}
+1 -1
View File
@@ -182,7 +182,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 ---
+2 -2
View File
@@ -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
@@ -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
+2 -2
View File
@@ -35,12 +35,12 @@ 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,
}
}
+1 -1
View File
@@ -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.
+21 -40
View File
@@ -188,7 +188,8 @@ input_size_from_memory :: proc(z: ^Context_Memory_Input) -> (res: i64, err: Erro
}
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}
@@ -212,25 +213,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
// the 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")
@@ -247,12 +242,8 @@ 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}
@@ -317,12 +308,9 @@ peek_data_from_stream :: #force_inline proc(z: ^Context_Stream_Input, $T: typeid
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 {
@@ -330,8 +318,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
}
@@ -344,16 +332,9 @@ peek_data_at_offset_from_stream :: #force_inline proc(z: ^Context_Stream_Input,
size :: size_of(T)
// Get current position to return to.
cur_pos, e1 := z.input->impl_seek(0, .Current)
if e1 != .None {
return T{}, e1
}
cur_pos := z.input->impl_seek(0, .Current) or_return
// Seek to offset.
pos, e2 := z.input->impl_seek(offset, .Start)
if e2 != .None {
return T{}, e2
}
pos := z.input->impl_seek(offset, .Start) or_return
r, e3 := io.to_reader_at(z.input)
if !e3 {
@@ -462,7 +443,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")
@@ -470,7 +451,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}
@@ -478,13 +459,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}
+2 -4
View File
@@ -335,10 +335,8 @@ load_from_context :: proc(z: ^$C, buf: ^bytes.Buffer, known_gzip_size := -1, exp
// fmt.printf("GZIP: Expected Payload Size: %v\n", expected_output_size);
zlib_error := zlib.inflate_raw(z=z, expected_output_size=expected_output_size)
if zlib_error != nil {
return zlib_error
}
zlib.inflate_raw(z, expected_output_size=expected_output_size) or_return
/*
Read CRC32 using the ctx bit reader because zlib may leave bytes in there.
*/
+4 -8
View File
@@ -177,12 +177,10 @@ decompress_slice_to_string :: proc(input: []u8, model := DEFAULT_MODEL, allocato
max_output_size := decompress_bound(len(input), model)
buf: [dynamic]u8
if !resize(&buf, max_output_size) {
return "", .Out_Of_Memory
}
resize(&buf, max_output_size) or_return
length, result := decompress_slice_to_output_buffer(input, buf[:])
resize(&buf, length)
resize(&buf, length) or_return
return string(buf[:]), result
}
decompress :: proc{decompress_slice_to_output_buffer, decompress_slice_to_string}
@@ -307,12 +305,10 @@ compress_string :: proc(input: string, model := DEFAULT_MODEL, allocator := cont
max_output_size := compress_bound(len(input))
buf: [dynamic]u8
if !resize(&buf, max_output_size) {
return {}, .Out_Of_Memory
}
resize(&buf, max_output_size) or_return
length, result := compress_string_to_buffer(input, buf[:])
resize(&buf, length)
resize(&buf, length) or_return
return buf[:length], result
}
compress :: proc{compress_string_to_buffer, compress_string}
+12 -19
View File
@@ -1,3 +1,4 @@
//+vet !using-param
package zlib
/*
@@ -146,15 +147,7 @@ grow_buffer :: proc(buf: ^[dynamic]u8) -> (err: compress.Error) {
Double until we reach the maximum allowed.
*/
new_size := min(len(buf) << 1, compress.COMPRESS_OUTPUT_ALLOCATE_MAX)
resize(buf, new_size)
if len(buf) != new_size {
/*
Resize failed.
*/
return .Resize_Failed
}
return nil
return resize(buf, new_size)
}
/*
@@ -181,7 +174,7 @@ write_byte :: #force_inline proc(z: ^$C, c: u8) -> (err: io.Error) #no_bounds_ch
}
@(optimization_mode="speed")
repl_byte :: proc(z: ^$C, count: u16, c: u8) -> (err: io.Error) #no_bounds_check {
repl_byte :: proc(z: ^$C, count: u16, c: u8) -> (err: io.Error) #no_bounds_check {
/*
TODO(Jeroen): Once we have a magic ring buffer, we can just peek/write into it
without having to worry about wrapping, so no need for a temp allocation to give to
@@ -305,10 +298,10 @@ decode_huffman_slowpath :: proc(z: ^$C, t: ^Huffman_Table) -> (r: u16, err: Erro
code := u16(compress.peek_bits_lsb(z,16))
k := int(z_bit_reverse(code, 16))
s: u8
#no_bounds_check for s = HUFFMAN_FAST_BITS+1; ; {
if k < t.maxcode[s] {
s: u8 = HUFFMAN_FAST_BITS+1
for {
#no_bounds_check if k < t.maxcode[s] {
break
}
s += 1
@@ -471,7 +464,7 @@ inflate_from_context :: proc(using ctx: ^compress.Context_Memory_Input, raw := f
}
// Parse ZLIB stream without header.
inflate_raw(z=ctx, expected_output_size=expected_output_size) or_return
inflate_raw(ctx, expected_output_size=expected_output_size) or_return
if !raw {
compress.discard_to_next_byte_lsb(ctx)
@@ -509,8 +502,8 @@ inflate_raw :: proc(z: ^$C, expected_output_size := -1, allocator := context.all
/*
Try to pre-allocate the output buffer.
*/
reserve(&z.output.buf, expected_output_size)
resize (&z.output.buf, expected_output_size)
reserve(&z.output.buf, expected_output_size) or_return
resize (&z.output.buf, expected_output_size) or_return
}
if len(z.output.buf) != expected_output_size {
@@ -653,7 +646,7 @@ inflate_raw :: proc(z: ^$C, expected_output_size := -1, allocator := context.all
}
if int(z.bytes_written) != len(z.output.buf) {
resize(&z.output.buf, int(z.bytes_written))
resize(&z.output.buf, int(z.bytes_written)) or_return
}
return nil
@@ -665,7 +658,7 @@ inflate_from_byte_array :: proc(input: []u8, buf: ^bytes.Buffer, raw := false, e
ctx.input_data = input
ctx.output = buf
return inflate_from_context(ctx=&ctx, raw=raw, expected_output_size=expected_output_size)
return inflate_from_context(&ctx, raw=raw, expected_output_size=expected_output_size)
}
inflate_from_byte_array_raw :: proc(input: []u8, buf: ^bytes.Buffer, raw := false, expected_output_size := -1) -> (err: Error) {
@@ -674,7 +667,7 @@ inflate_from_byte_array_raw :: proc(input: []u8, buf: ^bytes.Buffer, raw := fals
ctx.input_data = input
ctx.output = buf
return inflate_raw(z=&ctx, expected_output_size=expected_output_size)
return inflate_raw(&ctx, expected_output_size=expected_output_size)
}
inflate :: proc{inflate_from_context, inflate_from_byte_array}
+142 -83
View File
@@ -27,27 +27,28 @@ Bit_Array_Iterator :: struct {
word_idx: int,
bit_idx: uint,
}
/*
In:
- ba: ^Bit_Array - the array to iterate over
Wraps a `Bit_Array` into an Iterator
Out:
- it: ^Bit_Array_Iterator - the iterator that holds iteration state
Inputs:
- ba: Pointer to the Bit_Array
Returns:
- it: Iterator struct
*/
make_iterator :: proc (ba: ^Bit_Array) -> (it: Bit_Array_Iterator) {
return Bit_Array_Iterator { array = ba }
}
/*
In:
- it: ^Bit_Array_Iterator - the iterator struct that holds the state.
Returns the next bit, including its set-state. ok=false once exhausted
Out:
- set: bool - the state of the bit at `index`
- index: int - the next bit of the Bit_Array referenced by `it`.
- ok: bool - `true` if the iterator returned a valid index,
`false` if there were no more bits
Inputs:
- it: The iterator that holds the state.
Returns:
- set: `true` if the bit at `index` is set.
- index: The next bit of the Bit_Array referenced by `it`.
- ok: `true` if the iterator can continue, `false` if the iterator is done
*/
iterate_by_all :: proc (it: ^Bit_Array_Iterator) -> (set: bool, index: int, ok: bool) {
index = it.word_idx * NUM_BITS + int(it.bit_idx) + it.array.bias
@@ -64,39 +65,51 @@ iterate_by_all :: proc (it: ^Bit_Array_Iterator) -> (set: bool, index: int, ok:
return set, index, true
}
/*
In:
- it: ^Bit_Array_Iterator - the iterator struct that holds the state.
Returns the next Set Bit, for example if `0b1010`, then the iterator will return index={1, 3} over two calls.
Out:
- index: int - the next set bit of the Bit_Array referenced by `it`.
- ok: bool - `true` if the iterator returned a valid index,
`false` if there were no more bits set
Inputs:
- it: The iterator that holds the state.
Returns:
- index: The next *set* bit of the Bit_Array referenced by `it`.
- ok: `true` if the iterator can continue, `false` if the iterator is done
*/
iterate_by_set :: proc (it: ^Bit_Array_Iterator) -> (index: int, ok: bool) {
return iterate_internal_(it, true)
}
/*
In:
- it: ^Bit_Array_Iterator - the iterator struct that holds the state.
Returns the next Unset Bit, for example if `0b1010`, then the iterator will return index={0, 2} over two calls.
Out:
- index: int - the next unset bit of the Bit_Array referenced by `it`.
- ok: bool - `true` if the iterator returned a valid index,
`false` if there were no more unset bits
Inputs:
- it: The iterator that holds the state.
Returns:
- index: The next *unset* bit of the Bit_Array referenced by `it`.
- ok: `true` if the iterator can continue, `false` if the iterator is done
*/
iterate_by_unset:: proc (it: ^Bit_Array_Iterator) -> (index: int, ok: bool) {
return iterate_internal_(it, false)
}
/*
Iterates through set/unset bits
*Private*
Inputs:
- it: The iterator that holds the state.
- ITERATE_SET_BITS: `true` for returning only set bits, false for returning only unset bits
Returns:
- index: The next *unset* bit of the Bit_Array referenced by `it`.
- ok: `true` if the iterator can continue, `false` if the iterator is done
*/
@(private="file")
iterate_internal_ :: proc (it: ^Bit_Array_Iterator, $ITERATE_SET_BITS: bool) -> (index: int, ok: bool) {
word := it.array.bits[it.word_idx] if len(it.array.bits) > it.word_idx else 0
when ! ITERATE_SET_BITS { word = ~word }
// if the word is empty or we have already gone over all the bits in it,
// If the word is empty or we have already gone over all the bits in it,
// b.bit_idx is greater than the index of any set bit in the word,
// meaning that word >> b.bit_idx == 0.
for it.word_idx < len(it.array.bits) && word >> it.bit_idx == 0 {
@@ -106,14 +119,14 @@ iterate_internal_ :: proc (it: ^Bit_Array_Iterator, $ITERATE_SET_BITS: bool) ->
when ! ITERATE_SET_BITS { word = ~word }
}
// if we are iterating the set bits, reaching the end of the array means we have no more bits to check
// If we are iterating the set bits, reaching the end of the array means we have no more bits to check
when ITERATE_SET_BITS {
if it.word_idx >= len(it.array.bits) {
return 0, false
}
}
// reaching here means that the word has some set bits
// Reaching here means that the word has some set bits
it.bit_idx += uint(intrinsics.count_trailing_zeros(word >> it.bit_idx))
index = it.word_idx * NUM_BITS + int(it.bit_idx) + it.array.bias
@@ -124,24 +137,21 @@ iterate_internal_ :: proc (it: ^Bit_Array_Iterator, $ITERATE_SET_BITS: bool) ->
}
return index, index <= it.array.max_index
}
/*
In:
- ba: ^Bit_Array - a pointer to the Bit Array
- index: The bit index. Can be an enum member.
Gets the state of a bit in the bit-array
Out:
- res: The bit you're interested in.
- ok: Whether the index was valid. Returns `false` if the index is smaller than the bias.
Inputs:
- ba: Pointer to the Bit_Array
- index: Which bit in the array
The `ok` return value may be ignored.
Returns:
- res: `true` if the bit at `index` is set.
- ok: Whether the index was valid. Returns `false` if the index is smaller than the bias.
*/
get :: proc(ba: ^Bit_Array, #any_int index: uint, allocator := context.allocator) -> (res: bool, ok: bool) {
get :: proc(ba: ^Bit_Array, #any_int index: uint) -> (res: bool, ok: bool) #optional_ok {
idx := int(index) - ba.bias
if ba == nil || int(index) < ba.bias { return false, false }
context.allocator = allocator
leg_index := idx >> INDEX_SHIFT
bit_index := idx & INDEX_MASK
@@ -157,18 +167,36 @@ get :: proc(ba: ^Bit_Array, #any_int index: uint, allocator := context.allocator
return res, true
}
/*
In:
- ba: ^Bit_Array - a pointer to the Bit Array
- index: The bit index. Can be an enum member.
Gets the state of a bit in the bit-array
Out:
- ok: Whether or not we managed to set requested bit.
*Bypasses all Checks*
`set` automatically resizes the Bit Array to accommodate the requested index if needed.
Inputs:
- ba: Pointer to the Bit_Array
- index: Which bit in the array
Returns:
- `true` if bit is set
*/
set :: proc(ba: ^Bit_Array, #any_int index: uint, allocator := context.allocator) -> (ok: bool) {
unsafe_get :: #force_inline proc(ba: ^Bit_Array, #any_int index: uint) -> bool #no_bounds_check {
return bool((ba.bits[index >> INDEX_SHIFT] >> uint(index & INDEX_MASK)) & 1)
}
/*
Sets the state of a bit in the bit-array
*Conditionally Allocates (Resizes backing data when `index > len(ba.bits)`)*
Inputs:
- ba: Pointer to the Bit_Array
- index: Which bit in the array
- set_to: `true` sets the bit on, `false` to turn it off
- allocator: (default is context.allocator)
Returns:
- ok: Whether the set was successful, `false` on allocation failure or bad index
*/
set :: proc(ba: ^Bit_Array, #any_int index: uint, set_to: bool = true, allocator := context.allocator) -> (ok: bool) {
idx := int(index) - ba.bias
@@ -181,65 +209,97 @@ set :: proc(ba: ^Bit_Array, #any_int index: uint, allocator := context.allocator
resize_if_needed(ba, leg_index) or_return
ba.max_index = max(idx, ba.max_index)
ba.bits[leg_index] |= 1 << uint(bit_index)
if set_to{ ba.bits[leg_index] |= 1 << uint(bit_index) }
else { ba.bits[leg_index] &= ~(1 << uint(bit_index)) }
return true
}
/*
In:
- ba: ^Bit_Array - a pointer to the Bit Array
- index: The bit index. Can be an enum member.
Sets the state of a bit in the bit-array
Out:
- ok: Whether or not we managed to unset requested bit.
*Bypasses all checks*
`unset` automatically resizes the Bit Array to accommodate the requested index if needed.
Inputs:
- ba: Pointer to the Bit_Array
- index: Which bit in the array
*/
unset :: proc(ba: ^Bit_Array, #any_int index: uint, allocator := context.allocator) -> (ok: bool) {
idx := int(index) - ba.bias
if ba == nil || int(index) < ba.bias { return false }
context.allocator = allocator
leg_index := idx >> INDEX_SHIFT
bit_index := idx & INDEX_MASK
resize_if_needed(ba, leg_index) or_return
ba.max_index = max(idx, ba.max_index)
ba.bits[leg_index] &= ~(1 << uint(bit_index))
return true
unsafe_set :: proc(ba: ^Bit_Array, bit: int) #no_bounds_check {
ba.bits[bit >> INDEX_SHIFT] |= 1 << uint(bit & INDEX_MASK)
}
/*
A helper function to create a Bit Array with optional bias, in case your smallest index is non-zero (including negative).
Unsets the state of a bit in the bit-array. (Convienence wrapper for `set`)
*Conditionally Allocates (Resizes backing data when `index > len(ba.bits)`)*
Inputs:
- ba: Pointer to the Bit_Array
- index: Which bit in the array
- allocator: (default is context.allocator)
Returns:
- ok: Whether the unset was successful, `false` on allocation failure or bad index
*/
create :: proc(max_index: int, min_index := 0, allocator := context.allocator) -> (res: ^Bit_Array, ok: bool) #optional_ok {
unset :: #force_inline proc(ba: ^Bit_Array, #any_int index: uint, allocator := context.allocator) -> (ok: bool) {
return set(ba, index, false, allocator)
}
/*
Unsets the state of a bit in the bit-array
*Bypasses all Checks*
Inputs:
- ba: Pointer to the Bit_Array
- index: Which bit in the array
*/
unsafe_unset :: proc(b: ^Bit_Array, bit: int) #no_bounds_check {
b.bits[bit >> INDEX_SHIFT] &= ~(1 << uint(bit & INDEX_MASK))
}
/*
A helper function to create a Bit Array with optional bias, in case your smallest index is non-zero (including negative).
*Allocates (`new(Bit_Array) & make(ba.bits)`)*
Inputs:
- max_index: maximum starting index
- min_index: minimum starting index (used as a bias)
- allocator: (default is context.allocator)
Returns:
- ba: Allocates a bit_Array, backing data is set to `max-min / 64` indices, rounded up (eg 65 - 0 allocates for [2]u64).
*/
create :: proc(max_index: int, min_index: int = 0, allocator := context.allocator) -> (res: ^Bit_Array, ok: bool) #optional_ok {
context.allocator = allocator
size_in_bits := max_index - min_index
if size_in_bits < 1 { return {}, false }
legs := size_in_bits >> INDEX_SHIFT
if size_in_bits & INDEX_MASK > 0 {legs+=1}
bits, err := make([dynamic]u64, legs)
ok = err == mem.Allocator_Error.None
res = new(Bit_Array)
res.bits = bits
res.bias = min_index
res.max_index = max_index
res.free_pointer = true
return res, resize_if_needed(res, legs)
return
}
/*
Sets all bits to `false`.
Sets all values in the Bit_Array to zero.
Inputs:
- ba: The target Bit_Array
*/
clear :: proc(ba: ^Bit_Array) {
if ba == nil { return }
mem.zero_slice(ba.bits[:])
}
/*
Releases the memory used by the Bit Array.
Deallocates the Bit_Array and its backing storage
Inputs:
- ba: The target Bit_Array
*/
destroy :: proc(ba: ^Bit_Array) {
if ba == nil { return }
@@ -248,9 +308,8 @@ destroy :: proc(ba: ^Bit_Array) {
free(ba)
}
}
/*
Resizes the Bit Array. For internal use.
Resizes the Bit Array. For internal use. Provisions needed capacity+1
If you want to reserve the memory for a given-sized Bit Array up front, you can use `create`.
*/
@(private="file")
@@ -20,10 +20,10 @@ List :: struct {
Node :: struct {
next, prev: ^Node,
prev, next: ^Node,
}
push_front :: proc(list: ^List, node: ^Node) {
push_front :: proc "contextless" (list: ^List, node: ^Node) {
if list.head != nil {
list.head.prev = node
node.prev, node.next = nil, list.head
@@ -34,7 +34,7 @@ push_front :: proc(list: ^List, node: ^Node) {
}
}
push_back :: proc(list: ^List, node: ^Node) {
push_back :: proc "contextless" (list: ^List, node: ^Node) {
if list.tail != nil {
list.tail.next = node
node.prev, node.next = list.tail, nil
@@ -45,7 +45,7 @@ push_back :: proc(list: ^List, node: ^Node) {
}
}
remove :: proc(list: ^List, node: ^Node) {
remove :: proc "contextless" (list: ^List, node: ^Node) {
if node != nil {
if node.next != nil {
node.next.prev = node.prev
@@ -83,12 +83,34 @@ remove_by_proc :: proc(list: ^List, to_erase: proc(^Node) -> bool) {
}
}
remove_by_proc_contextless :: proc(list: ^List, to_erase: proc "contextless" (^Node) -> bool) {
for node := list.head; node != nil; {
next := node.next
if to_erase(node) {
if node.next != nil {
node.next.prev = node.prev
}
if node.prev != nil {
node.prev.next = node.next
}
if list.head == node {
list.head = node.next
}
if list.tail == node {
list.tail = node.prev
}
}
node = next
}
}
is_empty :: proc(list: ^List) -> bool {
is_empty :: proc "contextless" (list: ^List) -> bool {
return list.head == nil
}
pop_front :: proc(list: ^List) -> ^Node {
pop_front :: proc "contextless" (list: ^List) -> ^Node {
link := list.head
if link == nil {
return nil
@@ -108,7 +130,7 @@ pop_front :: proc(list: ^List) -> ^Node {
return link
}
pop_back :: proc(list: ^List) -> ^Node {
pop_back :: proc "contextless" (list: ^List) -> ^Node {
link := list.tail
if link == nil {
return nil
@@ -134,25 +156,25 @@ Iterator :: struct($T: typeid) {
offset: uintptr,
}
iterator_head :: proc(list: List, $T: typeid, $field_name: string) -> Iterator(T)
iterator_head :: proc "contextless" (list: List, $T: typeid, $field_name: string) -> Iterator(T)
where intrinsics.type_has_field(T, field_name),
intrinsics.type_field_type(T, field_name) == Node {
return {list.head, offset_of_by_string(T, field_name)}
}
iterator_tail :: proc(list: List, $T: typeid, $field_name: string) -> Iterator(T)
iterator_tail :: proc "contextless" (list: List, $T: typeid, $field_name: string) -> Iterator(T)
where intrinsics.type_has_field(T, field_name),
intrinsics.type_field_type(T, field_name) == Node {
return {list.tail, offset_of_by_string(T, field_name)}
}
iterator_from_node :: proc(node: ^Node, $T: typeid, $field_name: string) -> Iterator(T)
iterator_from_node :: proc "contextless" (node: ^Node, $T: typeid, $field_name: string) -> Iterator(T)
where intrinsics.type_has_field(T, field_name),
intrinsics.type_field_type(T, field_name) == Node {
return {node, offset_of_by_string(T, field_name)}
}
iterate_next :: proc(it: ^Iterator($T)) -> (ptr: ^T, ok: bool) {
iterate_next :: proc "contextless" (it: ^Iterator($T)) -> (ptr: ^T, ok: bool) {
node := it.curr
if node == nil {
return nil, false
@@ -162,7 +184,7 @@ iterate_next :: proc(it: ^Iterator($T)) -> (ptr: ^T, ok: bool) {
return (^T)(uintptr(node) - it.offset), true
}
iterate_prev :: proc(it: ^Iterator($T)) -> (ptr: ^T, ok: bool) {
iterate_prev :: proc "contextless" (it: ^Iterator($T)) -> (ptr: ^T, ok: bool) {
node := it.curr
if node == nil {
return nil, false
+12 -12
View File
@@ -14,7 +14,7 @@ Queue :: struct($T: typeid) {
DEFAULT_CAPACITY :: 16
// Procedure to initialize a queue
init :: proc(q: ^$Q/Queue($T), capacity := DEFAULT_CAPACITY, allocator := context.allocator) -> bool {
init :: proc(q: ^$Q/Queue($T), capacity := DEFAULT_CAPACITY, allocator := context.allocator) -> runtime.Allocator_Error {
if q.data.allocator.procedure == nil {
q.data.allocator = allocator
}
@@ -55,11 +55,11 @@ space :: proc(q: $Q/Queue($T)) -> int {
}
// Reserve enough space for at least the specified capacity
reserve :: proc(q: ^$Q/Queue($T), capacity: int) -> bool {
if uint(capacity) > q.len {
reserve :: proc(q: ^$Q/Queue($T), capacity: int) -> runtime.Allocator_Error {
if capacity > space(q^) {
return _grow(q, uint(capacity))
}
return true
return nil
}
@@ -112,25 +112,25 @@ peek_back :: proc(q: ^$Q/Queue($T), loc := #caller_location) -> ^T {
}
// Push an element to the back of the queue
push_back :: proc(q: ^$Q/Queue($T), elem: T) -> bool {
push_back :: proc(q: ^$Q/Queue($T), elem: T) -> (ok: bool, err: runtime.Allocator_Error) {
if space(q^) == 0 {
_grow(q) or_return
}
idx := (q.offset+uint(q.len))%builtin.len(q.data)
q.data[idx] = elem
q.len += 1
return true
return true, nil
}
// Push an element to the front of the queue
push_front :: proc(q: ^$Q/Queue($T), elem: T) -> bool {
push_front :: proc(q: ^$Q/Queue($T), elem: T) -> (ok: bool, err: runtime.Allocator_Error) {
if space(q^) == 0 {
_grow(q) or_return
}
q.offset = uint(q.offset - 1 + builtin.len(q.data)) % builtin.len(q.data)
q.len += 1
q.data[q.offset] = elem
return true
return true, nil
}
@@ -173,7 +173,7 @@ pop_front_safe :: proc(q: ^$Q/Queue($T)) -> (elem: T, ok: bool) {
}
// Push multiple elements to the front of the queue
push_back_elems :: proc(q: ^$Q/Queue($T), elems: ..T) -> bool {
push_back_elems :: proc(q: ^$Q/Queue($T), elems: ..T) -> (ok: bool, err: runtime.Allocator_Error) {
n := uint(builtin.len(elems))
if space(q^) < int(n) {
_grow(q, q.len + n) or_return
@@ -188,7 +188,7 @@ push_back_elems :: proc(q: ^$Q/Queue($T), elems: ..T) -> bool {
copy(q.data[insert_from:], elems[:insert_to])
copy(q.data[:insert_from], elems[insert_to:])
q.len += n
return true
return true, nil
}
// Consume `n` elements from the front of the queue
@@ -225,7 +225,7 @@ clear :: proc(q: ^$Q/Queue($T)) {
// Internal growinh procedure
_grow :: proc(q: ^$Q/Queue($T), min_capacity: uint = 0) -> bool {
_grow :: proc(q: ^$Q/Queue($T), min_capacity: uint = 0) -> runtime.Allocator_Error {
new_capacity := max(min_capacity, uint(8), uint(builtin.len(q.data))*2)
n := uint(builtin.len(q.data))
builtin.resize(&q.data, int(new_capacity)) or_return
@@ -234,5 +234,5 @@ _grow :: proc(q: ^$Q/Queue($T), min_capacity: uint = 0) -> bool {
copy(q.data[new_capacity-diff:], q.data[q.offset:][:diff])
q.offset += new_capacity - n
}
return true
return nil
}
+46 -1
View File
@@ -1,6 +1,8 @@
package container_small_array
import "core:builtin"
import "core:runtime"
_ :: runtime
Small_Array :: struct($N: int, $T: typeid) where N >= 0 {
data: [N]T,
@@ -32,6 +34,20 @@ get_ptr :: proc "contextless" (a: ^$A/Small_Array($N, $T), index: int) -> ^T {
return &a.data[index]
}
get_safe :: proc(a: $A/Small_Array($N, $T), index: int) -> (T, bool) #no_bounds_check {
if index < 0 || index >= a.len {
return {}, false
}
return a.data[index], true
}
get_ptr_safe :: proc(a: ^$A/Small_Array($N, $T), index: int) -> (^T, bool) #no_bounds_check {
if index < 0 || index >= a.len {
return {}, false
}
return &a.data[index], true
}
set :: proc "contextless" (a: ^$A/Small_Array($N, $T), index: int, item: T) {
a.data[index] = item
}
@@ -93,7 +109,7 @@ pop_front_safe :: proc "contextless" (a: ^$A/Small_Array($N, $T)) -> (item: T, o
copy(s[:], s[1:])
a.len -= 1
ok = true
}
}
return
}
@@ -102,6 +118,23 @@ consume :: proc "odin" (a: ^$A/Small_Array($N, $T), count: int, loc := #caller_l
a.len -= count
}
ordered_remove :: proc "contextless" (a: ^$A/Small_Array($N, $T), index: int, loc := #caller_location) #no_bounds_check {
runtime.bounds_check_error_loc(loc, index, a.len)
if index+1 < a.len {
copy(a.data[index:], a.data[index+1:])
}
a.len -= 1
}
unordered_remove :: proc "contextless" (a: ^$A/Small_Array($N, $T), index: int, loc := #caller_location) #no_bounds_check {
runtime.bounds_check_error_loc(loc, index, a.len)
n := a.len-1
if index != n {
a.data[index] = a.data[n]
}
a.len -= 1
}
clear :: proc "contextless" (a: ^$A/Small_Array($N, $T)) {
resize(a, 0)
}
@@ -111,6 +144,18 @@ push_back_elems :: proc "contextless" (a: ^$A/Small_Array($N, $T), items: ..T) {
a.len += n
}
inject_at :: proc "contextless" (a: ^$A/Small_Array($N, $T), item: T, index: int) -> bool #no_bounds_check {
if a.len < cap(a^) && index >= 0 && index <= len(a^) {
a.len += 1
for i := a.len - 1; i >= index + 1; i -= 1 {
a.data[i] = a.data[i - 1]
}
a.data[index] = item
return true
}
return false
}
append_elem :: push_back
append_elems :: push_back_elems
push :: proc{push_back, push_back_elems}
@@ -32,7 +32,7 @@ init :: proc(sorter: ^$S/Sorter($K)) {
}
destroy :: proc(sorter: ^$S/Sorter($K)) {
for _, v in &sorter.relations {
for _, v in sorter.relations {
delete(v.dependents)
}
delete(sorter.relations)
@@ -80,7 +80,7 @@ sort :: proc(sorter: ^$S/Sorter($K)) -> (sorted, cycled: [dynamic]K) {
}
}
for root in &sorted do for k, _ in relations[root].dependents {
for root in sorted do for k, _ in relations[root].dependents {
relation := &relations[k]
relation.dependencies -= 1
if relation.dependencies == 0 {
+4 -2
View File
@@ -9,14 +9,16 @@ package fiat
u1 :: distinct u8
i1 :: distinct i8
cmovznz_u64 :: #force_inline proc "contextless" (arg1: u1, arg2, arg3: u64) -> (out1: u64) {
@(optimization_mode="none")
cmovznz_u64 :: proc "contextless" (arg1: u1, arg2, arg3: u64) -> (out1: u64) {
x1 := (u64(arg1) * 0xffffffffffffffff)
x2 := ((x1 & arg3) | ((~x1) & arg2))
out1 = x2
return
}
cmovznz_u32 :: #force_inline proc "contextless" (arg1: u1, arg2, arg3: u32) -> (out1: u32) {
@(optimization_mode="none")
cmovznz_u32 :: proc "contextless" (arg1: u1, arg2, arg3: u32) -> (out1: u32) {
x1 := (u32(arg1) * 0xffffffff)
x2 := ((x1 & arg3) | ((~x1) & arg2))
out1 = x2
@@ -305,7 +305,8 @@ fe_opp :: proc "contextless" (out1: ^Loose_Field_Element, arg1: ^Tight_Field_Ele
out1[4] = x5
}
fe_cond_assign :: proc "contextless" (out1, arg1: ^Tight_Field_Element, arg2: int) {
@(optimization_mode="none")
fe_cond_assign :: #force_no_inline proc "contextless" (out1, arg1: ^Tight_Field_Element, arg2: int) {
x1 := fiat.cmovznz_u64(fiat.u1(arg2), out1[0], arg1[0])
x2 := fiat.cmovznz_u64(fiat.u1(arg2), out1[1], arg1[1])
x3 := fiat.cmovznz_u64(fiat.u1(arg2), out1[2], arg1[2])
@@ -596,7 +597,8 @@ fe_set :: proc "contextless" (out1, arg1: ^Tight_Field_Element) {
out1[4] = x5
}
fe_cond_swap :: proc "contextless" (out1, out2: ^Tight_Field_Element, arg1: int) {
@(optimization_mode="none")
fe_cond_swap :: #force_no_inline proc "contextless" (out1, out2: ^Tight_Field_Element, arg1: int) {
mask := -u64(arg1)
x := (out1[0] ~ out2[0]) & mask
x1, y1 := out1[0] ~ x, out2[0] ~ x
@@ -201,7 +201,8 @@ fe_opp :: proc "contextless" (out1: ^Loose_Field_Element, arg1: ^Tight_Field_Ele
out1[2] = x3
}
fe_cond_assign :: proc "contextless" (out1, arg1: ^Tight_Field_Element, arg2: bool) {
@(optimization_mode="none")
fe_cond_assign :: #force_no_inline proc "contextless" (out1, arg1: ^Tight_Field_Element, arg2: bool) {
x1 := fiat.cmovznz_u64(fiat.u1(arg2), out1[0], arg1[0])
x2 := fiat.cmovznz_u64(fiat.u1(arg2), out1[1], arg1[1])
x3 := fiat.cmovznz_u64(fiat.u1(arg2), out1[2], arg1[2])
@@ -342,7 +343,8 @@ fe_set :: #force_inline proc "contextless" (out1, arg1: ^Tight_Field_Element) {
out1[2] = x3
}
fe_cond_swap :: proc "contextless" (out1, out2: ^Tight_Field_Element, arg1: bool) {
@(optimization_mode="none")
fe_cond_swap :: #force_no_inline proc "contextless" (out1, out2: ^Tight_Field_Element, arg1: bool) {
mask := -u64(arg1)
x := (out1[0] ~ out2[0]) & mask
x1, y1 := out1[0] ~ x, out2[0] ~ x
+4 -4
View File
@@ -70,7 +70,7 @@ hash_stream_224 :: proc(s: io.Stream) -> ([DIGEST_SIZE_224]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -149,7 +149,7 @@ hash_stream_256 :: proc(s: io.Stream) -> ([DIGEST_SIZE_256]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -228,7 +228,7 @@ hash_stream_384 :: proc(s: io.Stream) -> ([DIGEST_SIZE_384]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -307,7 +307,7 @@ hash_stream_512 :: proc(s: io.Stream) -> ([DIGEST_SIZE_512]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
+1 -1
View File
@@ -77,7 +77,7 @@ hash_stream :: proc(s: io.Stream) -> ([DIGEST_SIZE]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_blake2.update(&ctx, buf[:read])
}
+1 -1
View File
@@ -77,7 +77,7 @@ hash_stream :: proc(s: io.Stream) -> ([DIGEST_SIZE]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_blake2.update(&ctx, buf[:read])
}
+10
View File
@@ -8,15 +8,23 @@ KEY_SIZE :: 32
NONCE_SIZE :: 12
XNONCE_SIZE :: 24
@(private)
_MAX_CTR_IETF :: 0xffffffff
@(private)
_BLOCK_SIZE :: 64
@(private)
_STATE_SIZE_U32 :: 16
@(private)
_ROUNDS :: 20
@(private)
_SIGMA_0 : u32 : 0x61707865
@(private)
_SIGMA_1 : u32 : 0x3320646e
@(private)
_SIGMA_2 : u32 : 0x79622d32
@(private)
_SIGMA_3 : u32 : 0x6b206574
Context :: struct {
@@ -179,6 +187,7 @@ reset :: proc (ctx: ^Context) {
ctx._is_initialized = false
}
@(private)
_do_blocks :: proc (ctx: ^Context, dst, src: []byte, nr_blocks: int) {
// Enforce the maximum consumed keystream per nonce.
//
@@ -441,6 +450,7 @@ _do_blocks :: proc (ctx: ^Context, dst, src: []byte, nr_blocks: int) {
}
}
@(private)
_hchacha20 :: proc (dst, key, nonce: []byte) {
x0, x1, x2, x3 := _SIGMA_0, _SIGMA_1, _SIGMA_2, _SIGMA_3
x4 := util.U32_LE(key[0:4])
@@ -10,8 +10,10 @@ KEY_SIZE :: chacha20.KEY_SIZE
NONCE_SIZE :: chacha20.NONCE_SIZE
TAG_SIZE :: poly1305.TAG_SIZE
@(private)
_P_MAX :: 64 * 0xffffffff // 64 * (2^32-1)
@(private)
_validate_common_slice_sizes :: proc (tag, key, nonce, aad, text: []byte) {
if len(tag) != TAG_SIZE {
panic("crypto/chacha20poly1305: invalid destination tag size")
@@ -37,7 +39,10 @@ _validate_common_slice_sizes :: proc (tag, key, nonce, aad, text: []byte) {
}
}
@(private)
_PAD: [16]byte
@(private)
_update_mac_pad16 :: #force_inline proc (ctx: ^poly1305.Context, x_len: int) {
if pad_len := 16 - (x_len & (16-1)); pad_len != 16 {
poly1305.update(ctx, _PAD[:pad_len])
+1
View File
@@ -26,6 +26,7 @@ compare_constant_time :: proc "contextless" (a, b: []byte) -> int {
//
// The execution time of this routine is constant regardless of the
// contents of the memory being compared.
@(optimization_mode="none")
compare_byte_ptrs_constant_time :: proc "contextless" (a, b: ^byte, n: int) -> int {
x := mem.slice_ptr(a, n)
y := mem.slice_ptr(b, n)
+1 -1
View File
@@ -65,7 +65,7 @@ hash_stream :: proc(s: io.Stream) -> ([DIGEST_SIZE]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
+4 -4
View File
@@ -70,7 +70,7 @@ hash_stream_224 :: proc(s: io.Stream) -> ([DIGEST_SIZE_224]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -149,7 +149,7 @@ hash_stream_256 :: proc(s: io.Stream) -> ([DIGEST_SIZE_256]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -228,7 +228,7 @@ hash_stream_384 :: proc(s: io.Stream) -> ([DIGEST_SIZE_384]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -307,7 +307,7 @@ hash_stream_512 :: proc(s: io.Stream) -> ([DIGEST_SIZE_512]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
+15 -15
View File
@@ -79,7 +79,7 @@ hash_stream_128_3 :: proc(s: io.Stream) -> ([DIGEST_SIZE_128]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
@@ -164,7 +164,7 @@ hash_stream_128_4 :: proc(s: io.Stream) -> ([DIGEST_SIZE_128]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
@@ -249,7 +249,7 @@ hash_stream_128_5 :: proc(s: io.Stream) -> ([DIGEST_SIZE_128]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
@@ -334,7 +334,7 @@ hash_stream_160_3 :: proc(s: io.Stream) -> ([DIGEST_SIZE_160]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
@@ -419,7 +419,7 @@ hash_stream_160_4 :: proc(s: io.Stream) -> ([DIGEST_SIZE_160]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
@@ -504,7 +504,7 @@ hash_stream_160_5 :: proc(s: io.Stream) -> ([DIGEST_SIZE_160]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
@@ -589,7 +589,7 @@ hash_stream_192_3 :: proc(s: io.Stream) -> ([DIGEST_SIZE_192]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
@@ -674,7 +674,7 @@ hash_stream_192_4 :: proc(s: io.Stream) -> ([DIGEST_SIZE_192]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
@@ -759,7 +759,7 @@ hash_stream_192_5 :: proc(s: io.Stream) -> ([DIGEST_SIZE_192]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
@@ -844,7 +844,7 @@ hash_stream_224_3 :: proc(s: io.Stream) -> ([DIGEST_SIZE_224]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
@@ -929,7 +929,7 @@ hash_stream_224_4 :: proc(s: io.Stream) -> ([DIGEST_SIZE_224]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
@@ -1014,7 +1014,7 @@ hash_stream_224_5 :: proc(s: io.Stream) -> ([DIGEST_SIZE_224]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
@@ -1099,7 +1099,7 @@ hash_stream_256_3 :: proc(s: io.Stream) -> ([DIGEST_SIZE_256]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
@@ -1184,7 +1184,7 @@ hash_stream_256_4 :: proc(s: io.Stream) -> ([DIGEST_SIZE_256]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
@@ -1270,7 +1270,7 @@ hash_stream_256_5 :: proc(s: io.Stream) -> ([DIGEST_SIZE_256]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
ctx.str_len = u32(len(buf[:read]))
if read > 0 {
update(&ctx, buf[:read])
+4 -4
View File
@@ -70,7 +70,7 @@ hash_stream_224 :: proc(s: io.Stream) -> ([DIGEST_SIZE_224]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -149,7 +149,7 @@ hash_stream_256 :: proc(s: io.Stream) -> ([DIGEST_SIZE_256]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -228,7 +228,7 @@ hash_stream_384 :: proc(s: io.Stream) -> ([DIGEST_SIZE_384]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -307,7 +307,7 @@ hash_stream_512 :: proc(s: io.Stream) -> ([DIGEST_SIZE_512]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
+4 -4
View File
@@ -77,7 +77,7 @@ hash_stream_224 :: proc(s: io.Stream) -> ([DIGEST_SIZE_224]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_sha3.update(&ctx, buf[:read])
}
@@ -159,7 +159,7 @@ hash_stream_256 :: proc(s: io.Stream) -> ([DIGEST_SIZE_256]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_sha3.update(&ctx, buf[:read])
}
@@ -241,7 +241,7 @@ hash_stream_384 :: proc(s: io.Stream) -> ([DIGEST_SIZE_384]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_sha3.update(&ctx, buf[:read])
}
@@ -323,7 +323,7 @@ hash_stream_512 :: proc(s: io.Stream) -> ([DIGEST_SIZE_512]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_sha3.update(&ctx, buf[:read])
}
+1 -1
View File
@@ -64,7 +64,7 @@ hash_stream :: proc(s: io.Stream) -> ([DIGEST_SIZE]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
+1 -1
View File
@@ -68,7 +68,7 @@ hash_stream :: proc(s: io.Stream) -> ([DIGEST_SIZE]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
+1 -1
View File
@@ -67,7 +67,7 @@ hash_stream :: proc(s: io.Stream) -> ([DIGEST_SIZE]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
+2
View File
@@ -8,6 +8,7 @@ import "core:mem"
KEY_SIZE :: 32
TAG_SIZE :: 16
@(private)
_BLOCK_SIZE :: 16
sum :: proc (dst, msg, key: []byte) {
@@ -141,6 +142,7 @@ reset :: proc (ctx: ^Context) {
ctx._is_initialized = false
}
@(private)
_blocks :: proc (ctx: ^Context, msg: []byte, final := false) {
n: field.Tight_Field_Element = ---
final_byte := byte(!final)
+2 -2
View File
@@ -1,7 +1,7 @@
package crypto
when ODIN_OS != .Linux && ODIN_OS != .OpenBSD && ODIN_OS != .Windows {
_rand_bytes :: proc (dst: []byte) {
when ODIN_OS != .Linux && ODIN_OS != .OpenBSD && ODIN_OS != .Windows && ODIN_OS != .JS {
_rand_bytes :: proc(dst: []byte) {
unimplemented("crypto: rand_bytes not supported on this OS")
}
}
+20
View File
@@ -0,0 +1,20 @@
package crypto
foreign import "odin_env"
foreign odin_env {
@(link_name = "rand_bytes")
env_rand_bytes :: proc "contextless" (buf: []byte) ---
}
_MAX_PER_CALL_BYTES :: 65536 // 64kiB
_rand_bytes :: proc(dst: []byte) {
dst := dst
for len(dst) > 0 {
to_read := min(len(dst), _MAX_PER_CALL_BYTES)
env_rand_bytes(dst[:to_read])
dst = dst[to_read:]
}
}
+21 -22
View File
@@ -1,8 +1,8 @@
package crypto
import "core:fmt"
import "core:os"
import "core:sys/unix"
import "core:sys/linux"
_MAX_PER_CALL_BYTES :: 33554431 // 2^25 - 1
@@ -12,26 +12,25 @@ _rand_bytes :: proc (dst: []byte) {
for l > 0 {
to_read := min(l, _MAX_PER_CALL_BYTES)
ret := unix.sys_getrandom(raw_data(dst), to_read, 0)
if ret < 0 {
switch os.Errno(-ret) {
case os.EINTR:
// Call interupted by a signal handler, just retry the
// request.
continue
case os.ENOSYS:
// The kernel is apparently prehistoric (< 3.17 circa 2014)
// and does not support getrandom.
panic("crypto: getrandom not available in kernel")
case:
// All other failures are things that should NEVER happen
// unless the kernel interface changes (ie: the Linux
// developers break userland).
panic(fmt.tprintf("crypto: getrandom failed: %d", ret))
}
n_read, errno := linux.getrandom(dst[:to_read], {})
#partial switch errno {
case .NONE:
// Do nothing
case .EINTR:
// Call interupted by a signal handler, just retry the
// request.
continue
case .ENOSYS:
// The kernel is apparently prehistoric (< 3.17 circa 2014)
// and does not support getrandom.
panic("crypto: getrandom not available in kernel")
case:
// All other failures are things that should NEVER happen
// unless the kernel interface changes (ie: the Linux
// developers break userland).
panic(fmt.tprintf("crypto: getrandom failed: %v", errno))
}
l -= ret
dst = dst[ret:]
l -= n_read
dst = dst[n_read:]
}
}
+4 -4
View File
@@ -69,7 +69,7 @@ hash_stream_128 :: proc(s: io.Stream) -> ([DIGEST_SIZE_128]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -145,7 +145,7 @@ hash_stream_160 :: proc(s: io.Stream) -> ([DIGEST_SIZE_160]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -221,7 +221,7 @@ hash_stream_256 :: proc(s: io.Stream) -> ([DIGEST_SIZE_256]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -297,7 +297,7 @@ hash_stream_320 :: proc(s: io.Stream) -> ([DIGEST_SIZE_320]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
+1 -1
View File
@@ -67,7 +67,7 @@ hash_stream :: proc(s: io.Stream) -> ([DIGEST_SIZE]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
+4 -4
View File
@@ -74,7 +74,7 @@ hash_stream_224 :: proc(s: io.Stream) -> ([DIGEST_SIZE_224]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -153,7 +153,7 @@ hash_stream_256 :: proc(s: io.Stream) -> ([DIGEST_SIZE_256]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -232,7 +232,7 @@ hash_stream_384 :: proc(s: io.Stream) -> ([DIGEST_SIZE_384]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -311,7 +311,7 @@ hash_stream_512 :: proc(s: io.Stream) -> ([DIGEST_SIZE_512]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
+4 -4
View File
@@ -73,7 +73,7 @@ hash_stream_224 :: proc(s: io.Stream) -> ([DIGEST_SIZE_224]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_sha3.update(&ctx, buf[:read])
}
@@ -152,7 +152,7 @@ hash_stream_256 :: proc(s: io.Stream) -> ([DIGEST_SIZE_256]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_sha3.update(&ctx, buf[:read])
}
@@ -231,7 +231,7 @@ hash_stream_384 :: proc(s: io.Stream) -> ([DIGEST_SIZE_384]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_sha3.update(&ctx, buf[:read])
}
@@ -310,7 +310,7 @@ hash_stream_512 :: proc(s: io.Stream) -> ([DIGEST_SIZE_512]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_sha3.update(&ctx, buf[:read])
}
+2 -2
View File
@@ -73,7 +73,7 @@ hash_stream_128 :: proc(s: io.Stream) -> ([DIGEST_SIZE_128]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_sha3.update(&ctx, buf[:read])
}
@@ -155,7 +155,7 @@ hash_stream_256 :: proc(s: io.Stream) -> ([DIGEST_SIZE_256]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_sha3.update(&ctx, buf[:read])
}
+1 -1
View File
@@ -66,7 +66,7 @@ hash_stream :: proc(s: io.Stream) -> ([DIGEST_SIZE]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
+2 -2
View File
@@ -70,7 +70,7 @@ hash_stream_256 :: proc(s: io.Stream) -> ([DIGEST_SIZE_256]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
@@ -146,7 +146,7 @@ hash_stream_512 :: proc(s: io.Stream) -> ([DIGEST_SIZE_512]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
+3 -3
View File
@@ -71,7 +71,7 @@ hash_stream_128 :: proc(s: io.Stream) -> ([DIGEST_SIZE_128]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_tiger.update(&ctx, buf[:read])
}
@@ -150,7 +150,7 @@ hash_stream_160 :: proc(s: io.Stream) -> ([DIGEST_SIZE_160]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_tiger.update(&ctx, buf[:read])
}
@@ -229,7 +229,7 @@ hash_stream_192 :: proc(s: io.Stream) -> ([DIGEST_SIZE_192]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_tiger.update(&ctx, buf[:read])
}
+3 -3
View File
@@ -71,7 +71,7 @@ hash_stream_128 :: proc(s: io.Stream) -> ([DIGEST_SIZE_128]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_tiger.update(&ctx, buf[:read])
}
@@ -150,7 +150,7 @@ hash_stream_160 :: proc(s: io.Stream) -> ([DIGEST_SIZE_160]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_tiger.update(&ctx, buf[:read])
}
@@ -229,7 +229,7 @@ hash_stream_192 :: proc(s: io.Stream) -> ([DIGEST_SIZE_192]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
_tiger.update(&ctx, buf[:read])
}
+2
View File
@@ -11,6 +11,8 @@ package util
*/
import "core:mem"
// Keep vet happy
_ :: mem
// @note(bp): this can replace the other two
cast_slice :: #force_inline proc "contextless" ($D: typeid/[]$DE, src: $S/[]$SE) -> D {
+1 -1
View File
@@ -66,7 +66,7 @@ hash_stream :: proc(s: io.Stream) -> ([DIGEST_SIZE]byte, bool) {
defer delete(buf)
read := 1
for read > 0 {
read, _ = s->impl_read(buf)
read, _ = io.read(s, buf)
if read > 0 {
update(&ctx, buf[:read])
}
+3
View File
@@ -6,8 +6,10 @@ import "core:mem"
SCALAR_SIZE :: 32
POINT_SIZE :: 32
@(private)
_BASE_POINT: [32]byte = {9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
@(private)
_scalar_bit :: #force_inline proc "contextless" (s: ^[32]byte, i: int) -> u8 {
if i < 0 {
return 0
@@ -15,6 +17,7 @@ _scalar_bit :: #force_inline proc "contextless" (s: ^[32]byte, i: int) -> u8 {
return (s[i>>3] >> uint(i&7)) & 1
}
@(private)
_scalarmult :: proc (out, scalar, point: ^[32]byte) {
// Montgomery pseduo-multiplication taken from Monocypher.
-3
View File
@@ -1,8 +1,5 @@
package debug_pe
import "core:runtime"
import "core:io"
Section_Header32 :: struct {
name: [8]u8,
virtual_size: u32le,
+7
View File
@@ -0,0 +1,7 @@
/*
Package core:dynlib implements loading of shared libraries/DLLs and their symbols.
The behaviour of dynamically loaded libraries is specific to the target platform of the program.
For in depth detail on the underlying behaviour please refer to your target platform's documentation.
*/
package dynlib
+81 -2
View File
@@ -1,15 +1,94 @@
package dynlib
/*
A handle to a dynamically loaded library.
*/
Library :: distinct rawptr
load_library :: proc(path: string, global_symbols := false) -> (Library, bool) {
/*
Loads a dynamic library from the filesystem. The paramater `global_symbols` makes the symbols in the loaded
library available to resolve references in subsequently loaded libraries.
The paramater `global_symbols` is only used for the platforms `linux`, `darwin`, `freebsd` and `openbsd`.
On `windows` this paramater is ignored.
The underlying behaviour is platform specific.
On `linux`, `darwin`, `freebsd` and `openbsd` refer to `dlopen`.
On `windows` refer to `LoadLibraryW`.
**Implicit Allocators**
`context.temp_allocator`
Example:
import "core:dynlib"
import "core:fmt"
load_my_library :: proc() {
LIBRARY_PATH :: "my_library.dll"
library, ok := dynlib.load_library(LIBRARY_PATH)
if ! ok {
return
}
fmt.println("The library %q was successfully loaded", LIBRARY_PATH)
}
*/
load_library :: proc(path: string, global_symbols := false) -> (library: Library, did_load: bool) {
return _load_library(path, global_symbols)
}
unload_library :: proc(library: Library) -> bool {
/*
Unloads a dynamic library.
The underlying behaviour is platform specific.
On `linux`, `darwin`, `freebsd` and `openbsd` refer to `dlclose`.
On `windows` refer to `FreeLibrary`.
Example:
import "core:dynlib"
import "core:fmt"
load_then_unload_my_library :: proc() {
LIBRARY_PATH :: "my_library.dll"
library, ok := dynlib.load_library(LIBRARY_PATH)
if ! ok {
return
}
did_unload := dynlib.unload_library(library)
if ! did_unload {
return
}
fmt.println("The library %q was successfully unloaded", LIBRARY_PATH)
}
*/
unload_library :: proc(library: Library) -> (did_unload: bool) {
return _unload_library(library)
}
/*
Loads the address of a procedure/variable from a dynamic library.
The underlying behaviour is platform specific.
On `linux`, `darwin`, `freebsd` and `openbsd` refer to `dlsym`.
On `windows` refer to `GetProcAddress`.
**Implicit Allocators**
`context.temp_allocator`
Example:
import "core:dynlib"
import "core:fmt"
find_a_in_my_library :: proc() {
LIBRARY_PATH :: "my_library.dll"
library, ok := dynlib.load_library(LIBRARY_PATH)
if ! ok {
return
}
a, found_a := dynlib.symbol_address(library, "a")
if found_a do fmt.printf("The symbol %q was found at the address %v", "a", a)
}
*/
symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) #optional_ok {
return _symbol_address(library, symbol)
}
+15
View File
@@ -0,0 +1,15 @@
//+build js
//+private
package dynlib
_load_library :: proc(path: string, global_symbols := false) -> (Library, bool) {
return nil, false
}
_unload_library :: proc(library: Library) -> bool {
return false
}
_symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) {
return nil, false
}
+3
View File
@@ -4,10 +4,12 @@ package dynlib
import win32 "core:sys/windows"
import "core:strings"
import "core:runtime"
_load_library :: proc(path: string, global_symbols := false) -> (Library, bool) {
// NOTE(bill): 'global_symbols' is here only for consistency with POSIX which has RTLD_GLOBAL
runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
wide_path := win32.utf8_to_wstring(path, context.temp_allocator)
handle := cast(Library)win32.LoadLibraryW(wide_path)
return handle, handle != nil
@@ -19,6 +21,7 @@ _unload_library :: proc(library: Library) -> bool {
}
_symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) {
runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
c_str := strings.clone_to_cstring(symbol, context.temp_allocator)
ptr = win32.GetProcAddress(cast(win32.HMODULE)library, c_str)
found = ptr != nil
+1 -1
View File
@@ -248,7 +248,7 @@ _read_record :: proc(r: ^Reader, dst: ^[dynamic]string, allocator := context.all
field_length += 1
case '\n', '\r':
if !is_quoted { break read_loop }
is_quoted or_break read_loop
case r.comma:
field_length = 0
+1 -1
View File
@@ -42,7 +42,7 @@ write :: proc(w: ^Writer, record: []string) -> io.Error {
}
}
case:
if strings.contains_rune(field, w.comma) >= 0 {
if strings.contains_rune(field, w.comma) {
return true
}
if strings.contains_any(field, CHAR_SET) {
+17 -20
View File
@@ -184,28 +184,26 @@ decode_xml :: proc(input: string, options := XML_Decode_Options{}, allocator :=
advance :: proc(t: ^Tokenizer) -> (err: Error) {
if t == nil { return .Tokenizer_Is_Nil }
using t
#no_bounds_check {
if read_offset < len(src) {
offset = read_offset
r, w = rune(src[read_offset]), 1
if t.read_offset < len(t.src) {
t.offset = t.read_offset
t.r, t.w = rune(t.src[t.read_offset]), 1
switch {
case r == 0:
case t.r == 0:
return .Illegal_NUL_Character
case r >= utf8.RUNE_SELF:
r, w = utf8.decode_rune_in_string(src[read_offset:])
if r == utf8.RUNE_ERROR && w == 1 {
case t.r >= utf8.RUNE_SELF:
t.r, t.w = utf8.decode_rune_in_string(t.src[t.read_offset:])
if t.r == utf8.RUNE_ERROR && t.w == 1 {
return .Illegal_UTF_Encoding
} else if r == utf8.RUNE_BOM && offset > 0 {
} else if t.r == utf8.RUNE_BOM && t.offset > 0 {
return .Illegal_BOM
}
}
read_offset += w
t.read_offset += t.w
return .None
} else {
offset = len(src)
r = -1
t.offset = len(t.src)
t.r = -1
return
}
}
@@ -273,26 +271,25 @@ _extract_xml_entity :: proc(t: ^Tokenizer) -> (entity: string, err: Error) {
All of these would be in the ASCII range.
Even if one is not, it doesn't matter. All characters we need to compare to extract are.
*/
using t
length := len(t.src)
found := false
#no_bounds_check {
for read_offset < length {
if src[read_offset] == ';' {
for t.read_offset < length {
if t.src[t.read_offset] == ';' {
t.read_offset += 1
found = true
read_offset += 1
break
}
read_offset += 1
t.read_offset += 1
}
}
if found {
return string(src[offset + 1 : read_offset - 1]), .None
return string(t.src[t.offset + 1 : t.read_offset - 1]), .None
}
return string(src[offset : read_offset]), .Invalid_Entity_Encoding
return string(t.src[t.offset : t.read_offset]), .Invalid_Entity_Encoding
}
/*
+73
View File
@@ -0,0 +1,73 @@
package hex
import "core:strings"
encode :: proc(src: []byte, allocator := context.allocator) -> []byte #no_bounds_check {
dst := make([]byte, len(src) * 2, allocator)
for i, j := 0, 0; i < len(src); i += 1 {
v := src[i]
dst[j] = HEXTABLE[v>>4]
dst[j+1] = HEXTABLE[v&0x0f]
j += 2
}
return dst
}
decode :: proc(src: []byte, allocator := context.allocator) -> (dst: []byte, ok: bool) #no_bounds_check {
if len(src) % 2 == 1 {
return
}
dst = make([]byte, len(src) / 2, allocator)
for i, j := 0, 1; j < len(src); j += 2 {
p := src[j-1]
q := src[j]
a := hex_digit(p) or_return
b := hex_digit(q) or_return
dst[i] = (a << 4) | b
i += 1
}
return dst, true
}
// Decodes the given sequence into one byte.
// Should be called with one byte worth of the source, eg: 0x23 -> '#'.
decode_sequence :: proc(str: string) -> (res: byte, ok: bool) {
str := str
if strings.has_prefix(str, "0x") || strings.has_prefix(str, "0X") {
str = str[2:]
}
if len(str) != 2 {
return 0, false
}
upper := hex_digit(str[0]) or_return
lower := hex_digit(str[1]) or_return
return upper << 4 | lower, true
}
@(private)
HEXTABLE := [16]byte {
'0', '1', '2', '3',
'4', '5', '6', '7',
'8', '9', 'a', 'b',
'c', 'd', 'e', 'f',
}
@(private)
hex_digit :: proc(char: byte) -> (u8, bool) {
switch char {
case '0' ..= '9': return char - '0', true
case 'a' ..= 'f': return char - 'a' + 10, true
case 'A' ..= 'F': return char - 'A' + 10, true
case: return 0, false
}
}
+2 -2
View File
@@ -83,7 +83,7 @@ read :: proc(data: []byte, filename := "<input>", print_error := false, allocato
meta_data = make([]Meta, int(capacity))
count := 0
defer meta_data = meta_data[:count]
for m in &meta_data {
for &m in meta_data {
m.name = read_name(r) or_return
type := read_value(r, Meta_Value_Type) or_return
@@ -116,7 +116,7 @@ read :: proc(data: []byte, filename := "<input>", print_error := false, allocato
layer_count := 0
layers = make(Layer_Stack, stack_count)
defer layers = layers[:layer_count]
for layer in &layers {
for &layer in layers {
layer.name = read_name(r) or_return
layer.components = read_value(r, u8) or_return
type := read_value(r, Layer_Data_Type) or_return
+21 -18
View File
@@ -153,7 +153,7 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
case complex128: r, i = f64(real(z)), f64(imag(z))
case: return .Unsupported_Type
}
io.write_byte(w, '[') or_return
io.write_f64(w, r) or_return
io.write_string(w, ", ") or_return
@@ -165,8 +165,8 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
case runtime.Type_Info_String:
switch s in a {
case string: io.write_quoted_string(w, s) or_return
case cstring: io.write_quoted_string(w, string(s)) or_return
case string: io.write_quoted_string(w, s, '"', nil, true) or_return
case cstring: io.write_quoted_string(w, string(s), '"', nil, true) or_return
}
case runtime.Type_Info_Boolean:
@@ -198,7 +198,7 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
case runtime.Type_Info_Procedure:
return .Unsupported_Type
case runtime.Type_Info_Tuple:
case runtime.Type_Info_Parameters:
return .Unsupported_Type
case runtime.Type_Info_Simd_Vector:
@@ -207,7 +207,7 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
case runtime.Type_Info_Relative_Pointer:
return .Unsupported_Type
case runtime.Type_Info_Relative_Slice:
case runtime.Type_Info_Relative_Multi_Pointer:
return .Unsupported_Type
case runtime.Type_Info_Matrix:
@@ -262,10 +262,13 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
}
map_cap := uintptr(runtime.map_cap(m^))
ks, vs, hs, _, _ := runtime.map_kvh_data_dynamic(m^, info.map_info)
i := 0
for bucket_index in 0..<map_cap {
if !runtime.map_hash_is_valid(hs[bucket_index]) {
continue
}
runtime.map_hash_is_valid(hs[bucket_index]) or_continue
opt_write_iteration(w, opt, i) or_return
i += 1
key := rawptr(runtime.map_cell_index_dynamic(ks, info.map_info.ks, bucket_index))
value := rawptr(runtime.map_cell_index_dynamic(vs, info.map_info.vs, bucket_index))
@@ -280,8 +283,8 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
#partial switch info in ti.variant {
case runtime.Type_Info_String:
switch s in a {
case string: name = s
case cstring: name = string(s)
case string: name = s
case cstring: name = string(s)
}
opt_write_key(w, opt, name) or_return
@@ -400,7 +403,7 @@ opt_write_key :: proc(w: io.Writer, opt: ^Marshal_Options, name: string) -> (err
switch opt.spec {
case .JSON, .JSON5:
io.write_quoted_string(w, name) or_return
io.write_string(w, ": ") or_return
io.write_string(w, ": " if opt.pretty else ":") or_return
case .MJSON:
if opt.mjson_keys_use_quotes {
@@ -408,11 +411,11 @@ opt_write_key :: proc(w: io.Writer, opt: ^Marshal_Options, name: string) -> (err
} else {
io.write_string(w, name) or_return
}
if opt.mjson_keys_use_equal_sign {
io.write_string(w, " = ") or_return
io.write_string(w, " = " if opt.pretty else "=") or_return
} else {
io.write_string(w, ": ") or_return
io.write_string(w, ": " if opt.pretty else ":") or_return
}
}
@@ -437,12 +440,12 @@ opt_write_start :: proc(w: io.Writer, opt: ^Marshal_Options, c: byte) -> (err: i
return
}
// insert comma seperation and write indentations
// insert comma separation and write indentations
opt_write_iteration :: proc(w: io.Writer, opt: ^Marshal_Options, iteration: int) -> (err: io.Error) {
switch opt.spec {
case .JSON, .JSON5:
if iteration > 0 {
io.write_string(w, ", ") or_return
io.write_byte(w, ',') or_return
if opt.pretty {
io.write_byte(w, '\n') or_return
@@ -457,8 +460,8 @@ opt_write_iteration :: proc(w: io.Writer, opt: ^Marshal_Options, iteration: int)
if opt.pretty {
io.write_byte(w, '\n') or_return
} else {
// comma seperation necessary for non pretty output!
io.write_string(w, ", ") or_return
// comma separation necessary for non pretty output!
io.write_byte(w, ',') or_return
}
}
+22 -4
View File
@@ -2,6 +2,7 @@ package json
import "core:mem"
import "core:unicode/utf8"
import "core:unicode/utf16"
import "core:strconv"
Parser :: struct {
@@ -262,8 +263,17 @@ parse_object_body :: proc(p: ^Parser, end_token: Token_Kind) -> (obj: Object, er
return
}
obj[key] = elem
// NOTE(gonz): There are code paths for which this traversal ends up
// inserting empty key/values into the object and for those we do not
// want to allocate anything
if key != "" {
reserve_error := reserve(&obj, len(obj) + 1)
if reserve_error == mem.Allocator_Error.Out_Of_Memory {
return nil, .Out_Of_Memory
}
obj[key] = elem
}
if parse_comma(p) {
break
}
@@ -342,7 +352,7 @@ unquote_string :: proc(token: Token, spec: Specification, allocator := context.a
i += 1
continue
}
r, w := utf8.decode_rune_in_string(s)
r, w := utf8.decode_rune_in_string(s[i:])
if r == utf8.RUNE_ERROR && w == 1 {
break
}
@@ -403,11 +413,19 @@ unquote_string :: proc(token: Token, spec: Specification, allocator := context.a
}
i += 6
// If this is a surrogate pair, decode as such by taking the next rune too.
if r >= utf8.SURROGATE_MIN && r <= utf8.SURROGATE_HIGH_MAX && len(s) > i + 2 && s[i:i+2] == "\\u" {
r2 := get_u4_rune(s[i:])
if r2 >= utf8.SURROGATE_LOW_MIN && r2 <= utf8.SURROGATE_MAX {
i += 6
r = utf16.decode_surrogate_pair(r, r2)
}
}
buf, buf_width := utf8.encode_rune(r)
copy(b[w:], buf[:buf_width])
w += buf_width
case '0':
if spec != .JSON {
b[w] = '\x00'
+2 -1
View File
@@ -163,8 +163,9 @@ get_token :: proc(t: ^Tokenizer) -> (token: Token, err: Error) {
skip_alphanum :: proc(t: ^Tokenizer) {
for t.offset < len(t.data) {
switch next_rune(t) {
switch t.r {
case 'A'..='Z', 'a'..='z', '0'..='9', '_':
next_rune(t)
continue
}
+3 -3
View File
@@ -87,7 +87,8 @@ Error :: enum {
destroy_value :: proc(value: Value) {
destroy_value :: proc(value: Value, allocator := context.allocator) {
context.allocator = allocator
#partial switch v in value {
case Object:
for key, elem in v {
@@ -103,5 +104,4 @@ destroy_value :: proc(value: Value) {
case String:
delete(v)
}
}
}
+12 -4
View File
@@ -72,7 +72,7 @@ unmarshal_string :: proc(data: string, ptr: ^$T, spec := DEFAULT_SPECIFICATION,
@(private)
assign_bool :: proc(val: any, b: bool) -> bool {
v := reflect.any_core(val)
switch dst in &v {
switch &dst in v {
case bool: dst = bool(b)
case b8: dst = b8 (b)
case b16: dst = b16 (b)
@@ -85,7 +85,7 @@ assign_bool :: proc(val: any, b: bool) -> bool {
@(private)
assign_int :: proc(val: any, i: $T) -> bool {
v := reflect.any_core(val)
switch dst in &v {
switch &dst in v {
case i8: dst = i8 (i)
case i16: dst = i16 (i)
case i16le: dst = i16le (i)
@@ -122,7 +122,7 @@ assign_int :: proc(val: any, i: $T) -> bool {
@(private)
assign_float :: proc(val: any, f: $T) -> bool {
v := reflect.any_core(val)
switch dst in &v {
switch &dst in v {
case f16: dst = f16 (f)
case f16le: dst = f16le(f)
case f16be: dst = f16be(f)
@@ -150,7 +150,7 @@ assign_float :: proc(val: any, f: $T) -> bool {
@(private)
unmarshal_string_token :: proc(p: ^Parser, val: any, str: string, ti: ^reflect.Type_Info) -> bool {
val := val
switch dst in &val {
switch &dst in val {
case string:
dst = str
return true
@@ -215,6 +215,12 @@ unmarshal_value :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) {
}
}
switch &dst in v {
// Handle json.Value as an unknown type
case Value:
dst = parse_value(p) or_return
return
}
#partial switch token.kind {
case .Null:
@@ -346,6 +352,8 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unm
fields := reflect.struct_fields_zipped(ti.id)
runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD(ignore = context.temp_allocator == context.allocator)
field_used := make([]bool, len(fields), context.temp_allocator)
use_field_idx := -1
+21 -23
View File
@@ -19,43 +19,39 @@ import "core:fmt"
*/
print :: proc(writer: io.Writer, doc: ^Document) -> (written: int, err: io.Error) {
if doc == nil { return }
using fmt
written += wprintf(writer, "[XML Prolog]\n")
written += fmt.wprintf(writer, "[XML Prolog]\n")
for attr in doc.prologue {
written += wprintf(writer, "\t%v: %v\n", attr.key, attr.val)
written += fmt.wprintf(writer, "\t%v: %v\n", attr.key, attr.val)
}
written += wprintf(writer, "[Encoding] %v\n", doc.encoding)
written += fmt.wprintf(writer, "[Encoding] %v\n", doc.encoding)
if len(doc.doctype.ident) > 0 {
written += wprintf(writer, "[DOCTYPE] %v\n", doc.doctype.ident)
written += fmt.wprintf(writer, "[DOCTYPE] %v\n", doc.doctype.ident)
if len(doc.doctype.rest) > 0 {
wprintf(writer, "\t%v\n", doc.doctype.rest)
fmt.wprintf(writer, "\t%v\n", doc.doctype.rest)
}
}
for comment in doc.comments {
written += wprintf(writer, "[Pre-root comment] %v\n", comment)
written += fmt.wprintf(writer, "[Pre-root comment] %v\n", comment)
}
if len(doc.elements) > 0 {
wprintln(writer, " --- ")
fmt.wprintln(writer, " --- ")
print_element(writer, doc, 0)
wprintln(writer, " --- ")
fmt.wprintln(writer, " --- ")
}
return written, .None
}
print_element :: proc(writer: io.Writer, doc: ^Document, element_id: Element_ID, indent := 0) -> (written: int, err: io.Error) {
using fmt
tab :: proc(writer: io.Writer, indent: int) {
for _ in 0..=indent {
wprintf(writer, "\t")
fmt.wprintf(writer, "\t")
}
}
@@ -64,22 +60,24 @@ print_element :: proc(writer: io.Writer, doc: ^Document, element_id: Element_ID,
element := doc.elements[element_id]
if element.kind == .Element {
wprintf(writer, "<%v>\n", element.ident)
if len(element.value) > 0 {
tab(writer, indent + 1)
wprintf(writer, "[Value] %v\n", element.value)
fmt.wprintf(writer, "<%v>\n", element.ident)
for value in element.value {
switch v in value {
case string:
tab(writer, indent + 1)
fmt.wprintf(writer, "[Value] %v\n", v)
case Element_ID:
print_element(writer, doc, v, indent + 1)
}
}
for attr in element.attribs {
tab(writer, indent + 1)
wprintf(writer, "[Attr] %v: %v\n", attr.key, attr.val)
}
for child in element.children {
print_element(writer, doc, child, indent + 1)
fmt.wprintf(writer, "[Attr] %v: %v\n", attr.key, attr.val)
}
} else if element.kind == .Comment {
wprintf(writer, "[COMMENT] %v\n", element.value)
fmt.wprintf(writer, "[COMMENT] %v\n", element.value)
}
return written, .None
+3 -3
View File
@@ -72,10 +72,10 @@ example :: proc() {
return
}
printf("Found `<charlist>` with %v children, %v elements total\n", len(docs[0].elements[charlist].children), docs[0].element_count)
printf("Found `<charlist>` with %v children, %v elements total\n", len(docs[0].elements[charlist].value), docs[0].element_count)
crc32 := doc_hash(docs[0])
printf("[%v] CRC32: 0x%08x\n", "🎉" if crc32 == 0xcaa042b9 else "🤬", crc32)
crc32 := doc_hash(docs[0], false)
printf("[%v] CRC32: 0x%08x\n", "🎉" if crc32 == 0x420dbac5 else "🤬", crc32)
for round in 0..<N {
defer xml.destroy(docs[round])
+17 -12
View File
@@ -13,20 +13,25 @@ find_child_by_ident :: proc(doc: ^Document, parent_id: Element_ID, ident: string
tag := doc.elements[parent_id]
count := 0
for child_id in tag.children {
child := doc.elements[child_id]
/*
Skip commments. They have no name.
*/
if child.kind != .Element { continue }
for v in tag.value {
switch child_id in v {
case string: continue
case Element_ID:
child := doc.elements[child_id]
/*
Skip commments. They have no name.
*/
if child.kind != .Element { continue }
/*
If the ident matches and it's the nth such child, return it.
*/
if child.ident == ident {
if count == nth { return child_id, true }
count += 1
/*
If the ident matches and it's the nth such child, return it.
*/
if child.ident == ident {
if count == nth { return child_id, true }
count += 1
}
}
}
return 0, false
}
+16 -16
View File
@@ -125,38 +125,38 @@ error :: proc(t: ^Tokenizer, offset: int, msg: string, args: ..any) {
}
@(optimization_mode="speed")
advance_rune :: proc(using t: ^Tokenizer) {
advance_rune :: proc(t: ^Tokenizer) {
#no_bounds_check {
/*
Already bounds-checked here.
*/
if read_offset < len(src) {
offset = read_offset
if ch == '\n' {
line_offset = offset
line_count += 1
if t.read_offset < len(t.src) {
t.offset = t.read_offset
if t.ch == '\n' {
t.line_offset = t.offset
t.line_count += 1
}
r, w := rune(src[read_offset]), 1
r, w := rune(t.src[t.read_offset]), 1
switch {
case r == 0:
error(t, t.offset, "illegal character NUL")
case r >= utf8.RUNE_SELF:
r, w = #force_inline utf8.decode_rune_in_string(src[read_offset:])
r, w = #force_inline utf8.decode_rune_in_string(t.src[t.read_offset:])
if r == utf8.RUNE_ERROR && w == 1 {
error(t, t.offset, "illegal UTF-8 encoding")
} else if r == utf8.RUNE_BOM && offset > 0 {
} else if r == utf8.RUNE_BOM && t.offset > 0 {
error(t, t.offset, "illegal byte order mark")
}
}
read_offset += w
ch = r
t.read_offset += w
t.ch = r
} else {
offset = len(src)
if ch == '\n' {
line_offset = offset
line_count += 1
t.offset = len(t.src)
if t.ch == '\n' {
t.line_offset = t.offset
t.line_count += 1
}
ch = -1
t.ch = -1
}
}
}
+18 -28
View File
@@ -33,6 +33,7 @@ import "core:intrinsics"
import "core:mem"
import "core:os"
import "core:strings"
import "core:runtime"
likely :: intrinsics.expect
@@ -124,16 +125,19 @@ Document :: struct {
Element :: struct {
ident: string,
value: string,
value: [dynamic]Value,
attribs: Attributes,
kind: enum {
Element = 0,
Comment,
},
parent: Element_ID,
children: [dynamic]Element_ID,
}
Value :: union {
string,
Element_ID,
}
Attribute :: struct {
@@ -246,9 +250,6 @@ parse_bytes :: proc(data: []u8, options := DEFAULT_OPTIONS, path := "", error_ha
err = .Unexpected_Token
element, parent: Element_ID
tag_is_open := false
first_element := true
open: Token
/*
@@ -274,16 +275,10 @@ parse_bytes :: proc(data: []u8, options := DEFAULT_OPTIONS, path := "", error_ha
e.g. <odin - Start of new element.
*/
element = new_element(doc)
tag_is_open = true
if first_element {
/*
First element.
*/
parent = element
first_element = false
if element == 0 { // First Element
parent = element
} else {
append(&doc.elements[parent].children, element)
append(&doc.elements[parent].value, element)
}
doc.elements[element].parent = parent
@@ -323,7 +318,6 @@ parse_bytes :: proc(data: []u8, options := DEFAULT_OPTIONS, path := "", error_ha
expect(t, .Gt) or_return
parent = doc.elements[element].parent
element = parent
tag_is_open = false
case:
error(t, t.offset, "Expected close tag, got: %#v\n", end_token)
@@ -343,7 +337,6 @@ parse_bytes :: proc(data: []u8, options := DEFAULT_OPTIONS, path := "", error_ha
}
parent = doc.elements[element].parent
element = parent
tag_is_open = false
} else if open.kind == .Exclaim {
/*
@@ -391,8 +384,8 @@ parse_bytes :: proc(data: []u8, options := DEFAULT_OPTIONS, path := "", error_ha
el := new_element(doc)
doc.elements[el].parent = element
doc.elements[el].kind = .Comment
doc.elements[el].value = comment
append(&doc.elements[element].children, el)
append(&doc.elements[el].value, comment)
append(&doc.elements[element].value, el)
}
}
@@ -408,7 +401,7 @@ parse_bytes :: proc(data: []u8, options := DEFAULT_OPTIONS, path := "", error_ha
next := scan(t)
#partial switch next.kind {
case .Ident:
if len(next.text) == 3 && strings.to_lower(next.text, context.temp_allocator) == "xml" {
if len(next.text) == 3 && strings.equal_fold(next.text, "xml") {
parse_prologue(doc) or_return
} else if len(doc.prologue) > 0 {
/*
@@ -435,9 +428,6 @@ parse_bytes :: proc(data: []u8, options := DEFAULT_OPTIONS, path := "", error_ha
/*
End of file.
*/
if tag_is_open {
return doc, .Premature_EOF
}
break loop
case:
@@ -449,7 +439,7 @@ parse_bytes :: proc(data: []u8, options := DEFAULT_OPTIONS, path := "", error_ha
needs_processing |= .Decode_SGML_Entities in opts.flags
if !needs_processing {
doc.elements[element].value = body_text
append(&doc.elements[element].value, body_text)
continue
}
@@ -471,10 +461,10 @@ parse_bytes :: proc(data: []u8, options := DEFAULT_OPTIONS, path := "", error_ha
decoded, decode_err := entity.decode_xml(body_text, decode_opts)
if decode_err == .None {
doc.elements[element].value = decoded
append(&doc.elements[element].value, decoded)
append(&doc.strings_to_free, decoded)
} else {
doc.elements[element].value = body_text
append(&doc.elements[element].value, body_text)
}
}
}
@@ -517,7 +507,7 @@ destroy :: proc(doc: ^Document) {
for el in doc.elements {
delete(el.attribs)
delete(el.children)
delete(el.value)
}
delete(doc.elements)
@@ -614,6 +604,7 @@ parse_prologue :: proc(doc: ^Document) -> (err: Error) {
}
case "encoding":
runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD()
switch strings.to_lower(attr.val, context.temp_allocator) {
case "utf-8", "utf8":
doc.encoding = .UTF_8
@@ -708,6 +699,5 @@ new_element :: proc(doc: ^Document) -> (id: Element_ID) {
cur := doc.element_count
doc.element_count += 1
return cur
}
+4 -1
View File
@@ -35,6 +35,8 @@ Floating-point, complex numbers, and quaternions:
%F synonym for %f
%h hexadecimal (lower-case) representation with 0h prefix (0h01234abcd)
%H hexadecimal (upper-case) representation with 0H prefix (0h01234ABCD)
%m number of bytes in the best unit of measurement, e.g. 123.45mib
%M number of bytes in the best unit of measurement, e.g. 123.45MiB
String and slice of bytes
%s the uninterpreted bytes of the string or slice
%q a double-quoted string safely escaped with Odin syntax
@@ -68,7 +70,7 @@ A period with no following number specifies a precision of 0.
Examples:
%f default width, default precision
%8f width 8, default precision
%.3f default width, precision 2
%.2f default width, precision 2
%8.3f width 8, precision 3
%8.f width 8, precision 0
@@ -85,6 +87,7 @@ Other flags:
add leading 0z for dozenal (%#z)
add leading 0x or 0X for hexadecimal (%#x or %#X)
remove leading 0x for %p (%#p)
add a space between bytes and the unit of measurement (%#m or %#M)
' ' (space) leave a space for elided sign in numbers (% d)
0 pad with leading zeros rather than spaces
+720 -255
View File
File diff suppressed because it is too large Load Diff
+17 -20
View File
@@ -7,43 +7,40 @@ foreign import "odin_env"
@(private="file")
foreign odin_env {
write :: proc "c" (fd: u32, p: []byte) ---
write :: proc "contextless" (fd: u32, p: []byte) ---
}
@(private="file")
write_vtable := io.Stream_VTable{
impl_write = proc(s: io.Stream, p: []byte) -> (n: int, err: io.Error) {
fd := u32(uintptr(s.stream_data))
write_stream_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte, offset: i64, whence: io.Seek_From) -> (n: i64, err: io.Error) {
if mode == .Write {
fd := u32(uintptr(stream_data))
write(fd, p)
return len(p), nil
},
return i64(len(p)), nil
}
return 0, .Empty
}
@(private="file")
stdout := io.Writer{
stream = {
stream_vtable = &write_vtable,
stream_data = rawptr(uintptr(1)),
},
procedure = write_stream_proc,
data = rawptr(uintptr(1)),
}
@(private="file")
stderr := io.Writer{
stream = {
stream_vtable = &write_vtable,
stream_data = rawptr(uintptr(2)),
},
procedure = write_stream_proc,
data = rawptr(uintptr(2)),
}
// print formats using the default print settings and writes to stdout
print :: proc(args: ..any, sep := " ") -> int { return wprint(w=stdout, args=args, sep=sep) }
print :: proc(args: ..any, sep := " ", flush := true) -> int { return wprint(w=stdout, args=args, sep=sep, flush=flush) }
// println formats using the default print settings and writes to stdout
println :: proc(args: ..any, sep := " ") -> int { return wprintln(w=stdout, args=args, sep=sep) }
println :: proc(args: ..any, sep := " ", flush := true) -> int { return wprintln(w=stdout, args=args, sep=sep, flush=flush) }
// printf formats according to the specififed format string and writes to stdout
printf :: proc(fmt: string, args: ..any) -> int { return wprintf(stdout, fmt, ..args) }
printf :: proc(fmt: string, args: ..any, flush := true) -> int { return wprintf(stdout, fmt, ..args, flush=flush) }
// eprint formats using the default print settings and writes to stderr
eprint :: proc(args: ..any, sep := " ") -> int { return wprint(w=stderr, args=args, sep=sep) }
eprint :: proc(args: ..any, sep := " ", flush := true) -> int { return wprint(w=stderr, args=args, sep=sep, flush=flush) }
// eprintln formats using the default print settings and writes to stderr
eprintln :: proc(args: ..any, sep := " ") -> int { return wprintln(w=stderr, args=args, sep=sep) }
eprintln :: proc(args: ..any, sep := " ", flush := true) -> int { return wprintln(w=stderr, args=args, sep=sep, flush=flush) }
// eprintf formats according to the specififed format string and writes to stderr
eprintf :: proc(fmt: string, args: ..any) -> int { return wprintf(stderr, fmt, ..args) }
eprintf :: proc(fmt: string, args: ..any, flush := true) -> int { return wprintf(stderr, fmt, ..args, flush=flush) }
+51 -21
View File
@@ -4,42 +4,72 @@ package fmt
import "core:runtime"
import "core:os"
import "core:io"
import "core:bufio"
// fprint formats using the default print settings and writes to fd
fprint :: proc(fd: os.Handle, args: ..any, sep := " ") -> int {
w := io.to_writer(os.stream_from_handle(fd))
return wprint(w=w, args=args, sep=sep)
fprint :: proc(fd: os.Handle, args: ..any, sep := " ", flush := true) -> int {
buf: [1024]byte
b: bufio.Writer
defer bufio.writer_flush(&b)
bufio.writer_init_with_buf(&b, os.stream_from_handle(fd), buf[:])
w := bufio.writer_to_writer(&b)
return wprint(w, ..args, sep=sep, flush=flush)
}
// fprintln formats using the default print settings and writes to fd
fprintln :: proc(fd: os.Handle, args: ..any, sep := " ") -> int {
w := io.to_writer(os.stream_from_handle(fd))
return wprintln(w=w, args=args, sep=sep)
fprintln :: proc(fd: os.Handle, args: ..any, sep := " ", flush := true) -> int {
buf: [1024]byte
b: bufio.Writer
defer bufio.writer_flush(&b)
bufio.writer_init_with_buf(&b, os.stream_from_handle(fd), buf[:])
w := bufio.writer_to_writer(&b)
return wprintln(w, ..args, sep=sep, flush=flush)
}
// fprintf formats according to the specified format string and writes to fd
fprintf :: proc(fd: os.Handle, fmt: string, args: ..any) -> int {
w := io.to_writer(os.stream_from_handle(fd))
return wprintf(w, fmt, ..args)
fprintf :: proc(fd: os.Handle, fmt: string, args: ..any, flush := true) -> int {
buf: [1024]byte
b: bufio.Writer
defer bufio.writer_flush(&b)
bufio.writer_init_with_buf(&b, os.stream_from_handle(fd), buf[:])
w := bufio.writer_to_writer(&b)
return wprintf(w, fmt, ..args, flush=flush)
}
fprint_type :: proc(fd: os.Handle, info: ^runtime.Type_Info) -> (n: int, err: io.Error) {
w := io.to_writer(os.stream_from_handle(fd))
return wprint_type(w, info)
fprint_type :: proc(fd: os.Handle, info: ^runtime.Type_Info, flush := true) -> (n: int, err: io.Error) {
buf: [1024]byte
b: bufio.Writer
defer bufio.writer_flush(&b)
bufio.writer_init_with_buf(&b, os.stream_from_handle(fd), buf[:])
w := bufio.writer_to_writer(&b)
return wprint_type(w, info, flush=flush)
}
fprint_typeid :: proc(fd: os.Handle, id: typeid) -> (n: int, err: io.Error) {
w := io.to_writer(os.stream_from_handle(fd))
return wprint_typeid(w, id)
fprint_typeid :: proc(fd: os.Handle, id: typeid, flush := true) -> (n: int, err: io.Error) {
buf: [1024]byte
b: bufio.Writer
defer bufio.writer_flush(&b)
bufio.writer_init_with_buf(&b, os.stream_from_handle(fd), buf[:])
w := bufio.writer_to_writer(&b)
return wprint_typeid(w, id, flush=flush)
}
// print formats using the default print settings and writes to os.stdout
print :: proc(args: ..any, sep := " ") -> int { return fprint(fd=os.stdout, args=args, sep=sep) }
print :: proc(args: ..any, sep := " ", flush := true) -> int { return fprint(os.stdout, ..args, sep=sep, flush=flush) }
// println formats using the default print settings and writes to os.stdout
println :: proc(args: ..any, sep := " ") -> int { return fprintln(fd=os.stdout, args=args, sep=sep) }
println :: proc(args: ..any, sep := " ", flush := true) -> int { return fprintln(os.stdout, ..args, sep=sep, flush=flush) }
// printf formats according to the specified format string and writes to os.stdout
printf :: proc(fmt: string, args: ..any) -> int { return fprintf(os.stdout, fmt, ..args) }
printf :: proc(fmt: string, args: ..any, flush := true) -> int { return fprintf(os.stdout, fmt, ..args, flush=flush) }
// eprint formats using the default print settings and writes to os.stderr
eprint :: proc(args: ..any, sep := " ") -> int { return fprint(fd=os.stderr, args=args, sep=sep) }
eprint :: proc(args: ..any, sep := " ", flush := true) -> int { return fprint(os.stderr, ..args, sep=sep, flush=flush) }
// eprintln formats using the default print settings and writes to os.stderr
eprintln :: proc(args: ..any, sep := " ") -> int { return fprintln(fd=os.stderr, args=args, sep=sep) }
eprintln :: proc(args: ..any, sep := " ", flush := true) -> int { return fprintln(os.stderr, ..args, sep=sep, flush=flush) }
// eprintf formats according to the specified format string and writes to os.stderr
eprintf :: proc(fmt: string, args: ..any) -> int { return fprintf(os.stderr, fmt, ..args) }
eprintf :: proc(fmt: string, args: ..any, flush := true) -> int { return fprintf(os.stderr, fmt, ..args, flush=flush) }
+1 -1
View File
@@ -118,7 +118,7 @@ XXH_mul_64_to_128_fold_64 :: #force_inline proc(lhs, rhs: xxh_u64) -> (res: xxh_
}
@(optimization_mode="speed")
XXH_xorshift_64 :: #force_inline proc(v: xxh_u64, auto_cast shift: uint) -> (res: xxh_u64) {
XXH_xorshift_64 :: #force_inline proc(v: xxh_u64, #any_int shift: uint) -> (res: xxh_u64) {
return v ~ (v >> shift)
}
+5 -5
View File
@@ -634,7 +634,7 @@ alpha_add_if_missing :: proc(img: ^Image, alpha_key := Alpha_Key{}, allocator :=
buf := bytes.Buffer{}
// Can we allocate the return buffer?
if !resize(&buf.buf, bytes_wanted) {
if resize(&buf.buf, bytes_wanted) != nil {
delete(buf.buf)
return false
}
@@ -826,7 +826,7 @@ alpha_drop_if_present :: proc(img: ^Image, options := Options{}, alpha_key := Al
buf := bytes.Buffer{}
// Can we allocate the return buffer?
if !resize(&buf.buf, bytes_wanted) {
if resize(&buf.buf, bytes_wanted) != nil {
delete(buf.buf)
return false
}
@@ -1075,7 +1075,7 @@ apply_palette_rgb :: proc(img: ^Image, palette: [256]RGB_Pixel, allocator := con
// Can we allocate the return buffer?
buf := bytes.Buffer{}
bytes_wanted := compute_buffer_size(img.width, img.height, 3, 8)
if !resize(&buf.buf, bytes_wanted) {
if resize(&buf.buf, bytes_wanted) != nil {
delete(buf.buf)
return false
}
@@ -1112,7 +1112,7 @@ apply_palette_rgba :: proc(img: ^Image, palette: [256]RGBA_Pixel, allocator := c
// Can we allocate the return buffer?
buf := bytes.Buffer{}
bytes_wanted := compute_buffer_size(img.width, img.height, 4, 8)
if !resize(&buf.buf, bytes_wanted) {
if resize(&buf.buf, bytes_wanted) != nil {
delete(buf.buf)
return false
}
@@ -1147,7 +1147,7 @@ expand_grayscale :: proc(img: ^Image, allocator := context.allocator) -> (ok: bo
// Can we allocate the return buffer?
buf := bytes.Buffer{}
bytes_wanted := compute_buffer_size(img.width, img.height, img.channels + 2, img.depth)
if !resize(&buf.buf, bytes_wanted) {
if resize(&buf.buf, bytes_wanted) != nil {
delete(buf.buf)
return false
}
@@ -1,6 +1,48 @@
package image
import "core:os"
import "core:mem"
import "core:bytes"
Loader_Proc :: #type proc(data: []byte, options: Options, allocator: mem.Allocator) -> (img: ^Image, err: Error)
Destroy_Proc :: #type proc(img: ^Image)
@(private)
_internal_loaders: [Which_File_Type]Loader_Proc
_internal_destroyers: [Which_File_Type]Destroy_Proc
register :: proc(kind: Which_File_Type, loader: Loader_Proc, destroyer: Destroy_Proc) {
assert(loader != nil)
assert(destroyer != nil)
assert(_internal_loaders[kind] == nil)
_internal_loaders[kind] = loader
assert(_internal_destroyers[kind] == nil)
_internal_destroyers[kind] = destroyer
}
load_from_bytes :: proc(data: []byte, options := Options{}, allocator := context.allocator) -> (img: ^Image, err: Error) {
loader := _internal_loaders[which(data)]
if loader == nil {
return nil, .Unsupported_Format
}
return loader(data, options, allocator)
}
destroy :: proc(img: ^Image, allocator := context.allocator) {
if img == nil {
return
}
context.allocator = allocator
destroyer := _internal_destroyers[img.which]
if destroyer != nil {
destroyer(img)
} else {
assert(img.metadata == nil)
bytes.buffer_destroy(&img.pixels)
free(img)
}
}
Which_File_Type :: enum {
Unknown,
@@ -28,11 +70,6 @@ Which_File_Type :: enum {
XBM, // X BitMap
}
which :: proc{
which_bytes,
which_file,
}
which_bytes :: proc(data: []byte) -> Which_File_Type {
test_tga :: proc(s: string) -> bool {
get8 :: #force_inline proc(s: ^string) -> u8 {
@@ -164,16 +201,3 @@ which_bytes :: proc(data: []byte) -> Which_File_Type {
}
return .Unknown
}
which_file :: proc(path: string) -> Which_File_Type {
f, err := os.open(path)
if err != 0 {
return .Unknown
}
header: [128]byte
os.read(f, header[:])
file_type := which_bytes(header[:])
os.close(f)
return file_type
}
+10
View File
@@ -0,0 +1,10 @@
//+build js
package image
load :: proc{
load_from_bytes,
}
which :: proc{
which_bytes,
}
-61
View File
@@ -1,61 +0,0 @@
package image
import "core:mem"
import "core:os"
import "core:bytes"
Loader_Proc :: #type proc(data: []byte, options: Options, allocator: mem.Allocator) -> (img: ^Image, err: Error)
Destroy_Proc :: #type proc(img: ^Image)
@(private)
_internal_loaders: [Which_File_Type]Loader_Proc
_internal_destroyers: [Which_File_Type]Destroy_Proc
register :: proc(kind: Which_File_Type, loader: Loader_Proc, destroyer: Destroy_Proc) {
assert(loader != nil)
assert(destroyer != nil)
assert(_internal_loaders[kind] == nil)
_internal_loaders[kind] = loader
assert(_internal_destroyers[kind] == nil)
_internal_destroyers[kind] = destroyer
}
load :: proc{
load_from_bytes,
load_from_file,
}
load_from_bytes :: proc(data: []byte, options := Options{}, allocator := context.allocator) -> (img: ^Image, err: Error) {
loader := _internal_loaders[which(data)]
if loader == nil {
return nil, .Unsupported_Format
}
return loader(data, options, allocator)
}
load_from_file :: proc(filename: string, options := Options{}, allocator := context.allocator) -> (img: ^Image, err: Error) {
data, ok := os.read_entire_file(filename, allocator)
defer delete(data, allocator)
if ok {
return load_from_bytes(data, options, allocator)
} else {
return nil, .Unable_To_Read_File
}
}
destroy :: proc(img: ^Image, allocator := context.allocator) {
if img == nil {
return
}
context.allocator = allocator
destroyer := _internal_destroyers[img.which]
if destroyer != nil {
destroyer(img)
} else {
assert(img.metadata == nil)
bytes.buffer_destroy(&img.pixels)
free(img)
}
}

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