diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2011-10-09 22:06:39 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2011-10-09 22:06:39 -0700 |
commit | b9a153ac4e4690112877e4817b840ebdc7427c5a (patch) | |
tree | 59410247bec7842e4c7e180b98f80764f40fa5d5 | |
parent | 889501071aeae561b026fc298e0442d2ef4e433f (diff) | |
download | txr-b9a153ac4e4690112877e4817b840ebdc7427c5a.tar.gz txr-b9a153ac4e4690112877e4817b840ebdc7427c5a.tar.bz2 txr-b9a153ac4e4690112877e4817b840ebdc7427c5a.zip |
Following up to previous commit's TODO.
* filter.c (struct filter_par): wchar_t becomes wchli_t.
* lib.h (wchli_t): New type: an incomplete structure type,
so that a pointer to this type is incompatible with anything else.
(wli): Macro produces const wchli_t * pointer instead of
const wchar_t *.
(auto_str, static_str): Accept a const wchli_t * instead
of const wchar_t *, making it impossible to misuse these
functions by passing in a literal.
* stream.c (string_out_put_char): These type changes showed
this hack to have a bug. Confronted with the need to cast
from const wchar_t * to const wchli_t *, it's obvious that
the conversion has to be done properly with the + 1 in the
one platform case, but not the other.
* txr.c (version): Type changed to const wchli_t.
* txr.h (version): Declaration updated.
-rw-r--r-- | ChangeLog | 24 | ||||
-rw-r--r-- | filter.c | 2 | ||||
-rw-r--r-- | lib.h | 18 | ||||
-rw-r--r-- | stream.c | 3 | ||||
-rw-r--r-- | txr.c | 2 | ||||
-rw-r--r-- | txr.h | 2 |
6 files changed, 39 insertions, 12 deletions
@@ -1,5 +1,29 @@ 2011-10-09 Kaz Kylheku <kaz@kylheku.com> + Following up to previous commit's TODO. + + * filter.c (struct filter_par): wchar_t becomes wchli_t. + + * lib.h (wchli_t): New type: an incomplete structure type, + so that a pointer to this type is incompatible with anything else. + (wli): Macro produces const wchli_t * pointer instead of + const wchar_t *. + (auto_str, static_str): Accept a const wchli_t * instead + of const wchar_t *, making it impossible to misuse these + functions by passing in a literal. + + * stream.c (string_out_put_char): These type changes showed + this hack to have a bug. Confronted with the need to cast + from const wchar_t * to const wchli_t *, it's obvious that + the conversion has to be done properly with the + 1 in the + one platform case, but not the other. + + * txr.c (version): Type changed to const wchli_t. + + * txr.h (version): Declaration updated. + +2011-10-09 Kaz Kylheku <kaz@kylheku.com> + Ported to Cygwin. TODO: there should be some type safety with the new wli macro @@ -128,7 +128,7 @@ val get_filter_trie(val sym) } struct filter_pair { - const wchar_t *key, *value; + const wchli_t *key, *value; }; static val build_filter(struct filter_pair *pair, val compress_p) @@ -188,27 +188,29 @@ INLINE type_t type(val obj) return tag(obj) ? (type_t) tag(obj) : obj->t.type; } +typedef struct wli wchli_t; + #if LIT_ALIGN < 4 -#define wli(lit) (L ## "\0" lit) +#define wli(lit) ((const wchli_t *) L ## "\0" lit) #else -#define wli(lit) (L ## lit) +#define wli(lit) ((const wchli_t *) L ## lit) #endif -INLINE val auto_str(const wchar_t *str) +INLINE val auto_str(const wchli_t *str) { #if LIT_ALIGN < 4 - return (val) ((cnum) (str + 1) | TAG_LIT); + return (val) (((cnum) str + 1) | TAG_LIT); #else - return (val) ((cnum) (str) | TAG_LIT); + return (val) (((cnum) str) | TAG_LIT); #endif } -INLINE val static_str(const wchar_t *str) +INLINE val static_str(const wchli_t *str) { #if LIT_ALIGN < 4 - return (val) ((cnum) (str + 1) | TAG_LIT); + return (val) (((cnum) str + 1) | TAG_LIT); #else - return (val) ((cnum) (str) | TAG_LIT); + return (val) (((cnum) str) | TAG_LIT); #endif } @@ -420,12 +420,13 @@ static val string_out_put_char(val stream, val ch) mini[0] = 0; mini[1] = c_chr(ch); mini[2] = 0; + return string_out_put_string(stream, auto_str((const wchli_t *) (mini + 1))); #else wchar_t mini[2]; mini[0] = c_chr(ch); mini[1] = 0; + return string_out_put_string(stream, auto_str((const wchli_t *) mini)); #endif - return string_out_put_string(stream, auto_str(mini)); } static struct strm_ops string_out_ops = { @@ -43,7 +43,7 @@ #include "utf8.h" #include "txr.h" -const wchar_t *version = wli("038"); +const wchli_t *version = wli("038"); const wchar_t *progname = L"txr"; const wchar_t *spec_file = L"stdin"; val spec_file_str; @@ -32,6 +32,6 @@ extern int opt_gc_debug; extern int opt_vg_debug; #endif extern int opt_derivative_regex; -extern const wchar_t *version; +extern const wchli_t *version; extern const wchar_t *progname; extern int output_produced; |