CodeTools::AST << {

PipeOperator < Node {
  node_type pipe_op
  field value, field invoke

  implementation_args: ArgumentAssembly.new(
    line: self.line
    body: [self.value] + (self.invoke.arguments.?body ?? [])
  )

  implementation: Invoke.new(
    line:         self.line
    receiver:     self.invoke.receiver
    name:         self.invoke.name
    arguments:    self.implementation_args
    block:        self.invoke.block
  )

  bytecode: |g| implementation.bytecode(g)
}

}