mirror of https://github.com/golang/go.git
parent
3e8bb54c2f
commit
aa4c638b7b
|
|
@ -19,6 +19,7 @@ char *runtimeimport =
|
||||||
"func runtime.catstring (? string, ? string) (? string)\n"
|
"func runtime.catstring (? string, ? string) (? string)\n"
|
||||||
"func runtime.cmpstring (? string, ? string) (? int)\n"
|
"func runtime.cmpstring (? string, ? string) (? int)\n"
|
||||||
"func runtime.slicestring (? string, ? int, ? int) (? string)\n"
|
"func runtime.slicestring (? string, ? int, ? int) (? string)\n"
|
||||||
|
"func runtime.slicestring1 (? string, ? int) (? string)\n"
|
||||||
"func runtime.indexstring (? string, ? int) (? uint8)\n"
|
"func runtime.indexstring (? string, ? int) (? uint8)\n"
|
||||||
"func runtime.intstring (? int64) (? string)\n"
|
"func runtime.intstring (? int64) (? string)\n"
|
||||||
"func runtime.slicebytetostring (? []uint8) (? string)\n"
|
"func runtime.slicebytetostring (? []uint8) (? string)\n"
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ truncfltlit(Mpflt *oldv, Type *t)
|
||||||
void
|
void
|
||||||
convlit(Node **np, Type *t)
|
convlit(Node **np, Type *t)
|
||||||
{
|
{
|
||||||
return convlit1(np, t, 0);
|
convlit1(np, t, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ func printsp()
|
||||||
func catstring(string, string) string
|
func catstring(string, string) string
|
||||||
func cmpstring(string, string) int
|
func cmpstring(string, string) int
|
||||||
func slicestring(string, int, int) string
|
func slicestring(string, int, int) string
|
||||||
|
func slicestring1(string, int) string
|
||||||
func indexstring(string, int) byte
|
func indexstring(string, int) byte
|
||||||
func intstring(int64) string
|
func intstring(int64) string
|
||||||
func slicebytetostring([]byte) string
|
func slicebytetostring([]byte) string
|
||||||
|
|
|
||||||
|
|
@ -918,10 +918,16 @@ walkexpr(Node **np, NodeList **init)
|
||||||
|
|
||||||
case OSLICESTR:
|
case OSLICESTR:
|
||||||
// sys_slicestring(s, lb, hb)
|
// sys_slicestring(s, lb, hb)
|
||||||
n = mkcall("slicestring", n->type, init,
|
if(n->right->right) {
|
||||||
conv(n->left, types[TSTRING]),
|
n = mkcall("slicestring", n->type, init,
|
||||||
conv(n->right->left, types[TINT]),
|
conv(n->left, types[TSTRING]),
|
||||||
conv(n->right->right, types[TINT]));
|
conv(n->right->left, types[TINT]),
|
||||||
|
conv(n->right->right, types[TINT]));
|
||||||
|
} else {
|
||||||
|
n = mkcall("slicestring1", n->type, init,
|
||||||
|
conv(n->left, types[TSTRING]),
|
||||||
|
conv(n->right->left, types[TINT]));
|
||||||
|
}
|
||||||
goto ret;
|
goto ret;
|
||||||
|
|
||||||
case OINDEXSTR:
|
case OINDEXSTR:
|
||||||
|
|
|
||||||
|
|
@ -142,6 +142,24 @@ func slicestring(si String, lindex int32, hindex int32) (so String) {
|
||||||
// mcpy(so.str, si.str+lindex, l);
|
// mcpy(so.str, si.str+lindex, l);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func slicestring1(si String, lindex int32) (so String) {
|
||||||
|
int32 l;
|
||||||
|
|
||||||
|
if(lindex < 0 || lindex > si.len) {
|
||||||
|
runtime·printpc(&si);
|
||||||
|
prints(" ");
|
||||||
|
prbounds("slice", lindex, si.len, si.len);
|
||||||
|
}
|
||||||
|
|
||||||
|
l = si.len-lindex;
|
||||||
|
so.str = si.str + lindex;
|
||||||
|
so.len = l;
|
||||||
|
|
||||||
|
// alternate to create a new string
|
||||||
|
// so = gostringsize(l);
|
||||||
|
// mcpy(so.str, si.str+lindex, l);
|
||||||
|
}
|
||||||
|
|
||||||
func indexstring(s String, i int32) (b byte) {
|
func indexstring(s String, i int32) (b byte) {
|
||||||
if(i < 0 || i >= s.len) {
|
if(i < 0 || i >= s.len) {
|
||||||
runtime·printpc(&s);
|
runtime·printpc(&s);
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ main()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* slice strings */
|
/* slice strings */
|
||||||
print(c[0:3], c[3:6]);
|
print(c[0:3], c[3:]);
|
||||||
|
|
||||||
print("\n");
|
print("\n");
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue