]> Repositorios git - scryer-prolog.git/log
scryer-prolog.git
2 years agoError handling
Nicolas Luck [Thu, 20 Jul 2023 20:23:51 +0000 (22:23 +0200)]
Error handling

2 years agoDon't panic when parsing results fails
Nicolas Luck [Thu, 20 Jul 2023 19:34:43 +0000 (21:34 +0200)]
Don't panic when parsing results fails

2 years agoAdd back newline at end of toplevel.pl
Nicolas Luck [Mon, 17 Jul 2023 19:52:17 +0000 (21:52 +0200)]
Add back newline at end of toplevel.pl

2 years agoAdd back all needed predicates to lib_toplevel.pl
Nicolas Luck [Mon, 17 Jul 2023 19:48:05 +0000 (21:48 +0200)]
Add back all needed predicates to lib_toplevel.pl

2 years agoUse lib constructor in lib tests
Nicolas Luck [Mon, 17 Jul 2023 19:47:43 +0000 (21:47 +0200)]
Use lib constructor in lib tests

2 years agofmt machine/parsed_results.rs
Nicolas Luck [Mon, 17 Jul 2023 19:35:00 +0000 (21:35 +0200)]
fmt machine/parsed_results.rs

2 years agoWIP: refactor to generalize Machine::run_top_level()
Nicolas Luck [Mon, 17 Jul 2023 19:34:26 +0000 (21:34 +0200)]
WIP: refactor to generalize Machine::run_top_level()

2 years agoAdd test for programatic queries
Nicolas Luck [Wed, 12 Jul 2023 09:57:53 +0000 (11:57 +0200)]
Add test for programatic queries

2 years agoFix build warnings
Nicolas Luck [Wed, 12 Jul 2023 09:38:53 +0000 (11:38 +0200)]
Fix build warnings

2 years agoRefactor result parsing to idiomatic Rust and extract into parsed_results.rs
Nicolas Luck [Wed, 12 Jul 2023 08:34:07 +0000 (10:34 +0200)]
Refactor result parsing to idiomatic Rust and extract into parsed_results.rs

2 years agoRemove debug println!s
Nicolas Luck [Tue, 11 Jul 2023 23:26:54 +0000 (01:26 +0200)]
Remove debug println!s

2 years agoParsed QueryResult
Nicolas Luck [Tue, 11 Jul 2023 23:24:39 +0000 (01:24 +0200)]
Parsed QueryResult

2 years agoMake run_input_once/0 match and print all results
Nicolas Luck [Tue, 11 Jul 2023 22:03:47 +0000 (00:03 +0200)]
Make run_input_once/0 match and print all results

2 years agoAdd convenience methods Machine::load_module_string() and Machine::run_query()
Nicolas Luck [Tue, 11 Jul 2023 12:51:58 +0000 (14:51 +0200)]
Add convenience methods Machine::load_module_string() and Machine::run_query()

2 years agoAdd Machine::run_input_once() which reads one goal from user input and runs it
Nicolas Luck [Tue, 11 Jul 2023 12:24:30 +0000 (14:24 +0200)]
Add Machine::run_input_once() which reads one goal from user input and runs it

2 years agoAdd Machine::set_user_input(&mut self, input: String) and get_user_output() -> String...
Nicolas Luck [Tue, 11 Jul 2023 12:22:27 +0000 (14:22 +0200)]
Add Machine::set_user_input(&mut self, input: String) and get_user_output() -> String. Make read_term_from_user_input() handle Stream::Byte.

3 years agoMerge pull request #1635 from mthom/rebis-dev v0.9.1
Mark Thom [Thu, 10 Nov 2022 06:18:10 +0000 (07:18 +0100)]
Merge pull request #1635 from mthom/rebis-dev

Merge rebis-dev into master

3 years agobump version to 0.9.1
Mark Thom [Thu, 10 Nov 2022 05:49:50 +0000 (06:49 +0100)]
bump version to 0.9.1

3 years agoremove num-rug-adapter
Mark Thom [Thu, 10 Nov 2022 05:56:23 +0000 (06:56 +0100)]
remove num-rug-adapter

3 years agomove asserta/2, assertz/2 to iso_ext
Mark Thom [Thu, 10 Nov 2022 05:47:32 +0000 (06:47 +0100)]
move asserta/2, assertz/2 to iso_ext

