Temporary tag for this failure. Updated CI spec coming.
[rbx.git] / kernel / bootstrap / channel.rb
blobfa7c297d2a2ef1c8ebfea079a3f928299a20dadc
1 class Channel
2   ivar_as_index :waiting => 1, :value => 2
3   def waiting; @waiting ; end
4   def value  ; @value   ; end
5   
6   def self.new
7     Ruby.primitive :channel_new
8     raise PrimitiveFailure, "primitive failed"
9   end
11   def send(obj)
12     Ruby.primitive :channel_send
13     raise PrimitiveFailure, "primitive failed"
14   end
16   def receive
17     Ruby.primitive :channel_receive
18     raise PrimitiveFailure, "primitive failed"
19   end
21   def self.convert_to_channel(obj)
22     return obj if Channel === obj
23     begin
24       o2 = obj.to_channel
25       unless Channel === o2
26         raise ArgumentError, "to_channel on #{obj.inspect} did not return a Channel"
27       end
28       return o2
29     rescue NoMethodError
30        raise ArgumentError, "Unable to convert #{obj.inspect} into a channel"
31     end
32   end
34   def self.receive(*ary)
35     if ary.size == 1
36       return convert_to_channel(ary.shift).receive
37     else
38       na = ary.map { |c| convert_to_channel(c) }
39       receive_many(na)
40     end
41   end
43   def to_channel
44     self
45   end
46 end