From ae7e9d7b87b44f99b7609837a0d43764da47b4aa Mon Sep 17 00:00:00 2001 From: rtoy <rtoy> Date: Mon, 1 Feb 2010 19:27:07 +0000 Subject: [PATCH] Simplify UNICODE conditionalization by using convert_lisp_string everywhere, not just for unicode. Non-unicode takes a small hit from doing an unnecessary strcpy, but that should not be critical. --- lisp/backtrace.c | 24 +----------------------- lisp/os-common.c | 34 ++++++++++++---------------------- 2 files changed, 13 insertions(+), 45 deletions(-) diff --git a/lisp/backtrace.c b/lisp/backtrace.c index 789455eb8..68b62f53a 100644 --- a/lisp/backtrace.c +++ b/lisp/backtrace.c @@ -1,4 +1,4 @@ -/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/backtrace.c,v 1.20 2009/11/02 15:05:07 rtoy Exp $ +/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/backtrace.c,v 1.21 2010/02/01 19:27:07 rtoy Rel $ * * Simple backtrace facility. More or less from Rob's lisp version. */ @@ -214,16 +214,10 @@ backtrace(int nframes) } if (TypeOf(*object) == type_SimpleString) { struct vector *string; -#ifdef UNICODE char c_string[1000]; -#endif string = (struct vector *) object; -#ifdef UNICODE convert_lisp_string(c_string, string->data, string->length >> 2); printf("%s, ", c_string); -#else - printf("%s, ", (char *) string->data); -#endif } else printf("(Not simple string??\?), "); } else @@ -295,42 +289,26 @@ print_entry_name(lispobj name) if (TypeOf(*object) == type_SymbolHeader) { struct symbol *symbol = (struct symbol *) object; struct vector *string; -#ifdef UNICODE char c_string[1000]; -#endif if (symbol->package != NIL) { struct instance *pkg = (struct instance *) PTR(symbol->package); lispobj pkg_name = pkg->slots[2]; string = (struct vector *) PTR(pkg_name); -#ifndef UNICODE - printf("%s::", (char *) string->data); -#else convert_lisp_string(c_string, string->data, string->length >> 2); printf("%s:;", c_string); -#endif } object = (lispobj *) PTR(symbol->name); string = (struct vector *) object; -#ifndef UNICODE - printf("%s", (char *) string->data); -#else convert_lisp_string(c_string, string->data, string->length >> 2); printf("%s:;", c_string); -#endif } else if (TypeOf(*object) == type_SimpleString) { struct vector *string = (struct vector *) object; -#ifdef UNICODE char c_string[1000]; -#endif -#ifndef UNICODE - printf("\"%s\"", (char *) string->data); -#else convert_lisp_string(c_string, string->data, string->length >> 2); printf("\"%s\"", c_string); -#endif } else printf("<??? type %d>", (int) TypeOf(*object)); } else diff --git a/lisp/os-common.c b/lisp/os-common.c index bf7db703c..d27c7ddcb 100644 --- a/lisp/os-common.c +++ b/lisp/os-common.c @@ -1,6 +1,6 @@ /* - $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/os-common.c,v 1.30 2009/07/16 13:02:16 rtoy Rel $ + $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/os-common.c,v 1.31 2010/02/01 19:27:07 rtoy Rel $ This code was written as part of the CMU Common Lisp project at Carnegie Mellon University, and has been placed in the public domain. @@ -145,15 +145,16 @@ extern void call_into_c(void); #define LINKAGE_DATA_ENTRY_SIZE 3 #endif -#ifdef UNICODE -/* - * FIXME: - * Unicode hack to convert Lisp 16-bit string to 8-bit string by lopping off the high bits. - */ char* convert_lisp_string(char* c_string, void* lisp_string, int len) { +#ifdef UNICODE + /* + * FIXME: Unicode hack to convert Lisp 16-bit string to 8-bit string + * by lopping off the high bits. + */ + int k; unsigned short int* wide_string = (unsigned short int*) lisp_string; @@ -161,10 +162,12 @@ convert_lisp_string(char* c_string, void* lisp_string, int len) c_string[k] = (wide_string[k]) & 0xff; } c_string[k] = 0; - +#else + strcpy(c_string, lisp_string); +#endif + return c_string; } -#endif void os_foreign_linkage_init(void) @@ -184,7 +187,6 @@ os_foreign_linkage_init(void) = (struct vector *) PTR(data_vector->data[i]); long type = fixnum_value(data_vector->data[i + 1]); lispobj lib_list = data_vector->data[i + 2]; -#ifdef UNICODE /* FIXME: 1000 may not be long enough. Add checks to make sure it's ok!!!!*/ char c_symbol_name[1000]; /* @@ -193,9 +195,6 @@ os_foreign_linkage_init(void) */ convert_lisp_string(c_symbol_name, symbol_name->data, (symbol_name->length >> 2)); -#else -#define c_symbol_name ((char*) symbol_name->data) -#endif if (i == 0) { #if defined(sparc) if (type != LINKAGE_CODE_TYPE || strcmp(c_symbol_name, "call_into_c")) { @@ -261,13 +260,10 @@ os_resolve_data_linkage(void) = (struct vector *) PTR(data_vector->data[i]); long type = fixnum_value(data_vector->data[i + 1]); lispobj lib_list = data_vector->data[i + 2]; -#ifdef UNICODE char c_symbol_name[1000]; convert_lisp_string(c_symbol_name, symbol_name->data, (symbol_name->length >> 2)); -#else -#define c_symbol_name ((char*) symbol_name->data) -#endif + if (type == LINKAGE_DATA_TYPE && lib_list != NIL) { void *target_addr = os_dlsym(c_symbol_name, lib_list); @@ -299,9 +295,7 @@ os_link_one_symbol(long entry) long type; void *target_addr; long table_index = entry * LINKAGE_DATA_ENTRY_SIZE; -#ifdef UNICODE char c_symbol_name[1000]; -#endif linkage_data = (struct array *) PTR(linkage_data_obj); table_size = fixnum_value(linkage_data->fill_pointer); @@ -312,11 +306,7 @@ os_link_one_symbol(long entry) symbol_name = (struct vector *) PTR(data_vector->data[table_index]); type = fixnum_value(data_vector->data[table_index + 1]); -#ifdef UNICODE convert_lisp_string(c_symbol_name, symbol_name->data, (symbol_name->length >> 2)); -#else -#define c_symbol_name ((char*) symbol_name->data) -#endif target_addr = os_dlsym(c_symbol_name, data_vector->data[table_index + 2]); -- GitLab