]> Repositorios git - scryer-prolog.git/log
scryer-prolog.git
3 months agoMerge pull request #3234 from fusiongyro/patch-1
Mark Thom [Tue, 10 Mar 2026 05:09:40 +0000 (22:09 -0700)]
Merge pull request #3234 from fusiongyro/patch-1

Fixed a typo in the documentation for atom_codes/2

3 months agoMerge pull request #3232 from triska/not_si
Mark Thom [Tue, 10 Mar 2026 05:09:09 +0000 (22:09 -0700)]
Merge pull request #3232 from triska/not_si

ADDED: not_si/1

3 months agoMerge pull request #3252 from Skgland/towards-a-crate-without-syn@1
Mark Thom [Tue, 10 Mar 2026 05:08:28 +0000 (22:08 -0700)]
Merge pull request #3252 from Skgland/towards-a-crate-without-syn@1

replace custom modular_bitfields fork with update upstream

3 months agoMerge pull request #3241 from Skgland/parse-error-improvements
Mark Thom [Tue, 10 Mar 2026 05:07:03 +0000 (22:07 -0700)]
Merge pull request #3241 from Skgland/parse-error-improvements

change `ParserError` type

3 months agoMerge pull request #3189 from Skgland/fix-function_casts_as_integer
Mark Thom [Tue, 10 Mar 2026 05:06:33 +0000 (22:06 -0700)]
Merge pull request #3189 from Skgland/fix-function_casts_as_integer

fix `function_casts_as_integer` warning

3 months agoMerge pull request #3260 from thierrymarianne/dealing-with-invalid-utf8-string
Mark Thom [Tue, 10 Mar 2026 03:56:04 +0000 (20:56 -0700)]
Merge pull request #3260 from thierrymarianne/dealing-with-invalid-utf8-string

handle invalid UTF-8 string

3 months agoadd documentation
Thierry Marianne [Thu, 5 Mar 2026 08:02:59 +0000 (09:02 +0100)]
add documentation

Signed-off-by: Thierry Marianne <[email protected]>
3 months agorevise indentation of raw string
Thierry Marianne [Wed, 4 Mar 2026 14:06:27 +0000 (15:06 +0100)]
revise indentation of raw string

Signed-off-by: Thierry Marianne <[email protected]>
3 months agouse C-string literal
Thierry M. [Wed, 4 Mar 2026 14:01:23 +0000 (15:01 +0100)]
use C-string literal

Co-authored-by: Bennet Bleßmann <[email protected]>
3 months agocargo fmt fixes
Thierry Marianne [Wed, 4 Mar 2026 13:04:47 +0000 (14:04 +0100)]
cargo fmt fixes

Signed-off-by: Thierry Marianne <[email protected]>
3 months agoapply suggestion
Thierry Marianne [Wed, 4 Mar 2026 12:58:08 +0000 (13:58 +0100)]
apply suggestion

Signed-off-by: Thierry Marianne <[email protected]>
3 months agomove test to tests/scryer/ffi.rs
Thierry Marianne [Wed, 4 Mar 2026 12:57:17 +0000 (13:57 +0100)]
move test to tests/scryer/ffi.rs

Signed-off-by: Thierry Marianne <[email protected]>
3 months agouse CStr .to_str() method
Thierry M. [Wed, 4 Mar 2026 12:40:05 +0000 (13:40 +0100)]
use CStr .to_str() method

Co-authored-by: Bennet Bleßmann <[email protected]>
3 months agouse C-string literal
Thierry M. [Wed, 4 Mar 2026 12:33:00 +0000 (13:33 +0100)]
use C-string literal

Co-authored-by: Bennet Bleßmann <[email protected]>
3 months agofix utf-8 panic
Thierry Marianne [Wed, 4 Mar 2026 11:03:21 +0000 (12:03 +0100)]
fix utf-8 panic

Signed-off-by: Thierry Marianne <[email protected]>
3 months agoadd failing test highlighting panic on invalid UTF-8 cstr
Thierry Marianne [Wed, 4 Mar 2026 07:55:11 +0000 (08:55 +0100)]
add failing test highlighting panic on invalid UTF-8 cstr

Signed-off-by: Thierry Marianne <[email protected]>
3 months agorun apt update before apt install
Skgland [Fri, 20 Feb 2026 22:00:45 +0000 (23:00 +0100)]
run apt update before apt install

