Mercurial > projects > ldc
view dmd/lstring.c @ 1131:f2f13f111e2e
Workaround for LLVM PR 3861 (http://llvm.org/PR3861).
(LLVM abort()s in codegen if the second integer in a return value is <= i8 on
x86/x86-64)
This was breaking native compilation of Tango's TempFile module on x86-64.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Mon, 23 Mar 2009 01:01:55 +0100 |
parents | b30fe7e1dbb9 |
children | eeb8b95ea92e |
line wrap: on
line source
// lstring.c // Copyright (c) 1999-2002 by Digital Mars // All Rights Reserved // written by Walter Bright // www.digitalmars.com // License for redistribution is by either the Artistic License // in artistic.txt, or the GNU General Public License in gnu.txt. // See the included readme.txt for details. #include <stdlib.h> #include "dchar.h" #include "rmem.h" #include "lstring.h" Lstring Lstring::zero = LSTRING_EMPTY(); Lstring *Lstring::ctor(const dchar *p, unsigned length) { Lstring *s; s = alloc(length); memcpy(s->string, p, length * sizeof(dchar)); return s; } Lstring *Lstring::alloc(unsigned length) { Lstring *s; s = (Lstring *)mem.malloc(size(length)); s->length = length; s->string[length] = 0; return s; } Lstring *Lstring::append(const Lstring *s) { Lstring *t; if (!s->length) return this; t = alloc(length + s->length); memcpy(t->string, string, length * sizeof(dchar)); memcpy(t->string + length, s->string, s->length * sizeof(dchar)); return t; } Lstring *Lstring::substring(int start, int end) { Lstring *t; if (start == end) return &zero; t = alloc(end - start); memcpy(t->string, string + start, (end - start) * sizeof(dchar)); return t; }