make-image can now generate images with Unicode strings
parent
e32d11a4d0
commit
1dca238581
|
@ -344,25 +344,37 @@ M: wrapper '
|
||||||
[ emit ] emit-object ;
|
[ emit ] emit-object ;
|
||||||
|
|
||||||
! Strings
|
! Strings
|
||||||
|
: native> ( object -- object )
|
||||||
|
big-endian get [ [ be> ] map ] [ [ le> ] map ] if ;
|
||||||
|
|
||||||
: emit-bytes ( seq -- )
|
: emit-bytes ( seq -- )
|
||||||
bootstrap-cell <groups>
|
bootstrap-cell <groups> native> emit-seq ;
|
||||||
big-endian get [ [ be> ] map ] [ [ le> ] map ] if
|
|
||||||
emit-seq ;
|
|
||||||
|
|
||||||
: pad-bytes ( seq -- newseq )
|
: pad-bytes ( seq -- newseq )
|
||||||
dup length bootstrap-cell align 0 pad-right ;
|
dup length bootstrap-cell align 0 pad-right ;
|
||||||
|
|
||||||
: check-string ( string -- )
|
: extended-part ( str -- str' )
|
||||||
[ 127 > ] contains?
|
dup [ 128 < ] all? [ drop f ] [
|
||||||
[ "Bootstrap cannot emit non-ASCII strings" throw ] when ;
|
[ -7 shift 1 bitxor ] { } map-as
|
||||||
|
big-endian get
|
||||||
|
[ [ 2 >be ] { } map-as ]
|
||||||
|
[ [ 2 >le ] { } map-as ] if
|
||||||
|
B{ } join
|
||||||
|
] if ;
|
||||||
|
|
||||||
|
: ascii-part ( str -- str' )
|
||||||
|
[
|
||||||
|
[ 128 mod ] [ 128 >= ] bi
|
||||||
|
[ 128 bitor ] when
|
||||||
|
] B{ } map-as ;
|
||||||
|
|
||||||
: emit-string ( string -- ptr )
|
: emit-string ( string -- ptr )
|
||||||
dup check-string
|
[ length ] [ extended-part ' ] [ ] tri
|
||||||
string type-number object tag-number [
|
string type-number object tag-number [
|
||||||
dup length emit-fixnum
|
[ emit-fixnum ]
|
||||||
f ' emit
|
[ emit ]
|
||||||
f ' emit
|
[ f ' emit ascii-part pad-bytes emit-bytes ]
|
||||||
pad-bytes emit-bytes
|
tri*
|
||||||
] emit-object ;
|
] emit-object ;
|
||||||
|
|
||||||
M: string '
|
M: string '
|
||||||
|
|
Loading…
Reference in New Issue