diff options
| author | Ken Thompson <ken@golang.org> | 2008-06-16 22:34:50 -0700 |
|---|---|---|
| committer | Ken Thompson <ken@golang.org> | 2008-06-16 22:34:50 -0700 |
| commit | 4e8142c929bf285870aaa561d8bf47c94639b89b (patch) | |
| tree | 18a751a2c20ce9a71ef8b82757ccb3587ea53fe6 /src/runtime | |
| parent | 3f2d542817717400e28df072fa2ac20d648ad5be (diff) | |
| download | go-4e8142c929bf285870aaa561d8bf47c94639b89b.tar.xz | |
maps
SVN=123089
Diffstat (limited to 'src/runtime')
| -rw-r--r-- | src/runtime/runtime.c | 56 | ||||
| -rw-r--r-- | src/runtime/runtime.h | 10 |
2 files changed, 34 insertions, 32 deletions
diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c index 9a7efc55b7..ee6f75f09c 100644 --- a/src/runtime/runtime.c +++ b/src/runtime/runtime.c @@ -147,7 +147,7 @@ enum MAP_ANON = 0x1000, }; -static void +void throw(int8 *s) { prints("throw: "); @@ -208,6 +208,30 @@ mal(uint32 n) return v; } +uint32 +cmpstring(string s1, string s2) +{ + uint32 i, l; + byte c1, c2; + + l = s1->len; + if(s2->len < l) + l = s2->len; + for(i=0; i<l; i++) { + c1 = s1->str[i]; + c2 = s2->str[i]; + if(c1 < c2) + return -1; + if(c1 > c2) + return +1; + } + if(s1->len < s2->len) + return -1; + if(s1->len > s2->len) + return +1; + return 0; +} + void sys_mal(uint32 n, uint8 *ret) { @@ -243,35 +267,7 @@ out: void sys_cmpstring(string s1, string s2, int32 v) { - uint32 i, l; - byte c1, c2; - - l = s1->len; - if(s2->len < l) - l = s2->len; - for(i=0; i<l; i++) { - c1 = s1->str[i]; - c2 = s2->str[i]; - if(c1 < c2) { - v = -1; - goto out; - } - if(c1 > c2) { - v = +1; - goto out; - } - } - if(s1->len < s2->len) { - v = -1; - goto out; - } - if(s1->len > s2->len) { - v = +1; - goto out; - } - v = 0; - -out: + v = cmpstring(s1, s2); FLUSH(&v); } diff --git a/src/runtime/runtime.h b/src/runtime/runtime.h index d006915730..898c7b4083 100644 --- a/src/runtime/runtime.h +++ b/src/runtime/runtime.h @@ -80,12 +80,18 @@ enum #define nil ((void*)0) /* - * very low level + * very low level c-called */ void FLUSH(void*); +void throw(int8*); void prints(int8*); void mcpy(byte*, byte*, uint32); void* mal(uint32); +uint32 cmpstring(string, string); + +/* + * low level go -called + */ void sys_exit(int32); void sys_write(int32, void*, int32); void sys_breakpoint(void); @@ -94,7 +100,7 @@ void sys_memclr(byte*, uint32); void* sys_getcallerpc(void*); /* - * runtime + * runtime go-called */ void sys_printbool(bool); void sys_printfloat(float64); |
