"func sys.indexstring (? string, ? int) (? uint8)\n"
"func sys.intstring (? int64) (? string)\n"
"func sys.arraystring (? []uint8) (? string)\n"
+ "func sys.arraystringi (? []int) (? string)\n"
"func sys.stringiter (? string, ? int) (? int)\n"
"func sys.stringiter2 (? string, ? int) (retk int, retv int)\n"
"func sys.ifaceI2E (iface any) (ret any)\n"
func indexstring(string, int) byte;
func intstring(int64) string;
func arraystring([]byte) string;
+func arraystringi([]int) string;
func stringiter(string, int) int;
func stringiter2(string, int) (retk int, retv int);
indir(n, stringop(n, Erv));
return;
}
+
// can convert []byte and *[10]byte
if((isptr[et] && isfixedarray(l->type->type) && istype(l->type->type->type, TUINT8))
|| (isslice(l->type) && istype(l->type->type, TUINT8))) {
indir(n, stringop(n, Erv));
return;
}
+
+ // can convert []int and *[10]int
+ if((isptr[et] && isfixedarray(l->type->type) && istype(l->type->type->type, TINT))
+ || (isslice(l->type) && istype(l->type->type, TINT))) {
+ n->op = OARRAY;
+ indir(n, stringop(n, Erv));
+ return;
+ }
}
// convert dynamic to static generated by ONEW/OMAKE
break;
case OARRAY:
- // arraystring([]byte) string;
r = n->left;
+ if(r->type != T && r->type->type != T) {
+ if(istype(r->type->type, TINT) || istype(r->type->type->type, TINT)) {
+ // arraystring([]byte) string;
+ on = syslook("arraystringi", 0);
+ r = nod(OCALL, on, r);
+ break;
+ }
+ }
+
+ // arraystring([]byte) string;
on = syslook("arraystring", 0);
r = nod(OCALL, on, r);
break;
FLUSH(&s);
}
+void
+sys·arraystringi(Array b, String s)
+{
+ int32 siz, i;
+ int32 *a;
+ byte dum[8];
+
+ a = (int32*)b.array;
+ siz = 0;
+ for(i=0; i<b.nel; i++) {
+ siz += runetochar(dum, a[i]);
+ }
+
+ s = gostringsize(siz);
+ siz = 0;
+ for(i=0; i<b.nel; i++) {
+ siz += runetochar(s.str+siz, a[i]);
+ }
+
+ FLUSH(&s);
+}
+
enum
{
Runeself = 0x80,