Commit Graph
100 Commits
Author SHA1 Message Date
Skgland 550efb8416 add a feature for things that are simple to cross-compile 2026-05-24 10:39:20 +02:00
Skgland e0c491e9f3 fix miri not being passed the target 2026-05-24 10:39:20 +02:00
Skgland f16850e5f8 fix ci and setup cross-compilation 2026-05-24 10:39:20 +02:00
Skgland ca0d4e9aac add miri CI for a big endian target 2026-05-24 10:39:20 +02:00
Skgland ac18aed5a7 use BTree{Map,Set} to ensure a stable order based on the key/entry even if filesystem enumeration order changes
this should help with reproducibility
2026-05-14 01:02:19 +02:00
Skgland 0c313a0849 upgrade libffi dependency 2026-05-08 22:36:41 +02:00
Skgland eac7ff680c fix ArenaPtr payload offset logic
the old logic would be incorrect if the payload has higher alignment than the ArenaHeader i.e. when there is padding between the ArenaHeader and the Payload
2026-04-25 18:12:32 +02:00
Skgland b4db85c8c3 don't erase ptr type early when construction a Cons HeapCellValue
rather than passing an address as usize pass the ArenaHeader pointer
similarly don't return a u8 ptr but use a ArenaHeader pointer instead

Don't convert the pointer to a ConsPtr by going through native endian
bytes in between.
We are exploiting the fact that the 3 least significant bytes are zero
for pointer to types of alignment 8 and we expect these to line up with
the f, m, and tag field at the end of the ConsPtr struct, but using
native endiannes for this would only work on big endian systems.
2026-04-25 18:12:31 +02:00
Skgland 6765921666 fix unused import warning on windows 2026-04-25 16:19:58 +02:00
Skgland ff293a56e6 fix large enum variant size difference warning of PermVarAllocation
by wrapping BranchNumber in an Arc.
PermVarAllocation::Done had size 208 and is now down to 32.
A Box rather than an Arc would be smaller, but it looks like BranchNumber/BranchDesignator are clones a bunch so I expect it to be beneficial to reduce allocations both of the Box itself as well as its content.
2026-04-25 16:19:53 +02:00
Skgland f7dc1d72f6 remove unused HeapCellValueView
it is identical to HeapCellValueTag
2026-04-22 22:16:36 +02:00
Skgland 8bbb484f94 update pyTooling/Actions/with-post-step@v4.1.0 -> pyTooling/Actions/with-post-step@v7.7.0 2026-04-11 00:06:13 +02:00
Skgland 717c3c2db8 update actions/cache@v4.3.0 -> actions/cache@v5.0.4 2026-04-10 23:59:59 +02:00
Skgland 0aa6abe517 pin 3rd-party actions
following githubs recommendations[^3rd-p-a] to use full-length commit SHA for 3rd-party actions

setup dependabot to help keep dependencies up-to-date

[^3rd-p-a]: https://docs.github.com/en/actions/reference/security/secure-use#using-third-party-actions
2026-04-10 23:52:43 +02:00
Skgland 4a9f690c16 update docker/build-push-action@v6 -> docker/build-push-action@v7 2026-04-10 23:22:38 +02:00
Skgland e3d020ea74 update docker/metadata-action@v5 -> docker/metadata-action@v6 2026-04-10 23:22:38 +02:00
Skgland 82378c6338 update docker/login-action@v3 -> docker/login-action@v4 2026-04-10 23:22:38 +02:00
Skgland f456c98c5b update docker/setup-buildx-action@v3 -> docker/setup-buildx-action@v4 2026-04-10 23:22:37 +02:00
Skgland 4db325e4b8 update actions/download-artifact@v4 -> actions/download-artifact@v8 2026-04-10 23:22:37 +02:00
Skgland 8f33eaf7d1 update actions/upload-artifact@v4 -> actions/upload-artifact@v7 2026-04-10 23:22:37 +02:00
Skgland eba16a2213 update actions/checkout@v4 -> actions/checkout@v6 2026-04-10 23:22:37 +02:00
Skgland bb9c1cf5a2 remove unused file 2026-04-03 00:16:59 +02:00
Skgland 3c9c7ade8d use checked_add to prevent silent overflow 2026-03-27 22:00:54 +01:00
Skgland 5fc21241d6 hint to the compiler/branch-predictor that
we expect p to be in bound

if we are suffiently certain that p can never be oob
unsafe get_unchecked could be used to
eliminate bounds checking all together
which should improve performance further.
2026-03-21 19:01:52 +01:00
Skgland 833c3bd77f run rustfmt 2026-03-21 14:24:13 +01:00
Skgland 153f04b72a adjust interrupt handling
we used to spend ~5.8% of the time on getting the next value of the 0..INSTRUCTIONS_PER_INTERRUPT_POLL iterator

