[pure-lang-svn] SF.net SVN: pure-lang:[504] pure/trunk/runtime.cc
Status: Beta
Brought to you by:
agraef
From: <ag...@us...> - 2008-08-14 23:43:16
|
Revision: 504 http://pure-lang.svn.sourceforge.net/pure-lang/?rev=504&view=rev Author: agraef Date: 2008-08-14 23:43:27 +0000 (Thu, 14 Aug 2008) Log Message: ----------- Fix up some conversion operations, where mpz_get_ui/si don't do the right thing. Modified Paths: -------------- pure/trunk/runtime.cc Modified: pure/trunk/runtime.cc =================================================================== --- pure/trunk/runtime.cc 2008-08-14 23:31:59 UTC (rev 503) +++ pure/trunk/runtime.cc 2008-08-14 23:43:27 UTC (rev 504) @@ -1742,7 +1742,7 @@ assert(x); switch (x->tag) { case EXPR::INT: return x; - case EXPR::BIGINT: return pure_int(mpz_get_si(x->data.z)); + case EXPR::BIGINT: return pure_int(pure_get_int(x)); case EXPR::DBL: return pure_int((int32_t)x->data.d); #if SIZEOF_VOID_P==8 // Must cast to 64 bit here first, since on 64 bit systems g++ gives an @@ -1782,15 +1782,12 @@ #else return pure_pointer((void*)(uint32_t)mpz_getlimbn(x->data.z, 0)); #endif - else { + else #if SIZEOF_VOID_P==8 - uint64_t u = mpz_getlimbn(x->data.z, 0) + - (((uint64_t)mpz_getlimbn(x->data.z, 1))<<32); - return pure_pointer((void*)u); + return pure_pointer((void*)(uint64_t)pure_get_long(x)); #else - return pure_pointer((void*)mpz_get_ui(x->data.z)); + return pure_pointer((void*)(uint32_t)pure_get_int(x)); #endif - } default: return 0; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |