diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2012-01-01 12:38:05 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2012-01-01 12:38:05 -0800 |
commit | 82bd3f163894b91c7af377a91beb7a385f21ba55 (patch) | |
tree | cbbd7adac4937c5c693888515fb0e0c8bdf39c49 | |
parent | ac08d22c2b916fbd88c938569e0cd6af488b7a67 (diff) | |
download | txr-82bd3f163894b91c7af377a91beb7a385f21ba55.tar.gz txr-82bd3f163894b91c7af377a91beb7a385f21ba55.tar.bz2 txr-82bd3f163894b91c7af377a91beb7a385f21ba55.zip |
* eval.c (eval_init): New gensym function registered.
* lib.c (gensym_counter): New variable.
(gensymv): New function.
(obj_init): Initialize gensym_counter.
* lib.h (gensym_counter, gensymv): Declared.
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | eval.c | 1 | ||||
-rw-r--r-- | lib.c | 12 | ||||
-rw-r--r-- | lib.h | 3 |
4 files changed, 26 insertions, 0 deletions
@@ -1,3 +1,13 @@ +2012-01-01 Kaz Kylheku <kaz@kylheku.com> + + * eval.c (eval_init): New gensym function registered. + + * lib.c (gensym_counter): New variable. + (gensymv): New function. + (obj_init): Initialize gensym_counter. + + * lib.h (gensym_counter, gensymv): Declared. + 2011-12-30 Kaz Kylheku <kaz@kylheku.com> * match.c (counter_k): New keyword symbol variable. @@ -1331,6 +1331,7 @@ void eval_init(void) reg_var(intern(lit("*keyword-package*"), user_package), keyword_package); reg_var(intern(lit("*system-package*"), user_package), system_package); reg_fun(intern(lit("make-sym"), user_package), func_n1(make_sym)); + reg_fun(intern(lit("gensym"), user_package), func_n0v(gensymv)); reg_fun(intern(lit("make-package"), user_package), func_n1(make_package)); reg_fun(intern(lit("find-package"), user_package), func_n1(find_package)); reg_fun(intern(lit("intern"), user_package), func_n2(intern)); @@ -84,6 +84,8 @@ val null_list; val identity_f, equal_f, eql_f, eq_f, car_f, cdr_f; +val gensym_counter; + val prog_string; static val env_list; @@ -1633,6 +1635,15 @@ val make_sym(val name) return obj; } +val gensymv(val args) +{ + uses_or2; + gensym_counter = plus(gensym_counter, one); + val prefix = or2(car(args), lit("g")); + val name = format(nil, lit("~a~,04a"), prefix, gensym_counter, nao); + return make_sym(name); +} + val make_package(val name) { if (find_package(name)) { @@ -3273,6 +3284,7 @@ static void obj_init(void) identity_f = func_n1(identity); car_f = func_n1(car); cdr_f = func_n1(cdr); + gensym_counter = zero; prog_string = string(progname); } @@ -298,6 +298,8 @@ extern val null_list; /* (nil) */ extern val identity_f, equal_f, eql_f, eq_f, car_f, cdr_f; +extern val gensym_counter; + extern const wchar_t *progname; extern val prog_string; @@ -443,6 +445,7 @@ val span_str(val str, val set); val compl_span_str(val str, val set); val break_str(val str, val set); val make_sym(val name); +val gensymv(val args); val make_package(val name); val find_package(val name); val intern(val str, val package); |