From bac154bc9898aebc984ca1ef5268ec5eff65f4fd Mon Sep 17 00:00:00 2001 From: Juan Jose Garcia Ripoll Date: Sat, 21 Aug 2010 13:25:16 +0200 Subject: [PATCH] More of the string constants that are used in main.d are now statically allocated. --- src/c/features.h | 113 ++++++++++++++++ src/c/iso_latin_names.h | 276 +++++++++++++++++++++------------------- src/c/main.d | 193 +++++++++------------------- src/h/ecl-inl.h | 12 ++ 4 files changed, 329 insertions(+), 265 deletions(-) create mode 100644 src/c/features.h diff --git a/src/c/features.h b/src/c/features.h new file mode 100644 index 000000000..d81000c34 --- /dev/null +++ b/src/c/features.h @@ -0,0 +1,113 @@ +/* -*- mode: c; c-basic-offset: 8 -*- */ +/* + features.h -- names of features compiled into ECL +*/ +/* + Copyright (c) 1984, Taiichi Yuasa and Masami Hagiya. + Copyright (c) 1990, Giuseppe Attardi. + Copyright (c) 2001, Juan Jose Garcia Ripoll. + + ECL is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + See file '../Copyright' for full details. +*/ + +ecl_def_string_array(feature_names,static,const) = { + ecl_def_string_array_elt("ECL"), + ecl_def_string_array_elt("COMMON"), + ecl_def_string_array_elt(ECL_ARCHITECTURE), + ecl_def_string_array_elt("FFI"), + ecl_def_string_array_elt("PREFIXED-API"), +#ifdef ECL_IEEE_FP + ecl_def_string_array_elt("IEEE-FLOATING-POINT"), +#endif +#ifdef WITH_GMP + ecl_def_string_array_elt("COMMON-LISP"), + ecl_def_string_array_elt("ANSI-CL"), +#endif /* WITH_GMP */ +#if defined(GBC_BOEHM) + ecl_def_string_array_elt("BOEHM-GC"), +#endif +#ifdef ECL_THREADS + ecl_def_string_array_elt("THREADS"), +#endif +#ifdef ECL_SEMAPHORES + ecl_def_string_array_elt("SEMAPHORES"), +#endif +#ifdef CLOS + ecl_def_string_array_elt("CLOS"), +#endif +#ifdef ENABLE_DLOPEN + ecl_def_string_array_elt("DLOPEN"), +#endif +#ifdef ECL_OLD_LOOP + ecl_def_string_array_elt("OLD-LOOP"), +#endif + ecl_def_string_array_elt("ECL-PDE"), +#ifdef unix + ecl_def_string_array_elt("UNIX"), +#endif +#ifdef BSD + ecl_def_string_array_elt("BSD"), +#endif +#ifdef SYSV + ecl_def_string_array_elt("SYSTEM-V"), +#endif +#ifdef MSDOS + ecl_def_string_array_elt("MS-DOS"), +#endif +#if defined(__MINGW32__) + ecl_def_string_array_elt("MINGW32"), + ecl_def_string_array_elt("WIN32"), +#endif +#ifdef _MSC_VER + ecl_def_string_array_elt("MSVC"), +#endif +#if defined(_MSC_VER) || defined(__MINGW32__) + ecl_def_string_array_elt("WINDOWS"), +#endif +#ifdef ECL_CMU_FORMAT + ecl_def_string_array_elt("CMU-FORMAT"), +#endif +#ifdef ECL_CLOS_STREAMS + ecl_def_string_array_elt("CLOS-STREAMS"), +#endif +#if defined(ECL_DYNAMIC_FFI) || defined(HAVE_LIBFFI) + ecl_def_string_array_elt("DFFI"), +#endif +#ifdef ECL_UNICODE + ecl_def_string_array_elt("UNICODE"), +#endif +#ifdef ECL_LONG_FLOAT + ecl_def_string_array_elt("LONG-FLOAT"), +#endif +#ifdef ECL_RELATIVE_PACKAGE_NAMES + ecl_def_string_array_elt("RELATIVE-PACKAGE-NAMES"), +#endif +#ifdef ecl_uint16_t + ecl_def_string_array_elt("UINT16-T"), +#endif +#ifdef ecl_uint32_t + ecl_def_string_array_elt("UINT32-T"), +#endif +#ifdef ecl_uint64_t + ecl_def_string_array_elt("UINT64-T"), +#endif +#ifdef ecl_long_long_t + ecl_def_string_array_elt("LONG-LONG"), +#endif +#ifdef ECL_EXTERNALIZABLE + ecl_def_string_array_elt("EXTERNALIZABLE"), +#endif +#ifdef __cplusplus + ecl_def_string_array_elt("C++"), +#endif +#ifdef ECL_SSE2 + ecl_def_string_array_elt("SSE2"), +#endif + ecl_def_string_array_elt(0) +}; + diff --git a/src/c/iso_latin_names.h b/src/c/iso_latin_names.h index ce0d8bb33..6fa51869f 100644 --- a/src/c/iso_latin_names.h +++ b/src/c/iso_latin_names.h @@ -1,130 +1,146 @@ -static const char *char_names[] = { -"Nul", -"Soh", -"Stx", -"Etx", -"Eot", -"Enq", -"Ack", -"Bel", -"Backspace", -"Tab", -"Newline", -"Vt", -"Page", -"Return", -"So", -"Si", -"Dle", -"Dc1", -"Dc2", -"Dc3", -"Dc4", -"Nak", -"Syn", -"Etb", -"Can", -"Em", -"Sub", -"Esc", -"Fs", -"Gs", -"Rs", -"Us", -"Space", -"EXCLAMATION_MARK", -"QUOTATION_MARK", -"NUMBER_SIGN", -"DOLLAR_SIGN", -"PERCENT_SIGN", -"AMPERSAND", -"APOSTROPHE", -"LEFT_PARENTHESIS", -"RIGHT_PARENTHESIS", -"ASTERISK", -"PLUS_SIGN", -"COMMA", -"HYPHEN-MINUS", -"FULL_STOP", -"SOLIDUS", -"DIGIT_ZERO", -"DIGIT_ONE", -"DIGIT_TWO", -"DIGIT_THREE", -"DIGIT_FOUR", -"DIGIT_FIVE", -"DIGIT_SIX", -"DIGIT_SEVEN", -"DIGIT_EIGHT", -"DIGIT_NINE", -"COLON", -"SEMICOLON", -"LESS-THAN_SIGN", -"EQUALS_SIGN", -"GREATER-THAN_SIGN", -"QUESTION_MARK", -"COMMERCIAL_AT", -"LATIN_CAPITAL_LETTER_A", -"LATIN_CAPITAL_LETTER_B", -"LATIN_CAPITAL_LETTER_C", -"LATIN_CAPITAL_LETTER_D", -"LATIN_CAPITAL_LETTER_E", -"LATIN_CAPITAL_LETTER_F", -"LATIN_CAPITAL_LETTER_G", -"LATIN_CAPITAL_LETTER_H", -"LATIN_CAPITAL_LETTER_I", -"LATIN_CAPITAL_LETTER_J", -"LATIN_CAPITAL_LETTER_K", -"LATIN_CAPITAL_LETTER_L", -"LATIN_CAPITAL_LETTER_M", -"LATIN_CAPITAL_LETTER_N", -"LATIN_CAPITAL_LETTER_O", -"LATIN_CAPITAL_LETTER_P", -"LATIN_CAPITAL_LETTER_Q", -"LATIN_CAPITAL_LETTER_R", -"LATIN_CAPITAL_LETTER_S", -"LATIN_CAPITAL_LETTER_T", -"LATIN_CAPITAL_LETTER_U", -"LATIN_CAPITAL_LETTER_V", -"LATIN_CAPITAL_LETTER_W", -"LATIN_CAPITAL_LETTER_X", -"LATIN_CAPITAL_LETTER_Y", -"LATIN_CAPITAL_LETTER_Z", -"LEFT_SQUARE_BRACKET", -"REVERSE_SOLIDUS", -"RIGHT_SQUARE_BRACKET", -"CIRCUMFLEX_ACCENT", -"LOW_LINE", -"GRAVE_ACCENT", -"LATIN_SMALL_LETTER_A", -"LATIN_SMALL_LETTER_B", -"LATIN_SMALL_LETTER_C", -"LATIN_SMALL_LETTER_D", -"LATIN_SMALL_LETTER_E", -"LATIN_SMALL_LETTER_F", -"LATIN_SMALL_LETTER_G", -"LATIN_SMALL_LETTER_H", -"LATIN_SMALL_LETTER_I", -"LATIN_SMALL_LETTER_J", -"LATIN_SMALL_LETTER_K", -"LATIN_SMALL_LETTER_L", -"LATIN_SMALL_LETTER_M", -"LATIN_SMALL_LETTER_N", -"LATIN_SMALL_LETTER_O", -"LATIN_SMALL_LETTER_P", -"LATIN_SMALL_LETTER_Q", -"LATIN_SMALL_LETTER_R", -"LATIN_SMALL_LETTER_S", -"LATIN_SMALL_LETTER_T", -"LATIN_SMALL_LETTER_U", -"LATIN_SMALL_LETTER_V", -"LATIN_SMALL_LETTER_W", -"LATIN_SMALL_LETTER_X", -"LATIN_SMALL_LETTER_Y", -"LATIN_SMALL_LETTER_Z", -"LEFT_CURLY_BRACKET", -"VERTICAL_LINE", -"RIGHT_CURLY_BRACKET", -"TILDE", -"Rubout", -0}; +/* -*- mode: c; c-basic-offset: 8 -*- */ +/* + iso_latin_names.h -- character names in ISO-LATIN-1 +*/ +/* + Copyright (c) 2008, Juan Jose Garcia Ripoll. + + ECL is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + See file '../Copyright' for full details. +*/ + +ecl_def_string_array(char_names,static,const) = { + ecl_def_string_array_elt("Nul"), + ecl_def_string_array_elt("Soh"), + ecl_def_string_array_elt("Stx"), + ecl_def_string_array_elt("Etx"), + ecl_def_string_array_elt("Eot"), + ecl_def_string_array_elt("Enq"), + ecl_def_string_array_elt("Ack"), + ecl_def_string_array_elt("Bel"), + ecl_def_string_array_elt("Backspace"), + ecl_def_string_array_elt("Tab"), + ecl_def_string_array_elt("Newline"), + ecl_def_string_array_elt("Vt"), + ecl_def_string_array_elt("Page"), + ecl_def_string_array_elt("Return"), + ecl_def_string_array_elt("So"), + ecl_def_string_array_elt("Si"), + ecl_def_string_array_elt("Dle"), + ecl_def_string_array_elt("Dc1"), + ecl_def_string_array_elt("Dc2"), + ecl_def_string_array_elt("Dc3"), + ecl_def_string_array_elt("Dc4"), + ecl_def_string_array_elt("Nak"), + ecl_def_string_array_elt("Syn"), + ecl_def_string_array_elt("Etb"), + ecl_def_string_array_elt("Can"), + ecl_def_string_array_elt("Em"), + ecl_def_string_array_elt("Sub"), + ecl_def_string_array_elt("Esc"), + ecl_def_string_array_elt("Fs"), + ecl_def_string_array_elt("Gs"), + ecl_def_string_array_elt("Rs"), + ecl_def_string_array_elt("Us"), + ecl_def_string_array_elt("Space"), + ecl_def_string_array_elt("EXCLAMATION_MARK"), + ecl_def_string_array_elt("QUOTATION_MARK"), + ecl_def_string_array_elt("NUMBER_SIGN"), + ecl_def_string_array_elt("DOLLAR_SIGN"), + ecl_def_string_array_elt("PERCENT_SIGN"), + ecl_def_string_array_elt("AMPERSAND"), + ecl_def_string_array_elt("APOSTROPHE"), + ecl_def_string_array_elt("LEFT_PARENTHESIS"), + ecl_def_string_array_elt("RIGHT_PARENTHESIS"), + ecl_def_string_array_elt("ASTERISK"), + ecl_def_string_array_elt("PLUS_SIGN"), + ecl_def_string_array_elt("COMMA"), + ecl_def_string_array_elt("HYPHEN-MINUS"), + ecl_def_string_array_elt("FULL_STOP"), + ecl_def_string_array_elt("SOLIDUS"), + ecl_def_string_array_elt("DIGIT_ZERO"), + ecl_def_string_array_elt("DIGIT_ONE"), + ecl_def_string_array_elt("DIGIT_TWO"), + ecl_def_string_array_elt("DIGIT_THREE"), + ecl_def_string_array_elt("DIGIT_FOUR"), + ecl_def_string_array_elt("DIGIT_FIVE"), + ecl_def_string_array_elt("DIGIT_SIX"), + ecl_def_string_array_elt("DIGIT_SEVEN"), + ecl_def_string_array_elt("DIGIT_EIGHT"), + ecl_def_string_array_elt("DIGIT_NINE"), + ecl_def_string_array_elt("COLON"), + ecl_def_string_array_elt("SEMICOLON"), + ecl_def_string_array_elt("LESS-THAN_SIGN"), + ecl_def_string_array_elt("EQUALS_SIGN"), + ecl_def_string_array_elt("GREATER-THAN_SIGN"), + ecl_def_string_array_elt("QUESTION_MARK"), + ecl_def_string_array_elt("COMMERCIAL_AT"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_A"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_B"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_C"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_D"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_E"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_F"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_G"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_H"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_I"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_J"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_K"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_L"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_M"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_N"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_O"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_P"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_Q"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_R"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_S"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_T"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_U"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_V"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_W"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_X"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_Y"), + ecl_def_string_array_elt("LATIN_CAPITAL_LETTER_Z"), + ecl_def_string_array_elt("LEFT_SQUARE_BRACKET"), + ecl_def_string_array_elt("REVERSE_SOLIDUS"), + ecl_def_string_array_elt("RIGHT_SQUARE_BRACKET"), + ecl_def_string_array_elt("CIRCUMFLEX_ACCENT"), + ecl_def_string_array_elt("LOW_LINE"), + ecl_def_string_array_elt("GRAVE_ACCENT"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_A"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_B"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_C"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_D"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_E"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_F"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_G"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_H"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_I"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_J"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_K"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_L"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_M"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_N"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_O"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_P"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_Q"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_R"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_S"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_T"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_U"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_V"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_W"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_X"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_Y"), + ecl_def_string_array_elt("LATIN_SMALL_LETTER_Z"), + ecl_def_string_array_elt("LEFT_CURLY_BRACKET"), + ecl_def_string_array_elt("VERTICAL_LINE"), + ecl_def_string_array_elt("RIGHT_CURLY_BRACKET"), + ecl_def_string_array_elt("TILDE"), + ecl_def_string_array_elt("Rubout"), + ecl_def_string_array_elt(0) +}; diff --git a/src/c/main.d b/src/c/main.d index 73e6e157b..021e18b45 100644 --- a/src/c/main.d +++ b/src/c/main.d @@ -44,6 +44,9 @@ #include extern int GC_dont_gc; +#include "features.h" +#include "iso_latin_names.h" + /******************************* EXPORTS ******************************/ #if !defined(ECL_THREADS) @@ -97,98 +100,6 @@ static char stdin_buf[BUFSIZ]; static char stdout_buf[BUFSIZ]; #endif -static const char *feature_names[] = { - "ECL", "COMMON", ECL_ARCHITECTURE, "FFI", "PREFIXED-API", -#ifdef ECL_IEEE_FP - "IEEE-FLOATING-POINT", -#endif -#ifdef WITH_GMP - "COMMON-LISP", - "ANSI-CL", -#endif /* WITH_GMP */ -#if defined(GBC_BOEHM) - "BOEHM-GC", -#endif -#ifdef ECL_THREADS - "THREADS", -#endif -#ifdef ECL_SEMAPHORES - "SEMAPHORES", -#endif -#ifdef CLOS - "CLOS", -#endif -#ifdef ENABLE_DLOPEN - "DLOPEN", -#endif -#ifdef ECL_OLD_LOOP - "OLD-LOOP", -#endif - "ECL-PDE", -#ifdef unix - "UNIX", -#endif -#ifdef BSD - "BSD", -#endif -#ifdef SYSV - "SYSTEM-V", -#endif -#ifdef MSDOS - "MS-DOS", -#endif -#if defined(__MINGW32__) - "MINGW32", - "WIN32", -#endif -#ifdef _MSC_VER - "MSVC", -#endif -#if defined(_MSC_VER) || defined(__MINGW32__) - "WINDOWS", -#endif -#ifdef ECL_CMU_FORMAT - "CMU-FORMAT", -#endif -#ifdef ECL_CLOS_STREAMS - "CLOS-STREAMS", -#endif -#if defined(ECL_DYNAMIC_FFI) || defined(HAVE_LIBFFI) - "DFFI", -#endif -#ifdef ECL_UNICODE - "UNICODE", -#endif -#ifdef ECL_LONG_FLOAT - "LONG-FLOAT", -#endif -#ifdef ECL_RELATIVE_PACKAGE_NAMES - "RELATIVE-PACKAGE-NAMES", -#endif -#ifdef ecl_uint16_t - "UINT16-T", -#endif -#ifdef ecl_uint32_t - "UINT32-T", -#endif -#ifdef ecl_uint64_t - "UINT64-T", -#endif -#ifdef ecl_long_long_t - "LONG-LONG", -#endif -#ifdef ECL_EXTERNALIZABLE - "EXTERNALIZABLE", -#endif -#ifdef __cplusplus - "C++", -#endif -#ifdef ECL_SSE2 - "SSE2", -#endif - 0 -}; - cl_fixnum ecl_get_option(int option) { @@ -268,8 +179,6 @@ ecl_init_env(cl_env_ptr env) env->trap_fpe_bits = 0; } -#include "iso_latin_names.h" - void _ecl_dealloc_env(cl_env_ptr env) { @@ -404,7 +313,7 @@ ecl_def_ct_base_string(str_common_lisp,"COMMON-LISP",11,static,const); ecl_def_ct_base_string(str_common_lisp_user,"COMMON-LISP-USER",16,static,const); ecl_def_ct_base_string(str_cl,"CL",2,static,const); ecl_def_ct_base_string(str_cl_user,"CL-USER",7,static,const); -ecl_def_ct_base_string(str_lisp,"LISP",4,static,const); +ecl_def_ct_base_string(str_LISP,"LISP",4,static,const); ecl_def_ct_base_string(str_user,"USER",4,static,const); ecl_def_ct_base_string(str_keyword,"KEYWORD",7,static,const); ecl_def_ct_base_string(str_si,"SI",2,static,const); @@ -419,6 +328,26 @@ ecl_def_ct_base_string(str_multiprocessing,"MULTIPROCESSING",15,static,const); #ifdef ECL_CLOS_STREAMS ecl_def_ct_base_string(str_gray,"GRAY",4,static,const); #endif +ecl_def_ct_base_string(str_null,"Null",4,static,const); +ecl_def_ct_base_string(str_linefeed,"Linefeed",8,static,const); +ecl_def_ct_base_string(str_bell,"Bell",4,static,const); +ecl_def_ct_base_string(str_escape,"Escape",6,static,const); +ecl_def_ct_base_string(str_star_dot_star,"*.*",3,static,const); +ecl_def_ct_base_string(str_rel_star_dot_star,"./*.*",5,static,const); +ecl_def_ct_base_string(str_empty,"",0,static,const); +ecl_def_ct_base_string(str_G,"G",1,static,const); +ecl_def_ct_base_string(str_T,"T",1,static,const); +#ifdef ENABLE_DLOPEN +ecl_def_ct_base_string(str_fas,"fas",3,static,const); +ecl_def_ct_base_string(str_fasl,"fasl",4,static,const); +#endif +ecl_def_ct_base_string(str_fasb,"fasb",4,static,const); +ecl_def_ct_base_string(str_FASB,"FASB",4,static,const); +ecl_def_ct_base_string(str_lsp,"lsp",3,static,const); +ecl_def_ct_base_string(str_LSP,"LSP",3,static,const); +ecl_def_ct_base_string(str_lisp,"lisp",4,static,const); +ecl_def_ct_base_string(str_NIL,"NIL",3,static,const); +ecl_def_ct_base_string(str_slash,"/",1,static,const); int cl_boot(int argc, char **argv) @@ -470,7 +399,7 @@ cl_boot(int argc, char **argv) Cnil_symbol->symbol.t = t_symbol; Cnil_symbol->symbol.dynamic = 0; Cnil_symbol->symbol.value = Cnil; - Cnil_symbol->symbol.name = make_constant_base_string("NIL"); + Cnil_symbol->symbol.name = str_NIL; Cnil_symbol->symbol.gfdef = Cnil; Cnil_symbol->symbol.plist = Cnil; Cnil_symbol->symbol.hpack = Cnil; @@ -483,7 +412,7 @@ cl_boot(int argc, char **argv) Ct->symbol.t = (short)t_symbol; Ct->symbol.dynamic = 0; Ct->symbol.value = Ct; - Ct->symbol.name = make_constant_base_string("T"); + Ct->symbol.name = str_T; Ct->symbol.gfdef = Cnil; Ct->symbol.plist = Cnil; Ct->symbol.hpack = Cnil; @@ -498,7 +427,7 @@ cl_boot(int argc, char **argv) #else cl_core.path_max = MAXPATHLEN; #endif - cl_core.slash = make_constant_base_string("/"); + cl_core.slash = str_slash; cl_core.rehash_size = default_rehash_size; cl_core.rehash_threshold = default_rehash_threshold; @@ -508,7 +437,7 @@ cl_boot(int argc, char **argv) cl_core.lisp_package = ecl_make_package(str_common_lisp, - cl_list(2, str_cl, str_lisp), + cl_list(2, str_cl, str_LISP), Cnil); cl_core.user_package = ecl_make_package(str_common_lisp_user, @@ -599,37 +528,28 @@ cl_boot(int argc, char **argv) cl_core.rehash_size, cl_core.rehash_threshold, Cnil); /* thread-safe */ - for (i = 0; char_names[i]; i++) { - cl_object name = make_constant_base_string(char_names[i]); + for (i = 0; char_names[i].elt.self; i++) { + cl_object name = (cl_object)(char_names + i); cl_object code = MAKE_FIXNUM(i); ecl_sethash(name, aux, code); ecl_sethash(code, aux, name); } - { - /* Linefeed is redundant with one of the names given - * in iso_latin_names.h, but it can not be associated - * to the code 10, because the default name must be - * Newline. Similar to the other codes. */ - static struct { - const char *name; - int code; - } extra_names[] = { { "Null", 0 }, - { "Linefeed", 10 }, - { "Bell", 7 }, - { "Escape", 27 } }; - for (i = 0; i < 4; i++) { - cl_object name = make_constant_base_string(extra_names[i].name); - ecl_sethash(name, aux, MAKE_FIXNUM(extra_names[i].code)); - } - } + /* Linefeed is redundant with one of the names given in + * iso_latin_names.h, but it can not be associated to the code + * 10, because the default name must be Newline. Similar to + * the other codes. */ + ecl_sethash(str_null, aux, MAKE_FIXNUM(0)); + ecl_sethash(str_linefeed, aux, MAKE_FIXNUM(10)); + ecl_sethash(str_bell, aux, MAKE_FIXNUM(7)); + ecl_sethash(str_escape, aux, MAKE_FIXNUM(27)); /* * Initialize logical pathname translations. This must come after * the character database has been filled. */ - @si::pathname-translations(2,make_constant_base_string("SYS"), - cl_list(1,cl_list(2,make_constant_base_string("*.*"), - make_constant_base_string("./*.*")))); + @si::pathname-translations(2,str_sys, + ecl_list1(cl_list(2,str_star_dot_star, + str_rel_star_dot_star))); /* * Initialize constants (strings, numbers and time). @@ -643,7 +563,7 @@ cl_boot(int argc, char **argv) cl_core.gc_counter = Cnil; cl_core.gc_stats = FALSE; - cl_core.null_string = make_constant_base_string(""); + cl_core.null_string = str_empty; cl_core.null_stream = Cnil; /* Filled in file.d */ @@ -653,8 +573,8 @@ cl_boot(int argc, char **argv) cl_core.rehash_threshold, Ct); /* thread-safe */ - cl_core.gensym_prefix = make_constant_base_string("G"); - cl_core.gentemp_prefix = make_constant_base_string("T"); + cl_core.gensym_prefix = str_G; + cl_core.gentemp_prefix = str_T; cl_core.gentemp_counter = MAKE_FIXNUM(0); init_number(); @@ -685,18 +605,18 @@ cl_boot(int argc, char **argv) #endif aux = cl_list( #ifdef ENABLE_DLOPEN - 10,CONS(make_constant_base_string("fas"), @'si::load-binary'), - CONS(make_constant_base_string("fasl"), @'si::load-binary'), - CONS(make_constant_base_string("fasb"), @'si::load-binary'), + 10,CONS(str_fas, @'si::load-binary'), + CONS(str_fasl, @'si::load-binary'), + CONS(str_fasb, @'si::load-binary'), #else 7, #endif - CONS(make_constant_base_string("lsp"), @'si::load-source'), - CONS(make_constant_base_string("lisp"), @'si::load-source'), - CONS(make_constant_base_string("LSP"), @'si::load-source'), - CONS(make_constant_base_string("LISP"), @'si::load-source'), - CONS(make_constant_base_string("fasb"), @'si::load-source'), - CONS(make_constant_base_string("FASB"), @'si::load-source'), + CONS(str_lsp, @'si::load-source'), + CONS(str_lisp, @'si::load-source'), + CONS(str_LSP, @'si::load-source'), + CONS(str_LISP, @'si::load-source'), + CONS(str_fasb, @'si::load-source'), + CONS(str_FASB, @'si::load-source'), CONS(Cnil, @'si::load-source')); ECL_SET(@'si::*load-hooks*', aux); init_error(); @@ -722,8 +642,11 @@ cl_boot(int argc, char **argv) cl_list(8, @'&optional', @'&rest', @'&key', @'&allow-other-keys', @'&aux', @'&whole', @'&environment', @'&body')); - for (i = 0, features = Cnil; feature_names[i]; i++) { - features = CONS(ecl_make_keyword(feature_names[i]),features); + for (i = 0, features = Cnil; feature_names[i].elt.self; i++) { + int flag; + cl_object name = (cl_object)(feature_names + i); + cl_object key = ecl_intern(name, cl_core.keyword_package, &flag); + features = CONS(key, features); } ECL_SET(@'*features*', features); diff --git a/src/h/ecl-inl.h b/src/h/ecl-inl.h index 1a3f5260e..c4a01079a 100644 --- a/src/h/ecl-inl.h +++ b/src/h/ecl-inl.h @@ -60,6 +60,18 @@ #define ecl_cast_ptr(type,n) ((type)(n)) #endif +#define ecl_def_string_array(name,static,const) \ + static const union { \ + struct ecl_base_string elt; \ + cl_fixnum padding[(sizeof(struct ecl_base_string)+3)/4*4]; \ + } name[] + +#define ecl_def_string_array_elt(chars) { \ + (int8_t)t_base_string, 0, aet_bc, 0, \ + Cnil, (cl_index)(sizeof(chars))-1, \ + (cl_index)(sizeof(chars))-1, \ + (ecl_base_char*)(chars) } + #define ecl_def_ct_base_string(name,chars,len,static,const) \ static const struct ecl_base_string name ## data = { \ (int8_t)t_base_string, 0, aet_bc, 0, \