https://github.com/orgs/community/discussions/145882#discussioncomment-11447924

3 months agofix warning in CI about using apt in a script
Skgland [Fri, 20 Feb 2026 21:57:44 +0000 (22:57 +0100)]
fix warning in CI about using apt in a script

3 months agorun cargo fmt
Skgland [Fri, 20 Feb 2026 21:52:25 +0000 (22:52 +0100)]
run cargo fmt

3 months agofix clippy lint warning
Skgland [Fri, 20 Feb 2026 21:47:08 +0000 (22:47 +0100)]
fix clippy lint warning

3 months agoremove no longer necessary allows
Skgland [Fri, 20 Feb 2026 21:45:09 +0000 (22:45 +0100)]
remove no longer necessary allows

3 months agoreplace custom modular_bitfields fork with update upstream
Skgland [Fri, 20 Feb 2026 21:37:49 +0000 (22:37 +0100)]
replace custom modular_bitfields fork with update upstream

part of #2468

4 months agoreduce visibility to pub(crate) to prevent accidentally exposing
Skgland [Sat, 24 Jan 2026 03:20:13 +0000 (04:20 +0100)]
reduce visibility to pub(crate) to prevent accidentally exposing

4 months agofix some lint warnings
Skgland [Sat, 24 Jan 2026 03:13:26 +0000 (04:13 +0100)]
fix some lint warnings

4 months agodon't expose lexical error and provide location
Skgland [Sat, 24 Jan 2026 02:32:42 +0000 (03:32 +0100)]
don't expose lexical error and provide location

4 months agomake ParserError a struct with an enum kind field
Skgland [Sat, 24 Jan 2026 02:24:02 +0000 (03:24 +0100)]
make ParserError a struct with an enum kind field

4 months agoadd location to InvalidSingleQuotedCharacter
Skgland [Sat, 24 Jan 2026 01:23:19 +0000 (02:23 +0100)]
add location to InvalidSingleQuotedCharacter

4 months agomake match exhaustive
Skgland [Sat, 24 Jan 2026 01:22:44 +0000 (02:22 +0100)]
make match exhaustive

4 months agoreplace pairs of usize with location struct
Skgland [Sat, 24 Jan 2026 00:54:29 +0000 (01:54 +0100)]
replace pairs of usize with location struct

4 months agoFixed a typo in the documentation for atom_codes/2
Daniel K Lyons [Tue, 20 Jan 2026 16:54:18 +0000 (09:54 -0700)]
Fixed a typo in the documentation for atom_codes/2

4 months agoADDED: not_si/1
Markus Triska [Sun, 18 Jan 2026 08:57:37 +0000 (09:57 +0100)]
ADDED: not_si/1

For a recent example that would benefit from this, see "Prolog Basics
Explained with Pokémon" by @alexpetros:

    https://unplannedobsolescence.com/blog/prolog-basics-pokemon/

Thank you a lot!

4 months agoMerge pull request #3211 from mthom/setof_correction_and_opt
Mark Thom [Thu, 15 Jan 2026 05:07:10 +0000 (22:07 -0700)]
Merge pull request #3211 from mthom/setof_correction_and_opt

Correct and optimize setof/3 and bagof/3

4 months agoremove unnecessary extra work in findall_with_existential/5 setof_correction_and_opt origin/setof_correction_and_opt
Mark Thom [Tue, 13 Jan 2026 06:47:39 +0000 (22:47 -0800)]
remove unnecessary extra work in findall_with_existential/5

4 months agoremove hashbrown crate
Mark Thom [Tue, 13 Jan 2026 06:13:02 +0000 (22:13 -0800)]
remove hashbrown crate

4 months agoreplace sort_without_dedup/2 with keysort/2
Mark Thom [Fri, 9 Jan 2026 04:29:26 +0000 (20:29 -0800)]
replace sort_without_dedup/2 with keysort/2

4 months agocargo fmt fixes
Mark Thom [Fri, 9 Jan 2026 04:09:12 +0000 (20:09 -0800)]
cargo fmt fixes

4 months agoremove variant_hashing.rs and related instructions
Mark Thom [Thu, 8 Jan 2026 08:27:02 +0000 (00:27 -0800)]
remove variant_hashing.rs and related instructions

