diff options
author | Michael Gran <spk121@yahoo.com> | 2009-07-29 06:38:32 -0700 |
---|---|---|
committer | Michael Gran <spk121@yahoo.com> | 2009-07-29 06:38:32 -0700 |
commit | 904a78f11d2d11a58d5df365a44c4fbbd4c96df3 (patch) | |
tree | c0df0bc8bfcb70ce62ce7de6d42b9df26352b7e8 /module | |
parent | 77332b21a01fac906ae4707426e00f01e62c0415 (diff) | |
download | guile-904a78f11d2d11a58d5df365a44c4fbbd4c96df3.tar.gz |
Add 32-bit characters
This adds the 32-bit standalone characters. Strings are still
8-bit. Characters larger than 8-bit can only be entered or
displayed in octal format at this point. At this point, the
terminal's display encoding is expected to be Latin-1.
* module/language/assembly/compile-bytecode.scm (write-bytecode):
add 32-bit char
* module/language/assembly.scm (object->assembly): add 32-bit char
(assembly->object): add 32-bit char
* libguile/vm-i-system.c (make-char32): new op
* libguile/print.c (iprin1): print 32-bit char
* libguile/numbers.h: add type scm_t_wchar
* libguile/numbers.c: add type scm_t_wchar
* libguile/chars.h: new type scm_t_wchar
(SCM_CODEPOINT_MAX): new
(SCM_IS_UNICODE_CHAR): new
(SCM_MAKE_CHAR): operate on 32-bit char
* libguile/chars.c: comparison operators now use Unicode
codepoints
(scm_c_upcase): now receives and returns scm_t_wchar
(scm_c_downcase): now receives and returns scm_t_wchar
Diffstat (limited to 'module')
-rw-r--r-- | module/language/assembly.scm | 11 | ||||
-rw-r--r-- | module/language/assembly/compile-bytecode.scm | 1 |
2 files changed, 11 insertions, 1 deletions
diff --git a/module/language/assembly.scm b/module/language/assembly.scm index e7308ac6f..3a1da4fe3 100644 --- a/module/language/assembly.scm +++ b/module/language/assembly.scm @@ -131,7 +131,11 @@ (bytevector-s64-set! bv 0 x (endianness big)) bv)))) (else #f))) - ((char? x) `(make-char8 ,(char->integer x))) + ((char? x) + (cond ((<= (char->integer x) #xff) + `(make-char8 ,(char->integer x))) + (else + `(make-char32 ,(char->integer x))))) (else #f))) (define (assembly->object code) @@ -156,6 +160,11 @@ (endianness big))) ((make-char8 ,n) (integer->char n)) + ((make-char32 ,n1 ,n2 ,n3 ,n4) + (integer->char (+ (* n1 #x1000000) + (* n2 #x10000) + (* n3 #x100) + n4))) ((load-string ,s) s) ((load-symbol ,s) (string->symbol s)) ((load-keyword ,s) (symbol->keyword (string->symbol s))) diff --git a/module/language/assembly/compile-bytecode.scm b/module/language/assembly/compile-bytecode.scm index bf6c5f7b5..bed0fb2dc 100644 --- a/module/language/assembly/compile-bytecode.scm +++ b/module/language/assembly/compile-bytecode.scm @@ -122,6 +122,7 @@ ;; meets the alignment requirements of `scm_objcode'. See ;; `scm_c_make_objcode_slice ()'. (write-bytecode meta write get-addr '())))) + ((make-char32 ,x) (write-uint32-be x)) ((load-unsigned-integer ,str) (write-loader str)) ((load-integer ,str) (write-loader str)) ((load-number ,str) (write-loader str)) |