Begun work on bignums; changed integer size to 64 bits
I'm fairly sure the size of a long int on my machines is 64 bit anyway, but for portability it needs to be explicit.
This commit is contained in:
parent
ad9b1cd7f8
commit
6ee9f9b59a
13 changed files with 109 additions and 25 deletions
|
|
@ -28,6 +28,13 @@
|
|||
/**
|
||||
* tag values, all of which must be 4 bytes. Must not collide with vector space tag values
|
||||
*/
|
||||
|
||||
/**
|
||||
* A word within a bignum - arbitrary precision integer.
|
||||
*/
|
||||
#define BIGNUMTAG "BIGN"
|
||||
#define BIGNUMTV 1313294658
|
||||
|
||||
/**
|
||||
* An ordinary cons cell: 1397641027
|
||||
*/
|
||||
|
|
@ -38,7 +45,6 @@
|
|||
* An exception.
|
||||
*/
|
||||
#define EXCEPTIONTAG "EXEP"
|
||||
/* TODO: this is wrong */
|
||||
#define EXCEPTIONTV 1346721861
|
||||
|
||||
/**
|
||||
|
|
@ -162,6 +168,11 @@
|
|||
*/
|
||||
#define nilp(conspoint) (check_tag(conspoint,NILTAG))
|
||||
|
||||
/**
|
||||
* true if conspointer points to a cons cell, else false
|
||||
*/
|
||||
#define bignump(conspoint) (check_tag(conspoint,BIGNUMTAG))
|
||||
|
||||
/**
|
||||
* true if conspointer points to a cons cell, else false
|
||||
*/
|
||||
|
|
@ -221,7 +232,7 @@
|
|||
* true if conspointer points to some sort of a number cell,
|
||||
* else false
|
||||
*/
|
||||
#define numberp(conspoint) (check_tag(conspoint,INTEGERTAG)||check_tag(conspoint,RATIOTAG)||heck_tag(conspoint,REALTAG))
|
||||
#define numberp(conspoint) (check_tag(conspoint,INTEGERTAG)||check_tag(conspoint,RATIOTAG)||check_tag(conspoint,REALTAG)||check_tag(conspoint,BIGNUMTAG))
|
||||
|
||||
/**
|
||||
* true if thr conspointer points to a vector pointer.
|
||||
|
|
@ -274,6 +285,16 @@ struct stack_frame {
|
|||
struct cons_pointer function; /* the function to be called */
|
||||
};
|
||||
|
||||
/**
|
||||
* payload of a bignum cell. Intentionally similar to an integer payload, but
|
||||
* with a next pointer.
|
||||
*/
|
||||
struct bignum_payload {
|
||||
int64_t value;
|
||||
struct cons_pointer next;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* payload of a cons cell.
|
||||
*/
|
||||
|
|
@ -321,7 +342,7 @@ struct free_payload {
|
|||
* optional bignum object.
|
||||
*/
|
||||
struct integer_payload {
|
||||
long int value;
|
||||
int64_t value;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue