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;