some more bootstrapping fixes

cvs
Slava Pestov 2004-08-01 23:26:43 +00:00
parent df455b5de8
commit ed63d91759
8 changed files with 31 additions and 27 deletions

View File

@ -2,6 +2,7 @@
ERROR: I/O error: [ "primitive_read_line_fd_8" "Resource temporarily unavailable" ]
- bignum=
- fixup-words is crusty
- decide if overflow is a fatal error
- f >n: crashes

View File

@ -49,7 +49,7 @@ USE: vectors
: (hashcode) ( key table -- index )
#! Compute the index of the bucket for a key.
>r hashcode HEX: ffffff bitand r> vector-length pred mod ;
>r hashcode HEX: ffffff bitand r> vector-length mod ;
: hash* ( key table -- [ key | value ] )
#! Look up a value in the hashtable. First the bucket is

View File

@ -39,6 +39,7 @@ USE: io-internals
USE: math
USE: namespaces
USE: parser
USE: prettyprint
USE: stack
USE: stdio
USE: streams
@ -77,4 +78,5 @@ USE: unparser
print-banner
room.
init-interpreter ;

View File

@ -48,6 +48,7 @@ USE: unparser
[ cons? ] [ 4 cons-hashcode ]
[ string? ] [ str-hashcode ]
[ fixnum? ] [ ( return the object ) ]
[ bignum? ] [ ( return the object ) ]
[ drop t ] [ drop 0 ]
] cond ;
@ -97,7 +98,7 @@ USE: unparser
: room. ( -- )
room
unparse write " bytes total, " write
unparse write " bytes used" print ;
unparse write " bytes free" print ;
! No compiler...
: inline ;

View File

