diff --git a/vm/bignum.cpp b/vm/bignum.cpp index 03b34edd97..f61b44340e 100755 --- a/vm/bignum.cpp +++ b/vm/bignum.cpp @@ -1980,14 +1980,14 @@ int bignum_unsigned_logbitp(int shift, bignum * bignum) } /* Allocates memory */ -bignum *factorvm::digit_stream_to_bignum(unsigned int n_digits, unsigned int (*producer)(unsigned int), unsigned int radix, int negative_p) +bignum *factorvm::digit_stream_to_bignum(unsigned int n_digits, unsigned int (*producer)(unsigned int, factorvm*), unsigned int radix, int negative_p) { BIGNUM_ASSERT ((radix > 1) && (radix <= BIGNUM_RADIX_ROOT)); if (n_digits == 0) return (BIGNUM_ZERO ()); if (n_digits == 1) { - fixnum digit = ((fixnum) ((*producer) (0))); + fixnum digit = ((fixnum) ((*producer) (0,this))); return (fixnum_to_bignum (negative_p ? (- digit) : digit)); } { @@ -2009,14 +2009,14 @@ bignum *factorvm::digit_stream_to_bignum(unsigned int n_digits, unsigned int (*p { bignum_destructive_scale_up (result, ((bignum_digit_type) radix)); bignum_destructive_add - (result, ((bignum_digit_type) ((*producer) (n_digits)))); + (result, ((bignum_digit_type) ((*producer) (n_digits,this)))); } return (bignum_trim (result)); } } } -bignum *digit_stream_to_bignum(unsigned int n_digits, unsigned int (*producer)(unsigned int), unsigned int radix, int negative_p) +bignum *digit_stream_to_bignum(unsigned int n_digits, unsigned int (*producer)(unsigned int, factorvm*), unsigned int radix, int negative_p) { return vm->digit_stream_to_bignum(n_digits,producer,radix,negative_p); } diff --git a/vm/bignum.hpp b/vm/bignum.hpp index 5f502dcc22..8f21702f1a 100644 --- a/vm/bignum.hpp +++ b/vm/bignum.hpp @@ -119,8 +119,9 @@ void bignum_negate_magnitude(bignum *); bignum * bignum_integer_length(bignum * arg1); int bignum_unsigned_logbitp(int shift, bignum * bignum); int bignum_logbitp(int shift, bignum * arg); +struct factorvm; bignum * digit_stream_to_bignum(unsigned int n_digits, - unsigned int (*producer)(unsigned int), + unsigned int (*producer)(unsigned int,factorvm*), unsigned int radix, int negative_p); diff --git a/vm/math.cpp b/vm/math.cpp index ed556f268a..98188059f6 100755 --- a/vm/math.cpp +++ b/vm/math.cpp @@ -359,9 +359,9 @@ unsigned int factorvm::bignum_producer(unsigned int digit) return *(ptr + digit); } -unsigned int bignum_producer(unsigned int digit) +unsigned int bignum_producer(unsigned int digit, factorvm *myvm) { - return vm->bignum_producer(digit); + return myvm->bignum_producer(digit); } inline void factorvm::vmprim_byte_array_to_bignum() diff --git a/vm/vm.hpp b/vm/vm.hpp index 42a250832c..0f7a26c020 100644 --- a/vm/vm.hpp +++ b/vm/vm.hpp @@ -120,7 +120,7 @@ struct factorvm { bignum *bignum_integer_length(bignum * x); int bignum_logbitp(int shift, bignum * arg); int bignum_unsigned_logbitp(int shift, bignum * bignum); - bignum *digit_stream_to_bignum(unsigned int n_digits, unsigned int (*producer)(unsigned int), unsigned int radix, int negative_p); + bignum *digit_stream_to_bignum(unsigned int n_digits, unsigned int (*producer)(unsigned int, factorvm *), unsigned int radix, int negative_p); //data_heap bool secure_gc; /* Set by the -securegc command line argument */