4 months agofind variant terms using just sort/2 and (==)/2
Mark Thom [Thu, 8 Jan 2026 08:23:52 +0000 (00:23 -0800)]
find variant terms using just sort/2 and (==)/2

4 months agodo not retain attributes in solutions of findall (#3020)
Mark Thom [Wed, 31 Dec 2025 06:16:25 +0000 (22:16 -0800)]
do not retain attributes in solutions of findall (#3020)

4 months agofix cargo fmt
Mark Thom [Sun, 14 Dec 2025 02:22:15 +0000 (18:22 -0800)]
fix cargo fmt

4 months agoadd variant_hash and is_non_variant to fix setof/3, bagof/3
Mark Thom [Sat, 13 Dec 2025 02:05:47 +0000 (18:05 -0800)]
add variant_hash and is_non_variant to fix setof/3, bagof/3

4 months agoreplace compare_term_test with parallel iterator, add is_not_variant
Mark Thom [Fri, 12 Dec 2025 06:08:16 +0000 (22:08 -0800)]
replace compare_term_test with parallel iterator, add is_not_variant

4 months agouse branch numbers to detect branch subsumption
Mark Thom [Wed, 10 Dec 2025 07:14:24 +0000 (23:14 -0800)]
use branch numbers to detect branch subsumption

4 months agoassert rational(3) as true in tests/builtins.pl
Mark Thom [Sun, 7 Dec 2025 23:15:18 +0000 (15:15 -0800)]
assert rational(3) as true in tests/builtins.pl

4 months agoMerge pull request #3222 from Skgland/reduce-instructions_template
Mark Thom [Tue, 13 Jan 2026 06:22:44 +0000 (23:22 -0700)]
Merge pull request #3222 from Skgland/reduce-instructions_template

move static parts of instructions template directly into instructions module, fix clippy and typos

5 months agorun rustfmt to fix formatting
Skgland [Sat, 10 Jan 2026 17:31:40 +0000 (18:31 +0100)]
run rustfmt to fix formatting

5 months agorestore accidentally removed comment
Bennet Bleßmann [Sat, 10 Jan 2026 17:30:09 +0000 (18:30 +0100)]
restore accidentally removed comment

5 months agofix spelling
Skgland [Sat, 10 Jan 2026 16:53:19 +0000 (17:53 +0100)]
fix spelling

5 months agofix clippy lints
Skgland [Sat, 10 Jan 2026 16:52:34 +0000 (17:52 +0100)]
fix clippy lints

5 months agoextaract the static part of the instructions template directly into the instructions...
Skgland [Sat, 10 Jan 2026 16:48:07 +0000 (17:48 +0100)]
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.

5 months agoMerge pull request #3207 from Skgland/quote-fix-unquote-segv
Mark Thom [Wed, 17 Dec 2025 21:11:21 +0000 (14:11 -0700)]
Merge pull request #3207 from Skgland/quote-fix-unquote-segv

"fix" segv from #3198, #3199, and #3205

6 months agothrow `error(resource_error(memory), [])` when the list length exceeds usize.
Skgland [Tue, 9 Dec 2025 23:04:24 +0000 (00:04 +0100)]
throw `error(resource_error(memory), [])` when the list length exceeds usize.

6 months agoMerge pull request #3177 from triska/use_phrase_to_file
Mark Thom [Tue, 9 Dec 2025 02:23:52 +0000 (19:23 -0700)]
Merge pull request #3177 from triska/use_phrase_to_file

use more recently available phrase_[to|from]_file/3 in example

6 months agoremove overengineered RecursionGuard
Skgland [Mon, 8 Dec 2025 21:27:24 +0000 (22:27 +0100)]
remove overengineered RecursionGuard

6 months agofix another integer overflow
Skgland [Mon, 8 Dec 2025 18:59:43 +0000 (19:59 +0100)]
fix another integer overflow

6 months agodon't calculate panic message eagerly
Skgland [Sun, 7 Dec 2025 22:06:09 +0000 (23:06 +0100)]
don't calculate panic message eagerly

6 months agohandle overflown in Heap::with_cell_capacity
Skgland [Sun, 7 Dec 2025 21:59:00 +0000 (22:59 +0100)]
handle overflown in Heap::with_cell_capacity

6 months agohandle oob heap index calculation
Skgland [Sun, 7 Dec 2025 20:45:13 +0000 (21:45 +0100)]
handle oob heap index calculation

6 months agouse checked multiplication in heap_index! macro
Skgland [Sun, 7 Dec 2025 20:31:24 +0000 (21:31 +0100)]
use checked multiplication in heap_index! macro

6 months agoprevent multiply with overflow resulting in odd errors/segv
Skgland [Sun, 7 Dec 2025 20:27:24 +0000 (21:27 +0100)]
prevent multiply with overflow resulting in odd errors/segv

6 months agodetect recursive throw_resource_error and panic instead of causing a segmentation...
Skgland [Sun, 7 Dec 2025 20:08:17 +0000 (21:08 +0100)]
detect recursive throw_resource_error and panic instead of causing a segmentation fault

6 months agodeny `function_casts_as_integer` warnings
Skgland [Thu, 27 Nov 2025 19:11:55 +0000 (20:11 +0100)]
deny `function_casts_as_integer` warnings

6 months agofix `function_casts_as_integer` warning
Skgland [Thu, 27 Nov 2025 19:07:13 +0000 (20:07 +0100)]
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.

6 months agofix backtrack_on_resource_error around choice instructions
Mark Thom [Thu, 4 Dec 2025 02:13:00 +0000 (18:13 -0800)]
fix backtrack_on_resource_error around choice instructions

6 months agoMerge pull request #3185 from mthom/install_verify_attr_opt
Mark Thom [Thu, 4 Dec 2025 02:10:46 +0000 (19:10 -0700)]
Merge pull request #3185 from mthom/install_verify_attr_opt

Optimize `verify_attr` by removing the need to scan instructions

6 months agoMerge pull request #3164 from Skgland/alloc_errors2
Mark Thom [Thu, 4 Dec 2025 02:10:22 +0000 (19:10 -0700)]
Merge pull request #3164 from Skgland/alloc_errors2

handle machine heap/stack allocation error

6 months agoMerge pull request #3147 from jjtolton/error-termination-flag
Mark Thom [Tue, 2 Dec 2025 07:24:46 +0000 (00:24 -0700)]
Merge pull request #3147 from jjtolton/error-termination-flag

Add -t flag for custom toplevel (replaces --halt-on-error)

6 months agoMerge pull request #3179 from triska/meetups
Mark Thom [Tue, 2 Dec 2025 06:55:46 +0000 (23:55 -0700)]
Merge pull request #3179 from triska/meetups

update meetups

6 months agoMerge pull request #3180 from triska/foldl_6
Mark Thom [Tue, 2 Dec 2025 06:55:34 +0000 (23:55 -0700)]
Merge pull request #3180 from triska/foldl_6

ADDED: foldl/6, addressing #2973

6 months agocorrections to arithmetic expression compilation install_verify_attr_opt origin/install_verify_attr_opt
Mark Thom [Fri, 28 Nov 2025 05:03:56 +0000 (21:03 -0800)]
corrections to arithmetic expression compilation

6 months agocorrections to dispatch loop
Mark Thom [Fri, 28 Nov 2025 05:03:22 +0000 (21:03 -0800)]
corrections to dispatch loop

6 months agorevise InstallVerifyAttrs to remove need for predicate scanning (#3175)
Mark Thom [Wed, 26 Nov 2025 07:17:22 +0000 (23:17 -0800)]
revise InstallVerifyAttrs to remove need for predicate scanning (#3175)

6 months agoremove interms field from MachineState
Mark Thom [Tue, 25 Nov 2025 06:19:09 +0000 (22:19 -0800)]
remove interms field from MachineState

6 months agoADDED: foldl/6, addressing #2973
Markus Triska [Sun, 23 Nov 2025 09:59:12 +0000 (10:59 +0100)]
ADDED: foldl/6, addressing #2973

6 months agoupdate meetups
Markus Triska [Sun, 23 Nov 2025 09:29:31 +0000 (10:29 +0100)]
update meetups

6 months agouse more recently available phrase_[to|from]_file/3 in example
Markus Triska [Sun, 23 Nov 2025 08:42:14 +0000 (09:42 +0100)]
use more recently available phrase_[to|from]_file/3 in example

6 months agofix pstr_iter_tests test
Skgland [Thu, 20 Nov 2025 22:08:46 +0000 (23:08 +0100)]
fix pstr_iter_tests test

6 months agoremove RESOURCE_ERROR_OFFSET_INIT
Skgland [Thu, 20 Nov 2025 20:44:29 +0000 (21:44 +0100)]
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.

6 months agofix unecessary parens in macro
Skgland [Thu, 20 Nov 2025 20:24:47 +0000 (21:24 +0100)]
fix unecessary parens in macro

6 months agoreturn an AllocError instead of panicing in Heap::with_cell_capacity
Skgland [Thu, 20 Nov 2025 20:13:17 +0000 (21:13 +0100)]
return an AllocError instead of panicing in Heap::with_cell_capacity

6 months agowrap resource_error into an error/2 functor and don't wrap it into a syntax_error...
Skgland [Wed, 19 Nov 2025 23:48:04 +0000 (00:48 +0100)]
wrap resource_error into an error/2 functor and don't wrap it into a syntax_error functor

6 months agopropagate AllocErrro instead of unwrapping
Skgland [Wed, 19 Nov 2025 23:19:24 +0000 (00:19 +0100)]
propagate AllocErrro instead of unwrapping

6 months agohandle machine heap/stack allocation error
Skgland [Wed, 19 Nov 2025 21:08:42 +0000 (22:08 +0100)]
handle machine heap/stack allocation error

6 months agostub a clippy config
Skgland [Tue, 18 Nov 2025 21:13:18 +0000 (22:13 +0100)]
stub a clippy config

with things we need to get rid of replace if we want to eliminate panics due to oom

6 months agouse as_bytes().to_vec() instead of bytes().collect()
Skgland [Tue, 18 Nov 2025 21:01:42 +0000 (22:01 +0100)]
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

6 months agoremove some uncessary allocations/copies
Skgland [Tue, 18 Nov 2025 20:59:55 +0000 (21:59 +0100)]
remove some uncessary allocations/copies

6 months agoignore incompatible msrv in compat module
Skgland [Tue, 18 Nov 2025 20:54:02 +0000 (21:54 +0100)]
ignore incompatible msrv in compat module

6 months agoimprove count_to_letter_code
Skgland [Tue, 18 Nov 2025 20:42:10 +0000 (21:42 +0100)]
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

6 months agoignore unused_parens warning
Skgland [Tue, 18 Nov 2025 20:42:00 +0000 (21:42 +0100)]
ignore unused_parens warning

parens are generated by external macro

6 months agoremove two unecessary clones
Skgland [Tue, 18 Nov 2025 20:27:23 +0000 (21:27 +0100)]
remove two unecessary clones

6 months agoFix -t flag help text to reflect it accepts any goal
J.J. Tolton [Fri, 14 Nov 2025 15:55:49 +0000 (10:55 -0500)]
Fix -t flag help text to reflect it accepts any goal

The -t flag is not limited to arity 0 predicates - it accepts any
goal including goals with arguments (e.g., -t 'halt(1)'). Updated
the help text to remove the incorrect "(arity 0 predicate)" constraint.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
7 months agoMove -t and -g flags before filenames in tests
J.J. Tolton [Sun, 9 Nov 2025 18:04:59 +0000 (13:04 -0500)]
Move -t and -g flags before filenames in tests

Per maintainer feedback, switches must come before files to follow
the convention: switches before files are Scryer-specific, switches
after files are application-specific.

7 months agoRemove redundant unit test file
J.J. Tolton [Sun, 9 Nov 2025 17:56:02 +0000 (12:56 -0500)]
Remove redundant unit test file

The custom_toplevel.pl unit tests were trivial and didn't actually test
the functionality. All real testing is done via comprehensive CLI tests
in tests/scryer/cli/src_tests/custom_toplevel.md

7 months agoMove g_caused_exception/2 dynamic directive to toplevel.pl
J.J. Tolton [Sun, 9 Nov 2025 17:16:02 +0000 (12:16 -0500)]
Move g_caused_exception/2 dynamic directive to toplevel.pl

- Add dynamic directive in toplevel.pl with other module-level directives
- Update test files to reference it as '':g_caused_exception/2
- Remove redundant dynamic directives from test files
- All tests passing

7 months agoUpdate tests to use format/2 instead of write/1
J.J. Tolton [Sun, 9 Nov 2025 17:05:23 +0000 (12:05 -0500)]
Update tests to use format/2 instead of write/1

7 months agoAdd comprehensive tests for g_caused_exception/2
J.J. Tolton [Sat, 8 Nov 2025 17:59:00 +0000 (12:59 -0500)]
Add comprehensive tests for g_caused_exception/2

Following TESTING_GUIDE.md, added tests at layers 2 and 3:

Layer 2 - Prolog Integration Tests (src/tests/custom_toplevel.pl):
- Test that g_caused_exception/2 is not asserted when no exception occurs
- Test that g_caused_exception/2 can be checked from custom toplevel
- Added check_for_exception/0 helper predicate for testing

Layer 3 - CLI Tests (tests/scryer/cli/src_tests/custom_toplevel.md):
- Test g_caused_exception/2 with exception thrown
- Test g_caused_exception/2 with no exception
- Test g_caused_exception/2 with error/2 terms
- Added test helper predicates in fixtures/toplevel_test_helper.pl

All tests pass successfully.

Co-Authored-By: J.J.'s Robot <[email protected]>
7 months agoAdd g_caused_exception/2 for custom toplevel error handling
J.J. Tolton [Sat, 8 Nov 2025 17:43:46 +0000 (12:43 -0500)]
Add g_caused_exception/2 for custom toplevel error handling

When a goal throws an exception during initialization (-g flag), the
system now asserts g_caused_exception(Goal, Exception) in the user
module. This allows custom toplevels (-t flag) to check if an error
occurred and handle it appropriately.

Example usage:
  scryer-prolog -g "throw(error)" -t check_error

Where check_error can be:
  :- dynamic(g_caused_exception/2).

  check_error :-
      (   g_caused_exception(_, E) ->
          write('Error: '), write(E), nl, halt(1)
      ;   halt(0)
      ).

This enables scripts to use custom toplevels for sophisticated error
handling and exit code logic.

Addresses: https://github.com/mthom/scryer-prolog/pull/3147#issuecomment-3503875719

Co-Authored-By: J.J.'s Robot <[email protected]>
7 months agoFix bug where -t argument was processed as filename
J.J. Tolton [Fri, 7 Nov 2025 00:39:21 +0000 (19:39 -0500)]
Fix bug where -t argument was processed as filename

Fixed issue where `scryer-prolog -t halt` would try to load "halt.pl"
as a file instead of just using halt as the custom toplevel.

The bug was caused by an extra clause `delegate_task([], []).` that
would return control to the calling context instead of continuing to
start_toplevel. This caused the argument processing in delegate_task
to continue and treat the already-consumed toplevel argument as a
filename.

Removing this clause ensures that delegate_task([], Goals0) always
proceeds to load initialization files and start the toplevel, fixing
the double-processing bug.

Co-Authored-By: J.J.'s Robot <[email protected]>
7 months agoAdd comprehensive tests for -t custom toplevel flag
J.J. Tolton [Fri, 7 Nov 2025 00:12:09 +0000 (19:12 -0500)]
Add comprehensive tests for -t custom toplevel flag

- Create Prolog integration tests in src/tests/custom_toplevel.pl
- Add CLI test configuration in tests/scryer/cli/src_tests/custom_toplevel_tests.toml
- Tests verify:
  * -t halt terminates after initialization
  * Custom toplevels can be user-defined predicates
  * Toplevel receives control after initialization completes
  * Default behavior is REPL when no -t specified
- All tests pass successfully

Following TESTING_GUIDE.md three-layer testing approach:
- Layer 2: Prolog integration tests with test_framework
- Layer 3: CLI snapshot tests with .toml configuration

Co-Authored-By: J.J.'s Robot <[email protected]>
7 months ago-t custom toplevel option
J.J. Tolton [Fri, 7 Nov 2025 00:02:30 +0000 (19:02 -0500)]
-t custom toplevel option

- Add -t FLAG to specify custom toplevel (arity 0 predicate)
- Default toplevel is 'repl' if -t is not specified
- Using `-t halt` achieves original goal of guaranteed termination
- Custom toplevels enable flexible exit strategies (e.g., server mode)
- Update help text to document -t flag

Examples:
  scryer-prolog -t halt program.pl    # Exits after execution
  scryer-prolog -t my_repl program.pl # Custom REPL
  scryer-prolog program.pl            # Default REPL

Co-Authored-By: J.J.'s Robot <[email protected]>