@@ -295,95 +295,95 @@ void c_yield(Stack stack) {
295
295
c_timer_start (0 , stack );
296
296
}
297
297
298
- // Channels
298
+ // Signals
299
299
// --------
300
300
301
- typedef enum { EMPTY , SENDED , WAITED } channel_state_t ;
301
+ typedef enum { EMPTY , SENDED , WAITED } signal_state_t ;
302
302
303
303
typedef struct {
304
304
uint64_t rc ;
305
305
void * eraser ;
306
- channel_state_t state ;
306
+ signal_state_t state ;
307
307
union {
308
308
struct Pos value ;
309
309
Stack stack ;
310
310
} payload ;
311
- } Channel ;
311
+ } Signal ;
312
312
313
- void c_channel_erase (void * envPtr ) {
314
- // envPtr points to a Channel _after_ the eraser, so let's adjust it to point to the beginning.
315
- Channel * channel = (Channel * ) (envPtr - offsetof(Channel , state ));
316
- channel_state_t state = channel -> state ;
313
+ void c_signal_erase (void * envPtr ) {
314
+ // envPtr points to a Signal _after_ the eraser, so let's adjust it to point to the beginning.
315
+ Signal * signal = (Signal * ) (envPtr - offsetof(Signal , state ));
316
+ signal_state_t state = signal -> state ;
317
317
switch (state ) {
318
318
case EMPTY :
319
319
break ;
320
320
case SENDED :
321
- erasePositive (channel -> payload .value );
321
+ erasePositive (signal -> payload .value );
322
322
break ;
323
323
case WAITED :
324
- eraseStack (channel -> payload .stack );
324
+ eraseStack (signal -> payload .stack );
325
325
break ;
326
326
}
327
327
}
328
328
329
- struct Pos c_channel_make () {
330
- Channel * channel = (Channel * )malloc (sizeof (Channel ));
329
+ struct Pos c_signal_make () {
330
+ Signal * signal = (Signal * )malloc (sizeof (Signal ));
331
331
332
- channel -> rc = 0 ;
333
- channel -> eraser = c_channel_erase ;
334
- channel -> state = EMPTY ;
332
+ signal -> rc = 0 ;
333
+ signal -> eraser = c_signal_erase ;
334
+ signal -> state = EMPTY ;
335
335
336
- return (struct Pos ) { .tag = 0 , .obj = channel , };
336
+ return (struct Pos ) { .tag = 0 , .obj = signal , };
337
337
}
338
338
339
- void c_channel_send (struct Pos channel , struct Pos value ) {
340
- Channel * f = (Channel * ) channel .obj ;
339
+ void c_signal_send (struct Pos signal , struct Pos value ) {
340
+ Signal * f = (Signal * ) signal .obj ;
341
341
switch (f -> state ) {
342
342
case EMPTY : {
343
343
f -> state = SENDED ;
344
344
f -> payload .value = value ;
345
- erasePositive (channel );
345
+ erasePositive (signal );
346
346
break ;
347
347
}
348
348
case SENDED : {
349
- erasePositive (channel );
349
+ erasePositive (signal );
350
350
erasePositive (value );
351
351
// TODO more graceful panic
352
- fprintf (stderr , "ERROR: Channel already used for sending\n" );
352
+ fprintf (stderr , "ERROR: Signal already used for sending\n" );
353
353
exit (1 );
354
354
break ;
355
355
}
356
356
case WAITED : {
357
357
Stack stack = f -> payload .stack ;
358
358
f -> state = EMPTY ;
359
- erasePositive (channel );
359
+ erasePositive (signal );
360
360
resume_Pos (stack , value );
361
361
break ;
362
362
}
363
363
}
364
364
}
365
365
366
- void c_channel_wait (struct Pos channel , Stack stack ) {
367
- Channel * f = (Channel * ) channel .obj ;
366
+ void c_signal_wait (struct Pos signal , Stack stack ) {
367
+ Signal * f = (Signal * ) signal .obj ;
368
368
switch (f -> state ) {
369
369
case EMPTY : {
370
370
f -> state = WAITED ;
371
371
f -> payload .stack = stack ;
372
- erasePositive (channel );
372
+ erasePositive (signal );
373
373
break ;
374
374
}
375
375
case SENDED : {
376
376
struct Pos value = f -> payload .value ;
377
377
f -> state = EMPTY ;
378
- erasePositive (channel );
378
+ erasePositive (signal );
379
379
resume_Pos (stack , value );
380
380
break ;
381
381
}
382
382
case WAITED : {
383
- erasePositive (channel );
383
+ erasePositive (signal );
384
384
eraseStack (stack );
385
385
// TODO more graceful panic
386
- fprintf (stderr , "ERROR: Channel already used for waiting\n" );
386
+ fprintf (stderr , "ERROR: Signal already used for waiting\n" );
387
387
exit (1 );
388
388
break ;
389
389
}
0 commit comments