From: Mark Date: Mon, 24 Jul 2023 17:47:57 +0000 (-0600) Subject: Merge branch 'dashu' of https://github.com/coasys/scryer-prolog into coasys-dashu X-Git-Tag: v0.9.2~23^2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=refs%2Fheads%2Fcoasys-dashu;p=scryer-prolog.git Merge branch 'dashu' of https://github.com/coasys/scryer-prolog into coasys-dashu --- af44d915687ba3e2e7897e7bd6190afd327c3d40 diff --cc Cargo.lock index 72725aac,66246593..967181ad --- a/Cargo.lock +++ b/Cargo.lock @@@ -58,27 -43,6 +58,21 @@@ version = "1.1.0 source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - [[package]] - name = "az" - version = "1.2.1" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" - +[[package]] +name = "backtrace" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "base64" version = "0.12.3" @@@ -708,21 -727,11 +769,11 @@@ dependencies = "syn 1.0.109", ] - [[package]] - name = "gmp-mpfr-sys" - version = "1.5.3" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "13eabc29d16e4a621b495e3919c71ebb7caaed24380955671e7d417370fea95d" - dependencies = [ - "libc", - "windows-sys 0.42.0", - ] - [[package]] name = "h2" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" +checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" dependencies = [ "bytes", "fnv", @@@ -1748,30 -1766,13 +1832,19 @@@ dependencies = "xmlparser", ] - [[package]] - name = "rug" - version = "1.19.2" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "555e8b44763d034526db899c88cd56ccc4486cd38b444c8aa0e79d4e70ae5a34" - dependencies = [ - "az", - "gmp-mpfr-sys", - "libc", - ] - +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + [[package]] name = "rustix" -version = "0.37.20" +version = "0.37.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b96e891d04aa506a6d1f318d2771bcb1c7dfda84e126660ace067c9b474bb2c0" +checksum = "62f25693a73057a1b4cb56179dd3c7ea21a7c6c5ee7d85781f5749b46f34b79c" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", diff --cc Cargo.toml index 7db6c287,58d13d0c..194d4482 --- a/Cargo.toml +++ b/Cargo.toml @@@ -45,8 -44,7 +44,7 @@@ ctrlc = "3.2.2 ordered-float = "2.6.0" phf = { version = "0.9", features = ["macros"] } ref_thread_local = "0.0.0" - rug = { version = "1.15.0", optional = true } -rustyline = "9.0.0" +rustyline = "12.0.0" ring = "0.16.13" ripemd160 = "0.8.0" sha3 = "0.8.2" @@@ -61,10 -59,10 +59,9 @@@ smallvec = "1.8.0 sodiumoxide = "0.2.6" static_assertions = "1.1.0" ryu = "1.0.9" -hyper = { version = "0.14", features = ["full"] } -hyper-tls = "0.5.0" -tokio = { version = "1.24.2", features = ["full"] } +hyper = { version = "1.0.0-rc.3", features = ["full"] } +tokio = { version = "1.28.2", features = ["full"] } futures = "0.3" - libffi = "3.1.0" libloading = "0.7" derive_deref = "1.1.1" http-body-util = "0.1.0-rc.2" diff --cc src/machine/arithmetic_ops.rs index 6be49e8d,1859d1d7..02087865 --- a/src/machine/arithmetic_ops.rs +++ b/src/machine/arithmetic_ops.rs @@@ -191,9 -194,16 +194,15 @@@ pub(crate) fn neg(n: Number, arena: &mu Number::arena_from(-Integer::from(n.get_num()), arena) } } - Number::Integer(n) => Number::arena_from(-Integer::from(&*n), arena), - + Number::Integer(n) => { + let n_clone: Integer = (*n).clone(); + Number::arena_from(-Integer::from(n_clone), arena) + }, Number::Float(OrderedFloat(f)) => Number::Float(OrderedFloat(-f)), - Number::Rational(r) => Number::arena_from(-Rational::from(&*r), arena), + Number::Rational(r) => { + let r_clone: Rational = (*r).clone(); + Number::arena_from(-Rational::from(r_clone), arena) + }, } } diff --cc src/machine/machine_state.rs index d76e1cf1,768e4492..ccd65764 --- a/src/machine/machine_state.rs +++ b/src/machine/machine_state.rs @@@ -12,10 -12,9 +12,10 @@@ use crate::machine::machine_indices::* use crate::machine::stack::*; use crate::machine::streams::*; use crate::parser::ast::*; +use crate::read::TermWriteResult; use crate::types::*; - use crate::parser::rug::Integer; + use crate::parser::dashu::Integer; use indexmap::IndexMap; diff --cc src/machine/system_calls.rs index 85d26922,fb54d361..016a3c7d --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@@ -39,7 -42,8 +42,7 @@@ use std::borrow::BorrowMut use std::cell::Cell; use std::cmp::Ordering; use std::collections::BTreeSet; - use std::convert::{TryFrom}; -use std::convert::Infallible; + use std::convert::TryFrom; use std::env; use std::ffi::CString; use std::fs; @@@ -79,17 -84,14 +82,13 @@@ use base64 use roxmltree; use select; -use hyper::{Body, Server, Client, HeaderMap, Method, Request, Response, Uri}; -use hyper::header::{HeaderName, HeaderValue}; -use hyper::body::Buf; -use hyper::service::{make_service_fn, service_fn}; -use hyper_tls::HttpsConnector; -use tokio::sync::Mutex; -use tokio::sync::mpsc::channel; +use hyper::server::conn::http1; +use hyper::header::{HeaderValue, HeaderName}; +use hyper::{HeaderMap, Method}; +use http_body_util::BodyExt; +use bytes::Buf; +use reqwest::Url; - ref_thread_local! { - pub(crate) static managed RANDOM_STATE: RandState<'static> = RandState::new(); - } - pub(crate) fn get_key() -> KeyEvent { let key; enable_raw_mode().expect("failed to enable raw mode"); @@@ -4137,10 -4103,25 +4136,25 @@@ impl Machine } #[inline(always)] - pub(crate) fn maybe(&mut self) { + pub(crate) fn maybe(&mut self) { + fn generate_random_bits(num_bits: usize) -> u64 { + let mut rng = rand::thread_rng(); + let rand = rng.borrow_mut(); + let mut random_bits: u64 = 0; - ++ + for _ in 0..num_bits { + random_bits <<= 1; - ++ + if rand.gen_bool(0.5) { + random_bits |= 1; + } + } - ++ + random_bits + } + let result = { - let mut rand = RANDOM_STATE.borrow_mut(); - rand.bits(1) == 0 + generate_random_bits(1) == 0 }; self.machine_st.fail = result; @@@ -5239,7 -5204,7 +5253,7 @@@ // n has already been confirmed as an integer, and // internally, Rational is assumed reduced, so its // denominator must be 1. - r.numer().to_u8().unwrap() - r.numerator().to_i32().unwrap() ++ r.numerator().to_u8().unwrap() } _ => { unreachable!() @@@ -5950,12 -5819,20 +5964,20 @@@ #[inline(always)] pub(crate) fn set_seed(&mut self) { let seed = self.deref_register(1); - let mut rand = RANDOM_STATE.borrow_mut(); + - + match Number::try_from(seed) { - Ok(Number::Fixnum(n)) => rand.seed(&Integer::from(n)), - Ok(Number::Integer(n)) => rand.seed(&*n), - Ok(Number::Rational(n)) if n.denom() == &1 => rand.seed(n.numer()), + Ok(Number::Fixnum(n)) => { + let _: StdRng = SeedableRng::seed_from_u64(Integer::from(n).to_u64().unwrap()); + }, + Ok(Number::Integer(n)) => { + let _: StdRng = SeedableRng::seed_from_u64(n.to_u64().unwrap()); + }, + Ok(Number::Rational(n)) => { + if n.denominator() == &UBig::from(1 as u32) { + let _: StdRng = SeedableRng::seed_from_u64(n.numerator().to_u64().unwrap()); - } ++ } + }, _ => { self.machine_st.fail = true; }