From 658eb97af000aa0598e3544c2c7ea2cdd60b5b06 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sat, 24 Sep 2011 09:41:54 -0700 Subject: Numeric constants become real constants. Vector code cleanup. * lib.h (zero, one, two, negone, maxint, minint): Extern declarations removed, macros introduced for these identifiers. * lib.c (zero, one, two, negone, maxint, minint): File scope definitions removed. (vector): Use vec_alloc and vec_fill enums instead of constants. (obj_init): Remove references to removed definitions. --- ChangeLog | 14 ++++++++++++++ lib.c | 21 ++++++--------------- lib.h | 9 ++++++++- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index d2ba8886..3a01570b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2011-09-23 Kaz Kylheku + + Numeric constants become real constants. + + Vector code cleanup. + + * lib.h (zero, one, two, negone, maxint, minint): Extern declarations + removed, macros introduced for these identifiers. + + * lib.c (zero, one, two, negone, maxint, minint): File scope + definitions removed. + (vector): Use vec_alloc and vec_fill enums instead of constants. + (obj_init): Remove references to removed definitions. + 2011-09-23 Kaz Kylheku * LICENSE, Makefile, configure, gc.c, gc.h, hash.c, hash.h, lib.c, diff --git a/lib.c b/lib.c index c6b13e60..62881137 100644 --- a/lib.c +++ b/lib.c @@ -66,7 +66,6 @@ val query_error_s, file_error_s, process_error_s; val nothrow_k, args_k; -val zero, one, two, negone, maxint, minint; val null_string; val nil_string; val null_list; @@ -1427,13 +1426,14 @@ val vector(val alloc) cnum alloc_plus = c_num(alloc) + 2; val vec = make_obj(); val *v = (val *) chk_malloc(alloc_plus * sizeof *v); - vec->v.type = VEC; - vec->v.vec = v + 2; #ifdef HAVE_VALGRIND vec->v.vec_true_start = v; #endif - v[0] = alloc; - v[1] = zero; + v += 2; + vec->v.type = VEC; + vec->v.vec = v; + v[vec_alloc] = alloc; + v[vec_fill] = zero; return vec; } @@ -1915,9 +1915,7 @@ static void obj_init(void) */ protect(&packages, &system_package, &keyword_package, - &user_package, &zero, &one, - &two, &negone, &maxint, &minint, - &null_string, &nil_string, + &user_package, &null_string, &nil_string, &null_list, &equal_f, &identity_f, &prog_string, (val *) 0); @@ -1926,13 +1924,6 @@ static void obj_init(void) null_string = lit(""); null_list = cons(nil, nil); - zero = num(0); - one = num(1); - two = num(2); - negone = num(-1); - maxint = num(NUM_MAX); - minint = num(NUM_MIN); - system_package = make_package(lit("sys")); keyword_package = make_package(lit("keyword")); user_package = make_package(lit("usr")); diff --git a/lib.h b/lib.h index bc1e9b83..7b69cbbf 100644 --- a/lib.h +++ b/lib.h @@ -222,7 +222,6 @@ extern val query_error_s, file_error_s, process_error_s; extern val nothrow_k, args_k; -extern val zero, one, two, negone, maxint, minint; extern val null_string; extern val null_list; /* (nil) */ @@ -428,3 +427,11 @@ val match(val spec, val data); obj_t *c_o_n_s ## CAR ## CDR = CONS; \ obj_t *CAR = car(c_o_n_s ## CAR ## CDR); \ obj_t *CDR = cdr(c_o_n_s ## CAR ## CDR) + +#define num_fast(n) ((val) ((n << TAG_SHIFT) | TAG_NUM)) +#define zero num_fast(0) +#define one num_fast(1) +#define two num_fast(2) +#define negone num_fast(-1) +#define maxint num_fast(NUM_MAX) +#define minint num_fast(NUM_MIN) -- cgit v1.2.3