CodeTools::AST << {

BlockArgument < Node {
  node_type blkarg
  field body

  bytecode: |g| {
    self.body.bytecode(g)

    done_label = g.new_label
    g.dup
    g.is_nil
    g.goto_if_true(done_label)

    g.push_cpath_top; g.find_const(:Proc)
      g.swap
    g.send(:__from_block__, 1)

    done_label.set!
  }
}

}