@ -34,7 +34,7 @@ INLINE void add_fixnum(CELL x, CELL y)
CELL_TO_INTEGER(untag_fixnum_fast(x) + untag_fixnum_fast(y));
}
INLINE void add_bignum(CELL x, CELL y)
void add_bignum(CELL x, CELL y)
{
env.dt = tag_object(bignum(((BIGNUM*)UNTAG(x))->n
+ ((BIGNUM*)UNTAG(y))->n));
@ -48,7 +48,7 @@ INLINE void subtract_fixnum(CELL x, CELL y)
CELL_TO_INTEGER(untag_fixnum_fast(x) - untag_fixnum_fast(y));
}
INLINE void subtract_bignum(CELL x, CELL y)
void subtract_bignum(CELL x, CELL y)
{
env.dt = tag_object(bignum(((BIGNUM*)UNTAG(x))->n
- ((BIGNUM*)UNTAG(y))->n));
@ -63,7 +63,7 @@ INLINE void multiply_fixnum(CELL x, CELL y)
* (BIGNUM_2)untag_fixnum_fast(y));
}
INLINE void multiply_bignum(CELL x, CELL y)
void multiply_bignum(CELL x, CELL y)
{
env.dt = tag_object(bignum(((BIGNUM*)UNTAG(x))->n
* ((BIGNUM*)UNTAG(y))->n));
@ -80,7 +80,7 @@ INLINE void divmod_fixnum(CELL x, CELL y)
env.dt = q.rem;
}
INLINE void divmod_bignum(CELL x, CELL y)
void divmod_bignum(CELL x, CELL y)
{
dpush(tag_object(bignum(((BIGNUM*)UNTAG(x))->n
/ ((BIGNUM*)UNTAG(y))->n)));
@ -96,7 +96,7 @@ INLINE void mod_fixnum(CELL x, CELL y)
env.dt = x % y;
}
INLINE void mod_bignum(CELL x, CELL y)
void mod_bignum(CELL x, CELL y)
{
env.dt = tag_object(bignum(((BIGNUM*)UNTAG(x))->n
% ((BIGNUM*)UNTAG(y))->n));
@ -110,7 +110,7 @@ INLINE void and_fixnum(CELL x, CELL y)
env.dt = x & y;
}
INLINE void and_bignum(CELL x, CELL y)
void and_bignum(CELL x, CELL y)
{
env.dt = tag_object(bignum(((BIGNUM*)UNTAG(x))->n
& ((BIGNUM*)UNTAG(y))->n));
@ -124,7 +124,7 @@ INLINE void or_fixnum(CELL x, CELL y)
env.dt = x | y;
}
INLINE void or_bignum(CELL x, CELL y)
void or_bignum(CELL x, CELL y)
{
env.dt = tag_object(bignum(((BIGNUM*)UNTAG(x))->n
| ((BIGNUM*)UNTAG(y))->n));
@ -138,7 +138,7 @@ INLINE void xor_fixnum(CELL x, CELL y)
env.dt = x ^ y;
}
INLINE void xor_bignum(CELL x, CELL y)
void xor_bignum(CELL x, CELL y)
{
env.dt = tag_object(bignum(((BIGNUM*)UNTAG(x))->n
^ ((BIGNUM*)UNTAG(y))->n));
@ -153,7 +153,7 @@ INLINE void shiftleft_fixnum(CELL x, CELL y)
<< (BIGNUM_2)untag_fixnum_fast(y));
}
INLINE void shiftleft_bignum(CELL x, CELL y)
void shiftleft_bignum(CELL x, CELL y)
{
env.dt = tag_object(bignum(((BIGNUM*)UNTAG(x))->n
<< ((BIGNUM*)UNTAG(y))->n));
@ -168,7 +168,7 @@ INLINE void shiftright_fixnum(CELL x, CELL y)
>> (BIGNUM_2)untag_fixnum_fast(y));
}
INLINE void shiftright_bignum(CELL x, CELL y)
void shiftright_bignum(CELL x, CELL y)
{
env.dt = tag_object(bignum(((BIGNUM*)UNTAG(x))->n
>> ((BIGNUM*)UNTAG(y))->n));
@ -182,7 +182,7 @@ INLINE void less_fixnum(CELL x, CELL y)
env.dt = tag_boolean((FIXNUM)x < (FIXNUM)y);
}
INLINE void less_bignum(CELL x, CELL y)
void less_bignum(CELL x, CELL y)
{
env.dt = tag_boolean(((BIGNUM*)UNTAG(x))->n
< ((BIGNUM*)UNTAG(y))->n);
@ -196,7 +196,7 @@ INLINE void lesseq_fixnum(CELL x, CELL y)
env.dt = tag_boolean((FIXNUM)x <= (FIXNUM)y);
}
INLINE void lesseq_bignum(CELL x, CELL y)
void lesseq_bignum(CELL x, CELL y)
{
env.dt = tag_boolean(((BIGNUM*)UNTAG(x))->n
<= ((BIGNUM*)UNTAG(y))->n);
@ -210,7 +210,7 @@ INLINE void greater_fixnum(CELL x, CELL y)
env.dt = tag_boolean((FIXNUM)x > (FIXNUM)y);
}
INLINE void greater_bignum(CELL x, CELL y)
void greater_bignum(CELL x, CELL y)
{
env.dt = tag_boolean(((BIGNUM*)UNTAG(x))->n
> ((BIGNUM*)UNTAG(y))->n);
@ -224,7 +224,7 @@ INLINE void greatereq_fixnum(CELL x, CELL y)
env.dt = tag_boolean((FIXNUM)x >= (FIXNUM)y);
}
INLINE void greatereq_bignum(CELL x, CELL y)
void greatereq_bignum(CELL x, CELL y)
{
env.dt = tag_boolean(((BIGNUM*)UNTAG(x))->n
>= ((BIGNUM*)UNTAG(y))->n);

View File

@ -67,8 +67,8 @@ bool in_zone(ZONE* z, CELL pointer)
void primitive_room(void)
{
/* push: limit here */
/* push: free total */
dpush(env.dt);
env.dt = tag_fixnum(active->limit - active->base);
dpush(tag_fixnum(active->here - active->base));
dpush(tag_fixnum(active->limit - active->here));
}

View File

@ -13,8 +13,8 @@ STRING* allot_string(CELL capacity)
/* uses same algorithm as java.lang.String for compatibility */
void hash_string(STRING* str)
{
CELL hash = 0;
int i;
FIXNUM hash = 0;
CELL i;
for(i = 0; i < str->capacity; i++)
hash = 31*hash + string_nth(str,i);
str->hashcode = hash;
@ -23,7 +23,7 @@ void hash_string(STRING* str)
/* untagged */
STRING* string(CELL capacity, CELL fill)
{
int i;
CELL i;
STRING* string = allot_string(capacity);
@ -38,7 +38,7 @@ STRING* string(CELL capacity, CELL fill)
STRING* grow_string(STRING* string, CELL capacity, CHAR fill)
{
/* later on, do an optimization: if end of array is here, just grow */
int i;
CELL i;
STRING* new_string = allot_string(capacity);
@ -55,7 +55,7 @@ STRING* from_c_string(const char* c_string)
{
CELL length = strlen(c_string);
STRING* s = allot_string(length);
int i;
CELL i;
for(i = 0; i < length; i++)
{
@ -72,7 +72,7 @@ STRING* from_c_string(const char* c_string)
char* to_c_string(STRING* s)
{
STRING* _c_str = allot_string(s->capacity + 1 /* null byte */);
int i;
CELL i;
char* c_str = (char*)(_c_str + 1);
@ -147,14 +147,14 @@ void primitive_string_eq(void)
CELL with = dpop();
check_non_empty(with);
if(typep(STRING_TYPE,with))
env.dt = tag_boolean(string_eq(s1,UNTAG(with)));
env.dt = tag_boolean(string_eq(s1,(STRING*)UNTAG(with)));
else
env.dt = F;
}
void primitive_string_hashcode(void)
{
env.dt = tag_fixnum(untag_string(env.dt)->hashcode);
env.dt = tag_object(bignum(untag_string(env.dt)->hashcode));
}
INLINE CELL index_of_ch(CELL index, STRING* string, CELL ch)

View File

@ -3,7 +3,7 @@ typedef struct {
/* untagged */
CELL capacity;
/* untagged */
CELL hashcode;
FIXNUM hashcode;
} STRING;
INLINE STRING* untag_string(CELL tagged)