increment on Wrapping<u8> now only takes ~0.58 of the time
2026-03-21 14:20:11 +01:00
Skgland 8aab887388 switch from Integer to u128
- u128 is only 16 bytes instead of 24
- incrementing u128 does not involve heap allocations
- u128 should be sufficent
 it would take more than 2 sextilion years to overflow if we would be incrementing it every tick at 5GHz
   i.e. 2^128-1 / 5 GHz / 60 / 60 / 24 / 356 > 2 sextilion

before this ~3.2% of the execution time of the program in https://github.com/mthom/scryer-prolog/issues/3265#issuecomment-4103176469 was spend in the increment_call_count function, after this change it's down to 0.3%
2026-03-21 13:36:40 +01:00
Skgland 2dc904aa73 run apt update before apt install
https://github.com/orgs/community/discussions/145882#discussioncomment-11447924
2026-02-20 23:00:45 +01:00
Skgland 0ceab41b39 fix warning in CI about using apt in a script 2026-02-20 22:57:44 +01:00
Skgland 2a79d6fc40 run cargo fmt 2026-02-20 22:52:25 +01:00
Skgland 49e49b425d fix clippy lint warning 2026-02-20 22:47:08 +01:00
Skgland 7d0d61d789 remove no longer necessary allows 2026-02-20 22:45:09 +01:00
Skgland 5ef5a3f30a replace custom modular_bitfields fork with update upstream
part of #2468
2026-02-20 22:40:33 +01:00
Skgland 65aadb3b88 reduce visibility to pub(crate) to prevent accidentally exposing 2026-01-24 04:20:13 +01:00
Skgland dfad71bc6e fix some lint warnings 2026-01-24 04:13:26 +01:00
Skgland d8c6fa1fe5 don't expose lexical error and provide location 2026-01-24 04:08:41 +01:00
Skgland 18b476af28 make ParserError a struct with an enum kind field 2026-01-24 04:08:40 +01:00
Skgland bd233fedfd add location to InvalidSingleQuotedCharacter 2026-01-24 04:08:40 +01:00
Skgland 083546442d make match exhaustive 2026-01-24 04:08:40 +01:00
Skgland 3343188756 replace pairs of usize with location struct 2026-01-24 04:08:40 +01:00
Skgland b14e363d5e run rustfmt to fix formatting 2026-01-10 18:31:40 +01:00
Skgland 5064760b1e fix spelling 2026-01-10 18:13:59 +01:00
Skgland eca4262be6 fix clippy lints 2026-01-10 17:52:34 +01:00
Skgland 73c26bed2a extaract the static part of the instructions template directly into the instructions module
This way goto source doesn't end up in a generated file for those parts and they can be edited directly.
I have way too often accidentally edited the generated file.
2026-01-10 17:48:07 +01:00
Skgland 129cca53ed throw error(resource_error(memory), []) when the list length exceeds usize. 2025-12-10 00:04:24 +01:00
Skgland 00aba96185 remove overengineered RecursionGuard 2025-12-08 22:27:24 +01:00
Skgland 616f071cd9 fix another integer overflow 2025-12-08 19:59:43 +01:00
Skgland 580572aec6 don't calculate panic message eagerly 2025-12-07 23:06:09 +01:00
Skgland 47e908bf76 handle overflown in Heap::with_cell_capacity 2025-12-07 22:59:00 +01:00
Skgland 11901b5fde handle oob heap index calculation 2025-12-07 21:45:13 +01:00
Skgland d63b0a192c use checked multiplication in heap_index! macro 2025-12-07 21:31:24 +01:00
Skgland 2fc08dde1e prevent multiply with overflow resulting in odd errors/segv 2025-12-07 21:27:24 +01:00
Skgland 193cfabc66 detect recursive throw_resource_error and panic instead of causing a segmentation fault 2025-12-07 21:08:17 +01:00
Skgland 7c3ffd0e87 deny function_casts_as_integer warnings 2025-12-04 23:35:35 +01:00
Skgland 797a8f8611 fix function_casts_as_integer warning
Comparing addresses of function pointers is brittle.

Functions may be duplicated resulting in function pointers to the same function to compare !=.
Functions may be merged/de-duplicated resulting in function pointers to different function to compare ==.

