Mercurial > projects > ddmd
comparison dmd/StringExp.d @ 20:1628b221808d
Fleshed out more unimplemented methods.
author | Robert Clipsham <robert@octarineparrot.com> |
---|---|
date | Wed, 07 Apr 2010 00:29:13 +0100 |
parents | 3356c90e9aac |
children | fd4acc376c45 |
comparison
equal
deleted
inserted
replaced
19:01cadcfa4842 | 20:1628b221808d |
---|---|
15 import dmd.Scope; | 15 import dmd.Scope; |
16 import dmd.IRState; | 16 import dmd.IRState; |
17 import dmd.StringExp; | 17 import dmd.StringExp; |
18 import dmd.HdrGenState; | 18 import dmd.HdrGenState; |
19 import dmd.Utf; | 19 import dmd.Utf; |
20 import dmd.Util; | |
20 import dmd.backend.dt_t; | 21 import dmd.backend.dt_t; |
21 import dmd.backend.Symbol; | 22 import dmd.backend.Symbol; |
22 import dmd.backend.StringTab; | 23 import dmd.backend.StringTab; |
23 import dmd.backend.Util; | 24 import dmd.backend.Util; |
24 import dmd.backend.SC; | 25 import dmd.backend.SC; |
570 buf.writeByte(postfix); | 571 buf.writeByte(postfix); |
571 } | 572 } |
572 | 573 |
573 void toMangleBuffer(OutBuffer buf) | 574 void toMangleBuffer(OutBuffer buf) |
574 { | 575 { |
575 assert(false); | 576 char m; |
577 OutBuffer tmp = new OutBuffer(); | |
578 string p; | |
579 dchar c; | |
580 size_t u; | |
581 ubyte *q; | |
582 uint qlen; | |
583 | |
584 /* Write string in UTF-8 format | |
585 */ | |
586 switch (sz) | |
587 { case 1: | |
588 m = 'a'; | |
589 q = cast(ubyte *)string_; | |
590 qlen = len; | |
591 break; | |
592 case 2: | |
593 m = 'w'; | |
594 for (u = 0; u < len; ) | |
595 { | |
596 p = utf_decodeWchar(cast(wstring)string_[0..len], &u, &c); | |
597 if (p) | |
598 error("%s", p); | |
599 else | |
600 tmp.writeUTF8(c); | |
601 } | |
602 q = tmp.data; | |
603 qlen = tmp.offset; | |
604 break; | |
605 case 4: | |
606 m = 'd'; | |
607 for (u = 0; u < len; u++) | |
608 { | |
609 c = (cast(uint*)string_)[u]; | |
610 if (!utf_isValidDchar(c)) | |
611 error("invalid UCS-32 char \\U%08x", c); | |
612 else | |
613 tmp.writeUTF8(c); | |
614 } | |
615 q = tmp.data; | |
616 qlen = tmp.offset; | |
617 break; | |
618 default: | |
619 assert(0); | |
620 } | |
621 buf.writeByte(m); | |
622 buf.printf("%d_", qlen); | |
623 for (size_t i = 0; i < qlen; i++) | |
624 buf.printf("%02x", q[i]); | |
576 } | 625 } |
577 | 626 |
578 elem* toElem(IRState* irs) | 627 elem* toElem(IRState* irs) |
579 { | 628 { |
580 elem* e; | 629 elem* e; |