class AST::Node

def initialize(type, children=[], properties={})

The `properties` hash is passed to {#assign_properties}.

your code does not expect the argument to be frozen, use `#dup`.
the most common case is to pass an array literal to the constructor. If
is frozen. While mutating the arguments is generally considered harmful,
`to_a` respectively. Additionally, the result of converting `children`
The arguments `type` and `children` are converted with `to_sym` and

Constructs a new instance of Node.
def initialize(type, children=[], properties={})
  @type, @children = type.to_sym, children.to_a.freeze
  assign_properties(properties)
  @hash = [@type, @children, self.class].hash
  freeze
end