The later shouldn't be relevant here as the function differ in behavior, but mentioning it for completeness.
2025-12-04 23:35:23 +01:00
Skgland 6ec8c9064f fix pstr_iter_tests test 2025-11-20 23:08:46 +01:00
Skgland d4f2f7ba2b remove RESOURCE_ERROR_OFFSET_INIT
With it when using multiple Machine in one process only the first would store the pre-allocated error.
Instead Heap.resource_err_loc is now Option<NonZero<usize>> instead of usize using None for uninitialized.
The cell at index 0 should alredy be used by a runtime reserved interstitial cell that is allocated prior. So requiring the offset to be non zero should be fine.
2025-11-20 21:44:29 +01:00
Skgland a05dc79505 fix unecessary parens in macro 2025-11-20 21:24:47 +01:00
Skgland e90c813528 return an AllocError instead of panicing in Heap::with_cell_capacity 2025-11-20 21:13:17 +01:00
Skgland 516848e214 wrap resource_error into an error/2 functor and don't wrap it into a syntax_error functor 2025-11-20 01:22:18 +01:00
Skgland 6063783e9d propagate AllocErrro instead of unwrapping 2025-11-20 00:19:24 +01:00
Skgland e9e97fe82a handle machine heap/stack allocation error 2025-11-19 22:17:24 +01:00
Skgland 5686b69013 stub a clippy config
with things we need to get rid of replace if we want to eliminate panics due to oom
2025-11-19 19:23:42 +01:00
Skgland 248b05c992 use as_bytes().to_vec() instead of bytes().collect()
copying a slice into a vec should be easier to optimize by the complier than collecting a byte iteration into a vec
2025-11-19 19:23:41 +01:00
Skgland a283c8bdc2 remove some uncessary allocations/copies 2025-11-19 19:23:41 +01:00
Skgland 6b5ec3fab8 ignore incompatible msrv in compat module 2025-11-19 19:23:41 +01:00
Skgland a0b4162d7a improve count_to_letter_code
- reserve the complete required length at the beginning to reduce reallocations
- use u8 instead of char so that we can re-use the allocation for the string
2025-11-19 19:23:41 +01:00
Skgland 119761ad10 ignore unused_parens warning
parens are generated by external macro
2025-11-18 21:42:00 +01:00
Skgland bf8651db29 remove two unecessary clones 2025-11-18 21:29:22 +01:00
Skgland f8b9944f5c update documentation 2025-09-28 19:50:21 +02:00
Skgland 6e7dbfc75e consistently treat bool as i8 2025-09-28 18:29:20 +02:00
Skgland 1add5a9a75 add ffi types for non-fixed-sized integers 2025-09-28 18:17:35 +02:00
Skgland 777e6de9ee fix missing quotes 2025-09-28 13:43:09 +02:00
Skgland 2443af57d0 fixup quad 2025-09-27 23:14:14 +02:00
Skgland ed03d5b1b4 move CI job release from retired ubuntu-20.04 image to ubuntu-22.04
the new image is the same as all other ubuntu jobs
2025-09-27 22:54:45 +02:00
Skgland 9376bc6369 fix mthom/scryer-prolog#3073 2025-09-27 22:48:05 +02:00
Skgland 2f43c3ff40 add regression test for issue 3073 2025-09-27 22:05:51 +02:00
Skgland c067bfa832 allow 3rd argument of ffi:read_ptr to not be a variable 2025-08-29 00:36:35 +02:00
Skgland 14ce052bf2 export array_type/3 2025-08-26 00:33:16 +02:00
Skgland 252361fc20 fix left over todo 2025-08-26 00:15:13 +02:00
Skgland 78c08b87b6 cleanup ffi error handling and use Atom instead of &str in appropriate places 2025-08-26 00:01:35 +02:00
Skgland a140720c6f use representation_error rather than resource_error 2025-08-25 20:14:14 +02:00
Skgland 6f3f66c407 fix builds without ffi feature 2025-08-24 21:08:52 +02:00
Skgland 1f7a60dec9 add meta_predicate declaration for with_locals/2 2025-08-24 20:25:47 +02:00
Skgland ce9b41815d add documentation 2025-08-24 20:23:17 +02:00
Skgland 80bf276e09 run rustfmt 2025-08-24 19:57:54 +02:00
Skgland 8bc8171ec7 fix define_foreign_struct 2025-08-24 19:56:26 +02:00
Skgland 3b5b768f4a make ffi error structure not found point to the correct culprit 2025-08-24 19:56:26 +02:00
Skgland 176858ad42 fix map_ffi_arg 2025-08-24 19:56:26 +02:00
Skgland eba681786d make map_ffi_args a method and throw an instantiation error when encountering a variable 2025-08-24 19:56:25 +02:00
Skgland f4297e365f don't crash on empty list and differentiate list head not being string like 2025-08-24 19:56:25 +02:00
Skgland cd777294b9 use setup_call_cleanup/3 for with_locals
as suggested by triska
2025-08-24 19:56:25 +02:00
Skgland 3e929511bb add a test for with_locals 2025-08-24 19:56:24 +02:00
Skgland d1356db7e3 include a culprit in ffi_error 2025-08-24 19:56:24 +02:00
Skgland 7b2bf73ba1 fix with_locals 2025-08-24 19:56:24 +02:00
Skgland edd6d44bd6 require array_length to be > 0
C does not have 0-sized types
2025-08-24 19:56:24 +02:00
Skgland 4b5e4a2745 fix some things in ffi.pl
thanks triska for pointing out most of these
2025-08-24 19:56:23 +02:00
Skgland 3a4dfc46da add ffi helpers 2025-08-24 19:56:23 +02:00
Skgland d8346b1651 don't place allocate, read_ptr and deallocate between use_foreign_module and its helper predicates 2025-08-24 19:56:23 +02:00
Skgland 20d52c093a add ffi:{allocate,read_ptr,deallocate} 2025-08-24 19:56:23 +02:00