]> Repositorios git - scryer-prolog.git/commitdiff
Merge branch 'dashu' of https://github.com/coasys/scryer-prolog into coasys-dashu coasys-dashu origin/coasys-dashu
authorMark <[email protected]>
Mon, 24 Jul 2023 17:47:57 +0000 (11:47 -0600)
committerMark <[email protected]>
Mon, 24 Jul 2023 17:47:57 +0000 (11:47 -0600)
16 files changed:
1  2 
Cargo.lock
Cargo.toml
src/arithmetic.rs
src/forms.rs
src/heap_print.rs
src/machine/arithmetic_ops.rs
src/machine/disjuncts.rs
src/machine/dispatch.rs
src/machine/loader.rs
src/machine/machine_state.rs
src/machine/machine_state_impl.rs
src/machine/mod.rs
src/machine/system_calls.rs
src/parser/ast.rs
src/parser/lexer.rs
src/parser/parser.rs

diff --cc Cargo.lock
index 72725aac9a8b8020b0ae80ffa17a5d84a4afe76d,662465930d6912be4a214010ae8834195f4ef3fc..967181adacce2cefbe7cff322e5ca0b089313cbc
@@@ -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 7db6c287d364110f16792345ecaabfbe2a579cd8,58d13d0cae130e9f885449ca79f7dd512c7f6fe4..194d448272c06548b1c3a261d28e7641c2d67372
@@@ -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"
Simple merge
diff --cc src/forms.rs
Simple merge
Simple merge
index 6be49e8deff4843c394d323df8870db9f08c5640,1859d1d75bbd1039da9f49043689e87952d8a415..020878653644875293fe14e7c7de2374ea35502e
@@@ -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)
+         },
      }
  }
  
Simple merge
Simple merge
Simple merge
index d76e1cf1e1163c3a1f671500275e70f80d593252,768e44924b2e49dceede5d5e046f797327b284ee..ccd657648e29e04b8445088ca2e4eb54985bc217
@@@ -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;
  
Simple merge
Simple merge
index 85d2692237cf68d536783ef8d3df61cbd67d294b,fb54d361f417cb9ceb0bc19d9575633b94fa8917..016a3c7df2fa92ba0f4ed17a7beaf63120227ed6
@@@ -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;
                  // 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!()
      #[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;
              }
Simple merge
Simple merge
Simple merge