Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
int
tchansleep( Chan *c,
            uvlong nsec )
{
    tchanset(c, nsec);
    return chanrecv(c, nil);
}
Пример #4
0
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;
}
Пример #5
0
// 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);
}
Пример #6
0
void*
chanrecvp(Channel *c)
{
	void* pointer = NULL;
	chanrecv(c, &pointer);
	return pointer;
}
Пример #7
0
// 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;
}
Пример #8
0
_Bool
runtime_chanrecv2(ChanType *t, Hchan* c, byte* v)
{
	bool received = false;

	chanrecv(t, c, v, true, &received);
	return received;
}
Пример #9
0
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);
}
Пример #10
0
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);
}
Пример #11
0
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);
}
Пример #12
0
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);
}
Пример #13
0
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);
}
Пример #14
0
// 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;
}
Пример #15
0
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);
}
Пример #16
0
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);
}
Пример #17
0
// 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);
}
Пример #18
0
void
runtime·selectnbrecv(ChanType *t, byte *v, Hchan *c, bool selected)
{
	runtime·chanrecv(t, c, v, &selected, nil);
}
Пример #19
0
void
runtime·chanrecv1(ChanType *t, Hchan* c, ...)
{
	runtime·chanrecv(t, c, (byte*)(&c+1), nil, nil);
}
Пример #20
0
void
runtime·selectnbrecv2(ChanType *t, byte *v, bool *received, Hchan *c, bool selected)
{
	runtime·chanrecv(t, c, v, &selected, received);
}