void runtime·chanrecv1(ChanType* t, Hchan* c, byte* elem) { #line 351 "/tmp/makerelease402042453/go/src/pkg/runtime/chan.goc" chanrecv(t, c, elem, true, nil); }
void runtime·chanrecv1(ChanType* t, Hchan* c, byte* elem) { #line 353 "/home/14/ren/source/golang/go/src/pkg/runtime/chan.goc" chanrecv(t, c, elem, true, nil); }
int tchansleep( Chan *c, uvlong nsec ) { tchanset(c, nsec); return chanrecv(c, nil); }
int main(void) { int i, nprocs, procn[Nproc]; fail = 0; nprocs = 0; ch = chancreate(1000, sizeof(int)); if(ch == nil){ fail = 1; printf("chancreate failed\n"); } for(i = 0; i < Nproc; ++i){ procn[i] = i + 1; if(proccreate(f, &procn[i], 0) == nil){ fail = 1; printf("proccreate failed\n"); }else{ nprocs++; } } for(i = 0; i < nprocs; ++i){ int n; if(chanrecv(ch, &n) != 1){ fail = 1; printf("recv error\n"); } } chanfree(ch); return fail; }
// For reflect: // func chanrecv(c chan, nb bool) (val iword, selected, received bool) // where an iword is the same word an interface value would use: // the actual data if it fits, or else a pointer to the data. void reflect·chanrecv(ChanType *t, Hchan *c, bool nb, uintptr val, bool selected, bool received) { byte *vp; bool *sp; if(nb) { selected = false; sp = &selected; } else { selected = true; FLUSH(&selected); sp = nil; } received = false; FLUSH(&received); if(t->elem->size <= sizeof(val)) { val = 0; vp = (byte*)&val; } else { vp = runtime·mal(t->elem->size); val = (uintptr)vp; FLUSH(&val); } runtime·chanrecv(t, c, vp, sp, &received); }
void* chanrecvp(Channel *c) { void* pointer = NULL; chanrecv(c, &pointer); return pointer; }
// func selectnbrecv(elem *any, c chan any) bool // // compiler implements // // select { // case v = <-c: // ... foo // default: // ... bar // } // // as // // if selectnbrecv(&v, c) { // ... foo // } else { // ... bar // } // _Bool runtime_selectnbrecv(ChanType *t, byte *v, Hchan *c) { bool selected; selected = chanrecv(t, c, v, false, nil); return (_Bool)selected; }
_Bool runtime_chanrecv2(ChanType *t, Hchan* c, byte* v) { bool received = false; chanrecv(t, c, v, true, &received); return received; }
void runtime·chanrecv2(ChanType *t, Hchan* c, ...) { byte *ae, *ap; ae = (byte*)(&c+1); ap = ae + t->elem->size; runtime·chanrecv(t, c, ae, nil, ap); }
void runtime·chanrecv2(ChanType* t, Hchan* c, byte* elem, bool received) { received = 0; FLUSH(&received); #line 357 "/tmp/makerelease402042453/go/src/pkg/runtime/chan.goc" chanrecv(t, c, elem, true, &received); FLUSH(&received); }
void runtime·selectnbrecv2(ChanType* t, byte* elem, bool* received, Hchan* c, bool selected) { selected = 0; FLUSH(&selected); #line 423 "/tmp/makerelease402042453/go/src/pkg/runtime/chan.goc" selected = chanrecv(t, c, elem, false, received); FLUSH(&selected); }
void runtime·selectnbrecv2(ChanType* t, byte* elem, bool* received, Hchan* c, bool selected) { selected = 0; FLUSH(&selected); #line 425 "/home/14/ren/source/golang/go/src/pkg/runtime/chan.goc" selected = chanrecv(t, c, elem, false, received); FLUSH(&selected); }
void runtime·chanrecv2(ChanType* t, Hchan* c, byte* elem, bool received) { received = 0; FLUSH(&received); #line 359 "/home/14/ren/source/golang/go/src/pkg/runtime/chan.goc" chanrecv(t, c, elem, true, &received); FLUSH(&received); }
// func selectnbrecv2(elem *any, ok *bool, c chan any) bool // // compiler implements // // select { // case v, ok = <-c: // ... foo // default: // ... bar // } // // as // // if c != nil && selectnbrecv2(&v, &ok, c) { // ... foo // } else { // ... bar // } // _Bool runtime_selectnbrecv2(ChanType *t, byte *v, _Bool *received, Hchan *c) { bool selected; bool r; r = false; selected = chanrecv(t, c, v, false, received == nil ? nil : &r); if(received != nil) *received = r; return selected; }
void reflect·chanrecv(ChanType* t, Hchan* c, bool nb, byte* elem, bool selected, bool received) { selected = 0; FLUSH(&selected); received = 0; FLUSH(&received); #line 432 "/tmp/makerelease402042453/go/src/pkg/runtime/chan.goc" received = false; selected = chanrecv(t, c, elem, !nb, &received); FLUSH(&selected); FLUSH(&received); }
void reflect·chanrecv(ChanType* t, Hchan* c, bool nb, byte* elem, bool selected, bool received) { selected = 0; FLUSH(&selected); received = 0; FLUSH(&received); #line 434 "/home/14/ren/source/golang/go/src/pkg/runtime/chan.goc" received = false; selected = chanrecv(t, c, elem, !nb, &received); FLUSH(&selected); FLUSH(&received); }
// The compiler generates a call to __go_receive to receive a // value from a channel. void __go_receive(ChanType *t, Hchan* c, byte* v) { chanrecv(t, c, v, true, nil); }
void runtime·selectnbrecv(ChanType *t, byte *v, Hchan *c, bool selected) { runtime·chanrecv(t, c, v, &selected, nil); }
void runtime·chanrecv1(ChanType *t, Hchan* c, ...) { runtime·chanrecv(t, c, (byte*)(&c+1), nil, nil); }
void runtime·selectnbrecv2(ChanType *t, byte *v, bool *received, Hchan *c, bool selected) { runtime·chanrecv(t, c, v, &selected, received); }