mirror of
https://github.com/golang/go
synced 2024-10-03 06:21:21 -06:00
runtime: avoid allocation for fixed strings
R=r CC=golang-dev https://golang.org/cl/1083041
This commit is contained in:
parent
d6b199ac99
commit
4843b130bb
@ -30,7 +30,7 @@ signame(int32 sig)
|
|||||||
{
|
{
|
||||||
if(sig < 0 || sig >= NSIG)
|
if(sig < 0 || sig >= NSIG)
|
||||||
return emptystring;
|
return emptystring;
|
||||||
return gostring((byte*)sigtab[sig].name);
|
return gostringnocopy((byte*)sigtab[sig].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -38,7 +38,7 @@ signame(int32 sig)
|
|||||||
{
|
{
|
||||||
if(sig < 0 || sig >= NSIG)
|
if(sig < 0 || sig >= NSIG)
|
||||||
return emptystring;
|
return emptystring;
|
||||||
return gostring((byte*)sigtab[sig].name);
|
return gostringnocopy((byte*)sigtab[sig].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -41,7 +41,7 @@ signame(int32 sig)
|
|||||||
{
|
{
|
||||||
if(sig < 0 || sig >= NSIG)
|
if(sig < 0 || sig >= NSIG)
|
||||||
return emptystring;
|
return emptystring;
|
||||||
return gostring((byte*)sigtab[sig].name);
|
return gostringnocopy((byte*)sigtab[sig].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -49,7 +49,7 @@ signame(int32 sig)
|
|||||||
{
|
{
|
||||||
if(sig < 0 || sig >= NSIG)
|
if(sig < 0 || sig >= NSIG)
|
||||||
return emptystring;
|
return emptystring;
|
||||||
return gostring((byte*)sigtab[sig].name);
|
return gostringnocopy((byte*)sigtab[sig].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -467,7 +467,7 @@ ifacehash1(void *data, Type *t)
|
|||||||
if(algarray[alg].hash == nohash) {
|
if(algarray[alg].hash == nohash) {
|
||||||
// calling nohash will panic too,
|
// calling nohash will panic too,
|
||||||
// but we can print a better error.
|
// but we can print a better error.
|
||||||
·newErrorString(catstring(gostring((byte*)"hash of unhashable type "), *t->string), &err);
|
·newErrorString(catstring(gostringnocopy((byte*)"hash of unhashable type "), *t->string), &err);
|
||||||
·panic(err);
|
·panic(err);
|
||||||
}
|
}
|
||||||
if(wid <= sizeof(data))
|
if(wid <= sizeof(data))
|
||||||
@ -501,7 +501,7 @@ ifaceeq1(void *data1, void *data2, Type *t)
|
|||||||
if(algarray[alg].equal == noequal) {
|
if(algarray[alg].equal == noequal) {
|
||||||
// calling noequal will panic too,
|
// calling noequal will panic too,
|
||||||
// but we can print a better error.
|
// but we can print a better error.
|
||||||
·newErrorString(catstring(gostring((byte*)"comparing uncomparable type "), *t->string), &err);
|
·newErrorString(catstring(gostringnocopy((byte*)"comparing uncomparable type "), *t->string), &err);
|
||||||
·panic(err);
|
·panic(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ signame(int32 sig)
|
|||||||
{
|
{
|
||||||
if(sig < 0 || sig >= NSIG)
|
if(sig < 0 || sig >= NSIG)
|
||||||
return emptystring;
|
return emptystring;
|
||||||
return gostring((byte*)sigtab[sig].name);
|
return gostringnocopy((byte*)sigtab[sig].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -46,7 +46,7 @@ signame(int32 sig)
|
|||||||
{
|
{
|
||||||
if(sig < 0 || sig >= NSIG)
|
if(sig < 0 || sig >= NSIG)
|
||||||
return emptystring;
|
return emptystring;
|
||||||
return gostring((byte*)sigtab[sig].name);
|
return gostringnocopy((byte*)sigtab[sig].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -46,7 +46,7 @@ signame(int32 sig)
|
|||||||
{
|
{
|
||||||
if(sig < 0 || sig >= NSIG)
|
if(sig < 0 || sig >= NSIG)
|
||||||
return emptystring;
|
return emptystring;
|
||||||
return gostring((byte*)sigtab[sig].name);
|
return gostringnocopy((byte*)sigtab[sig].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -79,7 +79,7 @@ panicstring(int8 *s)
|
|||||||
{
|
{
|
||||||
Eface err;
|
Eface err;
|
||||||
|
|
||||||
·newErrorString(gostring((byte*)s), &err);
|
·newErrorString(gostringnocopy((byte*)s), &err);
|
||||||
·panic(err);
|
·panic(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,13 +161,13 @@ goargs(void)
|
|||||||
genvv = malloc(envc*sizeof genvv[0]);
|
genvv = malloc(envc*sizeof genvv[0]);
|
||||||
|
|
||||||
for(i=0; i<argc; i++)
|
for(i=0; i<argc; i++)
|
||||||
gargv[i] = gostring(argv[i]);
|
gargv[i] = gostringnocopy(argv[i]);
|
||||||
os·Args.array = (byte*)gargv;
|
os·Args.array = (byte*)gargv;
|
||||||
os·Args.len = argc;
|
os·Args.len = argc;
|
||||||
os·Args.cap = argc;
|
os·Args.cap = argc;
|
||||||
|
|
||||||
for(i=0; i<envc; i++)
|
for(i=0; i<envc; i++)
|
||||||
genvv[i] = gostring(argv[argc+1+i]);
|
genvv[i] = gostringnocopy(argv[argc+1+i]);
|
||||||
os·Envs.array = (byte*)genvv;
|
os·Envs.array = (byte*)genvv;
|
||||||
os·Envs.len = envc;
|
os·Envs.len = envc;
|
||||||
os·Envs.cap = envc;
|
os·Envs.cap = envc;
|
||||||
@ -220,7 +220,7 @@ void
|
|||||||
byte *p;
|
byte *p;
|
||||||
|
|
||||||
p = getenv("GOROOT");
|
p = getenv("GOROOT");
|
||||||
out = gostring(p);
|
out = gostringnocopy(p);
|
||||||
FLUSH(&out);
|
FLUSH(&out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -387,6 +387,7 @@ void* mal(uintptr);
|
|||||||
uint32 cmpstring(String, String);
|
uint32 cmpstring(String, String);
|
||||||
String catstring(String, String);
|
String catstring(String, String);
|
||||||
String gostring(byte*);
|
String gostring(byte*);
|
||||||
|
String gostringnocopy(byte*);
|
||||||
String gostringw(uint16*);
|
String gostringw(uint16*);
|
||||||
void initsig(void);
|
void initsig(void);
|
||||||
int32 gotraceback(void);
|
int32 gotraceback(void);
|
||||||
|
@ -60,6 +60,16 @@ gostring(byte *str)
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String
|
||||||
|
gostringnocopy(byte *str)
|
||||||
|
{
|
||||||
|
String s;
|
||||||
|
|
||||||
|
s.str = str;
|
||||||
|
s.len = findnull(str);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
String
|
String
|
||||||
gostringw(uint16 *str)
|
gostringw(uint16 *str)
|
||||||
{
|
{
|
||||||
|
@ -106,7 +106,7 @@ dofunc(Sym *sym)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
f = &func[nfunc++];
|
f = &func[nfunc++];
|
||||||
f->name = gostring(sym->name);
|
f->name = gostringnocopy(sym->name);
|
||||||
f->entry = sym->value;
|
f->entry = sym->value;
|
||||||
if(sym->symtype == 'L' || sym->symtype == 'l')
|
if(sym->symtype == 'L' || sym->symtype == 'l')
|
||||||
f->frame = -sizeof(uintptr);
|
f->frame = -sizeof(uintptr);
|
||||||
|
Loading…
Reference in New Issue
Block a user