Emilie Burgun
22538a05be
Fix backtracking on the topmost predicate triggering UB in run_module_predicate
...
Fixes #2815 , see that issue for my investigation.
This is a one-line fix that I'm quite proud of :)
If the topmost query for `run_module_predicate` needs to backtrack,
then before this commit, one of the following two things may happen:
- A dangling OrFrame is read at stack offset 0
- An AndFrame was at stack offset 0 would be read as an OrFrame
This can be seen by either calling `run_module_predicate` with a
throwing predicate (encountering the second scenario) or a failing
predicate (encountering the first scenario), or by running the following
in the REPL, which triggers a `throw/1` within the error handler, propagating
it all the way up (and encountering the second scenario):
```prolog
?- current_output(S), open(stream(S), write, S0, [type(binary)]).
```
Currently, `Stack` is not equipped with tools to detect this incorrect
behavior, so it would instead try to read an OrFrame at offset 0, which
triggers UB, since transmuting between AndFramePrelude and OrFramePrelude
isn't legal.
In practice, since `AndFramePrelude` is smaller, the later fields of
`OrFramePrelude` would read from the cells following the `AndFramePrelude`,
and would contain nonsensical data, triggering the panic that led to
my investigation in #2815 and that is fairly reliable to witness.
Surprisingly, this wouldn't happen with `run_query`, which led me to
look at how they operate differently. It turns out that `run_query`
inserts an OrFrame at offset 0, which covers both problematic scenarios.
The fix is thus to simply add a call to `Machine::allocate_stub_choice_point`
in `run_module_predicate` :)
2025-02-06 00:43:01 +01:00
bakaq
74e3d32ca9
Use Cow<'a,B> for toplevel configuration
2024-12-12 05:59:59 -03:00
bakaq
33d8abfed8
Remove parsed_results.rs
2024-12-08 20:18:06 -03:00
bakaq
d336cbc86a
MachineBuilder
2024-12-08 20:18:06 -03:00
bakaq
cb040dafc1
Docs for Machine and QueryState
2024-12-08 20:18:06 -03:00
bakaq
658e39aae6
Machine and stream config rework
2024-12-08 20:18:05 -03:00
bakaq
d32f3ee2f3
Fix warnings
2024-09-06 18:42:31 -03:00
bakaq
ada9ba98cc
Make macros private
2024-09-06 17:17:04 -03:00
bakaq
806e980cca
Be conservative with visibility
2024-09-03 01:02:01 -03:00
Bennet Bleßmann
c29b76143c
fix copy-past error
2024-07-26 00:13:49 +02:00
Bennet Bleßmann
3ad4b05a97
add a features for gating things we can use once 1.80 is msrv
2024-07-25 23:09:17 +02:00
Bennet Bleßmann
0da313eb84
use a OnceLock static for LIBRARIES instead of thread_local! static
2024-07-25 18:58:29 +02:00
Bennet Bleßmann
6b50ec328c
move the creation of the LIBRARIES IndexMap out of the generated file
...
- only leave the filling of the map in the generated code
2024-07-25 18:53:36 +02:00
Bennet Bleßmann
a2a50586aa
replace static Once and two mut statics with one static OnceLock
2024-07-07 11:30:56 +02:00
Bennet Bleßmann
943dce566b
fix clippy
2024-07-06 18:26:34 +02:00
Bennet Bleßmann
1d66f91a41
replace ref_thread_local::ref_thread_local! with std::thread_local!
...
removes `ref_thread_local` which was still at 0.0.0 released October 2018 while latest 0.1.1 was released mid November 2021
fixes libraries.rs UB
2024-07-06 17:18:26 +02:00
Bennet Bleßmann
d2d451b182
adjust the generation of the LIBRARIES map
...
pre-genrate constants instaed of driectly genrating the literal for the insert
2024-07-06 03:53:22 +02:00
Bennet Bleßmann
52fa51853e
don't use env::current_dir() in miri
2024-07-06 03:53:22 +02:00
Mark
6fe8f64835
scan registers of instructions leading to verify_attributes interrupt to find the number of registers to save ( #2307 )
2024-01-25 23:59:54 -07:00
Mark Thom
5c89029462
Merge pull request #2263 from aarroyoc/docs-toplevel
...
Move argv/1 to library(os)
2024-01-02 09:19:10 -07:00
Adrián Arroyo Calle
47b5ae7984
Move argv/1 to library(os)
2024-01-02 13:16:11 +01:00
bakaq
d9d90d1ae8
Emit warnings as Prolog comments
2023-12-30 17:39:20 -03:00
Mark
46e432c4d9
restore [o|i]ip zeroing to trust and fix '$get_clause_p'/3 ( #2238 )
2023-12-20 20:45:15 -07:00
Mark
b943afb7c7
fix '$get_clause_p' whose old implementation was broken by the introduction
...
of lookahead indexing
2023-12-18 13:28:45 -07:00
infogulch
11832b524b
Expose inference counts on Machine; publish to CI
2023-11-21 21:53:29 -06:00
infogulch
9444e62df9
Resolve lints and format
2023-11-04 02:16:54 -05:00
Nicolas Luck
ee1bd9e006
Merge branch 'master' into library-use-case
2023-11-02 11:12:54 +01:00
Mark
6a913bc4cc
use Deutsch-Schorr-Waite to implement acyclic_term/1 ( #2128 )
2023-10-21 21:47:29 -06:00
Nicolas Luck
d7fa6c0ade
Fix signalling of success/failure (by @mthom)
2023-10-16 14:56:17 +02:00
Nicolas Luck
025412aac0
Revert "Remove unuse import"
...
This reverts commit bfa7d3cf41 .
2023-10-16 14:55:38 +02:00
Nicolas Luck
bfa7d3cf41
Remove unuse import
2023-10-16 13:44:51 +02:00
Nicolas Luck
640c637ca8
Merge branch 'master' into library-use-case
...
# Conflicts:
# Cargo.lock
# Cargo.toml
# src/http.rs
# src/machine/mock_wam.rs
# src/machine/mod.rs
# src/machine/system_calls.rs
2023-10-05 12:06:47 +02:00
Mark
a6535c28ea
remove module_resolution_error ( #2035 )
2023-09-26 14:06:21 -06:00
infogulch
eecfeb2d03
Simplify maybe
...
Fix whitespace
2023-09-20 18:23:07 -05:00
Adrián Arroyo Calle
7cf6e77f4d
Use a SeedableRng to generate random numbers
2023-09-20 22:07:46 +02:00
Nicolas Luck
136463c92e
Merge branch 'master' into library-use-case
...
# Conflicts:
# Cargo.toml
# src/atom_table.rs
# src/bin/scryer-prolog.rs
# src/http.rs
# src/machine/mock_wam.rs
# src/machine/mod.rs
# src/machine/system_calls.rs
2023-09-13 18:13:14 +02:00
Rujia Liu
b6ce6b7cdb
Basic WebAssembly support with minimal Javascript API #615 . Currently 6/12 crypto functions supported. Tested in browser with all default features disabled.
2023-09-08 17:27:22 +08:00
Bennet Bleßmann
13cbff7eab
[WIP] fix deadlock in AtomTable::build_with
2023-09-05 19:12:22 +02:00
Skgland
86166dbf25
[WIP] make AtomTable concurrentcy ready
2023-09-05 19:12:22 +02:00
Skgland
b2130c2a48
run cargo fmt
2023-09-05 19:12:17 +02:00
Mark
5585e83fd6
correct inference counting over index backtracking, built-ins ( #1977 , #1987 )
2023-09-04 17:15:16 -06:00
Nicolas Luck
4d19c437e0
Merge branch 'master' into library-use-case
...
# Conflicts:
# Cargo.toml
# src/machine/mock_wam.rs
# src/machine/mod.rs
2023-08-30 18:12:26 +02:00
Rujia Liu
4fd059be5f
32-bit system support, addressing all (at most) 4GB addresses of RAM.
2023-08-24 20:05:40 +08:00
Rujia Liu
25d4950216
Allow users to disable optional features. Needed for wasm32 support (see #615 ).
2023-08-21 10:01:24 +08:00
Nicolas Luck
48a4835819
Merge branch 'master' into library-use-case
...
# Conflicts:
# Cargo.lock
# Cargo.toml
# src/bin/scryer-prolog.rs
# src/loader.pl
# src/machine/mock_wam.rs
# src/machine/mod.rs
# src/machine/system_calls.rs
2023-08-03 20:16:32 +02:00
Joshua Parkin
65eb93793c
dont spawn a runtime in machine; inherit from outside with runtime::handle::Current
2023-08-03 16:22:03 +01:00
Nicolas Luck
2f99bb025c
Add consult that works with streams / strings in library use-case
2023-07-27 11:41:52 +02:00
Mark
af44d91568
Merge branch 'dashu' of https://github.com/coasys/scryer-prolog into coasys-dashu
2023-07-24 11:47:57 -06:00
Mark
fd7f24e265
remove EMIT_NEWLINE ( #1900 )
2023-07-22 21:42:40 -06:00
Mark
24450a8827
use ExitCode when halting so Drop is called, close terminal stream in rustyline Drop
2023-07-22 19:06:13 -06:00