mirror of
https://github.com/mistergibson/gxg-web-client.git
synced 2026-08-15 11:34:29 -07:00
43 lines
824 B
Ruby
43 lines
824 B
Ruby
class Continuation
|
|
# def self.create(task=nil)
|
|
# cont = self.allocate
|
|
# cont.setup(task)
|
|
# cont
|
|
# end
|
|
#
|
|
# def setup(task=nil)
|
|
# @task = task
|
|
# @value = nil
|
|
# end
|
|
#
|
|
# def call(*value)
|
|
# task = @task.dup
|
|
# if value.empty?
|
|
# @value = nil
|
|
# elsif value.size == 1
|
|
# @value = value.pop
|
|
# else
|
|
# @value = value
|
|
# end
|
|
# Rubinius::Task.current = task
|
|
# end
|
|
#
|
|
# alias_method :[], :call
|
|
end
|
|
|
|
module Kernel
|
|
def callcc
|
|
raise NotImplementedError, "call/cc is not implemented!"
|
|
# cont = Continuation.create
|
|
# # Task#dup appears as though it returns nil in the dup'd
|
|
# # task, kinda like fork().
|
|
# task = Rubinius::Task.current.dup
|
|
# if task
|
|
# cont.task = task
|
|
# yield cont
|
|
# else
|
|
# return cont.value
|
|
# end
|
|
end
|
|
module_function :callcc
|
|
end
|