From: Russ Cox Date: Tue, 30 Sep 2008 21:02:53 +0000 (-0700) Subject: for loops in hashmap. X-Git-Tag: weekly.2009-11-06~3072 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1f1ae404f81af785dd139d955c959ba698decd18;p=gostls13.git for loops in hashmap. a few missing FLUSH. R=ken OCL=16221 CL=16221 --- diff --git a/src/runtime/iface.c b/src/runtime/iface.c index 31d1ae1a33..9aa80a4220 100644 --- a/src/runtime/iface.c +++ b/src/runtime/iface.c @@ -131,44 +131,34 @@ hashmap(Sigi *si, Sigt *st) m->sigi = si; m->sigt = st; - ni = 1; // skip first word nt = 0; - -loop1: - // pick up next name from - // interface signature - iname = si[ni].name; - if(iname == nil) { - m->link = hash[h]; - hash[h] = m; - // prints("new hashmap\n"); - return m; - } - ihash = si[ni].hash; - -loop2: - // pick up and comapre next name - // from structure signature - sname = st[nt].name; - if(sname == nil) { - prints((int8*)iname); - prints(": "); - throw("hashmap: failed to find method"); - m->bad = 1; - m->link = hash[h]; - hash[h] = m; - return nil; - } - - if(ihash != st[nt].hash || - strcmp(sname, iname) != 0) { - nt++; - goto loop2; + for(ni=1; (iname=si[ni].name) != nil; ni++) { // ni=1: skip first word + // pick up next name from + // interface signature + ihash = si[ni].hash; + + for(;; nt++) { + // pick up and compare next name + // from structure signature + sname = st[nt].name; + if(sname == nil) { + prints((int8*)iname); + prints(": "); + throw("hashmap: failed to find method"); + m->bad = 1; + m->link = hash[h]; + hash[h] = m; + return nil; + } + if(ihash == st[nt].hash && strcmp(sname, iname) == 0) + break; + } + m->fun[si[ni].perm] = st[nt].fun; } - - m->fun[si[ni].perm] = st[nt].fun; - ni++; - goto loop1; + m->link = hash[h]; + hash[h] = m; + // prints("new hashmap\n"); + return m; } // ifaceT2I(sigi *byte, sigt *byte, elem any) (ret any); @@ -196,6 +186,7 @@ sys·ifaceT2I(Sigi *si, Sigt *st, void *elem, Map *retim, void *retit) } FLUSH(&retim); + FLUSH(&retit); } // ifaceI2T(sigt *byte, iface any) (ret any); @@ -257,6 +248,7 @@ sys·ifaceI2I(Sigi *si, Map *im, void *it, Map *retim, void *retit) } FLUSH(&retim); + FLUSH(&retit); } void