diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2016-10-12 18:17:52 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2016-10-12 18:17:52 +0000 |
commit | 1ad16c52842e0513b96a0e02d2a431dc0f338c5d (patch) | |
tree | f6eaddf65fba9d031ed9b3008a3c3ba4ff0ebd0b /libgo/runtime/go-int-to-string.c | |
parent | 2ec69f566076547b618447ba5531260c25abed3e (diff) | |
download | gcc-1ad16c52842e0513b96a0e02d2a431dc0f338c5d.zip gcc-1ad16c52842e0513b96a0e02d2a431dc0f338c5d.tar.gz gcc-1ad16c52842e0513b96a0e02d2a431dc0f338c5d.tar.bz2 |
compiler, runtime: copy string code from Go 1.7
Add compiler support for turning concatenating strings into a call to
a runtime function that takes the appropriate number of arguments.
Rename some local variables in mgc0.c to avoid macros that the new
rune.go causes to appear in runtime.inc.
Reviewed-on: https://go-review.googlesource.com/30827
From-SVN: r241074
Diffstat (limited to 'libgo/runtime/go-int-to-string.c')
-rw-r--r-- | libgo/runtime/go-int-to-string.c | 69 |
1 files changed, 0 insertions, 69 deletions
diff --git a/libgo/runtime/go-int-to-string.c b/libgo/runtime/go-int-to-string.c deleted file mode 100644 index d90b1dd..0000000 --- a/libgo/runtime/go-int-to-string.c +++ /dev/null @@ -1,69 +0,0 @@ -/* go-int-to-string.c -- convert an integer to a string in Go. - - Copyright 2009 The Go Authors. All rights reserved. - Use of this source code is governed by a BSD-style - license that can be found in the LICENSE file. */ - -#include "runtime.h" -#include "arch.h" -#include "malloc.h" - -String -__go_int_to_string (intgo v) -{ - char buf[4]; - int len; - unsigned char *retdata; - String ret; - - /* A negative value is not valid UTF-8; turn it into the replacement - character. */ - if (v < 0) - v = 0xfffd; - - if (v <= 0x7f) - { - buf[0] = v; - len = 1; - } - else if (v <= 0x7ff) - { - buf[0] = 0xc0 + (v >> 6); - buf[1] = 0x80 + (v & 0x3f); - len = 2; - } - else - { - /* If the value is out of range for UTF-8, turn it into the - "replacement character". */ - if (v > 0x10ffff) - v = 0xfffd; - /* If the value is a surrogate pair, which is invalid in UTF-8, - turn it into the replacement character. */ - if (v >= 0xd800 && v < 0xe000) - v = 0xfffd; - - if (v <= 0xffff) - { - buf[0] = 0xe0 + (v >> 12); - buf[1] = 0x80 + ((v >> 6) & 0x3f); - buf[2] = 0x80 + (v & 0x3f); - len = 3; - } - else - { - buf[0] = 0xf0 + (v >> 18); - buf[1] = 0x80 + ((v >> 12) & 0x3f); - buf[2] = 0x80 + ((v >> 6) & 0x3f); - buf[3] = 0x80 + (v & 0x3f); - len = 4; - } - } - - retdata = runtime_mallocgc (len, 0, FlagNoScan); - __builtin_memcpy (retdata, buf, len); - ret.str = retdata; - ret.len = len; - - return ret; -} |