crystal-os | 91557d4ee689e8abc69cf171e8431bbc36021053 | prelude/crystal_core/proc.cr ∙ GitFOSS
.cr
Crystal
(text/x-crystal)
# :nodoc:
struct Proc
  def self.new(pointer : Void*, closure_data : Void*)
    func = {pointer, closure_data}
    ptr = pointerof(func).as(self*)
    ptr.value
  end

  def pointer
    internal_representation[0]
  end

  def closure_data
    internal_representation[1]
  end

  def closure?
    !closure_data.null?
  end

  private def internal_representation
    func = self
    ptr = pointerof(func).as({Void*, Void*}*)
    ptr.value
  end
end