3 years agointroduce InlineTermStream to avoid arena allocations during call_inline (#1576)
Mark Thom [Tue, 8 Nov 2022 22:55:22 +0000 (23:55 +0100)]
introduce InlineTermStream to avoid arena allocations during call_inline (#1576)

3 years agoMerge pull request #1630 from epilys/fix-1625
Mark Thom [Thu, 27 Oct 2022 05:37:36 +0000 (23:37 -0600)]
Merge pull request #1630 from epilys/fix-1625

fix type_error with instantiated EOF -1 byte literal in get_byte/2

3 years agoFIXED: CLP(ℤ): Correctly remove all attributes during propagation of all_distinct...
Markus Triska [Mon, 24 Oct 2022 17:18:49 +0000 (19:18 +0200)]
FIXED: CLP(ℤ): Correctly remove all attributes during propagation of all_distinct/1 and other global constraints.

The constraints from library(clpz) were already correctly removed, but
others such as pending freeze/2 goals were not, potentially leading to
an accumulation of redundant constraints during propagation.

Test case:

   ?- freeze(A,(X=1;X=2)), all_distinct([A]), A = 1.
      A = 1, X = 1
   ;  A = 1, X = 2.

The combination of freeze/2 and CLP(ℤ) is useful for example when
creating animations of search processes.

This addresses #1624.

3 years agobuild partial strings using PStrLoc in write_term_to_heap (#1627)
Mark Thom [Sun, 23 Oct 2022 22:30:41 +0000 (16:30 -0600)]
build partial strings using PStrLoc in write_term_to_heap (#1627)

3 years agoexport asserta/2 (#1623)
Mark Thom [Sun, 23 Oct 2022 21:38:39 +0000 (15:38 -0600)]
export asserta/2 (#1623)

3 years agocache ball terms before unifying in handle_ball/3 (#1608)
Mark Thom [Sun, 23 Oct 2022 04:56:06 +0000 (22:56 -0600)]
cache ball terms before unifying in handle_ball/3 (#1608)

3 years agoSome minor fixes. Thanks to @triska for them!
Adrián Arroyo Calle [Sun, 9 Oct 2022 16:09:52 +0000 (18:09 +0200)]
Some minor fixes. Thanks to @triska for them!

3 years agofix crash in read_term (#1616)
Mark Thom [Tue, 4 Oct 2022 16:21:50 +0000 (10:21 -0600)]
fix crash in read_term (#1616)

3 years agoadjust rust-version declaration
Skgland [Thu, 15 Sep 2022 17:27:49 +0000 (19:27 +0200)]
adjust rust-version declaration

3 years agoSet default Shell
Adrián Arroyo Calle [Mon, 12 Sep 2022 21:32:00 +0000 (23:32 +0200)]
Set default Shell

3 years agoAdd Windows MSYS2
Adrián Arroyo Calle [Mon, 12 Sep 2022 21:24:40 +0000 (23:24 +0200)]
Add Windows MSYS2

3 years agoENHANCED: library(crypto): Faster conversion to bytes when the integer is known.
Markus Triska [Thu, 8 Sep 2022 17:45:43 +0000 (19:45 +0200)]
ENHANCED: library(crypto): Faster conversion to bytes when the integer is known.

These entailed constraints only affect performance, and can be removed
without affecting the correctness of the code. They speed up scalar
multiplication of a curve point, used for example in Bitcoinolog.

3 years agouse newly available u8s_to_string
Markus Triska [Sat, 3 Sep 2022 19:25:19 +0000 (21:25 +0200)]
use newly available u8s_to_string

3 years agoremove redundant error handling, since this case is checked in Prolog
Markus Triska [Sat, 3 Sep 2022 19:18:27 +0000 (21:18 +0200)]
remove redundant error handling, since this case is checked in Prolog

This restores f668640e3d9c4ccbd1fc0c6e98e1fb9c2cf1a39c, where this
change was already made. It seems it was accidentally overwritten in
0404c3bd949b09d6713d3869e37d30a6b8a77f97.

3 years agointroduce and use u8s_to_string
Markus Triska [Sat, 3 Sep 2022 18:40:15 +0000 (20:40 +0200)]
introduce and use u8s_to_string

3 years agouse (slightly) better variable names
Markus Triska [Sat, 3 Sep 2022 18:04:28 +0000 (20:04 +0200)]
use (slightly) better variable names

3 years agouse newly available must_be(chars, ...) for better and shorter type test
Markus Triska [Sat, 3 Sep 2022 17:58:51 +0000 (19:58 +0200)]
use newly available must_be(chars, ...) for better and shorter type test

3 years agoENHANCED: Eliminate the OpenSSL dependency of library(crypto).
Markus Triska [Sat, 3 Sep 2022 11:30:57 +0000 (13:30 +0200)]
ENHANCED: Eliminate the OpenSSL dependency of library(crypto).

This is achieved by using the newly available crrl crate by @pornin
to implement crypto_curve_scalar_mult/4 for secp256k1. Many thanks!

3 years agoproperly match strings concluding with characters in lists (#1597)
Mark Thom [Fri, 2 Sep 2022 03:14:50 +0000 (21:14 -0600)]
properly match strings concluding with characters in lists (#1597)

3 years agocorrect nth0/4 and nth1/4
Markus Triska [Thu, 25 Aug 2022 17:30:30 +0000 (19:30 +0200)]
correct nth0/4 and nth1/4

As per https://github.com/triska/scryer-prolog/commit/56b430ecaf9bd59fb7bd0b1e56d451ab322c422e#commitcomment-82155379.

3 years agoremove nth1/3, which is now provided by library(lists)
Markus Triska [Wed, 24 Aug 2022 22:03:47 +0000 (00:03 +0200)]
remove nth1/3, which is now provided by library(lists)

3 years agoremove nth1/3, which is now provided by library(lists)
Markus Triska [Wed, 24 Aug 2022 22:03:30 +0000 (00:03 +0200)]
remove nth1/3, which is now provided by library(lists)

3 years agoENHANCED: Much improved nth0/3, taken from #1529.
Markus Triska [Wed, 24 Aug 2022 19:11:54 +0000 (21:11 +0200)]
ENHANCED: Much improved nth0/3, taken from #1529.

This also adds nth0/4 and bootstraps nth1/[3,4] from it.

3 years agoADDED: must_be/can_be(not_less_than_zero, ...)
Markus Triska [Wed, 24 Aug 2022 19:05:44 +0000 (21:05 +0200)]
ADDED: must_be/can_be(not_less_than_zero, ...)

See #1309.

3 years agobetter implementation of list_si/1
Markus Triska [Tue, 23 Aug 2022 19:21:17 +0000 (21:21 +0200)]
better implementation of list_si/1

Per discussion in https://github.com/mthom/scryer-prolog/pull/1589.

3 years agoADDED: chars_si/1, testing for a string
Markus Triska [Tue, 23 Aug 2022 17:54:11 +0000 (19:54 +0200)]
ADDED: chars_si/1, testing for a string

Examples:

    ?- chars_si("hello").
       true.

    ?- chars_si(5).
       false.

    ?- chars_si([a,b,c|Rs]).
       error(instantiation_error,sort/2).

3 years agouse new domain names from library(error): octet_character, octet_chars
Markus Triska [Mon, 22 Aug 2022 20:08:10 +0000 (22:08 +0200)]
use new domain names from library(error): octet_character, octet_chars

3 years agoADDED: octet_character and octet_chars, testing for strings that represent bytes.
Markus Triska [Mon, 22 Aug 2022 19:54:03 +0000 (21:54 +0200)]
ADDED: octet_character and octet_chars, testing for strings that represent bytes.

3 years agorely on the built-in DCG expansion, per discussion in #1577
Markus Triska [Sun, 21 Aug 2022 16:59:36 +0000 (18:59 +0200)]
rely on the built-in DCG expansion, per discussion in #1577

3 years agoENHANCED: Use '$skip_max_list'/4 for greater efficiency of nth0/3.
Markus Triska [Sun, 21 Aug 2022 11:51:12 +0000 (13:51 +0200)]
ENHANCED: Use '$skip_max_list'/4 for greater efficiency of nth0/3.

This is now possible due to 4c7e2eb8614da9c04f2286f6116b468017fb442c.

See #1529 for the suggestion by @UWN.

3 years agoENHANCED: Improve determinism of ... //0 and seq//1.
Markus Triska [Sun, 21 Aug 2022 12:29:32 +0000 (14:29 +0200)]
ENHANCED: Improve determinism of ... //0 and seq//1.

Example:

    ?- phrase(..., "hello").
       true.

This addresses #1577.

3 years agooffset into complete strings with '$skip_max_list'/4 (#1529)
Mark Thom [Sun, 21 Aug 2022 02:28:49 +0000 (20:28 -0600)]
offset into complete strings with '$skip_max_list'/4 (#1529)

3 years agodon't return ops with priority 0 when building set for current_op (#1571)
Mark Thom [Sat, 20 Aug 2022 05:41:47 +0000 (23:41 -0600)]
don't return ops with priority 0 when building set for current_op (#1571)

3 years agotreat functors with PI '.'/2 as lists (#1570)
Mark Thom [Sun, 14 Aug 2022 22:14:53 +0000 (16:14 -0600)]
treat functors with PI '.'/2 as lists (#1570)

3 years agointroduce expand_call_goal/3 to expand goals in control meta-predicates (#1568)
Mark Thom [Sun, 14 Aug 2022 19:18:34 +0000 (13:18 -0600)]
introduce expand_call_goal/3 to expand goals in control meta-predicates (#1568)

3 years agouse a DCG to describe the path
Markus Triska [Sun, 14 Aug 2022 06:23:39 +0000 (08:23 +0200)]
use a DCG to describe the path

3 years agoremove entailed must_be/2 goals
Markus Triska [Sun, 14 Aug 2022 06:11:15 +0000 (08:11 +0200)]
remove entailed must_be/2 goals

3 years agouse newly available ... //0 from library(dcgs)
Markus Triska [Sat, 13 Aug 2022 19:42:44 +0000 (21:42 +0200)]
use newly available ... //0 from library(dcgs)

3 years agoadd meta_predicate/1 declaration for phrase_to_file/3
Markus Triska [Sat, 13 Aug 2022 19:39:08 +0000 (21:39 +0200)]
add meta_predicate/1 declaration for phrase_to_file/3

3 years agostrip modules from GRBody in phrase/3 (#1565)
Mark Thom [Sun, 14 Aug 2022 02:46:52 +0000 (20:46 -0600)]
strip modules from GRBody in phrase/3 (#1565)

3 years agofail on non-list solutions in setof/3 (#1553)
Mark Thom [Sat, 13 Aug 2022 16:14:37 +0000 (10:14 -0600)]
fail on non-list solutions in setof/3 (#1553)

3 years agoHTTP Server 2.0
Adrián Arroyo Calle [Thu, 11 Aug 2022 18:25:19 +0000 (20:25 +0200)]
HTTP Server 2.0

3 years agoprefix inlined goals with module names in expand_subgoal/5 (#1551)
Mark Thom [Sat, 6 Aug 2022 22:15:25 +0000 (16:15 -0600)]
prefix inlined goals with module names in expand_subgoal/5 (#1551)

3 years agotry to invoke '$call_inline' a second time in call/N (#1543)
Mark Thom [Mon, 25 Jul 2022 19:52:24 +0000 (13:52 -0600)]
try to invoke '$call_inline' a second time in call/N (#1543)

3 years agoENHANCED: CLP(ℤ): Reduce redundant propagator invocations during all_distinct/1 filtering
Markus Triska [Mon, 25 Jul 2022 18:08:54 +0000 (20:08 +0200)]
ENHANCED: CLP(ℤ): Reduce redundant propagator invocations during all_distinct/1 filtering

First, the current propagator is now logged and not re-triggered
during filtering. Second, and more significantly, all neq_num/2
constraints are scheduled and processed before more global constraints
are invoked. In this way, all the distilled information can be taken
into account by subsequently invoked global constraints.

These changes yield a 3-fold improvement in several Sudoku instances,
and a significant runtime reduction in social golfer instance 8-4-9.

3 years agoadd meta_predicate/1 declarations
Markus Triska [Sun, 24 Jul 2022 22:10:32 +0000 (00:10 +0200)]
add meta_predicate/1 declarations

3 years agoresolve phrase modules internally (#1541)
Mark Thom [Sun, 24 Jul 2022 21:20:53 +0000 (15:20 -0600)]
resolve phrase modules internally (#1541)

3 years agofail when exception caught from subgoal expansion (#1535)
Mark Thom [Sun, 24 Jul 2022 19:36:34 +0000 (13:36 -0600)]
fail when exception caught from subgoal expansion (#1535)

3 years agofix module resolution in dcgs, call/N (#1539)
Mark Thom [Sun, 24 Jul 2022 06:59:42 +0000 (00:59 -0600)]
fix module resolution in dcgs, call/N (#1539)

3 years agodeduplicate index ptr inlining for 0-arity atoms (#1538)
Mark Thom [Sat, 23 Jul 2022 19:16:02 +0000 (13:16 -0600)]
deduplicate index ptr inlining for 0-arity atoms (#1538)

3 years agotrim get_structure and put_structure arities when last arg is an index ptr (#1536)
Mark Thom [Sat, 23 Jul 2022 03:34:38 +0000 (21:34 -0600)]
trim get_structure and put_structure arities when last arg is an index ptr (#1536)

3 years agoprint index_ptr offset (#1534)
Mark Thom [Fri, 22 Jul 2022 19:10:12 +0000 (13:10 -0600)]
print index_ptr offset (#1534)

3 years agouse separate predicate for findall cleanup
Mark Thom [Thu, 21 Jul 2022 03:16:17 +0000 (21:16 -0600)]
use separate predicate for findall cleanup

3 years agoinference count call_inline, fail on undefined index
Mark Thom [Wed, 20 Jul 2022 19:31:44 +0000 (13:31 -0600)]
inference count call_inline, fail on undefined index

3 years agostreamline assertz/1, asserta/1
Mark Thom [Wed, 20 Jul 2022 02:29:22 +0000 (20:29 -0600)]
streamline assertz/1, asserta/1

3 years agoinline metacalls
Mark Thom [Wed, 13 Jul 2022 04:39:50 +0000 (22:39 -0600)]
inline metacalls

3 years agofix type_error with instantiated EOF -1 byte literal in get_byte/2
Manos Pitsidianakis [Wed, 26 Oct 2022 10:49:38 +0000 (13:49 +0300)]
fix type_error with instantiated EOF -1 byte literal in get_byte/2

According to ISO Prolog, get_byte/2 predicate can receive an
instantiated input byte:

http://www.gprolog.org/manual/html_node/gprolog037.html#sec156

    get_byte(+stream_or_alias, ?in_byte)

Since in_byte can be -1 if EOF is reached, instantiating it with -1
should work but does not because the implementation is trying to convert
it to a u8 which is unsigned:

?- open("/dev/null", read, S, [type(binary)]), get_byte(S, -1).
   error(type_error(in_byte,-1),get_byte/2).

This commit adds an extra check for -1 before checking for a valid u8
instantiated value if in_byte is an input:

?- open("/dev/null", read, S, [type(binary)]), get_byte(S, -1).
   S = '$stream'(0x55601e65c998).

Closes #1625

3 years agoMerge pull request #1628 from epilys/fix-1626
Mark Thom [Wed, 26 Oct 2022 02:46:49 +0000 (20:46 -0600)]
Merge pull request #1628 from epilys/fix-1626

Fix xor/2 type error reporting wrong argument

3 years agoFix xor/2 type error reporting wrong argument
Manos Pitsidianakis [Mon, 24 Oct 2022 16:26:43 +0000 (19:26 +0300)]
Fix xor/2 type error reporting wrong argument

If first argument n1 in xor/2 is of wrong numerical type, the match
patterns fall through to a catch all case that reports the second
argument in the type error.

Fixes #1626

`xor/2 function reports the wrong argument in type error #1626`

https://github.com/mthom/scryer-prolog/issues/1626

3 years agoMerge pull request #1530 from RossSmyth/FixImports
Mark Thom [Tue, 19 Jul 2022 03:36:46 +0000 (21:36 -0600)]
Merge pull request #1530 from RossSmyth/FixImports

Fixed imports for num-rug-adapter

3 years agoFixed imports num-rug-adapter
Ross Smyth [Sun, 17 Jul 2022 06:06:37 +0000 (02:06 -0400)]
Fixed imports num-rug-adapter

3 years agocapture and propagate (=..)/2 errors in phrase/{2,3} (#1460)
Mark Thom [Wed, 22 Jun 2022 04:47:55 +0000 (22:47 -0600)]
capture and propagate (=..)/2 errors in phrase/{2,3} (#1460)

3 years agopropagate inference_limit_exceeded errors through the loader (#1298)
Mark Thom [Sat, 18 Jun 2022 17:26:31 +0000 (11:26 -0600)]
propagate inference_limit_exceeded errors through the loader (#1298)

3 years agouse setup_cal_n_init_goal_info in dynamic_module_resolution
Mark Thom [Thu, 16 Jun 2022 04:32:05 +0000 (22:32 -0600)]
use setup_cal_n_init_goal_info in dynamic_module_resolution

4 years agoimprove efficiency of call/N, replace '$call_with_default_policy' with
Mark Thom [Mon, 13 Jun 2022 04:17:44 +0000 (22:17 -0600)]
improve efficiency of call/N, replace '$call_with_default_policy' with
'$call_with_inference_counting'

4 years agosimplify detecting undefined goal_ and term_expansion
Mark Thom [Wed, 8 Jun 2022 03:45:26 +0000 (21:45 -0600)]
simplify detecting undefined goal_ and term_expansion

4 years agoMerge pull request #1510 from Skgland/add-gitattributes
Mark Thom [Sun, 12 Jun 2022 21:44:14 +0000 (15:44 -0600)]
Merge pull request #1510 from Skgland/add-gitattributes

add a .gitattributes file

4 years agoadd a .gitattributes file
Skgland [Sun, 12 Jun 2022 13:39:55 +0000 (15:39 +0200)]
add a .gitattributes file

- this should stop problems such as mthom/scryer-prolog#1491
  by specifying the line ending
  as this should take precedence over the global config

4 years agoreplace call with $call in more meta-predicates
Mark Thom [Mon, 6 Jun 2022 02:53:07 +0000 (20:53 -0600)]
replace call with $call in more meta-predicates

4 years agoemit indexing instructions in single clauses of dynamic predicates
Mark Thom [Sun, 5 Jun 2022 05:43:48 +0000 (23:43 -0600)]
emit indexing instructions in single clauses of dynamic predicates

4 years agodo not emit indexing instructions for single clause subsequences (#1503)
Mark Thom [Sat, 4 Jun 2022 21:29:00 +0000 (15:29 -0600)]
do not emit indexing instructions for single clause subsequences (#1503)

4 years agoMerge pull request #1505 from Skgland/optional_rustfmt
Mark Thom [Sat, 4 Jun 2022 15:56:51 +0000 (09:56 -0600)]
Merge pull request #1505 from Skgland/optional_rustfmt

make rustfmt optional

4 years agoadjust error message on failed formatting
Skgland [Fri, 3 Jun 2022 21:50:17 +0000 (23:50 +0200)]
adjust error message on failed formatting

4 years agomake rustfmt optional
Skgland [Fri, 3 Jun 2022 21:35:55 +0000 (23:35 +0200)]
make rustfmt optional

- when rustfmt is not detected (by attempting to run ``rustfmt --version)
  no formatting will be attempted
- this should resolve issue mthom/scryer-prolog#1504

4 years agounmark cells in arith_eval_by_metacall (#1497)
Mark Thom [Wed, 1 Jun 2022 06:02:11 +0000 (00:02 -0600)]
unmark cells in arith_eval_by_metacall (#1497)

4 years agodon't print superfluous round brackets in curly braces (#1416)
Mark Thom [Wed, 1 Jun 2022 05:34:55 +0000 (23:34 -0600)]
don't print superfluous round brackets in curly braces (#1416)

4 years agofix broken quoting in writeq/1 (#1498)
Mark Thom [Wed, 1 Jun 2022 00:12:19 +0000 (18:12 -0600)]
fix broken quoting in writeq/1 (#1498)

4 years agofix off-by-one error reporting in write_term/3 (#1490)
Mark Thom [Tue, 31 May 2022 05:25:44 +0000 (23:25 -0600)]
fix off-by-one error reporting in write_term/3 (#1490)

4 years agodon't quote most characters in strings (#1495, #301)
Mark Thom [Tue, 31 May 2022 05:09:20 +0000 (23:09 -0600)]
don't quote most characters in strings (#1495, #301)

4 years agouse existence_error for dropped streams (#1472)
Mark Thom [Mon, 23 May 2022 17:15:58 +0000 (11:15 -0600)]
use existence_error for dropped streams (#1472)